ftp.nice.ch/pub/next/unix/audio/cmusic.bs.N.tar.gz#/src/cmusic/mm.play.c

This is mm.play.c in view mode; [Download] [Up]

#include "mm.head.h"
#include "ug.defs.h"

play(){
 int i; float tstart, tdur, tend;

    BARE0("note ");
    field(fld,SIGS,SBRK); *(Params + 2) = Time = getp2(fld);
    if(Time < Now)SEQ(PLAY);
    if(Time > Now)synthesize();
    field(fld,SIGS,SBRK);
    BARE1("%s ",fld);

    FORLIST(ins, next_ins, inslist)
     if(!strcmp(fld,ins->ins_name))break;
    if(!ins){INS(fld);UNREC;NL;SEMIC;return;}
    LINK(note, next_note, notelist, note_struct);
    tstart = Time;
    note->n_ins = ins->ins_name;
    bc = field(fld,SIGS,SBRK); *(Params + 4) = tdur = getp4(fld);
    *(Params + 0) = tend = tstart + tdur;
    if(tend > Future)Future = tend;

    note->nparams = 4;
    EXTEND(Pp,note->plist,note->nparams+1,float);
    while(bc != ';'){
     float val, *fpt;
	bc = field(fld,SIGS,SBRK); val = expr(fld);
	note->nparams++;
	*(Params + note->nparams) = val;
	EXTEND(fpt,note->plist,note->nparams+1,float);
	*fpt = val;
    }
    BARE0(";\n");
    if(ins->pmax > note->nparams){
     float *fpt;
	EXTEND(fpt, note->plist, ins->pmax+1, float);
	while(ins->pmax > note->nparams){
	    note->nparams++;
	    *(Params + note->nparams) = 0;
	}
    }
    note->n_end = *(note->plist + 0) = tend;
    note->n_start = *(note->plist + 2) = tstart;
    note->n_dur = *(note->plist + 4) = tdur;
    if(ins->dmax)note->dlist = ALLOC(ins->dmax+1, 1, float);
    if(ins->Nn)note->nlist = ALLOC(ins->Nn+1, 1, float);
    if(ins->Nug)note->ug_flags = ALLOC(ins->Nug+1, 1, long);
    for(i = 1; i <= ins->Nug; i++) *(note->ug_flags + i) |= STARTFLAG;
    if(Deferflag){ note->n_flags |= Deferflag; Deferflag = 0 ; }
}

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.