Browse Source

Start reworking linuxsampler code

tags/1.9.6
falkTX 10 years ago
parent
commit
38759cf502
1 changed files with 30 additions and 39 deletions
  1. +30
    -39
      source/backend/plugin/CarlaPluginLinuxSampler.cpp

+ 30
- 39
source/backend/plugin/CarlaPluginLinuxSampler.cpp View File

@@ -20,6 +20,8 @@
* - implement sample rate changes * - implement sample rate changes
* - call outDev->ReconnectAll() after changing buffer size or sample rate * - call outDev->ReconnectAll() after changing buffer size or sample rate
* - use CARLA_SAFE_ASSERT_RETURN with err * - use CARLA_SAFE_ASSERT_RETURN with err
* - pianoteq-like SetNoteOnVelocityFilter drawing points widget
* - voice count param
*/ */
#include "CarlaPluginInternal.hpp" #include "CarlaPluginInternal.hpp"
#include "CarlaEngine.hpp" #include "CarlaEngine.hpp"
@@ -99,7 +101,7 @@ public:


// ------------------------------------------------------------------- // -------------------------------------------------------------------


bool isAutonomousDevice() override { return false; }
/* */ bool isAutonomousDevice() override { return false; }
static bool isAutonomousDriver() { return false; } static bool isAutonomousDriver() { return false; }


// ------------------------------------------------------------------- // -------------------------------------------------------------------
@@ -125,7 +127,7 @@ private:
class MidiInputPortPlugin : public MidiInputPort class MidiInputPortPlugin : public MidiInputPort
{ {
public: public:
MidiInputPortPlugin(MidiInputDevice* const device, const int portNum)
MidiInputPortPlugin(MidiInputDevice* const device, const int portNum = 0)
: MidiInputPort(device, portNum), : MidiInputPort(device, portNum),
leakDetector_MidiInputPortPlugin() {} leakDetector_MidiInputPortPlugin() {}


@@ -162,31 +164,14 @@ public:


// ------------------------------------------------------------------- // -------------------------------------------------------------------


bool isAutonomousDevice() override { return false; }
/* */ bool isAutonomousDevice() override { return false; }
static bool isAutonomousDriver() { return false; } static bool isAutonomousDriver() { return false; }


// ------------------------------------------------------------------- // -------------------------------------------------------------------


MidiInputPortPlugin* CreateMidiPortPlugin()
{
return new MidiInputPortPlugin(this, int(Ports.size()));
}

CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MidiInputDevicePlugin) CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MidiInputDevicePlugin)
}; };


// -----------------------------------------------------------------------
// SamplerPlugin

