Capture Sound from microphone using Directx DirectSound

10,250

EDIT : I JUST SOLVED THAT by reading this article : http://www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64

Share:
10,250
BOSS
Author by

BOSS

Updated on June 04, 2022

Comments

  • BOSS
    BOSS almost 2 years

    I am creating a simple application that records input from the microphone and store it into array of bytes. So I have searched a lot about this and eventually ended up using Directx DirectSound. Here is the code I am using:

    using Microsoft.DirectX;
    using Microsoft.DirectX.DirectSound;
    
    private Thread CaptureSoundThread = null;
    public CaptureBuffer applicationBuffer = null;
    private SecondaryBuffer soundBuffer = null;
    private Device soundDevice = null;
    
    private void Form1_Load(object sender, EventArgs e)
    {
        soundDevice = new Device();
        soundDevice.SetCooperativeLevel(this, CooperativeLevel.Normal);
    
        // Set up our wave format to 44,100Hz, with 16 bit resolution
        WaveFormat wf = new WaveFormat();
        wf.FormatTag = WaveFormatTag.Pcm;
        wf.SamplesPerSecond = 44100;
        wf.BitsPerSample = 16;
        wf.Channels = 1;
        wf.BlockAlign = (short)(wf.Channels * wf.BitsPerSample / 8);
        wf.AverageBytesPerSecond = wf.SamplesPerSecond * wf.BlockAlign;
    
        int samplesPerUpdate = 512;
    
        // Create a buffer with 2 seconds of sample data
        BufferDescription bufferDesc = new BufferDescription(wf);
        bufferDesc.BufferBytes = samplesPerUpdate * wf.BlockAlign * 2;
        bufferDesc.ControlPositionNotify = true;
        bufferDesc.GlobalFocus = true;
    
        soundBuffer = new SecondaryBuffer(bufferDesc, soundDevice);
    }
    
    private void button1_Click(object sender, EventArgs e)
    {
        CaptureSoundThread = new Thread(new ThreadStart(WaitThread));
        CaptureSoundThread.Start();
    }
    
    private void WaitThread()
    {
        while (true)
        {
            byte[] CaptureData = null;
            CaptureData = (byte[])applicationBuffer.Read(0,
            typeof(byte), LockFlag.None);
            soundBuffer.Write(0, CaptureData, LockFlag.None);
            // Start it playing
            soundBuffer.Play(0, BufferPlayFlags.Looping);
        }
    }
    

    But when I try to run the application, I get this annoying error:

    BadImageFormatException
    
    Could not load file or assembly 'Microsoft.DirectX.DirectSound.dll' or one
    of its dependencies.  is not a valid Win32 application. (Exception from
    HRESULT: 0x800700C1)
    

    I actually had to download the Microsoft.DirectX.DirectSound.dll from the internet because I couldn't find them in the Visual Studio assemblies.

    EDIT : I JUST SOLVED THAT by reading this article : http://www.codeproject.com/Articles/383138/BadImageFormatException-x86-i-x64