/// <summary> /// 线程函数处理:正常工作数据处理 /// </summary> void ThreadWorkWaveStart() { while (true) { WorkBytesEvent.WaitOne(); var r = new byte[4]; for (int i = 0; i < ConstUdpArg.ARRAY_NUM; i++) { for (int j = 0; j < ConstUdpArg.WORK_FRAME_NUMS * ConstUdpArg.WORK_FRAME_LENGTH; j++) { r[0] = WorkWaveBytes[i][j * 4 + 3]; r[1] = WorkWaveBytes[i][j * 4 + 2]; r[2] = WorkWaveBytes[i][j * 4 + 1]; r[3] = WorkWaveBytes[i][j * 4]; int a = BitConverter.ToInt32(r, 0); float tmp = a / 1048576.0f; // float tmp = a / 2.0f; WorkWaveFloats[i][j] = tmp; //听音数据处理 float f = WorkWaveFloats[i][j] * ListenCoefficent; short sh; if (f > 32767) { sh = 32767; } else if (f <= -32767) { sh = -32767; } else { sh = (short)f; } var x = BitConverter.GetBytes(sh); Array.Copy(x, 0, PlayWaveBytes[i], j * 2, 2); } } var offset = ConstUdpArg.offsetArray[0]; WorkWavefdatas = WorkWaveFloats[offset - 1]; WorkEnergyEvent.Set(); FreqWaveEvent.Set(); if (PreGraphEventHandler != null) { PreGraphEventHandler.Invoke(null, WorkWavefdatas); } // if (BckGraphEventHandler != null) BckGraphEventHandler.Invoke(null, WorkWaveTwo); if (SoundEventHandler != null) { int channel = 0; if (channel > 0) { SoundEventHandler.Invoke(null, PlayWaveBytes[channel]); } } } }
protected virtual void Dispose(bool disposing) { ReleaseUnmanagedResources(); if (disposing) { if (WorkBytesEvent != null) { WorkBytesEvent.Dispose(); } if (OrigBytesEvent != null) { OrigBytesEvent.Dispose(); } if (DelayBytesEvent != null) { DelayBytesEvent.Dispose(); } if (WorkEnergyEvent != null) { WorkEnergyEvent.Dispose(); } if (FreqWaveEvent != null) { FreqWaveEvent.Dispose(); } if (OrigThread != null) { OrigThread.Abort(); if (OrigThread.ThreadState != ThreadState.Aborted) { Thread.Sleep(100); } } if (DelayThread != null) { DelayThread.Abort(); } if (WorkThread != null) { WorkThread.Abort(); if (WorkThread.ThreadState != ThreadState.Aborted) { Thread.Sleep(100); } } if (EnergyThread != null) { EnergyThread.Abort(); } if (FreqThread != null) { FreqThread.Abort(); } } }
/// <summary> ///线程处理函数:能量数据处理 /// </summary> void ThreadEnergyStart() { while (true) { WorkEnergyEvent.WaitOne(); double ftemp = 0; for (int i = 0; i < WorkWaveFloats.Length; i++) { float f = WorkWaveFloats[i].Max(); ftemp = Math.Abs(f); EnergyFloats[i] = (float)ftemp; } float max = EnergyFloats.Max(); for (int i = 0; i < EnergyFloats.Length; i++) { if (Math.Abs(max) > float.Epsilon) { EnergyFloats[i] = EnergyFloats[i] / max; } else { EnergyFloats[i] = 0; } } List <float> rlist = new List <float>(); for (int i = 0; i < EnergyFloats.Length; i++) { if ((i % 32) < 8) { rlist.Add(EnergyFloats[i]); } } if (EnergyArrayEventHandler != null) { EnergyArrayEventHandler.Invoke(null, rlist.ToArray()); } } }