我有一堆文件,里面有音频信号,我正试图将它们复制粘贴到另一个方向(另一个文件夹(。我有大约20个文件夹,每个文件夹中包含10个音频信号。我想用相同的名称一个接一个地复制和粘贴它们,并且在将音频信号传输到新文件夹之前,还能够根据下面的代码在音频信号中应用一些过滤。但是,我不想使用dir函数。有人能告诉我还有什么其他选择吗?非常感谢。
我的过滤代码是这样的。
imp = [0.2,0.4,0.5,-3];
nImp = length(imp);
inpSignal=[zeros(nImp,1);inpSignal;zeros(nImp,1)];
nSamplesNew = length(inpSignal);
outSignal= zeros(nSamplesNew,1);
for i=1+nImp:nSamples+nImp,
outSignal(i)=imp(1)*inpSignal(i)+imp(2)*inpSignal(i-1);
end
您可以使用ls
而不是dir
。这将返回一个char
数组,而不是一个结构。总体方法保持不变。我建议使用文件扩展名作为过滤器来排除目录。如果要复制多个类型的文件,则可能需要迭代几次。
srcDirectory = 'C:Temp';
fileFilter = '*.wav';
destDirectory = 'D:Temp';
files = ls(fullfile(srcDirectory,fileFilter));
for fileIdx = 1:size(files,1)
filename = strtrim(string(files(fileIdx,:)));
srcPath = fullfile(srcDirectory,filename);
destPath = fullfile(destDirectory,filename);
copyfile(srcPath,destPath);
end
编辑
如果outSignal
是要保存到新文件的信号,则可以在处理(即过滤(后直接在行中写入save语句。
imp = [0.2,0.4,0.5,-3];
nImp = length(imp);
newDirectory = 'C:TempSome Folder';
inpSignal=[zeros(nImp,1);inpSignal;zeros(nImp,1)];
nSamplesNew = length(inpSignal);
outSignal= zeros(nSamplesNew,1);
for i=1+nImp:nSamples+nImp,
outSignal(i)=imp(1)*inpSignal(i)+imp(2)*inpSignal(i-1);
end
newFilePath = fullfile(newDirectory,filename);
audiowrite(newFilePath,outsignal,Fs)
我假设您在打开原始文件进行处理时有filename
。使用help audiowrite
获取有关此功能的其他信息。
如果您需要为来自同一filename
的多个信号文件附加一个唯一的编号,您可以使用以下内容:
[~, filename, ext] = fileparts(filename);
newFilePath = fullfile(newDirectory,[filename,'_',num2str(sigIdx,'%03.0f'),ext]);
其中sigIdx
是用于循环信号的循环控制变量。
使用MATLAB
如果您的信号在MATLAB文件中/由MATLAB文件生成,则可以执行此操作。否则,如果你的音频文件只是位于另一个目录中,那么发布的另一个答案就像一个符咒。
%Test audio signals%
[Audio_1,Fs_1] = audioread("Audio_1.m4a");
[Audio_2,Fs_2] = audioread("Audio_2.m4a");
[Audio_3,Fs_3] = audioread("Audio_3.m4a");
[Audio_4,Fs_4] = audioread("Audio_4.m4a");
[Audio_5,Fs_5] = audioread("Audio_5.m4a");
%Directory you want to save in%
Directory = "/Users/michael/Documents/MATLAB/Tutorials/Save_Signals_Folder/";
addpath(Directory);
%Writing audio to new directory%
audiowrite(Directory + 'Audio_1_New.m4a',Audio_1,Fs_1);
audiowrite(Directory + 'Audio_2_New.m4a',Audio_2,Fs_2);
audiowrite(Directory + 'Audio_3_New.m4a',Audio_3,Fs_3);
audiowrite(Directory + 'Audio_4_New.m4a',Audio_4,Fs_4);
audiowrite(Directory + 'Audio_5_New.m4a',Audio_5,Fs_5);
使用MATLAB版本:R2019b