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

SDL_AudioCVT

音声データ変換の情報の構造体

フィールド

intneeded変換できるとき1が設定される
SDL_AudioFormatsrc_format変換前の形式
SDL_AudioFormatdst_format変換後の形式
doublerate_incr変換後の長さの増加率
Uint8*buf変換で使う音声データのバッファ (詳細を参照すること)
intlen変換前の音声バッファの長さ (詳細を参照すること)
intlen_cvt変換後の音声バッファの長さ
intlen_multbufの長さはlen*len_mult以上でなければならない (詳細を参照すること)
doublelen_ratio与えられた変換前のlenに対して, 最終的な変換後の長さはlen*len_ratioとなる (詳細を参照すること)
SDL_AudioFilter[10]filtersフィルタリスト (内部で使用)
intfilter_index現在の変換関数 (内部で使用)

サンプルコード

// 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_BuildAudioCVT()SDL_AudioCVTを初期化し, 実際の変換はSDL_ConvertAudio()が行う. アプリケーションはこれら2つの関数の呼び出しの間で適切な長さのバッファを設定する必要がある.

音声データを示すbufは変換で使われる. それは変換前と変換後の両方であり, 変換前の音声データは変換後の音声データに上書きされる. 変換されたデータは元のデータより長くなることもある(例えば8bitを16bitに変換した場合). また, bufは最終的に変換された長さに関わらず, 変換のどのような段階でも十分な長さである必要がある. 下のlen_multに詳細がある.

lenは変換前の音声データのバイト数である.

len_multは, データ変換時のバッファの長さを決めるために, 音声データの長さに掛ける値である. 音声バッファは変換前や変換後より長いバッファを必要とすることがある. bufはlen*len_multの長さを確保する必要がある.

len_ratioは変換後と変換前の長さの比である. 音声データを変換した後, バッファがどれだけ必要か知る必要がある. len*len_ratioが変換後の音声データのバイト数である. これはlen_multとよく似ている. しかし, 変換後の音声データが変換前より短い場合, len_multは1である. 一方, len_ratioは0.0と1.0の間の値となる.

関連項目(関数)

SDL_BuildAudioCVT
SDL_ConvertAudio

SDL Wikiへのリンク

SDL_AudioCVT - SDL Wiki