【发布时间】:2013-12-16 07:40:08
【问题描述】:
出于我的目的,我想使用 Qt5.1 以 WAV 格式录制声音,16000Hz,16 位和 1 通道,但默认情况下声音都是 32 位的。所以我必须找到一个可以设置“位大小”的类,并且该类是 QAudioFormat,因为该类中有一个函数 setBitSize()。所以我不能再使用 QAudioRecorder 类,因为它不能将 QAudioFormat 作为参数,但 QAudioInput 可以。我使用 QAudioInput 来录制声音,代码如下:
#include<QAudioFormat>
#include<QAudioInput>
#include<QString>
#include<QFile>
#include<QDebug>
int main()
{
QFile output;
output.setFileName("record.raw");
output.open(QIODevice::WriteOnly);
QAudioFormat settings;
settings.setCodec("audio/PCM");
settings.setSampleRate(16000);
settings.setSampleSize(16);
settings.setChannelCount(1);
settings.setByteOrder(QAudioFormat::LittleEndian);
settings.setSampleType(QAudioFormat::UnSignedInt);
QAudioInput *audio=new QAudioInput(settings);
audio->start(&output);
sleep(3);
audio->stop();
output.close();
delete audio;
return 0;
}
好吧,程序运行后,record.wav 还是空的。我已经使用 QAudioRecorder 成功录制了声音,唯一不同的是 QAudioRecorder 类具有 setAudioInput() 函数(即“audio->setAudioInput("alsa:default");)。所以我认为这可能是问题的关键所在, 但是 QAudioInput 没有这样的功能。这是我的问题,也许你可以给我一些建议,非常感谢:-)
【问题讨论】: