不會的,當您使用 Audio Waveform Generator(音訊波形產生器)時,音訊檔案和波形並不會上傳到任何伺服器。從使用瀏覽器的 Web Audio API 解碼您選擇的檔案,到建立最小/最大峰值包絡,再到寫入 SVG 字串,每一步都在當前的分頁內完成,不會有任何音訊位元組或產生的圖片離開您的裝置。這個工具會在本機讀取您選擇的檔案,將解碼後的取樣幀分割成有界限的資料桶,為每個資料桶在所有聲道上找到有限的最小和最大取樣,將超出範圍的值限制在 -1 到 1 之間,然後輸出一個以文字為基礎的 SVG,由頁面保留在記憶體中,直到您點擊下載。沒有背景上傳,沒有臨時的雲端副本,也沒有伺服器端算繪。唯一的網路活動就是最初載入頁面本身;一旦頁面開啟且您選擇了檔案,任何關於音訊或產生圖片的資訊都不會向外傳輸。由於 SVG 下載使用的是由經驗證的數字和您選定的十六進位顏色所建立的本機 blob,因此輸出中永遠不會包含來源檔名或內嵌的來源中繼資料;而且如果您更換檔案、更改選項、重新產生或關閉頁面,先前的物件 URL 就會被撤銷,因此舊的圖片不會被用來代表新的輸入。

