资源简介
基于windows API函数用QT做界面的点对点语音聊天程序
代码片段和文件信息
#include “csound.h“
#include
//#pragma comment(lib“WINMM.LIB“)
CSound::CSound()
{
}
CSound::~CSound()
{
waveInClose(m_hWaveIn); //关闭录音设备
waveOutClose(m_hWaveOut); //关闭录音设备
}
void CSound::Init(MainWindow *dlg)
{
m_dlg=dlg;
if(waveInGetNumDevs()==0)
{
qDebug(“cannot2“);
}
if(waveOutGetNumDevs()==0)
{
}
m_soundFormat.wFormatTag=WAVE_FORMAT_PCM;
m_soundFormat.nChannels=1;
m_soundFormat.nSamplesPerSec=8000;
m_soundFormat.nAvgBytesPerSec=16000;
m_soundFormat.nBlockAlign=2;
m_soundFormat.cbSize=0;
m_soundFormat.wBitsPerSample=16; //指定录音格式
int retCode=waveInOpen(&m_hWaveInWAVE_MAPPER &m_soundFormat (DWORD)m_dlg->winId()0LCALLBACK_WINDOW); //打开录音设备
if(retCode!= MMSYSERR_NOERROR)
{
qDebug(“cannot“);
return;
}
retCode=waveOutOpen(&m_hWaveOutWAVE_MAPPER &m_soundFormat (DWORD)m_dlg->winId()0LCALLBACK_WINDOW); //打开放音设备
if(retCode!= MMSYSERR_NOERROR)
{
qDebug(“cannot2“);
return;
}
//in
m_pWaveHdrIn[0].lpData=m_cBufferIn;
m_pWaveHdrIn[0].dwBufferLength=MAX_BUFFER_SIZE;
m_pWaveHdrIn[0].dwBytesRecorded=0;
m_pWaveHdrIn[0].dwFlags=0;
retCode=waveInPrepareHeader(m_hWaveIn&m_pWaveHdrIn[0]sizeof(WAVEHDR)); //准备内存块录音
if(retCode!= MMSYSERR_NOERROR)
{
return;
}
retCode=waveInAddBuffer(m_hWaveIn&m_pWaveHdrIn[0]sizeof(WAVEHDR)); //增加内存块
if(retCode!= MMSYSERR_NOERROR)
{
return;
}
//out
m_pWaveHdrOut[0].lpData=m_cBufferOut;
m_pWaveHdrOut[0].dwBufferLength=MAX_BUFFER_SIZE;
m_pWaveHdrOut[0].dwBytesRecorded=0;
m_pWaveHdrOut[0].dwFlags=0;
waveOutPrepareHeader(m_hWaveOut&m_pWaveHdrOut[0]sizeof(WAVEHDR)); //准备内存块放音
waveOutWrite(m_hWaveOut&m_pWaveHdrOut[0]sizeof(WAVEHDR));
}
void CSound::Record()
{
waveInStart(m_hWaveIn);//开始录音
}
void CSound::Play()
{
memcpy(m_cBufferOutm_cBufferInMAX_BUFFER_SIZE);
}
void CSound::StopRecord()
{
waveInStop(m_hWaveIn); //停止录音
waveInReset(m_hWaveIn); //清空内存块
}
void CSound::FreeRecordBuffer()
{
int retCode;
retCode =waveInUnprepareHeader(m_hWaveIn&m_pWaveHdrIn[0]sizeof(WAVEHDR));
if (retCode!= MMSYSERR_NOERROR)
{
return;
} //in
m_pWaveHdrIn[0].lpData=m_cBufferIn;
m_pWaveHdrIn[0].dwBufferLength=MAX_BUFFER_SIZE;
m_pWaveHdrIn[0].dwBytesRecorded=0;
m_pWaveHdrIn[0].dwFlags=0;
retCode=waveInPrepareHeader(m_hWaveIn&m_pWaveHdrIn[0]sizeof(WAVEHDR)); //准备内存块录音
if(retCode!= MMSYSERR_NOERROR)
{
return;
}
retCode=waveInAddBuffer(m_hWaveIn&m_pWaveHdrIn[0]sizeof(WAVEHDR)); //增加内存块
if(retCode!= MMSYSERR_NOERROR)
{
return;
}
}
void CSound::FreePlayBuffer()
{
// static bool once=true;
int result;
result=waveOutUnprepareHeader(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-04-13 22:39 sheji2\
文件 3962 2013-03-23 17:17 sheji2\csound.cpp
文件 836 2013-03-19 20:24 sheji2\csound.h
目录 0 2013-04-13 20:33 sheji2\debug\
文件 232842 2013-04-13 18:10 sheji2\debug\csound.o
文件 207095 2012-07-19 10:19 sheji2\debug\fr
文件 231489 2013-04-13 18:09 sheji2\debug\main.o
文件 472315 2013-04-13 20:33 sheji2\debug\mainwindow.o
文件 2344 2012-07-19 10:19 sheji2\debug\moc_fr
文件 132805 2012-07-19 10:20 sheji2\debug\moc_fr
文件 2965 2013-04-13 18:10 sheji2\debug\moc_mainwindow.cpp
文件 241750 2013-04-13 18:10 sheji2\debug\moc_mainwindow.o
文件 184422 2013-03-19 20:24 sheji2\debug\mythread.o
文件 590286 2013-04-13 18:01 sheji2\debug\qrc_ziyuan.cpp
文件 123476 2013-04-13 18:01 sheji2\debug\qrc_ziyuan.o
文件 1565706 2013-04-13 20:33 sheji2\debug\sheji.exe
文件 417 2013-03-11 22:19 sheji2\main.cpp
文件 7637 2013-04-13 22:32 sheji2\mainwindow.cpp
文件 1163 2013-04-13 18:09 sheji2\mainwindow.h
文件 11245 2013-04-13 18:01 sheji2\mainwindow.ui
文件 5718 2013-04-13 20:34 sheji2\Makefile
文件 6365 2013-04-13 20:34 sheji2\Makefile.Debug
文件 6467 2013-04-13 20:34 sheji2\Makefile.Release
目录 0 2013-03-11 21:50 sheji2\pic\
文件 2888 2012-08-20 17:34 sheji2\pic\addline_highlight.png
文件 2850 2012-08-20 17:34 sheji2\pic\addline_normal.png
文件 926 2012-08-05 11:58 sheji2\pic\close1.png
文件 824 2012-08-05 12:05 sheji2\pic\close2.PNG
文件 3058 2012-08-20 17:34 sheji2\pic\handle_highlight.png
文件 3029 2012-08-20 17:34 sheji2\pic\handle_normal.png
文件 851 2012-08-06 14:54 sheji2\pic\kuang.png
............此处省略23个文件信息
评论
共有 条评论