– ウィジェット設定追加
– ウィジェットレイアウト3追加
– ウィジェットのレイアウト・スタイルを調整
– 次曲の再生予約機能追加(再生キューの項目長押しメニューより)
– 現在曲・次曲を示すアイコン追加
– 歌詞余白のタッチスクロールが動作しない問題修正
– 再生シーケンス処理修正
2015-06-14 Ver. 2.1.0
– MP3の文字コード判定処理修正 (プロパティ情報にタグ情報追加)
– 表示タブのダブルタップで画面最大化する機能追加 (オプション選択可能)
– プラグインの仕様修正 (手動実行機能追加)
– 再生完了イベント追加
– 外部通知のオプション化
– 共有ファイル受取り後に元アプリに戻るオプション追加
– 共有ファイルが登録されない問題修正
– 停止時のシークで歌詞が追従しない問題修正
– 歌詞の座標がずれる問題修正
2015-06-15 Ver. 2.1.1
– 画面の拡大・縮小が正しく行われない問題修正
– メッセージ一部修正
Ver. 2.0.0より、外部に対してAndroidの標準音楽プレイヤーと同様のメッセージを投げていました。世の中には、このメッセージを受け取って自動的にアクションを実行するアプリも存在します。
ただ、やっぱり勝手に外部にメッセージを投げるのは好ましくないと思い、オプション化することにしました。設定画面より、有効/無効を切り替えられます。
設定画面より、共有メディアを受け取った際の再生キュー登録アクションの設定に、「元アプリに戻る」というオプションを追加しました。これを有効にすると、共有メディアを受け取って、メディアを再生キューに登録した後、すぐに元のアプリに戻るという動作を行います。他のアプリから連続して再生キューに登録したい場合にご利用ください。
なお、「そもそも画面を表示させなければ良いのでは?」という疑問もあるかと思いますがAndroidの動作上、一旦アプリの画面を出さないとダメっぽいので、それは出来ませんでした。
どなたか、画面を出さない良いアイデアがあれば教えてください。
また、ダブルタップにつていも、ダブルタップしてもすぐに拡大が元に戻ってしま場合があるといった問題があったため、タップ処理全体を見直しています。
使い方は簡単で、アプリを起動した後、「Twitter認証」ボタンを押して、指示に従ってTwitterの認証を完了させてください。(もちろん、Twitterアカウントがある事が前提です。)
認証が完了すると、Medolyで再生している情報が自動的にツイートされるようになります。
送信のタイミングは、デフォルトでは「再生中」イベントのタイミングです。「再生中」イベントのタイミングは、Medoly本体側の設定画面から設定できます。デフォルトは曲の再生を開始して30秒後です。曲を停止すると再生時間はリセットされます。再生を再開した場合、そこから30秒後に再びイベントが発生します。とりあえず、「再生開始」のタイミングでも送信できますが、曲を頻繁に切り替えるザッピング再生みたいな事やってると、その都度ツイートされてしまうためあまりお勧めはしません。
メッセージの内容は「メッセージ編集」 ボタンより変更することができます。Medolyのプロパティとして取得できる情報は全てメッセージに入力できますが、加工されていない生データが送信されてますので、使い物にならないデータが多数含まれています。そこら辺は要望があれば何とかしますが、とりあえず放置です。大体、曲のタイトルとアーティストとアルバムの名前があればいいでしょ?っていうぐらい。プラグインのサンプルモデルみたいな 代物なので、実装は割と適当です。
メッセージ編集で、各データには「優先度」が設定できます。「優先度」とは、140文字の文字数を超過した場合に関係します。140文字を超過した場合、優先度の低い順に文字が削られていきます。「省略可」にチェックが入っている場合、文字数を超過した分だけ、途中で省略します。未チェックの場合、文字数に収まらない場合は全て消去されます。例えばID等の、省略すると意味を為さない項目はデフォルトで省略可のチェックが外れています。
例えばTwitterの文字上限が20文字だったとして、優先度が「タイトル, アルバム名, アーティスト名」の順で、フォーマットが「タイトル – アーティスト名 / アルバム名」のようになっていると、「タイトル – アー… / アルバム名」 のように省略されます。アーティストの省略可チェックが外れていると、「タイトル – / アルバム名」のようになります。ちなみに、フォーマット中に直接書かれた文字は省略されません(それだけで140文字を超過しない限りは)。
文字数上限をオーバーさせないための施策なので考えるのが面倒臭いですが、普通は標準の状態をそのまま使っていただければ良いと思います。
ところでこのアプリ、Ver. 1.0.2で一旦別アプリとして公開し直してます。理由は、Googleに公開停止を食らっているためです。理由を問い合わせたところ、アイコンがマズかったらしいです。Twitterのガイドラインに抵触してたと思われるので、アイコンを再加工して、別アプリとして再公開しています。
ちなみに、このようなプラグインを開発したということは、Twitter上のどこかに私のTwitterアカウントが存在するわけですが、その存在についてはあまり気にしないでください…。
Last.fmは日本ではあまり馴染みが無いかもしれませんが、音楽を主体としたSNSです。 自分の再生している音楽の情報をひたすら上げ続けていくという特徴があり、自分の聞いている音楽を主体としてコミュニケーションを行うサービスです。iTunesやWindows Media Playerといった主要なメディアプレイヤーをはじめとし、多くのアプリケーションでLast.fmに再生中の曲を登録する機能やプラグインが提供されています。Androidサービスに登録されている多くのアプリにも実装されています。
SNSとしての利用では無く、自身の音楽再生履歴を残すために利用している人も多いようです。私も最近、それを目的として使い始めました。
このアプリの使い方は、Medoly Twitter Plugin同様簡単で、最初に「アカウント認証」ボタンよりユーザ名とパスワードを入力し、ユーザ認証を行ってください(もちろん、アカウントを持っていくことが前提です)。認証が完了すると、Medolyで再生している音楽情報がLast.fmに送信されます。これはメッセージ編集等は無く、ただ必要な情報のみをLast.fmに送信します。ユーザが行うのは、基本的にこのユーザ認証のみです。
入力されたユーザ名はそのままの状態で、パスワードはハッシュ化して保存されますのでご了承ください。
ちなみにこのアプリを作ったのは、複数のプラグインの同時実行テストがしたかったため、という理由が大きかったりします。とりあえず2つのプラグインが同時に動くことは確認できました。
あと、Google Playへの登録名が30文字までなので、表記が 「Medoly Last.fm ScrobblerPlugin」と、スペースが1文字削られています。今後登録する際は、この文字数上限に気を付けた方が良い、という事は今回分かりました(笑)。
2015-05-26 Ver. 2.0.6
– 再生終了後に落ちる問題修正
– プレイリストの削除時にダイアログが閉じない問題修正
いくつかある再生キュー登録方法について、登録処理の共通化を行いました。(今までバラバラに実装していたものを統合した感じです)。
登録処理は大まかに分類して、
– 検索画面から登録
– プレイリストを開いて登録
– 再生履歴から登録
– 他アプリから渡された共有メディアを登録
が実装されており、これらを統一した処理で登録されるようにしました。
それに伴い、登録処理の際は全てメッセージが表示されるようになっています(設定でOFFに出来ます)。
– 追加、更新の選択、または確認表示
– 再生キュー登録済みの内容と重複しているメディアの除外
– 追加されるメディアを対象としたソート(再生キュー登録済みのメディアはソートされません)
– 追加されるメディアを再生(複数追加の場合は、追加されたメディアの先頭が再生)
– メイン画面に戻る(検索画面のみ)
となっています。 また、これらのオプション選択ダイアログを表示させることもできます。ちなみにこのオプション選択、ずいぶん前から検索結果の長押しで表示させる事ができていたのですが、存在が中途半端だったので放置していました。今回改めて実装し直した次第です。
また、検索画面からの登録方法を細かく分類すると、
– 検索メニュー
– 検索結果タップ
– 検索結果長押し
の3種類があり、さらにメニューは3つまで登録できます。 初期状態では、「再生キュー追加」、「再生キュー更新」の2種類で、3つめのメニューは非表示にしてあります。必要に応じて変更・増減させてください。
Bluetoothには、リモート操作を行うためのAVRCPというプロファイルが規定されています。また、このAVRCPにはいくつかバージョンがあり、Ver.1.3よりリモート操作側にメディアの情報を送信できるようになっています。Bluetoothのリモコンに曲名が表示されたりするアレです。
Android 4.3より、このAVRCP1.3による曲名表示に標準対応しています。最近、Bluetoothヘッドセットアダプタ Sony SBH50 を購入したので、正式に対応させてみた次第です。
今までもロック画面の表示設定をONにすると表示されていたと思いますが、きちんと検証したという事で。また、Android 5.0のLollipop以降は実装方法が異なるため、そこは新たに作り直しています。現状、Android 4.3以降であれば表示されるはずです。
ちなみに、Android 4.2以前ではAVRCP 1.3に未対応ですが、端末メーカーが独自に実装している場合があります。自分の所持するXperia UL(Android 4.2.2)で色々試してみたところ、Android標準の音楽プレイヤーや、Walkmanアプリ、Rocket Playerといったいくつかのアプリならリモコン側に曲名が表示されるのは確認しましたが、多くのプレイヤーでは非表示のままでした。自分でもこれを表示させる方法を色々調べてみたのですが、結局よく分かりませんでした。上記で実装した方法はAndroid 4.3以降が対象であるため、Xperiaは何らかの独自実装を行っているものと思われます。
Android標準の音楽プレイヤーのソースコードを弄って確認したのは、MediaPlayerのインスタンスが再生を開始すると曲名が表示されるという事です。それ以外の、外部に曲情報を送信しているものと思しき箇所を片っ端から削除してみましたが、表示に対してはまったく影響を与えませんでした。とにかく、再生を開始した時点で何らかの方法で再生している曲の情報を取得しているものと推測しますが、Medolyで再生している曲を取得させる方法が分かりませんでした。Rokect Playerというアプリで表示できているので、特定のアプリ以外では無理というわけではないと思っているのですが…。
どなたか、これについて情報をお持ちの場合は教えていただけると嬉しいです。また、Xperia以外で、Android 4.3以前にAVRCP 1.3に対応している端末で曲名表示させたいという要望があれば受け付けます。ただし、その実装方法が確実に分かっている場合のみですが。
なお、カスタムOSのCyanogenModをご利用頂いている場合、もしかしたらアーティスト情報の場所にアルバムアーティストが表示されるかもしれません。これは、CyanogenModの挙動なのでご了承ください。アルバムアーティストが存在しない場合は、アーティストが表示されるようにしています。
今まで、リモートコントロール設定は初期状態でOFFにしていました。何故ならば、自分は「可能な限り相手の端末に影響を与えたくない」という考え方で作っているからです。
ただ、今回上記のBluetoothリモコンへの曲名表示対応を作っていくにあたり、「やっぱ普通の人には分かりにくいし、めんどいよね」という結論に至り、あっさり宗旨替えです。
というわけで、今回からインストールした時点でロック画面のプレイヤーも占有するし、ヘッドセットのボタンも占有するし、Bluetoothリモコンも占有します(ちなみに、これらの占有処理は一体的な物なので、どれか一つだけOFFにするといった動作は、複雑になりそうなのであまりやりたくないです)。邪魔な人のみOFFにしてください。
BROADCAST_STICKYとは、他のアプリにメッセージを送信するための権限です。通常のBROADCASTとは異なり、配信が終了してもメモリ上に残ります。これは、外部のアプリケーションに曲名を通知するために追加しています。
Android の標準音楽アプリは 、再生している曲が変更される度に外部に対して曲名が通知されおり、その際に使用されるのがこの通知方法です。今回、それと同じ通知を外部に対して行うようにしています。比較的多数の音楽プレイヤーが、同様のメッセージを外に投げていると思われます。
世の中には、そのメッセージを受け取って動作するアプリも存在しますので、それが利用できるようになります。未使用の方にとって特にメリットはありませんが、今回ちょっと追加させていただきました。
ユーザ様からのエラーレポートから発覚しました。
区間ループを行っている場合、シークバー上のループ区間を示すアイコンの座標計算で0の除算が発生し、再生終了時に落ちる場合があることが分かりましたので、その修正です。
プレイリスト操作で、プレイリストの削除を行うっても、ダイアログが閉じなくなっていたので、その修正です。Ver. 2.0.5で行った再生キュー登録処理の統一化の際に、処理が漏れてしまいました。
開発環境をAndroid Studioに変更しました。
本バージョンより、Bluetooth機器へのアクセス権限を追加しています。
2015-05-13 Ver. 2.0.1
– 再生時にループが終了しない問題修正
ついにVer.2.0.0です。 本アプリは2013年12月のVer. 1.0.0から始まり、少しずつバージョンを積み重ねてきました。大体、機能追加で0.0.5、バグ修正で0.0.1上がってく感じでバージョンを変更しています。あまり急激なバージョン番号の上昇はやりたくなかったので、牛歩戦術みたいなバージョンアップを重ねてきましたが、ついに2.0.0まで来てしまいました。思えば遠くに来たもんだ。
せっかくメジャーバージョンが上がるということで、Ver.2.0.0に合せて少し大きめの変更を2件、追加しています。 とは言っても、従来とUIや使い方が変わるわけではありません。使い勝手を買えるのは個人的にあまり好きではないですし、それなりに考え抜いて作ったUIデザインなので、今のUIはずっと続けていきたいと考えています。
また今回に合せて心機一転、開発環境をEclipseからAndroid Studioに変更しています。環境を変えて思ったのは「Eclipseってやっぱ使いにくかったなぁ…」という感想です。もちろん、Android Studioの方がAndroidに特化しているため色々便利な点があるのは当然なのですが、それを差し引いてもEclipseは、重いし、設定が分かりにくいし、環境がよく壊れるしといった色々なアラが目立つので…。Googleもサポートを打ち切っていく方針なので、多分もうEclipseでAndroid開発はしないと思います。
なお、Android Studioでビルドしてから、ビルド後のAPKのサイズが200kbぐらい縮みました。 これが最適化によるものなのかどうかは知りませんが、サイズ減ったからといって別に機能が削減されたわけではありません(むしろコードの量は増えているはずなのですが)。
上記に挙げた更新以外に、色々な修正が加わっています。イヤホンプラグ挿入時、Bluetooth接続時、通話終了時にもオーディオフォーカスを再取得できるようにしたり、メディア再生エラーの際の処理を設定できるオプションを追加したりしています。
その他、文言変更等の細かい修正も行っています。
2015-03-27 Ver. 1.9.5
– 区間ループ追加 (Android 4.1以降)
– 区間ループの開始・終了初期値にLOOPSTART / LOOPLENGTH の値を設定
– ループカウンタ及びループカウンタによる終了タイマー追加
– ギャップレスループ化 (Android 4.1以降)
– ランダム再生追加
– 再生シーケンスポップアップ内容の見直し
– アプリ個別ボリューム設定追加
– メディアストレージ情報のリンク追加 (メディアスキャン廃止)
– 設定のインポート・エクスポート追加
– 他アプリからのM3Uファイル共有受付サポート
– キーボード操作一部サポート
– タブメニューの表示位置調整
– 共有メディアが再生キューに登録されない場合がある問題修正
– 一部ダイアログ見直し
– 巻き戻し・早送りのボタン非表示でレイアウトが崩れる問題修正
今回の機能変更に伴い、メイン画面左下にあるボタンのポップアップメニュー(再生シーケンスメニュー)の内容を大きく見直しました。
今回、ユーザ様からの要望があったため、区間ループ機能を追加しました。
区間ループ(ABループ)とは、局の特定の2地点をループさせる機能です。リスニング学習や耳コピ作業等、リピートさせて同じ所を何度も聞くような用途に用いられたりします。
先述したように、区間ループの追加に伴い、シーケンスメニューの内容を大幅に見直しています。メニューの「区間ループ」を選択すると、ループ位置の設定が表示されます。
「A」がループ開始位置(ミリ秒)、「B」がループ終了位置(ミリ秒)となります。 この時間の間で再生中の曲をループさせます。
「現在」ボタンを押すと、現在の再生時間を設定します。「<」「>」ボタンで、時間を微調整します。「初期値」ボタンを押すと、メディアの初期値の値が入力されます。通常は「A」が0、「B」が曲の再生時間が入りますが、一部特殊なメディアについては初期値が異なります(後述)。
変更された値は「設定」ボタンを押すまで反映されません。未反映の値は数値が黄色く表示されます。
また、シークバー上にループ位置を示す記号が表示されます。
他の区間ループ機能を持つプレイヤーに比べて使いにくいかもしれませんが、まぁオマケ程度の機能なので…。
先ほど挙げた区間ループ機能ですが、実は同等の機能が1年以上前に既に実装されていました。LOOPSTART / LOOPLENGTH というタグによる2点間のループ機能です。これは、音楽ファイルにあるタグを読みとって、タグに指定された2点間をループさせるもので、これは元々ゲームBGM等で用いられているものです。
今回、この機能を区間ループと統合しており、区間ループ再生を行うとこの機能が使用できるようにしています。具体的には、区間ループの初期値として、LOOPSTART / LOOPLENGTH タグから求められる時間が設定されるようになり、従来と同様にループが行われるようになります。
メイン画面の下部に表示されている再生キュー状態の中に、ループ時にカウントアップされるループカウンタを追加しています。これをトリガーとして、ループ回数で再生を終了させることができます。
まぁ、何となくループカウント数を追加してみたので、ついでに付けてみた機能です。大して使い出があるとは私もあまり思っていません(笑)。
ユーザ様の要望により、ループ処理を見直してギャップレス化しています。従来は単純に先頭にシークさせていただけですが、これだと再生終了→再生開始の間に僅かな無再生時間が発生し、音が途切れてしまいます。今回、これをギャップレス化して、再生終了→再生開始の間が途切れないようにしました。
これを作る際、単純にAndroidの再生ループ機能を使えば良いのかとも思ったのですが、それでも途切れる機種があったり、そもそも「再生完了」を検出するイベントが発生しないので色々不都合があったり(実は発生する機種もあるようで、どちらかに決め打ちできない)で、割と難航しました。そんなわけで、ループを真面目に作るならMediaPlayerのsetLoopメソッドは使うべきではないと思います。
今回は、従来のギャップレス再生と同様の方法でギャップレスループを実現させています。そんなわけで、ループさせる毎に再生するメディアプレイヤーのオブジェクトが入れ替わってたりします。従来と全く異なる方法でループさせているので、何か問題があったら報告いただけると助かります。
ランダム再生機能は以前から気になっていたので、今回実装してみました。これは再生キュー上にある曲から、ランダムに選曲していく機能です。「シャッフル再生」というよく似た機能がありますが、それとは若干異なります。
「シャッフル再生」は、再生キューの順番を入れ替えて再生する機能です。そのため、再生済みの曲は再生されませんし、再生キューの全ての曲の再生が終わると再生キューの完了と判定されます。一方今回の「ランダム再生」は、全ての再生キューの中からランダムに選曲していきます。現在再生されている曲が次にまた流れる可能性もありますし、逆に全く流れない曲も出てくる可能性があります。とにかく、順序や再生済等の情報は一切無視します。再生キューが完了するという概念もありません。
実装はしてみたものの、使い所は難しいかもしれません。私としても、今回の変更でポップアップメニューに余白が出来ていたし、以前から気になってたので追加してみるかぁ、ぐらいの感覚です。
なお、使ってて気になるのは、ランダムに再生しているつもりでも、再生曲が妙に偏るような感じがします。アプリのバグかもしれませんが…。余談ですが、一部のサービスでは、シャッフル再生させる場合、アーティスト等の情報をなるべくばらけさせるようにして、「人間がよりランダムらしく感じられる」ように意図を持って並べ替えることもあるようです。
今まで、ボリューム調整はAndroid標準の音量設定に任せきりだったのですが、本バージョンよりアプリ固有の音量設定を持たせるようにしました。
以前から気になっていたのですが、今回で設定にあった「メディアスキャン」という項目は廃止しました。というのも、これは全く機能していなかったためです。
設定をインポート・エクスポートする機能を追加しました。設定の「その他」より使用できます。エクスポートは保存先のファイルパスを指定することで、現状の設定情報をファイルに書き出します。インポートは読み込み元の設定ファイルパスを指定し、設定内容を現在のアプリに反映させます。あんまりきちんとテストしてないので、何か問題が起きるかもしれませんが、何か問題がありましたら情報ください。
他のアプリからM3Uファイルを本アプリに「共有」させると、再生キューにM3Uファイルの内容が展開されるようにしました。(事前にメディアストレージにプレイリストとして登録されている必要があります。)
現状ではまだ中途半端な状態(というか、色々大変)なので、とりあえず保留とさせてください。そのうち、きちんと整えてキーアサイン一覧も表示させるようにします。
タブを押した際に表示されるメニューがタブ幅より小さい場合、タブの中央にメニューが表示されるように座標修正しました。
メディアファイルをMedolyに「共有」とした場合、再生キューに登録される機能がありますが、場合によっては上手く登録されない問題がありました。これは、単純に自分の知識不足の問題です。
これは、以前は「onStart」イベントのみで送られたファイルを受け取っていたのですが、その場合はアプリのスリープ状態から受け取ることができませんでした。この場合、「onNewIntent」というイベントを使用するのが正解でした。
ダイアログの表示内容を一部見直しています。動作的な変更はありません。
設定で巻き戻し・早送りボタンを非表示かすると、レイアウトが潰れてしまう問題があったため、修正しました。
Android 5.0 より、ロック画面コントロールが大きく変更されました。Android 5.0では、Android 4.x で使用されていたような音楽のロック画面コントロールは廃止されました。その代わり、通知バーに表示される内容をそのままロック画面に表示させることができるので、これを使用することになるそうです。(ただし、Androidの設定で有効にする必要があります。)
本アプリは今までも通知バーからコントロールできていたので、Android 5.0からはロック画面からアプリを操作する場合はこれを使用するようにしてください。
ただ、「ロック画面操作」のチェックを入れると、ロック画面に再生中音楽のアルバムアートを表示するようにしています。
LOOPSTART / LOOPLENGTHタグを使用した区間ループ処理の微調整です。実際のところ、あんまり調整できてはいなかったのですが…。
本アプリはピンチイン・ピンチアウトで表示領域を段階的に拡大・縮小することができますが、この拡大レベルを縦方向と横方向で別々に保持するようにしました。横に回転させると全画面に表示するとか、そういった使い方を想定しています。
歌詞を自動改行させないように設定した場合、歌詞が横スクロールするようになりますが、横スクロールしたまま戻らない問題があったので、その修正です。
設定画面の「その他」に、Androidのアプリ情報画面を表示する項目を追加しました。正直な話をすると、自分が開発や情報確認等をやりやすいのでここに追加しました。
まず、歌詞データには同期歌詞と非同期歌詞の2種類が存在します。
同期歌詞とは、曲の再生時間に同期して歌詞が進行していくタイプの歌詞となります。歌詞データの中に、歌詞のテキストとタイムコードが埋め込まれおり、再生プレイヤーがそれらを読み取り、画面に歌詞の進行状態を表示します。同期する場合、歌詞の行単位で同期する場合と、文字単位で同期する場合があります。一般的によく見かけるのは、行単位の同期歌詞です。というか、文字単位の同期は作る手段が限られてくるので、あまり見かけないかもしれません。
非同期歌詞とは、曲の再生時間と同期しない歌詞です。時間情報等が存在しない、要するにただの歌詞テキストです。
歌詞には、内蔵歌詞と外部ファイル歌詞があります。
内蔵歌詞は、音楽ファイルの中にタグ情報として歌詞が埋め込まれているものです。音楽ファイルの形式によって、歌詞が埋め込めるかどうかは変わってきます。また、埋め込まれる歌詞は非同期歌詞(すなわち、ただのテキスト)の場合が多いですが、MP3の場合は同期歌詞を埋め込む専用のタグが用意されています。
外部ファイル歌詞は、音楽ファイルとは異なる別ファイルです。明確な定義があるわけではありませんが、歌詞ファイルを.txtファイルとして作成した場合、「sample.mp3」という名前のファイルに対し、同じフォルダ上に「sample.txt」という拡張子を変えた歌詞ファイルを配置するのが一般的です(歌詞の形式によって拡張子は異なります)。Medoly(等の歌詞対応プレイヤー)は、外部ファイル歌詞が配置されていた場合、自動的に歌詞を読み込みます。
外部ファイル歌詞の場合、音楽ファイルの形式に依存せず歌詞を記述する事ができるというメリットがあります。一方、iOSのように一般的なファイルシステムと異なるシステム上では扱えない場合がある、というデメリットがあります。(なお、iOSで外部歌詞ファイルの読込みに対応させたLyritag Musica といったアプリもあります。)
ここでは、字幕ファイルについては特に触れませんが、字幕ファイルについても外部ファイル歌詞と同様の扱いとなります。
内蔵歌詞の場合、以下のような種類があります。Medolyではこれらの音楽ファイル(タグ)から歌詞を読み取る事ができます(ライブラリ依存)。
各タグの詳細については、Tag Mappings – Documentation – MusicBrainz Picard を参照してください。
基本的に、内蔵歌詞は非同期歌詞となります。AACやOggVorbis等は自分でタグを拡張できるので、その気になれば独自にタグを定義して同期歌詞を埋め込む事ができますが、一般的に広く使われるようなタグは残念ながら知りません。同期歌詞は、音楽ファイルに依存しない外部ファイルで作成するのが一般的のようです。
ちなみにMedolyの独自機能として、非同期歌詞のタグに、下記で示したKRAフォーマットまたはLRCフォーマットのテキストで歌詞を記述すると、勝手に同期歌詞として読み取ります。もちろん、他にそういったアプリは見当たらないため、Medoly独自の機能となる点はご了承ください。
次に外部ファイル歌詞の場合、フォーマットには以下のような種類があります。
テキストとは、単純なテキストファイルの事です。 テキストファイルに歌詞を書込めば、それはもう立派な歌詞データです。他2つは、歌詞の間にタイムタグと呼ばれる進行時間を記述したデータで、やはりテキストファイルです。これらの形式については、フォーマット仕様が書かれたURLを掲載していますが、正式に決定されたフォーマットは存在しません。あくまでも、ユーザー間で決まってるような状態です。
これらの歌詞とファイルの拡張子は、テキストファイルは「.txt」、KRAフォーマットは「.kra」、LRCフォーマットは「.lrc」となるのが一般的ですが、明確に決まっているわけではありません。特に2番目のタイムタグ歌詞は曖昧になっており、ツールによって「.txt」「.kra」「.lrc」の3種類の何れでも保存される可能性があります。個人的には、判別しやすいように「.kra」で保存されることをお勧めします。
歌詞データは、自分で簡単に作る事ができます。
もちろん、非同期歌詞であれば、歌詞掲載サイトから歌詞テキストを取得して、外部ファイルまたは内蔵歌詞として作成すれば問題ありません。
ただここでは、同期歌詞を作るための代表的な作成ツールを挙げます。私の作成環境がWindowsなので、Windows用ソフトだけ挙げていますが、他の環境にもあると思います。
使い方は各ツールのヘルプを参照してもらうとして、ほぼ共通している使い方は、「最初に歌詞テキストを用意した上で、流れている音楽に合わせてボタンやスペースキーを連打する」ことです。ボタンを押したタイミングの再生時間が、タイムタグとして記録されていきいます。
Windows Media PlayerやVLC等、他のプレイヤーの再生と同期して歌詞を表示させるツールですが、歌詞作成ツールとしても利用できます。
基本的にはLRCファイルを作成しますが、SYLT、Lyrics3でMP3に埋め込むこともできます。
同期歌詞の作成は行単位での作成となりますが、表示だけなら文字単位の同期も可能です(LRC、Lyrics3のみ)。
注意点としては、再生ソフトによっては、VBRのMP3を再生した際、再生時間が大幅にずれてしまい、歌詞がうまく同期しない場合があります。 VLCやfoobar2000等、VBRのMP3の再生時間を(それなりに)正確に取得できるソフトを使いましょう。
実は、作成した歌詞の登録及び、登録された歌詞の取得も可能ですが、それは後述。
タイムタグ歌詞フォーマットの歌詞を作成する事ができます。こちらは、文字単位の作成が可能で、私が知る限りほぼ唯一の文字単位の同期歌詞が作成できるツールです。
歌詞を作成する際、Lyrics Master というソフトが別途用意することで、歌詞テキストの取得が可能です。
タイムタグ情報 DataBase というサイトへの同期情報登録及び、登録された同期情報を取得する事ができます。歌詞サイトの歌詞と組み合わせて、同期歌詞を自動的に作成できます。ちなみに、歌詞そのものは登録されません。
SYLTタグへの書込み及び、タイムタグ歌詞の書き出しをサポートしています。行単位の同期歌詞を作成することができます。
SYLTの文字コードは、Shift_JIS及びUTF-16に対応しています。 また、多くの携帯音楽プレイヤーの独自歌詞タグをサポートしています。
余談ですが、外部ファイル歌詞は保存する文字コードは特に決まっていませんが、UTF-8辺りに統一しておくのが無難です。Shift_JISのよう
な、国内固有で使用されるような文字コードは、海外アプリ等で対応されない可能性が高いためです。なお、改行コードはCR+LFにしておくと良いかと思い
ます。内蔵歌詞について文字コードで悩むことは少ないと思いますが、MP3はタグの文字コードをUTF-16LE、タグのバージョンをID3v2 (2.3) で統一しておくのが最も問題を起こしにくい組み合わせになると思います。
歌詞データの作成方法でも挙げましたが、MiniLyricsは歌詞データの取得が可能です。歌詞自体は、ViewLyrics.comから参照できます。
…が、データの出所が色々アレなのでこれ以上触れておくのはやめておきます。
こちらも歌詞データの作成方法で挙げたツールです。こちらは、タイムタグ情報 DataBasから 歌詞の同期情報を取得することができます。別途、Lyrics Master というツールを使用することで、歌詞掲載サイトから取得した歌詞と、同期情報を組み合わせて、同期歌詞を作成することができます。
たまに歌詞情報に齟齬が生じて、時間がズレたりしてしまうのが難点。
同期情報が取得できる歌詞の量は、ユーザの登録状況次第です。あと、歌詞の傾向が偏ってます…。
こちらは、上記同様 タイムタグ情報 DataBasより歌詞を取得できます。RhythmicaLyricsから歌詞ダウンロード機能のみを抜き出した感じです。同様に、Lyrics Master が必要になります。
– メイン画面にスタイル変更ダイアログ追加
(VIEWタブのメニューまたは画面長押しで表示)
– 歌詞レイアウト変更機能追加
– 歌詞を自動改行しない設定追加
– 表示スタイル及び画面回転の設定項目をメイン画面に移動
– エラーログのメール送信機能を復活
– ダイアログが2重に表示される問題修正
– プレイリスト名にドットが含まれていた際にm3uファイル保存できない問題修正
– 選択再生キューが無い状態で再生ボタンを押しても再生が始まらない問題修正
– シーク位置が保存されない場合がある問題修正
以前のバージョンアップ(Ver. 1.8.0)でスクリーンを画面一杯まで広げられるようにしたもの、余白を持て余していて見栄えがあまり良くありませんでした。今回は、この余白を上手く活用できるレイアウトで表示できるよう、新規に開発してみた次第です。
設定が多くて分かりにくいのですが、とりあえず実験的に置いてみた感じなので、使用しない場合はあまり気にせずにそのままご利用ください。
ちなみに、歌詞を完全に1行で表示させるような個別の設定を提供する予定はありません。何故なら、本アプリは下記のように2行以上が同時に行がアクティブになるような表示を許容しているからです。そのため、基本的には画面に複数行の歌詞を表示させる事を想定した作りとなっており、今後もこの方針で開発していく予定です。
以前から、同じダイアログが2重に表示される問題がありましたが、これを改善しました。
いい加減直さないといけないと思っていたのですが、今回はスタイルダイアログの絡みでようやく着手した次第です。
ちなみに、ダイアログが表示された状態で画面を回転させたり、スリープに入ったりすると、ダイアログが自動的に閉じる処理も追加されています。