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

[ソング] マルチトラック機能の実装 #1906

Closed
3 tasks
y-chan opened this issue Mar 6, 2024 · 24 comments
Closed
3 tasks

[ソング] マルチトラック機能の実装 #1906

y-chan opened this issue Mar 6, 2024 · 24 comments

Comments

@y-chan
Copy link
Member

y-chan commented Mar 6, 2024

内容

現状、Vuex store上では複数のトラックをおける用になっていますが、UIとしては複数のトラックを設置する機能(マルチトラック)が実装されていません。
これをUIに実装することを目標としたIssueです

Pros 良くなる点

コーラスなどを1プロジェクトで叶えられるようになる
(オーディオトラックを作れば)インスト音源との合成をエディタ上で行える

Cons 悪くなる点

特になし

実現方法

  • selectedTrackIndexが外部から操作できるようにstoreに移動させる
  • 複数のトラックを操作できるUIを作る
  • (Optional?)オーディオトラック機能を実装する

VOICEVOXのバージョン

0.?.0

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

  • Windows
  • macOS
  • Linux

その他

UIはSynthVとかが参考になるかも...!
全体が見渡せる場所は欲しい...?(操作画面が狭くなる問題あり...)

@sevenc-nanashi
Copy link
Member

参考(SynthV):
image

今の外観をあまり崩さない場合(=トラック一覧を開閉可能なDrawerとして追加する)のUIを考えてみました(手描きですが):
image

SynthVだとパンや音量コントロール(ミュート/ソロ含め)あるので、可能なら入れても良さそう。

@Hiroshiba
Copy link
Member

マルチトラックは現在 @sevenc-nanashi さんに積極的に実装いただいています。(ありがとうございます!!)

最終的な変更行数が2000行を超えることがわかってきたので、いくつか段階を分けてPRしていただく流れをお願いさせていただきました。
変更が露出しない形でmainブランチに実装していく形も可能ですが、今回は @sevenc-nanashi さんと相談してプロジェクトブランチを作る方針で進めたいと思います!

ということでマルチトラック用プロジェクトブランチを作成しました 🙏
https://github.com/VOICEVOX/voicevox/tree/project-multitrack

@sevenc-nanashi
Copy link
Member

sevenc-nanashi commented May 20, 2024

タスクリストです:

@sevenc-nanashi
Copy link
Member

sevenc-nanashi commented May 20, 2024

とりあえずstateからやってみようと思います。tracks[0]が確実に型エラーになるので良い感じに残りを見つけてくれるはず。

@sevenc-nanashi
Copy link
Member

オプション以外は一通り終わったと思います。

@Hiroshiba
Copy link
Member

Hiroshiba commented Jul 23, 2024

ありがとうございます!!
提供がとても楽しみです!!
あ、projectブランチのプルリク作成をお願いできれば!

相談です!
マルチトラックはまず実験的機能で出すのが良さそうと考えてます。
用途が多岐にわたるめ確認すべきポイントの網羅が難しいので、実際に提供する形で課題点を募集できればなと。

そこでなのですが、マルチトラックを実験的機能にすることは難しそうでしょうか?
シングルトラックのとき同様動けば良いと思っているのですが、どこをどう変えれば良いか、あるいはオンオフでの切り替えは難しいかをお聞きしたいです!

(例えばUIはサイドバーの開閉ボタンを隠せば良い、とか。)

@sevenc-nanashi
Copy link
Member

  • サイドバーボタンを隠す
  • インポート画面のトラック選択をラジオボックスにする

あたりで隠せると思います。

@Hiroshiba
Copy link
Member

なるほどです!!

あ。あとマルチトラックが必要なプロジェクトファイルを読み込もうとしたときに、ダイアログを出してあげると優しいかも・・・?
「実験的機能をオンにしますか?」でも良いし、「オンにする必要があります」にしても良いし。

ちょっとこの辺り考慮しつつ、実験的機能とする実装もお願いしてよいでしょうか 🙇
あるいはいきなり通常リリースするという手もあると思います・・・!!

@Hiroshiba
Copy link
Member

あっ TODO: もっとスマートな方法を考えるのとこどうしましょう・・・?
mainマージ前にリファクタリングするか、方針考えてissue作るでも良いと思います。

ちょっと覚えてないのですが、たしかSET_TRACK後のactionの副作用をいろいろ実行しなくちゃいけないんだけど、副作用あるのがSET_SINGERだけとかなんでしたっけ。
だとしたら副作用はSETUP_SINGERだけで、これはそもそも実行しなくても良い(初回の音声合成に時間かかるけど)から、全部副作用実行しなくても良いかも??

