Skip to content
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

再生位置指定機能と、再生位置フォーカス・スクロール機能の追加 #578

Merged
merged 46 commits into from
Jan 23, 2022

Conversation

y-chan
Copy link
Member

@y-chan y-chan commented Dec 12, 2021

内容

題の通り

関連 Issue

close #491

スクリーンショット・動画など

2021-12-13.01-13-34.mp4

その他

watchを使っている関係上、開発時点でのホットリロードが入るとバグります。
現状の私には解決策がわからなかったです...

Copy link
Member Author

@y-chan y-chan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

議論の余地がある点をコメントしてみました。

@Hiroshiba
Copy link
Member

UI触ってみました!すごく良いですね!!
更にユーザビリティを増せるような案がいくつか思いついたのでコメントしてみます!

  1. アクセント句を選択していない状態から再生・停止すると、一番最初のアクセント句が選択状態になりますが、再生する前の状態に戻る(無選択状態に戻る)と混乱を減らせるかなと思いました。

  2. 無をクリックすると選択状態になりますが、可能なら無じゃなくできるととても良さそうです。アクセント句をマウスオーバーするとアクセント句がマウスオーバーされていることがわかるようにし、かつクリック可能なところはマウスカーソルを変えてあげると良いのかなと感じました。

  3. スクロールの追従ですが、DTMソフトとかはよくページめくりになっているので合わせられると良いかもと感じました。そちらのほうが疲れにくいかもです。(どう感じるか、ちょっと自信ががないです・・・)

あと実装なのですが、おそらくこの「アクセント句の選択」状態は今後もずっと使っていくことになると思うので、ユビキタス言語を何にするかも考えたいかもです。
実装ではPointでしょうか。他にもActiveAccentPhraseやSelectedAccentPhrase、あるいはPointを採用してActivePointとかSelectedPointとかでも良いのかなと感じました!

@y-chan
Copy link
Member Author

y-chan commented Dec 16, 2021

無選択状態に戻る

そうですね、この挙動は不自然なので、修正します。

無をクリックすると選択状態になり

こちらも対応します。

ページめくり

実験的ですが、少し実装してみました。

2021-12-16.14-59-48.mp4

こちら、アクセント句が一部でも映っていれば、スクロールをしないようにしてみたのですが、どうでしょうか...
一部しか映っていない場合、全部映るようにスクロールすべきですかね...?

この「アクセント句の選択」状態は今後もずっと使っていくことになると思うので、ユビキタス言語を何にするかも考えたい

確かに、私の実装で新たなユビキタス言語が増えてしまっていましたね...
個人的には、AccentPhraseと打つのが長いので、Pointという新たな呼び名を命名したのですが、これはこれでよさそうな気がしていて、かつ今までアクセント句を選択するという概念がなかったので、ActivePoint(ActiveAudioKeyは再生されるものが変わるたびに変わるので、それに従ってみた)が良いかなと思いました。

@Hiroshiba
Copy link
Member

ページめくり良いですね!!

アニメーションを見たときの疲れを最小化するのが最も良いと思っていて、どうすれば良いのかを考えてました。
たぶん疲れは、時間辺りの見た目の変化量が大きいほど・予測できない動きをするほど増えると思っています。
なので横方向の縮尺をより広くできたり、ページ送りする際に再生中のAccentPhraseが必ず一番左に来たりすると、更に良いのかなと感じました。
(後者は最後の方のAccentPhraseを再生するときに、予測できない動きになったのが気になりました)

あと見た目が全く変わらないという選択もできるように、スクロールのON/OFF機能はぜひほしいなと感じました。

とはいえ、一旦実装してから考えるのがOSS的に良いのかなと思います!
ぱっと実装できそうなところは実装をお願いできると嬉しいです。
難しそうなところはマージ後にissue化しちゃうというのはどうでしょう。

個人的にこのプルリクエストでは、こんな感じの実装になっていればよいのかなと感じています。

  • 自動スクロールができる
  • ON/OFFが切り替えられる
  • 連続再生・ページ送りが切り替えられる(もしくはoff/連続/ページで3択)

