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

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

手机实时提取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卡打电话的信令声音-新的篇章(篇外小结与思考)

相关文章:

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

手机实时提取SIM卡打电话的信令声音-新的篇章(三、Android虚拟声卡探索) 前言 前面的篇章中,我们从理论方向和实际市面上出现的音频线传输声音的方式,讨论绕开手机对SIM卡电话通话声音的封锁场景的可行性,并实际选购几款数字和模拟的USB转接…...

REST APIs与微服务:关键差异

在构建基于微服务的应用程序时RESYful API和微服务这两个术语经常相伴出现。然而,它们指的是截然不同的东西。 了解 RESTful API 和微服务之间差异的最简单方式是这样: 微服务:它们是构成更大规模基于微服务的应用程序的单个服务和功能&…...

【网安案例学习】反向蛮力攻击Reverse Brute Force Attack

【故事一】 在一个温暖的秋日下午,Jack坐在旧金山一家宁静的咖啡馆里,准备开始他的最新写作项目:追溯反向蛮力攻击的起源和发展。这是一个他一直想深入挖掘的主题,因为它揭示了网络安全世界中一个鲜为人知却极具影响力的故事。 …...

TCP/IP网络编程:理解网络编程和套接字

TCP/IP网络编程:理解网络编程和套接字 网络编程又叫做套接字编程,是因为在网络编程中依赖使用套接字(socket),网络编程一般是C/S架构,即客户端/服务器模式,在服务器端依赖套接字绑定自身接口,并开启监听客户端连接&am…...

CSS实现回到顶部且平滑过渡

背景 最近同学在项目开发的时候问了我一个问题:小白,回到顶部该怎么做呀?我当时就愣住了,心想这不是很基础的一个功能吗,然后想到该同学没有系统学过网页三剑客,我就给他讲了该怎么实现这个虽然基础但在很多…...

10 go语言(golang) - 数据类型:哈希表(map)及原理(二)

