2010/02/05

SIO2でサウンドを鳴らす(2) このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

前回は、iPhone/iPad 向けゲームエンジンである SIO2 で音を出す方法を調べました。

今回は、Tutorial06 をベースに作っているオレオレゲームに、実際に BGM を追加するところまでやってみます。



動いている様子

いまのところこんな感じで動いています。




Blender でサウンドファイルを指定

前回調べた通り、適当なマテリアルの3番目のテクスチャに ogg ファイルを指定して、適当なオブジェクトにそのマテリアルを設定します。これで sio2_exporter.py を実行して .sio2 ファイルにエクスポートします。



ソースコードの変更

tutorial09 のサウンド関連っぽい行をそのままコピペしてくれば良いです。
初期化したあと、sio2 ファイルに含まれるサウンドを取り出したり登録したりする便利関数を呼びます。


//// Add to createFramebuffer (file EAGLView.mm)
sio2InitAL();


//// Add to templateLoading (file template.mm)
// Bind all unique sound buffer (.ogg) currently in
// the resource manager with to its appropriate material.
sio2ResourceBindAllSoundBuffers( sio2->_SIO2resource );

// Also generate the sound source buffer ID.
sio2ResourceGenId( sio2->_SIO2resource );

// Bind all the sound source to their respective
// sound buffer.
sio2ResourceBindAllSounds( sio2->_SIO2resource );

// Set the volume for the ambient (music) sound source.
sio2->_SIO2window->volume = 0.65f;

// Set the volume for the FX sound source.
sio2->_SIO2window->fx_volume = 0.85f;

// Affect the ambient volume to all ambient sound.
sio2ResourceSetAmbientVolume( sio2->_SIO2resource,
sio2->_SIO2window );

// Affect FX sound volume to all the FX sound.
sio2ResourceSetFxVolume( sio2->_SIO2resource,
sio2->_SIO2window );




Xcode のデバッガについて

当初、(sio2InitAL の呼び忘れで)クラッシュしていたのでデバッガで調べていましたが、変数の値とかいろいろ調べる UI が良かったです。マウスでポイントしていくだけで構造を辿れるのが便利。なんでも GUI でやろうとしないで、中断状態のまま CUI の gdb に移れるのもポイント高いと思いました。

2010/02/03

SIO2でサウンドを鳴らす このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

SIO2 を使った iPhone/iPad アプリでサウンドを再生する方法を調べました。
これといったドキュメントはないみたいですが、tutorial09, SIO2 source, SIO2 exporter を読んだ感じでは、以下のようになっているようです。


  • 内部で OpenAL を使っている。

  • Ogg 形式のサウンドファイルが再生できる。

  • Blender にて Material と ogg ファイルを関連付ける。

  • 具体的には、Material の 3 番目の texture に ogg ファイルを指定する。

  • (ちなみに、1 番目は Diffuse, 2 番目は Shadowmap として使われるらしい。)

  • sio2_exporter.py が .sio2 ファイルに ogg ファイルを入れてくれる。

  • sio2ResourceBindAllSounds() を呼ぶと、Object に ogg ファイルが関連付けられる。

  • 1 つの sound につき 1 つの SIO2sound インスタンス。

  • SIO2sound の属性として、AUTOPLAY, LOOP, AMBIENT, FX, STREAM がある。

  • AUTOPLAY は起動時に自動的に再生。Blender texture の MipMap 属性でセットされる。

  • LOOP はループ再生。Blender texture の Repeat 属性でセットされる。

  • FX はドップラー効果とか距離に応じた減衰の効果。Blender texture の Interpol 属性でセットされる。AMBIENT はそういう効果なし。

  • STREAM はストリーム再生。ネットとかからダウンロードしつつ再生できる。Blender texture の UseAlpha 属性でセットされる。

  • AUTOPLAY, LOOP, AMBIENT にすると BGM になる。

  • FX にして sio2SoundPlay を呼ぶと、単発のサウンドが再生される。



まだ自分のプロジェクトでやってみたわけじゃないですが、これで音が出せそうな気がします。



exporter と独自パラメータ

SIO2sound の属性のような独自のパラメータは Blender UI に項目がないので、AUTOPLAY: MipMap, LOOP: Repeat のようになんとかして対応付ける必要があります。自分も以前そういうことをやったことがあって、Blender から Collada export したファイルの Spe.R が photon の最大検索半径、Spe.G が云々... という感じで苦労しながら無理やり対応付けていました。SIO2 でも同じことをしているのを見ると共感を覚えます。LOOP: Repeat なんかは意味が通じるのでとても良いマッピングだと思います:)