了解Audio Recorder的read()缓冲区

pea*_*ord 2 audio android byte

我真的希望有人可以帮助我.我目前正在使用Android"Audio Recorder",一切正常.下一步是使用我调用时从缓冲区返回的字节read().

作为Web开发人员退出一段时间,我缺乏一些基础 - 主要是存储在那里的字节.我真的很想理解,从这个方法回来的字节是什么.看起来我真的需要一些基础知识,主要是如何分析那里的东西(我想知道是否有任何声音和声音有多大而不仅仅是代码,我真的想了解那里发生了什么).

有人会非常友好地给我链接到我可以阅读的文章/博客/书籍,以获得有关此音频分析的更多知识吗?

Goz*_*Goz 9

根据我的经验,Android AudioRecorder在许多平台上都不能很好地处理字节.因此,将记录器设置为记录16位,并使用短阵列读取.

但是从那里解释实际值代表什么是相当复杂的.您获得的音频是脉冲编码调制(您可能听说过的PCM).这意味着您有一个固定的采样率(比如8000Hz),并且每1/8000接收一个振幅.随着时间的推移,这些振幅形成了你可能熟悉的波形.短阵列中的值是此幅度.

如果您熟悉扬声器的工作原理,您会发现磁铁会向前和向后推动振膜.您获得的值表示光阑向前或向后移动的距离(瞬时幅度).所以在短阵列中32767表示完全向前,-32768表示完全向后.0直接介于两者之间,这是扬声器关闭时所处的状态.

要在扬声器示例中产生声音,您需要向前和向后移动振膜.为了产生50Hz信号,隔膜需要每秒向后移动50次.要创建1000Hz信号,需要每秒向后移动1000次,依此类推.这些信号可以加在一起以产生更复杂的信号.

为它增加更多的复杂性.使用短值,您可以将65536个离散位置移动到扬声器振膜.这是模拟和数字音频之间的根本区别.在真正的模拟记录中,振膜的位置无限多,其中数字是"量化的".

这是一个非常基本的解释,因为任何更复杂的事实都超出了stackoverflow响应的范围.您可以在维基百科和其他来源上阅读更多内容.以下是一些帮助您入门的维基百科链接:

http://en.wikipedia.org/wiki/PCM http://en.wikipedia.org/wiki/Quantisation_(signal_processing)