using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Microsoft.DirectX; using Microsoft.DirectX.DirectSound; using System.IO; using Buffer = Microsoft.DirectX.DirectSound.SecondaryBuffer; namespace WindowsFormsApplication1 { public partial class Form1 : Form { CaptureBuffer captureBuffer; CaptureBufferDescription captureDes = new CaptureBufferDescription(); WaveFormat waveFormat = new WaveFormat(); Capture captureDevice = new Capture(); Device sndDevice; SecondaryBuffer buffer; StreamWriter wStream; StreamReader wReader; char[] bytes; char[] bytesRead; public Form1() { InitializeComponent(); }
private void Form1_Load(object sender, EventArgs e) {
captureDes.BufferBytes = 192000; waveFormat.BitsPerSample = 8; waveFormat.Channels = 1; waveFormat.SamplesPerSecond = 22050; waveFormat.BlockAlign = (short)(waveFormat.Channels * (waveFormat.BitsPerSample/8)); waveFormat.AverageBytesPerSecond = waveFormat.BlockAlign * waveFormat.SamplesPerSecond; captureDes.Format = waveFormat; waveFormat.BlockAlign = 1; captureDes.Format = waveFormat; captureDes.BufferBytes = 100000; captureDes.ControlEffects = false; captureDes.WaveMapped = true; captureBuffer = new Microsoft.DirectX.DirectSound.CaptureBuffer(captureDes, captureDevice); bytes = new char[100000]; bytesRead = new char[100000]; sndDevice = new Device(); sndDevice.SetCooperativeLevel(this, CooperativeLevel.Normal);
}
private void btnPlay_Click(object sender, EventArgs e) { wReader = new StreamReader("sap.wav"); while (wReader.EndOfStream == false) { wReader.Read(bytesRead, 0, 100000); } buffer = new SecondaryBuffer("sap.wav", sndDevice); buffer.Play(0, BufferPlayFlags.Looping); }
private void btnStop_Click(object sender, EventArgs e) { captureBuffer.Stop(); wStream.Close(); }
private void btnRecord_Click(object sender, EventArgs e) { wStream = new StreamWriter("sap.wav"); captureBuffer.Start(true); for (int i = 0; i < 100000; i++) { bytes[i] = (char)captureBuffer.Caps.BufferBytes; wStream.Write(bytes[i]); } } } }
|