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

SDL_MixAudioFormat

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

構文

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

引数

dstミキシングされた音声の出力先
srcミキシングする音声バッファ
formatSDL_AudioFormat
len音声バッファのバイト長
volume0〜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