c++播放音

原帖:http://blog.csdn.net/jarvischu/article/details/5786167

一、播放系统的消息声音

[cpp]  view plain copy
  1. BOOL WINAPI MessageBeep( __in  UINT uType);  
   MSDN 中对这个函数的说明是:播放一个波形文件(也就是wav格式),每一个声音类型的波形声音在注册表中有一个条目(entry)指定.
[cpp]  view plain copy
  1. MessageBeep(MB_OK);  
  2. Sleep(3000);  
  3. MessageBeep(MB_ICONWARNING);  
  4. Sleep(3000);  
  5. MessageBeep(MB_ICONSTOP);  
  6. Sleep(3000);  
  7. MessageBeep(MB_ICONERROR);  
  8. Sleep(3000);  
  9. MessageBeep(MB_ICONEXCLAMATION);  


二、播放mav格式声音

[cpp]  view plain copy
  1. BOOL PlaySound(LPCTSTR pszSound,HMODULE hmod,DWORD fdwSound);  
    具体的函数详情参照MSDN吧
    一个简单实例如下
[cpp]  view plain copy
  1. PlaySound("C:/love.wav",AfxGetInstanceHandle(), SND_FILENAME|SND_ASYNC );  


三、利用MCI 接口实现播放任意格式声音

[cpp]  view plain copy
  1. #include <mmsystem.h> //导入声音头文件库   
  2. #pragma comment(lib,"winmm.lib")//导入声音的链接库  
然后直接用mciSendString函数即可  
[cpp]  view plain copy
  1. mciSendString("open C:/123.mp3" , NULL, 0, 0);  
  2. mciSendString("play C:/123.mp3 ", NULL, 0, 0);   
上面两条 便可以播放 C盘下的123.mp3 了

具体的mci 编程,有待进一步的学习


四、利用强悍的MCIWndCreate()函数

[cpp]  view plain copy
  1.  HWND m_hwndMCI;  
  2. if(m_hwndMCI!=NULL) //建立一个MCIWND 窗口  
  3. {  
  4.    MCIWndDestroy(m_hwndMCI);  
  5. }  
  6. int type=0; //隐藏默认工具栏0 表显示  
  7. CString filename="C:/123.mp3"//要播放的文件文件名  
  8. m_hwndMCI=MCIWndCreate(m_hWnd,AfxGetInstanceHandle(),type,filename);  
  9. MCIWndPlay(m_hwndMCI);  


五、利用Windows Media Player 控件

通过project--->add to project--->Components and Controls -->Registered ActiveX Controls--->Windows Media Player
Insert这个控件后,我们project中会自动添加17个类,这些都是Windows Media Player 控制相关的,同时我们的UI设计时的tools bar 中会多
出一个控件,那就 Windows Media Player ,拖到窗口上就能使用。
我们可以把这个控件关联成Control 类型的变量,这样,程序中就利用这个变量来设置WMPlayer。
如我们添加成变量名为:m_ctlWMPlayer,则利用,m_ctrWMPlayer.SetUrl("C:/123.mp3"),就可以播放我们c盘下的名为123.MP3的文件了
更深入的运用,有待更进一步的学习!

-

-------------------------------------------------------------------------------------------------------

2013-5-25 22:11::00 更新

六、播放蜂鸣

使用函数Beep 播放不同频率的蜂鸣
[cpp]  view plain copy
  1. BOOL WINAPI Beep(  
  2.   __in  DWORD dwFreq,    //频率  
  3.   __in  DWORD dwDuration //持续时间  
  4. );  
如:
[cpp]  view plain copy
  1. while(1)    Beep(5000,500);  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C++播放频源数据的示例代码: ```cpp #include <iostream> #include <vector> #include <windows.h> #include <mmsystem.h> // 回调函数,用于填充频缓冲区 void CALLBACK waveOutProc(HWAVEOUT hwo, UINT uMsg, DWORD_PTR dwInstance, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { // 如果需要在播放过程中做一些额外的处理,可在此处添加代码 } int main() { // 频源数据 std::vector<char> audioData = { /* 频数据 */ }; // 初始化WAVEFORMATEX结构体,用于设置频格式 WAVEFORMATEX wfx; wfx.wFormatTag = WAVE_FORMAT_PCM; // PCM频格式 wfx.nChannels = 2; // 双声道 wfx.nSamplesPerSec = 44100; // 采样率为44100Hz wfx.wBitsPerSample = 16; // 采样位数为16位 wfx.nBlockAlign = wfx.nChannels * wfx.wBitsPerSample / 8; // 每个采样块的字节数 wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign; // 每秒的数据传输速率 wfx.cbSize = 0; // 额外信息的大小 // 打开频设备 HWAVEOUT hWaveOut; MMRESULT result = waveOutOpen(&hWaveOut, WAVE_MAPPER, &wfx, (DWORD_PTR)waveOutProc, 0, CALLBACK_FUNCTION); if (result != MMSYSERR_NOERROR) { std::cout << "Failed to open audio device." << std::endl; return 1; } // 初始化频头部信息 WAVEHDR waveHdr; waveHdr.lpData = audioData.data(); waveHdr.dwBufferLength = audioData.size(); waveHdr.dwFlags = 0; waveHdr.dwLoops = 0; // 准备频缓冲区 result = waveOutPrepareHeader(hWaveOut, &waveHdr, sizeof(WAVEHDR)); if (result != MMSYSERR_NOERROR) { std::cout << "Failed to prepare audio buffer." << std::endl; waveOutClose(hWaveOut); return 1; } // 播放频数据 result = waveOutWrite(hWaveOut, &waveHdr, sizeof(WAVEHDR)); if (result != MMSYSERR_NOERROR) { std::cout << "Failed to play audio." << std::endl; waveOutUnprepareHeader(hWaveOut, &waveHdr, sizeof(WAVEHDR)); waveOutClose(hWaveOut); return 1; } // 等待播放完成 while (waveHdr.dwFlags & WHDR_STILLPLAYING) { Sleep(100); } // 清理资源 waveOutUnprepareHeader(hWaveOut, &waveHdr, sizeof(WAVEHDR)); waveOutClose(hWaveOut); return 0; } ``` 请注意,以上示例代码是基于Windows平台的,并使用了Windows Multimedia API (winmm.lib) 来实现播放功能。如果在其他平台上运行,需要使用相应的频库和API进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值