Ваш OP неисправен из-за того, как реализованы MATLAB character arrays (у @patrik есть очень хорошее объяснение в this recent question). Если вы хотите использовать массив символов, каждая строка должна иметь одинаковую длину, требуя, чтобы вы каким-то образом заполнили записи, которые, хотя и выполнимы, не очень эффективны. Альтернативой является использование cell arrays, как предлагается @nkjt, который будет работать для реализации, описанной в вашем OP.
Однако более общий подход заключается в использовании структуры данных, возвращаемой командой dir
MATLAB, чтобы идентифицировать все файлы *.wav
в каталоге и выполнить некоторую операцию над всеми из них.
pathname = 'C:\somewavfiles'; % Full path to a folder containing some wav files
wavfiles = dir(fullfile(pathname, '*.wav')); % Obtain a list of *.wav files
% Loop over all the files and perform some operations
for ii = 1:length(wavfiles)
filepath = fullfile(pathname, wavfiles(ii).name); % Generate the full path to the file using the filename and the pathname specified earlier
[y, fs] = wavread(filepath);
a = miraudio(filepath);
z = mirzerocross(a);
end
я использовал в нескольких местах fullfile
вместо конкатенации строк с косыми чертами, чтобы избежать проблем совместимости между операционными системами. Некоторые используют \
и другие используют /
.
Также обратите внимание, что в соответствии с документацией вы можете использовать подстановочные знаки (*
) в dir
звонках, чтобы сузить список возвращаемых файлов.
Возможно, напишите 'str = ['1.wav'; '2.wav'; '3.wav'; '4.wav'; '5.wav'];'? Точка с запятой - оператор вертикальной конкатенации; нет необходимости использовать его в конце. –
Кроме того, 'str (i)' даст вам один символ, а не полное имя файла. Поместите его в массив ячеек и используйте 'str {i}'. – nkjt
такая же ошибка без; в конце –