Medoly Ver.4.0.0

久しぶりになりますが、メジャーの番号が上がったので、更新内容を少し書き残しておきます。

5/31にMedolyのVer.4.0.0をリリースしました。変更内容としては、次のような内容になります。

  • Android 5 未満の対応を終了
  • AABビルドに変更
  • プレイヤーの内部構造を大幅見直し
  • 多数のバグを修正

Android 5 未満の対応を終了

今回、Medolyは内部的な実装を大きく変更しています。それに伴い、Android 5未満の対応を終了しました。
Androidは5未満と5以降でメディア関連の機能が大きく変わっており、4以前をサポートするのは今後の実装について大きな足枷になっていました。そこで、メジャーバージョンの変更に合わせて、Android5未満のサポートを終了し、開発しやすくするようにしました。流石に5未満の端末を未だに利用している人も大分少なくなってしまったこともあり、これ以上のサポートは流石に大変なので、申し訳ありませんがよろしくお願いします。

AABビルドに変更

これは、一般ユーザにはあまり関係が無いです。Androidアプリは、2021年8月から、新しい形式によるファイル登録および、新しい署名方式を利用する必要があります。そのため、今回のタイミングでこれらの対応を行うことにしました。以前、別アプリおよび仕事でこの辺りについて調査済みだったので、それほど手間はかかっていません。
ストアからダウンロードする分には特に今までと変わりません。
ちなみに、署名済みAPKはこちらでダウンロード出来ますので、必要な場合はダウンロードしてご利用ください。

プレイヤーの内部構造を大幅見直し

今回のメジャーバージョンの変更と同時に内部の実装を大幅に見直し、最近の開発スタイルに合わせた実装に変更しました。これにより、機能の実装や速度のチューニングをしやすくしたり、バグを減少させたりする効果が見込まれます。大きく変更してしまったのでややバグが出てしまう箇所もあるかもしれませんが、もし発見された場合はご報告頂ければと思います。目に見えた効果はあまり無いのですが、サムネイルの表示速度がやや向上したり、シークバーのアニメーションがシームレスになったりしています。

多数のバグを修正

プレイヤーの内部構造の見直しに伴い、色々なバグを修正しました。歌詞のオフセット値のバグや、シェアできないバグなどが修正されています。

今回のバージョンから、Medolyにネット接続の権限が付与されています。これは、今後のネットワーク再生の対応を見据えた上での対応になります。この辺はもう少し色々修正しますが、とりあえず今のところはあまり意味は無いです。後からやるよりは、大型更新のタイミングで付与してしまった方がユーザに違和感を与えにくいからです。恐らくインストールしたりアプリを使ったりする上で、特に支障は無いと思います。
また、本来は今回のバージョンからAndroid Auto対応を入れる予定だったのですが、審査を通すためにはもう少しアプリの修正をしないといけないので、今回のバージョンからは外しています。(内部的には対応可能な状態になっている)

以上、今回色々変更してしまいましたが、何かあればご報告いただければと思います。よろしくお願いします。

CIFS Documents Provider 公開

CIFS Documents Provider – Google Play のアプリ

すいません、Medolyと関係無いアプリを1本作っていて、先程公開されました。
これは、Windows共有フォルダにアクセスするためのアプリです。アプリ単体では、共有フォルダの接続情報を登録するだけの機能しか持ちません。ただ、その接続情報を使って、外部のアプリから共有フォルダにアクセスできるようになります。要するに、色んなアプリから共有フォルダにアクセスするための橋渡しをするためのアプリです。

Googleが昔、Samba Documents Providerというアプリを公開していたらしいのですが、今は公開されていないし、これを弄るにしても妙にコードが複雑で困難そうだった。他に似たようなアプリも見当たらない、ということで自前で作りました。共有フォルダのアクセスについては、jcifs-ngというライブラリを使っています。

何でこんなアプリ作ってたかというと、Medolyから共有フォルダ上の音楽を直接再生出来るようにするためです。すいません、先程嘘書きました。Medolyと関係あります。Medoly単体に機能を付けるとコードが肥大化するし、余計な機能も増えるしであまり好ましくないので、機能としてアプリ自体を分離させる感じで作りました。
以前からの調査で、その辺が実現可能であることはリサーチ済みで、開発環境だと既に共有フォルダの音楽を再生してたりします。少し前までの改造内容は、この辺りの実現を視野に入れて内部を作り替えていました。

とりあえずもう少し時間はかかりますが、徐々に開発を進めていきます。

ちなみにソースコードはこちら。
https://github.com/wa2c/cifs-documents-provider

Medoly Ver.3.4.0 – 3.5.2

面倒臭いので最近の更新の内容を色々ひっくるめて説明。

ja:medoly:history [Medoly Manual]

2019-08-15 Ver. 3.4.0

  • 一部のソースをKotlinに置換え
  • サポートライブラリをAndroidXライブラリに置換え
  • タグ読み込みライブラリをバージョンアップ
  • いくつかのバグを修正

2019-08-20 Ver. 3.4.1

  • 検索画面のバグを修正
  • 一部のソースをKotlinに置換え

