public void Update(byte [] pcm) { for (int ch = 0; ch < mCh; ++ch) { mPeakCalcArray[ch].UpdateBegin(); } int sampleBytes = WasapiCS.SampleFormatTypeToUseBitsPerSample(mSampleFormat) / 8; int nFrames = pcm.Length / (mCh * sampleBytes); int pos = 0; for (int n = 0; n < nFrames; ++n) { for (int ch = 0; ch < mCh; ++ch) { double v = GetSampleValue(pcm, pos); mPeakCalcArray[ch].NextSample(v); pos += sampleBytes; } } for (int ch = 0; ch < mCh; ++ch) { mPeakCalcArray[ch].UpdateEnd(); if (0 < mPeakHoldSec) { // 最後のピーク値 x 時間減衰。 double lastPeakDb = mLastPeakLevelDb[ch] - ReleaseTimeDbPerSec * mSw.ElapsedMilliseconds / 1000.0; if (mPeakCalcArray[ch].PeakDb < lastPeakDb) { mPeakCalcArray[ch].UpdatePeakDbTo(lastPeakDb); } mLastPeakLevelDb[ch] = mPeakCalcArray[ch].PeakDb; } } mSw.Restart(); }