1. Produk
  2.   Audio
  3.   Python
  4.   Aubio
 
  

Analisis Audio dan Muzik Masa Nyata melalui Perpustakaan Python Percuma

Aubio adalah Perpustakaan Pemprosesan Audio Python Sumber Terbuka yang Digunakan oleh Pembangun Perisian untuk Pengesanan Nada, Penjejakan Rentak, Ekstraksi MFCC, dan Pemprosesan Audio Masa Nyata.

Apakah Aubio?

Aplikasi audio moden—seperti alat pengeluaran muzik, platform analisis audio, dan sistem pemprosesan bunyi masa nyata—memerlukan cara yang cekap untuk menganalisis isyarat bunyi. Salah satu penyelesaian sumber terbuka yang popular untuk tujuan ini ialah Aubio, perpustakaan ringan tetapi berkuasa yang direka untuk mengekstrak maklumat bermakna daripada isyarat audio. Aubio ialah perpustakaan sumber terbuka yang direka untuk mengekstrak anotasi dan ciri muzik daripada isyarat audio. Ia menganalisis aliran audio dan mengenal pasti peristiwa seperti permulaan nota, pitch, ketukan, dan tempo. Ia ditulis terutamanya dalam C untuk prestasi tinggi dan berfungsi merentasi Linux, macOS, dan Windows.

Pustaka ini sangat mudah digunakan dan menyokong pemprosesan audio masa nyata. Pustaka ini dapat mengesan peristiwa muzik seperti bila pukulan drum berlaku, frekuensi nota muzik dan tempo atau irama trek. Ia boleh beroperasi secara luar talian (fail audio) dan dalam aliran audio masa nyata, menjadikannya sesuai untuk penyunting audio, instrumen digital, dan alat analisis bunyi. Dengan sokongan untuk pengesanan nada, penjejakan rentak, pengesanan permulaan, pengekstrakan MFCC, dan pemprosesan isyarat masa nyata, ia menyediakan pembangun dengan alat yang diperlukan untuk membina aplikasi audio lanjutan.

Previous Next

Mula Menggunakan Aubio

Cara paling mudah untuk memasang Aubio ialah menggunakan Python Package Index (PyPI). Sila gunakan perintah berikut untuk pemasangan lengkap.

Pasang menggunakan Aubio

pip install aubio 

Pasang Aubio dari GitHub

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

Pengesanan Onset melalui Python

Salah satu ciri paling berguna dalam perpustakaan Aubio ialah pengesanan permulaan, yang mengenal pasti bila nota muzik atau acara bunyi bermula. Pengesanan permulaan menemukan saat tepat di mana bunyi baru atau nota muzik bermula. Dalam muzik, "permulaan" ialah serangan nota — saat drum dipukul, gitar dipetik, atau suara memulakan satu suku kata. Aubio menyertakan pelbagai algoritma pengesanan permulaan untuk pelbagai kes penggunaan. Contoh berikut menunjukkan cara mengesan Permulaan dalam fail audio menggunakan kod Python.

Bagaimana Mengesan Permulaan dalam Fail Audio melalui Perpustakaan 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)}")

Sokongan Pengesanan Pitch

Pengesanan nada ialah satu lagi keupayaan penting dalam perpustakaan sumber terbuka Aubio. Pengesanan nada mengenal pasti frekuensi asas (F0) sesuatu bunyi — pada dasarnya, "nota muzik apa ini?" Ia merupakan teras bagi mana-mana penala, pengekstrak melodi, atau alat analisis vokal. Aubio menyokong pelbagai algoritma pengesanan nada seperti yin, yinfft, mcomb, fcomb, dan sebagainya. Berikut ialah contoh mudah yang menunjukkan cara melakukan pengesanan Nada secara masa nyata dalam aplikasi Python.

Bagaimana Melakukan Pengesanan Pitch Secara Masa Nyata melalui 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)

Penjejakan Tempo dan Pengesanan Beat melalui Python

Perpustakaan sumber terbuka Aubio dapat menganalisis corak ritma dan mengesan ketukan serta tempo dalam muzik di dalam aplikasi Python. Aubio boleh mendengar audio dan menepuk bersama — mengesan tempo dalam BPM (ketukan per minit) dan menentukan cap masa ketukan individu. Ini sangat berharga untuk apa jua dari perisian DJ hingga penyelarasan muzik. Perpustakaan menentukan lokasi ketukan dengan menganalisis perubahan spektral dan corak ritma dalam isyarat audio.

Pembacaan dan Penulisan Fail Bunyi melalui Python

Perpustakaan Python Aubio membungkus I/O fail audio melalui objek sumber dan sinknya, menyokong pelbagai format (WAV, FLAC, OGG, MP3 melalui libav atau ffmpeg) dan mengendalikan penukaran kadar sampel secara automatik. Berikut ialah contoh mudah yang menunjukkan bagaimana pemaju perisian boleh melakukan pembacaan, pemprosesan, dan penulisan fail audio menggunakan arahan Python.

Bagaimana Membaca, Memproses, dan Menulis Fail Audio melalui 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")

 Melayu