本文目錄一覽:
- 1、c語言程序設計MP3或MP4文件基本信息的解析
- 2、C語言如何播放mp3格式音樂
- 3、怎麼用C語言打開一個MP3文件吖?
- 4、c語言中如何播放mp3數據幀
- 5、怎樣用C語言編程打開一個文件(比如mp3,mp4)
- 6、跪求C語言程序讀ID3v1信息從mp3文件並打印出來。 1)使用命令行輸入一個MP3檔案名稱。 2)判斷檔案名稱的分
c語言程序設計MP3或MP4文件基本信息的解析
找了個MP3看了下,comment是29個位元組。
可參考
拿VC的C語言寫了下:
頭文件:
#include stdio.h
// TODO: reference additional headers your program requires here
#define MP3_ID3_LENGTH 10
typedef struct tag_ID3_INFO
{
} ID3_INFO;
#define IDENTIFY_LEN 3
#define TITLE_LEN 30
#define ARTIST_LEN 30
#define ALBUM_LEN 30
#define YEAR_LEN 4
#define COMMENT_LEN 30
#define GENRE_LEN 1
// IDENTIFY_LEN + TITLE_LEN +…
#define MP3_INFO_LENGTH 128
typedef struct tag_MP3_INFO
{
char Identify[IDENTIFY_LEN + 1]; //TAG三個字母
//這裡可以用來鑒別是不是文件信息內容
char Title[TITLE_LEN + 1]; //歌曲名,30個位元組
char Artist[ARTIST_LEN + 1]; //歌手名,30個位元組
char Album[ARTIST_LEN + 1]; //所屬唱片,30個位元組
char Year[YEAR_LEN + 1]; //年,4個位元組
char Comment[COMMENT_LEN + 1]; //注釋,28個位元組
char Genre[GENRE_LEN + 1]; //類型 ,1個位元組
} MP3_INFO;
C文件:
#include string.h
#define MP3_OK 1
#define MP3_ERROR 1
FILE *OpenMp3File(char *pFileName);
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo);
int OutputMP3Info(MP3_INFO *pstMp3Info);
int main(int argc, char* argv[])
{
FILE *pFile = NULL;
MP3_INFO stMp3Info = {0};
char *pfname = “E:\\Project\\MP3\\test.MP3”;
pFile = OpenMp3File(pfname);
if (NULL == pFile)
{
return MP3_ERROR;
}
ReadMP3Info(pFile, stMp3Info);
printf(“\r\nMP3 file: %s”, pfname);
OutputMP3Info(stMp3Info);
printf(“Hello World!\n”);
return MP3_OK;
}
FILE *OpenMp3File(char *pFileName)
{
FILE *pFile = NULL;
pFile = fopen(pFileName,”rb”);
if (NULL==pFile)
{
printf(“open read file error!!”);
return NULL;
}
return pFile;
}
int ReadMP3Info(FILE *pFile, MP3_INFO *pstInfo)
{
int len = 0;
if ((NULL == pFile) || (NULL == pstInfo))
{
return MP3_ERROR;
}
fseek(pFile, 0, SEEK_END);
len = ftell(pFile);
if (len = (MP3_INFO_LENGTH + MP3_ID3_LENGTH))
{
return MP3_ERROR;
}
memset(pstInfo, 0, sizeof(MP3_INFO));
fseek(pFile, -MP3_INFO_LENGTH, SEEK_END);
len = fread((char *)(pstInfo-Identify), 1, IDENTIFY_LEN, pFile);
len += fread((char *)(pstInfo-Title), 1, TITLE_LEN, pFile);
len += fread((char *)(pstInfo-Artist), 1, ARTIST_LEN, pFile);
len += fread((char *)(pstInfo-Album), 1, ALBUM_LEN, pFile);
len += fread((char *)(pstInfo-Year), 1, YEAR_LEN, pFile);
len += fread((char *)(pstInfo-Comment), 1, COMMENT_LEN, pFile);
len += fread((char *)(pstInfo-Genre), 1, GENRE_LEN, pFile);
if (MP3_INFO_LENGTH != len)
{
return MP3_ERROR;
}
return MP3_OK;
}
int OutputMP3Info(MP3_INFO *pstMp3Info)
{
printf(“\r\nTag : %s”, pstMp3Info-Identify);
printf(“\r\nTitle : %s”, pstMp3Info-Title);
printf(“\r\nArtist : %s”, pstMp3Info-Artist);
printf(“\r\nAlbum : %s”, pstMp3Info-Album);
printf(“\r\nYear : %s”, pstMp3Info-Year);
printf(“\r\nComment: %s”, pstMp3Info-Comment);
return MP3_OK;
}
測試:
MP3 file: E:\Project\MP3\test.MP3
Tag : TAG
Title : TrackTitle
Artist : ArtistName
Album : AlbumTitle
Year : 2012
Comment: This is a comment
C語言如何播放mp3格式音樂
windows現有的API似乎只支持播放.wav格式的音頻,mp3格式恐怕你得再去網上找找開源代碼
// 播放音頻 “1.wav”
#include stdio.h
#include windows.h
#pragma comment(lib,”winmm.lib”)
int main()
{
PlaySound (“1.wav”,NULL,SND_FILENAME | SND_ASYNC | SND_LOOP);
getchar();
return 0;
}
怎麼用C語言打開一個MP3文件吖?
用VS2003或2005建一個帶MFC的名為Mp3Player的控制台應用程序,把這些代碼複製到Mp3Player.cpp
// Mp3Player.cpp : 定義控制台應用程序的入口點。
//
#include “stdafx.h”
#include “Mp3Player.h”
#include “mmsystem.h”
#pragma comment(lib, “Winmm.lib”)
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 唯一的應用程序對象
CWinApp theApp;
using namespace std;
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
int nRetCode = 0;
// 初始化 MFC 並在失敗時顯示錯誤
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
// TODO: 更改錯誤代碼以符合您的需要
_tprintf(_T(“錯誤: MFC 初始化失敗\n”));
nRetCode = 1;
}
else
{
//”Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||”;
CFileDialog OpenFileDlg(TRUE ,
NULL ,
NULL ,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT ,
_T(“MP3 文件(*.mp3)|*.mp3||”));
if (OpenFileDlg.DoModal() == IDOK)
{
CString strFilePath = OpenFileDlg.GetPathName();
MCI_OPEN_PARMS mop;
mop.dwCallback = NULL;
mop.lpstrAlias = NULL;
mop.lpstrDeviceType = _T(“MP3”);
mop.lpstrElementName = strFilePath;
mop.wDeviceID = 0;
MCIERROR err = mciSendCommand(NULL ,
MCI_OPEN ,
MCI_OPEN_ELEMENT ,
(DWORD)mop);
MCI_PLAY_PARMS mpp;
mpp.dwCallback = NULL;
mpp.dwFrom = 0;
mpp.dwTo = 0;
err = mciSendCommand(mop.wDeviceID , MCI_PLAY , MCI_FROM | MCI_NOTIFY, (DWORD_PTR)mpp);
}
}
getchar();
return nRetCode;
}
c語言中如何播放mp3數據幀
可以使用PlaySound()函數播放mp3聲音,該函數原型位於windows.h中,
函數原型為:
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
參數pszSound是指定了要播放聲音的字符串,該參數可以是MP3文件的名字,或是MP3資源的名字,或是內存中聲音數據的指針,或是在系統註冊表WIN.INI中定義的系統事件聲音。如果該參數為NULL則停止正在播放的聲音。
參數hmod是應用程序的實例句柄,當播放MP3資源時要用到該參數,否則它必須為NULL。
參數fdwSound是標誌的組合,各種可選的標誌及意義如下所示。若成功則函數返回TRUE,否則返回FALSE。
播放標誌以及含義:
SND_APPLICATION
用應用程序指定的關聯來播放聲音。
SND_ALIAS
pszSound參數指定了註冊表或WIN.INI中的系統事件的別名。
SND_ALIAS_ID
pszSound參數指定了預定義的聲音標識符。
SND_ASYNC
用異步方式播放聲音,PlaySound函數在開始播放後立即返回。
SND_FILENAME
pszSound參數指定了MP3文件名。
SND_LOOP
重複播放聲音,必須與SND_ASYNC標誌一塊使用。
SND_MEMORY
播放載入到內存中的聲音,此時pszSound是指向聲音數據的指針。
SND_NODEFAULT
不播放缺省聲音,若無此標誌,則PlaySound在沒找到聲音時會播放缺省聲音。
SND_NOSTOP
PlaySound不打斷原來的聲音播出並立即返回FALSE。
SND_NOWAIT
如果驅動程序正忙則函數就不播放聲音並立即返回。
SND_PURGE
停止所有與調用任務有關的聲音。若參數pszSound為NULL,就停止所有的聲音,否則,停止pszSound指定的聲音。
SND_RESOURCE
pszSound參數是WAVE資源的標識符,這時要用到hmod參數。
SND_SYNC
同步播放聲音,在播放完後PlaySound函數才返回。
************************************************************
例如我想播放在C:\WINDOWS\Media目錄中的 Windows XP 啟動.MP3文件
程序如下:
#include windows.h
#include stdlib.h
int main(int argc, char* argv[])
{
PlaySound(“C:\\WINDOWS\\Media\\Windows XP 啟動.MP3”, NULL, SND_FILENAME | SND_ASYNC);
system(“pause”);
return 0;
}
*/:)))))))))))))))))))))))))))))))
怎樣用C語言編程打開一個文件(比如mp3,mp4)
可以使用PlaySound()函數播放mp3音頻,該函數原型位於windows.h。
PlaySound函數的聲明為:
BOOL PlaySound(LPCSTR pszSound, HMODULE hwnd,DWORD fdwSound);
參數pszSound是指定了要播放聲音的字符串。
參數hwnd是應用程序的實例句柄,除非pszSound的指向一個資源標識符(即fdwSound被定義為SND_RESOURCE),否則必須設置為NULL。
參數fdwSound是標誌的組合,如下表所示。若成功則函數返回TRUE,否則返回FALSE。
使用PlaySound函數時需要在#includewindows.h後面加上(注意:不能加在前面):
例程:
CFileDialog dlg(TRUE, “mp3”, “*.mp3”, OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT, “mp3文件(*.mp3)|*.mp3|”);
/*創建選擇對話框,讓用戶從文件夾中選取一個MP3文件*/
int iRet = dlg.DoModal();//獲得對話框返回值
if(IDOK == iRet) //如果返回值成功,表明成功獲取一個MP3文件
{
CString pathName= dlg.GetPathName(); //得到文件的路徑名稱
PlaySound( pathName , NULL, SND_FILENAME | SND_ASYNC);//用playsound函數播放該文件
}
跪求C語言程序讀ID3v1信息從mp3文件並打印出來。 1)使用命令行輸入一個MP3檔案名稱。 2)判斷檔案名稱的分
#include stdio.h
#include stdlib.h
#include string.h
int main(int argc,char **argv)
{
if (argc != 2)
{
printf(“Need a file!\n”);
return 0;
}
else
{
FILE *in;
in=fopen(argv[1],”r”);
if ( ! in )
return 0;
fseek(in,-128,SEEK_END);
char *str;
char s[3];
fread(s,1,3,in);
if ( memcmp(s,”TAG”,3) )
{
printf(“Do not contain ID3V1 TAG\n”);
return 0;
}
else
{
printf(“ID3v1 info\n”);
str=malloc(30*sizeof(char));
int i;
fread(str,1,30,in);
printf(” TITLE: %s\n”,str);
fread(str,1,30,in);
printf(” ARTIST: %s\n”,str);
fread(str,1,30,in);
printf(” ALBUM: %s\n”,str);
fread(str,1,4,in);
if ( str[0] != 0 )
printf(” YEAR: %c%c%c%c\n”,str[0],str[1],str[2],str[3]);
else
printf(” YEAR:\n”);
fread(str,1,30,in);
printf(“COMMENT: %s\n”,str);
if ( (str[28]==0) (str[29]0) )
printf(” TRACK: %d\n”,str[29]);
else
printf(” TRACK:\n”);
fread(str,1,1,in);
if ( (unsigned char)str[0] != 0xFF )
printf(” GENRE: %u\n”,(unsigned char)str[0]);
else
printf(” GENRE:\n”);
free(str);
}
close(in);
}
}
原創文章,作者:SLPHT,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/329793.html