Medoly Ver. 2.4.5, 2.4.6

更新情報の記載をずっとサボってたので、一気に書きます。

2015-11-11 Ver. 2.4.5
– プラグインのメニューをドロワー化
– プラグインダイアログレイアウト見直し
– 一部文字化けタグでアプリが落ちる問題修正
– イベント無効化設定の処理修正
– 共通パラメータのライブラリ化
– 参照ライブラリ見直し

2015-11-14 Ver. 2.4.6
– プラグインのイベント有効設定をドロワーに移動
– 歌詞フォントサイズの最大を40spまで拡大
– 再生キューの自動スクロール設定廃止
– 再生キューのスクロール処理調整
– レイアウト変更時に急激に歌詞がスクロールがする問題修正
– 同期歌詞の長押しでスクロール位置がずれる問題修正

Ver. 2.4.5

プラグインのメニューをドロワー化

メイン画面にドロワーメニューを付けました。
ドロワーメニューというのは、画面の左端から画面に覆い被さるように出てくるメニューのことです(通常は左端というだけで、別に左端とは限りませんが)。メニューを表示するための操作は3種類あります。どれで表示しても一緒です。ユーザビリティ上どれでも実行できるというだけです。

  • 再生キューリストを表示した状態から、再生キューを右スワイプする。
  • 左上のアプリアイコンをタップする。
  • 端末画面の左の縁から画面の内側に向けて右スワイプする。

以前はポップアップメニューから表示していたプラグインのメニュー を、このドロワーメニューに置換えました。併せて、このメニュー上から手動実行アクションが実行できるようになっています。
以前から、プラグインの手動実行アクションを実行するために、左上ポップアップメニューからダイアログを表示→コマンド実行、という手順が煩わしかったので、ドロワーメニューから簡単に実行できるようにしてみた次第。
ちなみに、ドロワーを追加するためにAndroidのライブラリを追加したのですが、これのせいでAPKのサイズが1MBぐらい増えて、約1.5倍になってます。インストール後のサイズもだいぶ増えてます。何てこった。

プラグインダイアログレイアウト見直し

ドロワーメニュー追加に伴い、プラグインのダイアログレイアウトを色々見直しています。

一部文字化けタグでアプリが落ちる問題修正

Android標準のタグ読み取り処理においてアプリが落ちる問題があったため、この機能を使用しないようにしました。この問題は、例外でキャッチできずに強制終了されてしまうため、こちらで対策しようがありませんでした。
なお、現在タグの読み取りには jaudiotagger を使用しています。(古いAndroidで動作しないため、最新バージョンではありません)

イベント無効化設定の処理修正

プラグインのイベント無効化チェックに関する処理の修正です。

共通パラメータのライブラリ化

Medolyおよびプラグイン等で共通にしようしている固定値やパラメータについて、ライブラリ化しました。ライブラリはaar形式です。
ちなみに、こうしてサラッと書いていますが、プラグイン周りを共通化するために結構大掛かりな変更が入ってます。

参照ライブラリ見直し

参照ライブラリについての設定を見直しました。
一部ローカルファイルで参照していたものを、Gladleで取得するようにしたとか、そういう感じです。

Ver. 2.4.6

プラグインのイベント有効設定をドロワーに移動

従来、設定画面にあったプラグインイベントの有効/無効設定をドロワーメニューに移動させました。

歌詞フォントサイズの最大を40spまで拡大

歌詞のフォントサイズは30spまでを上限としてたのですが、大きめの画面で使うとちょっと小さいので、40spまでを上限とするようにしました。感覚的には50spぐらいあってもいいかもしれませんが、とりあえずこの辺で様子見です。

再生キューの自動スクロール設定廃止
再生キューのスクロール処理調整

