TCL 小筆記

昨天發現有隻 TCL 程式不 work 了, 可能是我們 Cygwin 版本不同, Isometry 改在他那邊可能是好的, 不過我這邊就掛了.為了解決這個問題, 只好 debug 一下為何它會有不同的表現.

關於 TCL 的說明, 這個網站真是做到仁至義盡了. http://tmml.sourceforge.net/doc/tcl/

如果大家隨便寫一個 script 檔, TCL 怎麼知道是該它處理呢? 如果您有灌 tclsh 就 OK 了. 此時只要在這個 script 前面加上一行

#!/usr/local/bin/tclsh

就可以了.

TCL 自己會去執行這個 script, 而不是交給 bash 之類的.

更好的寫法是

#!/bin/sh

# the next line restarts using tclsh \

exec tclsh “$0″ “$@"

這樣就不會出現 command not found 這樣的錯誤了. 因為不做一點 “暗記" 的話 TCL 是不會去處理每一個 script 的.

上述技巧見於 http://tmml.sourceforge.net/doc/tcl/tclsh.html

如果再 TCL 中建立了一個檔案, 又想要再 generate 一次, 將會遇到 archive = 1 的問題. 在 Windows 下有一個好用的 freeware 叫做 unlock, 用它可打掉這種檔案被程式 lock 的狀態. 我的兩台電腦都有裝.

不過在 TCL 之下, 如果不先把 file attributes 的 archive 設成 0, 就算用 file delete -force 都殺不掉它喔!

  

今日得意技

我們正在測試 multi-channel HDMI 的音訊輸出. 經過大家的努力, 初步釐清 HDMI 設定 audio 的訊號會受到 video 的影響而被抹消, 於是在 audio 獨立可以設定 HDMI 的狀況下, multi-CH 終於有聲音了.

不過咧…大部分的影片幾乎低於 5.1 聲道. 有的時候, 很難搞清楚到底是那一個 channel 的聲音錯了, 或是它本來就沒有聲音?

我們找了 IC designer、看了 spec., 還是沒有人可以告訴我們 HDMI 送出的 8 組 buffer, 各自對應到 7.1 聲道的哪一個? 左、右、中、重低音、左環繞、右環繞、後左環繞、後右環繞?雖然我可以用 “人工智慧" 排除掉絕大多數的不可能的組合, 但是至少要測測看才能確定順序! 不可能是 1,2,3,4…這麼好. (果然也不是!)

我們僅有的 8 CH 測試檔是很標準的左右對稱檔案, 重低音聲道又剛好沒聲音. 稍微測了一下覺得是在浪費時間. 因為 HDMI receiver 會很乖巧地在重低音這個聲道做 bass management, 所以該有聲音的地方沒有聲音, 不該有聲音的地方倒是有聲音.

所謂怒從心頭起、惡向膽邊生, 徒勞無功了一陣子, 決定乾脆自己來造一個 8 CH 的 wav 檔, 每個聲道都各自放一首歌, 這樣只要用耳機一聽, 不就知道那隻喇叭對到那塊 buffer 了嗎?

想法雖然很好, 可是有點麻煩. 在懶和浪費時間的中間, 我選擇了認命. 誰叫 Irene 在解相位差的那個怪 bug 呢?

首先, 我挑了梁靜茹的 8 首 MP3 解成 PCM 檔. 再寫一個小程式, 把 8 個 PCM 檔合成一個大 wav 檔.

我也依稀記得 wav 檔的 header 有 44 個 bytes, 但是要自己寫程式, 又沒有 open source 可以抄, 還真有點懶…幸好至少 Google 到了 spec.

各位看官, 這一位大善人的 home page 真是不錯. http://www.sonicspot.com/guide/wavefiles.html, 看著它, 程式就可以寫出來了. 唯一要計算的只有 file size 和 chunk size, 其他都超簡單.

可能太久沒寫 dos 程式, 我連產生 filename 的招數都生疏了. file name 應該要用一個 string 來存, index 的那個字元就用 string[x] = ‘0’+i 來寫成 i 的 loop, 這樣就可以開一串 file 了. 不過我第一時間竟然忘記這招了, 真是遜啊!

程式寫好, 一檔 8 首歌的 wav 終於現身了. 左聲道: “崇拜", 右聲道: “Ces La Vie", …右後環繞: “知多少".  嗯, 那麼發出嗯嗯啊啊的難以辨識的重低音的, 一定就是剩下的那首 “每天第一件事" 囉?

