普及iTunes SDK,掛一個垃圾收費應用並宣一下自己的Project
頭圖出處:「ソードアートオンライン abec畫集」封面
從本文你將會學到什麼:
- iTunes COM for Windows SDK的使用方法
- iSyncr是個坐地起價的垃圾應用,它的開發商JBT Studio的腦袋是鐵打的
- 我寫了的一個小Project:mySync可以方便的同步iTunes資料庫到Android設備,且有重編碼功能。
最近入了個Android手姬,想把電腦上的iTunes資料庫裡面的音樂同步到手姬裡面。資料庫大概是這個畫風
重點在於有播放列表,並且所有音樂都有完備的標籤,就像這樣:
於是經過Google找到一個Android上的app叫iSyncr。Play商店裡面長這樣子:
收費。還不便宜,我下載了Free版體驗了一下。結論就是:非常糟糕。有的時候iTunes會出現bug,不把iTunes資料庫裡面對標籤的更改寫入到源文件裡面,特別是mp3格式。這個軟體就只是簡單的連接iTunes,把iTunes目錄裡面的文件按著iTunes資料庫直接複製到設備裡面。那樣壞的標籤還是壞的,並且也不會重新編碼,資料庫裡面一堆一首幾十MB的ALAC無損,我的4GB手機瑟瑟發抖:
就這樣的軟體還能賣900JPY(摺合50多CNY)?!?諷刺的是這個App的評價還不低。
沒事,自己造輪子。以前寫一個小插件的時候了解了iTunes有個iTunes COM for Windows SDK,給Windows程序操作iTunes用。但是蘋果不知道為什麼,移除了相關文檔和頭文件的下載,造成這個Library的使用方法幾乎失傳。另外網上是幾乎找不到任何補檔的哦,不用去找了。
那麼還有沒有辦法使用呢?有!根據名字來看這是個COM Library,那麼系統中可能有註冊的iTunes COM組件,我們在Visual Studio裡面建一個VC++項目,#import導入試試?
瞬間爆炸!
可以看到,由於IITSource介面裡面有個GetFreeSpace方法,然而Windows API裡面也有,並且由於Unicode/ASCII的關係定義成了一個宏,因此也不存在覆蓋,直接就衝突了。那麼如何使用呢?由於tlh是編譯Toolchain生成的我們沒法碰,所以只能去其他平台。本人學藝不精並不會用MFC,那麼別的語言如何呢?那麼就選擇C#吧。新建一個C#項目,直接引用裡面添加,並且關掉嵌入互操作類型。就像這樣:
添加進來之後發現,Namespace是iTunesLib,那麼using,寫幾行代碼試試:
Run,nice!
那麼這個Library也不小,COM裡面並沒有文檔。如何使用呢?官方是有文檔的,但是前面說了,文檔已經不提供下載了。不過有個菊苣在網上開放了歸檔的文檔,可以在這裡找到(當然,早就沒有維護了.....):
iTunes COM Interface Documentation
joshkunz/iTunesControl
那麼,我就直接用這個Lib造了同步iTunesLibrary到Android設備的輪子...項目名字叫做mySync,文檔和README還待補全,(我說這是我出門旅遊花了10days寫出的東西你信嗎),某些功能還沒有添加。項目在這裡:
cqjjjzr/mySync
另外這個工具有這些特點:
- 只需要在電腦上使用工具,但是必須要開手機的ADB調試(以後有時間並且有人資瓷會出WiFi同步的);
- 可以重新編碼,方便小容量設備使用,目前只支持AAC。;
- 會重新寫入所有標籤,避免前面所說的iTunes沒有把標籤寫入造成標籤混亂;
- 可以導入播放列表;
- 免費開源(廢話)
目前沒有,未來可能有的功能:
- WiFi同步
- 選擇文件保存在設備的哪個地方
- 更好看的GUI
- 更強大的錯誤支持
- 將FFmpeg和編碼器的輸出重定向
沒有PR可能不會有的功能:
- 除了AAC以外的轉碼支持
感謝圍觀、以上です。
推薦閱讀:
※iTunes無法驗證伺服器身份解決方案
※iTunes 是好軟體嗎?
※Win10安裝iTunes安裝出現安裝彙編microsoft.vc80.crt怎麼辦?