《《vc编写音频播放器》ppt课件》由会员分享,可在线阅读,更多相关《《vc编写音频播放器》ppt课件(13页珍藏版)》请在金锄头文库上搜索。
1、VC+编写音乐播放器,程序效果,音乐播放器可以播放Windows下常用的音频和视频文件,如MP3、MIDI、WAV、WMA等。程序的界面如图所示。用户可通过文件对话框添加想要播放的文件和删除音乐文件,并可实现暂停、关闭或重播的功能,并显示播放的时间和正在播放文件的全路径和文件名,同时,在媒体文件播放的过程中,用户可随时调节音,还可以设置播放模式,如单曲循环,顺序播放等,同时,可以同步歌词。,程序界面,创建初始界面程序,实现界面美化 1,首先新建一个工程,取个好听的名字,这里命名为Multimedia,然后选择Dialog based,点击OK完成。 2,设置对话框显示风格。在对话框点右键属性,
2、设置边框为细小,把标题栏复选框去掉,其他默认。如图:,3,界面布局。在对话框中添加相应的控件,完成相应功能,最终效果如图:,4.进行对话框、控件的相应美化。 (1)给对话框添加背景 (2)给按钮添加位图 (3)使静态文本透明 实现播放音乐 Windows MCI与多媒体软件开发 Windows MCI(Media Control Interface)是控制多媒体设备的高层命令接口,提供了与设备无关的控制多媒体设备的方法。MCI可控制的多媒体设备包括标准的多媒体设备,如CD音频(CD Audio)、数字视频、动画、Wave格式数字声音和MIDI音序器,以及影碟机等可选设备。MCI包含在Windo
3、ws系统的MMSYSTEM.DLL动态链接库中,用以协调多媒体事件和MCI设备驱动程序之间的通信。一些MCI设备驱动程序,影碟机设备驱动程序,可以直接控制目标设备;另外一些MCI 设备驱动程序,如Wave和MIDI 设备驱动程序,通过MMSYSTEM中的函数间接控制目标设备;还有一些MCI设备驱动程序则提供了与其他Windows动态链接库的高层接口。MCI提供两种不同但相互联系的接口方式。第一种方式利用消息和数据结构来给多媒体设备发送命令并接收设备传来的信息,这种方法用函数mciSendCommand来给设备发送命令。其原型为:,MCIERROR mciSendCommand ( MCIDEV
4、ICEID IDDevice, UINT uMsg, DWORD fdwCommand, DWORD dwParam ); 参数IDDevice表示用来接收命令的设备的标识符,注意在打开设备时不用该参数 uMsg是要发送的命令;fdwCommand是命令消息的标志,而参数dwParam则是一个指向包含命令消息的参数的结构。如该参数返回非0 值,则表示设备驱动出错,这时可用mciGetErrorString函数来取得错误信息,其原型为: BOOL mciGetErrorString ( DWORD fdwError, LPTSTR lpszErrorText, UINT cchErrorText
5、 ); 参 数 fdwError 是由mciSendCommand 或mciSendString 返回的错误代码; 参数 lpszErrorText是一个指针,它指向用来存储错误描述信息的缓冲区;参数cchErrorText表示缓冲区的长度,以字符为单位。,MCI接口的第二种方式是使用ASCII字符串来发送驱动设备的命令,这种方式采用函 数mciSendString把命令字符发送给设备。其原型为: MCIERROR mciSendString ( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, 第5 章媒体播放器多媒体
6、程序设计113 HANDLE hwndCallback ); 参数lpszCommand是要发送的MCI命令字符串;参数lpszReturnString是一个指向接收返回信息的缓冲区的指针;cchReturn表示缓冲区的长度,以字符为单位;hwndCallback是回调窗口的句柄,一般为NULL。 这 种 字 符 串 命 令 很 直 观 方 便 , 近 似 自 然 语 言 , 如 “ play cdaudio ” , “stop waveaudio”等。返回的信息字符串由lpszReturnString带回,如该函数返回非0值,同样可用mciGetErrorString获取错误信息。,为了使用
7、MCI编程,必须包含多媒体头文件: #include 并在项目属性中添加对多媒体库winmm.lib链接。,wchar_t buf256; MCIERROR err = mciSendString(L“open cdaudio alias cd“, NULL, 0, NULL); / 打开CD if (err) if (mciGetErrorString(err, buf, 256) MessageBox(buf, L“Error“); / 获得并显示错误串 return; mciSendString(L“status cd number of tracks“, buf, 256, NULL)
8、; / 获得音轨总数 m_nTracks = wcstol(buf, NULL, 10); / 这里使用了宽字符版的字符串到整数的 / 转换函数:long wcstol( const wchar_t *nptr, wchar_t *endptr, int base ); wsprintf(buf, L“play cd from %d to %d“, m_nFrom, m_nTo); mciSendString(buf, NULL, 0, NULL); / 从音轨m_nFrom头播放到音轨m_nTo1尾,其他常用命令: mciSendString(L“set cd time format tms
9、f“, NULL,0,NULL); / 设置时间格式为 / 轨(100):分(100):秒(60):帧(75),一秒=75块,一块=98帧 mciSendString(L“set cd door open“, NULL, 0, NULL); / 打开光驱 mciSendString(L“set cd door closed“, NULL, 0, NULL); / 关闭光驱 mciSendString(L“pause cd“, NULL, 0, NULL); / 暂停播放 mciSendString(L“resume cd“, NULL, 0, NULL); / 恢复播放 mciSendStri
10、ng(L“stop cd“, NULL, 0, NULL); / 停止播放 mciSendString(L“close cd“, NULL, 0, NULL); / 关闭CD设备 mciSendString(L“status cd length“, buf, 256, NULL); / 获得整个CD的音轨总长度 mciSendString(L“status cd length track 5“, buf, 256, NULL); / 获得第5个音轨的长度 mciSendString(L“status cd current track“, buf, 256, NULL); / 获得当前音轨号,注
11、意: “play cd from m_nFrom to m_nTo“是完整形式,它还有其他形式: “play cd from m_nFrom“从m_nFrom播放到盘尾 “play cd to m_nTo“从当前位置播放到指定音轨 “play cd“ 从当前位置播放到盘尾 例如播放最后一首歌:“play cd from m_nLast“ 2)WAV wchar_t buf256; wsprintf(buf, L“open “%s“ alias sound type waveaudio“, pDoc-strFilePath); MCIERROR err = mciSendString(buf,
12、NULL, 0, NULL); if (err) if (mciGetErrorString(err, buf, 256) MessageBox(buf, L“Error”); return; ,/ t1和t2为用户指定的起止时间(单位为秒,浮点变量) DWORD start = (DWORD)(t1 * 1000 + 0.5), end = (DWORD)(t2 * 1000 + 0.5); wsprintf(buf, L“play sound from %ld to %ld“, start, end); mciSendString(buf, NULL, 0, NULL); 其他常用命令: mciSendString(L“status sound length“, buf, 256, NULL); mciSendString(L“pause sound“, NULL, 0, NULL); mciSendString(L“play sound“, NULL, 0, NULL); / 从当前位置播放到文件尾 mciSendString(L“stop sound“, NULL, 0, NULL); mciSendString(L“close sound“, NULL, 0, NULL);,