在Android上从简短的AAC文件中绘制波形

时间:2015-01-16 08:36:31

标签: java android audio aac waveform

我正试图在Android上为一个简短的AAC音频文件(无法转换为来自Web服务的WAV)绘制波形,这显然非常棘手。

以下是我想要实现的目标的图像:

enter image description here

请注意,视图的框架将与设备的屏幕分辨率成比例固定,并且不需要拉伸或完全缩放。这意味着我可以设置一个高度值数组,其长度等于运行时视图的像素宽度。这些音频文件也很短,所以我现在并不担心内存。

现在,如果我理解的话,必要的步骤基本上是:

  1. 将AAC音频解码为表示波形幅度的字节数组。
  2. 为要显示的x轴上的每个像素拉出一个字节。
  3. 在我的视图中覆盖onDraw,并为x轴上的每个像素绘制一条线。
  4. 但是,我在第1步遇到了麻烦。我试过了:

    1. JAAD(http://jaadec.sourceforge.net/usage.php)看起来很有前途,但却发现由于缺少javax.sound.sampled,它无法在Android上运行。

    2. https://stackoverflow.com/a/11858709/269152中答案中提供的代码实际上可以很好地处理所有步骤(稍微编辑代码以删除所有缩放等),除了波形真的是块状的,我认为由于音频被切割成少量“帧”的方式,可能是由于这是用于较长的文件并由用户放大。通过编辑CheapWAV类,我已经能够在WAV处理中获得更多细节,但我不确定如何使用CheapAAC类。

    3. 由于需要Android 4.1+,Android的MediaCodec不是一个选项。我需要支持2.3。

    4. 我已经尝试将Android的Visualizer类与MediaPlayer结合使用,但我所得到的只是1024个长度为-128的数组。看起来可视化器不是用来扫描文件,而只是为了在播放时可视化播放?如果有任何用处,我可以发布代码。 (http://developer.android.com/reference/android/media/audiofx/Visualizer.html

    5. 在iOS上使用AVAssetReader为我解码音频非常简单。我错过了一些明显的东西吗我有一个简单的方法来获取AAC文件的PCM值,以便我可以在我的视图中绘制它们吗?或者有人知道处理所有这一切的真棒视图吗?

      非常感谢您的任何帮助!

0 个答案:

没有答案