Pulse Audio 介绍
PulseAudio 是一个音频服务器,它充当了你的应用程序和硬件设备之间的中间件。简单来说就是你可以调用api,获取到系统捕获到的声音,可以录音。
安装PulseAudio
sudo apt install libpulse-dev #不过一般都安装好了,Linux系统上
使用
有两种api,一种是简单的,同步的,Simple API,另一种是异步的,复杂的Asynchronous API,大多数应用Simple api就足够了,所以我也是用这个。
PulseAudio官方文档
点击programming documentation即可看到api文档,选择Simple API。
代码
#include <pulse/simple.h>
#include <pulse/error.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main(){
pa_simple *s;
pa_sample_spec ss;
ss.format = PA_SAMPLE_S16NE;
ss.channels = 2;
ss.rate = 44100;
s = pa_simple_new(NULL,"HOME",PA_STREAM_RECORD,NULL,"music",&ss,NULL,NULL,NULL);
if(s == NULL){
printf("连接到Pulse audio 服务器失败\n");
return -1;
}
char buf[1024] = {0};
//开始录音并写入文件
FILE *fp = fopen("output.raw","wb");
if(fp == NULL){
printf("打开文件失败\n");
return -1;
}
while(1){
if(pa_simple_read(s,buf,sizeof(buf),NULL) < 0){
printf("读取录音数据失败\n");
return -1;
}
fwrite(buf,sizeof(char),sizeof(buf),fp);
memset(buf,0,sizeof(buf));
}
pa_simple_free(s);
fclose(fp);
return 0;
}
按 Ctrl + C结束录制
编译
gcc test.c -lpulse-simple
播放raw文件
ffplay -f s16le -ar 44100 -ac 2 output.raw #按自己录制的格式来