****************************************************前言
没错,这是第2篇,第1篇在这里如何像talking tom那样,自动监听到外部声音,和,简单的变声_1
那么,第2篇将会说些什么呢?
1.第1篇中的方法,可以使用,但是局限性很大:你使用了该方法,你能检测到device1的声音,但是,相同的代码被安装到了device2(不同的品牌,或者,不同的型号),你发现监听不了了,你需要修改阀值。当你发布一款应用的时候,你会幻想着老板将所有的设备都为你买一台,以能在这些机器上进行测试
****************************************************打破那个局限性
public int read (byte[] audioData, int offsetInBytes, int sizeInBytes)
android可以监听到扬声器的数据(最终数据会放入audioData中),接下来,你需要对这个audioData中的数据进行分析,以判定,这部分数据是否是“人”的声音
如何判定:
你要先从audioData中拿到一个个的sample
sample是什么:样本,也许,你还听说过samplerate这个词语,它代表的是 一段时间内样本被采集的次数,声音最终被播放成什么样子,跟sample有很大的关系
sample占用了多少个字节:这个,你需要学习一个wav文件的header,推荐你一个:https://ccrma.stanford.edu/courses/422/projects/WaveFormat/
你会发现wav是个一个大杂缸,你会发现什么是PCM的wav
在得出了sample之后,我们将进行如下运算(假设,1个sample占用了2个字节)
int sample = 0; float average; for (int i = 0; i < audioDataLength; i += 2) { sample = Math.abs(audioData[i] | (audioData[i + 1] << 8)); // 平均的sample average += 1.0f * sample / audioDataLength; }
有必要再说一下,java中的byte/short/int等等,就是signed的,也就意味着,audioData[i] | (audioData[i + 1] << 8)这个值有可能是负数,所以,请你不要惊奇
而负数的存在,也是正常的,它代表了一个我们都不想去了解的专业概念
最终,你得到了一个值average,来代替一个数组audioData
如果直接拿average作为条件,来判定:刚监听到的声音数据是否是人声,也是可以的,但是,你会发现刚才我们提出的问题:局限性太大,即是:你的代码需要频繁的更改阀值,以确保在不同的device上面,能够监听到声音
如何打破这种局限性,使用一个你不想接触的概念:分贝
网上有很多,如何将pcm data转换为分贝的方法,下面说一下,我采用的这种(也意味着,你可以找到更准确的方法,也,欢迎回复我该方法):
float db = (float) Math.abs(10 * Math.log10(average * average / 32767 / 32767));
非常的简单,最终,你从average得到了一个分贝值。
你会发现整个过程:audioData -> average -> db
你可以拿分贝来作为判定条件,我的实验结果是:无论device的操作系统是2.x还是4.x,只要位于[20,40]区间内,你都可以认为,你监听到的是人声
也请你注意:[20,40]并不是完美的,我实验了将近10-台机器,涵盖了samsung,htc,huawei,均是正确的
但是我也找到了:对于huawei u8800+,区间为[50,60],所以,如果你找到了更准确的方法,欢迎回复我
华丽的连接线:
相关推荐
iphone 游戏Talking_Tom_2-v1.1-USCat
会说话的tom猫Talking Tom Cat是一款手机宠物类应用。没事儿玩玩儿也挺有意思,至少这个宠物猫还能和你互动一下。玩法: 1.和TOM交谈,他会用有趣的声音重复你 2.抚摸.
这次Tom带着新的升级回来了1.6版修复了一些bug问题,关联Facebook账户让您更容易得和朋友分享视频通过Outfit7简报第一时间获得有关Tom和它会说话的朋友们的新闻压缩包内附talking-tom-cat_1.6.deb解锁补丁。
我的汤姆猫 2「My Talking Tom 2」 v2.5.0.9 for Android 一款火爆全球的新游戏
我的Talking Tom New Tab扩展程序使您的Chrome浏览器焕然一新。 安装“我的说话的汤姆”新标签,享受“我的说话的汤姆”的精选高清图像。 它带有一些很酷的属性,这些属性可以改善您的“新标签页”体验,例如:-每个...
安装Talking Tom Gold Run新标签页,然后欣赏Talking Tom Gold Run的精选高清图像。 它带有一些很酷的属性,这些属性可以改善您的“新标签页”体验,例如:-每个新标签页都有高质量的壁纸-当前日期/时间-指向社交...
语言:Bahasa Indonesia,Bahasa Melayu,Deutsch,English,Filipino,Français,Kiswahili,Nederlands,Norsk,Tiếng Vi...会说话的Tom Gold Run壁纸和“新标签页”扩展程序会为您的默认Chrome“新标签页”页面带来全新的外
使用Garena进行搜索,并获取最新的Talking Tom News! 使用您喜欢的游戏在网上搜索:TALK TOM! 使用此搜索扩展程序,您可以轻松地获得最佳搜索结果,当您单击工具栏中的图标时,TALKING TOM的最新消息! 为了获得最...
目前,Blender尚没有像Voice-o-Matic这样的100%可自动运行的口型同步系统。 不,不,不,此插件也不是100%可用的工具。 这是将来要开发的基本设备。 我衷心希望也许有人会对这个主题表达兴趣,并且我们最终将为...
安装此Talking Tom and Friends扩展程序,忘了无聊的新标签页,并使其变得更加有趣。 您将获得各种质量上乘的墙纸,这些精美的网络系列将带入您的浏览器。 此外,您将能够一直享受这些背景,因为它们会在您浏览时...
Talking Translator 2.3.2,体化的解决方案适用于任何人,任何地方,凭借其即时翻译功能,应用程序将帮助你在任何多语言环境中进行沟通,如旅行、商务旅行、买方会议,或只是普通对话。 真正的沟通从尊重开始 试试...
语言:Bahasa Indonesia,Bahasa Melayu,Deutsch,English,Filipino,Français,Kiswahili,Nederlands,Norsk,Tiếng Việt,Türkçe,català,dansk,eesti,...My Talking Tom Wallpapers和New Tab扩展程序为默认的Chrome New
语言:Bahasa Indonesia,Bahasa Melayu,Deutsch,English,Filipino,Français,Kiswahili,Nederlands,Norsk,Tiếng Việt,Türkçe,...My Talking Tom Wallpapers和New Tab扩展程序为默认的Chrome New Tab页面带来了全
Talking Pocoyo是一个交互式游戏,您可以在其中进行所有这些操作:与Pocoyo一起玩:当Pocoyo触摸到他身体的任何部位时都会做出React。 尝试发现他的所有React! 此外,您可以与Pocoyo交谈,他会以有趣的方式重复您...
Talking Face Generation by Adversarially Disentangled Audio-Visual Representation 用对话解开的视听表征生成谈话人脸
信息安全_数据安全_Look Whos Talking How Fraudsters 内外威胁 安全评级 安全研究 大数据 AI
语音聊天程序源代码,模拟实现用语音聊天!