Сохранение фигур спектрограммы в цикле для файлов wav

Я пытаюсь создать спектрограммы, чтобы позже сравнить их с образцами слов для очень простого проекта распознавания речи. Это делается в цикле. Код выглядит следующим образом:

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. Я уже некоторое время гуглю, но форматирование сбивает с толку, и в спектрограмме не так много информации о сохранении в виде цифр.

Я бы предпочел, чтобы в петле не всплывали все фигуры, но я могу разобраться.

РЕДАКТИРОВАТЬ: возможно, будет лучше сохранить это как матфайл?


person Michi    schedule 26.11.2013    source источник


Ответы (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 с помощью этого метода.

person lennon310    schedule 26.11.2013
comment
Мне нужно сохранить его как baseFileName.fig. Он перебирает список wav-файлов с разными именами (например, собака, кошка и т. д.), которые временно сохраняются в baseFileName для целей цикла. Кроме того, мне по-прежнему нужно, чтобы спектрограмма выходила так же, как и при выполнении specgream(fullFileName, 512, fs), иначе она выглядит неправильно. edit: извините, если я не понимаю смысла, я не слишком хорошо знаком с MATLAB и его синтаксисом. - person Michi; 26.11.2013
comment
Я получаю следующие ошибки: Ошибка при использовании imwrite (строка 431) Невозможно определить формат файла по имени файла. Ошибка в specAllTheFiles (строка 18) imwrite(frm.cdata, Figname); - person Michi; 26.11.2013
comment
Действительно так. К сожалению, он назвал все имя_файла.wav.fig... Но я могу исправить эту часть. Спасибо! - person Michi; 26.11.2013