以编程方式在Android中编写PCM WAV数据

时间:2010-03-31 19:05:11

标签: android

我正在寻找一种以编程方式将短数组保存为PCM数据的方法。我知道这应该是可行的,但我还没有找到一种在Android上执行此操作的简单方法。

基本上,我正在接收电压数据,我想将其保存为PCM格式。我的功能看起来像这样:

  public void audifySignal(short[] signal) {
    // Create a WAV file from the incoming signal
  }

任何建议都会很棒,甚至是引用。似乎内置于android的音频API更适合直接从麦克风录制,而不是用于低级信号处理类型工作(至少用于将原始数据保存到文件中)。我还想避免手动编写PCM文件头而不是......

谢谢!

2 个答案:

答案 0 :(得分:3)

Sam,我不知道特定于Android的库,但我会继续这样说:

原始PCM数据非常简单。它通常只是顺序数据。也许你需要了解WAV格式才能理解PCM是什么以及它是如何工作的。

WAV被广泛用​​作未压缩音频的容器。了解WAV文件如何包含数据将有助于了解原始数字音频的工作原理。

这页帮助了我一点:

http://www.sonicspot.com/guide/wavefiles.html

有趣的是,你可以或多或少地在声卡上发射任何数据并且它会播放它。它对我们这些人来说可能听起来很疯狂,因为声卡并不关心它是否听起来乱码。

听起来是否悦耳取决于您是否提供了正确的样本大小,频道数,频率以及符合前者的一些PCM数据。

请注意,您无法从原始PCM数据本身“检测”样本大小,通道数或正确的频率。您必须将这些关键数据与PCM数据一起存储,以便其他软件可以让声卡知道如何处理PCM数据。

这就是WAV容器格式的用武之地。

还有其他格式,但WAV非常普遍,因此它是一个很好的起点。

干杯 Tristen

答案 1 :(得分:1)

您可以使用Android的AudioTrack来编写您想要播放的原始PCM数据,但这不是生成wav文件的功能。