いちおう、前お対応をしようとしてたけど、Compatが出る前のやつなので色々強引でした。
今回のバージョンは一通り対応しています。
GooglePlayStoreの仕様が変わり、だれでも参加できるオープンベータ機能が追加されていました。
早速つかってみることに。
こちらのURLからダウンロード、インストールできるようです。
先着1000名様まで
https://play.google.com/apps/testing/jp.co.kayo.android.localplayer
テストが不十分なのでご注意を、、
ほんと暇をみつけてこつこつ作っているので、ときどき度困って作ったっけ?
と??がでながらやっため、gdgdになりつつあります。
Monday, August 31, 2015
Monday, June 15, 2015
壊して作っての繰り返し中
仕事が落ち着いてきたので、開発を再開しました。
しかし、一回開発を止めてしまうとモチベーションをあげるのに苦労します。
とりあえず、目下やらないといけないことは不具合を治すこと。
1 一部の端末でAmpacheの設定後に落ちる。
2 一部の端末で起動できない。
3 画面の切り替え後に落ちる
4 ストリーミング再生のとき、頭の数秒が欠落している。
5 曲が一曲ずつしか再生されらない(連続再生できない)
というような不具合報告がきています。
1,2、3に関しては、Blaur効果のViewが問題のようにおもいます。
これはRenderScriptで直接ハードをガリガリやってるのもあり、相性の悪い端末があるよです。ログを見る限りそう思いました。
4に関しては、ストリーミングの処理にまずい問題があるのかもしれない。テストが不十分な箇所なので、おそらく、一部のサービスの一部のファイルフォーマットでは顕著に問題がでやすいのだとおもいます。
5はよくわからない。
あと、新しくAndroid M Previewがリリースされました。これに伴いDeplicatedなメソッドが増えています。
これらの修正もしないといけない。
というわけで、一旦問題を整理するためにプログラムの掃除をしているところです。
やっと、再生リスト周りの修正がおちついてきて、それをベースに他の画面を修正しようとしているところです。
しかし、一回開発を止めてしまうとモチベーションをあげるのに苦労します。
とりあえず、目下やらないといけないことは不具合を治すこと。
1 一部の端末でAmpacheの設定後に落ちる。
2 一部の端末で起動できない。
3 画面の切り替え後に落ちる
4 ストリーミング再生のとき、頭の数秒が欠落している。
5 曲が一曲ずつしか再生されらない(連続再生できない)
というような不具合報告がきています。
1,2、3に関しては、Blaur効果のViewが問題のようにおもいます。
これはRenderScriptで直接ハードをガリガリやってるのもあり、相性の悪い端末があるよです。ログを見る限りそう思いました。
4に関しては、ストリーミングの処理にまずい問題があるのかもしれない。テストが不十分な箇所なので、おそらく、一部のサービスの一部のファイルフォーマットでは顕著に問題がでやすいのだとおもいます。
5はよくわからない。
あと、新しくAndroid M Previewがリリースされました。これに伴いDeplicatedなメソッドが増えています。
これらの修正もしないといけない。
というわけで、一旦問題を整理するためにプログラムの掃除をしているところです。
やっと、再生リスト周りの修正がおちついてきて、それをベースに他の画面を修正しようとしているところです。
Tuesday, February 10, 2015
バージョン2142000109をリリースしました
最近はGoogle+のユーザグループに軽く修正項目を報告するだけなので、あまり外に対して情報がでていませんでしたが、ちゃんと開発を進めています。
最後のポストからの大きな変更として
・無料版(広告付き)をプレイストアに追加しました。
・「後で聴く」機能を追加しました。
・アルバム一覧、アーティスト一覧、曲一覧のレイアウトを変更しました。
・レーティング機能を追加しました。
・インデックスバーを追加しました。
以上がめぼしい修正です。このほか、多くのバグを修正しています。
無料版についてですが、こちらは、正式版のリリースよりアップデートの頻度が違うという点で住み分けをする予定です。
あくまで無料版はクラウドにアクセスするテスト、あと使用感といったものをみていただくという位置づけです。
更新頻度は次のようになっています。
ベータ版(随時、だいたい週1)>正式版(隔週)>無料版(月1)
それと、レーティング機能としてスマートレーティングという自動機能が追加されています。
振る舞いとしては、
曲の再生が開始されてすぐに曲をスキップした場合、レーティングを−1します。
逆に、最後まで聴くと+1にします。
この機能は、現在のところ正式版でかつ、有料になるプレミアム設定を購入した場合のみ使えるようになります。
次はキャッシュの自動制御機能にとりかかります。
最後のポストからの大きな変更として
・無料版(広告付き)をプレイストアに追加しました。
・「後で聴く」機能を追加しました。
・アルバム一覧、アーティスト一覧、曲一覧のレイアウトを変更しました。
・レーティング機能を追加しました。
・インデックスバーを追加しました。
以上がめぼしい修正です。このほか、多くのバグを修正しています。
無料版についてですが、こちらは、正式版のリリースよりアップデートの頻度が違うという点で住み分けをする予定です。
あくまで無料版はクラウドにアクセスするテスト、あと使用感といったものをみていただくという位置づけです。
更新頻度は次のようになっています。
ベータ版(随時、だいたい週1)>正式版(隔週)>無料版(月1)
それと、レーティング機能としてスマートレーティングという自動機能が追加されています。
振る舞いとしては、
曲の再生が開始されてすぐに曲をスキップした場合、レーティングを−1します。
逆に、最後まで聴くと+1にします。
この機能は、現在のところ正式版でかつ、有料になるプレミアム設定を購入した場合のみ使えるようになります。
次はキャッシュの自動制御機能にとりかかります。
Friday, January 9, 2015
バージョン2142000091をリリースしました
バージョン2142000091をリリースしました。
今週二度目のリリースなので申し訳ないです。
しばらく仕事で忙しくなるので、今回のアップデートから次のアップデートまでは時間が開くとおもいます。(どうしても我慢できなバグが発覚したらすぐに修正します。)
とはいっても一ヶ月以上も間隔は開けたくはないと思っています。
今回のバージョンアップで主な修正は「後で聴く」機能の追加です。
これは以前から待望されていた事前ダウンロード機能です。
再生に影響がないように、再生中の曲がバッファリングしているときはダウンロードは一時停止するようにしています。
あと、次の曲のバッファリングは優先順位を高くするといった動きをします。
ネットワークによってダウンロードの制御もいれたいところですが、今回のバージョンではそこまでの作り込みはしていません。
それと、再生リストに追加時に自動で「後で聴く」に登録する機能も有料オプションになりますが追加しています。
あんまり調子にのって登録しまくると端末の容量がすぐいっぱいになるので気をつけてください。
将来的にはキャッシュの自動削除機能を追加したいので、それまではこまめに手動で削除して欲しいです。
ちなみに、設定のキャシュ削除だと一括で全部削除しますが、キャッシュ一覧からだと選択して削除できます。
今週二度目のリリースなので申し訳ないです。
しばらく仕事で忙しくなるので、今回のアップデートから次のアップデートまでは時間が開くとおもいます。(どうしても我慢できなバグが発覚したらすぐに修正します。)
とはいっても一ヶ月以上も間隔は開けたくはないと思っています。
今回のバージョンアップで主な修正は「後で聴く」機能の追加です。
これは以前から待望されていた事前ダウンロード機能です。
再生に影響がないように、再生中の曲がバッファリングしているときはダウンロードは一時停止するようにしています。
あと、次の曲のバッファリングは優先順位を高くするといった動きをします。
ネットワークによってダウンロードの制御もいれたいところですが、今回のバージョンではそこまでの作り込みはしていません。
それと、再生リストに追加時に自動で「後で聴く」に登録する機能も有料オプションになりますが追加しています。
あんまり調子にのって登録しまくると端末の容量がすぐいっぱいになるので気をつけてください。
将来的にはキャッシュの自動削除機能を追加したいので、それまではこまめに手動で削除して欲しいです。
ちなみに、設定のキャシュ削除だと一括で全部削除しますが、キャッシュ一覧からだと選択して削除できます。
Wednesday, January 7, 2015
再生状態変化によるアプリ連携について
AppWidget等にわたすIntentに以下のような値を設定するようにしました。
このIntentは再生開始時と再生停止時に呼ばれます。
play.stateにtrueがはいっているときは再生中、falseは再生停止です。
それと、"artImage"に設定されたBitmapはNotificaitonに設定されたBitmapです。
albumArtはそのイメージへのURIですがHTTPではなく独自スキーマがはいっているのでご注意ください。
Bitmapを設定すると、サイズが大きいとエラーになったので、一旦テンポラリに保存してそのUriを渡すようにしました。キーの値はalbumArtなのでご注意。テンポラリの画像は次の再生とかキャッシュのクリアなので削除されるのでそのつもりで。
「べ、別におまえに渡すために設定したんじゃないからねーからな!
せっかく取得したのに、もったいねーから設定しておいただけ勘違いすんな。
と、とにかくだ、 artImageを取得すれば簡単に曲のBitmapが取得できるってことだけ覚えてくれたらいいんだよ。
あと、artImageはいま実装したばっかりだからベータ版(2142000090→ 2142000091)でないとつけないかんな。」
Intent broadcast = new Intent(AppWidget1.ACTION_CALL_UPDATEWIDGET); broadcast.putExtra("play.state", mIsPlaying); broadcast.putExtra("artist", mTrack.getArtist()); broadcast.putExtra("title", mTrack.getTitle()); broadcast.putExtra("album", mTrack.getAlbum()); broadcast.putExtra("duration", mTrack.getDuration()); broadcast.putExtra("albumArt", mTrack.getAlbumArt()); broadcast.putExtra("data", mTrack.getUri()); if(notificationIconBitmap!=null) { broadcast.putExtra("artImage", notificationIconBitmap); }
//AppWidget
Intent broadcast = new Intent(AppWidget1.ACTION_CALL_UPDATEWIDGET);
broadcast.putExtra("play.state", mIsPlaying);
broadcast.putExtra("artist", mTrack.getArtist());
broadcast.putExtra("title", mTrack.getTitle());
broadcast.putExtra("album", mTrack.getAlbum());
broadcast.putExtra("duration", mTrack.getDuration());
broadcast.putExtra("data", mTrack.getUri());
if(notificationIconBitmap!=null) {
Uri albumUri = makeAlbumImage(notificationIconBitmap);
if(albumUri!=null) {
broadcast.putExtra("albumArt", albumUri);
}
}
このIntentは再生開始時と再生停止時に呼ばれます。
play.stateにtrueがはいっているときは再生中、falseは再生停止です。
「べ、別におまえに渡すために設定したんじゃないからねーからな!
せっかく取得したのに、もったいねーから設定しておいただけ勘違いすんな。
と、とにかくだ、 artImageを取得すれば簡単に曲のBitmapが取得できるってことだけ覚えてくれたらいいんだよ。
あと、artImageはいま実装したばっかりだからベータ版(
Tuesday, January 6, 2015
バージョン2142000089をリリースしました。
Just Playerのバージョン2142000089をリリースしました。
主な修正は以下のとおりです。
* a2dp対応のBluetoothヘッドフォンに対応
* AmpacheのAlbumArtが表示されなくなる不具合を修正
* シークバーの位置が一時停止後0になる不具合を修正
* ツールバーがときどき消える不具合を修正
* ホームに追加をメニューから選択できるように修正
* PlayStoreに報告が上がっているいくつかのエラーの修正
* Boxをメイン画面に設定するとログインが無限に表示される不具合を修正
今回大きな修正は、A2dpなBluetoothヘッドフォンの対応です。
これまでもペアリング済みのBluetoothヘッドフォンで曲の一時停止、再生といった操作はできていましたが、ペアリングが解除されたり、ヘッドフォンの電源がOffになった場合自動で一時停止されないし、また再接続時に自動で再生がされませんでした。
新しいバージョンでは再生されるようになっています。
それから、早送り、巻き戻しも対応しておきました。
主な修正は以下のとおりです。
* a2dp対応のBluetoothヘッドフォンに対応
* AmpacheのAlbumArtが表示されなくなる不具合を修正
* シークバーの位置が一時停止後0になる不具合を修正
* ツールバーがときどき消える不具合を修正
* ホームに追加をメニューから選択できるように修正
* PlayStoreに報告が上がっているいくつかのエラーの修正
* Boxをメイン画面に設定するとログインが無限に表示される不具合を修正
今回大きな修正は、A2dpなBluetoothヘッドフォンの対応です。
これまでもペアリング済みのBluetoothヘッドフォンで曲の一時停止、再生といった操作はできていましたが、ペアリングが解除されたり、ヘッドフォンの電源がOffになった場合自動で一時停止されないし、また再接続時に自動で再生がされませんでした。
新しいバージョンでは再生されるようになっています。
それから、早送り、巻き戻しも対応しておきました。
Friday, December 12, 2014
ベータ版2142000080をリリースしました。
2142000080をリリースしました。
リリース内容は以下のとおりです。
・Playlist画面、Ampache画面、キャッシュ一覧画面を実装しなしました。
具体的にActionBarをやめてToorlBarに対応し、Fragment化を行いました。
これにより、キャッシュ一覧、再生中、アルバムアートと3画面あったメイン画面のうち、キャッシュ一覧の画面を置き換えることができるようになりました。
ただ、この機能はまだ実装中なのでこれに対応しているのは、プレイリストとAmpacheのみです。今後、Dropbox,Box,GoogleDrive,LocalStoregeと対応していきます。
使い方は、サイドメニュー上のAmpacheやPlaylistの項目を長押しをすることメニューが表示されるので、そこから「ホームに設定」を選択すると置き換えることができます。
・カテゴリ、ソート、表示スタイルを変更できるようになりました。
これは機能によって異なりますが、キャッシュ一覧に関しては、グリッド表示、リスト表示を選択できるようになっています。
・AmpacheのVideo再生に対応しました。
AmpacheのカテゴリをVideoにするとAmpacheに登録されているVideoが一覧に表示されます。
リリース内容は以下のとおりです。
・Playlist画面、Ampache画面、キャッシュ一覧画面を実装しなしました。
具体的にActionBarをやめてToorlBarに対応し、Fragment化を行いました。
これにより、キャッシュ一覧、再生中、アルバムアートと3画面あったメイン画面のうち、キャッシュ一覧の画面を置き換えることができるようになりました。
ただ、この機能はまだ実装中なのでこれに対応しているのは、プレイリストとAmpacheのみです。今後、Dropbox,Box,GoogleDrive,LocalStoregeと対応していきます。
使い方は、サイドメニュー上のAmpacheやPlaylistの項目を長押しをすることメニューが表示されるので、そこから「ホームに設定」を選択すると置き換えることができます。
![]() |
| ホームに設定を選択 |
これは機能によって異なりますが、キャッシュ一覧に関しては、グリッド表示、リスト表示を選択できるようになっています。
・AmpacheのVideo再生に対応しました。
AmpacheのカテゴリをVideoにするとAmpacheに登録されているVideoが一覧に表示されます。
・プログラムを最適化し軽量化しました。
いくつかの依存ライブラリを見直ししプログラムを最適化しました。
・いくつかのバグを修正
たくさん修正したとおもうけど、、、
・320x480の端末でイコライザが操作できない問題を修正しました。
Monday, December 8, 2014
開発状況
毎回、このブログを英語で書くべきか日本語で書くべきか悩むところなのですが、、
いまのところまだ日本人のほうがユーザが多いので、日本語でブログを書いています。
それに僕自身英語苦手なので細かいニュアンスを伝えることも難しいですし。
いまのところまだ日本人のほうがユーザが多いので、日本語でブログを書いています。
それに僕自身英語苦手なので細かいニュアンスを伝えることも難しいですし。
Monday, December 1, 2014
JustPlayerベータ版の登録
ベータ登録の流れ
1 ベータユーザの権利の取得
下記グループへ参加
https://plus.google.com/u/0/communities/106163650254898148553
2 ベータ版のダウンロード
下記URLからダウンロード
https://play.google.com/apps/testing/jp.co.kayo.android.localplayer
Friday, November 28, 2014
不具合、要望、現在のタスク等の確認はIssueサイトへ
不具合、要望、現在のタスク等の確認はIssueサイトへお願いします。
下記のURLはプロジェクトを管理しているサイトの一部になるIssueサイトです。
英語か日本語で書いてください。
https://bitbucket.org/yokmama/just-player3/issues?status=new&status=open
下記のURLはプロジェクトを管理しているサイトの一部になるIssueサイトです。
英語か日本語で書いてください。
https://bitbucket.org/yokmama/just-player3/issues?status=new&status=open
Tuesday, November 18, 2014
Ampache setting check point
1.Did you click Save in the upper right corner of the check button after checking the connection?
2. Whether authentication is successful of Ampache?
Successful it has become the Connected If you are.
3.Menu of Ampache has been added to NavigationDrawer?
Drawer will appear to slide from left.
2. Whether authentication is successful of Ampache?
Successful it has become the Connected If you are.
![]() |
| connfig |
Drawer will appear to slide from left.
Monday, November 17, 2014
新しいJust Playerをリリースしました
約1年近くかけてアプリを再実装し、新しくJust Playerを作り直しました。
このアプリは、Android2.1が発表された当時、時期的には私がXperiaX10を購入した際に、自分で音楽アプリを作ってみたいという気持ちからはじまったものです。
アプリを通じて私自身のAndroidへの理解を深めることを目的としていたため、音楽プレイヤーに本来必要でもないようなものも積極的に実装してみたりとあまりユーザのことを考えていないわがままなアプリだったと思います。
Just Playerの名前は「ただのプレイヤー」という意味を込めたつもりです。
つまり、最高のプレイヤーではなく、単純に音がなればいいでしょ、てきなものでした。
それでも、ユーザ数が増えてくるにつれ、ユーザがどのような機能を欲していて、どういいうアプリであれば使いやすいのかということを考えるようになってきました。
現在、ただ音がなるだけでなくJustPlayerの代名詞はクラウドデータを再生することが目的になっています。
これは本来の目的ではなかったのですが、そういうことになったならそうしましょう。ということで、新しく作成するJust Playerはクラウドのデータを再生することを主眼に置いて作りなおしました。
クラウドのデータは、サービスによってデータの持ち方が異なります。なのにユーザによっては複数のクラウドで使い分けをしている場合もあるとおもいます。
なので、どのクラウドでデータを管理していても、全部同じように使えることを目標にしました。
そして、新しいJust Playerではプレイリストには複数のサービスのことなるデータをまとめていれることができます。
それから、音楽データの管理方法はユーザによって様々です。
これは賛否両論があるとはおもいますが、アプリ側が決めつけたデータの管理方法も必要だとはおもいます。しかし、私の考えではユーザが自分で管理しているデータをそのままつかえることのほうが大切だとおもっています。
そのため、新しいJustPlayerは基本としてはフォルダ階層で管理されたデータをそのまま表示し、そこから再生できるようにしています。
しかし、この状態だと、検索もできないし、並び替えもできないです。
なので、アプリ側でも音楽へのアクセスを1画面だけ準備しています。
必要最低限ですので、他のアプリと比較して物足りないところもあるとおもいますが、一番使うであろう画面にしましたので理解はしやすいと思います。
次に再生についても見直しました。
シャッフル再生、リピート再生、ギャップレス再生、クロスフェード再生、タグ編集、歌詞表示と、当たり前のことが最低限できるようにしました。
それと、新しい機能として、ブックマーク機能をいれました。
これはまだ全てが完成していませんが、最小の機能だけ実装しています。
このブックマーク機能は音楽の一部の部分を一つの音楽として抜き出しプレイリストに追加することができる機能です。
考えられる使い方は、60分とか90分という長い曲の頭出しに使えますので、英語の勉強や、クラシックの頭出し等に便利だと思います。
だいたい、こんなかんじです。
古いJustPlayerでは出来ていたことが新しいJustPlayerでは出来なくなっている機能もあります。
これは、私個人の主観であまり必要ではないだろうという判断で削除されました。
もしその削除された機能のうちどれかが重要だったというのであれば、遠慮なく私にリクエストしてください。
JustPlayerは今後もユーザの意見をとりいれ、さらに変化させていくアプリでいたいと思います。
このアプリは、Android2.1が発表された当時、時期的には私がXperiaX10を購入した際に、自分で音楽アプリを作ってみたいという気持ちからはじまったものです。
アプリを通じて私自身のAndroidへの理解を深めることを目的としていたため、音楽プレイヤーに本来必要でもないようなものも積極的に実装してみたりとあまりユーザのことを考えていないわがままなアプリだったと思います。
Just Playerの名前は「ただのプレイヤー」という意味を込めたつもりです。
つまり、最高のプレイヤーではなく、単純に音がなればいいでしょ、てきなものでした。
それでも、ユーザ数が増えてくるにつれ、ユーザがどのような機能を欲していて、どういいうアプリであれば使いやすいのかということを考えるようになってきました。
現在、ただ音がなるだけでなくJustPlayerの代名詞はクラウドデータを再生することが目的になっています。
これは本来の目的ではなかったのですが、そういうことになったならそうしましょう。ということで、新しく作成するJust Playerはクラウドのデータを再生することを主眼に置いて作りなおしました。
クラウドのデータは、サービスによってデータの持ち方が異なります。なのにユーザによっては複数のクラウドで使い分けをしている場合もあるとおもいます。
なので、どのクラウドでデータを管理していても、全部同じように使えることを目標にしました。
そして、新しいJust Playerではプレイリストには複数のサービスのことなるデータをまとめていれることができます。
それから、音楽データの管理方法はユーザによって様々です。
これは賛否両論があるとはおもいますが、アプリ側が決めつけたデータの管理方法も必要だとはおもいます。しかし、私の考えではユーザが自分で管理しているデータをそのままつかえることのほうが大切だとおもっています。
そのため、新しいJustPlayerは基本としてはフォルダ階層で管理されたデータをそのまま表示し、そこから再生できるようにしています。
しかし、この状態だと、検索もできないし、並び替えもできないです。
なので、アプリ側でも音楽へのアクセスを1画面だけ準備しています。
必要最低限ですので、他のアプリと比較して物足りないところもあるとおもいますが、一番使うであろう画面にしましたので理解はしやすいと思います。
次に再生についても見直しました。
シャッフル再生、リピート再生、ギャップレス再生、クロスフェード再生、タグ編集、歌詞表示と、当たり前のことが最低限できるようにしました。
それと、新しい機能として、ブックマーク機能をいれました。
これはまだ全てが完成していませんが、最小の機能だけ実装しています。
このブックマーク機能は音楽の一部の部分を一つの音楽として抜き出しプレイリストに追加することができる機能です。
考えられる使い方は、60分とか90分という長い曲の頭出しに使えますので、英語の勉強や、クラシックの頭出し等に便利だと思います。
だいたい、こんなかんじです。
古いJustPlayerでは出来ていたことが新しいJustPlayerでは出来なくなっている機能もあります。
これは、私個人の主観であまり必要ではないだろうという判断で削除されました。
もしその削除された機能のうちどれかが重要だったというのであれば、遠慮なく私にリクエストしてください。
JustPlayerは今後もユーザの意見をとりいれ、さらに変化させていくアプリでいたいと思います。
Friday, November 14, 2014
最終ベータをアップロードしました
リリース前の最終ベータをアップロードしました。
バージョンは2142000067です。
リリース前になりましたので、いくつかの機能が有料になっています。
有料になった機能
GoogleDrive、Dropbox、Boxへのアクセス
それから、アドバンス設定
これらはそれぞれ300円です。
また、一括で解除できるサービスパックとして1000円のものも準備しています。
それと、古いJUST PLAYERで既に寄付をしていただいているユーザに対しては、GoogleDrive,Dropbox,Boxを無料で使えるようにしています。
いくつか有料になりましたが、JustPlayerは基本機能だけで、音楽の再生から、クロスフェード、アルバムアートの検索、タグの編集といったことが広告なしで使えますので普通に利用する分にはお金を払う必要はないと思います。
あと、個人的にAmpacheが好きなのでこれは無料になっています。
2,3日状況をみて問題がなければこのままリリースになります。
あと今回のバージョンで新しく追加された機能として、
MP3に対して、タグ情報、アルバム情報を保存できるようにしました。
あと、いくつかUIを最適化しています。
バージョンは2142000067です。
リリース前になりましたので、いくつかの機能が有料になっています。
有料になった機能
GoogleDrive、Dropbox、Boxへのアクセス
それから、アドバンス設定
これらはそれぞれ300円です。
また、一括で解除できるサービスパックとして1000円のものも準備しています。
それと、古いJUST PLAYERで既に寄付をしていただいているユーザに対しては、GoogleDrive,Dropbox,Boxを無料で使えるようにしています。
いくつか有料になりましたが、JustPlayerは基本機能だけで、音楽の再生から、クロスフェード、アルバムアートの検索、タグの編集といったことが広告なしで使えますので普通に利用する分にはお金を払う必要はないと思います。
あと、個人的にAmpacheが好きなのでこれは無料になっています。
2,3日状況をみて問題がなければこのままリリースになります。
あと今回のバージョンで新しく追加された機能として、
MP3に対して、タグ情報、アルバム情報を保存できるようにしました。
あと、いくつかUIを最適化しています。
Thursday, November 6, 2014
ベータ版バージョン2142000064をアップロードしました
毎回思うんだけど、今回のバージョンが一番良いのでしばらく修正はしなくてもいいだろう。
とおもうんだけど、毎回、前のバージョンは最悪、さっさと更新しないといけない。
とおもってしまうのはなんでですかね、、やっぱりテストが不十分なのが問題なのか、、なのか。
さて、今回のバージョンから一部のユーザにとって待望の歌詞表示機能が追加されました。
歌詞は、MP3に限られますがMP3のヘッダ情報にかかれている歌詞データを読み取って表示しています。
しかし、歌詞にはいくつかフォーマットがあるのですが、それら全てに対応しているわけではありません。
2つ程対応しました、多分メジャーだとおもう。もしこのフォーマットが読めないのでなんとかしてほしいという要望があれば、私までご連絡ください。
その際には、どの環境のどのツールで作成しましたということも合わせてご連絡頂きたいです。
それと歌詞の編集機能ですが、JustPlayer上では編集ができるようになっています。
だけど編集された歌詞情報はMP3には保存していません。
これはタグ情報や、アルバムアートも同じですが、オリジナルのファイルを書き換えることをしても良いのか?またそうして壊れた場合どうすればいいのか?そういうことを考えると余計なことをしたくないというのが本音です。
だけど、それだと不便という人もいるとおもうので、有料になるとおもうのだけど、あとで追加する予定です。
とおもうんだけど、毎回、前のバージョンは最悪、さっさと更新しないといけない。
とおもってしまうのはなんでですかね、、やっぱりテストが不十分なのが問題なのか、、なのか。
さて、今回のバージョンから一部のユーザにとって待望の歌詞表示機能が追加されました。
歌詞は、MP3に限られますがMP3のヘッダ情報にかかれている歌詞データを読み取って表示しています。
しかし、歌詞にはいくつかフォーマットがあるのですが、それら全てに対応しているわけではありません。
2つ程対応しました、多分メジャーだとおもう。もしこのフォーマットが読めないのでなんとかしてほしいという要望があれば、私までご連絡ください。
その際には、どの環境のどのツールで作成しましたということも合わせてご連絡頂きたいです。
それと歌詞の編集機能ですが、JustPlayer上では編集ができるようになっています。
だけど編集された歌詞情報はMP3には保存していません。
これはタグ情報や、アルバムアートも同じですが、オリジナルのファイルを書き換えることをしても良いのか?またそうして壊れた場合どうすればいいのか?そういうことを考えると余計なことをしたくないというのが本音です。
だけど、それだと不便という人もいるとおもうので、有料になるとおもうのだけど、あとで追加する予定です。
Tuesday, November 4, 2014
歌詞表示を実装してみた
MP3から歌詞を取得できるようになったので、早速実装してみた。
実装するにあたり、どこで歌詞の表示を切り替えるか、検討してみた結果画面下部にドロワーを設定し、そこで表示の切り替えを行うことにした。
ドロワーにはスペースがあるので、ついでに、イコライザやクロスフェードといった機能の有効、無効ができるボタンも追加した。
とりあえず表示ができただけなので、次はタグ編集画面で歌詞を設定できるようにするようにし、そこまでできたらストアにアップロードする予定です。
しばらく様子をみたいので、正式リリースはもうちょい先です。
実装するにあたり、どこで歌詞の表示を切り替えるか、検討してみた結果画面下部にドロワーを設定し、そこで表示の切り替えを行うことにした。
![]() |
| 歌詞を表示している画面(時間表示のバランスが悪いので要検討) |
![]() |
| 画面下部から引き出したメニューにより歌詞の表示を切り替える |
とりあえず表示ができただけなので、次はタグ編集画面で歌詞を設定できるようにするようにし、そこまでできたらストアにアップロードする予定です。
しばらく様子をみたいので、正式リリースはもうちょい先です。
Monday, November 3, 2014
ベータ版2142000061をアップロードしました
しばらく、Google+のほうだけに情報を公開していたたため、ここだけをみている人にとっては、ずいぶん更新をしていないかと思われたかもしれません。
ちゃんと開発をしています。
ビルドバージョンはずいぶん進んで61になりました。
ちなみに、このビルドバージョンの意味は
2142000061の2はこちらの管理番号つづく、14は最小のSDKのバージョン番号、そして20はターゲットにしているSDKのバージョン番号、そっから0が続いて、61がビルドにつけているナンバリングです。
だいたい、PlayStoreにアップする度にカウントアップしているので61回アップデートしたことになりますね。。長い
ちゃんと開発をしています。
ビルドバージョンはずいぶん進んで61になりました。
ちなみに、このビルドバージョンの意味は
2142000061の2はこちらの管理番号つづく、14は最小のSDKのバージョン番号、そして20はターゲットにしているSDKのバージョン番号、そっから0が続いて、61がビルドにつけているナンバリングです。
だいたい、PlayStoreにアップする度にカウントアップしているので61回アップデートしたことになりますね。。長い
Friday, October 17, 2014
CrossFadeができる端末とできない端末がある
ユーザの要望でクロスフェード機能を実装してみたのですが、この機能のためいくつか犠牲になっているものがあります。
そのまえにクロスフェードとはどういう機能なのかというと、曲の終わりをフェードアウトし、次の曲のはじまりをフェードインすることを同時に行う機能です。
JUST PLAYERはクロスフェードの設定を有効にすると、曲の終了6秒前にフェードアウト処理にはいり、同時に次の曲をフェードインします。
いまのところ6秒固定になっています。
この数値を変更出来るようすることは可能ですが、いまのところ変更するUIを実装していません。マニアックな機能なので特に必要だとはおもっていませんが、もし要望があれば検討したいです。
実際の実装方法は、2つのMediaPlayerを準備し、片方の時間をチェックし、6秒前にはいったら、次の曲を再生するという単純な方法なのですが、これをつかうことで、一時的ではあってもMediaPlayerのインスタンスを2つ準備しなければなりません。
これは、ギャップレス再生でも必要な処理なのでこれ自体は問題ではないのですが、ギャップレス再生とは異なり、違うボリュームをそれぞれに適用する必要があるためAudioSessionIDを共通化することができなくなります。
つまり、AudioEffectも別々になるというわけです。
この問題は、これまで何度MediaPlayerを作りなおしてもAudioSessionIDを共通化しておけば、AudioEffectは共通でつかえていたものが使えなくなったことになります。
そのおかげで、Equqlizerの処理、Visualizerの処理といったAudioSessionIDをもとにインスタンスを生成していた処理の扱いが面倒になってしまいました。
いろいろ、苦労はあったものの今のところなんとか、うまく動いている状態までもってこれました。(手元の最新版において)
しかし、完璧というわけではなく一部の端末では、MP3ファイルを同時に再生するとStartが実行されない問題がおきています。
具体的にいうと、Nexus5さん。
これは個体差があるのかもしれませんが、2台の端末で同じ現象を確認しています。
簡単なサンプルプログラムを作ってもやはり同じ現象がおきるので、MediaPlayer自体に問題があるのではないかと思っています。
そのまえにクロスフェードとはどういう機能なのかというと、曲の終わりをフェードアウトし、次の曲のはじまりをフェードインすることを同時に行う機能です。
JUST PLAYERはクロスフェードの設定を有効にすると、曲の終了6秒前にフェードアウト処理にはいり、同時に次の曲をフェードインします。
いまのところ6秒固定になっています。
この数値を変更出来るようすることは可能ですが、いまのところ変更するUIを実装していません。マニアックな機能なので特に必要だとはおもっていませんが、もし要望があれば検討したいです。
実際の実装方法は、2つのMediaPlayerを準備し、片方の時間をチェックし、6秒前にはいったら、次の曲を再生するという単純な方法なのですが、これをつかうことで、一時的ではあってもMediaPlayerのインスタンスを2つ準備しなければなりません。
これは、ギャップレス再生でも必要な処理なのでこれ自体は問題ではないのですが、ギャップレス再生とは異なり、違うボリュームをそれぞれに適用する必要があるためAudioSessionIDを共通化することができなくなります。
つまり、AudioEffectも別々になるというわけです。
この問題は、これまで何度MediaPlayerを作りなおしてもAudioSessionIDを共通化しておけば、AudioEffectは共通でつかえていたものが使えなくなったことになります。
そのおかげで、Equqlizerの処理、Visualizerの処理といったAudioSessionIDをもとにインスタンスを生成していた処理の扱いが面倒になってしまいました。
いろいろ、苦労はあったものの今のところなんとか、うまく動いている状態までもってこれました。(手元の最新版において)
しかし、完璧というわけではなく一部の端末では、MP3ファイルを同時に再生するとStartが実行されない問題がおきています。
具体的にいうと、Nexus5さん。
これは個体差があるのかもしれませんが、2台の端末で同じ現象を確認しています。
簡単なサンプルプログラムを作ってもやはり同じ現象がおきるので、MediaPlayer自体に問題があるのではないかと思っています。
Friday, October 10, 2014
beta update version 2142000047
リリースまでもうすぐ、、のはず。
長いよー長いよー早くリリースしてゆっくりしたい。
こちらのIssueが全部解決されたらリリースする予定です。
https://bitbucket.org/yokmama/just-player3/issues?status=new&status=open
あと、1,2週間ぐらい。
今回のバージョンは色々修正しています。
UIでは、選択方式を全面的に見直しました。
Visualizerに関しては処理を高速化し省電力化しました。
Equalizerに関しては画像を綺麗にしました。
Playに関しては、おかしな動きがある不具合などを修正しました。
アプリ内課金は、とりあえず実装しました。今のところ課金しなくても全機能が使えます。
こちらの端末では安定して動くようになっています。
長いよー長いよー早くリリースしてゆっくりしたい。
こちらのIssueが全部解決されたらリリースする予定です。
https://bitbucket.org/yokmama/just-player3/issues?status=new&status=open
あと、1,2週間ぐらい。
今回のバージョンは色々修正しています。
UIでは、選択方式を全面的に見直しました。
Visualizerに関しては処理を高速化し省電力化しました。
Equalizerに関しては画像を綺麗にしました。
Playに関しては、おかしな動きがある不具合などを修正しました。
アプリ内課金は、とりあえず実装しました。今のところ課金しなくても全機能が使えます。
こちらの端末では安定して動くようになっています。
![]() |
| UIをきちんと作ったイコライザ、結構苦労しました。 |
Wednesday, October 8, 2014
Ampache SelectView renewal
Ampacheの選択画面を再実装しました。
Ampacheにかぎらずファイル選択画面は全部変更しました。
基本的にCheckboxの廃止です。
タップで曲選択、再生が基本となり、ロングプレスから複数選択、置き換え等ができます。
Ampacheにかぎらずファイル選択画面は全部変更しました。
基本的にCheckboxの廃止です。
タップで曲選択、再生が基本となり、ロングプレスから複数選択、置き換え等ができます。
Tuesday, October 7, 2014
GC_EXPLICITが出ないように対策
JUST PLAYERのログをずっとみていると、次のようなログが頻繁にでていました。
発生するタイミングを調べるとどうやら、ContentProviderでQueryをするタイミングだということがわかりました。
該当するクエリ処理をみてみると、どうやらsetNotificationUriが怪しい
試しに上記のコードの部分をコメントアウトすると、GC_EXPLICITがでなくなりました。
setNotificationUriは、registerContentObserverで登録されたコールバックに通知が届くようにするための設定処理なのでコメントアウトするわけにはいきません。 しかし、必要のないQueryに対しても常に設定するのは勿体ないです。 なので、ここは、必要なクエリとそうでないクエリを判別できるようにし、必要なクエリだけ設定するように変更しました。下記は自作のContentProviderのQuery処理です。
そして、ContentObserver.onChangedのイベントが必要なクエリ結果の場合だけ、下記のようなクエリのためのUriを発行する。
これをいれておくことで、通知が届くCursorを取得することができます。
GC_EXPLICITを回避しパフォーマンスが向上しました。
次のバージョンでFIXされます。
GC_EXPLICIT freed 5773K, 34% free 27728K/41588K, paused 17ms+20ms, total 267ms GC_EXPLICIT freed 41K, 75% free 2829K/11252K, paused 2ms+2ms, total 27ms
発生するタイミングを調べるとどうやら、ContentProviderでQueryをするタイミングだということがわかりました。
該当するクエリ処理をみてみると、どうやらsetNotificationUriが怪しい
cursor.setNotificationUri(getContext().getContentResolver(), uri);
試しに上記のコードの部分をコメントアウトすると、GC_EXPLICITがでなくなりました。
setNotificationUriは、registerContentObserverで登録されたコールバックに通知が届くようにするための設定処理なのでコメントアウトするわけにはいきません。 しかし、必要のないQueryに対しても常に設定するのは勿体ないです。 なので、ここは、必要なクエリとそうでないクエリを判別できるようにし、必要なクエリだけ設定するように変更しました。下記は自作のContentProviderのQuery処理です。
boolean needSetNotify = false;
if(uri.getQueryParameter("notify") != null){
needSetNotify = true;
}
//クエリ処理
Cursor cursor = queryBuilder.query(
getSQLiteOpenHelper().getReadableDatabase(), projection, selection,
selectionArgs, groupBy, having, sortOrder);
if(needSetNotify) {
cursor.setNotificationUri(getContext().getContentResolver(), uri);
}
こんな感じで、自作のContentProviderに仕込んでおく。そして、ContentObserver.onChangedのイベントが必要なクエリ結果の場合だけ、下記のようなクエリのためのUriを発行する。
Uri uri = PlayOrderContentProvider.PLAYORDER_CONTENT_URI
.buildUpon()
.appendQueryParameter("notify", Boolean.toString(true))
.build();
これをいれておくことで、通知が届くCursorを取得することができます。
GC_EXPLICITを回避しパフォーマンスが向上しました。
次のバージョンでFIXされます。
Subscribe to:
Posts (Atom)







