Exemple #1
0
int prArray_OSCBytes(VMGlobals *g, int numArgsPushed)
{
	PyrSlot* a = g->sp;
	PyrObject *array = a->uo;
	PyrSlot* args = array->slots;
	int numargs = array->size;
	if (numargs < 1) return errFailed;
	big_scpacket packet;

	if (IsFloat(args) || IsNil(args) || IsInt(args)) {
		makeSynthBundle(&packet, args, numargs, false);
	} else if (IsSym(args) || isKindOfSlot(args, class_string)) {
		makeSynthMsgWithTags(&packet, args, numargs);
	} else {
		return errWrongType;
	}

	int size = packet.size();
	PyrInt8Array* obj = newPyrInt8Array(g->gc, size, 0, true);
	obj->size = size;
	memcpy(obj->b, packet.data(), size);
	SetObject(a, (PyrObject*)obj);
	//for (int i=0; i<packet.size()/4; i++) post("%d %08X\n", i, packet.buf[i]);

	return errNone;
}
Exemple #2
0
static PyrInt8Array* MsgToInt8Array ( sc_msg_iter msg )
{
	int size = msg.getbsize() ;
	VMGlobals *g = gMainVMGlobals ;
	PyrInt8Array *obj = newPyrInt8Array ( g->gc , size , 0 , true ) ;
	obj->size = size ;
	msg.getb ( (char *)obj->b , obj->size ) ;
	return obj ;
}
static void scCallSysexAction(PyrSymbol* action, int recoverFromUID) {
	VMGlobals *g = gMainVMGlobals;
	if(recoverFromUID) { // rebuild the VM so sc won't crash with two following calls
		++g->sp; SetObject(g->sp, s_midiin->u.classobj); // Set the class MIDIIn
		++g->sp; SetInt(g->sp,  recoverFromUID); //src
		++g->sp;
	}
	PyrInt8Array* sysexArray = newPyrInt8Array(g->gc, (int)gSysexData.size(), 0, true);
	sysexArray->size = (int)gSysexData.size();
	std::copy(gSysexData.begin(), gSysexData.end(), sysexArray->b);
	SetObject(g->sp, (PyrObject*) sysexArray);			// chan argument unneeded as there
	runInterpreter(g, action, 3 );			// special sysex action in the lang
}
Exemple #4
0
int prAsArchive(struct VMGlobals *g, int numArgsPushed)
{
	PyrSlot *a = g->sp;

	PyrArchiver<char*> arch(g);

	int err = arch.prepareToWriteArchive(a);
	if (err) return err;

	int32 size = arch.calcArchiveSize();

	PyrInt8Array *obj = newPyrInt8Array(g->gc, size, 0, true);
	obj->size = size;
	arch.setStream((char*)obj->b);
	err = arch.writeArchive();

	if (err == errNone) SetObject(a, obj);
	else SetNil(a);

	return err;
}