Search code examples
c#visual-studio-2008ambiguous

C# Ambiguous call in DirectSound


I'm trying to use DirectSound to capture sound from a microphone. Here's my 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);
     }

The instantiations of the micBufferDesc and format variables cause Visual Studio 2008 to throw the following error:

The call is ambiguous between the following methods or properties: 'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()' and 'Microsoft.DirectX.DirectSound.CaptureBufferDescription.CaptureBufferDescription()'

and

The call is ambiguous between the following methods or properties: 'Microsoft.DirectX.DirectSound.WaveFormat.WaveFormat()' and 'Microsoft.DirectX.DirectSound.WaveFormet.WaveFormat()'

I've tried quite a few different combinations of stating the namespace and using statements but no luck.

I've also checked the references in the solution explorer and as far as I can tell there are no duplicates.

A brand new test project with only the Microsoft.DirectX.DirectSound reference and nothing else still throws the same error.

I have also uninstalled and reinstalled the DirectX SDK (March 2009) as well as the DirectX SDK (November 2008). Still no luck.

Finally, I've tried a new project on another computer here in the lab and it still doesn't work.

Here are the references I have:

  • Graph
  • Microsoft.DirectX.DirectSound
  • Microsoft.DirectX.DirectInput
  • PresentationCore
  • PresentationFramework
  • Service
  • System
  • 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

Solution

  • I had the same error, it's not a double reference. Click run and the compiler magically forgets it, or you can stop the annoyance completely with the following.

    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