PulseAudio:チャンネルマップ

struct pa_channel_mapチャンネルマップ構造体
初期化
pa_channel_map_init構造体の初期化
pa_channel_map_init_monoモノラルで初期化
pa_channel_map_init_stereoステレオで初期化
pa_channel_map_init_auto指定したタイプで初期化
pa_channel_map_init_extend指定したタイプで初期化
文字列
pa_channel_position_to_stringチャンネル位置のタイプから文字列取得
pa_channel_position_from_stringチャンネル位置の文字列からタイプを取得
pa_channel_position_to_pretty_stringチャンネル位置を人間が読める文字列で取得
pa_channel_map_snprintチャンネルマップから、人間が読める文字列を作成
pa_channel_map_parse文字列からチャンネルマップ取得
チェック
pa_channel_map_equalチャンネルマップを比較
pa_channel_map_validチャンネルマップが有効か
pa_channel_map_compatibleサンプル情報と互換性があるか
pa_channel_map_superset指定チャンネルマップに含まれているか
pa_channel_map_can_balance音量のバランスが適用できるか
pa_channel_map_can_fade音量の前後バランスが適用できるか
pa_channel_map_can_lfe_balance音量のLFEバランスが適用できるか
ほか
pa_channel_map_to_nameチャンネルマップからマッピング名を取得
pa_channel_map_to_pretty_nameチャンネルマップから、人間が読めるラベルを取得
pa_channel_map_has_positionマップ内で、指定チャンネル位置が使われているか
pa_channel_map_maskチャンネル位置のビットマスクを生成
typedef struct pa_channel_map {
    uint8_t channels;
    pa_channel_position_t map[PA_CHANNELS_MAX];
} pa_channel_map;
チャンネルマップ構造体
channels
チャンネル数
map
各チャンネルの位置タイプ。

PA_CHANNEL_POSITION_INVALID : 無効
PA_CHANNEL_POSITION_MONO : モノラル
PA_CHANNEL_POSITION_FRONT_LEFT : 前・左
PA_CHANNEL_POSITION_FRONT_RIGHT : 前・右
PA_CHANNEL_POSITION_FRONT_CENTER : 前・中央
PA_CHANNEL_POSITION_LEFT = PA_CHANNEL_POSITION_FRONT_LEFT
PA_CHANNEL_POSITION_RIGHT = PA_CHANNEL_POSITION_FRONT_RIGHT
PA_CHANNEL_POSITION_CENTER = PA_CHANNEL_POSITION_FRONT_CENTER
PA_CHANNEL_POSITION_REAR_CENTER : 後ろ・中央
PA_CHANNEL_POSITION_REAR_LEFT : 後ろ・左
PA_CHANNEL_POSITION_REAR_RIGHT : 後ろ・右
PA_CHANNEL_POSITION_LFE
PA_CHANNEL_POSITION_SUBWOOFER = PA_CHANNEL_POSITION_LFE
PA_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER
PA_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER
PA_CHANNEL_POSITION_SIDE_LEFT
PA_CHANNEL_POSITION_SIDE_RIGHT
PA_CHANNEL_POSITION_AUX0 〜 PA_CHANNEL_POSITION_AUX31

PA_CHANNEL_POSITION_TOP_CENTER
PA_CHANNEL_POSITION_TOP_FRONT_LEFT
PA_CHANNEL_POSITION_TOP_FRONT_RIGHT
PA_CHANNEL_POSITION_TOP_FRONT_CENTER
PA_CHANNEL_POSITION_TOP_REAR_LEFT
PA_CHANNEL_POSITION_TOP_REAR_RIGHT
PA_CHANNEL_POSITION_TOP_REAR_CENTER
初期化
pa_channel_map *pa_channel_map_init(pa_channel_map *m);
構造体を初期化し、そのポインタを返す。
この値で pa_channel_map_valid() を実行しても、失敗する。
pa_channel_map *pa_channel_map_init_mono(pa_channel_map *m);
m をモノラルで初期化し、そのポインタを返す。
pa_channel_map *pa_channel_map_init_stereo(pa_channel_map *m);
m をステレオで初期化し、そのポインタを返す。
pa_channel_map *pa_channel_map_init_auto(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def);
デフォルトのタイプを指定して、指定されたチャンネル数でチャンネルマップを初期化し、そのポインタを返す。
指定チャンネル数とマッピングに対して、既知のデフォルトのチャンネルマップがない場合、この呼び出しは失敗する (NULL を返す)。
channels
チャンネル数
def
デフォルトのタイプ。

