数の異なるビープ配列を作成する必要があります。ビープ音の回数、個々のビープ音の長さ、およびビープ音の間隔をオンラインで決定します。ただし、これらはすべて非常に速く再生する必要があり、間隔と持続時間の両方が 0.01 秒から 0.2 秒の間になります。タイマーで小さな休憩を入れずに2つのサウンド関数を次々に再生しても、必要なタイミングよりも時間がかかるため、matlabのサウンド機能では、その間に非常に小さな休憩を取ることはできません。何か案は?何か助けていただければ幸いです...
2446 次
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 に答える