【问题标题】:Saving spectrogram figures in a loop for wav files将频谱图数字保存在 wav 文件的循环中
【发布时间】:2013-11-26 13:18:38
【问题描述】:

我正在尝试生成频谱图,以便稍后将它们与单词样本进行比较,以进行非常基本的语音识别项目。这是在一个循环中完成的。代码如下:

folder = '<<my directory path>>';
files = dir(fullfile(folder,'*.wav'));
for k = 1:length(files)
    baseFileName = files(k).name;
    fullFileName = fullfile(folder, baseFileName);
    fprintf(1, 'Now reading %s\n', fullFileName);
    [word, fs] = wavread(fullFileName);
    sound(word, fs);
    figure('visible','off');
    %%fig = figure, specgram(fullFileName, 512, fs);
    %%saveas(fig, baseFileName.fig);
end

我的问题在最后两行。我想将频谱图保存为 .fig 文件(除非你们以后有更好的比较建议)并将其命名为与 baseFileName 相同。我已经在谷歌上搜索了一段时间,但格式令人困惑,并且没有太多关于将频谱图保存为数字的内容。

如果所有数字都没有在循环中弹出但我可以处理,我会更喜欢它。

编辑:也许将其存储为 matfile 会更好?

【问题讨论】:

    标签: matlab matlab-figure spectrogram


    【解决方案1】:

    这对你有用吗?

    for k=1:length(files)
       h=figure
       spectrogram();
       Figname = strcat(baseFileName,'.fig');
       saveas(h,Figname); 
    end
    

    对于非.fig格式的图形,另一种方法:

    fh=figure
    for k=1:length(files)
       figure(fh); 
       spectrogram();
       frm = getframe(fh);
       Figname = strcat(baseFileName,'.jpg');
       imwrite(frm.cdata, Figname);
    end
    

    不幸的是,当尝试使用此方法保存 .fig 文件时,会导致错误“无法从文件名确定文件格式”。

    【讨论】:

    • 我需要将它保存为baseFileName.fig。它遍历具有不同名称(例如狗、猫等)的 wav 文件列表,这些文件被临时存储在 baseFileName 中以用于循环目的。此外,我仍然需要以与执行 specgream(fullFileName, 512, fs) 时相同的方式输出 specgram,否则它看起来不正确。编辑:对不起,如果我没有多大意义,我对 MATLAB 及其语法不太熟悉。
    • 我收到以下错误:使用 imwrite 时出错(第 431 行)无法从文件名中确定文件格式。 specAllTheFiles 中的错误(第 18 行) imwrite(frm.cdata, Figname);
    • 确实如此。不幸的是,它把所有东西都命名为 fileName.wav.fig... 但我可以修复那部分。谢谢!
    猜你喜欢
    • 2013-06-17
    • 1970-01-01
    • 2022-01-10
    • 2020-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 2022-08-16
    相关资源
    最近更新 更多