2

ASIO ドライバーを使用して、マイク オーディオを NAudio のスピーカーにルーティングしようとしています。私は NAudio デモ プロジェクトで成功を収めました。このコードを別のプロジェクト (関連する場合は XNA) にコピーすると、毎回 COMException が発生します。ここに私が書いた方法があります:

    [STAThread]
    void InitAsio()
    {
        if (this.asioOut != null &&
            (this.asioOut.DriverName != "ASIO4ALL v2" ||
            this.asioOut.ChannelOffset != 0))
        {
            this.asioOut.AudioAvailable -= asioOut_AudioAvailable;
            this.asioOut.Dispose();
            this.asioOut = null;
        }

        // create wave input from mic
        // create device if necessary
        if (this.asioOut == null)
        {
            this.asioOut = new AsioOut();
            BufferedWaveProvider wavprov = new BufferedWaveProvider(new WaveFormat(44100, 1));
            this.asioOut.InputChannelOffset = 0;
            this.asioOut.InitRecordAndPlayback(wavprov, 1, 44100);
            this.asioOut.AudioAvailable += asioOut_AudioAvailable;
        }

        //this.fileName = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString() + ".wav");
        //this.writer = new WaveFileWriter(fileName, new WaveFormat(44100, recordChannelCount));
        this.asioOut.Play();
    }

毎回、このメソッドは AsioDriver.cs で失敗します。

    int hresult = CoCreateInstance(ref ASIOGuid, IntPtr.Zero, CLSCTX_INPROC_SERVER, ref ASIOGuid, out pASIOComObject);
    if ( hresult != 0 )
    {
        throw new COMException("Unable to instantiate ASIO. Check if STAThread is set",hresult);
    }

何が起こっているのか、なぜなのかわかりません。NAudio デモ プロジェクトでも同じコードが機能します。何か案は?

4

1 に答える 1

2

このSTAThread属性はMain、アプリケーションのメソッドにのみ適用できます。他の方法では機能しません。

于 2015-08-06T12:27:59.830 に答える