2

我正在尝试生成频率为 1000 的 5 秒正弦波声音。我编写了以下代码

int sampleRate = 44100;
int freqOfTone = 1000;
AudioTrack track;
// 5 seconds
short samples = new short[sampleRate*5];
track = new AudioTrack(AudioManager.STREAM_MUSIC,
         sampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO,
                                      AudioFormat.ENCODING_PCM_16BIT, samples.length,
                                      AudioTrack.MODE_STATIC);

double angle = 0;
double increment = (2 * Math.PI * freqOfTone / sampleRate); // angular increment 

for (int i = 0; i < samples.length-1; i++) {
          samples[i] =   (short) (Math.sin(angle) * Short.MAX_VALUE);
          angle += increment;
    }
track.write(samples, 0, samples.length); // write data to audio hardware 
track.play(); 

声波长度只有2.5秒,我觉得应该是5秒。为什么?

4

3 回答 3

2

请参阅参考资料。

AudioTrack 构造函数的第 5 个参数是“bufferSizeInBytes”。

于 2013-02-16T01:24:14.973 回答
0

track.play();同步的还是异步的?如果是后者,您可能正在结束程序并在它有机会完成之前将其关闭。您可以在末尾尝试“按任意键”或其他暂停来确认。

于 2013-02-12T22:23:36.200 回答
0

这似乎是正确的行为,因为您指定了 a ENCODING_PCM_16BIT,如果您将其更改为,ENCODING_PCM_8BIT您将获得 5 秒的播放时间。

于 2013-02-12T23:42:58.087 回答