MATLAB audioread - проблема вызова одного файла .wav из структуры в ячейке - PullRequest
0 голосов
/ 14 апреля 2019

enter image description here

data_structure - это ячейка (длина (num_sounds) строки x ячейка столбца

  • каждая строка соответствует отдельному звуку
  • первый столбец = имя каталога
  • второй столбец = структура файлов для файлов .wav
  • третий столбец = формантные данные

    for i=1:num_sounds; cd(char(sound_dirs{i})); %open a directory wav_list=dir('*.wav'); %get all the .wav files in the folder data_structure{i,2}=wav_list; % fills second column with struct the length of the .wav files. data_structure{i,1}=words{i}; end

проблема лежит здесь

 for i=1:num_sounds;
        num_wavs=length(data_structure{i,2}); 
        for i=1:num_wavs;
            [y Fs]= audioread((data_structure{i,2}.name)); %%problem here

Я понимаю, что проблема в том, что я вызываю все файлы .wav в одной и той же папке одновременно, а не принимаю каждый из них одновременно

Я пытался data_structure{1,2}.name(40); % the first folder has 47 .wav files

но это не сработало.

name <- содержит все имена WAV-файлов. </p>

enter image description here

1 Ответ

2 голосов
/ 14 апреля 2019

В строке

[y Fs] = audioread((data_structure{i,2}.name)); %%problem here

выражение data_structure{i,2}.name будет одновременно подавать все имена файлов (в вашем примере 47) в качестве входных аргументов функции audioread, отсюда и сообщение об ошибке.

Если вы хотите получить доступ к каждому файлу .wav по отдельности, вам нужно проиндексировать их в структуре, возвращаемой из dir, т.е.

for i=1:num_sounds;
    these_files = data_structure{i,2};
    for i=1:length(these_files)
        [y Fs] = audioread(these_files(i).name));
        % Do whatever needs to be done with y, Fs
    end
end
...