Мое приложение для Android пытается генерировать белый шум для воспроизведения на устройстве Android. В настоящее время я генерирую массив случайных чисел, который AudioTrack.getMinBufferSize (...) выполняет короткие шорты и проходит по таймеру. Это выглядит так:
INTERVAL_MILLISECONDS = (int)((double)(bufSize) / (double)(nativeSampleRate * 2) * 1000);
timer.scheduleAtFixedRate( new TimerTask() {
public void run() {
synchronized(this){
//System.out.println("playing. Sample rate is + " + nativeSampleRate + ", buffer is " + data.length + " shorts long, interval is " + INTERVAL_MILLISECONDS);
track.write(data, 0, bufSize);
track.play();
}
}
}, 0, INTERVAL_MILLISECONDS);
Но когда я слушаю его на своем эмуляторе Android, я получаю белый шум с очень быстрым ритмом "биения" или "блея", который трудно описать. Я не звукорежиссер, может кто-нибудь указать мне правильное направление, почему это происходит?
************** ОБНОВЛЕНИЕ ************
Я только что сделал пару вариаций, в одном из которых я удостоверился, что размер моей выборки составлял целое число миллисекунд, и в одном из них я сделал размер выборки целую секунду.
При размере выборки 8820 (пять миллисекунд в длину и по-прежнему выше минимума 8192) биение остается неизменным.
Однако при размере выборки 44100 (целая секунда) биение прошло. Возможно ли, что таймер, который я использую, просто не точен с небольшими интервалами?