Community寫作與編輯github.com

硬體協定捕捉

用於記錄音樂硬體設備如何透過MIDI(CC、NRPN、SysEx)或USB進行控制,以便建立控制器、編輯器或音色庫管理工具:尋找官方文件、從使用者自己的設備捕捉流量、解碼音色傾印,並撰寫經過驗證的MIDI實作文件。

硬體協定捕捉 是什麼?

這是一個社群技能,專為逆向工程音樂硬體設備的MIDI或USB控制協定而設計。它能引導使用者系統性地捕捉與驗證設備的通訊訊息,從尋找製造商官方文件開始,再到使用跨平台工具(如amidi、MIDI-OX、Snoize MIDI Monitor)記錄實際的MIDI流量,以及使用Wireshark分析非標準的USB控制傳輸。此技能強調以真實設備為唯一真理來源,要求對每個控制項目進行方向測試、解析SysEx封包中的位元組偏移與校驗和,並最終產出一份狀態明確(經硬體驗證、僅來自官方文件、未驗證)的MIDI實作文件,同時提供安全檢查清單以避免對設備造成損害。此方法避免了逆向工程的法律風險,完全依賴於公開文件與設備行為觀察。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/SpeakingColors/claude-skills/tree/HEAD/skills/hardware-protocol-capture

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

硬體協定捕捉 是做什麼的?

非官方社群技能。不構成法律建議。僅捕捉使用者所擁有的設備。

0. 規則

  • 設備本身是真理的來源。文件可能錯誤或過時;從真實設備上以使用者目前的韌體所捕捉的流量才是證據。
  • 來源優先順序:1) 製造商的官方文件,2) 從使用者自己的硬體捕捉的資料,3) 第三方文件(在硬體驗證前標記為未驗證)。
  • 最終文件中的每一項都附帶一個狀態:經過硬體驗證、僅來自官方文件、或未驗證。
  • 在發送任何未知訊息之前,請備份設備的音色和設定。在完全了解韌體、引導程式、快閃寫入或恢復出廠設定訊息之前,切勿發送它們。
  • 對非程式設計師使用者一次只給一個步驟。先給簡短回答。

1. 尋找官方文件

  • 在製造商的支援頁面上尋找產品的「MIDI 實作」或「MIDI 資料格式」文件,以及使用手冊中的 MIDI 實作圖表。範例:KORG 發布了 minilogue xd MIDI 實作文件,作為一個獨立的文字檔(下載前需接受個人、非商業用途的授權條款)。連結到此類文件;除非其授權條款允許,否則不要將其複製到公開存儲庫中。
  • 核對文件的修訂版本和日期與設備的韌體版本。韌體更新可能會更改格式。範例:某個合成器的第三方函式庫指出,來自較新韌體的一些預設檔案使用 448 位元組的程式 blob,而不是規格描述的 1024 位元組格式(參見:oxur/minilogue-xd README)。始終測試來自使用者實際韌體的傾印。
  • 社群清單(例如 midi.guide,採用 CC BY-SA 4.0 授權)是很好的起點。保留其授權條款和出處,並驗證條目。

2. 捕捉 MIDI(符合規範的 USB MIDI 和 DIN MIDI)

各系統的工具(確認已安裝或可安裝):

  • Linux:amidi 和 aseqdump(ALSA utils)用於原始埠和序列事件;receivemidi 和 sendmidi 是跨平台的命令列工具。
  • Windows:MIDI-OX 或類似的監控器。
  • macOS:Snoize MIDI Monitor 或類似的工具。

方法:

  1. 記錄基準線:連接設備,啟動監控器,不要觸碰任何東西。
  2. 一次變更一個控制項。記錄該訊息,然後將控制項移動到其最小值、中間值和最大值,並分別記錄。
  3. 注意方向:設備到主機(旋鈕被轉動)和主機到設備(訊息發送到設備)。兩者都要測試。
  4. 在設備的不同模式下進行測試(全域與聲部、疊加層、音序器、動態控制),因為相同的控制項可能發送不同的訊息。
  5. 建立一個表格:控制項、訊息類型、CC 或 NRPN 編號或 SysEx 位元組、最小值、最大值、解析度(7 位元或 14 位元)、方向、通道處理、狀態。

