如何从Matlab中的同一个文件夹中一个接一个地读取wav文件

时间:2012-07-20 10:08:57

标签: matlab file-io wav

我正在尝试编写一个程序,我必须读取一个wav文件,从中提取一些功能并保存它们然后再选择下一个文件重复相同的过程。要挑选的波形文件数量超过100.有人可以帮我如何一个接一个地读取wavfiles。 (比如文件名为e1.wav,e2.wav等)。有人请帮助我

1 个答案:

答案 0 :(得分:1)

dir命令在这里非常有用。它既可以显示目录的全部内容,也可以指定一个glob来返回一个文件子集,例如: dir('*.wav')。这将返回包含namedatebytesisdir等文件信息的struct-array。

要开始使用,请尝试以下操作:

filelist = dir('*.wav');
for file = filelist
    fprintf('Processing %s\n', file.name);
    fid = fopen(file.name);
    % Do something here with your file.
    fclose(fid);
end

编辑1:将双引号更改为单引号(thx更改为user1540393)。

编辑2 (由amro建议):如果每个文件必须存储处理结果, 我经常使用以下模式。我通常预先分配一个数组,一个struct数组或 与文件列表大小相同的单元格数组。然后我使用整数索引进行迭代 在文件列表中,我也可以使用它来编写输出。如果信息要 存储是同构的(例如,每个文件一个标量),使用数组或结构数组。 但是,如果信息因文件而异(例如不同大小的矢量或矩阵),请使用单元格数组。

使用普通数组的示例:

filelist = dir('*.wav');
% Pre-allocate an array to store some per-file information.
result = zeros(size(filelist));
for index = 1 : length(filelist)
    fprintf('Processing %s\n', filelist(index).name);
    % Read the sample rate Fs and store it.
    [y, Fs] = wavread(filelist(index).name);
    result(index) = Fs;
end
% result(1) .. result(N) contain the sample rates of each file.

使用单元格数组的示例:

filelist = dir('*.wav');
% Pre-allocate a cell array to store some per-file information.
result = cell(size(filelist));
for index = 1 : length(filelist)
    fprintf('Processing %s\n', filelist(index).name);
    % Read the data of the WAV file and store it.
    y = wavread(filelist(index).name);
    result{index} = y;
end
% result{1} .. result{N} contain the data of the WAV files.