1. produkty
  2.   Zvuk
  3.   Python
  4.   Aubio
 
  

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í.

Previous Next

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")

 Čeština