【发布时间】:2013-04-29 10:53:49
【问题描述】:
我正在开发一个音频处理器,它应该在歌曲播放时改变音高并为歌曲添加颤音。请注意,虽然声音不是实时的(例如来自麦克风),但我想要添加的效果是实时的。
我发现处理它的最佳方法是将声音文件分成小元素并按顺序对每个元素应用效果。
所以我写了这个来分割音频文件:
%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 中执行此操作的方法,我将不胜感激。
【问题讨论】:
-
Matlab 是解释型语言,所以循环很慢。这可能是原因。但是,您可以发布用于播放示例的代码吗?
-
我不认为这与循环的速度有关。我认为这是
wavplay/audioplayer在尝试背靠背播放两个样本时的问题。 -
@EitanT 是对的:仅使用循环和 MATLAB 的基本声音功能无法正确执行此操作。我相信Psychtoolbox 有声音功能,可以让你更直接地写入音频流,这应该可以让你做你想做的事。
标签: arrays performance algorithm matlab audio-processing