gpt4 book ai didi

audio - QAudioInput 录制声音失败

转载 作者:行者123 更新时间:2023-12-02 22:23:29 28 4
gpt4 key购买 nike

出于我的目的,我想使用 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 没有这样的功能。那是我的问题,也许你可以给我一些建议,非常感谢:-)

最佳答案

我很高兴找到和我有同样问题的人。几天来,我一直在尝试使用 QAudioRecorder 从麦克风进行录音,但使用不同的样本大小。多亏了你的例子,我已经摆脱了 QAudioRecorder。所以轮到我来帮你了。

我认为当程序处于 sleep 功能时,它不再记录。您需要使用 Qt 提供的信号和槽的概念来记录计时器运行时的情况。

#include "AudioInput.h"

void AudioInput::setup(){
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);
audio=new QAudioInput(settings);
audio->start(&output);
QTimer::singleShot(3000, this, SLOT(terminateRecording()));
}

void AudioInput::terminateRecording(){
audio->stop();
output.close();
delete audio;
}

我把你的代码放在一个叫做 AudioInput 的类中,唯一的区别是我替换了 sleep(3000)来自 QTimer::singleShot(3000, this, SLOT(terminateRecording())); .与 sleep相反此函数不会在 3 秒内卡住程序,只会向 terminateRecording() 发送信号在时间的尽头。

下面是代码的其余部分:
int main(int argc, char** argv){ 
QCoreApplication app(argc,argv);
AudioInput t;
t.setup();

app.exec();
return 0;
}

和标题:
class AudioInput : public QObject{
Q_OBJECT
public Q_SLOTS:
void terminateRecording();

public:
void setup();


private:
QAudioInput *audio;
QFile output;
};

关于audio - QAudioInput 录制声音失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20297098/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com