我如何音频读取文件夹中的所有文件

时间:2019-01-30 19:10:39

标签: matlab

我有一个文件夹,其文件名为:“ speaker1_001.wav”。它从001变为Speaker1_020。如何做一个for循环来“音频读取”所有文件并将值存储在具有不同名称的变量中?

这就是我得到的,但是我只获得一个变量而不是20。

mypath = fullfile('TrainVoices', 'speaker1');
for idx = 1:20
  filename = fullfile(mypath, sprintf('speaker1_%d.wav', idx));
  nameSpeaker = sprintf('speaker1_%d', idx);
  [nameSpeaker, fs] = audioread(filename);
end

1 个答案:

答案 0 :(得分:1)

在您的代码中,您尝试使用指令nameSpeaker来动态创建输出变量nameSpeaker = sprintf('speaker1_%d', idx);的名称,以便在调用audioread时将其用作输出变量。 / p>

这是不正确的,因为您实际上是将用sprintf创建的字符串分配给变量nameSpeaker,而不是“更改”了它的名称。

此外,您还必须管理文件名中包含的“零”。

此错误的一部分(可以修复),通常,最好使用动态创建的变量。

一种可能的解决方案是将wav data存储在允许动态创建字段名称的结构中。

此外,由于根据您发布的代码,您事先知道path和inout文件的根名称,因此您可以通过简单地附加不同的字符串而不是使用{{ 1}}

在下面,您可以找到建议的解决方案的可能实现。

输出将是名为fullfile的结构,带有一组名为nameSpeakerspeaker1_1speaker1_2 ...等的字段,位于为了简单起见,“零”已被删除。

每个字段都是一个结构,其字段为speaker1_3data,其中包含wav文件的数据。

例如:

存储在结构中的fs arfe的数据

speaker1_001.wav

存储在结构中的nameSpeaker.speaker1_1.data nameSpeaker.speaker1_1.fa arfe的数据

speaker1_002.wav

以此类推。

nameSpeaker.speaker1_2.data
nameSpeaker.speaker1_2.fs

您只需指定文件的“ idx”即可访问数据。

例如,要访问% Defina the path mypath='TrainVoices\speaker1' % Define the file root name f_root_name='speaker1_' % Define the extension of the input file\ ext='.wav' % Loop over the input filess for idx = 1:20 %& add the proper number of "0" to tjhe filename if(idx <= 9) f_name=[f_root_name '00' num2str(idx)] else f_name=[f_root_name '0' num2str(idx)] end % Build the filename filename=fullfile(mypath,[f_name ext]) % Read the wav file [data,fs] = audioread(filename); % Store the wav file data in a struct nameSpeaker.([f_root_name num2str(idx)]).data=data; nameSpeaker.([f_root_name num2str(idx)]).fs=fs; end 的数据,只需定义文件“ idx”,然后相应地构建字段名称:

speaker1_001.wav