如何让MATLAB更快地播放数组?

时间:2013-05-05 15:17:28

标签: arrays performance algorithm matlab audio-processing

我正在研究音频处理器,它应该改变音高并在播放时为歌曲添加颤音。请注意,虽然声音不是现场(例如来自麦克风)但我想要添加的效果是实时制作的。

我发现接近它的最佳方法是将声音文件分成小元素,并按顺序对每个元素应用效果。

所以我写这个来分割音频文件:

%Load Sound File
[fsample Fs] = wavread ('C:\Users\Ogulcan\Desktop\Bitirme Projesi\Codes\kravitz.wav'); 


%length of the sample
t=length(fsample);
%number of samples
ns=10;
%Defining the array:
A=[];


%Create the vectors and place them into the array 'A':

for i=1:ns-1
   v=fsample(i*t/ns:(i+1)*t/ns);
   A=[A;v];
end

此代码可以将声音分成10个样本,但是当我尝试在循环中播放它们时,会有一个很小但很明显的延迟。现在我计划为更大的样本数量做这个。

任何人都可以帮我解决这个速度问题吗?我真的不懂MATLAB以外的任何其他语言或拥有所需的软件,所以如果你能告诉我在MATLAB中做到这一点的话,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

您可以使用以下更简单的代码段替换整个循环:

A = fsample(1:end-rem(length(fsample),ns));  % ensure data has ns full samples
A = reshape(A,[],ns)';