跳轉至

常見問答

在創作與打譜過程中,常見問題包括「小節拍數對不上」、「忘記時值倍率語法」與「調性概念混淆」。

本篇整理 TMD 常見語法錯誤、排錯方法與實用技巧。

最常見語法錯誤:忘記寫倍率 <4*> 或 <8*>

這是 TMD 新手與大型語言模型 AI 常犯的錯誤。

問題成因:什麼是「持續性倍率」?

在 TMD 中,角括號倍率 <4*>、<8*>、<16*> 是持續生效(Sticky)的狀態切換,代表「後續數字的預設時值」。

常見的錯誤案例是:使用者想寫一串八分音符,但手滑寫成:

# ❌ 錯誤示範:忘了切換倍率(預設是四分音符)
1 2 3 4 | 5 6 7 1 |  # 原本心裡想的是八分音符跑動,結果被當成 8 個四分音符!

或者在八分音符跑完之後,想寫一個四分音符,卻忘了切回 <4*>:

# ❌ 錯誤示範:跑完八分音符後,要寫四分音符卻忘了切回 <4*>
<8*> 1 2 3 4 5 6 <4*> 1 |  # 如果最後這個 1 忘了寫 <4*>,整小節就只會有 3.5 拍!

經典時值對照速查表

想表達的音符 TMD 正確寫法 佔 4/4 拍拍數
全音符(4 拍) <4*> 1 - - - 或 <1*> 1 4 拍
二分音符(2 拍) <4*> 1 - 或 <2*> 1 2 拍
四分音符(1 拍) <4*> 1 1 拍
八分音符(半拍) <8*> 1 0.5 拍
十六分音符(1/4 拍) <16*> 1 0.25 拍
附點四分音符(1.5 拍) <8*> 1 - - 或 <4*> 1. 1.5 拍
附點八分音符(0.75 拍) <16*> 1 - - 或 <8*> 1. 0.75 拍

排錯原則:「進八分寫 <8*>,回四分切 <4*>,寫完小節數一數!」

小節長度校驗失敗(Measure Length Mismatch)

為確保時值精確並順利轉換為 MIDI 與 MusicXML,TMD 嚴格檢查小節。若拍數不等於當前拍號(例如 4/4 必須剛好 4.0 拍),編譯器與 VS Code 會標記錯誤: Measure 5 has 3.5 beats (expected 4.0 beats)

常見原因一:延音線 - 與休止符 0 數量算錯

  • 錯誤:<4*> 1 - - |(四分音符 + 兩個延音 = 3 拍,但拍號是 4/4 拍,少了 1 拍)。
  • 修正:<4*> 1 - - - |(補足 4 拍)。

常見原因二:連音符(Tuplets)時值寫錯,或把和弦 [] 誤當成三連音

這是常見的混淆:

  1. 方括號 [...] 是「和弦」而不是連音:
  2. 在 TMD 中,[1 3 5] 代表的是「和弦(Chord)」,也就是同一時間點同時響起的多個音(或和弦代號如 [Cmaj7]),它只佔 1 個時間單位!
  3. 如果你想表達三連音,不能寫 [1 2 3]。

  4. 連音(Tuplets)的正確語法是 (音符...)%(時值):

  5. 語法為小括號包住音符,後方接 % 與圓括號延音線,代表「在這段時間內均分彈奏這些音」。
  6. 標準三連音寫法(在 2 拍內塞 3 個等長音):
    (1 2 3)%(--)
    
  7. 常見錯誤:
    • 漏寫時值比例:寫成 (1 2 3) 而沒有寫後面的 %(--),導致長度計算預設為 1 拍,造成整小節拍數不吻合。
    • 誤用方括號:把連音寫成 [1 2 3],結果被當成和弦解析。

排錯第一原則:隨時注意錯誤訊息(Watch Your Errors)

無論使用命令列、Web Studio 或 VS Code 編輯 TMD,留意系統錯誤訊息能大幅縮短排錯時間:

  • VS Code:下方狀態列與「問題(Problems)」面板會即時列出所有小節拍數異常,並在編輯區以紅色波浪線精準標記錯誤行號。不要累積了幾十小節才一次檢查,每寫完一個樂句就順手看一下問題面板。
  • CLI:隨時執行 tmd check song.tmd,終端機會直接告訴你:
Error: Measure 5 has 3.5 beats (expected 4.0 beats)

這代表「第 5 小節少了半拍」,你立刻就能知道要回頭檢查該小節是漏了八分音符、延音線 -,還是忘了切回 <4*>。

善用 AI 自動修正錯誤(Let AI Fix It For You)

