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()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です