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で後処理をおこなっています。

|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|

メンバー一覧




+  ハヤブサの個人作業

+  アキラの個人作業

+  タツの聖域

+  鉄獄

+  ミルヴァイスの個人作業




更新履歴





リンク




前月 2012年5月 翌月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31