/[svn]/linuxsampler/trunk/src/hostplugins/dssi/PluginDssi.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/hostplugins/dssi/PluginDssi.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2353 by persson, Thu Mar 8 19:40:14 2012 UTC revision 2354 by persson, Sun Jul 8 10:29:07 2012 UTC
# Line 27  Line 27 
27  #include "PluginDssi.h"  #include "PluginDssi.h"
28    
29  #include "../../engines/AbstractEngineChannel.h"  #include "../../engines/AbstractEngineChannel.h"
30    #include "../../engines/EngineChannelFactory.h"
31    
32  namespace {  namespace {
33    
# Line 47  namespace { Line 48  namespace {
48          Out[0] = 0;          Out[0] = 0;
49          Out[1] = 0;          Out[1] = 0;
50    
         uint outputChannel = 0;  
         uint midiPort = 0;  
51          if (!plugin) {          if (!plugin) {
52              plugin = new PluginDssi(SampleRate);              plugin = new PluginDssi(SampleRate);
53          }          }
# Line 57  namespace { Line 56  namespace {
56          pChannel = plugin->global->pSampler->AddSamplerChannel();          pChannel = plugin->global->pSampler->AddSamplerChannel();
57          pChannel->SetEngineType("gig");          pChannel->SetEngineType("gig");
58          pChannel->SetAudioOutputDevice(plugin->pAudioDevice);          pChannel->SetAudioOutputDevice(plugin->pAudioDevice);
         pPort = plugin->pMidiDevice->CreateMidiPort();  
         pPort->Connect(pChannel->GetEngineChannel(), LinuxSampler::midi_chan_all);  
59    
60            if (plugin->RefCount > 1) {
61                plugin->pMidiDevice->AddMidiPort();
62                plugin->pAudioDevice->AddChannels(2);
63            }
64    
65            int i = plugin->RefCount - 1;
66    
67            pChannel->SetMidiInput(plugin->pMidiDevice, i, LinuxSampler::midi_chan_all);
68          LinuxSampler::AbstractEngineChannel* engineChannel =          LinuxSampler::AbstractEngineChannel* engineChannel =
69              static_cast<LinuxSampler::AbstractEngineChannel*>(pChannel->GetEngineChannel());              static_cast<LinuxSampler::AbstractEngineChannel*>(pChannel->GetEngineChannel());
70          // TODO: pChannelLeft and pChannelRight are meant to be          engineChannel->SetOutputChannel(0, i * 2);
71          // protected          engineChannel->SetOutputChannel(1, i * 2 + 1);
72          engineChannel->pChannelLeft = new LinuxSampler::AudioChannel(0, 0, 0);  
73          engineChannel->pChannelRight = new LinuxSampler::AudioChannel(1, 0, 0);          pPort = plugin->pMidiDevice->GetPort(i);
74            pChannelLeft = plugin->pAudioDevice->Channel(i * 2);
75            pChannelRight = plugin->pAudioDevice->Channel(i * 2 + 1);
76      }      }
77    
78      PluginInstance::~PluginInstance() {      PluginInstance::~PluginInstance() {
         LinuxSampler::AbstractEngineChannel* engineChannel =  
             static_cast<LinuxSampler::AbstractEngineChannel*>(pChannel->GetEngineChannel());  
         delete engineChannel->pChannelLeft;  
         delete engineChannel->pChannelRight;  
   
79          if (--plugin->RefCount == 0) {          if (--plugin->RefCount == 0) {
80              delete plugin;              delete plugin;
81              plugin = 0;              plugin = 0;
82          } else {          } else {
83                LinuxSampler::AbstractEngineChannel* engineChannel =
84                    static_cast<LinuxSampler::AbstractEngineChannel*>(pChannel->GetEngineChannel());
85                int oldChannelNumber = engineChannel->OutputChannel(0);
86    
87              plugin->global->pSampler->RemoveSamplerChannel(pChannel);              plugin->global->pSampler->RemoveSamplerChannel(pChannel);
88                plugin->pMidiDevice->RemoveMidiPort(pPort);
89                plugin->pAudioDevice->RemoveChannel(pChannelLeft);
90                plugin->pAudioDevice->RemoveChannel(pChannelRight);
91    
92                const std::set<LinuxSampler::EngineChannel*>& engineChannels =
93                    LinuxSampler::EngineChannelFactory::EngineChannelInstances();
94                for (std::set<LinuxSampler::EngineChannel*>::iterator i = engineChannels.begin();
95                     i != engineChannels.end() ; ++i) {
96                    if ((*i)->GetAudioOutputDevice() == plugin->pAudioDevice) {
97                        int channelNumber = (*i)->OutputChannel(0);
98                        if (channelNumber > oldChannelNumber) {
99                            (*i)->SetOutputChannel(0, channelNumber - 2);
100                            (*i)->SetOutputChannel(1, channelNumber - 1);
101                        }
102                    }
103                }
104          }          }
   
         LinuxSampler::MidiInputDevicePlugin::DeleteMidiPort(pPort);  
105      }      }
106    
107      void PluginInstance::ConnectPort(unsigned long Port, LADSPA_Data* DataLocation) {      void PluginInstance::ConnectPort(unsigned long Port, LADSPA_Data* DataLocation) {
# Line 135  namespace { Line 155  namespace {
155    
156              for (unsigned long i = 0 ; i < InstanceCount ; i++) {              for (unsigned long i = 0 ; i < InstanceCount ; i++) {
157                  PluginInstance* instance = static_cast<PluginInstance*>(Instances[i]);                  PluginInstance* instance = static_cast<PluginInstance*>(Instances[i]);
158                  LinuxSampler::EngineChannel* engineChannel =                  LinuxSampler::MidiInputPort* port = instance->pPort;
                     instance->pChannel->GetEngineChannel();  
                 LinuxSampler::MidiInputPort* port = engineChannel->GetMidiInputPort();  
159    
160                  snd_seq_event_t* events = Events[i];                  snd_seq_event_t* events = Events[i];
161                  unsigned& eventPos = eventPosArr[i];                  unsigned& eventPos = eventPosArr[i];
# Line 181  namespace { Line 199  namespace {
199                      }                      }
200                  }                  }
201    
202                  LinuxSampler::AbstractEngineChannel* abstractEngineChannel =                  instance->pChannelLeft->SetBuffer(instance->Out[0] + samplePos);
203                      static_cast<LinuxSampler::AbstractEngineChannel*>(engineChannel);                  instance->pChannelRight->SetBuffer(instance->Out[1] + samplePos);
                 abstractEngineChannel->pChannelLeft->SetBuffer(instance->Out[0] + samplePos);  
                 abstractEngineChannel->pChannelRight->SetBuffer(instance->Out[1] + samplePos);  
                 if (i) {  
                     abstractEngineChannel->pChannelLeft->Clear(samples);  
                     abstractEngineChannel->pChannelRight->Clear(samples);  
                 } else {  
                     // the buffer set in the audio device is cleared  
                     // by Render  
                     audioDevice->Channel(0)->SetBuffer(instance->Out[0] + samplePos);  
                     audioDevice->Channel(1)->SetBuffer(instance->Out[1] + samplePos);  
                 }  
204              }              }
205    
206              audioDevice->Render(samples);              audioDevice->Render(samples);
# Line 205  namespace { Line 212  namespace {
212    
213      void PluginInstance::Activate() {      void PluginInstance::Activate() {
214          dmsg(2, ("linuxsampler: activate instance=%p\n", static_cast<void*>(this)));          dmsg(2, ("linuxsampler: activate instance=%p\n", static_cast<void*>(this)));
215          pChannel->GetEngineChannel()->GetMidiInputPort()->DispatchControlChange(123, 0, 0, 0); // all sound off          pPort->DispatchControlChange(123, 0, 0, 0); // all sound off
216      }      }
217    
218    

Legend:
Removed from v.2353  
changed lines
  Added in v.2354

  ViewVC Help
Powered by ViewVC