using System; using Correlator.Util; using NAudio.Wave; using WaveFormat = NAudio.Wave.WaveFormat; using WaveOut = NAudio.Wave.WaveOut; namespace Correlator.DataService { public class AudioServiceImpl : IAudioService { private WaveFileWriter _waveFileWriter; private readonly WaveOut _waveOut = new WaveOut(); private readonly BufferedWaveProvider _waveProvider = new BufferedWaveProvider(new WaveFormat(7500, 24, 1)); public void Start() { _waveOut.Init(_waveProvider); _waveOut.Play(); var fileName = $"{DirectoryManager.GetAudioDir()}/听音_{DateTime.Now.ToString("yyyyMMdd_HHmmss")}.wav"; _waveFileWriter = new WaveFileWriter(fileName, new WaveFormat(7500, 24, 1)); //初始化wav文件头 var fileHeader = AudioHub.CreateWaveFileHeader(int.MaxValue, 1, 7500, 24); _waveFileWriter.Write(fileHeader, 0, fileHeader.Length); } public void Write(byte[] pcm) { _waveProvider.AddSamples(pcm, 0, pcm.Length); //将pcm数据保存为wav格式文件 if (_waveFileWriter == null) { return; } _waveFileWriter.Write(pcm, 0, pcm.Length); } public void Stop() { _waveOut.Stop(); _waveFileWriter.Dispose(); _waveFileWriter = null; } } }