本文整理汇总了C++中MidiDevice类的典型用法代码示例。如果您正苦于以下问题:C++ MidiDevice类的具体用法?C++ MidiDevice怎么用?C++ MidiDevice使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了MidiDevice类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ModifyControlParameterCommand
void
ControlEditorDialog::slotEdit(QTreeWidgetItem *i, int)
{
RG_DEBUG << "ControlEditorDialog::slotEdit" << endl;
ControlParameterItem *item =
dynamic_cast<ControlParameterItem*>(i);
MidiDevice *md =
dynamic_cast<MidiDevice *>(m_studio->getDevice(m_device));
if (item && md) {
ControlParameterEditDialog dialog
(this,
md->getControlParameter(item->getId()), m_doc);
if (dialog.exec() == QDialog::Accepted) {
ModifyControlParameterCommand *command =
new ModifyControlParameterCommand(m_studio,
m_device,
dialog.getControl(),
item->getId());
addCommandToHistory(command);
}
}
}
示例2:
// 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;
}
示例3: string
std::string
Studio::getSegmentName(InstrumentId id)
{
MidiDevice *midiDevice;
std::vector<Device*>::iterator it;
Rosegarden::InstrumentList::iterator iit;
Rosegarden::InstrumentList instList;
for (it = m_devices.begin(); it != m_devices.end(); ++it)
{
midiDevice = dynamic_cast<MidiDevice*>(*it);
if (midiDevice)
{
instList = (*it)->getAllInstruments();
for (iit = instList.begin(); iit != instList.end(); ++iit)
{
if ((*iit)->getId() == id)
{
if ((*iit)->sendsProgramChange())
{
return (*iit)->getProgramName();
}
else
{
return midiDevice->getName() + " " + (*iit)->getName();
}
}
}
}
}
return std::string("");
}
示例4: return
// From a user selection (from a "Presentation" list) return
// the matching Instrument
//
Instrument*
Studio::getInstrumentFromList(int index)
{
std::vector<Device*>::iterator it;
InstrumentList list;
InstrumentList::iterator iit;
int count = 0;
for (it = m_devices.begin(); it != m_devices.end(); ++it)
{
MidiDevice *midiDevice = dynamic_cast<MidiDevice*>(*it);
if (midiDevice)
{
// skip read-only devices
if (midiDevice->getDirection() == MidiDevice::Record)
continue;
}
list = (*it)->getPresentationInstruments();
for (iit = list.begin(); iit != list.end(); ++iit)
{
if (count == index)
return (*iit);
count++;
}
}
return 0;
}
示例5: getSelectedInstrument
void
MIDIInstrumentParameterPanel::slotSelectProgram(int index)
{
RG_DEBUG << "slotSelectProgram()";
if (!getSelectedInstrument())
return;
MidiDevice *md =
dynamic_cast<MidiDevice *>(getSelectedInstrument()->getDevice());
if (!md)
return;
const MidiProgram *prg = &m_programs[index];
// If there has been no change, bail.
if (getSelectedInstrument()->getProgramChange() == prg->getProgram())
return;
getSelectedInstrument()->setProgramChange(prg->getProgram());
// In Variations mode, select the 0th variation.
// In Variations mode, it's very easy to select an "invalid"
// program change. I.e. one for which the bank is not valid. Go
// from one program/variation to a program that doesn't have that
// variation. We need to handle that here by selecting the 0th
// variation. That's what the user expects.
if (md->getVariationType() == MidiDevice::VariationFromMSB) {
MidiBank bank = getSelectedInstrument()->getProgram().getBank();
// Get the list of MSB variations.
BankList bankList = md->getBanksByLSB(
getSelectedInstrument()->isPercussion(), bank.getLSB());
if (!bankList.empty()) {
// Pick the first MSB variation
getSelectedInstrument()->setMSB(bankList.front().getMSB());
}
}
if (md->getVariationType() == MidiDevice::VariationFromLSB) {
MidiBank bank = getSelectedInstrument()->getProgram().getBank();
// Get the list of LSB variations.
BankList bankList = md->getBanksByMSB(
getSelectedInstrument()->isPercussion(), bank.getMSB());
if (!bankList.empty()) {
// Pick the first LSB variation
getSelectedInstrument()->setLSB(bankList.front().getLSB());
}
}
getSelectedInstrument()->sendChannelSetup();
// Just one change notification for the two potential changes.
// See comments in slotSelectBank() for further discussion.
getSelectedInstrument()->changed();
}
示例6:
void
ModifyDeviceCommand::unexecute()
{
Device *device = m_studio->getDevice(m_device);
if (!device) {
std::cerr << "ERROR: ModifyDeviceCommand::unexecute(): no such device as " << m_device << std::endl;
return;
}
MidiDevice *midiDevice = dynamic_cast<MidiDevice *>(device);
if (!midiDevice) {
std::cerr << "ERROR: ModifyDeviceCommand::unexecute(): device " << m_device << " is not a MIDI device" << std::endl;
return;
}
if (m_rename)
midiDevice->setName(m_oldName);
midiDevice->replaceBankList(m_oldBankList);
midiDevice->replaceProgramList(m_oldProgramList);
midiDevice->replaceControlParameters(m_oldControlList);
midiDevice->replaceKeyMappingList(m_oldKeyMappingList);
midiDevice->setLibrarian(m_oldLibrarianName, m_oldLibrarianEmail);
if (m_changeVariation)
midiDevice->setVariationType(m_oldVariationType);
InstrumentList instruments = midiDevice->getAllInstruments();
for (size_t i = 0; i < instruments.size(); ++i) {
instruments[i]->setProgram(m_oldInstrumentPrograms[i]);
}
// ??? Instead of this kludge, we should be calling a Studio::hasChanged()
// which would then notify all observers (e.g. MIPP) who, in turn,
// would update themselves.
RosegardenMainWindow::self()->uiUpdateKludge();
}
示例7: Device
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();
}
示例8: qstrtostr
bool
ImportDeviceDialog::importFromSF2(QString filename)
{
SF2PatchExtractor::Device sf2device;
try {
sf2device = SF2PatchExtractor::read( qstrtostr(filename) );
// These exceptions shouldn't happen -- the isSF2File call before this
// one should have weeded them out
} catch (SF2PatchExtractor::FileNotFoundException e) {
return false;
} catch (SF2PatchExtractor::WrongFileFormatException e) {
return false;
}
std::vector<MidiBank> banks;
std::vector<MidiProgram> programs;
for (SF2PatchExtractor::Device::const_iterator i = sf2device.begin();
i != sf2device.end(); ++i) {
int bankNumber = i->first;
const SF2PatchExtractor::Bank &sf2bank = i->second;
int msb = bankNumber / 128;
int lsb = bankNumber % 128;
MidiBank bank
(msb == 1, msb, lsb,
qstrtostr(tr("Bank %1:%2").arg(msb).arg(lsb)));
banks.push_back(bank);
for (SF2PatchExtractor::Bank::const_iterator j = sf2bank.begin();
j != sf2bank.end(); ++j) {
MidiProgram program(bank, j->first, j->second);
programs.push_back(program);
}
}
// This is a temporary device, so we can use device and instrument
// IDs that other devices in the Studio may also be using without
// expecting any problems
MidiDevice *device = new MidiDevice
(0, MidiInstrumentBase, "", MidiDevice::Play);
device->replaceBankList(banks);
device->replaceProgramList(programs);
m_devices.push_back(device);
return true;
}
示例9:
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;
}
示例10:
void
AddControlParameterCommand::unexecute()
{
MidiDevice *md = dynamic_cast<MidiDevice *>
(m_studio->getDevice(m_device));
if (!md) {
std::cerr << "WARNING: AddControlParameterCommand::unexecute: device "
<< m_device << " is not a MidiDevice in current studio"
<< std::endl;
return ;
}
md->removeControlParameter(m_id);
}
示例11: fileDoc
bool
ImportDeviceDialog::importFromRG(QString fileName)
{
bool skipAutoload = true, clearCommandHistory = false;
RosegardenDocument fileDoc(RosegardenMainWindow::self(), 0,
skipAutoload, clearCommandHistory);
if (!fileDoc.openDocument(fileName, false)) {
return false;
}
for (int i = 0; i < (int)m_devices.size(); ++i) delete m_devices[i];
m_devices.clear();
DeviceList *list = fileDoc.getStudio().getDevices();
if (list->size() == 0) {
return true; // true because we successfully read the document
}
for (DeviceListIterator it = list->begin(); it != list->end(); ++it) {
MidiDevice *device = dynamic_cast<MidiDevice*>(*it);
if (device) {
std::vector<MidiBank> banks = device->getBanks();
// DMM - check for controllers too, because some users have
// created .rgd files that contain only controllers
// see bug #1183522
//
std::vector<ControlParameter> controllers =
device->getControlParameters();
// We've got a bank on a Device fom this file
// (or a device that contains controllers or key mappings)
//
if (banks.size() ||
controllers.size() ||
device->getKeyMappings().size()) {
m_devices.push_back(new MidiDevice(*device));
}
}
}
return true;
}
示例12:
void
ModifyControlParameterCommand::execute()
{
MidiDevice *md = dynamic_cast<MidiDevice *>
(m_studio->getDevice(m_device));
if (!md) {
std::cerr << "WARNING: ModifyControlParameterCommand::execute: device "
<< m_device << " is not a MidiDevice in current studio"
<< std::endl;
return ;
}
ControlParameter *param = md->getControlParameter(m_id);
if (param)
m_originalControl = *param;
md->modifyControlParameter(m_control, m_id);
}
示例13: int
void
AddControlParameterCommand::execute()
{
MidiDevice *md = dynamic_cast<MidiDevice *>
(m_studio->getDevice(m_device));
if (!md) {
std::cerr << "WARNING: AddControlParameterCommand::execute: device "
<< m_device << " is not a MidiDevice in current studio"
<< std::endl;
return ;
}
md->addControlParameter(m_control, true);
// store id of the new control
m_id = int(md->getControlParameters().size()) - 1;
}
示例14: first
bool
ImportDeviceDialog::importFromLSCP(QString filename)
{
LSCPPatchExtractor::Device lscpDevice;
lscpDevice = LSCPPatchExtractor::extractContent(filename);
std::vector<MidiBank> banks;
std::vector<MidiProgram> programs;
int comparableBankNumber = -1; //Make sure that first bank is read too by comparing to -1 first (invalid bank number)
for (LSCPPatchExtractor::Device::const_iterator i = lscpDevice.begin();
i != lscpDevice.end(); ++i) {
int bankNumber = (*i).bankNumber; //Local variable bankNumber gets value from struct's member bankNumber
std::string bankName = (*i).bankName; //Local variable bankName gets value from struct's member bankName
int msb = bankNumber / 128;
int lsb = bankNumber % 128;
MidiBank bank (msb == 1, msb, lsb, bankName);
if (comparableBankNumber != bankNumber) {
banks.push_back(bank);
comparableBankNumber = bankNumber;
}
MidiProgram program(bank, (*i).programNumber, (*i).programName);
programs.push_back(program);
}
// This is a temporary device, so we can use device and instrument
// IDs that other devices in the Studio may also be using without
// expecting any problems
MidiDevice *device = new MidiDevice
(0, MidiInstrumentBase, "", MidiDevice::Play);
device->replaceBankList(banks);
device->replaceProgramList(programs);
m_devices.push_back(device);
return true;
}
示例15: NamedCommand
CreateOrDeleteDeviceCommand::CreateOrDeleteDeviceCommand(Studio *studio,
DeviceId id) :
NamedCommand(getGlobalName(true)),
m_studio(studio),
m_deviceId(id),
m_deviceCreated(true)
{
Device *device = m_studio->getDevice(m_deviceId);
if (device) {
m_name = device->getName();
m_type = device->getType();
m_direction = MidiDevice::Play;
MidiDevice *md = dynamic_cast<MidiDevice *>(device);
if (md) m_direction = md->getDirection();
m_connection = qstrtostr(RosegardenSequencer::getInstance()
->getConnection(md->getId()));
} else {
RG_DEBUG << "CreateOrDeleteDeviceCommand: No such device as "
<< m_deviceId << endl;
}
}