語法規格¶
TMD(Timebase Mark Down)是為音樂創作者、編曲人與 AI 協同設計的純文字記譜語言。它捨棄傳統排版與繪譜格式(如 MusicXML、LilyPond、ABC)的繁重標籤與大量休止符,以首調唱名(簡譜)、模組化歌曲段落與直覺的播放流程指令為核心。
最小檔案結構¶
每個 TMD 樂譜檔案都必須以 ::SCORE:: 標頭起始:
必要與基礎要素說明¶
- 檔案起始標頭:
::SCORE::(必須置於最前端)。 - 標題(Title):
** 歌曲名稱 **(使用雙星號包覆)。 - 速度(Tempo):
!= 120(以 BPM 為單位,支援整數或小數如!= 120.5)。 - 基準音高(升降 Key):
?= C(設定簡譜「1」(Do)的實際音高,如?= C、?= D、?= A'、?= E,)。 - 拍號(Time Signature):
<4/4>(每小節拍數 / 拍子基準音符,如<3/4>、<6/8>)。 - 樂器段落區塊(Paragraph / Entry):
段落名稱:樂器名稱@|起始小節|{ ... }。 - 播放順序(Playback Flow):
-> intro ->#(以->開頭,段落間以->串接,->#表示結束)。
樂譜基本資料與註解¶
註解(Comments)¶
TMD 支援多行區塊註解:
製作人資訊與 Metadata¶
可使用簡記前綴 ~ 或鍵值對 =~:KEY= 記錄音樂創作元數據:
數字「1」到底有多高?與歌曲的調性(?= 與 key=)¶
如果沒有學過樂理,可能聽過「這首歌是 C 調」、「這首歌是 G 調」,或唱 KTV 時說「太高了,幫我降兩 Key」。在 TMD 中,設定方式很直覺:
告訴電腦「1」(Do)聽起來是哪個音(?=)¶
簡譜用數字 1 2 3 4 5 6 7 代表「Do Re Mi Fa Sol La Ti」。
只寫 1 時,電腦不知道實際音高,因此需要 ?= 設定基準:
?= C:表示這裡的1就是鋼琴中央的 C 音(最標準的 C 大調)。?= D:把整首歌往上提兩個半音,這時候唱出1,發出的其實是 D 音。?= E,:逗號,代表降記號(♭)。這代表1對齊 E♭(降 E)。?= A':單引號'代表升記號(♯)。這代表1對齊 A♯(升 A)。
?= 的意義
?= 就像在 KTV 遙控器上按「升 Key / 降 Key」。改變字母後,整首歌的數字 1 2 3 會整體升高或降低,完全不需重寫音符!
告訴樂譜軟體這首歌是什麼調(key=)¶
多數情況下,寫 ?= C 或 ?= G 就足以讓 TMD 正確播放。那為什麼還會看到 key=?
?=是給「電腦發聲」聽的:決定數字1在物理上有多高。key=是給「印樂譜/排版」看的:例如五線譜開頭要印幾個升降記號(# 或 ♭),或是用來標記這首歌是大調(聽起來明亮)還是小調(聽起來憂傷、暗淡)。
舉個常見的例子:
這代表:
- 旋律的基準音
1對齊 D 音(?= D)。 - 但這首曲子實際上是「B 小調」(
key= Bm,聽起來很哀傷憂鬱),五線譜印出來時會自動帶上兩個升記號(F#、C#)。
Note
新手建議:剛開始寫歌、不確定調性時,寫 ?= C 或 ?= G 即可,先不用寫 key=!
樂曲結構與軌道(段落定義)¶
TMD 採用模組化分段(Section-Based Chunking),格式如下:
- 段落名稱(Section Name):邏輯段落名稱(例如
intro、verse、chorus、A、B、bridge、ending)。 - 樂器名稱(Instrument Name):軌道名稱(例如
Piano、Guitar、Bass、Drums、Vocal、Strings)。常見名稱會自動對應至 General MIDI 標準樂器音色(例如Piano對應平台鋼琴,Drums對應第 10 軌打擊樂組)。 - 起始小節(Offset):樂器進入段落時的小節偏移:
@|0|或@0:段落一開始就進場。@|+4|:段落開始 4 個小節後才進場。@|-1|:弱起小節(Pick-up),提前 1 小節進入。
- 固定音高屬性(
[pitchMode=fixed]): 若樂器接上[pitchMode=fixed],代表該軌道使用絕對固定音高,在整首樂曲轉調(如播放流程中的-> {?+3})時,完全不受移調影響。這常用於定音鼓(Timpani)、固定音效或打擊樂器:
同一段落名稱可同時宣告多個樂器軌道,它們會在播放該段落時同時演奏:
!!! 抽象主題原型(Prototype)
若省略樂器名稱(如 Theme { <4*> 1 2 3 4 }),該段落會作為抽象音樂素材原型,供播放流程中的 S-Expression 巨集(如 canon、loop、layer)引用,不會直接輸出為實體軌道。
節奏網格與細分單位¶
段落內使用 <n*> 定義節奏的基礎細分長度:
<1*>:全音符<2*>:二分音符<4*>:四分音符(最常見)<8*>:八分音符<16*>:十六分音符
小節線 | 僅供視覺排版,解析器計算節奏時會忽略:
音樂單位與記譜¶
首調唱名與音級¶
以 1 至 7 代表調性唱名(Do, Re, Mi, Fa, Sol, La, Ti)。
升降記號(Accidentals)¶
'(單引號):升記號(♯),(逗號):降記號(♭)
例如:1'(升 Do)、7,(降 Ti)。
八度標記(Octaves)¶
^:升高一個八度(多個符號可累加,如1^^)_:降低一個八度(多個符號可累加,如1__)
語法順序規則
必須先寫升降記號,再寫八度記號!
- 正確:
1'^(升 Do 高八度)、7,_(降 Ti 低八度) - 錯誤:
1^'、7_,(解析器無法識別)
休止符與延音線¶
0:休止符(長度為 1 個基礎單位)。-:延音線(Tie)或時值延長線,將前一個音符、和弦或休止符延長 1 個基礎單位。- 在
<4*>網格中:1 -為二分音符(2 拍),1 - - -為全音符(4 拍)。
- 在
和弦標記¶
和弦以方括號 [...] 包裹:
* 唱名級數和弦:[1]、[6m]、[4]、[5]、[2m7]、[6_m]
* 字母絕對和弦:[C]、[Cmaj7]、[Am]、[Dm7-5]、[G7#9]、[Csus4]
和弦亦可搭配延音線維持時值:[Cmaj7] - - -。
複音與雙音(Multi-Notes / Dyads)¶
使用 + 在同一拍位疊加多個音符(如小提琴雙音、鋼琴雙聲部合音):
連音群組(Tuplets)¶
連音使用 (音符...)%(時值) 表示:
* (1 2 3)%(--):三連音(在 2 個基礎拍的時間內均分演奏 3 個音)。
* (7, 1)%(--):二連音。
打擊樂與鼓組(Channel 10 Drums)¶
樂器名稱為 Drums、Percussion 或 Groove 的段落,會自動導向 MIDI 第 10 軌標準鼓組:
B/D:大鼓(Bass Drum / Kick)S:小鼓(Snare)X:閉合腳踏鈸(Closed Hi-Hat)O:開合腳踏鈸(Open Hi-Hat)T:中低音通通鼓(Tom)C:碎音鈸(Crash Cymbal)- 小寫字母(
b,s,x等)代表輕擊/幽靈音(Ghost note)。
定音鼓(Timpani)與一般鼓組的差別
一般爵士鼓組是「無固定音高」的打擊樂器,但定音鼓是有固定音高(旋律性)的樂器(General MIDI Program 47)。
- 定音鼓負責低頻打擊聲部,記譜常用低八度音符如
1__或5__。 - 在管弦樂配置中,定音鼓通常調校在特定的基音,若不希望隨著歌曲進行轉調(如
-> {?+3})改變音高,建議在軌道宣告時加上[pitchMode=fixed]:
中途改變音調、速度與強弱記號¶
可在小節或音符之間插入大括號 {...} 改變音樂狀態:
- 速度調整:
{!= 140}:絕對速度切換為 140 BPM。{!+ 10}/{! -5}:相對速度微調。
- 轉調與首調中心:
{?= D}:絕對首調基準切換為 D。{?+ 2}/{?- 2}:相對移調半音數(+2 代表升大二度)。
- 強弱力度記號(Dynamics):
- 支援
{pp}、{p}、{mp}、{mf}、{f}、{ff}等,控制後續音符的播放 Velocity 力度與樂譜強弱標記。
- 支援
- 拍號變更:
{<3/4>}:在小節邊界改變拍號。
樂曲行進(Playback Flow)與 S-Expression 巨集¶
播放順序定義歌曲的演奏流向與轉調:
支援的行進指令¶
- 段落引用:
-> 段落名稱 - 移調指令:
-> {?+1}(升半音)、-> {?-2}(降全音)、-> {?= G}(移至 G 調) - S-Expression 巨集(適合卡農、複調、聲部堆疊與對位法編排):
(canon 主題名稱 (樂器1 樂器2 ...) 小節間隔):自動以卡農錯位進場。(loop 主題名稱 樂器 重複次數):固定低音或副旋律循環。(layer 表達式1 表達式2 ...):多聲部平行重疊播放。(seq 表達式1 表達式2 ...):循序播放。(vary 主題名稱 變形參數...):旋律動機逆行、倒影或移調。- 結束標記:
->#(必備的終止符)。