【小白课程】openKylin系统音频大体框架介绍

news2024/11/20 9:21:01

在桌面操作系统中,音频是至关重要的一环,音频的稳定支持直接决定了用户的听感以及使用体验,今天我们就给大家介绍openKylin桌面操作系统背后关于音频的那些故事。

先看一张框架图,这张图大致介绍了openKylin操作系统音频的框架组成,层次从下往上依次递增:

01框架各层次关系

在UKUI桌面环境中,声音(ukui-media)主要用来控制系统的输入输出音量。ukui-media使用pulseaudio-lib 和 alsa-lib库来获取一系列的输入输出设备,以及控制相应输入输出设备的音量。

openKylin系统使用pulseaudio声音服务器来作为操作系统和alsa的通信媒介,pulseaudio声音服务器介于应用程序和声卡驱动之间。当不同的应用调用声音服务器的API来播放声音时,它们把音频数据送到服务器, 服务器将一个以上的播放请求混音后,再发送给底层的声卡驱动(ALSA或OSS)。由ALSA或OSS来驱动声卡播放混音后的数据。

02各层次详细介绍

1、ukui-media

ukui-media的界面如下图所示,其可以对系统声音进行图形化控制。

声音托盘中会显示可用的输出设备,点开“声音设置”字样,我们会进入更全面的声音设置界面。

其功能有:

1、可以选择可用的输入输出设备

2、改变可用的输入输出设备音量

3、输出设备声道平衡功能

4、输入设备降噪功能

5、设置对应系统功能的提示音音效

关于以上功能的实现,其中的底层逻辑就涉及到接下来要讲的 pulseaudio 层。

2、PulseAudio层

ukui-media 的实现,其主要是调用了 pulseaudio-lib 库。PulseAudio是一个声音服务器,也是一个后台进程,其从一个或多个音源(进程或输入设备)接受声音输入,然后重定向到一个或多个槽(声卡,网络音频支持,或其他进程)。

其主要功能有:

1、可对每一个应用程序进行音量控制

2、可扩展的插件与支持可装载模块架构

3、兼容性许多流行的音频应用程序

4、支持多重音源和多重输出

5、低延时操作和支持延迟测量

6、一个对处理器资源效率零拷贝内存架构

7、能够发现本地网络上使用PulseAudio的其他计算机并通过其扬声器直接播放声音

8、能够改变一个应用程序的声音输出设备,就算这个应用程序在播放声音(程序不需要支持这特性,而事实上,程序甚至没有意识到改变)

9、带有脚本功能的命令行界面

10、一个功能完善且带有命令行重新配置功能的守护进程

11、内置采样转换和重采样功能

12、能够合并多块声卡成一个声卡

13、能够同步播放多个音频流

14、动态检测蓝牙音频设备

15、使全系统均衡的能力

在前文有提到,pulseaudio声音服务器介于应用程序和声卡驱动之间,意思是pulseaudio并不是最底层的实现,他是在调用alsa-lib的基础上添加了更丰富的功能,但是其底层实现还是离不开 alsa-lib。

3、ALSA层

从前文可知,真正驱动底层硬件的是ALSA,ALSA是目前Linux主流的音频体系架构,全称(Advanced Linux Sound Architecture, 高级linux音频架构)。如果说PulseAudio是用户级的混音器(mixer),它直接管理你的声卡,那么ALSA就是内核级混音器。在运行时,PulseAudio使用ALSA提供的驱动,管理各种混合、设备、网络音频支持等涉及音频的服务。

说到ALSA,我们就不得不先提到OSS(Open Sound System),这是unix平台上一个统一的音频接口。此前,每个Unix厂商都会提供一个自己专有的API,用来处理音频。这就意味着为一种Unix平台编写的音频处理应用程序,在移植到另外一种Unix平台上时,必须要重写。

不仅如此,在一种平台上具备的功能,可能在另外一个平台上无法实现。但是,OSS出现以后情况就大不一样了,只要音频处理应用程序按照OSS的API来编写,那么在移植到另外一个平台时,只需要重新编译即可。因此,OSS提供了源代码级的可移植性。

ALSA可以看成是OSS的继任者,但是ALSA却没有完全摆脱OSS的影子,ALSA的兼容层是包含OSS的,ALSA支持旧版本的OSS API 接口,能为大多数的OSS应用程序提供兼容,ALSA也因为其透明性、高效性、灵活性,以及了兼容性,使之成为了Linux音频系统的标准,也成为了几乎其他所有的音频架构和硬件通信的桥梁。

03框架实现方案

