如何在 Matlab 中将音频文件拆分为 1 秒长的音频文件块?

How to split an audio file into 1 second long chunks of audio files in Matlab?

如何在 Matlab 中将音频文件拆分为 1 秒长的音频文件块(帧)? 任何事情都有帮助,请原谅我的无知,因为我对 Matlab 不是很有经验...... 我试过了

clear all; close all;
[y, fs] = audioread('red.wav'); 
chunk_size = fs*1;

但后来卡住了。

您可以使用 for 循环来完成,例如:

[y, fs] = audioread('red.wav'); 
for t = 0:floor(size(y,2)/fs)-1
    z = y(t*fs+1:(t+1)*fs)
    filename = ['output' num2str(t)];
    wavwrite(z,fs,filename)
end

这应该在 y 中写入每一秒(最后一秒除外)并将其保存为 output1...outputt。在循环形式中,最后一秒可能不是整秒而是 0.5 或 0.7 秒可能会中断循环,因此您将不得不编写另一行以获得最后一秒。

对于长文件,这不是一种有效的方法!查看重塑以获得更有效的方法

您可以使用 audioread 分块读取文件,而不是一次读取整个文件。下面的代码可能会有所帮助。

info = audioinfo('handel.wav');

Fs = info.SampleRate;
chunkDuration = 1; % 1 sec
numSamplesPerChunk = chunkDuration*Fs;

chunkCnt = 1;
for startLoc = 1:numSamplesPerChunk:info.TotalSamples
    endLoc = min(startLoc + numSamplesPerChunk - 1, info.TotalSamples);

    y = audioread('handel.wav', [startLoc endLoc]);
    outFileName = sprintf('outfile%03d.wav', chunkCnt);
    audiowrite(outFileName, y, Fs);
    chunkCnt = chunkCnt + 1;
end

希望对您有所帮助。

迪内什