releaseResources() : how to make my code rubust?


#1

I added in AudioDemo in the method void filenameComponentChanged (FilenameComponent*) after currentAudioFileSource = new AudioFormatReaderSource (reader, true);
the line audioSourcePlayer.setSource (currentAudioFileSource); But when quitting the app, I got an exception(-error/crash). The debugger stopps during the call oldSource->releaseResources(); form amalgamated

What did I wrong?

I just want to test, how to stream an (or my own modified) AudioSource directly with AudioSourcePlayer without using an AudioTransportSource.

thx


#2

Hard to tell from your description, but I’d guess that when it calls that releaseResources method, the source object it’s using will have already been deleted somewhere else.


#3

Do you have a hunch, where it could be deleted?

To be more precise, here the code, what I changed in JUCE-AudioDemo.cpp

[code] currentFile = audioFile;
currentAudioFileSource = new AudioFormatReaderSource (reader, true);

		   audioSourcePlayer.setSource (currentAudioFileSource); // This was added by me!
        
		// ..and plug it into our transport source
        //transportSource.setSource (currentAudioFileSource,
        //                           32768, // tells it to buffer this many samples ahead
        //                           reader->sampleRate);

[/code]


#4

Rather than asking us to guess what’s happening, why not just put a breakpoint in the class’s destructor, so that the debugger will show you exactly where it’s being deleted…


#5

Thats what I did. When oldSource->releaseResources(); is called by audioSourcePlayer.setSource (0) the debugger stops.


#6

OK, I got it!
I misread “setSource(0);” I mistakenly thought, I would call audioSources´s Member, but it was that from transportSource. So oldSource->releaseResources() was trying to release an object, which was previously deleted by deleteAndZero (currentAudioFileSource).