Skip to content

Latest commit

 

History

History
247 lines (216 loc) · 5.55 KB

playmus.c

File metadata and controls

247 lines (216 loc) · 5.55 KB
 
Oct 21, 1999
Oct 21, 1999
1
/*
Dec 31, 2011
Dec 31, 2011
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
PLAYMUS: A test application for the SDL mixer library.
Copyright (C) 1997-2012 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Oct 21, 1999
Oct 21, 1999
20
21
*/
Dec 14, 2001
Dec 14, 2001
22
/* $Id$ */
Dec 14, 2001
Dec 14, 2001
23
Oct 21, 1999
Oct 21, 1999
24
25
26
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
Apr 14, 2010
Apr 14, 2010
27
Feb 11, 2000
Feb 11, 2000
28
#ifdef unix
Oct 21, 1999
Oct 21, 1999
29
30
31
#include <unistd.h>
#endif
Dec 21, 1999
Dec 21, 1999
32
#include "SDL.h"
Jan 14, 2000
Jan 14, 2000
33
#include "SDL_mixer.h"
Oct 21, 1999
Oct 21, 1999
34
Feb 17, 2011
Feb 17, 2011
35
36
37
38
#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
Oct 21, 1999
Oct 21, 1999
39
40
41
static int audio_open = 0;
static Mix_Music *music = NULL;
Jan 2, 2001
Jan 2, 2001
42
static int next_track = 0;
Oct 21, 1999
Oct 21, 1999
43
May 14, 2006
May 14, 2006
44
void CleanUp(int exitcode)
Oct 21, 1999
Oct 21, 1999
45
{
Oct 23, 1999
Oct 23, 1999
46
47
48
49
if( Mix_PlayingMusic() ) {
Mix_FadeOutMusic(1500);
SDL_Delay(1500);
}
Oct 21, 1999
Oct 21, 1999
50
51
52
53
if ( music ) {
Mix_FreeMusic(music);
music = NULL;
}
Oct 30, 1999
Oct 30, 1999
54
55
56
57
if ( audio_open ) {
Mix_CloseAudio();
audio_open = 0;
}
Oct 21, 1999
Oct 21, 1999
58
SDL_Quit();
May 14, 2006
May 14, 2006
59
exit(exitcode);
Oct 21, 1999
Oct 21, 1999
60
61
62
63
}
void Usage(char *argv0)
{
Dec 21, 2004
Dec 21, 2004
64
fprintf(stderr, "Usage: %s [-i] [-l] [-8] [-r rate] [-c channels] [-b buffers] [-v N] [-rwops] <musicfile>\n", argv0);
Oct 21, 1999
Oct 21, 1999
65
}
Nov 1, 1999
Nov 1, 1999
66
Dec 27, 2019
Dec 27, 2019
67
/*#define SEEK_TEST */
Nov 1, 1999
Nov 1, 1999
68
69
70
71
void Menu(void)
{
char buf[10];
Aug 20, 2006
Aug 20, 2006
72
printf("Available commands: (p)ause (r)esume (h)alt volume(v#) > ");
Nov 1, 1999
Nov 1, 1999
73
fflush(stdin);
Apr 14, 2010
Apr 14, 2010
74
75
if (scanf("%s",buf) == 1) {
switch(buf[0]){
Dec 27, 2019
Dec 27, 2019
76
77
78
79
80
81
82
#if defined(SEEK_TEST)
case '0': Mix_SetMusicPosition(0); break;
case '1': Mix_SetMusicPosition(10);break;
case '2': Mix_SetMusicPosition(20);break;
case '3': Mix_SetMusicPosition(30);break;
case '4': Mix_SetMusicPosition(40);break;
#endif /* SEEK_TEST */
Apr 14, 2010
Apr 14, 2010
83
84
85
86
87
88
89
90
91
92
93
94
95
case 'p': case 'P':
Mix_PauseMusic();
break;
case 'r': case 'R':
Mix_ResumeMusic();
break;
case 'h': case 'H':
Mix_HaltMusic();
break;
case 'v': case 'V':
Mix_VolumeMusic(atoi(buf+1));
break;
}
Nov 1, 1999
Nov 1, 1999
96
97
98
99
100
}
printf("Music playing: %s Paused: %s\n", Mix_PlayingMusic() ? "yes" : "no",
Mix_PausedMusic() ? "yes" : "no");
}
Apr 14, 2010
Apr 14, 2010
101
102
#ifdef HAVE_SIGNAL_H
Jan 2, 2001
Jan 2, 2001
103
104
105
106
107
108
109
110
111
void IntHandler(int sig)
{
switch (sig) {
case SIGINT:
next_track++;
break;
}
}
Apr 14, 2010
Apr 14, 2010
112
113
#endif
Dec 18, 2001
Dec 18, 2001
114
int main(int argc, char *argv[])
Oct 21, 1999
Oct 21, 1999
115
{
Apr 14, 2010
Apr 14, 2010
116
SDL_RWops *rwfp = NULL;
Feb 11, 2000
Feb 11, 2000
117
int audio_rate;
Oct 21, 1999
Oct 21, 1999
118
119
Uint16 audio_format;
int audio_channels;
Dec 11, 1999
Dec 11, 1999
120
int audio_buffers;
Feb 12, 2003
Feb 12, 2003
121
int audio_volume = MIX_MAX_VOLUME;
Oct 30, 1999
Oct 30, 1999
122
int looping = 0;
Nov 1, 1999
Nov 1, 1999
123
int interactive = 0;
Dec 21, 2004
Dec 21, 2004
124
int rwops = 0;
Oct 21, 1999
Oct 21, 1999
125
126
127
128
129
130
int i;
/* Initialize variables */
audio_rate = 22050;
audio_format = AUDIO_S16;
audio_channels = 2;
Dec 11, 1999
Dec 11, 1999
131
audio_buffers = 4096;
Oct 21, 1999
Oct 21, 1999
132
133
134
135
136
137
138
/* Check command line usage */
for ( i=1; argv[i] && (*argv[i] == '-'); ++i ) {
if ( (strcmp(argv[i], "-r") == 0) && argv[i+1] ) {
++i;
audio_rate = atoi(argv[i]);
} else
Aug 21, 2004
Aug 21, 2004
139
140
141
142
143
144
145
if ( strcmp(argv[i], "-m") == 0 ) {
audio_channels = 1;
} else
if ( (strcmp(argv[i], "-c") == 0) && argv[i+1] ) {
++i;
audio_channels = atoi(argv[i]);
} else
Dec 11, 1999
Dec 11, 1999
146
147
148
149
if ( (strcmp(argv[i], "-b") == 0) && argv[i+1] ) {
++i;
audio_buffers = atoi(argv[i]);
} else
Feb 12, 2003
Feb 12, 2003
150
151
152
153
if ( (strcmp(argv[i], "-v") == 0) && argv[i+1] ) {
++i;
audio_volume = atoi(argv[i]);
} else
Oct 30, 1999
Oct 30, 1999
154
155
156
if ( strcmp(argv[i], "-l") == 0 ) {
looping = -1;
} else
Nov 1, 1999
Nov 1, 1999
157
158
159
if ( strcmp(argv[i], "-i") == 0 ) {
interactive = 1;
} else
Oct 21, 1999
Oct 21, 1999
160
161
if ( strcmp(argv[i], "-8") == 0 ) {
audio_format = AUDIO_U8;
Dec 21, 2004
Dec 21, 2004
162
163
164
} else
if ( strcmp(argv[i], "-rwops") == 0 ) {
rwops = 1;
Oct 21, 1999
Oct 21, 1999
165
166
} else {
Usage(argv[0]);
Apr 5, 2001
Apr 5, 2001
167
return(1);
Oct 21, 1999
Oct 21, 1999
168
169
170
171
}
}
if ( ! argv[i] ) {
Usage(argv[0]);
Apr 5, 2001
Apr 5, 2001
172
return(1);
Oct 21, 1999
Oct 21, 1999
173
174
175
176
177
}
/* Initialize the SDL library */
if ( SDL_Init(SDL_INIT_AUDIO) < 0 ) {
fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
Apr 5, 2001
Apr 5, 2001
178
return(255);
Oct 21, 1999
Oct 21, 1999
179
}
Aug 21, 2004
Aug 21, 2004
180
Apr 14, 2010
Apr 14, 2010
181
#ifdef HAVE_SIGNAL_H
Jan 2, 2001
Jan 2, 2001
182
signal(SIGINT, IntHandler);
May 14, 2006
May 14, 2006
183
signal(SIGTERM, CleanUp);
Apr 14, 2010
Apr 14, 2010
184
#endif
Oct 21, 1999
Oct 21, 1999
185
186
/* Open the audio device */
Dec 11, 1999
Dec 11, 1999
187
if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) < 0) {
Oct 21, 1999
Oct 21, 1999
188
fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
Apr 5, 2001
Apr 5, 2001
189
return(2);
Oct 21, 1999
Oct 21, 1999
190
191
} else {
Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
May 1, 2006
May 1, 2006
192
printf("Opened audio at %d Hz %d bit %s (%s), %d bytes audio buffer\n", audio_rate,
Oct 21, 1999
Oct 21, 1999
193
(audio_format&0xFF),
Aug 21, 2004
Aug 21, 2004
194
(audio_channels > 2) ? "surround" : (audio_channels > 1) ? "stereo" : "mono",
May 1, 2006
May 1, 2006
195
(audio_format&0x1000) ? "BE" : "LE",
Dec 11, 1999
Dec 11, 1999
196
audio_buffers );
Oct 21, 1999
Oct 21, 1999
197
198
199
}
audio_open = 1;
Feb 12, 2003
Feb 12, 2003
200
201
202
/* Set the music volume */
Mix_VolumeMusic(audio_volume);
Oct 21, 1999
Oct 21, 1999
203
/* Set the external music player, if any */
Apr 14, 2010
Apr 14, 2010
204
Mix_SetMusicCMD(SDL_getenv("MUSIC_CMD"));
Oct 21, 1999
Oct 21, 1999
205
Jan 2, 2001
Jan 2, 2001
206
207
208
209
while (argv[i]) {
next_track = 0;
/* Load the requested music file */
Dec 21, 2004
Dec 21, 2004
210
211
if ( rwops ) {
rwfp = SDL_RWFromFile(argv[i], "rb");
Dec 27, 2004
Dec 27, 2004
212
music = Mix_LoadMUS_RW(rwfp);
Dec 21, 2004
Dec 21, 2004
213
214
215
} else {
music = Mix_LoadMUS(argv[i]);
}
Jan 2, 2001
Jan 2, 2001
216
217
218
if ( music == NULL ) {
fprintf(stderr, "Couldn't load %s: %s\n",
argv[i], SDL_GetError());
May 14, 2006
May 14, 2006
219
CleanUp(2);
Jan 2, 2001
Jan 2, 2001
220
221
222
223
224
}
/* Play and then exit */
printf("Playing %s\n", argv[i]);
Mix_FadeInMusic(music,looping,2000);
Dec 20, 2001
Dec 20, 2001
225
while ( !next_track && (Mix_PlayingMusic() || Mix_PausedMusic()) ) {
Jan 2, 2001
Jan 2, 2001
226
227
228
229
230
231
if(interactive)
Menu();
else
SDL_Delay(100);
}
Mix_FreeMusic(music);
Dec 21, 2004
Dec 21, 2004
232
if ( rwops ) {
Dec 31, 2011
Dec 31, 2011
233
SDL_RWclose(rwfp);
Dec 21, 2004
Dec 21, 2004
234
}
Dec 18, 2001
Dec 18, 2001
235
music = NULL;
Oct 21, 1999
Oct 21, 1999
236
Jan 2, 2001
Jan 2, 2001
237
238
239
240
241
/* If the user presses Ctrl-C more than once, exit. */
SDL_Delay(500);
if ( next_track > 1 ) break;
i++;
Oct 21, 1999
Oct 21, 1999
242
}
May 14, 2006
May 14, 2006
243
244
245
246
CleanUp(0);
/* Not reached, but fixes compiler warnings */
return 0;
Oct 21, 1999
Oct 21, 1999
247
}