音高移調會改變音訊錄音的感知頻率,而在這項操作過程中保持音質最乾淨的方法,就是將結果匯出為非壓縮的 16 位元 PCM WAV,並且全程在瀏覽器內部處理。多數使用者擔心的音質損失,實際上來自三個可預期的環節:有損重新編碼、傳輸到伺服器時的壓縮,以及在幕後悄悄轉換編解碼器的隱性轉碼管線。一個本機工具只要讀取您的檔案一次、以 Web Audio API 透過計算出來的播放速率重新取樣,並寫入全新的 RIFF/WAVE 容器,就能完全跳過這三個劣化來源。輸出結果與瀏覽器所呈現的內容逐位元相同——沒有第二次壓縮、沒有伺服器端轉換、沒有會觸發重新編碼的元資料剝除。本文將說明音高移調時音質損失發生在哪裡、本機 PCM16 處理如何避免這些損失,以及如何使用 Audio Pitch Changer 將任何瀏覽器可解碼的檔案,從降低一個八度到升高一個八度,完全不必上傳到任何地方。

音高移調對音質的影響
音高移調是刻意改變音訊訊號的頻率,同時保留可辨識的內容。在理想情況下,音高移調器應該是一種頻域運算,將每一個泛音以相同的音程上下移動,而不動到持續時間、共振峰特性和立體聲音像。但在實務上,每個音高移調器都是圍繞下列兩種真實方法之一來建構:相位聲碼器或時間拉伸器(可將音高與持續時間分離),或是會同時改變兩者的播放速率重新取樣。
第二種方法正是瀏覽器原生 Web Audio API 開箱即提供的功能——在 AudioBufferSourceNode 上設定 playbackRate,所產生的重新取樣會同時提高音高並縮短音訊,或是降低音高並拉長音訊。這就是 Audio Pitch Changer 為了能夠在不經過伺服器的情況下,於一輪作業內全程在本機執行所接受的取捨。這裡所說的音質,並非在討論哪種方法「比較好」;而是在探討所選的方法是否在預期的頻率變化之上,又引入了額外的劣化。
音高工具中音質損失的真正來源
一般人歸咎於「音高移調」的可聽損傷,其實大多是圍繞在音高運算之外的外層所造成的。音高運算本身在正確實作時並不會摧毀訊號資料——它只是按照一個確定性的規則重新排列取樣點。造成損失的是這些外層。最常見的三種是:
- 有損重新編碼。如果工具接收 MP3 並匯出 MP3,每次經過有損編解碼器都會丟失無法復原的資訊。如果做兩次——一次在來源端、一次在輸出端——可見的損傷就會加倍。
- 上傳與下載壓縮。部分線上工具需要將檔案傳送到遠端伺服器。視連線與服務而定,傳輸過程本身可能涉及中間代理、對二進位承載自動套用類似影像的壓縮,或是限速串流而丟棄取樣。任何一種情況,都可能讓音訊在音高處理開始之前就先劣化。
- 多次轉碼步驟。一個會解碼、編碼、再解碼、再編碼,然後才匯出的工作流程,會在每一輪疊加量化雜訊、抖動假影,以及編解碼器特有的前回音。
一個只解碼一次、執行一次重新取樣、寫入一個新檔案的本機工具,完全不會發生這些問題。例如 Audio Pitch Changer 是用瀏覽器內建的解碼器讀取檔案,在 OfflineAudioContext 內重新取樣,然後寫入全新的 RIFF/WAVE 容器。整個過程恰好一次解碼、恰好一次編碼,而編碼目標是非壓縮的 PCM16,本質上就是逐位元精確的。
本機 PCM16 處理如何避免音質損失
「PCM16 WAV」中的 PCM16 代表 16 位元脈衝編碼調變——一種非壓縮的取樣格式,其中每個音訊取樣都以帶正負號的 16 位元整數儲存。由於這種格式是非壓縮的,寫入時不需要任何心理聲學模型、不需要位元分配決策,也不需要損失性遮罩。數值進去,數值出來。
當 PCM16 編碼緊接在一次 Web Audio 重新取樣之後進行,套用到音訊上的轉換就只有:從來源編解碼器解碼、以選定的播放速率重新取樣,然後裁切並量化為 16 位元。不會再疊加任何壓縮。MDN 上 AudioBufferSourceNode.playbackRate 的說明文件確認,非 1 的播放速率會觸發內部重新取樣,而這正是 Audio Pitch Changer 所執行的運算。
必須誠實說明的是:瀏覽器的重新取樣品質是由實作決定的,非常劇烈的向上移調可能會暴露原本音訊中較不明顯的失真或編解碼器假影。但這是重新取樣步驟本身的特性,並不是在它之上又多加了一層有損處理的特性。
如何在不重新上傳的情況下改變音訊音高
Audio Pitch Changer 的整個工作流程只有三個簡短動作。由於解碼、重新取樣與編碼全部都在您目前的分頁內完成,因此不需要上傳,也不會執行第二次壓縮。
- 選擇一個瀏覽器能原生解碼的音訊檔案。常見的 MP3、WAV、M4A、AAC、Ogg、WebM 與 FLAC 輸入皆可接受,但實際支援的編解碼器仍取決於目前的瀏覽器——副檔名被辨識,並不保證每個特殊的編解碼器設定檔都能解碼。檔案大小上限為 50 MiB。
- 設定一個介於 −12 到 +12 半音之間的整數音高位移。負值會降低音高,正值會提高音高,設為 0 則保持檔案不變。請注意,結果的持續時間會與音高一起改變——+12 的位移會讓檔案大約縮短為一半長度,而 −12 的位移則會讓檔案大約拉長為兩倍長度。
- 產生完整的渲染結果。工具會計算播放速率,以解碼後的取樣率執行 OfflineAudioContext,確認回傳的總幀數正確,並顯示預期的持續時間變化。點擊下載按鈕,將新的 PCM16 WAV 儲存到您的電腦。
這就是完整的品質保留管線:一次本機解碼、一次以計算出來的播放速率進行的本機重新取樣、一次寫入 RIFF/WAVE 的本機寫入。沒有任何東西離開瀏覽器分頁,沒有任何東西經過有損編解碼器重新編碼,也沒有任何東西被悄悄截斷。
音高與持續時間的關係
由於 Audio Pitch Changer 使用播放速率重新取樣,音高與持續時間由單一公式連結。對於 n 個半音的位移,播放速率為 2^(n/12),而持續時間則按該速率的反比縮放。麥基爾大學關於 MIDI 與頻率轉換的課程教材確認,一個八度包含十二個等分半音,每個半音的比例為 2^(1/12),而一個半音又細分為 100 個 cent——因此這套數學就是西方音樂中通用的標準十二平均律。
| 位移(半音) | 播放速率 | 結果持續時間相對於原始 |
|---|---|---|
| +12 | 2.000× | ≈ 0.50×(一半) |
| +7 | ≈ 1.498× | ≈ 0.67× |
| +5 | ≈ 1.335× | ≈ 0.75× |
| +1 | ≈ 1.059× | ≈ 0.94× |
| 0 | 1.000× | 1.00×(不變) |
| −1 | ≈ 0.944× | ≈ 1.06× |
| −5 | ≈ 0.749× | ≈ 1.34× |
| −7 | ≈ 0.667× | ≈ 1.50× |
| −12 | 0.500× | ≈ 2.00×(兩倍) |
舉例來說,將公式套用到 +12 半音的位移:速率 = 2^(12/12) = 2^1 = 2.0×,而一個 60 秒的輸入會渲染為 60 ÷ 2 = 30 秒。將同一公式套用到任何其他整數位移,即可在執行渲染之前預測新的持續時間。
播放速率重新取樣不適合的情境
「在不損失音質的前提下改變音訊音高」的誠實答案,取決於您所說的「品質」是什麼意思。如果品質指的是乾淨、無損的檔案格式,而且沒有額外壓縮疊加在上層,那麼 Audio Pitch Changer 完全能夠達成。但如果您所說的品質是指在移調的同時保留原始速度、語音節奏或拍點位置,那麼任何播放速率工具都無法幫上忙——在這種方法中,音高與持續時間在物理上是耦合在一起的。
對於必須鎖定持續時間的工作——在不產生花栗鼠音的情況下加快伴奏、將電影配樂時間拉伸至對應畫面長度,或是將歌手的共振峰對齊到參考曲——您需要使用相位聲碼器,或是在專用 DAW 中採用其他時間拉伸工作流程。Audio Pitch Changer 適合用於快速的創意實驗、練習曲、音效,以及持續時間變化是可接受或無關緊要的粗剪,而不是作為透明的母帶處理流程。一開始就了解這項差異,才能讓結果聽起來確實如您所願。
如果您正在權衡各種選項,如何在本地為 DaVinci Resolve 進行音訊等化對此有詳細說明。
如果您正在權衡各種選項,在瀏覽器中本地改變音訊音高對此有詳細說明。