👌
Librosa の完全ガイド:音声処理ライブラリの使い方と落とし穴
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 の落とし穴と注意点
librosa.load()
はデフォルトでモノラル変換される
7.1 落とし穴
-
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