要一个解析MP3的代码要C语言的 要自己写的不要网上的

要一个解析MP3的代码要C语言的 要自己写的不要网上的,第1张

#include <stdio.h>

#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)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8177244.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-14
下一篇2023-04-14

发表评论

登录后才能评论

评论列表(0条)

    保存