手机实时提取SIM卡打电话的信令声音-新的篇章(三、Android虚拟声卡探索)

embedded/2025/1/21 9:33:03/

手机实时提取SIM卡打电话的信令声音-新的篇章(三、Android虚拟声卡探索)

前言

前面的篇章中,我们从理论方向和实际市面上出现的音频线传输声音的方式,讨论绕开手机对SIM卡电话通话声音的封锁场景的可行性,并实际选购几款数字和模拟的USB转接3.5mm音频口的转接头和耳机进行测试,验证这个方向对Android手机型号和系统版本的影响和支持力度。

本篇章中,我们尝试从虚拟声卡的角度来构思一下,如何不用任何外置配件的方式,提取到手机或电脑设备中输出的声音数据。

由于GCC编译体系中,Linux、Windows、Android、嵌入式Linux基本不分家,我们可以采用先从电脑版本的Linux或Windows系统中把方案架构和测试工具和测试手段都整理出来后,再尝试将它们移植到Android和嵌入式Linux的方式,进行迁移和验证。进而得出这些方式或方法是否有效、以及是否符合预期要求的评估结论。

什么是虚拟声卡

虚拟声卡是一种软件程序,允许用户在系统中创建一个虚拟的音频设备。通过这个设备,用户可以输入和输出音频数据,而无需依赖物理声卡。虚拟声卡尤其适用于需要音频路由的应用,比如录音软件、在线会议等。

虚拟声卡有什么作用

虚拟声卡主要用在没有声卡的机器上实现声音播放等功能。它是一种软件解决方案,允许计算机在没有硬件音频设备的情况下产生和处理声音。

常见的虚拟声卡的场景有哪些

要说虚拟声卡的常见场景,在云服务器的各种虚拟容器中进行软声卡的安装后再将声音传输到本地播放的场景是我们最常见的虚拟声卡的场景。因为通常在云服务器和云服务器划分的虚拟容器中,是不存在物理声卡的,要想让远程的机器发声或者让容器内依赖声卡工作的软件能正常安装和使用,最简单的方式就是在容器中配置虚拟声卡(可能会包括驱动和内核应用),通过虚拟声卡把声音进行回传或按预制的方式进行处理。

至于Android的虚拟声卡,现在市面上云手机大把,随便一搜到处都是,它们也是在云服务器中分割出一个个容器,然后再上面安装各种软件,把声音传输回本地设备进行播放。从理论上来说,Android的虚拟声卡与普通的远程Windows或Linux中配置的虚拟声卡并不存在本质上的区别。

你看,其实虚拟声卡到处可见,属于老生常谈的应用场景。阳光下并没有多新鲜的事情。

在乌班图(Ubuntu)中配置虚拟声卡

Linux中由于yum源的众所周知的原因,我们一般采用Ubuntu来进行宿主机环境的验证。在Ubuntu中,虚拟声卡通常采用snd-aloop来进行,即通过apt-get install alsa-utils安装了对应工具集后,通过配置/etc/modprobe.d目录下的文件,把虚拟声卡加载到Linux系统当中。在使用的时候,可以使用aplay -l 查阅系统中配置的声卡,并大致如下:

sudo apt-get install alsa-utils

sudo modprobe snd-aloop

lsmod | grep snd_aloop

arecord -l

aplay -l

如果需要虚拟声卡在启动的时候就自动创建,就需要修改/etc/modprobe.d/alsa-base.conf文件,在文件内添加如下一行内容后,运行sudo alsa force-reload命令重启音频服务即可。

# 创建虚拟声卡

options snd-aloop index=0

如果不需要自动创建则不用配置,只需要手动运行sudo modprobe snd-aloop命令即可,如下图所示:

Win/Linux/Android不同平台的声卡的差异

Android和Linux都使用ALSA框架来进行声音音频的调度,对于普通声音而言,二者除了使用的授权上有差异之外,其余方面并无特殊的差异。

Windows方面由于音频驱动架构方式的不同,在部署和使用上存在较大的差异,但Github中本身就存在有开源库Virtual Audio Pipeline,下载地址为:https://github.com/syams86/Virtual-Audio-Pipeline

我们在早些年的篇章中对Windows平台虚拟声卡的使用进行了描述,感兴趣的读者可以自行查阅《电脑蓝牙打电话-总结(篇外、虚拟声卡选型)》电脑蓝牙打电话-总结(篇外、虚拟声卡选型)_vb-audio virtual cable-CSDN博客

虚拟声卡如何测试和检验效果

上述操作中创建的虚拟声卡,都是成对出现的,即同一个声卡card号的device 0 和device 1一个做输入另一个做输出。

在使用中,我们可以简单的对device 0做播放音频文件,然后对device 1进行录音,或者反过来操作,实现声音和通话的全双工通信。如下图所示:

