note:使用多线程的方式MP3实现播放器,其中用到libmpg123,以及asound库,解码用到libmpg123,播放用到alsa,以下为c语言例程源码.对比上一篇,这一篇的不同点在于并不使用互斥锁加上条件变量来阻塞进程,暂停直接延时,歌曲模式执行判断文件是否读取完毕,完毕之后退出循环,执行相应的动作。
#include <alsa/asoundlib.h>
#include <mpg123.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <pthread.h>
#include <signal.h>
#define PCM_DEVICE "default"
#define MAX_SONGS 3
char *songs[MAX_SONGS] = {
"/mnt/hgfs/share/talk_anymore.mp3",
"/mnt/hgfs/share/poxiao.mp3",
"/mnt/hgfs/share/attention.mp3"
};
const char *mode_names[] = {"单曲播放", "单曲循环", "列表循环"};
int current_song = 0;
int play_mode = 0; // 0: 单曲播放, 1: 单曲循环, 2: 列表循环
int is_paused = 0; // 播放暂停标志