--- linuxsampler/trunk/src/drivers/Plugin.cpp 2009/05/03 10:47:09 1894 +++ linuxsampler/trunk/src/drivers/Plugin.cpp 2009/05/03 12:15:40 1895 @@ -84,6 +84,7 @@ sleep(1); pSampler->fireStatistics(); } + return 0; } @@ -110,6 +111,17 @@ } void Plugin::Init(int SampleRate, int FragmentSize, int Channels) { + if (pAudioDevice && SampleRate == pAudioDevice->SampleRate() && + FragmentSize == pAudioDevice->MaxSamplesPerCycle()) { + return; // nothing has changed + } + + String oldState; + if (pAudioDevice) { + oldState = GetState(); + RemoveChannels(); + global->pSampler->DestroyAudioOutputDevice(pAudioDevice); + } std::map params; params["SAMPLERATE"] = ToString(SampleRate); params["FRAGMENTSIZE"] = ToString(FragmentSize); @@ -117,9 +129,15 @@ pAudioDevice = dynamic_cast( global->pSampler->CreateAudioOutputDevice(AudioOutputDevicePlugin::Name(), params)); - pMidiDevice = dynamic_cast( - global->pSampler->CreateMidiInputDevice(MidiInputDevicePlugin::Name(), - std::map())); + if (!pMidiDevice) { + pMidiDevice = dynamic_cast( + global->pSampler->CreateMidiInputDevice(MidiInputDevicePlugin::Name(), + std::map())); + } + + if (!oldState.empty()) { + SetState(oldState); + } } Plugin::~Plugin() {