扩容 在 Go 语言中,当 map 的元素数量达到一定阈值时,会触发扩容操作以保持性能。这个过程称为 rehashing,即重新散列所有的键值对到一个更大的哈希表中。 扩容的条件 源码: func mapassign(t *maptype, h *hmap, key unsafe.…...

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入

【论文解读】Med-BERT: 用于疾病预测的大规模结构化电子健康记录的预训练情境化嵌入 Med-BERT:pretrained contextualized embeddings on large-scale structured electronic health records for disease prediction ​ ​ 摘要:基于电子健康记录(EHR)的深度学习(DL)预…...

[POI2014] PTA-Little Bird(单调队列优化 DP)

luogu 传送门https://www.luogu.com.cn/problem/P3572 解题思路 先设 表示到 的最小劳累值。 很容易得出转移: 其中 由 和 的大小关系决定,并且 。 很显然,直接暴力是 的,会超时。 于是,考虑优化。 我们发现…...

【含开题报告+文档+PPT+源码】基于SpringBoot的体育馆管理系统的设计与实现

开题报告 近年来,随着人们生活水平的提高和健康意识的增强,体育馆作为提供体育锻和休闲娱乐的重要场所,其使用频率和管理难度也在不断增加。传统的体育馆管理模式通常依赖于人工记录和手动操作,不仅效率低下,而且容易…...

Vue3学习:vue组件中的图片路径问题

今天在做一个案例的时候,图片放在assets/images文件夹下,如下路径,其中的图片不能正常显示。 list: [{ id: 1, name: 欧拉公式啤酒杯, price: 30.00, src: ./assets/images/Euler.png},{ id: 2, name: 高斯分布马克杯, price: 40.00, src: ./…...

openCV基础-图像预处理Day26

图像预处理 ​ 在计算机视觉和图像处理领域,图像预处理是一个重要的步骤,它能够提高后续处理(如特征提取、目标检测等)的准确性和效率。OpenCV 提供了许多图像预处理的函数和方法,以下是一些常见的图像预处理操作&…...

给文件添加可读可写可执行权限

在Unix、Linux或类Unix操作系统中,你可以使用chmod命令来给文件添加可读、可写和可执行权限。权限通常分为三组:文件所有者(owner)、文件所属组(group)和其他用户(others)。每组都可…...

golang有序map

最近使用go开发排行榜的需求, 有些情况会用到有序map, 但是go竟然没有有序map的实现 本着自己动手丰衣足食的原则, 就自己实现了一个 原理 原理比较简单, 主要结合了container/list双向链表和map 使用双向链表存储key和value, 保证顺序, 使用map存储key和节点信息, 保证查找…...

【LangChain系列4】【Chain模块详解】

目录 前言一、LangChain1-1、介绍1-2、LangChain抽象出来的核心模块1-3、特点1-4、langchain解决的一些行业痛点1-5、安装 二、Chain模块2-1、介绍2-2、LLMChain2-3、Sequential Chain(顺序链)2-4、Router Chain 总结 前言 LangChain给自身的定位是&…...

51c嵌入式~IO合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12383193 一、单片机通信数据接收解析方法 前阵子一朋友使用单片机与某外设进行通信时,外设返回的是一堆格式如下的数据: AA AA 04 80 02 00 02 7B AA AA 04 80 02 00 08 75 AA AA 04 80 02 00 9B E2…...

ETLCloud怎么样?深度解析其在数据管理中的表现

在BI或数据大屏等数据分析工具中,经常需要从多个业务系统中提取原始数据,然后对数据进行清洗、处理,以获取高质量、有效且干净的数据以供后续的BI进行数据统计和分析使用,从高质量的实现企业数据的价值变现。 然而,在…...

高频谐振功放电路

目录 集电极馈电电路 高频扼流圈的作用: 并联馈电回路 高频扼流圈作用 : 优缺点 对于并联的集电极馈电网络: 对于串联的集电极馈电网络: 神奇之处 基级馈电电路 自反偏压: 复合输出回路 天线回路 效率分析 总效率分析 互感如何改变工作状态 集电极馈电电路 馈电电路分…...

kafka如何获取 topic 主题的列表?

大家好,我是锋哥。今天分享关于【kafka如何获取 topic 主题的列表?】面试题?希望对大家有帮助; kafka如何获取 topic 主题的列表? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在Kafka中,可以…...

全新大模型框架Haystack,搭建RAG pipeline

大家好,在AI应用开发的赛道上,目前Haystack以其开源框架的优势,成为LLM技术领域的一匹黑马,对现有竞争者构成挑战。本文将介绍Haystack的亮点优势,并分析它为何能在众多LLM框架中脱颖而出,通过RAG应用实例来…...

儿童孤独症专家分享:了解治疗与支持的专业帮助

在儿童的成长旅程中,每一步都充满了探索与发现。然而,对于患有孤独症的儿童来说,这段旅程往往伴随着更多的挑战与困难。孤独症,这个看似遥远的词汇,却深刻地影响着无数家庭的生活。作为儿童孤独症领域的专家&#xff0…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

华为OD机试-食堂供餐-二分法

import java.util.Arrays; import java.util.Scanner;public class DemoTest3 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseint a in.nextIn…...

深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用

文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例,Webpack.config.js它可能的配置和含义如下: 前言 Module Federation 的Webpack.config.js核心配置包括: name filename(定义应用标识) remotes(引用远程模块&#xff0…...

Linux操作系统共享Windows操作系统的文件

目录 一、共享文件 二、挂载 一、共享文件 点击虚拟机选项-设置 点击选项,设置文件夹共享为总是启用,点击添加,可添加需要共享的文件夹 查询是否共享成功 ls /mnt/hgfs 如果显示Download(这是我共享的文件夹)&…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...

6.计算机网络核心知识点精要手册

计算机网络核心知识点精要手册 1.协议基础篇 网络协议三要素 语法:数据与控制信息的结构或格式,如同语言中的语法规则语义:控制信息的具体含义和响应方式,规定通信双方"说什么"同步:事件执行的顺序与时序…...

JUC并发编程(二)Monitor/自旋/轻量级/锁膨胀/wait/notify/锁消除

目录 一 基础 1 概念 2 卖票问题 3 转账问题 二 锁机制与优化策略 0 Monitor 1 轻量级锁 2 锁膨胀 3 自旋 4 偏向锁 5 锁消除 6 wait /notify 7 sleep与wait的对比 8 join原理 一 基础 1 概念 临界区 一段代码块内如果存在对共享资源的多线程读写操作&#xf…...