使用仅包含 MATLAB 函数的代码处理音频数据
此示例说明如何编写仅包含 MATLAB 函数的代码来读取音频数据。
该代码会从文件中读取音频数据、对音频数据进行滤波,并播放滤波后的音频数据。音频数据是按帧读取的。该代码与下一示例中的 System object 代码生成相同的结果,您可对方法进行比较。
找到源音频文件。
fname = 'speech_dft_8kHz.wav';
从源文件中获取样本总数和采样率。
audioInfo = audioinfo(fname);
maxSamples = audioInfo.TotalSamples;
fs = audioInfo.SampleRate;
定义要使用的滤波器。
b = fir1(160,.15);
初始化滤波器状态。
z = zeros(1,numel(b)-1);
定义要一次处理的音频数据量,然后初始化 while 循环索引。
frameSize = 1024;
nIdx = 1;
定义 while 循环以处理音频数据。
while nIdx <= maxSamples(1)-frameSize+1
audio = audioread(fname,[nIdx nIdx+frameSize-1]);
[y,z] = filter(b,1,audio,z);
sound(y,fs);
nIdx = nIdx+frameSize;
end
该循环使用显式的索引和状态管理,此方法可能很繁琐且容易出错。您必须详尽了解各种状态,例如大小和数据类型。这种仅包含 MATLAB 的代码存在的另一个问题是,声音函数未设计为实时运行。生成的音频断断续续,几乎听不见。