2019-09-06 Ver. 3.4.2

  • 大きなアルバムアートがあると落ちるバグを修正
  • いくつかのバグを修正
  • 一部のソースをKotlinに置換え

2019-09-12 Ver. 3.4.3

  • 一部設定が正しく動作しない問題を修正
  • 一部のソースをKotlinに置換え

2019-09-22 Ver. 3.4.4

  • Android 10に一部対応
  • いくつかのバグを修正
  • 一部のソースをKotlinに置換え

2019-11-23 Ver. 3.4.5

  • 内部のデータ保存仕様を変更
  • 設定インポート/エクスポートのデータ仕様変更
  • 音量のデータ構造を変更
  • サムネイルが読込まれない問題修正
  • いくつかのバグを修正
  • 一部のソースをKotlinに置換え

2019-11-26 Ver. 3.4.6

  • クラッシュする問題を修正
  • パラメータが正常に適用されない問題修正
  • 旧設定取り込み時に音量が下がる問題を一部修正

2019-12-21 Ver. 3.5.0

  • Kotlinへのコード変換完了
  • 内部のデータ保存仕様を変更
  • 再生キューのレイアウト調整
  • サムネイルが半端に読込まれる問題修正
  • エラー画面で再起動に失敗する問題修正

2019-12-23 Ver. 3.5.1

  • 再生キューの追加でエラーとなる場合がある問題を修正
  • 通知でエラーが発生する問題を修正

2019-12-26 Ver. 3.5.2

  • 歌詞やアルバムアートが読み込みに失敗する問題修正
  • メディア読込みエラー時の状態管理修正
  • Bluetoothがエラーとなる問題修正

概要

この辺りの改造で今まで何をやっていたのかと言うと、主に以下の変更になります。

  • コードをJavaからKotlinへの置換え
  • サポートライブラリをAndroidXに置換え
  • DBの処理にRoomを使用するように変更

基本的には、内部的なコードの置換えと、それに伴って発生・顕在化したバグの修正になります。アプリの保守性を高めることと、今後のバージョンアップを継続的に行っていくための置換えになりますので、機能の追加などはあまり行っていません。

この辺の変更の理由は以下の通りになります。

コードをJavaからKotlinへの置換え

KotlinはAndroid開発で使用される新しいプログラム言語です。従来のコードと互換性があるので、ファイルを段階的にKotlinに置換えながら継続的に更新を行っていました。これによって何が良くなるかと言うと、ざっくり言うと全体的にコードの量が削減されること、プログラムのバグが起きにくくなること、などの効果があります。Kotlinを使った方が開発する上で何かと楽になります。以下は参考情報ですが、今回の更新でコードが44412行から37189行に削減されています(これは単純にJava → Kotlinだけの効果だけではないのですが、参考程度に)。

Java

Kotlin

サポートライブラリをAndroidXに置換え

Android開発を行う上で、通常サポートライブラリというものを使います。サポートという名前からイメージしにくいのですが、開発する上ではほぼ必須のライブラリです。これが最近になって、AndroidX (Android 10という意味ではない) という名前に変わって新しくなり、今後はこちらを使うよう勧告されています。旧サポートライブラリはサポート外になっていくので、遅かれ早かれAndroidXに置換える必要があったのですが、このタイミングで一気に置換えてしまいました。

DBの処理にRoomを使用するように変更

Androidの内部的なデータ管理にデータベースを使っているのですが、今までこの入出力にはかなり初期の頃の実装を用いていました。特に問題があったわけではないのですが、実装上のコード量も多く、メンテナンス性も低いので、アプリの拡大に伴って扱いにくくなっていました。現在は、GoogleがリリースするDB入出力ライブラリのRoomというものがあり、これを使うとDBがかなり扱いやすくなるので、このタイミングで置換えることにしました。
今回の変更に伴って、DB構造も見直しています。以前から構想のあったネットワーク再生等も視野に入れて再設計しています。

表面的な変更があまり無い割りに、全体的には大規模な更新なので、アップデートに伴うマイグレーション処理も割と気を遣って作ってたのですが、それでもやっぱり問題が発生する場合もあったようで、ユーザの方には御迷惑をおかけしました。
とりあえず土台は更新したので、これから機能の追加やユーザビリティの向上に向けて開発を進めていこうと思うので、よろしくお願いします。

Medoly Ver. 3.3.5

サボってた更新履歴を書く。

2019-03-31 Ver. 3.3.5

  • プラグインのインターフェースを変更
  • 文字コード変更機能追加
  • サイドメニューのタブを下に移動
  • 出力デバイス設定が適用されない問題修正
  • フォントサイズを変更した際に一部文字が見切れる問題修正
  • 歌詞・アルバムアートが検索されない問題修正
  • プラグインインベントが2重に起動する問題修正
  • 再生キュー削除時のバグ修正
  • ジャンルの修正

2019-03-31 Ver. 3.3.5

プラグインのインターフェースを変更

