Exemplo n.º 1
0
 public override void UninitializeAudio()
 {
     if (null != _audioEndpointVolume)
     {
         _audioEndpointVolume.UnregisterControlChangeNotify(classCallBack);
     }
     if (null != _audioClient)
     {
         _audioClient.Stop();
     }
     if (null != _audioMeter)
     {
         //For wait audio meter thread stop. then release memory
         Thread.Sleep(100);
         Marshal.ReleaseComObject(_audioMeter);
         _audioMeter = null;
     }
     if (null != _audioClient)
     {
         Marshal.ReleaseComObject(_audioClient);
         _audioClient = null;
     }
     if (null != _audioEndpointVolume)
     {
         Marshal.ReleaseComObject(_audioEndpointVolume);
         _audioEndpointVolume = null;
     }
     if (null != waveFormat)
     {
         waveFormat = null;
     }
     base.UninitializeAudio();
 }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// The Setup Wave Format
 /// </summary>
 /// <param name="_waveFormat"></param>
 private void SetupWaveFormat(WAVEFORMATEXTENSION _waveFormat)
 {
     switch (_waveFormat.WFormatTag)
     {
     case WaveFormat.Extensible:
         _waveFormat.WBitsPerSample  = 16;
         _waveFormat.NBlockAlign     = (ushort)(_waveFormat.NChannels * _waveFormat.WBitsPerSample / 8);
         _waveFormat.NAvgBytesPerSec = _waveFormat.NBlockAlign * _waveFormat.NSamplesPerSec;
         break;
     }
 }
Exemplo n.º 4
0
        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);
        }