结合以上,openKylin桌面系统关于声音的框架方案就清晰了:

  • 用户层,使用ukui-media给用户提供方便的可视化图形控制界面
  • 功能层:使用pulseaudio来实现丰富的功能
  • 驱动层:调用alsa-lib 来高效实现底层驱动

如下图所示:

举个例子,针对于一个完整的调节音量过程大致是这样,用户使用面板上的音量调节工具调节音量时,实际上调节的是个虚拟设备,用户调节PulseAudio的虚拟设备,PulseAudio调节ALSA,ALSA调节完底层硬件后,反馈给PulseAudio,PulseAudio再反馈给虚拟设备,按原路返回。大致流程如下图所示:

04具体功能实现举例

1、可用端口搜寻

可用端口的实现,首先需要将所有声卡中能进行输出的端口列出来,然后对所有的端口进行识别判断其可用性。实现可用端口的好处:能够将声卡中识别到所有的可用端口都显示出来,有的声卡有多个可用的输出端口,只是在不同的profile中,这样用户能更简洁到看到声卡支持的输入输出设备,如下图所示:

2、默认输入输出设备逻辑

每当系统的输入输出端口改变时,则有可能会更改默认的输入/输出设备,如右图所示设置默认的输出设备如下图所示:

因此,我们设置了一个不同设备的优先级,即如果有多个可选择设备存在的情况,我们会优先选择优先级高的设备作为默认设备,大致实现流程如下:

今天的讲解到这就结束啦~通过前面的讲解,大致介绍了openKylin系统关于声音这一部分的主要框架逻辑,其使用了ukui-media给用户提供了图形化界面,结合pulseaudio对于各功能的实现,附加上alsa对底层硬件的高效率处理,其体验效果能使音频完美呈现且稳定运行,后期我们也会进一步完善其功能,欢迎感兴趣的小伙伴来与我们进行更深入的探讨~

openKylin(开放麒麟)社区旨在以“共创”为核心,在开源、自愿、平等、协作的基础上,通过开源、开放的方式与企业构建合作伙伴生态体系,共同打造桌面操作系统顶级社区,推动Linux开源技术及其软硬件生态繁荣发展。

社区首批理事成员单位包括麒麟软件、普华基础软件、中科方德、麒麟信安、凝思软件、一铭软件、中兴新支点、元心科技、中国电科32所、技德系统、北京麟卓、先进操作系统创新中心等13家产业同仁和行业机构。

来源:封昭祥

审核:openKylin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/127823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态配置开发模式在转转的落地实践

文章目录一、问题背景1.1 场景概述1.2 风险问题1.3 效率问题二、问题剖析2.1 以往的应对方式2.2 主要矛盾点与问题本质的探索2.2.1 主要矛盾点2.2.2 问题本质的探索三、方案设计3.1 视图展示的标准化3.2 视图构建的自动化3.3 开发体验的沉浸化3.4 整体架构设计四、落地现状五、…

谷粒商城之高级篇

谷粒商城之高级篇 目录谷粒商城之高级篇前言2 商城业务2.1 商品上架2.1.1 商品Mapping2.1.2 上架细节2.1.3 数据一致性2.1.4 代码实现2.2 商城系统首页2.2.1 渲染首页2.2.2 渲染一级分类数据2.2.3 渲染二级三级分类数据2.2.4 nginx 搭建域名访问环境2.3 检索业务2.3.1 页面环境…

Vue3富文本编辑器wangEditor 5使用总结

wangEditor 是一个开源 Web 富文本编辑器,开箱即用,配置简单 官网链接:https://www.wangeditor.com 使用流程: 1.在项目中安装wangEditor 输入以下命令安装 npm install wangeditor/editor --save npm install wangeditor/edi…

React通用后台管理系统-笔记1

环境 node: 16.17.1 npm: 8.15.0 Ant Design of React官网:https://ant.design/docs/react/introduce-cn 一、创建项目 npm init vite Project name: lege-management Select a framework: react Select a variant: react-ts 打开package.json,参考以下…

三、串(字符串)

一、定义及常见术语 串相等:当两个串的长度相等且对应位置上的字符都相同时,这两个串才是相等的 所有的空串都是相等的 二、两种存储结构 2.1顺序存储结构(更常用) #define MAXLEN 255 typedef struct {char ch[MAXLEN1];//存…

Flink Shuffle 3.0: Vision, Roadmap and Progress

摘要:摘要:本文整理自阿里云高级技术专家宋辛童 (五藏),在 FFA 2022 核心技术专场的分享。本篇内容主要分为五个部分:Flink Shuffle 的演进流批融合云原生自适应Shuffle 3.0Tips:点击「阅读原文」查看原文视频&演讲…

