1. Prodotti
  2.   Audio
  3.   Python
  4.   Aubio
 
  

Analisi Audio e Musicale in Tempo Reale tramite Libreria Python Gratuita

Aubio è una libreria Python open source per l'elaborazione audio utilizzata dagli sviluppatori software per il rilevamento dell'intonazione, il tracciamento del ritmo, l'estrazione MFCC e l'elaborazione audio in tempo reale.

Che cos'è Aubio?

Le moderne applicazioni audio—come gli strumenti di produzione musicale, le piattaforme di analisi audio e i sistemi di elaborazione sonora in tempo reale—richiedono metodi efficienti per analizzare i segnali sonori. Una soluzione open source popolare per questo scopo è Aubio, una libreria leggera ma potente progettata per estrarre informazioni significative dai segnali audio. Aubio è una libreria open source progettata per estrarre annotazioni e caratteristiche musicali dai segnali audio. Analizza i flussi audio e identifica eventi come gli onset delle note, l'altezza, i battiti e il tempo. È scritta principalmente in C per alte prestazioni e funziona su Linux, macOS e Windows.

La libreria è molto facile da gestire e supporta l'elaborazione audio in tempo reale. La libreria può rilevare eventi musicali come quando si verifica un colpo di batteria, la frequenza di una nota musicale e il tempo o il ritmo di una traccia. Può operare sia offline (file audio) sia in flussi audio in tempo reale, rendendola adatta per editor audio, strumenti digitali e strumenti di analisi del suono. Con il supporto per il rilevamento dell'intonazione, il tracciamento del beat, il rilevamento degli onset, l'estrazione MFCC e l'elaborazione del segnale in tempo reale, fornisce agli sviluppatori gli strumenti necessari per creare applicazioni audio avanzate.

Previous Next

Guida introduttiva a Aubio

Il modo più semplice per installare Aubio è utilizzare il Python Package Index (PyPI). Si prega di utilizzare il comando seguente per un'installazione completa.

Installa usando Aubio

pip install aubio 

Installa Aubio da GitHub

go get -u github.com/aubio/aubio.git 

Rilevamento degli onset via Python

Una delle funzionalità più utili della libreria Aubio è il rilevamento degli onset, che identifica quando una nota musicale o un evento sonoro inizia. Il rilevamento degli onset trova il momento preciso in cui un nuovo suono o una nuova nota musicale inizia. Nella musica, un "onset" è l'attacco di una nota — l'istante in cui un tamburo viene colpito, una chitarra pizzicata o una voce inizia una sillaba. Aubio include più algoritmi di rilevamento degli onset per diversi casi d'uso. L'esempio seguente dimostra come rilevare gli Onset all'interno di un file audio usando codice Python.

Come rilevare gli onset in un file audio tramite una libreria 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)}")

Supporto al rilevamento dell'intonazione

Il rilevamento dell'intonazione è un'altra importante capacità della libreria open source Aubio. Il rilevamento dell'intonazione identifica la frequenza fondamentale (F0) di un suono — in sostanza, "qual è questa nota musicale?" È il fulcro di qualsiasi accordatore, estrattore di melodia o strumento di analisi vocale. Aubio supporta più algoritmi di rilevamento dell'intonazione come yin, yinfft, mcomb, fcomb e così via. Ecco un semplice esempio che dimostra come eseguire il rilevamento dell'intonazione in tempo reale all'interno di applicazioni Python.

Come eseguire il rilevamento dell'altezza in tempo reale con 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)

Tracciamento del tempo e rilevamento del beat via Python

La libreria open source Aubio può analizzare i pattern ritmici e rilevare battiti e tempo nella musica all'interno delle applicazioni Python. Aubio può ascoltare l'audio e battere il tempo — rilevando il tempo in BPM (battiti per minuto) e individuando i timestamp dei singoli battiti. Questo è inestimabile per qualsiasi cosa, dal software per DJ alla sincronizzazione musicale. La libreria determina le posizioni dei battiti analizzando le variazioni spettrali e i pattern ritmici nel segnale audio.

Lettura e scrittura di file audio via Python

La libreria Python Aubio incapsula l'I/O dei file audio tramite i suoi oggetti source e sink, supportando più formati (WAV, FLAC, OGG, MP3 via libav o ffmpeg) e gestendo automaticamente la conversione della frequenza di campionamento. Ecco un semplice esempio che mostra come gli sviluppatori software possano leggere, elaborare e scrivere file audio usando comandi Python.

Come leggere, elaborare e scrivere file audio con 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")

 Italiano