OpenAL

記事作成日:2010-08-20

クロスプラットフォームのオーディオライブラリ。ライセンスはLGPLとのこと。

http://www.delicious.com/nishimotz/openal

DirectSound 3DがVistaで廃止されたという記事によれば、 OpenAL は3Dサウンドを実現するための事実上の後継技術の一つである。

オーディオ入力APIとしては、 portaudio は「入力バッファがたまったらコールバックで読んでもらう」方式なのに対して、 OpenAL は「自分でメインループを回して、入力バッファがたまったかどうか定期的に見に行く」方式らしい。 仕様

  • portaudio の v19 はブロッキングIOに対応している

OpenAL は Windows, Linux, MacOS X などに加えて iPhone でも使えるようだ:記事

ALUTというユーティリティライブラリもあるが、GLUTのようなクロスプラットフォームのアプリケーションフレームワークではなく、 バッファの初期化やスリープなどいくつかの機能にとどまっている。 実際にはアプリケーションフレームワークがメインループをにぎるケースが多いだろうから、それでいいのだろう。

Ubuntu 9.04

パッケージがある。

  • libopenal-dev
  • libalut-dev

下記は公開されている記事を参考にしたもの。

# Makefile
target:
        g++ main.cpp -lopenal -lalut 
#include<AL/alut.h>
int main(int argc, char** argv){
  alutInit(&argc,argv);
  ALuint buffer, source;
  alGenBuffers( 1, &buffer );
  alGenSources( 1, &source );
  buffer = alutCreateBufferHelloWorld ();
  alSourcei( source, AL_BUFFER, buffer );
  alutSleep (1);
  alSourcePlay( source );
  alutSleep (1);
  return 0;
}

make が通ることを確認したが、 VMware ゲスト環境であるせいか、音が途切れる。

Windows (cygwin gcc-3 による MinGW 環境)

前述の記事では MinGW コンパイル環境を使っていたようだが cygwin の gcc-3 で MinGW クロスコンパイルができることを これ を読んで知ったので、試してみた。

ここからOpenAL11CoreSDK.zipを落として展開、手順に従って(いったん)インストールする。

"C:\Program Files\OpenAL 1.1 SDK" の下にある include と libs を取ってくる。

ここから freealut-1.1.0-binを落として適当な場所に展開する。lib と include の中身を使う。

下記のような状態にしておく。

$ ls
Makefile  alut.dll  include  libs  main.cpp

$ ls include/AL/
EFX-Util.h  al.h  alc.h  alut.h  efx-creative.h  efx.h  xram.h

$ ls libs/Win32/
EFX-Util_MT  EFX-Util_MTDLL  OpenAL32.lib

Makefile はこんなかんじ。

# Makefile
target-cygwin-mingw-win32:
	gcc-3 -mno-cygwin main.cpp -lOpenAL32 -lalut -Iinclude -Llibs/Win32

これで make すると a.exe ができる。

実行すると cygwin の bash からでもコマンドプロンプトからでも音が出ることを確認した。

Ubuntu : python-openal

執筆:2010-09-02

パッケージがある http://packages.ubuntu.com/ja/jaunty/python-openal

Mac で OpenAL

since 2011-10-09

Mac は Core Audio に加えて OpenAL が使用できる。

http://www20.atwiki.jp/yosilove/pages/16.html

SDK に Services/OpenALExample というサンプルがあると CoreAudioOverview に書かれている。

状態モデル

yunoの雑記帳 - OpenALストリーミング再生 http://bit.ly/nDhMJ5

Source

http://www.memorize-being.net/releases/oal11spec-ja/spec-4.html

alGetSourcei(source, AL_SOURCE_STATE, &state) を利用して状態を取得できる。

  • AL_INITIAL
  • AL_PLAYING
  • AL_PAUSED
  • AL_STOPPED

状態遷移コマンド

  • void alSourcePlay (ALuint sName);
  • void alSourcePause (ALuint sName);
  • void alSourceStop (ALuint sName);
  • void alSourceRewind (ALuint sName);

Buffer

openal.txt · 最終更新: 2011/10/10 23:34 by Takuya Nishimoto
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0