10 月主要做了兩件事:讓 reTONE 把音訊直接送往 USB DAC,以及播放 NAS 或另一支手機上的音樂。過程中也加入了 Bluetooth 遙控與 Android 4.0 支援。想看所有變更,請參閱「下載」頁面的版本紀錄。
在 Potafes Osaka 試水溫(10 月 3 日)
10 月 3 日,我在攜帶型音響展 Potafes Osaka 上展出了 reTONE,主要是當作一次實驗。它擺在我們攤位的一角,老實說,我以為不會有人過來。不過音響展上幾乎全是硬體,所以桌上一排莫名老舊的智慧型手機反而引人注目。很多人停下來問這是什麼。我說明自己正在試一個點子,有幾位說他們很想要。有些人純粹是喜歡老東西,也有人說自己家裡還放著舊手機。反應之熱烈讓我很意外。
每次做東西,我都希望它是任何人都能輕鬆使用的。只有一個人能用、或只存在一台的作品,從來不太吸引我。所以以某種形式發布,一直都在計畫之中。我不知道的是,究竟有沒有人真的想要這種東西。現場的反應給了我答案,而且是好的答案,就在那時,我決定把它好好準備到能正式發布。

USB DAC,一路跌跌撞撞(0.64–0.88)
把 USB DAC 插到舊的 Android 手機上,大多數時候什麼都不會發生。Android 直到 5.0 才把 USB DAC 當作標準的音訊輸出(在那之前由製造商自行決定),所以大部分舊手機根本不知道該拿它怎麼辦。較新的 Android 也不一定比較好:我測試的一支手機,在聲音送到 DAC 之前就默默把一切轉成 48 kHz/16-bit。
所以現在 reTONE 會略過 Android 的音訊系統,直接和 DAC 溝通。結果就是,執行 Android 4.1 的手機也能以曲目原本的取樣率把音樂送到 USB DAC。要我說的話,這是 reTONE 做到的最重要的事。
這一路可真是精彩。
第一次發出的聲音快了八倍。我按下播放,聽到的是花栗鼠在播報新聞。原來是每次傳輸塞進了錯誤的音訊量;修正之後就正常播放了。不過我還是笑了。
本月我最喜歡的 bug:一支舊手機以 0.941 倍的速度播放每一首曲目。這個數字剛好是 16/17。那支手機的 USB 硬體每傳 16 次就會多插進一個空格,所以 DAC 永遠只拿到所需音訊的 16/17。我加上了修正。接著另一支完全不同的手機,因為那個修正,開始以 1.14 倍的速度播放。沒錯,我得修正那個修正。