「上傳」對線上波形工具而言代表什麼
當人們詢問線上音訊工具是否會上傳他們的檔案時,通常想了解三件事:音訊位元組是否會離開他們的裝置、產生的圖片是否會離開他們的裝置,以及這兩者是否會被儲存在他人控制的遠端伺服器上。一個典型的上傳流程涉及您的瀏覽器透過 HTTPS 將音訊傳送到伺服器,伺服器對其進行解碼和處理,伺服器產生圖片,然後伺服器將該圖片傳回以便您下載。該模型引入了一個第三方可以讀取、儲存、記錄或保留您錄音的窗口,這對尚未發布的播客、語音備忘錄、聽寫、醫療或法律錄音,以及任何具有個人或商業敏感性的音訊來說都是一個問題。
相反的模型是本機瀏覽器處理。在該模型中,在您的分頁中執行的 JavaScript 會讀取您選擇的檔案,使用內建的瀏覽器 API(例如 Web Audio API)對其進行解碼,在記憶體中執行所有計算,並產生一個永遠不會穿越網路即可下載的成品。Audio Waveform Generator 在每一步都遵循該本機模型,您可以透過在使用該工具時開啟瀏覽器的網路面板來確認:即使您點擊產生或下載,在初始頁面載入之後也不應該出現任何對外的請求。
Audio Waveform Generator 如何將一切保留在本機
這個實作刻意做得範圍很窄,以便易於驗證僅限本機的合約。當您選擇一個檔案時,頁面會使用標準的 File API 讀取它,並將產生的 ArrayBuffer 交給瀏覽器的 Web Audio API AudioBuffer 介面,該介面會在當前分頁內將壓縮的音訊解碼為浮點取樣幀。該步驟不需要伺服器來回溝通;解碼是一個瀏覽器原生操作,其限制取決於作業系統和瀏覽器版本的編解碼器支援,而非遠端服務。
檔案解碼後,該工具會將所有解碼後的幀分割為數量等於您所要求的 SVG 寬度、1,000 以及解碼後總幀數之中最小值的資料桶。對於每個資料桶,它會掃描每個可接受的聲道,找到最小和最大有限取樣,謹慎地將 -1 到 1 範圍之外的值限制住,並記錄該對值。然後將這些數字映射到 SVG 座標:垂直中心位於所要求高度的一半處,全幅的正或負取樣從該中心向上或向下延伸到高度的 45 個百分之一,每個峰值線則在其均勻分布的水平位置上,繪製於該資料桶最大和最小 Y 值之間。整個管線都在頁面的 JavaScript 記憶體中執行,下載的 blob 是由頁面上 SVG 檢視器中顯示的確切文字字串所建立。
有兩個設計選擇使這點可被驗證。首先,每當您選擇新檔案、更改選項、重新產生或離開頁面時,先前所有結果的物件 URL 都會被撤銷,因此舊的圖片無法被用來代表新的輸入。其次,展開式檢視器中顯示的 SVG 文字與下載的文字完全相同,沒有伺服器算繪的替換、沒有內嵌的檔名或 ID3 中繼資料,除了您選擇的經驗證數字和十六進位顏色之外,也沒有任何來源出處資訊。
在不將音訊傳送到任何地方的情況下產生波形
- 在瀏覽器分頁中開啟 Audio Waveform Generator,並確認頁面是透過 HTTPS 載入的。
- 在所述的壓縮和解碼限制範圍內,選擇一個瀏覽器可解碼的音訊檔案(MP3、WAV、M4A、AAC、Ogg、WebM 或 FLAC,壓縮後最大 50 MiB,解碼後音訊最長 5 分鐘,1 到 8 個聲道,取樣率 8,000 到 192,000 Hz,以及 3,000 萬個聲道取樣)。
- 將 SVG 寬度設定為 320 到 1,600 像素之間,高度設定為 120 到 600 像素之間,並從瀏覽器的六位數十六進位顏色控制項中選擇背景顏色和波形顏色。
- 點擊 generate(產生)以在本機計算有界限的最小/最大峰值資料行,並從記憶體中的 SVG 字串算繪預覽。
- 讀取所回報的幀數和峰值資料行數,以確認資料桶運算符合輸入檔案。
- 展開 SVG 檢視器,確認標記僅包含一個背景矩形和一組具有固定像素尺寸及相符 viewBox 的峰值線,然後下載完全可縮放的 SVG。
保護本機處理的限制
將音訊保留在本機的同樣檢查也會防止頁面嘗試解碼瀏覽器在合理預算內無法處理的檔案。壓縮檔案大小最多 50 MiB。解碼後音訊的長度不得超過 5 分鐘,聲道數為 1 到 8 個,使用 8,000 到 192,000 Hz 之間的取樣率,且不得超過 3,000 萬個聲道取樣。這些檢查之所以重要,是因為一個小的壓縮檔案可能會展開成大得多的浮點聲道陣列,因此取樣上限的存在與壓縮位元組上限無關。超出限制的音訊會整體被拒絕;波形不會只從開頭部分靜默產生。
| 本機輸入限制 | 接受的範圍 | 本機檢查為何重要 |
|---|---|---|
| 壓縮檔案大小 | 最多 50 MiB | 防止小檔案展開成瀏覽器無法配置的緩衝區。 |
| 解碼後的長度 | 最多 5 分鐘 | 將全取樣峰值掃描保持在可預期的時間和記憶體預算內。 |
| 聲道數 | 1 到 8 個 | 定義產生單一合併峰值概觀的跨聲道掃描。 |
| 取樣率 | 8,000 到 192,000 Hz | 在解碼開始前排除奇特或格式錯誤的取樣率。 |
| 聲道取樣 | 最多 30,000,000 個 | 限制所有聲道的浮點緩衝區總大小。 |
| SVG 寬度 | 320 到 1,600 px | 在 1,000 行的上限之餘,限制最大資料行數。 |
| SVG 高度 | 120 到 600 px | 設定用於中心和 45 個百分之一峰值映射的畫布大小。 |
如果您的檔案被拒絕,您可以先使用音訊編輯器縮短或降低取樣率,或使用 Audio Cutter 修剪較短的片段,然後再回到此波形工具。副檔名顯示為 MP3 或 FLAC,但其內容不受支援、損毀、空的或偽裝的檔案也會被拒絕,因為該工具依賴瀏覽器實際解碼的內容,而不是檔案標籤。
SVG 輸出包含什麼(以及不包含什麼)
因為輸出是基於文字的 SVG,所以它也很容易檢查。該檔案包含一個背景矩形、一個群組元素,以及一組數量等於資料行數的垂直線元素。座標是衍生自經驗證資料桶運算的整數像素值,因此在每個尺寸下都保留了百分之五的上下邊距。viewBox 與所要求的像素尺寸相符,這表示當以其他顯示尺寸放置時,圖片仍保持清晰。輸出中沒有內嵌的點陣圖、沒有音訊資料、沒有 script 標籤、沒有從您的檔名或來源檔案複製的中繼資料區塊,也沒有遠端 URL 參考。
座標映射是確定性的。具體來說,如果您要求寬度 800 和高度 400,則垂直中心位於 200,全幅正取樣延伸到 400 的 45 個百分之一(中心上方 180 像素,落在 y = 20 處),全幅負取樣則從中心向下延伸 180 像素,落在 y = 380 處。百分之五的上下邊距換算為 400 的 5 個百分之一(20 像素),因此峰值線在全幅下永遠不會越過畫布邊緣。
正是這種乾淨的結構使同一個 SVG 可以直接在任何支援 SVG 的編輯器中開啟、放入排版應用程式中,或包裝在 HTML 頁面中而無需額外轉換。這個圖片不是頻譜圖,也不是校準過的響度計量器:時間從左到右進行,但垂直線代表的是取樣振幅範圍,而非頻率;兩段具有相似峰值的錄音可能聽起來非常不同,因為感知響度取決於持續時間、頻率平衡、動態範圍和播放條件。
本機處理仍然無法執行的情況
少數情況看起來像是「沒有上傳」,但仍然不會產生波形,提前了解它們會有幫助。如果瀏覽器和作業系統無法解碼檔案的實際編解碼器,Web Audio 解碼步驟將會拋出錯誤,頁面會顯示錯誤訊息,而不是靜默地替換成佔位符號。對於損毀的、空的、有密碼保護的或單純不相符的檔案也是如此:標籤寫著 MP3,但位元組並不以 MP3 解碼,該工具會拒絕而不是猜測。這些情況都不涉及伺服器。它們是防止該工具產生誤導性圖片的本機檢查。
您可以直接確認僅限本機的行為:開啟瀏覽器的網路面板,產生一個波形,並注意是否有對外的請求。在您操作期間,您應該只會看到初始頁面資源,而不會有其他東西,因為 SVG 下載是由本機 blob 建立,並在輸入變更時被撤銷。
相關閱讀:立體聲和多聲道檔案如何在波形中顯示。
相關閱讀:產生音訊波形時避免常見錯誤。