Skip to content

Commit

Permalink
Rename classes
Browse files Browse the repository at this point in the history
- AudioPluginInterface --> AudioPlugin
- detail::AudioProcessorImpl --> detail::AudioPlugin
- DefaultEffectPluginInterface --> DefaultEffect
- DefaultMidiInstrumentPluginInterface -> DefaultMidiInstrument
  • Loading branch information
messmerd committed Dec 31, 2024
1 parent b81546a commit 36c99d9
Show file tree
Hide file tree
Showing 57 changed files with 112 additions and 111 deletions.
57 changes: 29 additions & 28 deletions include/AudioPluginInterface.h → include/AudioPlugin.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
/*
* AudioPluginInterface.h - Interface for all audio plugins
* AudioPlugin.h - Interface for audio plugins which provides
* pin connector support and compile-time customizations
*
* Copyright (c) 2024 Dalton Messmer <messmer.dalton/at/gmail.com>
*
Expand All @@ -22,8 +23,8 @@
*
*/

#ifndef LMMS_AUDIO_PLUGIN_INTERFACE_H
#define LMMS_AUDIO_PLUGIN_INTERFACE_H
#ifndef LMMS_AUDIO_PLUGIN_H
#define LMMS_AUDIO_PLUGIN_H

#include "AudioData.h"
#include "AudioPluginBuffer.h"
Expand All @@ -48,7 +49,7 @@ enum class ProcessStatus
Sleep
};

