我从未尝试过这个:
初始化您的左右频率
//播放速度(1.0 = 正常播放,范围为 0.5 到 2.0)
float lFrequency = 1.0;
float rFrequency = 1.0;
初始化SoundPool对象
SoundPool sp = SoundPool(2, AudioManager.STREAM_MUSIC, 0);
加载您的轨道两次 (load函数)
int sLeft = sp.load(mContext, R.raw.yourAudioFileId, 1);
int sRight = sp.load(mContext, R.raw.yourAudioFileId, 1);
使用不同的速率播放两个声音(一个在左侧,一个在右侧)(play函数)
sp.play (sLeft, 1.0, 0.0, 0, 0, lFrequency);
sp.play (sRight, 0.0, 1.0, 0, 0, rFrequency);
与其预先录制WAV文件并将其嵌入应用程序中,您可以从代码中在内存中生成分离通道的WAV音频,然后将其保存为WAV文件并使用SoundPool播放,或者直接使用AudioTrack播放音频(我建议选择后者)。
音频本身只是一个(通常为)2字节整数的数组。对于立体声,左右样本交错分布在整个数组中(因此sample [0]是第一个L样本,sample [1]是第一个R样本,sample [2]是第二个L样本等)。因此,当您的应用程序启动时,您需要创建一个长度足够长的数组(对于CD质量的音频,每秒音频需要88200个元素),然后使用计算出的值填充样本以获取您的音调,然后将该数组传递给AudioTrack进行播放。
或者,您可以将音频保存为WAV文件,并使用SoundPool播放它(从内存占用的角度来看,这可能更好)。 WAV格式非常简单易懂(读取则更为复杂):只需具有各种属性的44字节标头,然后是音频数据本身。
我想我以前回答过类似的Android问题,所以我要去看看是否有一些基本的代码可以做到这一点。
不是我,但这里有一些很好的Java代码可以读写WAV文件:
http://computermusicblog.com/blog/2008/08/29/reading-and-writing-wav-files-in-java
我会使用其他软件生成一个.ogg立体声文件(不要使用WAV文件,它们太重了),这是一种非常轻量级的音频格式,在Android上运行良好。我使用免费的Reaper,Audacity更容易,任何人都可以。只需创建两个单声道音轨,将它们的平移设置为完全右和完全左。加载您的样本,并应用音高变化插件来改变其中一个音轨的频率。您也可以使用合成器生成它们。然后将所有内容渲染到tone.ogg文件中。 Tone