プラグイン周りのインターフェースを変更しました。これに伴い、各種プラグインもアップデートしています。これらを利用するためには、すべてのアプリをアップデートする必要があります。
今回プラグインインターフェースを変更したのは、プラグインの起動に失敗した場合のエラーを検出するためです。特定のメーカーに搭載される省電力機能など、バックグラウンドのアプリ起動が抑制されている場合に、プラグインが起動メッセージを受け取れない事象が発生することが分かりました。具体的には、Asus の「自動起動マネージャ」によってバックグラウンドのアプリ起動が抑制されている場合に発生する事象を確認しています。
これはユーザ様からの報告によって発覚しました。自分でもASUSの端末を1台持っていたので割とすぐに原因が発覚したのですが、持っていなかったら原因不明で終わるところだった…。
ちなみに、起動に失敗した場合意は「○○の起動に失敗しました」というメッセージが表示されます。

文字コード変更機能追加

メディアのタグおよび歌詞の文字コードを変更する機能を追加しました。
これは、ユーザ様からの「MP3のタグが文字化けする」という意見が来たために対応しました。しかもこれは、同時期に2件の要望が届いていました。1件は日本語でしたが、もう1件はロシア語でした。
これに対し、日本のユーザ様から文字化けするサンプルのMP3ファイルをもらった上での対応を行いました。
Medolyでは文字コードの判定に「juniversalchardet」を使用しています。このライブラリではテキストのバイナリを与えると、テキストの文字コードを返し、文字コードの判定に失敗するとnullを返します。ところが、頂いたファイルを調べて見ると、文字コードはShift_JISにも関わらず、Windows-1252を返していました。恐らくバイト列がたまたま上手く判定できない並びになっているものと推測しましたが、これを改善する方法が思いつきませんでした。そこで、判定結果がWindows-1252になる場合もnullと同様に失敗と見なすことにしました。
さらに、判定に失敗した場合の処理も変更しています。従来は判定に失敗した場合、利用する言語によって異なる文字コードを返すような処理を行っていました(日本語ならShift_JIS)。ただ、それだと使う言語によって判定結果がブレてしまうので、ユーザが任意に設定できるようにしました。
具体的には、文字コードを選択するダイアログを追加しています。プロパティ一覧のうち、メディアまたは歌詞の「文字コード」→「変更」を選択するとダイアログが開きます。

ここで選択した文字コードが、判定に失敗した文字コードとして利用されます。ダイアログ上方の「強制的に適用」にチェックを入れると、文字コードの判定を行わずに強制的に文字コードを適用しますが、利用する場面はまず無いと思います。何となく気分で付けただけです。

サイドメニューのタブを下に移動

サイドメニュー(ドロワーメニュー)の「プレイリスト」「プラグイン」のタブを下側に移動しました。理由は、上側は指で押しにくいからです。個人的には割と頻繁に切り替える部分なので、操作しやすい下側タブへ変更しました。

出力デバイス設定が適用されない問題修正

出力デバイスの切替えを行った際に、設定が適用されないバグがあったので修正しました。
前バージョンの実装ミスです。

フォントサイズを変更した際に一部文字が見切れる問題修正

端末のフォントサイズを変更した際、画面上の一部文字が切れてしまってきちんと表示されない場合があったので、修正しました。具体的には、文字サイズを自動的に調整するようにしたり、文字サイズが変わらないように指定方法を変えたりしています。

歌詞・アルバムアートが検索されない問題修正

これはユーザ様のバグ報告です。外部ファイルのアルバムアートや歌詞ファイルの検索において、ファイル名に括弧が含まれていた場合に検索できないという問題がありました。
これは、検索に正規表現を使用していたのですが、そのエスケープがうまくできていなかったことが原因でした(括弧が正規表現として処理されていた)。そのため、検索文字列のエスケープが正しく行われるように修正しました。

プラグインインベントが2重に起動する問題修正

一部プラグインイベントが2回起動してしまう問題があったので修正しました。割と前のバージョンから発生していたのですが、気付いていませんでした。

再生キュー削除時のバグ修正

再生キューを削除した際に、再生中のメディアが停止してしまう問題があったので修正しました。これも結構前のバージョンから発生していたのですが、気付いてなかったです。

ジャンルの修正

MP3等のメディアでは仕様上、ジャンルの指定に名前ではなくコードを指定することができます。今までこのジャンルコードに対応していなかったので、画面上にはコードがそのまま表示されてしまっていたのですが、これをジャンル名として表示するように修正しました。
これは実はずっと認識していたのですが、面倒なので放っておいただけです。今回、ユーザ様の利用しているMP3ファイルでこのジャンルコードを使用していることが判明したため、せっかくなので対応しました。

Medoly Ver. 3.3.0, 3.3.1, 3.3.2

サボってた更新履歴を書きます。

2019-02-03 Ver. 3.3.0

  • 出力デバイスの対応機器追加 ( USB, HDMI, Miracast, Chromecast )
  • 出力デバイス設定の変更
  • 非同期歌詞のスクロール調整
  • 再生速度機能の修正
  • 外部アプリ通知が動作しない問題修正

2019-02-09 Ver. 3.3.1

  • Galaxyシリーズ端末で再生ができない問題修正
  • 端末起動時にエラーとなる問題修正

2019-02-24 Ver. 3.3.2

  • プラグインのバグを修正

2019-02-03 Ver. 3.3.0

