تحليل الصوت والموسيقى في الوقت الحقيقي عبر مكتبة بايثون مجانية

Aubio هي مكتبة بايثون مفتوحة المصدر لمعالجة الصوت يستخدمها مطورو البرمجيات لاكتشاف النغمة، تتبع الإيقاع، استخراج MFCC، ومعالجة الصوت في الوقت الحقيقي.

ما هو Aubio؟

تتطلب تطبيقات الصوت الحديثة — مثل أدوات إنتاج الموسيقى، ومنصات تحليل الصوت، وأنظمة معالجة الصوت في الوقت الحقيقي — طرقًا فعّالة لتحليل إشارات الصوت. أحد الحلول المفتوحة المصدر الشهيرة لهذا الغرض هو Aubio، مكتبة خفيفة الوزن لكنها قوية صُممت لاستخراج المعلومات ذات المعنى من إشارات الصوت. Aubio هي مكتبة مفتوحة المصدر صُممت لاستخراج التعليقات والميزات الموسيقية من إشارات الصوت. تقوم بتحليل تدفقات الصوت وتحديد الأحداث مثل بدايات النوتات، والارتفاع (النغمة)، والإيقاعات، والإيقاع الزمني. تم كتابة المكتبة أساسًا بلغة C لأداء عالي وتعمل عبر أنظمة Linux و macOS و Windows.

المكتبة سهلة الاستخدام للغاية وتدعم معالجة الصوت في الوقت الحقيقي. يمكن للمكتبة اكتشاف الأحداث الموسيقية مثل حدوث ضربة طبل، وتردد النوتة الموسيقية وإيقاع أو سرعة المسار. يمكنها العمل سواءً دون اتصال (ملفات صوتية) أو في تدفقات صوتية في الوقت الحقيقي، مما يجعلها مناسبة لمحرري الصوت، والآلات الرقمية، وأدوات تحليل الصوت. مع دعم اكتشاف النغمة، وتتبع الإيقاع، واكتشاف البداية، واستخراج MFCC، ومعالجة الإشارة في الوقت الحقيقي، توفر للمطورين الأدوات اللازمة لبناء تطبيقات صوتية متقدمة.

Previous Next

البدء مع Aubio

أسهل طريقة لتثبيت Aubio هي باستخدام فهرس حزم بايثون (PyPI). يرجى استخدام الأمر التالي للتثبيت الكامل.

التثبيت باستخدام Aubio

pip install aubio 

تثبيت Aubio من GitHub

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

اكتشاف البداية عبر Python

إحدى أكثر الميزات فائدة في مكتبة Aubio هي اكتشاف النبضات (onset detection)، التي تحدد متى يبدأ نوتة موسيقية أو حدث صوتي. يحدد اكتشاف النبضات اللحظة الدقيقة التي يبدأ فيها صوت جديد أو نوتة موسيقية. في الموسيقى، يُطلق على "النبضة" هجوم النوتة — اللحظة التي يُضرب فيها الطبل، أو يُعزف فيها الغيتار، أو يبدأ الصوت مقطعًا. تشمل Aubio عدة خوارزميات لاكتشاف النبضات لمختلف حالات الاستخدام. المثال التالي يوضح كيفية اكتشاف النبضات داخل ملف صوتي باستخدام كود بايثون.

كيف يتم اكتشاف البدايات في ملف صوتي باستخدام مكتبة بايثون؟


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

دعم اكتشاف النغمة

اكتشاف النغمة هو قدرة أخرى مهمة في مكتبة Aubio المفتوحة المصدر. يحدد اكتشاف النغمة التردد الأساسي (F0) للصوت — في الأساس، "ما هي النوتة الموسيقية هذه؟" وهو جوهر أي موالف، أو مستخرج لحن، أو أداة تحليل صوتي. تدعم Aubio عدة خوارزميات لاكتشاف النغمة مثل yin، yinfft، mcomb، fcomb، وغيرها. إليك مثال بسيط يوضح كيفية إجراء اكتشاف النغمة في الوقت الحقيقي داخل تطبيقات بايثون.

كيف يتم تنفيذ اكتشاف النغمة في الوقت الحقيقي باستخدام بايثون؟


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

يمكن لمكتبة Aubio المفتوحة المصدر تحليل الأنماط الإيقاعية واكتشاف النبضات والإيقاع في الموسيقى داخل تطبيقات بايثون. يمكن لـ Aubio الاستماع إلى الصوت والنبض معه — اكتشاف الإيقاع بوحدة BPM (النبضات في الدقيقة) وتحديد طوابع زمنية لكل نبضة. هذا لا يقدر بثمن لأي شيء من برامج الـ DJ إلى مزامنة الموسيقى. تحدد المكتبة مواقع النبضات عن طريق تحليل التغييرات الطيفية والأنماط الإيقاعية في إشارة الصوت.

قراءة وكتابة ملفات الصوت عبر Python

تغلف مكتبة بايثون Aubio عمليات الإدخال/الإخراج لملفات الصوت من خلال كائنات المصدر والوجهة، وتدعم صيغًا متعددة (WAV، FLAC، OGG، MP3 عبر libav أو ffmpeg) وتتعامل مع تحويل معدل العينة تلقائيًا. إليك مثالًا بسيطًا يوضح كيف يمكن لمطوري البرمجيات قراءة ملفات الصوت ومعالجتها وكتابتها باستخدام أوامر بايثون.

كيف يتم قراءة ومعالجة وكتابة ملفات الصوت باستخدام بايثون؟


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

 عربي