Zenn
👌

Librosa の完全ガイド:音声処理ライブラリの使い方と落とし穴

2025/03/17に公開

1. Librosa とは?

Librosa は、Python で音声信号処理を行うためのオープンソースライブラリです。

Librosa は、以下のような機能を備えています。

  • 音声の読み込み・書き出し(WAV, MP3 など)
  • 音声の前処理(ノイズ除去・正規化)
  • 特徴量抽出(MFCC, スペクトログラム, Chroma)
  • 時間伸縮(Time Stretching)やピッチシフト
  • 音楽解析(テンポ・ビート検出)

主に 音声認識・機械学習・音楽分析・音声生成 などの分野で活用されています。


2. インストール方法

Librosa は pip で簡単にインストールできます。

pip install librosa

依存ライブラリとして numpy, scipy, soundfile などが自動でインストールされます。


3. Librosa の基本操作

3.1 音声データの読み込みと再生

import librosa
import librosa.display
import matplotlib.pyplot as plt

# 音声ファイルの読み込み
y, sr = librosa.load("audio.wav", sr=16000)  # 16kHzにリサンプリング

# 波形をプロット
plt.figure(figsize=(10, 4))
librosa.display.waveshow(y, sr=sr)
plt.title("Waveform")
plt.xlabel("Time (s)")
plt.ylabel("Amplitude")
plt.show()

ポイント

  • sr=16000:標準的なサンプリングレート(16kHz)に変換(None にすると元のサンプリングレートを保持)
  • y:音声波形(numpy 配列)
  • sr:サンプリングレート

3.2 音声データの書き出し

import soundfile as sf
sf.write("output.wav", y, sr)

librosa ではなく soundfile を使用することで、より正確な書き出しが可能になります。


4. 音声の前処理(前処理技術)

4.1 ノイズ除去(Spectral Gating)

import noisereduce as nr

# ノイズ除去
y_denoised = nr.reduce_noise(y=y, sr=sr)

ポイント

  • noisereduce ライブラリを使用すると簡単にノイズ除去が可能

4.2 音量の正規化

def normalize_audio(y):
    return y / max(abs(y))

# 正規化
y_normalized = normalize_audio(y)

ポイント

  • 音量が極端に大きい/小さいデータに対処
  • y の最大値を 1 にスケーリング

5. 音声特徴量の抽出

5.1 メル周波数ケプストラム係数(MFCC)

mfcc = librosa.feature.mfcc(y=y, sr=sr, n_mfcc=13)
plt.figure(figsize=(10, 4))
librosa.display.specshow(mfcc, x_axis='time')
plt.colorbar()
plt.title("MFCC")
plt.show()

用途

  • 音声認識、話者識別、音響分析

5.2 スペクトログラムの計算

import numpy as np

# STFT(短時間フーリエ変換)
D = np.abs(librosa.stft(y))
plt.figure(figsize=(10, 4))
librosa.display.specshow(librosa.amplitude_to_db(D, ref=np.max), y_axis='log', x_axis='time')
plt.colorbar()
plt.title("Spectrogram")
plt.show()

用途

  • 音声可視化、異常検知

6. 音声変換(ピッチシフト・時間伸縮)

6.1 ピッチシフト

# 2セミトーン上げる
y_shifted = librosa.effects.pitch_shift(y, sr=sr, n_steps=2)

用途

  • 音楽のキー変更、データ拡張

6.2 時間伸縮(Time Stretching)

# 速度を1.5倍にする
y_stretched = librosa.effects.time_stretch(y, rate=1.5)

用途

  • 音声データの拡張、楽曲解析

7. Librosa の落とし穴と注意点

7.1 librosa.load() はデフォルトでモノラル変換される

落とし穴

  • librosa.load()自動的にステレオ→モノラル変換を行う
  • ステレオ音声を保持したい場合は mono=False を設定
y, sr = librosa.load("stereo_audio.wav", mono=False)

7.2 librosa は WAV 以外のフォーマットでエラーが出ることがある

落とし穴

  • MP3, AAC などのフォーマットは pydub などで変換してから librosa に渡す
from pydub import AudioSegment
sound = AudioSegment.from_file("audio.mp3", format="mp3")
sound.export("audio.wav", format="wav")

7.3 STFT のフレームサイズに注意

落とし穴

  • n_fft(フレームサイズ)が小さいと時間分解能が高くなるが、周波数分解能が低下
  • 一般的に n_fft=2048 が推奨
D = librosa.stft(y, n_fft=2048, hop_length=512)

8. まとめ

Librosa は音声処理に特化した便利なライブラリ
基本操作(読み込み・書き出し・可視化)を押さえよう
特徴量(MFCC, スペクトログラム)を活用
音声変換(ピッチシフト・時間伸縮)も簡単にできる
落とし穴に注意しながら、正しくデータを扱う

Librosa を活用すれば、音声解析や AI モデルの前処理を簡単に行うことができます。
ぜひ実践して、さまざまな音声データを扱ってみましょう!

Discussion

ログインするとコメントできます