出力デバイスの対応機器追加 ( USB, HDMI, Miracast, Chromecast )

出力デバイスメニューで扱えるデバイスの対象を拡張し、有線デバイス(オーディオジャック)、Bluetooth、USBオーディオデバイス、HDMI、Miracast、Chromecastまで認識できるようにしました(従来は有線デバイス、Bluetoothまで)。

接続すると自動的に接続対象デバイスが切り替わり、設定が切り替わります(デバイスが接続されていない場合、またはデバイスを認識しない場合は「通常」デバイスになります)。複数種類のデバイスを同時に接続した場合、接続の優先度は [ ChromeCast > Bleutooth > イヤホン = USB > HDMI > 内蔵スピーカー ] ぐらいになります(例えば、HDMIに画面を映しながらBluetoothイヤホンを接続した場合、画面はHDMI、音声はBluetoothという感じになりますが、ChromeCastの場合は映像も音声も画面から出力されます)。これは手持ちの端末で確認しただけなので、OSやデバイスで変わってくるかもしれません。端末によっては、音声が出力されているにも関わらずデバイスが選択状態にならないことがあるかもしれませんので、その際は報告いただけると助かります。また、イヤホンとUSBは後勝ち優先出力になっているのですが、この状態でどちらから音声が出力されているかを識別させる方法が分からなかったので同時に接続するとデバイス状態に齟齬が出ます。ご了承下さい

また、これに伴いメニューの構成および挙動を少し変更しています。従来、メニューをタップするとBluetoothデバイスの接続・切断動作になっていましたが、変更後は設定ダイアログの表示になります。Bluetoothデバイスの接続・切断は、該当デバイス項目の右側にあるボタンを押して下さい。

出力デバイス設定の変更

出力デバイス毎に設定できる項目を大幅に変更しました。従来、設定画面にあった項目をいくつかデバイス単位に変更できるようにしいています。この設定は該当デバイスが接続状態になっている場合に有効になります。
追加した(もしくは設定画面から移動した)設定は以下の通りです。

再生可能:OFFの場合、このデバイスが出力状態の場合、再生を抑止しします。
再生ボタン拡張:このボタンの2回押し、3回押しで曲送り・曲戻しをします。
アプリ起動:デバイス接続時にアプリを表示します。
音声フォーカス:デバイス接続時に音声フォーカスを取得します。
接続時:デバイス接続時の再生状態をコントロールします。
切断時:デバイス切断時の再生状態をコントロールします。

従来のダイアログには、「自動起動を抑止」の設定がありましたが、それは「接続時」の項目に移動しています。

各項目の先頭についているチェックボックスをONにすると設定項目が有効になります。OFFの項目については、「通常」のデバイス設定を使用します。

バージョンアップに伴い、設定は自動的に移行されます。…されるはずです。されなかったらすいません。

非同期歌詞のスクロール調整

非同期歌詞の自動スクロール方法を少し調整しています。スクロール位置が従来と少しずれるかもしれません。また、スクロール位置調整に使用するイントロ・アウトロ時間のデフォルト値を変更しています。

再生速度機能の修正

再生速度変更した際、歌詞が追従しないなどの不具合を一部修正しています。

外部アプリ通知が動作しない問題修正

外部アプリ通知機能が動作しなくなっていた問題を修正しています。かなり以前からおかしかったので、ずっと機能していなかったですね…。

2019-02-09 Ver. 3.3.1

Galaxyシリーズ端末で再生ができない問題修正

Galaxy端末で、再生がうまくできない問題を修正しました。これは、再生速度の調整機能によるもので、端末固有の挙動の違いによるものでした。対応策として、再生処理を少し調整しています。

端末起動時にエラーとなる問題修正

端末起動時にエラーが出力される問題があったのですが、修正しました。画面が破棄されてContextの参照が途切れる場合があることが要因だったようです。

2019-02-24 Ver. 3.3.2

プラグインのバグを修正

プラグインが正しく動作しない、プラグインの処理が完了しないといった各種問題があったため、プラグイン周りの処理を修正しています。サラッと書いていますが、結構バグまみれだったので、子コードを大きく変更しています。

Medoly Ver. 3.2.5, 3.2.6, 3.2.7

2018-11-24 Ver. 3.2.5

  • アプリのデザインを変更 (画面、アイコン、ウィジェットなど)
  • ループ時に再生速度がリセットされる問題を修正

2018-11-25 Ver. 3.2.6

  • 無効なコードを削除しました

2018-12-01 Ver. 3.2.7

  • アイコンを変更
  • 一部機種で再生速度が変更できない問題を修正
  • ウィジェット調整
  • まれに落ちる問題を修正

2018-11-24 Ver. 3.2.5

アプリのデザインを変更 (画面、アイコン、ウィジェットなど)

アプリのデザインを全体的に見直しました。

デザインをフラットな感じにしています。近年のデザインの主流がフラットなデザインを主体としたUIなので、それを意識して近づけてみた感じです。Androidが標準で推進しているマテリアルデザインとは呼ぶには無理がありますが…。また、それに併せてウィジェットや(独自にレイアウトした)通知もデザインを変更しています。

