การวิเคราะห์เสียงและดนตรีแบบเรียลไทม์ผ่านไลบรารี Python ฟรี
Aubio เป็นไลบรารีการประมวลผลเสียง Python แบบโอเพนซอร์สที่นักพัฒนาซอฟต์แวร์ใช้สำหรับการตรวจจับความสูงของเสียง, การติดตามจังหวะ, การสกัด MFCC, และการประมวลผลเสียงแบบเรียลไทม์
Aubio คืออะไร?
แอปพลิเคชันออดิโอสมัยใหม่—เช่นเครื่องมือผลิตเพลง, แพลตฟอร์มการวิเคราะห์ออดิโอ, และระบบประมวลผลเสียงแบบเรียลไทม์—ต้องการวิธีที่มีประสิทธิภาพในการวิเคราะห์สัญญาณเสียง หนึ่งในโซลูชันโอเพ่นซอร์สที่ได้รับความนิยมสำหรับวัตถุประสงค์นี้คือ Aubio, ไลบรารีที่มีน้ำหนักเบาแต่ทรงพลังออกแบบมาเพื่อสกัดข้อมูลที่มีความหมายจากสัญญาณออดิโอ Aubio เป็นไลบรารีโอเพ่นซอร์สที่ออกแบบเพื่อสกัดคำอธิบายและคุณลักษณะทางดนตรีจากสัญญาณออดิโอ มันวิเคราะห์สตรีมออดิโอและระบุเหตุการณ์ต่าง ๆ เช่น การเริ่มต้นโน้ต, ความสูงของเสียง, จังหวะ, และเทมโป มันเขียนด้วยภาษา C เป็นหลักเพื่อประสิทธิภาพสูงและทำงานได้บน Linux, macOS, และ Windows.
ไลบรารีนี้ใช้งานง่ายมากและรองรับการประมวลผลเสียงแบบเรียลไทม์ ไลบรารีสามารถตรวจจับเหตุการณ์ดนตรี เช่น เมื่อกลองตี, ความถี่ของโน้ตดนตรีและเท็มโปหรือจังหวะของแทร็กได้ มันสามารถทำงานได้ทั้งแบบออฟไลน์ (ไฟล์เสียง) และในสตรีมเสียงแบบเรียลไทม์ ทำให้เหมาะสำหรับโปรแกรมแก้ไขเสียง, เครื่องดนตรีดิจิทัล, และเครื่องมือวิเคราะห์เสียง ด้วยการสนับสนุนการตรวจจับพิต, การติดตามจังหวะ, การตรวจจับการเริ่มต้น, การสกัด MFCC, และการประมวลผลสัญญาณแบบเรียลไทม์ มันให้เครื่องมือที่นักพัฒนาต้องการเพื่อสร้างแอปพลิเคชันเสียงขั้นสูง
เริ่มต้นใช้งาน 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")