Librosaのインストールと主要モジュールガイド

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でのインストール手順

  1. ダウンロードした圧縮ファイルをC:\Program Filesに解凍
  2. ffmpeg.exeのパス(C:\Program Files\ffmpeg-2022-04-28\bin)を環境変数に追加
  3. コマンドプロンプトで以下のコマンドを実行してインストールを確認
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)

これらの機能を組み合わせることで、音声分析や音楽情報検索システムを構築することができます。

タグ: Librosa Python音声処理 音響分析 MFCC メルスペクトログラム

7月10日 20:30 投稿