Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize)
frequency | 出力サンプリング周波数 (Hz). ゲームではMIX_DEFAULT_FREQUENCY(22050)がよい値である |
format | 出力サンプル形式 |
channels | 出力チャネル数. 2ならステレオ, 1ならモノラル. これはミキシングのチャネルとは無関係である |
chunksize | 一度に出力するバイト数 |
オーディオデバイスは音声を出力する. そのため, アプリケーションはこれをオープンする必要がある.
この関数はSDLオーディオシステムが初期化されているかチェックする. もし初期化されていなければ, あなたの代わりにSDL_Init(SDL_INIT_AUDIO)
を呼び出して初期化する.
より詳細にあなたのプログラムを制御できるため, この関数を呼ぶ前に初期化することもできる. (そしてそれを推奨する!)
この関数はアプリケーションの要求を全てカバーできるだろう.
しかし, さらに柔軟さが必要な場合のため, この関数の強化版のMix_OpenAudioDevice()が存在する.
この関数は以下の呼び出しと同じである:
Mix_OpenAudioDevice(frequency, format, nchannels, chunksize, NULL, SDL_AUDIO_ALLOW_FREQUENCY_CHANGE | SDL_AUDIO_ALLOW_CHANNELS_CHANGE);
オーディオデバイスの設定に特にこだわりがなく, データが特定の形式でなければ, ここで設定するのは妥当とされる値のデフォルトで十分である. SDL_mixerはあなたが与えたオーディオデータを必要なときに自動的に変換する.
しかし, あなたがオーディオデータを自由に決められて, あらかじめその形式がわかっているならば, 背後でSDL_mixweは何も変換せず直接ハードウェアにデータを渡せるように一致する形式でオーディオデバイスをオープンしてCPUの負荷を減らすことができる. 一部の環境では, ハードウェアが特定の形式にのみ対応しており, 全てを一致させるために注意する必要があるが, 多くの場合は自分のデータの方が制御しやすいため, 必要な形式でデバイスをオープンする方がよい.
形式の特定には別の注意点もある. ミキシングバッファを(Mix_SetPostMix, エフェクトの登録, Mix_HookMusicで)直接操作する場合, コードが特定の形式を想定している場合があり, その部分にも形式を指定する必要がある.
オーディオデバイスの周波数はHzで指定する. 現在の環境では48000が妥当とされるデフォルト値である.
オーディオデバイスのサンプル形式はSDLのAUDIO_*から選択する. 恐らくAUDIO_S16SYS(16ビットオーディオ)が安全なデフォルトである. 現在のシステムではAUDIO_F32SYS(32ビット浮動小数点オーディオ)の方が好ましいかもしれない.
チャネル数は一般的にはモノラルの1またはステレオの2だが, 思い切ってサラウンドの4(クアッド), 6(5.1), 7(6.1), 8(7.1)を試してもよいだろう.
オーディオデバイスのチャンクサイズは一度にデバイスに渡されるサンプルフレーム数(モノラルならば1フレームあたり1サンプル, ステレオならば1フレームあたり2サンプルなど)である. 少ないほど遅れが少なくなるが, 少なすぎると取りこぼしのリスクが増大する. 通常は2048が妥当とされるデフォルトだが, アプリケーションによっては1024から4096の間を試すとよいだろう.
オーディオデバイスは一度に1つしかオープンできない. 設定を変更したい場合はデバイスを閉じて再オープンする必要があり, 再生中に途切れなく行うことはできない.
この関数ではシステム上の特定のオーディオデバイスを指定することはできず, 常にあなたの代わりにデフォルト(ほとんどの場合は最も適したもの)を選択する. 特定のデバイスを使う必要がある場合は, この関数の代わりにMix_OpenAudioDevice()を使うことができる.
この関数が成功を戻したならば, 音を出力する準備が整っており, オーディオデータを読み込み再生することができる.
アプリケーションはMix_QuerySpec()でデバイスの最終的な設定を行うことができる.
プログラムが終了してオーディオデバイスを使い終えたならば, アプリケーションはMix_CloseAudio()で破棄する必要がある.