無料Pythonライブラリによるリアルタイム音声・音楽分析

Aubioは、ソフトウェア開発者がピッチ検出、ビートトラッキング、MFCC抽出、リアルタイム音声処理に使用するオープンソースPythonオーディオ処理ライブラリです。

Aubioとは何ですか?

最新のオーディオアプリケーション—例えば音楽制作ツール、オーディオ解析プラットフォーム、リアルタイム音声処理システム—は、音声信号を効率的に分析する方法を必要とします。この目的のための人気のあるオープンソースソリューションの一つが Aubio で、軽量ながら強力なライブラリで、オーディオ信号から有意義な情報を抽出するよう設計されています。Aubio はオーディオ信号からアノテーションや音楽的特徴を抽出するためのオープンソースライブラリです。音声ストリームを解析し、ノートのオンセット、ピッチ、ビート、テンポといったイベントを識別します。主に C で記述されており高性能を実現し、Linux、macOS、Windows で動作します。

このライブラリは非常に扱いやすく、リアルタイム音声処理をサポートしています。ドラムヒットが発生したときや音符の周波数、トラックのテンポやリズムなどの音楽イベントを検出できます。オフライン(音声ファイル)でもリアルタイム音声ストリームでも動作でき、オーディオエディタ、デジタル楽器、音声解析ツールに適しています。ピッチ検出、ビートトラッキング、オンセット検出、MFCC抽出、リアルタイム信号処理をサポートし、開発者が高度な音声アプリケーションを構築するために必要なツールを提供します。

Previous Next

Aubioのはじめ方

Aubio をインストールする最も簡単な方法は Python Package Index (PyPI) を使用することです。完全なインストールには以下のコマンドを使用してください。

Aubioを使用してインストール

pip install aubio 

GitHubからAubioをインストール

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(1分あたりのビート数)でテンポを検出し、個々のビートタイムスタンプを特定します。これはDJソフトウェアから音楽同期まで、あらゆる用途で非常に有用です。ライブラリはオーディオ信号のスペクトル変化とリズムパターンを解析することでビート位置を決定します。

Pythonによるサウンドファイルの読み書き

PythonライブラリのAubioは、sourceおよびsinkオブジェクトを通じてオーディオファイルのI/Oをラップし、複数のフォーマット(WAV、FLAC、OGG、libavまたはffmpeg経由のMP3)をサポートし、サンプルレート変換を自動的に処理します。以下は、ソフトウェア開発者が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")

 日本