加えて、アプリ上で使用している各種アイコンを一新しています。今までPNGで作成していたアイコン画像を、ベクタ画像に差し替えました。これは、アイコン作成や管理の手間を省略するとともに、各種解像度に適切に対応できるようにするためです(具体的には、昔作ったアイコンの中には、xxxhdpiに対応していないアイコンが含まれていたりしました)。Android Studioに標準で含まれているものや、過去作成したものを再利用したものの他、デザインが実体に合わない一部のアイコンは、新たに取得・作成しています。

ループ時に再生速度がリセットされる問題を修正

再生速度変更時、ループ時に再生速度がリセットされてしまう問題があったため、修正しました。

2018-11-25 Ver. 3.2.6

無効なコードを削除しました

開発中に挿入した余計なコードが含まれており、一部ダイアログが開かなくなっていた問題があったため、修正しました。

2018-12-01 Ver. 3.2.7 (追記)

アイコンを変更

ランチャーアイコン(ホーム画面等に表示されるアプリアイコン)のデザインを変更しました。背景をちょっと弄ってます。
ちなみに、Android 8.0 (Oreo)から、背景は必ず付けないといけない(標準で丸い形状にしないといけない)ということになっていますので、この辺は仕方なしの変更です。

一部機種で再生速度が変更できない問題を修正

Ver. 3.2.5で作成した再生速度変更機能ですが、一部機種で再生速度が変更できないというユーザ様からの報告があり、調査して修正しました。ちなみに、この挙動が確認できたのは以下の2機種です。

  • Sony Xperia Z3
  • Huawei P10 lite

恐らく、他にあったかと思いますが、とりあえず問題は種数セイしました。この変の技術情報は、そのうち別途書こうかと思います。

ウィジェット調整

ウィジェット周りを少し調整しています。それから、ウィジェット配置時のサムネイル画像が古いままだったので差し替えてます。

まれに落ちる問題を修正

希にアプリが落ちる問題が2件ほどエラーレポートにあがっていたので、修正しました。

Medoly Ver. 3.2.0, 3.2.1, 3.2.2, 3.2.3

実に8ヶ月ぶりの更新です。
転職、引越など色々と重なってしまったため、対応がかなりご無沙汰になっていました。だいぶ落ち着いてきたのでこれから徐々に更新していくつもり。多分。できれば。
今回は、以前から少しずつ変更していた内容を一気にリリースした感じなので、内容多めです。

2018-10-30 Ver. 3.2.0

  • メディアの再生速度設定追加 (Android 6.0 以降)
  • アルバムアート・歌詞の表示設定変更
  • 有線デバイス接続時の設定を追加
  • 画面の回転・保持設定をデバイス毎の設定に変更
  • 音量の管理をデバイス毎の設定に変更
  • 音量ダイアログを変更
  • 表示タブの長押し、ダブルタップを変更
  • 内部的なメディア管理処理を変更
  • オーバーレイの自動非表示機能追加
  • 言語切替え時の処理を修正
  • アプリがたまに落ちる問題を修正

メディアの再生速度設定追加 (Android 6.0 以降)

メディアの再生速度を調整できるようにしました。Android 6.0以降必須です。

再生速度の調整は、再生順序ポップアップ内にある、再生速度欄から調整してください。1〜400%まで任意に調整できます(標準は100%)。入力欄を1回タップすると候補リストが表示されます。(2回目のタップで入力モードに入ります)
また、「パラメータ」機能において再生速度を保存対象することができるようになっています。

なおこの機能を使用すると、カーナビ等でリモートから操作する機器において、再生位置が正しく追従されなくなる場合があります。これは、リモート側が速度変更に対応していないためです。
細かい話をすると、プレイヤーからは再生位置を断続的に送信しているわけではなく、再生開始と同時に再生速度を送信しています。これを正しく処理できる機器やソフトなら、恐らく再生位置は正しく追従するはずです。しかし、これを正しく処理できるものは、今の所見たことないですね…。

アルバムアート・歌詞の表示設定変更

アルバムアートおよび歌詞の表示設定を変更しました。それに伴い、表示優先度が多少変わりますので、お手持ちの環境では以前と異なる表示になったという事象が発生するかもしれません。

今回の変更で、アルバムアートおよび歌詞の表示対象が細かく設定できるようになりました。具体的には、メディアのプロパティ情報を参照して、表示対象となるファイル名を正規表現で設定できるようになりました。また、複数のファイル名パターンが設定可能となり、優先度を設定できるようになりました。

正規表現は普通の人には設定するのは難しいので、以下のようなパターンが設定できるようになっています。必要に応じて追加・削除するようにしてください。自由な編集もできます。

  • 固定文字 [(albumart|artwork|cover|folder|front|back|thumbnail|thumb|thumbs)] (アルバムアートの場合)
  • メディアファイル名と一致 [%MEDIA_FILE_NAME_BASE%]
  • メディアファイル名から開始 [%MEDIA_FILE_NAME_BASE%.*]
  • メディアファイル名を含む [.%MEDIA_FILE_NAME%.]
  • タイトルを含む [.%MEDIA_TITLE%.]
  • タイトル、アーティストを含む [(?=.%MEDIA_TITLE%)(?=.%MEDIA_ARTIST%).*]
  • タイトル、アルバムを含む [(?=.%MEDIA_TITLE%)(?=.%MEDIA_ALBUM%).*]
  • トラック番号から開始 [0%MEDIA_TRACK%([^\d].)?]

