MML用シンタックスハイライトと、自動演奏と、自動早送り

# 記事の目的
MMLにおける、シンタックスハイライト、自動演奏、自動早送りについて、
TIPSを共有する。
あくまで実現手段の紹介であり、どのスタイルがよいかは主張しない。実際どのスタイルにも長所がある。
また、エラーログの扱い等、要点に注力するために省いた事柄も、いろいろある。

# シンタックスハイライト
MMLコマンドごとに色分けして表示すると、
MMLの読み書きがしやすくなります。

* [mck + 秀丸](http://hide.maruo.co.jp/lib/hilight/mck_hide_key.html)

* [mck + サクラエディタ](http://ppmck.web.fc2.com/)

* [NRTDRV + Atom](https://atom.io/packages/language-mml-nrtdrv)

# 自動演奏
テキストエディタでMMLを書いたあと、
演奏するまでの操作をできるだけ楽にします。
操作が楽になると、そのぶん音楽に注力できることでしょう。

以下でいくつかの方法を紹介します。

## バッチファイルを実行して演奏
多数のMML開発キットで、デフォルトで用意されている方法。スタンダード。

* [操作] MMLファイルを保存したら、以下のコマンドをコンソールから入力して演奏。
* [例] mk.batにコンパイルと演奏が書かれている  
```
% mk a.mml
```

## コンソールのスペースキーを押して演奏
* バッチファイルをpause + ループで実行しておく方法。スタンダード。
* [操作] MMLファイルを保存したら、コンソールでスペースキーを押して演奏。
* [NSD.Lib で採用されている方法](http://shaw.la.coocan.jp/nsdl/) 

## テキストエディタに演奏機能をつける
* テキストエディタのマクロを利用する方法。  
プログラミング言語を扱う際にエディタに実行マクロを設定するのと同じこと。スタンダード。
* [操作] MMLファイルを入力したら、CTRL+1を入力して演奏。  
(入力コマンドはエディタや設定によって異なります)

## 保存したら自動演奏
### 監視ファイルを指定
最初に監視対象のファイル（編集したいMMLファイル）を指定して使うスタイル。スタンダード。

* [操作] 編集したいMMLをdropしたり、ファイル選択ダイアログで開いたりする。のち、  
MMLファイルを保存したら、自動演奏される。

#### MML編集環境と一体型
* Mumml　や　[NRTDRV](http://nrtdrv.sakura.ne.jp/)　で採用されている方法。

#### 監視ツール利用型
汎用的。ツールの種類は沢山あるのでお好みのものを。自作もOK。

* [WatchFileUpdate](http://c60.la.coocan.jp/download.html)
* [PowerShellによるMMLファイル監視 – 同期版](https://eseakisakura.wordpress.com/2016/02/03/mml_watch/)

### 固定のファイルを常時監視
ファイル名固定で運用するスタイル。
「監視対象のファイルを指定」という操作を省きたいときに。

* [操作] MMLファイルを保存したら、自動演奏される。

### テキストエディタの設定で自動演奏
さらに「どのファイルでも、保存したら自動演奏したい」ときに。

* [操作] MMLファイルを保存したら、自動演奏される。
* 秀丸の場合
[保存直後に、拡張子ごとに指定したマクロを実行]( http://homepage3.nifty.com/_htom/macro/macro_etc.html#N2.29)
 * 実行するマクロの例は、後述を参考にしてください
* 他のエディタでも機能があれば可能

# 入力したら自動演奏
さらに「保存しなくても、1文字入力したら自動演奏したい」ときに。

* [操作] 1文字入力して1秒したら、自動演奏される。  
（1秒以内に次の文字を入力すれば自動演奏されない）

[Swift playground](http://www.dorapro.co.jp/engineerblog/?p=137)、[Atomのmarkdownプレビュー](http://aoplanning.com/ide/atom-markdown.php)等、
近年の統合開発環境やテキストエディタは、編集と同時に実行結果も得られるものが増えてきています。
MMLでも似たようなことをやって楽したい場合に。

* 秀丸の例
[文字入力後1秒したら拡張子ごとに指定したマクロを実行]( http://homepage3.nifty.com/_htom/macro/macro_etc.html#N2.29)

* 実行するマクロの例 （前述のa.mmlを常時更新監視する運用が前提になっています）

```c

// 初期設定
$targetFilePath = "D:\\work\\music\\mck\\songs\\a.mml";		// コピー先ファイル名フルパス（\でなく\\を書くこと）

// 編集中ファイルのフルパスファイル名を取得
$FName = filename2;

// 今の編集位置を取得
#nowCol = column;
#nowLine = lineno;

// 論理行頭にカーソル移動、行頭A～Zとその後のspaceをskip、"!!"を書く
golinetop2;
while (code >= 0x41 && code <= 0x5A ) {
	right;
}
right;
insert "!!";

// 編集中ファイルを別名保存
saveas $targetFilePath;

// 編集中ファイル名を戻す
changename $FName;

// "!!"をアンドゥで消す
undo;

// カーソル位置を戻す
movetolineno #nowCol, #nowLine;

// マクロ終了
endmacro;

```

# 現在編集している場所から演奏
長い曲の後半を入力して、演奏結果を確認するとき、早送りを使うと楽です。

以下でいくつかの方法を紹介します。

## 曲の前半は待つ
コンパイラやドライバやプレイヤに早送り機能がなく、ほかに方法もなければ。

* [操作] MMLファイルを保存して演奏開始したら、目的の場所まで待つ

## 音楽プレイヤーの早送りボタンを押す
早送りボタンのあるプレイヤーが活躍します。スタンダード。

* [操作] MMLファイルを保存して演奏開始したら、プレイヤーの早送りボタンを押す  
（シークバーで場所を指定できるプレイヤーも便利）

## MMLの早送り系コマンドを利用する
ppmck ex等、強力な早送り系コマンドを持つコンパイラとドライバの場合に有効です。

* [ppmck exの場合は、MMLに!!を入力](http://prgterrace.wiki.fc2.com/wiki/ppmck%20ex)  

 * [操作] 演奏開始したい場所で、MMLに!!を入力し、MMLファイルを保存し、演奏する。
 * さらに、テキストエディタのマクロを使えば、自動で!!を入力し、演奏後に自動で!!を消せます。  
上記の秀丸マクロ例に含まれています。

     * [操作] 1文字入力して1秒したら、自動で編集中の場所まで早送りされ、自動演奏される。  

# マクロの補足
テキストエディタの自動起動系マクロは、on/offがすぐできるので、
手動にしたいときはoffにするだけでOK。

# 最後に
この記事では、シンタックスハイライトと自動演奏と自動早送りについて実現できたこと、だけ取り扱います。
それ以外はどこか別の場所で取り扱おうと思います。