⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sequencemanager.cpp

📁 LINUX下的混音软件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    (MidiInstrumentBase,     MappedEvent::SystemAudioPorts,     ports);    StudioControl::sendMappedEvent(mEports);    MappedEvent mEff    (MidiInstrumentBase,     MappedEvent::SystemAudioFileFormat,     audioFileFormat);    StudioControl::sendMappedEvent(mEff);    // Set the studio from the current document    //    m_doc->initialiseStudio();}voidSequenceManager::panic(){    SEQMAN_DEBUG << "panic button\n";    stopping();    MappedEvent mE(MidiInstrumentBase, MappedEvent::Panic, 0, 0);    emit setProgress(40);    StudioControl::sendMappedEvent(mE);    emit setProgress(100);    //    Studio &studio = m_doc->getStudio();    //    //    InstrumentList list = studio.getPresentationInstruments();    //    InstrumentList::iterator it;    //    //    int maxDevices = 0, device = 0;    //    for (it = list.begin(); it != list.end(); it++)    //        if ((*it)->getType() == Instrument::Midi)    //            maxDevices++;    //    //    emit setProgress(40);    //    //    for (it = list.begin(); it != list.end(); it++)    //    {    //        if ((*it)->getType() == Instrument::Midi)    //        {    //            for (unsigned int i = 0; i < 128; i++)    //            {    //                MappedEvent    //                    mE((*it)->getId(),    //                                MappedEvent::MidiNote,    //                                i,    //                                0);    //    //                StudioControl::sendMappedEvent(mE);    //            }    //    //            device++;    //        }    //    //        emit setProgress(int(90.0 * (double(device) / double(maxDevices))));    //    }    //    //    resetControllers();}voidSequenceManager::showVisuals(const MappedComposition &mC){    MappedComposition::const_iterator it = mC.begin();    if (it != mC.end())        m_transport->setMidiOutLabel(*it);}MappedCompositionSequenceManager::applyFiltering(const MappedComposition &mC,                                MappedEvent::MappedEventType filter){    MappedComposition retMc;    MappedComposition::const_iterator it = mC.begin();    for (; it != mC.end(); it++) {        if (!((*it)->getType() & filter))            retMc.insert(new MappedEvent(*it));    }    return retMc;}void SequenceManager::resetCompositionMmapper(){    SEQMAN_DEBUG << "SequenceManager::resetCompositionMmapper()\n";    delete m_compositionMmapper;    m_compositionMmapper = new CompositionMmapper(m_doc);    resetMetronomeMmapper();    resetTempoSegmentMmapper();    resetTimeSigSegmentMmapper();    resetControlBlockMmapper();}void SequenceManager::resetMetronomeMmapper(){    SEQMAN_DEBUG << "SequenceManager::resetMetronomeMmapper()\n";    delete m_metronomeMmapper;    m_metronomeMmapper = SegmentMmapperFactory::makeMetronome(m_doc);}void SequenceManager::resetTempoSegmentMmapper(){    SEQMAN_DEBUG << "SequenceManager::resetTempoSegmentMmapper()\n";    delete m_tempoSegmentMmapper;    m_tempoSegmentMmapper = SegmentMmapperFactory::makeTempo(m_doc);}void SequenceManager::resetTimeSigSegmentMmapper(){    SEQMAN_DEBUG << "SequenceManager::resetTimeSigSegmentMmapper()\n";    delete m_timeSigSegmentMmapper;    m_timeSigSegmentMmapper = SegmentMmapperFactory::makeTimeSig(m_doc);}void SequenceManager::resetControlBlockMmapper(){    SEQMAN_DEBUG << "SequenceManager::resetControlBlockMmapper()\n";    m_controlBlockMmapper->setDocument(m_doc);}bool SequenceManager::event(QEvent *e){    if (e->type() == QEvent::User) {        SEQMAN_DEBUG << "SequenceManager::event() with user event\n";        if (m_updateRequested) {            SEQMAN_DEBUG << "SequenceManager::event(): update requested\n";            checkRefreshStatus();            m_updateRequested = false;        }        return true;    } else {        return QObject::event(e);    }}void SequenceManager::update(){    SEQMAN_DEBUG << "SequenceManager::update()\n";    // schedule a refresh-status check for the next event loop    QEvent *e = new QEvent(QEvent::User);    m_updateRequested = true;    QApplication::postEvent(this, e);}void SequenceManager::checkRefreshStatus(){    SEQMAN_DEBUG << "SequenceManager::checkRefreshStatus()\n";    // Look at trigger segments first: if one of those has changed, we'll    // need to be aware of it when scanning segments subsequently    TriggerSegmentRec::SegmentRuntimeIdSet ridset;    Composition &comp = m_doc->getComposition();    SegmentRefreshMap newTriggerMap;    for (Composition::triggersegmentcontaineriterator i =                comp.getTriggerSegments().begin();            i != comp.getTriggerSegments().end(); ++i) {        Segment *s = (*i)->getSegment();        if (m_triggerSegments.find(s) == m_triggerSegments.end()) {            newTriggerMap[s] = s->getNewRefreshStatusId();        } else {            newTriggerMap[s] = m_triggerSegments[s];        }        if (s->getRefreshStatus(newTriggerMap[s]).needsRefresh()) {            TriggerSegmentRec::SegmentRuntimeIdSet &thisSet = (*i)->getReferences();            ridset.insert(thisSet.begin(), thisSet.end());            s->getRefreshStatus(newTriggerMap[s]).setNeedsRefresh(false);        }    }    m_triggerSegments = newTriggerMap;    SEQMAN_DEBUG << "SequenceManager::checkRefreshStatus: segments modified by changes to trigger segments are:" << endl;    int x = 0;    for (TriggerSegmentRec::SegmentRuntimeIdSet::iterator i = ridset.begin();            i != ridset.end(); ++i) {        SEQMAN_DEBUG << x << ": " << *i << endl;        ++x;    }    std::vector<Segment*>::iterator i;    // Check removed segments first    for (i = m_removedSegments.begin(); i != m_removedSegments.end(); ++i) {        processRemovedSegment(*i);    }    m_removedSegments.clear();    SEQMAN_DEBUG << "SequenceManager::checkRefreshStatus: we have "    << m_segments.size() << " segments" << endl;    // then the ones which are still there    for (SegmentRefreshMap::iterator i = m_segments.begin();            i != m_segments.end(); ++i) {        if (i->first->getRefreshStatus(i->second).needsRefresh() ||                ridset.find(i->first->getRuntimeId()) != ridset.end()) {            segmentModified(i->first);            i->first->getRefreshStatus(i->second).setNeedsRefresh(false);        }    }    // then added ones    for (i = m_addedSegments.begin(); i != m_addedSegments.end(); ++i) {        processAddedSegment(*i);    }    m_addedSegments.clear();}void SequenceManager::segmentModified(Segment* s){    SEQMAN_DEBUG << "SequenceManager::segmentModified(" << s << ")\n";    bool sizeChanged = m_compositionMmapper->segmentModified(s);    SEQMAN_DEBUG << "SequenceManager::segmentModified() : size changed = "    << sizeChanged << endl;    if ((m_transportStatus == PLAYING) && sizeChanged) {        QByteArray data;        QDataStream streamOut(data, IO_WriteOnly);        streamOut << (QString)m_compositionMmapper->getSegmentFileName(s);        streamOut << (size_t)m_compositionMmapper->getSegmentFileSize(s);        SEQMAN_DEBUG << "SequenceManager::segmentModified() : DCOP-call sequencer remapSegment"        << m_compositionMmapper->getSegmentFileName(s) << endl;        rgapp->sequencerSend("remapSegment(QString, size_t)", data);    }}void SequenceManager::segmentAdded(const Composition*, Segment* s){    SEQMAN_DEBUG << "SequenceManager::segmentAdded(" << s << ")\n";    m_addedSegments.push_back(s);}void SequenceManager::segmentRemoved(const Composition*, Segment* s){    SEQMAN_DEBUG << "SequenceManager::segmentRemoved(" << s << ")\n";    m_removedSegments.push_back(s);    std::vector<Segment*>::iterator i = find(m_addedSegments.begin(), m_addedSegments.end(), s);    if (i != m_addedSegments.end())        m_addedSegments.erase(i);}void SequenceManager::segmentRepeatChanged(const Composition*, Segment* s, bool repeat){    SEQMAN_DEBUG << "SequenceManager::segmentRepeatChanged(" << s << ", " << repeat << ")\n";    segmentModified(s);}void SequenceManager::segmentRepeatEndChanged(const Composition*, Segment* s, timeT newEndTime){    SEQMAN_DEBUG << "SequenceManager::segmentRepeatEndChanged(" << s << ", " << newEndTime << ")\n";    segmentModified(s);}void SequenceManager::segmentEventsTimingChanged(const Composition*, Segment * s, timeT t, RealTime){    SEQMAN_DEBUG << "SequenceManager::segmentEventsTimingChanged(" << s << ", " << t << ")\n";    segmentModified(s);    if (s && s->getType() == Segment::Audio && m_transportStatus == PLAYING) {        QByteArray data;        rgapp->sequencerSend("remapTracks()", data);    }}void SequenceManager::segmentTransposeChanged(const Composition*, Segment *s, int transpose){    SEQMAN_DEBUG << "SequenceManager::segmentTransposeChanged(" << s << ", " << transpose << ")\n";    segmentModified(s);}void SequenceManager::segmentTrackChanged(const Composition*, Segment *s, TrackId id){    SEQMAN_DEBUG << "SequenceManager::segmentTrackChanged(" << s << ", " << id << ")\n";    segmentModified(s);    if (s && s->getType() == Segment::Audio && m_transportStatus == PLAYING) {        QByteArray data;        rgapp->sequencerSend("remapTracks()", data);    }}void SequenceManager::segmentEndMarkerChanged(const Composition*, Segment *s, bool){    SEQMAN_DEBUG << "SequenceManager::segmentEndMarkerChanged(" << s << ")\n";    segmentModified(s);}void SequenceManager::processAddedSegment(Segment* s){    SEQMAN_DEBUG << "SequenceManager::processAddedSegment(" << s << ")\n";    m_compositionMmapper->segmentAdded(s);    if (m_transportStatus == PLAYING) {        QByteArray data;        QDataStream streamOut(data, IO_WriteOnly);        streamOut << m_compositionMmapper->getSegmentFileName(s);        if (!rgapp->sequencerSend("addSegment(QString)", data)) {            m_transportStatus = STOPPED;        }    }    // Add to segments map    int id = s->getNewRefreshStatusId();    m_segments.insert(SegmentRefreshMap::value_type(s, id));}void SequenceManager::processRemovedSegment(Segment* s){    SEQMAN_DEBUG << "SequenceManager::processRemovedSegment(" << s << ")\n";    QString filename = m_compositionMmapper->getSegmentFileName(s);    m_compositionMmapper->segmentDeleted(s);    if (m_transportStatus == PLAYING) {        QByteArray data;        QDataStream streamOut(data, IO_WriteOnly);        streamOut << filename;        if (!rgapp->sequencerSend("deleteSegment(QString)", data)) {            // failed            m_transportStatus = STOPPED;        }    }    // Remove from segments map    m_segments.erase(s);}void SequenceManager::endMarkerTimeChanged(const Composition *, bool /*shorten*/){    SEQMAN_DEBUG << "SequenceManager::endMarkerTimeChanged()\n";    m_compositionMmapperResetTimer->start(500, true); // schedule a composition mmapper reset in 0.5s}void SequenceManager::timeSignatureChanged(const Composition *){    resetMetronomeMmapper();}void SequenceManager::trackChanged(const Composition *, Track* t){    SEQMAN_DEBUG << "SequenceManager::trackChanged(" << t << ", " << (t ? t->getPosition() : -1) << ")\n";    m_controlBlockMmapper->updateTrackData(t);    if (m_transportStatus == PLAYING) {        QByteArray data;        rgapp->sequencerSend("remapTracks()", data);    }}void SequenceManager::trackDeleted(const 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -