Music TO GO!

2012年04月02日

AndroidはUSB DACの夢を見るか?

iPadではカメラコネクションキットを用いてUSB DACを使用することができます。それではAndroidではどうなのか、と思いますが結論から言うとまだ現状ではAndroidでUSB DACは使用できないようです。
Androidではタブレット専用バージョンの3.1からUSBホスト機能がついてUSBキーボードなどに対応しました。このUSBホスト機能はスマートフォン・タブレット統合OSであるAndroid4.0にも受け継がれているので、USBホストプラグ(USB Aタイプ)さえついていればUSB DACも使用できるように思ってしまいます。しかし、実のところUSB DACは使えないようです。これは標準ドライバー(USBクラスドライバー)の問題のようで、こちらのGoogleのバグ対応依頼リストに入っています。
code.google.com - Open Issues
Issue 24614: Enable USB audio on the Galaxy Nexus (or any Android 4.0 device)

AndroidってALSAもLinuxの中に入ったままになっているようですが、そちらは生きていないようです。おそらくはGoogleはAudioFlingerがAndroidの標準的な音声システムになっているのでALSAの方はベンダー責任となっているのではないかと思います。AndroidについてはGoogleが標準的に提供している部分とベンダーが作りこんでいる部分がありますが、ベンダーによってはALSAを生かしているところもあるようです。
ですから標準的なAndroid OSで考えると、Googleが上記の問題についてどこかの時点で直しを入れないとAndroidでUSB DACは使えないままでしょう。ただし上にも書いたようにベンダーが対応してALSAを生かすようにすればALSAの標準ドライバーで使えないことはないとも思います。その場合は機種ごとの対応になるでしょう。

ちなみにiPadでUSB DACを使う時もドライバーのインストールができないので標準ドライバー以外は使うことができませんので注意してください。これはAndroidも同じだと思います。
なぜPCやMacではドライバーがインストールできるのにスマートフォンではできないかについてはOSのカーネル構造について一歩踏み込まねばならないので、また別の機会にいたします。

*BlueStack App player紹介

一方でAndroidアプリからUSB DACを使用する手段があります。それはいまから紹介するBlueStack App playerを応用することです。これは最近ベータ版がリリースされたことで話題になっています。簡単に言うとBlueStack App playerはWindows7で動作するAndroid仮想環境です。
BlueStack App player - http://bluestacks.com/
パソコンのデスクトップでAndroidを動かすにはさきに書いたCotton CandyやUbuntu for Android、x86ネイティブ版などがありますが、BlueStackはわりと典型的な仮想OSと言えます。

bluestack1.gif

画面はこんな感じでAndroidデスクトップが表示されるのでそこで下部の検索ボックスにアプリ名を入れるとAndroid MarketやAmazon App maketなどいくつかのリポジトリを串刺し検索してアプリをダウンロードします。インストールされたアプリは上のアプリランチャーに登録されてそこから実行ができます。Androidのハードキー(バックやホーム、メニュー)に相当するのは最下端のボタンになります。BlueStackは現状2.3がベースのようです。
またCloud Connectionという仕組みを使うとAndroidスマートフォンで使用しているアプリをBlueStackにCloud経由でプッシュすることができます。

BlueStackでは音楽やBGMの再生も可能です。この場合はWindowsのデフォルトデバイスから再生されるようです。つまり再生先にDACを置くこともできますのでこれを使うわけです。仮想化することによって通常AndroidにはつなげないDAC機器を使用できるということです。

実際にいくつかの音楽再生プレーヤーアプリをインストールしてみました。USB DAC経由でAndroidアプリからけっこうきれいに音楽再生をすることができます。
音楽再生プレーヤーに関してはandLessやMeridian、Winampなどのアプリが動作確認できました。PowerAmpは動作しませんでした。おそらくJavaからCオブジェクトを呼びだすJNIかなんかの例外的なワザを使用しているのではないかと思います。

bluestack3.gif     bluestack2.gif
BlueStack上のandLessアプリ

さて、Angry BirdみたいなAndroidだけにあるアプリを動かしたいならともかく、これでなんの得があるのか、PCで音楽聴くならFoobarで聴けばいいじゃんといわれるかもしれませんが、ここで取りだすのはAudioPhilleo1です。
AudioPhilleo1には下位8bitを判断するスニッファの機能とビットパーフェクトテスターがついています。そこでBlueStack上のAndroidにAudiophilleoのビットパーフェクトテストデータといくつかハイレゾ音源を送って、どういう挙動を示すかを確認してみました。正確に言うとBlueStackの仮想化レイヤーとWindowsの音声システム(DirectSound?)を通る事になりますので念のため。

PCからAudioPhilleo1には24bit幅で送られますが、AudioPhilleo1は下位8bitを動的に確認しているので表示で有効なビット幅が分かります。
実際に試してみると44/16のCDリッピングでははじめ44/16で送出されていますが、途中で24bitがついたり消えたりするのでなにか計算余剰があるように思えます。きれいに下位8bitがヌル(0)にはなっていないようですね。USBドライバーはWindows側なのでそちらの問題のようにも思えます。
44/24や96/24ではやはり16bitと24bitで明滅がおこります。いずれにせよこの再生経路ではきれいな24bitストリームは取り出せていないようです。当然44/24のビットパーフェクトテストデータも通らないのでビットパーフェクトにはなりません、というかビットパーフェクトテストにはなりません。

*PCオーディオは仮想化の夢を見るか?

さきに書いたようにあやしい経路を使用していますのでこれはAndroidがビットパーフェクトかの正しい検証ではありません。
なにをしたかったかというとWindowsの上でAndroidを仮想化してUSB DACを使うことで、仮想化がPCオーディオの世界に応用できないかということを試行してみたかったわけです。もちろんこの方法ならUSBに限らずAndroidからPCの拡張性を活用できます。

今回はWindowsの上でAndroidを仮想化してUSB DACを使う例を示しましたが、このほかにも仮想化PCオーディオとして仮想化LinuxをWindows上で走らせるなんて言うのも面白いかもしれません。
処理は遅くなるだろうに、メリットはあるのか、といわれるかもしれませんが、まじめにひとつあります。それは設置が簡単だということです。
Linux系ソフトウエアはインストールなどが面倒かもしれませんが、仮想化すると設置は単に仮想イメージファイルのコピーで済んでしまうので慣れてない人には有効かもしれません。実際の開発現場でもPCに慣れてないテスターのためにテスト環境を仮想化してコピーして配布するというのは珍しくありません。仮想化ソフトの設置が前提ではありますが、意外と面白い使い方が見つかるかも。
ちなみに仮想化MacOSはライセンスの関係でできません、念のため。
posted by ささき at 23:32 | TrackBack(0) | __→ スマートフォンとオーディオ | このブログの読者になる | 更新情報をチェックする

この記事へのトラックバック