目次 - API(機能別) - 再生と録音 - SDL_MixAudioFormat

# SDL_MixAudioFormat

指定の形式でオーディオをミキシングする

## 構文

`void SDL_MixAudioFormat(Uint8* dst, const Uint8* src, SDL_AudioFormat format, Uint32 len, int volume)`

## 引数

dst | ミキシングされた音声の出力先
src | ミキシングする音声バッファ
format | SDL_AudioFormat
len | 音声バッファのバイト長
volume | 0〜128の範囲, SDL_MIX_MAXVOLUMEのとき最大ボリューム

## サンプルコード

``

    void myAudioCallback(void *udata, Uint8 *stream, int len)
    {
        extern SDL_AudioFormat deviceFormat;
        extern const Uint8 *mixData;
        SDL_memset(stream, 0, len);  // 無音にする
        // 無音に対してあなたの音声データを50%のボリュームでミキシングする
        SDL_MixAudioFormat(stream, mixData, deviceFormat, len, SDL_MIX_MAXVOLUME / 2);
    }

## 詳細

受け取った形式formatのバイト長lenの音声バッファsrcを, ボリュームの調整とオーバーフローのクリップを行い, ミキシングしてdstに書き込む. dstバッファも, バイト長lenで形式formatの必要がある.

この関数は簡便さのために提供されている -- 自分で音声データをミキシングすることもできる.

この関数を3つ以上のサンプルデータのストリームをミキシングするために使ってはならない. この関数を繰り返し使うと, 出力はクリップによって劣化する. 入力より広い範囲に増幅することはないためである(これを行うのは非効率である). この場合, 代わりにSDL_mixerの関数, OpenAL, または自分で書いたミキサーを使うべきである.

この関数は, コールバック関数の中で出力ストリームに音声データを書くために必要だとよく誤解される. それも可能だが, SDL_MixAudioFormat()は1つの音声ストリームのボリュームを調整してミキシングする場合のみ必要である.

## SDL Wikiへのリンク

SDL_MixAudioFormat - SDL Wiki