あと、追加でこうしたほうが良さそうと思ったのですが、連続再生時はAccentPhraseの左側の位置を固定ではなく、中心の位置を固定できると嬉しいかもです。
それと、AccentPharseの区切りは背景色が無い方がわかりやすいかなと感じました。

プルリクエストの範囲をどこまでにするかはお任せします・・・!
(個人的にはできるかぎり小さめだと嬉しいです。)

ActivePoint

良いと思います!

@y-chan
Copy link
Member Author

y-chan commented Dec 17, 2021

横方向の縮尺をより広くできたり、ページ送りする際に再生中のAccentPhraseが必ず一番左に来たりする

縮尺の変更は破壊的変更になりそうで、例えば縮尺を開くすると操作UIが小さくなりUXが下がることが見込まれ、私には実装も難しそうなので、要議論な気がしました。
必要であればIssueへの切り分けをすべきだと思います。

AccentPhraseが必ず左に来るようにするのは、仰る通りUIの崩壊が起きる気がしていて、私にもパッときれいに実装する方法が思い浮かばないので、妥協案として現状のままで行きたいというのが私の今の考えです。
また、再生したいアクセント句を中央辺りで選択した場合に、それがいきなり左に動くのは疲れを伴う挙動な気がした(フォーカス部分が行ったり来たりすることになると思うので)のですが、どうですかね...

連続再生・ページ送りが切り替えられる(もしくはoff/連続/ページで3択)

個人的には、最後にこの状態になればいいかなと思っています(ユーザーにとっては選択肢が多い方がいろいろな使い方ができると思うので)
切り替えまでこのPRで実装するのは変更量が肥大化するので、一旦避け、ページめくりのみ有効化したいと思います。

連続再生時はAccentPhraseの左側の位置を固定ではなく、中心の位置を固定できる

こちら、以下のように実装しました(現在はコメントアウトしており、ページめくりが有効化されています)。

2021-12-17.11-02-37.mp4

完全なセンタリング(端のアクセント句は除く)になったので、結構動きが少し少なくなって見やすくなった気がします。
なので、これに切り替え出来るようにすれば、うれしい人もいるのではないか(私は逐次追従のほうがうれしい人です)と思います。
ただ、先ほども言った通り、切り替えは別PRにて実装するつもりです。

AccentPharseの区切りは背景色が無い方がわかりやすい

確かにそう思ったのですが、では読点()はどうしようか、と少し思いました(現状は読点の時間もフォーカスをしています)。
どうすべきなんでしょう...

ActivePoint

現状、playPoint/PlayPointとなっている点を、activePoint/ActivePointに変更しました。

@Hiroshiba
Copy link
Member

縮尺

要望いただいたこともあるし、必要そうな気がしているのでissue化したいかなと思いました・・・!

また、再生したいアクセント句を中央辺りで選択した場合に、それがいきなり左に動くのは疲れを伴う挙動な気がした(フォーカス部分が行ったり来たりすることになると思うので)のですが、どうですかね...

たしかにフォーカスしている箇所が即左に表示されるのは良くないと思います。ページ送りする際に一番左に来るイメージでした。

では読点(、)はどうしようか

たしかに・・・
まあ、読点も含めなくてもそこまで問題ないのでは、とちょっと思いました。

@y-chan
Copy link
Member Author

y-chan commented Dec 21, 2021

issue化したい

なるほど、では別問題として扱うということで、ここでは考えないこととします。

ページ送りする際に一番左に来るイメージでした。

すみません、最初からそう書いてあったのに文意が読み取れてなかったですね...

読点も含めなくてもそこまで問題ない

これに関しては、読点の左右どちらでもアクセント句の結合操作ができることがまず問題な気がしています。
現状の仕様から変更するということはしないでおこうと思いますが、別Issueとして切り出したい問題のように思っています。
ただ、現状の作り的に読点の間もフォーカスが続くのと、読点の時間も制御可能であることから、読点部分の右側の区切り(本当のアクセント句の区切り)部分だけをフォーカスしないように作ろうかと思いますが、どうでしょうか?

@Hiroshiba
Copy link
Member

ただ、現状の作り的に読点の間もフォーカスが続くのと、読点の時間も制御可能であることから、読点部分の右側の区切り(本当のアクセント句の区切り)部分だけをフォーカスしないように作ろうかと思いますが、どうでしょうか?

