今回は、以前から少しずつ変更していた内容を一気にリリースした感じなので、内容多めです。以降)メディアの再生速度を調整できるようにしました。再生速度の調整は、再生順序ポップアップ内にある、再生速度欄から調整してください。1〜400%まで任意に調整できます(標準は100%)。入力欄を1回タップすると候補リストが表示されます。(2回目のタップで入力モードに入ります)また、「パラメータ」機能において再生速度を保存対象することができるようになっています。この機能を使用すると、カーナビ等でリモートから操作する機器において、再生位置が正しく追従されなくなる場合があります。これは、リモート側が速度変更に対応していないためです。細かい話をすると、プレイヤーからは再生位置を断続的に送信しているわけではなく、再生開始と同時に再生速度を送信しています。これを正しく処理できる機器やソフトなら、恐らく再生位置は正しく追従するはずです。これを正しく処理できるものは、今の所見たことないですね...。アルバムアート・歌詞の表示設定変更アルバムアートおよび歌詞の表示設定を変更しました。それに伴い、表示優先度が多少変わりますので、お手持ちの環境では以前と異なる表示になったという事象が発生するかもしれません。今回の変更で、アルバムアートおよび歌詞の表示対象が細かく設定できるようになりました。具体的には、メディアのプロパティ情報を参照して、表示対象となるファイル名を正規表現で設定できるようになりました。複数のファイル名パターンが設定可能となり、優先度を設定できるようになりました。正規表現は普通の人には設定するのは難しいので、以下のようなパターンが設定できるようになっています。必要に応じて追加・削除するようにしてください。自由な編集もできます。[0%MEDIA_TRACK%([^\d].)?]従来通り、アルバムアート、歌詞それぞれについて、メディアフォルダと追加の固定フォルダの2カ所について設定可能です。この変更に伴い従来の設定は一部削除されてしまいます。お手数ですが、再設定をお願いします。有線デバイス接続時の設定を追加しました。アナログのイヤホンジャックに接続した場合、有線デバイスの設定が適用されます。有線接続とBluetoothの両方が接続されていた場合、有線接続が優先されます。現状USB接続のイヤホンには適用されません。その辺りは近いうちに修正したいと思います。音量の管理をデバイス毎の設定に変更この2件はセットです。いくつか設定を出力デバイスの設定に移動させています。従来、アプリ音量はアプリに1つだけの設定だったのですが、デバイス単位で保存するようにしました。従来の画面スタイルの設定に存在した画面回転および画面保持の設定を、デバイス毎に保存するようにしました。デバイス毎に出力される音量に違いがあることを考えれば、出力デバイス毎に音量を保存するのは理に適っていると思いますので、これについては理解しやすいと思います。一つの、画面回転および画面保持の設定が出力デバイス毎に保存されることについては、やや違和感があるかと思います。設定の行方が分からなくなった方も多いと思います。自分の場合、車を運転すると携帯を車載ホルダーにセットして横向きに使う事が多いのですが、その際に自動的に横向きにできるようにしたかったため、このような設定配置としました。あと、将来的にはHDMI接続時に設定を切り替えるような仕組みも考えているので、その時にも有効利用できると考えています。あとこれに伴い、出力デバイスの設定の適用方法を少し見直しています。何も設定しない場合、「通常」の設定が適用されます。必要に応じて、デバイス単位に設定で上書きすることができます。これは、設定項目にあるチェックを入れると有効になります。音量ダイアログについて、現在音量を保持しているデバイスの名称およびボリュームの値を表示するようにしました。表示タブの内容の長押し、ダブルタップについて、今まで設定でカスタマイズできるようになっていたのですが、これを廃止しました。以降は、表示タブの長押しで同期歌詞のシークまたはメニューの表示、ダブルタップで画面の最大化で固定となります。廃止理由は、処理が色々面倒だったのと、カスタマイズする必然性が薄かったためです。これに伴い、表示スタイルの設定について、文言等が少し変更されています。実は、これが今回の最大の変更点になります。表向きの機能に変更はありません。内部的なクラス構成を見直し、クラスの分割やリファクタリングにより、処理を大幅に見直しました。これは、メンテナンス性や、今後の機能拡張を見越した上での変更です。これにより、改造や拡張がやりやすくなり、今後の開発がやりやすくなりました。再生等で以前と異なる部分が発生している可能性があるので、気づいた点があれば報告いただけると助かります。タブのオーバーレイ表示を自動的に消去する設定を追加しました。デフォルトはONです。これは、表示タブを4秒間操作しないとオーバーレイを非表示にします(以前は、表示/非表示切り替えは画面のタップのみ)。表示スタイルダイアログ上に、これのON/OFFを切り替える設定を設けました。以下のサイトの内容を元に、言語切替え時の処理を見直しました。8.0からエラーが発生するようになっていたため、修正版ライブラリに差し替えています。3.2.1アプリが落ちるバグを修正アプリが落ちるバグを修正バージョンアップに伴い設定値の一部を変更したのですが、一部設定がnullのままの状態で参照されてエラーとなる事象があったため、nullチェックを追加しました。再生順序のバグを修正これはユーザからの報告があったので対応しました。再生順序ポップアップメニューで、再生済みメディアを「無視」する設定にしていた場合、ループが正しく設定されない不具合があったので修正しました。これは以前からあったバグらしいのですが、全然気付かなかった...。ちなみに原因は、switch文のbreak抜けバグという、素人かと思うよなミスでした...。新しく追加した機能について、テキスト周りを少し修正しました。3.2.3ループカウントのバグを修正これはユーザからの報告があったので対応しました。ループカウントが設定されていた場合、ループカウントが終わって次のメディアに切り替わるところで再生が停止してしまうバグがあったので修正しました。2018-11-17転職しました私事ですが、先日転職しました。前職は主に業務システムを開発する会社だったのですが、今度はモバイルアプリの開発ができる会社です。Medolyを開発していく中で、やはりこちらの方面をのばしたいという思いが強くなり、アプリ開発ができる会社に移ることとしました。転職活動は3月頃から始めており、わりと余裕が無かったのですが、転職と引越を終えて、少し落ち着いてきた感じです。Medoly開発が完全に中断している状態だったのですが、少しずつ調子を取り戻したいと思います。メールや掲示板、コメント等でいただいた不具合や要望はとりあえずまとめて対応したいと思っていますので、今少しお待ち頂ければと思います。御迷惑をおかけして申し訳ありません。これからもMedolyを愛用頂けるととても嬉しいです。この前のバージョンでは、通知が正しく動作しなかったり、再生時に変な音が入り込んだり、挙動がおかしくなっていたはずです。8.0ではアプリのバックグラウンド動作に変更が入り、基本的にバックグラウンドで画面を出さずに動くアプリの動作を抑制する方針になっています。これはバッテリーの抑制や、セキュリティ対策といった面があるようです。アプリを動かす際は基本的に、画面を出すか(これはウィジェット等も含むようです)、通知欄にアイコンを出すか、という選択になります(開発SDKの’バージョンを上げなければ旧来の動作のままになりますが、私はウッカリ上げてしまったもので...。Qiita音楽再生アプリは、バックグラウンドで動く動作が普通です。8.0の仕様にかなり密接に関わります。そのため、通知表示周りをだいぶ色々弄っており、通知の出し方を一通り見直してみました。その副作用として、前バージョンまで存在していた再生・停止時の通知アイコンのちらつきが解消されています。(これは、コードを作り直してたらそういうやり方が分かった、という話です。別途タブレットに7.1の物があります。8の対応は後手にまわる可能性があります。8のエミュレータで動作は確認していますが、もし何かありましたらご連絡いただければ助かります。再生ボタン長押しによる停止予約機能追加これはちょっとした新機能です。メディアの再生中に再生停止ボタンを長押しすると、停止ボタンアイコンが青くなります。この状態の場合、現在再生中のメディアの再生が完了した時に、再生が停止します。停止予約機能と思ってください。メディアを切り替えたり、再生が停止した場合に解除されます。「今の曲が終わったらちょっと曲を止めたいな」ぐらいの感覚で使うイメージです。(再生履歴の登録、ウィジェットレイアウト、標準サムネイル読込み、等)今回の変更で多数のバグを修正しています。コンテンツプロバイダに未登録の曲も再生履歴から再生キューに追加できるようになりました。ウィジェットレイアウトが一部崩れていたので修正しました。アルバムアートが無い場合に再生キューのサムネイル画像がちらついていた問題を修正しました。出力デバイスダイアログの内容を一部見直しました。再生停止時にアプリが落ちる問題があったので修正しました。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を設定する、というものです。8でも動いているようなので、一応有効なようです。推奨されるやり方ではなさそうなので、いつ使えなくなるかは知りません。不具合を修正プロパティ情報に歌詞が含まれていなかったため、修正しました。追記)サムネイルのエラーを修正サムネイルのエラーを修正サムネイルを表示する際にエラーで落ちる場合がある問題を修正しました。3.0.5アルバムアートのページスクロール機能追加タッチスクロールでアルバムアートを切り替えられる機能を追加しました。アルバムアートが画面の前面にある状態(歌詞の裏に表示されていない状態)で、複数のアルバムアートを縦方向タッチスクロールで切り替えることができます。切り替えられるアルバムアートは、Ver.3.0.0で追加したアルバムアート切替え機能と同様となります。アルバムアートと歌詞が表示された状態では全面が歌詞スクロールになっていますが、レイアウトオプションで切り替えることで、アルバムアートのスクロールを行うことができます。メディア読込みの高速化メディアの読込み機能をやや高速化しました。メディアを読込んだ際にタグ情報を一旦全部読込むのですが、これをメディア読込み時、アルバムアート読込み時、歌詞読込み時の3回行っていていました。Ver.1.0からずーっとこの状態だったのですが、完全に無駄な処理だったので、読込を最初の1度だけに変更することで高速化しました。潜在してた無駄な処理をやめただけです。ちなみに、メディア読込みの高速化はまだ対策が一つ残っています。メディアを非同期で読込むことで、応答速度を高速化することが出来るのですが、かなり難しいのでまだ保留中です。ウィジェット調整ウィジェットのレイアウトを少し調整し、以前の変更でウィジェットのレイアウトがおかしくなっていたのを修正しました。素早く曲を切り替えると不安定になる問題や、通知領域の更新処理が改善されています。いくつかの問題を修正バグが色々あったので修正しました。画面がうまく更新されない問題や、OutOfMemoryやRuntimeException等で、たまにアプリが落ちている問題が修正されたと思います。3.0.6ダイアログ調整ダイアログを全体的に見直しています。マテリアルデザインの変更によってダイアログのボタン位置がずれていたのですが、それを全て統一して整えました。基本的に、左側にキャンセル/閉じるボタン、右側にOK/開くボタンのようなスタイルで統一されています。ボタン位置がずれて御迷惑をおかけするかもしれませんが、これはAndroidのダイアログデザインに従った結果こうのようにしています。これに併せて、一部ダイアログにHoloスタイルの物が残っていたので、これをマテリアルデザインに置換えました。削除機能を追加しました。検索画面で検索をした際に表示される検索条件をタップすると、削除対象の検索条件メニューが表示されます。これをタップすると、該当の検索条件が削除され、メディアが再検索されます。レイアウトや、アルバムアート表示ボタンが表示されたままになる問題等を修正しました。画面を画面を最大化する時に落ちる問題を修正しました。余談ですが、このバージョンでバージョンコードが100になりました。これは、バージョンアップ毎にカウントアップする内部的なバージョン番号です。3.0.6)と異なり、Android側で管理されます。バージョンアップ前の番号より大きい整数なら何でもいいのですが、自分は0からバージョンアップ毎に1ずつ増やしてたので、このバージョンで100回リリースしたことになります。思えば遠くに来たもんだ。何はともあれ、これからもどうぞよろしくお願いします。本バージョンより、Androidの対応バージョンを4.1以降としました。3.2、4.0が動作対象外となります。Androidの開発では、Androidのバージョンアップを経ていくと、古いAPIはどんどん非推奨となったり、新しいAndroidに対応した処理を追加していくといった作業が必要になります。そのため、アプリの開発を重ねていくと、古い機能に対応させるために、Androidバージョンによる分岐処理が増えることが避けられません。いう分岐が増えていくと、徐々にソースコードが複雑になり、バグも混入しやすくなるといった問題が出てきます。(古いバージョンに対応されているアプリは、そういう部分に大きな労力を割いていることになります。)そのため、現在では、Ver.3.2、4.0を利用する人もだいぶ少なくなってきたことを考え、今回のバージョンで切り捨てることとしました。利用されている方には大変申し訳ないのですが、あまり細かい部分に労力を割くと他の部分に手が回らなくなってしまうので、ご了承ください。4.1ではメディア操作関連のAPIがたくさん追加されており、このバージョンでの分岐処理が多いため、このバージョン以降の対応とした、という理由もあります。5.0以降となるかと思います。本バージョンで、画面のUIをマテリアルデザインに対応しました。正確に言うと、マテリアルデザインのスタイルを適用しました。マテリアルデザイン対応を正しく考慮すると、フラットなデザインの適用や、UIの設計の見直し等、色々な要素を考える必要があるのですが、真面目に取り組むと大変ですし、従来からUIの互換性もとれないので、現在のところはマテリアルデザインのスタイルを適用するに留めました(ちなみに、従来の画面スタイルは「Holo」といいます)。ついでに、ActionBarのタブ等古くて既に非推奨となっているUIを見直して、現在利用が推奨されているパーツに置換えてます。既存のUIと同じインターフェースを備えたものに置換えているので、利用してる上であまり違和感は無いと思います。この辺りの更新は以前から考えていたので、Ver.3.0.0という節目のバージョンで一気に行ってしまいました。外観的にはマテリアルデザインが一番大きな変更点ですが、内部的に一番大きく変わった部分がこちらです。アルバムアートおよび歌詞について、複数のデータを読み込めるようにしました。メディアファイル内蔵、外部ファイル、コンテンツプロバイダ(Android内蔵の自動生成データベース)のデータを自由に切り替えられるようにしました。内蔵アルバムアート/歌詞について複数のデータが埋め込まれている場合がありますが、これらも全て読み込むようにしています。該当するファイル名の外部ファイルも全て読み込むことができます。(ちなみに、コンテンツプロバイダは常に一つだけです。)とにかく、読み込めるものは全部です。表示データ)で切替えることができます。データの切替えは、プロパティのアルバムアート/歌詞の見出しをタップ→「変更」をタップするか、表示タブの表示ON/OFFアイコンを長押しすることで表示されるメニューから切り替えることができます。現在のところ、データの選択は毎回リセットされてしまいます。荒削りな部分はありますが、少しずつ機能を増やしていければと思っています。標準の通知に対応Android標準の通知に対応しました。5.0よりメディア再生用の標準通知スタイルが用意されているので、それを利用しています。設定画面の「通知」より、従来の独自スタイルの通知にも切り替えることができます。設定画面より通知の色を設定することができます。設定の「通知色」で設定することができます。透明度を最大値(FF)に設定しないと色が適用されない点に注意してください。それ以外の透明度の場合は、標準色に設定されます。7.0より、区間ループが動作しなくなっていたため、処理を変更しました。従来の実装では、ちょっと特殊なやり方でループを実現させていました。それは字幕機能を利用することです。字幕の表示タイミングでイベントが発生することを利用し、ループ時間を設定した字幕データを生成して読み込ませることで、任意のタイミングでのループを実現させていました(これ以外に正確な時間でループさせる方法がなかった)。7.0で使えなくなりました。動画を読み込まないと字幕が動作しないように仕様が変更された物と思われます。仕方ないので、時間のカウンタによるループを行うようにしました。この変更に伴い、ループの位置が毎回微妙にずれるようになりました(ms単位で正確に実行させるのが難しいため)。これは仕様となりますのでご了承ください。いつか、フレーム単位の正確なループを実装したいんですけどね...。(アルバムアート取得・歌詞取得を追加)プラグインのインターフェースを全面的に見直しました。それに伴い、各プラグインも全て更新されています。全てのバーションを上げないと、プラグインが利用できなくなります。この変更の結果、アルバムアートの取得ができるようになっています。Plugin」のみがアルバムアート取得機能の実装をしています。プラグインダイアログを変更プラグインの仕様を変更したことに併せて、プラグインのダイアログ、メニュー周りを全体的に見直しています。これに伴い、プラグインの動作ON/OFF設定がクリアされます。この変更で、ダイアログからプラグインのイベント単位の動作ON/OFFが出来る様になっています。各画面やダイアログに存在していたタブのパーツを置換えました。これは、非推奨となったパーツの置換えや、複雑になっていた処理の簡素化を目的にしています。検索画面のタブ要素を完全に置換えた結果、スワイプでタブを切り替える操作のレスポンスが向上するという良い副作用が出ています。今まで、タグの読み込みにjAudioTaggerを使用していました。バージョンは最新版ではなく、Ver.2.0.4。このバージョンを使用していたのかというと、これより後のバージョンではAndroidで使用するとエラーが発生する問題があったためです。Androidで使用できないライブラリ参照が含まれているようで、改修を試みるも上手く行かず、仕方なくずっとこのバージョンを使用していました。Androidがあることを知ったため、こちらを採用することにしました。バージョンは、2.2.3相当です。バージョンを変えて何が変わったのかよく分かっていないのですが、まぁ新しいバージョンの方が良さそう、ということで。KRAフォーマットの読み取り処理変更タイムタグ歌詞の読み込み処理を修正し、行頭にタイムタグがなくても歌詞として読み込まれるようにしました。これは、RhythmicaLyricsで歌詞を作成した際、歌詞の行頭に記号が含まれると、デフォルトでタイムタグが記号が飛ばされて付与されてしまうため、その動作に合わせています。そもそもの仕様も行頭にタイムタグが付かなくても良い、という仕様であったので、本来の仕様に近づけた、という感じです。いくつかの設定項目を変更プラグインの仕様変更、標準の通知に対応、といった変更に合わせて、設定画面の内容を変更しています。見れば分かるかと思いますので、詳細は割愛します。いくつかの問題を修正その他、多数の問題を修正しています。今回、内部処理を大幅に弄ったことに合わせて、いくつかのバグを修正しています。多少の高速化もされています。同期歌詞において早送り/巻戻しボタンをタップした際、歌詞行の行頭にシークするようにしました。シーク」を有効にすると動作します。非同期歌詞の場合は無効で、通常のシークボタンタップ動作(設定時間だけ再生位置をシーク)になります。早送りボタンを押すと現在の次の歌詞行の行頭、巻き戻しボタンを押すと現在の行の行頭または、前行の行頭に移動します。思い立って機能を追加してみましたが、これは言語学習等の繰り返し再生に有益かな、と思います。プレイリストファイル保存の問題修正プレイリストファイルの作成でフォルダが作成されてしまう問題があったため修正しました。これは、ただの作りこみの際のバグです。リソース管理処理修正アプリ内部に抱えているリソースの解放タイミングを調整しています。これは、解放処理のタイミングによって、解放済みのリソースにアクセスしてアプリがエラーとなる場合があったためです。これに合わせて、その他諸々のバグを修正しています。メディア選択の高速化メディア選択時に同じ処理が2回連続で実行されてしまい、メディア再生までの時間が遅くなっていた問題を修正しました。高速化とは書いてますが、ただのバグ修正です。アルバムアートの表示処理を修正しました。この辺では、アルバムアート読込みに関する修正ばかりしています。いうのも、複数のアルバムアートを読込めるようになったことで、メモリ上に多数の画像が読み込まれる可能性があったため、画像の管理を見直していたためです。ところが、メモリから破棄された画像にAndroidがアクセスしてしまい、エラーが発生する事象が多発しているようで(通知やウィジェット関連の模様)、その辺りの処理を少し見直していました。3.0.2で追加した行頭シーク処理を見直しました。1つ目は、巻き戻しボタンで前の行に戻るための時間を、行頭の再生から1秒以内にしました(変更前は2秒)。これは、繰り返し再生を行う上で2秒は少し長すぎるように思えたためです。2つ目は、再生時間が1秒以内の行はスキップするようにしました。これは、0秒の空白行のような行があると、その部分から前の行に移動できなくなる問題があったためです。y」のような形で保存されていた場合、正常に再生できない問題を修正しています。その他処理修正シークバー操作中にドロワーメニューが開くと、シーク速度の表示が残ってしまう問題の修正とか、検索画面で「ストレージ」タブをタップしても、検索条件がクリアされない問題の修正とか、色々です。3.0.2に続き、ここでも画像読込み処理の修正です。ちなみに、色々調べた末、「あんまり変な画像破棄の処理はやらないでAndroidに任せた方がマシだった」という結論に至っています。トラック番号が正しく表示されない問題修正タグ上に合計トラック番号が存在しない場合、1で出力されてしまっていた問題を修正しました。これは、ユーザ様からの報告で分かったため修正しています。再生キューの先頭・末尾で曲戻し・曲送りを行うと、メディア読込がエラーとなる問題の修正、タイミングによってnull参照のエラーが発生する場合がある問題の修正、等になります。まとめ以上、ダラダラ書いてますが、徐々にバージョンアップを重ねて3.0という節目のバージョンを迎えたので、少し多めの変更を加えてみました。本当はもっと色々やってみたいことはあったのですが、多すぎて手が回らなかったので、今回はこの辺で。3.0リリース時に多少多めにクラッシュが発生してしまいましたが、今のところやや落ち着いています。何か問題がありましたら、ご連絡をお待ちしています。先日サイトを移行したことに伴い、本サイトを全てHTTPS化しました。HTTPでアクセスした場合、自動的にHTTPSにリダイレクトします。前に使用していたレンタルサーバでは、独自ドメインでのSSL化が出来なかったため、移行に伴い全てSSLでアクセスできるようにしました。近年では、HTTPは常時SSLで行う流れになっているので、それに倣ってみました。Encryptを使用しています。何か問題があればまた戻すかもしれませんが、とりあえずこれで運用してみます。検索:検索wa2c趣味でAndroidのメディアプレイヤー「Medoly」を作成中。