2009年01月30日

OpenALで音を出すのも一苦労。

OpenALをインストールした。
blenderのビルドに必要だったのだがその後freealutのビルドでこける。
freealutが悪いのかOpenALが悪いのか
それを調べる意味でも簡単なOpenALのテストプログラムを作った。
ビルドするときのscript build.sh

#!/bin/sh
gcc -Wall -pipe -march=pentium3 test.c -o test \
-I/usr/local/include -I/usr/local/include/AL\
-L/usr/local/lib -Wl,-rpath,/usr/local/lib -lopenal -pthread

includeパスがWinの場合はOpenALかもしれない。

本体
test.c

//openal test
#include <AL/al.h>
#include <AL/alc.h>
#include <math.h>
#include <stdio.h>
int main()
{
ALCdevice *device;
ALCcontext *context;
ALshort data[22050];
ALuint buffer, source;
int i;
device = alcOpenDevice(NULL);
context = alcCreateContext(device, NULL);
alcMakeContextCurrent(context);
alGenBuffers(1, &buffer);
for (i = 0; i < 22050; ++i) {
data[i] = sin(i * 3.14159 * 2 * 440 / 22050) * 32767;
}
alBufferData(buffer, AL_FORMAT_MONO16, data, sizeof(data), 22050);
alGenSources(1, &source);
alSourcei(source, AL_BUFFER, buffer);
alSourcePlay(source);
sleep(1);
alSourceStop(source);
alDeleteSources(1, &source);
alDeleteBuffers(1, &buffer);
alcMakeContextCurrent(NULL);
alcDestroyContext(context);
alcCloseDevice(device);
return 0;
}


内容はまだ勉強不足で解説できないけれど
デバイス開く→コンテキスト作成→バッファにデータ作成→ソース指定→実行指定
→1秒待機→停止指定→ソース削除→コンテキスト削除→デバイス閉じる。
の内容

-pthreadでビルドしているのでsleepが効くのだと解釈。

で最初はやっぱりビルドできない。
そこでいろいろ探索したところ

configure line 22544:

< NASM_FORMAT="-f elf"
> NASM_FORMAT="-f elf32"


という言及を見つけたのでためしたところ
ビルドは成功
./test
とすると
「プー」
となりfreealutのビルドもうまくいった。


ラベル:OpenAL
posted by Xo_ox at 15:53| Comment(0) | 借り物ビルド | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。