在matlab / psychtoolbox中创建快速连续的哔哔声

时间:2013-07-26 15:48:12

标签: matlab audio

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

1 个答案:

答案 0 :(得分: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)