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

# SDL_AudioCVT

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

## フィールド

int | needed | 変換できるとき1が設定される
SDL_AudioFormat | src_format | 変換前の形式
SDL_AudioFormat | dst_format | 変換後の形式
double | rate_incr | 変換後の長さの増加率
Uint8* | buf | 変換で使う音声データのバッファ (詳細を参照すること)
int | len | 変換前の音声バッファの長さ (詳細を参照すること)
int | len_cvt | 変換後の音声バッファの長さ
int | len_mult | bufの長さはlen*len_mult以上でなければならない (詳細を参照すること)
double | len_radio | 与えられた変換前のlenに対して, 最終的な変換後の長さはlen*len_ratioとなる (詳細を参照すること)
SDL_AudioFilter[10] | filters | フィルタリスト (内部で使用)
int | filter_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.dataに読み込む
    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