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
}
Beispiel #2
0
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);
}
Beispiel #3
0
/**
 * 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;
}