従来通り、アルバムアート、歌詞それぞれについて、メディアフォルダと追加の固定フォルダの2カ所について設定可能です。
なお、この変更に伴い従来の設定は一部削除されてしまいます。お手数ですが、再設定をお願いします。

有線デバイス接続時の設定を追加

有線デバイス接続時の設定を追加しました。

アナログのイヤホンジャックに接続した場合、有線デバイスの設定が適用されます。なお、有線接続とBluetoothの両方が接続されていた場合、有線接続が優先されます。
なお、現状USB接続のイヤホンには適用されません。その辺りは近いうちに修正したいと思います。

画面の回転・保持設定をデバイス毎の設定に変更

音量の管理をデバイス毎の設定に変更

この2件はセットです。いくつか設定を出力デバイスの設定に移動させています。
従来、アプリ音量はアプリに1つだけの設定だったのですが、デバイス単位で保存するようにしました。また、従来の画面スタイルの設定に存在した画面回転および画面保持の設定を、デバイス毎に保存するようにしました。

デバイス毎に出力される音量に違いがあることを考えれば、出力デバイス毎に音量を保存するのは理に適っていると思いますので、これについては理解しやすいと思います。
もう一つの、画面回転および画面保持の設定が出力デバイス毎に保存されることについては、やや違和感があるかと思います。恐らく、設定の行方が分からなくなった方も多いと思います。
例えば自分の場合、車を運転すると携帯を車載ホルダーにセットして横向きに使う事が多いのですが、その際に自動的に横向きにできるようにしたかったため、このような設定配置としました。あと、将来的にはHDMI接続時に設定を切り替えるような仕組みも考えているので、その時にも有効利用できると考えています。

あとこれに伴い、出力デバイスの設定の適用方法を少し見直しています。特に何も設定しない場合、「通常」の設定が適用されます。必要に応じて、デバイス単位に設定で上書きすることができます。これは、設定項目にあるチェックを入れると有効になります。

音量ダイアログを変更

音量ダイアログについて、現在音量を保持しているデバイスの名称およびボリュームの値を表示するようにしました。

表示タブの長押し、ダブルタップを変更

表示タブの内容の長押し、ダブルタップについて、今まで設定でカスタマイズできるようになっていたのですが、これを廃止しました。以降は、表示タブの長押しで同期歌詞のシークまたはメニューの表示、ダブルタップで画面の最大化で固定となります。
廃止理由は、処理が色々面倒だったのと、カスタマイズする必然性が薄かったためです。
これに伴い、表示スタイルの設定について、文言等が少し変更されています。

内部的なメディア管理処理を変更

実は、これが今回の最大の変更点になります。ただし、表向きの機能に変更はありません。内部的なクラス構成を見直し、クラスの分割やリファクタリングにより、処理を大幅に見直しました。これは、メンテナンス性や、今後の機能拡張を見越した上での変更です。これにより、改造や拡張がやりやすくなり、今後の開発がやりやすくなりました。
ただ、再生等で以前と異なる部分が発生している可能性があるので、気づいた点があれば報告いただけると助かります。

オーバーレイの自動非表示機能追加

表示タブのオーバーレイ表示を自動的に消去する設定を追加しました。デフォルトはONです。
これは、表示タブを4秒間操作しないとオーバーレイを非表示にします(以前は、表示/非表示切り替えは画面のタップのみ)。
表示スタイルダイアログ上に、これのON/OFFを切り替える設定を設けました。

言語切替え時の処理を修正

以下のサイトの内容を元に、言語切替え時の処理を見直しました。

[海外対応] AndroidのLocale周りまとめ [多言語対応] - 言いたいことはそれだけか

アプリがたまに落ちる問題を修正

StickyListHeadersというライブラリについて、Android 8.0からエラーが発生するようになっていたため、修正版ライブラリに差し替えています。

参考: Android O Beta - java.lang.IllegalStateException: Handling non empty state of parent class is not implemented · Issue #477 · emilsjolander/StickyListHeaders

2018-10-30 Ver. 3.2.1

  • アプリが落ちるバグを修正

アプリが落ちるバグを修正

バージョンアップに伴い設定値の一部を変更したのですが、一部設定がnullのままの状態で参照されてエラーとなる事象があったため、nullチェックを追加しました。

2018-11-13 Ver. 3.2.2

  • 再生順序のバグを修正
  • 一部テキスト修正

再生順序のバグを修正

これはユーザからの報告があったので対応しました。
再生順序ポップアップメニューで、再生済みメディアを「無視」する設定にしていた場合、ループが正しく設定されない不具合があったので修正しました。これは以前からあったバグらしいのですが、全然気付かなかった…。ちなみに原因は、switch文のbreak抜けバグという、素人かと思うよなミスでした…。

一部テキスト修正

