I am trying so hard to play two or more audio files at the same time using Juce. So far I have made my own class called TransportMixerAudioSource, and in it I extended MixerAudioSource for Transport Sources to be accepted. However, I am getting an error in the getNextAudioBlock Method. The Code is as follows:
ERROR:
//========================================
//Section [2] -- Playing Audio Helper Methods
void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override {
mixer.prepareToPlay (samplesPerBlockExpected, sampleRate);
}
void releaseResources() override {
mixer.releaseResources();
}
void getNextAudioBlock (const juce::AudioSourceChannelInfo& bufferToFill) override {
if(rowNumSelected != 0){
if (readerSource.get() == nullptr){
bufferToFill.clearActiveBufferRegion();
return;
}
mixer.getNextAudioBlock(bufferToFill);
}
}
//========================================
bool keyPressed(const KeyPress &k, Component *c) override {
//Subsection [g] -- Method Part (a) to Play Cue when selected and pressed
if( k.getKeyCode() == juce::KeyPress::spaceKey ) {
auto file = getAttributeFileForRowId(rowNumSelected-1);
auto* reader = formatManager.createReaderFor (file);
if (reader != nullptr) {
std::unique_ptr<juce::AudioFormatReaderSource> newSource (new juce::AudioFormatReaderSource (reader, true));
AudioTransportSource* newCue = new AudioTransportSource();
newCue->setSource(newSource.get(), 0, nullptr, reader->sampleRate);
mixer.addInputSource(newCue, false);
readerSource.reset (newSource.release());
}
if(isPlaying)
mixer.stop();
mixer.start();
file = "";
reader = nullptr;
table.selectRow(rowNumSelected, false, true);
isPlaying = true;
return true;
}
//Subsection [h] -- Method Part (b) to Stop Cue when selected and pressed
if( k.getKeyCode() == juce::KeyPress::escapeKey ) {
mixer.stop();
isPlaying = false;
return true;
}
return false;
}
//===============================================
This is the TransportMixerAudioSource