--- linuxsampler/trunk/src/network/lscpserver.cpp 2005/10/26 09:34:38 793 +++ linuxsampler/trunk/src/network/lscpserver.cpp 2006/07/28 21:35:06 907 @@ -3,7 +3,7 @@ * LinuxSampler - modular, streaming capable sampler * * * * Copyright (C) 2003, 2004 by Benno Senoner and Christian Schoenebeck * - * Copyright (C) 2005 Christian Schoenebeck * + * Copyright (C) 2005, 2006 Christian Schoenebeck * * * * This library is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * @@ -146,9 +146,13 @@ //Now let's deliver late notifies (if any) NotifyBufferMutex.Lock(); for (std::map::iterator iterNotify = bufferedNotifies.begin(); iterNotify != bufferedNotifies.end(); iterNotify++) { +#ifdef MSG_NOSIGNAL send(iterNotify->first, iterNotify->second.c_str(), iterNotify->second.size(), MSG_NOSIGNAL); - bufferedNotifies.erase(iterNotify); +#else + send(iterNotify->first, iterNotify->second.c_str(), iterNotify->second.size(), 0); +#endif } + bufferedNotifies.clear(); NotifyBufferMutex.Unlock(); fd_set selectSet = fdSet; @@ -262,7 +266,11 @@ while (true) { if (NotifyMutex.Trylock()) { for(;iter != end; iter++) +#ifdef MSG_NOSIGNAL send(*iter, notify.c_str(), notify.size(), MSG_NOSIGNAL); +#else + send(*iter, notify.c_str(), notify.size(), 0); +#endif NotifyMutex.Unlock(); break; } else { @@ -314,7 +322,7 @@ continue; //Ignore CR if (c == '\n') { LSCPServer::SendLSCPNotify(LSCPEvent(LSCPEvent::event_misc, "Received \'" + bufferedCommands[socket] + "\' on socket", socket)); - bufferedCommands[socket] += "\n"; + bufferedCommands[socket] += "\r\n"; return true; //Complete command was read } bufferedCommands[socket] += c; @@ -371,7 +379,11 @@ dmsg(2,("LSCPServer::AnswerClient(ReturnMessage=%s)", ReturnMessage.c_str())); if (currentSocket != -1) { NotifyMutex.Lock(); +#ifdef MSG_NOSIGNAL send(currentSocket, ReturnMessage.c_str(), ReturnMessage.size(), MSG_NOSIGNAL); +#else + send(currentSocket, ReturnMessage.c_str(), ReturnMessage.size(), 0); +#endif NotifyMutex.Unlock(); } } @@ -415,10 +427,10 @@ AudioOutputDevice* pDevice = pSampler->CreateAudioOutputDevice(Driver, Parameters); // search for the created device to get its index int index = GetAudioOutputDeviceIndex(pDevice); - if (index == -1) throw LinuxSamplerException("Internal error: could not find created audio output device."); + if (index == -1) throw Exception("Internal error: could not find created audio output device."); result = index; // success } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -431,10 +443,10 @@ MidiInputDevice* pDevice = pSampler->CreateMidiInputDevice(Driver, Parameters); // search for the created device to get its index int index = GetMidiInputDeviceIndex(pDevice); - if (index == -1) throw LinuxSamplerException("Internal error: could not find created midi input device."); + if (index == -1) throw Exception("Internal error: could not find created midi input device."); result = index; // success } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -445,11 +457,11 @@ LSCPResultSet result; try { std::map devices = pSampler->GetAudioOutputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no audio output device with index " + ToString(DeviceIndex) + "."); AudioOutputDevice* pDevice = devices[DeviceIndex]; pSampler->DestroyAudioOutputDevice(pDevice); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -460,11 +472,11 @@ LSCPResultSet result; try { std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no audio output device with index " + ToString(DeviceIndex) + "."); MidiInputDevice* pDevice = devices[DeviceIndex]; pSampler->DestroyMidiInputDevice(pDevice); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -478,11 +490,11 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type assigned to sampler channel yet"); + if (!pEngineChannel) throw Exception("No engine type assigned to sampler channel yet"); if (!pSamplerChannel->GetAudioOutputDevice()) - throw LinuxSamplerException("No audio output device connected to sampler channel"); + throw Exception("No audio output device connected to sampler channel"); if (bBackground) { InstrumentLoader.StartNewLoad(Filename, uiInstrument, pEngineChannel); } @@ -493,7 +505,7 @@ pEngineChannel->LoadInstrument(); } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -508,13 +520,13 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); LockRTNotify(); pSamplerChannel->SetEngineType(EngineName); if(HasSoloChannel()) pSamplerChannel->GetEngineChannel()->SetMute(-1); UnlockRTNotify(); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -552,7 +564,9 @@ */ String LSCPServer::AddChannel() { dmsg(2,("LSCPServer: AddChannel()\n")); + LockRTNotify(); SamplerChannel* pSamplerChannel = pSampler->AddSamplerChannel(); + UnlockRTNotify(); LSCPResultSet result(pSamplerChannel->Index()); return result.Produce(); } @@ -574,7 +588,14 @@ */ String LSCPServer::GetAvailableEngines() { dmsg(2,("LSCPServer: GetAvailableEngines()\n")); - LSCPResultSet result("1"); + LSCPResultSet result; + try { + int n = EngineFactory::AvailableEngineTypes().size(); + result.Add(n); + } + catch (Exception e) { + result.Error(e); + } return result.Produce(); } @@ -583,7 +604,14 @@ */ String LSCPServer::ListAvailableEngines() { dmsg(2,("LSCPServer: ListAvailableEngines()\n")); - LSCPResultSet result("\'GIG\'"); + LSCPResultSet result; + try { + String s = EngineFactory::AvailableEngineTypesAsString(); + result.Add(s); + } + catch (Exception e) { + result.Error(e); + } return result.Produce(); } @@ -594,15 +622,17 @@ String LSCPServer::GetEngineInfo(String EngineName) { dmsg(2,("LSCPServer: GetEngineInfo(EngineName=%s)\n", EngineName.c_str())); LSCPResultSet result; + LockRTNotify(); try { Engine* pEngine = EngineFactory::Create(EngineName); result.Add("DESCRIPTION", pEngine->Description()); result.Add("VERSION", pEngine->Version()); EngineFactory::Destroy(pEngine); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } + UnlockRTNotify(); return result.Produce(); } @@ -615,7 +645,7 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); //Defaults values @@ -668,7 +698,7 @@ result.Add("MUTE", Mute == -1 ? "MUTED_BY_SOLO" : (Mute ? "true" : "false")); result.Add("SOLO", Solo); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -683,13 +713,13 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine loaded on sampler channel"); - if (!pEngineChannel->GetEngine()) throw LinuxSamplerException("No audio output device connected to sampler channel"); + if (!pEngineChannel) throw Exception("No engine loaded on sampler channel"); + if (!pEngineChannel->GetEngine()) throw Exception("No audio output device connected to sampler channel"); result.Add(pEngineChannel->GetEngine()->VoiceCount()); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -704,13 +734,13 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type assigned to sampler channel"); - if (!pEngineChannel->GetEngine()) throw LinuxSamplerException("No audio output device connected to sampler channel"); + if (!pEngineChannel) throw Exception("No engine type assigned to sampler channel"); + if (!pEngineChannel->GetEngine()) throw Exception("No audio output device connected to sampler channel"); result.Add(pEngineChannel->GetEngine()->DiskStreamCount()); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -725,10 +755,10 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type assigned to sampler channel"); - if (!pEngineChannel->GetEngine()) throw LinuxSamplerException("No audio output device connected to sampler channel"); + if (!pEngineChannel) throw Exception("No engine type assigned to sampler channel"); + if (!pEngineChannel->GetEngine()) throw Exception("No audio output device connected to sampler channel"); if (!pEngineChannel->GetEngine()->DiskStreamSupported()) result.Add("NA"); else { switch (ResponseType) { @@ -739,11 +769,11 @@ result.Add(pEngineChannel->GetEngine()->DiskStreamBufferFillPercentage()); break; default: - throw LinuxSamplerException("Unknown fill response type"); + throw Exception("Unknown fill response type"); } } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -756,7 +786,7 @@ int n = AudioOutputDeviceFactory::AvailableDrivers().size(); result.Add(n); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -769,7 +799,7 @@ String s = AudioOutputDeviceFactory::AvailableDriversAsString(); result.Add(s); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -782,7 +812,7 @@ int n = MidiInputDeviceFactory::AvailableDrivers().size(); result.Add(n); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -795,7 +825,7 @@ String s = MidiInputDeviceFactory::AvailableDriversAsString(); result.Add(s); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -819,7 +849,7 @@ result.Add("PARAMETERS", s); } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -843,7 +873,7 @@ result.Add("PARAMETERS", s); } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -870,7 +900,7 @@ if (oRangeMax) result.Add("RANGE_MAX", *oRangeMax); if (oPossibilities) result.Add("POSSIBILITIES", *oPossibilities); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -897,7 +927,7 @@ if (oRangeMax) result.Add("RANGE_MAX", *oRangeMax); if (oPossibilities) result.Add("POSSIBILITIES", *oPossibilities); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -910,7 +940,7 @@ uint count = pSampler->AudioOutputDevices(); result.Add(count); // success } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -923,7 +953,7 @@ uint count = pSampler->MidiInputDevices(); result.Add(count); // success } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -942,7 +972,7 @@ } result.Add(s); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -961,7 +991,7 @@ } result.Add(s); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -972,7 +1002,7 @@ LSCPResultSet result; try { std::map devices = pSampler->GetAudioOutputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no audio output device with index " + ToString(DeviceIndex) + "."); AudioOutputDevice* pDevice = devices[DeviceIndex]; result.Add("DRIVER", pDevice->Driver()); std::map parameters = pDevice->DeviceParameters(); @@ -981,7 +1011,7 @@ result.Add(iter->first, iter->second->Value()); } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -992,7 +1022,7 @@ LSCPResultSet result; try { std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); MidiInputDevice* pDevice = devices[DeviceIndex]; result.Add("DRIVER", pDevice->Driver()); std::map parameters = pDevice->DeviceParameters(); @@ -1001,7 +1031,7 @@ result.Add(iter->first, iter->second->Value()); } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1012,12 +1042,12 @@ try { // get MIDI input device std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); MidiInputDevice* pDevice = devices[DeviceIndex]; // get MIDI port MidiInputPort* pMidiInputPort = pDevice->GetPort(PortIndex); - if (!pMidiInputPort) throw LinuxSamplerException("There is no MIDI input port with index " + ToString(PortIndex) + "."); + if (!pMidiInputPort) throw Exception("There is no MIDI input port with index " + ToString(PortIndex) + "."); // return the values of all MIDI port parameters std::map parameters = pMidiInputPort->PortParameters(); @@ -1026,7 +1056,7 @@ result.Add(iter->first, iter->second->Value()); } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1038,12 +1068,12 @@ try { // get audio output device std::map devices = pSampler->GetAudioOutputDevices(); - if (!devices.count(DeviceId)) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceId) + "."); + if (!devices.count(DeviceId)) throw Exception("There is no audio output device with index " + ToString(DeviceId) + "."); AudioOutputDevice* pDevice = devices[DeviceId]; // get audio channel AudioChannel* pChannel = pDevice->Channel(ChannelId); - if (!pChannel) throw LinuxSamplerException("Audio output device does not have audio channel " + ToString(ChannelId) + "."); + if (!pChannel) throw Exception("Audio output device does not have audio channel " + ToString(ChannelId) + "."); // return the values of all audio channel parameters std::map parameters = pChannel->ChannelParameters(); @@ -1052,7 +1082,7 @@ result.Add(iter->first, iter->second->Value()); } } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1064,16 +1094,16 @@ try { // get MIDI input device std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(DeviceId)) throw LinuxSamplerException("There is no midi input device with index " + ToString(DeviceId) + "."); + if (!devices.count(DeviceId)) throw Exception("There is no midi input device with index " + ToString(DeviceId) + "."); MidiInputDevice* pDevice = devices[DeviceId]; // get midi port MidiInputPort* pPort = pDevice->GetPort(PortId); - if (!pPort) throw LinuxSamplerException("Midi input device does not have port " + ToString(PortId) + "."); + if (!pPort) throw Exception("Midi input device does not have port " + ToString(PortId) + "."); // get desired port parameter std::map parameters = pPort->PortParameters(); - if (!parameters.count(ParameterName)) throw LinuxSamplerException("Midi port does not provide a parameter '" + ParameterName + "'."); + if (!parameters.count(ParameterName)) throw Exception("Midi port does not provide a parameter '" + ParameterName + "'."); DeviceRuntimeParameter* pParameter = parameters[ParameterName]; // return all fields of this audio channel parameter @@ -1085,7 +1115,7 @@ if (pParameter->RangeMax()) result.Add("RANGE_MAX", *pParameter->RangeMax()); if (pParameter->Possibilities()) result.Add("POSSIBILITIES", *pParameter->Possibilities()); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1097,16 +1127,16 @@ try { // get audio output device std::map devices = pSampler->GetAudioOutputDevices(); - if (!devices.count(DeviceId)) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceId) + "."); + if (!devices.count(DeviceId)) throw Exception("There is no audio output device with index " + ToString(DeviceId) + "."); AudioOutputDevice* pDevice = devices[DeviceId]; // get audio channel AudioChannel* pChannel = pDevice->Channel(ChannelId); - if (!pChannel) throw LinuxSamplerException("Audio output device does not have audio channel " + ToString(ChannelId) + "."); + if (!pChannel) throw Exception("Audio output device does not have audio channel " + ToString(ChannelId) + "."); // get desired audio channel parameter std::map parameters = pChannel->ChannelParameters(); - if (!parameters.count(ParameterName)) throw LinuxSamplerException("Audio channel does not provide a parameter '" + ParameterName + "'."); + if (!parameters.count(ParameterName)) throw Exception("Audio channel does not provide a parameter '" + ParameterName + "'."); DeviceRuntimeParameter* pParameter = parameters[ParameterName]; // return all fields of this audio channel parameter @@ -1118,7 +1148,7 @@ if (pParameter->RangeMax()) result.Add("RANGE_MAX", *pParameter->RangeMax()); if (pParameter->Possibilities()) result.Add("POSSIBILITIES", *pParameter->Possibilities()); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1130,22 +1160,22 @@ try { // get audio output device std::map devices = pSampler->GetAudioOutputDevices(); - if (!devices.count(DeviceId)) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceId) + "."); + if (!devices.count(DeviceId)) throw Exception("There is no audio output device with index " + ToString(DeviceId) + "."); AudioOutputDevice* pDevice = devices[DeviceId]; // get audio channel AudioChannel* pChannel = pDevice->Channel(ChannelId); - if (!pChannel) throw LinuxSamplerException("Audio output device does not have audio channel " + ToString(ChannelId) + "."); + if (!pChannel) throw Exception("Audio output device does not have audio channel " + ToString(ChannelId) + "."); // get desired audio channel parameter std::map parameters = pChannel->ChannelParameters(); - if (!parameters.count(ParamKey)) throw LinuxSamplerException("Audio channel does not provide a parameter '" + ParamKey + "'."); + if (!parameters.count(ParamKey)) throw Exception("Audio channel does not provide a parameter '" + ParamKey + "'."); DeviceRuntimeParameter* pParameter = parameters[ParamKey]; // set new channel parameter value pParameter->SetValue(ParamVal); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1156,13 +1186,13 @@ LSCPResultSet result; try { std::map devices = pSampler->GetAudioOutputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no audio output device with index " + ToString(DeviceIndex) + "."); AudioOutputDevice* pDevice = devices[DeviceIndex]; std::map parameters = pDevice->DeviceParameters(); - if (!parameters.count(ParamKey)) throw LinuxSamplerException("Audio output device " + ToString(DeviceIndex) + " does not have a device parameter '" + ParamKey + "'"); + if (!parameters.count(ParamKey)) throw Exception("Audio output device " + ToString(DeviceIndex) + " does not have a device parameter '" + ParamKey + "'"); parameters[ParamKey]->SetValue(ParamVal); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1173,13 +1203,13 @@ LSCPResultSet result; try { std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); MidiInputDevice* pDevice = devices[DeviceIndex]; std::map parameters = pDevice->DeviceParameters(); - if (!parameters.count(ParamKey)) throw LinuxSamplerException("MIDI input device " + ToString(DeviceIndex) + " does not have a device parameter '" + ParamKey + "'"); + if (!parameters.count(ParamKey)) throw Exception("MIDI input device " + ToString(DeviceIndex) + " does not have a device parameter '" + ParamKey + "'"); parameters[ParamKey]->SetValue(ParamVal); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1191,19 +1221,19 @@ try { // get MIDI input device std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(DeviceIndex)) throw LinuxSamplerException("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); + if (!devices.count(DeviceIndex)) throw Exception("There is no MIDI input device with index " + ToString(DeviceIndex) + "."); MidiInputDevice* pDevice = devices[DeviceIndex]; // get MIDI port MidiInputPort* pMidiInputPort = pDevice->GetPort(PortIndex); - if (!pMidiInputPort) throw LinuxSamplerException("There is no MIDI input port with index " + ToString(PortIndex) + "."); + if (!pMidiInputPort) throw Exception("There is no MIDI input port with index " + ToString(PortIndex) + "."); // set port parameter value std::map parameters = pMidiInputPort->PortParameters(); - if (!parameters.count(ParamKey)) throw LinuxSamplerException("MIDI input device " + ToString(PortIndex) + " does not have a parameter '" + ParamKey + "'"); + if (!parameters.count(ParamKey)) throw Exception("MIDI input device " + ToString(PortIndex) + " does not have a parameter '" + ParamKey + "'"); parameters[ParamKey]->SetValue(ParamVal); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1218,13 +1248,13 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type yet assigned to sampler channel " + ToString(uiSamplerChannel)); - if (!pSamplerChannel->GetAudioOutputDevice()) throw LinuxSamplerException("No audio output device connected to sampler channel " + ToString(uiSamplerChannel)); + if (!pEngineChannel) throw Exception("No engine type yet assigned to sampler channel " + ToString(uiSamplerChannel)); + if (!pSamplerChannel->GetAudioOutputDevice()) throw Exception("No audio output device connected to sampler channel " + ToString(uiSamplerChannel)); pEngineChannel->SetOutputChannel(ChannelAudioOutputChannel, AudioOutputDeviceInputChannel); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1233,26 +1263,29 @@ String LSCPServer::SetAudioOutputDevice(uint AudioDeviceId, uint uiSamplerChannel) { dmsg(2,("LSCPServer: SetAudiotOutputDevice(AudioDeviceId=%d, SamplerChannel=%d)\n",AudioDeviceId,uiSamplerChannel)); LSCPResultSet result; + LockRTNotify(); try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); std::map devices = pSampler->GetAudioOutputDevices(); - if (!devices.count(AudioDeviceId)) throw LinuxSamplerException("There is no audio output device with index " + ToString(AudioDeviceId)); + if (!devices.count(AudioDeviceId)) throw Exception("There is no audio output device with index " + ToString(AudioDeviceId)); AudioOutputDevice* pDevice = devices[AudioDeviceId]; pSamplerChannel->SetAudioOutputDevice(pDevice); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } + UnlockRTNotify(); return result.Produce(); } String LSCPServer::SetAudioOutputType(String AudioOutputDriver, uint uiSamplerChannel) { dmsg(2,("LSCPServer: SetAudioOutputType(String AudioOutputDriver=%s, SamplerChannel=%d)\n",AudioOutputDriver.c_str(),uiSamplerChannel)); LSCPResultSet result; + LockRTNotify(); try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); // Driver type name aliasing... if (AudioOutputDriver == "Alsa") AudioOutputDriver = "ALSA"; if (AudioOutputDriver == "Jack") AudioOutputDriver = "JACK"; @@ -1274,13 +1307,14 @@ } // Must have a device... if (pDevice == NULL) - throw LinuxSamplerException("Internal error: could not create audio output device."); + throw Exception("Internal error: could not create audio output device."); // Set it as the current channel device... pSamplerChannel->SetAudioOutputDevice(pDevice); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } + UnlockRTNotify(); return result.Produce(); } @@ -1289,10 +1323,10 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); pSamplerChannel->SetMidiInputPort(MIDIPort); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1303,10 +1337,10 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); pSamplerChannel->SetMidiInputChannel((midi_chan_t) MIDIChannel); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1317,13 +1351,13 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(MIDIDeviceId)) throw LinuxSamplerException("There is no MIDI input device with index " + ToString(MIDIDeviceId)); + if (!devices.count(MIDIDeviceId)) throw Exception("There is no MIDI input device with index " + ToString(MIDIDeviceId)); MidiInputDevice* pDevice = devices[MIDIDeviceId]; pSamplerChannel->SetMidiInputDevice(pDevice); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1334,7 +1368,7 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); // Driver type name aliasing... if (MidiInputDriver == "Alsa") MidiInputDriver = "ALSA"; // Check if there's one MIDI input device already created @@ -1358,11 +1392,11 @@ } // Must have a device... if (pDevice == NULL) - throw LinuxSamplerException("Internal error: could not create MIDI input device."); + throw Exception("Internal error: could not create MIDI input device."); // Set it as the current channel device... pSamplerChannel->SetMidiInputDevice(pDevice); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1377,13 +1411,13 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); std::map devices = pSampler->GetMidiInputDevices(); - if (!devices.count(MIDIDeviceId)) throw LinuxSamplerException("There is no MIDI input device with index " + ToString(MIDIDeviceId)); + if (!devices.count(MIDIDeviceId)) throw Exception("There is no MIDI input device with index " + ToString(MIDIDeviceId)); MidiInputDevice* pDevice = devices[MIDIDeviceId]; pSamplerChannel->SetMidiInput(pDevice, MIDIPort, (midi_chan_t) MIDIChannel); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1398,12 +1432,12 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type assigned to sampler channel"); + if (!pEngineChannel) throw Exception("No engine type assigned to sampler channel"); pEngineChannel->Volume(dVolume); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1417,14 +1451,14 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type assigned to sampler channel"); + if (!pEngineChannel) throw Exception("No engine type assigned to sampler channel"); if(!bMute) pEngineChannel->SetMute((HasSoloChannel() && !pEngineChannel->GetSolo()) ? -1 : 0); else pEngineChannel->SetMute(1); - } catch (LinuxSamplerException e) { + } catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1438,10 +1472,10 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type assigned to sampler channel"); + if (!pEngineChannel) throw Exception("No engine type assigned to sampler channel"); bool oldSolo = pEngineChannel->GetSolo(); bool hadSoloChannel = HasSoloChannel(); @@ -1457,7 +1491,7 @@ if(!HasSoloChannel()) UnmuteChannels(); else if(!pEngineChannel->GetMute()) pEngineChannel->SetMute(-1); } - } catch (LinuxSamplerException e) { + } catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1518,12 +1552,12 @@ LSCPResultSet result; try { SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel); - if (!pSamplerChannel) throw LinuxSamplerException("Invalid sampler channel number " + ToString(uiSamplerChannel)); + if (!pSamplerChannel) throw Exception("Invalid sampler channel number " + ToString(uiSamplerChannel)); EngineChannel* pEngineChannel = pSamplerChannel->GetEngineChannel(); - if (!pEngineChannel) throw LinuxSamplerException("No engine type assigned to sampler channel"); + if (!pEngineChannel) throw Exception("No engine type assigned to sampler channel"); pEngineChannel->Reset(); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce(); @@ -1640,9 +1674,9 @@ try { if (boolean_value == 0) pSession->bVerbose = false; else if (boolean_value == 1) pSession->bVerbose = true; - else throw LinuxSamplerException("Not a boolean value, must either be 0 or 1"); + else throw Exception("Not a boolean value, must either be 0 or 1"); } - catch (LinuxSamplerException e) { + catch (Exception e) { result.Error(e); } return result.Produce();