[英]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.