每 10 毫秒记录 pc 音频数据而不播放

Posted

技术标签:

【中文标题】每 10 毫秒记录 pc 音频数据而不播放【英文标题】:record pcmaudiodata per 10 milisecond without playback 【发布时间】:2019-07-12 15:50:17 【问题描述】:

我需要每 10 毫秒录制一次 pcmaudio,而不需要快速播放。

我已经尝试过此代码,但我找不到如何在录制时停止播放。

RecordAudio Github Repo

第二个问题:如何从循环缓冲区中获取 PCM 数据以进行正确的编码-解码过程。当我将录制的音频数据转换为有符号字节或无符号字节或其他任何内容时,转换后的数据有时会损坏。这种流程的最佳实践是什么

【问题讨论】:

【参考方案1】:

在 RecordAudio 示例代码中,音频格式指定为浮点数(32 位浮点数)。在进行浮点到整数的转换时,您必须确保您的比例和偏移量的值在目标类型的合法范围内。例如检查 -1.0 到 1.0 的结果是否为 0 到 256(无符号字节),超出范围的值被剪裁为合法值。还要注意您转换的样​​本数,因为音频单元回调可以改变发送的 frameCount(返回的样本数)。在任何单个 RemoteIO 回调中,您很可能不会获得正好 10 毫秒,但可能必须观察由多个回调填充的循环缓冲区,或者您必须拆分的更大缓冲区。

当 RemoteIO 在播放和录制模式下运行时,您通常可以通过在从音频单元回调返回之前将 bufferList 缓冲区归零(在复制、分析或以其他方式使用缓冲区中的数据之后)来静音播放。

【讨论】:

以上是关于每 10 毫秒记录 pc 音频数据而不播放的主要内容,如果未能解决你的问题,请参考以下文章

HTML5 音频:如何快速停止和重新启动剪辑?

播放音频时 Alsa 缓冲区溢出

播放 mp3 原始音频数据而不写入文件

VLC如何在普通PC上播放24位PCM音频?

Next.Js : 更改页面而不停止音频

HTML5 音频:设置 currentTime 然后在 iPhone 上播放自发倒带 50-100 毫秒