WoMic虚拟麦克风技术剖析
这段时间项目中需要实现类似于虚拟麦克风功能,在Android实现录音,在pc端实现语音评测功能,在技术调研阶段,了解了一下Womic的实现技术。
1.WoMic 简介
官网:https://wolicheng.com/womic/,有兴趣的朋友可以到官网下载一下看看。
下面是官网提供的一张图,算是技术流程图。在Android 录制音频流并传给PC端,PC将音频流写入到虚拟声卡中,PC的各个应用若是需要音频流,只需要从虚拟声卡中读取即可。
我将软件分为两个部分讲:,我画了更为详细的流程图,按照这个思路来。
2.Android 端
2.1获取音频的方式
Android技术点有两个,音频数据采集以及传输两个问题。熟悉Android开发的同学都知道,Android提供了两种音频采集方式,一种AudioRecord,一种是MediaRecord,这两种的区别在于AudioRecord更接近底层,能够获取音频流,而MediaRecord获取是文件。当然WoMic肯定采用是AudioRecord,至于为什么我会在下面讲。
2.2传输方式
WoMic 提供了三种方式,蓝牙,USB和WiFi。我个人感觉USB就不需要了,你是虚拟麦克风肯定解决一定距离下的音频传输问题。
2.2.1蓝牙
蓝牙传输涉及到Android蓝牙开发,本人没有做过没有发言权,简单的数据传输应该问题不大。
2.2.2 WiFi
这种方式对于Android开发来说很简答,采用TCP或者UDP,若是不清楚的,可以参考这个。Womic采用的是socket中的TCP传输声音数据。
3.PC端
PC端有两个功能,第一,作为音频流接受的服务器,第二,写入到虚拟声卡。
有个技术难点就是虚拟声卡,对于商用软件来说,这就是需要考虑自足研发或者采用免费的开源虚拟声卡。若是你仅仅是为了玩玩,大可不必自己开发,使用开源的虚拟声卡就行,如audio cable 等。
从技术的角度来看,除了虚拟声卡是技术难点之外,基本上没什么技术难点。假如我也不想用虚拟声卡,能否做到这个效果呢,显然是可以的。
延伸
我们先现象虚拟声卡在整个过程中起到什么作用呢,将数据中转给其他需要的应用,若是以Android为服务器,PC端的一起应用作为客服端,只需要监听服务的数据状态是不是就可以了。
当然针对不同的需求,技术路线也要稍微的改变,若是你仅仅想实现一个虚拟麦克风,大可不必大费周章,直接复制WoMic的模式就可,在接受到音频流时就播放即可。
简化版的技术流程图,希望对你有所帮助。点赞和赞赏是对我写作最大的鼓励,谢谢!
WoMic虚拟麦克风技术剖析相关推荐
- WCF技术剖析之三十二:一步步创建一个完整的分布式事务应用
在完成了对于WCF事务编程(<上篇>.<中篇>.<下篇>)的介绍后,本篇文章将提供一个完整的分布式事务的WCF服务应用,通过本例,读者不仅仅会了解到如何编程实现事务 ...
- WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿
原文:[原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿 在上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析.在介绍IIS7.0的时候,我们 ...
- [原创]虚拟机检测技术剖析
标题:[原创]虚拟机检测技术剖析 作者:riusksk (泉哥) 主页:http://riusksk.blogbus.com 前言 在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术, ...
- WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)
[爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话)]]在.NET中,所有的集合都实现了IEnumerable接口,比如Arra ...
- WCF技术剖析之二十五: 元数据(Metadata)架构体系全景展现[WS标准篇]
元数据实际上是服务终结点的描述,终结点由地址(Address).绑定(Binding)和契约(Contract)经典的ABC三要素组成.认真阅读过<WCF技术剖析(卷1)>的读者相对会对这 ...
- WCF技术剖析之三十:一个很有用的WCF调用编程技巧[下篇]
在<上篇>中,我通过使用Delegate的方式解决了服务调用过程中的异常处理以及对服务代理的关闭.对于<WCF技术剖析(卷1)>的读者,应该会知道在第7章中我通过类似于AOP的 ...
- 虚拟网卡技术-VETH、MACVLAN、IPVLAN
Linux的网卡驱动中内含了很多"虚拟网卡".早先的文章曾经详细分析过tun,ifb等虚拟网卡,类似的思路,在虚拟化大行其道的趋势下,Linux源码树中不断增加对"网络虚 ...
- WCF技术剖析之二十一:WCF基本异常处理模式[中篇]
通过WCF基本的异常处理模式[上篇], 我们知道了:在默认的情况下,服务端在执行某个服务操作时抛出的异常(在这里指非FaultException异常),其相关的错误信息仅仅限于服务端可见,并不会被WC ...
- BAT解密:互联网技术发展之路(5)- 开发层技术剖析
BAT解密:互联网技术发展之路(5)- 开发层技术剖析 1. 开发框架 在系列文章的第2篇"BAT解密:互联网技术发展之路(2)- 业务如何驱动技术发展"中我们深入分析了互联网业务 ...
- [OS复习]虚拟存储管理技术 1
1.问题的引入 简单存储:要求将一个进程所需的程序和数据全部装入内存方可执行.这样的系统存在两个很严重的问题.其一,对于大进程,如果其所需内存空间超过了内存的最大容量,则无法运行.其二,对于多道程序系 ...
最新文章
- 手动将本地jar添加到Maven仓库
- 开盘即破发,网易有道赴美上市,继续发力在线教育
- mysql -uroot -proot tc -e select * from merchandise limit 1这个-E的命令作用是什么,用来什么什么的?
- 安装hadoop-2.3.0-cdh5.1.2全过程
- elementUI使用
- 用border做三角形
- VMware VSAN 高级参数介绍(测试用)
- JavaScript使用正则表达
- linux 内核参数分析,linux 内核参数VM调优 之 参数调节和场景分析
- 多线程 空值线程数_跳槽涨薪季面试题之多线程(三)
- 医疗物联网的定义的业务场景
- 解决:删除文件时“文件正在使用”不能完成
- 现代软件工程 第一章 【概论】练习与讨论 王旭阳(2,3,4)
- adb模拟按键home_adb命令中 模拟按键 KeyCode 部分详解
- Java job interview:项目开发小组成员网站数据访问层设计
- 非LL(1)文法到LL(1)文法的等价变换
- 在mysql中如何建立性别约束_在Access2010数据库中,要在表中建立“性别”字段,并按与要求用逻辑值表示,其数据类型应当是()_学小易找答案...
- CSS中设置字体样式
- 【UE4从零开始 083】体积光照贴图
- 第一序列任小粟的能力_第一序列全本免费阅读-第一序列小说精校版