也就是说:柯南剧场版里的情景是真的吗?声音可以拨号,不用按键? 【GuyQian的回答(39票)】: 来源:http://www.cnblogs.com/SkyD/archive/2008/11/17/1335329.html 在柯南的剧场版《战栗的乐谱》之中,柯南通过唱出特定频率的声音来模拟电话的按键音,从而由远处拨通了报警电话。我看字幕上写着“切实可行”,便对此产生了兴趣。
我想我们完全可以用编程来实现一个电脑拨号键盘,通过按键从音箱中发出对应的电话按键音,传入电话听筒实现拨号。 也许这样只会对电话键盘进水的人有用吧(比如我-_-#),但是进一步,我们还可以实现通过电脑管理一个常用电话薄,然后通过便捷的关键字过滤查找电话(比如输入“王”、“微软”、“136”等字符串,快速过滤掉不含关键字的联系人),并呼出,相信没有哪个电话机会比电脑的管理功能更强大吧。 还可以为OutLook写一个插件,来实现对联系人的拨叫。 网上搜了搜,原来有人同样对此感兴趣,并已经做了实验:http://www.xycad.com/html/93/t-32793.html 他是根据片中的这个表格来生成的按键音:
而我发现Adobe的Audition 3.0中就内置了这样的功能,只需打开菜单“生成 > 脉冲信号..”:
可以看到,这里已经有那个表格了,而默认的脉冲信号设置也就是使用的这个表格。 输入“13800138000”,调整一下其他选项,按“确定”生成:
局部放大看看:
只需按此方法将每个按键音生成,并独立保存为.wav文件,就可以嵌入在.Net程序中,通过SoundPlayer播放了。 我为此编写了WaveCallSound.dll,专门实现发音功能,其中已内嵌了这些独立的按键音资源:
这里面只有一个WaveCallSound静态类,包含两个扩展方法,分别对应string和char类型,作用就是播放对应的电话号码按键音:
使用WaveCallSound.dll时只需将其引入项目,然后引用WaveCall命名空间,之后只要这样使用就可以了: WaveCallSound.播放('9',true); WaveCallSound.播放('8',true); WaveCallSound.播放('7',true); WaveCallSound.播放('*',true); WaveCallSound.播放('#',true); WaveCallSound.播放('3',true); WaveCallSound.播放('5',true); '6'.播放(true); '3'.播放(true); '4'.播放(true); WaveCallSound.播放("13988991029"); "10060".播放(); 然后我还制作了一个WPF程序WaveCallKey(中文名暂定为“我靠”?),用以提供拨号界面:
使用方法如下: 1.拿起电话听筒,使话筒贴近音箱:
2.使用WaveCallKey程序进行拨号。 3.正常通话即可。
虽然固话逐渐会被手机替代,但现在也还是有很大份额的,所以这样的应用也还是有些意义的(手机话费全报销的同志就不要喊话了~)。 感兴趣的朋友可以在此基础上做出电话薄管理或者OutLook插件,相信那会在业务员中大卖的哈^^
WaveCallKey拨号程序及WaveCallSound.dll下载:http://files.cnblogs.com/SkyD/WaveCallKey.rar 独立的拨号音wav文件:http://files.cnblogs.com/SkyD/PhoneWave.rar
本文的PDF版本下载:http://www.box.net/shared/e43j0xmsc4 http://www.uushare.com/user/icesee/file/1018323
PS:话说柯南都演了10年了,电视上播出有500多集了吧,他们居然还在上一年级!!万年留级生啊,太缺了~
电话机真的可以用嘴巴模拟拨号音来拨号? http://www.guokr.com/question/1109/ 理论上是可能的。“用嘴巴模拟拨号音”这种操作方式甚至在上世纪70年代成了一种独特的文化——飞客文化的一部分。而飞客,被认为是黑客文化的开端。他们是一群用特别的吹口哨技术和自制的小设备欺骗电话公司、盗打免费电话的人。他们中极少数的佼佼者,能够对着电话的话筒吹出特定频率的口哨声,远程遥控电话局的系统停止计费,从而不花钱打长途电话。其他人口技没这么好,就用玩具哨子、金丝雀或者特制的小仪器来发出这个声音信号。 至于用声音来代替按键拨电话号码,也是同样原理,只不过更困难一些。这就是《名侦探柯南》的剧场版里描述的场景:柯南他们对着十米开外的一个电话机唱了几个音,就成功拨出了110这个号码。 电话拨号,本质上就是把一串电话号码发到电信局,电信局再根据这串号码给你转接别人。听起来很简单,我们每天上网都在把各种数据传来传去的。但是别忘了,电话发明在1876年,当时的技术刚刚解决了通过电线来传送声音,和现在互联网用的技术完全不同。那时候打电话不用拨号,只要拿起话筒就接通了一位话务员妹子,直接告诉她你要打给谁,她就会帮你转接。 现在的电话线同样只能传送声音,只不过对面的妹子换成了机器(多么伤感的改变那)。我们不能对着机器念电话号码,机器听不懂,所以电话机必须用一个统一的格式,把数字转变为声音来传送。每次当你按下数字键,电话机就会发出一个声音。这个声音的频率是事先约定的,不同数字各不相同(其实就是你按键时听到的那种高低不同的“滴滴”声)。机器收到这个频率的声音,就知道你要拨什么号码了。 正因为如此,我们在拨号的这段时间,用嘴或者用任何音响设备发出的声音,都有可能传到电信局,成为一次拨号——但是这种情况太难发生了。每一个数字键发出的声音,其实是两个频率声音的组合(频率的组合表见图)。而且机器对频率的认定非常严格,差一点点都不行,这样做就能有效地避免杂音被误当成了拨号。 回到动画片里的情况。理论上,找两个音感非常准的音乐家,同时唱出表中数字对应的两个频率(唱什么歌词倒无所谓),机器就会认为这是一次拨号。这和飞客们当年做的事情相似,只不过更难成功。就算是王菲、麦当娜,恐怕也要反复试个几百次,才能偶然成功一次吧。 【yskin的回答(2票)】: 这个功能早就有了啊。以前用Windows Mobile系统里就有一个软件,你可以在里面选择一个联系人,然后把手机放到电话话筒旁边,然后他就发出一些声音,然后电话就拨出了这个号码。 另外我记得可以选择脉冲和音频两种模式。脉冲模式就是以前老式电话,播一个号码就发出几个脉冲,比如按5就嘟嘟嘟连响5下。音频就是现在的电话,按照频率高低来确定播出的哪个数字,所以拿起电话按号码时,听到的那个响声就是播给电话局设备听的。 不知道现在的iOS和Android上有没有这种软件~ 【天光的回答(1票)】: 电话拨号技术主要分为脉冲拨号和音频(双音频)拨号两种。 相对而言脉冲拨号的技术比较老,其利用脉冲个数表示拨号数字。但目前这个技术基本上已经老了被取代了。 音频拨号技术利用不用频率的声音来表达拨号数字,属于比较新的技术。 从技术原理上来说,两种拨号模式都有可能依赖嘴巴模拟拨号来实现拨号,但事实上从可操作性上来说,脉冲拨号上更可行一些。因为控制节奏比控制频率对人的嘴巴要跟容易一些。 真正最有效实用的模拟拨号,其实是在脉冲拨号年代,采用手拍电话叉簧来产生脉冲,成功率是非常的高的。当年我个人尝试拍一个7位号码的时候,至少也能对3个,我见过拍叉簧的牛人,那基本上能够做到非常高的准确率,至少在95%以上,以前这种手段经常用来破解呼叫限制什么的,用来免费打长途很好使,也就是楼上文中所谈到的所谓70年代的飞客文化。 至于用嘴巴模拟脉冲信号,要比拍叉簧难,毕竟一般来说人的脸部和舌头的肌肉不如手部肌肉灵敏。 至于在音频电话,是不可能使用拍叉簧的方式进行模拟,因此音频电话的普及直接导致了飞客文化的衰落。但是音频电话理论上也可以用嘴巴模拟信号,但是难度实在太大了,现在的双音频拨号依赖两个不同的频率的声音来表达一个数字,要用嘴巴一一精确模拟,至少我还没有见过这样的真人。但是当年脉冲电话时代所造就的传说依然在延续,这可能就是为啥这些传说依然流传的原因。 最后,需要说明的是,虽然现在很多的电话机都还能够支持音频和脉冲的双拨号,但是拨号方式是由局端的交换机在决定的。而在中国,90年代中期的时候可能还能在一些极偏远的地方找到几台在用的脉冲拨号交换机,到现在的话,应该几乎已经不能够找到脉冲拨号的交换机了。全部是音频拨号了,因此,传奇已然是过去时了。 【滇狐的回答(1票)】: 我认为听拨号音识别号码是可以做到的,但我绝不认为人能唱出能被电话交换机识别的拨号音。 原文地址:知乎 |
|