From d0f6ed6af9c6f48387eb4a46a63a35cc10e04c59 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 25 Apr 2011 15:49:09 +0000 Subject: inserting notes with a length which is too small for the current quantisation setting is now handled new note's velocity and release-velocity can be set --- muse2/muse/midiedit/scoreedit.cpp | 47 ++++++++++++++++++++++++++++++++++----- muse2/muse/midiedit/scoreedit.h | 6 +++++ 2 files changed, 48 insertions(+), 5 deletions(-) diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 60558c91..f5633e43 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -250,6 +250,25 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) nlast_action->setChecked(true); menu_command(CMD_NOTELEN_LAST); + newnote_toolbar->addSeparator(); + + newnote_toolbar->addWidget(new QLabel(tr("Velocity:"), newnote_toolbar)); + QSpinBox* velo_spinbox = new QSpinBox(this); + velo_spinbox->setRange(0, 127); + velo_spinbox->setSingleStep(1); + connect(velo_spinbox, SIGNAL(valueChanged(int)), score_canvas, SLOT(set_newnote_velo(int))); + newnote_toolbar->addWidget(velo_spinbox); + velo_spinbox->setValue(64); + + newnote_toolbar->addWidget(new QLabel(tr("Off-Velocity:"), newnote_toolbar)); + QSpinBox* velo_off_spinbox = new QSpinBox(this); + velo_off_spinbox->setRange(0, 127); + velo_off_spinbox->setSingleStep(1); + connect(velo_off_spinbox, SIGNAL(valueChanged(int)), score_canvas, SLOT(set_newnote_velo_off(int))); + newnote_toolbar->addWidget(velo_off_spinbox); + velo_off_spinbox->setValue(64); + + QToolBar* quant_toolbar = addToolBar(tr("Quantisation settings")); newnote_toolbar->setObjectName("Quantisation settings"); @@ -523,6 +542,9 @@ ScoreCanvas::ScoreCanvas(ScoreEdit* pr, QWidget* parent_widget, //called again. but for safety... set_pixels_per_whole(300); //same as above. but safety rocks + set_newnote_velo(64); + set_newnote_velo_off(64); + dragging_staff=false; @@ -2858,11 +2880,18 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) Event newevent(Note); newevent.setPitch(y_to_pitch(y,tick, staff_it->clef)); - newevent.setVelo(64); //TODO - newevent.setVeloOff(64); //TODO + newevent.setVelo(newnote_velo); + newevent.setVeloOff(newnote_velo_off); newevent.setTick(relative_tick); newevent.setLenTick((new_len>0)?new_len:last_len); + if (flo_quantize(newevent.lenTick(), quant_ticks()) <= 0) + { + newevent.setLenTick(quant_ticks()); + cout << "DEBUG: inserted note's length would be invisible after quantisation (too short)." << endl << + " setting it to " << newevent.lenTick() << endl; + } + if (newevent.endTick() > curr_part->lenTick()) { cout << "DEBUG: clipping inserted note from len="<