OpenAL

  • まずは
 前回、Bulletという物理エンジンのことを載せたので、
 次の更新は同じ物理エンジンのPhysXにしようと思っていたのですが
 ほかの事をしている余裕がないので、
 自作のライブラリのサウンド部分に使う予定のOpenALにしました。

  • OpenALについて
 簡単に説明するとOpenALはオーディオ関連のOpenGLです。
 より詳しい説明はウィキペディアを見ていただいたほうがわかりやすいと思うのでリンクを載せておきます。
 http://ja.wikipedia.org/wiki/OpenAL

  • ソースコード
 #include <iostream>
 #include <AL/alut.h>
 #include <conio.h>

 #pragma comment( lib, "OpenAL32.lib" )
 #pragma comment( lib, "alut.lib" )

 void main( int argc, char* argv[] )
 {
   alutInit( &argc, argv );
   ALuint buffer, source;
   //buffer = alutCreateBufferHelloWorld(); //HelloWorldとしゃべる
   buffer = alutCreateBufferFromFile("file1.wav");
   alGenSources( 1, &source );
   alSourcei( source, AL_BUFFER, buffer );
   alSourcei( source, AL_LOOPING, AL_TRUE );
   alSourcePlay( source );
   alutSleep( 1 );
   getch();
   alutExit();
 }

  • 解説
最初に上記のソースで行っていることは、
音声ファイルを読み込んでループ再生しています。

alutが読み込みのサポートをしてるのは、wavファイル、auファイル、rawファイル(画像ファイルとは別物)です。
※alutはOpenAL版GLUTです。

最初にalutInitでalutの初期化を行います。(GLUTと似ていますね)

次に、alutの関数を使い音声ファイルを読み込むのですが、
ファイルを用意できていない方は、alutCreateBufferHelloWorld()を使いましょう。
では、alutCreateBuffer***を使ってバッファを作り、
音源管理用のIDを作ります。alGenSourcesの部分です。
alSourceiを使って作ったバッファをIDと関連付けをしたら、再生方法などの設定をします。
今回は、入門みたいなものなので、ループ再生の設定しか行いません。
ループの設定をalSourcei( source, AL_LOOPING, AL_TRUE)で行っています。

注意してほしいのは、
alutSleepを行わないとループ再生がちゃんと行われませんので注意してください。

あと、
getchはループ再生をしているかの確認のためにコマンドラインが終了しないようにしています。

最後に、
alutExitで後処理をおこなっています。
最終更新:2008年07月26日 20:59
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。