コード例 #1
0
ファイル: SCC.c プロジェクト: AntonLanghoff/whitecatlib
//_______________________________________________________________________
static Boolean GetByte (SCCPtr scc, Byte *c)
{
	if (MidiStreamGetByte(&scc->xmt, c))
		return true;
	else {
		MidiEvPtr e = Pop(&scc->seq);
		if (e) {
			e = MidiStreamPutEvent	(&scc->xmt, e);
			if (e) MidiTask (KeyOffTask, Date(e), 0, (long)scc, (long)e, 0);
			return MidiStreamGetByte(&scc->xmt, c);
		}
	}
	return false;
}
コード例 #2
0
//_______________________________________________________________________
static void KeyOffTask (long date, short refNum, long a1,long a2,long a3)
{
	MidiEvPtr e = (MidiEvPtr)a1;
	DrvMemPtr mem = (DrvMemPtr)a2;
	Ev2StreamPtr f = &mem->outFifo;
	Byte c;

	MidiStreamPutEvent (f, e);
	while (MidiStreamGetByte (f, &c)) {
		write (mem->devId, &c, 1);
	}
}
コード例 #3
0
//_______________________________________________________________________
static void RcvAlarm (short refNum)
{
	DrvMemPtr mem = GetData ();
	Ev2StreamPtr f = &mem->outFifo;
	MidiEvPtr off, e = MidiGetEv (refNum);
	Byte c;
	
	while (e) {
		off = MidiStreamPutEvent (f, e);
		while (MidiStreamGetByte (f, &c)) {
			write (mem->devId, &c, 1);
		}
		if (off) MidiTask (KeyOffTask, Date(off), refNum, (long)off, (long)mem, 0);
		e = MidiGetEv (refNum);
	}
}
コード例 #4
0
ファイル: msMidiInOut.c プロジェクト: informatimago/midishare
//_________________________________________________________
static void SendSmallEv(SlotPtr slot, MidiEvPtr e, sendState* state)
{ 
	MIDIPacketList* pktlist = (MIDIPacketList*)state->packetBuffer;
	MIDIPacket* packet = MIDIPacketListInit(pktlist);
	unsigned char * ptr = state->evBuffer;
	OSErr err;
	int n = 0;
  	 
	e = MidiStreamPutEvent (&state->outsmall, e);
	if (e) MidiTask (KOffTask, Date(e), gRefNum, (long)e, (long)slot, 0); // typeNote
	
	while (MidiStreamGetByte (&state->outsmall, ptr++)) {n++;}
	
	MIDIPacketListAdd(pktlist,sizeof(state->packetBuffer),packet,MIDIGetCurrentHostTime(),n,state->evBuffer);
	err = MIDISend(slot->port,slot->dest,pktlist);
	if (err != noErr) fprintf(stderr, "MIDISend : error %ld\n", err);
}
コード例 #5
0
ファイル: msMidiInOut.c プロジェクト: informatimago/midishare
//_________________________________________________________
static void SendSysExAux(SlotPtr slot)
{
	int i,bytestosend;
	unsigned char* ptr;
	OSErr err;

	// Prepare bytes
	bytestosend = min(MAX_SYSEX_BYTES,slot->remaining);
	slot->remaining-= bytestosend;
	ptr = slot->data;
	for (i = 0 ; i < bytestosend ; i++) MidiStreamGetByte (&slot->outsysex, ptr++);
 	
	// Init completion structure
	slot->request.destination = slot->dest;
	slot->request.data = slot->data;
	slot->request.bytesToSend = bytestosend;
	slot->request.complete = FALSE;
	slot->request.completionProc = CompletionProc;
	slot->request.completionRefCon = slot;
	
	err = MIDISendSysex(&slot->request);
	if (err != noErr) fprintf(stderr, "MIDISendSysex : error %ld\n", err);
 }