# HG changeset patch # User Chris Cannam # Date 1481111454 0 # Node ID 82d7e5cf7517ce2a044470a6ae28b3ffae9ef604 # Parent fdce8a452b19b639c3408b741bfe9a035e345cca Audio device selection diff -r fdce8a452b19 -r 82d7e5cf7517 framework/MainWindowBase.cpp --- a/framework/MainWindowBase.cpp Wed Aug 05 17:47:12 2015 +0100 +++ b/framework/MainWindowBase.cpp Wed Dec 07 11:50:54 2016 +0000 @@ -2164,39 +2164,66 @@ { if (m_playTarget) return; - //!!! how to handle preferences -/* QSettings settings; settings.beginGroup("Preferences"); - QString targetName = settings.value("audio-target", "").toString(); + QString implementation = settings.value + ("audio-target", "").toString(); + QString suffix; + if (implementation != "") suffix = "-" + implementation; + QString recordDevice = settings.value + ("audio-record-device" + suffix, "").toString(); + QString playbackDevice = settings.value + ("audio-playback-device" + suffix, "").toString(); settings.endGroup(); - AudioTargetFactory *factory = AudioTargetFactory::getInstance(); - - factory->setDefaultCallbackTarget(targetName); -*/ + + if (implementation == "auto") { + implementation = ""; + } - m_playTarget = - breakfastquay::AudioFactory::createCallbackPlayTarget(m_playSource); - - m_playSource->setSystemPlaybackTarget(m_playTarget); - - if (!m_playTarget) { + breakfastquay::AudioFactory::Preference preference; + preference.implementation = implementation.toStdString(); + preference.recordDevice = recordDevice.toStdString(); + preference.playbackDevice = playbackDevice.toStdString(); + + SVCERR << "createAudioIO: Preferred implementation = \"" + << preference.implementation << "\"" << endl; + SVCERR << "createAudioIO: Preferred playback device = \"" + << preference.playbackDevice << "\"" << endl; + SVCERR << "createAudioIO: Preferred record device = \"" + << preference.recordDevice << "\"" << endl; + + if (m_soundOptions & WithAudioInput) { + m_audioIO = breakfastquay::AudioFactory:: + createCallbackIO(m_recordTarget, m_playSource, preference); + if (m_audioIO) { + m_audioIO->suspend(); // start in suspended state + m_playSource->setSystemPlaybackTarget(m_audioIO); + } + } else { + m_playTarget = breakfastquay::AudioFactory:: + createCallbackPlayTarget(m_playSource, preference); + if (m_playTarget) { + m_playTarget->suspend(); // start in suspended state + m_playSource->setSystemPlaybackTarget(m_playTarget); + } + } + + if (!m_playTarget && !m_audioIO) { emit hideSplash(); - -// if (factory->isAutoCallbackTarget(targetName)) { + if (implementation == "") { QMessageBox::warning (this, tr("Couldn't open audio device"), tr("No audio available

Could not open an audio device for playback.

Automatic audio device detection failed. Audio playback will not be available during this session.

"), QMessageBox::Ok); -/* } else { QMessageBox::warning (this, tr("Couldn't open audio device"), tr("No audio available

Failed to open your preferred audio device (\"%1\").

Audio playback will not be available during this session.

") - .arg(factory->getCallbackTargetDescription(targetName)), + .arg(breakfastquay::AudioFactory:: + getImplementationDescription(implementation.toStdString()) + .c_str()), QMessageBox::Ok); } -*/ } }