2013-07-26 33 views
1

我必须创建不同数量的蜂鸣声阵列。我确定会播放多少个哔哔声,每个嘟嘟声的持续时间和在线哔哔声持续时间。然而,这些都必须非常快地播放,间隔和持续时间都在0.01秒-2秒之间。 matlab的声音功能不允许你在两者之间进行非常小的中断,即使你连续播放两个声音函数而没有通过定时器进行小的中断,它也会比我需要的时间更长。有任何想法吗?我真的很感激任何帮助......在matlab/psychtoolbox中创建快速连续的蜂鸣声

+2

我以前做过,是而不是试图产生不同频率,不同持续时间的声音,并分别等待时间,将它们组合成一个阵列(这对制作随机游戏音乐来说很好)。这是一个选项吗? – voxeloctree

回答

2

为了保证给定的间距,我认为你需要组装波形。我怀疑启动sound函数需要很多时间。

作为一个例子,下面的功能应该给你一个良好的开端:

function beep_series(specs) 
%BEEP_SERIES Create a series of beeps 
% BEEP_SERIES([FREQ_HZ, VOL, DUR_SEC, PAUSE_SEC]) creates a series of 
% beeps from an N-by-4 spec matrix, where the colums represent: 
%  frequency 
%  volumne (0-1) 
%  beep duration 
%  pause duration, 

freq = specs(:,1); 
volume = specs(:,2); 
duration = specs(:,3); 
trailingGap = specs(:,4); 

SAMPLE_FREQ = 8192; 
totalTime = sum(duration) + sum(trailingGap); 
x = zeros(ceil(totalTime*SAMPLE_FREQ),1); 

curBeepStartTime = 0; 
for ix = 1:length(freq) 
    numSamples = round(duration(ix)*SAMPLE_FREQ); 
    x(round(curBeepStartTime*SAMPLE_FREQ + (1:numSamples)) ) = ... 
     volume(ix) * sin( (1:numSamples) * (2*pi*freq(ix)/SAMPLE_FREQ) ); 
    curBeepStartTime = curBeepStartTime + duration(ix) + trailingGap(ix); 
end 

sound(x, SAMPLE_FREQ) 
+0

非常感谢!这解决了我的问题,现在我正在为每个嘟嘟声系列创建一个大的声音阵列。 – user2623446