Hello there!
I’m trying to export the audiostream from my Synthesiser to a wavfile.
But an EXC_BAD_ACCESS signal is sent to me at the same moment (near startsample = 2028) during the export. It comes from AudioSource::renderNextBlock at this line :
if (numThisTime > 0)
{
for (int i = voices.size(); --i >= 0;)
voices.getUnchecked (i)->renderNextBlock (outputBuffer, startSample, numThisTime); //OVER HERE
}
Here is my ExportWavFile method :
[code]void SynthAudioSource::ExportWavFile(const File& file)
{
mIsExporting = true;
MidiBuffer midibuffer;
uint startsample = 0;
uint endsample = 0;
uint numSamples = mSeq.GetLengthPatternInFrames();
FileOutputStream* fos = new FileOutputStream(file);
AudioFormatWriter* wavwriter = WavAudioFormat().createWriterFor(fos, 44100, 2, 16, StringPairArray(), 0);
AudioSampleBuffer audiobuffer(2, numSamples);
if(startsample + 1024 <= numSamples)
{
endsample += 1024;
}
else
{
endsample = numSamples - startsample;
}
while (startsample < numSamples)
{
//Fill the midibuffer with NoteOn and NoteOff events raise from the Sequencer
mSeq.ExportWavFile(startsample, endsample, midibuffer);
//Synthesiser renders midibuffer’s events
mSynth.renderNextBlock(audiobuffer, midibuffer, startsample, endsample);
//Write audiobuffer into the FOS
audiobuffer.writeToAudioWriter(wavwriter, startsample, endsample);
midibuffer.clear();
startsample += 1024;
if(startsample + 1024 <= numSamples)
{
endsample += 1024;
}
else
{
endsample = numSamples - startsample;
}
}
[/code]
mSeq.ExportWavFile looks like mSeq.Process (without some useless stuffs in this case like asynchronous GUI events) that i’m using in the AudioSource::getNextAudioBlock callback (and it’s working well for two months) :
[code]void SynthAudioSource::getNextAudioBlock(const AudioSourceChannelInfo& bufferToFill)
{
bufferToFill.clearActiveBufferRegion();
if(!mIsExporting)
{
MidiBuffer incomingMidi;
mMidiCollector.removeNextBlockOfMessages(incomingMidi, bufferToFill.numSamples);
mSeq.Process(bufferToFill.numSamples, incomingMidi);
mSynth.renderNextBlock (*bufferToFill.buffer, incomingMidi, 0, bufferToFill.numSamples);
}
}
[/code]
I block this calback when I’m exporting the wav file, to be safer, and they have the same numSample (1024).
I really don’t understand what is happening.
Any ideas ?
Thanks.