我必须创建不同数字的蜂鸣声数组。我确定将播放多少蜂鸣音、每个单独蜂鸣音的持续时间以及在线的蜂鸣音之间的持续时间。然而,这些都必须非常快地播放,间隔和持续时间都将在0.01秒到0.2秒之间。matlab的声音功能不允许你在两个声音功能之间进行非常小的中断,因为即使你一个接一个地播放两个声音功能,而不通过计时器进行小中断,所需的时间也会比我需要的时间更长。有什么想法吗?我真的很感谢任何人的帮助。
发布于 2013-07-27 04:15:26
为了保证给定的间距,我认为你需要组装波形。我怀疑启动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)https://stackoverflow.com/questions/17885730
复制相似问题