首页 > 系统相关 >ubuntu下使用rtaudio采集桌面音频&扬声器音频

ubuntu下使用rtaudio采集桌面音频&扬声器音频

时间:2023-09-20 19:12:24浏览次数:56  
标签:RtAudio 音频 rtaudio record ubuntu 48000 采集

最近在做国产化系统的音频采集,Ubuntu/Kylin/UOS下可以使用PulseAudio来控制音频输入输出,可以直接使用apt install libpulse-dev获取相关库进行开发。
不过我选择使用封装更好的RtAudio来进行ubuntu下的音频采集,RtAudio提供了一套跨平台的音频输入输出控制API,而且在linux下除了PulseAudio,还可以选择ALSA, JACKOSS等方式。

编译源码

我是在本地编译的源码,后来发现可以直接使用apt install librtaudio-dev,不过还是推荐自己编译,源码地址:https://github.com/thestk/rtaudio.git

sudo apt install libpulse-dev #需要先安装依赖库libpulse.so
git clone https://github.com/thestk/rtaudio.git

下载源码后,对rtaudio/tests/record.cpp进行两处修改,方便后面做测试
一个是main函数里RtAudio adc类的初始化,添加一个传参RtAudio::LINUX_PULSE

一个是将adc.getDefaultInputDevice()改为adc.getDefaultOutputDevice(),在后面执行record测试程序时将会默认采集桌面输出音频

cd rtaudio
mkdir build
cd build
cmake .. -DRTAUDIO_API_PULSE=ON -DRTAUDIO_BUILD_TESTING=ON -DCMAKE_INSTALL_PREFIX=$PWD
make -j4
make install

执行完后,在build下生成了librtaudio.so,进入build/tests,执行./record 2 48000 10,就会在build、tests下生成一个10秒的record.pcm文件,执行./playraw 2 48000 record.pcm即可播放这个文件。

采集桌面音频失败

但是经过测试,发现record并不能采集桌面的音频,输入./record 2 48000 10 99,可以显示全部的采集设备:

这时候我们输入1,也就是选择Device #1 Monitor of 内置音频 模拟立体声这个设备,然后执行./playraw 2 48000 record.pcm,发现播放出来音频了。
而RtAudio的getDefaultOutputDevice()默认指向Device #0 内置音频 模拟立体声这个设备,如果我们想要采集当前音频输出,需要对RtAudio源码进行一下修改。
参考OBShttps://unix.stackexchange.com/questions/532042/how-can-i-grab-pulseaudio-output 这篇回答,通过pulse获取到的默认输出设备default_sink_name并不能采集音频,必须连接default_sink_name.monitor来进行监听。
需要修改一下RtAudio.cpp,要修改地方有两处,一个是rt_pa_set_server_info函数,paProbeInfo->defaultSinkName添加一个.monitor后缀:

另一处需要修改的是rt_pa_set_source_info_and_quit函数,需要添加info.isDefaultOutput

修改完后重新编译,再执行

./record 2 48000 10
./playraw 2 48000 record.pcm

就可以正常采集到桌面音频。

标签:RtAudio,音频,rtaudio,record,ubuntu,48000,采集
From: https://www.cnblogs.com/chaichengxun/p/17715679.html

相关文章

  • Ubuntu分区大小调整
    如何调整Ubuntu各个目录的分区大小呢?如下图,/根目录分配了217G太大了,而家目录/home则分配了265G又觉得不够,如何将/根目录分多点空间给到/home目录?  网上搜到的大部分是说命令行下输入gparted,回车后运行gparted软件,然后进行分区调整。这里我试了一下,发现显示的分区都带小锁头......
  • ubuntu安装RabbitMQ
    一、概述本地需要做RabbitMQ测试,想着安装包本地不利于来回换机子测试。就想着把其安装到云服务上,云服务的系统是ubuntu系统。这样通过远程连接,就不需要担心换机器的时候RabbitMQ用不了的问题了。可谓一次安装到处使用二、示例,备注:这里直接安装最新版的1.安装erlan......
  • ubuntu 下mysql的常用命令
    MySQL数据库的基本操作命令=========================一、mysql服务操作0、查看数据库版本sql->status;1、netstartmysql//启动mysql服务2、netstopmysql//停止mysql服务3、mysql-h主机地址-u用户名-p用户密码//进入mysql数据库4、quit//......
  • ubuntu22 添加新硬盘
     需要用到的命令:lsblk-f   #可以查看硬盘挂载目录结构,硬盘格式,UUID等df-hT   #可以查看硬盘格式blkid/dev/sda   #可以查看硬盘的UUID和格式mkfs.ntfs-f/dev/sda1  #快速格式化为ntfs,不加-f会很慢mkfs.ext4/dev/sda1  #快速格式化为ext4 1,首先......
  • Ubuntu22.04运行Splash Docker镜像报错,cloud not load the Qt platform xcb in even t
    一、问题描述Ubuntu22.04运行SplashDocker镜像报错,cloudnotloadtheQtplatformxcbineventhoughitwasfound奇怪的地方在于,停止运行,重新执行同样的语句,即恢复正常。本文只做了问题记录,没有深入研究原因。sudodockerrun-it-p8050:8050scrapinghub/splash二......
  • 基于wsl的ubuntu vscode调试环境搭建--Apple的学习笔记
    一,前言正好在网上搜索文章的时候看到了wsl,我想起来它也是一个虚拟机环境,所以我要用用,没想要一用,感觉比vmware还要方便。二,环境搭建A,在wsl中安装ubuntu1.     首先打开powershell 输入命令wsl--list–online,来查看支持安装的ubuntu版本。 注意:若提示连接超时,则是自动ip......
  • 为什么我的 ubuntu22.04 每安装一个软件,就需要重启很多服务?
    在一般情况下,安装一个软件通常不需要重启系统或服务。但是,有些软件的安装可能需要重启相关的服务或重新加载配置。以下是可能导致需要重启服务的几种情况:1.安装依赖关系:某些软件可能依赖于其他服务或库。在安装这些软件时,系统可能需要重启相关的服务以确保依赖项的正确配置和加载......
  • 2-web前端 音频、视频、表格、表单
    1.音频2.视频3.有序无序列表有序列表:ol>liol内必须是li,li内没限制无序列表:ul>liul内必须是li,li内没限制4.表格 th---字体加粗并居中示例: 案例:个人简历 5.表单 针对表单整理的相关问题:<!--action:行动提交的地址服务器地址后台地址收件人地址......
  • 利用U盘重装ubuntu系统及惠普Z820服务器配置过程
    说几句无关的话:下列教程是我在组内负责装机后写的文档,感觉可以参考,所以分享给大家  以下是安装流程装显卡拆开机箱内的各种大块保护壳,直接扣住绿色地方进行拉拔等操作,不要太用力,不敢下手可以问组内人参考硬件茶谈装机教程;也可查询其他教程,一个插槽,卡扣拉开按上显卡,卡扣自动......
  • Ubuntu安装MySQL Access denied for user ‘root‘@‘localhost‘
    1、其它用户登录MySQL2、#查看user表usemysql;selectuser,pluginfromuser;3、修改root密码格式#修改其密码格式updateusersetplugin='mysql_native_password'whereuser='root';#查询其用户selectuser,pluginfromuser;#刷新权限flushprivileges;4、增加root密码#......