Ejemplo n.º 1
0
        private void UpdateLevelMeter(byte[] pcmData)
        {
            // このスレッドは描画できないので注意。

            double[] peakDb;
            double[] peakHoldDb;

            lock (mLock) {
                mLevelMeter.Update(pcmData);

                if (mLevelMeter.NumChannels <= 2)
                {
                    peakDb     = new double[2];
                    peakHoldDb = new double[2];

                    for (int ch = 0; ch < 2; ++ch)
                    {
                        peakDb[ch]     = mLevelMeter.GetPeakDb(ch);
                        peakHoldDb[ch] = mLevelMeter.GetPeakHoldDb(ch);
                    }
                }
                else
                {
                    peakDb     = new double[8];
                    peakHoldDb = new double[8];

                    for (int ch = 0; ch < 8; ++ch)
                    {
                        peakDb[ch]     = mLevelMeter.GetPeakDb(ch);
                        peakHoldDb[ch] = mLevelMeter.GetPeakHoldDb(ch);
                    }
                }
            }

            Dispatcher.BeginInvoke(new Action(delegate() {
                // 描画スレッドで描画する。
                mLevelMeterUC.UpdateLevelMeter(peakDb, peakHoldDb);
            }));
        }