Sunday, September 24, 2006

(MC360) MC 360 (098748) 使用報告

MC 360好久沒出新版,這次一出,我特別多等了好幾天才下載,因為我得了「白老鼠恐懼症」,不想再花太多時間去當敢死先鋒了。

所以,我是看到omen的繁中翻譯已放出來後,才決定下載安裝新版。omen的繁中語言串發佈在MC 360官網論壇,有需要的朋友這邊請進

之前看到一些討論,知道這回的新版存在有一點小bug,原本以為都過了這麼多天了,下載的版本應該是已經修正過的才對,卻沒想到問題依舊,還得花功夫去找所謂的修正檔,更新之後才算完成。對這個skin的觀感越來越差:(

好了,那到底是什麼bug呢?比較嚴重的一個,就是在選用ttf字型的時候,頁面上的文字會有白色的「鬼影」擠在中間,或出現在不該出現的地方。我們繁中使用者,用的一定是ttf字型,所以這問題也就是我們共同的問題。而下載了所謂修正檔,看了一下修正的部分,不禁啞然失笑……原來修正的只是font.xml的字型設定而已。話說原先MC 360頁面上的字,有些另加了白色的陰影特效,這次出問題的地方,在於陰影的位置亂掉了,所以在字型設定的地方,就把全部有用到「shadow」的部分刪掉,讓文字不再有陰影,這樣就算修正完畢。

另外,據說背景動畫也有一點錯亂,我還沒試。我現在只看到我的「系統」頁面上,出現的標題竟是亂碼「蝟餌絞」,別的像是「媒體」、「遊戲」等標題都正常……心想算了,暫時懶得去除蟲了,還是換回自改的Project Mayhem III好了!

Thursday, September 21, 2006

(XBMC) 補完後的default.xbe分享

稍早compile了xbmc,呃,該算是0921版。這次特別把之前自行修改過的原始碼還原,只保留了「unicode補完計畫」的轉碼字庫,剛試著播出幾個影片檔,一切正常。

目前最新釋出的T3CH版的XBMC,是0918的CVS,我看了一下changelog,這幾天並沒有什麼動到檔案系統的修正,所以我這個新compile的xbmc執行檔default.xbe,應該可以直接套用,我把這個檔壓縮後放在這裡(解壓密碼: kaku03),想試看看補完後的xbmc,可以先去下載T3CH版,再以我的default.xbe覆蓋原檔即可。(免費空間若一個月無人下載,即自動刪除)

嚴格說起來,在xbmc支援utf-8之後,這個補完計畫就沒什麼大不了的了,總覺得這只對懶得再轉檔,且有很多燒在CDR或DVD片裡的ansi字幕檔的人有幫助。另外就是xbox硬碟裡的中文命名(因xbox的fatx硬碟不支援utf-8),可以少掉之前的一些限制,現在用假名或簡體字應該也可以正常顯示了。

聽說又有新的MC360了,有空再看看吧……

Monday, September 18, 2006

(PM III) 與Orbs的結合Part II (含分享)

不管在這裡還是TvGame360,我都承諾過要分享支援動畫效果的Project Mayhem III和Orbs的合體獸,算來也該是要履行承諾的時候了。XBMC自五月的大改版之後,我就比較少更新,且都還用0503版來看影片,手上沒有新的、比較滿意的版本,自然也就不會想要去修改skin;直到最近,靠自己編譯出合意的版本之後,才又開始對很久沒去碰的Project Mayhem III動手腳。

以下先提供必需的檔案下載(481k)。解壓後,把所附的檔案覆寫至Project Mayhem III的相對資料夾取代原檔,到「系統設定」-->「外觀與主題」-->「佈景主題」,選擇「Kaku03」,這樣就行了。我不確定相容程度,不過七月以前的XBMC一定是不行的,當然版本越接近現在越好。我中文字型只設一組「微軟正黑」,字型檔案為:msjhbd.ttf,有字型檔的話,直接丟到xbmc\media\fonts這個資料夾即可,沒有的話,將你的中文字型檔改名為以上的名稱也行,不然你用你原先使用的font.xml也可以。不過我對各圖示大小做過一點細部調整,是以微軟正黑的顯示效果為準,其他的恐有位置高低或字型大小的差異。(以下是舊圖……新圖其實差不多,懶得再擷)


這次主要還是延續上次的修改,詳情請見上次的文章。變更的部分,第一也是舊文所提過的,為音樂圖示加上CD殼。另外還有改變圖片的檢示圖示,原先的圖片周圍留白太多,造成其下方的檔案文字空間被擠壓,而且也離圖示太遠。以下這張是原先的圖示:
而這是我修改過的圖示(選取時,原先是發亮效果,我改成下方顯示文字):
這是舊的顯示效果,圖片和文字間的距離太大了點:

現在的「我的圖片」,檔名和圖片間隔小了一點,文字比較不會被截掉。還有就是進行一些微調,讓疊上去的圖示和背景的圖片比較契合。而主視窗的日期和氣象顯示,也加上了狀態顯示參數,只有在取得氣象資料時,才會有兩列顯示,否則就是和PM III原先一樣的,只有日期和時間。而兩列RSS的第二列,也嘗試性地弄了一些不同的顯示位置。

這一次我也對寬螢幕做了些調整,「按理說」應該是顯示的出來,但我是用4x3電視以壓扁的方式調整,有些細微地方恐有誤差,要大家用了才知道。而高解像度(720、1080)我也沒辦法測試,不知會不會有問題。

有朋友說要寫教學,其實很簡單,變動到的檔,就是我附上的檔案,一般4x3螢幕的都在PAL資料夾,而16x9寬螢幕,就在PAL16X9,兩邊我都增、修了13個檔。最主要的,是把原設定中的圖示顯示部分,改換成我們所想要的圖示檔,再設定其位置和大小。例如以下是原「我的影片」在檔案模式之下,MyVideo.xml檔關於圖示部分的設定:
<control>
<description>pics thumbnailpanel</description>
<type>thumbnailpanel</type>
<id>51</id>
<onleft>2</onleft>
<onright>51</onright>
<onup>51</onup>
<ondown>51</ondown>
<include>contentpanelslide</include>
</control>

而以下是修改過的設定:
<control>
<description>pics thumbnailpanel</description>
<type>thumbnailpanel</type>
<id>51</id>

<itemwidth>105</itemwidth>
<itemheight>128</itemheight>
<texturewidth>90</texturewidth>
<textureheight>107</textureheight>
<thumbwidth>67</thumbwidth>
<thumbheight>96</thumbheight>
<thumbposx>12</thumbposx>
<thumbposy>6</thumbposy>
<imagefolder>folder-dvd-nofocus.png </imagefolder>
<imagefolderfocus>folder-dvd-focus.png </imagefolderfocus>
<texturewidthbig>143</texturewidthbig>
<textureheightbig>178</textureheightbig>
<itemwidthbig>143</itemwidthbig>
<itemheightbig>198</itemheightbig>
<thumbwidthbig>101</thumbwidthbig>
<thumbheightbig>172</thumbheightbig>
<thumbposxbig>20</thumbposxbig>
<thumbposybig>4</thumbposybig>
<onleft>2</onleft>
<onright>51</onright>
<onup>51</onup>
<ondown>51</ondown>
<include>contentpanelslide</include>
</control>

上半部是一般圖示顯示模式,下半部是大圖示顯示模示。每一個方塊是一個item,而我們要去設每個item的寬度與高度、底圖的高度與寬度(textureheight, texturewidth),和圖示的高度與寬度(thumbheight, thumbwidth),以及顯示位置。基本上,調整好一次之後,以後若要修改,就把修改過的設定取代原先Project Mayhem III的設定就行了。

P.S. 2006 0911補上新的「我的圖片」擷圖。

Thursday, September 14, 2006

(XBMC) 讓XBMC也來「Unicode補完」

上次提到修改原始碼,讓XBMC播字幕時回到舊時不需偵測 、不需先前載入的處理模式,讓繁中字幕能比較順利播出。但這只是治標的做法,因為有問題的字元還是會出現亂碼,這種改法並沒有比較進步,只是在逃避問題。

這幾天有空時都在研究改變XBMC裡big5字庫的方法,以求徹底解決這個問題。編碼問題若能解決,真金就不怕火煉,管它偵不偵測呢?

XBMC 目前採用的轉碼字庫(character set conversion library),是公開源碼的GNU Libiconv,版本是1.9.1,這個原始碼在XBMC原始碼裡就有附(libiconv-1.9.1.rar)。這個版本已經蠻舊了,之前曾說過的 各種有問題的字,像是碁、銹、 裏、墻、恒、粧、嫺等擴充字,或像「酶」這種少用字,此版的big5裡都會有問題。我查了一下比較新的1.9.2版,big5字庫仍是沒變,要到現在仍在測試 中的1.11版,才加入了像big5 2003字庫。

過去兩天我都試著從GNU網站下載不同版的來源碼,並試著以MinGW編譯出字庫, 想自行update,但編譯出的字庫格式不對,無法在XBMC上使用。在做了幾次白工之後,無意間打開XBMC所附的1.9.1版,發現裡面早就附上了 Visual Studio .NET的專案檔(inconv.sln),這才覺得自己怎麼那麼笨,不先從手邊有的東西著手,白繞了這麼一大圈。開啟inconv.sln,rebuild solution,在release資料夾中就可以找到XBMC所使用的libiconv.lib了。

當然,在編譯前, 要先更新這次研究的目的--big5的字庫。我找到了以「big5補完計畫」修改過的轉碼表和轉碼函式(big5.h,ces_big5.h),取代 1.9.1裡附的舊檔,重新compile了新的libiconv.lib,取代掉原始碼裡xbmc\lib\libiconv\ libiconv.lib,然後compile新的XBMC,支援Unicode補完計畫的XBMC也就完成了!擷兩張圖來瞧瞧:

以繁中Big5編碼播出的字幕,所有不相容字元一併到齊,還包括「方方土 」先生的罕用字。而且在ansi存檔模式之下,也看得到日文假名。

另換一種字型。字型裡面沒有的字,會出現空白,但不會是亂碼……
以上我用的xbmc,仍是有把enca偵測和前期載入功能關掉的修正版。下次再試試不修改原始碼的正常版效果如何(應該沒差才對)。

差點忘了說,之前測試就有問題的全形「/」符號,仍是無法播出。不過,這應該不會是什麼太大的困擾。
-------
0918補:
又試了幾個符號,現在發現全形「/」是可以顯示的,上次可能是在切換時切錯了,才會出現亂碼。又像音符記號,或簡體字,用補完後的xbmc,都可以順利轉碼。

Sunday, September 10, 2006

(XBMC) 讓TTF字幕不需播出前載入

XBMC近期版本的字幕播出,有一個很重大的改變,就是在mplayer偵測完字幕檔的編碼之後,就以該編碼(若偵測不出的話,就以使用者的設定編碼)轉成utf-8載入,而不是像之前,只要確定是ansi或utf-8,就直接送上OSD的字幕選單,供使用者選擇。

這個改變原是為了便民,但對台灣的大五碼使用者來說,就不怎麼方便了。因為XBMC的Big5原本就有點怪怪的,過去就發現若字幕中有「裏」這個字,將會導致該句字幕在播出時整段變成亂碼。而這種包含不相容字元的字幕檔,現在則是在載入之前就發生錯誤,導致使用者根本無法從OSD上去選用該字幕。

在知道XBMC有這個問題之後,就不會有選不到字幕時,有著莫名其妙的挫折感,而我個人過去所擁有的字幕檔,也大概都把「裏」改成「裡」,所以遇到不能播出的檔案,除了英文字幕我還搞不太清楚是怎麼回事之外,其實還蠻少的。

但也在那蠻少的檔案當中,還是陸續又找到了兩個不相容字元,一個是全形的符號「/」,一個是「酶」。其中「/」是藏在某個檔案的後面,所以當初沒能發覺,而「酶」這個字則非常罕用,是昨天在看Grey's Anatomy時才在某醫學術語中出現。

個人還是習慣過去的字幕播出方式,說老實話,不是為了Big5的繁中字幕,而是為了能同時切換到英文字幕。研究了好一會的原始碼,並經過了兩次無用的修改和兩次失敗的compile之後,終於修改完成了。現在我自己用的XBMC已經回復到過去一樣,不會在播出之前搶先載入字幕,所以也不會有載入失敗、無法選用的狀況發生,而我也可以自由地在各語言的字幕之中作切換了。

我改動到五個原始檔,以下敘述中提到的行數,以9月10日更新的原始碼版本為主。

一、xbmc\cores\mplayer.cpp
第2037行,改為:bool CMPlayer::GetCurrentSubtitle(CStdStringW& strSubtitle)
第2039行,改為: strSubtitle = L"";
第2056行,改為:strSubtitle += L"\n";
第2059-2062行:
CStdStringA S = sub->text[i];
CStdStringW W;
g_charsetConverter.utf8ToUTF16(S, W, false);
strSubtitle += W;

第323-327行,刪除:
/* try to autodetect any multicharacter charset */
/* then fallback to user specified charset */
m_vecOptions.push_back("-subcp");
strTmp.Format("enca:__:%s", m_subcp.c_str());
m_vecOptions.push_back(strTmp);

第2057行,改為:
g_charsetConverter.subtitleCharsetToUTF16(S, W);
原為:g_charsetConverter.utf8ToUTF16(S, W, false);


二、xbmc\cores\Mplayer.h
第168行,改為:virtual bool GetCurrentSubtitle(CStdStringW& strSubtitle);

三、xbmc\cores\IPlayer.h
第114行,改為:virtual bool GetCurrentSubtitle(CStdStringW& strSubtitle) { strSubtitle = ""; return false; }

四、xbmc\GUIWindowFullScreen.cpp
第684行,改為:CStdStringW subtitleText = L"";
第692行,改為: m_subtitleFont->GetTextExtent(subtitleText.c_str(), &w, &amp;amp;amp;h);
第693、694行刪掉,內容為:
g_charsetConverter.utf8ToUTF16(subtitleText, utf16Sub, false);
m_subtitleFont->GetTextExtent(utf16Sub.c_str(), &w, &amp;amp;amp;h);)

以下行數,因其上有刪行,而以下有增行,故僅當成參考,請參照原程式碼修改。
第699-701行,原為:
CGUILabelControl::WrapText(subtitleText, m_subtitleFont, maxWidth);
g_charsetConverter.utf8ToUTF16(subtitleText, utf16Sub, false);
m_subtitleFont->GetTextExtent(utf16Sub.c_str(), &w, &amp;amp;amp;h);
改為:
CStdString utf8Sub;
g_charsetConverter.utf16toUTF8(subtitleText, utf8Sub);
CGUILabelControl::WrapText(utf8Sub, m_subtitleFont, maxWidth);
g_charsetConverter.utf8ToUTF16(utf8Sub, subtitleText);
m_subtitleFont->GetTextExtent(subtitleText.c_str(), &w, &amp;amp;amp;h);

第709行,原為:
m_subtitleFont->DrawOutlineText(x, y, 0, 0xFF000000, 3, utf16Sub.c_str(), XBFONT_CENTER_X);
改為:
m_subtitleFont->DrawOutlineText(x, y, 0, 0xFF000000, 3, subtitleText.c_str(), XBFONT_CENTER_X);

五、xbmc\cores\mplayer\mplayer.cpp(注意:和第一個檔不一樣喔!)
第509行,加入前一行及下一行,使之成為:
#ifdef _DEBUG
dll.ResolveExport("MemAllocatorCreate", (void**) &pMemAllocatorCreate);
#endif

儲存後重新compile,功能就恢復到舊時習慣的方式了。

P.S. 於2006, 0911修訂。

Wednesday, September 6, 2006

(XBMC) 新的TTF顯示之字型比較

XBMC Changelog:
- 25-08-2006 changed: TTF rendering improved through the use of freetype.

新的freetype字型取樣方式,讓XBMC界面變得很不一樣,我個人是比較喜歡新的方式,而且以前播字幕時,碰到長句會停頓的缺點,也獲得了不少改善。以下我貼幾張不同字型的字幕擷圖,大家可比較、選用自己喜歡的字型。

Ⅰ:微軟正黑(粗),msjhbd.ttf,36p。繁、簡中,日文俱備,可惜符號不全……

Ⅱ:Arialuni.ttf, 36p。什麼都有的老牌字型。

Ⅲ:文鼎粗楷體,bkai00bu.ttf,36p。這是只有繁中的字型,碰到別的語言就只有留白。其實要看繁中字幕的話,這個就很足夠了。

Ⅳ:華康中黑(UN),dfheimdu.ttf,32p。這個字型被我加粗處理過,感覺還蠻齊全的,我桌面的字型在換成微軟正黑之前,就是用這一個。

Ⅴ:微軟正黑,用在freetype之前的版本上。不管是用在skin或字幕,上端都會被截到一小部分,因此不建議在舊版本上使用。

