Я бы хотел воспроизвести звук, синтезированный с шагом 1/50 с. При использовании интерфейса асинхронной потоковой передачи AudioTrack
мой план заключается в следующем:
while (!done)
{
frame = synthesize();
audio.waitForWrite(); // XXX
audio.write(frame, 0, frameSize, WRITE_NON_BLOCKING);
}
audio.waitForWrite(); // XXX
Однако на AudioTrack
нет waitForWrite
или подобного метода, который я мог бы использовать здесь; и если я просто сделаю неблокирующую запись, второй кадр заменит первый в середине, то есть, скажем, синтез кадра 20 мс занимает 5 мс, тогда первый кадр будет воспроизводиться в течение 5 мс, а затем будет заменен вторым один после 5 мс и т. д., что явно не то, что я хочу.
С другой стороны, если я использую блокирующие записи, я не могу синтезировать следующий кадр, пока предыдущий уже воспроизводится.