繁体   English   中英

在 MATLAB 中提取一部分 wav 文件并另存为新 wav 文件的想法

[英]Ideas for extracting a portion of a wav file and saving as new wav file in MATLAB

这可能很简单,但我不是 MatLab 方面的专家。我有一大堆 wav 文件,我需要从每个文件中提取 30 秒的样本。 例子:

1.wav - 需要1:34-2:04

2.wav - 需要5:15 - 5:45

理想情况下,我想运行一个代码,该代码将获取每个 wav 文件并根据预先生成的表格提取正确的时间段,并将每个片段保存为一个新的 wav 文件(例如,1_snip.wav 将是我需要的 30 秒分析)。 任何指向正确方向的点都会很棒。 谢谢!

首先从录音中提取原始音频: [signal,fs] = audioread('file.wav');

采样率存储在 fs 中,代表每秒的采样数。 所以,5 秒就是 5*fs。 因此可以提取具有特定时间戳的块: sig_chunk = signal(start_in_s*fs+1: end_in_s*fs);

也可以从表中获取时间戳数据并使用 for 循环来剪切音频。

最安全的选择是单独加载它们并为每个使用掩码然后保存。 例如:

[x1,fs] = audioread('fileName1.wav');
tinit = 1*60 + 34; % In seconds
tend  = 2*60 + 4;
ll = floor(tinit*fs) : floor(tend*fs);
x1 = x1(ll); % apply the mask to the segment of audio you want
audiowrite('fileName1edit.wav',x1,fs,'BitsPerSample',24)

但是,如果您有大量文件要处理,一个不太可靠但更舒适的解决方案可能是将所有 wav 文件转储到一个结构中

Files = dir('*.wav');

并让他们打电话

[x,fs] = audioread(Files(idx).name);

在一个length(Files)的for循环中,您可以在其中提示一个框对话框,询问开始的分钟和秒以及结束的分钟和秒。 例如:

for idx = 1 : length(Files)
[x,fs] = audioread(Files(idx).name);
prompt = {'Min start:','Second start:','Min end:','Second end:'};
T      = inputdlg(prompt,'Enter the times',[1,20]);
Ninit  = round(fs*(str2num(T{1})*60 + str2num(T{2})));
Nend   = round(fs*(str2num(T{3})*60 + str2num(T{4})));
ll     = Ninit:Nend;
x      = x(ll); % or x = x(Ninit:Nend);
audiowrite(Files(idx).name,...);
end

有关更多示例,请参阅inputdlg()的文档。 如果您不使用_edit.mat或类似工具在audiowrite()中编辑 output 音频文件的字符串,请在文件夹中备份您的文件,以确保安全。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM