2010年12月13日

AndroidでiPhoneに匹敵する楽器アプリの作成が困難な理由

Androidでも楽器アプリが出ているけど、試してみるとどれも今ひとつ反応が鈍い、というか画面をタップしてから実際に音が出るまでにタイムラグがあるのがはっきりと感じられる。

iPod Touchだとほとんどタイムラグは感じられないので、この差は何なんだろうと気になった。Androidの仕様上の制限なのか、アプリに原因があるのか。。。

自分でも音楽関係のアプリはいつか作ってみたいリストに入っているので、Androidで任意の音を自由なタイミングで鳴らす方法を調べて見た。Google検索で一応大雑把な所は分かったので、とりあえずメモしておこう。

以下、自分でコーディングして試した結果ではないので「~らしい」「~みたい」ばかりになって恐縮ですが。

Androidで音を鳴らす方法


下の4つの方法があるとの事。それぞれ向き不向きがあるみたいだが、「リアルタイムで任意の音を鳴らす」という用途にはどれもいま一つらしい。(少なくともタイムラグを無くすのは困難みたい。)

1. MediaPlayer

予め作成された音楽を鳴らすのに向いている。
MIDIファイルの演奏も可能。ただしメモリ上に動的に生成されたMIDIデータを演奏させる事は出来ない。一旦一時ファイルに保存する必要がある。

2. JetPlayer

「JetCreator」というツールを使って予めMIDIデータから「JETファイル」という形式に変換しておくと、そのファイルの任意の部分を演奏させる事が出来る。ゲームの効果音などを出すのに向いている様だが、楽器アプリとして自由な演奏をするのにどこまで向いているかは、試して見ないと何とも言えない。
hidecheckの日記 - AndroidでmidiとかJetCreatorとかで鍵盤アプリとか作成
3. SoundPool

MIDIではなくOGGやWAVなどのサウンドファイルを使った効果音を再生出来る。
しずくくんのAndroidでゲームプログラミングしてみたいなblog
むずかしいことはわかりません。

(2011/05/11 追加)
SoundPool使用上の注意点 - Hacking My Way ~ itogのhack日記
4. AudioTrack

PCMデータを直に操作して音を鳴らす場合に使う。(実は良く分からない。^^;)下のソースコードとかを見ると面白そうではあるけど、楽器の音を作るのはかなり大変かも。
にュウさいと - AudioTrackを使う
Androidアプリ開発 / 夢見る少女の開発メモ - 音を作ってみる

(2011/05/11 追加)
たいてい自宅で迷想中 AudioTrackをAudioQueueのように使う

さらに英語でも検索して見た。


英語だと結構核心に踏み込んだ(と思われる)情報があった。
Umito - The state of MIDI support on Android

Stack Overflow - Dynamic Midi generation and playback on Android: Possible?

Google Code - Expose Midi Streaming capability of Sonivox Synthesizer.

Pragmatic Bookshelf - Java SE5 javax.sound (MIDI) classes removed from Android libraries?
やっぱりMIDI音源に対して直接リアルタイムでコマンドを送信する為のAPIが用意されていないというのが致命的なようだ。


現時点での結論(Android 2.2以下の場合)


で結局、今の所はこちらに書いてある通りAndroidの仕様上の理由からiPhoneに匹敵するようなレスポンスの良い楽器アプリを作るのはかなり厳しいようだ。
【combuのDTM & ミキシング 】 脱初心者を目指す音楽制作 - DTMやるならAndroidを買ってはいけない





2/21/2011 追記:
Android2.3, 2.4とか3.0が出てきたので、現在は状況が変わっているかも知れない。
変化がめまぐるしいので最新情報を追いかけるのも大変だ。。。



10/21/2011 追記:
Android 4.0でもまだ改善されていないみたいだ。
Android 4.0で反応の良い楽器アプリは可能になるのか



11/20/2012 追記:
4.2になって少し改善されたみたいだ。

Android 4.2で今度こそ反応の良い楽器アプリは可能になるのか!?


10/25/2013 追記:
最近はこんな感じらしい。
このレイテンシー、Nexus10はDTM用途に使えるかも!? : 藤本健の“DTMステーション”