3 #include <pulse/volume.h>
4 #include <pulse/gccmacro.h>
6 int main(int argc
, char *argv
[]) {
12 printf("Attenuation of sample 1 against 32767: %g dB\n", 20.0*log10(1.0/32767.0));
13 printf("Smallest possible attenutation > 0 applied to 32767: %li\n", lrint(32767.0*pa_sw_volume_to_linear(1)));
15 for (v
= PA_VOLUME_MUTED
; v
<= PA_VOLUME_NORM
*2; v
+= 256) {
17 double dB
= pa_sw_volume_to_dB(v
);
18 double f
= pa_sw_volume_to_linear(v
);
20 printf("Volume: %3i; percent: %i%%; decibel %0.2f; linear = %0.2f; volume(decibel): %3i; volume(linear): %3i\n",
21 v
, (v
*100)/PA_VOLUME_NORM
, dB
, f
, pa_sw_volume_from_dB(dB
), pa_sw_volume_from_linear(f
));
24 for (v
= PA_VOLUME_MUTED
; v
<= PA_VOLUME_NORM
*2; v
+= 256) {
25 char s
[PA_CVOLUME_SNPRINT_MAX
], t
[PA_SW_CVOLUME_SNPRINT_DB_MAX
];
27 pa_cvolume_set(&cv
, 2, v
);
29 printf("Volume: %3i [%s] [%s]\n",
31 pa_cvolume_snprint(s
, sizeof(s
), &cv
),
32 pa_sw_cvolume_snprint_dB(t
, sizeof(t
), &cv
));
36 map
.channels
= cv
.channels
= 2;
37 map
.map
[0] = PA_CHANNEL_POSITION_LEFT
;
38 map
.map
[1] = PA_CHANNEL_POSITION_RIGHT
;
40 for (cv
.values
[0] = PA_VOLUME_MUTED
; cv
.values
[0] <= PA_VOLUME_NORM
*2; cv
.values
[0] += 4096)
41 for (cv
.values
[1] = PA_VOLUME_MUTED
; cv
.values
[1] <= PA_VOLUME_NORM
*2; cv
.values
[1] += 4096) {
42 char s
[PA_CVOLUME_SNPRINT_MAX
];
44 printf("Volume: [%s]; balance: %2.1f\n", pa_cvolume_snprint(s
, sizeof(s
), &cv
), pa_cvolume_get_balance(&cv
, &map
));
47 for (cv
.values
[0] = PA_VOLUME_MUTED
+4096; cv
.values
[0] <= PA_VOLUME_NORM
*2; cv
.values
[0] += 4096)
48 for (cv
.values
[1] = PA_VOLUME_MUTED
; cv
.values
[1] <= PA_VOLUME_NORM
*2; cv
.values
[1] += 4096)
49 for (b
= -1.0f
; b
<= 1.0f
; b
+= 0.2f
) {
50 char s
[PA_CVOLUME_SNPRINT_MAX
];
54 printf("Before: volume: [%s]; balance: %2.1f\n", pa_cvolume_snprint(s
, sizeof(s
), &cv
), pa_cvolume_get_balance(&cv
, &map
));
57 pa_cvolume_set_balance(&r
, &map
,b
);
59 k
= pa_cvolume_get_balance(&r
, &map
);
60 printf("After: volume: [%s]; balance: %2.1f (intended: %2.1f) %s\n", pa_cvolume_snprint(s
, sizeof(s
), &r
), k
, b
, k
< b
-.05 || k
> b
+.5 ? "MISMATCH" : "");