/* * Carla common LinuxSampler code * Copyright (C) 2012 Filipe Coelho * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * For a full copy of the GNU General Public License see the COPYING file */ #ifndef CARLA_LINUXSAMPLER_INCLUDES_H #define CARLA_LINUXSAMPLER_INCLUDES_H #include #include #include #include namespace LinuxSampler { class EngineFactory { public: static std::vector AvailableEngineTypes(); static String AvailableEngineTypesAsString(); static Engine* Create(String EngineType) throw (Exception); static void Destroy(Engine* pEngine); static const std::set& EngineInstances(); protected: static void Erase(Engine* pEngine); friend class Engine; }; #ifndef BUILD_NATIVE #include "carla_plugin.h" static const float VOLUME_MAX = 3.16227766f; // +10 dB static const float VOLUME_MIN = 0.0f; // -inf dB class AudioOutputDevicePlugin : public AudioOutputDevice { public: AudioOutputDevicePlugin(CarlaBackend::CarlaEngine* const engine, CarlaBackend::CarlaPlugin* const plugin) : AudioOutputDevice(std::map()), m_engine(engine), m_plugin(plugin) { } // ------------------------------------------------------------------- // LinuxSampler virtual methods void Play() { } bool IsPlaying() { return m_engine->isRunning() && m_plugin->enabled(); } void Stop() { } uint MaxSamplesPerCycle() { return m_engine->getBufferSize(); } uint SampleRate() { return m_engine->getSampleRate(); } String Driver() { return "AudioOutputDevicePlugin"; } AudioChannel* CreateChannel(uint channelNr) { return new AudioChannel(channelNr, nullptr, 0); } // ------------------------------------------------------------------- int Render(uint samples) { return RenderAudio(samples); } private: CarlaBackend::CarlaEngine* const m_engine; CarlaBackend::CarlaPlugin* const m_plugin; }; class MidiInputDevicePlugin : public MidiInputDevice { public: MidiInputDevicePlugin(Sampler* const sampler) : MidiInputDevice(std::map(), sampler) { } // ------------------------------------------------------------------- // LinuxSampler virtual methods void Listen() { } void StopListen() { } String Driver() { return "MidiInputDevicePlugin"; } MidiInputPort* CreateMidiPort() { return new MidiInputPortPlugin(this, Ports.size()); } // ------------------------------------------------------------------- void DeleteMidiPort(MidiInputPort* const port) { delete (MidiInputPortPlugin*)port; } // ------------------------------------------------------------------- // MIDI Port implementation for this plugin MIDI input driver class MidiInputPortPlugin : public MidiInputPort { protected: MidiInputPortPlugin(MidiInputDevicePlugin* const device, const int portNumber) : MidiInputPort(device, portNumber) { } friend class MidiInputDevicePlugin; }; }; #endif // ! BUILD_NATIVE } // namespace LinuxSampler #endif // CARLA_LINUXSAMPLER_INCLUDES_H