From 38759cf5020332c61642055718f4e2bd74b048d6 Mon Sep 17 00:00:00 2001 From: falkTX Date: Sun, 4 Jan 2015 13:03:06 +0000 Subject: [PATCH] Start reworking linuxsampler code --- .../plugin/CarlaPluginLinuxSampler.cpp | 69 ++++++++----------- 1 file changed, 30 insertions(+), 39 deletions(-) diff --git a/source/backend/plugin/CarlaPluginLinuxSampler.cpp b/source/backend/plugin/CarlaPluginLinuxSampler.cpp index 86d6bbe2e..406661e4b 100644 --- a/source/backend/plugin/CarlaPluginLinuxSampler.cpp +++ b/source/backend/plugin/CarlaPluginLinuxSampler.cpp @@ -20,6 +20,8 @@ * - implement sample rate changes * - call outDev->ReconnectAll() after changing buffer size or sample rate * - use CARLA_SAFE_ASSERT_RETURN with err + * - pianoteq-like SetNoteOnVelocityFilter drawing points widget + * - voice count param */ #include "CarlaPluginInternal.hpp" #include "CarlaEngine.hpp" @@ -99,7 +101,7 @@ public: // ------------------------------------------------------------------- - bool isAutonomousDevice() override { return false; } + /* */ bool isAutonomousDevice() override { return false; } static bool isAutonomousDriver() { return false; } // ------------------------------------------------------------------- @@ -125,7 +127,7 @@ private: class MidiInputPortPlugin : public MidiInputPort { public: - MidiInputPortPlugin(MidiInputDevice* const device, const int portNum) + MidiInputPortPlugin(MidiInputDevice* const device, const int portNum = 0) : MidiInputPort(device, portNum), leakDetector_MidiInputPortPlugin() {} @@ -162,31 +164,14 @@ public: // ------------------------------------------------------------------- - bool isAutonomousDevice() override { return false; } + /* */ bool isAutonomousDevice() override { return false; } static bool isAutonomousDriver() { return false; } // ------------------------------------------------------------------- - MidiInputPortPlugin* CreateMidiPortPlugin() - { - return new MidiInputPortPlugin(this, int(Ports.size())); - } - CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MidiInputDevicePlugin) }; -// ----------------------------------------------------------------------- -// SamplerPlugin - -struct SamplerPlugin { - Sampler sampler; - MidiInputDevicePlugin midiIn; - - SamplerPlugin() - : sampler(), - midiIn(&sampler) {} -}; - } // namespace LinuxSampler // ----------------------------------------------------------------------- @@ -210,11 +195,12 @@ public: fLabel(nullptr), fMaker(nullptr), fRealName(nullptr), + sSampler(), fAudioOutputDevice(nullptr), + fMidiInputDevice(sSampler), fMidiInputPort(nullptr), fInstrument(nullptr), fInstrumentIds(), - sSampler(), leakDetector_CarlaPluginLinuxSampler() { carla_debug("CarlaPluginLinuxSampler::CarlaPluginLinuxSampler(%p, %i, %s, %s)", engine, id, bool2str(isGIG), bool2str(use16Outs)); @@ -1166,34 +1152,38 @@ public: // Init LinuxSampler stuff 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; isampler.AddSamplerChannel(); + fSamplerChannels[i] = sSampler->AddSamplerChannel(); CARLA_SAFE_ASSERT_CONTINUE(fSamplerChannels[i] != nullptr); fSamplerChannels[i]->SetEngineType(kIsGIG ? "GIG" : "SFZ"); 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) { - fEngineChannels[i]->SetOutputChannel(0, i*2); - fEngineChannels[i]->SetOutputChannel(1, i*2 +1); - fMidiInputPort->Connect(fEngineChannels[i], static_cast(i)); + engineChannel->SetOutputChannel(0, i*2); + engineChannel->SetOutputChannel(1, i*2 +1); + fMidiInputPort->Connect(engineChannel, static_cast(i)); } 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]; - LinuxSampler::SamplerChannel* fSamplerChannels[MAX_MIDI_CHANNELS]; - LinuxSampler::EngineChannel* fEngineChannels[MAX_MIDI_CHANNELS]; + SharedResourcePointer sSampler; LinuxSampler::AudioOutputDevicePlugin* fAudioOutputDevice; + LinuxSampler::MidiInputDevicePlugin* fMidiInputDevice; LinuxSampler::MidiInputPortPlugin* fMidiInputPort; - LinuxSampler::InstrumentManager* fInstrument; - std::vector fInstrumentIds; + LinuxSampler::SamplerChannel* fSamplerChannels[MAX_MIDI_CHANNELS]; + LinuxSampler::EngineChannel* fEngineChannels[MAX_MIDI_CHANNELS]; // TODO remove - SharedResourcePointer sSampler; + /* */ LinuxSampler::InstrumentManager* fInstrument; + std::vector fInstrumentIds; CARLA_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(CarlaPluginLinuxSampler) };