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

ソング:ルーラー部UIの挙動と全体への統合 #2398

Open
3 tasks
romot-co opened this issue Dec 7, 2024 · 18 comments
Open
3 tasks

ソング:ルーラー部UIの挙動と全体への統合 #2398

romot-co opened this issue Dec 7, 2024 · 18 comments

Comments

@romot-co
Copy link
Contributor

romot-co commented Dec 7, 2024

内容

ルーラーについてある程度一貫性のあるUIとしてまとめることを目的とします

  • ルーラー各部のUIおよび挙動
    • 小節グリッド
    • ループ
    • 再生ヘッド
    • レーンの表示の仕方
    • BPMレーン
    • 拍子レーン
    • キー(調)レーン
    • その他追加レーンが必要になった場合のざっくり目安
  • アプリ全体としてのラベル?類およびその操作の一般挙動目安
  • ルーラーのアプリ全体での位置付け

Pros 良くなる点

  • ルーラーのまとまりがよくなる
  • 今後追加しやすくなる

Cons 悪くなる点

ないはず

実現方法

Storybookでパターンを作成

VOICEVOXのバージョン

0.2.x

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

  • Windows
  • macOS
  • Linux

その他

あくまで目安(縛りではない)

@Hiroshiba
Copy link
Member

Hiroshiba commented Dec 8, 2024

まとめわかりやすいです、ありがとうございます!
こう見ると相変わらず求められる機能数が多いUIパーツですね・・・ 😇
レーンが大量にある点をどう調理するかが腕の見せ所な気がしました!

ルーラーのアプリ全体での位置付け

この一文を見て思いついたのですが、そういえばトラックリストに作るであろうルーラーより、このピアノロールのルーラーのがよくアクセスしますね。
ルーラーは全体操作だから、意味だけ考えるとどっちかというとトラックリストのルーラーがメインのが正しそうですが・・・。

ルーラーに持たせる機能を全体に持たせるかピアノロールに持たせるかは、その機能の解像度次第かもと思いました!!
例えば適当にピアノロールは大体5〜6小節、トラックリストは12小節〜表示されてると考えて、その持たせたい機能がどっちに必要かで割り振っていくと良さそうかも。
たとえばAメロBメロみたいな自由記述ラベルはトラックリスト側のが良さそう。(ラベル次第ですが。。)

そう考えるとキーや拍子もそんな5〜6小節でぽんぽん変えないし、トラックリスト側のが合ってそうですが。。。。。
トラックリスト側に持たせると、編集箇所より遠いしで使いにくく感じそうな気がしますね。。。。
うーん。やっぱピアノロール側のルーラーは仕事が多そうですね・・・ 😇

@romot-co
Copy link
Contributor Author

romot-co commented Dec 8, 2024

進捗:

なんか動作イメージ(実装問題でややこしいところありそう)

2024-12-09.4.29.15.mp4
  • 「テンポ」「拍子」「キースケール」各要素に分離
  • 右クリックメニューでその位置に「テンポ」「拍子」「キースケール」の対象を選んで挿入
  • 要素(直前の値と同様)と編集ポップオーバーが表示される
  • ポップオーバーはクリックで開く
  • ポップオーバー内で値変更または削除
  • 値変更で実際に各要素が変わる
  • ラベル右クリックで対象要素の「削除」があってもよさそう

ルーラーに持たせる機能を全体に持たせるかピアノロールに持たせるかは、その機能の解像度次第かもと思いました!!
例えば適当にピアノロールは大体5〜6小節、トラックリストは12小節〜表示されてると考えて、その持たせたい機能がどっちに必要かで割り振っていくと良さそうかも。
たとえばAメロBメロみたいな自由記述ラベルはトラックリスト側のが良さそう。(ラベル次第ですが。。)

ありがとうございます!こちらラベルはたしかにそのほうがいいかもです…!
けっきょくどっちにも表示するみたいな感じになる気がしており、考えるポイントかなー…と

もうちょっといくつかデモできたらみなさんにご確認いただけるとうれしいです…!

@Hiroshiba
Copy link
Member

ポップオーバー内で削除、なるほどです!!
編集メニューの内容を全部表示するの、思いつきませんでした。

ラベル右クリックで対象要素の「削除」があってもよさそう

