Я пытаюсь генерировать 5 секунд синусоидальной звуковой волны с частотой 1000. Я написал следующий кодДлительность генерируемого звука синусоиды
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 секунд. Зачем?
Я использую статический режим, а не режим потока. Кроме того, я попробовал это внутри кнопки, и у меня все еще такая же проблема. Если я поместил образцы 10 * sampleRate, я получаю 5 секунд. Поэтому он всегда делится на 2. – yasserbn