2024年3月-8月開発状況

毎月、開発状況を記していましたが、3月以降、気力が衰え、記しておりませんでした。
3月から8月までの状況を、ここに述べたいと思います。

Flutter

オーディオプレイヤーを作成中。

いまだ、できあがらず。

3月

  • 録音機能作成。
  • クイック再生コントロール作成。

4月

  • クイック再生コントロール部分修正。

5月

  • 「設定」のつくりの変更

「設定」について。
リピート回数や再生速度、無音検出時間など「設定」を、各教材ごとに持てるようにしたいと考えていました。
例えば、
「ロシア語単語帳」で、無音検出時間:0.3秒、再生速度:0.9、リピート2。
「英語短文練習」で、無音検出時間:0.76秒、再生速度:1.0, リピート3
といったぐあいです。

それを実現するために、階層ごとにsettingsを持たせる方式をとりました。
全般>フォルダ>選曲グループ(選曲タブ)
と階層ごとに「設定」を持たせ、実際に使用する際には、狭いスコープを優先して合成した設定を用いるというもの。
Webページのスタイルを設定するCSSで用いられている方式と同様のものです。

しかし、「設定」画面のUIが複雑化して、使いづらいものとなってしまいました。
下の図は、開発時の「設定」画面のスクリーンショットです。画面上部に各階層を示すタブがあり、その下に設定項目が並んでいます。


使ってみると、適用される設定値を把握しづらいのをひしひしと感じました。
これでは、困惑を招くと思いながら、どうにかわかりやすくなるように、微調整を重ねていました。

5月になって、方式を変更することとしました。

「ライブラリ」画面を開く操作の際に、タブごとにそれぞれの前回開いた箇所を開くようにしていたのですが、それと同様にすれば、教材ごとの設定、という目的は達成できることに気づいたからです。

各タブごとに設定を持ち、あるタブから「ライブラリ」画面を開き選曲した場合、そのタブの設定を引き継ぐ、という形にしました。
これで、上記で記した
「ロシア語単語帳」で、無音検出時間:0.3秒、再生速度:0.9、リピート2。
「英語短文練習」で、無音検出時間:0.76秒、再生速度:1.0, リピート3
のように、教材ごとに設定を持たせることが実現できました。

こちらの方式にすると、「設定」画面から、
全般>フォルダ>選曲グループ(選曲タブ)
のタブがなくなり、「有効値」かどうかを気にかける必要もなくなり、ぐっとシンプルになりました。

  • 区間再生部分を作成。
  • 設定画面のUI。widgetを作成、動作を検証し、カラーリングを調整。
  • 一部のファイルで、区切り位置が0.6秒ほど適切な位置からズレる問題

一部のファイルで、区切り位置が0.6秒ほど適切な位置からズレる問題。
https://github.com/google/ExoPlayer/issues/9408
just_audioの作者も、ExoPlayerについて、mp3ファイルでのseekについて問い合わせていた。

6月

  • Google Driveなどクラウドストレージからのファイル読み込み機能実装
  • ローカライズの処理変更
  • just_audioから自前でAndroidでのオーディオプレイヤー実装に切り替え

just_audioから自前でのオーディオプレイヤー実装に切り替え。
有音部分を再生して、区間末尾に達したならpauseするという形式でやってきました。
しかし、それだと、バックグラウンド再生の時に表示される再生用コントロールで、再生・ポーズが頻繁に切り替わってしまう問題がありました。
「有音部でクリップしたオーディオファイル」+「無音」で、ひとつのアイテムとして再生する方式を取れればよいのだが、と思っていました。
Androidでのオーディオ再生について、調べ直しました。

Media3, ExoPlayer 3の調査。
Media 3では、バックグラウンド再生がわかりやすく、やりやすくなっていました。

Jetpack Media3 の概要

ExoPlayer 3で、オーディオファイルのクリップ、無音作成、作成したリソースを繋いでひとつのリソースとしてあつかうことができました。

高度なメディアソースの構成

今回は、「クリップされた有音区間+無音」をひとまとまりのアイテムとする特殊なオーディオプレイヤーなので、just_audioではなく、自前実装でオーディオプレイヤーを作成ということにしました。

Developing packages & plugins

Flutter plugin packageとして作成。

7月

  • 単体アイテムプレイヤーからプレイリストを持つプレイヤーに変更

プレイヤーは、6月の時点では単体のアイテムを持ち、再生終了の際に別のアイテムに切り替える形をとっていたが、プレイリストをもつ形に変更。
ExoPlayerのドキュメントに示される、素直な実装になっていきました。

8月

  • ホーム画面のタブ表示修正
  • クイック再生コントロール修正
  • ダークモード修正
  • 端末のファイルを読み込む処理を改善

端末のファイルを読み込む処理を改善。
この部分は、ごく初期に実装していたもの。
AndroidからFlutterへデータを渡す際、JSON化しないといけないと思っていたため、Kotlin serializationなどのプラグインを使用していたが、見直すと不必要だと分かったので、修正。
プラグインを使用せずに良くなったので、すっきりしました。

  • 早送り・早戻しのクイック再生コントロールへの追加

8月末での状況

「設定」の作りの変更と、オーディオプレイヤー部分の見直しで、大幅に修正を行いました。
ずいぶんとすっきりしたのは良いのですが、いまだ、完成せず。
恐ろしくておののくほどの時間のかかりっぷり。

英語学習

「英語のハノン 上級」を4月18日に終えてからは、アプリ「スピーク」を漫然と続けている状況。

スピーク。
4月末までは、「ホーム」のコースをやっていました。
5月からは、「AI会話」の「トピック」の「ロールプレイ」をやっています。8月末日で、7課まで終えました。1課に6個のトピックなので、42個。
シチュエーションを与えられて、AI会話で、会話するというもの。ボタンを押して録音開始、ボタンを押してアップロード、という形式なので、テンポよく回答しないとダメとかはありません。
一通りのやり取りが終わると、AIが文法の誤りや、より良い表現を文章で示してくれます。

また、「AI会話」では、「コミュニティ」という、ユーザーがシチュエーションを設定したものもあるので、そちらもいくつかやりました。


コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください