Medoly Ver. 3.0.0, 3.0.1, 3.0.2, 3.0.3

2017-08–18 Ver. 3.0.0
– Android 4.1以降の対応に変更
– マテリアルデザイン対応
– 複数のアルバムアートおよび歌詞に対応
– 標準の通知に対応
– 区間ループの処理を変更
– プラグインのインターフェースを変更 (アルバムアート取得・歌詞取得を追加)
– プラグインダイアログを変更
– タブ画面を変更
– jAudioTaggerライブラリを変更
– KRAフォーマットの読み取り処理変更
– いくつかの設定項目を変更
– いくつかの問題を修正

2017-08-23 Ver. 3.0.1
– 同期歌詞の行頭シーク設定追加
– プレイリストファイル保存の問題修正
– リソース管理処理修正
– メディア選択の高速化

2017-09-12 Ver. 3.0.2
– 画像表示処理変更
– 行頭シーク処理変更
– トラック情報読み込み修正
– その他処理修正

2017-09-16 Ver. 3.0.3
– 画像読み込み処理修正
– トラック番号が正しく表示されない問題修正
– 一部エラー修正

2017-08–18 Ver. 3.0.0

Android 4.1以降の対応に変更

本バージョンより、Androidの対応バージョンを4.1以降としました。以前はVer. 3.2以降だったため、今回のバージョンアップでVer. 3.2、4.0が動作対象外となります。
Androidの開発では、Androidのバージョンアップを経ていくと、古いAPIはどんどん非推奨となったり、新しいAndroidに対応した処理を追加していくといった作業が必要になります。そのため、アプリの開発を重ねていくと、古い機能に対応させるために、Androidバージョンによる分岐処理が増えることが避けられません。そういう分岐が増えていくと、徐々にソースコードが複雑になり、バグも混入しやすくなるといった問題が出てきます。(古いバージョンに対応されているアプリは、そういう部分に大きな労力を割いていることになります。)

そのため、現在では、Ver.3.2、4.0を利用する人もだいぶ少なくなってきたことを考え、今回のバージョンで切り捨てることとしました。利用されている方には大変申し訳ないのですが、あまり細かい部分に労力を割くと他の部分に手が回らなくなってしまうので、ご了承ください。

ちなみに、Android 4.1ではメディア操作関連のAPIがたくさん追加されており、このバージョンでの分岐処理が多いため、このバージョン以降の対応とした、という理由もあります。ちなみに、次に切り捨てるとすれば、APIの変更が多いAndroid 5.0以降となるかと思います。まだ当面先の話ですが。

マテリアルデザイン対応

本バージョンで、画面のUIをマテリアルデザインに対応しました。正確に言うと、マテリアルデザインのスタイルを適用しました。
マテリアルデザイン対応を正しく考慮すると、フラットなデザインの適用や、UIの設計の見直し等、色々な要素を考える必要があるのですが、真面目に取り組むと大変ですし、従来からUIの互換性もとれないので、現在のところはマテリアルデザインのスタイルを適用するに留めました(ちなみに、従来の画面スタイルは「Holo」といいます)。

ついでに、ActionBarのタブ等古くて既に非推奨となっているUIを見直して、現在利用が推奨されているパーツに置換えてます。既存のUIと同じインターフェースを備えたものに置換えているので、利用してる上であまり違和感は無いと思います。

元々、この辺りの更新は以前から考えていたので、Ver.3.0.0という節目のバージョンで一気に行ってしまいました。

複数のアルバムアートおよび歌詞に対応

外観的にはマテリアルデザインが一番大きな変更点ですが、内部的に一番大きく変わった部分がこちらです。
アルバムアートおよび歌詞について、複数のデータを読み込めるようにしました。メディアファイル内蔵、外部ファイル、コンテンツプロバイダ(Android内蔵の自動生成データベース)のデータを自由に切り替えられるようにしました。内蔵アルバムアート/歌詞について複数のデータが埋め込まれている場合がありますが、これらも全て読み込むようにしています。また、該当するファイル名の外部ファイルも全て読み込むことができます。(ちなみに、コンテンツプロバイダは常に一つだけです。)とにかく、読み込めるものは全部です。読込のON/OFFについては、設定画面(設定 → アルバムアート/歌詞 → 表示データ)で切替えることができます。

