Если вы используете таймер, я не думаю, что вы можете точно контролировать, сколько данных находится в буфере, когда ваше приложение читает его.
Я думаю, что они способ записать 5 секунд аудиоданных - использовать технику от this class.
В этом коде аккуратно задается размер звукового буфера, чтобы он перезвонил после того, как он записал данные за определенное количество времени. Вот отрезанный от этого класса.
public boolean startRecordingForTime(int millisecondsPerAudioClip,
int sampleRate, int encoding)
{
float percentOfASecond = (float) millisecondsPerAudioClip/1000.0f;
int numSamplesRequired = (int) ((float) sampleRate * percentOfASecond);
int bufferSize =
determineCalculatedBufferSize(sampleRate, encoding,
numSamplesRequired);
return doRecording(sampleRate, encoding, bufferSize,
numSamplesRequired, DEFAULT_BUFFER_INCREASE_FACTOR);
}
Тогда позже код просто делает это:
while (continueRecording)
{
int bufferResult = recorder.read(readBuffer, 0, readBufferSize);
//do stuff
}
так readBufferSize как раз, вы получите количество данных, которые вы хотите (с некоторыми незначительными изменениями)
удивительный ответ. .. спасибо, я уверен, что эта информация будет очень полезной :-) – Sumit