diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml.cs b/Correlator/UserControlPage/AuditionUserControl.xaml.cs index c8552ac..d8d4d54 100644 --- a/Correlator/UserControlPage/AuditionUserControl.xaml.cs +++ b/Correlator/UserControlPage/AuditionUserControl.xaml.cs @@ -136,7 +136,7 @@ private void SendSoundCollectCmd(object devCode) { //音频输出 - // PlayWav.Instance.InitWaveOut(); + PlayWav.Instance.InitWaveOut(); //停止状态采集指令的发送 FlowStatus.CanGetSignal = false; @@ -144,7 +144,7 @@ SenderClass.SendSoundCollectCmd(SerialPortManager.Instance.SerialPort, devCode as string); Growl.Success(DevCode.Dev1.Equals(devCode as string) ? "设备1发送听音指令" : "设备2发送听音指令"); FlowStatus.IsListening = true; - // Thread.Sleep(2000); + Thread.Sleep(2000); new Thread(ListeningTimer) { IsBackground = true }.Start(); } diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml.cs b/Correlator/UserControlPage/AuditionUserControl.xaml.cs index c8552ac..d8d4d54 100644 --- a/Correlator/UserControlPage/AuditionUserControl.xaml.cs +++ b/Correlator/UserControlPage/AuditionUserControl.xaml.cs @@ -136,7 +136,7 @@ private void SendSoundCollectCmd(object devCode) { //音频输出 - // PlayWav.Instance.InitWaveOut(); + PlayWav.Instance.InitWaveOut(); //停止状态采集指令的发送 FlowStatus.CanGetSignal = false; @@ -144,7 +144,7 @@ SenderClass.SendSoundCollectCmd(SerialPortManager.Instance.SerialPort, devCode as string); Growl.Success(DevCode.Dev1.Equals(devCode as string) ? "设备1发送听音指令" : "设备2发送听音指令"); FlowStatus.IsListening = true; - // Thread.Sleep(2000); + Thread.Sleep(2000); new Thread(ListeningTimer) { IsBackground = true }.Start(); } diff --git a/Correlator/Util/PlayWav.cs b/Correlator/Util/PlayWav.cs index de282b1..32784f1 100644 --- a/Correlator/Util/PlayWav.cs +++ b/Correlator/Util/PlayWav.cs @@ -6,12 +6,11 @@ { public class PlayWav { - private WaveOut _mPlayer; + private WaveOut _wavPlayer; - private WaveFormat _mFormat; + private WaveFormat _wavFormat; - //private WaveOutStream m_AudioStream; - private bool isPlaying; + private bool _isPlaying; private WaveOutStream _waveOutStream; #region 单例 @@ -30,108 +29,96 @@ public void InitWaveOut() { - Stop(); + if (_isPlaying) + { + Stop(); + } + try { //必须填入文件名,否则ws无法实例化 var ws = new WaveOutStream("AutoGenerateCache." + _index++ + ".txt"); - _mFormat = ws.Format; _waveOutStream = ws; + _waveOutStream.Position = 0; + _wavFormat = ws.Format; + + _wavPlayer = new WaveOut(-1, _wavFormat, _wavFormat.nAvgBytesPerSec, 20, StreamBufferFiller); + _isPlaying = true; } catch (Exception e) { LogWithConsole.WriteLine(e.Message, "PlayWav"); - CloseFile(); } - - if (_waveOutStream == null) return; - _waveOutStream.Position = 0; - _mPlayer = new WaveOut(-1, _mFormat, _mFormat.nAvgBytesPerSec, 20, Filler); - isPlaying = true; } public void Stop() { - if (_mPlayer != null) - { - try - { - _mPlayer.Dispose(); - } - finally - { - _mPlayer = null; - } - } + if (_wavPlayer == null) return; - CloseFile(); - } + _wavPlayer.Dispose(); + _wavPlayer = null; - private void CloseFile() - { - if (_waveOutStream == null) return; - try - { - _waveOutStream.Close(); - } - finally - { - _waveOutStream = null; - } + //TODO 待优化。每次点击结束听音,但是While循环并没有立即结束,所以循环会直接报错 + // if (_waveOutStream == null) return; + // + // _waveOutStream.Close(); + // _waveOutStream = null; } public void Listen(byte[] bytesData) { - var totalReceivedBytesNum = 0; var receiveBytesNum = bytesData.Length; if (_waveOutStream == null) return; lock (this) { _waveOutStream.Write(bytesData, 0, receiveBytesNum); - totalReceivedBytesNum += receiveBytesNum; } } - private void Filler(IntPtr data, int size) + private void StreamBufferFiller(IntPtr data, int size) { - var b = new byte[size]; + var buffer = new byte[size]; if (_waveOutStream != null) { var pos = 0; while (pos < size) { - var toget = size - pos; - var got = _waveOutStream.Read(b, pos, toget); + var totalGet = size - pos; + var got = _waveOutStream.Read(buffer, pos, totalGet); if (got <= 0) { Thread.Sleep(1000); - //Console.WriteLine("Got bytes: {0}", got); } - if (got < toget) + if (got < totalGet) + { _waveOutStream.Position = 0; // loop if the file ends + } + pos += got; } } else { - for (int i = 0; i < b.Length; i++) - b[i] = 0; + for (var i = 0; i < buffer.Length; i++) + { + buffer[i] = 0; + } } - Marshal.Copy(b, 0, data, size); + Marshal.Copy(buffer, 0, data, size); } private void Dispose() { - if (_mPlayer == null) return; + if (_wavPlayer == null) return; try { - _mPlayer.Dispose(); + _wavPlayer.Dispose(); } finally { - _mPlayer = null; + _wavPlayer = null; } } diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml.cs b/Correlator/UserControlPage/AuditionUserControl.xaml.cs index c8552ac..d8d4d54 100644 --- a/Correlator/UserControlPage/AuditionUserControl.xaml.cs +++ b/Correlator/UserControlPage/AuditionUserControl.xaml.cs @@ -136,7 +136,7 @@ private void SendSoundCollectCmd(object devCode) { //音频输出 - // PlayWav.Instance.InitWaveOut(); + PlayWav.Instance.InitWaveOut(); //停止状态采集指令的发送 FlowStatus.CanGetSignal = false; @@ -144,7 +144,7 @@ SenderClass.SendSoundCollectCmd(SerialPortManager.Instance.SerialPort, devCode as string); Growl.Success(DevCode.Dev1.Equals(devCode as string) ? "设备1发送听音指令" : "设备2发送听音指令"); FlowStatus.IsListening = true; - // Thread.Sleep(2000); + Thread.Sleep(2000); new Thread(ListeningTimer) { IsBackground = true }.Start(); } diff --git a/Correlator/Util/PlayWav.cs b/Correlator/Util/PlayWav.cs index de282b1..32784f1 100644 --- a/Correlator/Util/PlayWav.cs +++ b/Correlator/Util/PlayWav.cs @@ -6,12 +6,11 @@ { public class PlayWav { - private WaveOut _mPlayer; + private WaveOut _wavPlayer; - private WaveFormat _mFormat; + private WaveFormat _wavFormat; - //private WaveOutStream m_AudioStream; - private bool isPlaying; + private bool _isPlaying; private WaveOutStream _waveOutStream; #region 单例 @@ -30,108 +29,96 @@ public void InitWaveOut() { - Stop(); + if (_isPlaying) + { + Stop(); + } + try { //必须填入文件名,否则ws无法实例化 var ws = new WaveOutStream("AutoGenerateCache." + _index++ + ".txt"); - _mFormat = ws.Format; _waveOutStream = ws; + _waveOutStream.Position = 0; + _wavFormat = ws.Format; + + _wavPlayer = new WaveOut(-1, _wavFormat, _wavFormat.nAvgBytesPerSec, 20, StreamBufferFiller); + _isPlaying = true; } catch (Exception e) { LogWithConsole.WriteLine(e.Message, "PlayWav"); - CloseFile(); } - - if (_waveOutStream == null) return; - _waveOutStream.Position = 0; - _mPlayer = new WaveOut(-1, _mFormat, _mFormat.nAvgBytesPerSec, 20, Filler); - isPlaying = true; } public void Stop() { - if (_mPlayer != null) - { - try - { - _mPlayer.Dispose(); - } - finally - { - _mPlayer = null; - } - } + if (_wavPlayer == null) return; - CloseFile(); - } + _wavPlayer.Dispose(); + _wavPlayer = null; - private void CloseFile() - { - if (_waveOutStream == null) return; - try - { - _waveOutStream.Close(); - } - finally - { - _waveOutStream = null; - } + //TODO 待优化。每次点击结束听音,但是While循环并没有立即结束,所以循环会直接报错 + // if (_waveOutStream == null) return; + // + // _waveOutStream.Close(); + // _waveOutStream = null; } public void Listen(byte[] bytesData) { - var totalReceivedBytesNum = 0; var receiveBytesNum = bytesData.Length; if (_waveOutStream == null) return; lock (this) { _waveOutStream.Write(bytesData, 0, receiveBytesNum); - totalReceivedBytesNum += receiveBytesNum; } } - private void Filler(IntPtr data, int size) + private void StreamBufferFiller(IntPtr data, int size) { - var b = new byte[size]; + var buffer = new byte[size]; if (_waveOutStream != null) { var pos = 0; while (pos < size) { - var toget = size - pos; - var got = _waveOutStream.Read(b, pos, toget); + var totalGet = size - pos; + var got = _waveOutStream.Read(buffer, pos, totalGet); if (got <= 0) { Thread.Sleep(1000); - //Console.WriteLine("Got bytes: {0}", got); } - if (got < toget) + if (got < totalGet) + { _waveOutStream.Position = 0; // loop if the file ends + } + pos += got; } } else { - for (int i = 0; i < b.Length; i++) - b[i] = 0; + for (var i = 0; i < buffer.Length; i++) + { + buffer[i] = 0; + } } - Marshal.Copy(b, 0, data, size); + Marshal.Copy(buffer, 0, data, size); } private void Dispose() { - if (_mPlayer == null) return; + if (_wavPlayer == null) return; try { - _mPlayer.Dispose(); + _wavPlayer.Dispose(); } finally { - _mPlayer = null; + _wavPlayer = null; } } diff --git a/Correlator/Util/SerialPortManager.cs b/Correlator/Util/SerialPortManager.cs index 404db4d..048118d 100644 --- a/Correlator/Util/SerialPortManager.cs +++ b/Correlator/Util/SerialPortManager.cs @@ -264,6 +264,7 @@ } FlowStatus.ElapseTime = 0; + //写入缓存区 PlayWav.Instance.Listen(bytesData); //保存听音数据