今まで、再生キューのスクロールについては、楽曲が選択された際に再生キューを選択曲までスクロールさせるかどうかのチェックボックスがありました。
これは、例えば楽曲を選んでるときに曲が切り替わって勝手にスクロールされたら困るし、逆に再生キュー画面を表示したままの状態で曲の切替えでスクロールが追従してくれないと困る、といった微妙なところを調整するための設定だったのですが、正直こんなもの一々使わなかったので廃止しました。
その代わり、以下のような動作をさせるようにしています。

  • 再生キューが手動スクロール中の場合は勝手にスクロールしない。
  • 再生キュー画面にタッチ中の場合は勝手にスクロールしない。
  • それ以外の場合は曲が切り替わった際にその曲までスクロールする。

 まぁそんな感じで、勝手にスクロールさせるかさせないかの微妙なところを自動的に判断するようにしてみた次第です。

 

レイアウト変更時に急激に歌詞がスクロールがする問題修正

表示タブの内容をダブルタップして画面を最大化した時など、歌詞が急激にスクロールする問題がありました。これは、レイアウトが切り替わった際に内部的な座標が変更され、歌詞スクロール位置にとんでもない座標が指定されてしまうことが原因でした。
スクロール座標の調整を行って修正しています。

同期歌詞の長押しでスクロール位置がずれる問題修正

歌詞を長押しした際にシークする機能を付けましたが、その辺りのバグ修正です。

Medoly Ver. 2.5.0, 2.5.1

2015-12-04 Ver. 2.5.0
– ドロワーメニューにプレイリスト追加
– 歌詞の空白の取り扱い変更
– 内蔵歌詞読み込み処理修正
– MP3の文字コード判定処理修正
– スクロール処理調整
– プロパティ情報修正
他修正

2015-12-08 Ver. 2.5.1
– JoyHackフォーマット対応
– UNSYNCED LYRICSフィールド対応

Ver. 2.5.0

ドロワーメニューにプレイリスト追加

Ver. 2.4.5でプラグイン向けに追加したドロワーメニューですが、ここにさらにプラグイン選択メニューを追加しました。プレイリスト/プラグインの切替えは上部のタブから行います。
現状でもプレイリストは再生キューメニューの「プレイリスト操作」から選択できていました。ここに更に、ドロワーメニューからプレイリストを選択できるようにした理由ですが、ユーザビリティ上の理由によるものです。
従来は、「再生キュー選択→再生キューメニュー→プレイリスト操作→プレイリストにチェック→開く」という流れの操作を行う必要がありましたが、今回は「ドロワーメニュー開く→プレイリスト→プレイリスト選択」という簡易な操作になります。また、初期設定ではプレイリストを選択した時点で再生キューが更新され、楽曲の再生を開始します。これによって「プレイリストを切り替えて音楽を聞く」という操作が極めて簡易になります。
また、以前も書きましたが私は車のダッシュボードに携帯のクレードルを置いて、そこで操作を行うようにしています。そういう状況では、簡単な操作でプレイリストを切り替えられるというのは、非常に重要な要素です。実際、これを追加したことで再生キューの入れ替えが簡単になり、長距離ドライブも苦にならなくなった、という個人的に極めて高い実効性(?)を示しています。

歌詞の空白の取り扱い変更

同期歌詞において、今までは単純にテキストの行の頭にタイムタグが存在していたらそれは歌詞の行、それ以外は歌詞の行ではない、という判定をしていました。ところが、同期歌詞においては単純な空行を歌詞の空行として扱うことを期待している場合があります。その場合、当然本来期待されている空行が詰まってしまい。 文字の詰まった見辛い歌詞表示となってしまいます。そんなわけで、単純な空行を歌詞の空行として扱うようにしてみました。
 …などと簡単に書いていますが、 実はこれ、単純に空行を歌詞の一部として扱うだけでは済みませんでした。行単位の同期歌詞は別に何の問題もありません。問題は文字単位の同期歌詞です。通常は、単純に最後に再生された歌詞行の末尾の時間を空行の頭に割り当てれば良いです。ただ、文字単位の同期歌詞においては、前回の行が進行中に次の行に移動し、複数行が同時に進行する状態があり得ます。その間に空行が挟まった場合、通常と異なる処理が必要になってきます。まぁ色々割愛しますが、思った以上に面倒臭かったです、これ。

