TAG

首都機能移轉 (2) 歌詞 (2) 靠北文 (40) 戲言 (30) 糟糕 (7) ACG (23) Assembly (2) Boost (2) C (31) C++ (69) CMake (4) CSIE (67) Debian (34) Design_Pattern (2) Django (1) Eclipse (1) en_US (13) FFmpeg (3) FoolproofProject (26) FreeBSD (2) Git (4) GNU_Linux (65) IDE (5) Java (11) JavaScript (19) KDE (15) Khopper (16) KomiX (3) Kubuntu (18) Life (1) Lighttpd (2) Mac_OS_X (2) Opera (1) PHP (2) PicKing (2) Programing (21) Prolog (1) Python (7) QSnapshot (2) Qt (30) Qt_Jambi (1) Regular_Expression (1) Shell_Script (7) Talk (98) VirtualBox (7) Visual_Studio (13) Windows (18) zh_TW (36)
顯示具有 Khopper 標籤的文章。 顯示所有文章
顯示具有 Khopper 標籤的文章。 顯示所有文章

2011年5月27日 星期五

Khopper 0.4.2 is out!

v0.4.2:
  • 修正 Windows 平台開檔時會直接清空檔案的問題
  • 新增 Windows Installer 方便安裝
v0.4.1:
  • 修正 YouTube 抓取失敗的問題
  • 增加 Ubuntu Natty 的套件
v0.4.0:
  • 加入 FreeDB 支援
  • 加入 YouTube 支援
  • 加入多緒轉檔功能支援
  • 儘可能消除 Phonon 對不同格式的影響
  • Ubuntu 安裝使用 PPA 來源

2011年3月25日 星期五

Khopper 0.4 Release Candidate is out

重要改變:
  • 加入 FreeDB 支援
  • 加入 YouTube 支援
  • 加入多緒轉檔功能支援
  • 儘可能消除 Phonon 對不同格式的影響
  • Ubuntu 安裝使用 PPA 來源

2009年11月16日 星期一

Khopper v0.2.3 released

  • 修正 flac 在檔案結尾處可能引發無窮迴圈的問題
  • 修正 flac 沒有 seektable 的問題
  • 修正 ogg 的寫入問題
  • 修正 mp3 vbr 的編碼問題,現在可以正確抓到長度了
  • 修正部分資訊讀取錯誤的問題

2009年11月3日 星期二

Khopper v0.2.2 released

Changes:
  • 修正 flac 的解碼問題
  • 新增 mp3 cbr 192 bps 的選項
  • 修正部分環境的編譯問題
看起來很少,可是花了我不少時間在 trace 別人的 code ....

2009年6月4日 星期四

Khopper v0.2.1 released

  • 修正 flac 的編碼問題
  • 修正 vorbis 的編碼問題
  • 修正亂七八糟的 ogg 選單
  • 重新開放 mp3 vbr 的選項
  • 改善時間軸

2009年5月20日 星期三

Khopper 0.2.0 released

修正:
  • 核心模組以 LGPL 2.1 or later 發佈
  • 若開啟 CUE 的對應檔案失敗,可再選擇另一檔案開啟
  • 時間軸現在會對 CUE 做調整
  • 加強錯誤訊息
原則上和 beta 比起來只是小修正...。整個專案全部移向 GitHub,希望不要被英文嚇到了。

2009年4月23日 星期四

Khopper 0.2 beta released

現在我會吱吱叫!
好吧,我又很不要臉地先釋出 beta 了。這次的重點在 plugin 的擴充,播放器以及更多格式的支援。事實上 Windows 版的移植也做好了,只是一直很懶得重開機。
Known issues:
  • CUE的播放不會調整時間
  • flac的解碼器怪怪的,也許是FFmpeg的問題
  • ogg似乎不會寫入tag
  • 轉換文字編碼時有機會當掉,尤其是 GB2312
  • 播放器是使用 Phonon,因此能播放的格式取決於 Phonon 使用的 backend,若是遇到不能播放的檔案(比方說ape,ape還有ape等格式),可以換一個 backend

