92 lines
3.3 KiB
C++
92 lines
3.3 KiB
C++
|
#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);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|