You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用sprintf命令逐个读取特定命名规则的WAV文件?

解决Matlab读取两位数字命名WAV文件的报错问题

咱们先拆解下你遇到的两个问题,然后一步步修正:

第一个代码的问题

你最初的嵌套循环里,sprintf生成的文件名缺少.wav后缀,而且用了已经被Matlab弃用的wavread函数。比如当m=0、y=0时,生成的路径是E:\0 (1)\0\00,但实际你的文件应该是00.wav,系统自然找不到对应的文件。

第二个代码的问题

你调整后的代码里,sprintf的格式字符串写错了——%s%d.wav里的%s是用来格式化字符串的,但你传入的是数字m和y,这会导致格式不匹配,生成的文件名完全不对。另外那个“Function is not defined for sparse inputs”的报错,大概率是因为格式错误导致文件名无效,或者你之前的代码不小心把m/y定义成了稀疏矩阵类型。

修正后的代码方案

这里给你两种靠谱的写法,选哪种都可以:

方案一:单循环直接遍历0-59

这种写法更简洁,直接用%02d生成两位数字的文件名(自动补前导零):

mypath = 'E:\0 (1)\0\';
for idx = 0:59
    % 用fullfile拼接路径和文件名,避免手动处理分隔符的坑
    filename = fullfile(mypath, sprintf('%02d.wav', idx));
    [s, fs] = audioread(filename);
    % 这里可以添加你对音频数据s和采样率fs的处理代码
end

方案二:保留嵌套循环

如果你想保持原来的说话人ID+发音ID的逻辑,这样写:

mypath = 'E:\0 (1)\0\';
for m = 0:5
    for y = 0:9
        filename = fullfile(mypath, sprintf('%d%d.wav', m, y));
        [s, fs] = audioread(filename);
        % 处理音频数据的代码
    end
end

额外注意事项

  • 建议先加一行disp(filename)打印生成的文件名,确认和你实际的WAV文件名完全一致,比如是不是漏了后缀、路径有没有写错。
  • 尽量用fullfile拼接路径,它会自动适配Windows/macOS的路径分隔符,比手动写反斜杠更稳妥。

内容的提问来源于stack exchange,提问作者Sangeet Sagar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:44:54