我正在尝试监听音频输入并将音频录制到文件中,但仅限于超出级别阈值时。在Qt中录制似乎有两个主要选项; QAudioRecorder和QAudioInput。
长话短说:我正在尝试找到可以从QAudioInput
读取原始音频样本数据的API并将其记录到QAudioRecorder
的文件中但奇怪的是它似乎并不存在。举一个例子,QAudioRecorder
的设置类似于以下内容(但不是指定带有setAudioInput()
的输入设备,而是传递它的采样字节):
QAudioEncoderSettings audioSettings;
QAudioRecorder recorder = new QAudioRecorder;
audioSettings.setCodec("audio/PCM");
audioSettings.setQuality(QMultimedia::HighQuality);
recorder.setEncodingSettings(audioSettings);
recorder.setContainerFormat("wav");
recorder.setOutputLocation(QUrl::fromLocalFile("/tmp/test.wav"));
recorder.setAudioInput("default");
recorder.record();
我正在使用QAudioInput
,因为我需要访问原始样本。 QAudioInput
的问题是,Qt似乎没有提供一种简单的方法来获取我从QAudioInput
中获取的原始样本并将它们传输到沿途编码它们的文件中。 QAudioRecorder
很好地做到了这一点,但你无法将原始样本提供给QAudioRecorder
;你只需告诉它要记录哪个设备以及如何存储它。
注意我曾尝试使用QAudioInput
和QAudioRecorder
- QAudioInput
进行原始访问,QAudioRecorder
每当我需要记录时,但有两个主要问题: A)其中只有一个可以一次读取给定的设备。 B)我想在超过阈值之前和之前记录数据,而不是在超过阈值之后记录数据。
答案 0 :(得分:1)
我最终使用了QAudioRecorder + QAudioProbe。但是有一些限制:
首先,附加QAudioProbe
仅在QAudioRecorder
实际录制时才有效,因此我必须在QAudioRecorder
上写一个包装器,通过将输出设备切换到from_text来打开/关闭录制|。的/ dev / null的
第二,正如我所说"我想在超过阈值之前和之前记录数据,而不是在超过阈值之后记录数据" 。好吧,我不得不妥协。探头用于检测记录条件,但无法将探头中的数据填回记录仪。我的意思是,我猜你可以记录到处于空闲状态的缓冲区文件,并以某种方式预先添加部分数据......但复杂性对我来说并不值得。
除了;有another issue QAudioRecorder
促使我在上面写了一个包装器。基本上我发现QAudioRecorder::stop()
有时会无限期地挂起。为了解决这个问题,我不得不分配一个记录器并将其删除,并在每次新记录时启动一个记录器。