Canon A570 IS 1.01A firmware dumped
November 11, 2007 1:20 am GMT-0700 | In Tech | 2 Comments | hideToday I dumped Canon PowerShot A570 IS 1.01A firmware using tricks from CHDK website. Here’s a little bit tech detail for my own record.
- Receiver: Thorlabs DET110 + 10k terminating resistor.
- Recording: 48 kHz sampling, 8 Bit, Mono. Delay settings I used:
#define DELAY_SYNC 200 #define DELAY_SPACE 50 #define DELAY0 50 #define DELAY1 100
I slowed down the blinking to make my sound card happy. However, the following faster setting:
#define DELAY_SYNC 45 #define DELAY_SPACE 50 #define DELAY0 1 #define DELAY1 25
does give very clean waveform (even with the shortest 5 us pulse) on the scope, so it should work with good sampling device (say a better sound card).
- LED: I used the least-frequently-used blue LED
#define LED_BLUE 0xc02200c4
- Recording level set at about -5dB to -3dB
- Decoder setting:
#define LEVEL_THRES_HI 0xa0 #define LEVEL_THRES_LO 0x80 #define LEN_SYNC 10 #define LEN_SPACE 1 #define LEN_0 3 #define LEN_1 6
- Total dump time is about 2.5 hours. (about 3700 bits per second)
- I did not have any CRC error! I added an md5 checksum at the end. The camera took about 17 seconds to calculate md5sum of the 4MB firmware. Of course, no surprise, md5sum matches.
- Starting part of the dump:
Decoded as 00110000, 00110001, 00110010, in other words, ASCII ‘0’, ‘1’, ‘2’. Also, for some reason the waveform is inverted (compared with CHDK website), so I have to manually invert the waveform for adc. - The camera freezes about 3 milliseconds every few seconds. Here’s typical behavior:
Since the protocol is decently robust, this extra delay is not a problem at all. - Dumper code available for download: a570is dumper (based on code from CHDK website and kxn’s modification.).
Brilliant kxn ported CHDK to A570 IS 1.01A within two days.
音高和频率(续一)
November 5, 2007 9:04 pm GMT-0700 | In Study | 11 Comments | hide上次说到现在最通用的音阶是把一个八度的倍频等比分为 12 份,那么为什么要这么做呢?在开始讲这个之前,先看两条人民群众总结的规律:
- 人耳对音高的感觉主要取决于频率比,而不是频率差。比如 220 Hz 到 440 Hz 的音差,和 440 Hz 到 880 Hz 的音差,一般人认为是一样大的音差。
- 如果两个音的频率比值很接近小整数比,那么这两个音同时发出来人会感觉很和谐。比如 440 Hz 和 660 Hz 的两个音,频率比值是 2:3,一般叫做完全五度,同时发出来很和谐。
至于为什么有以上的规律,这个问题太深刻了,折磨了一代又一代的音乐家、数学家、物理学家、心理学家、生理学家、哲学家……这里不深入说了,就把它们当作公理好了。下面是某个测试人对各种频率比评价的结果,峰越高表示人觉得越和谐。可以看见,1:1 1:2 是很和谐的,接下来是 2:3 3:5 3:4 等小整数比。(这张图的出处不祥,应该是某个论文或者教科书。)
有了上述公理,怎么样来定音阶?早在公元前,伟大的毕达哥拉斯就发现了小整数频率比很和谐的规律。首先最简单的整数比是 1:2,接下来分别是 2:3 和 3:4,于是他先定出四个音(按照现在的写法):F:C=4:3,G:C=3:2,高八度C’:C=2:1。然后他把 F 和 G 之间的间隔 9:8 叫做一个全音,按照 9:8 全音间隔填补空档他定下来这样的音阶:
- C:C = 1:1 = 1.0000
- D:C = 9:8 = 1.1250
- E:C = 81:64 = 1.2656
- F:C = 4:3 = 1.3333
- G:C = 3:2 = 1.5000
- A:C = 27:16 = 1.6875
- B:C = 243:128 = 1.8984
- C’:C = 2:1 = 2.0000
可以看到 E:F 和 B:C’ 之间的间隔是 256:243 = 1.0535,差不多是 9:8 的一半,毕达哥拉斯把这种间隔叫做半音。这样定出来的音阶其实已经蛮好用的了,现在把这种用整数比定音的方法叫做纯律(just intonation)。纯律的主要问题是有些音之间的比例很古怪,比如上面的 F:D 是 32:27,非常不和谐。另外,巴赫同学后来出了各种奇怪变调的钢琴曲,而纯律变调之后音阶就变了,于是巴赫就开始鼓吹当时已经建立起来的平均律(equal temperament)了。
平均律沿用了这种七个基本音的全音阶(diatonic scale)系统,但是让全音刚好等于两个半音,这样无论如何变调,整个音阶只要偏移一下即可,而各个音之间音程不变。我们知道,一个八度之间是 5 个全音间隔 + 2 个半音间隔,也就是 12 个半音间隔,于是就一刀切,直接把 2 等比分 12 份就是半音间隔了。下面是十二平均律(12-TET)和毕达哥拉斯的纯律的对比:
音程 | 纯律 | 十二平均律 |
---|---|---|
C:C | 1.0000 | 1.0000 |
D:C | 1.1250 | 1.1225 |
E:C | 1.2656 | 1.2599 |
F:C | 1.3333 | 1.3348 |
G:C | 1.5000 | 1.4983 |
A:C | 1.6875 | 1.6818 |
B:C | 1.8984 | 1.8877 |
C’:C | 2.0000 | 2.0000 |
可以看到,十二平均律和纯律很接近,特别是 F:C 完全四度和 G:C 完全五度非常接近应有的整数比 4:3 和 3:2,只相差 2 个音分(cents)。一般没有受过音乐训练的人对 20 音分以下的音差已经不敏感;即使专业调音师,不靠仪器的话 5 个音分也基本是分辨极限了。所以在实际使用中,十二平均律对完全五度这么小的误差是完全可以忽略的。
理论上说,如果把 2 等比分为别的份数,也可以制造出可用的音阶。一个例子是等比分为 29 份,这样出来的音阶比 12-TET 更接近 3:2,但是大三度 5:4 却惨不忍睹,相差很大。一个小细节是有些音程是互补的,比如某个平均律如果很接近 G:C 3:2 完全五度,那么 C’:G 4:3 完全四度也同时被搞定。一般人们评价一个平均律,主要看它和大三度、完全五度、大六度的偏差总和(同时搞定的互补音程为小六度、完全四度、小三度),计算表明,比十二平均律更好的下一个音律是十九平均律,接下去更好的分别是 31、34 和 53。可以想象,即使是十九平均律,钢琴键盘也会复杂很多,而且由于多了很多音,不和谐的音高组合也会更多,所以非十二等分的平均律使用很有限,现在一般只局限在理论研究上。
中国古代各类弦乐器五声音阶宫商角徵羽按照五度相生律定音,演奏起来非常优美。五度相生律可以算是纯律的一种,中国人发现这个小整数比的规律应该比毕达哥拉斯早好多年。不过到了现代,特别是键盘乐器的普及以及大型乐队的配合需要,最后还是十二平均律胜出了。
也说海豚音
November 1, 2007 10:12 pm GMT-0700 | In Misc | 7 Comments | hide海豚音,大约就是 whistle register(哨音)的意思。张靓颖同学在 2005 快乐中国蒙牛酸酸乳超级女声五进三比赛中以一曲 Lovin’ You 晕翻评委黑楠。黑楠说,同志们,朋友们,大家听清楚了,这就是伟大的海豚音!因此海豚音迅速被广大人民群众所认识。来听听现场录音片段:
上面这个是频谱分析。可以看到张靓颖后面唱到 1275 Hz 左右,这个音是 E6 -50,在 Eb6 和 E6 中间,可以算走音,不过看现场伴奏状况很糟糕,更何况海豚音的控制也比较困难,要唱准音几乎是不可能的。她在这个音高稳定保持两秒半多,引来一阵掌声,对于业余歌手现场发挥,这已经相当不容易了。下面听 Minnie Riperton 原唱的片段:
海豚音开始两个音为 1310 Hz(E6) 和 1400 Hz(F6),这两个音转调自然,音高准确,不知道 1975 年录音是否有 tuning 一节,不过录音棚出这样的音乐,也不算太神奇。Minnie 后来唱现场证明她确实能准确唱到 F6 这个音,另外别的歌她唱到过 F#7,比上面所述的还要再高一个八度,惊为天人。Lovin’ You 这首歌当时上过排行榜首,只可惜 Minnie 后来英年早逝,也没有留下太多别的好歌。
Mariah Carey,高音之王,C7 以上的音随处可见。下面是著名玩弄高音的 Emotions 片段:
这里 Mariah 不但轻松唱出音阶,还有近两秒停留在 2100 Hz 左右,更过分的是她还在海豚音区玩颤音,在 C7 和 C#7 之间晃,属于赤裸裸的炫耀技巧。据说 Mariah 在别的歌里最高唱到过 G7 或者是 A7,音域跨五个八度,恐怖之极。
当然,海豚音也不是 mm 们的专利,俄罗斯小生 Vitas 的片段中:
他玩到了近 2000 Hz B6,接小段颤音,然后降到 F6,升到 F#6,音高转换近乎完美。有人说,海豚音和咽音都可以唱出极高音,但发声机理并不相同,这个问题事实上国际上并无定论。作为业余听歌的人,用不着管这么多技术细节问题,听起来好听即可。
音高和频率
October 28, 2007 1:33 pm GMT-0700 | In Study | 8 Comments | hide音高和频率转换表如下(来源)
Frequency in hertz (semitones above or below middle C) | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Octave→ Note↓ |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
C | 16.352 (−48) | 32.703 (−36) | 65.406 (−24) | 130.81 (−12) | 261.63 (0) | 523.25 (+12) | 1046.5 (+24) | 2093.0 (+36) | 4186.0 (+48) | 8372.0 (+60) |
C♯/D♭ | 17.324 (−47) | 34.648 (−35) | 69.296 (−23) | 138.59 (−11) | 277.18 (+1) | 554.37 (+13) | 1108.7 (+25) | 2217.5 (+37) | 4434.9 (+49) | 8869.8 (+61) |
D | 18.354 (−46) | 36.708 (−34) | 73.416 (−22) | 146.83 (−10) | 293.66 (+2) | 587.33 (+14) | 1174.7 (+26) | 2349.3 (+38) | 4698.6 (+50) | 9397.3 (+62) |
D♯/E♭ | 19.445 (−45) | 38.891 (−33) | 77.782 (−21) | 155.56 (−9) | 311.13 (+3) | 622.25 (+15) | 1244.5 (+27) | 2489.0 (+39) | 4978.0 (+51) | 9956.1 (+63) |
E | 20.602 (−44) | 41.203 (−32) | 82.407 (−20) | 164.81 (−8) | 329.63 (+4) | 659.26 (+16) | 1318.5 (+28) | 2637.0 (+40) | 5274.0 (+52) | 10548 (+64) |
F | 21.827 (−43) | 43.654 (−31) | 87.307 (−19) | 174.61 (−7) | 349.23 (+5) | 698.46 (+17) | 1396.9 (+29) | 2793.8 (+41) | 5587.7 (+53) | 11175 (+65) |
F♯/G♭ | 23.125 (−42) | 46.249 (−30) | 92.499 (−18) | 185.00 (−6) | 369.99 (+6) | 739.99 (+18) | 1480.0 (+30) | 2960.0 (+42) | 5919.9 (+54) | 11840 (+66) |
G | 24.500 (−41) | 48.999 (−29) | 97.999 (−17) | 196.00 (−5) | 392.00 (+7) | 783.99 (+19) | 1568.0 (+31) | 3136.0 (+43) | 6271.9 (+55) | 12544 (+67) |
G♯/A♭ | 25.957 (−40) | 51.913 (−28) | 103.83 (−16) | 207.65 (−4) | 415.30 (+8) | 830.61 (+20) | 1661.2 (+32) | 3322.4 (+44) | 6644.9 (+56) | 13290 (+68) |
A | 27.500 (−39) | 55.000 (−27) | 110.00 (−15) | 220.00 (−3) | 440.00 (+9) | 880.00 (+21) | 1760.0 (+33) | 3520.0 (+45) | 7040.0 (+57) | 14080 (+69) |
A♯/B♭ | 29.135 (−38) | 58.270 (−26) | 116.54 (−14) | 233.08 (−2) | 466.16 (+10) | 932.33 (+22) | 1864.7 (+34) | 3729.3 (+46) | 7458.6 (+58) | 14917 (+70) |
B | 30.868 (−37) | 61.735 (−25) | 123.47 (−13) | 246.94 (−1) | 493.88 (+11) | 987.77 (+23) | 1975.5 (+35) | 3951.1 (+47) | 7902.1 (+59) | 15804 (+71) |
一些解释:
- Octave 0-9 表示八度区。C-D-E-F-G-A-B 为 C 大调七个主音:do re mi fa so la si(简谱记为 1 到 7)。科学音调记号法(scientific pitch notation)就是将上面这两者合在一起表示一个音,比如 A4 就是中音 la,频率为 440 Hz。C5 则是高音 do(简谱是 1 上面加一个点)。
- 升一个八度也就是把频率翻番。A5 频率 880 Hz,正好是 A4 的两倍。一个八度区有 12 个半音,就是把这两倍的频率间隔等比分为 12,所以两个相邻半音的频率比是 2 开 12 次方,也即大约 1.05946。这种定音高的办法叫做 twelve-tone equal temperament,简称 12-TET。
- 两个半音之间再等比分可以分 100 份,每份叫做一音分(cent)。科学音调记号加上音分一般足够表示准确的音高了。比如 A4 +30 表示比 440 Hz 高 30 音分,可以算出来具体频率是 447.69 Hz。
- A4 又称 A440,是国际标准音高。钢琴调音师或者大型乐队乐器之间调音都用这个频率。
- C4 又称 Middle C,是中音八度的开始。有一种音高标定方法是和 C4 比较相隔的半音数,比方 B4 就是 +11,表示比 C4 高 11 个半音。
- MIDI note number p 和频率 f 转换关系:p = 69 + 12 x log2(f/440)。这实际上就是把 C4 定为 MIDI note number 60,然后每升降一个半音就加减一个号码。
- 可以看到 E-F 和 B-C 的间隔是一个半音,而七个主音别的间隔都是两个半音,也叫一个全音。
- 标准钢琴琴键有大有小,大的白色琴键是主音,小的黑色琴键是主音升降一个半音后的辅音(图)。一般钢琴是 88 个琴键,从 A0 到 C8。知道了上面这些,看到钢琴键盘应该就马上能找到 Middle C 了,如下
- 音高间隔(音程)有各类说法,某些间隔的两个音同时发出来会比较令人身心愉快,比如频率比 3:2 的 perfect fifth 在各类乐曲都会广泛用作和弦。具体音高间隔名称:
间隔半音数 间隔名 大致频率比 0 perfect unison 完全一度 1:1 1 minor second 小二度 16:15 2 major second 大二度 9:8 3 minor third 小三度 6:5 4 major third 大三度 5:4 5 perfect fourth 完全四度 4:3 6 augmented fourth 增四度
diminished fifth 减五度45:32
64:457 perfect fifth 完全五度 3:2 8 minor sixth 小六度 8:5 9 major sixth 大六度 5:3 10 minor seventh 小七度 16:9 11 major seventh 大七度 15:8 12 perfect octave 完全八度 2:1 - 人的听觉和很多音乐设备的频率范围是 20 Hz – 20000 Hz,但是成年人一般只能听到 30 – 15000 Hz,所以上面表格的频率范围已经足够用了。
再写几个做网站的流氓行为
October 27, 2007 7:07 pm GMT-0700 | In Tech | 7 Comments | hide网站设计里的流氓行为一般人注意不到,但是作为一个技术愤青,每看到一个流氓设计,我就会骂一次。
- 偷输入焦点。有些网站的输入框是这样设计的:当鼠标移上去就获得了输入焦点,然后不用点鼠标就可以直接键盘输入了。这看似人性化,实则却非常违背常理,我喜欢在哪里输入就在哪里输入,怎么我动一动鼠标移过了你的输入框你就认为我要在你那里输入了呢?你傻不傻啊,请问有哪一个 windows 程序是这样设计的?难道你要跟我说某类诡异的 X window 窗口管理器么?你真要提醒我这儿有个输入框可以,变变色比方说,但是你不要把我的输入焦点抢了啊。
- 搜索框里提示这里可以搜索。一般这类搜索框是这样设计的:初始设置文字 ‘search here…’;onfocus() 判断如果内容是 ‘search here…’ 则清空输入框;onblur() 判断如果内容是空则重置输入框内容为 ‘search here…’。这个很聪明的设计看似节省了提示文字的空间,但在我看来实在是可以列入 SB 吉尼斯纪录。你要提示这儿有个搜索框,写在搜索框旁边会死啊?一个好好的网页难道就缺这么一点儿空间吗?网页搞得密密麻麻号称信息密度高的网页一般来说可读性却很低。而且,如果我在框里输入了东西,’search here…’ 就出不来了,我反而不知道这个输入框是干啥的了。另外,我还有一个习惯是在网页里面选中文字拖进搜索框进行搜索,对于这类 SB 设计的输入框,我拖文字进去就变成了 ‘search h选中的文字ere…’,真是傻极了。
- 滥用 javascript。有些网站哪怕一个普通链接也要用 javascript 函数来跳转,搞得我没办法直接在新窗口打开这个网页。你要搞点小动作可以在 <a 的 onclick() 里面搞,href 给我好好的写上目标网页的 url 有这么难吗?
- 滥用 flash。flash 是个好东西,但是不要滥用。比方网站导航结构不要用 flash,要不然没装或者关掉 flash 的地方就不能正常使用网站了。
- 某个门户网站把广告和搜索结果搞得几乎一模一样的 style,faint。还有漂浮广告,随便乱弹新窗口,等等等等,批判这些的貌似很多,我就不写了……
在新窗口打开链接是流氓行为
October 22, 2007 1:28 am GMT-0700 | In Tech | 13 Comments | hide完整的标题是“随便设置强制在新窗口打开链接是流氓行为”(不过太长了……)早在上个世纪末有人总结的 1999 年十大网页设计错误的第二条就是强制在新窗口打开链接。这个 target=”_blank” 真是一个鸡肋,为什么我认为随便设置这个玩意儿是流氓行为呢?因为它的坏处太明显了……
- 如果已经设置了 target=”_blank”,用户希望在当前窗口打开这个链接就很难(可以把链接拖进地址栏,不过第一拖起来不是很爽,第二也不是所有的情况下都能用);反之对于一个普通链接,如果用户想在新窗口打开,则方法很多(鼠标中键,shift+click,等)。老子浏览网页老子自己作主,老子要开新窗口老子自己会开,凭什么你个 SB 网站来控制我浏览的行为?
- 在新窗口打开的网页中,Back 按钮就失去了前面浏览网页的历史。
- 大多数用户在不被提示的情况下认为链接会在当前窗口打开,一点链接突然蹦出一个白窗口出来是一件很不爽的事情。违背用户直觉是 usability 的一大忌。
- Tab 浏览器配置下新手如果没有意识到新窗口是在新 Tab 后台方式打开的,往往会点好多次链接,然后出来无数个 Tab……
- 新窗口占用下面的任务栏空间,不过这个问题现在已经不是大问题了。
比较好笑的是,似乎国内很多网民对新窗口打开网页已经习以为常,纵观各类门户网站,似乎在新窗口打开链接是标准设置。以搜索引擎给出的链接为例,baidu.com 默认是新窗口打开,google.com 默认则是在当前窗口打开(当然这个设置可以自定义)。很不巧,这两个设置我都知道一点内幕,两个公司都是经过深思熟虑广泛调查之后设置的默认值,可见国内网民的浏览习惯。更奇怪的是,我经常看见有人大骂 google SB,竟然不保留自己的搜索结果而在当前窗口打开链接,我想说,你 TMD 才 SB,google 给你自由选择你 TMD 还不要。
不过没有办法,这么多网站还在重复着上个世纪的错误,而且导致广大被洗脑的网民也接受了这样的浏览习惯,真是无语。首先,作为用户,良好的浏览习惯是什么?良好的浏览习惯就是想开新窗口的时候明知道这个链接是新窗口打开的,还是偏要用鼠标中键打开它。这个就跟学开车一样,不要碰到车一多就把脚放在刹车上,这样养成习惯以后碰到紧急情况就一脚下去踩死了油门,岂不自寻死路。哦,好像跑题了。
接下来,作为网站的开发者,你 TMD 为啥要在新窗口打开网页呢,有人说为了网民习惯考虑,放屁,你只要乖乖的设置当前窗口打开就行了,你没个(本链接在新窗口打开)的文字,鬼才知道你是新窗口打开的(不过 Opera Safari 默认可以显示,顺便赞一个)。也有人说为了自己这个网页还开着(这个理由经常对去别站的链接使用),这其实也是放屁。用户希望看你的网站,是因为你网页里面有他需要的信息,而不是你的网页还开着。如果用户需要你这个网页还开着,他自然会自己在新窗口打开链接,用得着你操心么。再说了,你新开一个窗口把你自己的窗口遮住了,而且连 Back 按钮都不能用了,新手反而会糊涂不知道怎么回来了。
好了,骂够了。有没有需要强制在新窗口打开链接的情况呢,也是有的,几个常见的情况是:
- 打印当前窗口的内容。这个其实现在更推荐用 @media print/screen 两套 CSS 来解决问题,当然 ajax 类网站做这个比较难,新窗口打开打印模式也是很人性化的。
- 打开非网页类的链接,比如大 PDF、大图片。不但可以后台下载大文件,也可以防止有些用户误以为是文档窗口把浏览器整个儿关掉。
- 填表的辅助窗口,比方选日期。这个其实现在也不推荐开新窗口,直接用 DHTML 在当前网页里面做未必难做,不过技术力量不强的话开辅助新窗口应该是最合理的方式。
I Love Apple
October 16, 2007 12:00 am GMT-0700 | In Misc | 5 Comments | hide什么叫 Usability,就是有两套音频系统的 Mac 电脑上切换喇叭只要按一个快捷键即可。什么叫 Us不ability,就是 XP 里面换音频设备还要停止播放音频再重来过。
什么叫 Usability,就是新 Mac 首次开机在很开始就询问需要接入的 WiFi 网及其密码。什么叫 Us不ability,就是新 HP 开机输了一大堆注册信息突然蹦出一个 STOP 的提示框说无线网有密码,注册信息发不出去,而且貌似切换不出去没地方输入密码……
什么叫 Usability,就是 iPod 包装盒在开口的地方不大不小的写了一个 enjoy,看到了不禁会心一笑。什么叫 Us不ability,就是 Dell 寄过来的笔记本箱子居然连个拎的地方都没有,害我抱着个方头方脑的大怪物在学校里面走被人笑话……
唉,苹果公司的设计理念,想偷是学不像的啊……
诡异的备份方法
October 14, 2007 10:50 pm GMT-0700 | In Tech | 2 Comments | hide某人 Windows 下一个硬 Raid5 不太稳定,怀疑芯片快挂了,于是打算把数据全部转移到另一个硬盘上。这个 Raid5 上有几百 G 数据,几万个小目录,几千万个文件,由于这个机器常常挂掉,直接复制是行不通的,于是他用了一些同步软件。同步文件不是一件复杂的事情,软件也多如牛毛,据说该哥们试用了 Karen’s Replicator、SyncToy、Allway Sync,还让老板买了一些别的软件,可是居然没有一个软件完成任务。不是容错能力差受不了硬盘文件错误,就是由于文件数量太大索性直接挂掉。于是一遍一遍重试,搞了四天连一半文件都没搞定,实在受不了了,问我怎么办……
于是我出了我以前出过的一个大法,把 src 和 dst 目录都 smbmount 到一个 linux 机器上,在 linux 机器上 rsync src dst。奇迹发生了,rsync 了一个晚上数据就全过去了。这个问题自然不一定要用这么诡异的方法解决,我只是很奇怪为啥这么多 Windows 下的软件都会不及一个外来妹 rsync……
今天某人一个 avi 死活放不了,我后来建议她试一试 VLC,居然就能放。 晕啊,难道我们进入共产主义了,要钱的软件做不过免费/开源的软件了……
This weblog is licensed under a Creative Commons License.
Powered by WordPress. Theme based on Pool by Borja Fernandez.