Realtidsljud- och musikanalys via gratis Python-bibliotek
Aubio är ett öppet källkod Python-ljudbearbetningsbibliotek som används av mjukvaruutvecklare för tonhöjdsdetektering, taktsökning, MFCC-extraktion och realtidsljudbehandling.
Vad är Aubio?
Moderna ljudapplikationer — såsom musikproduktionsverktyg, ljudanalysplattformar och realtidsljudbehandlingssystem — kräver effektiva sätt att analysera ljudsignaler. En populär öppen källkodslösning för detta ändamål är Aubio, ett lättviktigt men kraftfullt bibliotek som är utformat för att extrahera meningsfull information från ljudsignaler. Aubio är ett öppet källkodsbibliotek som är designat för att extrahera annotationer och musikaliska egenskaper från ljudsignaler. Det analyserar ljudströmmar och identifierar händelser såsom notanslag, tonhöjd, takter och tempo. Det är främst skrivet i C för hög prestanda och fungerar på Linux, macOS och Windows.
Biblioteket är mycket enkelt att hantera och stöder realtidsljudbehandling. Biblioteket kan upptäcka musikaliska händelser som när ett trumslag inträffar, frekvensen för en musiknot och tempot eller rytmen i ett spår. Det kan fungera både offline (ljudfiler) och i realtidsljudströmmar, vilket gör det lämpligt för ljudredigerare, digitala instrument och ljudanalysverktyg. Med stöd för tonhöjdsdetektion, taktsynkronisering, onset‑detektion, MFCC‑extraktion och realtids‑signalbehandling ger det utvecklare verktygen som behövs för att bygga avancerade ljudapplikationer.
Komma igång med Aubio
Det enklaste sättet att installera Aubio är att använda Python Package Index (PyPI). Använd följande kommando för en fullständig installation.
Installera med Aubio
pip install aubio Installera Aubio från GitHub
go get -u github.com/aubio/aubio.git Upptäckt av onset via Python
Ett av de mest användbara funktionerna i Aubio-biblioteket är onset-detektion, som identifierar när en musikalisk ton eller ljudhändelse börjar. Onset-detektion hittar det exakta ögonblicket då ett nytt ljud eller en musikalisk ton startar. I musik är en "onset" attacken av en ton — ögonblicket då en trumma slås, en gitarr plockas eller en röst börjar en stavelse. Aubio innehåller flera onset-detekteringsalgoritmer för olika användningsområden. Följande exempel visar hur man detekterar Onsets i en ljudfil med Python-kod.
Hur upptäcker man anslag i en ljudfil med ett Python‑bibliotek?
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)}")
Stöd för tonhöjdsdetektering
Tonhöjdsdetektion är en annan viktig funktion i det öppna källkods-biblioteket Aubio. Tonhöjdsdetektion identifierar grundfrekvensen (F0) för ett ljud — i princip, "vilken musikalisk ton är detta?" Det är kärnan i alla stämapparater, melodiutdragare eller verktyg för röstanalys. Aubio stödjer flera tonhöjdsdetekteringsalgoritmer såsom yin, yinfft, mcomb, fcomb och så vidare. Här är ett enkelt exempel som visar hur man utför realtids-tonhöjdsdetektion i Python-applikationer.
Hur utför man realtids‑pitchdetektering med 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)
Spårning av tempo och taktdetektion via Python
Den öppna källkods‑biblioteket Aubio kan analysera rytmiska mönster och upptäcka takter och tempo i musik i Python‑applikationer. Aubio kan lyssna på ljud och knacka med — upptäcka tempot i BPM (slag per minut) och pinpointa individuella takttidsstämplar. Detta är ovärderligt för allt från DJ‑programvara till musiksynkronisering. Biblioteket bestämmer taktplatseringar genom att analysera spektrala förändringar och rytmiska mönster i ljudsignalen.
Läsning och skrivning av ljudfiler via Python
Python‑biblioteket Aubio omsluter ljudfil‑I/O via sina source‑ och sink‑objekt, stödjer flera format (WAV, FLAC, OGG, MP3 via libav eller ffmpeg) och hanterar automatiskt samplingsfrekvenskonvertering. Här är ett enkelt exempel som visar hur mjukvaruutvecklare kan läsa, bearbeta och skriva ljudfiler med Python‑kommandon.
Hur läser, bearbetar och skriver man ljudfiler med 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")