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 · 12 comments
Open
3 tasks

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

romot-co opened this issue Dec 7, 2024 · 12 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

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