gpt4 book ai didi

java - 如何录制 PCM 数小时,但停止时仅保存最后 5 分钟的录音?

转载 作者:行者123 更新时间:2023-12-01 13:31:30 28 4
gpt4 key购买 nike

我想录制几个小时的 PCM 音频,但我只想保存按下“停止”按钮时最后 5 分钟的录音。这意味着当按下 START 并且记录已达到 5 分钟时,下一步将删除记录的开头并向记录添加额外的读取缓冲区,以便 5 分钟始终保持不变。我需要使用 AudioRecord 来完成此操作。

我尝试使用 AudioRecord 类进行 20 秒的录音,而不是 5 分钟。我已将字节读入一个大的 byte[] 缓冲区。当按下 START 时,字节被读取到 byte[] 缓冲区,当达到 20 秒时,它开始从头开始覆盖 byte[] 缓冲区,当达到 40 秒时,它再次开始从头开始覆盖 byte[] 缓冲区,当按下 STOP 时将 byte[] 缓冲区重新排列为正确的顺序并写入文件。这个方法有效,但是使用它我需要从一开始就为 byte[] 缓冲区分配内存,而且 5 分钟太大了,我达到了堆大小限制并耗尽了内存。我使用 44100Hz 的采样率来执行此操作。

那么,有没有更好的方法可以在不分配太多内存的情况下进行上述 5 分钟的录音?

最佳答案

如果您没有足够的内存,您有两种选择。

第一个选择是使用磁盘作为缓冲区,如果你有的话,这很简单,但如果你的磁盘是基于闪存的,你会无缘无故地磨损它。

第二个选择是压缩。如果不需要 PCM,可以将其编码为 MP3。如果您需要 PCM,可能还有其他选择。声音是非常冗余的,应该是相当可压缩的,甚至是无损的。但迟早您会达到 RAM 的限制。

关于java - 如何录制 PCM 数小时,但停止时仅保存最后 5 分钟的录音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21537998/

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