【问题标题】:How to read fetch wav file one by one in matlab?如何在matlab中一一读取获取wav文件?
【发布时间】:2015-04-18 01:33:56
【问题描述】:

这是我的 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 时出错 被连接的矩阵的维度不一致。

【问题讨论】:

  • 也许写str=['1.wav';'2.wav';'3.wav';'4.wav';'5.wav'];?分号是垂直连接运算符;最后不需要使用它。
  • 另外,str(i) 会给你一个字符,而不是完整的文件名。把它放在一个单元格数组中,然后使用str{i}
  • 同样的错误没有 ;最后
  • str{i} 正在工作,谢谢,但是如果我想直接从文件夹或任何其他 .m 文件或在 for 循环中获取 .wav 文件,该怎么做??
  • 我建议在您的wavread 调用中使用dir 返回的结构中的项目的.name 字段和fullfile

标签: string matlab wav


【解决方案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 调用中使用通配符 (*) 来缩小返回的文件列表。

【讨论】:

    猜你喜欢
    • 2012-07-19
    • 2013-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-20
    • 2022-11-29
    • 2011-01-04
    • 2016-06-01
    相关资源
    最近更新 更多