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,初步測試算是成功(只是用耳機測試 Test 按鈕能正確發聲,沒真正測試發射紅外線)。不過我發現一個潛在問題,這部電腦的音效驅動程式有點笨,無論 3.5mm 或 SPDIF 的音效輸出端名稱都同樣叫做 HD Audio Output,在 IrTxGUI 選擇 Output Device 時會有點麻煩。
我一向習慣在電腦用電視卡看電視,很自然地就想到用電腦遙控電視機的周邊產品(例如錄影機、收費電視的解碼器),而我對這方面的認識是起源於 Jetter 大在這裡發表的一篇教學:[很好DIY] WinLIRC電腦萬用紅外線遙控器,Jetter 大的教學篇雖然只提及讓電腦接收紅外線遙控訊號,但 WinLIRC 其實也可以發射訊號,我這幾年都一直在使用 WinLIRC 的 Com port 接收器及發射器。不過隨著 Com port 被淘汰,近年新出的電腦主機板上已不再附帶 Com port,而一般的 USB→Com port 轉換器又不適合 WinLIRC 使用,所以開始要另謀出路。
接收方面,新版的 WinLIRC 已可以透過很容易 DIY 的音效端接收器從電腦的 Line-in/Mic-in 接收遙控訊號,我心想,反過來是否可行呢?我曾問過 WinLIRC 目前的作者,希望 WinLIRC 能加入以音效輸出端做發射的功能,可惜對方沒這個打算,不過卻給我介紹了這個超簡單的發射器:
http://www.lirc.org/html/audio.html
這發射器的原理很簡單,先用 WinLIRC 的音效端接收器從原裝遙控器錄取訊號,加上遙控器常用的38kHz 載波後存檔成音效 Wav 檔,發射時就把這 Wav 檔播放到發射器。有關接收器、發射器的製作以及錄製遙控 Wav 檔的方法,KaiserChen 大已在這裡的 iPhone 討論區發表過一篇教學:[DIY]便宜好用-使用耳機孔的IR遙控器(適用可播.WAV的player) 文長圖多,我不會再在這裡重複,只會在稍後加上小許補充。
這個製作需要:
1. 自製紅外線接收器
2. 自製紅外線發射器
3. Audacity(或其它可顯示音效檔波形的剪接軟件)
4. 發射軟件IrTx
5. 2003 或之後版本的 Excel(非必要)
6. WinLIRC(非必要)
自製接收器
以下是我用的 WinLIRC Audio receiver:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-c244b51825bf0744e37beb1d1d72b826.gif)
由於這接收器會從電腦的 USB 插座取電,而 USB 的 Gnd 和音效輸入端的 Gnd 是互通,因此製作時要小心分清楚 USB 的接腳,萬一誤將 +5V 和 Gnd 掉換,等於直接把電腦的 +5V 與 Gnd 短路,有可能對電腦構成破壞性損害。有關這接收器的詳細製作方法可以參考我在另一個討論區的舊作:WinLIRC - DIY 紅外線遙控電腦
亦可以用 KaiserChen 大製作的接收器。
WinLIRC Com port 接收器的使用者也可以用 WinLIRC 錄取遙控訊號,詳請可以看我放在KaiserChen 大教學篇 #15 的回覆。
自製發射器
以下是來自 LIRC 的簡單發射器,以及我修改的有電源版本發射器:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-4b1ac5187263e477c8b880e8cfd69cea.gif)
原裝設計的發射距離比較短,即使把 R1 短路,發射距離仍然很短,以我自己做的測試,在正常室內環境光線下(無特別強光直接照射受控電器),只要發射器對得準,1m 距離內是很可靠;超過 1m 開始變差,對得越準、室內光線越暗,成功遙控得到的機會就越大,超過 1.5m 就完全不能遙控。
至於有電源的發射器,發射距離跟一般遙控器差不多。同我的 WinLIRC Audio receiver 一樣,這發射器的電源來自電腦 USB 插座,製作時要小心分辨 +5V 和 Gnd,千萬不能駁錯!另外,降低 R4 阻值可以增加 IR Led 的亮度,從而得到更遠的發射距離,但不能完全短路,以免超出 USB 埠可輸出的電流上限。
系統設定
近年的桌上型電腦主機版上的音效晶片,大多附上兩組音效輸出端,一組在機箱背面用來接駁喇叭,另一組是機箱正面的耳機插孔,這兩組音效輸出端是可以透過音效晶片驅動程式設定為分開獨立使用,例如將機箱背面的音效輸出端用來接駁喇叭播放正常音效,而機箱正面的耳機插孔用來駁發射器,發射遙控訊號時是不會影響到正常音效播放。
以下是 VIA 音效晶片的 WinXP 驅動程式設定方式:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-4ec967557704870211c5685a0960e092.gif)
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-9b3b455fb2c5e58b8a1fd7912241b990.gif)
請把耳機插孔的主音量和 Wave 音量開到最大。
其它音效晶片、其它 Windows 版本的驅動程式,都應該找到相似的選項。如果想保留機箱正面的插孔用來接駁耳機,又或者電腦上只得一個音效輸出端,也可以另外插一個外置的 USB Soundcard 作為發射遙控之用。
之後請進入:控制台→聲音及音訊裝置→音訊,選擇用來駁喇叭播放正常音效的預設裝置。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-d8ca470ba0eb3f26d8862bd147b5f536.gif)
很多影音、遊戲軟件都是預設使用 Windows 的預設音效裝置,所以通常不需要為個別軟件再做設定。
錄製遙控 Wav 檔
做好接收器和發射器後就可以依照 KaiserChen 大的教學篇錄製遙控 Wav 檔。我在 KaiserChen 大的教學篇 #15 放了一個以 Excel VBA 寫成的小程式,可以先一次過從原裝遙控器錄取所有按鈕的訊號,然後用這 Excel VBA 程式分割成每個按鈕一個獨立遙控 Wav 檔。
錄取訊號時有幾點要注意:
盡可能用 Line-in 進行錄音。如果只能用 Mic-in,請先檢查音效晶片驅動程式中有關 Mic-in 的選項,如果有自動音量控制、軟件音量增益、去除迴音、去除環境噪音……等等的額外功能,應該全部停用。
基於不同音效晶片的設計,從原裝遙控器錄取訊號時可能會錄到以下兩種方向的波形,我的 Excel VBA 程式會自動分辨兩種波形的方向。不過,如果人手製作遙控 Wav 檔的話就要注意,如果錄得先向上走的波形,載波應加在向上凸起的位置;相反,如果錄得先向下走的波形就要將載波加在向下凹的位置。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-5c895ebd216696e365adebdfe0ce4e2a.gif)
錄取訊號時不要將錄音音量開得太大,以先向上走的波形為例,最理想的音量是只有每段訊號的起始部份剛好碰到 1.0。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-e4f65eb636323e0b2f03867d7b22f76b.gif)
一組遙控訊號的實際時間長度是很短,錄取訊號時難免會錄得超過實際所需的長度,因此有需要作出刪減,而刪減位置要視乎個別遙控器所用的通訊方式。雖然遙控器的通訊協定五花八門,但大致上可分為四種,先講頭三種,以下是三個錄取自不同遙控器,經我的 Excel VBA 程式分割出來的遙控 Wav 檔:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-b4d38dcb7d59545f1d316115f84b9a34.gif)
第一種是長按按鈕時也只會發射出一次訊號。
第二種是先發射一次較長的訊號,之後每隔一段時間再重複發射一段短訊號,直到遙控器按鈕被放開。你可以用 Audacity 的選取工具,由第一段長訊號的結尾開始,用滑鼠拉選到最尾(即是紅線之後),然後用靜音工具將後面的重複訊號變成靜音(但暫時不要刪除,下面第三、四種訊號都一樣)。
第三種是相同的訊號會以固定的間隔時間重複地發射,這種訊號可從第一段訊號結尾開始,把之後的位置變成靜音。
至於第四種訊號,驟眼看起來就好像第三種,同樣是以固定的間隔時間重複地發射,不過,如果將頭兩段訊號放大來看,會發現它們其實是不一樣,整個訊號實際上是 A、B、A、B……的輪流地重複發射,有關的電器需要先後收到 A 和 B 段才能受控,因此要保留頭兩段訊號,由第二段訊號結尾開始,把之後的位置變成靜音。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-e8eecddb15d1fb7deb80e186e1d9a24a.gif)
將遙控 Wav 檔的多餘重複訊號靜音後就可以作初步測試,將發射器經延長線接駁到電腦的耳機插孔,並將發射器對準受控電器的接收器(如果用無電源的發射器,不能距離太遠,而且要對得準),用 Audacity 開啟一個遙控 Wav 檔,在 Audacity 選擇相關的播放裝置後就可以播放遙控 Wav 檔,如果一切順利,受控的電器應該會作出相關的反應。如果受控電器無反應,請檢查耳機插孔的播放主音量、Wave 音量,以及 Audacity 的播放音量,全部都應該開到最大,如果仍然是無反應,請再看 KaiserChen 大的教學篇之下的回覆,有些常見的問題應該可在那裡找到解決辦法。
確定遙控 Wav 檔能正常使用後,就可以把多餘的靜音位置剪掉,不過,當兩個遙控訊號先後發射時,兩個訊號之間必需有少許分隔時間,受控電器才能分辨出這是兩個訊號,因此不能把遙控 Wav 檔裁剪到只剩下實際訊號部份,應該在後面保留一小段靜音作為分隔之用,至於這段靜音的長度,視乎個別受控電器而有所不同,需要嘗試。以香港的有線電視解碼器為例,假設我想轉去 12 台,需要先後按遙控器的 1 和 2 鍵,先用 Audacity 同時開啟 1 和 2 鍵所屬的遙控 Wav 檔,按一下時間移位工具,用滑鼠將 2 鍵的遙控 Wav 檔向右拉至 1 鍵遙控 Wav 檔之後就可以嘗試播放,如果受控電器未能正確接收到 1 和 2 鍵的遙控訊號,可將 2 鍵的遙控 Wav 檔再進一步向右移,重複嘗試直至受控電器能正確接收到 1 和 2 鍵的訊號,這兩個 Wav 檔之間的距離就是需要保留用作分隔的長度,請按一下選取工具,由 1 鍵 Wav 檔的紅線位置開始,用滑鼠一直拉選到最尾,再按剪下工具把多餘的靜音位置剪掉,關閉 2 鍵 Wav 檔後就可以存儲 1 鍵 Wav 檔(檔案→匯出)。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-4a0281b38b0cc66c6474c4d1bb9466a5.gif)
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-61c84ee86c2af59e32dcb59869464cc3.gif)
之後逐一開啟其它遙控 Wav 檔,在實際訊號之後保留一段相同長度的靜音,把之後的位置剪接後存檔。
不過我發現,如果要連續發射相同的遙控訊號(例如想轉台去 11、22、33……等等,同一個數目字按鈕要連續按兩下),兩個訊號之間需要有較長的分隔。要解決這問題,當然可以在裁剪每個遙控 Wav 檔時保留更多靜音位置,但這樣做會增加檔案體積,而且想要連續發射兩個不同的遙控訊號時也不必要地分隔較長時間,因此我建議仍然用以上方法去決定要保留的靜音長度。至於解決辦法,就是另外做一個一小段靜音的 Wav 檔,在有需要的時候將這靜音 Wav 檔插入兩個遙控 Wav 檔中間。
發射軟件 IrTx
[按這裡]下載 IrTx.rar,解壓到一個新資料夾後可得以下檔案:
IrTxGUI.exe,圖像界面版本程式
IrTxCMD.exe,命令行版本程式
NAudio.dll,NAudio 音效程式庫
IrTx.ini,主要設定檔
Layout.ini,圖像界面按扭設定檔
Silence.wav,靜音音效檔
Test.wav,測試音效檔(可以不要)
Ca-*.wav,香港有線電視遙控器各按鍵的訊號檔(可以不要)
本程式以 Visual Basic.net 2010 Express 寫成,需要配合 .net Framework 4.0 使用。我只在兩部都是 WinXP /SP3 32-bit 以及一部 Win7 32-bit 的電腦上測試過,我不肯定在其它版本的 Windows 上能否正常使用,如果有朋友願意嘗試,不論成功與否,敬請將結果放上來跟大家分享!。

