Path: blob/master/site/pt-br/hub/tutorials/spice.ipynb
25118 views
Copyright 2020 The TensorFlow Hub Authors.
Licensed under the Apache License, Version 2.0 (the "License");
Detecção de tom com o SPICE
Este Colab mostra como usar o modelo SPICE baixado do TensorFlow Hub.
Arquivo de entrada de áudio
Agora a parte mais difícil: gravar você cantando! 😃
Temos quatro métodos para obter um arquivo de áudio:
Gravar o áudio diretamente no Colab
Fazer upload pelo computador
Usar um arquivo salvo no Google Drive
Baixar o arquivo da web
Escolha um dos quatro métodos abaixo.
Preparação dos dados de áudio
Agora que temos o áudio, vamos convertê-lo para o formato esperado e depois ouvi-lo.
O modelo SPICE precisa receber como entrada um arquivo de áudio com uma taxa de amostragem de 16 kHz e com apenas um canal (mono).
Para ajudar com essa etapa, criamos uma função (convert_audio_for_model
) para converter qualquer arquivo wav que você tenha para o formato esperado pelo modelo:
Primeiro, vamos conferir a forma de onda do canto.
Uma visualização mais informativa é o espectrograma, que mostra as frequências presentes ao longo do tempo.
Aqui, usamos uma escala de frequência logarítmica para deixar o canto mais claramente visível.
Precisamos de uma última conversão. As amostras de áudio estão no formato int16. Elas precisam ser normalizadas para floats entre -1 e 1.
Execução do modelo
Agora é a parte fácil. Vamos carregar o modelo com o TensorFlow Hub e alimentar o áudio nele. O SPICE gera duas saídas: o tom e a incerteza.
O TensorFlow Hub é uma biblioteca para a publicação, descoberta e uso de partes reutilizáveis de modelos de aprendizado de máquina. Ele facilita o uso de aprendizado de máquina para resolver desafios.
Para carregar o modelo, você precisa somente do módulo do Hub e da URL que aponta para o modelo:
Observação: um detalhe interessante é que todas as URLs de modelos do Hub podem ser usadas para download e também para ler a documentação. Portanto, se você acessar esse link no navegador, pode ler a documentação de como usar o modelo e aprender mais sobre como ele foi treinado.
Com o modelo carregado e os dados preparados, precisamos de três linhas de código para obter o resultado:
Para facilitar a compreensão dos resultados, vamos remover todas as estimativas de tom com confiança baixa (menor que 0,9) e plotar as estimativas restantes.
Os valores de tom retornados pelo SPICE estão no intervalo de 0 a 1. Vamos convertê-los para valores absolutos de tom em Hz.
Agora, vamos ver se a previsão é boa: vamos sobrepor os tons previstos ao espectrograma original. Para deixar as previsões de tom mais visíveis, alteramos o espectrograma para preto e branco.
Conversão para notas musicais
Agora que temos os valores de tom, vamos convertê-los para notas. Essa parte é desafiadora. Precisamos levar em conta dois aspectos:
As pausas (quando não há canto)
O tamanho de cada nota (os offsets)
1 – Adição de zeros à saída para indicar quando não há canto
2 – Adição de offsets de notas
Quando uma pessoa canta livremente, a melodia pode ter um offset para os valores absolutos de tom que as notas podem representar. Portanto, para converter as previsões para notas, é necessário corrigir esse possível offset. É isso que o código abaixo computa.
Agora, podemos usar uma heurística para tentar estimar a sequência mais provável de notas que foram cantadas. O offset ideal computado acima é um componente, mas também precisamos saber a velocidade (quantas previsões compõem, digamos, uma colcheia?) e o offset de tempo para começar a quantização. Para simplificar, vamos tentar apenas diferentes velocidades e offsets de tempo e mensurar o erro de quantização, usando, no final, os valores que minimizam esse erro.
Agora, vamos escrever as notas quantizadas como uma pontuação de partitura.
Para isso, vamos usar duas bibliotecas: music21 e Open Sheet Music Display.
Observação: por questões de simplicidade, pressupomos que todas as notas tenham a mesma duração (uma mínima).
Vamos converter as notas musicais para um arquivo MIDI e ouvi-lo.
Para criar esse arquivo, podemos usar o fluxo criado antes.
Para ouvi-lo no Colab, precisamos convertê-lo de volta para wav. Uma maneira simples de fazer isso é usar o Timidity.
Por fim, ouça o áudio criado a partir das notas, criado pelo MIDI a partir dos tons previstos e inferido pelo modelo!