基本上來說的話,用在skin上的字型,若你的檔案名稱常有日文或簡體中文的話,那用多語言的字型比較合適,目前我覺得微軟正黑(粗)不錯;而其實微軟雅黑體(專為簡體中文)也是多語言的,不過字體比較細,而雅黑粗的話,個人又覺得太粗了點。而字幕也一樣,若只是用ansi看繁中字幕,可選擇的字型非常多,如上的粗楷體;而若是有用到utf-8的符號及其他種語言的話,arialuni和華康中黑都是不錯的選擇。

Tuesday, September 5, 2006

(XBMC) Vobsub字幕的縮放功能

以前的XBMC有個很好用的Vobsub縮放功能,特別是對我這種使用傳統4x3螢幕電視的人來說。我還會搭配XBMC的「螢幕校準」來調整字幕位置,如此在觀看一些寬螢幕的電影時,可以讓字幕以最適當的大小,出現在最適當的位置。

但從今年五月中旬起,XBMC忽然把Vobsub的縮放功能拿掉了。由於當時XBMC正在進行大改版,因此剛開始時我並不以為意,反正我看影片時仍是以用的最順手的0503版本為主,新版本只是用來定期玩玩MC360這個Skin而已。我想某些一時消失的功能,總是會在日後慢慢恢復的。

但就在幾天前,參與gamepc兄在TvGame360的討論,他提到他用修改來源碼的方式,來放大Vobsub字幕的大小,並附上他在XBMC官網討論區的討論連結。我是有好一陣子沒上到那裡去看老外的討論了,這一看才知道,原來開發小組對調整Vobsub大小的功能,是抱著「完全沒有必要」的態度,從他們發言的語氣來看,他們是不會恢復這項功能了。

再說到gamepc兄的改法,是把想要放大的比例直接設在來源碼裡面,在compile之後,所使用的XBMC就固定會把所有Vobsub字幕放大到所設的比例。這個方式使用起來並不方便,因使用者無法隨時調整大小;最好的解決之道,仍是恢復XBMC過去那種以GUI介面來設定大小的方式。

既然gamepc兄已經起了個頭,我這兩天也就朝這個方向加以改進了一下,主要是找出GUI介面中負責這項功能的檔案,並找出在修改前的程式碼,把這個功能給加了回去。重新compile之後,目前這個功能又恢復舊觀,且使用正常。

我動到了兩個檔案,第一是「xbmc/cores/VideoRenderers/XBoxRenderer.cpp」,把第233行的「float EnlargeFactor = (float)g_settings.m_ResInfo[res].iWidth / 720.0f; //g_guiSettings.GetInt("Subtitles.EnlargePercentage") / 100.0f;」改成「float EnlargeFactor = (float)g_guiSettings.GetInt("Subtitles.EnlargePercentage") / 100.0f;」,其實這就是原先的設定,XBMC小組現在是把Vobsub字幕的大小調整交給螢幕解析度去判定,也就是前面的那一段,而原先的設定XBMC開發小組也並沒有刪掉,只是以雙斜線將其變成註記的非執行列。

第二個就是恢復GUI的控制,修改的檔是:「xbmc/GUISettings.ccp」,在約第379行加入:「AddInt(8, "Subtitles.EnlargePercentage", 492, 100, 30, 10, 200, SPIN_CONTROL_INT_PLUS, MASK_PERCENT);」修改後存檔,重新compile,就大功告成了。

圖我就不擷了,反正就是和以前一樣,在「系統設定-->我的影片-->字幕設定」裡,又出現了舊版才有的「Vobsubs字幕比例」這個選項而已。