Realio laiko garso ir muzikos analizė naudojant nemokamą Python biblioteką
Aubio yra atviro kodo Python garso apdorojimo biblioteka, kurią programinės įrangos kūrėjai naudoja tonų aptikimui, takto sekimui, MFCC išgavimui ir realio laiko garso apdorojimui.
Kas yra Aubio?
Modernios garso programos — tokios kaip muzikos gamybos įrankiai, garso analizės platformos ir realaus laiko garso apdorojimo sistemos — reikalauja efektyvių būdų analizuoti garso signalus. Vienas populiarus atviro kodo sprendimas šiam tikslui yra Aubio, lengva, bet galinga biblioteka, skirta išgauti prasmingą informaciją iš garso signalų. Aubio yra atviro kodo biblioteka, skirta išgauti anotacijas ir muzikinius požymius iš garso signalų. Ji analizuoja garso srautus ir nustato įvykius, tokius kaip natų pradžios, tonas, taktai ir tempas. Ji parašyta daugiausia C kalba dėl aukšto našumo ir veikia Linux, macOS ir Windows operacinėse sistemose.
Biblioteka yra labai lengvai naudojama ir palaiko realaus laiko garso apdorojimą. Biblioteka gali aptikti muzikinius įvykius, pvz., kai smūgiama į būgną, muzikos natos dažnį ir takelio tempą arba ritmą. Ji gali veikti tiek neprisijungus (garso failai), tiek realaus laiko garso srautu, todėl tinka garso redaktoriams, skaitmeniniams instrumentams ir garso analizės įrankiams. Su palaikymu tonacijos aptikimui, takto sekimui, įvykių aptikimui, MFCC išgavimui ir realaus laiko signalo apdorojimui, ji suteikia kūrėjams įrankius, reikalingus kurti pažangias garso programas.
Pradžia su Aubio
Paprasčiausias būdas įdiegti Aubio yra naudoti Python paketų indeksą (PyPI). Prašome naudoti šią komandą pilnam įdiegimui.
Įdiegti naudojant Aubio
pip install aubio Įdiegti Aubio iš GitHub
go get -u github.com/aubio/aubio.git Pradžios aptikimas naudojant Python
Viena iš naudingiausių Aubio bibliotekos funkcijų yra onset detection, kuris nustato, kada prasideda muzikinė nata arba garso įvykis. Onset detection randa tikslų momentą, kai prasideda naujas garsas arba muzikinė nata. Muzikoje, "onset" yra natos ataka — momentas, kai smuikas smūgiamas, gitara plaukiama arba balsas pradeda skiemenį. Aubio apima kelis onset detection algoritmus įvairioms naudojimo situacijoms. Žemiau pateiktas pavyzdys demonstruoja, kaip aptikti Onsets garso faile naudojant Python kodą.
Kaip aptikti garsų pradžias garso faile naudojant 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)}")
Tonų aptikimo palaikymas
Pitch detection yra dar viena svarbi atviro kodo Aubio bibliotekos galimybė. Pitch detection nustato pagrindinę garso dažnį (F0) — iš esmės, "kokią muzikos natą tai yra?" Tai yra bet kokio derintuvo, melodijos išskyrimo ar balso analizės įrankio pagrindas. Aubio palaiko kelis pitch detection algoritmus, tokius kaip yin, yinfft, mcomb, fcomb, ir t.t. Štai paprastas pavyzdys, kuris demonstruoja, kaip realiu laiku atlikti Pitch detection Python programose.
Kaip atlikti realaus laiko tonų (aukščio) aptikimą naudojant 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)
Tempos sekimas ir takto aptikimas naudojant Python
Atviro kodo Aubio biblioteka gali analizuoti ritminius modelius ir aptikti takto smūgius bei tempą muzikos viduje Python programose. Aubio gali klausytis garso ir „būti“ kartu — aptikdama tempą BPM (smūgiai per minutę) ir nurodydama atskirų smūgių laiko žymas. Tai neįkainojama tiek DJ programinei įrangai, tiek muzikos sinchronizavimui. Biblioteka nustato smūgių vietas analizuodama spektro pokyčius ir ritminius modelius garso signale.
Garso failų skaitymas ir rašymas naudojant Python
Python biblioteka Aubio supakuoja garso failų įvestį/išvestį per savo source ir sink objektus, palaikydama kelis formatus (WAV, FLAC, OGG, MP3 per libav arba ffmpeg) ir automatiškai tvarkydama mėginių dažnio konversiją. Štai paprastas pavyzdys, kuris rodo, kaip programinės įrangos kūrėjai gali atlikti garso failų skaitymą, apdorojimą ir rašymą naudojant Python komandas.
Kaip skaityti, apdoroti ir rašyti garso failus naudojant 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")