/[svn]/linuxsampler/trunk/src/engines/gig/EngineChannel.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/engines/gig/EngineChannel.cpp

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

revision 675 by schoenebeck, Wed Jun 22 22:09:28 2005 UTC revision 880 by schoenebeck, Tue Jun 27 22:57:37 2006 UTC
# Line 3  Line 3 
3   *   LinuxSampler - modular, streaming capable sampler                     *   *   LinuxSampler - modular, streaming capable sampler                     *
4   *                                                                         *   *                                                                         *
5   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *   *   Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck   *
6   *   Copyright (C) 2005 Christian Schoenebeck                              *   *   Copyright (C) 2005, 2006 Christian Schoenebeck                        *
7   *                                                                         *   *                                                                         *
8   *   This program is free software; you can redistribute it and/or modify  *   *   This program is free software; you can redistribute it and/or modify  *
9   *   it under the terms of the GNU General Public License as published by  *   *   it under the terms of the GNU General Public License as published by  *
# Line 30  namespace LinuxSampler { namespace gig { Line 30  namespace LinuxSampler { namespace gig {
30          pEngine      = NULL;          pEngine      = NULL;
31          pInstrument  = NULL;          pInstrument  = NULL;
32          pEvents      = NULL; // we allocate when we retrieve the right Engine object          pEvents      = NULL; // we allocate when we retrieve the right Engine object
         pCCEvents    = NULL; // we allocate when we retrieve the right Engine object  
33          pEventQueue  = new RingBuffer<Event>(CONFIG_MAX_EVENTS_PER_FRAGMENT, 0);          pEventQueue  = new RingBuffer<Event>(CONFIG_MAX_EVENTS_PER_FRAGMENT, 0);
34          pActiveKeys  = new Pool<uint>(128);          pActiveKeys  = new Pool<uint>(128);
35          for (uint i = 0; i < 128; i++) {          for (uint i = 0; i < 128; i++) {
# Line 42  namespace LinuxSampler { namespace gig { Line 41  namespace LinuxSampler { namespace gig {
41              pMIDIKeyInfo[i].VoiceTheftsQueued = 0;              pMIDIKeyInfo[i].VoiceTheftsQueued = 0;
42              pMIDIKeyInfo[i].RoundRobinIndex = 0;              pMIDIKeyInfo[i].RoundRobinIndex = 0;
43          }          }
         for (uint i = 0; i < Event::destination_count; i++) {  
             pSynthesisEvents[i] = NULL; // we allocate when we retrieve the right Engine object  
         }  
44          InstrumentIdx  = -1;          InstrumentIdx  = -1;
45          InstrumentStat = -1;          InstrumentStat = -1;
46          AudioDeviceChannelLeft  = -1;          AudioDeviceChannelLeft  = -1;
# Line 52  namespace LinuxSampler { namespace gig { Line 48  namespace LinuxSampler { namespace gig {
48          pMidiInputPort = NULL;          pMidiInputPort = NULL;
49          midiChannel = midi_chan_all;          midiChannel = midi_chan_all;
50          ResetControllers();          ResetControllers();
51            SoloMode       = false;
52            PortamentoMode = false;
53            PortamentoTime = CONFIG_PORTAMENTO_TIME_DEFAULT;
54      }      }
55    
56      EngineChannel::~EngineChannel() {      EngineChannel::~EngineChannel() {
# Line 112  namespace LinuxSampler { namespace gig { Line 111  namespace LinuxSampler { namespace gig {
111              pMIDIKeyInfo[i].itSelf         = Pool<uint>::Iterator();              pMIDIKeyInfo[i].itSelf         = Pool<uint>::Iterator();
112              pMIDIKeyInfo[i].VoiceTheftsQueued = 0;              pMIDIKeyInfo[i].VoiceTheftsQueued = 0;
113          }          }
114            SoloKey       = -1;    // no solo key active yet
115            PortamentoPos = -1.0f; // no portamento active yet
116    
117          // reset all key groups          // reset all key groups
118          std::map<uint,uint*>::iterator iter = ActiveKeyGroups.begin();          std::map<uint,uint*>::iterator iter = ActiveKeyGroups.begin();
# Line 188  namespace LinuxSampler { namespace gig { Line 189  namespace LinuxSampler { namespace gig {
189          catch (RIFF::Exception e) {          catch (RIFF::Exception e) {
190              InstrumentStat = -2;              InstrumentStat = -2;
191              String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message;              String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message;
192              throw LinuxSamplerException(msg);              throw Exception(msg);
193          }          }
194          catch (InstrumentResourceManagerException e) {          catch (InstrumentResourceManagerException e) {
195              InstrumentStat = -3;              InstrumentStat = -3;
196              String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message();              String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message();
197              throw LinuxSamplerException(msg);              throw Exception(msg);
198          }          }
199          catch (...) {          catch (...) {
200              InstrumentStat = -4;              InstrumentStat = -4;
201              throw LinuxSamplerException("gig::Engine error: Failed to load instrument, cause: Unknown exception while trying to parse gig file.");              throw Exception("gig::Engine error: Failed to load instrument, cause: Unknown exception while trying to parse gig file.");
202          }          }
203    
204          // rebuild ActiveKeyGroups map with key groups of current instrument          // rebuild ActiveKeyGroups map with key groups of current instrument
# Line 214  namespace LinuxSampler { namespace gig { Line 215  namespace LinuxSampler { namespace gig {
215          }          }
216          catch (AudioOutputException e) {          catch (AudioOutputException e) {
217              String msg = "Audio output device unable to provide 2 audio channels, cause: " + e.Message();              String msg = "Audio output device unable to provide 2 audio channels, cause: " + e.Message();
218              throw LinuxSamplerException(msg);              throw Exception(msg);
219          }          }
220    
221          if (pEngine) pEngine->Enable();          if (pEngine) pEngine->Enable();
# Line 261  namespace LinuxSampler { namespace gig { Line 262  namespace LinuxSampler { namespace gig {
262          }          }
263          pEngine = Engine::AcquireEngine(this, pAudioOut);          pEngine = Engine::AcquireEngine(this, pAudioOut);
264          ResetInternal();          ResetInternal();
265          pEvents   = new RTList<Event>(pEngine->pEventPool);          pEvents = new RTList<Event>(pEngine->pEventPool);
         pCCEvents = new RTList<Event>(pEngine->pEventPool);  
         for (uint i = 0; i < Event::destination_count; i++) {  
             pSynthesisEvents[i] = new RTList<Event>(pEngine->pEventPool);  
         }  
