mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
AudioSynthesiserDemo: Show output rather than input in waveform view
This commit is contained in:
parent
28ad953a3a
commit
f21bc3f4ae
1 changed files with 50 additions and 14 deletions
|
|
@ -55,8 +55,6 @@
|
|||
/** Our demo synth sound is just a basic sine wave.. */
|
||||
struct SineWaveSound : public SynthesiserSound
|
||||
{
|
||||
SineWaveSound() {}
|
||||
|
||||
bool appliesToNote (int /*midiNoteNumber*/) override { return true; }
|
||||
bool appliesToChannel (int /*midiChannel*/) override { return true; }
|
||||
};
|
||||
|
|
@ -65,8 +63,6 @@ struct SineWaveSound : public SynthesiserSound
|
|||
/** Our demo synth voice just plays a sine wave.. */
|
||||
struct SineWaveVoice : public SynthesiserVoice
|
||||
{
|
||||
SineWaveVoice() {}
|
||||
|
||||
bool canPlaySound (SynthesiserSound* sound) override
|
||||
{
|
||||
return dynamic_cast<SineWaveSound*> (sound) != nullptr;
|
||||
|
|
@ -241,6 +237,51 @@ struct SynthAudioSource : public AudioSource
|
|||
Synthesiser synth;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class Callback : public AudioIODeviceCallback
|
||||
{
|
||||
public:
|
||||
Callback (AudioSourcePlayer& playerIn, LiveScrollingAudioDisplay& displayIn)
|
||||
: player (playerIn), display (displayIn) {}
|
||||
|
||||
void audioDeviceIOCallbackWithContext (const float* const* inputChannelData,
|
||||
int numInputChannels,
|
||||
float* const* outputChannelData,
|
||||
int numOutputChannels,
|
||||
int numSamples,
|
||||
const AudioIODeviceCallbackContext& context) override
|
||||
{
|
||||
player.audioDeviceIOCallbackWithContext (inputChannelData,
|
||||
numInputChannels,
|
||||
outputChannelData,
|
||||
numOutputChannels,
|
||||
numSamples,
|
||||
context);
|
||||
display.audioDeviceIOCallbackWithContext (outputChannelData,
|
||||
numOutputChannels,
|
||||
nullptr,
|
||||
0,
|
||||
numSamples,
|
||||
context);
|
||||
}
|
||||
|
||||
void audioDeviceAboutToStart (AudioIODevice* device) override
|
||||
{
|
||||
player.audioDeviceAboutToStart (device);
|
||||
display.audioDeviceAboutToStart (device);
|
||||
}
|
||||
|
||||
void audioDeviceStopped() override
|
||||
{
|
||||
player.audioDeviceStopped();
|
||||
display.audioDeviceStopped();
|
||||
}
|
||||
|
||||
private:
|
||||
AudioSourcePlayer& player;
|
||||
LiveScrollingAudioDisplay& display;
|
||||
};
|
||||
|
||||
//==============================================================================
|
||||
class AudioSynthesiserDemo : public Component
|
||||
{
|
||||
|
|
@ -259,19 +300,13 @@ public:
|
|||
sampledButton.onClick = [this] { synthAudioSource.setUsingSampledSound(); };
|
||||
|
||||
addAndMakeVisible (liveAudioDisplayComp);
|
||||
audioDeviceManager.addAudioCallback (&liveAudioDisplayComp);
|
||||
audioSourcePlayer.setSource (&synthAudioSource);
|
||||
|
||||
#ifndef JUCE_DEMO_RUNNER
|
||||
RuntimePermissions::request (RuntimePermissions::recordAudio,
|
||||
[this] (bool granted)
|
||||
{
|
||||
int numInputChannels = granted ? 2 : 0;
|
||||
audioDeviceManager.initialise (numInputChannels, 2, nullptr, true, {}, nullptr);
|
||||
});
|
||||
audioDeviceManager.initialise (0, 2, nullptr, true, {}, nullptr);
|
||||
#endif
|
||||
|
||||
audioDeviceManager.addAudioCallback (&audioSourcePlayer);
|
||||
audioDeviceManager.addAudioCallback (&callback);
|
||||
audioDeviceManager.addMidiInputDeviceCallback ({}, &(synthAudioSource.midiCollector));
|
||||
|
||||
setOpaque (true);
|
||||
|
|
@ -282,8 +317,7 @@ public:
|
|||
{
|
||||
audioSourcePlayer.setSource (nullptr);
|
||||
audioDeviceManager.removeMidiInputDeviceCallback ({}, &(synthAudioSource.midiCollector));
|
||||
audioDeviceManager.removeAudioCallback (&audioSourcePlayer);
|
||||
audioDeviceManager.removeAudioCallback (&liveAudioDisplayComp);
|
||||
audioDeviceManager.removeAudioCallback (&callback);
|
||||
}
|
||||
|
||||
//==============================================================================
|
||||
|
|
@ -318,5 +352,7 @@ private:
|
|||
|
||||
LiveScrollingAudioDisplay liveAudioDisplayComp;
|
||||
|
||||
Callback callback { audioSourcePlayer, liveAudioDisplayComp };
|
||||
|
||||
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioSynthesiserDemo)
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue