Real-Time audio- en muziekanalyse via gratis Python-bibliotheek
Aubio is een open source Python-audiobewerkingsbibliotheek die door softwareontwikkelaars wordt gebruikt voor toonhoogtedetectie, beat-tracking, MFCC-extractie en real-time audiobewerking.
Wat is Aubio?
Moderne audio‑applicaties—zoals muziekproductietools, audio‑analyseplatformen en real‑time geluidsverwerkende systemen—vereisen efficiënte manieren om audiosignalen te analyseren. Een populaire open‑sourceoplossing hiervoor is Aubio, een lichte maar krachtige bibliotheek die is ontworpen om betekenisvolle informatie uit audiosignalen te halen. Aubio is een open‑sourcebibliotheek die annotaties en muzikale kenmerken uit audiosignalen extraheert. Het analyseert audiostreams en identificeert gebeurtenissen zoals nootonsets, toonhoogte, beats en tempo. Het is voornamelijk in C geschreven voor hoge prestaties en werkt op Linux, macOS en Windows.
De bibliotheek is zeer eenvoudig te gebruiken en ondersteunt realtime audiobewerking. De bibliotheek kan muzikale gebeurtenissen detecteren, zoals wanneer een drumslag plaatsvindt, de frequentie van een muzikale noot en het tempo of ritme van een nummer. Hij kan zowel offline (audiobestanden) als in realtime audiostreams werken, waardoor hij geschikt is voor audio‑editors, digitale instrumenten en geluidsanalyse‑tools. Met ondersteuning voor toonhoogtedetectie, beat‑tracking, onset‑detectie, MFCC‑extractie en realtime signaalverwerking biedt hij ontwikkelaars de tools die nodig zijn om geavanceerde audio‑toepassingen te bouwen.
Aan de slag met Aubio
De eenvoudigste manier om Aubio te installeren is via de Python Package Index (PyPI). Gebruik alstublieft het volgende commando voor een volledige installatie.
Installeren met Aubio
pip install aubio Installeer Aubio vanaf GitHub
go get -u github.com/aubio/aubio.git Onsetdetectie via Python
Een van de meest bruikbare functies van de Aubio-bibliotheek is onset-detectie, die identificeert wanneer een muzikale noot of geluidsevenement begint. Onset-detectie vindt het precieze moment waarop een nieuw geluid of een nieuwe muzikale noot begint. In muziek is een "onset" de aanslag van een noot — het instant waarop een drum wordt aangeslagen, een gitaar wordt getokkeld, of een stem een lettergreep begint. Aubio bevat meerdere onset-detectie-algoritmen voor verschillende gebruikssituaties. Het volgende voorbeeld laat zien hoe je Onsets kunt detecteren in een audiobestand met Python-code.
Hoe onsets detecteren in een audiobestand via een Python-bibliotheek?
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)}")
Ondersteuning voor toonhoogtedetectie
Pitchedetectie is een andere belangrijke mogelijkheid van de open source Aubio-bibliotheek. Pitchedetectie identificeert de fundamentele frequentie (F0) van een geluid — in wezen, "welke muzikale noot is dit?" Het is de kern van elke tuner, melodie-extractor of vocale analysetool. Aubio ondersteunt meerdere pitchedetectie-algoritmen zoals yin, yinfft, mcomb, fcomb, enzovoort. Hier is een eenvoudig voorbeeld dat laat zien hoe je realtime pitchedetectie kunt uitvoeren in Python-toepassingen.
Hoe real-time toonhoogtedetectie uitvoeren met 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)
Tempo-tracking en beatdetectie via Python
De open source Aubio-bibliotheek kan ritmische patronen analyseren en beats en tempo in muziek detecteren binnen Python-toepassingen. Aubio kan naar audio luisteren en meeklappen — het tempo detecteren in BPM (beats per minute) en individuele beat‑tijdstempels pinpointen. Dit is van onschatbare waarde voor alles, van DJ‑software tot muzieksynchronisatie. De bibliotheek bepaalt beatlocaties door spectrale veranderingen en ritmische patronen in het audiosignaal te analyseren.
Geluidbestanden lezen en schrijven via Python
De Python-bibliotheek Aubio verpakt audio‑bestand I/O via zijn source‑ en sink‑objecten, ondersteunt meerdere formaten (WAV, FLAC, OGG, MP3 via libav of ffmpeg) en handelt automatisch de conversie van de sample‑rate af. Hier is een eenvoudig voorbeeld dat laat zien hoe softwareontwikkelaars audio‑bestanden kunnen lezen, verwerken en schrijven met Python‑commando's.
Hoe audio‑bestanden lezen, verwerken en schrijven met 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")