なるほどです、確かに読点の右の隙間(アクセント区の右端)が含まれなければOKな気がしました!そちらでお願いします!

@Hiroshiba
Copy link
Member

@Segu-g @MT224244 レビューお願いできると助かります・・・!

Copy link
Contributor

@MT224244 MT224244 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

レビューが遅れて申し訳ありません…。
気になった点をコメントしました。

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ちょっとまだ全部見れていないのですが、コメントしてみました!!

@y-chan
Copy link
Member Author

y-chan commented Jan 18, 2022

本PR内で、挙がっていた問題の修正、設定画面の追加までやってしまいました。
少し変更量が多いですが、よろしくお願いします...!

2022-01-19.03-26-41.mp4

P.S. 加えて、アクセント句追従の間隔を0.1秒から0.01秒に変更しました。
やはり0.1秒だとちょっとラグいように感じてしまうのと、0.01秒でもCPU使用率等問題がなさそうであることを確認したので、適用した次第です。

});
};

// 再生開始位置・話速変更時に、play offsetを更新する
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

いろんなとこでsetPlayOffsetが必要になってて、ステートの変更がややこしくなってそうだなと感じました。
将来この関数を呼ぶべきタイミングで呼び忘れてしまうことがそこそこ想像できそうです。

startPointをvuex側で持っておいてplayOffsetを再生時のタイミングで計算するようにすると綺麗になるかもです。

Copy link
Member Author

@y-chan y-chan Jan 19, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

将来的な改変(音素単位等での再生位置指定)のことを考えてaudioPlayOffsetのみをVuexに持たせていましたが、もはやその必要もなさそうな気がするので、仰る通り再生開始アクセント位置をVuexに持たせ、再生する度に算出するのが綺麗そうですね...
その方向で修正してみます。

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

あ、仮にそうなった場合はおそらくstartPointに音素単位の再生位置情報が含まれると思います。
であれば、startPointをVuexに持たせておけば自然な拡張でaudioPlayOffsetを計算できるかもです・・・!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

audioPlayOffsetをstore内で持つ必要がなくなったこと(将来的な目的で残してもいいが、冗長になる)から、audioPlayStartPointに変更し、accentPhraseOffsetsGET_AUDIO_PLAY_OFFSETS actionとしてVuexに移動させました。
若干気持ち悪さが残りますが、私的にはこれ以上綺麗に書けそうになかったです....

@y-chan y-chan force-pushed the feature/selectable-play-point branch from 1dbb197 to 4d7d0ba Compare January 19, 2022 13:58
@y-chan
Copy link
Member Author

y-chan commented Jan 21, 2022

頂いた指摘の改善をしてみました。
レビューお願いします...!

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!

1つだけ、修正してもしなくてもというコメントをしてみました。

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

すみません・・・。
試しに利用していたときに気づいたことを1つだけ修正お願いしたいです。

途中から再生し始めたとき、一瞬だけ1つ前のアクセントフレーズが光りそうです。
https://user-images.githubusercontent.com/4987327/150687927-65697741-8295-406e-b275-8d1f37383e4b.mp4

たぶんユーザーさんから目が疲れる的な指摘をもらいそうなので、なんとかして防ぎたく。。

@y-chan
Copy link
Member Author

y-chan commented Jan 23, 2022

調べてみたところ、currentTimeをセットした後、再生時に小さい値が切り捨てられることによって少し時間が戻るということが起きているようでした。
微小かつ、切り捨てられないギリギリの値を加算することで対応してみました。
また、AudioDetail.vue内のactivePointの移動条件を厳密化しました(<から<=へ)。

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

素早い修正ありがとうございます!!

何回もリクエストをお願いしてすみません。。
よくあるページ送りの実装は、見えていない部分があるときに先にスクロールする感じになっていると思うので、アクセント句のうち見えないところがあったらスクロールという処理に変えて頂けると・・・。。

@y-chan
Copy link
Member Author

y-chan commented Jan 23, 2022

アクセント句のうち見えないところがあったらスクロール

対応しました...!

Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!!

需要の有りそうな2つの機能の実装、ありがとうございました!!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

途中から再生する機能
3 participants