-
Notifications
You must be signed in to change notification settings - Fork 312
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
feat: [project-sequencer-statemachine] 調整 #2526
feat: [project-sequencer-statemachine] 調整 #2526
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SequencerStateIdを追加し、ステート遷移時にコールバックを呼び出すようにする
こちら何に使う予定か目的が知りたいです!
というのも、この変更で状態遷移に応じてコンテキストを変えるのを、ステートマシンの中で実装するパターンと、外で実装するパターンが選べるようになった(なってしまった)と思います。
どういう時にどっちを実装するべきなのかの指針をコメントに書いて送って良さそう!
簡単に実装するのはステートマシーンの外なので、プルリクエストでの実装がそちらに偏りそうだなーと。
なので可能なら避けれると良さそうだなと思い、一旦理由を聞いてみたいなと!
InputのtargetAreaを修正
こちらは疑問というよりは提案です!
targetArea: "Document" にする等の実装がされてますが、これはおそらく今のmainブランチの実装と違うんじゃないかなと思ってます。
mainブランチと異なる実装は、1回ステートマシンをmainブランチにマージしてからの
方が結果的に良さそうかなーと。
挙動が変わりうるので、もしバグが発生した場合に原因を探しづらくなるはず。
目的はステートマシンへの置き換えだと思うので、まずそこに注力できると!
(改善策を思いついたときはTODOコメントを書くと良いかも)
previewNoteIds
を追加
こちらは何に利用する想定でしょうか 👀
onEnterでもsetNextStateできるようにして、ノートの追加をすぐに適用できるようにする
こちらも何に利用するか知りたみです!
ペースト処理あたりかもですが、であればちょっと危ない実装だなーと・・・!
いくつもの変更が1つになっていますが、小分けにしてプルリクエストいただけた方が結果的に早いかもです・・・!
(まあ結構面倒だとは思うのですが、その分手戻りを減らせ、より良い設計ができ、バグが減らせる・・・・・・かも!)
currentStateIdからPreviewMode(SequencerNoteで必要)に変換する目的でonStateChangedを追加しましたが、
今のmainブランチの実装と同じです。(documentとwindowにイベントリスナーを登録しています) voicevox/src/components/Sing/ScoreSequencer.vue Lines 1777 to 1782 in 074bcec
以下のようなpreviewNotesからpreviewNoteIdsを算出する形 const previewNoteIds = computed(() => {
return new Set(previewNotes.value.map((note) => note.id));
}; だと、previewNotesが更新されるたびにpreviewNoteIdsのcomputedの処理が走ってしまうので、プレビュー開始時に1回だけ設定(更新)されるpreviewNoteIdsを追加しました。
ノート編集の選択優先ツールでダブルクリックしたときはノート追加になりますが、このノート追加では「ドラッグでノートの長さを決める」というのは行わずに、すぐにノートの追加を適用させる必要があります。 voicevox/src/components/Sing/ScoreSequencer.vue Lines 1442 to 1448 in 074bcec
それ専用のステートを新たに作っても良いですが、コードの重複が発生しそうだったので、ひとまずAddNoteStateにapplyImmediatelyAndExitを渡して切り替える形にしました。
承知しました、こちらのPRはひとまずcloseして、上から順に一つずつPRしていこうと思います…! |
内容
以下を行います。
executeNotesSelectionProcess
を、selectNotesInRange
、toggleNoteSelection
、selectOnlyThisNoteAndPlayPreviewSound
に分割( 016265a )関連 Issue
その他