//! Compile time customizations for `AudioPluginInterface` to meet the needs of a plugin implementation
//! Compile time customizations for `AudioPlugin` to meet the needs of a plugin implementation
struct PluginConfig
{
//! The audio data layout used by the plugin
Expand All @@ -73,7 +74,7 @@ namespace detail
{

//! Provides the correct `processImpl` interface for instruments or effects to implement
template<class ChildT, typename BufferT, typename ConstBufferT, bool inplace, bool customBuffer>
template<class ParentT, typename BufferT, typename ConstBufferT, bool inplace, bool customBuffer>
class AudioProcessingMethod;

//! Instrument specialization
Expand Down Expand Up @@ -158,16 +159,16 @@ class AudioProcessingMethod<Effect, BufferT, ConstBufferT, inplace, true>
virtual auto processImpl() -> ProcessStatus = 0;
};

//! Connects the core audio buses to the instrument or effect using the pin connector
template<class ChildT, typename SampleT, PluginConfig config>
class AudioProcessorImpl
//! Connects the core audio channels to the instrument or effect using the pin connector
template<class ParentT, typename SampleT, PluginConfig config>
class AudioPlugin
{
static_assert(always_false_v<ChildT>, "ChildT must be either Instrument or Effect");
static_assert(always_false_v<ParentT>, "ParentT must be either Instrument or Effect");
};

//! Instrument specialization
template<typename SampleT, PluginConfig config>
class AudioProcessorImpl<Instrument, SampleT, config>
class AudioPlugin<Instrument, SampleT, config>
: public Instrument
, public AudioProcessingMethod<Instrument,
typename AudioDataTypeSelector<config.layout, SampleT, config.inputs>::type,
Expand All @@ -178,14 +179,14 @@ class AudioProcessorImpl<Instrument, SampleT, config>
AudioPluginBufferDefaultImpl<config.layout, SampleT, config.inputs, config.outputs, config.inplace>>
{
public:
AudioProcessorImpl(const Plugin::Descriptor* desc, InstrumentTrack* parent = nullptr,
AudioPlugin(const Plugin::Descriptor* desc, InstrumentTrack* parent = nullptr,
const Plugin::Descriptor::SubPluginFeatures::Key* key = nullptr,
Instrument::Flags flags = Instrument::Flag::NoFlags)
: Instrument{desc, parent, key, flags}
, m_pinConnector{config.inputs, config.outputs, true, this}
{
connect(&m_pinConnector, &PluginPinConnector::pluginBuffersChanged,
this, &AudioProcessorImpl::updatePluginBuffers);
this, &AudioPlugin::updatePluginBuffers);
}

auto pinConnector() const -> const PluginPinConnector* final { return &m_pinConnector; }
Expand Down Expand Up @@ -236,10 +237,10 @@ class AudioProcessorImpl<Instrument, SampleT, config>
void playNoteImpl(NotePlayHandle* notesToPlay, CoreAudioDataMut inOut) final
{
/**
* NOTE: Only MIDI-based instruments are currently supported by AudioPluginInterface.
* NOTE: Only MIDI-based instruments are currently supported by AudioPlugin.
* NotePlayHandle-based instruments use buffers from their play handles, and more work
* would be needed to integrate that system with the AudioPluginBufferInterface system
* used by AudioPluginInterface. AudioPluginBufferInterface is also not thread-safe.
* used by AudioPlugin. AudioPluginBufferInterface is also not thread-safe.
*
* The `Instrument::playNote()` method is still called for MIDI-based instruments when
* notes are played, so this method is a no-op.
Expand All @@ -264,7 +265,7 @@ class AudioProcessorImpl<Instrument, SampleT, config>

//! Effect specialization
template<typename SampleT, PluginConfig config>
class AudioProcessorImpl<Effect, SampleT, config>
class AudioPlugin<Effect, SampleT, config>
: public Effect
, public AudioProcessingMethod<Effect,
typename AudioDataTypeSelector<config.layout, SampleT, config.inputs>::type,
Expand All @@ -275,13 +276,13 @@ class AudioProcessorImpl<Effect, SampleT, config>
AudioPluginBufferDefaultImpl<config.layout, SampleT, config.inputs, config.outputs, config.inplace>>
{
public:
AudioProcessorImpl(const Plugin::Descriptor* desc, Model* parent = nullptr,
AudioPlugin(const Plugin::Descriptor* desc, Model* parent = nullptr,
const Plugin::Descriptor::SubPluginFeatures::Key* key = nullptr)
: Effect{desc, parent, key}
, m_pinConnector{config.inputs, config.outputs, false, this}
{
connect(&m_pinConnector, &PluginPinConnector::pluginBuffersChanged,
this, &AudioProcessorImpl::updatePluginBuffers);
this, &AudioPlugin::updatePluginBuffers);
}

auto pinConnector() const -> const PluginPinConnector* final { return &m_pinConnector; }
Expand Down Expand Up @@ -383,7 +384,7 @@ class AudioProcessorImpl<Effect, SampleT, config>


/**
* AudioPluginInterface is the bridge connecting an Instrument/Effect base class used by the Core
* AudioPlugin is the bridge connecting an Instrument/Effect base class used by the Core
* with its derived class used by a plugin implementation.
*
* Pin connector routing and other common tasks are handled here to allow plugin implementations
Expand All @@ -397,33 +398,33 @@ class AudioProcessorImpl<Effect, SampleT, config>
*
* A `processImpl` interface method is provided which must be implemented by the plugin implementation.
*
* @param ChildT Either `Instrument` or `Effect`
* @param ParentT Either `Instrument` or `Effect`
* @param SampleT The plugin's sample type - i.e. float, double, int32_t, `SampleFrame`, etc.
* @param config Compile time configuration to customize `AudioPluginInterface`
* @param config Compile time configuration to customize `AudioPlugin`
*/
template<class ChildT, typename SampleT, PluginConfig config>
class AudioPluginInterface
: public detail::AudioProcessorImpl<ChildT, SampleT, config>
template<class ParentT, typename SampleT, PluginConfig config>
class AudioPlugin
: public detail::AudioPlugin<ParentT, SampleT, config>
{
static_assert(!std::is_const_v<SampleT>);
static_assert(!std::is_same_v<SampleT, SampleFrame>
|| ((config.inputs == 0 || config.inputs == 2) && (config.outputs == 0 || config.outputs == 2)),
"Don't use SampleFrame if more than 2 processor channels are needed");

using Base = detail::AudioProcessorImpl<ChildT, SampleT, config>;
using Base = detail::AudioPlugin<ParentT, SampleT, config>;

public:
using Base::AudioProcessorImpl;
using Base::AudioPlugin;
};

// NOTE: NotePlayHandle-based instruments are not supported yet
using DefaultMidiInstrumentPluginInterface = AudioPluginInterface<Instrument, SampleFrame,
using DefaultMidiInstrument = AudioPlugin<Instrument, SampleFrame,
PluginConfig{ .layout = AudioDataLayout::Interleaved, .inputs = 0, .outputs = 2, .inplace = true }>;

using DefaultEffectPluginInterface = AudioPluginInterface<Effect, SampleFrame,
using DefaultEffect = AudioPlugin<Effect, SampleFrame,
PluginConfig{ .layout = AudioDataLayout::Interleaved, .inputs = 2, .outputs = 2, .inplace = true }>;


} // namespace lmms

#endif // LMMS_AUDIO_PLUGIN_INTERFACE_H
#endif // LMMS_AUDIO_PLUGIN_H
4 changes: 2 additions & 2 deletions include/Instrument.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,10 @@ class LMMS_EXPORT Instrument : public Plugin


protected:
//! To be implemented by AudioPluginInterface or plugin implementation
//! To be implemented by AudioPlugin or plugin implementation
virtual void playImpl(CoreAudioDataMut out) {}

//! To be implemented by AudioPluginInterface or plugin implementation
//! To be implemented by AudioPlugin or plugin implementation
virtual void playNoteImpl(NotePlayHandle* notesToPlay, CoreAudioDataMut out) {}

// fade in to prevent clicks
Expand Down
2 changes: 1 addition & 1 deletion plugins/Amplifier/Amplifier.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ Plugin::Descriptor PLUGIN_EXPORT amplifier_plugin_descriptor =


AmplifierEffect::AmplifierEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key) :
AudioPluginInterface(&amplifier_plugin_descriptor, parent, key),
AudioPlugin(&amplifier_plugin_descriptor, parent, key),
m_ampControls(this)
{
}
Expand Down
4 changes: 2 additions & 2 deletions plugins/Amplifier/Amplifier.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,13 @@
#ifndef LMMS_AMPLIFIER_H
#define LMMS_AMPLIFIER_H

#include "AudioPluginInterface.h"
#include "AudioPlugin.h"
#include "AmplifierControls.h"

namespace lmms
{

class AmplifierEffect : public DefaultEffectPluginInterface
class AmplifierEffect : public DefaultEffect
{
public:
AmplifierEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key);
Expand Down
2 changes: 1 addition & 1 deletion plugins/BassBooster/BassBooster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ Plugin::Descriptor PLUGIN_EXPORT bassbooster_plugin_descriptor =


BassBoosterEffect::BassBoosterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ) :
AudioPluginInterface(&bassbooster_plugin_descriptor, parent, key),
AudioPlugin(&bassbooster_plugin_descriptor, parent, key),
m_frequencyChangeNeeded( false ),
m_bbFX( DspEffectLibrary::FastBassBoost( 70.0f, 1.0f, 2.8f ) ),
m_bbControls( this )
Expand Down
4 changes: 2 additions & 2 deletions plugins/BassBooster/BassBooster.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@
#ifndef BASS_BOOSTER_H
#define BASS_BOOSTER_H

#include "AudioPluginInterface.h"
#include "AudioPlugin.h"
#include "DspEffectLibrary.h"
#include "BassBoosterControls.h"

namespace lmms
{

class BassBoosterEffect : public DefaultEffectPluginInterface
class BassBoosterEffect : public DefaultEffect
{
public:
BassBoosterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key );
Expand Down
2 changes: 1 addition & 1 deletion plugins/Bitcrush/Bitcrush.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Plugin::Descriptor PLUGIN_EXPORT bitcrush_plugin_descriptor =
}

BitcrushEffect::BitcrushEffect( Model * parent, const Descriptor::SubPluginFeatures::Key * key ) :
AudioPluginInterface(&bitcrush_plugin_descriptor, parent, key),
AudioPlugin(&bitcrush_plugin_descriptor, parent, key),
m_controls( this ),
m_sampleRate( Engine::audioEngine()->outputSampleRate() ),
m_filter( m_sampleRate )
Expand Down
4 changes: 2 additions & 2 deletions plugins/Bitcrush/Bitcrush.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
#ifndef BITCRUSH_H
#define BITCRUSH_H

#include "AudioPluginInterface.h"
#include "AudioPlugin.h"
#include "BitcrushControls.h"
#include "BasicFilters.h"

Expand All @@ -36,7 +36,7 @@ namespace lmms
{


class BitcrushEffect : public DefaultEffectPluginInterface
class BitcrushEffect : public DefaultEffect
{
public:
BitcrushEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key );
Expand Down
2 changes: 1 addition & 1 deletion plugins/CarlaBase/Carla.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ CarlaInstrument::CarlaInstrument(InstrumentTrack* const instrumentTrack, const D
if (fHandle != nullptr && fDescriptor->activate != nullptr)
fDescriptor->activate(fHandle);

// we need a play-handle which cares for calling play(), TODO: Move responsibility for this to AudioPluginInterface
// we need a play-handle which cares for calling play(), TODO: Move responsibility for this to AudioPlugin
auto iph = new InstrumentPlayHandle(this, instrumentTrack);
Engine::audioEngine()->addPlayHandle( iph );

Expand Down
2 changes: 1 addition & 1 deletion plugins/Compressor/Compressor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Plugin::Descriptor PLUGIN_EXPORT compressor_plugin_descriptor =


CompressorEffect::CompressorEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key) :
AudioPluginInterface(&compressor_plugin_descriptor, parent, key),
AudioPlugin(&compressor_plugin_descriptor, parent, key),
m_compressorControls(this)
{
m_sampleRate = Engine::audioEngine()->outputSampleRate();
Expand Down
4 changes: 2 additions & 2 deletions plugins/Compressor/Compressor.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#ifndef COMPRESSOR_H
#define COMPRESSOR_H

#include "AudioPluginInterface.h"
#include "AudioPlugin.h"
#include "CompressorControls.h"

namespace lmms
Expand All @@ -35,7 +35,7 @@ namespace lmms

constexpr float COMP_LOG = -2.2f;

class CompressorEffect : public DefaultEffectPluginInterface
class CompressorEffect : public DefaultEffect
{
Q_OBJECT
public:
Expand Down
2 changes: 1 addition & 1 deletion plugins/CrossoverEQ/CrossoverEQ.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Plugin::Descriptor PLUGIN_EXPORT crossovereq_plugin_descriptor =


CrossoverEQEffect::CrossoverEQEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ) :
AudioPluginInterface(&crossovereq_plugin_descriptor, parent, key),
AudioPlugin(&crossovereq_plugin_descriptor, parent, key),
m_controls( this ),
m_sampleRate( Engine::audioEngine()->outputSampleRate() ),
m_lp1( m_sampleRate ),
Expand Down
4 changes: 2 additions & 2 deletions plugins/CrossoverEQ/CrossoverEQ.h
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@
#ifndef CROSSOVEREQ_H
#define CROSSOVEREQ_H

#include "AudioPluginInterface.h"
#include "AudioPlugin.h"
#include "CrossoverEQControls.h"
#include "BasicFilters.h"

namespace lmms
{


class CrossoverEQEffect : public DefaultEffectPluginInterface
class CrossoverEQEffect : public DefaultEffect
{
public:
CrossoverEQEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key );
Expand Down
2 changes: 1 addition & 1 deletion plugins/Delay/DelayEffect.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Plugin::Descriptor PLUGIN_EXPORT delay_plugin_descriptor =


DelayEffect::DelayEffect( Model* parent, const Plugin::Descriptor::SubPluginFeatures::Key* key ) :
AudioPluginInterface(&delay_plugin_descriptor, parent, key),
AudioPlugin(&delay_plugin_descriptor, parent, key),
m_delayControls( this )
{
m_delay = 0;
Expand Down
4 changes: 2 additions & 2 deletions plugins/Delay/DelayEffect.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
#ifndef DELAYEFFECT_H
#define DELAYEFFECT_H

#include "AudioPluginInterface.h"
#include "AudioPlugin.h"
#include "DelayControls.h"

namespace lmms
Expand All @@ -34,7 +34,7 @@ namespace lmms
class Lfo;
class StereoDelay;

class DelayEffect : public DefaultEffectPluginInterface
class DelayEffect : public DefaultEffect
{
public:
DelayEffect(Model* parent , const Descriptor::SubPluginFeatures::Key* key );
Expand Down
2 changes: 1 addition & 1 deletion plugins/Dispersion/Dispersion.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Plugin::Descriptor PLUGIN_EXPORT dispersion_plugin_descriptor =


DispersionEffect::DispersionEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key) :
AudioPluginInterface(&dispersion_plugin_descriptor, parent, key),
AudioPlugin(&dispersion_plugin_descriptor, parent, key),
m_dispersionControls(this),
m_sampleRate(Engine::audioEngine()->outputSampleRate()),
m_amountVal(0)
Expand Down
4 changes: 2 additions & 2 deletions plugins/Dispersion/Dispersion.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
#ifndef LMMS_DISPERSION_H
#define LMMS_DISPERSION_H

#include "AudioPluginInterface.h"
#include "AudioPlugin.h"
#include "DispersionControls.h"

#include "lmms_math.h"
Expand All @@ -36,7 +36,7 @@ namespace lmms

constexpr inline int MAX_DISPERSION_FILTERS = 999;

class DispersionEffect : public DefaultEffectPluginInterface
class DispersionEffect : public DefaultEffect
{
public:
DispersionEffect(Model* parent, const Descriptor::SubPluginFeatures::Key* key);
Expand Down
2 changes: 1 addition & 1 deletion plugins/DualFilter/DualFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ Plugin::Descriptor PLUGIN_EXPORT dualfilter_plugin_descriptor =


DualFilterEffect::DualFilterEffect( Model* parent, const Descriptor::SubPluginFeatures::Key* key ) :
AudioPluginInterface(&dualfilter_plugin_descriptor, parent, key),
AudioPlugin(&dualfilter_plugin_descriptor, parent, key),
m_dfControls( this )
{
m_filter1 = new BasicFilters<2>( Engine::audioEngine()->outputSampleRate() );
Expand Down
Loading

0 comments on commit 36c99d9

Please sign in to comment.