c语言程序mp3,C语言程序设计基础

发布时间:2023-12-08

C语言程序MP3/C语言程序设计基础

更新: 2023-01-08 22:22

本文目录一览:

  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语言程序读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 {
        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_ALIASpszSound参数指定了注册表或WIN.INI中的系统事件的别名。
  • SND_ALIAS_IDpszSound参数指定了预定义的声音标识符。
  • SND_ASYNC:异步方式播放声音,PlaySound函数在开始播放后立即返回。
  • SND_FILENAMEpszSound参数指定了MP3文件名。
  • SND_LOOP:重复播放声音,必须与SND_ASYNC标志一块使用。
  • SND_MEMORY:播放载入到内存中的声音,此时pszSound是指向声音数据的指针。
  • SND_NODEFAULT:不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。
  • SND_NOSTOPPlaySound不打断原来的声音播出并立即返回FALSE。
  • SND_NOWAIT:如果驱动程序正忙则函数就不播放声音并立即返回。
  • SND_PURGE:停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。
  • SND_RESOURCEpszSound参数是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.hPlaySound函数的声明为:

BOOL PlaySound(LPCSTR pszSound, HMODULE hwnd, DWORD fdwSound);

参数pszSound是指定了要播放声音的字符串。 参数hwnd是应用程序的实例句柄,除非pszSound的指向一个资源标识符(即fdwSound被定义为SND_RESOURCE),否则必须设置为NULL。 参数fdwSound是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE。 使用PlaySound函数时需要在#include windows.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);
        }
        fclose(in);
    }
}