Code Monkey home page Code Monkey logo

mml2abc's Introduction

mml2abc

A library transpiles Music Macro Language into ABC music notation.

Demo

https://cat2151.github.io/mml2abc/dist/

Features

  • text to textのシンプルなJavaScriptライブラリ
  • MML から abcjs 用の ABC music notation を生成
    • abcjsは、ブラウザで五線譜を描画しつつSoundFont GM音源ソフトシンセを鳴らすライブラリです
  • mml2abcの用途は?
    • ブラウザで音を鳴らす用
      • MMLを書いてabcjsを鳴らす用
    • ObsidianでMMLを書いて音を鳴らす用

Requirement

  • ブラウザで鳴らす場合
    • index.htmlをちょっと書けば音が鳴ります
  • Obsidianで鳴らす場合
    • 開発中です
  • Windows上のコマンドラインで鳴らす場合
    • 未調査です。
      • スコープ外とします。「ObsidianでMMLを書いて音を鳴らす」を優先します。
        • abcjsがObsidianつまりChromiumで音を鳴らせるため、なんらかの方法はありそうです。未調査です。
        • abcjsに限らず、ABC music notationを入力としてaudioを出力できる、コマンドラインのソフトシンセがあるか?未調査です。

Installation

  • mml2abcをwebpageで使う手順は?
    • サンプルを用意しました。easymmlabcを参照ください
  • ObsidianでMMLで音を鳴らす手順は?

Usage

  • mml2abcをimportして、関数に引数を渡します
  • 具体例はeasymmlabcを参照ください

Note

このprojectが優先すること

  • 概念実証
    • 高機能、高性能、高信頼性、拡張性、安定性、バージョン互換性よりも、概念実証を優先します
  • 鳴ること
    • 最低限の音が鳴る状態の維持をできるだけ優先します
  • 関数にMML文字列を与えて、abcjsが演奏可能な文字列を取得できること
    • それ以上複雑な機能にせず、シンプルさの維持を優先します
  • 「ObsidianでMMLを書いて音を鳴らす」のを実現すること
    • より具体的には、Obsidian ABC.JS plugin に関連します
      • 今後 Obsidian ABC.JS plugin をforkし、mml2abcを組み込む予定です
  • MMLフォーマットはシンプル、既存スタンダードのサブセット継承、を優先します
    • SiONのサブセット(和音はZ-MUSICのサブセット)とします
    • 方言の名前は mmlabc としました

分担

  • mml2abc.pegjs を作ること
    • が、このリポジトリの担当です。
  • easyにmml2abcを使える仕組み を作ること
  • Obsidianでmml2abcを使える仕組み を作ること
    • は、別リポジトリで担当します。今後作成予定です。

mml2abcそのものの開発手順は?

  • MMLパーサを peggyjs + Jest でTDDすると楽です。なにかの参考にでもなれば幸いなので、できればそのうちもう少し詳しく書いていきます
  • TDDにはJestを使用
    • VSCodeのJest拡張を使用
      • テストやpeggyjsを書くだけで自動testが走ってredやgreenができて楽
  • 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拡張を入れる等
  • 日々の開発をスタートする手順は、以下だけでOK:
    code .
    npm run watch
    

mml2abc's People

Contributors

cat2151 avatar

Watchers

 avatar  avatar

mml2abc's Issues

シャープとフラットがMML仕様どおりの動作をしない

  • 再現MML:

    c+c
    
  • 期待値ABC:

    V:1
    ^C2=C2
    
  • 実際の結果ABC:

    V:1
    ^C2C2
    
  • 原因:

    • ABC notationは、シャープとフラットを、五線譜の臨時記号として扱います。
    • 臨時記号は小節内で維持されます。
    • 戻すにはナチュラルを指定します。
  • 対策案:

    • mml2abcによるパース時、c+のあとのcをパースする際に、ナチュラルを指定します。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.