スペクトログラム画像を逐次保存したい。
5 ビュー (過去 30 日間)
古いコメントを表示
こんにちは。
音声データをスペクトログラムに変換、そのスペクトログラム画像をプログラム内で逐次保存したいと考えております。
1~3までの.wavデータを用意して行っています。
スペクトログラムを表示するところまではできているのですが、エラーが出て保存することができない状況です。
スペクトログラムを1.png,2.png...のような名前で逐次保存できるようにするにはどのようにしたら良いでしょうか。
また、この状態でスペクトログラム画像を表示すると画像が正方形で表示されてしまうため、特徴量が見やすいよう横長方形での保存ができるとありがたいです。
ご教授願います。
for b=1:3
%ファイルの名前は数字 1.wav,2.wav,...
filename =char(b+".wav");
%data=音声データ:Fsサンプリング周波数
[data,Fs] = audioread(filename);
%周波数を指定
f=0:31.25:8000;
%データ長を指定
data(160040:length(data))=[];
%音声データをスペクトログラムデータに変換(spdata)
[spdata,f,t]=spectrogram(data, hann(64), 32, f, Fs, 'yaxis');
%スペクトログラムを表示(圧縮)
figure(b)
spectrogram(data, hamming(64), 32, f, Fs, 'yaxis');
%スペクトログラム画像の保存
imwrite(figure(b),'.png');
end
0 件のコメント
採用された回答
Atsushi Ueno
2021 年 5 月 14 日
saveas関数を使わない理由はありますか?なければ最後に開いたfigureをsaveas関数でファイルに保存できます。
filename =char(b+".png");
saveas(gcf, filename)
3 件のコメント
Atsushi Ueno
2021 年 5 月 14 日
>出力引数なしで spectrogram(___) を使用すると、現在の Figure ウィンドウにスペクトルグラムがプロットされます。
なので、Figure ウィンドウサイズを変えればスペクトログラムのサイズも変わる事を期待して:
fg1 = figure('Name', ['figure' num2str(b)], 'position', [400 250 1120 420]); %位置は適当、幅:高さ=8:3
spectrogram(data, hamming(64), 32, f, Fs, 'yaxis');
saveas(fg1, char(b+".png")); %スペクトログラム画像の保存
close(fg1); % 閉じなくても良いが、開いたままfigureハンドルが破棄される
上記の「'position',[400 250 1120 420]」の設定により横長の画像が保存されると思います。
※Signal Processing Toolboxが無いのでspectrogramをplotに置き換えて動作確認しました。
※都合によりfigureハンドルを追加したり、figureのNumberの代わりにNameを設定したりしています。
※新しいリリースではより高度な関数が使えますが、動作確認出来ないので他者の回答に期待します。
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で 時間-周波数解析 についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!