1

DirectSoundを使用してマイクからサウンドをキャプチャしようとしています。これが私のコードです:

    using Microsoft.DirectX.DirectSound;
    public MicrophoneSensor()
    {
            CaptureBufferDescription micBufferDesc = new CaptureBufferDescription();
            WaveFormat format = new WaveFormat();
            format.SamplesPerSecond = 22000;
            format.Channels = 1;
            format.BitsPerSample = 8;
            format.AverageBytesPerSecond = 22000;
            format.BlockAlign = 1;

            micBufferDesc.Format = format;
            micBufferDesc.BufferBytes = 100000;
            micBufferDesc.ControlEffects = false;
            micBufferDesc.WaveMapped = true;

            micBuffer = new CaptureBuffer(micBufferDesc, microphone);
     }

micBufferDescおよびformat変数のインスタンス化により、VisualStudio2008は次のエラーをスローします。

次のメソッドまたはプロパティ間で呼び出しがあいまいです:'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()'と'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()'

次のメソッドまたはプロパティ間で呼び出しがあいまいです:'Microsoft.DirectX.DirectSound.WaveFormat.WaveFormat()'と'Microsoft.DirectX.DirectSound.WaveFormet.WaveFormat()'

名前空間の記述とステートメントの使用のかなりの数の異なる組み合わせを試しましたが、うまくいきませんでした。

また、ソリューションエクスプローラーで参照を確認しましたが、重複がないことがわかります。

Microsoft.DirectX.DirectSound参照のみを使用し、他に何も含まないまったく新しいテストプロジェクトでも、同じエラーがスローされます。

また、DirectX SDK(2009年3月)とDirectX SDK(2008年11月)をアンインストールして再インストールしました。まだ運がない。

最後に、ラボ内の別のコンピューターで新しいプロジェクトを試しましたが、それでも機能しません。

これが私が持っている参考文献です:

  • グラフ
  • Microsoft.DirectX.DirectSound
  • Microsoft.DirectX.DirectInput
  • PresentationCore
  • PresentationFramework
  • サービス
  • システム
  • System.Core
  • System.Data
  • System.Data.DataSetExtensions
  • System.Deployment
  • System.Drawing
  • System.Runtime.Serialization
  • System.ServiceModel
  • System.Windows.Forms
  • System.Xml
  • System.Xml.Linq
  • UIAutomationProvider
  • WindowsBase
  • WindowsFormsIntegration
4

6 に答える 6

2

同じエラーが発生しました。二重参照ではありません。[実行]をクリックすると、コンパイラは魔法のようにそれを忘れます。または、次の方法で煩わしさを完全に止めることができます。

using System.Reflection;

// then instead of WaveFormat fmt = new WaveFormat()

ConstructorInfo constructor = typeof(WaveFormat).GetConstructor(Type.EmptyTypes);
WaveFormat fmt = (WaveFormat)constructor.Invoke(null);

// do the same for CaptureBufferDescription
于 2009-09-02T13:55:47.590 に答える
1

DirectXアセンブリの複数のバージョンを参照しているようです。おそらく、参照を再確認してください。複数のバージョンが必要な場合は、extern alias役立つかもしれませんが、きれいではありません。


Visual Studioで、「ソリューションエクスプローラー」(通常は右側)を探します。これは、プロジェクト内のすべてのツリーです。このツリーの項目の1つは、「参照」です。これは、コードが使用するように構成されている外部dllを視覚的に表したものです。

(多くの.NET dllがあります-各プロジェクトにどのdllが必要かを伝える必要があります)

このノードを展開し、directxのように見える2つのエントリを探します。2つある場合、そのうちの1つ(理想的には下位バージョンのもの)を削除します。次に、再構築してみてください。

于 2009-06-23T19:19:32.360 に答える
0

これはDirectSoundの一般的な問題です。他にも多くの問題があります;)DSでは見た目は何もないことを忘れないでください。バッファがnullを返す場合、「読み取り位置」が単なる内部バッファ書き込みポインタであるためにのみ発生する可能性があります。したがって、読み取りまたは書き込みポインタに常に少なくとも1つのブロックセーフゾーンを計算するように依頼する場合;)dsメソッドからバッファ位置を取得する場合は、ランダムエラーをスローする可能性があるため、キャストを試してください。

于 2010-02-17T17:45:26.907 に答える
0

その関数を含むアセンブリの異なるバージョンへの2つの参照を含めました。参照の1つを削除します。

于 2009-06-23T19:20:32.497 に答える
0

DirectXアセンブリへの複数の参照がある場合があります。Referencesフォルダーでプロジェクトを確認します。重複するエントリ、特にmicrosoft.directx.directsound.dllの複数のバージョンへの参照を探します。重複している場合は、1つ削除して、再試行してください。

于 2009-06-23T19:25:33.877 に答える
0

ソフトを「任意のCPU」ではなくx86またはx64でコンパイルするように強制すると、問題が修正されます。

于 2013-03-17T01:11:18.640 に答える