-
Notifications
You must be signed in to change notification settings - Fork 309
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
マルチトラック:最終調整 #2176
マルチトラック:最終調整 #2176
Conversation
ついでに[update snapshots]
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です!! 変更ありがとうございます!!
ちょっと細かい部分が気になったのでコメントしてみました。
主にコーディングの提案です。
Co-authored-by: Hiroshiba <hihokaruta@gmail.com>
Co-authored-by: Hiroshiba <hihokaruta@gmail.com>
反映しました。 |
以下を行うとエラーが発生しました、
|
どうしましょう、singingStorePluginでoverlappingNoteInfosを更新する...? |
@sevenc-nanashi |
修正しました。 |
トラック2を削除して、削除をUndoすると、トラック2が再生されなくなる不具合を見つけました。 |
RENDERでtrackChannelStripsをいじるようにしました。既存のwatch用のはコメントだけのこして空にしてます、消しても良さそうではある |
多分治ったと思います。 |
|
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.
すみません、ちょっと細かいところなのですがコメントしました!
src/store/singing.ts
Outdated
// trackChannelStripsを同期する | ||
const shouldPlays = shouldPlayTracks(tracks); | ||
for (const [trackId, track] of tracks) { |
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.
今の実装だと「trackChannelStripsを同期する」と「フレーズを更新する」がセットで(連続して)実行される必要があり、「trackChannelStripsを同期」の直後にreturn
やthrow
を行うとたぶんバグるので、そのことをコメントで書いておいた方が良いかもです。
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.
正直よくわかってないです(trackChannelStripsの同期を忘れたら死ぬならまだしも)
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.
横槍すみません!
グローバル変数として定義されてるtrackChannelStrips
は現状RENDER
内でしか使ってないので、多分途中でreturnなどが実行されても問題ないはず・・・・・・?
(offlineRender側は現状trackChannelStrips
を別のローカル変数を定義して独自に同期を取ってるので)
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にノートを打ち込んで
render
完了を待つ - トラック2を削除
render
が実行され、「trackChannelStripsを同期する」でChannelStripが削除される- 「フレーズを更新する」が完了する前に
return
やthrow
を行ってrender
を終了 - 「トラック2を削除」をUndo
render
が実行され、「trackChannelStripsを同期する」でChannelStripが追加される- 続けて「フレーズを更新する」が実行されるが、フレーズは変わっていないので音声がChannelStripに接続されず、トラック2が再生されなくなる
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.
なーーーーーーるほどです!!!!!!!
問題意識がとてもよくわかりました、ありがとうございます!!!!
各phraseの音声をchannelStripにくっつける処理が、phraseがキャッシュされている場合に行われないのが原因・・・?
気づきませんでした、申し訳ないです。。
この解決、ちょっととんでもなく難しいですね・・・。全く思いつかない・・・。
ChannelStripは削除せずキャッシュしておく手がありそうですが、ちょっとワーキングアラウンド感がありますね・・・。
いやーーーだいぶ考えたんですがちょっと解決法は思いつかなかったです。。
#2176 (comment) でも @sigprogramming さんがおっしゃってましたが、音声のグラフをいじるのはRENDERと分けるとか、そうじゃなくても結構がっつり手を入れる必要がありそうに感じました。。
コメント書いておくのに賛成です。。
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.
AudioPlayerとにtrackIdとかを持たせてもう一回接続を張り直すようにする...?なかなか面倒そうなやつですねぇ
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: Sig <sigprogrammer@gmail.com>
Lines 696 to 705 in e57296e
selectedTrackId はアプリケーションレイヤーが持つ状態ではなくビュー(プレゼンテーション)レイヤーが持つ状態なので、actionで使用しない方が良いかもです。trackId を渡す形にした方が良いかも。
|
プロジェクトを読み込んだ時に歌声のレンダリングが走らなくなってるかも。 |
|
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!!
トラック1とトラック2にノートを追加してトラック2のピッチを編集した後にUndoするとSequencerPitch.vue
でエラーが発生しますが、おそらく #1961 で実装した処理に問題があってそれで発生していると思うので、修正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!!!
現状で気になった点とかはちょっとこちらで変えさせていただきます!
マルチトラックの実装、長期間ありがとうございました!!!
@sevenc-nanashi さんが実装してくださったということで、X でポストさせていただこうと思います!
とりあえず「実験的機能として追加します」みたいな感じで。
ぶっちゃけ過去の経験上、この規模と期間だと多分バグが2~3個ほど残っていると思います!!!
リリースまでにいろいろ試しまくって見つけたいところではあります!
がまあ結構難しいので、報告され次第すぐ直せればいいのかなと思ってます!
なのでリリース後もちょっと慌ただしいかもなのですが、もしよかったらお付き合いいただけると・・・・・・!! 🙏
|
||
const setMultiTrack = (enableMultiTrack: boolean) => { | ||
changeExperimentalSetting("enableMultiTrack", enableMultiTrack); | ||
// 無効化するときはUndo/Redoをクリアする |
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.
こーーーーーーーーれってなんででしたっけ。。。
一応ここのコメントにメモだけ残しておきたく。。
<SequencerPhraseIndicator | ||
v-for="phraseInfo in phraseInfos" | ||
v-for="phraseInfo in phraseInfosInOtherTracks" | ||
:key="phraseInfo.key" | ||
:phraseKey="phraseInfo.key" | ||
:isInSelectedTrack="phraseInfo.trackId === selectedTrackId" | ||
:isInSelectedTrack="false" | ||
class="sequencer-phrase-indicator" | ||
:style="{ | ||
width: `${phraseInfo.width}px`, | ||
transform: `translateX(${phraseInfo.x - scrollX}px)`, | ||
}" | ||
/> | ||
<SequencerPhraseIndicator | ||
v-for="phraseInfo in phraseInfosInSelectedTrack" | ||
:key="phraseInfo.key" | ||
:phraseKey="phraseInfo.key" | ||
isInSelectedTrack |
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つに分けた理由って何でしたっけ。
phraseInfosInOtherTracks
とphraseInfosInSelectedTrack
をtemplateの中でくっつけた後
:isInSelectedTrack="phraseInfo.trackId === selectedTrackId"
で判定させる手もありそう。
なんか色々あった結果そういうこともできるようになったんでしたっけ。
それとも意図あってこうなったんでしたっけ。
const noteEndPositions = notes.map((note) => note.position + note.duration); | ||
const lastNoteEndPosition = Math.max(...noteEndPositions); |
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.
(別にこれでもいいんですが)
たぶんreduceでmax書けるはず。
commit("COMMAND_SET_TRACK_MUTE", { trackId, mute }); | ||
dispatch("RENDER"); |
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.
この設計方針、もしまとまりそうだったらissueに文章化しても良いかも?
内容
shouldPlayTracks
の返り値をSetにします。関連 Issue
スクリーンショット・動画など
その他
(なし)