首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在C中播放MP3文件?

在C语言中播放MP3文件需要使用第三方库,如 libmpg123。以下是一个简单的示例,展示了如何使用 libmpg123 在C语言程序中播放MP3文件。

  1. 安装 libmpg123 库:

在Ubuntu或Debian系统中,使用以下命令安装:

代码语言:bash
复制
sudo apt-get install libmpg123-dev

在macOS中,使用Homebrew安装:

代码语言:bash
复制
brew install mpg123
  1. 编写C程序以使用 libmpg123 播放MP3文件:
代码语言:c
复制
#include <mpg123.h>
#include<stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    if (argc < 2) {
        printf("Usage: %s <mp3_file>\n", argv[0]);
        return 1;
    }

    const char *filename = argv[1];
    mpg123_handle *mh;
    int channels, encoding, rate;
    off_t buffer_size;
    size_t done;
    int ret;
    unsigned char *buffer;

    if (mpg123_init() != MPG123_OK) {
        fprintf(stderr, "Failed to initialize mpg123\n");
        return 1;
    }

    mh = mpg123_new(NULL, NULL);
    if (mh == NULL) {
        fprintf(stderr, "Failed to create mpg123 handle\n");
        mpg123_exit();
        return 1;
    }

    ret = mpg123_open(mh, filename);
    if (ret != MPG123_OK) {
        fprintf(stderr, "Failed to open file %s: %s\n", filename, mpg123_strerror(mh));
        mpg123_delete(mh);
        mpg123_exit();
        return 1;
    }

    mpg123_getformat(mh, &rate, &channels, &encoding);
    buffer_size = mpg123_outblock(mh);
    buffer = (unsigned char *)malloc(buffer_size);

    while (1) {
        ret = mpg123_read(mh, buffer, buffer_size, &done);
        if (ret == MPG123_DONE || ret == MPG123_NEW_FORMAT) {
            break;
        } else if (ret != MPG123_OK) {
            fprintf(stderr, "Error while decoding: %s\n", mpg123_strerror(mh));
            break;
        }

        // 在此处处理解码后的音频数据,例如将其发送到音频设备
    }

    free(buffer);
    mpg123_close(mh);
    mpg123_delete(mh);
    mpg123_exit();

    return 0;
}
  1. 编译和运行程序:
代码语言:bash
复制
gcc -o play_mp3 play_mp3.c -lmpg123
./play_mp3 <path_to_mp3_file>

请注意,这个示例仅演示了如何使用 libmpg123 解码MP3文件。要将解码后的音频数据发送到音频设备,您需要使用其他库(如 SDLPulseAudioALSA)进行音频输出。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android开发笔记(一百八十九)利用LAME录制MP3音频

Android常用的录音工具有两种,分别是MediaRecorder和AudioRecord,前者用于录制普通音频,后者用于录制原始音频。然而无论是普通音频的amr和aac格式,还是原始音频的pcm格式,都不能在电脑上直接播放,也不能在苹果手机上播放,因为它们属于安卓手机的定制格式,并非通用的音频格式。若想让录音文件放之四海而皆能播放,就得事先将其转为通用的MP3格式,虽然Android官方的开发包不支持MP3转换,不过借助第三方的LAME库,能够将原始音频转存为MP3文件。 LAME是一个高质量的MP3编码器,它采用C/C++代码开发,需要通过JNI技术引入到App工程。LAME源码的下载页面为https://lame.sourceforge.io/download.php,笔者找到的最新版本是3.100,先解压下载完成的源码包,再按照下列步骤依次调整源码细节: 1、把源码包里面的libmp3lame目录整个复制到App模块的jni目录下; 2、把include目录下的lame.h头文件复制到jni\libmp3lame目录下; 3、打开jni\libmp3lame下面的set_get.h,把这行代码

01
领券