0

一対のサーボを制御するためのパルス幅変調オーディオ信号を生成するために naudio を使用しています。現在、IWaveProvider インターフェイスを実装するMark Heath が作成した WaveProvider32 クラス ( http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html ) を使用しています。サンプルレートは 44100 です

オーディオ信号は基本的にブロック N 幅で、信号の最初の部分はすべての値が高く、ブロックの残りの部分では値が低くなります。読み取り操作はブロックの幅よりも多くのサンプルを要求するため、バッファがいっぱいになるまで信号を繰り返します。私が抱えている問題は、バッファの長さが信号ブロックの幅の倍数ではないことです。そのため、最後のブロックの一部が切り取られ、サーボにねじ込まれ、それがけいれんします。私はそれを追跡し、次の読み取りの開始をオフセットするためにいくつかのコードの空想を行うことができることを認識していますが、WaveProvider が一度に提供する必要がある値の数を設定して複数にすることができれば、より簡単になります。信号ブロックサイズの(または正確な幅かもしれません)。

それは可能ですか?

4

1 に答える 1

0

読み取り関数によって要求されるデータの量は、選択したIWaveOut実装、およびそれが動作しているバッファーの待ち時間と数によって決まります。基になるプロバイダーへのReadメソッドが常に正しい番号を要求することを保証する中間IWaveProviderを作成する必要があります。同様の問題のために作成したBlockAlignReductionStreamを見てください。

于 2010-09-27T10:20:25.533 に答える