Frage

Ich versuche, DirectSound, um Tonaufnahmen von einem Mikrofon.Hier ist mein code:

    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);
     }

Die Instanziierungen der micBufferDesc und formatieren von Variablen verursachen Visual Studio 2008 wirft den folgenden Fehler:

Der Aufruf ist mehrdeutig, zwischen den folgenden Methoden oder Eigenschaften:'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()' und 'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()'

und

Der Aufruf ist mehrdeutig, zwischen den folgende Methoden oder Eigenschaften:'Microsoft.DirectX.DirectSound.Wave-Format -.Wave-Format()' und 'Microsoft.DirectX.DirectSound.WaveFormet.Wave-Format()'

Ich habe versucht, durchaus ein paar verschiedene Kombinationen der Angabe des namespace und using-Anweisungen, aber kein Glück.

Ich habe auch überprüft, dass die Verweise im Projektmappen-explorer, und soweit ich sagen kann, es sind keine Duplikate.

Eine Marke neue test-Projekt nur mit dem Microsoft.DirectX.DirectSound -, Referenz-und nichts anderes immer noch wirft den gleichen Fehler.

Ich habe auch deinstalliert und neu installiert, DirectX SDK (March 2009) sowie der DirectX SDK (November 2008).Immer noch kein Glück.

Schließlich habe ich versucht, ein neues Projekt auf einem anderen computer hier im Labor und es funktioniert immer noch nicht.

Hier sind die Referenzen, die ich habe:

  • Diagramm
  • Microsoft.DirectX.DirectSound
  • Microsoft.DirectX.DirectInput
  • PresentationCore
  • PresentationFramework
  • Service
  • System
  • System.Core
  • System.Daten
  • System.Daten.DataSetExtensions
  • System.Bereitstellung
  • System.Zeichnung
  • System.Laufzeit.Serialisierung
  • System.ServiceModel
  • System.Windows.Formen
  • System.Xml
  • System.Xml.Linq
  • UIAutomationProvider
  • WindowsBase
  • WindowsFormsIntegration
War es hilfreich?

Lösung

Ich hatte den gleichen Fehler, es ist nicht eine doppelte Referenz.Klicken Sie auf ausführen, und der compiler auf Magische Weise vergisst es, oder Sie können Sie beenden den ärger komplett mit die folgenden.

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

Andere Tipps

Es klingt vielleicht sind Sie auf mehrere Versionen der directx-Montage.Vielleicht überprüfen Sie Ihre Referenzen.Wenn Sie müssen mehrere Versionen, dann extern alias kann helfen - aber es ist nicht schön.


In Visual Studio, suchen Sie nach "solution explorer" (Häufig auf der rechten Seite) - dies ist der Baum, der alles, was in Ihrem Projekt.Eines der Elemente in diesem Baum ist der "Referenzen".Dies ist eine visuelle Darstellung der externen dlls, die Ihr code ist konfiguriert zu nutzen.

(es gibt viele, viele .NET dlls, die Sie brauchen, zu sagen, jedes Projekt, was dlls könnte es brauchen)

Erweitern Sie diesen Knoten, und suchen Sie nach 2 Einträgen, die Aussehen wie directx.Wenn es sind zwei, loswerden einer von Ihnen (im Idealfall derjenige mit der niedrigeren version).Dann versuchen und neu erstellen.

Sie haben zwei Hinweise auf unterschiedliche Versionen der assembly enthält, auf die Funktion.Entfernen Sie einen der Verweise.

Sie müssen möglicherweise mehrere Verweise auf die DirectX-Montage.Überprüfen Sie Ihre Projekt in den Ordner Verweise.Suchen Sie nach doppelten Einträgen, insbesondere Verweise auf mehrere version microsoft.directx.directsound.dll.Wenn es Duplikate sind, so entfernen Sie eine und versuchen Sie es erneut.

Dies ist die übliche problem mit DirectSound.Sie finden auch viele, viele andere Probleme ;) denken Sie Daran, dass mit der DS-nichts ist, wie es aussieht.Wenn Puffer null zurückgibt, ist es wahrscheinlich die Ursache, nur weil Sie "Lesen" - position ist nur inner-Puffer schreiben die Zeiger.Also, wenn Sie Fragen, Lesen oder schreiben der Zeiger berechnen immer mindestens ein block sichere zone ;) und wenn man Puffer Positionen von ds Methoden verwenden, versuchen Sie gewirkt, weil es werfen kann zufällige Fehler.

Kraft, die weichen zu kompilieren im x86-oder x64-anstelle von "Any CPU" wird das problem zu beheben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top