struct SamplerPlugin {
Sampler sampler;
MidiInputDevicePlugin midiIn;

SamplerPlugin()
: sampler(),
midiIn(&sampler) {}
};

} // namespace LinuxSampler } // namespace LinuxSampler


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
@@ -210,11 +195,12 @@ public:
fLabel(nullptr), fLabel(nullptr),
fMaker(nullptr), fMaker(nullptr),
fRealName(nullptr), fRealName(nullptr),
sSampler(),
fAudioOutputDevice(nullptr), fAudioOutputDevice(nullptr),
fMidiInputDevice(sSampler),
fMidiInputPort(nullptr), fMidiInputPort(nullptr),
fInstrument(nullptr), fInstrument(nullptr),
fInstrumentIds(), fInstrumentIds(),
sSampler(),
leakDetector_CarlaPluginLinuxSampler() leakDetector_CarlaPluginLinuxSampler()
{ {
carla_debug("CarlaPluginLinuxSampler::CarlaPluginLinuxSampler(%p, %i, %s, %s)", engine, id, bool2str(isGIG), bool2str(use16Outs)); carla_debug("CarlaPluginLinuxSampler::CarlaPluginLinuxSampler(%p, %i, %s, %s)", engine, id, bool2str(isGIG), bool2str(use16Outs));
@@ -1166,34 +1152,38 @@ public:
// Init LinuxSampler stuff // Init LinuxSampler stuff


fAudioOutputDevice = new LinuxSampler::AudioOutputDevicePlugin(pData->engine, this, kUses16Outs); fAudioOutputDevice = new LinuxSampler::AudioOutputDevicePlugin(pData->engine, this, kUses16Outs);
fMidiInputPort = sSampler->midiIn.CreateMidiPortPlugin();
fMidiInputDevice = new LinuxSampler::MidiInputDevicePlugin(sSampler);
fMidiInputPort = new LinuxSampler::MidiInputPortPlugin(fMidiInputDevice);


for (uint i=0; i<kMaxChannels; ++i) for (uint i=0; i<kMaxChannels; ++i)
{ {
fSamplerChannels[i] = sSampler->sampler.AddSamplerChannel();
fSamplerChannels[i] = sSampler->AddSamplerChannel();
CARLA_SAFE_ASSERT_CONTINUE(fSamplerChannels[i] != nullptr); CARLA_SAFE_ASSERT_CONTINUE(fSamplerChannels[i] != nullptr);


fSamplerChannels[i]->SetEngineType(kIsGIG ? "GIG" : "SFZ"); fSamplerChannels[i]->SetEngineType(kIsGIG ? "GIG" : "SFZ");
fSamplerChannels[i]->SetAudioOutputDevice(fAudioOutputDevice); fSamplerChannels[i]->SetAudioOutputDevice(fAudioOutputDevice);


fEngineChannels[i] = fSamplerChannels[i]->GetEngineChannel();
CARLA_SAFE_ASSERT_CONTINUE(fEngineChannels[i] != nullptr);
LinuxSampler::EngineChannel* const engineChannel(fSamplerChannels[i]->GetEngineChannel());
CARLA_SAFE_ASSERT_CONTINUE(engineChannel != nullptr);

// TODO REMOVE
fEngineChannels[i] = engineChannel;


fEngineChannels[i]->Pan(0.0f);
fEngineChannels[i]->Volume(kIsGIG ? LinuxSampler::kVolumeMax/10.0f : LinuxSampler::kVolumeMax); // FIXME
fEngineChannels[i]->Connect(fAudioOutputDevice);
engineChannel->Pan(0.0f);
engineChannel->Volume(kIsGIG ? LinuxSampler::kVolumeMax/10.0f : LinuxSampler::kVolumeMax); // FIXME
engineChannel->Connect(fAudioOutputDevice);


if (kUses16Outs) if (kUses16Outs)
{ {
fEngineChannels[i]->SetOutputChannel(0, i*2);
fEngineChannels[i]->SetOutputChannel(1, i*2 +1);
fMidiInputPort->Connect(fEngineChannels[i], static_cast<LinuxSampler::midi_chan_t>(i));
engineChannel->SetOutputChannel(0, i*2);
engineChannel->SetOutputChannel(1, i*2 +1);
fMidiInputPort->Connect(engineChannel, static_cast<LinuxSampler::midi_chan_t>(i));
} }
else else
{ {
fEngineChannels[i]->SetOutputChannel(0, 0);
fEngineChannels[i]->SetOutputChannel(1, 1);
fMidiInputPort->Connect(fEngineChannels[i], LinuxSampler::midi_chan_all);
engineChannel->SetOutputChannel(0, 0);
engineChannel->SetOutputChannel(1, 1);
fMidiInputPort->Connect(engineChannel, LinuxSampler::midi_chan_all);
} }
} }


@@ -1305,16 +1295,17 @@ private:


int32_t fCurProgs[MAX_MIDI_CHANNELS]; int32_t fCurProgs[MAX_MIDI_CHANNELS];


LinuxSampler::SamplerChannel* fSamplerChannels[MAX_MIDI_CHANNELS];
LinuxSampler::EngineChannel* fEngineChannels[MAX_MIDI_CHANNELS];
SharedResourcePointer<LinuxSampler::Sampler> sSampler;


LinuxSampler::AudioOutputDevicePlugin* fAudioOutputDevice; LinuxSampler::AudioOutputDevicePlugin* fAudioOutputDevice;
LinuxSampler::MidiInputDevicePlugin* fMidiInputDevice;
LinuxSampler::MidiInputPortPlugin* fMidiInputPort; LinuxSampler::MidiInputPortPlugin* fMidiInputPort;


LinuxSampler::InstrumentManager* fInstrument;
std::vector<LinuxSampler::InstrumentManager::instrument_id_t> fInstrumentIds;
LinuxSampler::SamplerChannel* fSamplerChannels[MAX_MIDI_CHANNELS];
LinuxSampler::EngineChannel* fEngineChannels[MAX_MIDI_CHANNELS]; // TODO remove


SharedResourcePointer<LinuxSampler::SamplerPlugin> sSampler;
/* */ LinuxSampler::InstrumentManager* fInstrument;
std::vector<LinuxSampler::InstrumentManager::instrument_id_t> fInstrumentIds;


CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginLinuxSampler) CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginLinuxSampler)
}; };


Loading…
Cancel
Save