private void ComputeDo3Band(byte[] pkgData, long lBytesToWrite, WAVEFORMATEXTENSION _waveFormat) { if (GetAudioData(pkgData, lBytesToWrite, _waveFormat)) { EQSTATE eqs = new EQSTATE(); AudioBandsConfig.init_3band_state(eqs, LowFrequence, HighFrequence, (int)_waveFormat.NSamplesPerSec); //for (int i = 0; i < m_nNumSamples; i++) for (int i = 0; i < m_RealIn_RT.Count; i++) { m_Band_arr.Add(AudioBandsConfig.do_3band(eqs, m_RealIn_RT[i])); m_BandLow_arr.Add(AudioBandsConfig.do_3bandLow(eqs, m_RealIn_LT[i])); } double A2, dSum = 0, A2Low, dSumLow = 0; for (int i = 0; i < m_Band_arr.Count; i++) { A2 = m_Band_arr[i] * m_Band_arr[i]; dSum += A2; A2Low = m_BandLow_arr[i] * m_BandLow_arr[i]; dSumLow += A2Low; } double dAvg = dSum / m_nNumSamples; double dAvgLow = dSumLow / m_nNumSamples; double dFinal = Math.Sqrt(dAvg); double dFinalLow = Math.Sqrt(dAvgLow); double dOutput = dFinal * Math.Sqrt(2) / 32768 * 100; double dOutputLow = dFinalLow * Math.Sqrt(2) / 32768 * 100; _audiopluseCallBack(dOutput, dOutputLow); } }
private bool GetAudioData(byte[] pkgData, long lBytesToWrite, WAVEFORMATEXTENSION waveFormat) { const double FFT_SPEED = 0.006; var m_nBufferSize = AudioBandsConfig.NextPowerOfTwo((int)(waveFormat.NAvgBytesPerSec * FFT_SPEED)); m_nNumSamples = m_nBufferSize / waveFormat.NBlockAlign; //m_RealIn_RT.Clear(); //m_RealIn_LT.Clear(); //m_Band_arr.Clear(); //m_BandLow_arr.Clear(); switch (waveFormat.WBitsPerSample) { case 8: break; case 16: if (waveFormat.NChannels == 1) // mono { int Samples = m_nNumSamples >> 1; for (int i = 0; i < Samples; ++i) { m_RealIn_RT[i] = (float)(pkgData[i]); m_RealIn_LT[i] = m_RealIn_RT[i]; } m_nNumSamples = Samples; } //else if (waveFormat.NChannels == 2) // stereo else { // Stereo has Left+Right channels int Samples = m_nNumSamples >> 2; //for (int i = 0, j = 0; i < Samples; ++i, j += 2) for (int i = 0, j = 0; i < pkgData.Length; ++i, j += 2) { if (j >= pkgData.Length) { continue; } if (pkgData[j] == 0) { m_RealIn_RT.Add(0); if (pkgData[j + 1] == 0) { m_RealIn_LT.Add(0); } else if (pkgData[j + 1] != 0) { m_RealIn_LT.Add((float)(pkgData[j + 1])); } } else { m_RealIn_RT.Add((float)(pkgData[j])); m_RealIn_LT.Add((float)(pkgData[j + 1])); } m_nNumSamples = Samples; } } break; } return(true); }