-
Notifications
You must be signed in to change notification settings - Fork 305
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
ソング:音素タイミングの編集をクエリに適用する関数とそのテストを追加 #2356
base: main
Are you sure you want to change the base?
ソング:音素タイミングの編集をクエリに適用する関数とそのテストを追加 #2356
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.
一旦まだテストまでしか見れていないのですが、ひとまずコメントまで!
設計良さそうに感じました!!
(テストから気持ちが読み取れるのですごくわかりやすかったです!!)
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.
Copilot reviewed 3 out of 3 changed files in this pull request and generated no suggestions.
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!!
コメントドキュメントが多くてすごい読みやすかったです!!
ちょくちょくコメント書いていますが、まあぶっちゃけ全部そのままでも問題はなさそう!
共感できるのあったらくらいの気持ちです 🙏
準備できたらマージの合図いただければ!
src/sing/domain.ts
Outdated
function secondToFrame(seconds: number, frameRate: number, round = true) { | ||
const frame = seconds * frameRate; | ||
return round ? Math.round(frame) : frame; | ||
} |
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.
round=falseが使われてないので削除したほうが簡潔になりそう?
function secondToFrame(seconds: number, frameRate: number, round = true) { | |
const frame = seconds * frameRate; | |
return round ? Math.round(frame) : frame; | |
} | |
function secondToFrame(seconds: number, frameRate: number) { | |
const frame = seconds * frameRate; | |
return Math.round(frame); | |
} |
まあデフォルト引数パラメータは把握しきるのが難しいので、小さい関数ではなるべく避けたい気持ちがあるくらいの気持ちです。
あまりない考え方かも・・・ちょっと自信ないです 🙇
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.
roundすると情報が減るので、roundされることに気付けるようにround = true
にしています。
(roundせずに単位の変換のみ行いたい場合も考慮して引数にしているのもあります)
デフォルト引数をやめて、毎回roundを指定するようにした方が良いでしょうか…?
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.
なるほどです!!
意図を示すためにデフォルト引数を使うのは、自分の周りでは結構珍しいかもです。
roundされてるということを伝えるのは、関数にRoundedとか含めるとより確実かも・・・?
まああとはYAGNI原則に従って必要になったらround引数足すという考え方もありかも。
あと直接関係ないですが、「特に記載がない限りFrameは整数である」としておくと例外を考えずに済んで全体的にコーディングしやすいかも?とちょっと思いました!
(これは全く強い意見じゃないです 🙏 )
まあでも今回はローカル関数で影響範囲小さいし、デフォルト引数があっても良いかもと思いました!
その場合も「第2引数がfalseだったらroundされない」は初見でコード読んでるときに気づきづらいので、{round: false}
みたいに名前付き引数のような感じで渡せるように作るとより可読性上がるかもです。(これもあまり強い意見じゃないです 🙇 )
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.
ありがとうございます!
ひとまずround
引数を無くしてsecondToRoundedFrame
にしました!
let cumulativeFrame = 0; | ||
for (const phoneme of phonemes) { | ||
phonemeTimings.push({ | ||
noteId: phoneme.noteId != undefined ? NoteId(phoneme.noteId) : undefined, |
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.
(ただのコメントです)
FramePhoneme
型の.noteIdがNoteId型になってるEditorFramePhoneme
みたいなの用意しても便利かもですね!
|
手元の環境では動きました!! |
|
内容
音素タイミングの編集をクエリに適用する関数と、その関数のテストを追加します。
音素タイミング編集の適用と調整の流れ
FramePhoneme[][]
→PhonemeTiming[]
[r a] [pau]
→[r a pau]
PhonemeTiming[]
→FramePhoneme[][]
関連 Issue
その他