新しく追加した機能について、テキスト周りを少し修正しました。

2018-11-13 Ver. 3.2.3

ループカウントのバグを修正

これはユーザからの報告があったので対応しました。
ループカウントが設定されていた場合、ループカウントが終わって次のメディアに切り替わるところで再生が停止してしまうバグがあったので修正しました。

転職しました

私事ですが、先日転職しました。

前職は主に業務システムを開発する会社だったのですが、今度はモバイルアプリの開発ができる会社です。
Medolyを開発していく中で、やはりこちらの方面をのばしたいという思いが強くなり、アプリ開発ができる会社に移ることとしました。

転職活動は3月頃から始めており、わりと余裕が無かったのですが、転職と引越を終えて、少し落ち着いてきた感じです。
Medoly開発が完全に中断している状態だったのですが、少しずつ調子を取り戻したいと思います。メールや掲示板、コメント等でいただいた不具合や要望はとりあえずまとめて対応したいと思っていますので、今少しお待ち頂ければと思います。御迷惑をおかけして申し訳ありません。

これからもMedolyを愛用頂けるととても嬉しいです。

Medoly Ver. 3.1.0, 3.1.1, 3.1.2, 3.1.3

2017-12-10 Ver. 3.1.0**

  • Android 8.0 (Oreo) 対応
  • 再生ボタン長押しによる停止予約機能追加
  • いくつかの問題修正 (再生履歴の登録、ウィジェットレイアウト、標準サムネイル読込み、等)

Android 8.0 (Oreo) 対応

本バージョンより、Android 8.0 (Oreo) に対応しました。この前のバージョンでは、通知が正しく動作しなかったり、再生時に変な音が入り込んだり、挙動がおかしくなっていたはずです。
Android 8.0ではアプリのバックグラウンド動作に変更が入り、基本的にバックグラウンドで画面を出さずに動くアプリの動作を抑制する方針になっています。これはバッテリーの抑制や、セキュリティ対策といった面があるようです。アプリを動かす際は基本的に、画面を出すか(これはウィジェット等も含むようです)、通知欄にアイコンを出すか、という選択になります(開発SDKの’バージョンを上げなければ旧来の動作のままになりますが、私はウッカリ上げてしまったもので…。)。

バックグラウンド実行制限 | Android Developers
Android 8.0のNotification Badgesの仕組み – Qiita

音楽再生アプリは、バックグラウンドで動く動作が普通です。そのため、このAndoroid 8.0の仕様にかなり密接に関わります。そのため、通知表示周りをだいぶ色々弄っており、通知の出し方を一通り見直してみました。
その副作用として、前バージョンまで存在していた再生・停止時の通知アイコンのちらつきが解消されています。(これは、コードを作り直してたらそういうやり方が分かった、という話です。)

余談ですが、私が現在メインで使用している端末はAndroid 6.0です。別途タブレットに7.1の物があります。ところが、現状でAndroid 8を手に入れるアテが無いため、Andorid 8の対応は後手にまわる可能性があります。とりあえず、Android 8のエミュレータで動作は確認していますが、もし何かありましたらご連絡いただければ助かります。

再生ボタン長押しによる停止予約機能追加

これはちょっとした新機能です。

メディアの再生中に再生停止ボタンを長押しすると、停止ボタンアイコンが青くなります。この状態の場合、現在再生中のメディアの再生が完了した時に、再生が停止します。停止予約機能と思ってください。メディアを切り替えたり、再生が停止した場合に解除されます。
「今の曲が終わったらちょっと曲を止めたいな」ぐらいの感覚で使うイメージです。

いくつかの問題修正 (再生履歴の登録、ウィジェットレイアウト、標準サムネイル読込み、等)

今回の変更で多数のバグを修正しています。
* コンテンツプロバイダに未登録の曲も再生履歴から再生キューに追加できるようになりました。
* ウィジェットレイアウトが一部崩れていたので修正しました。
* アルバムアートが無い場合に再生キューのサムネイル画像がちらついていた問題を修正しました。
* 出力デバイスダイアログの内容を一部見直しました。

2017-12-12 Ver. 3.1.1

  • 再生終了時の不具合を修正

再生終了時の不具合を修正

再生停止時にアプリが落ちる問題があったので修正しました。

2017-12-17 Ver. 3.1.2

  • 共有向けURIを変更
  • 不具合を修正

共有向けURIを変更

Android 7.0以降では、ストレージのパスを外部のアプリに送る際に制限がつくようになりました。具体的にはfile://のURLは外部アプリに送ることができなくなり、代わりにconotent://を使用するようになります。このcontent://を取得するにはいくつかの方法があるのですが、基本的には「アプリ自身の管理可能なストレージパス」に限定されてしまいます。
ところが、Medoly内部はどうしてもfile://で扱うパスでないと各種操作を行うことができません。そこで、外部アプリにURIを送る際にfile://とcontent://の変換を行うのですが、この時にSDカードのパスを取得できず、SDカードのファイルを扱うためには「一旦自身の管理するパスにファイルをコピーした上で、そのURIをcontent://に変換する」という方法を取らざるを得ませんでした。以前この辺りの対応を行ったのですが、対応が曖昧になっていたところがあります。
ところが、最近色々調べていくうちに、file://のパスをそのままcontent://のパスに変換するという方法があることが分かり、実装してみた次第です。
具体的には、アプリのパスを定義するXMLファイルにfiles-path、cache-path。external-path等があるのですが、そこにroot-pathを設定する、というものです。

