Analýza zvuku a hudby v reálném čase pomocí bezplatné Python knihovny
Aubio je open source Python knihovna pro zpracování zvuku, kterou používají vývojáři softwaru pro detekci výšky tónu, sledování rytmu, extrakci MFCC a zpracování zvuku v reálném čase.
Co je Aubio?
Moderní audio aplikace — jako jsou nástroje pro produkci hudby, platformy pro analýzu zvuku a systémy pro zpracování zvuku v reálném čase — vyžadují efektivní způsoby analýzy zvukových signálů. Jedním z populárních open-source řešení pro tento účel je Aubio, lehká, ale výkonná knihovna navržená k extrakci smysluplných informací ze zvukových signálů. Aubio je open-source knihovna určená k extrakci anotací a hudebních vlastností ze zvukových signálů. Analyzuje audio proudy a identifikuje události jako jsou nástupy not, výška tónu, bity a tempo. Je napsána převážně v jazyce C pro vysoký výkon a funguje na Linuxu, macOS a Windows.
Knihovna je velmi snadno ovladatelná a podporuje zpracování zvuku v reálném čase. Knihovna dokáže detekovat hudební události, jako je úder na buben, frekvence hudební noty a tempo nebo rytmus skladby. Může fungovat jak offline (audio soubory), tak v reálném čase u audio streamů, což ji činí vhodnou pro audio editory, digitální nástroje a nástroje pro analýzu zvuku. S podporou detekce výšky tónu, sledování beatů, detekce nástupu, extrakce MFCC a zpracování signálu v reálném čase poskytuje vývojářům nástroje potřebné k tvorbě pokročilých audio aplikací.
Začínáme s Aubio
Nejjednodušší způsob instalace Aubio je pomocí Python Package Index (PyPI). Použijte prosím následující příkaz pro úplnou instalaci.
Instalace pomocí Aubio
pip install aubio Instalace Aubio z GitHubu
go get -u github.com/aubio/aubio.git Detekce nástupu pomocí Pythonu
Jednou z nejužitečnějších funkcí knihovny Aubio je detekce nástupu, která určuje, kdy začíná hudební nota nebo zvuková událost. Detekce nástupu najde přesný okamžik, kdy začíná nový zvuk nebo hudební nota. V hudbě je \"nástup\" útok noty — okamžik, kdy je udeřeno na buben, zakoupená kytara nebo hlas začíná slabiku. Aubio obsahuje několik algoritmů detekce nástupu pro různé případy použití. Následující příklad ukazuje, jak detekovat nástupy v audio souboru pomocí Python kódu.
Jak detekovat nástupy v audio souboru pomocí knihovny Python?
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)}")
Podpora detekce výšky tónu
Detekce výšky tónu je další důležitou schopností open source knihovny Aubio. Detekce výšky tónu určuje základní frekvenci (F0) zvuku — v podstatě \"jaká je tato hudební nota?\". Je jádrem každého ladiče, extraktoru melodií nebo nástroje pro analýzu hlasu. Aubio podporuje několik algoritmů detekce výšky tónu, jako jsou yin, yinfft, mcomb, fcomb a další. Zde je jednoduchý příklad, který ukazuje, jak provést detekci výšky tónu v reálném čase v Python aplikacích.
Jak provést detekci výšky tónu v reálném čase pomocí Pythonu?
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)
Sledování tempa a detekce rytmu pomocí Pythonu
Otevřená knihovna Aubio dokáže analyzovat rytmické vzory a detekovat údery a tempo v hudbě v rámci Python aplikací. Aubio může poslouchat audio a „tápnout“ spolu — detekuje tempo v BPM (údery za minutu) a určuje časové značky jednotlivých úderů. To je neocenitelné pro vše od DJ softwaru po synchronizaci hudby. Knihovna určuje místa úderů analýzou spektrálních změn a rytmických vzorů v audio signálu.
Čtení a zápis zvukových souborů pomocí Pythonu
Python knihovna Aubio obaluje I/O audio souborů pomocí svých objektů source a sink, podporuje více formátů (WAV, FLAC, OGG, MP3 přes libav nebo ffmpeg) a automaticky provádí konverzi vzorkovací frekvence. Zde je jednoduchý příklad, který ukazuje, jak mohou vývojáři softwaru číst, zpracovávat a zapisovat audio soubory pomocí příkazů v Pythonu.
Jak číst, zpracovávat a zapisovat audio soubory pomocí Pythonu?
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")