Androidメモ。サウンド系2日目

2011/04/13 水 19:47
六本木


Androidなんて知らねぇよwwwという状態はどうかと思ったので、

震災最中に入手したIS05を最近触っています。

そんな行き当たりばったりなので、なんとなく成果忘記録メモ

?

本日のお題

高級ライブラリで音楽を鳴らしてもツマランなので、デバイスへ直接送る波形データをリアルタイムで送るテスト。

?

テスト条件として、NDKを使わずあくまでJavaの話。

ネイティブだと出来て当たり前な処理なのや、Androidというプラットフォームが推奨する環境であるワケだし。

?

あとワンショット系もリアルタイムでする意味がないのでストリームで音をいじりたい。

延長したらシーケンサだけども、そういうロジカルな話は今までやってたのでどうでもいい。

あくまでリアルタイム性が必要とするテストということで。。

?

で、サウンドエフェクト系となるとお約束となる次の3点。

「リングバッファ」「再生ポインタ」「再生済みポインタ」等の機構があるかを調べる。

リングバッファは自前実装でよいとして、プレイポインタ系はハードウェアというかAPIで用意されていないと話にならない。・・・が、(どこかにあるだろうけど)見当たらない。。

?

   あるぇ・・・。

 ?

仕方がないので、リングバッファを出したい音の1周期分のみ確保し、再生中はリングバッファ1周前のデータを減衰させることにする。つまり再生周波を1周期ごとに減衰。

?

?

とりあえず、リニアデータを直接触るのは android.media.AudioTrack とからしい。

リングバッファを使う場合のプレイヤーは、決まったバッファを永久ループをするように再生してもらわないと困るので、AudioTrack.MODE_STREAM を指定してやればいいのかな?すべて手探りww

?

適当にデータを突っ込んで再生。とりあえず矩形波が好きですが、処理負荷を想定としてサイン波を逐次計算。

おや、、意外と普通に鳴った。。

・・・が、プレイポインタを取ってないので、環境により減衰速度が無茶苦茶な気はする。

?

成果物として野良アプリとして公開

?

・Android2.1?

・タップのみ操作

・押している間のみ発音

・画面左端になるほど減衰力多く(=すぐ音が消える)

・画面右端になるほど減衰力少く(=音が長く鳴る)

・画面上部は低音/下部にむかって高音。スライドもおk

・画面回転も多分対応

・下の選択で波形パターン変更

?

?

PS

とりあえず、余力はありそうなので(IS05/CPU1GHz)普通にシーケンサ作れるかもね。

実際マーケにはあるけど。

?

―――――――――――――――――――――――――――――――――――――――――――

追記2011/4/13 19:10

P.S.2

本文と間違ったアプリを晒していたので、ついでに音色5パターン設定を追加し、Androidのバージョンを2.2→2.1に変更。1.6とかレイアウタの使い方分からなかったので放置!

音色パターンは、左から矩形・サイン・三角・ノコギリ・ノイズのお約束シリーズ。

ノイズは他のと同様に短い周波1周期分と、非常に短くなるため、ホワイトノイズというよりギターに近い音色かも



[7] << [9] >>
comments (0)
trackbacks (0)


<< 連日の呑みで
DirectX11お勉強 >>
[0] [top]


[Serene Bach 2.21R]