我们在Linux中可以使用【arecord -D hw:1,1,2 -r 采样率 -t wav 文件名】的方式对虚拟声卡进行录制,使用【aplay -D hw:1,0,2 -c 1 -r 采样率 文件名】的方式对虚拟声卡进行播放,实现将文件10086.wav通过虚拟声卡播放并转录到10086_output.wav文件的目的,如下图:

我们将播放的原始文件和转录后的输出文件,使用GoldWave或其它音频播放工具进行打开和查阅,可以很容易看出虚拟声卡的录制是能正常生效的。也即使用此方式在Linux中创建的虚拟声卡,能够正常应用在声音数据的重定向和提取。理论上,此方式也应该能正常迁移到Android系统或嵌入式Linux中,供具有root超级用户权限的应用进行运行和使用。

小结与思考

经过我们对Linux和Ubuntu的一顿命令和文件数据操作,我们很简单的就通过电脑桌面的方式复现了虚拟声卡对媒体应用在声音传输方向的提取和加工操作。当前的计算机世界完全具有完善的方案进行此类普通声音或语音文件的媒体操作能力。

但这里的虚拟声卡其实还有一个最重要的使用场景没有验证:它能传递普通的音乐和铃声等声音,但它能传递电话通话的声音吗?而这才是跟本次主题息息相关的问题。

这个疑问,并非没有先例。安卓手机在同屏共享领域有一个非常知名的开源软件scrcpy,它在针对Android11及以上版本就提供了声音共享的能力,使电脑和手机同屏共享时能把手机播放的声音清晰的从adb传输线中同步到电脑进行播放。但是,打电话时的声音通道无法被共享。

因此,在这一块上,如果我们需要对当前预研的课题进行打电话声音方向上的提取,使用ALSA方式或PulseAudio进行声音数据的提取,需要进行更多和更细致的扩展和适配,并不是看上去的那么简单。


上一篇:手机实时提取SIM卡打电话的信令声音-新的篇章(二、USB音频线初步探索)

下一篇:手机实时提取SIM卡打电话的信令声音-新的篇章(篇外小结与思考)


http://www.ppmy.cn/embedded/134292.html

相关文章

Linux的第二次作业

作业1 1.建组 [rootbogon 桌面]# groupadd -g 2000 shengcan [rootbogon 桌面]# groupadd -g 2001 caiwu [rootbogon 桌面]# groupadd -g 2002 jishu 2.建立用户并赋予相应权限 [rootlocalhost 桌面]# useradd -u 2000 -g shengcan -G …

08 go语言(golang) - 数据类型:数组、切片

数据类型 Go语言提供了一组丰富的数据类型,涵盖了基本的数值类型、复合类型和特殊类型。 基本数据类型 布尔型: bool:表示真或假(true 或 false)。 数值型: 整型:包括有符号和无符号整数。 有…

Leetcode 排序链表

这段代码的算法思想是 归并排序,一种适合链表的排序方法。它通过递归地将链表拆分成两部分,分别排序,然后合并已排序的部分,从而达到整体排序的目的。以下是代码的中文解释: 算法步骤: 找到链表的中点&…

Python数据分析入门知识基础和案例(万字长文)

目录 数据分析的重要性 Python数据分析工具链 NumPy数组操作 Pandas数据结构与操作 DataFrame操作 Series操作 数据转换 数据清洗 数据分析案例 数据读取与预处理 数据分析 结果展示 Matplotlib基础绘图 线图 柱状图 散点图 PyEcharts交互式图表 可视化案例展…

大模型,多模态大模型面试问题记录【时序,Qformer,卷积,感受野,ControlNet,IP-adapter】

大模型,多模态大模型面试问题记录24/10/27 问题一:视频生成例如Sora或者视频理解internvl2模型怎么提取时序上的特征。问题二:Qformer介绍训练阶段一训练阶段二 问题三:卷积维度计算公式,感受野1. 卷积层输出高度和宽度…

Docker-in-Docker(DinD)

Docker-in-Docker(DinD)是一种在 Docker 容器内部运行 Docker 引擎的技术。这种方法允许您在一个 Docker 容器内构建和运行其他 Docker 容器。以下是 Docker-in-Docker 的工作原理及其使用场景的详细解释。 工作原理 1.1 Docker 引擎的架构 Docker 引擎…

一文总结AI智能体与传统RPA机器人的16个关键区别

基于LLM的AI Agent(智能体)与**RPA(机器人流程自动化,Robotic Process Automation)**两种技术在自动化任务领域中扮演着至关重要的角色。AI智能体能够借助LLM拥有极高的灵活性,可以实时理解和响应环境的变化…

PostgreSQL-06-入门篇-集合运算

文章目录 1. UNION 组合多个查询的结果集简介带有 ORDER BY 子句的 UNION设置样例表PostgreSQL UNION 示例1) 简单的 PostgreSQL UNION 示例2) PostgreSQL UNION ALL 示例3) 带 ORDER BY 子句 UNION ALL 示例 2. INTERSECT 取交集简介带 ORDER BY 子句的 INTERSECT 操作Postgre…