PA_CHANNEL_MAP_AIFF : AIFF-C に基づく RFC3551 からのマッピング
PA_CHANNEL_MAP_AUX : aux チャンネルのみ
PA_CHANNEL_MAP_WAVEEX : Microsoft の WAVEFORMATEXTENSIBLE マッピング。このマッピングは、dwChannelMask のすべての LSB が設定されているかのように機能します。
PA_CHANNEL_MAP_DEF_MAX : 有効なチャンネルマッピング定義の上限
PA_CHANNEL_MAP_DEFAULT : デフォルト
pa_channel_map *pa_channel_map_init_extend(pa_channel_map *m, unsigned channels, pa_channel_map_def_t def);
pa_channel_map_init_auto() に似ているが、指定されたパラメータでの、デフォルトのマッピングが不明な場合、失敗する代わりに、より少ないチャンネルで、既知のマッピングに基づいてマッピングを合成し、残りを AUX0〜AUX31 チャンネルで埋める。
文字列
const char *pa_channel_position_to_string(pa_channel_position_t pos);
チャンネル位置のタイプから文字列を取得。
例: "front left"
pa_channel_position_t pa_channel_position_from_string(const char *s);
チャンネル位置の文字列からタイプを取得
const char *pa_channel_position_to_pretty_string(pa_channel_position_t pos);
チャンネル位置を人間が読める文字列で取得。
例: "Front Left"
char *pa_channel_map_snprint(char *s, size_t l, const pa_channel_map *map);
チャンネルマップから、人間が読める文字列にフォーマットする。
例: "front-left,front-right"
s
文字列が格納されるバッファ
l
バッファの長さ
戻り値
s のポインタが返る
pa_channel_map *pa_channel_map_parse(pa_channel_map *map, const char *s);
文字列から、チャンネル位置リストまたは既知のマッピング名を解析し、チャンネルマップ構造体に取得する。
pa_channel_map_snprint(), pa_channel_map_to_name() で出力された文字列から、チャンネルマップを取得できる。
チェック
int pa_channel_map_equal(const pa_channel_map *a, const pa_channel_map *b);
チャンネルマップを比較し、同じ場合は 1 が返る。
int pa_channel_map_valid(const pa_channel_map *map);
チャンネルマップが有効なら、0 以外が返る。
int pa_channel_map_compatible(const pa_channel_map *map, const pa_sample_spec *ss);
指定されたチャンネルマップが、指定されたサンプル情報と互換性がある場合は、0 以外の値を返す。
int pa_channel_map_superset(const pa_channel_map *a, const pa_channel_map *b);
b で定義されているすべてのチャンネルが、a でも定義されている場合は、0 以外の値を返す。
int pa_channel_map_can_balance(const pa_channel_map *map);
このマッピングで、音量の「バランス」を適用することが適切な場合、つまり、左・右のチャンネルが使用可能な場合は、0 以外の値を返す。
int pa_channel_map_can_fade(const pa_channel_map *map);
このマッピングで、音量の「フェード」(前と後ろの間の「バランス」)を適用することが適切な場合、つまり、フロント・リアのチャンネルが使用可能な場合は、0 以外の値を返す。
int pa_channel_map_can_lfe_balance(const pa_channel_map *map);
このマッピングで、音量の「lfe バランス」(つまり、LFE チャンネルと非 LFE チャンネル間の「バランス」)を適用することが適切な場合、つまり、LFE チャンネルと非 LFE チャンネルが使用可能な場合は、0 以外の値を返す。
ほか
const char *pa_channel_map_to_name(const pa_channel_map *map);
マップから、既知のチャンネルマッピング名 (「stereo」、「surround-71」など) を検索する。
不明な場合は、NULL が返る。
この名前は、pa_channel_map_parse() で解析できる。
const char *pa_channel_map_to_pretty_name(const pa_channel_map *map);
マップから、人間が判読可能なテキストラベル (「Stereo」、「Surround 7.1」など) を検索する。
不明な場合は、NULL が返る。
int pa_channel_map_has_position(const pa_channel_map *map, pa_channel_position_t p);
map 内で、p のチャンネル位置が1回以上使われている場合は、0 以外の値を返す。
pa_channel_position_mask_t pa_channel_map_mask(const pa_channel_map *map);

typedef uint64_t pa_channel_position_mask_t;
#define PA_CHANNEL_POSITION_MASK(f) ((pa_channel_position_mask_t)(1ULL << (f)))
マップから、使用されているチャンネル位置のビットマスクを生成する。