Аналіз аудіо та музики в реальному часі за допомогою безкоштовної бібліотеки 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 є виявлення онсетів, яке визначає, коли починається музична нота або звукова подія. Виявлення онсетів знаходить точний момент, коли починається новий звук або музична нота. У музиці «онсет» — це атака ноти — момент, коли бита ударяється, гітара щипається або голос починає складову. 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)}")
Підтримка визначення висоти тону
Визначення висоти тону — ще одна важлива можливість відкритої бібліотеки 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
Бібліотека Aubio для Python обгортає ввід‑вивід аудіофайлів за допомогою об’єктів 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")