2008年11月20日星期四

学柯南,用电脑拨电话! |用音响打电话(揭秘柯南电话拨号)(转载)

学柯南,用电脑拨电话!

在柯南的剧场版《战栗的乐谱》之中,柯南通过唱出特定频率的声音来模拟电话的按键音,从而由远处拨通了报警电话。我看字幕上写着“切实可行”,便对此产生了兴趣。

我想我们完全可以用编程来实现一个电脑拨号键盘,通过按键从音箱中发出对应的电话按键音,传入电话听筒实现拨号。

也许这样只会对电话键盘进水的人有用吧(比如我-_-#),但是进一步,我们还可以实现通过电脑管理一个常用电话薄,然后通过便捷的关键字过滤查找电话(比如输入“王”、“微软”、“136”等字符串,快速过滤掉不含关键字的联系人),并呼出,相信没有哪个电话机会比电脑的管理功能更强大吧。

还可以为OutLook写一个插件,来实现对联系人的拨叫。

网上搜了搜,原来有人同样对此感兴趣,并已经做了实验:http://www.xycad.com/html/93/t-32793.html

他是根据片中的这个表格来生成的按键音:



而我发现AdobeAudition 3.0中就内置了这样的功能,只需打开菜单“生成 > 脉冲信号..”:



可以看到,这里已经有那个表格了,而默认的脉冲信号设置也就是使用的这个表格。

输入“13800138000”,调整一下其他选项,按“确定”生成:



局部放大看看:



只需按此方法将每个按键音生成,并独立保存为.wav文件,就可以嵌入在.Net程序中,通过SoundPlayer播放了。

我为此编写了WaveCallSound.dll,专门实现发音功能,其中已内嵌了这些独立的按键音资源:



这里面只有一个WaveCallSound静态类,包含两个扩展方法,分别对应stringchar类型,作用就是播放对应的电话号码按键音:



使用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.cn
blogs.com/SkyD/WaveCallKey.rar


独立的拨号音wav文件:http://files.cnblogs.com/SkyD/PhoneWave.rar

本文的PDF版本下载:http://www.box.net/shared/e43j0xmsc4

PS:话说柯南都演了10年了,电视上播出有500多集了吧,他们居然还在上一年级!!万年留级生啊,太缺了~



学柯南,用电脑拨电话! - SkyD - 斯克迪亚个人博客 - 博客园.

用音响打电话(揭秘柯南电话拨号)


liyao_vip 发表于: 2008-10-16 22:35 来源: XYCAD中国音响设计网
今天在网上看见了一个这样的帖子。看完后吃了一惊
用音响打电话(揭秘柯南电话拨号)
(如果你的电话键失灵了,可以直接用音响打电话)

在名侦探柯南剧场版 第十二部 《战栗的乐谱》柯南和那个女歌手直接用唱的就能播电话,确实不可思议!于是我看完影片也仿造着做了一下实验,果然也成功用电话打通了我自己的手机,哈哈哈。

这首先要来解释一下声音是什么:

我们能听到的任何声音,都是由物体振动产生的波。像音叉,小提琴的弦,音响的膜,甚至家里的地板,因为振动而产生波。
决定声音的因素有3个,音高,音量和音色。
音高是由频率决定,单位是赫兹(HZ),表示一秒钟振动了多少次。440HZ就代表一秒钟振动了440次。根据国际标准,电话拿起时嘟的声音就是440HZ,在音乐里面就是A的音。
音量是由振幅决定,振幅越大音量就越大。单位是分贝(Db)。
音色就很复杂了,主要是由波的形状决定的。小提琴和钢琴演奏同一个音高,同样音量的声音,我们也能分辨出来,也是由于小提琴和钢琴发出的波形状不一样。

但是在现实中我们很难听到单一振动发出的波,我们听到的99.999999%的声音都是由各种不同频率振幅的波同时发出的。

根据影片的解释,电话的拨号声音组合了高低两种声音,就像这张图所示:


那么按照这张表格,在电话上1的位置应该是693赫兹和1209赫兹,0的位置应该是941赫兹和3336赫兹,就是说我们只要能同时发出693赫兹和1209赫兹的2种声音,那就等同于在电话号码盘上按下了1键。
不过在影片中由两个人凭感觉直接唱出来有点假了,要知道693赫兹和1209赫兹的波在古典音乐里面(12平均律)是介于E和F的音,即使有绝对音高的人要直接唱到多少赫兹有点太不现实了(快成机器人了)。




那么有了这个办法,我们就来产生这种声音:

先是用波形产生器:左边那个是产生的低群声音,选择正弦波,这是自然界中最基本的波,然后是选择波的频率,接下来是音量,音量就无所谓,随便设置一下。
同理,右边那个是产生的高群声音。

嗯,这个就是1的声音。
然后放在频谱仪里面看看:

然后把剩下的声音都按照那个表做出来。

添加到播放列表里面,图中播的是13800138000,拿起电话听筒对准音箱播放,哈哈,那边响起移动服务台的声音了~!!!!


这个是我做的电话号码声音,在播放器里面排列好要播的号,然后那起电话听筒对准音箱就行了
天啊,还有下载
tel.rar
(2008-10-16 22:35:26, Size: 49.6 KB, Downloads: 130)