内蔵歌詞読み込み処理修正

 ユーザ様より、読み取れない内蔵歌詞があるとのご意見をいただきましたので、それに合わせて修正してみました。具体的に言うと、 foobar2000のプラグインで編集した歌詞とのことでした。この編集によって、MP3に通常の「USLT」タグではなく、「UNSYNCEDLYRICS」というタグに歌詞が書込まれた状態となっていた様です。ここで終わったと思ったのですが、実は終わっていませんでした…。次のバージョンへ続く。

MP3の文字コード判定処理修正

MP3が文字化けするというユーザ様の報告があったため、文字コード判定を修正しました。
個人的なMP3の文字コードについての文句は、この辺をどうぞ。
この変更によって、UTF-16とShift_JISが混在しているタグでも何とか読み取れるようになっています。内部的な処理としては、文字コードが「ISO-8859-1」に設定されたタグを全部掻き集めて、タグの内容を一つのバイト配列に固めて、自動文字コード判定ライブラリに送り込むという力業を行っています。ユーザ様のタグは読み取れたそうですが、正直、これ以上はお手上げです。
ちなみに、 文字コード混在タグの場合、プロパティの文字コードには「UTF-16(改行)Shift_JIS」みたいな感じで2種類の文字コードが入っています。
なお、そうなっているMP3は全部UTF-16に置換える努力をした方がいいです。ここまで頑張ってタグを読み取ってくれるアプリばかりではないゆえ…。

スクロール処理調整

再生キューのスクロールの処理を少し調整しました。
画面の表示タイミングで自動スクロールが実行されないなどの問題があったのですが、タイミングを調整して実行されやすくしました。これを確実にスクロールさせる方法がよく分からない…。

プロパティ情報修正

プロパティタブの中に表示する情報を少し変更しています。著作権タグに対応しました。

Ver. 2.5.1

JoyHackフォーマット対応

JoyHackというのは、 カラオケを行うためのフリーソフト及びそのシステムです。「女医ハック」という名前の方が通りが良いようです。カラオケJoysoundのHyperJoy システムを利用していたためにそういう名前がついています。昔はカラオケに入る曲も少なく、自分の歌いたい曲がなかなかなかったため、自前で曲を用意して歌うという文化があったようです(自分はあまり知りませんが…)。その際、HyperJoyという機種において、ビデオ入力/音声入力の端子があり、利用には最適だったようです。
ちなみに、今となってはカラオケには液晶TVが配置され、当たり前のようにHDMI端子が存在しているため、ビデオ/音声入力はかなり簡単になっています。というか、スマートフォンからHDMI出力もできるので、Medolyを用いた簡易カラオケも出来たりします。まぁそもそも、今はカラオケの曲もかなり充実しているため、そこまでする必要はないかもしれませんが…。
前置きが長くなりましたが、Joyhackで用いられている歌詞データも、文字単位の同期歌詞データとなるので、適当にフォーマット見て対応させてみました。読み取り処理はかなり適当なので、もしかしたら正しく読み取れないかもしれません。また、Joyhackは歌詞データに音楽ファイルのファイル名が記述され、歌詞ファイルが主・音楽ファイルが従、という位置付けなのですが、Medolyでは他の歌詞ファイルと同様に、音楽ファイルに対して同名の歌詞ファイルを読み取る、という処理になっています。ちなみに、拡張子は.txtです。

UNSYNCED LYRICSフィールド対応

前回のバージョンで内蔵歌詞のタグ「UNSYNCEDLYRICS」に対応しましたが、どうやら「UNSYNCED LYRICS」(スペースの有無の違い)が正しいタグの名前だったようで、こちらにも対応いさせました。
ちなみに、「UNSYNCEDLYRICS」はMp3tagによってタグが付与される場合があるようですが、詳細はよく分かりません。とりあえず、現状ではどちらでも読み取れると思います。