test_sdk/gui/config/gtl_gui_config_hw_widget_au...

92 lines
3.3 KiB
C++
Raw Permalink Normal View History

#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<QAudioDevice>().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<QAudioDevice>();
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);
}
}
}
}
}