예제 #1
0
파일: vpiano.cpp 프로젝트: svn2github/vmpk
void VPiano::customEvent ( QEvent *event )
{
    if (event->type() == NoteOnEventType ) {
        NoteOnEvent *ev = static_cast<NoteOnEvent*>(event);
        ui.pianokeybd->showNoteOn(ev->getNote());
        if (m_midiThru) noteOn(ev->getNote());
        event->accept();
    } else if (event->type() == NoteOffEventType ) {
        NoteOffEvent *ev = static_cast<NoteOffEvent*>(event);
        ui.pianokeybd->showNoteOff(ev->getNote());
        if (m_midiThru) noteOff(ev->getNote());
        event->accept();
    } else if (event->type() == ControllerEventType ) {
        ControllerEvent *ev = static_cast<ControllerEvent*>(event);
        updateController(ev->getController(), ev->getValue());
        if (m_midiThru) sendController(ev->getController(), ev->getValue());
        event->accept();
    }
}
void FeedbackManager::playNoteOffEvent(NoteOffEvent event) {
    switch (state) {
    case OFF:
        break;
    case ECHO:
        eatChannelEvent(event);
        break;
    case REPING:
        emit gotNoteOnEvent(NoteOnEvent(event.getTime(), event.getChannel(), event.getNote(), 128));
        events.enqueue(event);
        timer->start(PINGDELAY);
        break;
    case TUNNEL:
        break;
    case PINGPONG:
        emit gotNoteOnEvent(NoteOnEvent(0, 0, 127, 127));
        emit gotNoteOffEvent(NoteOffEvent(0, 0, 127, 0));
        break;
    }
}