|  | /*
 * Carla common LinuxSampler code
 * Copyright (C) 2012 Filipe Coelho <falktx@falktx.com>
 *
 * 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 <linuxsampler/engines/Engine.h>
#include <linuxsampler/Sampler.h>
#include <set>
#include <vector>
namespace LinuxSampler {
class EngineFactory
{
public:
    static std::vector<String> AvailableEngineTypes();
    static String AvailableEngineTypesAsString();
    static Engine* Create(String EngineType) throw (Exception);
    static void Destroy(Engine* pEngine);
    static const std::set<Engine*>& 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<String, DeviceCreationParameter*>()),
        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<String, DeviceCreationParameter*>(), 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
 |