AudioService.cs 1011 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. using NAudio.Wave;
  2. namespace ScreenRecorder;
  3. /// <summary>
  4. /// 录制系统麦克风音频,保存为 WAV 文件
  5. /// </summary>
  6. public class AudioService : IDisposable
  7. {
  8. private WaveInEvent? _waveIn;
  9. private WaveFileWriter? _writer;
  10. private string? _outputPath;
  11. public void Start(string outputPath)
  12. {
  13. _outputPath = outputPath;
  14. _waveIn = new WaveInEvent
  15. {
  16. WaveFormat = new WaveFormat(44100, 1),
  17. BufferMilliseconds = 50
  18. };
  19. _writer = new WaveFileWriter(outputPath, _waveIn.WaveFormat);
  20. _waveIn.DataAvailable += OnDataAvailable;
  21. _waveIn.StartRecording();
  22. }
  23. private void OnDataAvailable(object? sender, WaveInEventArgs e)
  24. {
  25. _writer?.Write(e.Buffer, 0, e.BytesRecorded);
  26. }
  27. public void Stop()
  28. {
  29. _waveIn?.StopRecording();
  30. _waveIn?.Dispose();
  31. _waveIn = null;
  32. _writer?.Dispose();
  33. _writer = null;
  34. }
  35. public void Dispose() => Stop();
  36. }