如何记录PCM几个小时,但停止时只保存最后5分钟的录音?

时间:2014-02-03 21:19:45

标签: java android audio audio-recording

我想录制数小时的PCM音频,但是我想在按下按钮STOP时仅保存最后5分钟的录音。按下START并且录音达到5分钟时的含义,下一步是删除录音开始并在录音中附加额外的读缓冲,这样5分钟始终保持不变。我需要使用AudioRecord这样做。

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

那么,如果没有分配太多内存,是否有更好的方法进行5分钟录制?

2 个答案:

答案 0 :(得分:1)

如果你没有足够的内存,你有两个选择。

首先选择使用磁盘作为缓冲区,如果你有,这很简单,但是如果你的磁盘是基于闪存的,你将无缘无故地佩戴它。

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

答案 1 :(得分:0)

将其写入文件而不是将其保留在内存中?