首页 > 系统相关 >Linux使用PulseAudio录取声音

Linux使用PulseAudio录取声音

时间:2024-03-30 14:45:23浏览次数:25  
标签:NULL simple 录取 PulseAudio pa Linux include buf

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 #按自己录制的格式来

标签:NULL,simple,录取,PulseAudio,pa,Linux,include,buf
From: https://www.cnblogs.com/wkzs/p/18105466

相关文章

  • linux正则表达式之*
    1.*含义linux正则表达式*表示重复0个或多个前一个重复字符2.样例正则表达式*样例命令:grep-n"min*"anaconda-ks.cfg#找出含有mi、min、minn等字符串的行。注:因为*可以是0个,所以mi也是符合搜索字符串,另外,因为*为重复前一个字符的符号,因此,在*之前必须要紧挨着一个重复字......
  • linux 通过nvm安装node.js
    我的博客原文:linux通过nvm安装node前言 nvm是一个node版本控制的工具,他可以查看可以安装的node版本,安装node,以及切换node版本,传统的node安装,我们是下载压缩包,然后指定环境变量,当我们需要升级node的时候,需要重新下载node压缩包,更新或者回退版本显得有些麻烦,而使用nvm可以安......
  • FFmpeg开发笔记(九)Linux交叉编译Android的x265库
    ​《FFmpeg开发实战:从零基础到短视频上线》一书的“12.1.2 交叉编译Android需要的so库”介绍了如何在Windows环境交叉编译Android所需FFmpeg的so库,前文又介绍了如何在Linux环境交叉编译Android所需FFmpeg的so库,接下来介绍如何在Linux环境交叉编译Android所需x265的so库。1、安......
  • 【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换
    主页:醋溜马桶圈-CSDN博客专栏:Linux_醋溜马桶圈的博客-CSDN博客gitee:mnxcc(mnxcc)-Gitee.com目录1.进程创建1.1fork函数1.2fork函数返回值1.2.1写时拷贝1.3fork常规用法1.4fork调用失败的原因 、2.进程终止 2.1进程退出场景2.2进程常见退出方法 2......
  • 在Linux中,如何查看当前系统的版本信息?
    在Linux系统中,查看当前系统的版本信息可以通过多种方法实现,包括但不限于以下几种:1.使用lsb_release命令适用于遵循LinuxStandardBase(LSB)规范的发行版,如Ubuntu、Debian、CentOS(较新版本)等:lsb_release-a输出结果可能包含以下信息:DistributorID:发行版名称Descriptio......
  • 在Linux中,Linux内核和Shell有何区别?
    Linux内核和Shell是Linux操作系统中两个截然不同的组成部分,它们各自承担着不同的职责,有着明显的区别:Linux内核:定义:Linux内核是操作系统的核心组件,它是Linux系统的心脏,负责管理系统的硬件资源(如CPU、内存、磁盘、网络等)和提供基本的服务,为运行在其上的应用程序提供一个抽象、统......
  • debian12 linux root能用lightdm登陆xfce桌面,普通用户不能用lightdm登陆xfce桌面,闪
    Fn+Ctrl+F3,进入tty,发现登陆普通用户后再使用startxfce4可以直接进桌面下面参照https://forums.opensuse.org/t/normal-user-can-not-login/50756http://linux.it.net.cn/m/view.php?aid=6499有多种办法原因可能是用在自己账户下命令行sudostartx导致~/.Xauthority文件......
  • 在Linux中,什么是虚拟内存?它是如何工作的?
    虚拟内存是一种内存管理技术,它允许操作系统使用硬盘空间来模拟额外的内存资源。虚拟内存的工作原理涉及以下几个关键概念:地址空间:每个进程拥有自己的虚拟地址空间,这个空间对于进程来说是一致的和私有的。虚拟地址空间的大小通常远大于物理内存的大小。分页机制:操作系统将物理......
  • 在Linux中,如何查找系统中占用CPU最高的进程?
    在Linux系统中,查找占用CPU最高的进程通常有以下几种方法:1.使用top命令top命令提供了一个实时的、动态刷新的系统资源使用情况视图,其中包括CPU使用率最高的进程。top运行后,屏幕顶部会显示系统整体CPU使用情况,下方则列出各个正在运行的进程及其资源占用情况。默认情况下,进程列......
  • 在Linux中,如何创建一个新用户?
    在Linux中,创建新用户是一个常见的系统管理任务。这通常涉及到useradd或adduser命令(取决于你的Linux发行版),以及可能的后续步骤,如设置用户密码、分配用户组等。以下是一个详细的步骤说明,指导你如何在Linux中创建一个新用户:1.使用useradd或adduser命令创建新用户大多数Linux发行版......