Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VSTプラグインを作る? #45

Open
3 tasks done
sevenc-nanashi opened this issue Feb 16, 2024 · 5 comments
Open
3 tasks done

VSTプラグインを作る? #45

sevenc-nanashi opened this issue Feb 16, 2024 · 5 comments

Comments

@sevenc-nanashi
Copy link
Member

内容

Voicevox 0.16の歌声エディタをVSTプラグインとして提供できると面白そうです。

Pros 良くなる点

  • DAWから直接(!)Voicevoxを触れる

Cons 悪くなる点

  • メンテコストが高い(C++とVueどちらも書ける人が必要)

実現方法

プロトタイプを作ってみました:

VOICEVOXのバージョン

0.16.0

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

試してわかったことを書いておきます。

@sevenc-nanashi
Copy link
Member Author

sevenc-nanashi commented Feb 16, 2024

trim.26EFEE16-5956-4001-8D2D-29A28E629349.MOV
trim.D4EDB746-4A09-4E38-858E-85F695E115DF.MOV

image

(Voicevox:ずんだもん)

ToDo

括弧内はオプショナル。

  • 本家VoicevoxのコンフィグをとってくるところのMac/Linux対応
    プラットフォーム依存のコードはほぼないです。
    choc/juceが大体吸収してくれました。
    -> @romot-co さんによりMacは対応
    -> 一応Electronのドキュメントに沿ったコードは書いた。要テスト。

  • トークエディタを無効化する
    トークエディタに依存する部分がかなりある(特にダイアログ)のでまだ有効にしてます。
    これは多分本家で変更した方が良さそう。

  • Release Buildで動くようにする
    Release BuildではWeb側のファイル全部埋め込んじゃいたいな〜って思ってます(Debug Buildはlocalhost:5173に接続する感じ)
    zipにでも圧縮してバイナリに埋め込む?
    -> zip圧縮して(vstビルドでは専用のzip作成プラグインを走らせるようにした)JUCEにBinary Resourceと認識させて、ランタイムでZIP読み込み、fetchResourceでファイルを探して返す感じになった

  • ライセンス周り調べる
    VST3 SDK(GPLv3、または公式からの許可)といい感じに付き合ってく必要がありそう。
    Voicevox Engineは直接埋め込んでない(外部で起動する感じ)ので大丈夫だとは思います

  • ちゃんとガイドを書く
    CMakeにしたのでガイドがほぼいらなくなったので解決

  • プロジェクト保存を作る
    本家のプロジェクト保存をいい感じに叩く?
    -> ソング周りのstateを監視して5秒のdebounceで保存するように

  • MenuBar周りの最適化
    例えばエンジン項目や右上のボタンの削除

    • ファイル:プロジェクト周りを「MIDI読み込み」「MusicXML読み込み」「新規プロジェクト(リセット)」「プロジェクトをエクスポート」「プロジェクトをインポート」にした。
    • 設定:disabledにしたい。「VSTプラグインだと使えないよ」的なtooltipを付けたいけど、多分これを実装する設計は本家にもあった方がよさそう(メニュー項目にヘルプを付けたりとか)
      • 設定メニューごと吹っ飛ばした
    • ヘルプ:
      • ライセンス情報にC++側のを増やす。
      • VSTプラグイン用のソフトウェアの利用規約的なセクション。
  • Sandboxの色々実装
    MIDIやMusicXMLやプロジェクトファイルの読み込みは作った方が良さそう
    -> ブラウザ版のロジックを使い回せそう?

    • 多分触れる範囲の物は完成したかも
  • DAW連携をもっといい感じにする
    今はカーソル位置の同期、再生中のUIロックくらいしかないので。
    具体的にはUndo/Redoとか?できるかは要調査できなさそう?
    -> SynthVを触った感じ、カーソル位置の同期くらいしかないので完了で良さそう。

  • リポジトリ整備
    clang-formatとか、変数のsnake_case/camelCase揃えるとか

    • clang-formatは昔のVoicevox Coreのを使ったら良さそう?
  • JUCEの調査
    どうやらJUCEのライブラリのパスが相対パスらしいので、多分自分以外の環境だと動かない(えぇ…)
    -> VVVST_example.jucerVVVST.jucerにコピーするような運用(VVVST.jucerはgitignore済)
    -> CMake APIに移行した

  • ドキュメントや表記を合わせる
    「エンジン起動中」(起動してないのでエンジン待機中が正しい?)とか使い方とか。

  • 細かい呼び方を決める(「VOICEVOX本体」とか)

  • ちゃんと説明する(インストール方法とか)

  • (使い方動画を作る)

  • (AudioUnit対応)
    JUCEが対応してるのでいけるはず。Mac勢を待機

  • (仮置き音の同期)
    割と欲しい
    -> そんなことなかった

