typedef uint32_t pa_volume_t; typedef struct pa_cvolume { uint8_t channels; pa_volume_t values[PA_CHANNELS_MAX]; } pa_cvolume;
チャンネルごとの音量の構造体
channels
チャンネル数
values
各チャンネルの音量
//音量100% #define PA_VOLUME_NORM ((pa_volume_t) 0x10000U) //ミュート #define PA_VOLUME_MUTED ((pa_volume_t) 0U) //最大音量 #define PA_VOLUME_MAX ((pa_volume_t) UINT32_MAX/2) //UIの最大音量 #define PA_VOLUME_UI_MAX (pa_sw_volume_from_dB(+11.0)) //無効値 #define PA_VOLUME_INVALID ((pa_volume_t) UINT32_MAX) //値が有効か #define PA_VOLUME_IS_VALID(v) ((v) <= PA_VOLUME_MAX) //音量を範囲内に収める #define PA_CLAMP_VOLUME(v) (PA_CLAMP_UNLIKELY((v), PA_VOLUME_MUTED, PA_VOLUME_MAX))
マクロ
volume
char *pa_volume_snprint_verbose(char *s, size_t l, pa_volume_t v, int print_dB); //ver 5.0
音量値の詳細を文字列にする
print_dB
0 以外の場合、dB 値を出力する
pa_volume_t pa_sw_volume_multiply(pa_volume_t a, pa_volume_t b);
2つの音量を乗算し、結果を返す。
乗算の中立要素として PA_VOLUME_NORM を使用する。
これはソフトウェアボリュームにのみ有効。
乗算の中立要素として PA_VOLUME_NORM を使用する。
これはソフトウェアボリュームにのみ有効。
pa_volume_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b);
2つの音量を除算し、結果を返す。
除算の中立要素として PA_VOLUME_NORM を使用する。
これはソフトウェアボリュームにのみ有効。
ゼロで除算された場合、結果は 0 になる。
除算の中立要素として PA_VOLUME_NORM を使用する。
これはソフトウェアボリュームにのみ有効。
ゼロで除算された場合、結果は 0 になる。
cvolume
pa_cvolume *pa_cvolume_init(pa_cvolume *a);
pa_cvolume を初期化し、そのポインタを返す。
この状態で pa_cvolume_valid() を使うと、失敗する。
この状態で pa_cvolume_valid() を使うと、失敗する。
pa_cvolume *pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
channels の数のチャンネルの音量を、すべて v に設定する。
cvolume:チェック
int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v);
すべてのチャンネルの音量が、指定された値と等しい場合は、0 以外の値を返す。
#define pa_cvolume_is_muted(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_MUTED)
すべてのチャンネルの音量がミュートか
int pa_cvolume_compatible(const pa_cvolume *v, const pa_sample_spec *ss);
指定された音量が、指定されたサンプル情報と互換性がある場合は、0 以外の値を返す。
int pa_cvolume_compatible_with_channel_map(const pa_cvolume *v, const pa_channel_map *cm);
指定されたチャンネルマップと互換性がある場合は、0 以外の値を返す。
cvolume:文字列
char *pa_cvolume_snprint(char *s, size_t l, const pa_cvolume *c);
cvolume を人間が読める文字列にする
戻り値
s のポインタが返る
char *pa_cvolume_snprint_verbose(char *s, size_t l, const pa_cvolume *c, const pa_channel_map *map, int print_dB); //ver 5.0
cvolume の詳細を文字列にする。
各チャンネルの音量は、生の pa_volume_t 値、パーセンテージ、print_dB 引数が 0 以外の場合は dB 値など、いくつかの形式で出力される。
各チャンネルの音量は、生の pa_volume_t 値、パーセンテージ、print_dB 引数が 0 以外の場合は dB 値など、いくつかの形式で出力される。
map
NULL でない場合、各チャンネルの名前が出力される
print_dB
0 以外の場合、dB 値を出力する
cvolume:計算
pa_volume_t pa_cvolume_avg_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask);
cm のチャンネルマップ内で、mask のチャンネル位置マスクに含まれる、すべてのチャンネルの平均音量を返す。
cm が NULL の場合、pa_cvolume_avg() と同じ。
チャンネルが一つも選択されていない場合、戻り値は PA_VOLUME_MUTED になる。
cm が NULL の場合、pa_cvolume_avg() と同じ。
チャンネルが一つも選択されていない場合、戻り値は PA_VOLUME_MUTED になる。
pa_volume_t pa_cvolume_max_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask);
マスクで指定されたチャンネルの最大音量を取得
pa_volume_t pa_cvolume_min_mask(const pa_cvolume *a, const pa_channel_map *cm, pa_channel_position_mask_t mask);
マスクで指定されたチャンネルの最小音量を取得
pa_cvolume *pa_cvolume_merge(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
a と b の各チャンネルで、音量が大きい方を dest にセットする。
a, b, dest は同じ構造体でも良い。
a, b, dest は同じ構造体でも良い。
戻り値
成功時、dest のポインタ。エラー時は NULL
pa_cvolume *pa_cvolume_inc(pa_cvolume *v, pa_volume_t inc);
inc の分だけ各音量を増加させる。
各チャンネル間の比率は維持される。
各チャンネル間の比率は維持される。
戻り値
成功時、v のポインタ。エラー時は NULL
pa_cvolume *pa_cvolume_inc_clamp(pa_cvolume *v, pa_volume_t inc, pa_volume_t limit);
inc の分だけ各音量を増加させるが、limit は超えないようにする。
各チャンネル間の比率は維持される。
各チャンネル間の比率は維持される。
戻り値
成功時、v のポインタ。エラー時は NULL
pa_cvolume *pa_cvolume_dec(pa_cvolume *v, pa_volume_t dec);
inc の分だけ各音量を減少させる。
各チャンネル間の比率は維持される。
各チャンネル間の比率は維持される。
戻り値
成功時、v のポインタ。エラー時は NULL
pa_cvolume *pa_sw_cvolume_multiply(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
a, b の2つの各チャンネルの音量を乗算し、結果を *dest に返す。
これはソフトウェアボリュームに対してのみ有効。
a, b, dest は同じ構造体でも良い。
これはソフトウェアボリュームに対してのみ有効。
a, b, dest は同じ構造体でも良い。
戻り値
成功時は dest が返る。エラー時は dest か NULL が返る。
pa_cvolume *pa_sw_cvolume_multiply_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
a, b の2つの各チャンネルの音量をスカラー音量で乗算し、結果を *dest に返す。
これはソフトウェアボリュームに対してのみ有効。
a, dest は同じ構造体でも良い。
これはソフトウェアボリュームに対してのみ有効。
a, dest は同じ構造体でも良い。
戻り値
成功時は dest が返る。エラー時は dest か NULL が返る。
pa_cvolume *pa_sw_cvolume_divide(pa_cvolume *dest, const pa_cvolume *a, const pa_cvolume *b);
各チャンネルの音量を除算する
pa_cvolume *pa_sw_cvolume_divide_scalar(pa_cvolume *dest, const pa_cvolume *a, pa_volume_t b);
各チャンネルをスカラー音量で除算する
cvolume:バランス値
float pa_cvolume_get_balance(const pa_cvolume *v, const pa_channel_map *map);
指定されたチャンネルマップを使用して、左右の音量の「バランス」値を計算する。
戻り値
-1.0f (左) から +1.0f (右)。
チャンネルマップでバランス値を適用できない場合、0.0f になる。
チャンネルマップでバランス値を適用できない場合、0.0f になる。
pa_cvolume *pa_cvolume_set_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance);
指定されたチャンネルマップを使用して、左右の音量の「バランス」値を調整する。
チャンネルマップに適用できるバランス値がない場合、音量は変更されない。
チャンネルマップに適用できるバランス値がない場合、音量は変更されない。
new_balance
-1.0f から +1.0f
戻り値
成功時、v のポインタが返る。エラー時は NULL
float pa_cvolume_get_fade(const pa_cvolume *v, const pa_channel_map *map);
指定されたチャンネルマップを使用して、音量の「フェード」値 (つまり、前面と背面の間の「バランス」) を計算する。
戻り値
-1.0f (背面) から +1.0f (前)。
このチャンネルマップにフェード値を適用できない場合、0.0f になる。
このチャンネルマップにフェード値を適用できない場合、0.0f になる。
pa_cvolume *pa_cvolume_set_fade(pa_cvolume *v, const pa_channel_map *map, float new_fade);
指定されたチャンネルマップを使用して、音量の「フェード」値 (つまり、フロントとリアの間の「バランス」) を調整する。
new_fade
-1.0f から +1.0f
戻り値
成功時、v のポインタが返る。エラー時は NULL
float pa_cvolume_get_lfe_balance(const pa_cvolume *v, const pa_channel_map *map); //ver 8.0
LFE バランス値を取得
pa_cvolume *pa_cvolume_set_lfe_balance(pa_cvolume *v, const pa_channel_map *map, float new_balance); //ver 8.0
LFE バランス値をセット
cvolume:変更など
pa_cvolume *pa_cvolume_remap(pa_cvolume *v, const pa_channel_map *from, const pa_channel_map *to);
指定された音量を、from のチャンネルマップから、to のチャンネルマップに再マップする。
戻り値
v のポインタが返る
pa_cvolume *pa_cvolume_scale(pa_cvolume *v, pa_volume_t max);
すべてのチャンネルの最大音量が max と等しくなるように、音量をスケーリングする。
各チャンネルの音量の比率は維持される。
各チャンネルの音量の比率は維持される。
戻り値
成功時、v のポインタを返す。エラー時は NULL
pa_cvolume *pa_cvolume_scale_mask(pa_cvolume *v, pa_volume_t max, const pa_channel_map *cm, pa_channel_position_mask_t mask);
チャンネルマップと、チャンネル位置のマスクから、指定チャンネルの最大音量が max と等しくなるように、音量をスケーリングする。
cm
NULL の場合、pa_cvolume_scale() と同じ
戻り値
成功時、v のポインタを返す。エラー時は NULL