1

数の異なるビープ配列を作成する必要があります。ビープ音の回数、個々のビープ音の長さ、およびビープ音の間隔をオンラインで決定します。ただし、これらはすべて非常に速く再生する必要があり、間隔と持続時間の両方が 0.01 秒から 0.2 秒の間になります。タイマーで小さな休憩を入れずに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 に答える