Android言い訳タイム。(AlbumShuffle)
iOSアプリのgroove(Android版はない)を見せて貰ったりしながら話を聞いてきた。UIはやっぱり難しいね。まぁ勿論うちはそんなでかいアプリと競うつもりはないので、ランダムアルバムというメイン機能を軸にやりたいことを明確にしていければいいなとは思っていますが。
・Random Selectなるボタン
まぁ正直自分も悩んだんですが、はっきり言って何コレ分かり難いよねと。
機能的には「トラックリストの中から開始位置をランダムで選んでスタートする」というまぁ一応名前そのままではあるんですが。
そもそも何でこれが出来たかというと、元々アルバムをランダムで選択する機能から始まって、その中のトラック再生順もランダム化する「shuffle track」がついたと。その上で楽曲選択機能を入れるという時に、アルバムだけ選んでスタートすれば何の苦労も無かった訳ですが、普通に考えればトラックも選択したくなるよねと。ただそうするとshuffle trackモード時のシャッフルスタートはどうするのということで、それ用のボタンを置いたと。でもって今度は通常再生モードの時にどうしようかというところで、要はトラック選択がお任せになるという意味でまとまるなということで、最終的に「開始位置をランダムで選んでスタートする」=「Random Select」という名称になりましたと。ワカリニクイネ!
通常モードの時はボタンを消して、shuffle trackの時だけ「Shuffle Start」というそのものずばりの名称にしておけば何の苦労も無かった気もするんですが、モードで機能が切り替わるより意味合いが統一される方が良いかなと考えたりもしたというか。
それ以外にも幾つか代案、妥協案を考えたりはしたけれど、なかなかどれもこれという結論に行き着かず。
うーん。
まぁ少なくとも今のバージョンはやってしまった感が激しいので、確実に手直しをする予定ということで、今はごめんなさい。
・アルバム選択UI
実のところ今まで2G分くらいのアルバムしか入れていなかったのだけれど、今回アプリがそれっぽくなったことで調子に乗ってアルバムをガンガン突っ込んでみたら、案の定アルバム選択がもうただの一覧ではやってられない(笑)。
ただこれこそどういうUIが良いのだろうか。
超絶極個人的な話をすると、自分はフォルダである程度の分類を作っていて(ゲーム、アニメ、洋楽なんちゃらとか)、そのフィルタをかますだけでもアルバムの絞り込みの役には立つのだけれど、これは一般的には全く成り立たない話なので論外だろうと思う。(PCのfoobar2000ではフォルダでフィルタして指定フォルダ以下ランダムなどとやっている。作業BGM=ゲーム音楽な自分としてはこういう使い方は便利なのだけれど)。まぁこれはそもそもID3タグの「ジャンル」が正しく機能していればそれで行う筈のもの。だけどあれは死にタグだろうし。
そうすると、あと使われるのはやっぱりアーティスト分類くらい。アーティストで括って二階層の展開式リストにするのも一つの手ではあるけれど。ただそれでも一覧がダラーッと連なることにやはり変わりはない。
結局「検索を入れてくれればいい」と言われたけど、やっぱりそれくらいしかないのかなぁ。自分もPCの方のライブラリはそれこそ(要らないものも)一杯あって、曲を探す時は検索上等だし。ただスマフォで文字入力はかったるくて出来ればやりたくないという思いもあるのが大変悩ましい。
うーん。
・Serviceの終了処理
pauseのまま待機状態というのが常のこのアプリの機能的に終了タイミングがないので、serviceの終了はもうシステムの強制終了(例のno longer want)にお任せという状態だったのだけれど、これがどうにもおかしい。
前から薄々気になってはいたけれど、START_NOT_STICKY指定で立ち上げている筈のこのserviceを強制終了させても(no longer wantを食らっても)、どういう訳か再起動が掛かる。それこそ消しても消してもゾンビのように立ち上がる(苦笑)。ただまぁStartCommandの方は走っていなくてただCreateされているだけなので、動作的にCPUに何の負担を掛けているという訳でもない(筈)。ただやはりこのゾンビっぷりは何処ぞの行儀の悪いソフトのように思われそうでどうにもなぁと。それにメモリも食うしね。
そもそもSTART_NOT_STICKYなのに再起動されるのは、どうもBindを使った時に発生する模様。bind時にAUTO_CREATEさせているので(してなくてもなんだけど)、kill後にcreateだけ走るというのは何となく合致する。ただunbindしてもその状態から抜け出せないのがどうなのかという所ではありますが。調べてみたけれど解決法は見付からなくて。後はもうservice側できちんとstopselfするしかない感じ。
うーん、今はレジューム処理もあるし、pause後に適当にタイマ張って待機状態が長く続いたらstopさせちゃおうかなぁ。そこでタイマ処理が暴発して再生中に強制stopする訳ですね、分かります(ぉ)。
まぁやはり何かしらの形で終了処理まできちんと持って行きたいというのもヘボグラマ(ヘボいプログラマ)的にありまして。なので今はBT切断という「明らかにもう使わないよね」というタイミングだけ終了処理を走らせてます。上記の話はBT未使用時。
などとグダグダ書き並べてしまいましたが。
手を入れないといけない部分は一杯あるけれど、ただ機能的には一応成り立っているので、ちょっとそれより違うこともやりたい自分がいるというか。弄るなら何気に結構弄らないといけないもんで。その葛藤を表現してみましたということで。