Sanntidslyd- og musikkanalyse via gratis Python‑bibliotek
Aubio er et åpen kildekode Python‑lydbehandlingsbibliotek som brukes av programvareutviklere for tonehøydegjenkjenning, taktsporing, MFCC‑ekstraksjon og sanntidslydbehandling.
Hva er Aubio?
Moderne lydapplikasjoner—som musikkproduksjonsverktøy, lydanalyseplattformer og sanntids lydbehandlingssystemer—krever effektive metoder for å analysere lydsignaler. En populær open‑source‑løsning for dette formålet er Aubio, et lettvektig men kraftig bibliotek designet for å hente meningsfull informasjon fra lydsignaler. Aubio er et open‑source‑bibliotek designet for å trekke ut annotasjoner og musikalske egenskaper fra lydsignaler. Det analyserer lydstrømmer og identifiserer hendelser som note‑påslag, tonehøyde, takter og tempo. Det er skrevet hovedsakelig i C for høy ytelse og fungerer på tvers av Linux, macOS og Windows.
Biblioteket er veldig enkelt å håndtere og støtter sanntidslydbehandling. Biblioteket kan oppdage musikalske hendelser som når et trommeslag inntreffer, frekvensen til en musikknote og tempoet eller rytmen i et spor. Det kan operere både offline (lydfiler) og i sanntidslydstrømmer, noe som gjør det egnet for lydredigeringsprogrammer, digitale instrumenter og lydanalyseverktøy. Med støtte for tonehøydegjenkjenning, beatsporing, onset-gjenkjenning, MFCC-ekstraksjon og sanntids signalbehandling, gir det utviklere verktøyene som trengs for å bygge avanserte lydapplikasjoner.
Kom i gang med Aubio
Den enkleste måten å installere Aubio på er ved å bruke Python Package Index (PyPI). Vennligst bruk følgende kommando for fullstendig installasjon.
Installer med Aubio
pip install aubio Installer Aubio fra GitHub
go get -u github.com/aubio/aubio.git Onset‑deteksjon via Python
En av de mest nyttige funksjonene i Aubio‑biblioteket er onset‑deteksjon, som identifiserer når en musikalsk note eller lydhendelse begynner. Onset‑deteksjon finner det presise øyeblikket et nytt lyd‑ eller musikalsk notat starter. I musikk er en "onset" angrepet av en note — øyeblikket et trommeslag treffer, en gitar blir plukket, eller en stemme begynner en stavelse. Aubio inkluderer flere onset‑deteksjonsalgoritmer for ulike bruksområder. Følgende eksempel demonstrerer hvordan man oppdager onsets i en lydfil ved hjelp av Python‑kode.
Hvordan oppdage påslag i en lydfil via 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øtte for tonehøyde‑deteksjon
Tonehøyde‑deteksjon er en annen viktig funksjon i det åpne kildekode‑biblioteket Aubio. Tonehøyde‑deteksjon identifiserer den grunnleggende frekvensen (F0) av en lyd — i hovedsak, "hvilken musikalsk note er dette?" Det er kjernen i enhver stemmemåler, melodi‑uttrekker eller vokalanalyse‑verktøy. Aubio støtter flere tonehøyde‑deteksjonsalgoritmer som yin, yinfft, mcomb, fcomb, og så videre. Her er et enkelt eksempel som demonstrerer hvordan man utfører sanntids tonehøyde‑deteksjon i Python‑applikasjoner.
Hvordan utføre sanntids tonehøyde‑detektering 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‑deteksjon via Python
Det åpne kildekodebiblioteket Aubio kan analysere rytmemønstre og oppdage takter og tempo i musikk innen Python‑applikasjoner. Aubio kan lytte til lyd og følge med — detektere tempoet i BPM (slag per minutt) og identifisere individuelle takttidsstempler. Dette er uvurderlig for alt fra DJ‑programvare til musikk‑synkronisering. Biblioteket bestemmer taktlokasjoner ved å analysere spektrale endringer og rytmemønstre i lydsignalet.
Lese og skrive lydfiler via Python
Python‑biblioteket Aubio pakker lydfil‑I/O gjennom sine kilde‑ og sink‑objekter, og støtter flere formater (WAV, FLAC, OGG, MP3 via libav eller ffmpeg) samt håndterer konvertering av samplingsfrekvens automatisk. Her er et enkelt eksempel som viser hvordan programvareutviklere kan lese, behandle og skrive lydfiler ved hjelp av Python‑kommandoer.
Hvordan lese, behandle og skrive 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")