在C语言中播放MP3文件需要使用第三方库,如 libmpg123
。以下是一个简单的示例,展示了如何使用 libmpg123
在C语言程序中播放MP3文件。
libmpg123
库:在Ubuntu或Debian系统中,使用以下命令安装:
sudo apt-get install libmpg123-dev
在macOS中,使用Homebrew安装:
brew install mpg123
libmpg123
播放MP3文件:#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;
}
gcc -o play_mp3 play_mp3.c -lmpg123
./play_mp3 <path_to_mp3_file>
请注意,这个示例仅演示了如何使用 libmpg123
解码MP3文件。要将解码后的音频数据发送到音频设备,您需要使用其他库(如 SDL
、PulseAudio
或 ALSA
)进行音频输出。
新知·音视频技术公开课
Techo Day
腾讯技术开放日
云+社区技术沙龙[第1期]
云+未来峰会
高校开发者
DBTalk技术分享会
GAME-TECH
DB TALK 技术分享会
领取专属 10元无门槛券
手把手带您无忧上云