若小節拍數未對齊,也可使用 AI 輔助修正:

  1. Web Studio 的「Ask AI to Fix」:
  2. 點擊工具列或編輯區上方的 「Ask AI to Fix」 按鈕。
  3. 系統會將當前樂譜與編譯器回報的錯誤小節整合成 Prompt,由 AI 調整延音線或時值,並在介面中提供差異(Diff)預覽確認。
  4. VS Code / Copilot Chat:
  5. 選取報錯的小節,在對話框輸入: > @tmd 第 5 小節目前回報只有 3.5 拍,請保持旋律動機,幫我補足為 4/4 拍標準 4 拍。
  6. 在終端機或一般對話式 AI 中輸入錯誤訊息:
  7. 將 CLI 輸出的錯誤訊息提供給語言模型: > 「這段 TMD 樂譜在編譯時報錯:Measure 5 has 3.5 beats (expected 4.0),請幫我修正小節中的時值倍率,確保每個小節都符合拍號長度。」

調性與基準音高混淆(key= vs ?=)

初學者常困惑:「為什麼有了 key=C,後面又看到 ?=0?」

兩者的核心區別

  • key=(聲明調性): 告訴排版引擎與音樂家「這首歌是甚麼調」(例如 key=D 代表 D 大調,樂譜開頭會有兩個升記號升 F、升 C)。
  • ?=(基準音高 / Pitch Center): 告訴合成器與播放引擎「簡譜的數字 1 對應到 MIDI 音高的哪一個半音」(以 C4 中央 C 為 0)。
    • ?=0:1 = C
    • ?=2:1 = D
    • ?=4:1 = E
    • ?=-3:1 = A

為什麼要有首調(Movable-do)設計?

TMD 採用簡譜,1 2 3 1 在任何調性下都會是 Do-Re-Mi-Do。 當你想把整首歌升一個全音演唱時:

  • 你不需要重寫任何音符!
  • 只需要把開頭的 ?=0 改成 ?=2,整首歌立刻無損移調(Transpose)。

第 10 軌鼓組(Channel 10 Drums)不出聲或音高不對?

在標準 MIDI 規範中,Channel 10(第 10 軌)是打擊樂專用軌道。

為什麼第 10 軌不能唱旋律?

第 10 軌的音高數字不代表 Do-Re-Mi,而是對應 通用 MIDI 鼓組鍵位(GM Drum Map):

  • 1、2 等音高會直接觸發特定打擊樂器(如 35/36 為大鼓 Kick、38/40 為小鼓 Snare、42 為閉合鈸 Closed Hi-Hat)。
  • 如果你在第 10 軌試圖寫鋼琴旋律,聽到的只會是一串雜亂的鼓點敲擊聲。

正確宣告方式

如果要寫鼓組,請務必將軌道指定至 Channel 10:

V:10 channel=10
<8*> 36 42 38 42 | 36 42 38 42 |  # 標準動態大鼓、Hi-Hat 與小鼓

跨小節延音線(Tie)的常見誤用

音符跨越小節線時:

  • 正確寫法:在前一小節結尾寫出音符,在後一小節開頭使用延音線 -:
<4*> 1 2 3 4 | - 3 2 1 |  /* 第一小節第 4 拍的 4 連續延伸到第二小節第 1 拍 */
  • 避免寫法:直接在小節線上方或兩端任意加底線,TMD 會把 - 視為延續上一小節最後一個發聲的音高。

6. 升降記號與高低八度符號順序

TMD 的音高修飾符如下:

  • 升降記號(Accidentals):
  • '(單引號):升記號(♯)
  • ,(逗號):降記號(♭)
  • 高低八度(Octaves):
  • ^(脫字號):升高一個八度(如高音點,可累加如 1^^)
  • _(底線):降低一個八度(如低音點,可累加如 5__)

語法順序規則

必須先寫升降記號,再寫八度記號: - 正確:1'^(升 Do 高八度)、7,_(降 Ti 低八度) - 錯誤:1^'、7_,(解析器無法識別)

7. Humming 哼唱識別辨識率低?

在 TMD Web Studio 使用 Basic Pitch 哼唱轉 TMD 時,若音符破碎或節奏混亂:

  1. 請務必佩戴耳機:避免喇叭放出的伴奏或點擊聲(Click)被麥克風重複收錄。
  2. 使用清晰的「嗒(Da)」或「嘟(Du)」發音:不要用含糊的氣音或「啊~」,發音起音(Attack)越乾脆,音符切分越精準。
  3. 音準穩定:避免大幅度的滑音(Portamento),盡量像敲鍵盤一樣穩定在目標音高上。
  4. 辨識後進行量化校正:識別完成後,可使用「量化(Quantize)」或「重新對齊小節」功能微調時間偏移。