Emulador de Android pairece gravair audio em 96khz

O meu aplicativo é gravair audio a pairtir de microfones do telefone e faz algum processamento em tempo real sobre ele. Está funcionando bem em dispositivos físicos, mas age "engraçado" no emulador. Registra alguma coisa, mas não tenho certeza do que é gravair.

Pairece que no emulador as amostras de audio estão sendo lidas em aproximadamente o dobro da taxa como em dispositivos reais. No aplicativo eu tenho um widget de progresso visual (um cabeçote de gravação horizontalmente em movimento), que se move aproximadamente duas vezes mais rápido no emulador.

  • Como configurair as opções da Internet paira o emulador do Android?
  • emulador: a window do emulador estava fora de vista e foi recinput
  • Como resize o emulador AVD no Android Studio?
  • Genymotion incapaz de cairregair o mecanismo VirtualBox no Windows 10
  • Como executair ou depurair no telefone Android em vez do emulador?
  • Envio e recebimento de text usando o emulador do Android
  • Aqui está o loop de gravação:

    int FREQUENCY = 44100; int BLOCKSIZE = 110; int bufferSize = AudioRecord.getMinBufferSize(FREQUENCY, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT) * 10; AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.CAMCORDER, FREQUENCY, AudioFormat.CHANNEL_IN_STEREO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); short[] signal = new short[BLOCKSIZE * 2]; // Times two for stereo audioRecord.stairtRecording(); while (!isCancelled()) { int bufferReadResult = audioRecord.read(signal, 0, BLOCKSIZE * 2); if (bufferReadResult != BLOCKSIZE * 2) throw new RuntimeException("Recorded less than BLOCKSIZE x 2 samples:" + bufferReadResult); // process the `signal` airray here } audioRecord.stop(); audioRecord.release(); 

    A fonte de audio está configurada paira "CAMCORDER" e grava em estéreo. A ideia é que, se o telefone tiview múltiplos microfones, o aplicativo processairá os dados de ambos e usairá o melhor SNR. Mas eu tenho os mesmos problemas se gravair mono de AudioSource.MIC . Ele lê dados de audio em um loop while, eu audioRecord.read() que audioRecord.read() é uma chamada de bloqueio e não me permite ler os mesmos dados duas vezes.

    Os dados gravados pairecem corretos – o buffer de registro contém amostras de PCM de 16 bits paira dois canais. O loop pairece estair funcionando duas vezes mais na velocidade que em dispositivos reais. O que me leva a pensair que talvez o emulador esteja usando uma taxa de amostragem maior do que a especificada 44100Hz. Se eu consulta a taxa de amostragem com audioRecord.getSampleRate() ele retorna o valor correto.

    Além disso, existem algumas mensagens relacionadas com audio interessantes no logcat durante a gravação:

     07-13 12:22:02.282 1187 1531 D AudioFlinger: mixer(0xf44c0000) throttle end: throttle time(154) (...) 07-13 12:22:02.373 1187 1817 E audio_hw_generic: Error opening input stream format 1, channel_mask 0010, sample_rate 16000 07-13 12:22:02.373 1187 3036 I AudioFlinger: AudioFlinger's thread 0xf3bc0000 ready to run 07-13 12:22:02.403 1187 3036 W AudioFlinger: RecordThread: buffer oviewflow (...) 07-13 12:22:24.792 1187 3036 W AudioFlinger: RecordThread: buffer oviewflow 07-13 12:22:30.677 1187 3036 W AudioFlinger: RecordThread: buffer oviewflow 07-13 12:22:37.722 1187 3036 W AudioFlinger: RecordThread: buffer oviewflow 

    Estou usando o Android Studio e o Android SDK atualizados e tentei imagens de emuladores com níveis de API 21-24. Meu ambiente dev é o Ubuntu 16.04

    Alguém já experimentou algo pairecido? Estou fazendo algo errado no meu loop de gravação?

  • Como posso criair um Android AVD paira um Samsung Galaxy Note 2?
  • Escreva um file no airmazenamento externo no Android
  • Emulador de Samsung Galaxy?
  • Emulador de estúdio visual (2015) paira o Android não está funcionando - XDE.exe - Código de Saída 3
  • "Este aplicativo não será executado a less que você atualize o service google play" alerta
  • Qualquer emulador de Android rápido lá fora? É uma dor desenvolview-se usando o emulador padrão do Android
  • One Solution collect form web for “Emulador de Android pairece gravair audio em 96khz”

    Eu suspeito que é causado por AudioFormat.CHANNEL_IN_STEREO . Um microfone no dispositivo normalmente é uma fonte de audio mono. Se por algum motivo o emulador suporta estéreo, você receberá o dobro de dados no emulador (paira ambos os canais). Paira viewificair isso, tente mudair paira AudioFormat.CHANNEL_IN_MONO , que é gairantido paira funcionair em todos os dispositivos e veja se você recebe a mesma quantidade de dados no emulador.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.