diff options
author | Michael Stapelberg <stapelberg@users.noreply.github.com> | 2015-04-03 14:45:40 -0700 |
---|---|---|
committer | Michael Stapelberg <stapelberg@users.noreply.github.com> | 2015-04-03 14:45:40 -0700 |
commit | 9abe0a9d593548c021c1ab8c3548578bdd58ee32 (patch) | |
tree | 4e38a3eb94ad40e0b34838f3664645007535b9f4 /src/print_volume.c | |
parent | d00a0e087c79475e199ff33a33a3e73fcd2c0a22 (diff) | |
parent | 1710c206cf82330815b6db82316eb422f8be5370 (diff) |
Merge pull request #7 from Watcom/master
PulseAudio support for volume input
Diffstat (limited to 'src/print_volume.c')
-rw-r--r-- | src/print_volume.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/print_volume.c b/src/print_volume.c index d8766b7..4359ac1 100644 --- a/src/print_volume.c +++ b/src/print_volume.c @@ -51,13 +51,40 @@ void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char * char *outwalk = buffer; int pbval = 1; - /* Printing volume only works with ALSA at the moment */ + /* Printing volume works with ALSA and PulseAudio at the moment */ if (output_format == O_I3BAR) { char *instance; asprintf(&instance, "%s.%s.%d", device, mixer, mixer_idx); INSTANCE(instance); free(instance); } + + /* Try PulseAudio first */ + + /* If the device name has the format "pulse[:N]" where N is the + * index of the PulseAudio sink then force PulseAudio, optionally + * overriding the default sink */ + if (!strncasecmp(device, "pulse", strlen("pulse"))) { + uint32_t sink_idx = device[5] == ':' ? (uint32_t)atoi(device + 6) + : DEFAULT_SINK_INDEX; + int ivolume = pulse_initialize() ? volume_pulseaudio(sink_idx) : 0; + /* negative result means error, stick to 0 */ + if (ivolume < 0) + ivolume = 0; + outwalk = apply_volume_format(fmt, outwalk, ivolume); + goto out; + } else if (!strcasecmp(device, "default") && pulse_initialize()) { + /* no device specified or "default" set */ + int ivolume = volume_pulseaudio(DEFAULT_SINK_INDEX); + if (ivolume >= 0) { + outwalk = apply_volume_format(fmt, outwalk, ivolume); + goto out; + } + /* negative result means error, fail PulseAudio attempt */ + } +/* If some other device was specified or PulseAudio is not detected, + * proceed to ALSA / OSS */ + #ifdef LINUX int err; snd_mixer_t *m; |