︙ | | |
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
-
+
|
typedef struct {
Uint8*data;
Uint32 len; // length in bytes
} WaveSound;
static Uint8 sound_on;
static Sint16 mmlvolume=9001;
static Sint16 mmlvolume=10000;
static SDL_AudioSpec spec;
static WaveSound*standardsounds;
static Uint16 nstandardsounds;
static WaveSound*usersounds;
static Uint16 nusersounds;
static Uint8**user_sound_names;
static FILE*l_fp;
|
︙ | | |
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
|
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
|
-
+
+
|
}
if(mmlvolume) {
mmltuning=malloc(256*sizeof(Uint32));
if(!mmltuning) fatal("Allocation failed\n");
optionquery[2]=Q_mmlTuning;
if(v=xrm_get_resource(resourcedb,optionquery,optionquery,3)) f=strtod(v,0); else f=440.0;
f*=0x80000000U/(double)spec.freq;
for(i=0;i<256;i++) mmltuning[i]=f*pow(2.0,(i-96)/24.0);
for(i=0;i<190;i++) mmltuning[i]=f*pow(2.0,(i-96)/24.0);
for(i=0;i<64;i++) mmltuning[i+190]=(((long long)(i+2))<<37)/spec.freq;
optionquery[2]=Q_mmlTempo;
if(v=xrm_get_resource(resourcedb,optionquery,optionquery,3)) i=strtol(v,0,10); else i=120;
// Convert quarter notes per minute to samples per sixty-fourth note
mmltempo=(spec.freq*60)/(i*16);
}
fprintf(stderr,"Done.\n");
wavesound=0;
|
︙ | | |
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
|
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
|
-
+
-
+
+
+
+
+
|
if(!m) return;
if(m<511) mmlsound[m+1]=0;
mmlpos=1;
mmltime=mmlsound[1]*mmltempo;
}
void set_sound_effect(Value v1,Value v2) {
static const unsigned char*const builtin[4]={
static const unsigned char*const builtin[8]={
"s.g",
"scdefgab+c-bagfedc-c",
"i1c+c+c+c+c+c+c",
"i1c+c+c+c+c+c+cx",
"-cc'c#d,dd'd#ee'ff'f#",
"sn190n191n192n193n194n195n196n197n198n199n200n201n202n203n204n205n206n207n208n209n210",
"z+c-gec-gec",
"t+c-gec",
"tc-c+d-d+e-e+f-f+g-g",
};
const unsigned char*s;
if(!sound_on) return;
if(!v2.t && !v2.u && (mmlpos || wavesound)) return;
SDL_LockAudio();
wavesound=0;
mmlpos=0;
|
︙ | | |
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
|
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
|
-
+
|
case TY_STRING: case TY_LEVELSTRING:
if(!mmlvolume) break;
if(s=value_string_ptr(v1)) set_mml(s);
break;
case TY_FOR:
// (only used for the sound test)
if(!mmlvolume) break;
set_mml(builtin[v1.u&3]);
set_mml(builtin[v1.u&7]);
break;
}
SDL_UnlockAudio();
}
Uint16 find_user_sound(const char*name) {
int i;
|
︙ | | |
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
|
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
|
-
+
|
char buf[256];
if(main_options['T'] && main_options['v']) {
if(mmltuning) printf("mmltempo=%d; mmlvolume=%d; mmltuning[96]=%d\n",(int)mmltempo,(int)mmlvolume,(int)mmltuning[96]);
for(i=0;i<nusersounds;i++) printf("%d: %s (ptr=%p, len=%d bytes)\n",i,user_sound_names[i],usersounds[i].data,usersounds[i].len);
fflush(stdout);
}
if(!screen) return;
nitems=nusersounds+4;
nitems=nusersounds+8;
columns=(screen->w-16)/240?:1;
scrmax=(nitems+columns-1)/columns;
set_cursor(XC_arrow);
redraw:
SDL_FillRect(screen,0,0x02);
r.x=r.y=0;
r.w=screen->w;
|
︙ | | |