public SoundCardControl() { CaptureDevicesCollection captureDevicesCollection = new CaptureDevicesCollection(); if (captureDevicesCollection.Count > 0) { this.capture_ = new Microsoft.DirectX.DirectSound.Capture(captureDevicesCollection[0].DriverGuid); } else { Console.WriteLine("No Capture Device"); } this.waveFormat_ = this.CreateWaveFormat(); this.notifyEvent_ = new AutoResetEvent(false); }
/// <summary> /// 创建捕捉设备对象 /// </summary> /// <returns>如果创建成功返回true</returns> private bool CreateCaputerDevice() { //首先要玫举可用的捕捉设备 CaptureDevicesCollection capturedev = new CaptureDevicesCollection(); Guid devguid; if (capturedev.Count > 0) { devguid = capturedev[0].DriverGuid; } else { System.Windows.Forms.MessageBox.Show("当前没有可用于音频捕捉的设备", "系统提示"); return(false); } //利用设备GUID来建立一个捕捉设备对象 capture = new Microsoft.DirectX.DirectSound.Capture(devguid); return(true); }
/* * Initializes all the data members. */ private void Initialize() { try { if (device == null) { device = new Device(); } device.SetCooperativeLevel(this, CooperativeLevel.Normal); CaptureDevicesCollection captureDeviceCollection = new CaptureDevicesCollection(); DeviceInformation deviceInfo = captureDeviceCollection[0]; if (capture == null) { capture = new Microsoft.DirectX.DirectSound.Capture(deviceInfo.DriverGuid); } short channels = 1; //Stereo. short bitsPerSample = 16; //16Bit, alternatively use 8Bits. int samplesPerSecond = 22050; //11KHz use 11025 , 22KHz use 22050, 44KHz use 44100 etc. //Set up the wave format to be captured. waveFormat = new WaveFormat(); waveFormat.Channels = channels; waveFormat.FormatTag = WaveFormatTag.Pcm; waveFormat.SamplesPerSecond = samplesPerSecond; waveFormat.BitsPerSample = bitsPerSample; waveFormat.BlockAlign = (short)(channels * (bitsPerSample / (short)8)); waveFormat.AverageBytesPerSecond = waveFormat.BlockAlign * samplesPerSecond; captureBufferDescription = new CaptureBufferDescription(); captureBufferDescription.BufferBytes = waveFormat.AverageBytesPerSecond / 5;//approx 200 milliseconds of PCM data. captureBufferDescription.Format = waveFormat; playbackBufferDescription = new BufferDescription(); playbackBufferDescription.BufferBytes = waveFormat.AverageBytesPerSecond / 5; playbackBufferDescription.Format = waveFormat; playbackBuffer = new SecondaryBuffer(playbackBufferDescription, device); bufferSize = captureBufferDescription.BufferBytes; bIsCallActive = false; nUdpClientFlag = 0; //Using UDP sockets if (clientSocket == null) { clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); } if (ourEP == null) { ourEP = new IPEndPoint(IPAddress.Any, 1450); } //Listen asynchronously on port 1450 for coming messages (Invite, Bye, etc). clientSocket.Bind(ourEP); //Receive data from any IP. if (remoteEP==null) { remoteEP = (EndPoint)(new IPEndPoint(IPAddress.Any, 0)); } byteData = new byte[1024]; //Receive data asynchornously. clientSocket.BeginReceiveFrom(byteData, 0, byteData.Length, SocketFlags.None, ref remoteEP, new AsyncCallback(OnReceive), null); } catch (Exception ex) { MessageBox.Show(ex.Message, "VoiceChat-Initialize ()", MessageBoxButtons.OK, MessageBoxIcon.Error); } }