コード例 #1
0
        static byte[][] pBufferOut = new byte[2][];       // 用于录音的两块缓冲区
        public void initWave()
        {
            // 初始化waveform
            waveform.wFormatTag      = WAVE_FORMAT_PCM; // 采样方式,PCM(脉冲编码调制)
            waveform.nChannels       = 1;               // 单声道
            waveform.nSamplesPerSec  = 8000;            // 采样率 8KHz
            waveform.nAvgBytesPerSec = 8000;            // 数据率 8KB/s
            waveform.nBlockAlign     = 1;               // 最小块单元,wBitsPerSample×nChannels/8
            waveform.wBitsPerSample  = 8;               // 样本大小为8bit
            waveform.cbSize          = 0;               // 附加格式信息

            for (int HdrNum = 0; HdrNum < 2; HdrNum++)
            {
                // 为缓冲区分配内存
                pBufferIn[HdrNum]  = new byte[INP_BUFFER_SIZE * 2]; // 播放缓冲区
                pBufferOut[HdrNum] = new byte[INP_BUFFER_SIZE];     // 录音缓冲区

                pWaveHdrIn[HdrNum]  = new waveStruct.wavehdr_tag(); //  录音设备结构
                pWaveHdrOut[HdrNum] = new waveStruct.wavehdr_tag(); //  播放设备结构

                pWaveHdrOut[HdrNum].lpData          = pBufferOut[HdrNum];
                pWaveHdrOut[HdrNum].dwBufferLength  = INP_BUFFER_SIZE * 2;
                pWaveHdrOut[HdrNum].dwBytesRecorded = 0;
                pWaveHdrOut[HdrNum].dwUser          = 0;
                pWaveHdrOut[HdrNum].dwFlags         = WHDR_BEGINLOOP | WHDR_ENDLOOP;
                pWaveHdrOut[HdrNum].dwLoops         = 1;
                pWaveHdrOut[HdrNum].lpNext          = IntPtr.Zero;
                pWaveHdrOut[HdrNum].reserved        = 0;

                pWaveHdrIn[HdrNum].lpData          = pBufferOut[HdrNum];
                pWaveHdrIn[HdrNum].dwBufferLength  = INP_BUFFER_SIZE;
                pWaveHdrIn[HdrNum].dwBytesRecorded = 0;
                pWaveHdrIn[HdrNum].dwUser          = 0;
                pWaveHdrIn[HdrNum].dwFlags         = WHDR_BEGINLOOP | WHDR_ENDLOOP;
                pWaveHdrIn[HdrNum].dwLoops         = 1;
                pWaveHdrIn[HdrNum].lpNext          = IntPtr.Zero;
                pWaveHdrIn[HdrNum].reserved        = 0;
            }

            int result = 0;

            // 打开播放波形音频设备
            result = WaveAPI.waveOutOpen(hWaveOut, WAVE_MAPPER, ref waveform, 0, 0, CALLBACK_WINDOW);

            // 打开录制波形音频设备
            if (result == 0)
            {
                result = WaveAPI.waveInOpen(hWaveIn, WAVE_MAPPER, ref waveform, 0, 0, CALLBACK_WINDOW);
            }
        }
コード例 #2
0
 public static extern int waveOutPrepareHeader(IntPtr hwave, ref waveStruct.wavehdr_tag wavehdr, int usize);