void InitializeMicrophone() { try { bool retry = true; while (retry) { try { _microphone = Microphone.Default; _graphicsManager = new GraphicsDeviceManager(this); _graphicsManager.PreferredBackBufferHeight = 1; _graphicsManager.PreferredBackBufferWidth = 1; Form gameWindowForm = (Form)Form.FromHandle(this.Window.Handle); gameWindowForm.Hide(); gameWindowForm.ShowInTaskbar = false; gameWindowForm.ControlBox = false; gameWindowForm.ShowIcon = false; gameWindowForm.Opacity = 0; gameWindowForm.Left = 1; gameWindowForm.Top = 1; FrameworkDispatcher.Update(); // todo: make the microphone capture timespan configurable float timespan = float.Parse(ConfigurationManager.AppSettings["audioTimerInterval"]); _microphone.BufferDuration = TimeSpan.FromMilliseconds(timespan); _buffer = new byte[_microphone.GetSampleSizeInBytes(_microphone.BufferDuration)]; _microphone.BufferReady += OnBufferReady; _isRunning = true; _stream = new MemoryStream(); retry = false; } catch (Exception ex) { Tools.Instance.Logger.LogError(ex.ToString()); retry = true; if (_microphone != null) { _microphone.Stop(); } } } } catch (Exception ex) { Tools.Instance.Logger.LogError(ex.ToString()); } }
private void OnBufferReady(object sender, EventArgs e) { try { if (_isRunning) { Array.Clear(_buffer, 0, _buffer.Length); _microphone.GetData(_buffer); if (_stream == null) { _stream = new MemoryStream(); _capturesCount = 0; } _stream.Write(_buffer, 0, _buffer.Length); if (_capturesCount == 1) { byte[] compressedCapture = Tools.Instance.DataCompression.Compress(_stream.ToArray()); // push microphone capture _onCaptureReady.Invoke(this, new AudioCaptureEventArgs() { Capture = compressedCapture, CaptureTimestamp = DateTime.Now } ); _stream = new MemoryStream(); _capturesCount = 0; } else { _capturesCount++; } } else { _microphone = Microphone.Default; _microphone.Stop(); _microphone.BufferReady -= this.OnBufferReady; } } catch (Exception ex) { Tools.Instance.Logger.LogError(ex.ToString()); } }