如何在matlab中逐个读取获取wav文件?

时间:2015-04-17 16:44:17

标签: string matlab wav

这是我的Matlab代码,我想从同一个文件或其他文件中读取.wav文件。

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 个答案:

答案 0 :(得分:1)

由于MATLAB character arrays的实现方式,你的OP失败了(@patrik在this recent question中有一个非常好的解释)。如果你想使用一个字符数组,每一行必须是相同的长度,要求你以某种方式填充条目,虽然可行,但效率并不高。另一种方法是使用cell arrays,如@nkjt建议的那样,这将适用于OP中概述的实现。

然而,更通用的方法是使用MATLAB的dir命令返回的数据结构来识别目录中的所有*.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)来缩小返回的文件列表。