AudioTransportSource setSource not working when it is run a second time


#1

Hi all,

I found this issue in another thread: PlayingSoundFiles tutorial - setSource method on the AudioTransportSource for seconds time leads to EXC_BAD_ACCESS

In my case I have a method where it determines the correct file to play based on parameters, then plays the audio file. However, when I run setSource a second time it seems to fail. Is there something that I’m doing wrong? If so please suggest alternatives to resolve my issue.

Thanks


#2

Hard to say whether you’re doing anything wrong without knowing more… Try actually debugging what happens and it might become obvious what’s wrong?


#3

As it says in the thread that I linked, it seems to throw a EXC_BAD_ACCESS error when it tries to run the “releaseResource()” method, That is where I traced the issue to as well:

"All I could understand is that it seems like it fails to find an AudioSource to delete at some point in the setSource method, in juce_ResamplingAudioSource.cpp at:

void ResamplingAudioSource::releaseResources()
{
input->releaseResources();
buffer.setSize (numChannels, 0);
}"


#4

Well that’s a dangling pointer - you’re probably doubly-deleting the input source yourself or something.


#5

Hi Owen,

The tutorial was fixed:
https://www.juce.com/doc/tutorial_playing_sound_files#tutorial_playing_sound_files_opening_a_file

Fabian explains the issue here:

Hope that helps in your use case.


#6

Martin,

Thank you so much that was exactly what I needed. I fixed my issue with the statement transportSource.setSource(nullptr); before I added a new scoped pointer.