| @@ -136,19 +136,22 @@ int Port::getNumOutputs() { | |||||
| json_t* Port::toJson() { | json_t* Port::toJson() { | ||||
| json_t* rootJ = json_object(); | json_t* rootJ = json_object(); | ||||
| if (driver) { | |||||
| json_object_set_new(rootJ, "driver", json_integer(getDriverId())); | |||||
| std::string deviceName = driver->getDeviceName(getDeviceId()); | |||||
| if (!deviceName.empty()) | |||||
| json_object_set_new(rootJ, "deviceName", json_string(deviceName.c_str())); | |||||
| json_object_set_new(rootJ, "sampleRate", json_integer(getSampleRate())); | |||||
| json_object_set_new(rootJ, "blockSize", json_integer(getBlockSize())); | |||||
| json_object_set_new(rootJ, "offset", json_integer(offset)); | |||||
| json_object_set_new(rootJ, "driver", json_integer(getDriverId())); | |||||
| if (device) { | |||||
| std::string deviceName = device->getName(); | |||||
| json_object_set_new(rootJ, "deviceName", json_string(deviceName.c_str())); | |||||
| } | } | ||||
| json_object_set_new(rootJ, "sampleRate", json_integer(getSampleRate())); | |||||
| json_object_set_new(rootJ, "blockSize", json_integer(getBlockSize())); | |||||
| json_object_set_new(rootJ, "offset", json_integer(offset)); | |||||
| return rootJ; | return rootJ; | ||||
| } | } | ||||
| void Port::fromJson(json_t* rootJ) { | void Port::fromJson(json_t* rootJ) { | ||||
| setDriverId(-1); | |||||
| json_t* driverJ = json_object_get(rootJ, "driver"); | json_t* driverJ = json_object_get(rootJ, "driver"); | ||||
| if (driverJ) | if (driverJ) | ||||
| setDriverId(json_number_value(driverJ)); | setDriverId(json_number_value(driverJ)); | ||||
| @@ -959,7 +959,9 @@ json_t* Engine::toJson() { | |||||
| void Engine::fromJson(json_t* rootJ) { | void Engine::fromJson(json_t* rootJ) { | ||||
| std::lock_guard<std::recursive_mutex> lock(internal->mutex); | |||||
| // Don't lock here because Module::fromJson for example might deadlock, and we actually don't really need thread safety other than the addModule() and addCable() calls, which are already behind locks. | |||||
| // std::lock_guard<std::recursive_mutex> lock(internal->mutex); | |||||
| // modules | // modules | ||||
| json_t* modulesJ = json_object_get(rootJ, "modules"); | json_t* modulesJ = json_object_get(rootJ, "modules"); | ||||
| if (!modulesJ) | if (!modulesJ) | ||||
| @@ -76,8 +76,8 @@ struct RtAudioDevice : audio::Device { | |||||
| } | } | ||||
| } | } | ||||
| INFO("Opening audio RtAudio device %d with %d in %d out", deviceId, inputParameters.nChannels, outputParameters.nChannels); | |||||
| try { | try { | ||||
| INFO("Opening audio RtAudio device %d with %d in %d out", deviceId, inputParameters.nChannels, outputParameters.nChannels); | |||||
| rtAudio->openStream( | rtAudio->openStream( | ||||
| outputParameters.nChannels == 0 ? NULL : &outputParameters, | outputParameters.nChannels == 0 ? NULL : &outputParameters, | ||||
| inputParameters.nChannels == 0 ? NULL : &inputParameters, | inputParameters.nChannels == 0 ? NULL : &inputParameters, | ||||
| @@ -89,8 +89,8 @@ struct RtAudioDevice : audio::Device { | |||||
| return; | return; | ||||
| } | } | ||||
| INFO("Starting RtAudio stream %d", deviceId); | |||||
| try { | try { | ||||
| INFO("Starting RtAudio stream %d", deviceId); | |||||
| rtAudio->startStream(); | rtAudio->startStream(); | ||||
| } | } | ||||
| catch (RtAudioError& e) { | catch (RtAudioError& e) { | ||||
| @@ -100,6 +100,7 @@ struct RtAudioDevice : audio::Device { | |||||
| // Update sample rate to actual value | // Update sample rate to actual value | ||||
| sampleRate = rtAudio->getStreamSampleRate(); | sampleRate = rtAudio->getStreamSampleRate(); | ||||
| INFO("Opened RtAudio stream"); | |||||
| onOpenStream(); | onOpenStream(); | ||||
| } | } | ||||
| @@ -122,6 +123,7 @@ struct RtAudioDevice : audio::Device { | |||||
| WARN("Failed to close RtAudio stream %s", e.what()); | WARN("Failed to close RtAudio stream %s", e.what()); | ||||
| } | } | ||||
| } | } | ||||
| INFO("Closed RtAudio stream"); | |||||
| onCloseStream(); | onCloseStream(); | ||||
| } | } | ||||