Medoly Ver. 2.0.0, 2.0.1

2015-05-10 Ver. 2.0.0
– プラグイン機能追加
– 非同期歌詞の自動スクロール機能追加
– 画面タップ時及びスクロール時に歌詞を自動スクロールしないよう変更
– 歌詞の固定オフセット追加
– メディアの対応プロパティ追加
– プロパティタブメニュー項目の変更
– 設定項目の内容を全体的に見直し
– DB登録日時によるソート追加
– 終了ダイアログを表示しないオプション追加
– Bluetoothの接続・切断によるオプション追加
– 画像読込でエラーとなる問題を修正。
– その他、各種修正

開発環境をAndroid Studioに変更しました。

本バージョンより、Bluetooth機器へのアクセス権限を追加しています。

2015-05-13 Ver. 2.0.1
– 再生時にループが終了しない問題修正

Ver. 2.0.0

ついにVer.2.0.0です。 本アプリは2013年12月のVer. 1.0.0から始まり、少しずつバージョンを積み重ねてきました。大体、機能追加で0.0.5、バグ修正で0.0.1上がってく感じでバージョンを変更しています。あまり急激なバージョン番号の上昇はやりたくなかったので、牛歩戦術みたいなバージョンアップを重ねてきましたが、ついに2.0.0まで来てしまいました。思えば遠くに来たもんだ。

せっかくメジャーバージョンが上がるということで、Ver.2.0.0に合せて少し大きめの変更を2件、追加しています。 とは言っても、従来とUIや使い方が変わるわけではありません。使い勝手を買えるのは個人的にあまり好きではないですし、それなりに考え抜いて作ったUIデザインなので、今のUIはずっと続けていきたいと考えています。

また今回に合せて心機一転、開発環境をEclipseからAndroid Studioに変更しています。環境を変えて思ったのは「Eclipseってやっぱ使いにくかったなぁ…」という感想です。もちろん、Android Studioの方がAndroidに特化しているため色々便利な点があるのは当然なのですが、それを差し引いてもEclipseは、重いし、設定が分かりにくいし、環境がよく壊れるしといった色々なアラが目立つので…。Googleもサポートを打ち切っていく方針なので、多分もうEclipseでAndroid開発はしないと思います。
 なお、Android Studioでビルドしてから、ビルド後のAPKのサイズが200kbぐらい縮みました。 これが最適化によるものなのかどうかは知りませんが、サイズ減ったからといって別に機能が削減されたわけではありません(むしろコードの量は増えているはずなのですが)。

プラグイン機能追加

大き目の変更その1。
本バージョンより、プラグイン機能なるものを実装してみました。プラグインとは、Medolyから自動的に実行される外部アプリの事です。この機能は、元々開発を開始した頃から想定していた機能だったので、ようやく実装できたか、という感じです。
プラグイン機能は、再生の開始・終了等のイベントに合せて自動的に機能を実行するという動作を想定しています。例えば、再生中の音楽情報を特定のサイトに送信する機能等です。
現状のイベント種別は、メディアを開く、メディアを閉じる、再生開始、再生終了、再生中の5種類のみです。このイベントのタイミングに合わせて、Medolyからプラグインに対して全てのプロパティ情報が送信されます。なお、送信済みイベントとは、再生開始してから何秒後かに自動的に実行されるイベントです。実行秒数は設定画面より設定します。
現在、以下のプラグインを開発済です。

Medoly Twitter Plugin

現在は、メッセージの投稿機能を持つものしか無いですが、余裕があれば、メディアを開くタイミングで、アルバムアートの取得や歌詞の取得、追加プロパティ情報の取得等ができるような機能を作ってみたいと考えています。(現状はそのような動作は作ってません)。プラグイン機能もそれを前提として実装してあるので、あとは作る気合いと時間の問題です。
なお、元々このプラグインを開発した経緯としては、Medoly単体はあくまでもローカルファイルにアクセスする機能のみを対象とし、外部のネットワークに繋いだりするような機能は、できる限り追加機能として実装 しておき、ユーザが必要に応じて選択できるようにしたかったからです。
わざわざ追加で入れるのは面倒臭いので、ユーザ数が増えない面もあるのは承知しています。しかし、ネットワークに接続するという事は、多少のセキュリティリスクを負うことであり、ユーザにネットワーク接続の権限を要求するという事です。もちろん、意図しない情報を外部に送信するつもりは微塵も無いのですが、少なからず存在するそうしたリスクを、必要の無いユーザにまで負担させたくない、というのが個人的な考え方です。
なので、ユーザが可能な限りリスクを避けて利用できる環境を目指したかったため、このような形としました。
あと個人的感情の問題なのですが、アプリ内に組み込んでしまうと、外部のサービスが終了した場合にアプリ側に動作しない機能が取り残されてしまい、なんとも空しい状態に陥ってしまう可能性があるため、それを避けたかった、という意図もあります。(そんなアプリケーションは、過去にいくつも見てきたので…。)
ちなみに実はこの機能、Ver.1.8.0ぐらいの頃には機能として既に埋め込まれていたのですが、プラグインアプリ側の開発が出来ていなかったので、今まで放置してた経緯があったりします。

非同期歌詞の自動スクロール機能追加

