int SDL_BuildAudioCVT(SDL_AudioCVT* cvt, SDL_AudioFormat src_format, Uint8 src_channels, int src_rate, SDL_AudioFormat dst_format, Uint8 dst_channels, int dst_rate)
cvt | 音声変換の情報を代入するSDL_AudioCVT |
src_format | 変換前の音声形式. SDL_AudioFormatを参照すること |
src_channels | 変換前のチャネル数 |
src_rate | 変換前の周波数(1秒あたりのサンプルフレーム数) |
dst_format | 変換後の音声形式. SDL_AudioFormatを参照すること |
dst_channels | 変換後のチャネル数 |
dst_rate | 変換後の周波数(1秒あたりのサンプルフレーム数) |
// 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バイトの変換されたデータが書き込まれている
音声データを変換する前に, SDL_AudioCVTの変換前と変換後を初期化する必要がある.
この関数はSDL_AudioCVTの全フィールドを0にする. よって, 音声データをバッファに書き込む前に, この関数を呼ぶ必要がある.
一度この関数が成功を戻せば(そして変換の必要があれば), SDL_AudioCVTの残りのフィールドに値を書き込める. この段階で確保すべきバッファの長さがわかるためである. そして, SDL_ConvertAudio()を呼べば変換は完了する.