当前位置: 首页 > wzjs >正文

潍坊疫情最新消息今天新增病例手机系统优化

潍坊疫情最新消息今天新增病例,手机系统优化,php动态网站开发教材答案,秦皇岛做网站的公司文章目录 一. 前言二. 开发环境三. 具体操作四. 实际效果 一. 前言 起因是这样的,我需要在Ubuntu中,实时读取正在播放音乐的音频流,然后对音频进行相关的处理。本来打算使用的PipewireHelvum的方式实现,好处是可以直接利用Helvum…

文章目录

  • 一. 前言
  • 二. 开发环境
  • 三. 具体操作
  • 四. 实际效果

一. 前言

起因是这样的,我需要在Ubuntu中,实时读取正在播放音乐的音频流,然后对音频进行相关的处理。本来打算使用的Pipewire+Helvum的方式实现,好处是可以直接利用Helvum图形化工具对软件输出的音频进行重定向,但是由于使用的是Ubuntu20.04,默认的音频服务器使用的是PulseAudio,替换为Pipewire后,播放的音频会出现卡顿不流畅,最终还是使用原生的PulseAudio+pavucontrol来实现实时播放的音频的处理。

二. 开发环境

Ubuntu: Ubuntu 20.04.6 LTS

虚拟机: VMware Workstation 17 Pro

音频服务器: PluseAudio

音频IO库: Portaudio

音频驱动: Alsa

开发语言: C/C++

三. 具体操作

举个例子,我们需要在Ubuntu中实时获取QQ音乐目前正在播放的音频流,我们需要按如下步骤进行操作:

1. 创建虚拟设备:

pactl load-module module-null-sink sink_name=music sink_properties=device.description="Virtual_Music_Sink"  

终端输入指令,通过加载module-null-sink模块,PulseAudio 创建了一个虚拟的音频输出设备,其名称为 “music”。该虚拟设备不会直接输出声音,但它会自动生成一个监控源,记录所有发送到该虚拟设备的音频数据。

指令部分作用
pactlPulseAudio 控制工具(PulseAudio Control)
load-module加载一个 PulseAudio 模块
module-null-sink加载 Null Sink 模块,创建一个虚拟音频输出设备
sink_name=music指定新创建的虚拟设备名称为 music
sink_properties=device.description=“Virtual_Music_Sink”设置设备的描述信息,在pavucontrol中显示为 “Virtual_Music_Sink”

2. 设置 QQ 音乐的音频输出:


pavucontrol

终端输入指令,pavucontrol打开(PulseAudio 音量控制工具),在 “Playback” 选项卡中将 QQ 音乐的输出设备改为你刚创建的 “music” 虚拟设备。

3. 将虚拟设备输出到扬声器中:

为了保证你能听到音频,还需要把虚拟设备"music" 的音频输出送到物理扬声器。这可以通过加载module-loopback环回模块实现:

pactl load-module module-loopback source=music.monitor sink=alsa_output.pci-0000_02_02.0.analog-stereo
部分作用
pactlPulseAudio 控制工具(PulseAudio Control)
load-module加载一个 PulseAudio 模块
module-loopback加载 Loopback 模块,用于将音频流从一个设备转发到另一个设备
source=music.monitor指定 音频来源 为 music.monitor(虚拟设备 music 的监控源)
sink=alsa_output.pci-0000_02_02.0.analog-stereo指定音频目标为 alsa_output.pci-0000_02_02.0.analog-stereo(物理扬声器)

需要注意的是:sink后面的物理扬声器信息需要根据自己的电脑来定。

4. 在 PortAudio 中捕捉音频:


// PortAudio回调函数
static int paCallback(const void* inputBuffer, void* outputBuffer,unsigned long framesPerBuffer,const PaStreamCallbackTimeInfo* timeInfo,PaStreamCallbackFlags statusFlags,void* userData)
{return paContinue;
}int main()
{PaStreamParameters inputParameters;inputParameters.device = Pa_GetDefaultInputDevice();inputParameters.channelCount = 1;            inputParameters.sampleFormat = paFloat32;    const PaDeviceInfo* deviceInfo = Pa_GetDeviceInfo(inputParameters.device);inputParameters.suggestedLatency = deviceInfo->defaultLowInputLatency;inputParameters.hostApiSpecificStreamInfo = nullptr;PaStream* stream = nullptr;Pa_OpenStream(&stream,&inputParameters,nullptr,              // 不使用输出流SAMPLE_RATE,FRAMES_PER_BUFFER,paNoFlag,paCallback,nullptr);Pa_StartStream(stream);while(1){}
}

5. pavucontrol修改程序音频入口:


打开pavucontrol后,在Recording中,把启动的应用程序的输入入口修改为Virtual_Music_Sink,这样就把程序的录音入口修改为我们的虚拟设备,由于前面我们使用load-module环回模块,已将QQ音乐中的输出重定向至Virtual_Music_Sink虚拟设备中,那么此时,Portaudio收到的input设备获得的音频流便是QQ音乐输出的音频流。

四. 实际效果

通过上述操作,我们可以采集到的QQ音乐中播放的音频,我们实时去捕捉音频中的节奏点,再通过Implot画出实时的歌曲的音频曲线和节奏信息,效果如下:


如果希望捕获的音频流的延时更低,可以将Ubuntu的内核版本替换为lowlatency低延时版本(默认是Generic Kernel),具体的操作可以参考这篇文章:Ubuntu切换lowlatency内核教程。

http://www.dtcms.com/wzjs/198345.html

相关文章:

  • 做不好的网站违法吗福建seo快速排名优化
  • 做免费的小说网站可以赚钱吗seo优化入门教程
  • 山东菏泽网站建设湖南靠谱seo优化报价
  • 知名网站建设开发网站地址ip域名查询
  • 源码资源下载站广东优化疫情防控措施
  • 用adsl做网站备案湖南网络优化
  • 有网站代码怎么建站google下载安装
  • 工信部2017网站备案百度推广seo自学
  • 网站建设面对的问题汉中网站seo
  • 网站积分商城该怎么建立哪些浏览器可以看禁止访问的网站
  • 网站怎样做优化昆明百度推广开户
  • 营销型网站建设实战》58同城推广效果怎么样
  • 中企动力网站建设方案西安做seo的公司
  • 效果好的免费网站建设外贸推广平台哪家好
  • 做网贷网站百度竞价排名叫什么
  • wordpress插件的使用方法seo兼职工资一般多少
  • ssh框架做音乐网站广告电话
  • 做网站要多少知识 java广东公司搜索seo哪家强
  • 旅游网站建设设计seo推广视频隐迅推专业
  • 怎么快速推广app墨猴seo排名公司
  • ssh网站开发seo网站分析工具
  • 网络网站制作考研培训机构排名
  • 扬州将建设网站seo推广是做什么的
  • 深圳工程建设服务网seo刷关键词排名免费
  • 靠谱网站建设公司有哪些职业培训机构哪家最好
  • 公司网站建设推进表哈尔滨seo关键词优化
  • 网站管理人员投稿网站
  • 大良营销网站建设市场网站外链怎么发布
  • 营销型网站建设需要有什么功能做网络优化哪家公司比较好
  • 开公司核名的网址什么是seo如何进行seo