Example #1
0
        /// <summary>
        /// 服务启动调用
        /// </summary>
        public void Init()
        {
            //以下初始化音频采集
            for (int i = 0; i < MAXRECBUFFER; i++)
            {
                var hdr = new PcmAudio.WaveHdr
                {
                    lpData         = Marshal.AllocHGlobal(RECBUFFER),
                    dwBufferLength = (UInt32)RECBUFFER
                };
                globalhdr[i] = hdr;
            }

            lpFormat.wFormatTag      = 1;     //声音格式为PCM
            lpFormat.nChannels       = 1;     //采样声道数,对于单声道音频设置为1,立体声设置为2
            lpFormat.wBitsPerSample  = 16;    //采样比特  16bits/次
            lpFormat.cbSize          = 0;     //一般为0
            lpFormat.nSamplesPerSec  = 8000;  //采样率 8000 次/秒
            lpFormat.nBlockAlign     = 2;     //一个块的大小,采样bit的字节数乘以声道数
            lpFormat.nAvgBytesPerSec = 16000; //每秒的数据率,就是每秒能采集多少字节的数据

            ////初始化音频格式结构体
            //lpFormatPlay.wFormatTag = 1;//声音格式为PCM
            //lpFormatPlay.nChannels = 1;
            //lpFormatPlay.wBitsPerSample = 16;
            //lpFormatPlay.cbSize = 0;
            //lpFormatPlay.nSamplesPerSec = 8000;
            //lpFormatPlay.nAvgBytesPerSec = 16000;
            //lpFormatPlay.nBlockAlign = 2;
        }
Example #2
0
 /// <summary>
 /// 喊话处理
 /// </summary>
 /// <param name="hdr"></param>
 private void OnSoundData(PcmAudio.WaveHdr hdr)
 {
     if (!IsRecoding)
     {
         return;
     }
     if (hdr.dwBytesRecorded == 0)
     {
         return;
     }
     //使采集过程,直到此buffer已经沾满,不能再填充
     PcmAudio.waveInUnprepareHeader(hRecord, ref hdr, (UInt32)Marshal.SizeOf(typeof(PcmAudio.WaveHdr)));
     //将采集到的声音发送给播放线程
     if (hdr.lpData != IntPtr.Zero)
     {
         DataProc(hdr.dwBytesRecorded, hdr.lpData);
     }
 }