diff options
author | Takamichi Horikawa <takamichiho@gmail.com> | 2017-01-07 13:39:17 +0900 |
---|---|---|
committer | Takamichi Horikawa <takamichiho@gmail.com> | 2017-01-07 13:39:17 +0900 |
commit | 09ea1fe272aca6ebb6840f02765acd44ac3ecebc (patch) | |
tree | 9221a90ae3b6d35394554d5ecae1a1c14cda4ca6 /win32/soundout.c | |
parent | e8e394a10937bec18106d2f8c1c0a045c62f458f (diff) |
win32
Diffstat (limited to 'win32/soundout.c')
-rw-r--r-- | win32/soundout.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/win32/soundout.c b/win32/soundout.c new file mode 100644 index 0000000..bb57bc1 --- /dev/null +++ b/win32/soundout.c @@ -0,0 +1,44 @@ +#include "soundout.h" +#include "dsoundout.h" +#include "waveout.h" + +static void soundout_dsound_pause(struct sound_state *state, int pause) { + dsound_pause((struct dsound_state *)state->driver_state, pause); +} + +static void soundout_dsound_delete(struct sound_state *state) { + dsound_delete((struct dsound_state *)state->driver_state); + HeapFree(GetProcessHeap(), 0, state); +} + +static void soundout_waveout_pause(struct sound_state *state, int pause) { + waveout_pause((struct waveout_state *)state->driver_state, pause); +} + +static void soundout_waveout_delete(struct sound_state *state) { + waveout_delete((struct waveout_state *)state->driver_state); + HeapFree(GetProcessHeap(), 0, state); +} + +struct sound_state *sound_init(HWND hwnd, unsigned srate, unsigned sectlen, + sound_callback cbfunc, void *userptr) { + HANDLE heap = GetProcessHeap(); + struct sound_state *sound = HeapAlloc(heap, 0, sizeof(struct sound_state)); + if (!sound) return 0; + struct dsound_state *dsound = dsound_init(hwnd, srate, sectlen, cbfunc, userptr); + if (dsound) { + sound->driver_state = dsound; + sound->pause = soundout_dsound_pause; + sound->delete = soundout_dsound_delete; + return sound; + } + struct waveout_state *waveout = waveout_init(hwnd, srate, sectlen, cbfunc, userptr); + if (waveout) { + sound->driver_state = waveout; + sound->pause = soundout_waveout_pause; + sound->delete = soundout_waveout_delete; + return sound; + } + HeapFree(heap, 0, sound); + return 0; +} |