音訊音高轉換器的準確度由十二平均律公式 rate = 2^(semitones/12) 決定,此公式產生 +12 半音移位於恰好 2.0× 播放、0 半音移位於 1.0×,以及 -12 半音移位於 0.5×,每個整數步都會落在數學上精確的音樂音程上,而不是近似值。因為此工具使用播放速率重取樣,而不是時間伸縮演算法,音高與時長會以精確的反比一起變動:每多一個半音,時長就會依 2^(-1/12) 的係數縮短,因此升高一個八度會產生大約一半的原始長度,降低一個八度則產生大約兩倍的原始長度。在此脈絡下,準確度因此同時代表三件事:音高比率必須遵循所選半音移位的十二平均律公式,時長必須可預測地遵循該比率,而且算繪出的 PCM16 WAV 必須包含完整的重取樣取樣框數,沒有截斷或靜音填充。這些性質每一項都是確定性的,且可從輸入驗證,這正是精確的瀏覽器音高移位器與含糊的「速度與音高」旋鈕的差別。

為什麼音高準確度取決於重取樣,而不是魔法
使用播放速率重取樣的音高轉換器,是藉由改變讀出已解碼音訊緩衝區的速度來移位音高。MDN 記載 playbackRate 作為原始取樣率的比例,低於 1 的值會讓音訊變慢,高於 1 的值會讓音訊變快,而且非單位速率會迫使瀏覽器即時重取樣音訊。MDN AudioBufferSourceNode playbackRate 參考 以實作用語描述此行為,而 W3C Web Audio 規格在 AudioBufferSourceNode 播放演算法中定義對應的音分關係,其中 detune 貢獻 2^(detune/1200) 的係數。純粹的重取樣器沒有獨立的音高旋鈕,也沒有獨立的拍速旋鈕;只有單一播放速率,音高、時長與頻譜能量都會因此一起改變。
這是最重要的一條準確度事實:當你請求 +7 半音時,速率在數學上固定為 2^(7/12) ≈ 1.4983,而時長會大約是原長度的 1 / 1.4983 ≈ 0.6674。沒有任何模式能讓時長保持不變。若專案需要在固定長度下改變音高,誠實的答案是這類工具做不到;需要相位聲碼器或其他時間伸縮工作流程。
每次移位背後的十二平均律數學
McGill University 課程教材 獨立指出一個八度有十二個相等半音,每個比率為 2^(1/12),而且一個半音含 100 音分。工具暴露的每個半音值都以同一套十二平均律為基礎。對 n 半音的整數移位,播放速率恰好是 2^(n/12):
| 半音移位 | 播放速率 (2^(n/12)) | 大約時長比率 | 音樂音程 |
|---|---|---|---|
| -12 | 0.5000 | 原長度的 2.000× | 低一個八度 |
| -7 | 0.6674 | 原長度的 1.498× | 低純五度 |
| -5 | 0.7492 | 原長度的 1.335× | 低純四度 |
| -1 | 0.9439 | 原長度的 1.059× | 低一個半音 |
| 0 | 1.0000 | 原長度的 1.000× | 原始 |
| +1 | 1.0595 | 原長度的 0.944× | 高一個半音 |
| +5 | 1.3348 | 原長度的 0.749× | 高純四度 |
| +7 | 1.4983 | 原長度的 0.667× | 高純五度 |
| +12 | 2.0000 | 原長度的 0.500× | 高一個八度 |
因為這些比率來自固定的數學函式,任何以重取樣為基礎的音高轉換器,在輸入邊界上的音高準確度本質上是精確的;每個整數半音都會落在其十二平均律比率上。實作之間的差異在於用來以新速率重建音訊的重取樣核心品質,感知差異就出現在那裡。
如何在本機執行音高移位
- 開啟 音訊音高轉換器 於你的瀏覽器分頁,並選擇一個瀏覽器能直接解碼的音訊檔,維持在 50 MiB 或以內。MP3、WAV、M4A、AAC、Ogg、WebM 與 FLAC 依副檔名接受,但實際解碼仍取決於目前瀏覽器支援的編解碼器。
- 把音高移位設為 -12 到 +12 半音之間的任何整數。記住 +12 會把素材恰好升高一個八度,-12 會恰好降低一個八度,而 0 會以原始時長回到原始音高。
- 建立算繪。瀏覽器解碼檔案、把播放速率算成 2^(semitones/12)、以解碼後的取樣率配置輸出緩衝區,並透過 OfflineAudioContext 算繪完整的重取樣音訊。
- 檢視算繪後顯示的所述時長變化。所需輸出取樣框數在配置前就計算為輸入取樣框數除以播放速率後無條件進位,因此你看到的時長遵循十二平均律比率,不過輸入取樣框數除以播放速率後無條件進位最多可能多出一個額外取樣框。
- 下載結果。可下載的檔案是新編碼的未壓縮交錯小端序 PCM16 RIFF/WAVE 檔;原始壓縮、標籤、封面、章節與 cue point 都不會保留。
例如,請求 +7 半音會把速率設為 2^(7/12) ≈ 1.4983,並產生大約三分之二的原始時長。那一次替換就是整個移位:先是速率,再是時長,第三是輸出緩衝區。
輸入、輸出與硬性限制
準確度的故事若沒有限制就不完整,因為其中好幾項決定此工具究竟能否產出完整檔案。一份編碼輸入最多可以是 50 MiB。解碼後的音訊上限為五分鐘、八聲道,以及介於 8,000 與 192,000 Hz 的取樣率。解碼上限為 30,000,000聲道取樣。音高移位後的輸出獨立限制為 30,000,000聲道取樣,而且因為降低音高會增加所需輸出取樣框,通過解碼限制的輸入仍可能未通過輸出限制。在那種情況下,訊息會說明所請求的移位超出預算,而且沒有任何東西被截斷。
| 限制 | 值 | 它控制什麼 |
|---|---|---|
| 編碼輸入大小 | 50 MiB | 頁面會讀取的最大檔案 |
| 解碼長度 | 5 分鐘 | Web Audio 解碼後的長度上限 |
| 解碼聲道 | 8 | 最大聲道數 |
| 取樣率 | 8,000–192,000 Hz | 接受的解碼速率 |
| 輸入聲道取樣預算 | 30,000,000 | 來源上聲道 × 取樣框的合計上限 |
| 輸出聲道取樣預算 | 30,000,000 | 重取樣 WAV 上聲道 × 取樣框的合計上限 |
空檔、不支援的類型、無效的解碼維度,以及失敗的解碼,都會在任何昂貴的輸出工作開始前就被預先拒絕。每一次輸入或半音變更都會在另一次算繪前使先前結果失效。進行中的解碼與離線算繪工作帶有工作識別,因此較舊的完成不能覆寫較新的狀態;解碼上下文會被關閉,工作失效時離線來源會被停止或中斷連線,下載 Object URL 在被取代或頁面卸載時會被撤銷。
輸出會保留與不會保留的內容
以重取樣為基礎的音高轉換器在邊界上精確,但在三個下游位置有損。第一,瀏覽器重取樣品質是實作定義的,因此兩種不同的瀏覽器對同一移位可能產出略有不同的高頻內容。第二,強烈向上移位會揭露原檔中較不明顯的混疊或編解碼器瑕疵。第三,匯出會重新編碼為 16-bit PCM,把每個取樣量化到大約 96 dB 的動態範圍;任何高於合法 ±1 區間的已解碼浮點取樣,都會在轉換前被削波。原始編解碼器、壓縮品質、位元率、標籤、封面、章節、cue point 或迴圈中繼資料,沒有任何一項能在匯出後存活。
處理與取樣資料都留在目前瀏覽器分頁。沒有來源音訊或算繪音訊會被上傳。頁面刻意不建立以 blob 為後盾的音訊預覽,因為網站媒體政策不允許那條路徑;典型工作流程是下載 WAV,並在可信的本機播放器播放,以判斷結果。
瀏覽器音高準確度何時足夠、何時不夠
對創意實驗、練習軌、音效與粗剪,瀏覽器播放速率重取樣的準確度綽綽有餘:音高比率在數學上精確,而且 WAV 含有完整的重取樣波形。對正式母帶處理、透明保留語音節奏,或鎖定節拍的工作,情況就不同了。相位聲碼器、專用時間伸縮工具,或具備適當伸縮的 DAW 才是合適選擇,因為拍速、節拍位置與共振峰行為不會被 2^(n/12) 播放速率移位保留。知道你的任務落在哪一類,就是第一次就得到可用結果,與改用不同工具重做之間的差別。
若要產出快速參考檔,或為草圖升高一個八度,音訊音高轉換器會從任何瀏覽器可解碼的輸入,交付確定性、本機算繪的 PCM16 WAV。若要在移位音高時鎖定拍速,請把檔案送到真正做時間伸縮而不是重取樣的工具。
相關閱讀:在本機變更音訊速度與音高並匯出 WAV。