先日、NAudio を見つけたばかりで、それで遊んでいます。ロード ボタン (特定の .wav ソングをロードする) と、サウンドを再生、一時停止、停止、フェードインするためのボタン (タイマーと徐々に増加するボリュームを使用する独自の追加機能) を備えた単純な Windows フォーム プログラムを作成しました。音をフェードアウトします。ボリュームを処理するためのトラックバー コントロールもあります。すべての NAudio のものを入れるためのラッパー クラスを作成し、フェードイン/アウトやサウンドの開始時または一時停止時のイベント通知などの追加機能を追加しました。
さて、すべてが言った、それはうまくいきます。プログラムは、正しくロード、再生、一時停止、停止、およびフェードインとフェードアウトします。ボリューム トラックバーは、再生中の曲のボリューム レベルを正しく反映します。これだけでうまくいきますが、2 つの問題があります。
まず、[ロード] ボタンをクリックしてサウンドをロードし、必要な (またはしない) すべての再生を行った後、プログラムを終了すると、次のポップアップ エラー メッセージ (「アサーションに失敗しました」) が表示されます。 Dispose は AcmStreamHeader.Finalize() で呼び出されませんでした」。これは「中止、再試行、無視」ポップアップの 1 つですが、数秒後に消えてプロジェクトが終了します。(注: ロード機能は、DirectSoundOut を作成し、サイトの NAudio サンプルから直接取得した CreateInputStream を呼び出します。また、定義されたイベントのイベント ハンドラーを設定しますが、それはおそらく問題ではありません。)
クラス デストラクタで、次の呼び出しを行います。
mainOutputStream.Close();
mainOutputStream.Dispose();
waveOutDevice.Dispose();
しかし、私はまだエラーが発生します。これは大きな問題であり、別のスレッドで別の質問をします。なぜこれが起こっているのか、どうすればそれを止めることができるのでしょうか?
Windows 7 32 ビットで VS 10 を実行しています。