CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Results 1 to 4 of 4
  1. #1
    Join Date
    Mar 2004
    Posts
    2

    Direct Sound and C Sharp

    hello,
    i am trying to record sound from the microphone and play it.
    i created a capture buffer....after recording i transfered the data to a secondary buffer with a stream...but when trying to play the secondary buffer i only hear a short "bump" sound.

    does anyone know where i can find reading matrial other than msdn

    thanks,
    TaLz

  2. #2
    Join Date
    Mar 2004
    Posts
    2
    i think I have a problem with the stream I'm using to transfer data between the captureBuffer and the buffer I use to play the sound with.

    here is the code...

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using Microsoft.DirectX;
    using System.IO;
    using Microsoft.DirectX.DirectSound;

    using Buffer = Microsoft.DirectX.DirectSound.Buffer;

    namespace Sound
    {
    public class Sound : System.Windows.Forms.Form
    {
    // private fields
    private Device device;
    private Capture capture;
    private System.Windows.Forms.Button button1;
    private System.Windows.Forms.Button button2;
    private Buffer buffer;
    private BufferDescription bufferDesc;
    private CaptureBuffer captureBuffer;
    private WaveFormat waveFormat;
    private CaptureBufferDescription captureBuffDesc;
    private MemoryStream stream;
    private System.Windows.Forms.Button button3;
    private System.Windows.Forms.Button button4;
    private byte[] streamBuffer;

    public Sound()
    {
    InitializeComponent();
    // Set up DirectSound
    CreateDevice();
    // Load the sound
    CreateWaveFormat();
    CreateBufferDescription();
    CreateBuffer();

    // Set the cooperative level
    SetCooperativeLevel();

    CreateCapture();
    CreateCapureDescription();
    CreateCaptureBuffer();
    CreateStreamBuffer();
    CreateStream();
    }

    private void CreateDevice()
    {
    device = new Device();
    }

    private void CreateBuffer()
    {
    buffer = new Buffer(bufferDesc, this.device);
    }

    private void CreateBufferDescription()
    {
    bufferDesc = new BufferDescription();
    bufferDesc.Format = waveFormat;
    bufferDesc.BufferBytes = 100000;
    bufferDesc.ControlPositionNotify = true;
    bufferDesc.ControlFrequency = true;
    bufferDesc.ControlPan = true;
    bufferDesc.ControlVolume = true;
    }

    private void SetCooperativeLevel()
    {
    device.SetCooperativeLevel(
    this , // The window for the application
    CooperativeLevel.Priority // The cooperative level
    );
    }

    private void CreateWaveFormat()
    {
    waveFormat = new WaveFormat();
    waveFormat.BitsPerSample = 8;
    waveFormat.BlockAlign = 1;
    waveFormat.Channels = 1;
    waveFormat.AverageBytesPerSecond = 20500;
    waveFormat.SamplesPerSecond = 20500;
    waveFormat.FormatTag = WaveFormatTag.Pcm;
    }

    private void CreateCapture()
    {
    capture = new Capture();
    }

    private void CreateCapureDescription()
    {
    captureBuffDesc = new CaptureBufferDescription();
    captureBuffDesc.BufferBytes = 100000;
    captureBuffDesc.Format = this.waveFormat;
    }

    private void CreateCaptureBuffer()
    {
    captureBuffer = new CaptureBuffer(captureBuffDesc, capture);
    }

    private void CreateStream()
    {
    stream = new MemoryStream(streamBuffer);
    }

    private void CreateStreamBuffer()
    {
    streamBuffer = new byte[100000];
    for(int i=0; i<100000; i++)
    streamBuffer[i] = 0;
    }



    #region Windows Form Designer generated code
    ///<summary>
    /// Required method for Designer support - do not modify
    /// the contents of this method with the code editor.
    ///</summary>
    private void InitializeComponent()
    {
    this.button1 = new System.Windows.Forms.Button();
    this.button2 = new System.Windows.Forms.Button();
    this.button3 = new System.Windows.Forms.Button();
    this.button4 = new System.Windows.Forms.Button();
    this.SuspendLayout();
    //
    // button1
    //
    this.button1.Location = new System.Drawing.Point(48, 32);
    this.button1.Name = "button1";
    this.button1.Size = new System.Drawing.Size(208, 23);
    this.button1.TabIndex = 0;
    this.button1.Text = "Play Sound";
    this.button1.Click += new System.EventHandler(this.button1_Click);
    //
    // button2
    //
    this.button2.Location = new System.Drawing.Point(48, 72);
    this.button2.Name = "button2";
    this.button2.Size = new System.Drawing.Size(208, 23);
    this.button2.TabIndex = 1;
    this.button2.Text = "Stop Sound";
    this.button2.Click += new System.EventHandler(this.button2_Click);
    //
    // button3
    //
    this.button3.Location = new System.Drawing.Point(48, 136);
    this.button3.Name = "button3";
    this.button3.Size = new System.Drawing.Size(208, 23);
    this.button3.TabIndex = 2;
    this.button3.Text = "Start Recording";
    this.button3.Click += new System.EventHandler(this.button3_Click);
    //
    // button4
    //
    this.button4.Location = new System.Drawing.Point(48, 176);
    this.button4.Name = "button4";
    this.button4.Size = new System.Drawing.Size(208, 23);
    this.button4.TabIndex = 3;
    this.button4.Text = "Stop Recording";
    this.button4.Click += new System.EventHandler(this.button4_Click);
    //
    // Game
    //
    this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
    this.ClientSize = new System.Drawing.Size(292, 273);
    this.Controls.Add(this.button4);
    this.Controls.Add(this.button3);
    this.Controls.Add(this.button2);
    this.Controls.Add(this.button1);
    this.Name = "Sound";
    this.Text = "Sound";
    this.ResumeLayout(false);

    }
    #endregion

    public static void Main ()
    {
    Sound s = new Sound();
    s.Show();
    Application.Run(s);
    }

    private void button1_Click( object sender, System.EventArgs e)
    {
    this.captureBuffer.Read(0, this.stream, 100000, LockFlag.None);
    buffer.Write(0, this.stream, (int)this.stream.Length, LockFlag.EntireBuffer);
    buffer.Play(0, BufferPlayFlags.Looping);
    }

    private void button2_Click(object sender, System.EventArgs e)
    {
    buffer.Stop();
    }

    private void button3_Click(object sender, System.EventArgs e)
    {
    this.captureBuffer.Start(true);
    }

    private void button4_Click(object sender, System.EventArgs e)
    {
    this.captureBuffer.Stop();
    }


    }
    }

  3. #3
    Join Date
    May 1999
    Location
    Southern California
    Posts
    12,266
    There is a CodeGuru C-Sharp Programming forum and you will get more/faster answers there for C-Sharp programming questions.
    "Signature":
    My web site is Simple Samples.
    C# Corner Editor

  4. #4
    Join Date
    Sep 2002
    Location
    Philadelphia ***Epoch: Timeless***
    Posts
    560
    [Moved]
    SolarFlare

    Those who cling to life die and those who defy death live. -Sun Tzu

    cout << endl;
    return 0;
    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  





Click Here to Expand Forum to Full Width

Featured