fileProvider – Any specific reason to use “root-path”? · Issue #129 · spacecowboy/NoNonsense-FilePicker

この辺はドキュメントに書かれていないので隠し技みたいな感じなのですが、とりあえずAndroid 8でも動いているようなので、一応有効なようです。ただあまり推奨されるやり方ではなさそうなので、いつ使えなくなるかは知りません。

不具合を修正

プロパティ情報に歌詞が含まれていなかったため、修正しました。

2017-12-21 Ver. 3.1.3 (2017-12-21 追記)

  • サムネイルのエラーを修正

サムネイルのエラーを修正

サムネイルを表示する際にエラーで落ちる場合がある問題を修正しました。

Medoly Ver. 3.0.5, 3.0.6

2017-10-23 Ver. 3.0.5
– アルバムアートのページスクロール機能追加
– メディア読込みの高速化
– ウィジェット調整
– 安定性向上
– いくつかの問題を修正

2017-11-04 Ver. 3.0.6
– ダイアログ調整
– 検索条件の削除機能追加
– ダウンロード歌詞が表示されない問題修正
– 画面表示修正

2017-10-23 Ver. 3.0.5

アルバムアートのページスクロール機能追加

タッチスクロールでアルバムアートを切り替えられる機能を追加しました。
アルバムアートが画面の前面にある状態(歌詞の裏に表示されていない状態)で、複数のアルバムアートを縦方向タッチスクロールで切り替えることができます。切り替えられるアルバムアートは、Ver.3.0.0で追加したアルバムアート切替え機能と同様となります。
なお、アルバムアートと歌詞が表示された状態では全面が歌詞スクロールになっていますが、レイアウトオプションで切り替えることで、アルバムアートのスクロールを行うことができます。

メディア読込みの高速化

メディアの読込み機能をやや高速化しました。
メディアを読込んだ際にタグ情報を一旦全部読込むのですが、これをメディア読込み時、アルバムアート読込み時、歌詞読込み時の3回行っていていました。Ver.1.0からずーっとこの状態だったのですが、完全に無駄な処理だったので、読込を最初の1度だけに変更することで高速化しました。
まぁ、ずっと潜在してた無駄な処理をやめただけです。

ちなみに、メディア読込みの高速化はまだ対策が一つ残っています。メディアを非同期で読込むことで、応答速度を高速化することが出来るのですが、かなり難しいのでまだ保留中です。

ウィジェット調整

ウィジェットのレイアウトを少し調整し、以前の変更でウィジェットのレイアウトがおかしくなっていたのを修正しました。
ウィジェットについては、今の可変レイアウトではなく、きちんとしたレイアウトが欲しいという要望があがっているのですが、固定レイアウトは全員を満足させるのは難しいし、作りすぎると管理が面倒なので、保留中です…。

安定性向上

動作安定性を向上させました。
素早く曲を切り替えると不安定になる問題や、通知領域の更新処理が改善されています。

いくつかの問題を修正

バグが色々あったので修正しました。
画面がうまく更新されない問題や、OutOfMemoryやRuntimeException等で、たまにアプリが落ちている問題が修正されたと思います。

2017-11-04 Ver. 3.0.6

ダイアログ調整

ダイアログを全体的に見直しています。
マテリアルデザインの変更によってダイアログのボタン位置がずれていたのですが、それを全て統一して整えました。基本的に、左側にキャンセル/閉じるボタン、右側にOK/開くボタンのようなスタイルで統一されています。ボタン位置がずれて御迷惑をおかけするかもしれませんが、これはAndroidのダイアログデザインに従った結果こうのようにしています。ご了承ください。
これに併せて、一部ダイアログにHoloスタイルの物が残っていたので、これをマテリアルデザインに置換えました。

検索条件の削除機能追加

検索条件の削除機能を追加しました。検索画面で検索をした際に表示される検索条件をタップすると、削除対象の検索条件メニューが表示されます。これをタップすると、該当の検索条件が削除され、メディアが再検索されます。

ダウンロード歌詞が表示されない問題修正

歌詞をダウンロードした際に画面の歌詞が更新されない問題を修正しました。

画面表示修正

画面のレイアウトや、アルバムアート表示ボタンが表示されたままになる問題等を修正しました。
また、画面を画面を最大化する時に落ちる問題を修正しました。

その他

余談ですが、このバージョンでバージョンコードが100になりました。

これは、バージョンアップ毎にカウントアップする内部的なバージョン番号です。表示上のバージョン番号(Ver. 3.0.6)と異なり、Android側で管理されます。バージョンアップ前の番号より大きい整数なら何でもいいのですが、自分は0からバージョンアップ毎に1ずつ増やしてたので、このバージョンで100回リリースしたことになります。思えば遠くに来たもんだ。
何はともあれ、これからもどうぞよろしくお願いします。