AudioTrack を使用して生成している正弦波にリバーブ エフェクトを適用しようとしています。getAudioSessionId() メソッドを実行するとエラーが発生したため、presetReverb を試して、ドキュメントのように audiosession 0 に適用しましたが、リバーブはまったく適用されませんでした。そこで、EnvironmentalReverb と audiosession 0 を試し、さらに getAudioSessionId() を使用しましたが、どちらもリバーブを作成しませんでした。
これが私のコードです:
t = new Thread()
{
public void run()
{
setPriority(Thread.MAX_PRIORITY);
int buffsize = AudioTrack.getMinBufferSize(sr, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sr, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, buffsize, AudioTrack.MODE_STREAM);
EnvironmentalReverb reverb = new EnvironmentalReverb(1,0);
audioTrack.attachAuxEffect(reverb.getId());
reverb.setDiffusion((short) 1000);
reverb.setReverbLevel((short) 1000);
reverb.setDecayTime(10000);
reverb.setReverbDelay(100);
reverb.setDensity((short) 1000);
audioTrack.setAuxEffectSendLevel(1.0f);
reverb.setEnabled(true);
short samples[] = new short[buffsize];
int amp = 32767;
double twopi = 2*Math.PI;
double fr = 262.f;
double ph = 0.0;
audioTrack.play();
while(isRunning)
{
fr = 262;
for(int i=0; i < buffsize; i++)
{
samples[i] = (short) (amp*Math.sin(ph));
ph += twopi*fr/sr;
}
audioTrack.write(samples, 0, buffsize);
}
audioTrack.stop();
audioTrack.release();
}
};
t.start();
マニフェストでオーディオ設定の変更権限を持っているのに、リバーブ効果が作成されないのはなぜですか?