趣味120%で構成されています。

あほナビあほナビ関係はこちら。 | 古いアプリ公開場はここらへん
<< 連日の呑みで | main | DirectX11お勉強 >>

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

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周期分と、非常に短くなるため、ホワイトノイズというよりギターに近い音色かも


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

追記2011/4/14 6:23
アップデート。Ver2.1
・レイアウト弄って対応Androidを2.1→1.5以上
・終了時にスレッドが審でなくて高負荷だったのを解消
・アプリ名を変更 transA-test
- | comments (0) | trackbacks (0)

コメント

コメントを書く