/[svn]/linuxsampler/trunk/src/network/lscpserver.cpp
ViewVC logotype

Diff of /linuxsampler/trunk/src/network/lscpserver.cpp

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

revision 142 by senkov, Tue Jun 22 00:02:17 2004 UTC revision 143 by capela, Wed Jun 23 18:54:08 2004 UTC
# Line 90  void LSCPServer::AnswerClient(String Ret Line 90  void LSCPServer::AnswerClient(String Ret
90      send(hSession, ReturnMessage.c_str(), ReturnMessage.size(), 0);      send(hSession, ReturnMessage.c_str(), ReturnMessage.size(), 0);
91  }  }
92    
93    /**
94     * Find a created audio output device index.
95     */
96    int LSCPServer::GetAudioOutputDeviceIndex ( AudioOutputDevice *pDevice )
97    {
98        // Search for the created device to get its index
99        std::map<uint, AudioOutputDevice*> devices = pSampler->GetAudioOutputDevices();
100        std::map<uint, AudioOutputDevice*>::iterator iter = devices.begin();
101        for (; iter != devices.end(); iter++) {
102            if (iter->second == pDevice)
103                return iter->first;
104        }
105        // Not found.
106        return -1;
107    }
108    
109  String LSCPServer::CreateAudioOutputDevice(String Driver, std::map<String,String> Parameters) {  String LSCPServer::CreateAudioOutputDevice(String Driver, std::map<String,String> Parameters) {
110      dmsg(2,("LSCPServer: CreateAudioOutputDevice(Driver=%s)\n", Driver.c_str()));      dmsg(2,("LSCPServer: CreateAudioOutputDevice(Driver=%s)\n", Driver.c_str()));
111      LSCPResultSet result;      LSCPResultSet result;
112      try {      try {
113          AudioOutputDevice* pDevice = pSampler->CreateAudioOutputDevice(Driver, Parameters);          AudioOutputDevice* pDevice = pSampler->CreateAudioOutputDevice(Driver, Parameters);
         std::map<uint, AudioOutputDevice*> devices = pSampler->GetAudioOutputDevices();  
114          // search for the created device to get its index          // search for the created device to get its index
115          int index = -1;          int index = GetAudioOutputDeviceIndex(pDevice);
         std::map<uint, AudioOutputDevice*>::iterator iter = devices.begin();  
         for (; iter != devices.end(); iter++) {  
             if (iter->second == pDevice) {  
                 index = iter->first;  
                 break;  
             }  
         }  
116          if (index == -1) throw LinuxSamplerException("Internal error: could not find created audio output device.");          if (index == -1) throw LinuxSamplerException("Internal error: could not find created audio output device.");
117          result = index; // success          result = index; // success
118      }      }
# Line 140  String LSCPServer::LoadInstrument(String Line 148  String LSCPServer::LoadInstrument(String
148          if (!pSamplerChannel) throw LinuxSamplerException("Index out of bounds");          if (!pSamplerChannel) throw LinuxSamplerException("Index out of bounds");
149          Engine* pEngine = pSamplerChannel->GetEngine();          Engine* pEngine = pSamplerChannel->GetEngine();
150          if (!pEngine) throw LinuxSamplerException("No engine loaded on channel");          if (!pEngine) throw LinuxSamplerException("No engine loaded on channel");
151            if (pSamplerChannel->GetAudioOutputDevice() == NULL)
152                throw LinuxSamplerException("No audio output device on channel");
153          if (bBackground) {          if (bBackground) {
154              LSCPLoadInstrument *pLoadInstrument = new LSCPLoadInstrument(pEngine, Filename.c_str(), uiInstrument);              LSCPLoadInstrument *pLoadInstrument = new LSCPLoadInstrument(pEngine, Filename.c_str(), uiInstrument);
155              pLoadInstrument->StartThread();              pLoadInstrument->StartThread();
# Line 263  String LSCPServer::GetChannelInfo(uint u Line 273  String LSCPServer::GetChannelInfo(uint u
273          result.Add("ENGINE_NAME", EngineName);          result.Add("ENGINE_NAME", EngineName);
274          result.Add("VOLUME", Volume);          result.Add("VOLUME", Volume);
275    
276          //Some hardcoded stuff for now to make GUI look good          //Some not-so-hardcoded stuff to make GUI look good
277          result.Add("AUDIO_OUTPUT_DEVICE", "0");          result.Add("AUDIO_OUTPUT_DEVICE", GetAudioOutputDeviceIndex(pSamplerChannel->GetAudioOutputDevice()));
278          result.Add("AUDIO_OUTPUT_CHANNELS", "2");          result.Add("AUDIO_OUTPUT_CHANNELS", "2");
279          result.Add("AUDIO_OUTPUT_ROUTING", "0,1");          result.Add("AUDIO_OUTPUT_ROUTING", "0,1");
280    
# Line 454  String LSCPServer::GetAudioOutputDeviceI Line 464  String LSCPServer::GetAudioOutputDeviceI
464          std::map<uint,AudioOutputDevice*> devices = pSampler->GetAudioOutputDevices();          std::map<uint,AudioOutputDevice*> devices = pSampler->GetAudioOutputDevices();
465          if (!devices[DeviceIndex]) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceIndex) + ".");          if (!devices[DeviceIndex]) throw LinuxSamplerException("There is no audio output device with index " + ToString(DeviceIndex) + ".");
466          AudioOutputDevice* pDevice = devices[DeviceIndex];          AudioOutputDevice* pDevice = devices[DeviceIndex];
467            result.Add("driver", pDevice->Driver());
468          std::map<String,DeviceCreationParameter*> parameters = pDevice->DeviceParameters();          std::map<String,DeviceCreationParameter*> parameters = pDevice->DeviceParameters();
469          std::map<String,DeviceCreationParameter*>::iterator iter = parameters.begin();          std::map<String,DeviceCreationParameter*>::iterator iter = parameters.begin();
470          for (; iter != parameters.end(); iter++) {          for (; iter != parameters.end(); iter++) {
# Line 578  String LSCPServer::SetAudioOutputChannel Line 589  String LSCPServer::SetAudioOutputChannel
589      return "ERR:0:Not implemented yet.\r\n"; //FIXME: Add support for this in resultset class?      return "ERR:0:Not implemented yet.\r\n"; //FIXME: Add support for this in resultset class?
590  }  }
591    
592    String LSCPServer::SetAudioOutputType(String AudioOutputDriver, uint uiSamplerChannel) {
593        dmsg(2,("LSCPServer: SetAudioOutputType(String AudioOutputDriver=%s, SamplerChannel=%d)\n",AudioOutputDriver.c_str(),uiSamplerChannel));
594        LSCPResultSet result;
595        try {
596            SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel);
597            if (!pSamplerChannel) throw LinuxSamplerException("Invalid channel number " + ToString(uiSamplerChannel));
598            // Driver type name aliasing...
599            if (AudioOutputDriver == "ALSA") AudioOutputDriver = "Alsa";
600            if (AudioOutputDriver == "JACK") AudioOutputDriver = "Jack";        
601            // Check if there's one audio output device already created
602            // for the intended audio driver type (AudioOutputDriver)...
603            AudioOutputDevice *pDevice = NULL;
604            std::map<uint, AudioOutputDevice*> devices = pSampler->GetAudioOutputDevices();
605            std::map<uint, AudioOutputDevice*>::iterator iter = devices.begin();
606            for (; iter != devices.end(); iter++) {
607                if ((iter->second)->Driver() == AudioOutputDriver) {
608                    pDevice = iter->second;
609                    break;
610                }
611            }
612            // If it doesn't exist, create a new one with default parameters...
613            if (pDevice == NULL) {
614                std::map<String,String> params;
615                pDevice = pSampler->CreateAudioOutputDevice(AudioOutputDriver, params);
616            }
617            // Must have a device...
618            if (pDevice == NULL)
619                throw LinuxSamplerException("Internal error: could not create audio output device.");
620            // Set it as the current channel device...
621            pSamplerChannel->SetAudioOutputDevice(pDevice);
622        }
623        catch (LinuxSamplerException e) {
624             result.Error(e);
625        }
626        return result.Produce();
627    }
628    
629    
630  String LSCPServer::SetMIDIInputType(String MidiInputDriver, uint uiSamplerChannel) {  String LSCPServer::SetMIDIInputType(String MidiInputDriver, uint uiSamplerChannel) {
631      dmsg(2,("LSCPServer: SetMIDIInputType(String MidiInputDriver=%s, SamplerChannel=%d)\n",MidiInputDriver.c_str(),uiSamplerChannel));      dmsg(2,("LSCPServer: SetMIDIInputType(String MidiInputDriver=%s, SamplerChannel=%d)\n",MidiInputDriver.c_str(),uiSamplerChannel));
632      LSCPResultSet result;      LSCPResultSet result;
# Line 585  String LSCPServer::SetMIDIInputType(Stri Line 634  String LSCPServer::SetMIDIInputType(Stri
634          SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel);          SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel);
635          if (!pSamplerChannel) throw LinuxSamplerException("Index out of bounds");          if (!pSamplerChannel) throw LinuxSamplerException("Index out of bounds");
636          // FIXME: workaround until MIDI driver configuration is implemented (using a Factory class for the MIDI input drivers then, like its already done for audio output drivers)          // FIXME: workaround until MIDI driver configuration is implemented (using a Factory class for the MIDI input drivers then, like its already done for audio output drivers)
637            if (MidiInputDriver == "ALSA") MidiInputDriver = "Alsa";
638          if (MidiInputDriver != "Alsa") throw LinuxSamplerException("Unknown MIDI input driver '" + MidiInputDriver + "'.");          if (MidiInputDriver != "Alsa") throw LinuxSamplerException("Unknown MIDI input driver '" + MidiInputDriver + "'.");
639          MidiInputDevice::type_t MidiInputType = MidiInputDevice::type_alsa;          MidiInputDevice::type_t MidiInputType = MidiInputDevice::type_alsa;
640          pSamplerChannel->SetMidiInputDevice(MidiInputType);          pSamplerChannel->SetMidiInputDevice(MidiInputType);
# Line 639  String LSCPServer::SetAudioOutputDevice( Line 689  String LSCPServer::SetAudioOutputDevice(
689      try {      try {
690          SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel);          SamplerChannel* pSamplerChannel = pSampler->GetSamplerChannel(uiSamplerChannel);
691          if (!pSamplerChannel) throw LinuxSamplerException("Invalid channel number " + ToString(uiSamplerChannel));          if (!pSamplerChannel) throw LinuxSamplerException("Invalid channel number " + ToString(uiSamplerChannel));
         Engine* pEngine = pSamplerChannel->GetEngine();  
         if (!pEngine) throw LinuxSamplerException("No engine loaded on channel");  
692          std::map<uint, AudioOutputDevice*> devices = pSampler->GetAudioOutputDevices();          std::map<uint, AudioOutputDevice*> devices = pSampler->GetAudioOutputDevices();
693          if (!devices[AudioDeviceId]) throw LinuxSamplerException("There is no audio output device with index " + ToString(AudioDeviceId));          if (!devices[AudioDeviceId]) throw LinuxSamplerException("There is no audio output device with index " + ToString(AudioDeviceId));
694          AudioOutputDevice* pDevice = devices[AudioDeviceId];          AudioOutputDevice* pDevice = devices[AudioDeviceId];

Legend:
Removed from v.142  
changed lines
  Added in v.143

  ViewVC Help
Powered by ViewVC