From df592f14af0beed3efbd5396320ccffe648f92d8 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 12 Feb 2003 05:40:57 +0000 Subject: [PATCH] Sam Lantinga Wed Feb 12 21:03:57 PST 2003 * Fixed volume control on WAVE music chunks --- CHANGES | 2 ++ playmus.c | 10 +++++++++- wavestream.c | 19 ++++++++++--------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/CHANGES b/CHANGES index 96c3890a..ba941209 100644 --- a/CHANGES +++ b/CHANGES @@ -1,4 +1,6 @@ 1.2.5: +Sam Lantinga Wed Feb 12 21:03:57 PST 2003 + * Fixed volume control on WAVE music chunks Ben Nason - Mon, 10 Feb 2003 11:50:27 -0800 * Fixed volume control on MOD music chunks Patrice Mandin - Fri, 31 Jan 2003 15:17:30 +0100 diff --git a/playmus.c b/playmus.c index db84bc50..6c8bceca 100644 --- a/playmus.c +++ b/playmus.c @@ -57,7 +57,7 @@ void CleanUp(void) void Usage(char *argv0) { - fprintf(stderr, "Usage: %s [-i] |-l] [-8] [-r rate] [-b buffers] [-s] \n", argv0); + fprintf(stderr, "Usage: %s [-i] [-l] [-8] [-r rate] [-b buffers] [-v N] \n", argv0); } void Menu(void) @@ -97,6 +97,7 @@ int main(int argc, char *argv[]) Uint16 audio_format; int audio_channels; int audio_buffers; + int audio_volume = MIX_MAX_VOLUME; int looping = 0; int interactive = 0; int i; @@ -117,6 +118,10 @@ int main(int argc, char *argv[]) ++i; audio_buffers = atoi(argv[i]); } else + if ( (strcmp(argv[i], "-v") == 0) && argv[i+1] ) { + ++i; + audio_volume = atoi(argv[i]); + } else if ( strcmp(argv[i], "-m") == 0 ) { audio_channels = 1; } else @@ -160,6 +165,9 @@ int main(int argc, char *argv[]) } audio_open = 1; + /* Set the music volume */ + Mix_VolumeMusic(audio_volume); + /* Set the external music player, if any */ Mix_SetMusicCMD(getenv("MUSIC_CMD")); diff --git a/wavestream.c b/wavestream.c index 2e93f3b6..7d36f4f7 100644 --- a/wavestream.c +++ b/wavestream.c @@ -92,6 +92,7 @@ static WAVStream *music = NULL; /* This is the format of the audio mixer data */ static SDL_AudioSpec mixer; +static int wavestream_volume = MIX_MAX_VOLUME; /* Function to load the WAV/AIFF stream */ static FILE *LoadWAVStream (const char *file, SDL_AudioSpec *spec, @@ -108,13 +109,13 @@ int WAVStream_Init(SDL_AudioSpec *mixerfmt) return(0); } -/* Unimplemented */ -extern void WAVStream_SetVolume(int volume) +void WAVStream_SetVolume(int volume) { + wavestream_volume = volume; } /* Load a WAV stream from the given file */ -extern WAVStream *WAVStream_LoadSong(const char *file, const char *magic) +WAVStream *WAVStream_LoadSong(const char *file, const char *magic) { WAVStream *wave; SDL_AudioSpec wavespec; @@ -148,7 +149,7 @@ extern WAVStream *WAVStream_LoadSong(const char *file, const char *magic) } /* Start playback of a given WAV stream */ -extern void WAVStream_Start(WAVStream *wave) +void WAVStream_Start(WAVStream *wave) { clearerr(wave->wavefp); fseek(wave->wavefp, wave->start, SEEK_SET); @@ -156,7 +157,7 @@ extern void WAVStream_Start(WAVStream *wave) } /* Play some of a stream previously started with WAVStream_Start() */ -extern void WAVStream_PlaySome(Uint8 *stream, int len) +void WAVStream_PlaySome(Uint8 *stream, int len) { long pos; @@ -192,7 +193,7 @@ extern void WAVStream_PlaySome(Uint8 *stream, int len) } music->cvt.len = original_len; SDL_ConvertAudio(&music->cvt); - memcpy(stream, music->cvt.buf, music->cvt.len_cvt); + SDL_MixAudio(stream, music->cvt.buf, music->cvt.len_cvt, wavestream_volume); } else { if ( (music->stop - pos) < len ) { len = (music->stop - pos); @@ -203,13 +204,13 @@ extern void WAVStream_PlaySome(Uint8 *stream, int len) } /* Stop playback of a stream previously started with WAVStream_Start() */ -extern void WAVStream_Stop(void) +void WAVStream_Stop(void) { music = NULL; } /* Close the given WAV stream */ -extern void WAVStream_FreeSong(WAVStream *wave) +void WAVStream_FreeSong(WAVStream *wave) { if ( wave ) { /* Clean up associated data */ @@ -224,7 +225,7 @@ extern void WAVStream_FreeSong(WAVStream *wave) } /* Return non-zero if a stream is currently playing */ -extern int WAVStream_Active(void) +int WAVStream_Active(void) { int active;