接著是一個怎麼也消不掉的爆音。我改了 reTONE,還在。我改了設定,還在。結果原來是手機本身的 Wi-Fi。Wi-Fi 關掉:安靜。Wi-Fi 打開:爆音。從頭到尾都是 Wi-Fi。如果用 USB DAC 時聽到爆音,請先試試飛航模式。
還有一天晚上,2012 年的測試機在播放途中重新開機。我怪電池,錯了。是 reTONE 當掉、自己重新啟動、又重新抓住 DAC,結果手機自己的系統撐不住倒下了。手機的系統,App 無能為力,但 reTONE 可以從一開始就不當掉,所以修好的是這個部分。
目前的狀況:所有能運作的手機與 DAC 組合,都能以正確的速度播放、不會斷音,2012 年的測試機也能順利把 24-bit/192 kHz 的檔案不經轉換送到有電池的 DAC。仍有一些尚未解決的問題。有些手機宣稱支援 USB 裝置,實際上卻不行;而從手機取電的 DAC,在較舊的硬體上有時無法被辨識。
重新檢查取樣率轉換器(0.60–0.68)
當手機無法以原本的取樣率播放曲目時,reTONE 會進行轉換。在較舊的 Android 上,現在所有 FLAC 和 WAV 都會經過轉換,所以轉換的部分被好好檢查了一遍。最初的版本會削掉一點最頂端的高音,而 DSD 轉換器則讓部分超音波成分折返到可聽範圍內。兩者都重新做過了。
接著有點尷尬的一刻。為這個網站製作頻率響應圖時,我們發現重做的濾波器沒有達到它們自己的目標。差得不多,但目標就是目標,所以又修了一次。沒想到抓到問題的,會是一張網站用的圖表。
老實說:差異非常小,我不敢保證你聽得出來。我能告訴你的是,數字現在都到了該在的位置。在可聽範圍內是平坦的,轉換所增加的任何東西都小到聽不見。
把 NAS 或另一支手機當成音樂庫(0.80–0.88)
現在 reTONE 可以播放家中 NAS 上的音樂,或是另一支執行 reTONE 的手機上的音樂。曲目會一邊播放一邊複製到舊手機上,所以曲目載入完成後,就與網路無關了。
第一個版本得等整個檔案下載完,一首大型高解析曲目大約要等 23 秒。改成一邊下載一邊播放後,大部分問題都解決了,只剩一個大型 WAV 檔仍要 19 秒才開始播放。這 19 秒裡,有 15 秒是舊手機在放入真正的音訊之前,先寫出一個填滿 0 的空檔案。省掉這個步驟後,降到了 2 秒。從 19 秒變 2 秒,只是因為不寫 0。
還有幾個意外:一首封面圖片超大的曲目完全無法播放,因為檔案開頭全是圖片,沒有音樂。另外,兩支手機之間的分享曾經失敗過一次,原因是其中一支的時鐘整整差了一天。
從自己的手機分享,刻意設計得很嚴格。只有配對過的 reTONE 裝置才能聆聽,兩支手機會顯示同樣的 6 位數代碼來確認,而且超過一小時沒有使用,分享就會自動關閉。目前我只用電腦上的小型伺服器和 reTONE 本身測試過,還沒有用市售的 NAS 測試。
Bluetooth 遙控(0.71–0.72)
為什麼要遙控?主要是因為方便。舊手機可以一直接在擴大機上,或一直放在包包裡,而你用手上已經拿著的手機選歌。也有電池方面的理由:在舊手機上,螢幕通常是最耗電的部分。讓它保持關閉,電池就能撐得久很多。
現在可以透過 Bluetooth 做到這件事。連線期間,日常手機上的 reTONE 會鏡像顯示舊手機的內容。
在第一個版本中,除了音量以外一切正常。音量的指令是 "+1",而 Android 4.1 無法解析前面帶加號的數字。就一個字元。這只能在 Android 手機之間使用,而且第一次連線時,傳送音樂庫需要一點時間。
回到 Android 4.0(0.84–0.86)
有人想在 Android 4.0 的音樂播放器上執行 reTONE(那個人就是我),所以支援範圍從 4.1 往回延伸到了 4.0。麻煩的地方是:在 4.0 上,呼叫系統沒有的功能時,失敗的方式是一般的錯誤處理抓不到的。每一個這樣的地方都得一個一個手動找出來。
新的 App 內更新檢查也碰到同樣的牆。它要檢查的伺服器只接受較新類型的安全連線,而 Android 4.x 根本沒有,所以在這些手機上,reTONE 會告訴你它無法安全地檢查。Android 4.0 到 4.0.2 仍未在實機上測試過。
其他變更
- 修正 DSD 曲目開頭的輕微喀噠聲。
- 修正關閉「Silent DAP mode」後,通知音有時仍維持靜音的問題。
- 新增 Apple Lossless(ALAC)播放。
- 修正在較新的 Android 上專輯封面不見的問題。
- 新增平板橫向持握和摺疊手機的版面配置。
- 新增從通知、鎖定畫面以及 Bluetooth 裝置操作播放的功能。
- 新增「Network features」,預設為關閉。