Skip to content

Instantly share code, notes, and snippets.

@Xenakios
Created October 21, 2019 17:32
Show Gist options
  • Select an option

  • Save Xenakios/53932df786409f84b4ff8359ea98f4cc to your computer and use it in GitHub Desktop.

Select an option

Save Xenakios/53932df786409f84b4ff8359ea98f4cc to your computer and use it in GitHub Desktop.
// .h
/*
==============================================================================
This file was auto-generated!
==============================================================================
*/
#pragma once
#include "../JuceLibraryCode/JuceHeader.h"
AudioProcessor* JUCE_CALLTYPE createPluginFilter();
class MainComponent : public AudioAppComponent
{
public:
//==============================================================================
MainComponent();
~MainComponent();
//==============================================================================
void prepareToPlay (int samplesPerBlockExpected, double sampleRate) override;
void getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill) override;
void releaseResources() override;
//==============================================================================
void paint (Graphics& g) override;
void resized() override;
private:
//==============================================================================
// Your private member variables go here...
std::unique_ptr<AudioProcessor> m_faust_dsp;
AudioBuffer<float> m_helper_buffer;
MidiBuffer m_midi_buffer;
std::unique_ptr<GenericAudioProcessorEditor> m_ed;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};
// .cpp
#include "MainComponent.h"
//==============================================================================
MainComponent::MainComponent()
{
m_faust_dsp = std::unique_ptr<AudioProcessor>(createPluginFilter());
m_ed = std::make_unique<GenericAudioProcessorEditor>(*m_faust_dsp);
addAndMakeVisible(m_ed.get());
auto& pars = m_faust_dsp->getParameters();
for (auto& par : pars)
Logger::writeToLog(par->getName(100));
setSize (800, 600);
// Some platforms require permissions to open input channels so request that here
if (RuntimePermissions::isRequired (RuntimePermissions::recordAudio)
&& ! RuntimePermissions::isGranted (RuntimePermissions::recordAudio))
{
RuntimePermissions::request (RuntimePermissions::recordAudio,
[&] (bool granted) { if (granted) setAudioChannels (2, 2); });
}
else
{
// Specify the number of input and output channels that we want to open
setAudioChannels (0, 2);
}
}
MainComponent::~MainComponent()
{
// This shuts down the audio device and clears the audio source.
shutdownAudio();
}
//==============================================================================
void MainComponent::prepareToPlay (int samplesPerBlockExpected, double sampleRate)
{
m_helper_buffer.setSize(2, samplesPerBlockExpected);
m_faust_dsp->prepareToPlay(sampleRate, samplesPerBlockExpected);
m_faust_dsp->setPlayConfigDetails(0, 1, 44100.0, 512);
}
void MainComponent::getNextAudioBlock (const AudioSourceChannelInfo& bufferToFill)
{
m_helper_buffer.setSize(2, bufferToFill.numSamples, false, false, true);
for (int i = 0; i < 2; ++i)
m_helper_buffer.copyFrom(i, 0, *bufferToFill.buffer, i, bufferToFill.startSample, bufferToFill.numSamples);
m_faust_dsp->processBlock(m_helper_buffer, m_midi_buffer);
for (int i = 0; i < 2; ++i)
bufferToFill.buffer->copyFrom(i, bufferToFill.startSample, m_helper_buffer, i, 0, bufferToFill.numSamples);
}
void MainComponent::releaseResources()
{
}
//==============================================================================
void MainComponent::paint (Graphics& g)
{
g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId));
}
void MainComponent::resized()
{
m_ed->setBounds(0, 0, getWidth(), getHeight());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment