7

首先,我需要动态生成 2 个频率相同但相位相反的正弦波音,并在 Android 上以立体声模式将它们分别播放到左右声道。播放需要完全同步,以便“镜像”左右声道的正弦波(当左声道具有,例如样本值为 120 时,右声道应该具有 -120)。

问题是我还没有找到任何证据表明这种设置是如何工作的。是否有可能提供 2 个单独的音调/采样缓冲区以AudioTrack分别并同时在左右声道中播放?如果没有,任何其他实现最终结果的解决方案都非常感谢。

我想一种选择是使用预先生成的立体声波文件并使用 流式传输这些文件AudioTrack,但这对于工作中的解决方案来说似乎太不灵活了。同时,如果AudioTrack能够以“真实”立体声模式播放这些预先录制的音频文件,我希望生成的声音也能实现同样的效果。

4

2 回答 2

5

AudioTrack 与 SoundPool 具有相同的方法。它调用

AudioTrack.setStereoVolume();

如果您想用不同的数据同时播放左/右声道。您应该处理数据以满足此目标。如果选择 16Bit PCM 的立体声模式,数据为左一字节,右一字节。例如:

左声道要播放:12、23、34、45

右声道要播放:54、43、32、21 与左声道同时播放。

数据应生成为:{12, 54, 23, 43, 34, 32, 45, 21}

然后,使用 AudioTrack.write(data)。它将完美地满足您的目标。

于 2012-03-16T06:11:30.970 回答
0

好的,这可能有效,因为只有两个样本。

首先检查SoundPool。当您有需要良好性能的曲目时,它很有用,因为它们已完全加载到内存中。然而,这确实有其缺点,主要的缺点是对存储在内存中的轨道大小的限制。当我第一次使用它时,我尝试将 2 x 4Mb 文件放入流中 - 这不是一个好主意。

SoundPool 有这个功能:

setVolume(int streamID, float leftVolume, float rightVolume)

请注意如何为每个流设置左右音量?对于流 1,您可以将左侧音量最大化,然后对于流 2,您可以将右侧音量最大化。

我会根据需要设置要播放的文件和音量的流,然后播放它们。

可以在http://www.vogella.de/articles/AndroidMedia/article.html找到一个简单的教程

于 2012-01-09T01:44:43.623 回答