private void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { var receiver = (IAudioReceiver) new UdpAudioReceiver(endPoint.Port); player = new NetworkAudioPlayer(codec, receiver); connected = true; }
internal WasapiLoopbackRecorder(INetworkChatCodec c) { deviceNumber = -1; codec = c; waveIn = new WasapiLoopbackCapture(); convertionStream = new AcmStream(new WaveFormat(waveIn.WaveFormat.SampleRate, 16, waveIn.WaveFormat.Channels), codec.RecordFormat); }
public DirectSoundPlayer(INetworkChatCodec c) : base(c) { waveProvider = new BufferedWaveProvider(codec.RecordFormat); wavePlayer = new DirectSoundOut(); wavePlayer.Init(waveProvider); }
void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { source = new WaveIn(); source.BufferMilliseconds = 50; source.DeviceNumber = inputDeviceNumber; source.WaveFormat = codec.RecordFormat; source.DataAvailable += waveIn_DataAvailable; source.StartRecording(); sendVoice = new UdpClient(); sendVoice.EnableBroadcast = true; receiveVoice = new UdpClient(); receiveVoice.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true); receiveVoice.Client.Bind(endPoint); sendVoice.Connect(endPoint); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); connected = true; var state = new ListenerThreadState { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(ListenerThread, state); }
/// <summary> /// 语音捕获类 /// </summary> /// <param name="quality">1为低质量、2为一般默认、3为高质量</param> /// <param name="bufferTime"></param> public AudioCapture(int quality, int bufferTime = 50) { switch (quality) { case 1: _speexCodec = new NarrowBandSpeexCodec(); break; case 3: _speexCodec = new UltraWideBandSpeexCodec(); break; case 2: default: _speexCodec = new WideBandSpeexCodec(); break; } _waveProvider = new BufferedWaveProvider(_speexCodec.RecordFormat); _waveIn = new WaveIn(); _waveIn.BufferMilliseconds = bufferTime; _waveIn.DeviceNumber = 0; _waveIn.WaveFormat = _speexCodec.RecordFormat; _waveIn.DataAvailable += _waveIn_DataAvailable; }
private void connectLiveAudio(int inputDeviceNumber, INetworkChatCodec codec) { var sender = new SocketIoAudioSender(socket); audioSender = new NetworkAudioSender(codec, inputDeviceNumber, sender); connected = true; }
private void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { waveIn = new WaveIn(); waveIn.BufferMilliseconds = 50; waveIn.DeviceNumber = inputDeviceNumber; waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += waveIn_DataAvailable; waveIn.StartRecording(); udpSender = new UdpClient(); udpListener = new UdpClient(); // To allow us to talk to ourselves for test purposes: // http://stackoverflow.com/questions/687868/sending-and-receiving-udp-packets-between-two-programs-on-the-same-computer udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpListener.Client.Bind(endPoint); udpSender.Connect(endPoint); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); connected = true; var state = new ListenerThreadState { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(ListenerThread, state); }
/// <summary> /// 连接到对方设备端 /// </summary> /// <param name="endPoint"></param> /// <param name="inputDeviceNumber"></param> /// <param name="codec"></param> private void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { waveIn = new WaveIn(); waveIn.BufferMilliseconds = 50; waveIn.DeviceNumber = inputDeviceNumber; waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += waveIn_DataAvailable; waveIn.StartRecording(); udpSender = new UdpClient(); udpListener = new UdpClient(); // To allow us to talk to ourselves for test purposes: // http://stackoverflow.com/questions/687868/sending-and-receiving-udp-packets-between-two-programs-on-the-same-computer udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpListener.Client.Bind(endPoint); udpSender.Connect(endPoint); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); connected = true; var state = new ListenerThreadState { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(ListenerThread, state); }
private void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { try { waveIn = new WaveIn { BufferMilliseconds = 100, DeviceNumber = inputDeviceNumber, WaveFormat = codec.RecordFormat }; if (callingService.EncryptedCallSender || callingService.EncryptedCallReceiver) { waveIn.DataAvailable += WaveIn_DataAvailableEncrypted; } else { waveIn.DataAvailable += WaveIn_DataAvailable; } waveIn.StartRecording(); } catch (Exception) { return; } udpSender = new UdpClient(); //to wywalilo udpSender.Connect(endPoint); connected = true; }
internal WaveInRecorder(INetworkChatCodec c, int devIndex = 0) { deviceNumber = devIndex; codec = c; waveIn = new WaveIn() { DeviceNumber = deviceNumber, WaveFormat = codec.RecordFormat }; }
static void Main(string[] args) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(client), port); selectedCodec = new G722ChatCodec(); Connect(endPoint, 0, selectedCodec); Console.WriteLine(String.Format("Connected to: {0}:{1}", client, port)); Console.ReadLine(); Disconnect(); }
public void Start(IPEndPoint endPoint, IPEndPoint srcPoint) { if (!endSignal) { PopulateCodecs(); int inputDeviceNumber = 0; selectedCodec = codecItems[0].Codec; Connect(endPoint, srcPoint, inputDeviceNumber, selectedCodec); } }
public GoToMeetingWindow(IRCSocket rcSocket, Window mainWindow) { InitializeComponent(); _rcSocket = rcSocket; _mainWindow = mainWindow; _rcSocket.MessageReceived += _rcSocket_MessageReceived; _selectedCodec = new MicrosoftAdpcmChatCodec(); _isAudioConnected = true; Chats = new ObservableCollection <Chat>(); }
static void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { waveIn = new WaveInEvent(); waveIn.BufferMilliseconds = 50; //Microphone.DeviceNumber = inputDeviceNumber; // or just set default device in windows waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += waveIn_DataAvailable; udpSender = new UdpClient(); udpSender.Connect(endPoint); waveIn.StartRecording(); }
public NetworkAudioPlayer(INetworkChatCodec codec, IAudioReceiver receiver) { this.codec = codec; this.receiver = receiver; receiver.OnReceived(OnDataReceived); waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); }
public void Start() { if (!endSignal) { PopulateCodecs(); IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, 17720); int inputDeviceNumber = 0; selectedCodec = codecItems[0].Codec; Connect(endPoint, inputDeviceNumber, selectedCodec); } }
public NetworkAudioSender(INetworkChatCodec codec, int inputDeviceNumber, IAudioSender audioSender) { this.codec = codec; this.audioSender = audioSender; waveIn = new WaveIn(); waveIn.BufferMilliseconds = 50; waveIn.DeviceNumber = inputDeviceNumber; waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += OnAudioCaptured; waveIn.StartRecording(); }
public NetworkAudioSender(INetworkChatCodec codec, int inputDeviceNumber, IAudioSender audioSender) { Codec = codec; AudioSender = audioSender; WaveIn = new WaveInEvent { BufferMilliseconds = 50, DeviceNumber = inputDeviceNumber, WaveFormat = codec.RecordFormat }; WaveIn.DataAvailable += OnAudioCaptured; WaveIn.StartRecording(); }
private void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { var receiver = (comboBoxProtocol.SelectedIndex == 0) ? (IAudioReceiver) new UdpAudioReceiver(endPoint.Port) : new TcpAudioReceiver(endPoint.Port); var sender = (comboBoxProtocol.SelectedIndex == 0) ? (IAudioSender) new UdpAudioSender(endPoint) : new TcpAudioSender(endPoint); player = new NetworkAudioPlayer(codec, receiver); audioSender = new NetworkAudioSender(codec, inputDeviceNumber, sender); connected = true; }
public NetworkAudioSender(INetworkChatCodec codec, int inputDeviceNumber, IAudioSender audioSender) { var devices = new MMDeviceEnumerator().EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToList(); this.codec = codec; this.audioSender = audioSender; //waveIn = new WasapiCapture(devices[0], true, 1); waveIn = new WaveInEvent(); waveIn.BufferMilliseconds = 50; waveIn.DeviceNumber = inputDeviceNumber; waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += OnAudioCaptured; waveIn.StartRecording(); }
private void buttonStartStreaming_Click(object sender, EventArgs e) { if (!connected) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(textBoxIPAddress.Text), int.Parse(textBoxPort.Text)); int inputDeviceNumber = comboBoxInputDevices.SelectedIndex; selectedCodec = ((CodecComboItem)comboBoxCodecs.SelectedItem).Codec; Connect(endPoint, inputDeviceNumber,selectedCodec); buttonStartStreaming.Text = "Disconnect"; } else { Disconnect(); buttonStartStreaming.Text = "Connect"; } }
/// <summary> /// 开始网络音频 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonStartStreaming_Click(object sender, EventArgs e) { if (!connected) { IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(textBoxIPAddress.Text), int.Parse(textBoxPort.Text)); int inputDeviceNumber = comboBoxInputDevices.SelectedIndex; selectedCodec = ((CodecComboItem)comboBoxCodecs.SelectedItem).Codec; Connect(endPoint, inputDeviceNumber, selectedCodec); buttonStartStreaming.Text = "Disconnect"; } else { Disconnect(); buttonStartStreaming.Text = "Connect"; } }
private void buttonStartStreaming_Click(object sender, EventArgs e) { if (!connected) { IPEndPoint endPoint = new IPEndPoint(Dns.GetHostAddresses(Config.ConnectionStringEDP).Where(x => x.AddressFamily == AddressFamily.InterNetwork).FirstOrDefault(), 15123); int inputDeviceNumber = comboBoxInputDevices.SelectedIndex; selectedCodec = ((CodecComboItem)comboBoxCodecs.SelectedItem).Codec; Connect(endPoint, inputDeviceNumber, selectedCodec); buttonStartStreaming.Content = "Disconnect"; } else { Disconnect(); buttonStartStreaming.Content = "Connect"; } }
static void Connect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { udpListener = new UdpClient(); // if running both from the same computer: (otherwise comment these next two out) udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpListener.Client.Bind(endPoint); waveOut = new DirectSoundOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); var state = new ListenerThreadState { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(ListenerThread, state); }
private void ServerConnect(IPEndPoint endPoint, int inputDeviceNumber, INetworkChatCodec codec) { // input handling this.waveIn = new NAudio.Wave.WaveIn() { BufferMilliseconds = 50, DeviceNumber = inputDeviceNumber, WaveFormat = codec.RecordFormat }; this.waveIn.DataAvailable += SoundDataAvailable; this.waveIn.StartRecording(); this.udpSender = new UdpClient(); this.udpSender.Connect(endPoint); this.vconnected = true; }
private void ClientConnect(IPEndPoint endPoint, INetworkChatCodec codec) { this.udpListener = new UdpClient(); this.udpListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); this.udpListener.Client.Bind(endPoint); this.waveOut = new WaveOut(); this.waveProvider = new BufferedWaveProvider(codec.RecordFormat); this.waveOut.Init(waveProvider); this.waveOut.Play(); this.connected = true; var state = new AudioListenerThreadData { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(this.ListenerProcessing, state); }
private void buttonStartStreaming_Click_1(object sender, EventArgs e) { if (!connected) { if (textBoxPort.Text == "") { MessageBox.Show("Please provide correct port"); textBoxPort.Text = "0000"; } string portS = textBoxPort.Text; int port = Int32.Parse(portS); if (port > 65535) { textBoxPort.Text = "65535"; } else { try { IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(textBoxIPAddress.Text), int.Parse(textBoxPort.Text)); int inputDeviceNumber = comboBoxInputDevices.SelectedIndex; selectedCodec = ((CodecComboItem)comboBoxCodecs.SelectedItem).Codec; Connect(endPoint, inputDeviceNumber, selectedCodec); buttonStartStreaming.Text = "Disconnect"; } catch { MessageBox.Show("Please provide correct IP address"); } } } else { Disconnect(); buttonStartStreaming.Text = "Connect"; } }
/// <summary> /// 语音播放器 /// </summary> /// <param name="quality"></param> /// <param name="bufferTime"></param> public AudioPlayer(int quality, int bufferTime = 50) { switch (quality) { case 1: _speexCodec = new NarrowBandSpeexCodec(); break; case 3: _speexCodec = new UltraWideBandSpeexCodec(); break; case 2: default: _speexCodec = new WideBandSpeexCodec(); break; } _waveProvider = new BufferedWaveProvider(_speexCodec.RecordFormat); _waveOut = new WaveOut(); _waveOut.Init(_waveProvider); }
private void Connect(IPEndPoint endPoint, IPEndPoint srcPoint, int inputDeviceNumber, INetworkChatCodec codec) { var sender = (IAudioSender) new UdpAudioSender(endPoint, srcPoint); audioSender = new NetworkAudioSender(codec, inputDeviceNumber, sender); connected = true; }
/** * * Start SERVER * **/ public void StartServer(string ip, int port) { // Recoding Audio waveIn = new WaveIn(); //Tạo object để làm việc với âm thanh int inputDeviceNumber = comboBoxInputDevices.SelectedIndex; //Lấy số index của devices được chọn this.codec = ((CodecComboItem)comboBoxCodecs.SelectedItem).Codec; //Chứa chuẩn âm thanh ( đưa âm thanh về byte) waveIn.BufferMilliseconds = 50; waveIn.DeviceNumber = inputDeviceNumber; waveIn.WaveFormat = codec.RecordFormat; waveIn.DataAvailable += waveIn_DataAvailable; waveIn.StartRecording(); // Start Webcam cam = new VideoCaptureDevice(webcam[comboBoxWebcams.SelectedIndex].MonikerString); cam.VideoResolution = cam.VideoCapabilities[0]; // 640 x 480 cam.NewFrame += new AForge.Video.NewFrameEventHandler(showMyCam); cam.Start(); // Open UDP connect for Audio sending udpAudioSender = new UdpClient(); IPEndPoint endPoint = new IPEndPoint(IPAddress.Broadcast, port); udpAudioSender.Connect(endPoint); Console.WriteLine("Opened UDP for Audio at broadcast {0}:{1}", IPAddress.Broadcast, port); // Open TCP server for question, create new thread for non-block UI Thread mainThread = new Thread(() => { try { IPAddress ipAddress = IPAddress.Parse(ip);//Vì tcp chỉ nhận IPAddress nên phải parse ip về IPaddress server = new TcpListener(ipAddress, port); server.Start(); connected = true; _isDisconnect = false; Console.WriteLine("Opened TCP server for Question at {0}:{1}", ip, port); // Open Tcp for Webcam streaming if (comboBoxWebcams.Items.Count >= 1) { tcpWebcamServer = new TcpListener(IPAddress.Parse(ip), port + 1); tcpWebcamServer.Start(); webcamConnected = true; Console.WriteLine("Opened TCP for Webcam at {0}:{1}", ip, port + 1); } // Listen from client // open a new Thread if a Client connect while (_numberConnecting < MAX_CONNECT) //Số connecting hiện tại <100 { Socket acceptSocket = server.AcceptSocket(); //Tạo ra 1 socket để làm việc với client Socket webcamSocket = tcpWebcamServer.AcceptSocket(); // Add all socket connected to control _listSocketWebcam.Add(webcamSocket); _listSocket.Add(acceptSocket); _numberConnecting++; this.Invoke(new Action(() => { txt_numberConnect.Text = _numberConnecting.ToString(); // update UI })); if (_isDisconnect) { break; } // ready for communications //Khi 1 client xác nhận connected thì tạo ra 1 luồng cho nó if (acceptSocket.Connected) { Thread thread = new Thread((client) => { ConnectClient((Socket)client); }); thread.Start(acceptSocket); } } server.Server.Close(); _isDisconnect = false; Console.WriteLine("Server was closed from main"); } catch (Exception ex) { Console.WriteLine("Server was close !!"); return; } }); mainThread.Start(); }
internal NetworkPlayer(INetworkChatCodec c) { codec = c; }
/** * * Client's * **/ public void ConnectServer(string ip, int port) { //codec = new Gsm610ChatCodec(); // echo codec = new G722ChatCodec(); // echo //codec = new AcmALawChatCodec(); // bad //codec = new ALawChatCodec(); // bad - G711 //codec = new AcmMuLawChatCodec(); // bad //codec = new MicrosoftAdpcmChatCodec(); // mute //codec = new MuLawChatCodec(); // bad //codec = new TrueSpeechChatCodec(); // error //codec = new UncompressedPcmChatCodec(); // echo try { // Webcam Receive TcpWebcamClient = new TcpClient(); TcpWebcamClient.Connect(ip, port + 1); Console.WriteLine("Connect TCP for Webcam at {0}:{1}", ip, port + 1); // Audio Receive IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, port); udpAudioListener = new UdpClient(); udpAudioListener.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true); udpAudioListener.Client.Bind(endPoint); Console.WriteLine("Connect UDP for Audio at {0}:{1}", endPoint.Address, endPoint.Port); connected = true; // listening & play webcam ThreadPool.QueueUserWorkItem(this.ListenerWebcamThread); // listening & play audio waveOut = new WaveOut(); waveProvider = new BufferedWaveProvider(codec.RecordFormat); waveOut.Init(waveProvider); waveOut.Play(); ListenerThreadState threadState = new ListenerThreadState() { Codec = codec, EndPoint = endPoint }; ThreadPool.QueueUserWorkItem(this.ListenerAudioThread, threadState); } catch (Exception ex) { Console.WriteLine("Cannot connect to server. Server closed!"); btn_close.Enabled = false; btn_connect.Enabled = true; return; } Thread mainThread = new Thread(() => { string state = string.Empty; string msg = string.Empty; //Biến lưu chủ đề trả từ server về string received = string.Empty; //Biến lưu kết quả đúng sai try { // connect client = new TcpClient(); client.Connect(IPAddress.Parse(ip), port); this.Invoke(new Action(() => { txt_status.Text = string.Format("Connected to {0}:{1}", ip, port); })); isDisconnect = false; // read, write to server using stream, over use bytes[] Stream streamer = client.GetStream(); reader = new StreamReader(streamer); writer = new StreamWriter(streamer); writer.AutoFlush = true; // get user ID, state game writer.WriteLine("init"); id = reader.ReadLine(); state = reader.ReadLine(); Console.WriteLine("My received id: {0}, game play? {1}", id, state); this.Invoke(new Action(() => { txt_Id.Text = id; lbCountDown.Location = new Point(542, 393); })); string text = String.Format("Bạn là User_{0}", id); MessageBox.Show(text, "Thông Báo!"); // get current question if (state.Contains("True")) { Console.WriteLine("Join. Game was play"); writer.WriteLine("question"); string numberQuestion = reader.ReadLine(); this.Invoke(new Action(() => { groupBox_webcam.Text = string.Format("Streaner - Câu hỏi: số {0}", int.Parse(numberQuestion)); })); received = reader.ReadLine(); parseQuestion(received); this.Invoke(new Action(() => { // markup UI answer_A.Enabled = true; answer_B.Enabled = true; answer_C.Enabled = true; answer_A.BackColor = Color.Honeydew; answer_B.BackColor = Color.Honeydew; answer_C.BackColor = Color.Honeydew; txt_question.Location = new Point(31, 334); answer_A.Location = new Point(165, 384); answer_B.Location = new Point(165, 420); answer_C.Location = new Point(165, 456); })); } while (true) { // check disConnect button was clicked if (isDisconnect) { break; } // listening msg from Server msg = reader.ReadLine(); switch (msg) { case "img": Console.WriteLine("get img"); break; case "play": MessageBox.Show("Game play . . ."); break; case "new question": // id string numberQuestion = reader.ReadLine(); this.Invoke(new Action(() => { groupBox_webcam.Text = string.Format("Streamer - Câu hỏi: số {0}", Convert.ToInt32(numberQuestion) + 1); })); //question received = reader.ReadLine(); parseQuestion(received); this.Invoke(new Action(() => { // Markup UI answer_A.Enabled = true; answer_B.Enabled = true; answer_C.Enabled = true; answer_A.BackColor = Color.Honeydew; answer_B.BackColor = Color.Honeydew; answer_C.BackColor = Color.Honeydew; txt_question.Location = new Point(31, 334); answer_A.Location = new Point(165, 384); answer_B.Location = new Point(165, 420); answer_C.Location = new Point(165, 456); })); break; case "correct": received = reader.ReadLine(); Console.WriteLine(received); score++; break; case "incorrect": received = reader.ReadLine(); Console.WriteLine(received); break; case "show answer": if (received == "A") { answer_A.BackColor = Color.Green; if (answer == "A") { this.Invoke(new Action(() => { txt_score.Text = score.ToString(); })); } } else if (received == "B") { answer_B.BackColor = Color.Green; if (answer == "B") { this.Invoke(new Action(() => { txt_score.Text = score.ToString(); })); } } else if (received == "C") { answer_C.BackColor = Color.Green; if (answer == "C") { this.Invoke(new Action(() => { txt_score.Text = score.ToString(); })); } } else { Console.WriteLine("Dont A, B, C"); } answer = ""; break; case "show winner": received = reader.ReadLine(); string cost = reader.ReadLine(); Console.WriteLine(received); string s = received + "\n" + cost; MessageBox.Show(s); score = 0; break; default: break; } } streamer.Close(); } catch (Exception ex) { Console.WriteLine("Disconnected from server"); this.Invoke(new Action(() => { btn_close.Enabled = false; btn_connect.Enabled = true; txt_question.Location = new Point(-31, -334); answer_A.Location = new Point(-165, -384); answer_B.Location = new Point(-165, -420); answer_C.Location = new Point(-165, -456); lbCountDown.Location = new Point(-542, -393); pictureBoxStreamer.Image = Image.FromFile("404.jpg"); })); client.Close(); } }); mainThread.Start(); }
internal WaveInRecorder(INetworkChatCodec c,int devIndex = 0) { deviceNumber = devIndex; codec = c; waveIn = new WaveIn() { DeviceNumber = deviceNumber, WaveFormat = codec.RecordFormat }; }