Example #1
0
            /// <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]);
                        }
                    }
                }
            }
Example #2
0
 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();
         }
     }
 }
Example #3
0
 /// <summary>
 /// 线程处理函数:正常工作数据处理
 /// </summary>
 void ThreadFreqWaveStart()
 {
     while (true)
     {
         FreqWaveEvent.WaitOne();
         var dataPoints = NewFFT.Start(WorkWavefdatas, 1024 * 16);//用前3000个点
         if (FrapPointGraphEventHandler != null)
         {
             FrapPointGraphEventHandler(null, dataPoints);
         }
     }
 }