Android端末上の表記 |
Medoly Ver. 1.8.5, 1.8.6
2014-12-28 Ver. 1.8.5
– 歌詞のMIME Type表示
– プロパティのメディア、アルバムアート、歌詞ファイルに「開く」アクション追加
– 検索画面の「ストレージ」タブを外部アプリから開く機能追加(プロパティのフォルダパスを開くアクションに対応)
– Viewタブにボタンを表示させた状態で歌詞がスクロールできない問題修正
M3Uファイルプレイリストの出力対応
プレイリストの保存の際、M3Uファイルへ保存できるようにしました。保存時に、プレイリスト保存種別の選択ダイアログが表示されます。
歌詞のMIME Type表示
読み込める歌詞ファイルの種類が増えたので、歌詞ファイルにもMIME Typeを表示するようにしました。歌詞ファイルに対して、「共有」や「開く」のアクションを実行する際に影響します。
プロパティのメディア、アルバムアート、歌詞ファイルに「開く」アクション追加
従来、メディア、アルバムアート、歌詞ファイルに対して「共有」アクションを実行して外部アプリにファイルを渡すことができましたが、それ以外に「開く」アクションを追加しました。同様に外部アプリにファイルを渡すのですが、アクションが異なります。「開く」の方は、Windowsでいうダブルクリックでファイルを開くようなアクションで、「共有」はメールへのファイル添付を行う場合等に利用します。
検索画面の「ストレージ」タブを外部アプリから開く機能追加(プロパティのフォルダパスを開くアクションに対応)
Medolyに対して「フォルダを開く」といったアクションが実行された場合、指定したフォルダを検索画面のストレージタブで開けるようにしました。受け取れるMIME Typeは「resource/folder」「x-directory/normal」「inode/directory」等です。なお、「resource/folder」他のファイラーアプリでも対応してるため、これが標準と考えています。
Viewタブにボタンを表示させた状態で歌詞がスクロールできない問題修正
フリック操作対応時にタップ処理の対応漏れがあったため、修正しました。
2015-01-07 Ver. 1.8.6
– SYLT歌詞の読込処理を修正 (ISO-8859-1対応)
– 歌詞のMIMEタイプ取得処理修正
– M3Uファイル保存時にプレイリスト名を更新するよう修正
標準のプレイリストの保存種別を保持する設定追加
プレイリストの保存種別を選択する際、標準の保存種別(Android標準データベース or M3Uファイル)を決定できるようにしました。これを使う人は、毎回保存種別を選択するような使い方はしないと思われますので…。なお、設定画面よりダイアログを復活させることができます。
SYLT歌詞の読込処理を修正 (ISO-8859-1対応)
これは、ユーザー様からの修正要望です。ID3v2の同期歌詞タグ、SYLTに保存された歌詞の読み取り処理を修正しました。
歌詞のMIMEタイプ取得処理修正
1.8.5で作成した歌詞のMIME Type読み込み処理に問題があったため、修正しました。
M3Uファイル保存時にプレイリスト名を更新するよう修正
M3Uファイルを保存した際に、プレイリスト名が更新されていなかったため、保存するように修正しました。
Medoly Ver. 1.8.0
2014-12-22 Ver. 1.8.0
– ピンチイン・ピンチアウトによる画面表示サイズ変更の追加
– スワイプ操作による画面切換の追加
– 音声フォーカスの一時喪失の処理が誤っていた問題修正
ピンチイン・ピンチアウトによる画面表示サイズ変更の追加
これはユーザ様からの要望です。
メイン画面のタブ枠内で、縦方向のピンチアウト・ピンチイン操作を行うと、タブの表示領域を拡大・縮小します。以前の設定オプションの表示拡大を拡張し、段階的に出来るようにした形です。
Android画面の、上方向のステータスバー及び下方向のナビゲーションバーまで非表示になります。なお、Android 4.4より前のバージョンではナビゲーションバーを非表示にしても、画面をタップするとナビゲーションバーは復活しますが、これは仕様です。また、画面を横した場合はナビゲーションバーが横になりますが、その場合も操作は変わらず下方向の操作となります。…一々操作を切り替えるのは、作る側も操作する側も面倒臭いですから。
なお、このピンチイン・ピンチアウト動作については少し変わった動作をします。2本以上タップした状態で、上側の指を上方向に動かすと、上側のアクションバー及びステータスバーが非表示になり、下側の指を下方向に動かすと、下側のGUI及びナビゲーションバーが非表示になります。非表示になる順番を以下の図に示します。
ピンチズームで拡大・縮小する順序 |
ちなみに、最大まで拡大すると、以下のような感じになります。
スワイプ操作による画面切換の追加
これは、上記のピンチズーム動作の追加に伴うもので、メイン画面タブ内をスワイプすると、タブの切換が行われるようになりました。これは、ピンチズームで画面を最大まで引き伸ばすとタブが隠れるため、その際にタブ切換が行えるようにする救済措置的な意味があります。
…実はこのスワイプ操作、最初の公開前の開発段階で実装するつもりではいたのですが、作り方がよく分からず後回しにした経緯があり、やっと実装できたという感じです。実際、スワイプやスクロール、クリック、ピンチズームといった各種操作を細かく制御する必要があり、ちょっと難しかったのですが、何とかそれっぽく動くようにはできたと思います。
なお、この実装にはAndroidのサポートライブラリが必要だったため、このバージョンより「android-support-v13.jar」を追加しています。そのため、実行APKのサイズが350KBほど増加しています。
今まで使ってなかったのかと言われそうですが、使わなくてもさほど困らなかったもので。そもそも、どうしてViewPagerクラスがサポートライブラリにしか含まれていないのか、その辺の理由がよく分かりません。
余談ですが、スワイプ操作ができるようになった事で、何か凄くスマートフォンアプリっぽくなったなぁ、と個人的に思ってます。今までは何となく、Windowsアプリケーションの延長線ぐらいの感覚だったのですが。
音声フォーカスの一時喪失の処理が誤っていた問題修正
アプリの標準状態で、他のアプリで一時的な音声が発生した場合、例えばメール通知やナビゲーション音声が発生した場合、音楽再生が中断していたと思いますが、これはバグでした。本来、一時的な音声フォーカスの喪失が発生した場合、音量を下げる処理を入れるつもりだったのですが、これが永続的な音声フォーカスの喪失の処理となってしまっていました。
そのため、今までの状態はメールの通知等で音楽が中断される状態となっていたと思いますが、これが音量を下げるようになりました。
その他
現在、アプリに別の処理を組み込んでいます。実はもう9割ぐらい実装済みなのですが、公開はもう少し先になると思います。とりあえず現在は埋め殺し状態です。現状でも、別途アプリを入れると動くようになりますが…。
その辺の兼ね合いでバグが発生する可能性もありますが、問題があれば報告していただけると幸いです。
Medolyの仕様書
Medolyには仕様書があります、一応。作り始める前に、イメージを固めるために、画面のイメージを描いてみたものです。描いた時期は多分、2013年の8月頃だと思います。
…仕様書です。仕様書ですったら仕様書です。
見ての通り、適当な代物です。ちなみに、その時手元にあったやや広めの付箋紙に描いてあります。1枚目はメイン画面(下)と検索画面(上)、2枚目は検索画面の検索欄です。この時点で大体今のアプリのイメージは固まってました。
当時は検索画面のタブを下側に置くつもりでいたと記憶しています。
あと文字が読めないので分からないと思いますが、この時点ではメイン画面の再生キューが右側のタブ、プロパティが左側のタブになってます。色々あって左右逆転して今の形になってます。UIの設計は色々考えながら今の形になっているのですが、時間があればその辺もここで書いてみたいと思ってます。
そんな感じで、1周年の小話でした。
Medoly 1周年
Androidで始めて作成したアプリだったので、1年前のリリース時はかなり色々問題がありましたが、この1年で機能追加やら改善やらで大分自分の理想
のアプリに近づいてきたように思います。なお、現在のバージョンは1.7.6。内部的なバージョンコードは50で、1年間で49回バージョンアップさせて
います。
お使い頂いてる方には何となく分かるかと思いますが、とにかく歌詞の表示に注力しています。理由は、そういう機能を重視したアプリがさっぱり見られないからです。無いなら自分で作ってしまおう、というのが開発を始めた動機だったりします。
近年、音楽の販売はどんどんCD販売からネットワーク販売に移行していますが、CDは必ずジャケット等に必ず歌詞がついてました。ところが、音楽配信サービスは多くの場合、歌詞がついてない。それが当たり前になっている。歌詞を見たいなら、広告がベタベタ貼ってあって、コピー&ペーストも出来ない歌詞サイトとやらを利用することになります。
もうアホかとバカかと。なんでそれで満足してんの?自分で買った曲の歌詞ぐらい自由に利用させろ。そもそも、最初から従来の歌詞カードの代用になるデータを寄越せよ。ってのが個人的な本音です。
そういう不満タラタラな状態だったのですが、以前より歌詞データの仕様については色々調べていたこともあり、とりあえずそれを実現可能な形にしてみたのがMedolyです。多分、現状Google Playストアにあるどんな音楽プレイヤーよりも対応してる歌詞の種類は多いと思います。あと、ライブラリ依存ですが文字コード判定もそこそこ高い精度でできていると思うので、英語しか出せないようなアプリが多い中、比較的多くの言語で利用できると思います。要するに、言語・種別問わず多くの歌詞が表示できるのではないかと思います。
そんなこんなで、本アプリはまだまだ色々追加したい機能や改善したい部分が多数あるので、これからものんびり開発を続けていきたいと思います。もしご意見・ご要望等ありましたら、遠慮せずに連絡いただけると嬉しいです。
ちなみに、現状で考えてる追加機能は、
- プラグインによる機能追加
- 歌詞の表示レイアウト調整
- プレイリストのエクスポート
など。もう少し色々ありますが、大きなところはそんな所です。
プラグインは、歌詞やアルバムアートの自動取得等の機能も込みで。その辺はまだまだ先の話ですが。どう実装したものかと手探りなところがありますが、温かい目で見て頂けると幸いです。
そんなこんなで、これからもよろしくお願いします。
Medoly Ver. 1.7.5, 1.7.6
– MP3 内蔵歌詞 Lyrics3 v1, Lyrics3 v2 形式対応
– 以下の外部字幕ファイル対応
* SRT (SubRip) フォーマット [.srt]
* STL (Spruce subtitle) フォーマット [.stl]
* SCC (Scenarist Closed Caption) フォーマット [.scc]
* SSA/ASS (SubStation Alpha) フォーマット [.ssa/.ass]
* TTML (Timed Text Markup Language) フォーマット [.xml]
– プロパティ情報のファイルパスをフォルダとファイルに分割
– フォルダの共有を追加
MP3 内蔵歌詞 Lyrics3 v1, Lyrics3 v2 形式対応
MP3は規格的に古い事もあり、長い歴史の中でいくつものタグ種別があります。
歌詞の内蔵方法にもいくつかの種類があり、主に以下のようなものがあります
・ID3v2 USLT
・ID3v2 SYLT
・Lyrics3 (Version1, Version2)
USLTは非同期歌詞を保存するタグです。単純なテキストが格納され、MP3で「内蔵非同期歌詞」と呼ばれるのはこれです。この歌詞タイプの場合、比較的多くのプレイヤーで読み取りができると思います。
SYLTは同期歌詞を保存するタグです。歌詞は単純なテキストではなく、テキストとタイムコードが交互に登場するような形となっています(参考: id3v2.3.0 – ID3.org )。この内容を独自に解析しているので、表示結果が怪しいところがあるかもしれません。Windows Media Playerのバージョンによっては、これが読み取れる場合があるようです。
Lyrics3は、ID3v1、ID3v2とも独立したタグです。名前の通り歌詞が保存されますが、タイトルやアーティスト情報も保存できるようです。Version1とVersion2がありますが、Version1は古い規格なので、Version2さえ使っておけば良いかと思います。歌詞はテキストで作られますが、その内容はLRCファイルと同一のフォーマットとなるようです。というか、LRCファイルがLyrics3の内容を外出ししているのでしょうか(その辺の経緯はイマイチ分かってません)。Medoly内部でも、Lyrics3の内容をLRCファイルの解析処理にそのまま流して処理しています。いくつかの同期歌詞対応ソフトは、この歌詞を利用しています。
これらは以前からずっと対応しようと思ってましたが、ようやく対応させることができました。これで、大体の内蔵歌詞は読み取れるようになったと思います。読み取り結果に怪しい部分があるかもしれませんが、その際は連絡頂けると幸いです。
なお、これを作っていて分かったのですが、海外のアプリは概ね「文字コード?何それ美味しいの?」レベルの対応しかしていないようです。そんなわけで、Shift_JISで歌詞を保存した場合、まともに表示できるアプリは非常に限られてくると思います。歌詞やタグをMP3に保存する場合は、Unicodeを用いるようにしましょう。Medolyはなにぶん日本人が作ってますので、Shift_JISでも何とかなるかと思いますが。
余談ですが、カラオケタグについて調べてるうちに、ルビの規格について考えてる記述を見つけました。余力があれば、この辺も何とかしてみたいところ。
タイムタグ規格ルビ拡張規格 [翔星 Be ランド| BeOS 特集]
以下の外部字幕ファイル対応
世の中には歌詞ファイル以外に、動画の字幕データを歌詞として用いる文化があるようです。私はほとんど見たこと無いですが。とりあえず「Mediaplayer for lyrics」に名前負けしないよう対応させてみました。対応に当たり、以下のライブラリを利用しています。
JDaren/subtitleConverter · GitHub
一応こういう事をやってる方もいるようです。
春日 – カラオケ字幕制作ソフト プロジェクト日本語トップページ – SourceForge.JP
これも余談ですが、対応させたフォーマットのうち、TTMLフォーマットというXMLファイルがあります。w3cで策定された、由緒正しいフォーマットです。
Timed Text Markup Language 1 (TTML1) (Second Edition)
これは字幕等の時間に合わてテキストを表示させたりするためのものですが、歌詞データにも利用できるようです。今は文字読み取りぐらいしかできませんが、文字修飾等も定義しやすいため、時間があればこの辺を色々弄り回して色々表示できるようにしてみたいところ。
プロパティ情報のファイルパスをフォルダとファイルに分割
プロパティリストで「ファイルパス」となっていた所を、「フォルダパス」と「ファイル名」に分割しました。理由は、そちらの方が利用しやすいからです。
主な利用は、次の項目を参照。
フォルダの共有を追加
上記で追加したフォルダパスについて「共有」アクションを行うことができます。対応するアプリに共有すると、該当のフォルダパスを閲覧することができます。現在対応を確認しているアプリは、「ES ファイルエクスプローラー 」と、「Solid Explorer File Manager 」です。
フォルダを共有する際、MIME Typeに「resource/folder」を設定しています。上記以外にこのMIME Typeに対応したアプリであれば、共有を受け取る事ができるはずです。
余談ですが RFC2425 によると、フォルダ(ディレクトリ)のMIME Typeは「text/directory」らしいのですが、これを設定しても上記のアプリは受け取ってくれませんでした。Linuxだと「inode/directory」の模様。Androidだと、特定の機能ディレクトリを開くために「vnd.android.cursor.dir/*」というMIME Typeを利用するようですが、ストレージフォルダを開くための使い方がよく分かりません。
上記のように、正しいディレクトリのMIME Typeが特定できなかったため、設定からMIME Typeの変更ができるようにしています。
2014-11-20 Ver. 1.7.6
– スリープ復帰時にダイアログのボタンを押すとエラーとなる問題の対応追加
– 再生キューのドラッグ&ドロップ処理修正
– SDカード未認識時のエラー処理修正
プレイリストのダイアログ修正 (一部機種で開けない問題に恐らく対応)
これは、アプリのエラーレポートにあがっていました。
プレイリストを開こうとすると落ちるとのこと。エラー内容を見ると、どうもプレイリストの一覧を開く時にエラーが発生しているような様子なのですが、私の端末では発生しないため、どうも特定の機種で発生する事象のような感じです。調べてみると、同様の事象がヒット。
技なれど波高し 【解決】android ListViewのonTouchにてNullPointerException
要するに、きちんとリストを実装しなさい…と。確かに、ここについては標準のリストをそのまま使っており、特別な実装を何もしていなかった。そんなわけで、ここもきちんと実装を行うように修正。
ただ、この問題についてはこちらで修正されたかどうかの確認ができないため、このエラー報告をあげて頂いた SoftBank 201M (MOTOROLA RAZR M) を利用されている方、 もしエラーが直ったという場合は御一報いただけると幸いです。もし、まだ直っていない場合は再度エラーレポートをあげていただけると助かります。
追記
報告された方から連絡があり、プレイリストはきちんと開けたきちんと読み込めたそうです。
というわけで、リストはAndroidのデフォルトのやり方( android.R.layout.simple_list_item_1 等を使うやり方 )でやると危険なようです。アダプタのgetViewをオーバーライドして、自分で処理を書くようにした方が無難かと思います。
スリープ復帰時にダイアログのボタンを押すとエラーとなる問題の対応追加
これはAndroidの仕様なのですが、ダイアログを開きっぱなしの状態でスリープに入って、復帰した際に、ダイアログ上に保持していた情報が欠落してしまいます。その状態で処理を続けると、NullPointerException等のエラーが発生します。
正攻法としては、そうならないようにダイアログを作るのが筋なのですが、正直物凄く面倒臭いので、「情報が欠落したらその時はメッセージ出すから再操作してくれ」というスタンスで作ってます。その処理に漏れがあったため、エラーが発生していました。
再生キューのドラッグ&ドロップ処理修正
再生キューを「編集モード」にした際、順番を入れ替える事ができますが、ここの描画更新処理がおかしかったので修正しました。単純に、ライブラリの使い方を間違ってました。
SDカード未認識時のエラー処理修正
SDカードがアンマウントされた状態でエラーが発生すると、エラーを繰り返してしまい、物凄い勢いでバッテリーが消費されていくという最悪のバグがあったので、修正しました。…多分。
以前直したはずなのですが、ギャップレス再生対応した際に復活してしまった模様です。
Medoly Ver. 1.7.0, 1.7.1
2014-10-17 Ver. 1.7.0
– 設定画面を画面分割化
– 表示タブのメニュー一部修正
– 表示タブのボタン配置一部修
– 再生・停止ボタン連続押しの挙動変更
– スリープ時にCPUに負荷がかかる問題修正
– 停止時のオフセット調整時に歌詞が追従しない問題修正
– メディアエラー時の処理修正
– 未選択状態の曲送りボタン押下時動作修正
– 設定の文言修正
歌詞の表示スタイル設定追加
- 背景色
- 歌詞テキストの影色
- 未再生歌詞のテキスト色
- 再生済歌詞のテキスト色
- 再生中歌詞のテキスト色
- 再生中歌詞の背景色
- 再生中歌詞のボーダー色
- アルバムアートの透明度
- フォント種別(Sans-serif, Serif, Monospace)
- フォントスタイル(太字、斜体)
- 表示位置(左寄せ、中央寄せ、右寄せ)
なお、これに伴い以下のライブラリを追加しています。
設定画面を画面分割化
表示タブのメニュー一部修正
表示タブのボタン配置一部修
再生・停止ボタン連続押しの挙動変更
スリープ時にCPUに負荷がかかる問題修正
停止時のオフセット調整時に歌詞が追従しない問題修正
メディアエラー時の処理修正
未選択状態の曲送りボタン押下時動作修正
設定の文言修正
ちなみに、表には出てこないので利用者には全く関係無い話ですが、今まで設定項目の見出しや説明文の文字列を設定XMLに直接書いていたのですが、これだと
日本語・英語で同じXMLを2つ用意しないといけないという問題があり、設定項目の食い違いに気付きにくいという問題があったため、文字列は全部別の
XMLに外だしするように変更しました。これが結構な大仕事でしたが、あくまでもユーザーには全く関係無い部分。
Medoly Ver. 1.6.8
2014-10-01 Ver. 1.6.8
– アプリ再開時に歌詞再生位置が先頭に戻される問題修正
音声フォーカス取得時にエラーとなる場合がある問題修正
アプリ再開時に歌詞再生位置が先頭に戻される問題修正
総ダウンロード数が500を越えた
Medoly Ver. 1.6.5, 1.6.6, 1.6.7
2014-09-22 Ver. 1.6.5
– メイン画面点灯の設定追加(デフォルトで再生時のみ点灯とする)
– オーディオフォーカス処理の設定追加
– 曲戻し時に再生キューを未再生状態とする(設定で切換可)
– 本バージョンより、 android.permission.WAKE_LOCK パーミッションが追加されています
ギャップレス再生対応 (Android 4.1 以降)
テストに使ってた曲 |
メイン画面点灯の設定追加(デフォルトで再生時のみ点灯とする)
オーディオフォーカス処理の設定追加
曲戻し時に再生キューを未再生状態とする(設定で切換可)
本バージョンより、 android.permission.WAKE_LOCK パーミッションが追加されています
2014-09-24 Ver. 1.6.6
– リモート操作が復帰しない場合がある問題修正
– 曲切換時に再生キューがスクロールしない問題修正
– 終了時にメディア状態が保存されない問題修正
– 設定文言一部修正
リモート操作が復帰しない場合がある問題修正
曲切換時に再生キューがスクロールしない問題修正
終了時にメディア状態が保存されない問題修正
設定文言一部修正
2014-09-26 Ver. 1.6.7
単体再生時の曲送り・曲戻し動作を修正
単体再生時、曲送りを押した際に次メディアがあっても「メディアがありません」と言われてしまう問題修正。ギャップレス再生対応に伴うバグです。