midiと歌詞からmusicxmlを生成してNEUTRINOに渡したい(ひとまず完結、まとめ)

詳しくはGitHubまで。

なんとか最低限のところまで持っていくことができました!
改めまして、まとめておきます。

これは何?

ニューラルネットワークを用いた歌声シンセサイザーNEUTRINOに「とりあえず早く歌わせる」をコンセプトにしたアプリケーションです。
midiと歌詞のテキストを指定するとNEUTRINOが歌ってくれます。

何のために作ったの?

NEUTRINOに歌ってもらうには以下の手順を踏む必要があります。

  1. DTMアプリでmidiを出力する
  2. musecoreで開く
  3. 歌詞を入力する
  4. NEUTRINOに食わせる
  5. できあがる(が大抵の場合1に戻る)

musecoreは楽譜を作るソフトで、音楽知識の乏しい僕には楽譜、歌詞の入力は耐え難いものがありました。

機械向けに歌詞を書くのは結構面倒です。
例えば「ヨーロッパ」は音符に乗せると「よろぱ」になります。
「っ」は音符の切れ目になるし、「ー」は音符の長さが変わるだけ、などなど。
なれるとスムーズにいくのかもしれませんが、僕はトライアンドエラーがどうしても必要です。
この辺をよしなにしてくれるアプリがほしかったのです。

バグ報告など

Twitter @kaiba もしくは GitHub issueまでお気軽にどうぞ。

完走した感想

  • 多くの環境でGUI付きで動かしたかったので、Kotlin + JavaFXを選択したのですが完全に失敗
    • JavaFXは最近のJavaには同梱されていない
    • 同梱されないのでOpenJFXを使うが、当然OSごとにビルドする必要がある…。
    • public JREは8までしか配布されていない
    • じゃあどうすればいいのかというとjpackageを使用してJREを同梱する形で配布する
    • しかし、WindowsではWIXのインストールが必要でCIでやるのは困難
    • まともなインストーラのAPIを用意しない(ように見える)Windowsがいけない気もするし、バージョン8以降のJREを配布しないOracleもいけない気もする
    • 今後GUIをやるなら Electron かなぁ…
    • JavaでマルチプラットフォームでやるならSwingがよいでしょう
    • コード署名は興味ないのとハマりそうなので目をつぶった…
  • Kotlin + JavaFX、書き心地はよかった。Scene Builderで用意されているし。細かいデザインをしようとなると話は変わってくるでしょうけど。JavaFxはCSSでデザインができるんだけど、文法がCSSなだけでCSSではない気がする。
  • 自動テストを書いたので開発がスムーズだった。最初のハードルが高いけど、真似て書くのはかんたんだし、トライアンドエラーが早い。
  • CIにGitHub Actionsを使った。CircleCIやDroneと大差なく迷うところはなかった。Mac、Windowsにも対応しててありがたみを噛み締めてバイナリをビルドした。
  • GUI, CUI, I18n、アプリケーションでよくある機能を一通り触れて学びがあった。