【问题标题】:How do I Use audioread to read a sequence of files and then combine them?如何使用 audioread 读取一系列文件然后合并它们?
【发布时间】:2019-10-22 01:23:20
【问题描述】:

我正在尝试读取文件夹中的所有 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)

【问题讨论】:

    标签: matlab audio


    【解决方案1】:

    您可以执行以下操作并在其中插入 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 写入文件;它应该执行您之后的任务。

    注意

    这里只是为了给你展示如何遍历目录中所有子目录的逻辑,当然还有更多的方法可以做你想做的事情。

    【讨论】:

    • 对我来说,问题是我不知道如何使用 audioread 来做到这一点。我有其他代码(拼凑在一起),我在其中循环文件夹并在循环内执行任务(例如,根据文件名对文件进行排序)。在这种情况下,当一个目录可能有 1-6 个要组合的 wav 文件时,我只是不知道如何以可重复的方式读取和写入。
    • @brc 内部循环遍历子目录中的所有文件,因此如果其中有 k .wav 文件,您可以一个接一个地读取它们,将它们组合起来然后回写;我不明白到底是什么问题
    • @brc 您可以阅读以下内容,了解如何连接 wav 文件:mathworks.com/matlabcentral/answers/…;它支持我的上述评论
    • 我对 Matlab 和编码非常陌生。对你来说基本的东西对我来说是先进的。我只是不知道如何按照您的建议去做,阅读、组合和写作。
    • 那些答案对我没有帮助。 Walter 建议的代码要求我标识每个文件,但我在数百个文件夹中有数千个文件。理想情况下,我可以更改 DirIn 并移至下一个文件夹。
    猜你喜欢
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    • 2015-05-15
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 1970-01-01
    相关资源
    最近更新 更多