#include "gtl_gui_config_hw_widget_audio.h" #include "ui_gtl_gui_config_hw_widget_audio.h" #include "hw/gtl_hw_audio.h" namespace gtl { namespace gui { namespace config { hw_widget_audio::hw_widget_audio(QWidget *parent) : hw_widget(parent) , ui(new Ui::config_hw_widget_audio) { ui->setupUi(this); _devices = new QMediaDevices(this); connect(ui->devices, &QComboBox::currentIndexChanged, this, &hw_widget_audio::device_changed); const auto devices = _devices->audioInputs(); for (auto &device_info: devices) ui->devices->addItem(device_info.description(), QVariant::fromValue(device_info)); } hw_widget_audio::~hw_widget_audio() { delete ui; } hw::device *hw_widget_audio::create_device() { return new gtl::hw::audio(ui->channels->currentData().toInt(), (QAudioFormat::SampleFormat)ui->sample_format->currentData().toInt()); } QString hw_widget_audio::id() { return ui->devices->currentData().value().id(); } qreal hw_widget_audio::rate() { return ui->rate->value(); } void hw_widget_audio::device_changed(int idx) { QAudioDevice device_info = ui->devices->itemData(idx).value(); ui->rate->setMinimum(device_info.minimumSampleRate()); ui->rate->setMaximum(device_info.maximumSampleRate()); int sampleValue = qBound(device_info.minimumSampleRate(), 48000, device_info.maximumSampleRate()); ui->rate->setValue(sampleValue); ui->freq_label->setText( tr("Rate") + " (" + QString::number(device_info.minimumSampleRate()) + " - " + QString::number(device_info.maximumSampleRate()) + ") " + ":" ); ui->channels->clear(); for(int i = device_info.minimumChannelCount(); i <= device_info.maximumChannelCount(); i++) ui->channels->addItem(QString::number(i), i); ui->sample_format->clear(); auto sample_formats = device_info.supportedSampleFormats(); for(auto sample_format: sample_formats) { QString sample_format_string = tr("Unknown"); if(sample_format == QAudioFormat::UInt8) sample_format_string = tr("Unsigned 8 bit"); else if(sample_format == QAudioFormat::Int16) sample_format_string = tr("Signed 16 bit"); else if(sample_format == QAudioFormat::Int32) sample_format_string = tr("Signed 32 bit"); else if(sample_format == QAudioFormat::Float) sample_format_string = tr("Float"); ui->sample_format->addItem(sample_format_string, sample_format); } } } } }