本帖最後由 C_Law 於 2013-4-11 17:07 編輯
更新:
2013-04-11
IrTxGUI.exe version 1.0.0.1
Bug fix:
IrTxGUI 界面最小尺寸
更改 Output device 後,離開 IrTxGUI 時可選擇不儲存 IrTx.ini
啟動 IrTxGUI 時會檢查 Layout.ini 是否存在
2013-04-06
經過圖書館見到有部 Win7 32-bits 的電腦,趁機試試 IrTxGUI,初步測試算是成功(只是用 Headphone 測試 Test 按鈕能正確發聲,沒真正測試發射紅外線)。不過我發現一個潛在問題,這部電腦的 Audio driver 有點笨,無論 3.5mm 或 SPDIF 的音效輸出端名稱都同樣叫做 HD Audio Output,在 IrTxGUI 選擇 Output Device 時會有點麻煩。
2013-02-25
17# 加入 Command line 版本的 IrTxCMD.exe
2013-02-23
14# 加入示範短片
由電腦遙控有線電視
一向習慣在電腦用電視卡看電視,順理成章地想到用電腦去遙控電視的周邊裝置(例如機頂盒)。以往一直用 WinLIRC 的 Com port transceiver 去發射紅外線遙控訊號,但由於近年的電腦主機版已不再附設 Com port,所以一早已打算另外想辦法,這幾日趁新年放假得閒,終於將心目中的構想做出來。
雖然題目是「由電腦遙控有線電視」,不過只要稍加修改,也可發射出其它電器的紅外線遙控訊號。
硬件
設計來自 LIRC,原理是用電腦 Soundcard 輸出帶有左右反相 19kHz sinewave carrier 的遙控訊號,發射器就好似 Full wave rectifier 一樣把原來的 19kHz 倍增到紅外線遙控器常用的 38kHz carrier。
以下是原本的設計,無需外置電源,只靠 Soundcard 推 IR Led,即使將 R1 短路,發射距離都很短,而且發射器要很準確的指向受控電器的接收器。
以上是有電源的發射器,可由電腦的 USB port 取電,發射距離跟一般遙控器差不多。
系統設定
近年的 Desktop 電腦,都可以將機殼背面的音效輸出口同前面的音效輸出口分開獨立使用,我會將後置輸出口用來駁喇叭用作正常音效用途,而前置輸出口就用來駁紅外線遙控發射器。例如 VIA soundchip 的 driver 設定方法如下:
同時要把發射器所用的輸出口的播放音量開到最大。
如果電腦沒有額外的音效輸出口,也可以另外插個 USB 的外置 Soundcard 用來發射紅外線。
最後到「控制台→聲音及音訊裝置→音訊」選擇預設的輸出口(用來駁喇叭播放正常音效)。
一般影音軟件都預設使用 Windows 的預設音效輸出裝置,所以正常來講不需要為個別軟件再做設定。
軟件
按這裡下載 IrTx.rar,內有以下檔案:
IrTxGUI.exe,主程式
IrTxCMD.exe,Command line 版本(17#)
NAudio.dll,NAudio音效程式庫
IrTx.ini,設定檔
Layout.ini,按鈕排列設定檔
Test.wav,測試音效檔(可以不要)
Silence.wav,靜音音效檔
Ca-*.wav,有線電視遙控器各按鍵的訊號檔
所有檔案需解壓到同一個資料夾內。
IrTxGUI 以 VB.net Express 2010 寫成,需配合 .Net Framework 4.0 使用。我只在兩部 XP 32-bits 以及一部 Win7 32-bits 的電腦試過,不清楚能否在其它版本的 Windows 內執行,如有師兄夠膽在其它版本的 Windows 內測試,無論成功與否,請把測試結果放上來!
本程式無需安裝,解壓後就可以執行 IrTxGUI.exe。首次執行時會出現以下 Massage box。
按「確定」後請按「Options→Output Device」選擇正確的輸出口,再按「Options→Save settings」儲存設定到 IrTx.ini。
IrTxGUI 的介面很簡單,我故意將所有按鈕排列得同標準鍵盤的右邊數字/方向鍵盤一樣,使用時可以用滑鼠去按,或者按鍵盤。
當中的「Test」按鈕是個 Test tone,就算無製作發射器,也可以用 Headphone 去試,按它後聽聽個 Test tone 是否從正確的輸出口發聲。如果不需要做測試,可以修改 Layout.ini 把這按鈕刪除或改為其它用途。
如果 IrTxGUI 運行期間修改過 Windows 的預設音效輸出裝置,或者新增/移除外置音效裝置(eg. USB sound card、USB headphone……),需要按「Options→Rescan」重新掃描及選擇音效輸出裝置。
修改 Layout.ini
Layout.ini 是使用介面的設定檔,可以用記事本打開來修改,不過記得要用 Unicode 存檔。存檔後需要關閉再重開 IrTxGUI.exe。
Layout.ini 的第一行是程式視窗左上角的名稱,之後每一行是一個按鈕的設定,IrTxGUI 最多可加入 100 個按鈕,而程式視窗的大小會因應按鈕的位置而自動作出調整。
每個按鈕最小有 7 個以逗號分隔的參數,各參數依次序分別是:
1.按鈕名,即是按鈕上顯示的文字,例如上圖中的「Hello」、「測試」
2.KeyCode,鍵盤碼,例如右邊數字鍵盤的「0」鍵的鍵盤碼是 96,按「0」鍵等於用滑鼠按這按鈕。
3.按鈕闊度
4.按鈕高度
5.按鈕與左邊界的距離
6.按鈕與頂邊界的距離
7.要播放的 Wav 檔名
每個按鈕可播放超過一個 Wav 檔,其餘的 Wav 檔名依次序以逗號分隔放在後面,例如 NGC 按鈕:
NGC,109,45,25,331,41,ca-5.wav,ca-2.wav,ca-ok.wav
有線電視的 National Geographic Channel 頻道的台號是 52,用以上參數,無論用滑鼠按一下「NGC」按鈕,或是按數字鍵盤的「-」鍵,都會依次播出 5、2 和 OK 的遙控訊號,只要按一下就可以轉去 52 台。(其實可以省去最尾的 OK,但有線解碼器要先等到一會才轉台,在後面加入 OK 就可以立刻轉台)。
不過我發現,如果兩個相同數字雙連的台號(eg. 11、22、33……),需要在兩個數字之間加長分隔時間,所以我特別做多個靜音的 Silence.wav,例如用「AXN」按鈕轉去 22 台:
AXN,111,45,25,229,41,ca-2.wav,silence.wav,ca-2.wav,ca-ok.wav
在兩個 ca-2.wav 之間加入 silence.wav 才能正常轉台。
之前提過 Test 按鈕純綷方便用 Headphone 做測試,如果無需再做測試,建議把它改為 Black(ca-black.wav),將原本的 Test,45,45,25,12,41,test.wav 改為 Black,45,45,25,12,41,ca-black.wav。因為有線偶爾會發出訊息(畫面上出現一個信封 Icon),入 Menu 刪除訊息時需要用到遙控器的黑色按鈕;除此之外,如果想取消用有線解碼器 EPG 預校的節目,也要用黑色按鈕。
將其它電器的遙控訊號錄製成 Wav 檔
如果想遙控其它電器,就要先錄取其它電器的遙控訊號。你可用 WinLIRC 的 Audio receiver 將遙控訊號經電腦的 Line-in/Mic-in 錄入電腦,有關接收器的製作方法可以看這個舊 Post 的 1#。
至於錄音及人手製作帶有 19kHz carrier 的 Wav 檔方法可以看另一個討論區的這個 Post 的 #1。你亦可以先一次過將所有遙控鍵的訊號錄成一個大 Wav 檔,然後用我放在同一個 Post #15 的 Excel 檔將這個大 Wav 檔分割成每個鍵都加上左右反相 19kHz sinewave carrier 的獨立 Wav 檔。
一般遙控器訊號的時間長度都很短,從原裝遙控器錄取訊號時難免會按鍵長過實際所需的時間,所以由我個 Excel 檔分割出來的 Wav 檔仍然有需要再用 Audacity(或其它可顯示波形的 Wave Editor)作出刪減。
遙控器的 Protocol 五花八門,不過大致上可分為四種。先講頭三種,下圖是來自三個不同遙控器,經我個 Excel 檔產生出來的 Wav 檔:
1.無論短按或長按遙控器,遙控訊號都只會發送一次;
2.長按遙控器時,初頭會發送一段較長的訊號,然後每隔一段短時間再發送一段短訊號;
3.長按遙控器時,相同的訊號會以固定間隔重複又重複地發送。
第一種遙控訊號可在訊號完結後,再預留小小空位,然後把之後的位置刪除(即是紅線之後)。第二和三種訊號,可把第二段訊號及之後的位置刪除,但要保留第一和二段之間的空白位置,有需要的話,甚至將把空白位置加長小小。
至於第四種,長按遙控時所發送的訊號驟眼看起來就好似第三種,也是每隔固定時間就發送一次訊號,不過如果將訊號放大來看會發現第一段訊號(A)和第二訊號(B)是不一樣,整個訊號實際上是 A、B、A、B……梅花間竹的輪流發送,受控的電器要先後收到 A、B 兩段訊號才會有反應(B、A 也可以),所以應該保留頭兩段訊,由第三段訊號起(紅線之後),將之後的位置刪除。
製作好各遙控鍵的 Wav 檔後就可以修改 Layout.ini 把 IrTxGUI 改為其它電器的遙控器。 |