การวิเคราะห์เสียงและดนตรีแบบเรียลไทม์ผ่านไลบรารี Python ฟรี

Aubio เป็นไลบรารีการประมวลผลเสียง Python แบบโอเพนซอร์สที่นักพัฒนาซอฟต์แวร์ใช้สำหรับการตรวจจับความสูงของเสียง, การติดตามจังหวะ, การสกัด MFCC, และการประมวลผลเสียงแบบเรียลไทม์

Aubio คืออะไร?

แอปพลิเคชันออดิโอสมัยใหม่—เช่นเครื่องมือผลิตเพลง, แพลตฟอร์มการวิเคราะห์ออดิโอ, และระบบประมวลผลเสียงแบบเรียลไทม์—ต้องการวิธีที่มีประสิทธิภาพในการวิเคราะห์สัญญาณเสียง หนึ่งในโซลูชันโอเพ่นซอร์สที่ได้รับความนิยมสำหรับวัตถุประสงค์นี้คือ Aubio, ไลบรารีที่มีน้ำหนักเบาแต่ทรงพลังออกแบบมาเพื่อสกัดข้อมูลที่มีความหมายจากสัญญาณออดิโอ Aubio เป็นไลบรารีโอเพ่นซอร์สที่ออกแบบเพื่อสกัดคำอธิบายและคุณลักษณะทางดนตรีจากสัญญาณออดิโอ มันวิเคราะห์สตรีมออดิโอและระบุเหตุการณ์ต่าง ๆ เช่น การเริ่มต้นโน้ต, ความสูงของเสียง, จังหวะ, และเทมโป มันเขียนด้วยภาษา C เป็นหลักเพื่อประสิทธิภาพสูงและทำงานได้บน Linux, macOS, และ Windows.

ไลบรารีนี้ใช้งานง่ายมากและรองรับการประมวลผลเสียงแบบเรียลไทม์ ไลบรารีสามารถตรวจจับเหตุการณ์ดนตรี เช่น เมื่อกลองตี, ความถี่ของโน้ตดนตรีและเท็มโปหรือจังหวะของแทร็กได้ มันสามารถทำงานได้ทั้งแบบออฟไลน์ (ไฟล์เสียง) และในสตรีมเสียงแบบเรียลไทม์ ทำให้เหมาะสำหรับโปรแกรมแก้ไขเสียง, เครื่องดนตรีดิจิทัล, และเครื่องมือวิเคราะห์เสียง ด้วยการสนับสนุนการตรวจจับพิต, การติดตามจังหวะ, การตรวจจับการเริ่มต้น, การสกัด MFCC, และการประมวลผลสัญญาณแบบเรียลไทม์ มันให้เครื่องมือที่นักพัฒนาต้องการเพื่อสร้างแอปพลิเคชันเสียงขั้นสูง

Previous Next

เริ่มต้นใช้งาน Aubio

วิธีที่ง่ายที่สุดในการติดตั้ง Aubio คือการใช้ Python Package Index (PyPI) โปรดใช้คำสั่งต่อไปนี้สำหรับการติดตั้งเต็มรูปแบบ.

ติดตั้งโดยใช้ Aubio

pip install aubio 

ติดตั้ง Aubio จาก GitHub

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

การตรวจจับจุดเริ่มต้นด้วย Python

หนึ่งในคุณสมบัติที่มีประโยชน์ที่สุดของไลบรารี Aubio คือการตรวจจับการเริ่มต้น (onset detection) ซึ่งระบุว่าโน้ตดนตรีหรือเหตุการณ์เสียงเริ่มต้นเมื่อใด การตรวจจับการเริ่มต้นจะหาช่วงเวลาที่แม่นยำที่เสียงใหม่หรือโน้ตดนตรีเริ่มต้น ในดนตรี "onset" คือการโจมตีของโน้ต — ช่วงเวลาที่กลองถูกตี, กีตาร์ถูกดีด, หรือเสียงพูดเริ่มต้นพยางค์หนึ่ง Aubio มีอัลกอริทึมการตรวจจับการเริ่มต้นหลายแบบสำหรับการใช้งานที่แตกต่าง ตัวอย่างต่อไปนี้แสดงวิธีการตรวจจับการเริ่มต้นภายในไฟล์เสียงโดยใช้โค้ด Python

วิธีตรวจจับการเริ่มต้นเสียงในไฟล์ออดิโอด้วยไลบรารี 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)}")

การสนับสนุนการตรวจจับความสูงของเสียง

การตรวจจับความสูงของเสียง (pitch detection) เป็นความสามารถสำคัญอีกอย่างของไลบรารี Aubio แบบโอเพ่นซอร์ส การตรวจจับความสูงของเสียงระบุความถี่พื้นฐาน (F0) ของเสียง — โดยพื้นฐานแล้วคือ "โน้ตดนตรีนี้คืออะไร?" นี่เป็นหัวใจของอุปกรณ์ตั้งค่าเสียงใด ๆ, ตัวสกัดเมโลดี้, หรือเครื่องมือวิเคราะห์เสียงร้อง Aubio รองรับอัลกอริทึมการตรวจจับความสูงของเสียงหลายแบบ เช่น yin, yinfft, mcomb, fcomb ฯลฯ ตัวอย่างง่ายต่อไปนี้แสดงวิธีการทำการตรวจจับความสูงของเสียงแบบเรียลไทม์ภายในแอปพลิเคชัน Python

วิธีทำการตรวจจับความสูงของเสียงแบบเรียลไทม์ด้วย 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)

การติดตามจังหวะและการตรวจจับบีตด้วย Python

ไลบรารีโอเพ่นซอร์ส Aubio สามารถวิเคราะห์รูปแบบจังหวะและตรวจจับบีตและเทมโปในเพลงภายในแอปพลิเคชัน Python ได้ Aubio สามารถฟังเสียงและกดตาม — ตรวจจับเทมโปเป็น BPM (บีตต่อหนึ่งนาที) และระบุตำแหน่งเวลาของบีตแต่ละอันได้อย่างแม่นยำ สิ่งนี้มีคุณค่าสำหรับทุกอย่างตั้งแต่ซอฟต์แวร์ DJ จนถึงการซิงโครไนซ์เพลง ไลบรารีกำหนดตำแหน่งบีตโดยการวิเคราะห์การเปลี่ยนแปลงสเปกตรัมและรูปแบบจังหวะในสัญญาณเสียง

การอ่านและเขียนไฟล์เสียงด้วย Python

ไลบรารี Python Aubio ห่อหุ้มการอ่าน/เขียนไฟล์เสียงผ่านอ็อบเจ็กต์ source และ sink รองรับหลายรูปแบบ (WAV, FLAC, OGG, MP3 ผ่าน libav หรือ ffmpeg) และจัดการการแปลงอัตราการสุ่มตัวอย่างโดยอัตโนมัติ นี่คือตัวอย่างง่ายที่แสดงให้เห็นว่าผู้พัฒนาซอฟต์แวร์สามารถอ่าน ประมวลผล และเขียนไฟล์เสียงโดยใช้คำสั่ง Python ได้อย่างไร

วิธีอ่าน, ประมวลผล และเขียนไฟล์ออดิโอด้วย 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")

 ไทย