1

我必须创建不同数量的哔哔声数组。我确定将播放多少哔声、每次哔声的持续时间以及在线哔声间的持续时间。但是,这些都必须非常快地播放,间隔和持续时间都在 0.01 秒到 0.2 秒之间。matlab的声音功能不允许您在两者之间进行非常小的休息,因为即使您一个接一个地播放两个声音功能而没有通过计时器进行小休息,它所花费的时间也比我需要的时间长。有任何想法吗?我真的很感激任何帮助...

4

1 回答 1

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)
于 2013-07-26T20:15:26.417 回答