2014-02-24 87 views
1

我真的希望有人能帮助我。我目前正在使用Android“录音机”,一切正常。下一步将是当我拨打read()时,处理从缓冲区获得的字节。作为一个Web开发人员,我暂时没有一些基本知识 - 主要是关于存储在那里的字节。我真的很想明白,从方法中得到的“什么”字节。看起来我需要一些基础知识,主要是如何分析那里的东西(我想知道是否有声音,声音有多大,而不仅仅是代码,我真的想知道那里发生了什么)。了解录音机读取()缓冲区

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

+1

访问http://www.tutorialspoint.com/android/android_audio_capture.htm https://github.com/Uncodin/Android -AudioRecorder https://github.com/ionull/android-realtime-audio-recorder –

+0

谢谢你的链接! –

回答

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)

+1

非常感谢! :) –

+0

哇,这真的很有帮助,谢谢! – CpS