【问题标题】:Reverse audio file in AndroidAndroid中的反向音频文件
【发布时间】:2011-06-07 23:01:36
【问题描述】:

我正处于开发此应用程序的早期阶段,但在研究它时我已经遇到了一个问题。我需要能够向后播放音频文件(你知道喜欢揭示隐藏的消息;))。我没有在 android 上处理音频的经验,也不知道这是否可能。

我在这里发现了一个问题,它解决了 java 中的问题 (Click Here For Question)

但这利用了android不支持的javax.sound库。我需要这个库来解决这个问题还是有其他方法可以反转音频文件?

【问题讨论】:

  • 嗨@SamRowley 你用所描述的算法实现了你的目标吗?我将第一个 44 字节标头从原始音频文件完全复制到反向音频文件,但我无法播放 wav 音频?我使用 sox 和反向音频并检查 44 字节标题是否不完全正确?如果你能帮助我任何建议,我将不胜感激

标签: android audio wav reverse


【解决方案1】:

一个典型的 WAV 文件由一个 44 字节的标头和后面的实际样本值组成。 “帧”的大小取决于 WAV 文件的属性:立体声和每样本 16 位的文件将具有 4 字节的帧大小(左样本为两个字节,右样本为两个字节)。

因此,在代码中,您将通过创建一个与原始大小相同的字节数组来创建第二个 WAV 文件。您将 44 字节标头从原始帧复制到副本中,然后从最后一个开始遍历原始帧并继续工作到第一个帧。您将每一帧复制到复制数组中的相反位置(即,最后一个原始帧在标题之后立即复制到复制数组中;倒数第二帧在第一帧之后复制等)。然后播放反转的文件。

因此您不需要 javax.sound 库来执行此操作 - 您只需要能够复制和操作字节。仅供参考,并非所有 WAV 文件都是这样的“规范”(规范意味着 44 字节标头加上样本值,仅此而已)。 WAV 格式实际上是一种 RIFF 格式,这意味着理论上您需要对样本值进行更复杂的提取。在实践中(特别是如果您自己创建 WAV 文件),您通常可以使用我在此处描述的更简单的方法。

注意:如果您的声音是 MP3 文件,则反转是一项更复杂的任务,因为样本数据不会作为样本存储在 MP3 文件中。如果您使用的是 MP3,反转它们的一种方法是将它们转换为 WAV,然后反转 WAV 文件。

【讨论】:

  • 我正在通过使用 MediaRecorder 从麦克风捕获音频来创建 WAV 文件,所以我猜这种方式可以吗?我将如何将文件从 sdcard 保存到字节数组中并复制 44 位标头?感谢您的第一个回答,到目前为止它一直很有帮助,我理解这个概念。
  • 是的,您从 MediaRecorder 获得的 WAV 文件很可能是规范的,所以您应该没问题。这是一个包含更多代码的链接,可以帮助您完成需要做的事情:dreamincode.net/forums/topic/…
  • @MusiGenesis,您好,感谢您提供的信息,但我遇到了一个小问题。当我恢复它时,它会带来很多失真,非常响亮而糟糕的噪音
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 2015-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多