虚拟声卡

虚拟声卡是一种不依赖物理硬件的软件解决方案,用于处理声音数字信号,实现传输、存储和混音功能。文章详细介绍了虚拟声卡的工作原理,包括其在Linux中的实现,如ALSA体系结构、声音缓存、数据传输机制以及Over and Under Run的概念。还讲解了声卡和PCM设备的建立过程,包括内核模式驱动、用户模式驱动和控制面板程序的角色。此外,文章还讨论了虚拟声卡在VOIP网络电话互通设计中的应用,并提供了Linux中创建虚拟声卡dummy的示例。
摘要由CSDN通过智能技术生成

一、 虚拟声卡是什么?

虚拟声卡是一种软件产品,它只对声音数字信号进行处理。虽然它不能产生声音,但可以用来实现声音的传输、存储或混音等功能。

1) 虚拟声卡工作原理:

虚拟声卡通过软件技术实现了软声卡及声卡的驱动程序

虚拟声卡软件在计算机中为每一个虚拟声卡开辟一块内存,

应用程序可以通过虚拟声卡的音频输出端将音频流存储到开辟的内存中,同时可以通过虚拟声卡的输入端读取内存中的音频流。

每一个虚拟声卡的音频输入输出端的内部都是直连的,声音源程序产生(播放)声音,将声音送到虚拟声卡的音频输出端,虚拟声卡驱动程序直接将声音传到虚拟声卡的音频输入端。

应用程序 <---------->虚拟声卡(输出端 ----->一块内存 ----->虚拟声卡驱动程序   ----->音频输入 )

2) 虚拟声卡中声音的编码方式 pcm

3)根据实现方式大致可将虚拟设备分为两类

一类是在原有特定物理硬件设备的基础上采用软件的方式对这些设备加以抽象,如虚拟内存、虚拟存储器、虚拟网卡;

另一类则仅以纯软件编程的方式实现虚拟设备,这类虚拟设备主要有:虚拟光驱、虚拟声卡等。

虚拟设备 从单一功能设备-》多个功能设备-》通过网络完成将多个设备虚拟化发展。

虚拟设备技术 从逻辑角度而不是物理角度来对资源进行配置。

 

二、虚拟声卡实现技术

 通过对虚拟声卡源代码的分析,根据虚拟设备编程技术奖虚拟声卡的实现划为以下三个模块:

1)内核模式驱动:内核模式驱动程序是虚拟声卡技术的核心部分,执行大部分的响应用户需求的任务,内核模式驱动处理请求并填充好的数据包返回给用户模式驱动。(是被用户模式驱动的客户进程服务可以构造很多设备对象,并与他们虚连接)

2)用户模式驱动:用户模式驱动程序准备请求数据包并将数据包传给处理主要任务的内核模式驱动(用户模式驱动程序通过维持一个用户列表,驱动程序支持多用户操作。还具有内核模式驱动的服务管理功能,虚拟混频器)

3)控制面板程序:应用函数与用户模式驱动通信。 可以从内核驱动获得数据和修改内核驱动状态。

 

三、基于虚拟声卡(只处理声音数字信号)的各种异构(通信协议、语音编码)VOIP网络电话互通设计(通过开放API设置客户端声卡音频的输入和输出,获取PCM格式音频流)及实现 (解决VOIP通信技术在各个通信软件之间不能互通的问题的一个思路) 产品和业务互通 自动答录机和电话转接等功能(可以将一种网络电话输出的声音信息直接传给另一种网络电话的输入端)。

 

四、linux 虚拟声卡 dummy 创建

应用工程师需要用到一张虚拟声卡,以前没有接触过,这里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

  • 1
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值