Mercurial > hg > sonic-visualiser
comparison main/PreferencesDialog.cpp @ 1397:558347e7e1ab bqresample
Audio device selection
| author | Chris Cannam |
|---|---|
| date | Wed, 07 Dec 2016 11:53:19 +0000 |
| parents | 032bf0b11de9 |
| children | a89ca5ccb958 |
comparison
equal
deleted
inserted
replaced
| 1396:bdf06d34730f | 1397:558347e7e1ab |
|---|---|
| 40 #include "widgets/IconLoader.h" | 40 #include "widgets/IconLoader.h" |
| 41 #include "base/Preferences.h" | 41 #include "base/Preferences.h" |
| 42 #include "base/ResourceFinder.h" | 42 #include "base/ResourceFinder.h" |
| 43 #include "layer/ColourMapper.h" | 43 #include "layer/ColourMapper.h" |
| 44 | 44 |
| 45 //#include "audioio/AudioTargetFactory.h" | 45 #include "bqaudioio/AudioFactory.h" |
| 46 | 46 |
| 47 #include "version.h" | 47 #include "version.h" |
| 48 | |
| 49 using namespace std; | |
| 48 | 50 |
| 49 PreferencesDialog::PreferencesDialog(QWidget *parent) : | 51 PreferencesDialog::PreferencesDialog(QWidget *parent) : |
| 50 QDialog(parent), | 52 QDialog(parent), |
| 51 m_audioDevice(0), | 53 m_audioImplementation(0), |
| 54 m_audioPlaybackDevice(0), | |
| 55 m_audioRecordDevice(0), | |
| 52 m_changesOnRestart(false) | 56 m_changesOnRestart(false) |
| 53 { | 57 { |
| 54 setWindowTitle(tr("Sonic Visualiser: Application Preferences")); | 58 setWindowTitle(tr("Sonic Visualiser: Application Preferences")); |
| 55 | 59 |
| 56 Preferences *prefs = Preferences::getInstance(); | 60 Preferences *prefs = Preferences::getInstance(); |
| 182 octaveSystem->setCurrentIndex(oct); | 186 octaveSystem->setCurrentIndex(oct); |
| 183 | 187 |
| 184 connect(octaveSystem, SIGNAL(currentIndexChanged(int)), | 188 connect(octaveSystem, SIGNAL(currentIndexChanged(int)), |
| 185 this, SLOT(octaveSystemChanged(int))); | 189 this, SLOT(octaveSystemChanged(int))); |
| 186 | 190 |
| 187 /*!!! restore | |
| 188 QComboBox *audioDevice = new QComboBox; | |
| 189 std::vector<QString> devices = | |
| 190 AudioTargetFactory::getInstance()->getCallbackTargetNames(); | |
| 191 | |
| 192 settings.beginGroup("Preferences"); | 191 settings.beginGroup("Preferences"); |
| 193 QString targetName = settings.value("audio-target", "").toString(); | 192 |
| 193 QComboBox *audioImplementation = new QComboBox; | |
| 194 connect(audioImplementation, SIGNAL(currentIndexChanged(int)), | |
| 195 this, SLOT(audioImplementationChanged(int))); | |
| 196 | |
| 197 m_audioPlaybackDeviceCombo = new QComboBox; | |
| 198 connect(m_audioPlaybackDeviceCombo, SIGNAL(currentIndexChanged(int)), | |
| 199 this, SLOT(audioPlaybackDeviceChanged(int))); | |
| 200 | |
| 201 m_audioRecordDeviceCombo = new QComboBox; | |
| 202 connect(m_audioRecordDeviceCombo, SIGNAL(currentIndexChanged(int)), | |
| 203 this, SLOT(audioRecordDeviceChanged(int))); | |
| 204 | |
| 205 vector<string> names = breakfastquay::AudioFactory::getImplementationNames(); | |
| 206 QString implementationName = settings.value("audio-target", "").toString(); | |
| 207 if (implementationName == "auto") implementationName = ""; | |
| 208 audioImplementation->addItem(tr("(auto)")); | |
| 209 m_audioImplementation = 0; | |
| 210 for (int i = 0; in_range_for(names, i); ++i) { | |
| 211 audioImplementation->addItem | |
| 212 (breakfastquay::AudioFactory::getImplementationDescription(names[i]). | |
| 213 c_str()); | |
| 214 if (implementationName.toStdString() == names[i]) { | |
| 215 audioImplementation->setCurrentIndex(i+1); | |
| 216 m_audioImplementation = i+1; | |
| 217 } | |
| 218 } | |
| 194 settings.endGroup(); | 219 settings.endGroup(); |
| 195 | 220 |
| 196 for (int i = 0; i < (int)devices.size(); ++i) { | 221 rebuildDeviceCombos(); |
| 197 audioDevice->addItem(AudioTargetFactory::getInstance() | 222 m_changesOnRestart = false; // the rebuild will have changed this |
| 198 ->getCallbackTargetDescription(devices[i])); | |
| 199 if (targetName == devices[i]) audioDevice->setCurrentIndex(i); | |
| 200 } | |
| 201 | |
| 202 connect(audioDevice, SIGNAL(currentIndexChanged(int)), | |
| 203 this, SLOT(audioDeviceChanged(int))); | |
| 204 */ | |
| 205 | 223 |
| 206 QCheckBox *resampleOnLoad = new QCheckBox; | 224 QCheckBox *resampleOnLoad = new QCheckBox; |
| 207 m_resampleOnLoad = prefs->getResampleOnLoad(); | 225 m_resampleOnLoad = prefs->getResampleOnLoad(); |
| 208 resampleOnLoad->setCheckState(m_resampleOnLoad ? Qt::Checked : | 226 resampleOnLoad->setCheckState(m_resampleOnLoad ? Qt::Checked : |
| 209 Qt::Unchecked); | 227 Qt::Unchecked); |
| 367 subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel | 385 subgrid->addWidget(new QLabel(tr("%1:").arg(prefs->getPropertyLabel |
| 368 ("Use Gapless Mode"))), | 386 ("Use Gapless Mode"))), |
| 369 row, 0); | 387 row, 0); |
| 370 subgrid->addWidget(gaplessMode, row++, 1, 1, 1); | 388 subgrid->addWidget(gaplessMode, row++, 1, 1, 1); |
| 371 | 389 |
| 372 //!!! subgrid->addWidget(new QLabel(tr("Playback audio device:")), row, 0); | 390 subgrid->addWidget(new QLabel(tr("Audio service:")), row, 0); |
| 373 //!!! subgrid->addWidget(audioDevice, row++, 1, 1, 2); | 391 subgrid->addWidget(audioImplementation, row++, 1, 1, 2); |
| 392 | |
| 393 subgrid->addWidget(new QLabel(tr("Audio playback device:")), row, 0); | |
| 394 subgrid->addWidget(m_audioPlaybackDeviceCombo, row++, 1, 1, 2); | |
| 395 | |
| 396 subgrid->addWidget(new QLabel(tr("Audio record device:")), row, 0); | |
| 397 subgrid->addWidget(m_audioRecordDeviceCombo, row++, 1, 1, 2); | |
| 374 | 398 |
| 375 subgrid->setRowStretch(row, 10); | 399 subgrid->setRowStretch(row, 10); |
| 376 | 400 |
| 377 m_tabOrdering[GeneralTab] = m_tabs->count(); | 401 m_tabOrdering[GeneralTab] = m_tabs->count(); |
| 378 m_tabs->addTab(frame, tr("&General")); | 402 m_tabs->addTab(frame, tr("&General")); |
| 508 } | 532 } |
| 509 m_templates.push_back(""); | 533 m_templates.push_back(""); |
| 510 | 534 |
| 511 QStringList templates = ResourceFinder().getResourceFiles("templates", "svt"); | 535 QStringList templates = ResourceFinder().getResourceFiles("templates", "svt"); |
| 512 | 536 |
| 513 std::set<QString> byName; | 537 set<QString> byName; |
| 514 foreach (QString t, templates) { | 538 foreach (QString t, templates) { |
| 515 byName.insert(QFileInfo(t).baseName()); | 539 byName.insert(QFileInfo(t).baseName()); |
| 516 } | 540 } |
| 517 | 541 |
| 518 foreach (QString t, byName) { | 542 foreach (QString t, byName) { |
| 548 { | 572 { |
| 549 SVDEBUG << "PreferencesDialog::~PreferencesDialog()" << endl; | 573 SVDEBUG << "PreferencesDialog::~PreferencesDialog()" << endl; |
| 550 } | 574 } |
| 551 | 575 |
| 552 void | 576 void |
| 577 PreferencesDialog::rebuildDeviceCombos() | |
| 578 { | |
| 579 QSettings settings; | |
| 580 settings.beginGroup("Preferences"); | |
| 581 | |
| 582 vector<string> names = breakfastquay::AudioFactory::getImplementationNames(); | |
| 583 string implementationName; | |
| 584 if (in_range_for(names, m_audioImplementation-1)) { | |
| 585 implementationName = names[m_audioImplementation-1]; | |
| 586 } | |
| 587 | |
| 588 m_audioPlaybackDeviceCombo->clear(); | |
| 589 m_audioRecordDeviceCombo->clear(); | |
| 590 | |
| 591 QString suffix; | |
| 592 if (implementationName != "") { | |
| 593 suffix = "-" + QString(implementationName.c_str()); | |
| 594 } | |
| 595 | |
| 596 names = breakfastquay::AudioFactory::getPlaybackDeviceNames(implementationName); | |
| 597 QString playbackDeviceName = settings.value | |
| 598 ("audio-playback-device" + suffix, "").toString(); | |
| 599 m_audioPlaybackDeviceCombo->addItem(tr("(auto)")); | |
| 600 m_audioPlaybackDeviceCombo->setCurrentIndex(0); | |
| 601 m_audioPlaybackDevice = 0; | |
| 602 for (int i = 0; in_range_for(names, i); ++i) { | |
| 603 m_audioPlaybackDeviceCombo->addItem(names[i].c_str()); | |
| 604 if (playbackDeviceName.toStdString() == names[i]) { | |
| 605 m_audioPlaybackDeviceCombo->setCurrentIndex(i+1); | |
| 606 m_audioPlaybackDevice = i+1; | |
| 607 } | |
| 608 } | |
| 609 | |
| 610 names = breakfastquay::AudioFactory::getRecordDeviceNames(implementationName); | |
| 611 QString recordDeviceName = settings.value | |
| 612 ("audio-record-device" + suffix, "").toString(); | |
| 613 m_audioRecordDeviceCombo->addItem(tr("(auto)")); | |
| 614 m_audioRecordDeviceCombo->setCurrentIndex(0); | |
| 615 m_audioRecordDevice = 0; | |
| 616 for (int i = 0; in_range_for(names, i); ++i) { | |
| 617 m_audioRecordDeviceCombo->addItem(names[i].c_str()); | |
| 618 if (recordDeviceName.toStdString() == names[i]) { | |
| 619 m_audioRecordDeviceCombo->setCurrentIndex(i+1); | |
| 620 m_audioRecordDevice = i+1; | |
| 621 } | |
| 622 } | |
| 623 | |
| 624 settings.endGroup(); | |
| 625 } | |
| 626 | |
| 627 void | |
| 553 PreferencesDialog::switchToTab(Tab t) | 628 PreferencesDialog::switchToTab(Tab t) |
| 554 { | 629 { |
| 555 if (m_tabOrdering.contains(t)) { | 630 if (m_tabOrdering.contains(t)) { |
| 556 m_tabs->setCurrentIndex(m_tabOrdering[t]); | 631 m_tabs->setCurrentIndex(m_tabOrdering[t]); |
| 557 } | 632 } |
| 612 m_tuningFrequency = freq; | 687 m_tuningFrequency = freq; |
| 613 m_applyButton->setEnabled(true); | 688 m_applyButton->setEnabled(true); |
| 614 } | 689 } |
| 615 | 690 |
| 616 void | 691 void |
| 617 PreferencesDialog::audioDeviceChanged(int s) | 692 PreferencesDialog::audioImplementationChanged(int s) |
| 618 { | 693 { |
| 619 m_audioDevice = s; | 694 if (m_audioImplementation != s) { |
| 620 m_applyButton->setEnabled(true); | 695 m_audioImplementation = s; |
| 621 m_changesOnRestart = true; | 696 rebuildDeviceCombos(); |
| 697 m_applyButton->setEnabled(true); | |
| 698 m_changesOnRestart = true; | |
| 699 } | |
| 700 } | |
| 701 | |
| 702 void | |
| 703 PreferencesDialog::audioPlaybackDeviceChanged(int s) | |
| 704 { | |
| 705 if (m_audioPlaybackDevice != s) { | |
| 706 m_audioPlaybackDevice = s; | |
| 707 m_applyButton->setEnabled(true); | |
| 708 m_changesOnRestart = true; | |
| 709 } | |
| 710 } | |
| 711 | |
| 712 void | |
| 713 PreferencesDialog::audioRecordDeviceChanged(int s) | |
| 714 { | |
| 715 if (m_audioRecordDevice != s) { | |
| 716 m_audioRecordDevice = s; | |
| 717 m_applyButton->setEnabled(true); | |
| 718 m_changesOnRestart = true; | |
| 719 } | |
| 622 } | 720 } |
| 623 | 721 |
| 624 void | 722 void |
| 625 PreferencesDialog::resampleOnLoadChanged(int state) | 723 PreferencesDialog::resampleOnLoadChanged(int state) |
| 626 { | 724 { |
| 767 prefs->setShowHMS(m_showHMS); | 865 prefs->setShowHMS(m_showHMS); |
| 768 prefs->setViewFontSize(m_viewFontSize); | 866 prefs->setViewFontSize(m_viewFontSize); |
| 769 | 867 |
| 770 prefs->setProperty("Octave Numbering System", m_octaveSystem); | 868 prefs->setProperty("Octave Numbering System", m_octaveSystem); |
| 771 | 869 |
| 772 //!!! std::vector<QString> devices = | |
| 773 //!!! AudioTargetFactory::getInstance()->getCallbackTargetNames(); | |
| 774 | |
| 775 QSettings settings; | 870 QSettings settings; |
| 776 settings.beginGroup("Preferences"); | 871 settings.beginGroup("Preferences"); |
| 777 QString permishTag = QString("network-permission-%1").arg(SV_VERSION); | 872 QString permishTag = QString("network-permission-%1").arg(SV_VERSION); |
| 778 settings.setValue(permishTag, m_networkPermission); | 873 settings.setValue(permishTag, m_networkPermission); |
| 779 //!!! settings.setValue("audio-target", devices[m_audioDevice]); | 874 |
| 875 vector<string> names = breakfastquay::AudioFactory::getImplementationNames(); | |
| 876 string implementationName; | |
| 877 if (m_audioImplementation > 0) { | |
| 878 implementationName = names[m_audioImplementation-1]; | |
| 879 } | |
| 880 settings.setValue("audio-target", implementationName.c_str()); | |
| 881 | |
| 882 QString suffix; | |
| 883 if (implementationName != "") { | |
| 884 suffix = "-" + QString(implementationName.c_str()); | |
| 885 } | |
| 886 | |
| 887 names = breakfastquay::AudioFactory::getPlaybackDeviceNames(implementationName); | |
| 888 string deviceName; | |
| 889 if (m_audioPlaybackDevice > 0) { | |
| 890 deviceName = names[m_audioPlaybackDevice-1]; | |
| 891 } | |
| 892 settings.setValue("audio-playback-device" + suffix, deviceName.c_str()); | |
| 893 | |
| 894 names = breakfastquay::AudioFactory::getRecordDeviceNames(implementationName); | |
| 895 deviceName = ""; | |
| 896 if (m_audioRecordDevice > 0) { | |
| 897 deviceName = names[m_audioRecordDevice-1]; | |
| 898 } | |
| 899 settings.setValue("audio-record-device" + suffix, deviceName.c_str()); | |
| 900 | |
| 780 settings.setValue("locale", m_currentLocale); | 901 settings.setValue("locale", m_currentLocale); |
| 781 #ifdef Q_OS_MAC | 902 #ifdef Q_OS_MAC |
| 782 settings.setValue("scaledHiDpi", m_retina); | 903 settings.setValue("scaledHiDpi", m_retina); |
| 783 #endif | 904 #endif |
| 784 settings.setValue("spectrogram-colour", m_spectrogramGColour); | 905 settings.setValue("spectrogram-colour", m_spectrogramGColour); |
