Análise de Áudio e Música em Tempo Real via Biblioteca Python Gratuita
Aubio é uma Biblioteca de Processamento de Áudio Python de Código Aberto usada por desenvolvedores de software para detecção de pitch, rastreamento de batidas, extração de MFCC e processamento de áudio em tempo real.
O que é Aubio?
Aplicações modernas de áudio — como ferramentas de produção musical, plataformas de análise de áudio e sistemas de processamento de som em tempo real — requerem maneiras eficientes de analisar sinais sonoros. Uma solução open-source popular para esse fim é o Aubio, uma biblioteca leve porém poderosa projetada para extrair informações significativas de sinais de áudio. O Aubio é uma biblioteca de código aberto projetada para extrair anotações e características musicais de sinais de áudio. Ela analisa fluxos de áudio e identifica eventos como ataques de notas, pitch, batidas e tempo. É escrita principalmente em C para alto desempenho e funciona em Linux, macOS e Windows.
A biblioteca é muito fácil de usar e suporta processamento de áudio em tempo real. A biblioteca pode detectar eventos musicais, como quando ocorre um golpe de bateria, a frequência de uma nota musical e o tempo ou ritmo de uma faixa. Ela pode operar tanto offline (arquivos de áudio) quanto em fluxos de áudio em tempo real, tornando-a adequada para editores de áudio, instrumentos digitais e ferramentas de análise de som. Com suporte para detecção de pitch, rastreamento de batidas, detecção de onset, extração de MFCC e processamento de sinal em tempo real, fornece aos desenvolvedores as ferramentas necessárias para criar aplicações de áudio avançadas.
Começando com Aubio
A maneira mais fácil de instalar o Aubio é usando o Python Package Index (PyPI). Por favor, use o comando a seguir para uma instalação completa.
Instalar usando Aubio
pip install aubio Instalar Aubio a partir do GitHub
go get -u github.com/aubio/aubio.git Detecção de início via Python
Uma das funcionalidades mais úteis da biblioteca Aubio é a detecção de onset, que identifica quando uma nota musical ou evento sonoro começa. A detecção de onset encontra o momento preciso em que um novo som ou nota musical inicia. Na música, um "onset" é o ataque de uma nota — o instante em que um tambor é golpeado, uma guitarra é dedilhada ou uma voz inicia uma sílaba. Aubio inclui múltiplos algoritmos de detecção de onset para diferentes casos de uso. O exemplo a seguir demonstra como detectar Onsets dentro de um arquivo de áudio usando código Python.
Como Detectar Ataques em um Arquivo de Áudio via Biblioteca Python?
import aubio
import numpy as np
# Configuration
filename = "audio_sample.wav"
win_s = 512 # FFT window size
hop_s = 256 # Hop size (frames between analysis windows)
# Open the audio source
src = aubio.source(filename, hop_size=hop_s)
samplerate = src.samplerate
# Create the onset detector (using 'complex' method)
onset = aubio.onset("complex", win_s, hop_s, samplerate)
# Set detection threshold (0.0 to 1.0 — lower = more sensitive)
onset.set_threshold(0.3)
onsets = []
# Process audio frame by frame
while True:
samples, read = src() # Read one hop of audio
if onset(samples): # Returns True when onset detected
print(f"Onset at: {onset.get_last_s():.3f} seconds")
onsets.append(onset.get_last_s())
if read < hop_s: # End of file
break
print(f"\nTotal onsets detected: {len(onsets)}")
Suporte à detecção de pitch
A detecção de pitch é outra capacidade importante da biblioteca de código aberto Aubio. A detecção de pitch identifica a frequência fundamental (F0) de um som — essencialmente, "qual nota musical é essa?" É o núcleo de qualquer afinador, extrator de melodia ou ferramenta de análise vocal. Aubio suporta múltiplos algoritmos de detecção de pitch, como yin, yinfft, mcomb, fcomb, entre outros. Aqui está um exemplo simples que demonstra como realizar a detecção de pitch em tempo real dentro de aplicações Python.
Como Realizar Detecção de Pitch em Tempo Real via Python?
import aubio
import numpy as np
samplerate = 44100
win_s = 1024
hop_s = 512
pitch_o = aubio.pitch("yin", win_s, hop_s, samplerate)
pitch_o.set_unit("Hz")
pitch_o.set_silence(-40)
samples = np.random.rand(hop_s).astype(np.float32)
pitch = pitch_o(samples)
print("Detected pitch:", pitch)
Rastreamento de tempo e detecção de batida via Python
A biblioteca de código aberto Aubio pode analisar padrões rítmicos e detectar batidas e tempo na música dentro de aplicações Python. Aubio pode ouvir o áudio e acompanhar — detectando o tempo em BPM (batidas por minuto) e identificando os timestamps individuais das batidas. Isso é inestimável para tudo, desde softwares de DJ até sincronização musical. A biblioteca determina as posições das batidas analisando mudanças espectrais e padrões rítmicos no sinal de áudio.
Leitura e gravação de arquivos de áudio via Python
A biblioteca Python Aubio encapsula a entrada/saída de arquivos de áudio por meio de seus objetos source e sink, suportando múltiplos formatos (WAV, FLAC, OGG, MP3 via libav ou ffmpeg) e lidando com a conversão de taxa de amostragem automaticamente. Aqui está um exemplo simples que mostra como desenvolvedores de software podem ler, processar e gravar arquivos de áudio usando comandos Python.
Como Ler, Processar e Gravar Arquivos de Áudio via Python?
import aubio
import numpy as np
input_file = "input.wav"
output_file = "output.wav"
target_samplerate = 22050 # Downsample to 22.05 kHz
hop_s = 512
# Open source — resamples automatically to target samplerate
src = aubio.source(input_file, samplerate=target_samplerate, hop_size=hop_s)
actual_sr = src.samplerate
num_channels = src.channels
# Open sink for writing
sink = aubio.sink(output_file, actual_sr, channels=1)
while True:
samples, read = src()
# Write mono (sink expects 1D array for mono output)
if num_channels > 1:
mono = samples.reshape(num_channels, -1).mean(axis=0)
else:
mono = samples
sink(mono[:read], read)
if read < hop_s:
break
del sink # Flushes and closes file
print(f"Written {output_file} at {actual_sr} Hz")