ほかは右クリックが一段階ある(コンテキストメニュー開くだけ)ので挙動が違うのと、あとポップアップに収まりきらなくなる操作が現れるのを見越して、右クリックは「削除」が現れるだけのコンテキストメニューを開くだけにしておく、みたいな考え方もあるかもと思いました!


あとこれは挑戦なのですが、可能なら各ラベルがどの時刻と対応しているかユーザーにわかるようなUIを目指せるかもと思いました。
同時刻に別種のラベルが複数存在してると、2つ目以降のラベルの表示位置が実際の変更地点とずれるのをどうにかするイメージです。

例えば、実際の変更地点に黒の縦線を書いて、アクティブになってるラベルと対応する位置の縦線を色付けする・・・とか・・・?

@romot-co
Copy link
Contributor Author

romot-co commented Dec 9, 2024

@Hiroshiba
ありがとうございます!
のちほど試してみます!


あとは元々の案に戻るのですが素直にレーンあたり1要素にしてしまうのが素直かなあと
ラベルが増えたりしたらどうやっても破綻しそうではあるので…

その場合は以下のようにしてもよさそうです

  • 1レーンにつき1要素
  • レーン右クリックメニュー「挿入」から追加(ダブルクリックがショートカット)
  • イベントは右クリックメニュー「編集」から編集 / ダブルクリックで編集モード(ノートみたいな感じ)
  • イベントは複数選択可能
  • イベントは移動可能
  • イベントは右クリックメニュー「削除」または選択後にDELキーで削除可能

