Pythonモジュール「pydub」で音声ファイル(mp3)の信号をリアルタイムグラフ化する方法についてソースコード付きでまとめました。
音声ファイルの信号をリアルタイムグラフ化
Pythonモジュール「pydub」で読み込んだ音声データをMatplotlibでリアルタイムグラフ化してみました。
サンプルコード(Python3)
サンプルプログラムのソースコードです。
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np from pydub import AudioSegment import ctypes import time def getkey(key): return(bool(ctypes.windll.user32.GetAsyncKeyState(key)&0x8000)) def line000(pos): WIDTH = 80 pl = [(pos)%WIDTH, (pos+1)%WIDTH, (pos+2)%WIDTH] rettxt = "" for i in range(WIDTH): if i in pl: rettxt += "0" else: rettxt += "-" return(rettxt) # リアルタイムグラフの描画 def realtime_graph(t, y, dt=0.01): line, = plt.plot(t*0.0001, y, "r-", label="y=x") # (x,y)のプロット line.set_ydata(y) # y値を更新 plt.title("Graph") # グラフタイトル plt.xlabel("t[s]") # x軸ラベル plt.ylabel("y") # y軸ラベル plt.legend() # 凡例表示 plt.grid() # グリッド表示 plt.ylim(-15000, 15000) plt.draw() # グラフの描画 plt.pause(dt) # 更新時間間隔 plt.clf() # 画面初期化 def main(): ESC = 0x1B # ESCキーの仮想キーコード (x, y) = (0, 0) # 初期値 dt = 0.01 i = 0 plt.ion() # 対話モードオン # 音声ファイルの読み込み sound = AudioSegment.from_file("input.mp3", "mp3") time = sound.duration_seconds # 再生時間(秒) rate = sound.frame_rate # サンプリングレート(Hz) channel = sound.channels # チャンネル数(1:mono, 2:stereo) # 音声データをリストで抽出 list_sound = sound.get_array_of_samples() y = np.array(list_sound) t = np.arange(0, int(time*rate)) while(True): realtime_graph(t[i:500+i], y[i:500+i], dt) i += int(rate*dt) if getkey(ESC): # ESCキーが押されたら終了 break plt.close() if __name__ == '__main__': main()
【Python/pydub】ビットレートとフォーマットを指定して保存
Pythonモジュール「pydub」でmp3、wavファイルのビットレートとフォーマットを指定して保存する方法についてソースコード付きでまとめました。
コメント