データの切替えは、プロパティのアルバムアート/歌詞の見出しをタップ→「変更」をタップするか、表示タブの表示ON/OFFアイコンを長押しすることで表示されるメニューから切り替えることができます。

現在のところ、データの選択は毎回リセットされてしまいます。荒削りな部分はありますが、少しずつ機能を増やしていければと思っています。

標準の通知に対応

Android標準の通知に対応しました。Android 5.0よりメディア再生用の標準通知スタイルが用意されているので、それを利用しています。設定画面の「通知」より、従来の独自スタイルの通知にも切り替えることができます。また、同じく設定画面より通知の色を設定することができます。設定の「通知色」で設定することができます。ただ、透明度を最大値(FF)に設定しないと色が適用されない点に注意してください。それ以外の透明度の場合は、標準色に設定されます。

区間ループの処理を変更

Android 7.0より、区間ループが動作しなくなっていたため、処理を変更しました。従来の実装では、ちょっと特殊なやり方でループを実現させていました。それは字幕機能を利用することです。字幕の表示タイミングでイベントが発生することを利用し、ループ時間を設定した字幕データを生成して読み込ませることで、任意のタイミングでのループを実現させていました(これ以外に正確な時間でループさせる方法がなかった)。ところが、これはAndroid 7.0で使えなくなりました。恐らく、動画を読み込まないと字幕が動作しないように仕様が変更された物と思われます。
仕方ないので、時間のカウンタによるループを行うようにしました。この変更に伴い、ループの位置が毎回微妙にずれるようになりました(ms単位で正確に実行させるのが難しいため)。これは仕様となりますのでご了承ください。

いつか、フレーム単位の正確なループを実装したいんですけどね…。

プラグインのインターフェースを変更 (アルバムアート取得・歌詞取得を追加)

プラグインのインターフェースを全面的に見直しました。それに伴い、各プラグインも全て更新されています。全てのバーションを上げないと、プラグインが利用できなくなります。

この変更の結果、アルバムアートの取得ができるようになっています。現在の所、「Medoly Last.fm Plugin」のみがアルバムアート取得機能の実装をしています。

プラグインダイアログを変更

プラグインの仕様を変更したことに併せて、プラグインのダイアログ、メニュー周りを全体的に見直しています。これに伴い、プラグインの動作ON/OFF設定がクリアされます。この変更で、ダイアログからプラグインのイベント単位の動作ON/OFFが出来る様になっています。

タブ画面を変更

各画面やダイアログに存在していたタブのパーツを置換えました。これは、非推奨となったパーツの置換えや、複雑になっていた処理の簡素化を目的にしています。
検索画面のタブ要素を完全に置換えた結果、スワイプでタブを切り替える操作のレスポンスが向上するという良い副作用が出ています。

jAudioTaggerライブラリを変更

今まで、タグの読み込みにjAudioTaggerを使用していました。バージョンは最新版ではなく、Ver.2.0.4。なぜこのバージョンを使用していたのかというと、これより後のバージョンではAndroidで使用するとエラーが発生する問題があったためです。Androidで使用できないライブラリ参照が含まれているようで、改修を試みるも上手く行かず、仕方なくずっとこのバージョンを使用していました。
ところが、最近jAudioTaggerからフォークしてAndroid向けに変更したJaudiotagger for Androidがあることを知ったため、こちらを採用することにしました。バージョンは、2.2.3相当です。
バージョンを変えて何が変わったのかよく分かっていないのですが、まぁ新しいバージョンの方が良さそう、ということで。

KRAフォーマットの読み取り処理変更

タイムタグ歌詞の読み込み処理を修正し、行頭にタイムタグがなくても歌詞として読み込まれるようにしました。
これは、RhythmicaLyricsで歌詞を作成した際、歌詞の行頭に記号が含まれると、デフォルトでタイムタグが記号が飛ばされて付与されてしまうため、その動作に合わせています。そもそもの仕様も行頭にタイムタグが付かなくても良い、という仕様であったので、本来の仕様に近づけた、という感じです。

いくつかの設定項目を変更

