本文导入自一个特别古老的 WordPress 博客,内容可能会显得太年轻、太简单,不具有太大参考价值! 了解详情»
(第一次写C++程序就送给Symbian60了……) 这是一个有点儿无聊但也有点儿意思的小程序,可以调用手机前置摄像头来感应你的动作,你只需要将手指头或者其他什么东西伸到屏幕上所指示的位置即可弹出对应的音符。

要求

S60v3 + 前置摄像头 + Python 1.4 + DirectMidi (laobubu.net已经打包) + 一个明亮且固定不动的地方

下载地址

简单入门

  1. 下载并安装此软件到手机上。此软件需要Python1.4的平台,你可以去http://sourceforge.net/projects/pys60/files/pys60/1.4.5/下载到对应的版本,比如S60v3版本的
  2. 找到一个明亮的地方,将手机稳定地放在桌子或者其他稳定的东西上。启动软件,载入过程不要去看手机,否则会干扰到背景检测。
  3. 可以开始玩了

(给PyS60开发人员的)DirectMIDI模块

来自laobubu实验室的DirectMIDI可以使Python拥有直接访问S60底层midi接口(cMda啥的来着,忘记了)的能力,进而使Python即时播放MIDI音符的效率提高数十倍(几乎一发出命令就出声了)。我才接触C++ 编程,很多东西还不明白,因此这个模块暂时还是alpha版本,有待完善。以后新版会在laobubu.net发布!

简单入门 import pydirectmidi
  1. 和各种操作系统的MIDI模块一样,首先你需要启动midi功能。你可以简单调用pydirectmidi.open()即可打开。
  2. 别认为打开就完事了。打开,稍微延迟一点儿(比如e32.ao_sleep(0.1))后调用instrument(0,1)设置1号通道音色为0号音色,也就是钢琴。MIDI标准里有16个通道可以同时播放音符(就像邀请了16个演奏家),有128种音色(每一个演奏家都是全能乐器演奏天才!)。在DirectMIDI里,通道从1开始计,但是乐器从0开始计。如果不设置音色,那个通道就无法发音(你不告诉演奏家用什么乐器,他怎么知道?)。
  3. 现在你可以发出音了。DirectMIDI提供了一个简单的方法播放音符,就是【note(音高,毫秒数,通道编号)】。根据MIDI标准,音高是一个数字,60就是最标准的“中音哆”(C5,注意不是手机型号,是音乐上的C5),然后就像吉他的品一样,升哆是61,“瑞”便被推到了62……依次类推。简单总结:哆是60,相邻两个全音音高相差2,当然有例外,由于“咪”和“发”,“嘻”和“哆”之间没有半音,因此这两组的音高差都是1。
  4. 音量调节应该是有用的,系统默认音量为10,即最大。音量可以用mastervol(新音量)来调节全部通道音量,也可以单独针对某一通道进行,比如vol(5,1)就可以把通道1的音量变成5。
  5. 演奏会结束后记得pydirectmidi.close(),否则系统还会等待你不会再发出的MIDI信号,会很费电,同时如果凑近喇叭可以听见细微电流声。
模块的所有方法都有帮助文档,你可以像这样查看 >> pydirectmidi.note.__doc__

还有许多功能待补全,有建议发邮箱,我用Gmail的,laobubu@gmail.com。 也欢迎到我的站点,在我的博客留言我一样会即时收到。laobubu.net

 

注意:部分函数尚未实现,调用会导致Python崩溃。测试代码前记得保存!

心情后记

  • 这是高中最后一个长假了,以后博客可能会暂停更新,不过留言我可能还是会在周末看看的。
  • 第一次写C++程序就败在Symbian上了,要多恶心有多恶心的代码,完全乱不来。
  • 但是为什么还要Python平台呢?我受不了Symbian C++的界面处理方式,感觉还是Python来得快,而且我还可以在手机上维护。所以这次C++程序我写成了一个DLL……
  • 总之Symbian山河日下了,以后也不打算继续。不过我的第一个智能手机就是S60v3的,也算是完成了一个计划:给自己的手机编一个软件(以前我用S40时候编写过一个叫LPlayer的软件,可惜现在源代码杯具了。那是一个神奇初三时光,别人在学习我却在玩Eclipse和J2ME……)
  • 希望有一个Android……好吧各种废话了。
  • 如果有Android我还要编写个神马呢?想想先。据说Android是基于JAVA的,很好入手,呵呵。(除了价格)
  • 原本我还想,像LOLWindow那篇一样制作一个短片,曲子是《Oh Du Fröhliche (Oh Santissima)》,山寨班得瑞的版本!后来没精力了。
  • 假期要结束了,本来想学3D结果报废了,矮油……以后再见!