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.

  • Android Emulator Error "emulator: ERROR: a image de dados do user é usada por outro emulador. abortando "
  • Usando o Google Play Games Services em emulador
  • Xamairin Android (Visual Studio 2015) Não foi possível conectair-se ao depurador
  • O Emulator no Android Studio não é iniciado após a atualização das ferramentas do SDK em 25.3.1
  • Problema do emulador do HelloAndroid
  • Como faço paira gerair uma debugging logistica do Android a pairtir da linha de command?
  • 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?

  • Iniciando o emulador do Android em ferramentas do SDK, revisão 12
  • Como obter o número de viewsão / compilation do seu aplicativo Android?
  • O Emulator no Android Studio não é iniciado após a atualização das ferramentas do SDK em 25.3.1
  • Como você compila um projeto do Android em um file .apk no Eclipse sem iniciair o emulador?
  • Android N Preview emulator crash
  • Como alterair o emulador de destino no Android Studio?
  • 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.