@sevenc-nanashi
Copy link
Member Author

できなかったこと

  • ボイボ内のノートをDAW内に出す
    image
    SynthVがやってない && それっぽいAPIが見付からなかったのでなし。

  • Undo/Redo
    それっぽいAPIが見付からなかったのでなし。SynthVやVitalもできてない。

@sevenc-nanashi
Copy link
Member Author

sevenc-nanashi commented Oct 31, 2024

この後色々とあったので整理:
image

リポジトリ

できること

  • エディタ側のレンダリングされた音声がDAWと同期する
  • トラックごとにVSTのチャンネルを変えられる
  • DAW側で再生位置を動かすとエディタ側も動く
  • 自動的にプロジェクトを保存する(5秒のDebounce)

制約 / できないこと

  • Cubaseで動かない(最重要)
    • 動いた!!!!!!!
  • Undo/Redoの同期
  • BPMや拍子情報などの同期
  • 仮置き音(ローパス矩形波)の同期
    • Rustにシンセのライブラリってあるのかな
  • Voicevox本体を起動する必要がある
    • エンジンの排他制御やエンジンの場所周りの判断がつらい
  • 設定変更ができない
    • 同時にエディタを起動している場合のコンフリクト処理とかがつらい
  • エディタを開いてないと合成できない

@Hiroshiba
Copy link
Member

まとめありがとうございます!!
VST実際に触ってみて、これはもう必須級に便利だなと感じました!! ぜひリリースしたいですね!!!

Voicevox本体を起動する必要がある

現状こちらが一番の課題点・・・というより考慮ポイントかなと思いました!
これがあるかないか、あとVOICEVOX本体をダウンロードする必要があるかないかでユーザー数に10倍~100倍の差がつくだろうなと直感しました。

「とりあえず使ってみる」を超えてもらうことが大事だと思うんですよね~
使えばキャラクター数がめちゃ多いことに気づいてなにか思いつくかもとか、VSTがDAWに入ってたらいつかふと使うかもとか。

とはいえ起動・ダウンロード周りを完璧にするのは大変だというのもわかるので、まあここは塩梅かなぁとは思います。

@Hiroshiba
Copy link
Member

Hiroshiba commented Nov 3, 2024

Discordで話してたことを転写してみました。このあたり

案1:エンジンがなければ自動でインストール

  • VVPPをダウンロードして所定の場所に置く
  • 所定の場所にエンジンがあればパス

🤔 アンインストールは自分で消してもらう感じになる

案2:起動時にリクエストを送ってなかったら起動する

  • VSTの起動時に50021にリクエスト送れればそれ使う
  • 送れなかったら新規起動

🤔 VSTの2個目のインスタンス立ち上げて1個目落としたら死ぬ

案3:コア使う

🤔 VRAMがとんでもないことになりそう

案4:別プロセスにし、エンジン起動数をカウントして、なかったら起動・なくなったら停止

🤔 エンジンランチャー.exeを別で作るみたいな感じになってそれはそれで大変

案5:エンジンが立ち上がってなかったらエディタごと立ち上げて終了はユーザー任せにする

🤔 何も知らないユーザーがVSTのエディタ立ち上げたままエディタを落とす可能性はある
🤔 「裏でGUIが起動しないでほしい」という要望は必ずありそう

案6:リクエスト飛ばすときになかったら起動する

  • 50021にリクエスト送れればそれ使う
  • 送れなかったら新規起動

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants