| OopsWare さんのプロフィールOopsWare's Blogブログリスト | ヘルプ |
|
|
4月2日 给madplay加上了32段均衡器libmad本身没有equalizer单元,但是提供了filter接口,留给开发者添加自己的filter,结合mpg123的做法,做了个32段均衡器加到madplay上了。听着效果还不错。哈哈。
在我的网上U盘的留言中,电童朋友说XMMS没有EQ,我开始还比较奇怪,细读XMMS的源码才发现,XMMS的EQ被注释掉了。 因为这个EQ是针对mpg123插件自己的,算法在frame decoding和samples synthesis之间处理,这种方式对其他解码器无效。也许XMMS打算通过DSP插件形式对所有格式音乐进行调音控制,而注释掉了这部分代码吧。
4月1日 MPEG Audio Decode(MAD) 编译通过成功编译了libmad及madplay程序,到小i上一试,酷!128KBPS播放流畅,200K以上的偶尔会听到一点杂音(Green Day的那首Boulevard of Broken Dreams,http://mp3.baidu.com 上能搜到,7M多的那个,动态码率,平均219KBPS,4分20秒音乐,在小i下全速解码只需要35秒)。
# busybox time ./madplay -o /dev/null bbd.mp3
9984 frams decoded (0:04:20.8), +1.3 dB peak amplitud, 0 clipped sample
real 0m 35.51s
user 0m 33.14s
sys 0m 0.41s
就用这个解码库了,接下来就是研究怎么把mpg123的EQ加上来。
晕啊,过节了。编译出的命令行版madplay放 网络U盘 上了,不怕被骗的去试试吧。怕被骗就等明天咯 ^^ 3月29日 MAD vs MPG123试验了mpg123的解码方式,总不能在 PXA 271 CPU 上实时解压 128KBPS 44KHz 的 MP3。mpg123还是依赖浮点运算进行解码的,这也难为Intel xScale了,后来去找 iwMMXt 优化代码,在 Intel 主页找到一套 IPPs开发包,有 linux 版本,其中包含 MP3 解码库,可惜不是开源的。有网友提议参考 MPlayer,是啊,解DivX都可以,何况解MP3呢,结果找了一看,还是失望了。MPlayer的MP3库还是mpg123,晕啊~。其中有一些iwMMXt的优化单元,不过是处理图像写屏的,还是用不上。看IPPs文档时发现,MP3解码有两种方式,一种是基于浮点运算的,还有一种是基于整数的,于是网上狂搜一气,哈哈,终于被我找到了。 libmad (MPEG audio decoder library) ,先去试试这个解码器怎么样吧...
昨天看MFC上的新闻,发现 Nero 也出了款手机上的播放器 Nero ShowTime Mobile Beta2,连接到官网看了一下,好像是用在PPC上的。不过MFC上那张小i里用ShowTime放《超人总动员》的截图还是让我很吃惊的,不知道是不是有人恶搞PS出来虎人,还是却又这么个版本。
播放器的前台基本有个样子了,用的 EZX 开发包,支持皮肤,临时从 Nucleo 的 NUCLEO N-Log v2G BioSkin for WinAMP 基础上修改出一个做测试。至于解码单元,等确定 MAD 的解压性能再加上去吧。播放器前台程序会随时更新,有兴趣的可以到我的网络U盘上找找。 3月27日 通过蓝牙适配器连接E680i和PC不管是Model模式还是大容量存储模式,E680i接上数据线就会冲电,虽然不清楚对电池有多大伤害,心里总是不舒服的。现在的蓝牙适配器也便宜了,通过蓝牙连接,省去了数据线何乐而不为呢?!下面就写写如何连接,我也是买了蓝牙适配器后刚摸索出来的,算是个傻瓜教程,等我用熟了后也许就懒的写了^^
首先在PC上装蓝牙适配器和驱动。我用的是CCK USB蓝牙适配器(¥50),驱动是IVT的BlueSoleil 1.6。装完驱动后,PC上会启N多的服务,基本都用不到,统统停掉就可以。手机上只需要一个串行端口服务。接下来启动手机上的蓝牙,搜索蓝牙设备(如果搜不到就重新插拔一下蓝牙适配器)。搜到计算机后,进行绑定,在手机上随便输入一个口令,确定后,PC上会弹出对话框,输入相同的口令后,绑定成功。这时PC上的IVT管理程序会显示出手机的图标,点图标邮件,刷新服务,会显示出手机提供的蓝牙服务,E680i只有两个,一个是串行端口服务,一个是对象交换服务。对象交换服务可以在PC和手机之间传文件,但是用起来不是很方便,比如要从手机上发文件给PC就要在我的收藏中找到文件,按住弹出菜单后选择“共享->蓝牙”。串行端口服务后面再说,正常情况下,最多的还是用Modem拨号上网,运行手机上的调制解调器,选择蓝牙,点击“被找”按钮,在PC的IVT控制台里的蓝牙拨号网络服务按钮变成可用,点击连接,手机上会有确认对话框,PC上显示 DUN 拨号,拨入号码为“*99***1#”,点击连接,PC就可以通过蓝牙进行GPRS拨号上网了。
串行端口服务是让手机与PC之间建立一个PPP的连接,想让手机与PC建立网上邻居访问和Telnet就需要通过这个服务。MFC上有些帖子是解释利用LeoPPP实现的(ccmove里也有),但是步骤非常繁琐,我仔细看过他的脚本,其实他的工具包里最复杂的东西还是那个显示对话框的Java程序,也许是LeoPPP的作者还没有EZX的开发包,没能写一个EZX的对话框应用程序(现在有了,想用的话可以去MFC找找),而是利用J2ME来做了,绕了好大的弯,让KVM去加载.jar程序来显示对话框。说实在的,真的没什么必要,只要手机上有Loader,并能运行.lin脚本就可以了,对话框显示不显示的都无所谓。
服务启动脚本: btppp_start.lin
#!/bin/bash
devname=`cat /tmp/bt_spp_devname` for i in 1 2 do if [ -c $devname ] then if [ ! -d /etc/ppp/peers ] then mkdir /etc/ppp/peers fi echo "$devname 115200 192.168.1.2:192.168.1.4 noauth crtscts local connect 'sleep 1; echo -n CLIENTSERVER' logfile /tmp/ppp.log" > /etc/ppp/peers/myhost start-stop-daemon --start -m -p /var/run/btppp.pid -x /usr/bin/pppd -- call myhost start-stop-daemon --start -c root -x /usr/sbin/inetd start-stop-daemon --start -c root -x /usr/sbin/smbd #/mmc/mmca1/Programs/led 2 #/mmc/mmca1/Programs/led 0 break
fi #/diska/.system/QTDownLoad/leomsg/leomsg.sh "Connect Bluetooth Serial and press OK to continue..." sleep 1 done #/diska/.system/QTDownLoad/leomsg/leomsg.sh "PPP over BlueTooth started!" exit 服务停止脚本: ppp_stop.lin
#!/bin/bash
start-stop-daemon --start -x /bin/kill -- `pidof pppd inetd smbd` #/diska/.system/QTDownLoad/leomsg/leomsg.sh "PPP services stopped." 编辑这两个脚本文件放到手机上,里面注释掉的东西都是显示提示信息对话框的,当然想做的完善点可以根据需要再去掉注释,把相应的东西加上去。不建议再用那个 leomsg ,实在是太繁琐了,省事的话可以考虑用那个led程序(MFC上有,带源程序,可以让手机上的来电指示灯闪一下做个提示)。启动脚本主要是去检查当前的蓝牙串口连接,然后把IP地址绑上去,并启动Telnet服务(inetd)和网上邻居服务(smbd)。
有这两个脚本文件后。按照前面的步骤绑定蓝牙连接。刷新蓝牙服务,点击串行端口服务,并连接,手机上确认连接后,IVT控制台会显示COM?已连接的提示,记住这个串口号。手机上点击运行btppp_start.lin。在PC上网上邻居里,创建新的连接->设置该机连接->直接连接到其他计算机->来宾->“随便输入一个计算机名”->“选择设备为刚记录下来的串口号”->完成,修改属性中波特率为115200,尝试连接(用户名和口令为空),成功。此时,手机IP地址为192.168.1.2,PC地址为192.168.1.4。试试Telnet和网上邻居吧,你已经摆脱数据线的束缚了。这个是针对XP环境的方法,2000的连接方法我没试,可以参考LeoPPP里的README。
最后说说手机共享PC上网,E680可能用route add的方法就可以实现的,但是E680i对连接做了绑定,KVM和EZX程序必须走gprs连接才能上网,MFC上有帖子提供了一个mack的gprs fack方式让手机共享PC宽带上网的办法,相对比较复杂,而且需要下载一下工具,我这没空间,需要的可以自己去MFC上找,CCMOVE上也有几个贴在讲的很详细。通过这个工具,不单是上网,你的手机可以还可以访问PC上的资源,比如看PC上的电影,这对家里只有一台电脑,两个人争着用的情况是个不错的解决方案。当然了,这需要PC上启动NFS服务,然后把网络共享 mount 到手机的文件系统上去,我还没试出来。最好的思路是能把 smbmount 编译一个手机版本,直接把windows的共享 mount 到手机上,这样mack的fack也不用了,PC上也不必在启什么NFS服务咯。
蓝牙PPP拨通后,内网通过网关上网的朋友会发现PC不能上网了,解决办法很简单,打开刚创建的那个直接连接的属性,到“网络”页,双击TCP/IP协议,点击“高级”按钮,常规页上去掉“在远程网络上使用默认网关”选项,确定就可以了。
蓝牙的应用还是蛮广的,慢慢发掘...说不定哪天把蓝牙局域网服务写成EZX程序,就像使用手机上那个调制解调器一样简单。
|
|
|