1

私はサウンド処理が初めてで、0.2ms、0.3ms、および 0.4ms のトーンをユーザーに提示しようとしています。

私が行ったコードは次のとおりです:(MATLAB)

Fs = 16000;
duration = 0.2;
level = 0;
freq1 = 500;
t = 0: 1/Fs : duration*(Fs-1)/Fs;
fa1 = 10^(level/20);
y1 = fa1*sin(2*pi*freq1*t)';
ap = audioplayer(y1,Fs);
tic
playblocking(ap)
toc

tic、toc 関数から取得した時間は、指定した 0.2 秒間で 0.56 です。

正確に0.2秒間存在させる方法はありますか?

4

3 に答える 3

3

私の推測では、サウンドは指定された時間だけ持続します。tic と toc から得られる不一致は、関数の呼び出しなどに必要なオーバーヘッドです。

さまざまな長さの音を試すことで、この仮説を検証できます。オーバーヘッド時間は、サウンドを再生する時間に対してほぼ一定のままである必要があると思います。サウンドが再生されると予想される時間よりも常に 0.3 秒長いチックタック タイムが得られる場合は、おそらくその不一致をオーバーヘッドのせいにすることができます。

于 2013-08-22T18:37:27.353 に答える
2

および変数を入力として受け取る wavwrite 関数を使用してサウンド ファイルを作成できます。次に、サウンド エディタ ( audacityなど) で を開き、正確なタイミングを確認します。y1Fs.wav

于 2013-08-22T18:55:43.940 に答える
1

ここでゴードンの仮定は正しい。音声ストリームの開始と停止には時間がかかります。これは、個別の tic/toc 呼び出しを audioplayer/playblocking、resume、および stop メソッド内に配置することで確認できます。

その後、プレイブロッキング呼び出しからティック/トックの一時停止と再開の時間を差し引くことができます。

オーディオ プレーヤーは、サウンドカードに与えるサンプルのみを指定する必要があります。

または、オーディオ出力をサウンドカードのオーディオ入力に接続し、オーディオ レコーダーを使用してオーディオを MATLAB に録音してから、信号のサンプル数を測定することもできます。

于 2013-08-22T22:34:26.830 に答える