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;
22 if (Mix_OpenAudio(audio_rate, audio_format, audio_channels, audio_buffers) < 0) {
23 fprintf(stderr, "Couldn't open audio: %s\n", SDL_GetError());
27 Mix_QuerySpec(&audio_rate, &audio_format, &audio_channels);
28 printf("Opened audio at %dHz %dbit %s, %d bytes audio buffer\n", audio_rate, (audio_format & 0xFF), (audio_channels > 1) ? "stereo" : "mono", audio_buffers);
30 Mix_SetMusicCMD(getenv("MUSIC_CMD"));
32 memset(soundsamples, 0, sizeof(soundsamples));
41 Mix_FadeOutMusic(1500);
45 Mix_FreeMusic(current_music);
48 /* for(i = 0; i < 128; i++) {
49 if(soundsamples[i].used && soundsamples[i].chunk)
50 Mix_FreeChunk(soundsamples[i].chunk);
66 char dj_autodetect_sd(void)
71 char dj_set_stereo(char flag)
76 void dj_set_auto_mix(char flag)
80 unsigned short dj_set_mixing_freq(unsigned short freq)
85 void dj_set_dma_time(unsigned short time)
89 void dj_set_nosound(char flag)
101 char dj_set_num_sfx_channels(char num_channels)
106 void dj_set_sfx_volume(char volume)
110 void dj_play_sfx(unsigned char sfx_num, unsigned short freq, char volume, char panning, unsigned short delay, char channel)
115 for (i = 0; i < 128; i++) {
116 if (soundsamples[i].id == sfx_num)
121 else if (!soundsamples[i].used)
123 else if (!soundsamples[i].chunk)
126 used_channel = Mix_PlayChannel(channel, soundsamples[i].chunk, soundsamples[i].loop);
127 Mix_Volume(used_channel, volume * 2);
130 char dj_get_sfx_settings(unsigned char sfx_num, sfx_data * data)
135 data->default_freq = 0;
136 data->default_volume = 0;
139 data->loop_start = 0;
140 data->loop_length = 0;
143 for (i = 0; i < 128; i++) {
144 if (soundsamples[i].id == sfx_num)
149 else if (!soundsamples[i].used)
151 else if (!soundsamples[i].chunk)
154 data->loop = soundsamples[i].loop;
159 char dj_set_sfx_settings(unsigned char sfx_num, sfx_data * data)
163 for (i = 0; i < 128; i++) {
164 if (soundsamples[i].id == sfx_num)
169 else if (!soundsamples[i].used)
171 else if (!soundsamples[i].chunk)
174 soundsamples[i].loop = (data->loop) ? (-1) : (0);
179 void dj_set_sfx_channel_volume(char channel_num, char volume)
181 Mix_Volume(channel_num, volume * 2);
184 void dj_stop_sfx_channel(char channel_num)
186 Mix_HaltChannel(channel_num);
189 char dj_load_sfx(FILE * file_handle, char *filename, int file_length, char sfx_type, unsigned char sfx_num)
199 unsigned short Channels;
200 unsigned long SamplesPerSec;
201 unsigned long AvgBytesPerSec;
202 unsigned short BlockAlign;
203 unsigned short BitsPerSample;
206 unsigned char data[0];
209 wave_file_t *wave_buffer;
212 for (i = 0; (i < 128) && soundsamples[i].used; i++);
216 wave_buffer = (wave_file_t *) malloc(sizeof(wave_file_t) + file_length);
217 memset(wave_buffer, 0, sizeof(wave_file_t) + file_length);
219 strncpy(wave_buffer->RIFF_ID, "RIFF", 4);
220 wave_buffer->riff_size = sizeof(wave_file_t) + file_length - 8;
221 strncpy(wave_buffer->WAVE_ID, "WAVE", 4);
222 strncpy(wave_buffer->FMT_ID, "fmt ", 4);
223 wave_buffer->fmt_size = 16;
224 wave_buffer->FormatTag = 1;
225 wave_buffer->Channels = 1;
228 wave_buffer->SamplesPerSec = SFX_JUMP_FREQ;
231 wave_buffer->SamplesPerSec = SFX_LAND_FREQ;
234 wave_buffer->SamplesPerSec = SFX_DEATH_FREQ;
237 wave_buffer->SamplesPerSec = SFX_SPRING_FREQ;
240 wave_buffer->SamplesPerSec = SFX_SPLASH_FREQ;
243 wave_buffer->SamplesPerSec = SFX_FLY_FREQ;
246 wave_buffer->SamplesPerSec = 22050;
249 wave_buffer->BitsPerSample = 16;
250 wave_buffer->AvgBytesPerSec = wave_buffer->SamplesPerSec * wave_buffer->Channels * (wave_buffer->BitsPerSample / 8);
251 wave_buffer->BlockAlign = 1;
252 strncpy(wave_buffer->DATA_ID, "data", 4);
253 wave_buffer->data_size = file_length;
254 fread(wave_buffer->data, file_length, 1, file_handle);
256 rwop = SDL_RWFromMem(wave_buffer, sizeof(wave_file_t) + file_length);
258 soundsamples[i].chunk = Mix_LoadWAV_RW(rwop, 1);
259 soundsamples[i].chunk->allocated = 1;
260 soundsamples[i].used = 1;
261 soundsamples[i].id = sfx_num;
262 soundsamples[i].loop = 0;
267 void dj_free_sfx(unsigned char sfx_num)
269 if (sfx_num >= 128 || !soundsamples[sfx_num].used)
272 Mix_FreeChunk(soundsamples[sfx_num].chunk);
273 soundsamples[sfx_num].chunk = (Mix_Chunk *) NULL;
274 soundsamples[sfx_num].used = 0;
279 char dj_ready_mod(char mod_num)
283 char filename[] = "jnb.tmpmusic.mod";
285 char filename[] = "/tmp/jnb.tmpmusic.mod";
291 fp = dat_open("jump.mod", datfile_name, "rb");
292 len = dat_filelen("jump.mod", datfile_name);
295 fp = dat_open("bump.mod", datfile_name, "rb");
296 len = dat_filelen("bump.mod", datfile_name);
299 fp = dat_open("scores.mod", datfile_name, "rb");
300 len = dat_filelen("scores.mod", datfile_name);
306 if (Mix_PlayingMusic())
307 Mix_FadeOutMusic(1500);
310 Mix_FreeMusic(current_music);
311 current_music = NULL;
313 tmp = fopen(filename, "wb");
314 for (; len > 0; len--)
315 fputc(fgetc(fp), tmp);
320 current_music = Mix_LoadMUS(filename);
321 if (current_music == NULL) {
322 fprintf(stderr, "Couldn't load music: %s\n", SDL_GetError());
329 char dj_start_mod(void)
333 Mix_FadeInMusic(current_music, -1, 2000);
338 void dj_stop_mod(void)
343 void dj_set_mod_volume(char volume)
345 //Mix_VolumeMusic(volume*4);
348 char dj_load_mod(FILE * file_handle, char *filename, char mod_num)
353 void dj_free_mod(char mod_num)