Записывать два канала одновременно на Android MediaRecorder или с помощью AudioRecord?

StackOverflow https://stackoverflow.com//questions/10681634

Вопрос

Могу ли я записывать более одного канала одновременно с помощью MediaRecorder или AudioRecord?Я хочу иметь возможность одновременно записывать MediaRecorder.AudioSource.VOICE_UPLINK и VOICE_DOWNLINK.Может быть в двух отдельных файлах или в одном файле с двумя каналами.Я попробовал использовать два отдельных экземпляра MediaRecorder.Но записывает только первый.Второй говорит, что вход недоступен.Я также пытался использовать один MediaRecorder и один AudioRecord одновременно.Опять же, оба работают индивидуально, но когда AudioRecord появляется после запуска MediaRecorder, отображаются следующие ошибки.

05-21 03:40:42.735: E/AudioRecord(1322): Could not get audio input for record source 1
05-21 03:40:42.735: E/AudioRecord-JNI(1322): Error creating AudioRecord instance:     initialization check failed.
05-21 03:40:42.825: E/AudioRecord-Java(1322): [ android.media.AudioRecord ] Error code -20     when initializing native AudioRecord object.

Я также попробовал поставить второй MediaRecorder на новый поток.Опять тот же результат.Это заставляет меня задуматься, можно ли вообще записывать одновременно.Я также думал, смогу ли я использовать одну аудиозапись с двумя каналами, установив два отдельных входа: VOICE_UPLINK и VOICE_DOWNLINK, но я не знаю, как установить источники, если это вообще возможно.

заранее спасибо

РЕДАКТИРОВАТЬ:

Ответ Люцифера означает, что AudioRecord нельзя вызывать асинхронно, если одновременно работает более одного экземпляра.Кто-нибудь знает способ одновременной записи AudioSource.VOICE_UPLINK и AudioSource.VOICE_DOWNLINK?Может быть, использовать один экземпляр AudioRecord с несколькими каналами?

Это было полезно?

Решение

Насколько мне известно, аудиозапись является синхронизированным методом.Таким образом, вы не можете использовать две записи одновременно.

Когда ваш код переходит ко второму процессу записи, он показывает ошибку 05-21 03:40:42.735: E/AudioRecord(1322): Could not get audio input for record source 1 это просто означает, что канал записи уже занят первым.

Однако это возможно путем параллельной обработки двух потоков таким образом, чтобы первый поток записывал данные в течение определенного периода времени.когда управление проходит два вторых потока, первый поток прекращает запись, а второй начинает запись, и наоборот.Но в случае с мобильным устройством это станет более сложным.Так что лучше записывать по одному каналу за раз.

Вы можете создать очередь записи, которая будет производить запись одну за другой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top