我正在尝试读取文件夹中的所有wav文件,然后合并这些文件。我了解audioread和audiowrite。我正在努力自动执行文件夹中一系列文件的处理,因此我只需要更改dirin名称即可移至下一个文件夹。这里的代码显然不起作用,但是试图演示我想做什么。
DirIn = 'C:\Users\24hr sound analysis\17';
eval(['filelist=dir(''' DirIn '/*.wav'')']);
for i = 1:length(filelist);
[f(i),fs] = audioread(strcat(DirIn,'/',filelist(i).name)); % read in wav file
end
combined = [f1;f(i)];
audiowrite('combined.wav',combined, fs)
编辑:我在下面实现了意见,但现在有一个新问题。我合并了6个1分钟的WAV文件,我的输出是6分钟36秒。那多余的26秒从哪里来?
DirIn = 'C:\Users\24hr sound analysis\17';
eval(['filelist=dir(''' DirIn '/*.wav'')']);
cd(DirIn);
combined = [];
fs = 44800
for i = 1:length(filelist);
Filename = filelist(i).name;
aud_file = audioread(Filename);
combined = [combined;aud_file];
end
audiowrite('combined.wav', combined, fs)
最佳答案
您可以执行以下操作,然后在其中插入audioread
函数:
dir_name = 'full path to the main folder';
sub_dir_names = dir(fullfile(dir_name,'*'));
N = setdiff({sub_dir_names([sub_dir_names.isdir]).name},{'.','..'}); % list of only subfolders of D.
combined = [];
for ii = 1:numel(N)
T = dir(fullfile(dir_name,N{ii},'*')); % improve by specifying the file extension.
C = {T(~[T.isdir]).name}; % files in subfolder.
for jj = 1:numel(C)
F = fullfile(dir_name,N{ii},C{jj})
% do whatever with file F.
% simple implementation assuming all the files are .wav
aud_file = audioread(F);
combined = [combined;aud_file];
end
end
audiowrite(combined, Fs);
当您进入内部循环时,将使用
audioread
连接读取的文件。当您跳出循环时,只需使用
audiowrite
写入文件;它应该在以后执行任务。注意
这只是为了向您展示如何遍历目录内所有子目录的逻辑,当然还有更多的方法可以执行您想要的操作。
关于matlab - 如何使用audioread读取文件序列,然后将它们合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58488583/