我想录制数小时的PCM音频,但是我想在按下按钮STOP时仅保存最后5分钟的录音。按下START并且录音达到5分钟时的含义,下一步是删除录音开始并在录音中附加额外的读缓冲,这样5分钟始终保持不变。我需要使用AudioRecord这样做。
我尝试使用AudioRecord类进行20秒录制而不是5分钟。我已经将字节读入一个大字节[]缓冲区。当按下START时,字节被读取到byte []缓冲区,当达到20s时,它开始从开始覆盖byte []缓冲区,当达到40s时,它再次开始覆盖byte []缓冲区,当STOP被按下时将byte []缓冲区重新排列为正确的序列并写入文件。这个方法有效,但是使用它我需要从一开始就为byte []缓冲区分配内存,并且5分钟太大,我达到了堆大小限制并且内存不足。我这样做的采样率为44100Hz。
那么,如果没有分配太多内存,是否有更好的方法进行5分钟录制?
答案 0 :(得分:1)
如果你没有足够的内存,你有两个选择。
首先选择使用磁盘作为缓冲区,如果你有,这很简单,但是如果你的磁盘是基于闪存的,你将无缘无故地佩戴它。
第二种选择是压缩。如果您不需要PCM,可以将其编码为MP3。如果您需要PCM,可能还有其他选择。声音非常冗余,应该是可压缩的,甚至是无损的。但迟早你会达到RAM的极限。
答案 1 :(得分:0)
将其写入文件而不是将其保留在内存中?