3 static Mix_Music *current_music = (Mix_Music *) NULL;
15 int audio_rate = 22050;
16 Uint16 audio_format = AUDIO_U16;
17 int audio_channels = 2;
18 int audio_buffers = 4096;
20 if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) < 0) {
21 fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
25 Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
26 printf("Opened audio at %dHz %dbit %s, %d bytes audio buffer\n", audio_rate, (audio_format & 0xFF), (audio_channels > 1) ? "stereo" : "mono", audio_buffers);
28 Mix_SetMusicCMD(getenv("MUSIC_CMD"));
30 memset(soundsamples, 0, sizeof(soundsamples));
39 Mix_FadeOutMusic(1500);
43 Mix_FreeMusic(current_music);
46 /* for(i = 0; i < 128; i++) {
47 if(soundsamples[i].used && soundsamples[i].chunk)
48 Mix_FreeChunk(soundsamples[i].chunk);
64 char dj_autodetect_sd(void)
69 char dj_set_stereo(char flag)
74 void dj_set_auto_mix(char flag)
78 unsigned short dj_set_mixing_freq(unsigned short freq)
83 void dj_set_dma_time(unsigned short time)
87 void dj_set_nosound(char flag)
99 char dj_set_num_sfx_channels(char num_channels)
104 void dj_set_sfx_volume(char volume)
108 void dj_play_sfx(unsigned char sfx_num, unsigned short freq, char volume, char panning, unsigned short delay, char channel)
113 for (i = 0; i < 128; i++) {
114 if (soundsamples[i].id == sfx_num)
119 else if (!soundsamples[i].used)
121 else if (!soundsamples[i].chunk)
124 used_channel = Mix_PlayChannel(channel, soundsamples[i].chunk, soundsamples[i].loop);
125 Mix_Volume(used_channel, volume * 2);
128 char dj_get_sfx_settings(unsigned char sfx_num, sfx_data * data)
133 data->default_freq = 0;
134 data->default_volume = 0;
137 data->loop_start = 0;
138 data->loop_length = 0;
141 for (i = 0; i < 128; i++) {
142 if (soundsamples[i].id == sfx_num)
147 else if (!soundsamples[i].used)
149 else if (!soundsamples[i].chunk)
152 data->loop = soundsamples[i].loop;
157 char dj_set_sfx_settings(unsigned char sfx_num, sfx_data * data)
161 for (i = 0; i < 128; i++) {
162 if (soundsamples[i].id == sfx_num)
167 else if (!soundsamples[i].used)
169 else if (!soundsamples[i].chunk)
172 soundsamples[i].loop = (data->loop) ? (-1) : (0);
177 void dj_set_sfx_channel_volume(char channel_num, char volume)
179 Mix_Volume(channel_num, volume * 2);
182 void dj_stop_sfx_channel(char channel_num)
184 Mix_HaltChannel(channel_num);
187 char dj_load_sfx(FILE * file_handle, char *filename, int file_length, char sfx_type, unsigned char sfx_num)
197 unsigned short Channels;
198 unsigned long SamplesPerSec;
199 unsigned long AvgBytesPerSec;
200 unsigned short BlockAlign;
201 unsigned short BitsPerSample;
204 unsigned char data[0];
207 wave_file_t *wave_buffer;
210 for (i = 0; (i < 128) && soundsamples[i].used; i++);
214 wave_buffer = (wave_file_t *) malloc(sizeof(wave_file_t) + file_length);
215 memset(wave_buffer, 0, sizeof(wave_file_t) + file_length);
217 strncpy(wave_buffer->RIFF_ID, "RIFF", 4);
218 wave_buffer->riff_size = sizeof(wave_file_t) + file_length - 8;
219 strncpy(wave_buffer->WAVE_ID, "WAVE", 4);
220 strncpy(wave_buffer->FMT_ID, "fmt ", 4);
221 wave_buffer->fmt_size = 16;
222 wave_buffer->FormatTag = 1;
223 wave_buffer->Channels = 1;
226 wave_buffer->SamplesPerSec = SFX_JUMP_FREQ;
229 wave_buffer->SamplesPerSec = SFX_LAND_FREQ;
232 wave_buffer->SamplesPerSec = SFX_DEATH_FREQ;
235 wave_buffer->SamplesPerSec = SFX_SPRING_FREQ;
238 wave_buffer->SamplesPerSec = SFX_SPLASH_FREQ;
241 wave_buffer->SamplesPerSec = SFX_FLY_FREQ;
244 wave_buffer->SamplesPerSec = 22050;
247 wave_buffer->BitsPerSample = 16;
248 wave_buffer->AvgBytesPerSec = wave_buffer->SamplesPerSec * wave_buffer->Channels * (wave_buffer->BitsPerSample / 8);
249 wave_buffer->BlockAlign = 1;
250 strncpy(wave_buffer->DATA_ID, "data", 4);
251 wave_buffer->data_size = file_length;
252 fread(wave_buffer->data, file_length, 1, file_handle);
254 rwop = SDL_RWFromMem(wave_buffer, sizeof(wave_file_t) + file_length);
256 soundsamples[i].chunk = Mix_LoadWAV_RW(rwop, 1);
257 soundsamples[i].chunk->allocated = 1;
258 soundsamples[i].used = 1;
259 soundsamples[i].id = sfx_num;
260 soundsamples[i].loop = 0;
265 void dj_free_sfx(unsigned char sfx_num)
267 if (sfx_num >= 128 || !soundsamples[sfx_num].used)
270 Mix_FreeChunk(soundsamples[sfx_num].chunk);
271 soundsamples[sfx_num].chunk = (Mix_Chunk *) NULL;
272 soundsamples[sfx_num].used = 0;
277 char dj_ready_mod(char mod_num)
281 char filename[] = "jnb.tmpmusic.mod";
283 char filename[] = "/tmp/jnb.tmpmusic.mod";
289 fp = dat_open("jump.mod", datfile_name, "rb");
290 len = dat_filelen("jump.mod", datfile_name);
293 fp = dat_open("bump.mod", datfile_name, "rb");
294 len = dat_filelen("bump.mod", datfile_name);
297 fp = dat_open("scores.mod", datfile_name, "rb");
298 len = dat_filelen("scores.mod", datfile_name);
304 if (Mix_PlayingMusic())
305 Mix_FadeOutMusic(1500);
308 Mix_FreeMusic(current_music);
309 current_music = NULL;
311 tmp = fopen(filename, "wb");
312 for (; len > 0; len--)
313 fputc(fgetc(fp), tmp);
318 current_music = Mix_LoadMUS(filename);
319 if (current_music == NULL) {
320 fprintf(stderr, "Couldn't load music: %s\n", SDL_GetError());
327 char dj_start_mod(void)
331 Mix_FadeInMusic(current_music, -1, 2000);
336 void dj_stop_mod(void)
341 void dj_set_mod_volume(char volume)
343 //Mix_VolumeMusic(volume*4);
346 char dj_load_mod(FILE * file_handle, char *filename, char mod_num)
351 void dj_free_mod(char mod_num)