Realtidslyd- og musikanalyse via gratis Python-bibliotek
Aubio er et open source Python-lydbehandlingsbibliotek, der bruges af softwareudviklere til tonehøjde-detektion, beat-sporing, MFCC-udtrækning og realtidslydbehandling.
Hvad er Aubio?
Moderne lydapplikationer—såsom musikproduktionsværktøjer, lydanalyseplatforme og realtids-lydbehandlingssystemer—kræver effektive metoder til at analysere lydsignaler. En populær open-source løsning til dette formål er Aubio, et letvægts, men kraftfuldt bibliotek designet til at udtrække meningsfuld information fra lydsignaler. Aubio er et open-source bibliotek designet til at udtrække annotationer og musikalske egenskaber fra lydsignaler. Det analyserer lydstrømme og identificerer begivenheder såsom noteonsets, tonehøjde, beats og tempo. Det er primært skrevet i C for høj ydeevne og fungerer på tværs af Linux, macOS og Windows.
Biblioteket er meget nemt at håndtere og understøtter realtidslydbehandling. Biblioteket kan opdage musikalske begivenheder som når et trommeslag forekommer, frekvensen af en musiknote og tempoet eller rytmen i et spor. Det kan fungere både offline (lydfiler) og i realtidslydstrømme, hvilket gør det egnet til lydredigeringsprogrammer, digitale instrumenter og lydanalyseværktøjer. Med understøttelse af tonehøjde-detektion, beat-tracking, onset-detektion, MFCC-udtrækning og realtids signalbehandling giver det udviklere de nødvendige værktøjer til at bygge avancerede lydapplikationer.
Kom i gang med Aubio
Den nemmeste måde at installere Aubio på er ved at bruge Python Package Index (PyPI). Brug venligst følgende kommando for en komplet installation.
Installer ved hjælp af Aubio
pip install aubio Installer Aubio fra GitHub
go get -u github.com/aubio/aubio.git Onset-detektion via Python
En af de mest nyttige funktioner i Aubio-biblioteket er onset-detektion, som identificerer, hvornår en musiknote eller lydevent begynder. Onset-detektion finder det præcise øjeblik, hvor en ny lyd eller musiknote starter. I musik er et "onset" angrebet på en note — øjeblikket hvor en tromme slås, en guitar plukkes, eller en stemme begynder en stavelse. Aubio inkluderer flere onset-detektion algoritmer til forskellige anvendelsesområder. Det følgende eksempel demonstrerer, hvordan man opdager Onsets i en lydfil ved hjælp af Python-kode.
Hvordan opdager man påbegyndelser i en lydfil via Python-biblioteket?
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øtte til tonehøjde-detektion
Pitchedetektion er en anden vigtig funktion i det open source Aubio-bibliotek. Pitchedetektion identificerer den grundlæggende frekvens (F0) af en lyd — i bund og grund, "hvilken musiknote er dette?" Det er kernen i enhver tuner, melodiudtrækker eller vokalanalyseværktøj. Aubio understøtter flere pitchedetektion algoritmer såsom yin, yinfft, mcomb, fcomb og så videre. Her er et enkelt eksempel, der demonstrerer, hvordan man udfører realtids pitchedetektion i Python-applikationer.
Hvordan udfører man realtids-tonehøjde-detektion 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)
Tempo-sporing og beat-detektion via Python
Det open source Aubio-bibliotek kan analysere rytmiske mønstre og opdage beats og tempo i musik inden for Python-applikationer. Aubio kan lytte til lyd og følge med — opdage tempoet i BPM (beats per minute) og fastlægge individuelle beat-tidsstempler. Dette er uvurderligt for alt fra DJ-software til musiksynkronisering. Biblioteket bestemmer beat‑positioner ved at analysere spektrale ændringer og rytmiske mønstre i lydsignalet.
Læse og skrive lydfiler via Python
Python-biblioteket Aubio indpakker lydfil‑I/O gennem sine source‑ og sink‑objekter, understøtter flere formater (WAV, FLAC, OGG, MP3 via libav eller ffmpeg) og håndterer automatisk konvertering af sample‑rate. Her er et enkelt eksempel, der viser, hvordan softwareudviklere kan læse, behandle og skrive lydfiler ved hjælp af Python‑kommandoer.
Hvordan læser, behandler og skriver man lydfiler 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")