preferences: revised audio tab

Cleaned up and improved the audio tab.

Fixes #1546. Kind of. There doesn't seem to be much need for a
sample rate selection for our current high-level audio system.
If we implement higher end audio backends in the future (e.g.
ASIO, JACK), those can be given a sample rate setting.
This commit is contained in:
itsmattkc
2021-04-11 20:20:01 +10:00
parent 8c18b58bbb
commit 82d2a253d9
8 changed files with 90 additions and 54 deletions
+12
View File
@@ -28,6 +28,18 @@ namespace olive {
AudioManager* AudioManager::instance_ = nullptr;
QString AudioManager::GetAudioBackendName(AudioManager::Backend b)
{
switch (b) {
case kAudioBackendQt:
return tr("Qt");
case kAudioBackendCount:
break;
}
return tr("Unknown");
}
void AudioManager::CreateInstance()
{
if (instance_ == nullptr) {
+7
View File
@@ -44,6 +44,13 @@ class AudioManager : public QObject
{
Q_OBJECT
public:
enum Backend {
kAudioBackendQt,
kAudioBackendCount
};
static QString GetAudioBackendName(Backend b);
static void CreateInstance();
static void DestroyInstance();
@@ -36,7 +36,6 @@ namespace olive {
PreferencesAppearanceTab::PreferencesAppearanceTab()
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setMargin(0);
QGridLayout* appearance_layout = new QGridLayout();
layout->addLayout(appearance_layout);
@@ -21,6 +21,7 @@
#include "preferencesaudiotab.h"
#include <QGridLayout>
#include <QGroupBox>
#include <QLabel>
#include "audio/audiomanager.h"
@@ -30,65 +31,88 @@ namespace olive {
PreferencesAudioTab::PreferencesAudioTab()
{
QGridLayout* audio_tab_layout = new QGridLayout(this);
audio_tab_layout->setMargin(0);
QVBoxLayout* audio_tab_layout = new QVBoxLayout(this);
int row = 0;
{
// Backend Layout
QGridLayout* main_layout = new QGridLayout();
main_layout->setMargin(0);
// Audio -> Output Device
audio_tab_layout->addWidget(new QLabel(tr("Output Device:")), row, 0);
int row = 0;
audio_output_devices_ = new QComboBox();
audio_tab_layout->addWidget(audio_output_devices_, row, 1);
main_layout->addWidget(new QLabel(tr("Backend:")), row, 0);
row++;
// Audio -> Input Device
audio_tab_layout->addWidget(new QLabel(tr("Input Device:")), row, 0);
audio_input_devices_ = new QComboBox();
audio_tab_layout->addWidget(audio_input_devices_, row, 1);
row++;
// Audio -> Sample Rate
audio_tab_layout->addWidget(new QLabel(tr("Sample Rate:")), row, 0);
audio_sample_rate_ = new QComboBox();
/*combobox_audio_sample_rates(audio_sample_rate);
for (int i=0;i<audio_sample_rate->count();i++) {
if (audio_sample_rate->itemData(i).toInt() == olive::config.audio_rate) {
audio_sample_rate->setCurrentIndex(i);
break;
audio_backend_combobox_ = new QComboBox();
for (int i=0; i<AudioManager::kAudioBackendCount; i++) {
audio_backend_combobox_->addItem(AudioManager::GetAudioBackendName(static_cast<AudioManager::Backend>(i)));
}
}*/
main_layout->addWidget(audio_backend_combobox_, row, 1);
audio_tab_layout->addWidget(audio_sample_rate_, row, 1);
audio_tab_layout->addLayout(main_layout);
}
row++;
{
// Qt-Backend Layout
QGroupBox* qt_groupbox = new QGroupBox();
audio_tab_layout->addWidget(qt_groupbox);
// Audio -> Audio Recording
audio_tab_layout->addWidget(new QLabel(tr("Audio Recording:"), this), row, 0);
QVBoxLayout* qt_layout = new QVBoxLayout(qt_groupbox);
recording_combobox_ = new QComboBox();
recording_combobox_->addItem(tr("Mono"));
recording_combobox_->addItem(tr("Stereo"));
// recordingComboBox->setCurrentIndex(olive::config.recording_mode - 1);
audio_tab_layout->addWidget(recording_combobox_, row, 1);
int row = 0;
row++;
{
// Output Group
QGroupBox* qt_output_group = new QGroupBox();
qt_output_group->setTitle(tr("Output"));
qt_layout->addWidget(qt_output_group);
refresh_devices_btn_ = new QPushButton(tr("Refresh Devices"));
audio_tab_layout->addWidget(refresh_devices_btn_, row, 1);
QGridLayout* qt_output_layout = new QGridLayout(qt_output_group);
row++;
qt_output_layout->addWidget(new QLabel(tr("Device:")), row, 0);
RetrieveDeviceLists();
audio_output_devices_ = new QComboBox();
qt_output_layout->addWidget(audio_output_devices_, row, 1);
}
connect(refresh_devices_btn_, &QPushButton::clicked, this, &PreferencesAudioTab::RefreshDevices);
connect(AudioManager::instance(), &AudioManager::OutputListReady, this, &PreferencesAudioTab::RetrieveOutputList);
connect(AudioManager::instance(), &AudioManager::InputListReady, this, &PreferencesAudioTab::RetrieveInputList);
row = 0;
{
QGroupBox* qt_input_group = new QGroupBox();
qt_input_group->setTitle(tr("Input"));
qt_layout->addWidget(qt_input_group);
QGridLayout* qt_input_layout = new QGridLayout(qt_input_group);
qt_input_layout->addWidget(new QLabel(tr("Device:")), row, 0);
audio_input_devices_ = new QComboBox();
qt_input_layout->addWidget(audio_input_devices_, row, 1);
row++;
qt_input_layout->addWidget(new QLabel(tr("Recording Mode:"), this), row, 0);
recording_combobox_ = new QComboBox();
recording_combobox_->addItem(tr("Mono"));
recording_combobox_->addItem(tr("Stereo"));
qt_input_layout->addWidget(recording_combobox_, row, 1);
}
QHBoxLayout* qt_refresh_layout = new QHBoxLayout();
qt_layout->addLayout(qt_refresh_layout);
qt_refresh_layout->addStretch();
refresh_devices_btn_ = new QPushButton(tr("Refresh Devices"));
qt_refresh_layout->addWidget(refresh_devices_btn_);
RetrieveDeviceLists();
connect(refresh_devices_btn_, &QPushButton::clicked, this, &PreferencesAudioTab::RefreshDevices);
connect(AudioManager::instance(), &AudioManager::OutputListReady, this, &PreferencesAudioTab::RetrieveOutputList);
connect(AudioManager::instance(), &AudioManager::InputListReady, this, &PreferencesAudioTab::RetrieveInputList);
}
audio_tab_layout->addStretch();
}
void PreferencesAudioTab::Accept(MultiUndoCommand *command)
@@ -38,6 +38,8 @@ public:
virtual void Accept(MultiUndoCommand* command) override;
private:
QComboBox* audio_backend_combobox_;
/**
* @brief UI widget for selecting the output audio device
*/
@@ -48,11 +50,6 @@ private:
*/
QComboBox* audio_input_devices_;
/**
* @brief UI widget for selecting the audio sampling rates
*/
QComboBox* audio_sample_rate_;
/**
* @brief UI widget for editing the recording channels
*/
@@ -30,7 +30,6 @@ namespace olive {
PreferencesBehaviorTab::PreferencesBehaviorTab()
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setMargin(0);
behavior_tree_ = new QTreeWidget();
layout->addWidget(behavior_tree_);
@@ -35,7 +35,6 @@ namespace olive {
PreferencesGeneralTab::PreferencesGeneralTab()
{
QVBoxLayout* layout = new QVBoxLayout(this);
layout->setMargin(0);
{
QGroupBox* global_groupbox = new QGroupBox(tr("Locale"));
@@ -32,7 +32,6 @@ namespace olive {
PreferencesKeyboardTab::PreferencesKeyboardTab(QMenuBar *menubar)
{
QVBoxLayout* shortcut_layout = new QVBoxLayout(this);
shortcut_layout->setMargin(0);
QLineEdit* key_search_line = new QLineEdit();
key_search_line->setPlaceholderText(tr("Search for action or shortcut"));