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ファイルのビットレートとフォーマットを指定して保存する方法についてソースコード付きでまとめました。
コメント