簡體   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