2009年3月25日 星期三

Khopper 架構說明

有點久之前和 yen3 提到我想和人共同開發的東西,這裡寫出其中一個,說明架構,也算是留個紀錄吧。
本程式的架構如圖:

上層模組依賴下層模組,下層模組不會使用到上層模組。粗框代表有plugin介面可擴充。
以下就各模組做說明。
Graphic User Interface:
很明顯,就是使用者介面。除了使用Qt之外沒什麼好提的。
Album:
用來描述音軌資料的模組。
主要構成是 Track 和 Index 這兩個 struct。Index 用來表現時間資訊,因為它經常需要單位轉換,運算,故分離出來。Track 則用來裝載音軌的資訊。
CUESheet 則是使用 regex 來解析 cue 檔案的 struct 。
這個模組尷尬的地方在於字串的編碼,因為上層 GUI 的字串統一為 Unicode,但是下層解出來的資訊則是編碼過的字串;目前的重點就是讓它可以很順暢地和上下層溝通。
Panel:
控制輸出格式的使用者介面,為了擴充性而做成 plugin。
它提供輸出格式的選項,並根據選項生出合適的編碼器,轉交給上層進行轉檔。
目前內附有 mp3 的輸出控制。
Codec:
執行音訊解碼編碼的模組,也提供 plugin 擴充,但是較為複雜。
由於 Reader 和 Writer 基本上架構相同,在這裡只說明 Reader,Writer 就比照辦理。
Reader 提供了 AbstractReader 做為抽象介面,客戶若要擴充則必須繼承並實作它。
它要利用 ReaderFactory 這個物件工廠來生成具象物件,客戶必須註冊一個識別字給這個工廠,通常是格式的副檔名,上層模組就是依照這個識別字來產生物件。
若工廠找不到識別字所對應的產品,就會自動使用預設的編解碼器,其識別字為 "*"。
由於 Qt 的 plugin 只能夠產生一個實體,因此 plugin 的本體並不是 Reader 本身,而是一個索然無味的 class ReaderCreator,裡面只有一個成員方法,用來生成 Reader。
總結來說,若要擴展 Reader,增加新格式支援,你必須:
1.繼承 AbstractReader 並覆寫所有 pure virtual function
2.繼承 ReaderCreator 並覆寫 create() 讓它回傳修改過的 Reader:
MyReader * MyCreator::create() const { return new MyReader; }
3.註冊生成器給 ReaderFactory ,己有提供一些函式方便處理;在全域宣告:
const bool reg = registerReader( "mp3", "krp_mp3" );
其中 "mp3" 是程式中使用的識別字,"krp_mp3" 則是 Qt plugin 的名稱,如此一來只要使用:
Reader * r = createReader( "mp3" );
即可取得擴充的物件。使用者不需要了解你擴充的全貌。
以上的做法都是為了讓 Codec 和 Panel 對其他模組的耦合降到最低,事實上就算沒有 Codec 和 Panel 的 plugin,主程式也可以執行,只是不能編碼,也不能解碼。若要擴充也不需更動主程式的程式碼。
Common: 集中了各種雜項工具。
text.hpp 裡放置了各種字串處理函式。
tr1.hpp 是為了調整各編譯器對 TR1 和 C99 支援的不同。
os.hpp 裡放的是依各平台不同實作不同的函式,Linux 上就用 linux.cpp 實作,Windows 就用 windows.cpp 實作。
error.hpp 宣告了異常的基礎類別。
class ErrorBase : std::exception {};

template< typename ErrorType >
class Error : public ErrorBase, public ErrorType {};
ErrorBase 是為了避免 template 造成的隱式程式碼膨脹,ErrorType 則提供一個可訂製點和識別型態。你可以自定義一個型別 NewError,再使用 Error 即可獲得一個新異常類別。
Ablum、GUI 編成執行檔(static link),MP3Panel 和預設的編解碼器為 plugin(dynamic load),Common、Codec、Panel 都包在同一個 dll(dynamic link),因為這三個模組會同時被 plugins 和主程式使用。
大致上是這個樣子...以上有講到一些實作細節,但那是不可靠的,我有可能隨時更改;大致架構則很難再改變,從去年最初交上去的版本開始架構就是這樣,只是擴充方式從靜態編譯變為動態載入,但是程式碼本身卻幾乎全換。
目前比較不穩固的就是 Reader 和 Writer 的介面,兩個都是用 Template Pattern 的方式設計,但是我不確定是否夠通用。
另外 header 似乎也該整理一下...有點雜亂。

