Reverse Audio 工具會在相同條件下,於同一個來源檔案執行工作流程時,每次都產生相同的 WAV 下載,因為所有步驟都在當前瀏覽器分頁中,使用具確定性的樣本反轉函式於本機完成。該工具會讀取選擇的音訊檔案,使用 Web Audio API 解碼其樣本,獨立反轉每個聲道中已解碼的樣本,並編碼出一個全新的 PCM16 WAV,以小端序寫入,並保留原始的取樣率與聲道數量。因此,相同的輸入會產生完全相同的位元組流;若要從重新開始時取得不同的檔案,唯一的方法是餵入不同的來源檔案、超過所述的限制,或在無法解碼該容器的瀏覽器中作業。

此處「重複取得相同結果」的意義
在本文的脈絡中,可重現性意味著,在同一個瀏覽器上,從同一個來源檔案啟動 Reverse Audio 連續執行兩次,所下載的 WAV 在長度、取樣率、聲道數量與 PCM 資料上,是逐位元組等價的。反轉本身是純粹的資料轉換:每個被接受的聲道會被獨立反轉,然後再以 WAV 影格順序寫回聲道。由於此轉換不會讀取時間、隨機種子或遠端狀態,相同的輸入永遠會對應到相同的輸出樣本陣列,而該陣列每次都會被編碼成相同的小端序 PCM16 位元組。
「相同結果」的概念也涵蓋 WAV 的產生方式,而非僅止於聽起來的內容。該工具會將每個浮點樣本裁剪到 -1 到 1 的範圍,將負的最大值映射為 -32768、正的最大值映射為 32767,並以帶正負號的 16 位元小端序,將資料寫入 RIFF/WAVE 容器中。這些步驟都是確定性的,因此除非輸入有所改變,否則相同輸入的兩次執行,其 PCM 位元組不會產生偏差。
界定可重複執行的硬性限制
可重現性也取決於該次執行是否能順利完成。Reverse Audio 會直接拒絕未通過任何一項文件記載之檢查的輸入,而不是將其截斷,因此昨天能成功執行的重複作業,今天失敗的唯一原因可能是檔案本身已變更、瀏覽器拒絕該容器,或超過了其中一項限制。從該工具的產品合約中取得的官方限制,就是重複執行必須滿足的合約。
| 限制 | 數值 |
|---|---|
| 壓縮來源檔案大小 | 最大 50 MB |
| 解碼後音訊長度 | 最大 5 分鐘 |
| 聲道數量 | 1 至 8 個聲道 |
| 取樣率 | 8,000 Hz 至 192,000 Hz |
| 總聲道樣本數 | 最大 30,000,000(影格 × 聲道) |
3,000 萬聲道樣本的預算,可保護分頁不會因為解碼陣列意外過大而當機,即使壓縮來源檔案在磁碟上看起來很小。因此,當檔案較小時能成功的重複執行,在同一個來源被替換為解碼後總聲道樣本數更多的較長編碼時,可能會失敗。
哪些保持不變,哪些永遠會被重新產生
重複下載的檔案在聽覺特性上完全相同,但在容器層級上與來源檔案並不相同。該工具會反轉已解碼的樣本資料,然後寫入全新的 WAV,因此來源容器原有的所有屬性都會從頭重建。下列比較表顯示,重複執行會保留哪些內容,以及哪些內容永遠必須重新建立。
| 屬性 | 來源檔案 | 反轉後的 WAV 下載 |
|---|---|---|
| 取樣率 | 由瀏覽器解碼保留(必須介於 8 kHz 至 192 kHz) | 數值相同,寫入 RIFF/fmt 標頭 |
| 聲道數量 | 保留(必須介於 1 至 8 個聲道) | 數值相同,用於多聲道輸入的立體聲交錯 |
| 長度 | 來源長度 | 長度相同;反轉樣本會使事件從結尾向前移動 |
| 編解碼器與容器 | MP3、WAV、M4A、AAC、Ogg 或 WebM,視瀏覽器支援而定 | 永遠是新編碼的 PCM16 WAV |
| 標籤、封面、編碼器設定 | 來源可能帶有這些資料 | 不會複製;檔案會被重建 |
| 壓縮位元率 | 來源可能是壓縮串流 | 不適用;輸出為 PCM16 |
這就是為何重複執行無法「保留原始 MP3」或「保留專輯封面」。輸出永遠是一個全新的 PCM16 WAV,因此即使來源同時具備中繼資料、封面與章節,在同一個來源上執行的兩次重複執行,所產生的新檔案也不會包含這些內容。
如何重複取得相同的 Reverse Audio 結果
- 在與先前成功執行所用瀏覽器版本相同的瀏覽器上,以全新的分頁開啟 Reverse Audio。
- 從檔案選擇器中選擇同一個來源檔案。選擇器接受 MP3、WAV、M4A、AAC、Ogg 與 WebM 等 MIME 類型;實際的編解碼器支援則依瀏覽器與作業系統而定,詳見 MDN BaseAudioContext decodeAudioData 參考文件。
- 可選擇在內建播放器中預覽原始檔案,以在反轉前確認其為預期的檔案。
- 確認檔案仍符合 50 MB 的壓縮限制,以及解碼後 3,000 萬聲道樣本的預算,因為同一個來源的重新匯出,即使檔案大小相近,樣本數也可能已經增加。
- 選擇 Reverse audio,然後等待 Web Audio 內容解碼資料、反轉每個聲道,並在分頁中本機編碼出新的 WAV。
- 將該工具所顯示的長度、聲道數量、取樣率與檔案大小,與先前執行所得到的數值進行比對。
- 預覽結果,然後下載新編碼的 PCM16 WAV。瀏覽器會為該下載指派一個新的暫存物件 URL,而過期的 URL 會在選擇其他檔案或離開頁面時被釋放。
- 將下載的 WAV 以可預測的檔名儲存,以便日後重複執行時能與其進行逐位元組的比對。
為何重複執行可能產生差異
如果輸入保持不變,輸出的位元組也會保持不變,但實際上有幾種方式會使這次下載的 WAV,與上次下載的 WAV 不同。每一種情況所指向的,都是讀者可以驗證的條件,而非工具的隨機行為。
- 來源檔案已變更。即使對原始檔案進行單一樣本的編輯,也會使反轉輸出的逐位元組比對結果翻轉,因為反轉函式會將每個事件移至其對稱位置。
- 瀏覽器或作業系統無法解碼來源容器。像 .m4a 這種常見的副檔名,可能包含目前瀏覽器不支援的編解碼器,此時該工具會回報解碼錯誤,而不會產生結果。
- 這次超過了其中一項限制。若檔案解碼後的總聲道樣本數超過 3,000 萬、長度超過五分鐘,或聲道數超過 8 個,則該檔案的重複執行將被直接拒絕。
- Web Audio 內容是從先前的執行中重複使用的。該工具會在作業結束後,或在新作業取代舊作業時關閉 Web Audio 內容,因此先前失敗的嘗試無法將部分樣本洩漏到後續的下載中。
- 下載檔案是從先前的作業保留下來的。每次成功的執行都會產生一個新的下載 URL,因此若未觸發重試,留在「下載」資料夾中的舊 WAV 可能會被誤認為是新的結果。在選擇其他檔案或再次執行該作業時,會先清除先前的下載,因此舊的成功結果無法假冒成新的結果。
在您自己的工具中確認重複的結果
可重現的執行在下載完成時並未結束。請在將使用該 WAV 的音訊編輯器或播放器中開啟新的 WAV,聆聽檔案的開頭與結尾,以確認來源的最後一個樣本現在是結果的第一個樣本,並將長度、聲道數量與取樣率與該工具所回報的數值進行比對。僅有瀏覽器能成功播放,並不代表在較舊的裝置上,或是在預期使用不同聲道順序的軟體中也能相容,特別是當來源為高取樣率或多聲道檔案時。若該 WAV 是要用於需要淡入淡出、修剪、編解碼器選擇或保留中繼資料的下游編輯器,請改用該編輯器進行後續處理,而不是期望 Reverse Audio 提供這些控制功能。
如需依序逐步進行這些驗證步驟的檢查清單,請參閱 使用 Reverse Audio 後如何檢查結果。該處的驗證流程與上述可重現性工作流程相互對應,因此若讀者能將同一個來源同時套用於這兩份指南,則在每次重複執行時,都會看到相同的長度、聲道與取樣率數值。
如果您正在權衡各種選項,使用 Reverse Audio 時遇到問題該如何排解對此有詳細說明。