Анализ на аудио и музика в реално време чрез безплатна 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), което идентифицира кога започва музикална нота или звуково събитие. Откриването на началото намира точния момент, в който започва нов звук или музикална нота. В музиката "начало" е атаката на нотата — мигът, в който се удря барабан, се плъка китара или гласът започва сричка. 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 обвива I/O на аудио файлове чрез своите 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")

 Български