Pyhtonで音を研究する 2.
前回に続き,Pythonで音声の分析をしてみる.
今回はさらに他の内容も出してみた.
# 必要なライブラリのインポート
import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# 音声ファイルの読み込み(サンプル音源として 'trumpet' を使用)
audio_path = librosa.ex('trumpet')
y, sr = librosa.load(audio_path)
# 1. ゼロ交差率の計算(信号がゼロを横切る回数)
zcr = librosa.feature.zero_crossing_rate(y=y)
# 2. スペクトルセントロイドの計算(音の明るさの指標)
spectral_centroid = librosa.feature.spectral_centroid(y=y, sr=sr)
# 3. クロマ特徴量の計算(音の高さの分布)
chroma = librosa.feature.chroma_stft(y=y, sr=sr)
# 4. スペクトルコントラストの計算(ピークと谷の差)
spectral_contrast = librosa.feature.spectral_contrast(y=y, sr=sr)
# 5. Tonnetz の計算(調性感を示す特徴量)
# harmonic成分を抽出してから算出
y_harmonic = librosa.effects.harmonic(y=y)
tonnetz = librosa.feature.tonnetz(y=y_harmonic, sr=sr)
# 各特徴量をサブプロットで表示
plt.figure(figsize=(14, 10))
# ゼロ交差率
plt.subplot(3, 2, 1)
librosa.display.specshow(zcr, sr=sr, x_axis='time')
plt.title('Zero Crossing Rate')
plt.colorbar()
# スペクトルセントロイド
plt.subplot(3, 2, 2)
librosa.display.specshow(spectral_centroid, sr=sr, x_axis='time')
plt.title('Spectral Centroid')
plt.colorbar()
# クロマ特徴量
plt.subplot(3, 2, 3)
librosa.display.specshow(chroma, sr=sr, x_axis='time', y_axis='chroma', cmap='coolwarm')
plt.title('Chroma Feature')
plt.colorbar()
# スペクトルコントラスト
plt.subplot(3, 2, 4)
librosa.display.specshow(spectral_contrast, sr=sr, x_axis='time')
plt.title('Spectral Contrast')
plt.colorbar()
# Tonnetz
plt.subplot(3, 2, 5)
librosa.display.specshow(tonnetz, sr=sr, x_axis='time')
plt.title('Tonnetz')
plt.colorbar()
plt.tight_layout()
plt.show()