266          for (uint i = 0; i < 128; i++) {          for (uint i = 0; i < 128; i++) {
267              pMIDIKeyInfo[i].pActiveVoices = new RTList<Voice>(pEngine->pVoicePool);              pMIDIKeyInfo[i].pActiveVoices = new RTList<Voice>(pEngine->pVoicePool);
268              pMIDIKeyInfo[i].pEvents       = new RTList<Event>(pEngine->pEventPool);              pMIDIKeyInfo[i].pEvents       = new RTList<Event>(pEngine->pEventPool);
# Line 274  namespace LinuxSampler { namespace gig { Line 271  namespace LinuxSampler { namespace gig {
271          AudioDeviceChannelRight = 1;          AudioDeviceChannelRight = 1;
272          pOutputLeft             = pAudioOut->Channel(0)->Buffer();          pOutputLeft             = pAudioOut->Channel(0)->Buffer();
273          pOutputRight            = pAudioOut->Channel(1)->Buffer();          pOutputRight            = pAudioOut->Channel(1)->Buffer();
274            MidiInputPort::AddSysexListener(pEngine);
275      }      }
276    
277      void EngineChannel::DisconnectAudioOutputDevice() {      void EngineChannel::DisconnectAudioOutputDevice() {
# Line 283  namespace LinuxSampler { namespace gig { Line 281  namespace LinuxSampler { namespace gig {
281                  delete pEvents;                  delete pEvents;
282                  pEvents = NULL;                  pEvents = NULL;
283              }              }
             if (pCCEvents) {  
                 delete pCCEvents;  
                 pCCEvents = NULL;  
             }  
284              for (uint i = 0; i < 128; i++) {              for (uint i = 0; i < 128; i++) {
285                  if (pMIDIKeyInfo[i].pActiveVoices) {                  if (pMIDIKeyInfo[i].pActiveVoices) {
286                      delete pMIDIKeyInfo[i].pActiveVoices;                      delete pMIDIKeyInfo[i].pActiveVoices;
# Line 297  namespace LinuxSampler { namespace gig { Line 291  namespace LinuxSampler { namespace gig {
291                      pMIDIKeyInfo[i].pEvents = NULL;                      pMIDIKeyInfo[i].pEvents = NULL;
292                  }                  }
293              }              }
             for (uint i = 0; i < Event::destination_count; i++) {  
                 if (pSynthesisEvents[i]) {  
                     delete pSynthesisEvents[i];  
                     pSynthesisEvents[i] = NULL;  
                 }  
             }  
294              Engine* oldEngine = pEngine;              Engine* oldEngine = pEngine;
295              AudioOutputDevice* oldAudioDevice = pEngine->pAudioOutputDevice;              AudioOutputDevice* oldAudioDevice = pEngine->pAudioOutputDevice;
296              pEngine = NULL;              pEngine = NULL;
# Line 440  namespace LinuxSampler { namespace gig { Line 428  namespace LinuxSampler { namespace gig {
428    
429      void EngineChannel::ClearEventLists() {      void EngineChannel::ClearEventLists() {
430          pEvents->clear();          pEvents->clear();
         pCCEvents->clear();  
         for (uint i = 0; i < Event::destination_count; i++) {  
             pSynthesisEvents[i]->clear();  
         }  
431          // empty MIDI key specific event lists          // empty MIDI key specific event lists
432          {          {
433              RTList<uint>::Iterator iuiKey = pActiveKeys->first();              RTList<uint>::Iterator iuiKey = pActiveKeys->first();
# Line 457  namespace LinuxSampler { namespace gig { Line 441  namespace LinuxSampler { namespace gig {
441      void EngineChannel::ResetControllers() {      void EngineChannel::ResetControllers() {
442          Pitch          = 0;          Pitch          = 0;
443          SustainPedal   = false;          SustainPedal   = false;
444          GlobalVolume   = 1.0;          SostenutoPedal = false;
445            GlobalVolume   = CONFIG_GLOBAL_ATTENUATION;
446          GlobalPanLeft  = 1.0f;          GlobalPanLeft  = 1.0f;
447          GlobalPanRight = 1.0f;          GlobalPanRight = 1.0f;
448          // set all MIDI controller values to zero          // set all MIDI controller values to zero

Legend:
Removed from v.675  
changed lines
  Added in v.880

  ViewVC Help
Powered by ViewVC