AUオーディオファイルフォーマットは三つのパートから構成されている。
- ヘッダ
- 追加情報(オプション)
- オーディオデータ
ヘッダは24バイトであり、追加情報は最小で4バイトである。よって、大概のAUファイルでは、オーディオデータは29バイト目から記録されていることになる。しかし、時にはヘッダが大きくなる場合がある。
AUオーディオ構造体とオーディオデータは、AUファイルを取り扱うマシンのバイトオーダーに関わらずビッグエンディアンで記録される。つまり、x86だろうがSPARCだろうが関係ないということ。
何分Solarisにはx86版とSPARC版があるから、移植性についてはちと考えなければならない。そういうことで、audio/au.hヘッダに、読み込んだデータのバイトオーダーを変更するマクロが定義してある。移植性を考えるだけの余裕があるなら、このマクロを使いましょう。
AUオーディオ構造体
struct au_filehdr {
uint32_t au_magic; /* マジックナンバー(.snd) */
uint32_t au_offset; /* オーディオデータが記録されているバイトオフセット */
uint32_t au_data_size; /* データ長(バイト) */
uint32_t au_encoding; /* エンコードの種別 */
uint32_t au_sample_rate; /* 一秒あたりのサンプル数 */
uint32_t au_channels; /* チャンネル数 */
};
typedef struct au_filehdr au_filehdr_t;
|
au_magicフィールドには、下記の定数が記録される。
#define AUDIO_AU_FILE_MAGIC ( 0x2e736e64 ) /* ".snd" */
|
au_offsetには、ヘッダ+追加情報のバイト数が記録される。
au_data_sizeには、記録されているデータのバイト数が格納される。しかし、ヘッダを記録した時点にはデータ長が判明していなかった、とかいう場合にはAUDIO_AU_UNKNOWN_SIZEが格納される。
#define AUDIO_AU_UNKNOWN_SIZE ( ~0 ) /* (unsigned) -1 */
|
AUDIO_AU_UNKNOWN_SIZEが記録されていた場合には、データ長は「ファイル長-ヘッダ長」で算出すること。
encodingには、下記の定数の内のいずれか一つが記録される。
| 定数 |
意味 |
| AUDIO_AU_ENCODING_ULAW |
8bit μ-law |
| AUDIO_AU_ENCODING_LINEAR_8 |
8bit liner PCM |
| AUDIO_AU_ENCODING_LINEAR_16 |
16bit liner PCM |
| AUDIO_AU_ENCODING_LINEAR_24 |
24bit liner PCM |
| AUDIO_AU_ENCODING_LINEAR_32 |
32bit liner PCM |
| AUDIO_AU_ENCODING_FLOAT |
浮動小数点数 float型 |
| AUDIO_AU_ENCODING_DOUBLE |
倍精度浮動小数点数 double型 |
| AUDIO_AU_ENCODING_FRAGMENTED |
フラグメント化されている |
| AUDIO_AU_ENCODING_DSP |
DSPのプログラム |
| AUDIO_AU_ENCODING_FIXED_8 |
8bit固定小数点 |
| AUDIO_AU_ENCODING_FIXED_16 |
16bit固定小数点 |
| AUDIO_AU_ENCODING_FIXED_24 |
24bit固定小数点 |
| AUDIO_AU_ENCODING_FIXED_32 |
32bit固定小数点 |
| AUDIO_AU_ENCODING_EMPHASIS |
強勢付き16bit liner |
| AUDIO_AU_ENCODING_COMPRESSED |
圧縮された16bit liner |
| AUDIO_AU_ENCODING_EMP_COMP |
圧縮された強勢付き16bit liner |
| AUDIO_AU_ENCODING_MUSIC_KIT |
Music Kit DSP コマンド |
| AUDIO_AU_ENCODING_ADPCM_G721 |
CCITT G.721 ADPCM |
| AUDIO_AU_ENCODING_ADPCM_G722 |
CCITT G.722 ADPCM |
| AUDIO_AU_ENCODING_ADPCM_G723_3 |
CCITT G.723.3 ADPCM |
| AUDIO_AU_ENCODING_ADPCM_G723_5 |
CCITT G.723.5 ADPCM |
| AUDIO_AU_ENCODING_ALAW |
8bit A-law G.711 |
PCMのデータは、全て符号付き整数であり、中心の値は0である。
au_sample_rateには、オーディオファイルのサンプリングレート(サンプル数毎秒)が記録される。一般的には、8000・11025・22050・44100・48000である。
au_channelsには、一つのサンプルフレーム内にインターリーブされているチャンネル数が記録される。モノラルのデータであれば、この値は1になる。ステレオならば2になる。もっと大きな値になる可能性もあるが、現状Solarisのオーディオデバイスでは、ステレオ以上の構成はサポートしていない。ステレオの場合、サンプルフレーム内の最初のデータが左のチャンネルで、次のデータが右のチャンネルである。
追加情報フィールドには、可変長のテキストかバイナリのデータが記録される。もし、記録されているのがサウンドのデータに関するテキストの注釈であった場合は、末尾はNULLで終わっている必要がある。ただし、古いファイルでは必ずしもNULLで終了しているとは限らない。
AUファイルを出力するとき、構造体の追加情報の長さを出力したら、それ以降は追加情報を長くしてはいけない。