Ücretsiz Python Kütüphanesi ile Gerçek Zamanlı Ses ve Müzik Analizi
Aubio, Yazılım Geliştiricileri tarafından Perde Tespiti, Ritim Takibi, MFCC Çıkarımı ve Gerçek Zamanlı Ses İşleme için kullanılan Açık Kaynak Python Ses İşleme Kütüphanesidir.
Aubio nedir?
Modern ses uygulamaları—müzik prodüksiyon araçları, ses analizi platformları ve gerçek zamanlı ses işleme sistemleri gibi—ses sinyallerini analiz etmenin verimli yollarını gerektirir. Bu amaç için popüler bir açık kaynak çözüm Aubio'dur; hafif ama güçlü bir kütüphane olup ses sinyallerinden anlamlı bilgiler çıkarmak için tasarlanmıştır. Aubio, ses sinyallerinden açıklamalar ve müzikal özellikler çıkarmak için tasarlanmış bir açık kaynak kütüphanesidir. Ses akışlarını analiz eder ve nota başlangıçları, perde, vuruşlar ve tempo gibi olayları belirler. Yüksek performans için ağırlıklı olarak C ile yazılmıştır ve Linux, macOS ve Windows üzerinde çalışır.
Kütüphane çok kolay kullanılabilir ve gerçek zamanlı ses işleme desteği sağlar. Kütüphane, bir davul vuruşunun gerçekleştiği zaman, bir müzik notasının frekansı ve bir parçanın temposu ya da ritmi gibi müzikal olayları algılayabilir. Hem çevrim dışı (ses dosyaları) hem de gerçek zamanlı ses akışlarında çalışabilir, bu da ses editörleri, dijital enstrümanlar ve ses analiz araçları için uygundur. Perde tespiti, vuruş takibi, başlangıç tespiti, MFCC çıkarımı ve gerçek zamanlı sinyal işleme desteğiyle, geliştiricilere gelişmiş ses uygulamaları oluşturmak için gereken araçları sunar.
Aubio'ya Başlarken
Aubio'yu kurmanın en kolay yolu Python Paket Dizini (PyPI) kullanmaktır. Lütfen tam kurulum için aşağıdaki komutu kullanın.
Aubio kullanarak kurulum
pip install aubio GitHub'tan Aubio'yu kurun
go get -u github.com/aubio/aubio.git Python ile Başlangıç Tespiti
Aubio kütüphanesinin en faydalı özelliklerinden biri, bir müzik notası ya da ses olayının ne zaman başladığını belirleyen başlangıç (onset) tespitidir. Başlangıç tespiti, yeni bir ses ya da müzik notasının başladığı kesin anı bulur. Müzikte, bir "onset" bir notanın saldırısıdır — bir davulun vurulduğu, bir gitarın çekildiği ya da bir sesin bir heceye başladığı an. Aubio, farklı kullanım durumları için birden fazla başlangıç tespit algoritması içerir. Aşağıdaki örnek, Python kodu kullanarak bir ses dosyası içinde başlangıçları nasıl tespit edeceğinizi gösterir.
Python Kütüphanesi ile Bir Ses Dosyasındaki Başlangıçları Nasıl Algılayabilirsiniz?
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)}")
Ses Perdesi Tespiti Desteği
Ses perdesi tespiti, açık kaynaklı Aubio kütüphanesinin bir diğer önemli yeteneğidir. Perde tespiti, bir sesin temel frekansını (F0) belirler — temelde, "bu hangi müzik notası?" anlamına gelir. Herhangi bir akort cihazının, melodi çıkarıcısının ya da vokal analiz aracının çekirdeğidir. Aubio, yin, yinfft, mcomb, fcomb gibi birden fazla perde tespit algoritmasını destekler. İşte Python uygulamaları içinde gerçek zamanlı perde tespiti nasıl yapılır gösteren basit bir örnek.
Python ile Gerçek Zamanlı Ses Perdesi Algılamayı Nasıl Gerçekleştirirsiniz?
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)
Python ile Tempo Takibi ve Vuruş Tespiti
Açık kaynak Aubio kütüphanesi, Python uygulamaları içinde müzikte ritmik desenleri analiz edebilir ve vuruşları ve temposu tespit edebilir. Aubio, sesi dinleyebilir ve eş zamanlı olarak tıklayabilir — BPM (dakikadaki vuruş) cinsinden temposu tespit eder ve tek tek vuruş zaman damgalarını belirler. Bu, DJ yazılımından müzik senkronizasyonuna kadar her şey için paha biçilmezdir. Kütüphane, ses sinyalindeki spektral değişiklikleri ve ritmik desenleri analiz ederek vuruş konumlarını belirler.
Python ile Ses Dosyası Okuma ve Yazma
Python kütüphanesi Aubio, kaynak ve hedef nesneleri aracılığıyla ses dosyası G/Ç'sini sarar, birden fazla formatı (WAV, FLAC, OGG, libav veya ffmpeg aracılığıyla MP3) destekler ve örnekleme hızı dönüşümünü otomatik olarak yönetir. İşte, yazılım geliştiricilerin Python komutlarıyla ses dosyası okuma, işleme ve yazma işlemlerini nasıl gerçekleştirebileceklerini gösteren basit bir örnek.
Python ile Ses Dosyalarını Okuma, İşleme ve Yazma Nasıl Yapılır?
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")