PulseAudio:音量

struct pa_cvolumeチャンネルごとの音量の構造体
マクロマクロ
volume
pa_volume_snprint音量値を文字列にする
pa_sw_volume_snprint_dB音量値を dB 単位で文字列にする
pa_volume_snprint_verbose音量値の詳細を文字列にする
pa_sw_volume_multiply音量を乗算する
pa_sw_volume_divide音量を除算する
pa_sw_volume_from_dBdB 値を音量に変換
pa_sw_volume_to_dB音量を dB 値に変換
pa_sw_volume_from_linear線形係数を音量に変換
pa_sw_volume_to_linear音量を線形係数に変換
cvolume
pa_cvolume_initcvolume を初期化
pa_cvolume_set各チャンネルの音量を指定値にセット
pa_cvolume_reset各チャンネルの音量を100%にする
pa_cvolume_mute各チャンネルの音量をミュートにする
cvolume:チェック
pa_cvolume_valid値が有効か
pa_cvolume_equal2つが等しいか
pa_cvolume_channels_equal_toすべてのチャンネルの音量が指定値と同じか
pa_cvolume_is_normすべてのチャンネルの音量が100%か
pa_cvolume_is_mutedすべてのチャンネルの音量がミュートか
pa_cvolume_compatibleサンプル情報と互換性があるか
pa_cvolume_compatible_with_channel_mapチャンネルマップと互換性があるか
cvolume:文字列
pa_cvolume_snprintcvolume を人間が読める文字列にする
pa_sw_cvolume_snprint_dBcvolume を dB 単位で文字列にする
pa_cvolume_snprint_verbosecvolume の詳細を文字列にする
cvolume:計算
pa_cvolume_avg平均音量を取得
pa_cvolume_avg_maskマスクで指定されたチャンネルの平均音量を取得
pa_cvolume_max最大音量を取得
pa_cvolume_max_maskマスクで指定されたチャンネルの最大音量を取得
pa_cvolume_min最小音量を取得
pa_cvolume_min_maskマスクで指定されたチャンネルの最小音量を取得
pa_cvolume_merge2つのうち大きい方の音量をセット
pa_cvolume_inc音量を増加させる
pa_cvolume_inc_clamp音量を増加させる(制限)
pa_cvolume_dec音量を減少させる
pa_sw_cvolume_multiply各チャンネルの音量を乗算する
pa_sw_cvolume_multiply_scalar各チャンネルをスカラー音量で乗算する
pa_sw_cvolume_divide各チャンネルの音量を除算する
pa_sw_cvolume_divide_scalar各チャンネルをスカラー音量で除算する
cvolume:バランス値
pa_cvolume_get_balance音量の左右のバランス値を取得
pa_cvolume_set_balance音量の左右のバランスをセット
pa_cvolume_get_fade音量の前後のバランスを取得
pa_cvolume_set_fade音量の前後のバランスをセット
pa_cvolume_get_lfe_balanceLFE バランス値を取得
pa_cvolume_set_lfe_balanceLFE バランス値をセット
cvolume:変更など
pa_cvolume_remapチャンネルマップから音量を再マップ
pa_cvolume_scale最大音量を指定して調整
pa_cvolume_scale_mask最大音量を指定して調整(マスク)
pa_cvolume_set_positionチャンネル位置を指定して、音量をセット
pa_cvolume_get_position指定チャンネル位置の最大音量を取得
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(char *s, size_t l, pa_volume_t v);
音量値を文字列にする
char *pa_sw_volume_snprint_dB(char *s, size_t l, pa_volume_t v);
音量値を dB 単位で文字列にする
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_t pa_sw_volume_divide(pa_volume_t a, pa_volume_t b);
2つの音量を除算し、結果を返す。
除算の中立要素として PA_VOLUME_NORM を使用する。
これはソフトウェアボリュームにのみ有効。
ゼロで除算された場合、結果は 0 になる。
pa_volume_t pa_sw_volume_from_dB(double f);
dB 値を音量に変換
double pa_sw_volume_to_dB(pa_volume_t v);
音量を dB 値に変換
pa_volume_t pa_sw_volume_from_linear(double v);
線形係数を音量に変換する。
100% は 1.0。
0.0 以下はミュートになる。
double pa_sw_volume_to_linear(pa_volume_t v);
音量を線形係数に変換
cvolume
pa_cvolume *pa_cvolume_init(pa_cvolume *a);
pa_cvolume を初期化し、そのポインタを返す。
この状態で pa_cvolume_valid() を使うと、失敗する。
pa_cvolume *pa_cvolume_set(pa_cvolume *a, unsigned channels, pa_volume_t v);
channels の数のチャンネルの音量を、すべて v に設定する。
#define pa_cvolume_reset(a, n) pa_cvolume_set((a), (n), PA_VOLUME_NORM)
各チャンネルの音量を100%にする
#define pa_cvolume_mute(a, n) pa_cvolume_set((a), (n), PA_VOLUME_MUTED)
各チャンネルの音量をミュートにする
cvolume:チェック
int pa_cvolume_valid(const pa_cvolume *v);
構造体の値が有効なら、0 以外の値を返す。
int pa_cvolume_equal(const pa_cvolume *a, const pa_cvolume *b);
a と b の2つが等しい場合、0 以外の値を返す。
int pa_cvolume_channels_equal_to(const pa_cvolume *a, pa_volume_t v);
すべてのチャンネルの音量が、指定された値と等しい場合は、0 以外の値を返す。
#define pa_cvolume_is_norm(a) pa_cvolume_channels_equal_to((a), PA_VOLUME_NORM)
すべてのチャンネルの音量が100%か
#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_sw_cvolume_snprint_dB(char *s, size_t l, const pa_cvolume *c);
cvolume を dB 単位で文字列にする
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 値など、いくつかの形式で出力される。
map
NULL でない場合、各チャンネルの名前が出力される
print_dB
0 以外の場合、dB 値を出力する
cvolume:計算
pa_volume_t pa_cvolume_avg(const pa_cvolume *a);
すべてのチャンネルの平均音量を返す。
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 になる。
pa_volume_t pa_cvolume_max(const pa_cvolume *a);
すべてのチャンネルの最大音量を返す。
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(const pa_cvolume *a);
すべてのチャンネルの最小音量を返す。
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 は同じ構造体でも良い。
戻り値
成功時、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 は同じ構造体でも良い。
戻り値
成功時は 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 は同じ構造体でも良い。
戻り値
成功時は 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 になる。
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 になる。
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
pa_cvolume *pa_cvolume_set_position(pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t, pa_volume_t v);
map と t で指定されたすべてのチャンネルに、音量 v を設定する。
戻り値
成功時、cv のポインタを返す。エラー時や、指定されたチャンネルがない場合は NULL を返す
pa_volume_t pa_cvolume_get_position(const pa_cvolume *cv, const pa_channel_map *map, pa_channel_position_t t);
map と t で指定されたすべてのチャンネルの最大音量を取得する。
戻り値
指定されたチャンネルがない場合は 0 を返す