Pergunta

Posso gravar mais de um canal ao mesmo tempo usando MediaRecorder ou AudioRecord?O que eu quero é poder gravar MediaRecorder.AudioSource.VOICE_UPLINK e VOICE_DOWNLINK ao mesmo tempo.Pode ser em dois arquivos separados ou no mesmo arquivo com dois canais.Tentei usar duas instâncias separadas do MediaRecorder.Mas apenas o primeiro registra.O segundo diz que a entrada não está disponível.Também tentei usar um MediaRecorder e um AudioRecord ao mesmo tempo.Novamente, ambos funcionam individualmente, mas quando o AudioRecord vem após o MediaRecorder ser iniciado, os seguintes erros são mostrados.

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.

Também tentei colocar o segundo MediaRecorder em um novo thread.Novamente o mesmo resultado.Então isso me faz pensar se é possível gravar simultaneamente.Eu também estava pensando se posso usar um AudioRecord com dois canais, definir duas entradas separadas de VOICE_UPLINK e VOICE_DOWNLINK, mas não sei como definir as fontes, se for possível.

desde já, obrigado

EDITAR:

A resposta de Lúcifer significa que AudioRecord não pode ser chamado de forma assíncrona, tendo mais de uma instância em execução ao mesmo tempo.Alguém sabe como AudioSource.VOICE_UPLINK e AudioSource.VOICE_DOWNLINK podem ser gravados ao mesmo tempo?Talvez usando uma única instância do AudioRecord com vários canais?

Foi útil?

Solução

De acordo com meu conhecimento, a gravação de áudio é um método sincronizado.Portanto, você não pode fazer duas gravações ao mesmo tempo.

Quando seu código vai para o Segundo Processo de Gravação ele está mostrando o erro 05-21 03:40:42.735: E/AudioRecord(1322): Could not get audio input for record source 1 o que significa simplesmente que o Canal de Gravação já está ocupado pelo Primeiro.

No entanto, isso pode ser possível pelo processamento paralelo de dois threads de forma que o primeiro thread registre por um período de tempo específico.quando o controle passa por dois segundos threads, o primeiro thread para de gravar e o segundo inicia a gravação e vice-versa.Mas conforme o dispositivo móvel, isso se tornará mais complexo.Então é melhor você gravar um canal de cada vez.

Você pode criar uma fila de gravação, que fará a gravação uma por uma.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top