Как заметил Крис, у вас есть некоторые проблемы с тем, как вы структурировали цикл for.Вы пытаетесь использовать «b» и «c» еще до того, как им будут даны какие-либо данные (во второй и третий раз в цикле).Предполагая, что у вас есть причина для структурирования вашей программы так, как вы это делаете (я бы переписал цикл, чтобы вы не использовали «a», «b» или «c». И просто отправьте «myfunction» соответствующий индекс «»mat ') Должно работать следующее:
dirMask = '\myfolder\*.wav';
fileRoot = fileparts(dirMask);
Files=dir(dirMask);
N = natsortfiles({Files.name});
C = cell(size(N));
D = cell(size(N));
a = {};
b = {};
c = {};
for k = 1:numel(N)
str =fullfile(fileRoot, Files(k).name);
[C{k},D{k}] = audioread(str);
mat = [C(:)];
fs = [D(:)];
a=mat{1};
b=mat{2};
c=mat{3};
end
myfunction(a,Files(1).name);
myfunction(b,Files(2).name);
myfunction(c,Files(3).name);
РЕДАКТИРОВАТЬ
Я хотел бы немного уточнить, что я имел в виду, говоря, что я не буду использовать переменные a, b или c,Пожалуйста, обратите внимание, что я мог что-то упустить в том, что вы спрашивали, поэтому я мог бы объяснить вещи, которые вы уже знаете.
В определенных сценариях, подобных этому, можно точно определить, сколько переменных вы будете использовать.В вашем случае вы знаете, что у вас есть ровно 3 аудиофайла, которые вы собираетесь обработать.Итак, переменные a, b и c могут выйти.Отлично, но что если вам нужно добавить другой аудиофайл?Теперь вам нужно вернуться и добавить переменную 'd' и еще один вызов 'myfunction'.Существует лучший способ, который не только уменьшает сложность, но и расширяет функциональность программы.Смотрите следующий код:
%same as your code
dirMask = '\myfolder\*.wav';
fileRoot = fileparts(dirMask);
Files = dir(dirMask);
%slight variable name change, k->idx, slightly more meaningful.
%also removed N, simplifying things a little.
for idx = 1:numel(Files)
%meaningful variable name change str -> filepath.
filepath = fullfile(fileRoot, Files(idx).name);
%It was unclear if you were actually using the Fs component returned
%from the 'audioread' call. I wanted to make sure that we kept access
%to that data. Note that we have removed 'mat' and 'fs'. We can hold
%all of that data inside one variable, 'audio', which simplifies the
%program.
[audio{idx}.('data'), audio{idx}.('rate')] = audioread(filepath);
%this function call sends exactly the same data that your version did
%but note that we have to unpack it a little by adding the .('data').
myfunction(audio{idx}.('data'), Files(idx).name);
end