/* ============================================================================== HarmoniumAudioSource.cpp Created: 3 Dec 2019 9:09:18pm Author: Anantha Girijavallabhan ============================================================================== */ #include "HarmoniumAudioSource.h" HarmoniumAudioSource::HarmoniumAudioSource (MidiKeyboardState& keyState) : keyboardState(keyState) { for (int i = 0; i < 8; i++) { samplerSynth.addVoice (new SamplerVoice ()); } } void HarmoniumAudioSource::setUsingHarmoniumSample () { AiffAudioFormat aifFormat; auto fileName = "Harmonium.aif"; auto parentDirectory = File::getSpecialLocation (File::SpecialLocationType::currentApplicationFile).getParentDirectory (); while(parentDirectory.getFileName () != "SDARagaTutor") { parentDirectory = parentDirectory.getParentDirectory (); } auto sampleFile = parentDirectory.getChildFile ("Samples").getChildFile (fileName); std::unique_ptr audioReader (aifFormat.createReaderFor(sampleFile.createInputStream(), true)); BigInteger allNotes; allNotes.setRange (0, 128, true); samplerSynth.clearSounds(); samplerSynth.addSound ( new SamplerSound ("Harmonium", *audioReader, allNotes, 61, 0.4, 0.1, 10.0)); } void HarmoniumAudioSource::prepareToPlay (int samplesPerBlockExpected, double sampleRate) { midiMessageCollector.reset (sampleRate); samplerSynth.setCurrentPlaybackSampleRate (sampleRate); } void HarmoniumAudioSource::releaseResources () { } void HarmoniumAudioSource::getNextAudioBlock (const AudioSourceChannelInfo &bufferToFill) { bufferToFill.clearActiveBufferRegion (); MidiBuffer incomingMidi; int startSample = bufferToFill.startSample; int numSamples = bufferToFill.numSamples; midiMessageCollector.removeNextBlockOfMessages (incomingMidi, bufferToFill.numSamples); keyboardState.processNextMidiBuffer (incomingMidi, startSample, numSamples, true); samplerSynth.renderNextBlock (*bufferToFill.buffer, incomingMidi, startSample, numSamples); }