あとは:

  • レーンの表示増減は可能
  • レーンを1つにまとめたい場合イベント位置になんらかの表示(ミニマップ的な要素が存在ことはわかりホバークリックで確認できるなにかとか、分割されているように見えるアイテムをグループにするとか…

@Hiroshiba
Copy link
Member

複数レーンにもできる・畳むこともできる、が手っ取り早い気もしますね!
レーンひとつだけ展開するのではなく、全部展開するか全部まとめるかの2状態だけでも良い説もありそうかも。(レーンの種類数増えてくると微妙かもですが…。)

@romot-co
Copy link
Contributor Author

romot-co commented Dec 9, 2024

進捗:

とりあえず縦レーンにしたらどうなるかの様子をざっくり試す…
やはりスペースがでかみがある

test-pr-3.mp4

たたむ・一括も別途試す

@romot-co
Copy link
Contributor Author

romot-co commented Dec 10, 2024

test-pr-6.mp4

進捗:

試行

  • 一括表示
  • 同一位置要素のグルーピング
  • グループにドラッグした場合は統合(合体するのがわかるように)
  • ルーラー右クリックから追加
  • ラベルクリックで編集
  • ラベルドラッグで移動
  • ラベル右クリックから削除

グルーピングの部分は以下の対応

可能なら各ラベルがどの時刻と対応しているかユーザーにわかるようなUIを目指せるかもと思いました。
同時刻に別種のラベルが複数存在してると、2つ目以降のラベルの表示位置が実際の変更地点とずれるのをどうにかするイメージ

@romot-co
Copy link
Contributor Author

進捗:

ループエリアを合成(まだマージのみなのでスタイルはおわっている)
Image

こうやって考慮の必要がある依存部分をつなげていくと見るのが辛いクソデカプルリクになるので
ある程度試作して当たりをつけてから見れる単位で分解していく形がよさそう

3つ以上出てきた段階で粒度のきっちりしたコンポーネント化みたいな手法が役に立つのかどうか…

@Hiroshiba
Copy link
Member

くっつくUI、見た感じめちゃめちゃいいですね!!!
密になってるときの表示をどうしようかなくらいですが、まあそんなにごろごろ変わる曲も少ないだろうしほとんど問題にならなさそう!

実装をどう進めていけば嬉しいかは若干見えないですね・・・・・・・・。
とりあえずある程度できた時に、プルリクじゃなくていいのでブランチを見せてもらえば何か思いつくかも・・・?
例えば機能単位で分ける以外にも、Vuexだけ実装するとかいろいろありそうな気がしないでもないので・・・!
もちろん行けそうだったら最初からプルリクでも大丈夫です!

@romot-co
Copy link
Contributor Author

@Hiroshiba
ありがとうございます!
こちら密になった場合も考慮してみます!

実装をどう進めていけば嬉しいかは若干見えないですね・・・・・・・・。
とりあえずある程度できた時に、プルリクじゃなくていいのでブランチを見せてもらえば何か思いつくかも・・・?

とりあえずブランチで作成いたします…!

@romot-co
Copy link
Contributor Author

UI選択の基準

以下の要素が混在しておりややこしいので選択基準をまずはふわっと書く

  • インライン直接編集
  • ポップオーバー
  • コンテキストメニュー
  • インスペクタ(サイドバー)
  • モーダルダイアログ

ポップオーバー・インスペクタ vs モーダルダイアログの境目

ポップオーバー・インスペクタ

  • その要素は結果を見ながら編集したい -> モーダルダイアログかどうかの境目
  • 主要作業フローであり作業を止めたくない
  • 実装コストが高くてもよい

モーダルダイアログ

  • ユーザーをその操作のみに集中させる必要がある(他の作業とコンフリクトする)
  • 結果を見ながら操作する必要がない

ソング全体の設定などはモーダルでよい

ポップオーバーとインスペクタの境目

インスペクタ

  • 常時表示が必要
  • 複雑: 編集対象のプロパティが4つ以上(ざっくり)
  • スペースを取ってもよい

ポップオーバー

  • 常時表示が必要ない
  • 単純: 編集対象のプロパティが2-3程度(ざっくり)
  • スペースを取りたくない

メモ書きとして残すが、YES/NO式のチャートにしたほうがよさそう

@romot-co
Copy link
Contributor Author

romot-co commented Dec 18, 2024

だいぶめんどくさい

  • コンテキストメニューは常に用意する(選択肢から除外)

課題:

移動・配置は必要なさそう?
選択も複数選択が必要かどうかのみでよさそう?

もっとざっくりさせたい
そもそもが曖昧なAND/OR条件になるというのはあるが…

スペース制約および頻度条件も加える必要がありそう
あと操作は1つだけではない


flowchart TD
    Start[開始]
    %% 操作種別
    Q_Operation{どの種類の操作を行う?}
    Q_Operation -->|選択| Q_SelectionType{複数要素を選択する?}
    Q_Operation -->|編集| Q_MultiEdit{複数要素を同時に扱う?}
    Q_Operation -->|配置・移動| Q_Move{精密な位置指定が必要か?}
    Q_Operation -->|なし/閲覧のみ| Sel_Highlight["選択内容ハイライトのみ"] --> End
    %% 選択フロー
    Q_SelectionType -->|Yes| Sel_Multi["複数選択UI(Shift+クリック等)"] --> Q_AfterSelect{選択後のアクションは?}
    Q_SelectionType -->|No| Sel_Single["単一選択UI"] --> Q_AfterSelect
    Q_AfterSelect -->|編集| Q_MultiEdit
    Q_AfterSelect -->|移動| Q_Move
    Q_AfterSelect -->|なし| Sel_Highlight["ハイライトのみ"] --> End
    Q_AfterSelect -->|その他操作なし| No_Op["該当UIパターンなし"] --> End
    %% 編集フロー
    Q_MultiEdit -->|Yes| Q_Complex{"複雑な編集が必要?<br>(4つ以上のプロパティ変更 or プレビューしつつ編集)"}
    Q_MultiEdit -->|No| Q_LightEdit{"軽微な編集か?<br>(単一テキスト/数値程度)"}
    Q_LightEdit -->|Yes| Edit_Inline["インライン編集"] --> End
    Q_LightEdit -->|No| Q_Complex
    %% 移動/配置フロー
    Q_Move -->|Yes| Q_Complex{"複雑な操作が必要?<br>(複数プロパティ変更 or プレビューしつつ編集)"}
    Q_Move -->|No| Move_DnD["ドラッグ&ドロップ配置"] --> End
    %% 複雑な操作は共通判定
    Q_Complex --> Q_ModalNeeded{"中断必須な操作か?<br>(不可逆操作,全体設定,作業フローで必須など)"}
    Q_ModalNeeded -->|Yes| Modal["モーダルダイアログ"] --> End
    Q_ModalNeeded -->|No| Q_LargeArea{"多要素の常時表示編集が必要?"}
    Q_LargeArea -->|Yes| Sidebar["サイドバー(インスペクタ)"] --> End
    Q_LargeArea -->|No| Popover["ポップオーバー"] --> End
    End[終了]
Loading

@romot-co
Copy link
Contributor Author

進捗:

動作を考える

いちおう今後の追加変更の場合のフィジビリティは確保できていそう

  • レーン構成
    まずはルーラーを1レーンにまとめて、テンポ・拍子・キースケールなどを同じ軸上に表示する
    将来的にはレーンを分割できる仕組み(表示/非表示)を導入する可能性あり

  • 要素の追加
    ルーラーを右クリックして、「テンポを追加」「拍子を追加」「キースケールを追加」を選択できる
    クリックしたタイム位置に対応する要素が追加される

  • 要素の選択
    シングルクリックで1つの要素を選択(ハイライト)
    複数選択は後から対応を検討

  • 要素の編集
    右クリックメニューから「編集」を選ぶ(ショートカットとしてダブルクリック)でポップオーバーを開き、数値(テンポ/拍子/キー)を変更
    プレビューしながら変更したいに該当しそうなのでポップオーバーを想定

  • 要素の削除
    要素を選択した状態で右クリックメニューから「削除」
    または、選択+Delキーで削除
    今後、複数選択に対応したら一括削除も可能にする

  • 要素の移動
    最初は要素移動をサポートしない(実装がややこしい)

  • 同一位置での重複表示
    同じ位置にテンポと拍子など複数の要素が追加される場合、グループ化されて見えるように

  • 中間の省略
    現状と変わらず

@romot-co
Copy link
Contributor Author

わずかな進捗:

  • radix-vueのEditableでインプレース編集を試行: いけそうだがEditableの動作が怪しげ(alphaだからか?)
  • 今後レーン単位で増えても問題はなさそうなのは確認
  • 要素の混在や移動も大丈夫そう
  • ダイバージョンが大きくなってきたので先にループ機能を行ったほうがよさそう(プルリクとしてまとまっている)

@romot-co
Copy link
Contributor Author

進捗:

  • レーン単位にコンポーネントとして分割: GridLane / ValueChangesLane / LoopLane

@romot-co
Copy link
Contributor Author

進捗:

  • まずはレーンを分割しループを表示できるようにした(見た目や動作の調整他これから)
Image https://github.com/romot-co/voicevox/tree/add/loop-2224

@Hiroshiba
Copy link
Member

ちょっと長らく見れてなかったのですが、全部コメントを見させていただきました!!

ポップオーバーとインスペクタの境目

「その操作と別の操作を往復するか」も1つ境目の具体的な基準になるかもと思いました!
常時表示するかどうかの十分条件の1つかも。

YES/NO式のチャート

見た感じ、選択したあとは「どの種類の操作を行う?」に戻るチャートでも良さそう!
あと何のチャートかによりますが、「専用UIを用意する」というのもありそう?
専用UIは必要ないけどやりたい操作を実現するチャート、ならこの条件はいらなそう!


ルーラー部のUIの見通しなるほどでした!! 今のところの想定に異論なしです!! なんとかなりそう!

あとここにあげられてなかったこととしては、自由記述ラベルぐらい? aメロbメロみたいな。
でもこれも他のBPMラベルとかと同じ扱いにして、グループ表示するようにすればよさそう感ありそう。

あ、もしよかったらブランチはdraftプルリクエストにしていただければ!!
今はプルリクからプレビューページが作られるようになっているので、ブラウザで挙動をサクッと確認できるので共有しやすいかなと!!

@romot-co
Copy link
Contributor Author

romot-co commented Jan 8, 2025

@Hiroshiba
ありがとうございます!

その操作と別の操作を往復するか

確かに!このあたり条件ざっくりわかりやすくなるように詰めていければーなどと

あと何のチャートかによりますが、「専用UIを用意する」というのもありそう?

これもありそうですね!専用の場所確保じゃなくてそうさとして特別なUIとか…!

適宜取り入れられればと思います!


あ、もしよかったらブランチはdraftプルリクエストにしていただければ!!

こちら承知しました!実装の方もう少しだけ調整してdraftでプルリクにいたします!

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