Z)向けのRockbox紹介と、Androidの少し深いところの話の二本立てでお送りします。--少し前の記事でPowerAmpなどのFLACやAppleロスレスが再生できるAndroidアプリを紹介しましたが、これらはマニアックと言うよりはいわゆる一般向け音楽アプリではあります。そこでオーディオ向けに特化したものとしてRockboxのAndroid版を紹介します。ZでRockboxが動きます。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に対応しています。HM601やHM801などがサポートされてHeadFiなんかでも取り上げられていますね。わたしはこれはやってませんがHifimanでAppleロスレスが使用できるようになるんでしょう。Rockboxはフリーですが、基本的に「自己責任」で使うものです。安定の度合いによって段階がありますが、今回紹介するAndroid版はもっとも低いUnusable(使い物にならない)に指定されています。後で書くように実際はかなり普通に使えます。Androidとは普通はRockboxってファームウエアというか基本ソフトをすっぽりと交換するものなんですが、Androidではアプリとなっています。そのためインストールはアプリのインストールに準じますので、iPodなどでやっていたRockboxとは多少異なります。2009のテーマとして採用されたものということです。モトローラ携帯にRockboxを移植した人がいて、そのコードがベースになっているようです。AndroidとしてはオープンソースのSDLライブラリをベースにはじめたようですが、PCM関連などはAndroidはLinuxですからALSAベースに変えているとのこと。AndroidとはRockbox同等の機能を持ったAndroidの音楽再生アプリということになります。インストールの仕方ただのアプリになったのでiPodあたりのRockboxより導入はかなり簡単です。Market経由ではないのでそこがポイントです。いくつかビルドがあるのですが、はじめから日本語対応しているのでこちらがお勧めです。Wikiさんのサイトhttp://www.mctek.tk/cgi-bin/wiki/wiki.cgi?page=FrontPage準備アストロ(Astro)ファイルマネージャアプリを用意してください。これはAndroidマーケット以外のアプリであるapk形式をインストールするためです。アストロ自体はAndroidマーケットからダウンロードできます。定番ですので入れておいたほうがよいです。Pro版でなくてもインストーラとして使えます。次にAndroidの(システムの)設定→アプリケーション→提供元不明アプリを許可するにチェックを入れてオンにしてください。上記ホームページのAndroid/Rockbox/Buildから480x800のファイルをダウンロードしてください。Zが書いてありますが480x800が正しいと思います)apkファイルをPCにダウンロードするか直接Walkmanでダウンロードしてどこかのディレクトリに置きます。PCでダウンロードした場合はUSB接続でAndroidのsdcard以下のどこかにコピーしてください。上記のapkファイルのあるディレクトリをアストロで開いてapkファイルを選択し長押しでコンテキストメニューを出して、インストールを押します。アプリケーションマネージャからインストールしてください。あっけないほど簡単で、iHP140などでおなじみRockboxの鬼門の日本語フォント設定もする必要はありません。ちなみにapkインストールは上記以外にも方法がありますので、手馴れた方法がある人はそれでも良いと思います。操作は完全にタッチパネルに対応していてAndroidのハードキーのバックボタンも効きます。Rockboxのメニュー階層とも親和性が良いですね。設定項目など機能はほぼ実装されているようです。データベースもバックグランド処理で更新ができます。ファイル形式はFLACもAppleロスレスも対応しています。Androidらしくウィジェットにも対応しています。ウィジェットを作る際にはボタンのカスタマイズと大きさの指定が可能です。アルバムアートの表示も可能ですが、なぜか全画面のときに操作パネルがうまく表示されないように思います。私もRockbox忘れかけてるんでスキンかなにかで指定できるのだったかもしれません。ウィジェットではOKですので、選曲を全画面で行って操作はウィジェットでやるならほとんど問題はありません。長く聴いてるといろいろと不安定ですが、多少注意していれば普通に使えます。Rockboxもずいぶん進化したものだと思いますね。機能と音質ファームではなくアプリではありますが、Rockboxはやはり音は良いと感じますね。この前あげたアプリ間ではイコライザーを抜きにするとさほど音質は変わりませんが、イコライザオフにした聴き比べでもPowerampより鮮明で音場も立体的です。ベルの音なども先鋭的で明瞭さが感じられます。Zとはなかなか相性がよいです。音質にかかわる設定ではRockboxではさまざまな選択が可能です。Dithering(ディザリング)設定を設定メニューからオンにすることができます。Ditheringは基本的にはビット幅とかサンプルレート変換するときの仕組みです。ソフト的にクロスフィードを行うことも出来るので、左右の音を適当にミックスして音場を自然なものにすることも可能です。イコライザもPowerAmpよりもずっと詳細で多岐の設定項目があります。この辺はRockboxは本格的です。イコライザを使う際にはPowerAmpのところでも書きましたが、調整することで歪みやすいので全体のゲインを落としておくと良いです。RockboxではPre-cutというのがその機能に当たります。Walkmanドック経由でも使用することができます。Z1000シリーズもってる人は試してみると面白いでしょう。DX100でもおそらく使えると思います。AndroidベースのDAPってなかなか遊べるし、いろんな使い方を模索できるのが面白いと思います。--と、一応締めといて、ここから第二部ですが、Rockboxを使ってたらちょっと面白いことを見つけました。Service(ddms)というデバッグ環境を立ち上げて撮るんですが、これやってたらRockboxは他のアプリと違ってデバッガに認識されるのに気がつきました。開発するためのデバッグシンボルがついた状態でビルドされているわけですね。Androidのwikiでもddmsとの連携について書いてありました。そこで実際に音を出している状態でデバッガにアタッチして中を見てみました。VMというのは普通のコンピュータで言うところのプロセスのようなものです。その中での実行単位はスレッドとなります。VMに対してデバッガをアタッチして実行スレッドの状態をスレッドツールでモニタしているのが上の画像です。ほんとはデバッガを使って実行中のメモリーアロケーションの遷移を見たかったのですが、それはできませんでした。Androidは開発言語はJAVAですが、オブジェクトはJAVAではなくDalvik(ダルヴィック)という仮想マシン(VM)で実行されます。AndroidアプリはJAVAであるという言い方は完全に正しいわけではありません。DalvikとJavaの違いはDalvikがレジスタベースであるのに対してJavaがスタックベースであると言うことです。一般にスタックベースのアーキテクチャというのはリソースを節約するためか移植性のためです。JavaがTVなどのセットトップボックスのファームのために開発されたと言う経緯がそれを物語っています。それにたいしてレジスタベースのほうがハードよりで速い実行速度を期待できます。このことはAndroidというものを語るのに少し重要な差かもしれません。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クラスを詳細に見てみると、下記のように定義されています。mode)ここではaudioFormatがビット幅の指定で、sampleRateInHzがサンプルレートです。modeはファイルなど大きいサイズのソースから再生するときはstreamで指定し、小さいサイズの時はバッファを指定します。セッションを使えるクラスもありますが省略します。ここでポイントはサンプルレートはintで定義されてある意味好きに値を設定できるのですが、audioFormatはいわば列挙型でENCODING_PCM_16BITかENCODING_PCM_8BITのどちらかしか値をとることができません。下記はENCODING_PCM_16BITの説明です。2(0x2)のリテラルですから勝手に10進で24などと設定することはできません。Androidでは普通に開発する分においては音楽再生は16bitまでで24bit(ハイレゾ)は使うことができないということになります。DX100なんかはどうやって24bitだしているのか興味あるところですが、おそらくメソッドをオーバーライドしてなにか作りこんでいるんでしょう。いずれにせよAndroidで24bit再生するにはそれなりのハードルがあるといえます。容易に推測できると思いますが、iPhoneでの24bit出力も実は似たような問題があり、iPhoneは16bitまでというのもそこから来ています。iOSにおいても24bit整数の指定もしくは型がなかったということです。Playerではそこをなんとかして解決したと言うことです。いまでは標準のMusicアプリが24bit対応しているところを考えると、今のiOSでは少なくともiPadのビルドについては24bitを標準対応しているのではないかとも思います。6型アンドロイドから来ているといわれています。Sなどに名称が変わったのはNexus+数字は使わないと言うことで話がついたのではないかと思います。ここは単なる推測ですが。リンクとメール(5)このブログが書籍となりました。本を共同執筆しました。