【朗報】自主開発アプリに初のアプデ実装!かゆいところに手が届く便利仕様にしてみた【UH Music Player】

2026年8月26日 OpenAI / ChatGPT Go 海外大手メーカー製 1,400円
うはるん 開封厨
うはるん
総合 26 5,457pt

ブログを書くのが好きなキモオタクです😊
ガジェット趣味のルーツはauのガラケーと2000年代のウォークマン。カメラも好き。
カブトムシとクワガタとチャッピーとGemini飼ってます。

Amazonのアソシエイトとしてガジェッターは適格販売により収入を得ています
GUIDE

修理/メンテ/改造/開発/DIY

難産だったサムネ
難産だったサムネ

みなさまこんにちは、うはるんです。




なんちゃってプログラマーと化したうはるん



gadgeteer.jp
リンクカード
gadgeteer.jp

今回は、前回の記事続報的な内容になります。


前回の記事でお伝えした通り、私は、


  • プロデュース:ワイ(うはるん)
  • コード生成:Gemini / ChatGPT


というメンバー(?)で、「UH Music Player(Lite)」と名付けたオリジナルのミュージックプレイヤーアプリの開発を進めています。

Geminiはベースとなったコードを書いてくれたのですが、トラブルシューティングがあまりにも使えなくて、結局その後はチャッピーに全て任せています。


また、今回のアプリ開発は別に不特定多数に向けてPlayストアで公開することは目標としておらず

あくまで自分自身の(AIを用いた)創作としてどこまで作りこめるか、といった自己満足を目的に行っております。



なんたって、Playストアで公開して他の人のスマホで怪しい動きとかしちゃったら責任取れないからね




そして、早速のアプデが実装される。



モザイクを貫通するジャケット写真たち
モザイクを貫通するジャケット写真たち

実用版が完成した後も、チャッピーとおしゃべりしながらコツコツとアプリ開発を続けてきました。


そしてついに、初の大型アップデートの実装まで漕ぎつけました。


とはいっても、あらゆる箇所を追加するためにデバッグのためにAPKを生成してADBコマンドで実機にインストールして動作確認を行っているので、

初回版完成から今回のアプデ版までに、24個ほどのAPKを生成しております



今回は検証(デバッグ)しなければならない動作パターンが多岐にわたったため、
バグ潰しは困難を極めました。


そんで、一体どんな機能が追加されたんだい?


そしたら、次の項目で実装した機能を実際に見ていこう!



今回のアプデの追加内容


  1. イヤホン抜去時再生停止機能の実装
  2. 出力先モニタリング・表示機能の実装
  3. 楽曲情報・再生状況取得システムの軽量化
  4. UIの細かな改良バグ潰し


ひとつづつ詳しく見ていきましょう!



1.イヤホン抜去時再生停止機能



これは文字通りの機能です。というか、プレイヤーアプリならごくごく当たり前のように搭載されている機能ですが、UH Music Playerにもちゃんと組み込みました。


写真では、有線イヤホンを接続中に音楽を再生している様子ですが、ここで急にイヤホンを引っこ抜いてみます




下部のボタン群。元々は一時停止マークだったのが、再生マークに変わっています。もちろんボタンには触れていませんよぉ?


これはつまり、アプリ側が再生中にイヤホン出力からスピーカー出力に切り替わったことを検知して

スピーカーから音楽は一瞬たりとも流させない!!!

という強い意志のもとに、再生を自動で停止してくれています



不慮の事故などでイヤホンがすっぽ抜けてしまったり
Bluetoothデバイスとの接続が解除されてしまったときに、
端末スピーカーから爆音が鳴り響いて電車の中などで恥ずかしい思いをしないように、という
安全機能なのです。


本機能は環境設定でオンオフを切り替えられるようになっておりますが、

安全機能という役割を持たせているので、アプリインストール直後のデフォルト状態でONになっています。

なので、設定してなくて電車の中で爆音が鳴り響くという心配もありません。ユーザー側が弄らない限り。




2.出力先モニタリング・表示機能


右のモザイク、某先輩じゃないですよ???
右のモザイク、某先輩じゃないですよ???

1と合わせて、端末スピーカーでの誤爆事故防止機能となっています。

ですのでこちらも、インストール直後のデフォルト状態でオンになっています。


ライブラリ画面の右上に、スライダー型の表示UIを追加しました。

これは、現在音楽が端末スピーカーかそれ以外のところか、どちらから流れるようになっているのかをリアルタイム表示してくれます。


端末スピーカーから流れる状態であれば、写真のように左側のスピーカーアイコンのところへ。



