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

Могу ли я одновременно записывать более одного канала с помощью 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 на новый поток. Опять тот же результат. Так что это заставляет меня задаться вопросом, возможна ли вообще одновременная запись. Я также думал, могу ли я использовать один AudioRecord с двумя каналами, установить два отдельных входа от VOICE_UPLINK и VOICE_DOWNLINK, но я не знаю, как установить источники, если это вообще возможно.

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

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

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


person jinais    schedule 21.05.2012    source источник


Ответы (1)


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

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

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

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

person Lucifer    schedule 21.05.2012
comment
Спасибо. Но я хочу записать телефонный разговор. Поэтому мне нужно записывать оба канала одновременно, и я не могу поставить их в очередь. Можно ли записывать оба канала с помощью одного экземпляра AudioRecord? Я вижу, что опция channelConfig может быть CHANNEL_IN_STEREO, но могу ли я, например, установить для AudioSource.VOICE_UPLINK значение Left, а для AudioSource.VOICE_DOWNLINK — право? - person jinais; 21.05.2012
comment
ну можно нормально конверсию сохранить, зачем тебе для нее два канала ? Большинство устройств Android имеют такое встроенное средство, просто на нем можно получить записанный файл напрямую. - person Lucifer; 21.05.2012
comment
На самом деле, большинство телефонов Android отключают параметр MediaRecorder.AudioSource.VOICE_CALL, чтобы телефонные разговоры не могли быть записаны. То же самое и на моем SE xperia, но VOICE_UPLINK и VOICE_DOWNLINK записываются отдельно. Я подозреваю, что это тот же случай для всех телефонов Android, но я думаю, что это единственный вариант записи разговора в моем случае. - person jinais; 21.05.2012
comment
@noxiouswinter, как ты записал разговор с обеих сторон? Я столкнулся с той же проблемой. Я могу записать голосовой вызов в Samsung для обеих сторон, используя VOICE_CALL, но могу ли записать в Sony Experia? - person Android Killer; 05.04.2013
comment
Назначение аудиоисточника VOICE_CALL состоит именно в том, чтобы записывать как восходящую, так и нисходящую линии связи. Не знаю, как в других компаниях, но могу точно сказать, что в Sony его не отключали намеренно (кроме, может быть, если его посчитали настолько глючным, что лучше его вообще не поддерживать, но я не вспомнить любой такой случай), потому что я провел несколько лет в качестве разработчика в их аудиокоманде. Поддержка записи голосовых вызовов от поставщиков платформы часто содержала ошибки и/или была неполной. В некоторых случаях мы чинили это сами, но были и другие случаи, когда мы этого не делали, потому что на это не было времени. - person Michael; 19.07.2013