標籤:

普及iTunes SDK,掛一個垃圾收費應用並宣一下自己的Project

頭圖出處:「ソードアートオンライン abec畫集」封面

從本文你將會學到什麼:

  1. iTunes COM for Windows SDK的使用方法
  2. iSyncr是個坐地起價的垃圾應用,它的開發商JBT Studio的腦袋是鐵打的
  3. 我寫了的一個小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

另外這個工具有這些特點:

  1. 只需要在電腦上使用工具,但是必須要開手機的ADB調試(以後有時間並且有人資瓷會出WiFi同步的);
  2. 可以重新編碼,方便小容量設備使用,目前只支持AAC。;
  3. 會重新寫入所有標籤,避免前面所說的iTunes沒有把標籤寫入造成標籤混亂;
  4. 可以導入播放列表;
  5. 免費開源(廢話)

目前沒有,未來可能有的功能:

  1. WiFi同步
  2. 選擇文件保存在設備的哪個地方
  3. 更好看的GUI
  4. 更強大的錯誤支持
  5. 將FFmpeg和編碼器的輸出重定向

沒有PR可能不會有的功能:

  1. 除了AAC以外的轉碼支持

感謝圍觀、以上です。


推薦閱讀:

iTunes無法驗證伺服器身份解決方案
iTunes 是好軟體嗎?
Win10安裝iTunes安裝出現安裝彙編microsoft.vc80.crt怎麼辦?

TAG:iTunes | C# | Android |