有線イヤホンUSBオーディオBluetoothデバイスから流れる状態であれば、右側のヘッドホンアイコンのところへスライダーが移動します。


このUIが表示されるライブラリ画面を表示した状態で

イヤホンを引っこ抜いたり、逆にイヤホンを接続したりBluetoothデバイスの接続・接続解除を行うと、

ぬらーっとしたアニメーション表示でスライダーが移動します。これは見ていてめちゃくちゃ気持ちいいですし、現在の出力先が一目でわかって超絶便利です



神経質で心配性なうはるんは、

電車やバスの中で音楽を聴くとき、「本当にイヤホン接続されてるだろうな?」と疑いながら恐る恐る再生しています。

今回追加したこの機能があれば、そんな必要もなくなるわけですね。



ひとつ重要な仕様として、このスライダーは、

あくまで表示機能でありユーザーの手で切り替えるスイッチではないので、

タップしたい欲が出ないように、あえてスライダーを見えにくいグレーの色に設定しています



最初はこのアプリのテーマカラーであるにしたのですが、
いかにもタップして切り替えられそうな雰囲気を醸し出していたので、即刻グレーに変更しましたw



もちろん、ダークモードにも対応です。




全画面プレイヤーではさらに詳細に表示



全画面プレイヤーでは、アイコンだけでなく文字で詳細に表示される他、


  • 本体スピーカー
  • 有線ヘッドホン
  • USBオーディオ(USB-DACやタイプC直結イヤホンなど)
  • Bluetoothデバイス(イヤホンかスピーカーかの判別はなし)


の4つの属性を認識して表示してくれます。



4種の出力先のアイコンと表示をひとまとめにした画像
4種の出力先のアイコンと表示をひとまとめにした画像

こんな感じで、わかりやすいアイコンと文字で表示されます

これらアイコンは全てチャッピーが生成してくれました。スピーカーとヘッドホンはチャッピーが勝手に考えてくれたものを、USBオーディオとBluetoothデバイスはワイ考案のものをチャッピーにアイコンとして出力してもらいました。



USBやBluetoothのマークは勝手に使ったらアカンらしいので、
権利面をクリアにしつつわかりやすいものを考案したつもり


なお、この全画面プレイヤー用表示も再生中の出力先変化をリアルタイムでUIに反映させてくれます




そしてもちろん、こちらもダークモード対応です。




3.楽曲情報・再生状況取得システムの軽量化



これは今回、音声の出力先を500ms(毎秒2回)ごとに監視してUIに反映するという処理を追加したために処理しなければならないことが増えてしまったために、

端末によっては動作が重くなってしまったのでそれを解決するため、既存のシステムの無駄な部分を省いて軽量化に努めました。



gadgeteer.jp
リンクカード
gadgeteer.jp

こちらの記事で紹介した、AQUOS EVER SH-02J(Snapdragon 430 / RAM2GB)なんかではFLACを再生すると動作が激重になっていました


(ちなみにここから新品が買えますよ!皆さんもおひとつ、いかがですか?)



話はアプリのほうに戻りまして、

仮にもLite版を名乗っていたアプリがこの有様じゃあ絶対良くないと感じて軽量化を敢行。



まず、初回リリース版(※リリースしていません)時点での楽曲情報取得処理。


各Activity内のプレイヤーが、アプリ内に仕組んだMusicServiceから500msごとに、

  • アルバム名
  • アーティスト名
  • ジャケット写真
  • トラック情報(アルバム何曲中何曲目を再生中かの情報)
  • 再生状態(メインボタンのアイコン更新のため)
  • 曲の長さ(シークバー最大値・再生時間)
  • リピート状態
  • シャッフル状態
  • 現在の曲番号
  • 現在の再生位置(シークバー・経過時間の反映のため)

を取得していました。


それに加えて、今回の追加機能で現在の出力先出力先名までもが500msループに組み込まれたため、結果としてスナドラ430機のような低性能な環境で激重を引き起こしていたのです。



そら重くなるわw
最初は力業だったんスよ…


特に、アーティスト名やジャケット写真なんて

絶対に、どう転んでも、たとえ天地がひっくり返ったとしても

500ms(毎秒2回)ごとに情報を取得する必要なんてありません

Activityが生成されるタイミングで取得すればいいだけ




ですので、このような無駄を徹底的に省き、不要な処理を500msループから追い出すことで軽量化を図りました。


ただし軽くしたいからといって、今回追加した出力先を見る処理をActivity生成時だけにしてしまっては、リアルタイムで出力先の変化を監視しUIに反映させる目的は果たせませんし、

