最近使用樹莓派的音頻播放音頻文件(須要外接聲卡),本身在網上找一些alsa編程的代碼用起來比較複雜,能夠是本身設置的緣由把,播放時有時會出現雜音。不過這兩天看到了一個開源軟件mplayer,它的slave模式,能夠讓你在經過FIFO文件控制它的播放中止和其餘功能。這樣你就能夠經過程序控制mplayer了,甚至能夠在它的基礎上開發新的軟件。這裏用的是C語言。今天先立個搞,明天再更。編程
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <fcntl.h> #define FIFO "/tmp/myfifo" int main() { char * path = "./test.mp3"; if(mkfifo("/tmp/myfifo",0777)) printf("fifo create error\n"); if(!fork()) { system("mplayer -slave -quiet -input file=/tmp/myfifo ./test.mp3"); exit(0); } else { sleep(10); int fd = open(FIFO, O_WRONLY); write(fd, "pause\n",strlen("pause\n")); close(fd); } printf("end!\n"); return 0; }
不少需求下非阻塞open可能會用到的:ui
int fd = open(FIFO, O_WRONLY|O_NONBLOCK);
指定播放的聲卡設備。code
card 1, device 0:
開發
mplayer -ao alsa:device=hw=1.0 test.mp3
input
aplay -l 查看聲卡設備。
string
➜ music aplay -l
**** PLAYBACK 硬體裝置清單 ****
card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]
子設備: 1/1
子設備 #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
子設備: 1/1
子設備 #0: subdevice #0
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
子設備: 0/1
子設備 #0: subdevice #0開源軟件
設置指定聲卡的音量,it
amixer -c 1 sset "Speaker",0 60%io
1:是指聲卡 編號 - - 1 aplay -l 能看到。
class
」Speaker「 這個名字能夠在alsamixer中看到。0不知道是啥意思。