Запись файла на Android с помощью Okio
Привет всем! Я читаю необработанный звук с устройства Android и хочу записать его в файл с помощью Okio следующим образом:
BufferedSink sink = Okio.buffer(Okio.sink(file));
У меня есть обратный вызов для извлечения аудиоданных, а затем записать аудиоданные в bufferedSink
@Override
public void onAudioData(byte[] data) {
sink.write(data);
}
Но иногда, когда я слушаю аудиофайл, последние кадры отсутствуют, и все файлы имеют длину 8182 байта или кратно.
Если я использую FileOutputStream, то все работает хорошо, но это первый подход, и моя будущая цель - потоковая передача аудио с использованием Okio Pipes и OkHttp. Кто-нибудь знает, почему это происходит?
1 ответ
Ваш код не показывает полное использование sink
, но кажется, что вы не закрываете его, когда закончите. Из-за этого на диск записываются только те внутренние сегменты (длина которых составляет 8192 байта, так что размер вашего файла должен быть кратным этому числу), которые заполнены, а последний - нет. В качестве решения вы должны close()
на ваше Sink
,