typedef struct{
int needed;
Uint16 src_format;
Uint16 dest_format;
double rate_incr;
Uint8 *buf;
int len;
int len_cvt;
int len_mult;
double len_ratio;
void (*filters[10])(struct SDL_AudioCVT *cvt, Uint16 format);
int filter_index;
} SDL_AudioCVT;| needed | 変換が可能の場合は1がセットされます。 |
| src_format | 変換元のオーディオフォーマット |
| dest_format | 変換先のオーディオフォーマット |
| rate_incr | サンプルレートの増加率 |
| buf | オーディオバッファ |
| len | 変換元のオーディオバッファの大きさ(バイト単位) |
| len_cvt | 変換先のオーディオバッファの大きさ(バイト単位、自動計算) |
| len_mult | bufはlen*len_multバイトのサイズになる(自動計算) |
| len_ratio | 最終的なオーディオデータのサイズはlen*len_ratio |
| filters[10](..) | 変換に必要な関数へのポインタの配列 |
| filter_index | 現在の変換関数のインデックス |
SDL_AudioCVT構造体は、異なるフォーマット間で オーディオデータを変換するために使用します。 SDL_AudioCVT構造体は SDL_BuildAudioCVT 関数で作成され、実際の変換はSDL_ConvertAudio関数で行われます。
SDL_AudioCVT構造体の多くのフィールドは内部的に使用されるため、ここでは詳細には触れません。
変換に用いられるオーディオデータのポインタです。 変換元と変換先を兼ねています。つまり、変換されたオーディオデータは 元のデータを上書きします。 変換されたデータは元のデータよりも大きくなる可能性がありますので (例えば、8ビットサンプルから16ビットに変換したときなど)、 buf の大きさは十分にとっておく必要があります。 以下の説明も参照してください。
変換元のオーディオデータのバイト単位の大きさです。
すでに説明した通り、オーディオバッファは変換先のデータを格納できるだけの 大きさが必要であり、その大きさは元のデータよりも大きくなる可能性があります。 bufは、len*len_multだけの大きさが必要です。
オーディオデータの変換が終わった後、変換先のオーディオデータの大きさを 知る必要があります。len*len_ratio は、変換されたオーディオデータのバイト単位の大きさを表します。 len_multに似ていますが、 もし変換元のデータよりも小さくなる場合、len_multは 1になりますが、len_ratioは 正しく元データの大きさとの比(0から1の間の数値)を返します。