-
Notifications
You must be signed in to change notification settings - Fork 311
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
連続再生中にバックグラウンドで音声を合成する #1774
連続再生中にバックグラウンドで音声を合成する #1774
Conversation
13ec568
to
b0e6ef1
Compare
コンフリクトなかったのでforce-pushしました |
b0e6ef1
to
9450beb
Compare
9450beb
to
b4993b3
Compare
#1773 がmergeされたのでrebaseしました. |
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.
generate系とplay系を分けて直列じゃなくしつつ、eventドリブンにする感じですよね!!
なるほどです!!
audioContinuousPlayer.ts
の設計について提案(相談?)が!!
現状のコードだと、Player側がどの状態からどの状態への遷移を担っていて、どの変更を外部に依存するのかちょっと見えづらいかもと思いました。
(おそらくgenerateStart→EndとplayStart→Endの遷移がPlayer外の処理依存)
いっそFETCH_AUDIOとPLAY_AUDIO_BLOBをDI可能にし、全状態遷移をPlayer内で可能にするとかどうでしょう?
こうすればaudio.ts
側はただlistenして表示変えれば良いだけにできそうだな~と。
(DIする関数の型はそのままだとちょっと密結合になりそうな気もしますが・・・。)
その場合もはやPlayerじゃないのですが、まあ・・・!
ef59ee6
to
8760370
Compare
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.
こんな感じでしょうか.commit
とdispatch
のうち必要なものだけがあればいいように型を決めてあります(これが正しいのかはよくわからないのですが……)
@cm-ayf 切り出しがきれいなので、密結合の回避もできるのではと期待している感じです! |
8760370
to
7243a5e
Compare
そのようにしました. |
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!!!
とてもきれいなクラス切り出しだったと思います、ありがとうございます!!!
もしよかったら別タスクにも挑戦してみて頂ければ嬉しいです!!!
まだまだ少ないのですが、リファクタリング関連のタスクをこちらにまとめてみています。
Vueに触れてみる感じだとSettingDialog.vueでコピペされてる部分をv-forにする
とか。
(もしwebフレームワークに触れたことない感じでしたら、VueやReactはだいぶ面白いと思います!!)
Vue関係ないところだと、かなり大変だと思うけどこちらとか・・・!
もしよかったらぜひ!! 🙇
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.
こういう形にもできるかな?と少し変えさせていただいたので、pushさせて頂いてマージしたいと思います 🙇
変更点は主に2つです!
- audioContinuousPlayer.tsから他のstoreへの依存をなくす
- 必要な関数2つをDIする形へ
問題なさそうだったらマージします! |
ありがとうございます,これで大丈夫です! |
こちらこそありがとうございました!! もしよかったらまたぜひ!!! |
内容
連続再生中に,バックグラウンドで音声を合成します.これにより,合成速度が再生速度を上回る場合,連続再生は途切れなく再生されるようになります.
EventTarget
を継承した管理クラスのインスタンスにより,「合成が完了したら,次の合成を発火して,さらに再生中の音声がなければ今できたものを再生する」といったような処理の集合として実装しています.かなり複雑になりましたが,うまく動いてくれるようになりました.補遺
最初のロードや,短い文の後に長い文が来て事前に合成が終わっていない場合など,どうしても待ち時間は存在します.ここではローディングのダイアログが出ます.
停止ボタンは,再生中は押すことができます.しかし,バックグラウンドで合成しているものがあれば,それが合成し終わるまで操作できません.なお,合成が終わったら他に再生されることなく,操作が可能になります.
フローを表す図を置いておきます.
Mermaidのソース
関連 Issue
ref: #1773 (このPRの後にmergeする必要があります)
closes: #254
スクリーンショット・動画など
(録画方法の都合で,音と画が若干ずれています)
video1038941970.mp4
その他