1. Termékek
  2.   Hang
  3.   Python
  4.   Aubio
 
  

Valós idejű hang- és zeneelemzés ingyenes Python könyvtárral

Az Aubio egy nyílt forráskódú Python audio feldolgozó könyvtár, amelyet szoftverfejlesztők használnak hangmagasság-érzékelésre, ütemkövetésre, MFCC kinyerésre és valós idejű hangfeldolgozásra.

Mi az Aubio?

A modern hangalkalmazások—például zenei produkciós eszközök, hanganalízis platformok és valós idejű hangfeldolgozó rendszerek—hatékony módszereket igényelnek a hangjelek elemzésére. Egy népszerű nyílt forráskódú megoldás erre az Aubio, egy könnyű, mégis erőteljes könyvtár, amely a hangjelekből értelmes információkat nyer ki. Az Aubio egy nyílt forráskódú könyvtár, amely annotációkat és zenei jellemzőket extrahál a hangjelekből. Elemzi a hangfolyamokat, és olyan eseményeket azonosít, mint a hangjegy kezdetei, a hangmagasság, a ritmusütések és a tempó. Elsősorban C nyelven íródott a magas teljesítmény érdekében, és Linux, macOS és Windows rendszereken is működik.

A könyvtár nagyon könnyen kezelhető, és támogatja a valós idejű hangfeldolgozást. A könyvtár képes felismerni zenei eseményeket, például amikor egy dobütés történik, egy hangjegy frekvenciáját, valamint egy szám tempóját vagy ritmusát. Képes offline (hangfájlok) és valós idejű hangfolyamok feldolgozására is, így alkalmas hangszerkesztők, digitális hangszerek és hanganalízis eszközök számára. A hangmagasság‑detektálás, beat‑követés, onset‑detektálás, MFCC‑kivonás és valós idejű jelfeldolgozás támogatásával a fejlesztők megkapják a fejlett hangalkalmazások építéséhez szükséges eszközöket.

Previous Next

Az Aubio használatának megkezdése

Az Aubio legegyszerűbb telepítési módja a Python Package Index (PyPI) használata. Kérjük, használja a következő parancsot a teljes telepítéshez.

Telepítés Aubio használatával

pip install aubio 

Aubio telepítése a GitHubról

go get -u github.com/aubio/aubio.git 

Kezdetek detektálása Pythonon keresztül

Az Aubio könyvtár egyik leghasznosabb funkciója a kezdőpont (onset) detektálás, amely felismeri, mikor kezdődik egy zenei hang vagy hangesemény. A kezdőpont detektálás megtalálja a pontos pillanatot, amikor egy új hang vagy zenei hang kezdődik. A zenében a "onset" a hang leütése — az a pillanat, amikor egy dobot megütnek, egy gitárt pengetnek, vagy egy hang elkezd egy szótagot. Az Aubio többféle kezdőpont detektálási algoritmust tartalmaz különböző felhasználási esetekhez. Az alábbi példa bemutatja, hogyan lehet Python kóddal detektálni a kezdőpontokat egy hangfájlban.

Hogyan lehet észlelni a hangfájl kezdeteit Python könyvtár segítségével?


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

Hangmagasság detektálás támogatása

A hangmagasság (pitch) detektálás egy másik fontos képessége a nyílt forráskódú Aubio könyvtárnak. A hangmagasság detektálás azonosítja egy hang alapfrekvenciáját (F0) — lényegében, "milyen zenei hang ez?". Ez minden hangoló, dallamkinyerő vagy vokális elemző eszköz alapja. Az Aubio több hangmagasság detektálási algoritmust támogat, mint például a yin, yinfft, mcomb, fcomb, stb. Itt egy egyszerű példa, amely bemutatja, hogyan lehet valós időben hangmagasságot detektálni Python alkalmazásokban.

Hogyan végezhetünk valós idejű hangmagasság-érzékelést Python segítségével?


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)

Tempókövetés és ütemdetektálás Pythonon keresztül

A nyílt forráskódú Aubio könyvtár képes elemzni a ritmikus mintákat, és felismerni a dobütéseket és a tempót a zenében Python alkalmazásokon belül. Az Aubio képes hallgatni a hangot és ütemezni — felismerve a tempót BPM-ben (ütés percenként) és meghatározva az egyes dobütés időbélyegeket. Ez felbecsülhetetlenül hasznos mindenhez, a DJ szoftvertől a zene-szinkronizálásig. A könyvtár a dobütés helyeit a spektrális változások és a ritmikus minták elemzésével határozza meg a hangjelben.

Hangfájl olvasása és írása Pythonon keresztül

A Python könyvtár, az Aubio, a forrás- és nyelőobjektumokon keresztül csomagolja az audio fájl I/O-t, több formátumot támogatva (WAV, FLAC, OGG, MP3 libav vagy ffmpeg segítségével) és automatikusan kezeli a mintavételezési frekvencia konverziót. Itt egy egyszerű példa, amely bemutatja, hogyan tudnak a szoftverfejlesztők Python parancsokkal audio fájlok olvasását, feldolgozását és írását végrehajtani.

Hogyan olvassunk, dolgozzunk fel és írjunk hangfájlokat Python segítségével?


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

 Magyar