pythonでmfccを計算するコードで


import matplotlib.pyplot as plt, librosa, librosa.display, urllib
x, fs = librosa.load('wavfile')
mfccs = librosa.feature.mfcc(x, sr=fs)
librosa.display.specshow(mfccs, sr=fs )

これはリンク先と同じ内容ですが
https://qiita.com/martin-d28jp-love/items/34161f2facb80edd999f


ここでプロットした2次元平面の値を
2次元配列で得たいのですが、どうすればそういう事が出来るでしょうか?

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2018/04/02 09:55:05
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:aidiary No.1

回答回数1ベストアンサー獲得回数1

ポイント200pt

回答リクエストが来たのですがこれは私に質問してるのでしょうか・・・?

mfccsがすでに二次元配列になっていますよ。

print(mfccs.shape) => (20, 64) = 20x64の二次元配列
MFCCの次元が20でフレーム数(時間)が64です。

print(mfccs)
で配列の内容が見られます。

とこういうことでいいんでしょうか?

https://qiita.com/martin-d28jp-love/items/34161f2facb80edd999f

他1件のコメントを見る
id:aidiary

その平面って20x64のmfccの値を色で表しただけだと思いますけど・・・specshowの縦の列は20個、横の列は64個の矩形にmfccの値で色を付けてるのだと思ってました。specshow()の内容を詳しく見てないから違うかもしれませんが。

このようなコードを書いてmfccの値とカラーバーの値を照らし合わせてみると同じになっているようです。平面の値ってRGBのピクセルって意味ではないですよね?

import librosa
import librosa.display
fname = 'test.wav'
y, sr = librosa.load(fname, sr=16000)
mfcc = librosa.feature.mfcc(y, sr=sr)
print(mfcc[0]) # 平面の一番下の行の値
print(mfcc[1]) # 平面の一番下から2つめの行の値
print(mfcc[2]) # 平面の一番下から3つめの行の値
librosa.display.specshow(mfcc, sr=sr, x_axis='time')
plt.colorbar()

2018/03/27 10:58:15
id:TAK_TAK

縦軸の目盛りがマイナスから始まっていたり、
mfccの配列中の値もマイナスを取っていたり
するのはどういう意味なんでしょうか

2018/03/27 11:27:54

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません