Music TO GO!

2012年02月08日

Android(Walkman Z)向けのRockbox紹介 -と- Androidは24ビットの夢を見るか?

本記事はAndroid(Walkman Z)向けのRockbox紹介と、Androidの少し深いところの話の二本立てでお送りします。

-- Android(Walkman Z)向けのRockbox --

少し前の記事でPowerAmpなどのFLACやAppleロスレスが再生できるAndroidアプリを紹介しましたが、これらはマニアックと言うよりはいわゆる一般向け音楽アプリではあります。
そこでオーディオ向けに特化したものとしてRockboxのAndroid版を紹介します。つまり高音質のWalkman ZでRockboxが動きます。

device-2012-02-07-001806.png

* Rockboxとは

わたしはiPod4GとiHP-140でRockboxを使ってましたが、うちのブログでもしばらくRockboxを扱ってなかったので一度紹介します。
iPodなどの携帯プレーヤー(DAP)にはもともとメーカー製のファームウエア(基本ソフト)が入っていますが、Rockboxは汎用のDAP用のファームウエアで、もとから入っているメーカー製のファームと交換できます。つまり操作画面の見た目はまったく異なるものになります。Rockboxではオリジナル機種のUIとは異なるRockbox独自のメニュー選択式のUIを使用します。
利点としてはたいていのメーカー製のファームウエアよりも音質がよいと言うことと、対応ファイル形式が広いのでDAPの対応ファイルを増やすことが出来るということです。たとえば私はiHP-140なんかはもっぱらFLACを使用するために使用していましたし、iPod4Gではより音質を高めるためにインストールしました。また、イコライザなど音に関する機能はかなり詳細です。何機種も使っている人は使い勝手を統一できると言うメリットもあるかもしれません。
たいていはデュアルブートでオリジナルのファームと切り替えて使用します。
曲名などメタデータはデータベース機能で管理します。Rockboxは汎用基本ソフトなので広い機種に対応しますが、フォントなど画面解像度に合わせてカスタマイズが必要になる場合があります。

Rockboxのホームページはこちらです。
http://www.rockbox.org/

かなり広いDAPに対応しています。以前から機種は微妙に拡大していて、iPod Classicも対象になっていますし、最近ではHifiman HM601やHM801などがサポートされてHeadFiなんかでも取り上げられていますね。わたしはこれはやってませんがHifimanでAppleロスレスが使用できるようになるんでしょう。

Rockboxはフリーですが、基本的に「自己責任」で使うものです。安定の度合いによって段階がありますが、今回紹介するAndroid版はもっとも低いUnusable(使い物にならない)に指定されています。ただし後で書くように実際はかなり普通に使えます。

* Rockbox for Androidとは

普通はRockboxってファームウエアというか基本ソフトをすっぽりと交換するものなんですが、Androidではアプリとなっています。そのためインストールはアプリのインストールに準じますので、iPodなどでやっていたRockboxとは多少異なります。

Rockbox for AndroidはGoogle summer of codesというオープンソースのプログラミング・コンテストと言うかプロジェクトのために立ち上げられたもので、Google summer of codes 2009のテーマとして採用されたものということです。もともとはモトローラ携帯にRockboxを移植した人がいて、そのコードがベースになっているようです。Rockbox for AndroidとしてはオープンソースのSDLライブラリをベースにはじめたようですが、PCM関連などはAndroidはLinuxですからALSAベースに変えているとのこと。
こちらRockbox wikiです。
http://www.rockbox.org/wiki/RockboxAsAnApplication2010

つまりRockbox for AndroidとはRockbox同等の機能を持ったAndroidの音楽再生アプリということになります。

* インストールの仕方

ただのアプリになったのでiPodあたりのRockboxより導入はかなり簡単です。ただしAndroid Market経由ではないのでそこがポイントです。

いくつかビルドがあるのですが、はじめから日本語対応しているのでこちらがお勧めです。
MCtek Wikiさんのサイト
http://www.mctek.tk/cgi-bin/wiki/wiki.cgi?page=FrontPage

準備
アストロ(Astro)ファイルマネージャアプリを用意してください。これはAndroidマーケット以外のアプリであるapk形式をインストールするためです。アストロ自体はAndroidマーケットからダウンロードできます。定番ですので入れておいたほうがよいです。Pro版でなくてもインストーラとして使えます。

次にAndroidの(システムの)設定→アプリケーション→提供元不明アプリを許可するにチェックを入れてオンにしてください。
(危険ですので念のため、ただこれができることがiPhoneに比べて自由だと言われるゆえんのひとつです)

インストール手順
上記ホームページのAndroid/Rockbox/Buildから480x800のファイルをダウンロードしてください。(このページには480x854のところにWalkman Zが書いてありますが480x800が正しいと思います)
apkファイルをPCにダウンロードするか直接Walkmanでダウンロードしてどこかのディレクトリに置きます。PCでダウンロードした場合はUSB接続でAndroidのsdcard以下のどこかにコピーしてください。
上記のapkファイルのあるディレクトリをアストロで開いてapkファイルを選択し長押しでコンテキストメニューを出して、インストールを押します。あるいはアプリケーションマネージャからインストールしてください。

あっけないほど簡単で、iHP140などでおなじみRockboxの鬼門の日本語フォント設定もする必要はありません。
ちなみにapkインストールは上記以外にも方法がありますので、手馴れた方法がある人はそれでも良いと思います。

* Rockboxの操作性

操作は完全にタッチパネルに対応していてAndroidのハードキーのバックボタンも効きます。Rockboxのメニュー階層とも親和性が良いですね。設定項目など機能はほぼ実装されているようです。データベースもバックグランド処理で更新ができます。
ファイル形式はFLACもAppleロスレスも対応しています。

device-2012-02-07-001953.png     device-2012-02-07-002203.png

Androidらしくウィジェットにも対応しています。ウィジェットを作る際にはボタンのカスタマイズと大きさの指定が可能です。

device-2012-02-07-001454.png     device-2012-02-07-001731.png

device-2012-02-07-002115.png

アルバムアートの表示も可能ですが、なぜか全画面のときに操作パネルがうまく表示されないように思います。私もRockbox忘れかけてるんでスキンかなにかで指定できるのだったかもしれません。ウィジェットではOKですので、選曲を全画面で行って操作はウィジェットでやるならほとんど問題はありません。
長く聴いてるといろいろと不安定ですが、多少注意していれば普通に使えます。
しかしRockboxもずいぶん進化したものだと思いますね。

* 機能と音質

ファームではなくアプリではありますが、Rockboxはやはり音は良いと感じますね。
この前あげたアプリ間ではイコライザーを抜きにするとさほど音質は変わりませんが、イコライザオフにした聴き比べでもPowerampより鮮明で音場も立体的です。ベルの音なども先鋭的で明瞭さが感じられます。
Android端末でも音質に特にこだわっているWalkman Zとはなかなか相性がよいです。

音質にかかわる設定ではRockboxではさまざまな選択が可能です。
例えばDithering(ディザリング)設定を設定メニューからオンにすることができます。Ditheringは基本的にはビット幅とかサンプルレート変換するときの仕組みです。
ソフト的にクロスフィードを行うことも出来るので、左右の音を適当にミックスして音場を自然なものにすることも可能です。
また、イコライザもPowerAmpよりもずっと詳細で多岐の設定項目があります。さすがにこの辺はRockboxは本格的です。またイコライザを使う際にはPowerAmpのところでも書きましたが、調整することで歪みやすいので全体のゲインを落としておくと良いです。RockboxではPre-cutというのがその機能に当たります。

もちろんWalkmanドック経由でも使用することができます。

* まとめ

安定性の問題とか、非正規のapkインストールという点はありますがWalkman Z1000シリーズもってる人は試してみると面白いでしょう。怪しいファームの交換ではなくアプリのインストールなので素性は良く、iBasso DX100でもおそらく使えると思います。
AndroidベースのDAPってなかなか遊べるし、いろんな使い方を模索できるのが面白いと思います。


-- Androidは24ビットの夢を見るか? --

と、一応締めといて、ここから第二部ですが、Rockboxを使ってたらちょっと面白いことを見つけました。(*以降内容はちょっと濃くなります)

Walkman Zのスクリーンキャプチャは前に書いたようにAndroid SDKのDalvik Debug Monitor Service(ddms)というデバッグ環境を立ち上げて撮るんですが、これやってたらRockboxは他のアプリと違ってデバッガに認識されるのに気がつきました。開発するためのデバッグシンボルがついた状態でビルドされているわけですね。調べたらRockbox for Androidのwikiでもddmsとの連携について書いてありました。
そこで実際に音を出している状態でデバッガにアタッチして中を見てみました。

ddms2.gif

左ペインの上の携帯の形をしたアイコンがWalkman Zで、その下に表示されているorg.rockboxという項目がRockboxのDalvik VMです。AndroidではプロセスごとにVMをホストするという考え方なので、このDalvik VMというのは普通のコンピュータで言うところのプロセスのようなものです。つまりその中での実行単位はスレッドとなります。それでDalvik VMに対してデバッガをアタッチして実行スレッドの状態をスレッドツールでモニタしているのが上の画像です。ほんとはデバッガを使って実行中のメモリーアロケーションの遷移を見たかったのですが、それはできませんでした。

Androidは開発言語はJAVAですが、オブジェクトはJAVAではなくDalvik(ダルヴィック)という仮想マシン(VM)で実行されます。ですからAndroidアプリはJAVAであるという言い方は完全に正しいわけではありません。DalvikとJavaの違いはDalvikがレジスタベースであるのに対してJavaがスタックベースであると言うことです。一般にスタックベースのアーキテクチャというのはリソースを節約するためか移植性のためです。もともとJavaがTVなどのセットトップボックスのファームのために開発されたと言う経緯がそれを物語っています。それにたいしてレジスタベースのほうがハードよりで速い実行速度を期待できます。このことはAndroidというものを語るのに少し重要な差かもしれません。

話を戻すと、つまりddmsで目的アプリのDalvik VMにアタッチすることでプロセスの実行状況がわかります。上の画像ではRockboxのDalvikVMにおけるスレッドの状況が表示されています。実際の音楽再生中です。

ここでAndroidの音楽再生についての簡単な解説ですが、Androidではandroid.mediaパッケージというインターフェースで提供されるMediaPlayerクラスかAudioTrackクラスを使います。MediaPlayerクラスはハイレベルのフレームワークでAudioTrackクラスはより低レベルな処理ができます。
上の画像のようにスレッドモニタリングして見るとRockboxではAudioTrackクラスを使用しているのがわかります。
ここで気が付くのはwriteメソッドというPublicメソッドのほかにnative_write_byteというクラス定義にはないメソッドがあります。基本的にはwriteメソッドだけでPCMデータを出力して、Androidのミキサーに渡すことができますが、writeの中でさらにprivate使用されているのか、オーバーライドのようなことをしてRockboxのコードの中で定義しているのかもしれません。

ここでAudioTrackクラスを詳細に見てみると、下記のように定義されています。
Android開発者サイト
http://developer.android.com/reference/android/media/AudioTrack.html

AudioTrack(int streamType, int sampleRateInHz, int channelConfig, int audioFormat, int bufferSizeInBytes, int mode)

ここではaudioFormatがビット幅の指定で、sampleRateInHzがサンプルレートです。modeはファイルなど大きいサイズのソースから再生するときはstreamで指定し、小さいサイズの時はバッファを指定します。セッションを使えるクラスもありますが省略します。
ここでポイントはサンプルレートはintで定義されてある意味好きに値を設定できるのですが、audioFormatはいわば列挙型でENCODING_PCM_16BITかENCODING_PCM_8BITのどちらかしか値をとることができません。下記はENCODING_PCM_16BITの説明です。

public static final int ENCODING_PCM_16BIT
Audio data format: PCM 16 bit per sample. Guaranteed to be supported by devices.
Constant Value: 2 (0x00000002)


これは整数で固定値 2(0x2)のリテラルですから勝手に10進で24などと設定することはできません。つまりAndroidでは普通に開発する分においては音楽再生は16bitまでで24bit(ハイレゾ)は使うことができないということになります。
iBasso DX100なんかはどうやって24bitだしているのか興味あるところですが、おそらくメソッドをオーバーライドしてなにか作りこんでいるんでしょう。いずれにせよAndroidで24bit再生するにはそれなりのハードルがあるといえます。

そして容易に推測できると思いますが、iPhoneでの24bit出力も実は似たような問題があり、iPhoneは16bitまでというのもそこから来ています。つまりiOSにおいても24bit整数の指定もしくは型がなかったということです。これはFLAC PlayerのDanとの話で確認したことですが、DanによるとFLAC Playerではそこをなんとかして解決したと言うことです。
ただしいまでは標準のMusicアプリが24bit対応しているところを考えると、今のiOSでは少なくともiPadのビルドについては24bitを標準対応しているのではないかとも思います。


ちなみに蛇足ではあるんですが一応説明しておくと、Androidという名前はフィリップKディックの小説(映画名ブレードランナー)でのNexus 6型アンドロイドから来ているといわれています。実際にディックの遺族とGoogleで訴訟騒ぎがあったんですが、GoogleのリファレンスモデルがNuxus OneからはじまったのにNexus Sなどに名称が変わったのはNexus+数字は使わないと言うことで話がついたのではないかと思います。ここは単なる推測ですが。
posted by ささき at 23:53 | TrackBack(0) | __→ スマートフォンとオーディオ | このブログの読者になる | 更新情報をチェックする