diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml b/Correlator/UserControlPage/AuditionUserControl.xaml
index af6bf8d..2a4fdee 100644
--- a/Correlator/UserControlPage/AuditionUserControl.xaml
+++ b/Correlator/UserControlPage/AuditionUserControl.xaml
@@ -131,10 +131,11 @@
@@ -179,11 +180,11 @@
diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml b/Correlator/UserControlPage/AuditionUserControl.xaml
index af6bf8d..2a4fdee 100644
--- a/Correlator/UserControlPage/AuditionUserControl.xaml
+++ b/Correlator/UserControlPage/AuditionUserControl.xaml
@@ -131,10 +131,11 @@
@@ -179,11 +180,11 @@
diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml.cs b/Correlator/UserControlPage/AuditionUserControl.xaml.cs
index a7c8c78..c8552ac 100644
--- a/Correlator/UserControlPage/AuditionUserControl.xaml.cs
+++ b/Correlator/UserControlPage/AuditionUserControl.xaml.cs
@@ -1,7 +1,12 @@
-using System.Windows;
+using System.Threading;
+using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
+using Correlator.SensorHubTag;
+using Correlator.Util;
+using HandyControl.Controls;
+using MessageBox = HandyControl.Controls.MessageBox;
namespace Correlator.UserControlPage
{
@@ -79,5 +84,84 @@
BottomHorizontalLineGrid.Children.Add(shorterScale);
}
}
+
+ private void SensorACheckBox_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (!SerialPortManager.Instance.PortIsReady())
+ {
+ MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+
+ if (SensorACheckBox.IsChecked == false || SensorACheckBox.IsChecked == null)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
+ }
+ else
+ {
+ if (SensorBCheckBox.IsChecked == true)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
+ SensorBCheckBox.IsChecked = false;
+ }
+
+ new Thread(SendSoundCollectCmd) { IsBackground = true }.Start(DevCode.Dev1);
+ }
+ }
+
+ private void SensorBCheckBox_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (!SerialPortManager.Instance.PortIsReady())
+ {
+ MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+
+ if (SensorBCheckBox.IsChecked == false || SensorBCheckBox.IsChecked == null)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
+ }
+ else
+ {
+ if (SensorACheckBox.IsChecked == true)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
+ SensorACheckBox.IsChecked = false;
+ }
+
+ new Thread(SendSoundCollectCmd) { IsBackground = true }.Start(DevCode.Dev2);
+ }
+ }
+
+ private void SendSoundCollectCmd(object devCode)
+ {
+ //音频输出
+ // PlayWav.Instance.InitWaveOut();
+
+ //停止状态采集指令的发送
+ FlowStatus.CanGetSignal = false;
+ Thread.Sleep(3000);
+ SenderClass.SendSoundCollectCmd(SerialPortManager.Instance.SerialPort, devCode as string);
+ Growl.Success(DevCode.Dev1.Equals(devCode as string) ? "设备1发送听音指令" : "设备2发送听音指令");
+ FlowStatus.IsListening = true;
+ // Thread.Sleep(2000);
+
+ new Thread(ListeningTimer) { IsBackground = true }.Start();
+ }
+
+ private void ListeningTimer()
+ {
+ while (FlowStatus.IsListening)
+ {
+ Thread.Sleep(1000);
+ if (++FlowStatus.ElapseTime >= 15)
+ {
+ MessageBox.Show("接收不到数据,请重启软件", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Information);
+ break;
+ }
+ }
+
+ FlowStatus.ElapseTime = 0;
+ }
}
}
\ No newline at end of file
diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml b/Correlator/UserControlPage/AuditionUserControl.xaml
index af6bf8d..2a4fdee 100644
--- a/Correlator/UserControlPage/AuditionUserControl.xaml
+++ b/Correlator/UserControlPage/AuditionUserControl.xaml
@@ -131,10 +131,11 @@
@@ -179,11 +180,11 @@
diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml.cs b/Correlator/UserControlPage/AuditionUserControl.xaml.cs
index a7c8c78..c8552ac 100644
--- a/Correlator/UserControlPage/AuditionUserControl.xaml.cs
+++ b/Correlator/UserControlPage/AuditionUserControl.xaml.cs
@@ -1,7 +1,12 @@
-using System.Windows;
+using System.Threading;
+using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
+using Correlator.SensorHubTag;
+using Correlator.Util;
+using HandyControl.Controls;
+using MessageBox = HandyControl.Controls.MessageBox;
namespace Correlator.UserControlPage
{
@@ -79,5 +84,84 @@
BottomHorizontalLineGrid.Children.Add(shorterScale);
}
}
+
+ private void SensorACheckBox_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (!SerialPortManager.Instance.PortIsReady())
+ {
+ MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+
+ if (SensorACheckBox.IsChecked == false || SensorACheckBox.IsChecked == null)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
+ }
+ else
+ {
+ if (SensorBCheckBox.IsChecked == true)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
+ SensorBCheckBox.IsChecked = false;
+ }
+
+ new Thread(SendSoundCollectCmd) { IsBackground = true }.Start(DevCode.Dev1);
+ }
+ }
+
+ private void SensorBCheckBox_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (!SerialPortManager.Instance.PortIsReady())
+ {
+ MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+
+ if (SensorBCheckBox.IsChecked == false || SensorBCheckBox.IsChecked == null)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
+ }
+ else
+ {
+ if (SensorACheckBox.IsChecked == true)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
+ SensorACheckBox.IsChecked = false;
+ }
+
+ new Thread(SendSoundCollectCmd) { IsBackground = true }.Start(DevCode.Dev2);
+ }
+ }
+
+ private void SendSoundCollectCmd(object devCode)
+ {
+ //音频输出
+ // PlayWav.Instance.InitWaveOut();
+
+ //停止状态采集指令的发送
+ FlowStatus.CanGetSignal = false;
+ Thread.Sleep(3000);
+ SenderClass.SendSoundCollectCmd(SerialPortManager.Instance.SerialPort, devCode as string);
+ Growl.Success(DevCode.Dev1.Equals(devCode as string) ? "设备1发送听音指令" : "设备2发送听音指令");
+ FlowStatus.IsListening = true;
+ // Thread.Sleep(2000);
+
+ new Thread(ListeningTimer) { IsBackground = true }.Start();
+ }
+
+ private void ListeningTimer()
+ {
+ while (FlowStatus.IsListening)
+ {
+ Thread.Sleep(1000);
+ if (++FlowStatus.ElapseTime >= 15)
+ {
+ MessageBox.Show("接收不到数据,请重启软件", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Information);
+ break;
+ }
+ }
+
+ FlowStatus.ElapseTime = 0;
+ }
}
}
\ No newline at end of file
diff --git a/Correlator/Util/PlayWav.cs b/Correlator/Util/PlayWav.cs
index a3e8825..de282b1 100644
--- a/Correlator/Util/PlayWav.cs
+++ b/Correlator/Util/PlayWav.cs
@@ -11,7 +11,7 @@
private WaveFormat _mFormat;
//private WaveOutStream m_AudioStream;
-
+ private bool isPlaying;
private WaveOutStream _waveOutStream;
#region 单例
@@ -26,12 +26,15 @@
#endregion
+ private int _index;
+
public void InitWaveOut()
{
+ Stop();
try
{
//必须填入文件名,否则ws无法实例化
- var ws = new WaveOutStream("AutoGenerate.txt");
+ var ws = new WaveOutStream("AutoGenerateCache." + _index++ + ".txt");
_mFormat = ws.Format;
_waveOutStream = ws;
}
@@ -43,7 +46,8 @@
if (_waveOutStream == null) return;
_waveOutStream.Position = 0;
- _mPlayer = new WaveOut(-1, _mFormat, _mFormat.nAvgBytesPerSec, 20, new BufferFillEventHandler(Filler));
+ _mPlayer = new WaveOut(-1, _mFormat, _mFormat.nAvgBytesPerSec, 20, Filler);
+ isPlaying = true;
}
public void Stop()
@@ -78,15 +82,16 @@
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)
{
var b = new byte[size];
@@ -100,7 +105,7 @@
if (got <= 0)
{
Thread.Sleep(1000);
- // Console.WriteLine("Got bytes: {0}", got);
+ //Console.WriteLine("Got bytes: {0}", got);
}
if (got < toget)
@@ -110,14 +115,13 @@
}
else
{
- for (var i = 0; i < b.Length; i++)
+ for (int i = 0; i < b.Length; i++)
b[i] = 0;
}
Marshal.Copy(b, 0, data, size);
}
-
private void Dispose()
{
if (_mPlayer == null) return;
diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml b/Correlator/UserControlPage/AuditionUserControl.xaml
index af6bf8d..2a4fdee 100644
--- a/Correlator/UserControlPage/AuditionUserControl.xaml
+++ b/Correlator/UserControlPage/AuditionUserControl.xaml
@@ -131,10 +131,11 @@
@@ -179,11 +180,11 @@
diff --git a/Correlator/UserControlPage/AuditionUserControl.xaml.cs b/Correlator/UserControlPage/AuditionUserControl.xaml.cs
index a7c8c78..c8552ac 100644
--- a/Correlator/UserControlPage/AuditionUserControl.xaml.cs
+++ b/Correlator/UserControlPage/AuditionUserControl.xaml.cs
@@ -1,7 +1,12 @@
-using System.Windows;
+using System.Threading;
+using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Shapes;
+using Correlator.SensorHubTag;
+using Correlator.Util;
+using HandyControl.Controls;
+using MessageBox = HandyControl.Controls.MessageBox;
namespace Correlator.UserControlPage
{
@@ -79,5 +84,84 @@
BottomHorizontalLineGrid.Children.Add(shorterScale);
}
}
+
+ private void SensorACheckBox_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (!SerialPortManager.Instance.PortIsReady())
+ {
+ MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+
+ if (SensorACheckBox.IsChecked == false || SensorACheckBox.IsChecked == null)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
+ }
+ else
+ {
+ if (SensorBCheckBox.IsChecked == true)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
+ SensorBCheckBox.IsChecked = false;
+ }
+
+ new Thread(SendSoundCollectCmd) { IsBackground = true }.Start(DevCode.Dev1);
+ }
+ }
+
+ private void SensorBCheckBox_OnClick(object sender, RoutedEventArgs e)
+ {
+ if (!SerialPortManager.Instance.PortIsReady())
+ {
+ MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
+ return;
+ }
+
+ if (SensorBCheckBox.IsChecked == false || SensorBCheckBox.IsChecked == null)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
+ }
+ else
+ {
+ if (SensorACheckBox.IsChecked == true)
+ {
+ SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
+ SensorACheckBox.IsChecked = false;
+ }
+
+ new Thread(SendSoundCollectCmd) { IsBackground = true }.Start(DevCode.Dev2);
+ }
+ }
+
+ private void SendSoundCollectCmd(object devCode)
+ {
+ //音频输出
+ // PlayWav.Instance.InitWaveOut();
+
+ //停止状态采集指令的发送
+ FlowStatus.CanGetSignal = false;
+ Thread.Sleep(3000);
+ SenderClass.SendSoundCollectCmd(SerialPortManager.Instance.SerialPort, devCode as string);
+ Growl.Success(DevCode.Dev1.Equals(devCode as string) ? "设备1发送听音指令" : "设备2发送听音指令");
+ FlowStatus.IsListening = true;
+ // Thread.Sleep(2000);
+
+ new Thread(ListeningTimer) { IsBackground = true }.Start();
+ }
+
+ private void ListeningTimer()
+ {
+ while (FlowStatus.IsListening)
+ {
+ Thread.Sleep(1000);
+ if (++FlowStatus.ElapseTime >= 15)
+ {
+ MessageBox.Show("接收不到数据,请重启软件", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Information);
+ break;
+ }
+ }
+
+ FlowStatus.ElapseTime = 0;
+ }
}
}
\ No newline at end of file
diff --git a/Correlator/Util/PlayWav.cs b/Correlator/Util/PlayWav.cs
index a3e8825..de282b1 100644
--- a/Correlator/Util/PlayWav.cs
+++ b/Correlator/Util/PlayWav.cs
@@ -11,7 +11,7 @@
private WaveFormat _mFormat;
//private WaveOutStream m_AudioStream;
-
+ private bool isPlaying;
private WaveOutStream _waveOutStream;
#region 单例
@@ -26,12 +26,15 @@
#endregion
+ private int _index;
+
public void InitWaveOut()
{
+ Stop();
try
{
//必须填入文件名,否则ws无法实例化
- var ws = new WaveOutStream("AutoGenerate.txt");
+ var ws = new WaveOutStream("AutoGenerateCache." + _index++ + ".txt");
_mFormat = ws.Format;
_waveOutStream = ws;
}
@@ -43,7 +46,8 @@
if (_waveOutStream == null) return;
_waveOutStream.Position = 0;
- _mPlayer = new WaveOut(-1, _mFormat, _mFormat.nAvgBytesPerSec, 20, new BufferFillEventHandler(Filler));
+ _mPlayer = new WaveOut(-1, _mFormat, _mFormat.nAvgBytesPerSec, 20, Filler);
+ isPlaying = true;
}
public void Stop()
@@ -78,15 +82,16 @@
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)
{
var b = new byte[size];
@@ -100,7 +105,7 @@
if (got <= 0)
{
Thread.Sleep(1000);
- // Console.WriteLine("Got bytes: {0}", got);
+ //Console.WriteLine("Got bytes: {0}", got);
}
if (got < toget)
@@ -110,14 +115,13 @@
}
else
{
- for (var i = 0; i < b.Length; i++)
+ for (int i = 0; i < b.Length; i++)
b[i] = 0;
}
Marshal.Copy(b, 0, data, size);
}
-
private void Dispose()
{
if (_mPlayer == null) return;
diff --git a/Correlator/ViewModel/AuditionViewModel.cs b/Correlator/ViewModel/AuditionViewModel.cs
index 1ea67f4..250a696 100644
--- a/Correlator/ViewModel/AuditionViewModel.cs
+++ b/Correlator/ViewModel/AuditionViewModel.cs
@@ -2,24 +2,19 @@
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
-using System.Windows;
using System.Windows.Threading;
-using Correlator.SensorHubTag;
using Correlator.Util;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using GalaSoft.MvvmLight.Messaging;
using LiveCharts;
using LiveCharts.Defaults;
-using MessageBox = HandyControl.Controls.MessageBox;
namespace Correlator.ViewModel
{
public class AuditionViewModel : ViewModelBase
{
public RelayCommand GoBackCommand { get; set; }
- public RelayCommand SensorACheckCommand { get; set; }
- public RelayCommand SensorBCheckCommand { get; set; }
public RelayCommand MuteCommand { get; set; }
public IChartValues ColumnValues { get; set; } = new ChartValues();
@@ -68,18 +63,6 @@
}
}
- private bool _sensorAIsChecked;
-
- public bool SensorAIsChecked
- {
- get => _sensorAIsChecked;
- set
- {
- _sensorAIsChecked = value;
- RaisePropertyChanged(() => SensorAIsChecked);
- }
- }
-
///
/// 传感器B按钮
///
@@ -95,18 +78,6 @@
}
}
- private bool _sensorBIsChecked;
-
- public bool SensorBIsChecked
- {
- get => _sensorBIsChecked;
- set
- {
- _sensorBIsChecked = value;
- RaisePropertyChanged(() => SensorBIsChecked);
- }
- }
-
private bool _muteIsChecked = true;
public bool MuteIsChecked
@@ -141,62 +112,6 @@
public AuditionViewModel()
{
GoBackCommand = new RelayCommand(() => { Messenger.Default.Send("", MessengerToken.RemoveAudition); });
- SensorACheckCommand = new RelayCommand(() =>
- {
- if (!SerialPortManager.Instance.PortIsReady())
- {
- MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
- SensorAIsChecked = false;
- return;
- }
-
- if (_sensorAIsChecked)
- {
- if (_sensorBIsChecked)
- {
- LogWithConsole.WriteLine("停止B,采集A", "AuditionViewModel");
- //如果红色传感器工作中,那么就停止蓝色传感器
- SensorBIsChecked = false;
- SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
- }
-
- //下发手机音频指令,保存音频文件
- new Task(() => SaveAuditionFileTask(DevCode.Dev1)).Start();
- }
- else
- {
- LogWithConsole.WriteLine("停止A", "AuditionViewModel");
- SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
- }
- });
- SensorBCheckCommand = new RelayCommand(() =>
- {
- if (!SerialPortManager.Instance.PortIsReady())
- {
- MessageBox.Show("串口状态异常,无法操作", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
- SensorBIsChecked = false;
- return;
- }
-
- if (_sensorBIsChecked)
- {
- if (_sensorAIsChecked)
- {
- LogWithConsole.WriteLine("停止A,采集B", "AuditionViewModel");
- //如果蓝色传感器工作中,那么就停止红色传感器
- SensorAIsChecked = false;
- SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
- }
-
- //下发手机音频指令,保存音频文件
- new Task(() => SaveAuditionFileTask(DevCode.Dev2)).Start();
- }
- else
- {
- LogWithConsole.WriteLine("停止B", "AuditionViewModel");
- SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
- }
- });
//静音
MuteCommand = new RelayCommand(() =>
{
@@ -242,50 +157,6 @@
_statusTimer.Start();
}
- private void SaveAuditionFileTask(string devCode)
- {
- var wavInstance = PlayWav.Instance;
- wavInstance.Stop();
- wavInstance.InitWaveOut();
-
- FlowStatus.CanGetSignal = false; //停止状态采集指令的发送
- Thread.Sleep(3000);
- SenderClass.SendSoundCollectCmd(SerialPortManager.Instance.SerialPort, devCode);
- Thread.Sleep(2000);
- FlowStatus.IsListening = true;
- //计时,记录超过多长时间没有收到听音数据
- new Task(() =>
- {
- while (FlowStatus.IsListening)
- {
- Thread.Sleep(1500);
- if (++FlowStatus.ElapseTime >= 10)
- {
- MessageBox.Show("接收不到数据,请重启软件", "温馨提示", MessageBoxButton.OK, MessageBoxImage.Error);
- if (_sensorAIsChecked)
- {
- LogWithConsole.WriteLine("停止A,采集B", "AuditionViewModel");
- //如果蓝色传感器工作中,那么就停止红色传感器
- SensorAIsChecked = false;
- SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev1);
- }
-
- if (_sensorBIsChecked)
- {
- LogWithConsole.WriteLine("停止B,采集A", "AuditionViewModel");
- //如果红色传感器工作中,那么就停止蓝色传感器
- SensorBIsChecked = false;
- SenderClass.SendSoundStopCmd(SerialPortManager.Instance.SerialPort, DevCode.Dev2);
- }
-
- break;
- }
- }
-
- FlowStatus.ElapseTime = 0;
- }).Start();
- }
-
private void RandomTempValue()
{
var random = new Random();