MidiDevice::MidiDevice(const MidiDevice &dev) : Device(dev.getId(), dev.getName(), dev.getType()), Controllable(), m_programList(dev.m_programList), m_bankList(dev.m_bankList), m_controlList(dev.m_controlList), m_keyMappingList(dev.m_keyMappingList), m_metronome(0), m_direction(dev.getDirection()), m_variationType(dev.getVariationType()), m_librarian(dev.getLibrarian()), m_allocator(new AllocateChannels(ChannelSetup::MIDI)) { // Create and assign a metronome if required // if (dev.getMetronome()) { m_metronome = new MidiMetronome(*dev.getMetronome()); } // Copy the instruments // InstrumentList insList = dev.getAllInstruments(); InstrumentList::iterator iIt = insList.begin(); for (; iIt != insList.end(); ++iIt) { Instrument *newInst = new Instrument(**iIt); newInst->setDevice(this); m_instruments.push_back(newInst); } // generate presentation instruments generatePresentationList(); }
MidiDevice::MidiDevice(DeviceId id, InstrumentId ibase, const MidiDevice &dev) : Device(id, dev.getName(), Device::Midi), m_programList(dev.m_programList), m_bankList(dev.m_bankList), m_controlList(0), m_keyMappingList(dev.m_keyMappingList), m_metronome(0), m_direction(dev.getDirection()), m_variationType(dev.getVariationType()), m_librarian(dev.getLibrarian()), m_allocator(new AllocateChannels(ChannelSetup::MIDI)) { createInstruments(ibase); // Populate device and Instrument with Controllers. ControlList::const_iterator cIt = dev.m_controlList.begin(); for(; cIt != dev.m_controlList.end(); ++cIt) { addControlParameter(*cIt, true); } // Create and assign a metronome if required // if (dev.getMetronome()) { m_metronome = new MidiMetronome(*dev.getMetronome()); } generatePresentationList(); }
// Run through the Devices checking for MidiDevices and // returning the first Metronome we come across // const MidiMetronome* Studio::getMetronomeFromDevice(DeviceId id) { std::vector<Device*>::iterator it; for (it = m_devices.begin(); it != m_devices.end(); ++it) { std::cerr << "Studio::getMetronomeFromDevice: Having a look at device " << (*it)->getId() << std::endl; MidiDevice *midiDevice = dynamic_cast<MidiDevice*>(*it); if (midiDevice && midiDevice->getId() == id && midiDevice->getMetronome()) { std::cerr << "Studio::getMetronomeFromDevice(" << id << "): device is a MIDI device" << std::endl; return midiDevice->getMetronome(); } SoftSynthDevice *ssDevice = dynamic_cast<SoftSynthDevice *>(*it); if (ssDevice && ssDevice->getId() == id && ssDevice->getMetronome()) { std::cerr << "Studio::getMetronomeFromDevice(" << id << "): device is a soft synth device" << std::endl; return ssDevice->getMetronome(); } } return 0; }
const MidiMetronome * ManageMetronomeDialog::getMetronome(Device *dev) { MidiDevice *md = dynamic_cast<MidiDevice *>(dev); if (md) { return md->getMetronome(); } SoftSynthDevice *ssd = dynamic_cast<SoftSynthDevice *>(dev); if (ssd) { return ssd->getMetronome(); } return 0; }