目次 - 4.関数 - 4.1一般 - Mix_OpenAudio

# Mix_OpenAudio

`int Mix_OpenAudio(int frequency, Uint16 format, int channels, int chunksize)`

frequency
  出力サンプリング周波数 (Hz). ゲームではMIX_DEFAULT_FREQUENCY(22050)がよい値である
format
  出力サンプル形式
channels
  出力チャネル数. 2ならステレオ, 1ならモノラル. これはミキシングのチャネルとは無関係である
chunksize
  一度に出力するバイト数

ミキサーAPIを初期化する. このライブラリの他の関数を使う前に呼ぶ必要がある. この関数を呼ぶ前に, SDLはSDL_INIT_AUDIOで初期化されている必要がある. frequencyは44100なら44.1KHzで, これはCDの音質である. 多くのゲームは22050を使っている. 44100は古いコンピュータにはCPUの負荷が大きすぎるためである. chunksizeは各ミキシングのサンプルのサイズである. この値を小さくすればするほど, フックが呼ばれる回数が多くなる. この値が小さすぎると, システムが遅くなり, 音が途切れるようになる. 大きくすると効果音が遅れるようになる. 対象のコンピュータにとってよい中間の値が必要だろう. もし, 音楽を再生するだけならば, 4096かそれ以上がよいだろう. デフォルトではMIX_CHANNELS(8)のミキシングチャネルが確保される. この関数は何度でも呼べるが, 同じ回数だけMix_CloseAudioを呼んでデバイスを閉じる必要がある. 完全に閉じるまではこの関数を呼んでも出力形式は変わらない. よって, 別の形式で開く前には完全に閉じなければならないだろう.

formatはSDLが対応するオーディオに基づいている. SDL_audio.hを参照すること. 値のリストは次の通りである:

AUDIO_U8
  8bit符号なし
AUDIO_S8
  8bit符号あり
AUDIO_U16LSB
  16bit符号なし, リトルエンディアン
AUDIO_S16LSB
  16bit符号あり, リトルエンディアン
AUDIO_U16MSB
  16bit符号なし, ビッグエンディアン
AUDIO_S16MSB
  16bit符号あり, ビッグエンディアン
AUDIO_U16
  AUDIO_U16LSBと同じ (後方互換性のために存在する)
AUDIO_S16
  AUDIO_S16LSBと同じ (後方互換性のために存在する)
AUDIO_U16SYS
  16bit符号なし, システムのバイト順
AUDIO_S16SYS
  16bit符号あり, システムのバイト順

MIX_DEFAULT_FORMATはAUDIO_S16SYSと同じである.

戻り値: 成功のとき0, 失敗のとき-1

## サンプルコード

`

    // オーディオ対応でSDLを開始する
    if(SDL_Init(SDL_INIT_AUDIO)==-1) {
        printf("SDL_Init: %s\n", SDL_GetError());
        exit(1);
    }
    // 44.1KHz, 16bit符号あり, システムのバイト順, ステレオ, 1024byteチャンクで開く
    if(Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024)==-1) {
        printf("Mix_OpenAudio: %s\n", Mix_GetError());
        exit(2);
    }

`

## 参照

Mix_CloseAudio, Mix_QuerySpec, Mix_AllocateChannels

## 原文へのリンク

4.1.4 Mix_OpenAudio