Exemplo n.º 1
0
static void UltraPlayer(void)
{
    int i, t, control;
    unsigned int start;
    struct VOICE *voice;

    md_player();

    for (t = 0; t < md_numchn; t++) {
	voice = &voices[t];
	if (voice->kick) {
	    voice->kick = 0;
	    if (voice->start > 0)
		gus_do_voice_start_position(t, voice->handle, voice->freq, voice->vol << 8, voice->pan << 6, voice->start << 4);
	    else
		gus_do_voice_start(t, voice->handle, voice->freq, voice->vol << 8, voice->pan << 6);
	} else {
	    if (voice->changes & CH_FREQ)
		gus_do_voice_frequency(t, voice->freq);
	    if (voice->changes & CH_VOL);
	    gus_do_voice_volume(t, voice->vol << 8);
	    if (voice->changes & CH_PAN)
		gus_do_voice_pan(t, voice->pan << 6);
	}
	voice->changes = 0;
    }
    gus_do_wait(1);
}
Exemplo n.º 2
0
void VC_WriteSamples(char *buf,UWORD todo)
{
	int t;
	UWORD part;

	while(todo>0){

		if(TICKLEFT==0){
			md_player();

			TICKLEFT=(125L*md_mixfreq)/(50L*md_bpm);

			/* compute volume, frequency counter & panning parameters for each channel. */

			for(t=0;t<md_numchn;t++){
				int pan,vol,lvol,rvol;

				if(vinf[t].kick){
					vinf[t].current=(vinf[t].start << FRACBITS);
					vinf[t].active=1;
					vinf[t].kick=0;
				}

				if(vinf[t].frq==0) vinf[t].active=0;

				if(vinf[t].active){
					vinf[t].increment=fraction2long(vinf[t].frq,md_mixfreq);

					if(vinf[t].flags & SF_REVERSE) vinf[t].increment=-vinf[t].increment;

					vol=vinf[t].vol;
					pan=vinf[t].pan;

					if(md_mode & DMODE_STEREO){
						lvol= ( vol * (255-pan) ) / 255;
						rvol= ( vol * pan ) / 255;
						vinf[t].lvolmul=(maxvol*lvol)/64;
						vinf[t].rvolmul=(maxvol*rvol)/64;
					}
					else{
						vinf[t].lvolmul=(maxvol*vol)/64;
					}
				}
			}
		}

		part=min(TICKLEFT,todo);

		VC_WritePortion(buf,part);

		TICKLEFT-=part;
		todo-=part;

		buf+=samples2bytes(part);
	}
}
Exemplo n.º 3
0
static void NDS_HW_Update()
{
	/* TODO should be called md_bpm/2.5 times per second? */
	md_player();
	int i;
	DC_FlushRange(ipc, sizeof(*ipc));
	for(i = 0; i < NDS_HW_MAXVOICES; i++) {
		NDS_HW_VOICE* v = ipc->voices + i;
		if(v->changes != 0) {
			MikMod9_SendCommand(
				(NDS_HW_CMD_VOICE_UPDATE << 28) |
				(v->changes << 8) |
				i);
			v->changes = 0;
		}
	}
}