2012-03-05 22 views
2

私はNAudioを使用して実行時に音波を生成して再生しています。NAudioを使用してWaveProvidersを合成する

私はこのチュートリアルを使用して生成された正弦波を得ることができました: http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html

しかし - 私は本当に必要なものは、実行時に、WaveMixerStreamに多くの個々の波を追加することができることです。

私はこれを行うには個々のWaveStreamが必要であることを理解していますが、WaveProviderの出力をWaveStreamに追加してWaveMixerStreamに追加する方法はわかりません。

これは可能ではないと仮定して、派生WaveStreamクラスを与えるコードを変更しました。

私が追加しました:

public override long Length 
    { 
     get { return long.MaxValue; } 
    } 

をしかし、私は位置を取得するかどうかはわかりません。

public override long Position 
{ 
    get 
    { 
     return //What here? 
    } 
    set 
    { 
     // What here? = value; 
    } 

} 

そこで質問です:1.この動作しますか? 2.私はどのようにポジションを取得/設定しますか?

ありがとうございます。

答えて

2

IWaveProviderWaveStreamの違いは、WaveStreamがレポートの長さと位置と設定位置をサポートしていることです。ただし、IWaveProviderを渡しているため、長さが分からず、位置を設定できません。 Positionセッターでは何も行わず、Positionゲッターの場合は、これまでにReadメソッドから返された合計バイト数を返します(これを格納するには、long型のprivate変数を使用します)。

もう1つの方法は、コードをWaveMixerStreamからコピーしてWaveStreamの代わりにIWaveProviderにすることです。これは実際にはかなり簡単になります。WaveMixerStreamの複雑さの多くは、再配置するとすべてのミキサー入力を正確に再配置しています。

(ちなみに、私は人々にISampleProviderインターフェイスを使用することを奨励しています。すでにMixingSampleProviderがあります。これについてはまだチュートリアルを書いていませんが、すべてがそこにあります)

+0

すばやく便利なヘルプありがとうございます。私はそれを持っていると思うが、それが醜い場合は、この質問に戻ってきている可能性があります!再度、感謝します。 – jwddixon

+1

昨晩、(完全にテストされていない)MixingWaveProvider32を実際にチェックしたので、IWaveProviderルートに行きたい場合はそれを見ることができます。 –

+0

@MarkHeath:ISampleProviderとMixingSampleProviderの使用に関するチュートリアルはありますか? – user523234

関連する問題