Node.js--》模块化、npm与包的讲解与使用

目录 模块化 Node.js中模块的分类 模块作用域 模块的加载机制 npm与包 npm包管理工具的安装与使用 包管理配置文件 包下载速度 包的分类 发布包 模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。对整个系统来说&#xff0…

数据湖---hudi简介

文章目录hudi是什么核心概念TilelineTable TypesQuery Types特性官网 hudi是什么 apache hudi是下一代流式数据湖平台。hudi将数仓和数据库的核心功能带到了数据湖。提供表、事务、高效的upsert、delete,高级索引,流式注入服务,数据集群、压…

圣诞特辑 · Three.js加载圣诞树模型

🎄2022年圣诞节到来啦,很高兴这次我们能一起度过~🎄 文章目录🎉前言🔎预览🎁项目&资源项目源码地址打包运行✒️编码实现🎉前言 2022圣诞节来了,让我们一起使用Three.js实现导入…

渗透测试-ctfshow 爆破(web入门)

大家可以关注一下我的公众号-小白渗透测试,互相学习。 web1 打开环境 先随便输入一个账号密码,使用bp进行抓包分析。 可以看到,账号密码进行了base64加密,使用工具进行解密,可以看到是账号:密码这样一个格式。 然后我…

JavaSE笔记——函数式编程(Lambda表达式)

文章目录前言一、第一个Lambda表达式二、如何辨别Lambda表达式三、引用值,而不是变量四、函数接口五、类型推断总结前言 Java 8 的最大变化是引入了 Lambda 表达式——一种紧凑的、传递行为的方式。 一、第一个Lambda表达式 Swing 是一个与平台无关的 Java 类库&a…

数组与集合有什么不同之处

这个问题其实就是一个非常基础的面试题,一般面试官想了解你基础知识方面的掌握时,基本都会问这个问题,尤其是一些,计算机学子毕业之后,如果还是想要从事计算机技术相关的行业时,那么在面试的时候就需要做好…

Faster RCNN网络源码解读(Ⅰ) --- Fast RCNN、Faster RCNN论文解读

目录 一、Fast R-CNN论文解读 二、Faster R-CNN论文解读 一、Fast R-CNN论文解读 Fast R-CNN是作者Ross Girshick继R-CNN后的又一力作。同样使用VGG16作为网络的backbone,与R-CNN相比训练时间快9倍,测试推理时间快213倍,准确率从62%提升至66…

Win10家庭版安装Docker桌面版

文章目录1.主板BIOS中开启虚拟化2.开启Hyper-V(1)使用下列代码生成一个.cmd文件,并以管理员身份运行该文件。(2)看到运行成功即可关闭该文件。(3)勾选Hyper-V设置里的所有选项(4&…

2-2-3-10、并发设计模式

目录终止线程的设计模式Two-phase Termination(两阶段终止)模式——优雅的终止线程使用场景避免共享的设计模式Immutability模式——想破坏也破坏不了如何实现使用 Immutability 模式的注意事项Copy-on-Write模式应用场景Thread-Specific Storage 模式—…

这几个实用的微信功能,你该知道

生活中我们每天都会使用到微信,用了10年才发现,原来微信隐藏这么多神功能,真是太实用了,下面一起来看看吧!朋友圈发长视频 如果你想要在朋友圈里分享长视频,可以借助微信收藏“转发”到朋友圈。 在收藏里添…

一位普通前端开发的一年|2022总结

前言 2022年转眼快要结束,在这一年我学到了很多东西,现在就来总结一下我的2022,复盘一下过去一年的成果。 总结 在2022年2月底从上一家公司跳槽,面试了两家公司两家拿到了两个offer,当时感觉自己很厉害,…

jdk-Atomic源码学习

上文:AQS-Exchanger源码学习源码下载:https://gitee.com/hong99/jdk8Atomic了解atomic是并发框架中的一员,所属位置:java.util.concurrent.atomic 该类主要是用来解决内存可见性、有序、线程安全,当然底层也是通过cas来…

NEUQ week8 动态规划

题目 P1616 疯狂的采药 题目背景 此题为纪念 LiYuxiang 而生。 题目描述 LiYuxiang 是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个…

贪吃蛇基础·框架版(简单)结尾有原码

更新不易,麻烦多多点赞,欢迎你的提问,感谢你的转发, 最后的最后,关注我,关注我,关注我,你会看到更多有趣的博客哦!!! 喵喵喵,你对我…