ちょっと要確認ですが。。。

@sevenc-nanashi
Copy link
Member

これはそもそも実行しなくても良い(初回の音声合成に時間かかるけど)から

Voicevox Engineでは無事かも知れませんが一応読んでおきたい気持ちはありますね。
RENDERあたりにも入れるとか?

@Hiroshiba
Copy link
Member

RENDERで呼んでも良いかもですが、エンジン側の仕様で呼ばなくても大丈夫なようになってるんですよね〜
https://voicevox.github.io/voicevox_engine/api/#tag/%E3%81%9D%E3%81%AE%E4%BB%96/operation/initialize_speaker_initialize_speaker_post

initializeされてるかどうかは毎回エンジンに問い合わせないといけないので、リクエストを何度も走らせないといけなさそう。
なのでRENDER内で実行しない判断も割と合理的かもです。

@sevenc-nanashi
Copy link
Member

sevenc-nanashi commented Jul 25, 2024

副作用はSETUP_SINGERだけ

mutationも入れるとSET_NOTES内のoverlappingNoteIds更新もありますね。
SET_TRACKでmutationを叩きまくるんでしたっけ?

@Hiroshiba
Copy link
Member

あーそうか、mutation側もでした…。

副作用目的でactionを叩きまくるよりは、set track内でset mutation叩きまくる方が良いとは感じます。
track内のプロパティが増えたときに処理足し忘れる危険性を排除できるととても良さそうですが…。

あるいはset track内で普通にtrackをsetして、overlap更新しても良いかも。
これが丸いかもしれない。

あるいは高速化したし、getterにする手もあるかも。
この辺りの議論は測定結果をコメントしてくださったあたりなにか参考になる考え方残ってるかも。

@sevenc-nanashi
Copy link
Member

sevenc-nanashi commented Jul 26, 2024

あるいは高速化したし、getterにする手もあるかも。

$O(2Nlog2N + 2N)$ なので、getterにしても十分問題ない速度だと思います。

@Hiroshiba
Copy link
Member

Hiroshiba commented Jul 26, 2024

そもそもnotesに変更が入るmutationで毎回notesからoverlap計算してるんでしたっけ。
であればgetterにしても計算回数は変わらないはず…?(computedがちゃんとキャッシュ作ってくれるなら)

@Hiroshiba
Copy link
Member

📝 overlappingNoteIdsはgetterになった

@Hiroshiba
Copy link
Member

@sevenc-nanashi あっすみません!!
proeject-multitrackをmainへマージするPR作っていただいてもいいですか 👀 (権限あるかな)

それをXポストでリンクする URL にしようかな~と。(とどめのプルリクエストなので終わり感ある&アイコンが大きく表示される)
あとコンフリクトも解消をお願いできると・・・。。。 🙇

ポスト文はこんな感じを予定!

#VOICEVOX開発状況 
1つのプロジェクト内で複数のトラックを編集できるようになりました🎉(今後のアップデートで実験的機能として実装されます。)
【開発者:@sevenc_nanashi】
URL

Hiroshiba added a commit that referenced this issue Jul 30, 2024
## 内容


project-multitrackをmainにマージします。長く苦しい戦いだった(本当はまだ色々残ってるのでcloseじゃなくてrefにしてます)

## 関連 Issue

- ref: #1906 

## スクリーンショット・動画など

(なし)

## その他

#2184 が先です。
@Hiroshiba
Copy link
Member

あ! このissueどうしましょう?

こちらのコメント見る感じ、完了していないタスクはあとstem書き出し?

@sevenc-nanashi
Copy link
Member

あとオーディオトラックですね。

@Hiroshiba
Copy link
Member

あ、なるほどです!!
issueタイトルの大目的は果たせたのでcloseしようか迷ってます。

@sevenc-nanashi
Copy link
Member

細かい所は分割してこれは閉じる、で良いと思います。

@Hiroshiba
Copy link
Member

了解です!

ではissueを作っていきますか。
実装の構想が思い浮かんでるものがあれば、issue作るついでにその構想をまとめられて便利だと思います。
高層の浮かんでるタスクはありますか? 👀

@sevenc-nanashi
Copy link
Member

とりあえず浮かんでいるのを建てました: #2214#2215
これは閉じても良さそう。

@Hiroshiba
Copy link
Member

issue作成ありがとうございます!!
こちらのissueは閉じようと思います! ありがとうございました!!

プロジェクトブランチもプロジェクト達成ということで削除しようと思います!
また必要になった時は必要になった時のタスクに応じたブランチ名にする感じで・・・!

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

Successfully merging a pull request may close this issue.

3 participants