2015-04-17 3 views
0

это мой код Matlab, я хочу прочитать WAV-файл из того же файла или другого файла.Как читать wav-файл fetch один за другим в matlab?

str=['1.wav';'2.wav';'3.wav';'4.wav';'5.wav';]; 
for i=1:5 
    [y, fs]=wavread(str(i)); 
    a = miraudio(str(i)); 
    z = mirzerocross(a) 
    close all 
end 

он дает мне ошибку, как .. Ошибки с помощью TRYFINAL (строка 1) Ошибки с помощью vertcat Размеров матриц, сцеплен не согласуется.

+1

Возможно, напишите 'str = ['1.wav'; '2.wav'; '3.wav'; '4.wav'; '5.wav'];'? Точка с запятой - оператор вертикальной конкатенации; нет необходимости использовать его в конце. –

+2

Кроме того, 'str (i)' даст вам один символ, а не полное имя файла. Поместите его в массив ячеек и используйте 'str {i}'. – nkjt

+0

такая же ошибка без; в конце –

ответ

1

Ваш 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 звонках, чтобы сузить список возвращаемых файлов.

+0

Большое вам спасибо –

Смежные вопросы