現在の再生位置を500msごとに取得するのをやめてしまっては、シークバーがプレイヤー画面を開いているあいだずーーっと動かずそのままになってしまいますww



というわけで、チャッピーの指示を仰ぎながら、そしてコード生成自体もすべてチャッピーに丸投げして、

現在の500msループ狙い通りの挙動を実現できる必要最低限の処理に大幅にスリム化されているのです。



無駄を省いて洗練させていく工程は、
いかにもアプリ開発って感じがして非常に高まりましたねぇ!



4.UIの細かな改良とバグ潰し



本アプリでは初回起動時限定で、このようなセットアップウィザード的なものを実装しています。

これはアプリを初めて触るユーザーがスムーズかつ納得しながら、ライブラリとして読み込むフォルダを指定できるようにという意図で実装しています。



何度も言う通り、ユーザーは私一人だけです!
でも、自己満足としてこういうのは実装したいタイプなの!!!




初回リリース版(※リリースしてません)では、ちょっとだけ粗というか意図しない挙動というか、起こりうる様々なパターンに対応出来ていなかったので、すべての動作に対して適切な処理がなされるよう設定しました。



チャッピー生成のフローチャート
チャッピー生成のフローチャート

チャッピーに、このようなフローチャートを画像化してもらってパターンを明確にし、

総当たりでデバッグを行いました


結果、多分ですが起こりうるすべてのパターンに対して適切な処理が入っていると思われます。

絶対に抜け穴がないようにデバッグした感じですね。




その過程で、徹底的に親切設計にするべくストレージアクセス権限なし時のライブラリ画面を用意したり、





ストレージアクセス権限はあるけどライブラリフォルダ未指定時のライブラリ画面なんかも作りました。


当然このような要素を加えるだけで、デバッグ箇所は増えます。でもね。作りこみたくなっちゃうんですよね。



私、凝り性なんですかね。





おわりに:今後のアップデートについて



実は既に、さらなる改良の余地を見出しています


Geminiで開発していた時は、私が意図しないところでGeminiが勝手に、全画面プレイヤーをライブラリ画面と楽曲一覧画面のボトムシートとして下部からスライドアップして展開されていました。


そして、現在のxmlにその名残、というか残滓が組み込まれているのです。



あの時は原因がわからなかったから、スムーズに横画面プレイヤーを実装するために専用のPlayerActivityを立ち上げたのですが、

この残滓を活用した上で、正式にlandscape(横画面UI)を設定してあげれば…?





画面下部からぬるっと登場する、イマドキなプレイヤーUIに進化させつつ、
PlaylistActivityそのものを無くして構造を簡略化出来る大アップデートを実装できそう!



いやあ。AI任せと言えども、アプリ開発って楽しいものですね


これで何か商売になったりするわけではないのですが、趣味として普通に楽しいなあと感じました。





デバッグ作業は苦痛そのものですけどねwwwww




Gadgeteer for Windows
SUMMARY

まとめ

アプリ開発って楽しい!!!

知識や自分で出来ることが増えるのってサイコーに楽しいよね。

✅ 良かった点
  • 楽しい(楽しい)
  • 出来ることが増えていく快感
  • 手持ちの端末コレクションがすべて、異なる環境ごとのバグ検証端末になり得る=コレクションを有効活用できる
  • 出来上がったアプリは非常に実用的
⚠️ 気になった点
  • デバッグが苦痛すぎる
SCORE

評価

5
総合評価
PR

関連商品

INFO

商品情報

メーカー
OpenAI
製品名
ChatGPT Go
購入価格
¥1,400
Facebook LINE B! はてな RSS
LIKE

いいね (3件)&足跡 (3件)

TALK

コメント (5件)

のんの
のんの 57分前
実際に使ってみたいです!
うはるん
うはるん 12分前
@のんの そう思ってくれて嬉しいです!
配布する手段を検討したいですね…。Playストアへの登録はハードルが高そうで(笑) スタンプ
ひろき
ひろき 1時間前
ChatgptでもミニサイズのアイコンだとAI感ないですね!
そしてAPK配布してほしい!
うはるん
うはるん 13分前
@ひろき そうなんですよ〜。なんだかすごくしっくりくるアイコンを生成してきて感心しちゃいましたw
そして、配布してほしいとのお言葉、嬉しいです!
どこかで配布出来る手段があれば良いのですが…悩ましいです💦 スタンプ
ひろき
ひろき 8分前
@うはるん GitHubとかでしょうかね
AIに聞いたらそれも教えてくれそうですね
PlayStoreは配布するだけでお金がかかるらしいですよ スタンプ
NEXT

前後の記事

MORE

関連レビュー

コメ欄 5 3