2009年2月13日 星期五

Khopper 0.1.0 Released

改版訊息:
  • 修正某些CUE讀取錯誤的問題
  • 修正進度會越跳越快的問題
  • 增加偏好設定儲存功能
  • 檔名增加音軌編號設定
  • 現在取消轉檔應該會正常運作了
  • 現在Windows上可以編譯並執行了
  • 新增程式圖示
  • 其他介面細微修改
套件改變:
  • 新增amd64套件
其他:
  • Windows可使用,但是無法開啟有Unicode字元的路徑
  • MP3的VBR暫時關閉
  • 個人設定會存在~/.config/FoolproofProject/Khopper.ini
學期又要開始了...因此我可能不會再像寒假一樣有這麼多時間,歡迎有興趣的人加入!

2009年2月8日 星期日

Khopper v0.0 RC released

改版訊息:
  • 修正輸出路徑在使用一個以上專輯時的錯誤
  • 在歌曲清單上的編輯將會反應到轉出的檔案上
  • 增加專輯資訊
  • 輸出格式設定改為跳出式視窗
  • 輸出檔名設定移至選單內
  • 轉檔鍵移至右鍵選單內,並增加熱鍵(Ctrl+Enter)
  • 轉檔進度條介面改善
  • 其他介面細微修改
套件改變:
  • 新增系統選單
如果沒什麼bug的話,這就會是最後的釋出版了。現在只有一個問題--如果不能保證MP3的VBR編碼是正確的,那麼恐怕我必須把它先拿掉。
另外一點很遺憾的是,依然沒有圖示;我可能要自己亂畫一個...

2009年2月5日 星期四

Khopper v0.0 beta released

改版訊息:
  • 修正編譯錯誤
  • 現在可以刪除歌曲清單了
  • 如果沒有選取音軌會出現警告
  • 加入ID3 tag的寫入功能
  • 改善輸出路徑的操作
  • 加入輸出檔名的自訂功能
  • 加入編碼預覽功能
套件包目前只有i386版,amd64可能會在下一版釋出。Bug可能很多,歡迎回報錯誤。

2009年2月3日 星期二

Khopper v0.0 alpha released

功能:音樂轉檔
簡介:讀入cue,任選幾首歌,點選fire即可轉出音樂,目前只實作MP3。
未來計劃功能:ID3 tag寫入,更多輸出輸入格式支援,播放功能。
一開始的畫面會像這樣:
初始畫面
可以使用File -> Open... 開啟*.cue檔案,或是直接用拖拉的方式開啟,會先出現選擇文字編碼的對話框:
選擇文字編碼
選擇完畢後即會出現該張專輯的內容,如果內容是正確的話:
讀取完畢
之後選擇想要的歌曲(使用ctrl+左鍵選擇複數),按下Fire即可轉檔:
進度顯示
檔名會使用歌曲的標題。

2008年8月29日 星期五

一些要注意的事

和學弟聊過之後發現的事:
  • 目前使用的Smart Pointer並不安全
  • 應該可以把Boost完全拔掉,直接使用Qt
  • 如果Loki再出現奇怪的問題的話,Object Factory和Singleton就自己寫,把Loki拔掉
  • 字串可能全部用std::wstring或是QString取代

2008年7月18日 星期五

Khopper v0.0 prealpha

git clone git://repo.or.cz/Khopper.git
git checkout v0.0_prealpha
主要功能:音樂轉檔
目前只接受CUE Sheet的分割。
需要Qt4和Loki,目前是直接call外部程式,需要人手改成內建功能。
有任何問題可以直接跟我聯絡。