63 |
pMainFilterParameters = NULL; |
pMainFilterParameters = NULL; |
64 |
|
|
65 |
InstrumentIdx = -1; |
InstrumentIdx = -1; |
66 |
|
InstrumentStat = -1; |
67 |
|
|
68 |
|
AudioDeviceChannelLeft = -1; |
69 |
|
AudioDeviceChannelRight = -1; |
70 |
|
|
71 |
ResetInternal(); |
ResetInternal(); |
72 |
} |
} |
152 |
SustainPedal = false; |
SustainPedal = false; |
153 |
ActiveVoiceCount = 0; |
ActiveVoiceCount = 0; |
154 |
ActiveVoiceCountMax = 0; |
ActiveVoiceCountMax = 0; |
155 |
|
GlobalVolume = 1.0; |
156 |
|
|
157 |
// set all MIDI controller values to zero |
// set all MIDI controller values to zero |
158 |
memset(ControllerTable, 0x00, 128); |
memset(ControllerTable, 0x00, 128); |
202 |
Instruments.HandBack(pInstrument, this); |
Instruments.HandBack(pInstrument, this); |
203 |
} |
} |
204 |
|
|
205 |
InstrumentIdx = -1; |
InstrumentFile = FileName; |
206 |
|
InstrumentIdx = Instrument; |
207 |
|
InstrumentStat = 0; |
208 |
|
|
209 |
// request gig instrument from instrument manager |
// request gig instrument from instrument manager |
210 |
try { |
try { |
213 |
instrid.iInstrument = Instrument; |
instrid.iInstrument = Instrument; |
214 |
pInstrument = Instruments.Borrow(instrid, this); |
pInstrument = Instruments.Borrow(instrid, this); |
215 |
if (!pInstrument) { |
if (!pInstrument) { |
216 |
|
InstrumentStat = -1; |
217 |
dmsg(1,("no instrument loaded!!!\n")); |
dmsg(1,("no instrument loaded!!!\n")); |
218 |
exit(EXIT_FAILURE); |
exit(EXIT_FAILURE); |
219 |
} |
} |
220 |
} |
} |
221 |
catch (RIFF::Exception e) { |
catch (RIFF::Exception e) { |
222 |
|
InstrumentStat = -2; |
223 |
String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message; |
String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message; |
224 |
throw LinuxSamplerException(msg); |
throw LinuxSamplerException(msg); |
225 |
} |
} |
226 |
catch (InstrumentResourceManagerException e) { |
catch (InstrumentResourceManagerException e) { |
227 |
|
InstrumentStat = -3; |
228 |
String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message(); |
String msg = "gig::Engine error: Failed to load instrument, cause: " + e.Message(); |
229 |
throw LinuxSamplerException(msg); |
throw LinuxSamplerException(msg); |
230 |
} |
} |
231 |
catch (...) { |
catch (...) { |
232 |
|
InstrumentStat = -4; |
233 |
throw LinuxSamplerException("gig::Engine error: Failed to load instrument, cause: Unknown exception while trying to parse gig file."); |
throw LinuxSamplerException("gig::Engine error: Failed to load instrument, cause: Unknown exception while trying to parse gig file."); |
234 |
} |
} |
235 |
|
|
236 |
InstrumentFile = FileName; |
InstrumentStat = 100; |
|
InstrumentIdx = Instrument; |
|
237 |
|
|
238 |
// inform audio driver for the need of two channels |
// inform audio driver for the need of two channels |
239 |
try { |
try { |
282 |
throw LinuxSamplerException(msg); |
throw LinuxSamplerException(msg); |
283 |
} |
} |
284 |
|
|
285 |
|
this->AudioDeviceChannelLeft = 0; |
286 |
|
this->AudioDeviceChannelRight = 1; |
287 |
|
this->pOutputLeft = pAudioOutputDevice->Channel(0)->Buffer(); |
288 |
|
this->pOutputRight = pAudioOutputDevice->Channel(1)->Buffer(); |
289 |
|
this->MaxSamplesPerCycle = pAudioOutputDevice->MaxSamplesPerCycle(); |
290 |
|
this->SampleRate = pAudioOutputDevice->SampleRate(); |
291 |
|
|
292 |
// (re)create disk thread |
// (re)create disk thread |
293 |
if (this->pDiskThread) { |
if (this->pDiskThread) { |
294 |
this->pDiskThread->StopThread(); |
this->pDiskThread->StopThread(); |
302 |
|
|
303 |
for (Voice* pVoice = pVoicePool->alloc(); pVoice; pVoice = pVoicePool->alloc()) { |
for (Voice* pVoice = pVoicePool->alloc(); pVoice; pVoice = pVoicePool->alloc()) { |
304 |
pVoice->pDiskThread = this->pDiskThread; |
pVoice->pDiskThread = this->pDiskThread; |
|
pVoice->SetOutput(pAudioOut); |
|
305 |
dmsg(3,("d")); |
dmsg(3,("d")); |
306 |
} |
} |
307 |
pVoicePool->clear(); |
pVoicePool->clear(); |
339 |
AudioOutputDevice* olddevice = pAudioOutputDevice; |
AudioOutputDevice* olddevice = pAudioOutputDevice; |
340 |
pAudioOutputDevice = NULL; |
pAudioOutputDevice = NULL; |
341 |
olddevice->Disconnect(this); |
olddevice->Disconnect(this); |
342 |
|
AudioDeviceChannelLeft = -1; |
343 |
|
AudioDeviceChannelRight = -1; |
344 |
} |
} |
345 |
} |
} |
346 |
|
|
687 |
GlobalVolume = f; |
GlobalVolume = f; |
688 |
} |
} |
689 |
|
|
690 |
|
uint Engine::Channels() { |
691 |
|
return 2; |
692 |
|
} |
693 |
|
|
694 |
|
void Engine::SetOutputChannel(uint EngineAudioChannel, uint AudioDeviceChannel) { |
695 |
|
AudioChannel* pChannel = pAudioOutputDevice->Channel(AudioDeviceChannel); |
696 |
|
if (!pChannel) throw AudioOutputException("Invalid audio output device channel " + ToString(AudioDeviceChannel)); |
697 |
|
switch (EngineAudioChannel) { |
698 |
|
case 0: // left output channel |
699 |
|
pOutputLeft = pChannel->Buffer(); |
700 |
|
AudioDeviceChannelLeft = AudioDeviceChannel; |
701 |
|
break; |
702 |
|
case 1: // right output channel |
703 |
|
pOutputRight = pChannel->Buffer(); |
704 |
|
AudioDeviceChannelRight = AudioDeviceChannel; |
705 |
|
break; |
706 |
|
default: |
707 |
|
throw AudioOutputException("Invalid engine audio channel " + ToString(EngineAudioChannel)); |
708 |
|
} |
709 |
|
} |
710 |
|
|
711 |
|
int Engine::OutputChannel(uint EngineAudioChannel) { |
712 |
|
switch (EngineAudioChannel) { |
713 |
|
case 0: // left channel |
714 |
|
return AudioDeviceChannelLeft; |
715 |
|
case 1: // right channel |
716 |
|
return AudioDeviceChannelRight; |
717 |
|
default: |
718 |
|
throw AudioOutputException("Invalid engine audio channel " + ToString(EngineAudioChannel)); |
719 |
|
} |
720 |
|
} |
721 |
|
|
722 |
uint Engine::VoiceCount() { |
uint Engine::VoiceCount() { |
723 |
return ActiveVoiceCount; |
return ActiveVoiceCount; |
724 |
} |
} |
759 |
return InstrumentIdx; |
return InstrumentIdx; |
760 |
} |
} |
761 |
|
|
762 |
|
int Engine::InstrumentStatus() { |
763 |
|
return InstrumentStat; |
764 |
|
} |
765 |
|
|
766 |
String Engine::Description() { |
String Engine::Description() { |
767 |
return "Gigasampler Engine"; |
return "Gigasampler Engine"; |
768 |
} |
} |
769 |
|
|
770 |
String Engine::Version() { |
String Engine::Version() { |
771 |
String s = "$Revision: 1.6 $"; |
String s = "$Revision: 1.8 $"; |
772 |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
return s.substr(11, s.size() - 13); // cut dollar signs, spaces and CVS macro keyword |
773 |
} |
} |
774 |
|
|