Android 了解录音机read()缓冲区

Android 了解录音机read()缓冲区,android,audio,byte,Android,Audio,Byte,我真的希望有人能帮助我。我目前正在使用安卓“录音机”,一切正常。下一步是处理调用read()时从缓冲区返回的字节 作为一名Web开发人员,我有一段时间缺乏一些基础知识,主要是关于存储在其中的字节。我真的很想了解,我从这个方法中得到的字节是什么。似乎我真的需要一些基础知识,主要是如何分析里面的东西(我想知道是否有声音,声音有多大,不仅仅是代码,我真的想了解那里发生了什么) 有人能给我一些链接到文章/博客/书籍吗?我可以通过阅读获得更多关于音频分析的知识吗?根据我的经验,Android AudioR

我真的希望有人能帮助我。我目前正在使用安卓“录音机”,一切正常。下一步是处理调用
read()
时从缓冲区返回的字节

作为一名Web开发人员,我有一段时间缺乏一些基础知识,主要是关于存储在其中的字节。我真的很想了解,我从这个方法中得到的字节是什么。似乎我真的需要一些基础知识,主要是如何分析里面的东西(我想知道是否有声音,声音有多大,不仅仅是代码,我真的想了解那里发生了什么)


有人能给我一些链接到文章/博客/书籍吗?我可以通过阅读获得更多关于音频分析的知识吗?

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

但从这里开始,解释实际值所代表的含义就相当复杂了。您得到的音频是脉冲编码调制的(您可能听说过PCM)。这意味着您有一个固定的采样率(比如8000Hz),并且每1/8000th接收一个振幅。随着时间的推移,这些振幅会形成你可能熟悉的波形。短数组中的值就是这个振幅

如果你熟悉扬声器的工作原理,你会意识到磁铁会前后推动振膜。得到的值表示光圈向前或向后移动的距离(瞬时振幅)。所以在短数组中,32767表示完全向前,-32768表示完全向后。0正好介于两者之间,这是扬声器关闭时所处的状态

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

使其更加复杂。使用短值,您可以将扬声器振膜移动到65536个离散位置。这是模拟音频和数字音频的根本区别。在真正的模拟记录中,光圈有无限多个位置,其中数字是“量化”的

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


访问,谢谢您的链接!哇,那真的很有帮助,谢谢!