Pythonは信号処理に非常に便利なライブラリが多数存在するため、音声ファイルの周波数スペクトル分析にも利用することができます。この記事では、Pythonでの音声ファイルの周波数スペクトル分析方法について解説します。

音声ファイルの読み込み

Pythonでは、音声ファイルを読み込むためにscipylibrosaといったライブラリを利用することができます。以下は、librosaを利用した音声ファイルの読み込み方法の例です。

import librosa

# 音声ファイルの読み込み
audio, sr = librosa.load('audio_file.wav')

librosa.load()関数によって、audioに音声データが、srにサンプリングレートが格納されます。

音声データの前処理

音声データは、通常の波形データとして取得されます。しかし、周波数スペクトル分析を行うためには、信号をフーリエ変換する必要があります。また、離散フーリエ変換を用いるために、信号のサンプリング間隔を等間隔にする必要があります。

以下は、librosaを用いた音声データの前処理の例です。

import numpy as np

# 窓関数の設定
window = 'hann'

# 短時間フーリエ変換を行う
stft = librosa.stft(audio, window=window)

# パワースペクトルを取得する
power = np.abs(stft) ** 2

# 対数スケールに変換する
log_power = librosa.power_to_db(power)

librosa.stft()関数によって、音声データを短時間フーリエ変換を行います。その後、パワースペクトルを計算し、対数スケールに変換します。

スペクトログラムの可視化

最後に、スペクトログラムを可視化するために、matplotlibを利用します。

import matplotlib.pyplot as plt

# スペクトログラムをプロットする
plt.figure(figsize=(10, 4))
librosa.display.specshow(log_power, sr=sr, x_axis='time', y_axis='hz', cmap='coolwarm')
plt.colorbar(format='%+2.0f dB')
plt.tight_layout()
plt.show()

librosa.display.specshow()関数によって、スペクトログラムをプロットすることができます。x_axis パラメータとしてtimey_axisとしてhzを指定することで、時間と周波数の軸を取得し、cmapでカラーマップを指定しています。

結論

Pythonを用いて、音声ファイルの周波数スペクトル分析を行うことができました。librosaを用いることで、音声データの読み込み、前処理、スペクトログラムの可視化が容易になります。これを応用することで、音声信号に関する研究や、音声データを用いたアプリケーションの開発が可能になります。