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

标签 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 中执行此操作的方法,我将不胜感激。

最佳答案

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

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

关于arrays - 如何让 MATLAB 更快地播放数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16385965/

相关文章:

performance - Gtk/GtkD 在调整窗口大小时检测鼠标按钮的释放?

python - 修改 Damerau-Levenshtein 算法以跟踪转换(插入、删除等)

javascript - 使用返回 promise 的函数过滤数组

python 3 : values of a list change when it enters a for loop

string - 字符串插值与串联

c++ - 为什么我的 BSTR 到 std::wstring 的转换这么慢?我的测试仪坏了吗?

Ruby 的变量交换 : x, y = y,x -- 数组引用似乎更慢?

algorithm - 这个实现是尾递归的吗

c - 堆栈实现中的引用调用错误(C程序)

c - 如何打印带有字母的板