0. 概要
Pythonを使って、mp3データをFFTする方法です。ライブラリとしてpydubやffmpegを使うので予めダウンロードしてくださいね。
1. ライブラリのダウンロード
sudo apt install ffmpeg
pip install pydub
2. コード
FFT.py
#! /usr/bin/env python
# -*- coding: utf-8 -*-
from pydub import AudioSegment as AS
import ffmpeg
import numpy as np
import matplotlib.pyplot as plt
file = "ファイル名を入れてね"
sound = AS.from_file(file + ".mp3", "mp3")
data = np.array(sound.get_array_of_samples())
spec = np.fft.fft(data) #2次元配列(実部,虚部)
freq = np.fft.fftfreq(data.shape[0], 1.0/sound.frame_rate)
spec = spec[:int(spec.shape[0]/2 + 1)] #周波数がマイナスになるスペクトル要素の削除
freq = freq[:int(freq.shape[0]/2 + 1)] #周波数がマイナスになる周波数要素の削除
max_spec=max(np.abs(spec)) #最大音圧を取得(音圧を正規化するために使用)
plt.plot(freq, np.abs(spec)/max_spec)
plt.grid()
plt.xlim([0,4000]) #グラフに出力する周波数の範囲[Hz]
plt.xlabel("Frequency[Hz]")
plt.ylabel("Sound Pressure[-]")
#plt.yscale("log")
plt.savefig(file + ".png") #pngファイルで出力
3. 補足
plt.yscale("log")のコメントアウトを外せばlogスケールに変更できます。