/** * Copyright: Copyright (C) 2018 Gabriel Gheorghe, All Rights Reserved * Authors: $(Gabriel Gheorghe) * License: $(LINK2 https://www.gnu.org/licenses/gpl-3.0.txt, GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007) * Source * Documentation: * Coverage: */ module liberty.audio.device; import liberty.audio.engine: AudioEngineException; import derelict.sdl2.sdl: SDL_AudioDeviceID, SDL_AudioSpec, SDL_OpenAudioDevice, SDL_AudioStatus, SDL_GetAudioDeviceStatus, SDL_CloseAudioDevice, SDL_PauseAudioDevice, SDL_LockAudioDevice, SDL_UnlockAudioDevice, SDL_AUDIO_PLAYING; import std.string: toStringz; /// final class AudioDevice { private { SDL_AudioDeviceID _id; } /// this(const(char)[] name, int iscapture, const(SDL_AudioSpec*) desired, SDL_AudioSpec* obtained, int allowed_changes) { _id = SDL_OpenAudioDevice(toStringz(name), iscapture, desired, obtained, allowed_changes); if (_id == 0) { throw new AudioEngineException("SDL_OpenAudioDevice"); } } /// ~this() { SDL_CloseAudioDevice(_id); } /// void play() nothrow { SDL_PauseAudioDevice(_id, 0); } /// void pause() nothrow { SDL_PauseAudioDevice(_id, 1); } /// void lock() nothrow { SDL_LockAudioDevice(_id); } /// void unlock() nothrow { SDL_UnlockAudioDevice(_id); } /// bool playing() nothrow { return status == SDL_AUDIO_PLAYING; } /// SDL_AudioStatus status() nothrow { return SDL_GetAudioDeviceStatus(_id); } }