0

我正在尝试为 Android 编写一个音乐播放器应用程序,允许用户将主唱从歌曲中移除。

涉及的数学是这样的:

amount_of_removal * ((left * (balance)) - (right * (1 - balance))) + (1 - amount_of_removal)*(left + right)

有没有可能将自定义AudioEffect应用于音频流的方法?即使我自己打开并解码文件?

4

1 回答 1

1

好的,看起来我在发布这个问题时忽略了一些相当重要的信息。

其中最主要的是大多数音乐格式都是所谓的“有损”,因为它们不存储构成音频波形的所有内容。MP3例如,基本上将波形分解为其分量频率,但只存储最响亮的频率,丢弃更安静的频率。

再加上这样一个事实,对于几种风格的音乐,主唱是其中最响亮的部分(尤其是当他们唱歌时),而且您在音质方面存在一些问题,因为现在需要一些更安静的频率,现在主唱不在那里掩盖它。

这意味着最好的读取格式实际上是无损格式,可能最简单的格式之一就是古老的 WAV 文件。

总的来说,做我想做的事情所需的步骤可能是这样的:

  1. 加载音频文件(使用WavFile类,由this answer指定)
  2. 一次将自定义音频效果应用于文件的缓冲区。
  3. 将一个充满已处理音频的缓冲区传递给声卡(使用类似这个例子的东西)

从这里我可以看到的唯一缺点(尚未测试过)可能是性能问题,因为使用直接 Java 可能会有点慢。

于 2014-09-19T04:19:15.067 回答