函式庫 / SDK
Tonejs/Tone.js avatar
Tonejs/Tone.js

Tone.js:用於互動式音樂的 Web Audio 框架

專案速覽:用於在瀏覽器中製作互動式音樂的網路音訊框架。

14,720 個 Star1,063 個 ForkTypeScriptMIT

秒懂

它是什麼?
一個用於構建基於 Web Audio API 的瀏覽器音樂應用程式的框架。
適合誰用?
Tone.js 提供了一種分層的方法來處理 Web Audio,從高級的傳輸和樂器到低級的訊號控制,全部在 MIT 許可下。 對 Tonejs/Tone.js 而言,適合先由能控制環境的開發者或維運團隊試用;不適合把 README 的描述直接當成跨版本承諾。
可以商用嗎?
可以。MIT 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
有在維護。儲存庫在最近一天內有新的提交。
用什麼語言寫的?
主要是 TypeScript(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

面向瀏覽器音樂的框架

Tone.js 是一個用於在瀏覽器中建立互動式音樂的 Web Audio 框架。其架構旨在讓音樂家和音訊程式設計師都感到熟悉。在高層次上,它提供了 DAW 功能,如用於同步事件的全域傳輸,以及預建的合成器和效果。它還提供了用於建置自訂合成器、效果和複雜控制訊號的底層建置區塊。根據儲存庫元資料,該專案是用 TypeScript 編寫的。

第 1 節「面向瀏覽器音樂的框架」在 Tonejs/Tone.js 中的重點,是辨認它負責的資料、執行或管理邊界。Tonejs/Tone.js 的 README 將此專案定位為「A Web Audio framework for making interactive music in the browser.」。目前預設分支是 dev,最近一次資料時間為 2026-07-12T15:06:38Z,授權標示為 MIT。這些是倉庫提供的背景資料,不等於部署後的效能或可靠性承諾。 README 未交代的容量、故障恢復時間或所有相依版本,不能從倉庫星數推導。

第 1 節的專屬核對路徑:對 Tonejs/Tone.js 的判讀要落在它自己的入口:README 位於 https://github.com/Tonejs/Tone.js/blob/main/README.md,版本資訊可由 https://github.com/Tonejs/Tone.js/releases 對照;若要重現文中流程,應以 README 出現的命令、設定檔與 API 名稱逐項記錄輸入和輸出。本節應觀察 Tonejs/Tone.js 的輸出是否與 README 所述一致,並把失敗情況、資源消耗和版本差異分開記錄。

安裝與啟動音訊

使用 `npm install tone` 安裝目前穩定版本,或使用 `npm install tone@next` 安裝下一個版本。你可以使用 `import * as Tone from "tone"` 匯入。同時,程式碼也託管在 unpkg.com;在其他指令碼之前新增 `<script src="http://unpkg.com/tone"></script>`。瀏覽器會阻止音訊播放,直到使用者手勢觸發。在點選或 keydown 監聽器中呼叫 `Tone.start()`,並在排程音符之前等待其 Promise。README 警告說,在 AudioContext 執行之前播放音訊會導致靜音或錯誤排程。

第 2 節「安裝與啟動音訊」在 Tonejs/Tone.js 中的重點,是辨認它負責的資料、執行或管理邊界。Tonejs/Tone.js 的 README 將此專案定位為「A Web Audio framework for making interactive music in the browser.」。目前預設分支是 dev,最近一次資料時間為 2026-07-12T15:06:38Z,授權標示為 MIT。這些是倉庫提供的背景資料,不等於部署後的效能或可靠性承諾。 README 未交代的容量、故障恢復時間或所有相依版本,不能從倉庫星數推導。

第 2 節的專屬核對路徑:對 Tonejs/Tone.js 的判讀要落在它自己的入口:README 位於 https://github.com/Tonejs/Tone.js/blob/main/README.md,版本資訊可由 https://github.com/Tonejs/Tone.js/releases 對照;若要重現文中流程,應以 README 出現的命令、設定檔與 API 名稱逐項記錄輸入和輸出。本節應觀察 Tonejs/Tone.js 的輸出是否與 README 所述一致,並把失敗情況、資源消耗和版本差異分開記錄。

基礎合成器與時間值

Tone.Synth 是一個帶 ADSR 包絡的單振盪器合成器。使用 `triggerAttack` 開始音符,`triggerRelease` 停止音符。`triggerAttackRelease` 結合了兩者;它的第一個參數可以是赫茲頻率或像 `"D#2"` 這樣的音高-八度記法,第二個參數是以秒或節拍相對字串表示的持續時間,如 `"4n"` 代表四分音符,`"8t"` 代表八分音符三連音,`"1m"` 代表一個小節。第三個可選參數在 AudioContext 時間上排程音符。`Tone.now()` 傳回目前 AudioContext 時間。

第 3 節「基礎合成器與時間值」在 Tonejs/Tone.js 中的重點,是辨認它負責的資料、執行或管理邊界。Tonejs/Tone.js 的 README 將此專案定位為「A Web Audio framework for making interactive music in the browser.」。目前預設分支是 dev,最近一次資料時間為 2026-07-12T15:06:38Z,授權標示為 MIT。這些是倉庫提供的背景資料,不等於部署後的效能或可靠性承諾。 README 未交代的容量、故障恢復時間或所有相依版本,不能從倉庫星數推導。

第 3 節的專屬核對路徑:對 Tonejs/Tone.js 的判讀要落在它自己的入口:README 位於 https://github.com/Tonejs/Tone.js/blob/main/README.md,版本資訊可由 https://github.com/Tonejs/Tone.js/releases 對照;若要重現文中流程,應以 README 出現的命令、設定檔與 API 名稱逐項記錄輸入和輸出。本節應觀察 Tonejs/Tone.js 的輸出是否與 README 所述一致,並把失敗情況、資源消耗和版本差異分開記錄。

傳輸與迴圈

Tone.getTransport() 傳回主計時器,它可以啟動、停止、迴圈和動態調整,類似於 DAW 中的編排檢視。Tone.Loop 建立一個迴圈回呼,該回呼接收樣本精確的時間作為參數;使用該時間來排程事件,因為 JavaScript 回呼的計時不精確。在 README 的範例中,兩個迴圈以不同的偏移量在傳輸上啟動,並且傳輸的 BPM 可以透過 `bpm.rampTo(800, 10)` 進行漸變。

第 4 節「傳輸與迴圈」在 Tonejs/Tone.js 中的重點,是辨認它負責的資料、執行或管理邊界。Tonejs/Tone.js 的 README 將此專案定位為「A Web Audio framework for making interactive music in the browser.」。目前預設分支是 dev,最近一次資料時間為 2026-07-12T15:06:38Z,授權標示為 MIT。這些是倉庫提供的背景資料,不等於部署後的效能或可靠性承諾。 README 未交代的容量、故障恢復時間或所有相依版本,不能從倉庫星數推導。

第 4 節的專屬核對路徑:對 Tonejs/Tone.js 的判讀要落在它自己的入口:README 位於 https://github.com/Tonejs/Tone.js/blob/main/README.md,版本資訊可由 https://github.com/Tonejs/Tone.js/releases 對照;若要重現文中流程,應以 README 出現的命令、設定檔與 API 名稱逐項記錄輸入和輸出。本節應觀察 Tonejs/Tone.js 的輸出是否與 README 所述一致,並把失敗情況、資源消耗和版本差異分開記錄。

樂器、複音與取樣

該庫包含多種單音樂器,如 Tone.FMSynth、Tone.AMSynth 和 Tone.NoiseSynth。要同時播放多個音符,請將其包裝在 Tone.PolySynth 中,它會處理音符分配。對於音訊取樣,Tone.Player 載入並播放檔案,而 Tone.Sampler 將音符對應到取樣檔案並進行變調以填補間隙。Tone.loaded() 傳回一個 Promise,當所有音訊檔案都載入完畢時解析,這是在開始播放前等待的便捷方式。

第 5 節「樂器、複音與取樣」在 Tonejs/Tone.js 中的重點,是辨認它負責的資料、執行或管理邊界。Tonejs/Tone.js 的 README 將此專案定位為「A Web Audio framework for making interactive music in the browser.」。目前預設分支是 dev,最近一次資料時間為 2026-07-12T15:06:38Z,授權標示為 MIT。這些是倉庫提供的背景資料,不等於部署後的效能或可靠性承諾。 README 未交代的容量、故障恢復時間或所有相依版本,不能從倉庫星數推導。

第 5 節的專屬核對路徑:對 Tonejs/Tone.js 的判讀要落在它自己的入口:README 位於 https://github.com/Tonejs/Tone.js/blob/main/README.md,版本資訊可由 https://github.com/Tonejs/Tone.js/releases 對照;若要重現文中流程,應以 README 出現的命令、設定檔與 API 名稱逐項記錄輸入和輸出。本節應觀察 Tonejs/Tone.js 的輸出是否與 README 所述一致,並把失敗情況、資源消耗和版本差異分開記錄。

效果與控制訊號

合成器輸出可以在到達目的地之前透過效果進行路由。README 展示了一個 Player 連線到 Tone.Distortion,另一個範例將一個 Player 同時連線到 Filter 和 FeedbackDelay。多個節點可以連線到同一個輸入,Tone.Gain 是用於複雜路由的實用工具。像振盪器頻率這樣的參數是音訊速率的訊號;你可以設定值並呼叫 `rampTo` 來建立平滑的自動化曲線。

第 6 節「效果與控制訊號」在 Tonejs/Tone.js 中的重點,是辨認它負責的資料、執行或管理邊界。Tonejs/Tone.js 的 README 將此專案定位為「A Web Audio framework for making interactive music in the browser.」。目前預設分支是 dev,最近一次資料時間為 2026-07-12T15:06:38Z,授權標示為 MIT。這些是倉庫提供的背景資料,不等於部署後的效能或可靠性承諾。 README 未交代的容量、故障恢復時間或所有相依版本,不能從倉庫星數推導。

第 6 節的專屬核對路徑:對 Tonejs/Tone.js 的判讀要落在它自己的入口:README 位於 https://github.com/Tonejs/Tone.js/blob/main/README.md,版本資訊可由 https://github.com/Tonejs/Tone.js/releases 對照;若要重現文中流程,應以 README 出現的命令、設定檔與 API 名稱逐項記錄輸入和輸出。本節應觀察 Tonejs/Tone.js 的輸出是否與 README 所述一致,並把失敗情況、資源消耗和版本差異分開記錄。

AudioContext、MIDI、效能、測試與授權

Tone.js 在載入時建立一個 AudioContext,並使用 standardized-audio-context 對其進行 shim 以提升瀏覽器相容性;你可以透過 Tone.getContext 存取它,或使用 Tone.setContext 設定自己的。MIDI 檔案必須首先使用單獨的 Midi 工具轉換為 JSON 格式。README 指出,Tone.js 大量使用原生 Web Audio 節點進行訊號處理,這有助於它在桌面和行動端良好執行。該專案使用 mocha 和 chai 執行測試套件,覆蓋率接近 100%;dev 分支上通過的建置會發布為 `tone@next`。原始碼根據 MIT 許可證發布,該許可授予使用、複製、修改、合併、發布、分發、再授權和銷售副本的權利,但軟體按「原樣」提供,不提供任何保證。

第 7 節「AudioContext、MIDI、效能、測試與授權」在 Tonejs/Tone.js 中的重點,是辨認它負責的資料、執行或管理邊界。Tonejs/Tone.js 的 README 將此專案定位為「A Web Audio framework for making interactive music in the browser.」。目前預設分支是 dev,最近一次資料時間為 2026-07-12T15:06:38Z,授權標示為 MIT。這些是倉庫提供的背景資料,不等於部署後的效能或可靠性承諾。 README 未交代的容量、故障恢復時間或所有相依版本,不能從倉庫星數推導。

第 7 節的專屬核對路徑:對 Tonejs/Tone.js 的判讀要落在它自己的入口:README 位於 https://github.com/Tonejs/Tone.js/blob/main/README.md,版本資訊可由 https://github.com/Tonejs/Tone.js/releases 對照;若要重現文中流程,應以 README 出現的命令、設定檔與 API 名稱逐項記錄輸入和輸出。本節應觀察 Tonejs/Tone.js 的輸出是否與 README 所述一致,並把失敗情況、資源消耗和版本差異分開記錄。

編輯結論

Tone.js 提供了一種分層的方法來處理 Web Audio,從高級的傳輸和樂器到低級的訊號控制,全部在 MIT 許可下。 對 Tonejs/Tone.js 而言,適合先由能控制環境的開發者或維運團隊試用;不適合把 README 的描述直接當成跨版本承諾。採用前應先依 README 的安裝入口執行最小流程,核對實際版本、設定檔、輸出與錯誤訊息,再決定是否進入正式工作負載。MIT 對再發布、修改與託管方式的限制也要由負責部署的人逐條確認。

官方來源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社群筆記

社群筆記