Librosaの概要とインストール
Librosaは強力なPython音声信号処理ライブラリで、音楽情報検索システムを構築するための基本的な機能を提供します。
Librosaの公式ドキュメント
https://librosa.org/doc/latest/index.html
Librosaのインストール
Librosaはpipを使用して簡単にインストールできます。
pip install librosa -i https://pypi.douban.com/simple
このコマンドは、必要な依存ライブラリを自動的にインストールします。
ffmpegのインストール
audioreadの音声デコード能力を向上させるために、ffmpegをインストールすることをお勧めします。
ffmpegのダウンロード
https://www.ffmpeg.org/download.html
Windowsでのインストール手順
- ダウンロードした圧縮ファイルをC:\Program Filesに解凍
- ffmpeg.exeのパス(C:\Program Files\ffmpeg-2022-04-28\bin)を環境変数に追加
- コマンドプロンプトで以下のコマンドを実行してインストールを確認
ffmpeg -version
バージョン情報が表示されればインストール成功です。
Librosaの主要モジュール
Librosaは複数のモジュールで構成されています。以下に主要なモジュールを紹介します。
| モジュール名 | 機能概要 |
|---|---|
| librosa.core | 音声の読み込み、スペクトログラムの計算など基本的な機能を提供 |
| librosa.feature | 音声特徴量の抽出機能(メルスペクトログラム、MFCC、クロマ特性など) |
| librosa.display | matplotlibを使用した可視化機能 |
| librosa.effects | ピッチシフト、タイムストレッチなどの音声処理機能 |
| librosa.beat | ビート検出とビートイベントの推定機能 |
| librosa.onset | オンセット検出とオンセット強度の計算機能 |
| librosa.decompose | 音源分離機能(HPSSなど) |
| librosa.output | テキストと波形ファイルの出力機能 |
主要な機能
音声処理
音声ファイルの読み込み
import soundfile as sf
# 音声ファイルの読み込み
audio_data, sample_rate = sf.read('example.wav')
# サンプルレートの変更
new_sample_rate = 16000
resampled_data = librosa.resample(audio_data, orig_sr=sample_rate, target_sr=new_sample_rate)
モノラル変換
def convert_to_mono(stereo_audio):
"""ステレオ音声をモノラルに変換"""
if stereo_audio.ndim > 1:
return np.mean(stereo_audio, axis=1)
return stereo_audio
mono_audio = convert_to_mono(audio_data)
リサンプリング
def resample_audio(audio, orig_sr, target_sr):
"""音声データのリサンプリング"""
if orig_sr == target_sr:
return audio
return librosa.resample(audio, orig_sr=orig_sr, target_sr=target_sr)
resampled_audio = resample_audio(audio_data, sample_rate, new_sample_rate)
スペクトル表現
短時間フーリエ変換(STFT)
def compute_stft(audio, frame_size=2048, hop_length=512):
"""STFTを計算"""
return librosa.stft(audio, n_fft=frame_size, hop_length=hop_length)
stft_result = compute_stft(mono_audio)
メルスペクトログラム
def compute_melspectrogram(audio, sr, n_mels=128):
"""メルスペクトログラムを計算"""
return librosa.feature.melspectrogram(y=audio, sr=sr, n_mels=n_mels)
mel_spec = compute_melspectrogram(mono_audio, sample_rate)
MFCC
def compute_mfcc(audio, sr, n_mfcc=13):
"""MFCCを計算"""
return librosa.feature.mfcc(y=audio, sr=sr, n_mfcc=n_mfcc)
mfcc_features = compute_mfcc(mono_audio, sample_rate)
振幅スケーリング
デシベル変換
def amplitude_to_db_spec(magnitude_spec):
"""振幅スペクトルをデシベルスケールに変換"""
return librosa.amplitude_to_db(magnitude_spec, ref=np.max)
db_spec = amplitude_to_db_spec(np.abs(stft_result))
時間と周波数の変換
フレームから時間への変換
def frames_to_time_conversion(frames, sr, hop_length):
"""フレームインデックスを時間に変換"""
return librosa.frames_to_time(frames, sr=sr, hop_length=hop_length)
time_values = frames_to_time_conversion(np.arange(10), sample_rate, hop_length=512)
周波数からMIDI番号への変換
def hz_to_midi_conversion(frequencies):
"""周波数をMIDIノート番号に変換"""
return librosa.hz_to_midi(frequencies)
midi_notes = hz_to_midi_conversion([440, 880, 220])
特徴量抽出
クロマ特徴量
def extract_chroma(audio, sr):
"""クロマ特徴量を抽出"""
return librosa.feature.chroma_stft(y=audio, sr=sr)
chroma = extract_chroma(mono_audio, sample_rate)
スペクトルセントロイド
def compute_spectral_centroid(audio, sr):
"""スペクトルセントロイドを計算"""
return librosa.feature.spectral_centroid(y=audio, sr=sr)
spectral_centroid = compute_spectral_centroid(mono_audio, sample_rate)
可視化
波形プロット
def plot_waveform(audio, sr):
"""波形をプロット"""
plt.figure(figsize=(10, 4))
librosa.display.waveshow(audio, sr=sr)
plt.title('Audio Waveform')
plt.tight_layout()
plt.show()
plot_waveform(mono_audio, sample_rate)
スペクトログラム表示
def plot_spectrogram(spec, sr, hop_length):
"""スペクトログラムを表示"""
plt.figure(figsize=(10, 4))
librosa.display.specshow(librosa.amplitude_to_db(spec, ref=np.max),
sr=sr, hop_length=hop_length,
y_axis='log', x_axis='time')
plt.colorbar(format='%+2.0f dB')
plt.title('Log-frequency power spectrogram')
plt.tight_layout()
plt.show()
plot_spectrogram(np.abs(stft_result), sample_rate, hop_length=512)
ビート検出
テンポ検出
def detect_tempo(audio, sr):
"""テンポを検出"""
tempo, beats = librosa.beat.beat_track(y=audio, sr=sr)
return tempo, beats
tempo, beat_frames = detect_tempo(mono_audio, sample_rate)
これらの機能を組み合わせることで、音声分析や音楽情報検索システムを構築することができます。