
#include <string.h>#define FILE_PATH "C:\\甩葱歌.mp3"
void main()
{
int i//用于循环计数
struct MUSIC_TITAL_INFO
{
char ID3v1TAG[3] //TAG
char MUSIC_NAME[30]//存储标题信息
char Artist[30] //存储歌手信息
char Album[30] //存储专辑信息
char YEAR[4] //存储年代信息
char Comments[28] //存储备注信息,28个字节(有时为30字节)
char Genre //存储音乐风格信息,保留位,1个字节
char Reserved //保留位,1个字节(有时没有意思
char Track //音轨(曲号)保留位,1个字节(有时没有)
}st1
FILE *fp
fp = fopen(FILE_PATH,"r")
if (fp == NULL) {
printf("can not open file!")
return
}
fseek(fp,-128L,SEEK_END)
fread(&st1,1,128,fp)//结构体中的变量全是char
// printf("%s->%s->%s->%s->%s->%s->%c->%c->%c.\n",\
// st1.ID3v1TAG,st1.MUSIC_NAME,st1.Artist,st1.Album,st1.YEAR,st1.Comments,\
// st1.Genre,st1.Reserved,st1.Track)
//打印TAG
printf("TAG:")
for(i= 0i<3i++)
{
printf("%c",st1.ID3v1TAG[i])
}
printf("\n")
//打印标题
printf("标题:")
for(i= 0i<30i++)
{
printf("%c",st1.MUSIC_NAME[i])
}
printf("\n")
//打印歌手信息
printf("歌手信息:")
for(i= 0i<30i++)
{
printf("%c",st1.Artist[i])
}
printf("\n")
//打印专辑信息
printf("专辑信息:")
for(i= 0i<30i++)
{
printf("%c",st1.Album[i])
}
printf("\n")//打印年代信息
printf("年代信息:")
for(i= 0i<4i++)
{
printf("%c",st1.YEAR[i])
}
printf("\n")//备注
printf("备注:")
for(i= 0i<28i++)
{
printf("%c",st1.Comments[i])
}
printf("\n")//音乐风格信息
printf("音乐风格信息:")
printf("%c",st1.Genre)
printf("\n")//保留位
printf("保留位:")
printf("%c",st1.Reserved)
printf("\n")
//音轨
printf("音轨:")
printf("%c",st1.Track)
printf("\n")
fclose(fp)
}
用C语言播放音乐,一般需要额外的库或者调用系统的API函数。
以Windows为例,可以通过PlaySound函数播放wav格式的音乐。示例如下:
#include<stdio.h>#include<windows.h>
#include<mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
int main()
{
PlaySound(TEXT("1.wav"),0,SND_FILENAME) //1.wav是要播放的音乐文件
return 0
}
如果想播放mp3音乐可以使用如下代码。
注意:生成程序后,请在cmd中执行此程序,不要在vc/vs的IDE中运行。
#include <windows.h>#include <mmsystem.h>
#include <stdio.h>
#pragma comment(lib, "Winmm.lib")
int main(int argc, char *argv[])
{
//绝对地址形式
TCHAR fileName[]="ganlusi.mp3"
TCHAR shortName[MAX_PATH]
GetShortPathName(fileName,shortName,sizeof(shortName)/sizeof(TCHAR))
TCHAR cmd[MAX_PATH+10]
wsprintf(cmd,"play %s",shortName)
mciSendString(cmd,NULL, 0, NULL)
Sleep(5 * 60 * 1000) //这里是防止一播放就结束做的延迟
return 0
}
一.在程序中直接播放声音文件在VC++ 中的多媒体动态连接库中提供了一组与音频设备有关的函数。利用这些函数可以方便地播放声音。最简单的播放声音方法就是直接调用VC++中提供的声音播放函数BOOL sndPlaySound ( LPCSTR lpszSound,UINT fuSound )或BOOL PlaySound( LPCSTR lpszSound, HMODULE hmod, DWORD fuSound )其中参数lpszSound是需要播放声音的.W***文件的路径和文件名, hmod在这里为NULL,fuSound是播放声音的标志,详细说明请参考VC++中的帮助。 例如播放C:soundmusic.wav可以用sndPlaySound ("c:\sound\music.wav",SND_ASYNC)或PlaySound("c:\sound\music.wav",NULL, SND_ASYNC|SND_NODEFAULT )如果没有找到music.wav文件,第一种格式将播放系统默认的声音,第二种格式不会播放系统默认的声音。
二.将声音文件加入到程序中
在VC++的程序设计中,可以利用各种标准的资源,如位图,菜单,对话框等。同时VC++也允许用户自定义资源,因此我们可以将声音文件作为用户自定义资源加入程序资源文件中,经过编译连接生成EXE文件,实现无.W***文件的声音播放。要实现作为资源的声音文件的播放,首先要在资源管理器中加入待播放的声音文件。
具体步骤入下:
1.获得包含资源的模块句柄:
HMODULE hmod=AfxGetResourceHandle()
2.检索资源块信息:
HRSRC hSndResource=FindResource(hmod,MAKEINTRESOURCE(IDR_W***E1),_T("W***E"))
3. 装载资源数据并加锁:
HGLOBAL hGlobalMem=LoadResource(hmod,hSndResource)
LPCTSTR lpMemSound=(LPCSTR)LockResource(hGlobalMem)
4.播放声音文件:
sndPlaySound(lpMemSound,SND_MEMORY));
5.释放资源句柄:
FreeResource(hGlobalMem)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)