java AndroidStudio每秒播放n次生成的声音
我已经编写了一个应用程序,它使用AudioTrack生成短声音。声音是用正弦波产生的
如果我每秒播放声音2到3次,绝对没有问题。但如果我将频率增加到15赫兹或更高,应用程序会立即崩溃
我认为问题在于每次播放声音时,都会用正弦数据写入一个新的AudioTrack对象。但是如果我只发出一次声音,我只能播放一次。如果我尝试第二次演奏,什么都不会发生
类属性包括:
private float duration;
private short[] buffer;
施工人员为:
public SoundGenerator()
{
}
public SoundGenerator(float duration)
{
duration *= 44100;
duration *= 2;
this.duration = duration;
buffer = new short[(int)this.duration];
}
下面是实际代码:
public void generateSound(double frequency, float duration)
{
duration *= 44100;
duration *= 2;
double[] mSound = new double[(int)duration];
for (int i = 0; i < this.buffer.length; i++)
{
mSound[i] = Math.sin((2.0*Math.PI * i/(44100/frequency)));
this.buffer[i] = (short) (mSound[i]*Short.MAX_VALUE);
}
}
public void playGeneratedSound(float volume)
{
AudioTrack generatedSound = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT,
(int)this.duration, AudioTrack.MODE_STATIC);
generatedSound.setStereoVolume(volume, volume);
generatedSound.write(this.buffer,0,(int)this.duration);
generatedSound.play();
}
# 1 楼答案
我用另一种方法解决了这个问题:应用程序在后台运行一个线程,它会产生无限长的声音。在另一个线程中,第一个线程中播放的声音的音量在指定频率下分别设置为1.0和0.0