Esempio n. 1
0
MidiControllerList::MidiControllerList(const MidiControllerList& mcl) : std::map<int, MidiController*>()
{
  for(ciMidiController i = mcl.begin(); i != mcl.end(); ++i)
  {
    MidiController* mc = i->second;
    add(new MidiController(*mc));
  }  
}
Esempio n. 2
0
MidiController* MidiPort::midiController(int num) const
{
	if (_instrument && _device && _device->isSynthPlugin() == false)
	{
		MidiControllerList* mcl = _instrument->controller();
		for (iMidiController i = mcl->begin(); i != mcl->end(); ++i)
		{
			int cn = i->second->num();
			if (cn == num)
				return i->second;
			// wildcard?
			if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (num & ~0xff)))
				return i->second;
		}
	}

	for (iMidiController i = defaultMidiController.begin(); i != defaultMidiController.end(); ++i)
	{
		int cn = i->second->num();
		if (cn == num)
			return i->second;
		// wildcard?
		if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (num & ~0xff)))
			return i->second;
	}


	QString name = midiCtrlName(num);
	int min = 0;
	int max = 127;

	MidiController::ControllerType t = midiControllerType(num);
	switch (t)
	{
		case MidiController::RPN:
		case MidiController::NRPN:
		case MidiController::Controller7:
			max = 127;
			break;
		case MidiController::Controller14:
		case MidiController::RPN14:
		case MidiController::NRPN14:
			max = 16383;
			break;
		case MidiController::Program:
			max = 0xffffff;
			break;
		case MidiController::Pitch:
			max = 8191;
			min = -8192;
			break;
		case MidiController::Velo: // cannot happen
			break;
	}
	MidiController* c = new MidiController(name, num, min, max, 0);
	defaultMidiController.add(c);
	return c;
}
Esempio n. 3
0
void LOS::importController(int channel, MidiPort* mport, int n)
{
    MidiInstrument* instr = mport->instrument();
    MidiCtrlValListList* vll = mport->controller();
    iMidiCtrlValList i = vll->find(channel, n);
    if (i != vll->end())
        return; // controller does already exist
    MidiController* ctrl = 0;
    MidiControllerList* mcl = instr->controller();
    // printf("import Ctrl\n");
    for (iMidiController i = mcl->begin(); i != mcl->end(); ++i)
    {
        MidiController* mc = i->second;
        int cn = mc->num();
        // printf("   %x %x\n", n, cn);
        if (cn == n)
        {
            ctrl = mc;
            break;
        }
        // wildcard?
        if (((cn & 0xff) == 0xff) && ((cn & ~0xff) == (n & ~0xff)))
        {
            ctrl = i->second;
            break;
        }
    }
    if (ctrl == 0)
    {
        printf("controller 0x%x not defined for instrument %s, channel %d\n",
                n, instr->iname().toLatin1().constData(), channel);
        // TODO: register default Controller
        //      MidiController* MidiPort::midiController(int num) const
    }
    MidiCtrlValList* newValList = new MidiCtrlValList(n);
    vll->add(channel, newValList);
}