Записывать два канала одновременно на Android MediaRecorder или с помощью AudioRecord?
-
12-12-2019 - |
Вопрос
Могу ли я записывать более одного канала одновременно с помощью 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
это просто означает, что канал записи уже занят первым.
Однако это возможно путем параллельной обработки двух потоков таким образом, чтобы первый поток записывал данные в течение определенного периода времени.когда управление проходит два вторых потока, первый поток прекращает запись, а второй начинает запись, и наоборот.Но в случае с мобильным устройством это станет более сложным.Так что лучше записывать по одному каналу за раз.
Вы можете создать очередь записи, которая будет производить запись одну за другой.