use sequence parameters as audio output parameters

This commit is contained in:
itsmattkc
2019-11-15 20:11:17 +09:00
parent 0081511f18
commit cd69bd76b9
5 changed files with 74 additions and 10 deletions
+51 -10
View File
@@ -90,22 +90,63 @@ void AudioManager::SetOutputDevice(const QAudioDeviceInfo &info)
StopOutput();
QAudioFormat format;
format.setSampleRate(48000);
format.setChannelCount(2);
format.setSampleSize(32);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::Float);
output_ = std::unique_ptr<QAudioOutput>(new QAudioOutput(info, format, this));
connect(output_.get(), SIGNAL(notify()), this, SLOT(OutputNotified()));
output_device_info_ = info;
if (output_params_.is_valid()) {
QAudioFormat format;
format.setSampleRate(output_params_.sample_rate());
format.setChannelCount(output_params_.channel_count());
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
switch (output_params_.format()) {
case SAMPLE_FMT_U8:
format.setSampleSize(8);
format.setSampleType(QAudioFormat::UnSignedInt);
break;
case SAMPLE_FMT_S16:
format.setSampleSize(16);
format.setSampleType(QAudioFormat::SignedInt);
break;
case SAMPLE_FMT_S32:
format.setSampleSize(32);
format.setSampleType(QAudioFormat::SignedInt);
break;
case SAMPLE_FMT_S64:
format.setSampleSize(64);
format.setSampleType(QAudioFormat::SignedInt);
break;
case SAMPLE_FMT_FLT:
format.setSampleSize(32);
format.setSampleType(QAudioFormat::Float);
break;
case SAMPLE_FMT_DBL:
format.setSampleSize(64);
format.setSampleType(QAudioFormat::Float);
break;
case SAMPLE_FMT_COUNT:
case SAMPLE_FMT_INVALID:
Q_ASSERT(false);
}
output_ = std::unique_ptr<QAudioOutput>(new QAudioOutput(info, format, this));
connect(output_.get(), SIGNAL(notify()), this, SLOT(OutputNotified()));
}
// Un-comment this to get debug information about what the audio output is doing
//connect(output_.get(), SIGNAL(stateChanged(QAudio::State)), this, SLOT(OutputStateChanged(QAudio::State)));
}
void AudioManager::SetOutputParams(const AudioRenderingParams &params)
{
if (output_params_ != params) {
output_params_ = params;
// Refresh output device
SetOutputDevice(output_device_info_);
}
}
void AudioManager::SetInputDevice(const QAudioDeviceInfo &info)
{
input_ = std::unique_ptr<QAudioInput>(new QAudioInput(info, QAudioFormat(), this));
+4
View File
@@ -27,6 +27,7 @@
#include <QThread>
#include "audiohybriddevice.h"
#include "render/audioparams.h"
/**
* @brief A thread for refreshing the total list of devices on the system
@@ -86,6 +87,8 @@ public:
void SetOutputDevice(const QAudioDeviceInfo& info);
void SetOutputParams(const AudioRenderingParams& params);
void SetInputDevice(const QAudioDeviceInfo& info);
const QList<QAudioDeviceInfo>& ListInputDevices();
@@ -109,6 +112,7 @@ private:
std::unique_ptr<QAudioOutput> output_;
QAudioDeviceInfo output_device_info_;
AudioRenderingParams output_params_;
std::unique_ptr<QAudioInput> input_;
QAudioDeviceInfo input_device_info_;