void VolumeControl::deinit() { //deinitialize audio mixer interface #if defined (__APPLE__) #warning TODO: Not implemented for MacOS yet!!! #elif defined(__linux__) if (mixerHandle != nullptr) { snd_mixer_detach(mixerHandle, mixerCard); snd_mixer_free(mixerHandle); snd_mixer_close(mixerHandle); mixerHandle = nullptr; mixerElem = nullptr; } #elif defined(WIN32) || defined(_WIN32) if (mixerHandle != nullptr) { mixerClose(mixerHandle); mixerHandle = nullptr; } else if (endpointVolume != nullptr) { endpointVolume->Release(); endpointVolume = nullptr; CoUninitialize(); } #endif }
static void _j4status_alsa_section_free(gpointer data) { J4statusAlsaSection *section = data; j4status_section_free(section->section); snd_mixer_free(section->mixer); g_water_alsa_mixer_source_free(section->source); g_free(section->card); g_free(section); }
/** * Detaches a mixer from the specified card and closes the * mixer. * * @param mixer mixer handle * @param card HCTL name of the alsa card * @return 0 on success otherwise negative error code */ static int close_mixer(snd_mixer_t *mixer, const char *card) { int err; DEBUG_PRINT("Card %s: closing mixer", card); if ((err = snd_mixer_detach(mixer, card)) < 0) report_error("Card %s: mixer detach error: %s", card, snd_strerror(err)); snd_mixer_free(mixer); if ((err = snd_mixer_close(mixer)) < 0) report_error("Card %s: mixer close error: %s", card, snd_strerror(err)); return err; }