Esempio n. 1
0
        /// <summary>
        /// 音频数据更新
        /// </summary>
        /// <param name="args"></param>
        private void AudioInput_DataGenerated(DataGeneratedEventArgs args)
        {
            double[][] samples = args.Samples;

            if (samples.Length == 0)
            {
                return;
            }

            //源波
            double[] souceWave = samples[0];

            List <double> sampledData = new List <double>();

            //采样后的信号
            double[] sampledWave = new double[souceWave.Count()];
            int      impact      = (int)(_samplingFrequency / Param.secSamplingFrequency);

            for (int i = 0; i < souceWave.Count(); i++)
            {
                if (i % impact == 0)
                {
                    sampledWave[i] = souceWave[i];
                    sampledData.Add(souceWave[i]);
                }
                else
                {
                    sampledWave[i] = 0.0;
                }
            }



            //为示波器输入数据
            if (m_WaveformMonitor != null)
            {
                double[][] waveData = new double[_seriesNames.Count()][];
                waveData[0] = souceWave;
                waveData[1] = sampledWave;
                m_WaveformMonitor.FeedData(waveData);
            }

            List <double> pcmCode = new List <double>();

            foreach (var item in sampledData)
            {
                int[] codes = PCMCaculator.PCM_Encode(item);
                foreach (var code in codes)
                {
                    pcmCode.Add(code);
                }
            }
            //为示波器输入数据
            if (m_CodeMonitor != null)
            {
                double[][] Data = new double[1][];
                Data[0] = pcmCode.ToArray();
                m_CodeMonitor.FeedData(Data);
            }
        }
        private void TextChange_InputVal(object sender, TextChangedEventArgs e)
        {
            TextBox tb = sender as TextBox;

            if (tb.Text == null)
            {
                return;
            }

            try
            {
                //填写
                double val   = double.Parse(tb.Text);
                int[]  codes = PCMCaculator.PCM_Encode(val);
                string ans   = "|";
                foreach (var code in codes)
                {
                    ans = ans + " " + code.ToString() + " |";
                }
                EncodeStrTextBlock.Text = ans;

                //更新PCM显示器数据
                SeriesPoint[] points = new SeriesPoint[codes.Length + 1];
                for (int i = 0; i < codes.Length; i++)
                {
                    points[i].X = i;
                    points[i].Y = codes[i];
                }
                points[codes.Length].X = codes.Length;
                points[codes.Length].Y = codes[codes.Length - 1];
                _chart.ViewXY.PointLineSeries[0].Points = points;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                return;
            }
        }