@@ -90,7 +90,11 @@ ofxVisualProgramming::ofxVisualProgramming(){
9090 audioNumBuffers = 4 ;
9191 audioGUIINIndex = -1 ;
9292 audioGUIOUTIndex = -1 ;
93+ audioGUIINChannels = 0 ;
94+ audioGUIOUTChannels = 0 ;
9395 bpm = 120 ;
96+ isInputDeviceAvailable = false ;
97+ isOutputDeviceAvailable = false ;
9498 dspON = false ;
9599 audioINDev = 0 ;
96100 audioOUTDev = 0 ;
@@ -1312,41 +1316,66 @@ void ofxVisualProgramming::loadPatch(string patchFile){
13121316 audioGUIINIndex = -1 ;
13131317 audioGUIOUTIndex = -1 ;
13141318
1319+ audioGUIINChannels = 0 ;
1320+ audioGUIOUTChannels = 0 ;
1321+
13151322 for (size_t i=0 ;i<audioDevicesID_IN.size ();i++){
13161323 if (audioDevicesID_IN.at (i) == audioINDev){
13171324 audioGUIINIndex = i;
13181325 break ;
13191326 }
13201327 }
1321- if (audioGUIINIndex == -1 ){
1328+ if (audioGUIINIndex == -1 ){ // no input devices available
1329+ isInputDeviceAvailable = false ;
13221330 audioGUIINIndex = 0 ;
13231331 audioINDev = audioDevicesID_IN.at (audioGUIINIndex);
1332+ }else {
1333+ isInputDeviceAvailable = true ;
13241334 }
1335+
13251336 for (size_t i=0 ;i<audioDevicesID_OUT.size ();i++){
13261337 if (audioDevicesID_OUT.at (i) == audioOUTDev){
13271338 audioGUIOUTIndex = i;
13281339 break ;
13291340 }
13301341 }
1331- if (audioGUIOUTIndex == -1 ){
1342+ if (audioGUIOUTIndex == -1 ){ // no output devices available
1343+ isOutputDeviceAvailable = false ;
13321344 audioGUIOUTIndex = 0 ;
13331345 audioOUTDev = audioDevicesID_OUT.at (audioGUIOUTIndex);
1346+ }else {
1347+ isOutputDeviceAvailable = false ;
13341348 }
13351349
1336- audioSampleRate = audioDevices[audioOUTDev].sampleRates [0 ];
13371350
1338- if (audioSampleRate < 44100 ){
1339- audioSampleRate = 44100 ;
1351+
1352+ if (isInputDeviceAvailable){
1353+ audioGUIINChannels = static_cast <int >(audioDevices[audioINDev].inputChannels );
1354+ audioSampleRate = audioDevices[audioINDev].sampleRates [0 ];
1355+ }else {
1356+ audioGUIINChannels = 0 ;
13401357 }
13411358
1359+ if (isOutputDeviceAvailable){
1360+ audioGUIOUTChannels = static_cast <int >(audioDevices[audioOUTDev].outputChannels );
1361+ audioSampleRate = audioDevices[audioOUTDev].sampleRates [0 ];
1362+ }else {
1363+ audioGUIOUTChannels = 0 ;
1364+ }
1365+
1366+ /* if(audioSampleRate < 44100){
1367+ audioSampleRate = 44100;
1368+ }*/
1369+
13421370 XML.setValue (" sample_rate_in" ,audioSampleRate);
13431371 XML.setValue (" sample_rate_out" ,audioSampleRate);
1344- XML.setValue (" input_channels" ,static_cast < int >(audioDevices[audioINDev]. inputChannels ) );
1345- XML.setValue (" output_channels" ,static_cast < int >(audioDevices[audioOUTDev]. outputChannels ) );
1372+ XML.setValue (" input_channels" ,audioGUIINChannels );
1373+ XML.setValue (" output_channels" ,audioGUIOUTChannels );
13461374 XML.saveFile ();
13471375
1348- if (dspON){
1349- engine->setChannels (audioDevices[audioINDev].inputChannels , audioDevices[audioOUTDev].outputChannels );
1376+ // at least we need one audio device available (input or output) to start the engine
1377+ if (dspON && (isInputDeviceAvailable || isOutputDeviceAvailable)){
1378+ engine->setChannels (audioGUIINChannels, audioGUIOUTChannels);
13501379 this ->setChannels (audioDevices[audioINDev].inputChannels ,0 );
13511380
13521381 for (unsigned int in=0 ;in<audioDevices[audioINDev].inputChannels ;in++){
0 commit comments