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

SDL_ConvertAudio

音声データを別の形式に変換する

構文

int SDL_ConvertAudio(SDL_AudioCVT* cvt)

引数

cvt事前に設定したSDL_AudioCVT (詳細を参照すること)

戻り値

変換が正常に完了したとき0, 失敗のとき負の数のエラーコードを戻す. SDL_GetError()を呼んで詳細を知ることができる.

サンプルコード

// 1024 ステレオ 48000Hzのサンプルフレームバッファを, 32bit浮動小数点から16bit整数に変換する
SDL_AudioCVT cvt;
SDL_BuildAudioCVT(&cvt, AUDIO_F32, 2, 48000, AUDIO_S16, 2, 48000);
SDL_assert(cvt.needed); // 明らかにこれは必要である
cvt.len = 1024 * 2 * 4;  // 1024 ステレオ 32bit浮動小数点のサンプルフレームバッファ
cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult);
// ここで32bit浮動小数点のデータをcvt.bufに読み込む
SDL_ConvertAudio(&cvt);
// cvt.bufにはcvt.len_cvtバイトの変換されたデータが書き込まれている

詳細

アプリケーションはcvt構造体をSDL_BuildAudioCVT()を使って初期化し, 音声バッファを確保し, 変換前の音声データを書き込む. この関数はバッファを変換し, 要求の形式で置き換える.

データはいくつかの段階を経て変換され, その途中で長さが一時的に増加することもある. 例えば低い周波数に再サンプリングする場合, SDLは一時的に16bitデータを32bitに拡張し, その後, 増大したデータを収縮させる. バッファは変換前と変換後の両用で, 変換すると書き換えられ, アプリケーションは変換の過程で最も長いデータを書き込めるだけの領域を確保する必要がある. SDL_BuildAudioCVT()から戻った後, アプリケーションはcvt構造体のlenフィールドに変換前データのバイト長を書き込み, bufフィールドに len * len_mult バイトを確保する必要がある.

変換前データはSDL_ConvertAudio()を呼ぶ前にバッファにコピーする必要がある. 成功すると, このバッファには変換後のデータが書き込まれている. cvt構造体のlen_cvtフィールドが変換後のデータのバイト長である. len_cvtの後の領域に書き込まれた値は未定義である.

関連項目(関数)

SDL_BuildAudioCVT

SDL Wikiへのリンク

SDL_ConvertAudio - SDL Wiki