posts - 181,  comments - 4228,  trackbacks - 33
公告

 

 

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


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

也许这样只会对电话键盘进水的人有用吧(比如我-_-#),但是进一步,我们还可以实现通过电脑管理一个常用电话薄,然后通过便捷的关键字过滤查找电话(比如输入“王”、“微软”、“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.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多集了吧,他们居然还在上一年级!!万年留级生啊,太缺了~

posted on 2008-11-17 19:19 斯克迪亚 阅读(...) 评论(...) 编辑 收藏