-
Notifications
You must be signed in to change notification settings - Fork 304
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
ソング:再生位置の表示形式を変更できるようにする #2306
ソング:再生位置の表示形式を変更できるようにする #2306
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.
@sigprogramming
ありがとうございます!確かに小節単位でわかった方がよいことも多く、
わかりやすそうです!
取り急ぎ思ったこと:
- もしかしたらdecimal部なくてもいいかも…?
- いまどっち単位なのか表示あったほうがいいかも
- 単位切り替えを右クリック以外でつけるのもありかも
たとえば以下のような…?
2024-10-20.0.22.33.mp4
その他、実装問題なさそうです!ありがとうございます!!
@romot-co
少数部が無い場合、スナップが16分未満(32分など)のときに再生位置を正確に表せなくなるので、再生位置の表示を見ながらペーストを行うと、意図した場所にペーストされなかったりが起こるかも…と思いました!
確かに単位があった方が分かりやすいと思いますが、単位を横に表示する形だと、「小節」の場合は一番左の数字が小節を表しているということが伝わらないので、拍のところを小節と勘違いしたりが起こるかも…と思いました!
上記の単位表示の問題が解決できれば、動画のようにボタンで切り替えられるようにするのもありだと思います! |
参考までに: reaper.mp4Reaperの場合は拍を100等分したものをdecimal部にして |
機能追加良さそう!! @romot-co さんのボタン案は、よくあるトグルボタン問題で、ラベルが「今表示されているもの」を表すのか、「押されたらそれになるもの」を表してるのかわからん問題も発生しそうに思いました! まとめるとこかなと思ってます:
個人的には誰もが必ず欲しい機能ではないと思うので、右クリックが良さそうなのかなと思いました! (あ、これはボタンか右クリックどちらかだと右クリック良さそうという気持ちです!) |
@sevenc-nanashi
|
@Hiroshiba
少し気づきづらいですが、切り替えたくなることもそんなにないと思うのと、切り替えたくなった人は再生位置のところを色々弄っているうちに気づくかもと思ったので、ひとまず右クリックで実装できればと思います!
ひとまず右クリックメニューの表記を
ツールチップも試してみたのですが、右クリックしたときに右クリックメニューと被って少しいまいちな感じでした…
左クリックだと、誤ってクリックしたときに戻し方が分からなくなるかもと思いました…! デフォルト表示は |
表示モードを設定として保存するようにしました。 |
hover時にunderlineを引いてClickable感を出しつつ、左クリックでコンテキストメニューを出すとかを思いつきました。ワンクッション挟まるのでそんなに事故らない…はず? |
@sigprogramming
これは結構自信を持って、とっつきやすさ優先で分・秒のが良いと感じてます。 @sevenc-nanashi |
@Hiroshiba
StudioOneはこの形ですが、スペースをとってしまう&複雑なUIに見えてしまうので、一旦右クリックで…! @romot-co |
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.
あ、もうレビューしちゃっても大丈夫そうでしょうか 👀
とりあえず見た目周りで気になったことだけコメントしてみました!
<div v-if="displayFormat === 'MeasuresBeats'" class="playhead-position"> | ||
<div>{{ measuresStr }}.</div> | ||
<div>{{ beatsIntegerPartStr }}</div> | ||
<div class="beats-fractional-part">.{{ beatsFractionalPartStr }}</div> |
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.
(割とただのコメントです)
ここの更新速度が早すぎて、若干目が使えるなと感じました!
ただまあ、別にこれでいい感じなのかなーとも思ってます。どうしようもない!
Co-authored-by: Hiroshiba <[email protected]>
@Hiroshiba |
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.
新しく増えたコンポーザブルに関してコメントしました!!
ちょっとリファクタリング頑張ろうとしたんですが、2時間かけて挫折しました。。。。。
src/sing/domain.ts
Outdated
@@ -9,6 +9,7 @@ import { | |||
PhraseKey, | |||
Track, | |||
EditorFrameAudioQuery, | |||
MeasuresBeats, |
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.
(ただのコメントです)
domainからstoreの型をimportしてるの、逆な気がしますね!!
今回のこの型に関してはstore側で全く使ってないので、多分こっちに定義する方が良さそう感あります。
まあ、いずれ移動すると良さそう・・・!
(src/sing/type.tsとかにでも。)
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.
Tempo
やTimeSignature
の型もsrc/store/type.ts
で定義していますが、domain.ts
で型を定義してsrc/store/type.ts
でインポートする形が良いでしょうか?
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.
個人的にはそちらの方があってるように感じます!
解釈としては、
- store/typeはVuexのStoreの中で出てくるtype
- が理想な気がするけど、現状いろんなものが置かれまくってしまっている・・・!
domain/sing
- 何をドメインとするかわからないけど、少なくとも音楽や歌系の単位や型はここに置いても良さそう
- domainはレイヤードアーキテクチャ的にはいろんなものから参照されて良いものなので、こっちを上流にすると良さそう
みたいな感じかなと!
ただ色々移動になってしまうと思うので、一旦このプリリクエストじゃないほうが良いのかもな~と思い、とりあえずコメントしてみた感じです!
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.
なるほどです!
ひとまずMeasuresBeats
のみdomain.ts
に移しました!
const playheadPosition = new FrequentlyUpdatedState(0); | ||
const playheadPosition = ref(0); // 単位はtick |
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.
(ただのコメントです)
なるほどです、globalにrefを定義する感じなんですね!!
知らなかったんですが、Vue的にもglobalにref変数を作るのは合法っぽみ!
https://ja.vuejs.org/guide/scaling-up/state-management#simple-state-management-with-reactivity-api
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.
ちょっとこちらのプルリクエストとは関係ないのですが、たしか @romot-co さんに以前globalなrefを定義していいのか分からないとお伝えした記憶が蘇りました。
ドキュメントで例として案内されているので、グローバルに定義しても問題なさそうな雰囲気でした・・・!!! 🙇
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.
ほぼLGTMです!!!
めちゃめちゃすっきりしてそう・・・!!!
@@ -23,7 +29,7 @@ export const isTracksEmpty = (tracks: Track[]) => | |||
export const isValidTpqn = (tpqn: number) => { | |||
return ( | |||
Number.isInteger(tpqn) && | |||
BEAT_TYPES.every((value) => tpqn % value === 0) && | |||
BEAT_TYPES.every((value) => (tpqn * 4) % value === 0) && |
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.
PRと関係ないですが間違いに気づいたので修正しました…!
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.
LGTM!!!
リファクタリングによってコードがスッキリして嬉しいです!!
コンフリクトが起こっていますが、おそらくstore.discpatch("HOGE")
がstore.actions.HOGE()
に変わったあたりの影響だと思うので、こちらで解消させていただこうと思います!
内容
以下を行います。
分:秒.ミリ秒
形式(デフォルト)小節.拍.100分
形式MeasuresBeats
型を追加playheadPosition
周りを変更isValidTpqn
の処理を修正関連 Issue
close #2305
スクリーンショット・動画など
2024-10-19.123403.mp4
その他