我在应用程序中借助 AudioTrack 播放声音,但我想在特定扬声器/耳朵中播放声音,即左扬声器或右扬声器或两个扬声器。
我使用以下代码来播放声音。
private AudioTrack generateTone(double freqHz, int durationMs)
{
int count = (int)(44100.0 * 2.0 * (durationMs / 1000.0)) & ~1;
short[] samples = new short[count];
for(int i = 0; i < count; i += 2){
short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
samples[i + 0] = sample;
samples[i + 1] = sample;
}
AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
count * (Short.SIZE / 8), AudioTrack.MODE_STATIC);
track.write(samples, 0, count);
return track;
}
通过以下代码,我调用此函数来播放声音。
AudioTrack soundAtSpecificFrequency = generateTone(500, 6000);
soundAtSpecificFrequency.play();
以下代码可停止播放声音。
soundAtSpecificFrequency.pause();
您能否告诉我在这种情况下可能的解决方案或任何其他替代解决方案?
感谢您宝贵的时间。
最佳答案
AudioTrack
使用原始 PCM 样本来播放声音。 PCM 样本按以下顺序播放(第一个样本由左扬声器播放,第二个样本由右扬声器播放):
LRLRLRLRLR
因此,您必须修改传递给 AudioTrack
的示例数组。
This也可以提供帮助。
根据您的情况,只需执行以下操作:
// only play sound on left
for(int i = 0; i < count; i += 2){
short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
samples[i + 0] = sample;
samples[i + 1] = 0;
}
// only play sound on right
for(int i = 0; i < count; i += 2){
short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
samples[i + 0] = 0;
samples[i + 1] = sample;
}
关于android - 使用 android AudioTrack 在左或右扬声器中播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27056605/