gpt4 book ai didi

Qt:将原始 QAudioInput 数据写入文件的 API,就像 QAudioRecorder 一样

转载 作者:行者123 更新时间:2023-12-02 21:04:24 29 4
gpt4 key购买 nike

我正在尝试监视音频输入并将音频记录到文件中,但仅在超过级别阈值时才进行。 Qt 中的录制似乎有两个主要选项; QAudioRecorderQAudioInput .

长话短说:我正在尝试找到可以获取从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 ;您只需告诉它要从哪个设备进行录制以及您希望如何存储它。

注意我尝试使用QAudioInputQAudioRecorder一起-QAudioInput用于原始访问和 QAudioRecorder每当我需要记录时,但有两个主要问题:A)一次只能读取其中一个设备。 B) 我想记录超过阈值时和之前的数据,而不是刚刚超过阈值之后的数据。

最佳答案

我最终使用了 QAudioRecorder+QAudioProbe。但有一些限制:

首先,附加的 QAudioProbe 仅在 QAudioRecorder 实际录音时才有效,因此我必须在 QAudioRecorder 上编写一个包装器来打开/关闭通过将输出设备切换到actual_file|/dev/null 进行记录。

第二,正如我所说的“我想在超过阈值时和之前记录数据,而不是在超过阈值之后”。好吧,我不得不对此做出妥协。探针用于检测记录条件,但无法将探针中的数据塞回记录器中。我的意思是,我想您可以在空闲状态下记录到缓冲区文件,并以某种方式预先添加该数据的一部分......但复杂性对我来说不值得。

旁白;有another issue QAudioRecorder 激励我在它上面编写一个包装器。基本上我发现 QAudioRecorder::stop() 有时会无限期挂起。为了解决这个问题,我必须堆分配一个记录器并将其删除,并为每个新记录初始化一个新的记录器。

关于Qt:将原始 QAudioInput 数据写入文件的 API,就像 QAudioRecorder 一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41348496/

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