就這樣, 我終於成為能夠搞清楚哪塊 buffer 對到哪個 channel 的人了. 呃,… 既然 HW, SW, designer 都沒有人可以告訴我, 那我算是第一個知道的嗎?

據說 QA 也沒有 8 聲道的測試檔, 那麼我這個測試檔應該算是最酷的吧! 因此我將它列為今日得意技. 

早上上班的時候, 看見一條毛毛蟲在過研發六路, 我小心閃過了牠, 希望牠今天也很順利, 哈! 不過千萬不要再過馬路了~~~

[後記] “今天" 其實是昨天 5/21.

AVCHD / M2TS 小註解

Panasonic 和 Sony 在 2006/5/11 推出 AVCHD 格式, 並且允許燒錄 AV 檔案到 8cm DVD 上. 兩個月後, SD 記憶卡、Memory Stick、HDD 也都支援 AVCHD. 

AVCHD 乍看不知道是甚麼東西的縮寫, 其實它至少是兩個字 AVC 和 HD. AVC = audio video coding, HD = high definition. 在這個格式下, video 是 H.264, audio 是 5.1 CH AC3 或 7.1 CH 的 LPCM, 並且封裝在  MPEG2 TS bit stream 裡面.

現在當紅的 “小藍光" (mini BD, 大藍光 BD 的向下相容盜版) 就是採用 AVC-HD 的格式. Audio 的格式也變得多采多姿, DTS, TrueHD…都有了. 由於 PS3 恰好可以播小藍光, 所以在這個商機裡面獲利不少~~~ http://en.wikipedia.org/wiki/.m2ts#Software


AVCHD 的格式如下圖 (取自 WIKI)

AVCHD 的特性除了 audio, video 之外, 包括 menu navigation, slide shows 和subtitles. Menu navigation 是指 DVD 常見的 – 從 menu 畫面點選播放 title. 

AVCHD 和 BDMV 不同, BDMV 可能放在 AVCHD 底下, 或者和 AVCHD 同層. 

IEC 61937 Overview

SPDIF 界面的規格, 可以看 IEC 60958-3 的描述. 它是由 Sony 和 Philips 所共同制定的規格, 又稱作 S/PDIF. 主要是用來傳送壓縮後的音訊資料或是解壓縮後的立體聲資料.

如果 SPDIF 上面承載的是壓縮後的音訊資料, 那麼就要參考 IEC 61937. SPDIF 也傳不動的東西, 就要靠新的規格 HDMI 了. HDMI 可以傳送 4 倍 SPDIF 的速度, 相當於每個 sample 16 bits. 以 24 bits 的 LPCM 來說, 16 bits 相當於壓縮 66.7%. TrueHD 和 DTS-HD MA 差不多就是這種壓縮率.

61937 內容
part-1 general
part-2 burst info
part-3 AC-3
part-4 MPEG
part-5 DTS
part-6 AAC
part-7 ATRAC 1/2/3
part-8 WMA
part-9 Dolby MAT (Metadata-enhanced Audio Transimission)
part-10 MPEG4 – ALS
part-11 MPEG4 AAC in LATM/LOAS (streaming)
part-12 DRA

SPDIF 的介紹可以看這個網站: http://www.hardwarebook.info/S/PDIF

RealAudio 格式整理

RealMedia 雖然算是我們的合作夥伴, 但是我還是要吐槽他們格式紊亂! 我知道 Wiki 上有做整理, 不過有時忽然又會忘記下哪一個 keyword 才找得到, 乾脆整理在自己的網站上吧!

 

Format 格式名稱 技術 特性 對應 player
RA1     一說就是 RA2-LBR  
RA2-LBR lpcJ IS54,VSELP 過時, 14.4 kbps  
RA2-HBR 28.8 G.728,LD-CELP 過時, 28.8 Kbps  
RA3 dnet Dolby AC3-like 過時  
RA4        
RA5 sipr Sipro ACELP 過時 Real Voice
RA6 cook Cook 1-2 CH RealPlayer G2
RA7        
RA8-LBR cook Cook,Gecko2 12~64 Kbps RealPlayer G2
RA8-HBR atrc Sony ATRAC3 >64 kbps,過時  
RA9 raac MPEG LC-AAC    
RA10-LBR cook Cook,Gecko2 5.1 CH, 12~128Kbps RealOne Player
RA10-HBR racp MPEG HE-AAC 128~800 Kbps RealOne Player
RA10 ralf RA lossless   RealOne Player

 

[note] RealOne player is backward compatible to RealPlayer G2.