Aquecimento de áudio

O aquecimento do áudio é o tempo que leva para o circuito do amplificador de áudio no dispositivo ser totalmente ligado e alcançar o estado de operação normal. Os principais contribuintes para o tempo de aquecimento do áudio são o gerenciamento de energia e qualquer lógica de "desligamento" para estabilizar o circuito.

Este documento descreve como medir o tempo de aquecimento do áudio e possíveis maneiras de diminuir esse tempo.

Medir o aquecimento da saída

A linha de execução FastMixer do AudioFlinger mede automaticamente o aquecimento da saída e o informa como parte da saída do comando dumpsys media.audio_flinger. No aquecimento, o FastMixer chama write() repetidamente até que o tempo entre dois write()s seja o valor esperado. O FastMixer determina o aquecimento do áudio verificando quanto tempo uma camada de abstração de hardware (HAL) write() leva para se estabilizar.

Para medir o aquecimento do áudio, siga estas etapas para o alto-falante integrado e os fones de ouvido com fio e em diferentes momentos após a inicialização. Os tempos de aquecimento geralmente são diferentes para cada dispositivo de saída e logo após a inicialização do dispositivo:

  1. Verifique se o FastMixer está ativado.
  2. Ative os sons de toque selecionando Configurações > Som > Sons de toque no dispositivo.
  3. Verifique se o áudio ficou desligado por pelo menos três segundos. Cinco segundos ou mais é melhor, porque o hardware pode ter a própria lógica de energia além dos três segundos que o AudioFlinger tem.
  4. Pressione o botão home e ouça um som de clique.
  5. Execute o comando a seguir para receber o aquecimento medido:
    adb shell dumpsys media.audio_flinger | grep measuredWarmup
    

    A resposta será semelhante a esta:

    sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X
    

    O measuredWarmup=X é o número X de milissegundos necessários para que o primeiro conjunto de write()s HAL seja concluído.

    O warmupCycles=X é o número de solicitações de gravação de HAL necessárias até que o tempo de execução de write() corresponda ao esperado.

  6. Faça cinco medições e registre todas elas, além da média. Se eles não forem aproximadamente iguais, é provável que uma das medições esteja incorreta. Por exemplo, se você não esperar o tempo suficiente depois que o áudio for desativado, o tempo de aquecimento será menor do que o valor médio.

Medir o aquecimento da entrada

No momento, não há ferramentas para medir o aquecimento da entrada de áudio. No entanto, o tempo de aquecimento da entrada pode ser estimado observando o tempo necessário para que startRecording() retorne.

Reduzir o tempo de aquecimento

O tempo de aquecimento geralmente pode ser reduzido com uma combinação de:

  • Bom design de circuito
  • Atrasos de tempo precisos no driver de dispositivo do kernel
  • Realizar operações de aquecimento independentes simultaneamente, em vez de sequencialmente
  • Deixar os circuitos ligados ou não reconfigurar os relógios (aumenta o consumo de energia em modo inativo)
  • Armazenamento em cache de parâmetros calculados

No entanto, tenha cuidado com a otimização excessiva. Talvez você precise fazer um trade-off entre o tempo de aquecimento baixo e a falta de popping nas transições de energia.