Chris@366: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@366: Chris@366: #ifndef FLATTENDYNAMICS_LADSPA_H Chris@366: #define FLATTENDYNAMICS_LADSPA_H Chris@366: Chris@366: #include Chris@366: Chris@366: class FlattenDynamics Chris@366: { Chris@366: public: Chris@366: static const LADSPA_Descriptor *getDescriptor(unsigned long index); Chris@366: Chris@366: enum Port { Chris@366: AudioInputPort = 0, Chris@366: AudioOutputPort = 1, Chris@366: GainOutputPort = 2, Chris@366: PortCount = 3, Chris@366: }; Chris@366: Chris@366: // Rest of the public interface is for use when constructing the Chris@366: // class directly, rather than through LADSPA Chris@366: Chris@366: FlattenDynamics(int sampleRate); Chris@366: ~FlattenDynamics(); Chris@366: Chris@366: void connectInputPort(Port p, const float *addr); Chris@366: void connectOutputPort(Port p, float *addr); Chris@366: void reset(); Chris@366: void process(int nsamples); Chris@366: Chris@366: private: Chris@366: static const char *const portNames[PortCount]; Chris@366: static const LADSPA_PortDescriptor ports[PortCount]; Chris@366: static const LADSPA_PortRangeHint hints[PortCount]; Chris@366: static const LADSPA_Properties properties; Chris@366: static const LADSPA_Descriptor ladspaDescriptor; Chris@366: Chris@366: static LADSPA_Handle ladspaInstantiate(const LADSPA_Descriptor *, unsigned long); Chris@366: static void ladspaConnectPort(LADSPA_Handle, unsigned long, LADSPA_Data *); Chris@366: static void ladspaActivate(LADSPA_Handle); Chris@366: static void ladspaRun(LADSPA_Handle, unsigned long); Chris@366: static void ladspaDeactivate(LADSPA_Handle); Chris@366: static void ladspaCleanup(LADSPA_Handle); Chris@366: Chris@366: float processSingle(float sample); Chris@366: void updateRMS(float); Chris@366: void updateParameters(); Chris@366: Chris@366: int m_sampleRate; Chris@366: const float *m_input; Chris@366: float *m_output; Chris@366: float *m_pgain; Chris@366: Chris@366: float *m_history; Chris@366: int m_histlen; Chris@366: int m_histwrite; Chris@366: int m_histread; Chris@366: Chris@366: double m_sumOfSquares; Chris@366: float m_rms; Chris@366: float m_maxRms; Chris@366: float m_gain; Chris@366: }; Chris@366: Chris@366: #endif