| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 lm68140318 于 2023-7-13 20:08 编辑  
 
 
 
- DWORD MicCallBack(HWAVEIN hWaveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2) //录音消息的处理程序
 
 - {
 
  
 
-         return 0;
 
  
- }
 
  
 
 
- void CyinpinDlg::OnBnClickedButton1()
 
 - {
 
 -         CString str;
 
 -         int nReturn = waveInGetNumDevs();//获取系统中存在的波形音频输入设备数
 
 -         
 
  
 
-         //********枚举输入的设备*****************
 
 -         for (int i = 0; i < nReturn; i++)
 
 -         {
 
 -                 WAVEINCAPS wic;  //WAVEINCAPS结构描述波形音频输入设备的能力
 
 -                 
 
 -                 MMRESULT mmresult=waveInGetDevCaps(i, &wic, sizeof(WAVEINCAPS)); //检索给定的波形音频输入设备的信息
 
 -                 
 
 -                 str.Format(_T("i=%d 设备名:%s\r\n "),i, wic.szPname);
 
 -                 ::OutputDebugString(str);
 
 -                 
 
 -                 
 
 -         }
 
  
 
-         //*************音频信息******************
 
  
-         WAVEFORMATEX waveFormat;//WAVEFORMATEX结构定义了波形音频数据信息
 
 -         /*
 
 -         typedef struct tWAVEFORMATEX
 
 - {
 
 -     WORD    wFormatTag;     //波形音频的格式,一般情况下设置为WAVE_FORMAT_PCM
 
 -     WORD    nChannels;      //音频声道的数量。可以是1或者2(现在电脑基本上都是左右两个声道,因此一般设置为2)
 
 -     DWORD   nSamplesPerSec; // 样本频率,(一般的频率为8khz, 11.025khz, 22.05khz,44.1khz)
 
 -     DWORD   nAvgBytesPerSec;// 设置请求的平均数据传输率,,单位为byte/s,创建缓冲大小要参考该值
 
 -     WORD    nBlockAlign;    //以字节为单位的块对齐的大小,通常为(nChannels*wBitsPerSample)/8
 
 -     WORD    wBitsPerSample; // 设置每个样本的位深,多为8或16
 
 -     WORD    cbSize;         // 额外信息的大小,一般不需要,设置为0
 
 - } WAVEFORMATEX;
 
 -         */
 
  
 
-         waveFormat.nSamplesPerSec = 44100;
 
 -         waveFormat.wBitsPerSample = 16;
 
 -         waveFormat.nChannels = 2;
 
 -         waveFormat.cbSize = 0;
 
 -         waveFormat.wFormatTag = WAVE_FORMAT_PCM;
 
 -         waveFormat.nBlockAlign = (waveFormat.wBitsPerSample * waveFormat.nChannels) / 8;
 
 -         waveFormat.nAvgBytesPerSec = waveFormat.nBlockAlign * waveFormat.nSamplesPerSec;
 
  
 
 
 
-         HWAVEIN phwi;//保存启动的设备
 
  
 
 
 
 
-         MMRESULT mmre=waveInOpen(&phwi, WAVE_MAPPER, &waveFormat, (DWORD_PTR)MicCallBack, 0, CALLBACK_FUNCTION); //打开录音设备
 
 -         /*
 
 -         参数1:LPHWAVEIN phwi  【输出】一个特定的录音设备指针,如果设备启动成功,该参数的值将会被赋值为启动的设备
 
 -         参数2:UINT_PTR uDeviceID   指定一个需要打开的设备标识【设备ID】
 
 -                                         可以使用WAVE_MAPPER选择系统默认录音的设备
 
 -         参数3:LPWAVEFORMATEX pwfx  进行录音的WAVEFORMATEX结构的指针【音频数据信息】
 
 -         参数4:DWORD_PTR dwCallback   录音消息的处理程序,可以设置一个函数、事件句柄、窗口句柄、一个特定的线程。
 
 -                         也就是说录音消息产生后,由这个参数对应的值来处理该消息。包括关闭录音、缓冲区已满、开启设备
 
 -                         如果不需要回调函数,则此值可以为零
 
 -         参数5:DWORD_PTR dwCallbackInstance  dwCallback参数的参数列表
 
 -         参数6:DWORD fdwOpen      打开设备的标志。 定义了以下值
 
 -                         CALLBACK_EVENT        dwCallback         参数是事件句柄
 
 -                         CALLBACK_FUNCTION        dwCallback     参数是回调函数
 
 -                         CALLBACK_NULL                           无回调机制。 这是默认设置。
 
 -                         CALLBACK_THREAD        dwCallback         参数是线程标识符。
 
 -                         CALLBACK_WINDOW        dwCallback         参数是窗口句柄。
 
 -                         WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE        如果指定了此标志并且 uDeviceID 参数 WAVE_MAPPER,则函数将打开默认通信设备
 
 -                                                                 仅 当 uDeviceID 等于 WAVE_MAPPER时,此标志才适用。注意 需要 Windows 7
 
 -                         WAVE_FORMAT_DIRECT        如果指定了此标志,ACM 驱动程序不会对音频数据执行转换。
 
 -                         WAVE_FORMAT_QUERY        该函数将查询设备以确定它是否支持给定格式,但它不打开设备
 
 -                         WAVE_MAPPED        uDeviceID 参数指定要由波形映射器映射到的波形音频设备
 
 -         
 
 -         返回值:如果成功,则返回 MMSYSERR_NOERROR=0  
 
 -                         可能的错误值包括以下内容
 
 -                         MMSYSERR_ALLOCATED     已分配指定资源
 
 -                         MMSYSERR_BADDEVICEID   指定的设备标识符范围不足
 
 -                         MMSYSERR_NODRIVER      不存在设备驱动程序
 
 -                         MMSYSERR_NOMEM         无法分配或锁定内存
 
 -                         WAVERR_BADFORMAT       尝试使用不受支持的波形音频格式打开
 
  
-         注意:要想该函数成功执行,必须在开始之前,有录音设备的存在(台式电脑一定要插入麦克风才可以被检测到)
 
 -         */
 
  
 
-         
 
  
- }
 
  
  复制代码 
 
 
执行时发生错误:waveInOpen 函数发生问题 
 
 
 
根据提供的代码和错误信息,waveInOpen函数出现问题可能是由于以下原因之一: 
 
1.没有正确包含相关的头文件。请确保代码中包含了正确的头文件,如windows.h和mmsystem.h。 
 
2.缺少对winmm.lib库的链接。通过在代码中添加#pragma comment(lib, “winmm.lib”)来链接winmm库。 
 
3.录音设备没有正确连接或驱动程序没有正确安装。确保麦克风正确连接到计算机并且驱动程序已正确安装。 
 
4.录音设备正在被其他应用程序使用。关闭其他应用程序并尝试重新运行代码。 
 
如果以上解决方法仍然无法解决问题,请提供更多的错误信息或代码上下文以便更好地帮助您解决问题。 
 
请注意:如果您满意,请给我最佳。 
 
回答知识官:gpt-3.5 
审核员:高山 
 
如果满意,麻烦最佳,我比不上前4楼,希望给我一些机会 
 
 
 
 |   
- 
 
 
 
 
 
 
 
 |