Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MatlabAudioRead-从单元格中的struct调用一个.wav文件时出现问题_Matlab_Struct_Syntax_Wav - Fatal编程技术网

MatlabAudioRead-从单元格中的struct调用一个.wav文件时出现问题

MatlabAudioRead-从单元格中的struct调用一个.wav文件时出现问题,matlab,struct,syntax,wav,Matlab,Struct,Syntax,Wav,数据结构是一个(长度(数字)行x 3列单元格的单元格 每行对应不同的声音 第一列=目录名 第二列=文件.wav文件的结构 第三列=共振峰数据 对于i=1:num\u声音; cd(char(sound_dirs{i}));%打开一个目录 wav_list=dir('*.wav');%获取文件夹中的所有.wav文件 data_structure{i,2}=wav_list;%用struct填充第二列.wav文件的长度。 数据结构{i,1}=字{i}; 结束 问题就在这里 for i=1:num

数据结构
是一个(长度(数字)行x 3列单元格的单元格

  • 每行对应不同的声音
  • 第一列=目录名
  • 第二列=文件.wav文件的结构
  • 第三列=共振峰数据

    对于i=1:num\u声音;
    cd(char(sound_dirs{i}));%打开一个目录
    wav_list=dir('*.wav');%获取文件夹中的所有.wav文件
    data_structure{i,2}=wav_list;%用struct填充第二列.wav文件的长度。
    数据结构{i,1}=字{i};
    结束

问题就在这里

 for i=1:num_sounds;
        num_wavs=length(data_structure{i,2}); 
        for i=1:num_wavs;
            [y Fs]= audioread((data_structure{i,2}.name)); %%problem here
我意识到问题在于我在同一时间调用同一文件夹中的所有“.wav”文件,而不是一次调用每个文件

 for i=1:num_sounds;
        num_wavs=length(data_structure{i,2}); 
        for i=1:num_wavs;
            [y Fs]= audioread((data_structure{i,2}.name)); %%problem here
我尝试了
数据结构{1,2}.name(40);%第一个文件夹有47个.wav文件

但那没用

name
在行中

[y Fs] = audioread((data_structure{i,2}.name)); %%problem here
表达式
data\u structure{i,2}.name
将同时向函数
audioread
提供所有文件名(在您的示例中为47个)作为输入参数,从而产生错误消息

如果要单独访问每个
.wav
文件,需要在从
dir
返回的结构中对其进行索引,即

for i=1:num_sounds;
    these_files = data_structure{i,2};
    for i=1:length(these_files)
        [y Fs] = audioread(these_files(i).name));
        % Do whatever needs to be done with y, Fs
    end
end
排队

[y Fs] = audioread((data_structure{i,2}.name)); %%problem here
表达式
data\u structure{i,2}.name
将同时向函数
audioread
提供所有文件名(在您的示例中为47个)作为输入参数,从而产生错误消息

如果要单独访问每个
.wav
文件,需要在从
dir
返回的结构中对其进行索引,即

for i=1:num_sounds;
    these_files = data_structure{i,2};
    for i=1:length(these_files)
        [y Fs] = audioread(these_files(i).name));
        % Do whatever needs to be done with y, Fs
    end
end

data_structure{1,2}(40).name
I=1:num_声音;I_num_wavs=length(data_structure{I,2});j=1:I_num_wavs;[y Fs]=audioread(data_structure{I,2}(j.name);end end我使用了@CrisLuengo的建议,它在命令窗口中工作,但在脚本中仍然无法运行。错误使用audioread时出错(第90行)在MATLAB路径中找不到指定的文件名。
celldir中出错(第37行)[y Fs]=audioread(数据结构{i,2}(j).name)
不要使用
cd
。你最终会进入最后一个目录,因此你读取的所有文件都是从那里来的。在列出目录内容时,请同时使用
fullfile(目录名,文件名)
(其中
文件名
*.wav
)在阅读文件时,我开始为你的新问题写答案,但已经被删除了。现在清楚了吗?我建议
wav_list=dir(fullfile(char(sound_dirs{I}),'*.wav');
audioread(fullfile(char(sound_dirs{I})、data_structure{I,2}.name))
数据结构{1,2}(40).name
I=1:num_sounds;I_num_wavs=length(数据结构{I,2});j=1:I_num_wavs;[y Fs]=audioread(数据结构{I,2}(j).name);end end我使用了@CrisLuengo的建议,它在命令窗口中工作,但在脚本中仍然无法运行。错误使用audioread时出错(第90行)在MATLAB路径中找不到指定的文件名。
celldir中出错(第37行)[y Fs]=audioread(数据结构{i,2}(j).name)
不要使用
cd
。你最终会进入最后一个目录,因此你读取的所有文件都是从那里来的。在列出目录内容时,请同时使用
fullfile(目录名,文件名)
(其中
文件名
*.wav
)在阅读文件时,我开始为你的新问题写答案,但已经被删除了。现在清楚了吗?我建议
wav_list=dir(fullfile(char(sound_dirs{I}),'*.wav');
audioread(fullfile(char(sound_dirs{I}),data_structure{I,2}.name))