IrTxGUI
首次執行 IrTxGUI.exe 會先出現以下提示:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-958fccca949a10f5bd1935b640d77dc5.gif)
按[確定]後請按[Options→Output Device]選擇用來接駁發射器的音效輸出端,然後再按[Options→Save settings]將設定儲存到 IrTx.ini,以後再執行 IrTxGUI 時無需每次都做設定,不過,如果更改過 Windows 的預設音效裝置,又或者新增或移除過音效硬件就需要重新再選擇 Output Device。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-86f7576f8fc62852b585311d5fd4408c.gif)
IrTxGUI 的用法很簡單,我刻意將按鈕排列得同標準鍵盤右邊的數字/方向鍵一樣,無論用滑鼠按按鈕或者按鍵盤,都會播放出相關的遙控 Wav 檔。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-effec1514dc8fdd3f0803164ddbfc000.gif)
當中的 Test 按鈕是用作測試之用,按它會播放一個音頻 Wav 檔,即使在製作發射器之前,也可先用耳機測試本程式能否在正確音效輸出端播出 Wav 檔。測試過後,可以透過修改 Layout.ini 把這按鈕刪除或改為其它用途。
當初我寫這程式的目的是為了遙控香港的有線電視解碼器,因此把它的遙控 Wav 檔(Ca-*.wav) 也放入壓縮檔裡,各按鈕的功能也是針對這解碼器而設。這些 Wav 檔以及原本的按鈕設定對台灣人來講應該是無用,可以刪除。只要修改一下 Layout.ini 及重新錄製新的遙控 Wav 檔,就可以將本程式用來遙控其它電器。
Layout.ini 是個 Unicode 編碼的純文字格式檔案,可以用記事本打開,它的第一行是 IrTxGUI 左上角所顯示的名稱,之後每行是一個按鈕的設定參數,最多可加入 100 個按鈕,而 IrTxGUI 的界面大小會因應按鈕的位置而自動調整。
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-6406312501c1546786ff71033fae6aea.gif)
每個按鈕最小有 7 個以逗號分隔的參數,依次序如下:
1. 按鈕名稱,例如上圖的「Hello」、「測試」
2. Keycode 鍵盤碼,例如右邊數字鍵盤的「0」鍵的鍵盤碼是 96。以上圖的設定,按右邊數字鍵盤的「0」鍵就等於用滑鼠按「Hello」按鈕。
3. 按鈕闊度
4. 按鈕高度
5. 按鈕與左邊界的距離
6. 按鈕與頂邊界的距離
7. 要播放的遙控 Wav 檔名
每個按鈕可播放超過一個遙控 Wav 檔,其餘的檔名以逗號分隔放在後面。例如 National Geographic Channel 在香港有線電視的台號是 52,轉台時需要按 5、2、OK,用以下的參數做一個[NGC]按鈕,按一下就依次序發出三個遙控訊號:
NGC,109,45,25,331,41,ca-5.wav,ca-2.wav,ca-ok.wav
之前提過,如果想連續發射兩個相同的遙控訊號,例如想轉台到 11、22、33……等等,發射兩個遙控訊號之間需要稍長停頓時間,所以我特別做了一個一小段靜音的音效檔 Silence.wav 用來放在兩個數字的遙控 Wav 檔中間,例如想用[AXN]按鈕轉到 22 台可以把按鈕參數寫成:
AXN,111,45,25,229,41,ca-2.wav,silence.wav,ca-2.wav,ca-ok.wav
修改 Layout.ini 後存檔,關閉再重開 IrTxGUI 就會使用新設定。
IrTxCMD
IrTxCMD 是命令行版本的發射程式,用法如下:
IrTxCMD WaveFileName(s)
遙控 Wav 檔名以空格分開依次序放在 IrTxCMD 後面,例如之前提過轉去 National Geographic Channel 要按 5、2、OK 三個按鈕,可以把命令行寫成:
irtxcmd ca-5.wav ca-2.wav ca-ok.wav
如果個別遙控 Wav 檔的檔名本身有空格,就需要在這檔名前後加上 Double quotation mark(”),例如 File A.wav 的 File 和 A 之間有空格:
irtxcmd File1.wav “File A.wav” File2.wav
我寫這個命令行版本的主要目的是使用 Windows 的[排定的工作],在預設時間遙控有線電視解碼器轉台,例如想在逢星期五晚 21:00 轉台到 Discovery Channel(53台),首先進入控制台→排定的工作,依指示找出 IrTxCMD.exe,喜歡的話可以把這項工作的名稱改為 Discovery Channel,選擇[每周]後按[下一步]:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-735382678fdce674fce4ff168601daf8.gif)
設定時間(建議預早小小時間)及日期(可設定多日)後按[下一步]:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-a848df5168451bb84814a6e2ef7ed24d.gif)
輸入 Windows 的使用者名稱和登入密碼後按[下一步]:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-f27534718d531767a3dbefdd28ffd81e.gif)
選擇[按下完成後開啟這項工作的進階內容]後按完成:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-f09788a9fba3472ad7f5d66b7f61d18e.gif)
在內容版面的[工作→執行],在 IrTxCMD.exe 後加上要播放的遙控 Wav 檔名,以及選擇[啟用(已排定的工作會在指定時間執行)]:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-1d52a1ccbb25e5f6c2a369e119404f5d.gif)
有需要的話可以進入[設定]如下圖更改電源管理(不建議 Notebook 電腦使用,因為有可能在關機狀態下仍然耗用電池),即使電腦在待命或休眠狀態下,在指定時間之前也會自動醒來執行這工作:
![[DIY]由電腦發紅外線遙控其它電器(更新 2013-04-11)](http://attach.mobile01.com/attach/201303/mobile01-315fc42906aae2a06037e58c019a1664.gif)
完成設定後,IrTxCMD 就會在預定的時間發射有關的遙控訊號。
最後附上 Youtube 的示範短片:
http://youtu.be/z5bT5B4vqkU
請開啟中文字幕,並將字幕背境顏色設定為透明。