一、 虚拟声卡是什么?
虚拟声卡是一种软件产品,它只对声音数字信号进行处理。虽然它不能产生声音,但可以用来实现声音的传输、存储或混音等功能。
1) 虚拟声卡工作原理:
虚拟声卡通过软件技术实现了软声卡及声卡的驱动程序。
虚拟声卡软件在计算机中为每一个虚拟声卡开辟一块内存,
应用程序可以通过虚拟声卡的音频输出端将音频流存储到开辟的内存中,同时可以通过虚拟声卡的输入端读取内存中的音频流。
每一个虚拟声卡的音频输入输出端的内部都是直连的,声音源程序产生(播放)声音,将声音送到虚拟声卡的音频输出端,虚拟声卡驱动程序直接将声音传到虚拟声卡的音频输入端。
应用程序 <---------->虚拟声卡(输出端 ----->一块内存 ----->虚拟声卡驱动程序 ----->音频输入 )
2) 虚拟声卡中声音的编码方式 pcm
3)根据实现方式大致可将虚拟设备分为两类:
一类是在原有特定物理硬件设备的基础上采用软件的方式对这些设备加以抽象,如虚拟内存、虚拟存储器、虚拟网卡;
另一类则仅以纯软件编程的方式实现虚拟设备,这类虚拟设备主要有:虚拟光驱、虚拟声卡等。
虚拟设备 从单一功能设备-》多个功能设备-》通过网络完成将多个设备虚拟化发展。
虚拟设备技术 从逻辑角度而不是物理角度来对资源进行配置。
二、虚拟声卡实现技术
通过对虚拟声卡源代码的分析,根据虚拟设备编程技术奖虚拟声卡的实现划为以下三个模块:
1)内核模式驱动:内核模式驱动程序是虚拟声卡技术的核心部分,执行大部分的响应用户需求的任务,内核模式驱动处理请求并填充好的数据包返回给用户模式驱动。(是被用户模式驱动的客户进程服务可以构造很多设备对象,并与他们虚连接)
2)用户模式驱动:用户模式驱动程序准备请求数据包并将数据包传给处理主要任务的内核模式驱动(用户模式驱动程序通过维持一个用户列表,驱动程序支持多用户操作。还具有内核模式驱动的服务管理功能,虚拟混频器)
3)控制面板程序:应用函数与用户模式驱动通信。 可以从内核驱动获得数据和修改内核驱动状态。
三、基于虚拟声卡(只处理声音数字信号)的各种异构(通信协议、语音编码)VOIP网络电话互通设计(通过开放API设置客户端声卡音频的输入和输出,获取PCM格式音频流)及实现 (解决VOIP通信技术在各个通信软件之间不能互通的问题的一个思路) 产品和业务互通 自动答录机和电话转接等功能(可以将一种网络电话输出的声音信息直接传给另一种网络电话的输入端)。
应用工程师需要用到一张虚拟声卡,以前没有接触过,这里mark一下。
内核配置如下:
│ -> Device Drivers
│ -> Sound card support (SOUND [=y])
│ -> Advanced Linux Sound Architecture (SND [=y])
│ -> Generic sound devices (SND_DRIVERS [=y])
# aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Dummy [Dummy], device 0: Dummy PCM [Dummy PCM]
Subdevices: 8/8
Subdevice #0: subdevice #0
Subdevice #1: subdevice #1
Subdevice #2: subdevice #2
Subdevice #3: subdevice #3
Subdevice #4: subdevice #4
Subdevice #5: subdevice #5
Subdevice #6: subdevice #6
Subdevice #7: subdevice #7
card 1: imxspdif [imx-spdif], device 0: S/PDIF PCM snd-soc-dummy-dai-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: imxhdmisoc [imx-hdmi-soc], device 0: i.MX HDMI Audio Tx hdmi-hifi-0 []
Subdevices: 1/1
Subdevice #0: subdevice #0
DTS配置
dummy codec 驱动
RK系列SDK -- dummy codec虚拟声卡注册 https://blog.csdn.net/hb9312z/article/details/103315401
[RK3399][Android7.1] 调试笔记 --- 虚拟声卡驱动添加 https://blog.csdn.net/kris_fei/article/details/85237331
五、声卡和 PCM 设备的建立过程
ALSA表示高级Linux声音体系结构(Advanced Linux Sound Archit