void PianoScene::keyOff(const int note) { if (m_keys.contains(note)) keyOff(m_keys.value(note)); else triggerNoteOff(note, m_velocity); }
void PianoScene::keyOff(const int note) { if (note >=0 && note < m_keys.size()) keyOff(m_keys[note]); else triggerNoteOff(note, m_velocity); }
bool PianoScene::event(QEvent *event) { switch(event->type()) { case QEvent::TouchBegin: case QEvent::TouchEnd: case QEvent::TouchUpdate: { QTouchEvent *touchEvent = static_cast<QTouchEvent*>(event); QList<QTouchEvent::TouchPoint> touchPoints = touchEvent->touchPoints(); foreach(const QTouchEvent::TouchPoint& touchPoint, touchPoints) { switch (touchPoint.state()) { case Qt::TouchPointReleased: { PianoKey* key = getKeyForPos(touchPoint.scenePos()); if (key != NULL && key->isPressed()) { keyOff(key, touchPoint.pressure()); } break; } case Qt::TouchPointPressed: { PianoKey* key = getKeyForPos(touchPoint.scenePos()); if (key != NULL && !key->isPressed()) { keyOn(key, touchPoint.pressure()); } break; } case Qt::TouchPointMoved: { PianoKey* key = getKeyForPos(touchPoint.scenePos()); PianoKey* lastkey = getKeyForPos(touchPoint.lastScenePos()); if ((lastkey != NULL) && (lastkey != key) && lastkey->isPressed()) { keyOff(lastkey, touchPoint.pressure()); } if ((key != NULL) && !key->isPressed()) { keyOn(key, touchPoint.pressure()); } break; } default: break; } } break; } default: return QGraphicsScene::event(event); } event->accept(); return true; }
void PianoScene::keyReleaseEvent ( QKeyEvent * keyEvent ) { if ( !m_rawkbd && !keyEvent->isAutoRepeat() ) { // ignore auto-repeats int note = getNoteFromKey(keyEvent->key()); if (note > -1) keyOff(note); } keyEvent->accept(); }
void PianoScene::mouseReleaseEvent ( QGraphicsSceneMouseEvent * mouseEvent ) { m_mousePressed = false; PianoKey* key = getKeyForPos(mouseEvent->scenePos()); if (key != NULL && key->isPressed()) { keyOff(key); mouseEvent->accept(); return; } mouseEvent->ignore(); }
void ADSREnvOld::updateEvent( UINT16 inputId, FLOAT value ) { if( inputId == MIDI_GATE ) { if( value > 0 ) { keyOn(); } else { keyOff(); } } }
SWIGEXPORT jint JNICALL Java_com_dsp_1faust_dsp_1faustJNI_keyOff(JNIEnv *jenv, jclass jcls, jint jarg1) { jint jresult = 0 ; int arg1 ; int result; (void)jenv; (void)jcls; arg1 = (int)jarg1; result = (int)keyOff(arg1); jresult = (jint)result; return jresult; }
void PianoScene::mouseMoveEvent ( QGraphicsSceneMouseEvent * mouseEvent ) { if (m_mousePressed) { PianoKey* key = getKeyForPos(mouseEvent->scenePos()); PianoKey* lastkey = getKeyForPos(mouseEvent->lastScenePos()); if ((lastkey != NULL) && (lastkey != key) && lastkey->isPressed()) { keyOff(lastkey); } if ((key != NULL) && !key->isPressed()) { keyOn(key); } mouseEvent->accept(); return; } mouseEvent->ignore(); }
void ADSREnv::setParameter( UINT16 paramId, FLOAT value, FLOAT modulation, INT16 voice ) { voice = min( numVoices_-1, voice ); switch( paramId ) { case PARAM_GATE: if( voice > -1 ) { FLOAT velo = value * modulation + ( 1 - modulation ); value > 0.0f ? keyOn( velo, voice ) : keyOff( voice ); break; } case PARAM_ATTACK: setAttackRate( value, voice ); break; case PARAM_DECAY: setDecayRate( value, voice ); break; case PARAM_SUSTAIN: setSustainLevel( value, voice ); break; case PARAM_RELEASE: setReleaseRate( value, voice ); break; } }
void MergeRefSection::scanFile( MergeFile * file, uint_8 indx, RefLineCol & absLnCol ) //------------------------------------------------------------ { uint_32 unitLength; // length of ref info for this compunit uint_32 user; // referencing die uint_32 dependant; // referenced die uint_32 fileIdx; // containing file int_32 linecoldelta; // line / column delta uint_32 linecol; // absolute line / column uint_8 opcode; // state-machine op-code uint_32 offset = 0; // offset into the ref-section for this file MergeDIE * die; // the user / dependent die RefLineCol currLnCol; // registers if this is the only file bool replaced; // true if the scope is dead MergeOffset keyOff(indx,0); // key to search in reloc table unitLength = file->readDWord( DR_DEBUG_REF, offset ); while( offset < unitLength + sizeof(uint_32) ) { opcode = file->readByte( DR_DEBUG_REF, offset ); switch( opcode ) { case REF_BEGIN_SCOPE: user = file->readDWord( DR_DEBUG_REF, offset ); keyOff.offset = user; die = _info.getReloc().getReloc( keyOff ); #if INSTRUMENTS if( die == NULL ) { Log.printf( "Could not find user DIE <Target: %hd, source: %#lx>!\n", indx, user ); } #endif InfoAssert( die != NULL ); replaced = (die->offset().offset != keyOff.offset); if( replaced ) { skipDeadScope( file, offset, unitLength + sizeof(uint_32), currLnCol ); } else { _outFile->writeByte( opcode ); _outFile->writeDWord( die->getNewOff() ); } break; case REF_SET_FILE: _outFile->writeByte( opcode ); fileIdx = file->readULEB128( DR_DEBUG_REF, offset ); fileIdx = _line.getNewFileIdx( indx, fileIdx ); _outFile->writeULEB128( fileIdx ); break; case REF_SET_LINE: _outFile->writeByte( opcode ); linecol = file->readULEB128( DR_DEBUG_REF, offset ); _outFile->writeULEB128( linecol ); absLnCol.setLine( linecol ); currLnCol.setLine( linecol ); break; case REF_SET_COLUMN: _outFile->writeByte( opcode ); linecol = file->readULEB128( DR_DEBUG_REF, offset ); _outFile->writeULEB128( linecol ); absLnCol.setColumn( linecol ); currLnCol.setColumn( linecol ); break; case REF_ADD_LINE: _outFile->writeByte( opcode ); linecoldelta = file->readSLEB128( DR_DEBUG_REF, offset ); currLnCol.addLine( linecoldelta ); linecoldelta = currLnCol.line - absLnCol.line; absLnCol.addLine( linecoldelta ); _outFile->writeSLEB128( linecoldelta ); break; case REF_ADD_COLUMN: _outFile->writeByte( opcode ); linecoldelta = file->readSLEB128( DR_DEBUG_REF, offset ); currLnCol.addColumn( linecoldelta ); linecoldelta = currLnCol.col - absLnCol.col; absLnCol.addColumn( linecoldelta ); _outFile->writeSLEB128( linecoldelta ); break; case REF_COPY: case REF_END_SCOPE: _outFile->writeByte( opcode ); break; case REF_CODE_BASE: default: /* special opcode */ dependant = file->readDWord( DR_DEBUG_REF, offset ); keyOff.offset = dependant; die = _info.getReloc().getReloc( keyOff ); #if 0 if( die == NULL ) { die = _info.find( MergeOffset( indx, dependant ) ); } #endif #if INSTRUMENTS if( die == NULL ) { Log.printf( "Could not find dependant die <Target: %hd, dependent: %#lx>!\n", indx, dependant ); Log.printf( " user == <Target: %hd, source: %#lx>!", indx, user ); MergeDIE * usedie; usedie = _info.getReloc().getReloc( MergeOffset( indx, user ) ); #if 0 if( !usedie ) { usedie = _info.find( MergeOffset( indx, user ) ); } #endif if( usedie ) { Log.printf( " %s\n", (const char *)(*usedie) ); } else { Log.printf( "\n" ); } fprintf( stderr, "Could not find dependant die!\n" ); continue; } #endif InfoAssert( die != NULL ); currLnCol.codeBase( opcode ); if( currLnCol.line < absLnCol.line || (currLnCol.line - absLnCol.line) > (255 - REF_CODE_BASE) / REF_COLUMN_RANGE ) { absLnCol.setLine( currLnCol.line ); _outFile->writeByte( REF_SET_LINE ); _outFile->writeULEB128( currLnCol.line ); } if( currLnCol.line == absLnCol.line ) { if( (currLnCol.col < absLnCol.col) || (currLnCol.col - absLnCol.col) >= REF_COLUMN_RANGE ) { absLnCol.setColumn( currLnCol.col ); _outFile->writeByte( REF_SET_COLUMN ); _outFile->writeULEB128( currLnCol.col ); } } else { if( (currLnCol.col) >= REF_COLUMN_RANGE ) { absLnCol.setColumn( currLnCol.col ); _outFile->writeByte( REF_SET_COLUMN ); _outFile->writeULEB128( currLnCol.col ); } } opcode = absLnCol.makeCodeBase( currLnCol.line, currLnCol.col ); _outFile->writeByte( opcode ); _outFile->writeDWord( die->getNewOff() ); } } }