請求和傾印 SysEx:

  • 使用文件中記錄的傾印請求,將傾印內容接收至一個檔案,然後在設備上精確變更一個參數,再次傾印,並對比兩個檔案。被變更的位元組顯示了該參數的位置。
  • 檢查 SysEx 封包結構:以 F0 開頭,製造商 ID,設備或型號 ID,以 F7 結尾。記下製造商 ID 位元組。
  • 許多設備將 8 位元資料打包成 7 位元的 SysEx 位元組。在官方文件中找到打包規則(例如,KORG 的 7 位元轉 8 位元編碼器在其規格中列出),並在進行差異比對前先解碼。
  • 透過變更一個參數並重新計算來尋找並驗證任何校驗和。不要猜測;針對來自設備的傾印進行測試。

3. 捕捉 USB(非符合規範的設備、供應商應用程式)

當設備使用供應商驅動程式或自訂 USB 控制訊息(例如某些音訊介面的混音器)且沒有 MIDI 埠攜帶資料時,需要此步驟。

  • Wireshark 記錄 USB URB,這是主機堆疊所看到的傳輸,而非個別的 USB 資料包;原始資料包需要硬體嗅探器(參見:Wireshark wiki,USB 捕捉設定)。
  • Linux:如果沒有 /dev/usbmon* 設備,請執行 sudo modprobe usbmon;在匯流排 N 上捕捉 usbmonN,或在所有匯流排上捕捉 usbmon0;使用者必須能夠讀取 usbmon 設備(透過群組、udev 規則或 ACL)(參見)。
  • Windows:使用 USBPcap(參見)。過去曾發生阻擋滑鼠或鍵盤輸入的問題;安裝前請先查看 wiki。
  • macOS:在 sudo ifconfig XHC20 up 後,透過介面 XHC20 進行捕捉;wiki 指出在 Catalina 及更新版本上似乎必須停用系統完整性保護(參見)。如果可能,請優先使用其他系統。
  • 捕捉供應商自己的應用程式與使用者設備的通訊,例如,在虛擬機器中運行一個 Windows 客戶機,將設備傳遞給客戶機,同時讓 Linux 主機在對應的匯流排上進行捕捉(參見:Wireshark wiki 上描述的方法)。
  • 遵循同樣的一次變更一項的法則:在供應商應用程式中執行一個動作,捕捉,並在日誌中標記它。
  • 將控制傳輸(請求類型、請求、數值、索引、資料)解碼成一個表格。重複每個動作以確認位元組是穩定的。

4. 允許與不允許的事項

  • 觀察程式發送到使用者自己設備的訊息,以及閱讀官方文件,是學習協定的正常方式。
  • 請勿反編譯或反組譯他人的軟體,也不要複製其程式碼、圖形、資料表格或預設檔案。某些法律允許有限的逆向工程以實現互通性,但授權合約可能禁止,且各國法規不盡相同。線路層級捕捉可以在沒有此問題的情況下提供相同的事實。
  • 請勿發布供應商文件、原廠音色、韌體或標誌。請連結到它們。
  • 請勿使用捕捉來繞過複製保護或授權。

5. 撰寫 MIDI 實作文件

在專案儲存庫中使用 docs/MIDI-IMPLEMENTATION.md:

  • 檔頭:設備名稱、測試的韌體版本、日期、來源(官方文件標題、修訂版本和連結;捕捉設定)。
  • 全域慣例:通道、位元組順序、7 位元打包方式、校驗和方法。
  • 控制項表格:名稱、訊息、範圍、解析度、方向、備註、狀態(經硬體驗證、僅官方文件、未驗證)。
  • SysEx 章節:請求格式、包含位元組偏移量的傾印格式、如何解碼、校驗和、來自使用者自己設備的範例(簡短十六進位)。
  • 已知的怪癖和衝突(例如兩份文件對同一個 CC 編號有不同意見),以及每項問題的解決方式。
  • 一份測試清單,讓使用者可以在新韌體上重複執行。

6. 控制器發送任何訊息前的安全檢查

  • 僅發送表格中記錄為已驗證或已記錄在文件中的訊息。
  • 調整節流並對輸出進行分塊;某些設備在收到大量訊息時會丟棄封包。
  • 切勿在啟動時自動發送;先讀取,僅在使用者操作時才發送。
  • 在任何寫入功能旁邊保留一個「從備份還原」按鈕。

來源

Individual skills in this repo

This repo contains 2 individual skills — each has its own dedicated page.

相關技能