常見問答¶
在創作與打譜過程中,常見問題包括「小節拍數對不上」、「忘記時值倍率語法」與「調性概念混淆」。
本篇整理 TMD 常見語法錯誤、排錯方法與實用技巧。
最常見語法錯誤:忘記寫倍率 <4*> 或 <8*>¶
這是 TMD 新手與大型語言模型 AI 常犯的錯誤。
問題成因:什麼是「持續性倍率」?¶
在 TMD 中,角括號倍率 <4*>、<8*>、<16*> 是持續生效(Sticky)的狀態切換,代表「後續數字的預設時值」。
常見的錯誤案例是:使用者想寫一串八分音符,但手滑寫成:
或者在八分音符跑完之後,想寫一個四分音符,卻忘了切回 <4*>:
經典時值對照速查表¶
| 想表達的音符 | 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)時值寫錯,或把和弦 [] 誤當成三連音¶
這是常見的混淆:
- 方括號
[...]是「和弦」而不是連音: - 在 TMD 中,
[1 3 5]代表的是「和弦(Chord)」,也就是同一時間點同時響起的多個音(或和弦代號如[Cmaj7]),它只佔 1 個時間單位! -
如果你想表達三連音,不能寫
[1 2 3]。 -
連音(Tuplets)的正確語法是
(音符...)%(時值): - 語法為小括號包住音符,後方接
%與圓括號延音線,代表「在這段時間內均分彈奏這些音」。 - 標準三連音寫法(在 2 拍內塞 3 個等長音):
- 常見錯誤:
- 漏寫時值比例:寫成
(1 2 3)而沒有寫後面的%(--),導致長度計算預設為 1 拍,造成整小節拍數不吻合。 - 誤用方括號:把連音寫成
[1 2 3],結果被當成和弦解析。
- 漏寫時值比例:寫成
排錯第一原則:隨時注意錯誤訊息(Watch Your Errors)¶
無論使用命令列、Web Studio 或 VS Code 編輯 TMD,留意系統錯誤訊息能大幅縮短排錯時間:
- VS Code:下方狀態列與「問題(Problems)」面板會即時列出所有小節拍數異常,並在編輯區以紅色波浪線精準標記錯誤行號。不要累積了幾十小節才一次檢查,每寫完一個樂句就順手看一下問題面板。
- CLI:隨時執行
tmd check song.tmd,終端機會直接告訴你:
這代表「第 5 小節少了半拍」,你立刻就能知道要回頭檢查該小節是漏了八分音符、延音線 -,還是忘了切回 <4*>。
善用 AI 自動修正錯誤(Let AI Fix It For You)¶
若小節拍數未對齊,也可使用 AI 輔助修正:
- Web Studio 的「Ask AI to Fix」:
- 點擊工具列或編輯區上方的 「Ask AI to Fix」 按鈕。
- 系統會將當前樂譜與編譯器回報的錯誤小節整合成 Prompt,由 AI 調整延音線或時值,並在介面中提供差異(Diff)預覽確認。
- VS Code / Copilot Chat:
- 選取報錯的小節,在對話框輸入:
>
@tmd 第 5 小節目前回報只有 3.5 拍,請保持旋律動機,幫我補足為 4/4 拍標準 4 拍。 - 在終端機或一般對話式 AI 中輸入錯誤訊息:
- 將 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:
跨小節延音線(Tie)的常見誤用¶
音符跨越小節線時:
- 正確寫法:在前一小節結尾寫出音符,在後一小節開頭使用延音線
-:
- 避免寫法:直接在小節線上方或兩端任意加底線,TMD 會把
-視為延續上一小節最後一個發聲的音高。
6. 升降記號與高低八度符號順序¶
TMD 的音高修飾符如下:
- 升降記號(Accidentals):
'(單引號):升記號(♯),(逗號):降記號(♭)- 高低八度(Octaves):
^(脫字號):升高一個八度(如高音點,可累加如1^^)_(底線):降低一個八度(如低音點,可累加如5__)
語法順序規則¶
必須先寫升降記號,再寫八度記號:
- 正確:1'^(升 Do 高八度)、7,_(降 Ti 低八度)
- 錯誤:1^'、7_,(解析器無法識別)
7. Humming 哼唱識別辨識率低?¶
在 TMD Web Studio 使用 Basic Pitch 哼唱轉 TMD 時,若音符破碎或節奏混亂:
- 請務必佩戴耳機:避免喇叭放出的伴奏或點擊聲(Click)被麥克風重複收錄。
- 使用清晰的「嗒(Da)」或「嘟(Du)」發音:不要用含糊的氣音或「啊~」,發音起音(Attack)越乾脆,音符切分越精準。
- 音準穩定:避免大幅度的滑音(Portamento),盡量像敲鍵盤一樣穩定在目標音高上。
- 辨識後進行量化校正:識別完成後,可使用「量化(Quantize)」或「重新對齊小節」功能微調時間偏移。