大きめの変更その2。
非同期歌詞(タイムコードが埋め込まれていない歌詞テキスト)について、自動スクロール機能を実装しました。これはユーザ様からの要望だったのですが、元々いつかは実装しようと思っていたところではあったので、丁度良いタイミングだったと思います。
本機能は、非同期歌詞に対してスクロールを行います。
非同期歌詞は再生位置の情報を持っていないため、当然ながらスクロールを完全に合せることができません。そのため、スクロール速度は歌詞の長さに応じて自動的に調整されます。また、設定項目に「イントロ時間」及び「アウトロ時間」の設定を追加し、スクロール速度に対してある程度の補正を加えることができます。
大まかに書くと、再生時間 – (イントロ時間 + アウトロ時間)の時間で、歌詞の縦幅の長さ分スクロールするように速度調整されています。また、再生開始時にイントロ時間分の無スクロール時間が入ります。
なお、非同期歌詞の場合、歌詞を手動でスクロールさせると、スクロール終了位置にスクロール座標が変更されます。スクロール位置がうまく合わない場合に活用してください。
なお、スクロール中はバッテリーの消費量が大きくなりますのでご注意ください(それなりにCPU負荷を削減する努力はしてますが、流石に限界があります)。画面を表示しない(または、表示タブ以外のタブを表示させる)と、スクロール処理が停止するので、消費電力は抑えられます。

画面タップ時及びスクロール時に歌詞を自動スクロールしないよう変更

同期歌詞・非同期歌詞共通ですが、歌詞表示状態で表示タブの画面をタップしたり、歌詞がスクロール状態にあると、スクロールを行わなくなります。従来はどんな状態でも強制的に歌詞がスクロールしていました、そんなわけで、今回の変更で歌詞がややスクロールしにくくなっています。
この変更は、非同期歌詞のスクロール処理に合せた変更です。

歌詞の固定オフセット追加

ユーザ様の要望により、設定画面より歌詞の固定オフセット値(表示誤差)を設定できるようにしました。歌詞のスクロールタイミングに対して必ず適用されます。ただし、画面上のオフセット値には表示されないのでご注意ください。
なお、自分はXperia UL(SOL22)という機種を使用しているのですが、この端末は他の機種より取得される再生時間がやや早いようで、歌詞の表示タイミングが少し前倒しになる傾向があるようです。(何故このような差が生じるのかは知りません。)
参考までに、私は今回追加したこの設定に「-100」を設定しています。

メディアの対応プロパティ追加

「プロパティ」タブに表示可能な項目の数を増やしました。とにかく、ライブラリから取得できる項目をできる限り詰め込んでいる感じです…とは言っても、実際に使用される機会はあまり無いと思いますが…。一部項目から、URLを開いたりすることができるようにしています。
プラグイン機能の追加に合せて、取得可能な項目を見直した感じです。 これらのプロパティ情報は全てプラグイン側に送信されます。

 

プロパティタブメニュー項目の変更

「プロパティ 」タブをタップした際に表示されるメニューの内容を見直しました。今までは、検索画面に移動するための項目のみのメニューでしたが、今回から「メディアを検索」「Webを検索」「共有」「開く」の4つのアクションを表示するメニューに変更しました。
通常はプロパティタブより、プロパティ項目選択→アクション選択ですが、メニューからはアクション選択→プロパティ項目選択、が出来る感じです。
このメニューはVer.1.0の頃からずっと変化が無かったので、現状に合せてUIの修正という感じです。

設定項目の内容を全体的に見直し

設定項目を全体的に見直しました。元の設定は大体残してありますが、項目を追加したり、カテゴリを変えたりしています。バージョンアップを繰り返す度に少しずつ設定を変えていったため、設定項目がかなり混沌としていたため、今回で一斉に見直しです。

 

DB登録日時によるソート追加

これはユーザ様からの要望です。ソート項目に「DB登録日時」を追加しています。これにより、音楽ファイルがAndroidのメディアストレージに登録された時間(曲が検索可能になった時間)でソートさせることができます。本当はファイル更新日時にしたかったのですが、ファイル更新日時はDBに登録されていないため、現状ではちょっと無理でした。
いつか独自DBの構築とかやってみたいのですが、しばらくは無理そうです。

終了ダイアログを表示しないオプション追加

これはユーザ様 からの要望です。アクションバーのメニューから「終了」を押すと終了タイマー設定ダイアログが表示されますが、これを表示せずにすぐに終了させるオプションを追加しています。ダイアログ内に非表示にするチェックボックスを設けましたが、設定画面からも変更可能です。(ダイアログで非表示にしても、設定画面から元に戻せます。)

Bluetoothの接続・切断によるオプション追加

Bluetoothでオーディオ再生するためのA2DP接続・切断で再生を開始・停止させるオプションを追加しました。設定画面より変更できます。イヤホンプラグの挿入・抜去、電話の着信・終了イベントと同様の設定を行う事ができます。
また、Bluetoothの状態を検出するため、本バージョンよりBluetoothアクセスの権限要求を追加しています。ご了承ください。

画像読込でエラーとなる問題を修正

ユーザ様からのエラーレポートがあり、画像を読込むタイミングでエラーとなる問題を修正しました。画像読込みの際、既に破棄された画像を再参照してしまう場合があり、その結果エラーが発生するという問題でした。排他ロック処理やリサイクルチェックの見直しを行っています。
…が、こちらでは問題が発生しないため、これによって正しく修正されたか分かりません。問題が正しく修正されたかどうか、再度報告いただけると助かります。

その他、各種修正

上記に挙げた更新以外に、色々な修正が加わっています。イヤホンプラグ挿入時、Bluetooth接続時、通話終了時にもオーディオフォーカスを再取得できるようにしたり、メディア再生エラーの際の処理を設定できるオプションを追加したりしています。
その他、文言変更等の細かい修正も行っています。

Ver. 2.0.1

再生時にループが終了しない問題修正

Ver.2.0.0で追加した非同期歌詞のスクロール処理ですが、画面を非表示にしてもバックグラウンドでスクロール処理が終わらない問題があったため、処理を修正しています。
このバージョンが出るまでの数日間、バッテリーの消耗が早かったとしたら、それはこのアプリの仕業です。すいません。