forked from sdlpal/sdlpal
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathaudio.c
More file actions
83 lines (64 loc) · 2.58 KB
/
audio.c
File metadata and controls
83 lines (64 loc) · 2.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
/* -*- mode: c; tab-width: 4; c-basic-offset: 4; c-file-style: "linux" -*- */
//
// Copyright (c) 2009-2011, Wei Mingzhi <whistler_wmz@users.sf.net>.
// Copyright (c) 2011-2024, SDLPAL development team.
// All rights reserved.
//
// This file is part of SDLPAL.
//
// SDLPAL is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License, version 3
// as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#include "audio.h"
#include "aviplay.h"
#include "common.h"
#include "global.h"
#include "palcfg.h"
#include <math.h>
typedef struct tagAUDIODEVICE {
SDL_AudioDeviceID id;
SDL_AudioSpec spec; /* Actual-used sound specification */
BOOL fMusicEnabled; /* Is BGM enabled? */
BOOL fSoundEnabled; /* Is sound effect enabled? */
} AUDIODEVICE;
static AUDIODEVICE gAudioDevice;
SDL_AudioDeviceID AUDIO_GetDeviceID(VOID) { return gAudioDevice.id; }
INT AUDIO_Init(VOID) {
gAudioDevice.fMusicEnabled = TRUE;
gAudioDevice.fSoundEnabled = TRUE;
// Open the audio device.
gAudioDevice.spec.freq = SAMPLE_RATE;
gAudioDevice.spec.format = SDL_AUDIO_S16LE;
gAudioDevice.spec.channels = AUDIO_CHANNELS;
gAudioDevice.id = SDL_OpenAudioDevice(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &gAudioDevice.spec);
if (!gAudioDevice.id)
return -3;
// Initialize the sound subsystem.
SOUND_Init();
// Initialize the music subsystem.
char buf[PATH_MAX];
RIX_Init(UTIL_GetFullPathName(buf, PATH_MAX, gConfig.pszGamePath, "mus.mkf"));
// Let the callback function run so that musics will be played.
SDL_ResumeAudioDevice(gAudioDevice.id);
return 0;
}
VOID AUDIO_Shutdown(VOID) {
SOUND_Shutdown();
RIX_Shutdown();
}
SDL_AudioSpec *AUDIO_GetDeviceSpec(VOID) { return &gAudioDevice.spec; }
VOID AUDIO_PlaySound(INT iSoundNum) { SOUND_Play(abs(iSoundNum), FALSE, 0.0f); }
VOID AUDIO_PlayMusic(INT iNumRIX, BOOL fLoop, FLOAT flFadeTime) { RIX_Play(iNumRIX, fLoop, flFadeTime); }
VOID AUDIO_EnableMusic(BOOL fEnable) { gAudioDevice.fMusicEnabled = fEnable; }
BOOL AUDIO_MusicEnabled(VOID) { return gAudioDevice.fMusicEnabled; }
VOID AUDIO_EnableSound(BOOL fEnable) { gAudioDevice.fSoundEnabled = fEnable; }
BOOL AUDIO_SoundEnabled(VOID) { return gAudioDevice.fSoundEnabled; }