Introduction: SpotMeter - Controle De Volume Do Spotify Com Volume Ambiente.

O SpotMeter controla o volume do Spotify de acordo com o volume do som ambiente.
Para possibilitar isso foi implementado um medidor de volume de áudio (VU) utilizando a API Windows Runtime AudioGraph. Além da integração com o Spotify pela sua Web Api.

Para compilar este projeto é necessário o Visual Studio 2017 com o pacote de UWP. Para execução é necessário um dispositivo com Windows 10 ou Windows 10 IoT, um microfone e acesso à internet (para comunicação com o Spotify).

O medidor de volume cria um grafo de áudio com nó de entrada para ser associado ao dispositivo de captura de áudio padrão. E um nó de saída que será utilizado para processar o volume de áudio.

Os nós deste grafo são configurados para trabalhar com o codec PCM com 1 canal à 44.1 kHz e 32 bits por amostra. Isso resulta num sinal mais simples para ser processado e com uma resolução adequada para captar os ruídos do ambiente.

O volume é calculado como a média do valor absoluto de todas amostras quantificadas durante um segundo.

Como o propósito da captura é apenas calcular o volume, o grafo não é configurado para trabalhar em baixa latência e pode receber frames de áudio com tamanhos irregulares.

O frames de áudio são os buffers o que a AudioGraph trafega entre os nós. Por padrão esses frames têm 10ms que seriam 441 amostras com a configuração realizada.

Step 1: Apresentação

Step 2: Obter O Projeto No GitHub

O projeto pode ser obtido no GitHub em:

https://github.com/thvsoares/puc-asd-iot-sound

Step 3: Compilar O Projeto

Ao compilar as dependências serão restauradas automaticamente pela IDE.

Caso deseje compilar numa configuração diferente (a padrão é x86 que é adequada para testes em desktop ou máquinas virtuais, a maior parte dos dispositivos IoT requer a compilação em ARM). É importante verificar se a opção de código não seguro está marcada.

A classe AudioMonitor utiliza leitura direta a memória para receber os frames de áudio.

Step 4: Deploy Remoto

Para o deploy numa máquina remota ou dispositivo IoT é necessário utilizar a opção remoto.

Para dispositivos IoT geralmente é utilizada a autenticação Universal. Já dispositivos desktop usam a opção Windows.

Step 5: Integração Com O Spotify

Para integração com o Spotify é necessário gerar um OAuth token com a permissão user-modifi-playback-state no endereço:

https://developer.spotify.com/web-api/console/put-...

O token gerado deve ser informado no campo de chave e o monitor de áudio pode ser iniciado.

Step 6: Controles Da Interface

  • Spotify Key: Receberá a chave que será gerada no próximo passo e permite a integração com o Spotify.
  • Volume: Apresenta o volume atual que será configurado no player. O volume é ajustado em + ou - 1% por segundo conforme a distância entre o volume atual e o nível atual de ruído.
  • Min noise level: Volume mínimo de de ruído necessário para iniciar os ajustes de volume. Valor padrão 0 para considerar qualquer ruído para iniciar os ajustes.
  • Max noise level: Volume máximo considerado para ao realizar os ajustes, qualquer leitura acima deste nível será considerada como 100% de ruído. Como a leitura de volume é o valor médio das amostras, a leitura de volume raramente dá uma saída maior que 70%. O valor padrão é 70% para extrapolar as leituras normais para 100% de volume.
  • Current noise level: Demonstra o nível atual de ruído computado pelo medidor de volume de áudio.
  • Delta volume to noise tolerance: Define a diferença mínima entre a leitura de ruído e o volume atual para que sejam realizados ajustes de volume.
  • Start monitor: Dispara o medidor de volume de áudio e quando os parâmetros anteriores são atendidos também o ajuste do volume no Spotify.