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

Analisis Audio dan Musik Real-Time melalui Perpustakaan Python Gratis

Aubio adalah Perpustakaan Pemrosesan Audio Python Sumber Terbuka yang Digunakan oleh Pengembang Perangkat Lunak untuk Deteksi Pitch, Pelacakan Beat, Ekstraksi MFCC, dan Pemrosesan Audio Real-Time.

Apa itu Aubio?

Aplikasi audio modern—seperti alat produksi musik, platform analisis audio, dan sistem pemrosesan suara real-time—memerlukan cara yang efisien untuk menganalisis sinyal suara. Salah satu solusi open-source populer untuk tujuan ini adalah Aubio, sebuah library ringan namun kuat yang dirancang untuk mengekstrak informasi bermakna dari sinyal audio. Aubio adalah library open-source yang dirancang untuk mengekstrak anotasi dan fitur musik dari sinyal audio. Ia menganalisis aliran audio dan mengidentifikasi peristiwa seperti onset nada, pitch, beat, dan tempo. Library ini ditulis terutama dalam bahasa C untuk kinerja tinggi dan bekerja di Linux, macOS, dan Windows.

Pustaka ini sangat mudah digunakan dan mendukung pemrosesan audio secara real-time. Pustaka ini dapat mendeteksi peristiwa musik seperti saat pukulan drum terjadi, frekuensi sebuah nada musik, dan tempo atau ritme sebuah trek. Ia dapat beroperasi baik secara offline (file audio) maupun pada aliran audio real-time, menjadikannya cocok untuk editor audio, instrumen digital, dan alat analisis suara. Dengan dukungan deteksi pitch, pelacakan beat, deteksi onset, ekstraksi MFCC, dan pemrosesan sinyal real-time, ia menyediakan pengembang dengan alat yang diperlukan untuk membangun aplikasi audio canggih.

Previous Next

Memulai dengan Aubio

Cara termudah untuk menginstal Aubio adalah dengan menggunakan Python Package Index (PyPI). Silakan gunakan perintah berikut untuk instalasi lengkap.

Instal menggunakan Aubio

pip install aubio 

Instal Aubio dari GitHub

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

Deteksi Onset dengan Python

Salah satu fitur paling berguna dari pustaka Aubio adalah deteksi onset, yang mengidentifikasi kapan sebuah nada musik atau peristiwa suara dimulai. Deteksi onset menemukan momen tepat ketika suara baru atau nada musik mulai. Dalam musik, "onset" adalah serangan sebuah nada — saat drum dipukul, gitar dipetik, atau suara memulai sebuah suku kata. Aubio mencakup beberapa algoritma deteksi onset untuk berbagai kasus penggunaan. Contoh berikut menunjukkan cara mendeteksi Onset di dalam file audio menggunakan kode Python.

Cara Mendeteksi Onset dalam File Audio menggunakan Library 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)}")

Dukungan Deteksi Pitch

Deteksi pitch adalah kemampuan penting lainnya dari pustaka Aubio sumber terbuka. Deteksi pitch mengidentifikasi frekuensi fundamental (F0) dari sebuah suara — pada dasarnya, "nota musik apa ini?" Ini merupakan inti dari tuner apa pun, ekstraktor melodi, atau alat analisis vokal. Aubio mendukung beberapa algoritma deteksi pitch seperti yin, yinfft, mcomb, fcomb, dan sebagainya. Berikut adalah contoh sederhana yang menunjukkan cara melakukan deteksi Pitch secara real-time di dalam aplikasi Python.

Cara Melakukan Deteksi Pitch Real-Time dengan 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)

Pelacakan Tempo dan Deteksi Beat dengan Python

Perpustakaan open source Aubio dapat menganalisis pola ritmis dan mendeteksi ketukan serta tempo dalam musik di dalam aplikasi Python. Aubio dapat mendengarkan audio dan menepuk seirama — mendeteksi tempo dalam BPM (ketukan per menit) dan menentukan cap waktu ketukan individu. Ini sangat berharga untuk apa saja mulai dari perangkat lunak DJ hingga sinkronisasi musik. Perpustakaan ini menentukan lokasi ketukan dengan menganalisis perubahan spektral dan pola ritmis dalam sinyal audio.

Membaca dan Menulis File Suara dengan Python

Perpustakaan Python Aubio membungkus I/O file audio melalui objek source dan sink-nya, mendukung berbagai format (WAV, FLAC, OGG, MP3 via libav atau ffmpeg) dan menangani konversi laju sampel secara otomatis. Berikut adalah contoh sederhana yang menunjukkan bagaimana pengembang perangkat lunak dapat melakukan pembacaan, pemrosesan, dan penulisan file audio menggunakan perintah Python.

Cara Membaca, Memproses, dan Menulis File Audio menggunakan 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")

 Indonesia