A library transpiles Music Macro Language into ABC music notation.
https://cat2151.github.io/mml2abc/dist/
- text to textのシンプルなJavaScriptライブラリ
- MML から abcjs 用の ABC music notation を生成
- abcjsは、ブラウザで五線譜を描画しつつSoundFont GM音源ソフトシンセを鳴らすライブラリです
- mml2abcの用途は?
- ブラウザで音を鳴らす用
- MMLを書いてabcjsを鳴らす用
- ObsidianでMMLを書いて音を鳴らす用
- ブラウザで音を鳴らす用
- ブラウザで鳴らす場合
- index.htmlをちょっと書けば音が鳴ります
- Obsidianで鳴らす場合
- 開発中です
- Windows上のコマンドラインで鳴らす場合
- 未調査です。
- スコープ外とします。「ObsidianでMMLを書いて音を鳴らす」を優先します。
- abcjsがObsidianつまりChromiumで音を鳴らせるため、なんらかの方法はありそうです。未調査です。
- abcjsに限らず、ABC music notationを入力としてaudioを出力できる、コマンドラインのソフトシンセがあるか?未調査です。
- スコープ外とします。「ObsidianでMMLを書いて音を鳴らす」を優先します。
- 未調査です。
- mml2abcをwebpageで使う手順は?
- サンプルを用意しました。easymmlabcを参照ください
- ObsidianでMMLで音を鳴らす手順は?
- 開発中です。mml2abcを Obsidian ABC.JS pluginのforkに組み込む予定です
- mml2abcをimportして、関数に引数を渡します
- 具体例はeasymmlabcを参照ください
- 概念実証
- 高機能、高性能、高信頼性、拡張性、安定性、バージョン互換性よりも、概念実証を優先します
- 鳴ること
- 最低限の音が鳴る状態の維持をできるだけ優先します
- 関数に
MML文字列
を与えて、abcjsが演奏可能な文字列
を取得できること- それ以上複雑な機能にせず、シンプルさの維持を優先します
- 「ObsidianでMMLを書いて音を鳴らす」のを実現すること
- より具体的には、Obsidian ABC.JS plugin に関連します
- 今後 Obsidian ABC.JS plugin をforkし、mml2abcを組み込む予定です
- より具体的には、Obsidian ABC.JS plugin に関連します
- MMLフォーマットはシンプル、既存スタンダードのサブセット継承、を優先します
- SiONのサブセット(和音はZ-MUSICのサブセット)とします
- 方言の名前は
mmlabc
としました
mml2abc.pegjs を作ること
- が、このリポジトリの担当です。
easyにmml2abcを使える仕組み を作ること
- は、easymmlabcで担当します。
Obsidianでmml2abcを使える仕組み を作ること
- は、別リポジトリで担当します。今後作成予定です。
- MMLパーサを peggyjs + Jest でTDDすると楽です。なにかの参考にでもなれば幸いなので、できればそのうちもう少し詳しく書いていきます
- TDDにはJestを使用
- VSCodeのJest拡張を使用
- テストやpeggyjsを書くだけで自動testが走ってredやgreenができて楽
- VSCodeのJest拡張を使用
- peggyjsとJestの接続には、chokidar を使用
- peggyjsを更新すれば、自動でES modules(ブラウザ用)とCommonJS(TDD用 & サーバ用)を生成し、Jestの自動テストが動くので楽
- peggyjsのprintfデバッグには、Jestのsilentとverboseを制御(VSCodeのJestターミナルでconsole.logを確認できるようになる)
- printfデバッグは稀に必要になるので、使えるようにしておくと楽
- ブラウザpageのライブリロード(ホットリロード)には、webpack-dev-serverを使用
- ブラウザで実際に鳴らすことで発覚する問題がある(abcjsの想定外の挙動など)ので、ライブリロードできるようにしておくと楽
- cloneしたら最初に環境構築。
- Node.js関連のinstallや、
npm install
や、VSCodeとVSCodeのJest拡張を入れる等
- Node.js関連のinstallや、
- 日々の開発をスタートする手順は、以下だけでOK:
code . npm run watch