プラグインの仕様変更、標準の通知に対応、といった変更に合わせて、設定画面の内容を変更しています。見れば分かるかと思いますので、詳細は割愛します。

いくつかの問題を修正

その他、多数の問題を修正しています。
今回、内部処理を大幅に弄ったことに合わせて、いくつかのバグを修正しています。また、多少の高速化もされています。

2017-08-23 Ver. 3.0.1

同期歌詞の行頭シーク設定追加

同期歌詞において早送り/巻戻しボタンをタップした際、歌詞行の行頭にシークするようにしました。これは、設定画面の「再生」→「歌詞行単位でシーク」を有効にすると動作します。非同期歌詞の場合は無効で、通常のシークボタンタップ動作(設定時間だけ再生位置をシーク)になります。
早送りボタンを押すと現在の次の歌詞行の行頭、巻き戻しボタンを押すと現在の行の行頭または、前行の行頭に移動します。

ふと思い立って機能を追加してみましたが、これは言語学習等の繰り返し再生に有益かな、と思います。多分。

プレイリストファイル保存の問題修正

プレイリストファイルの作成でフォルダが作成されてしまう問題があったため修正しました。これは、ただの作りこみの際のバグです。

リソース管理処理修正

アプリ内部に抱えているリソースの解放タイミングを調整しています。これは、解放処理のタイミングによって、解放済みのリソースにアクセスしてアプリがエラーとなる場合があったためです。これに合わせて、その他諸々のバグを修正しています。

メディア選択の高速化

メディア選択時に同じ処理が2回連続で実行されてしまい、メディア再生までの時間が遅くなっていた問題を修正しました。高速化とは書いてますが、ただのバグ修正です。

2017-09-12 Ver. 3.0.2

画像表示処理変更

アルバムアートの表示処理を修正しました。
この辺では、アルバムアート読込みに関する修正ばかりしています。というのも、複数のアルバムアートを読込めるようになったことで、メモリ上に多数の画像が読み込まれる可能性があったため、画像の管理を見直していたためです。ところが、メモリから破棄された画像にAndroidがアクセスしてしまい、エラーが発生する事象が多発しているようで(通知やウィジェット関連の模様)、その辺りの処理を少し見直していました。

行頭シーク処理変更

Ver. 3.0.2で追加した行頭シーク処理を見直しました。具体的な変更は2つ。1つ目は、巻き戻しボタンで前の行に戻るための時間を、行頭の再生から1秒以内にしました(変更前は2秒)。これは、繰り返し再生を行う上で2秒は少し長すぎるように思えたためです。2つ目は、再生時間が1秒以内の行はスキップするようにしました。これは、0秒の空白行のような行があると、その部分から前の行に移動できなくなる問題があったためです。

トラック情報読み込み修正

トラック番号が数値ではなく「x / y」のような形で保存されていた場合、正常に再生できない問題を修正しています。

その他処理修正

シークバー操作中にドロワーメニューが開くと、シーク速度の表示が残ってしまう問題の修正とか、検索画面で「ストレージ」タブをタップしても、検索条件がクリアされない問題の修正とか、色々です。

2017-09-16 Ver. 3.0.3

画像読み込み処理修正

Ver. 3.0.2に続き、ここでも画像読込み処理の修正です。
ちなみに、色々調べた末、「あんまり変な画像破棄の処理はやらないでAndroidに任せた方がマシだった」という結論に至っています。

トラック番号が正しく表示されない問題修正

タグ上に合計トラック番号が存在しない場合、1で出力されてしまっていた問題を修正しました。
これは、ユーザ様からの報告で分かったため修正しています。

一部エラー修正

再生キューの先頭・末尾で曲戻し・曲送りを行うと、メディア読込がエラーとなる問題の修正、タイミングによってnull参照のエラーが発生する場合がある問題の修正、等になります。

まとめ

以上、ダラダラ書いてますが、徐々にバージョンアップを重ねて3.0という節目のバージョンを迎えたので、少し多めの変更を加えてみました。本当はもっと色々やってみたいことはあったのですが、多すぎて手が回らなかったので、今回はこの辺で。
3.0リリース時に多少多めにクラッシュが発生してしまいましたが、今のところやや落ち着いています。何か問題がありましたら、ご連絡をお待ちしています。