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

how do i repeat the same result when i use reverse audio
使用 Reverse Audio 時重複取得相同結果

此處「重複取得相同結果」的意義

在本文的脈絡中,可重現性意味著,在同一個瀏覽器上,從同一個來源檔案啟動 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 結果

  1. 在與先前成功執行所用瀏覽器版本相同的瀏覽器上,以全新的分頁開啟 Reverse Audio。
  2. 從檔案選擇器中選擇同一個來源檔案。選擇器接受 MP3、WAV、M4A、AAC、Ogg 與 WebM 等 MIME 類型;實際的編解碼器支援則依瀏覽器與作業系統而定,詳見 MDN BaseAudioContext decodeAudioData 參考文件。
  3. 可選擇在內建播放器中預覽原始檔案,以在反轉前確認其為預期的檔案。
  4. 確認檔案仍符合 50 MB 的壓縮限制,以及解碼後 3,000 萬聲道樣本的預算,因為同一個來源的重新匯出,即使檔案大小相近,樣本數也可能已經增加。
  5. 選擇 Reverse audio,然後等待 Web Audio 內容解碼資料、反轉每個聲道,並在分頁中本機編碼出新的 WAV。
  6. 將該工具所顯示的長度、聲道數量、取樣率與檔案大小,與先前執行所得到的數值進行比對。
  7. 預覽結果,然後下載新編碼的 PCM16 WAV。瀏覽器會為該下載指派一個新的暫存物件 URL,而過期的 URL 會在選擇其他檔案或離開頁面時被釋放。
  8. 將下載的 WAV 以可預測的檔名儲存,以便日後重複執行時能與其進行逐位元組的比對。

為何重複執行可能產生差異

如果輸入保持不變,輸出的位元組也會保持不變,但實際上有幾種方式會使這次下載的 WAV,與上次下載的 WAV 不同。每一種情況所指向的,都是讀者可以驗證的條件,而非工具的隨機行為。

  • 來源檔案已變更。即使對原始檔案進行單一樣本的編輯,也會使反轉輸出的逐位元組比對結果翻轉,因為反轉函式會將每個事件移至其對稱位置。
  • 瀏覽器或作業系統無法解碼來源容器。像 .m4a 這種常見的副檔名,可能包含目前瀏覽器不支援的編解碼器,此時該工具會回報解碼錯誤,而不會產生結果。
  • 這次超過了其中一項限制。若檔案解碼後的總聲道樣本數超過 3,000 萬、長度超過五分鐘,或聲道數超過 8 個,則該檔案的重複執行將被直接拒絕。
  • Web Audio 內容是從先前的執行中重複使用的。該工具會在作業結束後,或在新作業取代舊作業時關閉 Web Audio 內容,因此先前失敗的嘗試無法將部分樣本洩漏到後續的下載中。
  • 下載檔案是從先前的作業保留下來的。每次成功的執行都會產生一個新的下載 URL,因此若未觸發重試,留在「下載」資料夾中的舊 WAV 可能會被誤認為是新的結果。在選擇其他檔案或再次執行該作業時,會先清除先前的下載,因此舊的成功結果無法假冒成新的結果。

在您自己的工具中確認重複的結果

可重現的執行在下載完成時並未結束。請在將使用該 WAV 的音訊編輯器或播放器中開啟新的 WAV,聆聽檔案的開頭與結尾,以確認來源的最後一個樣本現在是結果的第一個樣本,並將長度、聲道數量與取樣率與該工具所回報的數值進行比對。僅有瀏覽器能成功播放,並不代表在較舊的裝置上,或是在預期使用不同聲道順序的軟體中也能相容,特別是當來源為高取樣率或多聲道檔案時。若該 WAV 是要用於需要淡入淡出、修剪、編解碼器選擇或保留中繼資料的下游編輯器,請改用該編輯器進行後續處理,而不是期望 Reverse Audio 提供這些控制功能。

如需依序逐步進行這些驗證步驟的檢查清單,請參閱 使用 Reverse Audio 後如何檢查結果。該處的驗證流程與上述可重現性工作流程相互對應,因此若讀者能將同一個來源同時套用於這兩份指南,則在每次重複執行時,都會看到相同的長度、聲道與取樣率數值。

如果您正在權衡各種選項,使用 Reverse Audio 時遇到問題該如何排解對此有詳細說明。