diff -Nru muse-2.0~rc2/al/CMakeLists.txt muse-2.0/al/CMakeLists.txt --- muse-2.0~rc2/al/CMakeLists.txt 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/al/CMakeLists.txt 2012-06-30 19:24:42.000000000 +0200 @@ -44,7 +44,7 @@ ## Define target ## add_library(al ${MODULES_BUILD} - ${PROJECT_BINARY_DIR}/all.h.pch + ${PROJECT_BINARY_DIR}/all.h ${al_source_files} ) diff -Nru muse-2.0~rc2/al/sig.cpp muse-2.0/al/sig.cpp --- muse-2.0~rc2/al/sig.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/al/sig.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -82,7 +82,6 @@ { if (s.z == 0 || s.n == 0) { printf("illegal signature %d/%d\n", s.z, s.n); - // Added by Tim. return; } tick = raster1(tick, 0); diff -Nru muse-2.0~rc2/AUTHORS muse-2.0/AUTHORS --- muse-2.0~rc2/AUTHORS 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/AUTHORS 2012-06-30 19:24:43.000000000 +0200 @@ -1,19 +1,80 @@ -Muse -This software has been brought to you by: ++-------------------------------------------+ +| MusE | +| This software has been brought to you by: | ++-------------------------------------------+ Name: user: users sourceforge net --------------- --------- -Administrator: -Werner Schweer wschweer -Developers: -Nil Geisweiller a-lin -Frank Neumann franky -Mathias Lundgren lunar_shuttle -Joachim Schiele qknight +Active Developers: + Robert Jonsson spamatica Tim Donnelly terminator356 Orcan Ogetbil ogetbilo Florian Jung flo93 + +Former Developers: + +Werner Schweer wschweer +Nil Geisweiller a-lin +Frank Neumann franky +Mathias Lundgren lunar_shuttle +Joachim Schiele qknight + Fluidsynth logo designed by Josh "Swami" Green. + + + ++------------------+ +| PGP Public Keys: | ++------------------+ + +Florian Jung: +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: GnuPG v1.4.10 (GNU/Linux) + +mQENBE/A9gcBCADKNwa/lSJRz73Vfs+IKmmltxnHqGZQvYGJ32nDQny04hdSzlOQ +XVqyZHYDREpbXHnAPtANJTPozQVWoegxsC9ePEvydw3ezMO9P7hDjanXZvd4egHY +VLR9ZpLvFx7WJDxTQqD1Zaa4sA7ZzSdDu9kv/Bc8Qx2Qtur5T67THV8Pr8izSFSN +MKqR5X5fKqkN0+54hTDnj1YguIloYPKVI6+ns9RGOgvbys4rC1X1EqXdkkRXv3OT +r98udsWNlq+FMmwR+igfzi8+B79V3OAmqUDtpNBAnGgmRW1N6mzv47jRjSX72Ev2 +3HI8GXM2rxrsUyjDuDfgGG2rA0KDnWGpwHZLABEBAAG0JEZsb3JpYW4gSnVuZyA8 +Zmxvcmlhbi5hLmp1bmdAZ214LmRlPokBPgQTAQIAKAUCT8D2BwIbIwUJCWYBgAYL +CQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQc931Ar+c+qX3GAgAuFsDSSItndVq +mPeMtjnQDinWAx//trezRoc3puC4mlrvr8dHD6cZ4n/1dPr58kuuGmS9+CzcDgdo +7HGiY1+rXyZIS2K18Z/YurIfJk7ZRr2QNv0aiuvz5JUh/TunV6OrUqapBb2XBgtW +lDIDlFMQmWQ+pUq3g4FbjWgdoAJp3BDKniO2fAGqBSrWqLFllFhBI/RChdoVWD2v +hbYQw+msbZ/cZjx6rDceOxsYr/ltXmfIHTVNpkQ/B9W84xHT64vqW9Z1wKbJ7yOs +vf1qQ72h6yOTP4Ru17hY6oFNdFkIkkwmJPEmRC0hn2MnvvYOhgl6HwAJc+MM4W/D +5X2lO73StLQkRmxvcmlhbiBKdW5nIDxmbG9yaWFuLmEuanVuZ0B3ZWIuZGU+iQE+ +BBMBAgAoBQJP7gyJAhsjBQkJZgGABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAK +CRBz3fUCv5z6pZPQB/sHAU2Z1LBVQ+ECw5OygLxXhLJOJzbDmoZpbEMrqkndcDLq +80eyiTx6YfccwqA4NbNItfwMIlVBXg3uCUK9fRKWV3J4BC7geJtkDL2K+7Z/qpbF +V65OnghJtSyLYVSpKInEsKKAmNMZATZsnkdDrdJ7u953eLw1Y5W8aEa+1n4PYG2d +jxySbeMLbvfVDrmDwl87RSH1EpuGQCFX0hNqWpUN9OLmx8IP8/j6/jv9U9+2bqbN +up0O2AkKLNezkGZcXVUzhC8NECd0LTsrGNmSuVo632U2Q0v/AIAAMetqlHfk1DSx +zzB1hNoca6Yosd/+NTnz8jvDqWBiG8aTjU5fdfijtCpGbG9yaWFuIEp1bmcgPGZs +bzkzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD6JAT4EEwECACgFAk/uEfYCGyMFCQlm +AYAGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJEHPd9QK/nPqlHcgH/23gHsd3 +JYUhxAatuVCz1RCcy+iURIBd1Do0kCxCyQVF0NA7Y98AOTLJoyFPNB2Koq0CYunG +InKGKZN8NFCDUFCmSkNu88PkjDRfNKWCq69z/nfE2OlyvEdAdmWn0FY89VFMvhUj +NvG9n8g7s8tZciymRny4otjQjPOEmZUZyt5qm4KPfY58R/F+H1AF0E5V0pjwkBrV +ItI3tsw15bKrvzFddU6pwospRNbyb2dcuedRSbSttnehXGR5w5rr41Myp3slQNVt +TVbJedjWVQWK5ImIzYj8SRmG+dCXIL75RiWE72ctiy65MN8h/gG1PX/Dt/E3f2vG +GaBRR0EHueE9ShK5AQ0ET8D2BwEIAMZEvoloCudmQEZ2L7L6FwzfULDyV1dFojbZ +YiPXXKe4sYrFf7TK5dUsOIsBxQUcUANPzCpFOw84Ii2A7FRDYMzUfyb+KP9vXIVE +W84WQI6zILN3YowhIa+bSTkQEx+7nn2JORnQp74goxxWKY9HaTtN3v6LgjseljSk +YxEh8nLo9l1W3d9AYuMNmSv3amzC+p7P66E/+iFGjmKw0Nlb6eJL9iYkFGt+wjgM +jbm7Rvheq95xtJpYcw6/1iqN7uQdup5ZwAk+PQhDOnM0DAZtbim20OujUP+imUot +oEJAfG1QojKQqn6hr9hz6i/2BdJNwiss4d6ywILryJUnTFzWypcAEQEAAYkBJQQY +AQIADwUCT8D2BwIbDAUJCWYBgAAKCRBz3fUCv5z6paB3B/9UISZmdmZD5ExQan1b +W7Mz/ZvrJe+3jun1C5/ZADvBRgKBYfTA7GbwL6x963ovUXzyWUN16GH7KQca4yaq +oneJk55s9DBXHzcICtSwnojZVXiZEK1765lna8lFvYEBjYWNR7upR4RlwH7N1P1V +AVJ8yNJwNNjUu86CJMZ4rVXIie/o/Y/L2PEHZYiXSDfQtxEBKapXjbN2MP1DK4iq +LexeEJLanIxyWKe1KHFE1W2iPnzVgqfvqv6LuIcMY6vy8/lRXrlne6nEXabMu9tN +EoTXpkh0hYQzx3WP+CIutORts95i6aBAlo5Cv/67z5xBffeWCp9dmt30rlr/JIYy +kkXE +=iCVh +-----END PGP PUBLIC KEY BLOCK----- + diff -Nru muse-2.0~rc2/awl/posedit.cpp muse-2.0/awl/posedit.cpp --- muse-2.0~rc2/awl/posedit.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/awl/posedit.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -31,6 +31,7 @@ #include #include #include +#include namespace MusEGlobal { extern int mtcType; @@ -48,6 +49,10 @@ PosEdit::PosEdit(QWidget* parent) : QAbstractSpinBox(parent) { + _returnMode = false; + cur_minute = cur_sec = cur_frame = cur_subframe = 0; + cur_bar = cur_beat = cur_tick = 0; + validator = new QIntValidator(this); initialized = false; @@ -58,20 +63,6 @@ //connect(this, SIGNAL(returnPressed()), SLOT(enterPressed())); } -// What was this for? Tim. -/* -void* PosEdit::operator new(size_t n) - { - void* p = new char[n]; - memset(p, 0, n); - return p; - } -*/ - -PosEdit::~PosEdit() - { - } - QSize PosEdit::sizeHint() const { //QFontMetrics fm(font()); @@ -100,7 +91,11 @@ { //printf("key press event Return\n"); //enterPressed(); - finishEdit(); + bool changed = finishEdit(); + if(changed || _returnMode) // Force valueChanged if return mode set, even if not modified. + { + emit valueChanged(_pos); + } emit returnPressed(); emit editingFinished(); return true; @@ -115,6 +110,7 @@ // choose to clear it in their constructor." // Just to be sure. Otherwise escape will close a midi editor for example, which is annoying. ke->setAccepted(true); + emit escapePressed(); return true; } @@ -190,7 +186,8 @@ { QFocusEvent* fe = static_cast(event); QAbstractSpinBox::focusOutEvent(fe); - finishEdit(); + if(finishEdit()) + emit valueChanged(_pos); emit lostFocus(); emit editingFinished(); return true; @@ -220,12 +217,29 @@ //--------------------------------------------------------- void PosEdit::setValue(const MusECore::Pos& time) - { +{ if(_pos == time) - return; - _pos = time; - updateValue(); + { + // Must check whether actual values dependent on tempo or sig changed... + if (_smpte) { + int minute, sec, frame, subframe; + time.msf(&minute, &sec, &frame, &subframe); + if(minute != cur_minute || sec != cur_sec || frame != cur_frame || subframe != cur_subframe) + updateValue(); + } + else { + int bar, beat, tick; + time.mbt(&bar, &beat, &tick); + if(bar != cur_bar || beat != cur_beat || tick != cur_tick) + updateValue(); + } + } + else + { + _pos = time; + updateValue(); } +} void PosEdit::setValue(const QString& s) { @@ -247,15 +261,12 @@ { char buffer[64]; if (_smpte) { - int minute, sec, frame, subframe; - _pos.msf(&minute, &sec, &frame, &subframe); - sprintf(buffer, "%03d:%02d:%02d:%02d", minute, sec, frame, subframe); + _pos.msf(&cur_minute, &cur_sec, &cur_frame, &cur_subframe); + sprintf(buffer, "%03d:%02d:%02d:%02d", cur_minute, cur_sec, cur_frame, cur_subframe); } else { - int bar, beat; - int tick; - _pos.mbt(&bar, &beat, &tick); - sprintf(buffer, "%04d.%02d.%03d", bar+1, beat+1, tick); + _pos.mbt(&cur_bar, &cur_beat, &cur_tick); + sprintf(buffer, "%04d.%02d.%03d", cur_bar+1, cur_beat+1, cur_tick); } lineEdit()->setText(buffer); } @@ -357,9 +368,9 @@ // fixup //--------------------------------------------------------- -void PosEdit::fixup(QString& input) const +void PosEdit::fixup(QString& /*input*/) const { - printf("fixup <%s>\n", input.toLatin1().constData()); // REMOVE Tim. + //printf("fixup <%s>\n", input.toLatin1().constData()); } //--------------------------------------------------------- @@ -652,9 +663,10 @@ //--------------------------------------------------------- // finishEdit +// Return true if position changed. //--------------------------------------------------------- -void PosEdit::finishEdit() +bool PosEdit::finishEdit() { // If our validator did its job correctly, the entire line edit text should be valid now... @@ -665,7 +677,7 @@ if(sl.size() != 4) { printf("finishEdit smpte string:%s sections:%d != 4\n", text().toLatin1().data(), sl.size()); - return; + return false; } MusECore::Pos newPos(sl[0].toInt(), sl[1].toInt(), sl[2].toInt(), sl[3].toInt()); @@ -680,7 +692,7 @@ if(sl.size() != 3) { printf("finishEdit bbt string:%s sections:%d != 3\n", text().toLatin1().data(), sl.size()); - return; + return false; } MusECore::Pos newPos(sl[0].toInt() - 1, sl[1].toInt() - 1, sl[2].toInt()); @@ -691,11 +703,7 @@ } } - if (changed) - { - //updateValue(); - emit valueChanged(_pos); - } + return changed; } diff -Nru muse-2.0~rc2/awl/posedit.h muse-2.0/awl/posedit.h --- muse-2.0~rc2/awl/posedit.h 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/awl/posedit.h 2012-06-30 19:24:43.000000000 +0200 @@ -44,7 +44,10 @@ bool _smpte; MusECore::Pos _pos; bool initialized; - + bool _returnMode; + int cur_minute, cur_sec, cur_frame, cur_subframe; + int cur_bar, cur_beat, cur_tick; + QIntValidator* validator; virtual void paintEvent(QPaintEvent* event); @@ -52,16 +55,16 @@ virtual StepEnabled stepEnabled() const; virtual void fixup(QString& input) const; virtual QValidator::State validate(QString&, int&) const; - void updateValue(); int curSegment() const; virtual bool event(QEvent*); - void finishEdit(); + bool finishEdit(); signals: void valueChanged(const MusECore::Pos&); - // Choose these three carefully, watch out for focusing recursion. + // Choose these carefully, watch out for focusing recursion. void returnPressed(); + void escapePressed(); void lostFocus(); // This is emitted when focus lost or return pressed (same as QAbstractSpinBox). void editingFinished(); @@ -73,13 +76,14 @@ public: PosEdit(QWidget* parent = 0); - ~PosEdit(); QSize sizeHint() const; MusECore::Pos pos() const { return _pos; } void setSmpte(bool); bool smpte() const { return _smpte; } - // void* operator new(size_t); // What was this for? Tim. + void setReturnMode(bool v) { _returnMode = v; } + bool returnMode() const { return _returnMode; } + void updateValue(); }; } diff -Nru muse-2.0~rc2/awl/sigedit.cpp muse-2.0/awl/sigedit.cpp --- muse-2.0~rc2/awl/sigedit.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/awl/sigedit.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -45,6 +45,8 @@ slash = new QLabel("/",this); zSpin = new SigSpinBox(this); nSpin = new SigSpinBox(this); + zSpin->setFocusPolicy(Qt::StrongFocus); + nSpin->setFocusPolicy(Qt::StrongFocus); zSpin->setRange(1,100); nSpin->setDenominator(); nSpin->setRange(1,128); @@ -54,11 +56,12 @@ layout->addWidget(zSpin); layout->addWidget(slash); layout->addWidget(nSpin); - layout->addSpacing(30); connect(zSpin, SIGNAL(valueChanged(int)), SLOT(setZ(int))); connect(nSpin, SIGNAL(valueChanged(int)), SLOT(setN(int))); connect(nSpin, SIGNAL(returnPressed()), SIGNAL(returnPressed())); connect(zSpin, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(nSpin, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(zSpin, SIGNAL(escapePressed()), SIGNAL(escapePressed())); connect(zSpin, SIGNAL(moveFocus()), SLOT(moveFocus())); connect(nSpin, SIGNAL(moveFocus()), SLOT(moveFocus())); @@ -72,7 +75,6 @@ delete nSpin; } - //--------------------------------------------------------- // moveFocus //--------------------------------------------------------- diff -Nru muse-2.0~rc2/awl/sigedit.h muse-2.0/awl/sigedit.h --- muse-2.0~rc2/awl/sigedit.h 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/awl/sigedit.h 2012-06-30 19:24:43.000000000 +0200 @@ -44,7 +44,7 @@ class SigEdit : public QWidget { Q_OBJECT - + AL::TimeSignature _sig; bool initialized; QLabel *slash; @@ -58,6 +58,7 @@ signals: void valueChanged(const AL::TimeSignature&); void returnPressed(); + void escapePressed(); private slots: void setN(const int n); @@ -71,8 +72,8 @@ public: SigEdit(QWidget* parent = 0); ~SigEdit(); - AL::TimeSignature sig() const { return _sig; } + void setFrame(bool v) { zSpin->setFrame(v); nSpin->setFrame(v); } }; } diff -Nru muse-2.0~rc2/awl/sigspinbox.cpp muse-2.0/awl/sigspinbox.cpp --- muse-2.0~rc2/awl/sigspinbox.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/awl/sigspinbox.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -8,8 +8,7 @@ class MyLineEdit : public QLineEdit { public: - MyLineEdit() : QLineEdit() {}; - MyLineEdit(QWidget* parent) : QLineEdit(parent) {}; + MyLineEdit(QWidget* parent = 0) : QLineEdit(parent) {}; protected: virtual void mousePressEvent (QMouseEvent* e) @@ -19,10 +18,10 @@ } }; - SigSpinBox::SigSpinBox(QWidget *parent) : QSpinBox(parent) { + setKeyboardTracking(false); _denominator=false; setLineEdit(new MyLineEdit(this)); } @@ -31,9 +30,14 @@ { switch (ev->key()) { case Qt::Key_Return: + QSpinBox::keyPressEvent(ev); emit returnPressed(); return; break; + case Qt::Key_Escape: + emit escapePressed(); + return; + break; case Qt::Key_Left: case Qt::Key_Right: case Qt::Key_Slash: diff -Nru muse-2.0~rc2/awl/sigspinbox.h muse-2.0/awl/sigspinbox.h --- muse-2.0~rc2/awl/sigspinbox.h 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/awl/sigspinbox.h 2012-06-30 19:24:43.000000000 +0200 @@ -16,6 +16,7 @@ signals: void returnPressed(); + void escapePressed(); void moveFocus(); public slots: diff -Nru muse-2.0~rc2/ChangeLog muse-2.0/ChangeLog --- muse-2.0~rc2/ChangeLog 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/ChangeLog 2012-06-30 19:24:43.000000000 +0200 @@ -1,3 +1,322 @@ +30.06.2012: + ======================================= + * 2.0 tagged (rj) + ======================================= + - Emergency crash fix: In automation popup midi control 'Clear' item. (Tim) + Cannot delete any actions from menu due to recent December PopupMenu fixes. +29.06.2012: + - Fixed file dialog: disable 'read configuration' for midi files. (Tim) + - Updated swedish translation (rj) + - reworked the REC button somewhat (rj) +28.06.2012: + - External sync fixes: Now have user-selectable of clock filtering and quantization. (Tim) + - Fixed clicking tempo master does not update wave parts. Allow SC_MASTER to call canvas->partsChanged. (Tim) + - Fixed problems with recorded wave part and event sizes, and 'past end' indicator. (Tim) + - Don't resize or destroy wave events upon part resize. (Tim) + - Init support for controlling midi engine from Jack timebase master. Completely disabled for now. (Tim) +26.06.2012: + - Added updated Czech translation from Pavel Fric[pavelfric@seznam.cz] (rj) +23.06.2012: + - automation graphs: deletion with middle-click, fixed automation (flo93) + editing. +18.06.2012: + - Removed printouts about no longer supported VST implementation, + use DSSI implementation instead (rj) + - Some preparations for 2.0 (rj) +16.06.2012: + - MusE as Jack Timebase master: Corrected ticks_per_beat and bar_start_tick fields. (Tim) + - Fixed bug by Geoff B and Flo: Changing a midi port device: We are only interested in altering + tracks using the port being changed in the midi port list. And don't change channel. (Tim) +15.06.2012: + * Sync fix: MusE now records tempo changes from externally clocked midi. (Tim) + Still experimental but non-intrusive: You will be asked at the end of recording if you + want to transfer the recorded tempos to the master tempo graph. + Tested OK so far with ALSA and Jack midi. Best results ATM may be when recording from + position 0, not 'continuing' a recording or skipping 'fwd' or 'rew'. + TODO: Record Jack timebase changes! Find patch someone sent years ago, likely still useful... +11.06.2012: + - Finally! Audio controller playback has smooooth frame resolution even with large audio buffers. (Tim) + CtrlList::value() now accepts a nextFrame*, filled with next event frame, which the + plugin and dssi process use to determine the run sizes. + Bonus! This processing is now guaranteed to be ALIGNED with user's chosen minimum control processing + period in Settings. Before, it was occasionally going to 1, 2, 4 frame runs etc., was not good. + TODO: Sorry, track audio/pan have no 'variable run length' support yet. Choppy with large buffers. + Tip: If a ping-pong effect is desired, try a plugin for now! + - Increased default minimum controller period from 64 to 256. Tests showed 256 is just fine, smooth. +10.06.2012: + - Add midi-to-audio control popups to right-click automation menus. (Tim) + - Track list audio automation popup now can stay open, for colour and 'clear' items. (Tim) +08.06.2012: + * Merge: From branch r2_0_extra. (Tim) + - More automation fixes. In AudioTrack::processAutomationEvents, optimize integer, bool, + discrete controller types to avoid multiple dots on flat straight-line graph segments. (Tim) + - Replaced Song::controllerChange() with a lower-level + CtrlList::guiUpdatePending()/clearGuiUpdatePending(). Checked and cleared in + Song::beat() at the nice slow heartbeat rate instead of direct calls to QWidget::update(). + This means ALL controls should update their graphs now, and at a more reasonable rate. (Tim) + - ARVT_STOP automation events are also recorded now + - When clicking sliders in the plugin's native GUIs or the + mixer with SHIFT held down, straight lines are drawn (no + intermediate control points are recorded) + TODO: does not yet work for muse-native, but customized GUIs (flo) +07.06.2012: + - More automation fixes. (Tim) +06.06.2012: + - Another midi-to-audio mapper classes rewrite. (Tim) +05.06.2012: + - Rewrote midi-to-audio control mapper classes. (Tim...) + - Added save and load midi-to-audio settings. + - Remap or remove mappers when rack items moved or removed. +04.06.2012: + - Side branch r2_0_extra, copied from release_2_0: + * Feature: Midi control of audio paramters. (Tim) + - More important timing, accuracy fixes. +03.06.2012: + - Merged documentation from local source to repository LaTeX document, 80% done (rj) +27.05.2012: + * Timing, resolution, accuracy, and automation fixes: (Tim) + - Ask audio driver for 'its' current system time instead of wallclock in utils.cpp:curTime(). + Reason: Jack's clock source can be wallclock, cycle counter, HPET etc. + TODO: Try more Jack time functions for accuracy in Audio::framesSinceCycleStart etc. + - Fixed automation 'manual' slider values: Update them from automation values at the current time + when switching to automation OFF. After some recent changes by me, the 'manual' values were + left 'independent' of the automation values. While this had interesting effects, the value + would 'jump' back to the manual value when switching to OFF, which became disconcerting. + The best solution, in muse_evolution (from where I adopted the previous changes), was to + continuously update the manual values during process, but there may be too many controllers, + so this was the other lesser option. + - All audio/plugin GENERIC gui controls now record their automation at FRAME resolution. + Previously the timestamps were ticks converted to frames (lossy). Now they are true frames. + This means these recorded graphs can be much denser with vertices now, if needed. + - Querying of plugin controller values in DssiSynthIF::getData, PluginI::apply, and volume/pan + controllers in AudioTrack::copyData/addData is now done at a more proper and accurate + frame time instead of wallclock-based queries via AudioTrack::volume/pan/pluginCtrlVal. + (Sorry, this does not mean frame accuracy on playback yet.) + - Menu 'Take automation snapshot' now operates with frame resolution. Added a warning message as well. + - Menu 'Clear automation' enabled and implemented. Added a warning message as well. + - DSSI synths: Fixed errors with Pitch controller on playback. Removed AND'ing of 0x3FFF in + CTRL_PITCH section of DssiSynthIF::processEvent. +20.05.2012: + - MusE can now compile with clang/llvm via -DCMAKE_CXX_COMPILER=clang++ flag to cmake. (Orcan) + - Update some URLs in README. (Orcan) +18.05.2012: + - Added Czech translation by Pavel Fric[pavelfric@seznam.cz] (rj) + - fixed native GUIs not updating (flo93) + - removed _guiUpdate{Program,Control[]} + - OscIF now stores the native GUI's state + - OscIF doesn't send control changes if they don't differ from the + native GUI's state (until enforced) +08.05.2012: + - ladspa/dssi/simplesynth controls: Fixed logarithmic defaults. (Tim) + Use log not log10 in plugin.cpp:ladspaDefaultValue(). + - ladspa/dssi/simplesynth controls: A better default than 1.0 if none found, compute from upper/lower. (Tim) + In plugin.cpp:ladspaDefaultValue(). TODO: simplesynth controls still wrong. + - ladspa: TAP Reverberator built-in MusE GUI: Fixed wet/dry infinity display "---". (Tim) + Added DoubleLabel 'offValue' Qt property. Set in file 2142.ui +07.05.2012: + - DSSI: Fixed second of two crashes when operating controls while playing notes. (Tim) + Just ignore rare out-of-order events. +06.05.2012: + - Added automation right-click remove point and printout with current value, also started + working towards editing multiple points (rj) + - Fixed crash bug in pianoroll when using arrow keys on an empty part (rj) + - DSSI: Fixed one of two crashes when operating controls while playing notes. WIP on other (rarer) crash. (Tim) +05.05.2012: + * Updated .ts translation files in repository. Updated with -no-obsolete to + trim away lots of unused strings (rj) +04.05.2012: + *Added: -A switch: "Force inclusion of ALSA midi even if using Jack". (Tim...) + - Fixed intermittent Jack crash at startup with jack <= 1.9.8. Fixed in Jack 1.9.9 + - Rearranged main.cpp, moved a few init items into it from app.cpp + - Fixed "Jack calling while audio disconnected" errors at startup. + - Fixed LASH leak: Added lash_args_destroy(). + - Fixed icons leak: Destroy all icons. + - Fixed function dialogs leak: Created with NULL parent. + - Removed QApplication::setColorSpec() call. Caused "pixmap is not an X11 class pixmap" errors. + - Fixed style changing problems (transparent MDI windows, other artifacts). Requires restart! +03.05.2012: + - Fixed crash bug with coloring of iR button on aux strip (it does not have one) (rj) +24.04.2012: + - Changed automation drawing in arranger to be more forgiving + shift no longer needed and it's not needed to be too close + to the line. TODO: some cleanup (rj) +23.04.2012: + - Global Settings: Start song: Changed to allow other templates. (Tim) + * Please revisit this setting or start with clean config so MusE can + initialize the box with the global default.med file. +22.04.2012: + - Duplicate Tracks: Fixed routing bug. (Tim) + In tracks' ::internal_assign(), don't call msgAddRoute, push_back the route node, + because caller later calls msgAddTrack which 'mirrors' that single routing node. + Exception: Audio Input and Output still need to call msgAddRoute which connects to Jack. + May still cause audio processing problems ? + - Added colorhints to iR and oR routing buttons (rj) +21.04.2012: + - Templates: File dialog: Added 'read Midi Port Configuration' box. (Tim) + - File dialog: Unset 'read Midi Port Configuration' box for Global folder, set for others. (Tim) + - File dialog: Made side bar buttons auto-exclusive. Some fixes, cleanups. (Tim) +19.04.2012: + - Reverted yesterdays description change, now shows label again (rj) + - Added tooltips to trackInfo which shows additional info for synths (rj) + - Fixed focus for tempo and signature widgets and patch selector in midi track info (rj) + - Fixed RJ's focus fixes. Now tempo/sig toolbar has proper Smart Focus and works in all related windows. (Tim) + - Removed Smart Focus restart requirement in Settings. Rewrote some silly signal connects. (Tim) +18.04.2012: + - Prefer native GUI for plugins when double clicking in the rack (rj) + - Prefer description instead of label in synth name in track list, it's more descriptive (rj) + - Grayed out "copy plugins" in duplicate track dialog since it's not finished (rj) +17.04.2012: + - Added gcc4.7 patch from Matthias Klose (rj) + - Added -Werror=format-security from Alessio Treglia (rj) +16.04.2012: + - Fixed some bugs in swedish translation (rj) +14.04.2012: + - Optimize some QByteArray usages and use length() instead of taking strlen(). (Tim) +12.04.2012: + - Add new 'type' column to LADSPA browser, add tooltips to AO, AI CO, CI, IP, ID columns. (Tim) +09.04.2012: + - Feature request: Allow loading of DSSI synths (those with a run*_synth* function) in LADSPA browser. (Tim) +07.04.2012: + - Fixed bug with drawing of song position toolbar (rj) +25.03.2012: + - Added "beautifying" frame to the song position toolbar, hope that looks nicer + for all :) (rj) +24.03.2012: + - Fixed memory leaks in the undo system. Removed unused ModifyTrack action (flo93) + - Swapped usage of oPart and nPart in the undo system. this was completely + braindead: oPart was assigned the nPart_-ctor-parameter and vice versa (flo93) + - Removed unused UndoOp-ctors (flo93) + - Code cleanups in undo.cpp (flo93) + - changed some sharing-menu-debug-messages from debugMsg to heavyDebugMsg (flo93) + - added a copy-ctor to Part which increases the eventlist's refcounter (flo93) + - NPart stores serial number (flo93) + - Changed locale loading to use system setting instead of keyboard setting (rj) +23.03.2012: + - Changed file loading to use .toLocal8Bit instead of .toAscii seems to + fix issues to load files with local chars like åäö in the name (rj) + - Fixed invalid reads/writes/deletes when having the cliplist editor open: + there was a funny mixture of reference-counting smartpointers and normal, + "dumb" pointers, and some pieces of the code relies on the smartpointers + to delete stuff automatically (which was correct), other pieces just deleted + stuff, regardless of the refcount. + now everything using SndFile uses refcounting. HOWEVER this created a MEMORY + LEAK: when recording to a wave track (this creates a SndFile, refcount=1), + then undoing this (this doesn't delete, but only stashes away the part and + so the smart pointer), then opening a new song (this doesn't delete the stashed + away part and so the smart pointer, so refcount never drops to zero) the SndFile + is never deleted. (flo93) + - Made the DidYouKnow dialog actually work, add lines to share/didyouknow.txt (rj) +20.03.2012: + - arranger's part canvas now doesn't display thin slivers for + parts of hidden tracks (flo93) + - Header::write/readStatus now uses the save/restoreState functions, + simplifying the code and storing column widths as well (flo93) + - removed unused and non-working updateTListHeader function (flo93) + - PixmapButton (red LEDs, and Delta Mode): Eat up context menu events. (Tim) + - Class SpinBox, DoubleSpinBox, Dentry: Change to consistent "ctrl-double-click on/off". (Tim) +19.03.2012: + - added customizable columns to the arranger (cherry-pick from trunk) (flo93) + - added song-position toolbar (cherry-pick from trunk) (flo93) + - added tempo- and sig-toolbar (cherry-pick from trunk) (flo93) + - moved redundant toolbar generation (undo etc) from the various + topwins into TopWin (cherry-pick from trunk) (flo93) + - column state is now stored into the global config, not + into the song file (flo93) + - Song load: Arranger MDI window: Fixed size restoration. (Tim) + In TopWin::readStatus(), if mdisubwin is maximized, restore it before setting pos and height. + - Changed reporting of bad timing a bit to possibly make it clearer what the problem is + and what to do about it (rj) +18.03.2012: + - Delta/absolute mode button: Improved behaviour. (Tim) + - Transport and NoteInfo toolbar positional editors: Fixed not updating when tempo or sig changed. (Tim) + In PosEdit::setValue(), checking different value is not enough. Must check whether resultant msf or mbt values changed. + TODO: updateValue() is now public so it can be called externally but it is not used yet - make NoteInfo and Transport + use it instead of setValue(). +16.03.2012: + - Drum editor: Added missing multiple-note editing. (Tim...) + - Midi editors: Don't allow notes to be added before part. (Caused crash in Drum editor, odd behaviour in Pianoroll.) + - Midi editors: Added "Delta Mode" button to Note Info toolbar. + - Code cleanups in Pianoroll, Drum editor. +15.03.2012: + - Updated swedish translation with help from Cristian Ramos (rj) +10.03.2012: + - Track routing: Fixed duplicate routes: Reverted usage of operation group in Song::addTrack. (Tim) + - Templates: Default routing: Restored default Jack out/in routes in audio.med, synti.med, default.med, monorecord.med. (Tim) + - Switch from LIB_PATH_SUFFIX to LIB_SUFFIX, and from CMAKE_INSTALL_LIBDIR to LIB_INSTALL_DIR in CMakeLists.txt. Still fall + back to CMAKE_INSTALL_LIBDIR if it is specified explicitly instead of LIB_INSTALL_DIR. (Orcan) + - Fix cmake warning in simpledrums when CMAKE_BUILD_TYPE is not set. (Orcan) +09.03.2012: + - Track list: Popup editors: Pre-select text. (Tim) + - Track list channel popup editor: Eat up dbl-clcks if already open. Caused pseudo 'wrapping' if disabled arrows dbl-clicked. (Tim) +08.03.2012: + * Comprehensive focus fixes: (Tim...) + * New: Gui behaviour option: "Smart Focus": All toolbar boxes give focus back to respective canvases. + (Most boxes except Score Velo On/Off changed to StrongFocus, for non-focused wheel support.) + - Focusing + tabbing fixes: Exclusions, tightening of tab sequences. + - !! Most spinboxes now wait until return pressed !! For example the Song Length box. + - PianoRoll toolbar: Fixed auto-repeats - optimized NoteInfo::setDeltaMode(). + - Midi boxes: Fixed Ctrl-click on/off. + - Master Editor: Fixed can't edit if not enabled. Also Transport sig box. + - TracK Info panel: Fixed Scrolling. TODO: Make step sizes reasonable, same as Pianoroll ScrollBox. + TODO: Scroll when tabbing among the Track Info controls ! + - Track List key handling: Fixed TList::moveSelection(). + - Visible Tracks: Drums and Synths: Fixed Track::isVisible(). + - Track List, and Master Editor: Fixed popup editors. Sizing fixes. Use no frames. + - Event List Editor: Fixed not updating when parts modified. + - Pianoroll and Drum Editor: Fixed not updating sometimes ex. moving part past end of song. + (Was returning prematurely from songChanged() coding if they got SC_SOLO.) +23.02.2012: + - Compile fix in pyapi.cpp (Orcan) + - Don't optimize debug builds of simpledrums (Orcan) +13.02.2012: + - CMake build system: Added cached variable LIB_PATH_SUFFIX, may be set to 64 so that installed library path is lib64 or whatever. (Tim) +12.02.2012: + - Midi: Force events in play event list to be sent when playing, even if redundant. TODO: Fix sending controllers during seek. (By Tim...) + - Midi revert: MidiPort::setMidiDevice(): Send controllers in song to synths. Synths were not restoring vol for ex. My old bad. + - Fluid: Fixed pitch input: Add 8192. + - Fluid + Fluidsynth + SimpleDrums: ::processEvent(): Don't return true for controllers (why?). Was causing multiple send attempts. + - SimpleDrums: Fixed too-short plugin chooser: In ctor SS_PluginGui rem'd a couple of height-fixing lines. Hm, FIXME - was OK before. + - Midi ports config window: Allow default output channel column to unselect all channels ie. no default output channels at all. +31.01.2012: + - Jack Midi: Added missing midi sync output functions start/stop/SPP etc. (By Tim...) + TODO: Give its own clock, currently it's driven by ALSA clock. TODO: ALSA clock out seems badly broken. + - Jack Midi: Fixed Song Position Pointer sync input larger than 10 bars. + - ALSA: Seek sends wrong CCs. putMidiEvent() not respecting CTRL_PROGRAM and CTRL_PITCH. (Thanks to Dennis Schulmeister). + - Routing popup: Fixed crash with empty ports. + - Jack Midi: Fixed crashes/lockups when 'Use Jack Transport' off. Completely re-wrote Jack dummy tranport sync to behave like Jack. + - Midi:Increased MIDI_FIFO_SIZE to 4096 and MIDI_REC_FIFO_SIZE to 256. + - Midi: Sustain: Fixed inhibit/re-enable on stop/play. Also added during seek to quiet things down. + - Midi: Don't send controllers during seek if part or track muted or off. + - Midi: Send controllers during seek only if a change occurred - but force sending if at position 0, or value exists at current position. + - ALSA Revert: Removed recent MidiAlsaDevice::playEventFifo. Hm, too cautious? + - Midi sync: Removed redundant and too-early 'continue' commands. Audio::startRolling already properly does this when sync 'ready to roll'. + - Midi: Fixed timing error. MEvent::operator<() Put same-time note-ons after controllers so that program comes before notes! (For example). + - Jack Midi: Fixed timing error: Reserve multi-events at same frame-time, NOT at successive frames. (Otherwise nightmare to sort stuff.) + - Midi Revert: Re-installed ALSA sequencer thread SEQM_SEEK and SEQM_STOP, and revert code to call them from audio thread. + TODO: Option "Don't use ALSA midi". Midi thread gets in the way of Jack. But ironically ALSA + long-period Audio timing currently best! + - Midi sync: Song saving: Fixed slight typo saving MMC sync: Was using MRT not MMC. +26.01.2012: + - Fixed crash with drag/drop copying plugins when their gui was open (rj) + - Fixed mid clicking to change aux value (rj) +25.01.2012: + - Fixed some focus stealing that prevented shortcuts from working for Snap dialog and Plugin rack (rj) +24.01.2012: + - Removed QT_USE_QTNSPLUGIN from CMakeLists.txt (rj) +15.01.2012: + - Added instrument definitions for "KORG microSTATION" sent + in by Marko Nikolic (flo) +14.01.2012: + - Added "write topwin state" checkbox (flo) +12.01.2012: + - Added Czech translation from Pavel Fric (rj) +11.01.2012: + - Complain more if timing source isn't good enough (rj) +10.01.2012: + - Store default style so we can do an immediate recall when setting 'keep system style' (rj) +07.01.2012: + - Added choice to keep system GUI style (rj) +07.01.2012: + - Fixed compile errors if not configured for OSC or DSSI. (Tim) 07.01.2012: - MusE 2.0 release candidate 2 released (rj) 06.01.2012: @@ -1348,7 +1667,6 @@ * Renamed: Soft synth configuration changed to Synth configuration, as per patch from Geoff King (rj) * Fixed: Shortcuts with modifier keys wasn't working for global shortcuts, should be now (rj) * Added: Shortcuts for changing len of events, default Ctrl+Shift+Left/Right (rj) ->>>>>>> .r459 10.08.2010 * Fixed/Changed: Grid reacts to midi resolution change (rj) 01.08.2010 diff -Nru muse-2.0~rc2/CMakeLists.txt muse-2.0/CMakeLists.txt --- muse-2.0~rc2/CMakeLists.txt 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/CMakeLists.txt 2012-06-30 19:24:43.000000000 +0200 @@ -31,10 +31,22 @@ cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) -# set libdir if not use -DCMAKE_INSTALL_LIBDIR -if (NOT CMAKE_INSTALL_LIBDIR) - SET(CMAKE_INSTALL_LIBDIR "${CMAKE_INSTALL_PREFIX}/lib") -endif (NOT CMAKE_INSTALL_LIBDIR) +if (NOT DEFINED LIB_SUFFIX) + SET(LIB_SUFFIX "" CACHE STRING "Suffix for installed library path. Ex. 64 for lib64") +endif (NOT DEFINED LIB_SUFFIX) + +# set libdir if not use -DLIB_INSTALL_DIR +if (NOT LIB_INSTALL_DIR) + if(CMAKE_INSTALL_LIBDIR) + SET(LIB_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}) + else(CMAKE_INSTALL_LIBDIR) + SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}") + endif(CMAKE_INSTALL_LIBDIR) +endif (NOT LIB_INSTALL_DIR) + +if (LIB_SUFFIX) + message(" Install libraries to: " ${LIB_INSTALL_DIR} ) +endif (LIB_SUFFIX) IF(NOT DEFINED SHARE_INSTALL_PREFIX) SET(SHARE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}/share") @@ -66,19 +78,19 @@ SET(MusE_VERSION_MAJOR 2) SET(MusE_VERSION_MINOR 0) SET(MusE_VERSION_PATCH 0) -SET(MusE_VERSION "2.0rc2") -SET(MusE_VERSION_FULL "2.0rc2") -SET(MusE_INSTALL_NAME "muse-2.0rc2") +SET(MusE_VERSION "2.0") +SET(MusE_VERSION_FULL "2.0") +SET(MusE_INSTALL_NAME "muse-2.0") SET(MusE_EXEC_NAME "muse2") ## The directory where we will install the shared components: -SET(MusE_MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/modules) +SET(MusE_MODULES_DIR ${LIB_INSTALL_DIR}/${MusE_INSTALL_NAME}/modules) ## Synthesizers directory -SET(MusE_SYNTHI_DIR ${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi) +SET(MusE_SYNTHI_DIR ${LIB_INSTALL_DIR}/${MusE_INSTALL_NAME}/synthi) ## Plugins directory -SET(MusE_PLUGINS_DIR ${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/plugins) +SET(MusE_PLUGINS_DIR ${LIB_INSTALL_DIR}/${MusE_INSTALL_NAME}/plugins) ## Top documentation dir IF(NOT DEFINED MusE_DOC_DIR) @@ -89,7 +101,7 @@ SET(MusE_SHARE_DIR ${SHARE_INSTALL_PREFIX}/${MusE_INSTALL_NAME}) ## Lib directory -SET(MusE_LIB_DIR ${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}) +SET(MusE_LIB_DIR ${LIB_INSTALL_DIR}/${MusE_INSTALL_NAME}) FIND_PROGRAM(SVNVER svnversion) if (${SVNVER} STREQUAL "SVNVER-NOTFOUND") @@ -106,7 +118,7 @@ option ( ENABLE_LASH "enable LASH Audio Session Handler" ON) option ( ENABLE_OSC "enable Open Sound Control (DSSI also recommended)" ON) option ( ENABLE_DSSI "enable Disposable Soft Synth Interface (OSC also recommended)" ON) -option ( ENABLE_VST "enable VST/win support" OFF) +option ( ENABLE_VST "enable VST/win support (deprecated)" OFF) option ( ENABLE_FLUID "enable fluidsynth softsynth plugins" ON) option ( ENABLE_EXPERIMENTAL "enable building experimental features" OFF) option ( ENABLE_PYTHON "enable Python control support" OFF) @@ -141,7 +153,7 @@ set(QT_MIN_VERSION "4.3.0") set(QT_USE_QTXML TRUE) set(QT_USE_QTDESIGNER TRUE) -set(QT_USE_QTNSPLUGIN TRUE) +#set(QT_USE_QTNSPLUGIN TRUE) set(QT_USE_QTSVG TRUE) find_package(Qt4) @@ -256,10 +268,10 @@ endif (ENABLE_DSSI) if (ENABLE_VST) - message("VST support enabled") + message("deprecated VST support enabled") set (VST_SUPPORT TRUE) else (ENABLE_VST) - message("VST support disabled") + #message("VST support disabled") set (VST_SUPPORT FALSE) endif (ENABLE_VST) @@ -414,7 +426,7 @@ summary_add("OSC (Liblo) support" OSC_SUPPORT) summary_add("Python support" PYTHON_SUPPORT) summary_add("DSSI support" DSSI_SUPPORT) -summary_add("VST support" VST_SUPPORT) +#summary_add("VST support" VST_SUPPORT) summary_add("Fluidsynth support" HAVE_FLUIDSYNTH) summary_add("Experimental features" ENABLE_EXPERIMENTAL) summary_show() diff -Nru muse-2.0~rc2/debian/changelog muse-2.0/debian/changelog --- muse-2.0~rc2/debian/changelog 2012-04-17 17:57:51.000000000 +0200 +++ muse-2.0/debian/changelog 2012-07-18 16:07:22.000000000 +0200 @@ -1,3 +1,14 @@ +muse (2.0-1) unstable; urgency=low + + * New stable release. + * debian/rules: Exclude muse/widgets/arrangercolumns.{cpp,h}~ from being + deleted by dh_clean. + * Drop 0002-gcc_hardening.patch, applied upstream. + * Drop 0003-ftbfs_gcc47.patch, applied upstream. + * Refresh 1001-buildsystem.patch. + + -- Alessio Treglia Wed, 18 Jul 2012 16:07:06 +0200 + muse (2.0~rc2-2) unstable; urgency=low * Fix build failure with GCC 4.6. diff -Nru muse-2.0~rc2/debian/gbp.conf muse-2.0/debian/gbp.conf --- muse-2.0~rc2/debian/gbp.conf 2012-01-09 13:49:53.000000000 +0100 +++ muse-2.0/debian/gbp.conf 2012-07-18 15:49:21.000000000 +0200 @@ -1,2 +1,3 @@ [DEFAULT] pristine-tar = True +compression = bzip2 diff -Nru muse-2.0~rc2/debian/patches/0002-gcc_hardening.patch muse-2.0/debian/patches/0002-gcc_hardening.patch --- muse-2.0~rc2/debian/patches/0002-gcc_hardening.patch 2011-12-03 17:31:58.000000000 +0100 +++ muse-2.0/debian/patches/0002-gcc_hardening.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -Description: Prevent FTBFS with -Werror=format-security. -Author: Alessio Treglia -Forwarded: no ---- - synti/deicsonze/deicsonze.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - ---- muse.orig/synti/deicsonze/deicsonze.cpp -+++ muse/synti/deicsonze/deicsonze.cpp -@@ -1318,7 +1318,7 @@ void DeicsOnze::loadSutulaPresets() - file = fopen (presetPath.toLatin1().constData(), "rt"); - if (file == NULL) { - printf("can't open "); -- printf(presetPath.toLatin1().constData()); -+ printf("%s", presetPath.toLatin1().constData()); - printf("\n"); - } - else diff -Nru muse-2.0~rc2/debian/patches/0003-ftbfs_gcc47.patch muse-2.0/debian/patches/0003-ftbfs_gcc47.patch --- muse-2.0~rc2/debian/patches/0003-ftbfs_gcc47.patch 2012-04-17 17:53:09.000000000 +0200 +++ muse-2.0/debian/patches/0003-ftbfs_gcc47.patch 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -Author: Matthias Klose -Description: Fix build failure with GCC 4.6 -Bug-Debian: http://bugs.debian.org/667290 -Forwarded: - https://sf.net/tracker/?func=detail&aid=3518839&group_id=93414&atid=604222 ---- - muse/liste/editevent.cpp | 2 ++ - 1 file changed, 2 insertions(+) - ---- muse.orig/muse/liste/editevent.cpp -+++ muse/muse/liste/editevent.cpp -@@ -642,6 +642,7 @@ EditCtrlDialog::EditCtrlDialog(int tick, - continue; - } - MusECore::MidiController* c = port->midiController(num); -+ { - isList i = sList.begin(); - for (; i != sList.end(); ++i) { - if (*i == c->name()) -@@ -649,6 +650,7 @@ EditCtrlDialog::EditCtrlDialog(int tick, - } - if (i == sList.end()) - sList.push_back(c->name()); -+ } - } - MusECore::MidiController* mc = port->midiController(num); - int idx = 0; diff -Nru muse-2.0~rc2/debian/patches/1001-buildsystem.patch muse-2.0/debian/patches/1001-buildsystem.patch --- muse-2.0~rc2/debian/patches/1001-buildsystem.patch 2012-01-09 13:45:42.000000000 +0100 +++ muse-2.0/debian/patches/1001-buildsystem.patch 2012-07-18 16:06:02.000000000 +0200 @@ -2,23 +2,19 @@ Author: Alessio Treglia Forwarded: not-needed --- - CMakeLists.txt | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) + CMakeLists.txt | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) --- muse.orig/CMakeLists.txt +++ muse/CMakeLists.txt -@@ -66,10 +66,10 @@ set(CMAKE_SKIP_RULE_DEPENDENCY TRUE) - SET(MusE_VERSION_MAJOR 2) - SET(MusE_VERSION_MINOR 0) +@@ -80,8 +80,8 @@ SET(MusE_VERSION_MINOR 0) SET(MusE_VERSION_PATCH 0) --SET(MusE_VERSION "2.0rc2") --SET(MusE_VERSION_FULL "2.0rc2") --SET(MusE_INSTALL_NAME "muse-2.0rc2") + SET(MusE_VERSION "2.0") + SET(MusE_VERSION_FULL "2.0") +-SET(MusE_INSTALL_NAME "muse-2.0") -SET(MusE_EXEC_NAME "muse2") -+SET(MusE_VERSION "2.0~rc2") -+SET(MusE_VERSION_FULL "2.0~rc2") +SET(MusE_INSTALL_NAME "muse") +SET(MusE_EXEC_NAME "muse") ## The directory where we will install the shared components: - SET(MusE_MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/modules) + SET(MusE_MODULES_DIR ${LIB_INSTALL_DIR}/${MusE_INSTALL_NAME}/modules) diff -Nru muse-2.0~rc2/debian/patches/series muse-2.0/debian/patches/series --- muse-2.0~rc2/debian/patches/series 2012-04-17 17:49:38.000000000 +0200 +++ muse-2.0/debian/patches/series 2012-07-18 16:02:49.000000000 +0200 @@ -1,3 +1 @@ -0002-gcc_hardening.patch -0003-ftbfs_gcc47.patch 1001-buildsystem.patch diff -Nru muse-2.0~rc2/debian/rules muse-2.0/debian/rules --- muse-2.0~rc2/debian/rules 2011-12-03 17:31:58.000000000 +0100 +++ muse-2.0/debian/rules 2012-07-18 15:56:59.000000000 +0200 @@ -3,6 +3,10 @@ %: dh $@ --parallel +override_dh_clean: + dh_clean -Xmuse/widgets/arrangercolumns.cpp~ \ + -Xmuse/widgets/arrangercolumns.h~ + override_dh_auto_configure: dh_auto_configure -- -DCMAKE_BUILD_TYPE=release diff -Nru muse-2.0~rc2/doc/documentation.tex muse-2.0/doc/documentation.tex --- muse-2.0~rc2/doc/documentation.tex 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/doc/documentation.tex 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,997 @@ +%% (c) 2012 florian jung +%% we should consider putting this under a proper license. GPL, or +%% some GPL-like documentation license?? + +%% rules for editing documentation: (READ THIS FIRST) +%% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +%% +%% please try to let newly written lines be shorter than 72 characters. +%% minor exceptions are okay, but please not more than 80 chars. +%% comments shall start after character #80 of the line (that is, +%% they shall be "on the right margin") +%% +%% DON'T MIX up changes and reformatting in one commit. when changing +%% stuff, please don't touch the lines before and after your change +%% (that is, do not re-wrap them), even if it will look a bit patchy. +%% this is for being able to easily use diff. +%% when you want to reformat this file, then do it. but don't change +%% anything, as this would be hard to find in a diff. and clearly +%% state in the commit log that you "only" rearranged things. +%% +%% please adhere to the "User's manual" / "Internals" / "Design" +%% partitioning (genereally, don't change the chapters until there +%% is a really good reason for doing so (adding a chapter like +%% "feature requests" as flo did in r1497 IS one). +%% Below that, feel free to change the logical arrangement +%% (making paragraphs to subsections and similar) if you deem it +%% neccessary. +%% +%% Whenever referring to code symbols, constants or source/header +%% files, please use \sym{someClass::someSymbol}, \usym{UPPERCASE_THING} +%% or \f{file.cpp}. +%% Only specify file paths or namespaces where it would be ambiguous +%% otherwise. Specify 'someClass::' until it would disturb the reader +%% and it is obvious. you have to replace '_' by {\_} (with the {}!). +%% These macros do automatic hyphenation on Camel-Case, under_-score +%% and scope::-operator boundaries. If you need to insert additional +%% hyphenation points, use {\-}. +%% Example: \sym{someClass::someAb{\-}nor{\-}mal{\-}lyLongName} will +%% hyphenate: some-Class::-some-Ab-nor-mal-ly-Long-Name +%% +%% Whenever referring to URLs, please wrap them in \url{blah}. Key +%% combinations shall look like \key{CTRL+C}. Menu items shall look +%% like \menu{Menu > Submenu > Menu Item}. +%% +%% Where possible, reference other parts of this documents with +%% \label and \ref. Avoid duplicate information under "Internals" by +%% referring to the appropriate section in "User's manual". +%% +%% Please do no time-stamping of sections. if you need time-stamps, +%% use "svn blame documentation.tex" +%% +%% If you contribute something, feel free to add yourself to \author. +%% +%% If you don't speak LaTeX fluently, a few tips: +%% * \section, \subsection, \subsubsection, \paragraph, \subparagraph +%% let you create sections etc. just copy-and-paste if unsure. +%% * you must prefix special characters like the underscore with \ +%% (backslash) +%% * \emph{some text} emphasizes the text, printing it italic. +%% * \texttt{some text} displays the text in a typewriter font +%% * \label{someName} creates a label at this position. this doesn't +%% show up in the pdf. with \ref{someName}, you can reference to this +%% label. (LaTeX will insert the section number instead of \ref) +%% For this to work, you might need to recompile the .tex twice. +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + + +\documentclass[a4paper]{report} +\usepackage[a4paper, left=2.5cm, right=2.5cm, top=2.5cm, bottom=2.5cm]{geometry} +\usepackage[T1]{fontenc} +\usepackage[utf8]{inputenc} +\usepackage{lmodern} +\usepackage[english]{babel} +\usepackage{graphicx} +\usepackage{hyphenat} +\usepackage{wrapfig} +\usepackage{fancyhdr} +\pagestyle{fancy} + \lhead{\scriptsize{\slshape\leftmark}} + \chead{} + \rhead{\thepage} + \lfoot{} + \cfoot{} + \rfoot{} + \renewcommand{\headrulewidth}{0.4pt} +\usepackage{ifthen} + +% Hyphenate symbols before each uppercase letter, after each underscore +% (without a "-") and after each ':' (without a "-") +% TODO for any latex crack: also do automatic hyphenation, that is, +% instead of some-Automation-Expression, do some-Au-to-ma-tion-Ex-press-ion +\makeatletter +\newcommand{\camelhyph}[1]{\@fterfirst\c@amelhyph#1\relax } +\newcommand{\underscorehyph}[1]{\@fterfirst\u@nderscorehyph#1\relax } +\def\@fterfirst #1#2{#2#1} +\def\c@amelhyph #1{% +\ifthenelse{\equal{#1}\relax}{}{% Do nothing if the end has been reached + \ifnum`#1=95 \_\hspace{0pt}\else % Check whether #1 is "_", then print _[thin space] + \ifnum`#1=58 :\hspace{0pt}\else + \ifnum`#1>64 + \ifnum`#1<91 \-#1\else#1\fi% Check whether #1 is an uppercase letter, + \else#1\fi + \fi + \fi + % if so, print \-#1, otherwise #1 + \expandafter\c@amelhyph% % insert \c@amelhyph again. +}} +\def\u@nderscorehyph #1{% +\ifthenelse{\equal{#1}\relax}{}{% Do nothing if the end has been reached + \ifnum`#1=95 \_\hspace{0pt}\else % Check whether #1 is "_", then print _\- + \ifnum`#1=58 :\hspace{0pt}\else#1\fi\fi + \expandafter\u@nderscorehyph% % insert \u@nderscorehyph again. +}} +\makeatother + + + +\author{Florian Jung, Robert Jonsson} +\title{MusE Documentation} + +\newcommand{\url}[1]{\texttt{#1}} +\newcommand{\key}[1]{\textbf{#1}} +\newcommand{\shell}[1]{\texttt{\textbf{#1}}} +\newcommand{\menu}[1]{\textbf{#1}} +\newcommand{\sym}[1]{\texttt{\camelhyph{#1}}} +\newcommand{\usym}[1]{\texttt{\underscorehyph{#1}}} +\newcommand{\file}[1]{\texttt{\camelhyph{#1}}} +\newcommand{\screenshotwidth}[0]{0.8\textwidth} + + +\begin{document} +\label{Main/Arranger} +\begin{figure}[htp] +\centering +\includegraphics[width=1.0\textwidth]{pics/muse2} +\label{fig:MusE} +\end{figure} +\chapter {What is this?} +You are, if you have printed this document, holding in your hand the +written documentation for the audio and midi sequencer MusE version 2.\\ +\url{http://www.muse-sequencer.org} is MusE's home on the internet where +everything MusE releated should be possible to find, software, this +documentation, forums, mailing lists, bug reporting, FAQs. If you have +this document but not the software head on over there to find what it's +all about. +\chapter{User's manual} + +\section {Introduction} +\subsection {A brief history of computer audio and MusE} +To quickly summarize over a decades open source development: in 1999 Werner + Schweer released the first version of MusE, muse-0.0.1.tar.gz, in it's first +few releases (actually not few, Werner relentlessly churned out new releases) +MusE was only a midi sequencer. The target was to create a fully fledged +midi sequencer for the Linux operating system. Over the years audio was +added among with other things implemented and sometimes abandoned. +Today MusE is a stable and feature rich music creation environment which +strives to encompass most of the music recording process, creation, editing, +mastering. + +\subsection {Definitions} +\key{CTRL} refers to the control key on the keyboard, e.g. \key{CTRL+C} +means to press and hold the control key while pressing the c key. Make sure +you know where you have it so you won't accidentally lose control +(bad jokes are the best jokes, so say we all!).\\ +\key{SHIFT} refers to the shift key on the keyboard, see above for usage\\ +\key{ALT} refers to the alt key on the keyboard, see above for usage\\ +\shell{\$>} is used as a generic definition for a terminal prompt. When the +manual lists a command that shall be typed, the prompt is not part of the +command.\\ +Keys are always referred to in bold uppercase, e.g. \key{A}. For instance +\key{SHIFT+A} for the key a pressed together with the shift key.\\ +Sometimes terminal examples are written tabbed in with a fixed font to +visualize more closely what something looks like on the screen. +E.g.\\ +\hspace*{1cm}\shell{\$> muse2}\\ + +\subsection {Getting up and running for impatient people} +Install MusE from the repository of your chosen distribution. +To get decent performance start Jack with the following command in a +terminal:\\ +\hspace*{1cm}\shell{\$> jackd -d alsa -d hw:0 -p 256}\\ +Or, if you prefer, use the launcher utility \textbf{QJackCtl} to get some +help starting Jack. +After this, start MusE from the menu or fire up another terminal and type +\shell{muse2}.\\ +If this didn't work out read on for the slighly more complete route for +getting things started. + +\subsection {Getting up and running} +\subsubsection {Installation from binaries} +There are several ways to install MusE depending on your situation. The +most convenient way is to install a prepackaged version from your chosen +distribution. The drawback of this is that it may not be the most recent +version, though often there is a more recent package from a private packager. +\subsubsection {Installation from source} +Building MusE from source is not hard, there are a number of prerequistes +that must be met but the actual building should be painless (ha, famous +last words).\\ +Please follow the README in the source package and/or read the instructions +on the homepage: \url{http://muse-sequencer.org/index.php/Installation} + +\subsubsection {Hardware} +MusE on the Linux platform supports midi through ALSA and Jack-midi and audio +through Jack. For information on what hardware is supported there are some +convenient places to check: +\begin {itemize} +\item Alsa soundcard matrix +\item \url{http://FFADO.org} for firewire devices. +\end {itemize} +Also, as is often a very good approach for Linux and open source, the +various forums available on the internet often contain good information. +Chances are someone has already tried your configuration and/or had your +specific problem and the solution is already written down. +\subsubsection {Launching} +After installation the binary muse2 is installed on the computer. If MusE +was installed from a distribution repository the binary may have a +different name depending on the distribution policies. Most distributions +do however install a menu entry so MusE should be conveniently available +from there. +\subsubsection {Audio preconditions} +In the standard case MusE expects to find and connect to the Jack audio +server \url{http://jackaudio.org}. Make sure jack is installed (if MusE was +installed with a distribution-package Jack will very likely already be +installed) For Jack to run with best performance your system should be +sufficiently tuned to allow it to run with realtime capabilities. The +realtime configuration is configuration of the operating system and roughly +consists of two parts. +\begin {enumerate} +\item By default on most distros only the superuser lets applications setup +realtime capabilities. Please see the APPENDIX for setting up realtime +\item Maximizing performance. A standard linux installation may not able +to reach the performance required by a power user. This requires exchanging +the linux kernel for a so called lowlatency kernel, this is also covered by +the realtime APPENDIX. +\end {enumerate} + +\subsubsection {Running MusE} +Find MusE in the menu or open a terminal and enter muse2. A splash screen +should pop up followed by the main application window and you are off! +\shell{\$> muse2}\\ +If an error like the screenshot below pops up the Jack audio server is +either not running or started as a different user than what you are trying +to start MusE as. +\begin{figure}[htp] +\centering +\includegraphics[width=\screenshotwidth]{pics/no_audio} +\caption{Jack server missing} +\label{fig:no_audio} +\end{figure} +\subsubsection {Midi only} +MusE can be started in Midi-only mode where MusE does not have any external +dependencies apart from ALSA midi. In this case start MusE from a terminal: +\shell{\$> muse2 -a} + +\subsection {Beginners tutorial} +To get a quick grip of what MusE can achieve please follow this beginners +tutorial. +\subsubsection {Setup} +First off, fire up MusE as was described in the previous chapter, making +sure that the jack audio server is started with sufficient configuration +to allow for audio output without breakup. Also make sure your system can +make sound. +\subsubsection {Soft synth test} +With MusE up and running right click in the Track-pane (see screenshot in +~\ref{Main/Arranger}) and select \menu{Add Synth > MESS > Organ}. A Soft +Synth track called Organ-0 should appear as well as a separate GUI for +the synthesizer. + +Now right click once more in the Track-pane and select \menu{Add Midi +Track}. Another track appears called Track-1, you will notice that it is +by default bound to the synth that was just created Organ-0. +\begin{wrapfigure}{r}{0.05\textwidth} +\includegraphics[width=0.05\textwidth]{pics/arrow_tool} +%\hrulefill +\end{wrapfigure} +Now select the drawing tool icon +from the toolbar, alternatively press the shortcut key \key{D}. +Move the mouse over to the arranger canvas as referenced in ~\ref{Main/Arranger} +and point at the midi track, the mouse should have changed to a small pencil. +Draw a Part along the midi track using the mouse. For this exercise it is +not important where or how large the drawn Part is. When you are done double +click on the drawn part. This will open up the Piano Roll editor. To the +left of the Piano Roll there are piano keys in a vertical line, try clicking +on the keys in this virtual keyboard each click should be rewarded with an +organ sound (maybe of questionable quality, a sound nevertheless) +\begin{figure}[htp] +\centering +\includegraphics[width=.5\textwidth]{pics/organ_synth} +\caption{Organ synthesizer} +\label{fig:organ_synth} +\end{figure} + +\subsubsection {Missing sound} +If you got sound from the previous exercise you can carry on to the next, +or keep reading for further enlightenment in case you come upon trouble +later on. If there are no sound we need to do some fault hunting. First +of, click on Arranger window once more and select the Organ-0 track in the +track-pane. +\begin{figure}[ht] +\centering +\includegraphics[width=\screenshotwidth]{pics/main_window_with_midi_editor} +\caption{Midi editor view} +\label{fig:Midi editor} +\end{figure} +Now bring back Piano Roll window and align the windows so you +can see the piano keys as well as the Meter on the Mixer Strip (see the +5 Function by function chapter for more information on these windows). +The result should be something like the following: + +When pressing one of the keys on virtual Keyboard the Meter on the Mixer +Strip should light up in green to visualize that the Synth is making +sound, if it is not try to trace back your steps and and see if you did +anything differently than described. +Now, if the Meter lights up but there is still no sound we need to to +check the routing between the tracks. Click on the Arranger window again +and select the Out 1 track, this is the predefined output which MusE by +default loads at startup, at the bottom of Mixer Strip there are two +buttons looking like tele- jacks, these bring up the inputs and outputs +of the track, click on the right one, the output and make sure that it is +connected to some valid outputs on your system. +\begin{wrapfigure}{r}{0.25\textwidth} +\includegraphics[width=0.25\textwidth]{pics/output_routing} +%\hrulefill +\end{wrapfigure} +Click on the outputs to select them, if you did changes here go back and +try clicking on the Piano Roll keyboard again, hopefully it helped. If there + still are problems make sure your system actually can make sound through +Jack, this is however getting outside the scope of this manual.\\\\ +\textit{This might be the time to bring up the concept of community support. +Open source software could never be what it is without the support given by +individuals on forums and mailinglists, if the information given in this +document is not enough, try googling your problem and/or get in touch with +one of the online forums for MusE or Linux audio in general. See some pointers +in the Support chapter.} + +\subsubsection {Recording} %TODO: walkthrough of recording midi +TBD + + +\section {Basic overview} +In this section we will make a step by step walk-through of all the +different editors, their purpose and what functions they support. + +\subsection{Main/Arranger} + +\label{Main/Arranger} +\begin{figure}[htp] +\centering +\includegraphics[width=\screenshotwidth]{pics/main_window_annotated} +\caption{MusE main window} +\label{fig:Main Window} +\end{figure} +Above is the main window of MusE, the Arranger, this is what greets you +when launching MusE. The Arranger consists of two main parts, the Track-pane +and the Arranger canvas. The Track-pane lists all currently visible tracks +and the Arranger canvas contains all Parts of the composition. The +screenshot above shows an empty project. Below is MusE with a song in +progress, turns out it wasn't a very good song, but for our purposes it +is fine. In the below screenshot there are a lot of tracks visible in the +Track-pane, each have an icon which indicate it's type, wave-trace, input, +output etcetera, more about that later. In the Arranger canvas a number of +parts are visible, the ones in yellow are in this composition wave files, +the multicolored line are different Parts of a drum track. +\label{Main/Arranger} +\begin{figure}[htp] +\centering +\includegraphics[width=\screenshotwidth]{pics/main_window_with_arrangement} +\caption{MusE main window with arrangement} +\label{fig:Main Window with arrangement} +\end{figure} + +\subsection{Mixer} +Choosing \menu{View > Mixer A} or \menu{B} from the menu in the main +window will bring up the mixer as viewed below. The mixer will with all +options enabled show channel strips for all tracks in the current setup, +depending on how far you have gotten this view may become very large, +at which point it may be a good idea to limit what is viewed in the +Mixer. From the view menu all the different kinds of tracks can be +toggled on/off from the mixer. Some may find it a good idea to use the +two mixers A and B setup with different setup and store this in your +song template(s), more about this in the Song Template section. It can +be argued that everything in MusE is a track analogous to the Unix +idiom that everything is a file. +The types of tracks viable in the mixer (and track-pane) are: +\begin{wrapfigure}{r}{0.5\textwidth} +\includegraphics[width=0.5\textwidth]{pics/mixer} +%\hrulefill +\end{wrapfigure} +\begin {itemize} +\item Audio output +\item Audio input +\item Group track +\item Aux track +\item Wave track +\item Synth track +\item Midi track +\end{itemize} + + +There are also a Midi Track variation called Drum Track, they are +however not distinguishable from Midi Tracks in the Mixer. Also the +strips for midi tracks are different in the Mixer than in the +Track-pane view. + + +\subsection{Tracks} +MusE arranges your music in \emph{tracks} and \emph{parts}. The following +section shall provice you an overview of how things are done with MusE. +If you are or were a Cubase or Cakewalk user, you will feel familiar with +this. There are +MIDI and drum tracks (which are internally MIDI tracks) which can hold +note data, wave tracks which hold wave data, and several kinds of +audio tracks, synthesizers etc. + +\paragraph{MIDI tracks} +MIDI and drum tracks hold MIDI event data. They don't differ much, +except that drum tracks offer a special editor which is more suitable +for drum editing. + +\paragraph{Wave tracks} +They hold audio data which can be just played back or be piped through +effect plugin chains. They offer automation for these plugins. + +\paragraph{Audio inputs} +These provide the path for your audio data from outside into your +project. Set up the physical audio inputs you want to connect your audio +in track with, and then route them to some wave tracks. + + % TODO: what are audio outs and auxs? + % someone please write this! + +\subsection{Parts} +Tracks are split in parts. These contain MIDI events or wave chunks. +You can copy, clone them, move them around, delete them etc. + +\subsection{MIDI ports} +Ports provide an abstraction layer for your MIDI synthesizers (which +can be both software and hardware synthesizers). Port are numbered. +In order to produce sound, each MIDI track is assigned to exactly one +MIDI port, to which the MIDI events are then sent. + +In the configuration menu, you must map the port numbers to the actual +synth devices (by selecting ALSA or jack midi ports, or synth plugins). + +Try left-clicking on the "Ports" column of some MIDI track. If you +use a soft synth, right-clicking the Ports column of the synth or any +track using the synth lets you launch the synthe's GUI. + +\section{Tracks and parts} +\subsection{Tracks} +\paragraph{Creation} +You can create a track by either right-clicking in the arranger's track % TODO: insert screenshot +list and then adding the desired track, or via the edit menu. + +\paragraph{Attributes} % TODO: this should be a list +Tracks have several attributes. +\subparagraph{Mute} If you click on the \emph{Mute} field (denoted with +a "M" column header), the track gets muted and stops producing sound. +\subparagraph{Solo} The solo button ("S" column header) mutes all other % TODO: soloing chains etc? +tracks. +\subparagraph{Record} The R column "arms" your track for recording. +When you rec-arm your song and have no tracks rec-armed, you won't be +able to record anything. See also the config option "move rec-arm with % TODO: reference to rec-arm config option +selection". +\subparagraph{Track name} Double-click and you will see. +\subparagraph{Port} For MIDI tracks, this lets you select the MIDI +port to which the events should be routed. This can be your physical +synthesizer or a software synthesizer. For soft synthes, this is the +port the synth is associated to. For other track types, this is disabled. +\subparagraph{Channel} For MIDI tracks, this is the MIDI channel the +output is sent to. For any kind of audio tracks, this is the number of +channels (mono, stereo). + % TODO: what's that "T" column?! +\subparagraph{Automation} For audio tracks, this lets you set up the +automation display in the arranger. Clicking this will provide you with +a popup menu with lots of submenus. The submenus let you select the +color you want to associate with the automation parameter. \emph{Clicking % TODO: this is nonstandard +on a submenu} will select or unselect it, making the automation parameter % TODO: put reference to automation section +shown or hidden. + +\subparagraph{Clef} For MIDI tracks, you can specify a clef here. This +only affects the score editor. + +\paragraph{The trackinfo side bar} +In the arranger and the part editors, you'll have a trackinfo sidebar +on the left side. You can set up track-type specific things there. + +\subsubsection{MIDI tracks} +MIDI parts have no automation settings. However, they support various % TODO: this will hopefully become wrong soon +controllers, program changes etc.. The MIDI trackinfo sidebar lets you +change program, volume, pan and more. Just editing the value in the +boxes will send an event, but not write it to the track. In order to +write it, you will need to click on the corresponding button ("Vol" for +writing down volume information). + +\subsubsection{Drum tracks} +These are MIDI tracks as well, but with a few differences. They allow +you to map certain drum sounds with different input notes, and you +can change the output settings of a certain "drum instrument" without +having to alter each single event. + +However, they have certain limitations: They only can handle 128 sounds +(even if you have more synthes), they aren't really compatible with +MIDI tracks (you can interchange parts between them, but if you touched +the drum list, you'll get unexpected results), you can't set a program +for the used channel and more. These limitations will be addressed in +MusE 2.1, which offers a new concept of drum tracks. + +\subsubsection{Audio tracks} +\paragraph{Effect rack} +On the top of the sidebar, there is an effect rack which allows you to +apply various plugins on the audio. For more information on this, refer +to \ref{plugins}. + +\paragraph{Controls} +Lorem ipsum % TODO FINDMICH HIER WEITER + + +\subsection{Parts} +Within MIDI, drum and wave tracks, you can create \emph{parts}. Parts +are chunks of coherent notes or wave data which can be moved around, +copied, cloned and deleted independent from other parts. + +Parts are created by selecting the pencil tool and then drawing onto +the right part area in the arranger. You can move them with the arrow +tool, delete them using the \key{DEL} key, and a right-click opens +a popup menu. This menu allows you even more stuff, such as setting +the part's color, saving the part to disk etc.. You can use +\key{CTRL+C} and \key{CTRL+V} for copying and pasting parts. +\key{CTRL+B} pastes the part as a clone. Pressing \key{SHIFT} +additionally provides you a dialog which allows you to paste the part +multiple times and set more stuff. + +You can also copy parts with the mouse by moving the part with the mouse +while holding down the \key{CTRL} key. + + + +\section{Plugins and automation} \label{plugins} +There are several kinds of plugins. First, there are audio plugins, which +can be applied to any track handling audio (that is, inputs, outputs, +wave tracks, synth tracks). Plugins can be added by double-clicking +on an entry in the effect rack in the track info pane (which is shown +at the left side of the arranger when the according track is selected). +Right-clicking them offers a self-explanatory popup menu. + +\section{Configuration} +\paragraph{Minimum control period} +Plugins can usually process an arbitrarily small (or large) amount of +samples. If some plugin control value changes continously, to provide +ideal listening experience, MusE would need to call the plugin 44100 +times a second, asking for one single value at a time. With the minimum +control period setting, the user can force MusE to ask the plugin for +at least N values. Setting this value to 64 would in this situation +make MusE call the plugin $689 = \frac{44100}{64})$ times a second, +asking for 64 values at a time. While doing this will reduce accuracy +of control changes, it may also reduce CPU usage, because calling +the plugin more often, requesting smaller chunks, is more expensive +than calling it seldomly, requesting larger chunks. +\subparagraph{Recommendation} +If you have no performance problems, or if you want to do the final +downmix of your project, set this to a low value. If you're experiencing +performance problems, increasing this value might help. + + + + + + +\chapter{Internals -- how it works} +This chapter explains how MusE is built internally, and is meant +to be an aid for developers wanting to quickly start up with MusE. +For details on \emph{why} stuff is done please refer to the following +chapter. +\section{User controls and automation} +\subsection{Handling user input} +\subsubsection{Plugins and synthesizers} +\paragraph{Overview} +When the user launches a plugin's GUI, either a MusE-window with +the relevant controls is shown, or the native GUI is launched. MusE +will communicate with this native GUI through OSC (Open Sound Control). +The relevant classes are \sym{PluginGui}, \sym{PluginIBase} +(in \file{plugin.h}) and \sym{OscIF} (in \sym{osc.h}). + +If the user changes a GUI element, first the corresponding control is +disabled, making MusE not steadily update it through automation +while the user operates it. Then MusE will update the plugin's parameter +value, and also record the new value. When appropriate, the controller +is enabled again. + +\paragraph{Processing the input, recording} +Upon operating a slider, \sym{PluginIBase::setParam} is called, +which usually writes the control change into the ringbuffer +\sym{PluginI::{\_}controlFifo}. (\sym{PluginI::apply()}, +\sym{DssiSynthIF::getData()} will read this ringbuffer and +do the processing accordingly). Furthermore, \sym{AudioTrack::recordAutomation} +is called, which either directly modifies the controller lists or writes +the change into a "to be recorded"-list (\sym{AudioTrack::{\_}recEvents}) +(depending on whether the song is stopped or played). + +The \sym{AudioTrack::{\_}recEvents} list consists of \sym{CtrlRecVal} +items (see \file{ctrl.h}), which hold the following data: +\begin{itemize} +\item the frame where the change occurred +\item the value +\item the type, which can be \usym{ARVT{\_}START}, \usym{ARVT{\_}VAL} or \usym{ARVT{\_}STOP}. + \usym{ARVT{\_}VAL} are written by every \usym{AudioTrack::recordAutomation} + call, \usym{ARVT{\_}START} and \usym{ARVT{\_}STOP} are generated by + \sym{AudioTrack::startAutoRecord} and \sym{stopAutoRecord}, + respectively. +\item and the id of the controller which is affected +\end{itemize} +It is processed when the song is stopped. The call path for this is: +\sym{Song::stopRolling} calls \sym{Song::processAutomationEvents} +calls \sym{AudioTrack::processAutomationEvents}. +This function removes the old events from the track's controller list +and replaces them with the new events from \sym{{\_}recEvents}. In +\usym{AUTO{\_}WRITE} mode, just all controller events within the recorded +range are erased; in \usym{AUTO{\_}TOUCH} mode, the \usym{ARVT{\_}START} +and \usym{ARVT{\_}STOP} types of the \sym{CtrlRecVal} events are used +to determine the range(s) which should be wiped. + +\paragraph{How it's stored} +Automation data is kept % this is copied from +in \sym{AudioTrack::{\_}controller}, which is a \sym{CtrlListList}, % "design decisions" -> "automation" +that is, a list of \sym{CtrlList}s, that is, a list of lists of +controller-objects which hold the control points of the automation graph. +The \sym{CtrlList} also stores whether the list is meant discrete +(a new control point results in a value-jump) or continous (a new control +point results in the value slowly sloping to the new value). +Furthermore, it stores a \sym{{\_}curVal} (accessed by \sym{curVal()}), +which holds the currently active value, which can be different from the +actually stored value because of user interaction. This value is also +used when there is no stored automation data. + +\sym{AudioTrack::addController} and \sym{removeController} are used % TODO: swapControllerIDX?? +to add/remove whole controller types; the most important functions which +access \sym{{\_}controller} are: +\begin{itemize} +\item \sym{processAutomationEvents}, \sym{recordAutomation}, + \sym{startAutoRecord}, \sym{stopAutoRecord}: see above. +\item \sym{seekPrevACEvent}, \sym{seekNextACEvent}, \sym{eraseACEvent}, + \sym{eraseRangeACEvents}, \sym{addACEvent}, \sym{changeACEvent}, + which do the obvious +\item \sym{pluginCtrlVal}, \sym{setPluginCtrlVal}: the first + returns the current value according to the \sym{{\_}controller} + list, the second only sets the \sym{curVal}, but does not + insert any events. +\end{itemize} + +Whenever a \sym{CtrlList} has been manipulated, +\sym{MusEGlobal::song->controllerChange(Track*)} shall be called, +which emits the \sym{MusEGlobal::song->controllerChanged(Track*)} +signal in order to inform any parts of MusE about the change (currently, +only the arranger's part canvas utilizes this). + +\paragraph{Enabling and disabling controllers} +Disabling the controller is both dependent from the current automation +mode and from whether the GUI is native or not. +In \usym{AUTO{\_}WRITE} mode, once a slider is touched (for MusE-GUIs) or +once a OSC control change is received (for native GUIs), the control +is disabled until the song is stopped or seeked. + +In \usym{AUTO{\_}TOUCH} (and currently (r1492) \usym{AUTO{\_}READ}, but +that's to be fixed) mode, once a MusE-GUI's slider is pressed down, the +corresponding control is disabled. Once the slider is released, the +control is re-enabled again. Checkboxes remain in "disabled" mode, +however they only affect the recorded automation until the last toggle +of the checkbox. (Example: start the song, toggle the checkbox, toggle +it again, wait 10 seconds, stop the song. This will NOT overwrite the +last 10 seconds of automation data, but everything between the first +and the last toggle.). For native GUIs, this is a bit tricky, because +we don't have direct access to the GUI widgets. That is, we have no +way to find out whether the user doesn't touch a control at all, or +whether he has it held down, but just doesn't operate it. The current +behaviour for native GUIs is to behave like in \usym{AUTO{\_}WRITE} mode. + +The responsible functions are: \sym{PluginI::oscControl} and +\sym{DssiSynthIF::oscControl} for handling native GUIs, +\sym{PluginI::ctrlPressed} and \sym{ctrlReleased} for MusE +default GUIs and \sym{PluginI::guiParamPressed}, +\sym{guiParamReleased}, \sym{guiSliderPressed} and +\sym{guiSliderReleased} for MusE GUIs read from a UI file; +\sym{guiSlider*} obviously handle sliders, while \sym{guiParam*} +handle everything else which is not a slider. They call +\sym{PluginI::enableController} to enable/disable it. + +Furthermore, on every song stop or seek, \sym{PluginI::enableAllControllers} +is called, which re-enables all controllers again. The call paths for +this are: +\begin{itemize} +\item For stop: \sym{Song::stopRolling} calls + \sym{Song::processAutomationEvents} calls + \sym{Song::clearRecAu{\-}to{\-}ma{\-}tion} calls + \sym{Track::clearRecAutomation} calls + \sym{PluginI::enableAllControllers} +\item For seek: \sym{Audio::seek} sends a message ("\sym{G}") to + \sym{Song::seqSignal} which calls + \sym{Song::clearRecAutomation} which calls + \sym{PluginI::enableAllControllers} +\end{itemize} + + + + +\chapter{Design decisions} +\section{Automation} +As of revision 1490, automation is handled in two ways: User-generated +(live) automation data (generated by the user moving sliders while playing) +is fed into \sym{PluginI::{\_}controlFifo}. Automation data is kept +in \sym{AudioTrack::{\_}controller}, which is a \sym{CtrlListList}, +that is, a list of \sym{CtrlList}s, that is, a list of lists of +controller-objects which hold the control points of the automation graph. +The \sym{CtrlList} also stores whether the list is meant discrete +(a new control point results in a value-jump) or continous (a new control +point results in the value slowly sloping to the new value). + +While \sym{PluginI::{\_}controlFifo} can be queried very quickly and +thus is processed with a very high resolution (only limited by the +minimum control period setting), the automation value are expensive to +query, and are only processed once in an audio \emph{driver} period. +This might lead to noticeable jumps in value. + +This could possibly be solved in two ways: +\paragraph{Maintaining a slave control list} +This approach would maintain a fully redundant slave control list, +similar to \sym{PluginI::{\_}controlFifo}. This list must be updated +every time any automation-related thing is changed, and shall contain +every controller change as a tuple of controller number and value. +This could be processed in the same loop as \sym{PluginI::{\_}controlFifo}, +making it comfortable to implement; furthermore, it allows to cleanly +offer automation-settings at other places in future (such as storing +automation data in parts or similar). + +\paragraph{Holding iterators} +We also could hold a list of iterators of the single \sym{CtrlList}s. +This would also cause low CPU usage, because usually, the iterators only +need to be incremented once. However, it is pretty complex to implement, +because the iterators may become totally wrong (because of a seek in the +song), and we must iterate through a whole list of iterators. + +\paragraph{Just use the current data access functions} +By just using the current functions for accessing automation data, +we might get a quick-and-dirty solution, which however wastes way too +much CPU ressources. This is because on \emph{every single frame}, we +need to do a binary search on multiple controller lists. + + +\chapter{Feature requests} +\section{Per-Part automation and more on automation} % by flo +Automation shall be undo-able. Automation shall reside in parts which +are exchangeable, clonable etc (like the MIDI- and Wave-Parts). +Global per-synth/per-audiotrack automation shall also be available, but +this can also be implemented as special case of part automation (one +long part). + +\section{Pre-Rendering tracks} +\subsection{The feature} +All tracks shall be able to be "pre-renderable". Pre-rendering shall +be "layered". Pre-rendering shall act like a transparent audio cache: +Audio data is (redundantly) stored, wasting memory in order to save CPU. + +That is: Each track owns one or more wave-recordings of the length of +the song. If the user calls "pre-render" on a track, then this track +is played quasi-solo (see below), and the raw audio data is recorded +and stored in the "layer 0" wave recording. If the user has any effects +set up to be applied, then each effect is applied on a different layer +(creating layer 1, layer 2 etc). + +This means, that also MIDI and drum tracks can have effects (which +usually only operate on audio, but we HAVE audio data because of this +prerendering). + +Furthermore, MusE by default does not send MIDI events to the synthesizers +but instead just plays back the last layer of the prerecording (for +MIDI tracks), or does not pipe the audio data through the whole plugin +chain (causing cpu usage), but instead just plays back the last layer. +The hearable result shall be the same. + +Once the user changes any parameter (automation data or plugins for +wave tracks, MIDI events or effect plugin stuff for MIDI tracks), +then MusE shall generate the sound for this particular track in the +"old" way (send MIDI data to synthes, or pipe audio data through plugins). +(So that the user will not even notice that MusE actually pre-renderered +stuff.) Either MusE automatically records this while playback (if possible) +or prompts the user to accordingly set up his cabling and then record +it. Or (temporarily) disables prerecording for this track, falling back +to the plain old way of generating sound. + +\emph{Quasi-solo} means: For wave tracks, just solo the track. For MIDI +tracks, mute all tracks which are not on the same synth (channel?), +and mute all \emph{note} events which are not on the quasi-soloed track. +This causes MusE to still play any controller events from different +tracks, because they might have effects on the quasi-soloed track. (You +can have notes on channel 1 on one track and controller stuff on channel +1 on another track; then you would need quasi-solo to get proper results.) + +\subsection{Use cases} +\paragraph{Saving CPU} +On slow systems, this is neccessary for songs with lots of, or demanding +(or both) soft synthes / plugins. Even if the synth or plugin is so +demanding that your system is not able to produce sound in real-time, +then with this feature you'll be able to use the synth (this will make +editing pretty laggish, because for a change you need to re-render at +least a part before you can listen to it, but better than being unable +to use the synth at all!) + +\paragraph{Exporting as audio project} +Using pre-rendering on all tracks, you easily can export your project +as multi-track audio file (for use with Ardour or similar DAWs). +Just take the last layer of each track, and write the raw audio data +into the file, and you're done. (Maybe we are even able to write down +the raw-raw layer0 audio data plus information about used plugins and +settings etc..?) + +\paragraph{Mobile audio workstations} +You might want to work a bit on your audio projects on your notebook +while you're not at home, not having access to your hardware synthesizers. +Using this feature, you could have pre-recorded the stuff in your studio +before, and now can at least fiddle around with the non-hw-synth-dependent +parts of your song, while still having your \emph{full} song with you. + +\paragraph{Applying effects on MIDI tracks} +If you have many physical audio inputs, you might already be able to +apply effect chains on MIDI tracks, by wiring the synthes' audio +outputs to your soundcard's inputs, and applying the effects on +dedicated input tracks you have to create. This requires you to have +expensive hardware, and is pretty complicated, because you need one +additional track per MIDI synth. + +This feature allows you to apply effects on single MIDI tracks, and not +only on full MIDI synthes, and doesn't require you to be have that +many physical audio inputs (you need to manually replug your synthes, +however). + +\subsection{Possible scenarios} +\paragraph{Setting it up} +Create a wave track, MusE will allow you to set or unset prerendering +for every plugin in the plugin rack (recording the actual track is +useless because it would be a plain copy). +Create a MIDI track, MusE will ask you on which physical audio input +your synth is connected. Setting up multiple synthes on one physical +audio in is allowed, see below. + +\paragraph{Pre-rendering stuff} +When the user presses the "pre-render" button, all tracks which have +been changed since their last pre-rendering will be re-rendered. +If you have multiple hardware synthes set up as they were connected +to one physical audio input port, MusE will prompt you to first plug +the proper cable in. + +\paragraph{Making changes} +Change a note in a MIDI part, move or delete a part or change automation +parameters. MusE will temporarily disable the pre-rendered information +and instead generate the sound via sending out MIDI events, piping stuff +through effect chains or similar. If you play back the whole song, or +if you manually trigger a re-rendering of a track via the context menu, +MusE will play back the stuff, record it again and re-enable the +pre-rendered information. + + +\subsection{Extensions} +\paragraph{Automatic discovery of physical audio connections} +The user plugs all (or only some) synthes' audio outs into the available +audio inputs, then runs automatic discovery. This will send MIDI events +to each synthesizer, and look on which audio in there's activity. Then +it will assume that the synthesizer is connected to that particular +audio in. Audio ins which show activity before any MIDI events were +sent are not considered, as they're probably connected to microphones +or other noise-generating non-synthes. + +\paragraph{Audio export} +As described in the Use cases, MusE can allow you to export your song +in some multitrack audio format. + +\paragraph{Cheap/Faked changes} +For expensive or unavailable synthes, changing the Volume midi controller, +the Pan controller or similar "easy" controllers will not trigger a +complete re-rendering, but instead "fake" the change, by changing +the volume data directly on the recorded wave. This might require some +learning and might even get pretty complicated. + +\paragraph{Intelligent re-recording} +For tiny changes, MusE shall only re-render the relevant part. If you +change some MIDI notes, then begin re-recording shortly before the +changes, and end re-recording as soon as the recorded stuff doesn't +differ to much from the stuff coming from the synth. Then properly +blend the old recording with the updated part. + + + +\section{Slotted editors} +Currently, MusE has the pianoroll editor, drum editor, score editor, +then the controller editor which is inside the pianoroll/drum editor. +All these editors have a very similar concept: the "time axis" is +vertical and (almost) linear, they handle parts, and events are +manipulated similarly. + +A unified editor shall be created which allows you to combine different +kinds of editors in one window, properly aligned against each other. +These "different kinds of editors" shall be handled as "slots"; one +unified editor window consists of: +\begin{itemize} +\item A menu bar, containing stuff suitable for the complete window, + which might include window name, MDI-ness etc. +\item A toolbar which contains controls suitable for every single slot. +\item A container with one or more slots; the slots can be scrolled in + y-direction if there are multipe slots. +\item A time-scrollbar with zoom +\end{itemize} + +Each slot contains the following: +\begin{itemize} +\item A menu button, button box or control panel for setting up this + particular slot. This could contain "note head colors", "show + a transposing instrument" etc for score edit slots, "event + rectangle color", "grid size" and "snap to grid" for pianoroll/ + drum editors. +\item The actual canvas +\item A y-direction scroll bar, possibly with zoom control (for + pianoroll editor) +\end{itemize} + +The main window does not show its scroll bar if there is only one slot, +because the slot's scrollbar is sufficient then. + +Slots can be added, destroyed, moved around, maybe even merged (if the +slot types allow it); basically, you can compare them with the staves +in the score editor. + +The slots shall align against each other, that is, if a score editor +slot displays a key change with lots of accidentials, then all other +slots shall either also display the key change (if they're score slots) +or display a gap. Events which happen at the same time shall be at the +same x-coordinate, regardless which slot they are. + +\section{Controller master values} +All controllers (MIDI-controllers and also automation controllers) +shall have one set of "master values" which allow you to set a gain and +a bias. Instead of the actual set value, $\textrm{value} * \textrm{bias} ++ textrm{bias}$ shall be sent to the MIDI device / the plugin. For +controllers like "pan", the unbiased values shall be transformed, that +is, a pan of 64, with $\textrm{bias}=2$ and $\textrm{gain}=0.5$, shall +be transformed to 66 (because 64 is actually 0, while 0 is actually -64). +These values shall be set in the arranger and whereever the actual +controller/automation values can be edited. + +\section{Enabled-indicator while recording} +The MusE-plugin-GUIs shall display a small LED displaying whether a +controller is currently enabled or disabled. By clicking this LED, the +enabled state shall be switched. + +Furthermore, there shall be a dedicated window which only lets you switch +enabled/disabled states. This will be useful when using external GUIs +or the MIDI-controller-to-automation feature, to re-enable a controller +when in \usym{AUTO{\_}TOUCH} mode. + + + +\section{Linear automation editing} +While holding some modifier key (like shift), operating the MusE-native- +GUI sliders shall only generate control points when clicking and when +releasing the slider. This will result in linear graphs for continous +controllers, and in large steps for discrete controllers (which is in +particular useful for stuff like "which low/high-pass filter type to use"). + +Maybe make this behaviour default for discrete controllers? + + + +\end{document} + +% TODO: song type etc? kill it! +% song len box: same + +% TODO: unified automation and midi ctrls: +% both shall be editable through the same editors +% four modes: 1. discrete +% 2. continous (plus a global and per-port setting for the max rate) +% 3. switch (not necessarily ON/OFF; signals with color plus text annotation) +% 4. raw (no graph, instead a box with the value sent out (for "all voices off") +% they shall be copy-and-pastable, at least between compatible modes +% they shall be slotted, like pianoroll +% maybe also "overlapping", like arranger (?) +% midi recording tries to make out straight lines (like non-ended automation streams) +% + + +% new song (in general: load as template) plus "overwrite port config" +% should re-create the default jack devices and autoconnect them. + +% what's audio aux for? + +% bug in arranger/pcanvas/automation: if a controlpoint is directly on +% a line of another ctrl graph, you can't click it I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/midieditfunctions.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/midieditfunctions.png sono diversi diff -Nru muse-2.0~rc2/doc/muse.sgm muse-2.0/doc/muse.sgm --- muse-2.0~rc2/doc/muse.sgm 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/doc/muse.sgm 1970-01-01 01:00:00.000000000 +0100 @@ -1,493 +0,0 @@ - - - - -Einfhrung - Sequencer - - gibt einen kurzen berblick ber MusE; was ist MusE - und was kann man damit machen; zeigt den grundstzlichen - Aufbau von Songfile <-> Sequencer/Editor <-> Tongenerator - - - - - - - - - - Stichworte: - - Sequencer - Midifiles - Kompositionstool - Editor - - - - - Midi - - gibt eine kurze Einfhrung in Midi, soweit wie - fr das Verstndnis der nachfolgenden Kapitel - erforderlich - - - - Song - - Ein Song besteht in MusE aus Spuren (Tracks). Es gibt - mehrere verschiedene Spurklassen: - - - Midispuren - - - - Schlagzeugspuren - - Eine Schlagzeugspur ist eine Midispur, die - Schlagzeug Noten enthlt. - - - Audiospuren - - eine Audiospur enthlt Audiodaten - - - - - Eine Spur ist in "Parts" unterteilt. Ein Part enthlt - wiederum "Events". - - - - - Konfiguration - Midi Ports - - Jeder Midispur von MusE mu ein Midigert zugewiesen werden, - damit Events ausgegeben werden knnen. Dies geschieht nicht - direkt, sondern ber eine Midi Port Liste. Die Portliste - verweist erst auf das eigentliche Midigert. Dieser Mechanismus - erlaubt es, durch einfaches umkonfigurieren eines Midi Ports - auf ein anderes Midigert, einen kompletten Song auf einen - anderen Ausgang umzuleiten, ohne jede Spur einzeln umndern - zu mssen. - - - MusE erlaubt die Konfiguration von bis zu 16 Midi Ports. - Ports werden von 0-15 gezhlt. - Um berhaupt Midi spielen zu knnen mu mindestens ein - Port mit einem Midigert konfiguriert werden. - - - start MusE - - ffne Pulldown Menu Config->MidiPorts - - click in Spalte Name - um die Midi Treiberliste zu bekommen - - Miditreiber auswhlen - - prfen der Spalte State - auf OK - - wird in State ein - device - - - - - - - - - - - - - - Erste Schritte - Abspielen eines Midi Files - - - Erstellen eines neuen Songs - - - - - - -Arranger Funktionen - bersicht - - Arranger Window (Main-Window) - - Part Canvas - - Trackliste - - Trackinfo - - Channelinfo - - - - Tracks - - die Trackliste - - Bedeutung der Spalten - Trackinfo - - Bedeutung der Werte - Channelinfo - - Bedeutung der Werte - - Wie funktionieren Initialwerte? - - Tracks editieren - - markieren - - umbenennen - - verschieben - - lschen - - neue Tracks erstellen - - - - Parts - - Parts erstellen - Parts lschen - Parts editieren - - markieren - - verschieben - - verlngern/verkrzen - - dublizieren - - schneiden - - kleben - - umbenennen - - - - - -Der Sequencer - Die Zeitachse - - Stickworte: ticks, beats, bar, resolution, - tempo, smpte zeit - - - Transportfunktionen - - - Transportwindow - - start, stop, forward, rewind, ToStart, record - - marker: left, right, current - - loop, punchin, punchout - - - - Textmarker - - - - - -Die Midi Editoren - Raster und Quantisierung - - - Pianoroll Editor - - - Drum Editor - - - Kontroller Editor - - Beim Start eines Songs sind zunchst alle Midi Kontroller - undefiniert. Fr Kontroller im ChannelInfo wird dies durch - den Wert "off" angezeigt. Wird ein Kontroller im ChannelInfo - auf einen Anfangswert gesetzt, so wird dieser Wert jeweils - beim Start des Songs gesendet. - - - -- erklren Timing-Probleme bei zu dicht gesetzten - kontrollern --- - - Midi Kontroller Typen - Velocity - - Die Anschlagstrke fr ein Notenevent ist eigentlich - kein Midi Kontroller Wert, kann jedoch im Kontroller - Editor verndert werden. Die Anschlagstrke wird dabei - fr jeden Ton als Strich dargestellt. - - - 7 Bit Kontroller - - - 14 Bit Kontroller - - - RPN - - - NRPN - - - XG SysEx - - XG SysEx Controller sind z.Z. noch nicht implementiert. - - - SysEx - - SysEx Controller sind z.Z. noch nicht implementiert. - - - - Editieren von Kontroller Events - - - Einfgen von neuen Events - - - Konfiguration von Kontroller Typen - - - - Score Editor - - - List Editor - - - Mastertrack Editor - Tempo - - - Taktart - - - - - Midi Editor Funktionen - - - - - - - - Quantize - - - Modify Gate Time - - Mit der "Modify Gate Time" Funktion kann die Lnge der - ausgewhlten Noten absolut und relativ gendert werden. - - - Rate (0% ... 200%): Alle Gate Time-Werte werden mit diesem - Betrag multipliziert (relative nderung). Wird 100% gewhlt, - dann bleibt die Notenlnge erhalten. Grere Werte verlngern - Noten, kleinere Werte verkrzen Noten. Der Wert 0% stellt - die Lnge der Note auf 1. - - - Offset (-999...+999): Der hier eingegebene Wert verlngert - eine Note um entsprechend viele Ticks. - - - Die beide Parameter "Rate" und "Offset" knnen getrennt oder - gemeinsam eingesetzt werden. Die Lnge einer Note wird - zunchst mit dem "Rate"-Quotienten multipliziert. Erst - danach wird der Offset-Wert addiert. - - - Modify Velocity - - - Crescendo - - - Transpose - - - Thin Out - - - Erase Event - - - Note Shift - - - Move Clock - - - Copy Measure - - - Erase Measure - - - Delete Measure - - - Create Measure - - - Remove Overlaps - - - - - - -Midi Recording - Realtime Recording - Punchin und Punchout - - - Loop Recording - - - Metronome - - - Midi Fernsteuerung - - - - Step Recording - - - Midi Input Filter - - - Midi Input Transformator - - - Midi Mixer - - - - -Midi Sync - Master Mode - - - Slave Mode - - - - -Device Konfiguration - - MusE benutzt fr die Midi Ein- Ausgabe Midi Raw Devices. - Dies gibt MusE die volle Kontrolle ber das - Midi Timing. Dies ist im wesentlichen der Grund, warum - MusE das RTC-Device bentigt. - MusE nutzt _nicht_ den OSS sequencer /dev/sequencer. - Bei ALSA nutzt MusE lediglich die Routing Funktionen - des ALSA Sequencers, nicht jedoch die Mglichkeit, - Events zu schedulen. - - Midi Devices - Serielle Gerte - - - OSS - - - ALSA - - - Pipes - - - virtuelle Ports - - - - Audio Devices - ALSA - - - OSS - - - aRts - - - - - -Dateien - Midifile Import/Export - - - Muse Songfiles *.med - - - das globale Konfigurationsfile - - - das globale Konfigurationsfile - - - Drummaps - - - - -Eine Einfhrung in Midi - Das Midi Protokoll - - - Die Midi Hardware - - - GM - - - GS - - - XG - - - Standard Midi Files - - - Midi Timing - - - MTC - - - MMC - - - - -MusE Installation - Systemvorraussetzungen - - - Wo gibt es MusE - - - Kompilieren - - - Installation - - - - -Liste der Tastaturabkrzungen - - - - - I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/old/midieditfunctions.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/old/midieditfunctions.png sono diversi diff -Nru muse-2.0~rc2/doc/old/muse.sgm muse-2.0/doc/old/muse.sgm --- muse-2.0~rc2/doc/old/muse.sgm 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/doc/old/muse.sgm 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,493 @@ + + + + +Einfhrung + Sequencer + + gibt einen kurzen berblick ber MusE; was ist MusE + und was kann man damit machen; zeigt den grundstzlichen + Aufbau von Songfile <-> Sequencer/Editor <-> Tongenerator + + + + + + + + + + Stichworte: + + Sequencer + Midifiles + Kompositionstool + Editor + + + + + Midi + + gibt eine kurze Einfhrung in Midi, soweit wie + fr das Verstndnis der nachfolgenden Kapitel + erforderlich + + + + Song + + Ein Song besteht in MusE aus Spuren (Tracks). Es gibt + mehrere verschiedene Spurklassen: + + + Midispuren + + + + Schlagzeugspuren + + Eine Schlagzeugspur ist eine Midispur, die + Schlagzeug Noten enthlt. + + + Audiospuren + + eine Audiospur enthlt Audiodaten + + + + + Eine Spur ist in "Parts" unterteilt. Ein Part enthlt + wiederum "Events". + + + + + Konfiguration + Midi Ports + + Jeder Midispur von MusE mu ein Midigert zugewiesen werden, + damit Events ausgegeben werden knnen. Dies geschieht nicht + direkt, sondern ber eine Midi Port Liste. Die Portliste + verweist erst auf das eigentliche Midigert. Dieser Mechanismus + erlaubt es, durch einfaches umkonfigurieren eines Midi Ports + auf ein anderes Midigert, einen kompletten Song auf einen + anderen Ausgang umzuleiten, ohne jede Spur einzeln umndern + zu mssen. + + + MusE erlaubt die Konfiguration von bis zu 16 Midi Ports. + Ports werden von 0-15 gezhlt. + Um berhaupt Midi spielen zu knnen mu mindestens ein + Port mit einem Midigert konfiguriert werden. + + + start MusE + + ffne Pulldown Menu Config->MidiPorts + + click in Spalte Name + um die Midi Treiberliste zu bekommen + + Miditreiber auswhlen + + prfen der Spalte State + auf OK + + wird in State ein + device + + + + + + + + + + + + + + Erste Schritte + Abspielen eines Midi Files + + + Erstellen eines neuen Songs + + + + + + +Arranger Funktionen + bersicht + + Arranger Window (Main-Window) + - Part Canvas + - Trackliste + - Trackinfo + - Channelinfo + + + + Tracks + + die Trackliste + - Bedeutung der Spalten + Trackinfo + - Bedeutung der Werte + Channelinfo + - Bedeutung der Werte + - Wie funktionieren Initialwerte? + + Tracks editieren + - markieren + - umbenennen + - verschieben + - lschen + - neue Tracks erstellen + + + + Parts + + Parts erstellen + Parts lschen + Parts editieren + - markieren + - verschieben + - verlngern/verkrzen + - dublizieren + - schneiden + - kleben + - umbenennen + + + + + +Der Sequencer + Die Zeitachse + + Stickworte: ticks, beats, bar, resolution, + tempo, smpte zeit + + + Transportfunktionen + + - Transportwindow + - start, stop, forward, rewind, ToStart, record + - marker: left, right, current + - loop, punchin, punchout + + + + Textmarker + + + + + +Die Midi Editoren + Raster und Quantisierung + + + Pianoroll Editor + + + Drum Editor + + + Kontroller Editor + + Beim Start eines Songs sind zunchst alle Midi Kontroller + undefiniert. Fr Kontroller im ChannelInfo wird dies durch + den Wert "off" angezeigt. Wird ein Kontroller im ChannelInfo + auf einen Anfangswert gesetzt, so wird dieser Wert jeweils + beim Start des Songs gesendet. + + + -- erklren Timing-Probleme bei zu dicht gesetzten + kontrollern --- + + Midi Kontroller Typen + Velocity + + Die Anschlagstrke fr ein Notenevent ist eigentlich + kein Midi Kontroller Wert, kann jedoch im Kontroller + Editor verndert werden. Die Anschlagstrke wird dabei + fr jeden Ton als Strich dargestellt. + + + 7 Bit Kontroller + + + 14 Bit Kontroller + + + RPN + + + NRPN + + + XG SysEx + + XG SysEx Controller sind z.Z. noch nicht implementiert. + + + SysEx + + SysEx Controller sind z.Z. noch nicht implementiert. + + + + Editieren von Kontroller Events + + + Einfgen von neuen Events + + + Konfiguration von Kontroller Typen + + + + Score Editor + + + List Editor + + + Mastertrack Editor + Tempo + + + Taktart + + + + + Midi Editor Funktionen + + + + + + + + Quantize + + + Modify Gate Time + + Mit der "Modify Gate Time" Funktion kann die Lnge der + ausgewhlten Noten absolut und relativ gendert werden. + + + Rate (0% ... 200%): Alle Gate Time-Werte werden mit diesem + Betrag multipliziert (relative nderung). Wird 100% gewhlt, + dann bleibt die Notenlnge erhalten. Grere Werte verlngern + Noten, kleinere Werte verkrzen Noten. Der Wert 0% stellt + die Lnge der Note auf 1. + + + Offset (-999...+999): Der hier eingegebene Wert verlngert + eine Note um entsprechend viele Ticks. + + + Die beide Parameter "Rate" und "Offset" knnen getrennt oder + gemeinsam eingesetzt werden. Die Lnge einer Note wird + zunchst mit dem "Rate"-Quotienten multipliziert. Erst + danach wird der Offset-Wert addiert. + + + Modify Velocity + + + Crescendo + + + Transpose + + + Thin Out + + + Erase Event + + + Note Shift + + + Move Clock + + + Copy Measure + + + Erase Measure + + + Delete Measure + + + Create Measure + + + Remove Overlaps + + + + + + +Midi Recording + Realtime Recording + Punchin und Punchout + + + Loop Recording + + + Metronome + + + Midi Fernsteuerung + + + + Step Recording + + + Midi Input Filter + + + Midi Input Transformator + + + Midi Mixer + + + + +Midi Sync + Master Mode + + + Slave Mode + + + + +Device Konfiguration + + MusE benutzt fr die Midi Ein- Ausgabe Midi Raw Devices. + Dies gibt MusE die volle Kontrolle ber das + Midi Timing. Dies ist im wesentlichen der Grund, warum + MusE das RTC-Device bentigt. + MusE nutzt _nicht_ den OSS sequencer /dev/sequencer. + Bei ALSA nutzt MusE lediglich die Routing Funktionen + des ALSA Sequencers, nicht jedoch die Mglichkeit, + Events zu schedulen. + + Midi Devices + Serielle Gerte + + + OSS + + + ALSA + + + Pipes + + + virtuelle Ports + + + + Audio Devices + ALSA + + + OSS + + + aRts + + + + + +Dateien + Midifile Import/Export + + + Muse Songfiles *.med + + + das globale Konfigurationsfile + + + das globale Konfigurationsfile + + + Drummaps + + + + +Eine Einfhrung in Midi + Das Midi Protokoll + + + Die Midi Hardware + + + GM + + + GS + + + XG + + + Standard Midi Files + + + Midi Timing + + + MTC + + + MMC + + + + +MusE Installation + Systemvorraussetzungen + + + Wo gibt es MusE + + + Kompilieren + + + Installation + + + + +Liste der Tastaturabkrzungen + + + + + I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/arrow_tool.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/arrow_tool.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/bad_timing.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/bad_timing.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/main_window_annotated.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/main_window_annotated.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/main_window.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/main_window.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/main_window_with_arrangement.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/main_window_with_arrangement.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/main_window_with_midi_editor.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/main_window_with_midi_editor.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/main_window_with_tracks.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/main_window_with_tracks.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/mixer.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/mixer.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/mixer_strip.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/mixer_strip.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/muse2.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/muse2.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/no_audio.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/no_audio.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/organ_synth.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/organ_synth.png sono diversi I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/doc/pics/output_routing.png e /tmp/WAbpuZ8qWl/muse-2.0/doc/pics/output_routing.png sono diversi diff -Nru muse-2.0~rc2/doc/.svnignore muse-2.0/doc/.svnignore --- muse-2.0~rc2/doc/.svnignore 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/doc/.svnignore 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,5 @@ +documentation.aux +documentation.pdf +documentation.log +documentation.dvi + diff -Nru muse-2.0~rc2/grepmidi/grepmidi.cpp muse-2.0/grepmidi/grepmidi.cpp --- muse-2.0~rc2/grepmidi/grepmidi.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/grepmidi/grepmidi.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -128,7 +128,6 @@ { // printf("TRACK %d\n", trackno); int mtype, mlen; - int b; char* buffer; char tmp[4]; @@ -156,7 +155,7 @@ case 0xa0: case 0xb0: case 0xe0: - b = getc(f); + getc(f); ++cpos; case 0xc0: case 0xd0: diff -Nru muse-2.0~rc2/muse/app.cpp muse-2.0/muse/app.cpp --- muse-2.0~rc2/muse/app.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/app.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -36,6 +36,7 @@ #include #include #include +#include #include @@ -52,6 +53,7 @@ #include "bigtime.h" #include "cliplist/cliplist.h" #include "conf.h" +#include "config.h" #include "debug.h" #include "didyouknow.h" #include "drumedit.h" @@ -81,21 +83,20 @@ #include "tools.h" #include "widgets/unusedwavefiles.h" #include "functions.h" +#include "songpos_toolbar.h" +#include "sig_tempo_toolbar.h" namespace MusECore { -extern void initMidiSynth(); extern void exitJackAudio(); extern void exitDummyAudio(); extern void exitOSC(); extern void exitMidiAlsa(); - -extern void initMidiSequencer(); -extern void initAudio(); -extern void initAudioPrefetch(); } namespace MusEGui { +extern void deleteIcons(); + //extern void cacheJackRouteNames(); static pthread_t watchdogThread; @@ -106,12 +107,10 @@ #ifdef HAVE_LASH #include -#include lash_client_t * lash_client = 0; -extern snd_seq_t * alsaSeq; #endif /* HAVE_LASH */ -int watchAudio, watchAudioPrefetch, watchMidi; +int watchAudioPrefetch, watchMidi; pthread_t splashThread; @@ -187,12 +186,6 @@ midiprio = MusEGlobal::midiRTPrioOverride; // FIXME FIXME: The MusEGlobal::realTimePriority of the Jack thread seems to always be 5 less than the value passed to jackd command. - //if(midiprio == MusEGlobal::realTimePriority) - // printf("MusE: WARNING: Midi realtime priority %d is the same as audio realtime priority %d. Try a different setting.\n", - // midiprio, MusEGlobal::realTimePriority); - //if(midiprio == pfprio) - // printf("MusE: WARNING: Midi realtime priority %d is the same as audio prefetch realtime priority %d. Try a different setting.\n", - // midiprio, pfprio); MusEGlobal::audioPrefetch->start(pfprio); @@ -202,7 +195,6 @@ int counter=0; while (++counter) { - //if (counter > 10) { if (counter > 1000) { fprintf(stderr,"midi sequencer thread does not start!? Exiting...\n"); exit(33); @@ -296,14 +288,10 @@ // MusE //--------------------------------------------------------- -//MusE::MusE(int argc, char** argv) : QMainWindow(0, "mainwindow") -MusE::MusE(int /*argc*/, char** /*argv*/) : QMainWindow() +MusE::MusE() : QMainWindow() { - // By T356. For LADSPA plugins in plugin.cpp - // QWidgetFactory::addWidgetFactory( new PluginWidgetFactory ); ddskrjo setIconSize(ICON_SIZE); - setFocusPolicy(Qt::WheelFocus); - //setFocusPolicy(Qt::NoFocus); + setFocusPolicy(Qt::NoFocus); MusEGlobal::muse = this; // hack clipListEdit = 0; midiSyncConfig = 0; @@ -332,9 +320,10 @@ activeTopWin = NULL; currentMenuSharingTopwin = NULL; waitingForTopwin = NULL; - + appName = QString("MusE"); setWindowTitle(appName); + setWindowIcon(*MusEGui::museIcon); midiPluginSignalMapper = new QSignalMapper(this); followSignalMapper = new QSignalMapper(this); windowsMapper = new QSignalMapper(this); @@ -424,7 +413,7 @@ connect(MusEGlobal::rewindAction, SIGNAL(activated()), MusEGlobal::song, SLOT(rewind())); MusEGlobal::forwardAction = new QAction(QIcon(*MusEGui::fforwardIcon), - tr("Forward"), MusEGlobal::transportAction); + tr("Forward"), MusEGlobal::transportAction); MusEGlobal::forwardAction->setWhatsThis(tr("move current position")); connect(MusEGlobal::forwardAction, SIGNAL(activated()), MusEGlobal::song, SLOT(forward())); @@ -457,10 +446,6 @@ MusEGlobal::panicAction->setWhatsThis(tr("send note off to all midi channels")); connect(MusEGlobal::panicAction, SIGNAL(activated()), MusEGlobal::song, SLOT(panic())); - MusECore::initMidiInstruments(); - MusECore::initMidiPorts(); - MusECore::initMidiDevices(); - //----Actions //-------- File Actions @@ -544,8 +529,6 @@ autoMixerAction->setCheckable(true); autoSnapshotAction = new QAction(QIcon(*MusEGui::automation_take_snapshotIcon), tr("Take Snapshot"), this); autoClearAction = new QAction(QIcon(*MusEGui::automation_clear_dataIcon), tr("Clear Automation Data"), this); - autoClearAction->setEnabled(false); - //-------- Windows Actions windowsCascadeAction = new QAction(tr("Cascade"), this); @@ -675,6 +658,25 @@ // when adding a toolbar to the main window, remember adding it to // either the requiredToolbars or optionalToolbars list! + QToolBar* songpos_tb; + songpos_tb = addToolBar(tr("Song Position")); + songpos_tb->setObjectName("Song Position"); + songpos_tb->addWidget(new MusEGui::SongPosToolbarWidget(songpos_tb)); + songpos_tb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + songpos_tb->setContextMenuPolicy(Qt::PreventContextMenu); + + QToolBar* tempo_tb; + tempo_tb = addToolBar(tr("Tempo")); + tempo_tb->setObjectName("Tempo"); + MusEGui::TempoToolbarWidget* tempo_tb_widget = new MusEGui::TempoToolbarWidget(tempo_tb); + tempo_tb->addWidget(tempo_tb_widget); + + QToolBar* sig_tb; + sig_tb = addToolBar(tr("Signature")); + sig_tb->setObjectName("Signature"); + MusEGui::SigToolbarWidget* sig_tb_widget = new MusEGui::SigToolbarWidget(tempo_tb); + sig_tb->addWidget(sig_tb_widget); + tools = addToolBar(tr("File Buttons")); tools->setObjectName("File Buttons"); tools->addAction(fileNewAction); @@ -695,38 +697,16 @@ panicToolbar->addAction(MusEGlobal::panicAction); requiredToolbars.push_back(tools); + optionalToolbars.push_back(songpos_tb); + optionalToolbars.push_back(sig_tb); + optionalToolbars.push_back(tempo_tb); optionalToolbars.push_back(undoToolbar); optionalToolbars.push_back(transportToolbar); optionalToolbars.push_back(panicToolbar); - - //rlimit lim; - //getrlimit(RLIMIT_RTPRIO, &lim); - //printf("RLIMIT_RTPRIO soft:%d hard:%d\n", lim.rlim_cur, lim.rlim_max); // Reported 80, 80 even with non-RT kernel. - - if (MusEGlobal::realTimePriority < sched_get_priority_min(SCHED_FIFO)) - MusEGlobal::realTimePriority = sched_get_priority_min(SCHED_FIFO); - else if (MusEGlobal::realTimePriority > sched_get_priority_max(SCHED_FIFO)) - MusEGlobal::realTimePriority = sched_get_priority_max(SCHED_FIFO); + QSocketNotifier* ss = new QSocketNotifier(MusEGlobal::audio->getFromThreadFdr(), QSocketNotifier::Read, this); + connect(ss, SIGNAL(activated(int)), MusEGlobal::song, SLOT(seqSignal(int))); - // If we requested to force the midi thread priority... - if(MusEGlobal::midiRTPrioOverride > 0) - { - if (MusEGlobal::midiRTPrioOverride < sched_get_priority_min(SCHED_FIFO)) - MusEGlobal::midiRTPrioOverride = sched_get_priority_min(SCHED_FIFO); - else if (MusEGlobal::midiRTPrioOverride > sched_get_priority_max(SCHED_FIFO)) - MusEGlobal::midiRTPrioOverride = sched_get_priority_max(SCHED_FIFO); - } - - MusECore::initMidiSequencer(); - MusECore::initAudio(); - - // Moved here from Audio::Audio - QSocketNotifier* ss = new QSocketNotifier(MusEGlobal::audio->getFromThreadFdr(), QSocketNotifier::Read, this); - connect(ss, SIGNAL(activated(int)), MusEGlobal::song, SLOT(seqSignal(int))); - - MusECore::initAudioPrefetch(); - //--------------------------------------------------- // Popups //--------------------------------------------------- @@ -810,10 +790,6 @@ menu_functions->addAction(midiResetInstAction); menu_functions->addAction(midiInitInstActions); menu_functions->addAction(midiLocalOffAction); - /* - ** mpid4 = midiInputPlugins->insertItem( - ** QIconSet(*midi_inputplugins_random_rhythm_generatorIcon), tr("Random Rhythm Generator"), 4); - */ //------------------------------------------------------------- // popup Audio @@ -893,10 +869,7 @@ menu_help->addSeparator(); menu_help->addAction(helpAboutAction); - //menu_help->insertItem(tr("About&Qt"), this, SLOT(aboutQt())); - //menu_help->addSeparator(); - //menu_ids[CMD_START_WHATSTHIS] = menu_help->insertItem(tr("What's &This?"), this, SLOT(whatsThis()), 0); - + menu_help->addAction(tr("About &Qt"), qApp, SLOT(aboutQt())); //--------------------------------------------------- // Central Widget @@ -915,14 +888,15 @@ arrangerView = new MusEGui::ArrangerView(this); - arrangerView->shareToolsAndMenu(true); connect(arrangerView, SIGNAL(closed()), SLOT(arrangerClosed())); toplevels.push_back(arrangerView); arrangerView->hide(); _arranger=arrangerView->getArranger(); - arrangerView->setIsMdiWin(true); - + connect(tempo_tb_widget, SIGNAL(returnPressed()), arrangerView, SLOT(focusCanvas())); + connect(tempo_tb_widget, SIGNAL(escapePressed()), arrangerView, SLOT(focusCanvas())); + connect(sig_tb_widget, SIGNAL(returnPressed()), arrangerView, SLOT(focusCanvas())); + connect(sig_tb_widget, SIGNAL(escapePressed()), arrangerView, SLOT(focusCanvas())); //--------------------------------------------------- // read list of "Recent Projects" @@ -951,8 +925,6 @@ fclose(f); } - MusECore::initMidiSynth(); - arrangerView->populateAddTrack(); arrangerView->updateShortcuts(); @@ -961,23 +933,14 @@ MusEGlobal::song->blockSignals(false); - // Load start song moved to main.cpp p4.0.41 REMOVE Tim. - changeConfig(false); QSettings settings("MusE", "MusE-qt"); restoreGeometry(settings.value("MusE/geometry").toByteArray()); MusEGlobal::song->update(); updateWindowMenu(); - - // Load start song moved to main.cpp p4.0.41 REMOVE Tim. } - -MusE::~MusE() -{ -} - //--------------------------------------------------------- // setHeartBeat //--------------------------------------------------------- @@ -999,30 +962,45 @@ { QString name; bool useTemplate = false; + bool loadConfig = true; if (argc >= 2) name = argv[0]; else if (MusEGlobal::config.startMode == 0) { if (argc < 2) - //name = projectList[0] ? *projectList[0] : QString("untitled"); - name = projectList[0] ? *projectList[0] : MusEGui::getUniqueUntitledName(); // p4.0.40 + name = projectList[0] ? *projectList[0] : MusEGui::getUniqueUntitledName(); else name = argv[0]; printf("starting with selected song %s\n", MusEGlobal::config.startSong.toLatin1().constData()); } else if (MusEGlobal::config.startMode == 1) { - printf("starting with default template\n"); - name = MusEGlobal::museGlobalShare + QString("/templates/default.med"); + if(MusEGlobal::config.startSong.isEmpty()) // Sanity check to avoid some errors later + { + name = MusEGlobal::museGlobalShare + QString("/templates/default.med"); + loadConfig = false; + } + else + { + name = MusEGlobal::config.startSong; + loadConfig = MusEGlobal::config.startSongLoadConfig; + } useTemplate = true; + printf("starting with template %s\n", name.toLatin1().constData()); } else if (MusEGlobal::config.startMode == 2) { + if(MusEGlobal::config.startSong.isEmpty()) // Sanity check to avoid some errors later + { + name = MusEGlobal::museGlobalShare + QString("/templates/default.med"); + useTemplate = true; + loadConfig = false; + } + else + { + name = MusEGlobal::config.startSong; + loadConfig = MusEGlobal::config.startSongLoadConfig; + } printf("starting with pre configured song %s\n", MusEGlobal::config.startSong.toLatin1().constData()); - name = MusEGlobal::config.startSong; } - //loadProjectFile(name, useTemplate, true); - loadProjectFile(name, useTemplate, !useTemplate); - - //MusEGlobal::song->update(); - //updateWindowMenu(); + loadProjectFile(name, useTemplate, loadConfig); } //--------------------------------------------------------- @@ -1040,12 +1018,9 @@ void MusE::initMidiDevices() { - // Added by T356 - //MusEGlobal::audio->msgIdle(true); - + //MusEGlobal::audio->msgIdle(true); MusEGlobal::audio->msgInitMidiDevices(); - - //MusEGlobal::audio->msgIdle(false); + //MusEGlobal::audio->msgIdle(false); } //--------------------------------------------------------- @@ -1101,7 +1076,7 @@ progress->setCancelButton(0); if (!songTemplate) progress->setMinimumDuration(0); // if we are loading a template it will probably be fast and we can wait before showing the dialog - //progress->show(); + // // stop audio threads if running // @@ -1146,15 +1121,12 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool doReadMidiPorts) { - //if (audioMixer) - // audioMixer->clear(); if (mixer1) mixer1->clear(); if (mixer2) mixer2->clear(); _arranger->clear(); // clear track info - //if (clearSong()) - if (clearSong(doReadMidiPorts)) // Allow not touching things like midi ports. p4.0.17 TESTING: Maybe some problems... + if (clearSong(doReadMidiPorts)) // Allow not touching things like midi ports. return; progress->setValue(20); @@ -1166,8 +1138,7 @@ QApplication::restoreOverrideCursor(); return; } - //project.setFile("untitled"); - project.setFile(MusEGui::getUniqueUntitledName()); // p4.0.40 + project.setFile(MusEGui::getUniqueUntitledName()); MusEGlobal::museProject = MusEGlobal::museProjectInitPath; } else { @@ -1175,11 +1146,6 @@ MusEGlobal::museProject = fi.absolutePath(); project.setFile(name); } - // Changed by T356. 01/19/2010. We want the complete extension here. - //QString ex = fi.extension(false).toLower(); - //if (ex.length() == 3) - // ex += "."; - //ex = ex.left(4); QString ex = fi.completeSuffix().toLower(); QString mex = ex.section('.', -1, -1); if((mex == "gz") || (mex == "bz2")) @@ -1224,7 +1190,6 @@ } if (!songTemplate) { addProject(project.absoluteFilePath()); - //setWindowTitle(QString("MusE: Song: ") + project.completeBaseName()); setWindowTitle(QString("MusE: Song: ") + MusEGui::projectTitleFromFilename(project.absoluteFilePath())); } MusEGlobal::song->dirty = false; @@ -1237,41 +1202,37 @@ autoMixerAction->setChecked(MusEGlobal::automation); - //FINDMICHJETZT does this work? + showBigtime(MusEGlobal::config.bigTimeVisible); + showMixer1(MusEGlobal::config.mixer1Visible); + showMixer2(MusEGlobal::config.mixer2Visible); + + // Added p3.3.43 Make sure the geometry is correct because showMixerX() will NOT + // set the geometry if the mixer has already been created. + if(mixer1) { - showBigtime(MusEGlobal::config.bigTimeVisible); - //showMixer(MusEGlobal::config.mixerVisible); - showMixer1(MusEGlobal::config.mixer1Visible); - showMixer2(MusEGlobal::config.mixer2Visible); - - // Added p3.3.43 Make sure the geometry is correct because showMixerX() will NOT - // set the geometry if the mixer has already been created. - if(mixer1) - { - //if(mixer1->geometry().size() != MusEGlobal::config.mixer1.geometry.size()) // Moved below - // mixer1->resize(MusEGlobal::config.mixer1.geometry.size()); - - if(mixer1->geometry().topLeft() != MusEGlobal::config.mixer1.geometry.topLeft()) - mixer1->move(MusEGlobal::config.mixer1.geometry.topLeft()); - } - if(mixer2) - { - //if(mixer2->geometry().size() != MusEGlobal::config.mixer2.geometry.size()) // Moved below - // mixer2->resize(MusEGlobal::config.mixer2.geometry.size()); - - if(mixer2->geometry().topLeft() != MusEGlobal::config.mixer2.geometry.topLeft()) - mixer2->move(MusEGlobal::config.mixer2.geometry.topLeft()); - } - - //showMarker(MusEGlobal::config.markerVisible); // Moved below. Tim. - resize(MusEGlobal::config.geometryMain.size()); - move(MusEGlobal::config.geometryMain.topLeft()); - - if (MusEGlobal::config.transportVisible) - transport->show(); - transport->move(MusEGlobal::config.geometryTransport.topLeft()); - showTransport(MusEGlobal::config.transportVisible); + //if(mixer1->geometry().size() != MusEGlobal::config.mixer1.geometry.size()) // Moved below + // mixer1->resize(MusEGlobal::config.mixer1.geometry.size()); + + if(mixer1->geometry().topLeft() != MusEGlobal::config.mixer1.geometry.topLeft()) + mixer1->move(MusEGlobal::config.mixer1.geometry.topLeft()); } + if(mixer2) + { + //if(mixer2->geometry().size() != MusEGlobal::config.mixer2.geometry.size()) // Moved below + // mixer2->resize(MusEGlobal::config.mixer2.geometry.size()); + + if(mixer2->geometry().topLeft() != MusEGlobal::config.mixer2.geometry.topLeft()) + mixer2->move(MusEGlobal::config.mixer2.geometry.topLeft()); + } + + //showMarker(MusEGlobal::config.markerVisible); // Moved below. Tim. + resize(MusEGlobal::config.geometryMain.size()); + move(MusEGlobal::config.geometryMain.topLeft()); + + if (MusEGlobal::config.transportVisible) + transport->show(); + transport->move(MusEGlobal::config.geometryTransport.topLeft()); + showTransport(MusEGlobal::config.transportVisible); progress->setValue(40); @@ -1287,37 +1248,20 @@ progress->setValue(50); // Try this AFTER the song update above which does a mixer update... Tested OK - mixers resize properly now. - //FINDMICHJETZT does this work? + if(mixer1) { - if(mixer1) - { - if(mixer1->geometry().size() != MusEGlobal::config.mixer1.geometry.size()) - { - //printf("MusE::loadProjectFile1 resizing mixer1 x:%d y:%d w:%d h:%d\n", MusEGlobal::config.mixer1.geometry.x(), - // MusEGlobal::config.mixer1.geometry.y(), - // MusEGlobal::config.mixer1.geometry.width(), - // MusEGlobal::config.mixer1.geometry.height() - // ); - mixer1->resize(MusEGlobal::config.mixer1.geometry.size()); - } - } - if(mixer2) - { - if(mixer2->geometry().size() != MusEGlobal::config.mixer2.geometry.size()) - { - //printf("MusE::loadProjectFile1 resizing mixer2 x:%d y:%d w:%d h:%d\n", MusEGlobal::config.mixer2.geometry.x(), - // MusEGlobal::config.mixer2.geometry.y(), - // MusEGlobal::config.mixer2.geometry.width(), - // MusEGlobal::config.mixer2.geometry.height() - // ); - mixer2->resize(MusEGlobal::config.mixer2.geometry.size()); - } - } - - // Moved here from above due to crash with a song loaded and then File->New. - // Marker view list was not updated, had non-existent items from marker list (cleared in ::clear()). - showMarker(MusEGlobal::config.markerVisible); - } + if(mixer1->geometry().size() != MusEGlobal::config.mixer1.geometry.size()) + mixer1->resize(MusEGlobal::config.mixer1.geometry.size()); + } + if(mixer2) + { + if(mixer2->geometry().size() != MusEGlobal::config.mixer2.geometry.size()) + mixer2->resize(MusEGlobal::config.mixer2.geometry.size()); + } + + // Moved here from above due to crash with a song loaded and then File->New. + // Marker view list was not updated, had non-existent items from marker list (cleared in ::clear()). + showMarker(MusEGlobal::config.markerVisible); if (songTemplate) { @@ -1349,13 +1293,11 @@ void MusE::setUntitledProject() { setConfigDefaults(); - //QString name("untitled"); - QString name(MusEGui::getUniqueUntitledName()); // p4.0.40 - - MusEGlobal::museProject = "./"; //QFileInfo(name).absolutePath(); + QString name(MusEGui::getUniqueUntitledName()); + MusEGlobal::museProject = "./"; project.setFile(name); - //setWindowTitle(tr("MusE: Song: %1").arg(project.completeBaseName())); setWindowTitle(tr("MusE: Song: %1").arg(MusEGui::projectTitleFromFilename(name))); + writeTopwinState=true; } //--------------------------------------------------------- @@ -1402,20 +1344,11 @@ void MusE::loadTemplate() { + bool doReadMidiPorts; QString fn = MusEGui::getOpenFileName(QString("templates"), MusEGlobal::med_file_pattern, this, - tr("MusE: load template"), 0, MusEGui::MFileDialog::GLOBAL_VIEW); + tr("MusE: load template"), &doReadMidiPorts, MusEGui::MFileDialog::GLOBAL_VIEW); if (!fn.isEmpty()) { - // MusEGlobal::museProject = QFileInfo(fn).absolutePath(); - - //loadProjectFile(fn, true, true); - // With templates, don't clear midi ports. - // Any named ports in the template file are useless since they likely - // would not be found on other users' machines. - // So keep whatever the user currently has set up for ports. - // Note that this will also keep the current window configurations etc. - // but actually that's also probably a good thing. p4.0.17 Tim. TESTING: Maybe some problems... - loadProjectFile(fn, true, false); - + loadProjectFile(fn, true, doReadMidiPorts); setUntitledProject(); } } @@ -1426,29 +1359,20 @@ bool MusE::save() { - //if (project.completeBaseName() == "untitled") // p4.0.40 Must catch "untitled 1" "untitled 2" etc - //if (MusEGui::projectTitleFromFilename(project.absoluteFilePath()) == "untitled") - //if (MusEGui::projectTitleFromFilename(project.absoluteFilePath()) == MusEGui::getUniqueUntitledName()) - ///if (project.absoluteFilePath() == MusEGui::getUniqueUntitledName()) if (MusEGlobal::museProject == MusEGlobal::museProjectInitPath ) return saveAs(); else - return save(project.filePath(), false); + return save(project.filePath(), false, writeTopwinState); } //--------------------------------------------------------- // save //--------------------------------------------------------- -bool MusE::save(const QString& name, bool overwriteWarn) +bool MusE::save(const QString& name, bool overwriteWarn, bool writeTopwins) { QString backupCommand; - // By T356. Cache the jack in/out route names BEFORE saving. - // Because jack often shuts down during save, causing the routes to be lost in the file. - // Not required any more... - //cacheJackRouteNames(); - if (QFile::exists(name)) { backupCommand.sprintf("cp \"%s\" \"%s.backup\"", name.toLatin1().constData(), name.toLatin1().constData()); } @@ -1463,10 +1387,9 @@ if (f == 0) return false; MusECore::Xml xml(f); - write(xml); + write(xml, writeTopwins); if (ferror(f)) { QString s = "Write File\n" + name + "\nfailed: " - //+ strerror(errno); + QString(strerror(errno)); QMessageBox::critical(this, tr("MusE: Write File failed"), s); @@ -1537,7 +1460,6 @@ QSettings settings("MusE", "MusE-qt"); settings.setValue("MusE/geometry", saveGeometry()); - //settings.setValue("MusE/windowState", saveState()); writeGlobalConfiguration(); @@ -1603,6 +1525,10 @@ delete MusEGlobal::midiSeq; delete MusEGlobal::song; + if(MusEGlobal::debugMsg) + printf("MusE: Deleting icons\n"); + deleteIcons(); + qApp->quit(); } @@ -1621,7 +1547,6 @@ void MusE::showMarker(bool flag) { - //printf("showMarker %d\n",flag); if (markerView == 0) { markerView = new MusEGui::MarkerView(this); @@ -1656,7 +1581,7 @@ if ((*lit)->isVisible() && (*lit)->widget() != markerView) { if (MusEGlobal::debugMsg) - printf("bringing '%s' to front instead of closed arranger window\n",(*lit)->widget()->windowTitle().toAscii().data()); + printf("bringing '%s' to front instead of closed marker window\n",(*lit)->widget()->windowTitle().toAscii().data()); bringToFront((*lit)->widget()); @@ -1731,21 +1656,6 @@ viewTransportAction->setChecked(flag); } -/* -//--------------------------------------------------------- -// getRoutingPopupMenu -// Get the special common routing popup menu. Used (so far) -// by audio strip, midi strip, and midi trackinfo. -//--------------------------------------------------------- - -MusEGui::RoutePopupMenu* MusE::() -{ - if(!routingPopupMenu) - routingPopupMenu = new MusEGui::RoutePopupMenu(this); - return routingPopupMenu; -} -*/ - //--------------------------------------------------------- // saveAs //--------------------------------------------------------- @@ -1753,17 +1663,18 @@ bool MusE::saveAs() { QString name; - //if (MusEGlobal::museProject == MusEGlobal::museProjectInitPath ) // Use project dialog always now. if (MusEGlobal::config.useProjectSaveDialog) { MusEGui::ProjectCreateImpl pci(MusEGlobal::muse); + pci.setWriteTopwins(writeTopwinState); if (pci.exec() == QDialog::Rejected) { return false; } MusEGlobal::song->setSongInfo(pci.getSongInfo(), true); name = pci.getProjectPath(); + writeTopwinState=pci.getWriteTopwins(); } else { - name = MusEGui::getSaveFileName(QString(""), MusEGlobal::med_file_save_pattern, this, tr("MusE: Save As")); + name = MusEGui::getSaveFileName(QString(""), MusEGlobal::med_file_save_pattern, this, tr("MusE: Save As"), &writeTopwinState); if (name.isEmpty()) return false; } @@ -1774,19 +1685,14 @@ QMessageBox::warning(this,"Path error","Can't create project path", QMessageBox::Ok); return false; } - //} - //else { - // name = MusEGui::getSaveFileName(QString(""), MusEGlobal::med_file_save_pattern, this, tr("MusE: Save As")); - //} bool ok = false; if (!name.isEmpty()) { QString tempOldProj = MusEGlobal::museProject; MusEGlobal::museProject = QFileInfo(name).absolutePath(); - ok = save(name, true); + ok = save(name, true, writeTopwinState); if (ok) { project.setFile(name); - //setWindowTitle(tr("MusE: Song: %1").arg(project.completeBaseName())); setWindowTitle(tr("MusE: Song: %1").arg(MusEGui::projectTitleFromFilename(name))); addProject(name); } @@ -1808,7 +1714,6 @@ case 1: startListEditor(pl); break; case 3: startDrumEditor(pl, true); break; case 4: startWaveEditor(pl); break; - //case 5: startScoreEdit(pl, true); break; } } @@ -2038,17 +1943,29 @@ void MusE::showDidYouKnowDialog() { if ((bool)MusEGlobal::config.showDidYouKnow == true) { - MusEGui::DidYouKnowWidget dyk; - dyk.tipText->setText("To get started with MusE why don't you try some demo songs available at http://demos.muse-sequencer.org/"); - dyk.show(); - if( dyk.exec()) { - if (dyk.dontShowCheckBox->isChecked()) { - //printf("disables dialog!\n"); - MusEGlobal::config.showDidYouKnow=false; - MusEGlobal::muse->changeConfig(true); // save settings - } - } - } + MusEGui::DidYouKnowWidget dyk; + + QFile file(MusEGlobal::museGlobalShare + "/didyouknow.txt"); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + printf("could not open didyouknow.txt!\n"); + return; + } + + while (!file.atEnd()) { + dyk.tipList.append(file.readLine()); + } + + //dyk.tipList.append(tr("To get started with MusE why don't you visit the tutorials at
http://muse-sequencer.org/index.php/Support")); + //dyk.tipList.append(tr("MusE can act as a realtime audio mixer if you connect it to jack!")); + + dyk.show(); + if( dyk.exec()) { + if (dyk.dontShowCheckBox->isChecked()) { + MusEGlobal::config.showDidYouKnow=false; + MusEGlobal::muse->changeConfig(true); // save settings + } + } + } } //--------------------------------------------------------- // startDefineController @@ -2062,7 +1979,6 @@ void MusE::startClipList(bool checked) { if (clipListEdit == 0) { - //clipListEdit = new ClipListEdit(); clipListEdit = new MusEGui::ClipListEdit(this); toplevels.push_back(clipListEdit); connect(clipListEdit, SIGNAL(isDeleting(MusEGui::TopWin*)), SLOT(toplevelDeleting(MusEGui::TopWin*))); @@ -2152,14 +2068,11 @@ case MusEGui::TopWin::ARRANGER: break; case MusEGui::TopWin::CLIPLIST: - // ORCAN: This needs to be verified. aid2 used to correspond to Cliplist: - //menu_audio->setItemChecked(aid2, false); viewCliplistAction->setChecked(false); if (currentMenuSharingTopwin == clipListEdit) setCurrentMenuSharingTopwin(NULL); updateWindowMenu(); return; - //break; // the following editors can exist in more than // one instantiation: @@ -2197,7 +2110,6 @@ } else if (key == MusEGui::shortcuts[MusEGui::SHRT_PLAY_TOGGLE].key) { if (MusEGlobal::audio->isPlaying()) - //MusEGlobal::song->setStopPlay(false); MusEGlobal::song->setStop(true); else if (!MusEGlobal::config.useOldStyleStopShortCut) MusEGlobal::song->setPlay(true); @@ -2209,7 +2121,6 @@ } } else if (key == MusEGui::shortcuts[MusEGui::SHRT_STOP].key) { - //MusEGlobal::song->setPlay(false); MusEGlobal::song->setStop(true); } else if (key == MusEGui::shortcuts[MusEGui::SHRT_GOTO_START].key) { @@ -2284,9 +2195,6 @@ else if (key == MusEGui::shortcuts[MusEGui::SHRT_OPEN_BIGTIME].key) { toggleBigTime(!viewBigtimeAction->isChecked()); } - //else if (key == MusEGui::shortcuts[MusEGui::SHRT_OPEN_MIXER].key) { - // toggleMixer(); - // } else if (key == MusEGui::shortcuts[MusEGui::SHRT_OPEN_MIXER].key) { toggleMixer1(!viewMixerAAction->isChecked()); } @@ -2307,12 +2215,14 @@ } } +#if 0 //--------------------------------------------------------- // catchSignal // only for debugging //--------------------------------------------------------- -#if 0 +// if enabling this code, also enable the line containing +// "catchSignal" in main.cpp static void catchSignal(int sig) { if (MusEGlobal::debugMsg) @@ -2382,10 +2292,17 @@ void MusE::loadTheme(const QString& s) { - if (style()->objectName() != s) + QStringList sl = QStyleFactory::keys(); + if (s.isEmpty() || sl.indexOf(s) == -1) { + if(MusEGlobal::debugMsg) + printf("Set style does not exist, setting default.\n"); + qApp->setStyle(Appearance::defaultStyle); + qApp->style()->setObjectName(Appearance::defaultStyle); + } + else if (qApp->style()->objectName() != s) { - QApplication::setStyle(s); - style()->setObjectName(s); // p4.0.45 + qApp->setStyle(s); + qApp->style()->setObjectName(s); } } @@ -2424,7 +2341,6 @@ if (writeFlag) writeGlobalConfiguration(); - //loadStyleSheetFile(MusEGlobal::config.styleSheetFile); loadTheme(MusEGlobal::config.style); QApplication::setFont(MusEGlobal::config.fonts[0]); if(!MusEGlobal::config.styleSheetFile.isEmpty()) @@ -2466,19 +2382,6 @@ } -#if 0 -//--------------------------------------------------------- -// openAudioFileManagement -//--------------------------------------------------------- -void MusE::openAudioFileManagement() - { - if (!audioFileManager) { - audioFileManager = new AudioFileManager(this, "audiofilemanager", false); - audioFileManager->show(); - } - audioFileManager->setVisible(true); - } -#endif //--------------------------------------------------------- // bounceToTrack //--------------------------------------------------------- @@ -2651,9 +2554,8 @@ MusEGlobal::song->setPos(0,MusEGlobal::song->lPos(),0,true,true); MusEGlobal::song->bounceOutput = ao; ao->setRecFile(sf); - //willfoobar-2011-02-13 - //old code//printf("ao->setRecFile %d\n", sf); - printf("ao->setRecFile %ld\n", (unsigned long)sf); + if(MusEGlobal::debugMsg) + printf("ao->setRecFile %p\n", sf); MusEGlobal::song->setRecord(true, false); MusEGlobal::song->setRecordFlag(ao, true); ao->prepareRecording(); @@ -2702,10 +2604,9 @@ { /* save file */ QString ss = QString(lash_event_get_string(event)) + QString("/lash-project-muse.med"); - int ok = save (ss.toAscii(), false); + int ok = save (ss.toAscii(), false, true); if (ok) { project.setFile(ss.toAscii()); - //setWindowTitle(tr("MusE: Song: %1").arg(project.completeBaseName())); setWindowTitle(tr("MusE: Song: %1").arg(MusEGui::projectTitleFromFilename(project.absoluteFilePath()))); addProject(ss.toAscii()); MusEGlobal::museProject = QFileInfo(ss.toAscii()).absolutePath(); @@ -2842,11 +2743,28 @@ void MusE::switchMixerAutomation() { + // Could be intensive, try idling instead of a single message. + MusEGlobal::audio->msgIdle(true); + MusEGlobal::automation = ! MusEGlobal::automation; // Clear all pressed and touched and rec event lists. MusEGlobal::song->clearRecAutomation(true); - -// printf("automation = %d\n", automation); + + // If going to OFF mode, need to update current 'manual' values from the automation values at this time... + if(!MusEGlobal::automation) + { + MusECore::TrackList* tracks = MusEGlobal::song->tracks(); + for (MusECore::iTrack i = tracks->begin(); i != tracks->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + MusECore::AudioTrack* track = static_cast(*i); + if(track->automationType() != AUTO_OFF) // && track->automationType() != AUTO_WRITE) + track->controller()->updateCurValues(MusEGlobal::audio->curFramePos()); + } + } + + MusEGlobal::audio->msgIdle(false); + autoMixerAction->setChecked(MusEGlobal::automation); } @@ -2856,7 +2774,24 @@ void MusE::clearAutomation() { - printf("not implemented\n"); + QMessageBox::StandardButton b = QMessageBox::warning(this, appName, + tr("This will clear all automation data on\n all audio tracks!\nProceed?"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel); + + if(b != QMessageBox::Ok) + return; + + // Could be intensive, try idling instead of a single message. + MusEGlobal::audio->msgIdle(true); + + MusECore::TrackList* tracks = MusEGlobal::song->tracks(); + for (MusECore::iTrack i = tracks->begin(); i != tracks->end(); ++i) { + if ((*i)->isMidiTrack()) + continue; + static_cast(*i)->controller()->clearAllAutomation(); + } + + MusEGlobal::audio->msgIdle(false); } //--------------------------------------------------------- @@ -2865,18 +2800,35 @@ void MusE::takeAutomationSnapshot() { - int frame = MusEGlobal::song->cPos().frame(); + QMessageBox::StandardButton b = QMessageBox::warning(this, appName, + tr("This takes an automation snapshot of\n all controllers on all audio tracks,\n" + " at the current position.\nProceed?"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel); + + if(b != QMessageBox::Ok) + return; + + // Could be intensive, try idling instead of a single message. + MusEGlobal::audio->msgIdle(true); + + int frame = MusEGlobal::audio->curFramePos(); MusECore::TrackList* tracks = MusEGlobal::song->tracks(); for (MusECore::iTrack i = tracks->begin(); i != tracks->end(); ++i) { if ((*i)->isMidiTrack()) continue; - MusECore::AudioTrack* track = (MusECore::AudioTrack*)*i; - MusECore::CtrlListList* cll = track->controller(); + MusECore::AudioTrack* track = static_cast(*i); + MusECore::CtrlListList* cll = track->controller(); + // Need to update current 'manual' values from the automation values at this time. + if(track->automationType() != AUTO_OFF) // && track->automationType() != AUTO_WRITE) + cll->updateCurValues(frame); + for (MusECore::iCtrlList icl = cll->begin(); icl != cll->end(); ++icl) { double val = icl->second->curVal(); icl->second->add(frame, val); } } + + MusEGlobal::audio->msgIdle(false); } //--------------------------------------------------------- @@ -2950,12 +2902,7 @@ helpManualAction->setShortcut(MusEGui::shortcuts[MusEGui::SHRT_OPEN_HELP].key); fullscreenAction->setShortcut(MusEGui::shortcuts[MusEGui::SHRT_FULLSCREEN].key); - // Orcan: Old stuff, needs to be converted. These aren't used anywhere so I commented them out - //menuSettings->setAccel(MusEGui::shortcuts[MusEGui::SHRT_CONFIG_AUDIO_PORTS].key, menu_ids[CMD_CONFIG_AUDIO_PORTS]); - //menu_help->setAccel(menu_ids[CMD_START_WHATSTHIS], MusEGui::shortcuts[MusEGui::SHRT_START_WHATSTHIS].key); - //arrangerView->updateMusEGui::Shortcuts(); //commented out by flo: is done via signal - } //--------------------------------------------------------- @@ -3075,27 +3022,10 @@ QWidget* MusE::bigtimeWindow() { return bigtime; } //--------------------------------------------------------- -// focusInEvent -//--------------------------------------------------------- - -void MusE::focusInEvent(QFocusEvent* ev) - { - //if (mixer1) // Removed p4.0.45 - // mixer1->raise(); - //if (mixer2) - // mixer2->raise(); - //raise(); - QMainWindow::focusInEvent(ev); - } - - - -//--------------------------------------------------------- // execDeliveredScript //--------------------------------------------------------- void MusE::execDeliveredScript(int id) { - //QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; MusEGlobal::song->executeScript(MusEGlobal::song->getScriptPath(id, true).toLatin1().constData(), MusEGlobal::song->getSelectedMidiParts(), 0, false); // TODO: get quant from arranger } @@ -3116,8 +3046,77 @@ unused.exec(); } -void MusE::focusChanged(QWidget*, QWidget* now) +void MusE::focusChanged(QWidget* old, QWidget* now) { + if(MusEGlobal::heavyDebugMsg) + { + printf("\n"); + printf("focusChanged: old:%p now:%p activeWindow:%p\n", old, now, qApp->activeWindow()); + if(old) + printf(" old type: %s\n", typeid(*old).name()); + if(now) + printf(" now type: %s\n", typeid(*now).name()); + if (dynamic_cast(now)!=0) + { + QWidget* tmp=dynamic_cast(now)->widget(); + if (tmp) + printf(" subwin contains %p which is a %s\n", tmp, typeid(*tmp).name()); + else + printf(" subwin contains NULL\n"); + } + if(qApp->activeWindow()) + printf(" activeWindow type: %s\n", typeid(*qApp->activeWindow()).name()); + printf("\n"); + } + + // NOTE: FYI: This is what is required if, for 'Smart Focus', we try simply calling clearFocus from each relevant control + // upon Return/Enter/Escape or whatever. + // It's nice to be able to do that, but this was crash-prone and I don't like it. Instead each relevant control connects + // signals to slots in the editors which set focus on the canvases AND activate their top windows. + // Who knows, this code might be needed in some way. Informational, please keep. Tim. + // + /* + // Allow focus proxy to do its job (if set). + if(now == this) + { + if(mdiArea) + { + QMdiSubWindow* mw = mdiArea->activeSubWindow(); + if(mw && mw->widget()->focusProxy()) // Did we set a focus proxy on the window? + //mw->widget()->setFocus(); // Give focus to the window so proxy gets it. + mw->widget()->focusProxy()->setFocus(); // Give focus directly to the proxy. + } + } + else + if(!now) + { + QWidget* aw = qApp->activeWindow(); + if(aw) + { + if(aw == this) // Active top-level window is MusE? + { + if(mdiArea) + { + QMdiSubWindow* mw = mdiArea->activeSubWindow(); + if(mw && mw->widget()->focusProxy()) // Did we set a focus proxy on the window? + //mw->widget()->setFocus(); // Give focus to the window so proxy gets it. + mw->widget()->focusProxy()->setFocus(); // Give focus directly to the proxy. + } + } + else // Active top-level window is outside the MusE mdi window. + { + if(aw->focusProxy()) // Did we set a focus proxy on the window? + { + //aw->setFocus(); // Give focus to the window so proxy gets it. + aw->focusProxy()->setFocus(); // Give focus directly to the proxy. + if(!aw->focusProxy()->isActiveWindow()) + aw->focusProxy()->activateWindow(); + } + } + } + } + */ + QWidget* ptr=now; if (activeTopWin) @@ -3130,8 +3129,17 @@ if ( (dynamic_cast(ptr)!=0) && (dynamic_cast( ((QMdiSubWindow*)ptr)->widget() )!=0) ) { - waitingForTopwin=(MusEGui::TopWin*) ((QMdiSubWindow*)ptr)->widget(); - return; + MusEGui::TopWin* tmp = (MusEGui::TopWin*) ((QMdiSubWindow*)ptr)->widget(); + if (tmp->initalizing()) + { + waitingForTopwin=tmp; + return; + } + else + { + ptr=tmp; + // go on. + } } while (ptr) @@ -3140,7 +3148,7 @@ printf("focusChanged: at widget %p with type %s\n",ptr, typeid(*ptr).name()); if ( (dynamic_cast(ptr)!=0) || // *ptr is a TopWin or a derived class - (ptr==this) ) // the main window is selected + (ptr==this) ) // the main window is selected break; ptr=dynamic_cast(ptr->parent()); //in the unlikely case that ptr is a QObject, this returns NULL, which stops the loop } @@ -3206,7 +3214,7 @@ for (list::iterator it = foreignToolbars.begin(); it!=foreignToolbars.end(); it++) if (*it) { - if (MusEGlobal::debugMsg) printf(" removing sharer's toolbar '%s'\n", (*it)->windowTitle().toAscii().data()); + if (MusEGlobal::heavyDebugMsg) printf(" removing sharer's toolbar '%s'\n", (*it)->windowTitle().toAscii().data()); removeToolBar(*it); // this does not delete *it, which is good (*it)->setParent(NULL); } @@ -3218,7 +3226,7 @@ for (list::iterator it = optionalToolbars.begin(); it!=optionalToolbars.end(); it++) if (*it) { - if (MusEGlobal::debugMsg) printf(" removing optional toolbar '%s'\n", (*it)->windowTitle().toAscii().data()); + if (MusEGlobal::heavyDebugMsg) printf(" removing optional toolbar '%s'\n", (*it)->windowTitle().toAscii().data()); removeToolBar(*it); // this does not delete *it, which is good (*it)->setParent(NULL); } @@ -3238,7 +3246,7 @@ const QList& actions=win->menuBar()->actions(); for (QList::const_iterator it=actions.begin(); it!=actions.end(); it++) { - if (MusEGlobal::debugMsg) printf(" menu entry '%s'\n", (*it)->text().toAscii().data()); + if (MusEGlobal::heavyDebugMsg) printf(" adding menu entry '%s'\n", (*it)->text().toAscii().data()); menuBar()->addAction(*it); } @@ -3249,7 +3257,7 @@ for (list::const_iterator it=toolbars.begin(); it!=toolbars.end(); it++) if (*it) { - if (MusEGlobal::debugMsg) printf(" toolbar '%s'\n", (*it)->windowTitle().toAscii().data()); + if (MusEGlobal::heavyDebugMsg) printf(" adding toolbar '%s'\n", (*it)->windowTitle().toAscii().data()); addToolBar(*it); foreignToolbars.push_back(*it); @@ -3257,7 +3265,7 @@ } else { - if (MusEGlobal::debugMsg) printf(" toolbar break\n"); + if (MusEGlobal::heavyDebugMsg) printf(" adding toolbar break\n"); addToolBarBreak(); foreignToolbars.push_back(NULL); @@ -3317,6 +3325,13 @@ emit activeTopWinChanged(activeTopWin); } } + else if (topwin == currentMenuSharingTopwin) + { + printf("====== DEBUG ======: topwin's menu got inited AFTER being shared!\n"); + if (!topwin->sharesToolsAndMenu()) printf("====== ======: WTF, now it doesn't share any more?!?\n"); + setCurrentMenuSharingTopwin(NULL); + setCurrentMenuSharingTopwin(topwin); + } } void MusE::updateWindowMenu() diff -Nru muse-2.0~rc2/muse/appearance.cpp muse-2.0/muse/appearance.cpp --- muse-2.0~rc2/muse/appearance.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/appearance.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -1,5 +1,4 @@ //========================================================= -//========================================================= // MusE // Linux Music Editor // $Id: appearance.cpp,v 1.11.2.5 2009/11/14 03:37:48 terminator356 Exp $ @@ -28,7 +27,6 @@ #include #include #include -#include #include #include #include @@ -50,6 +48,7 @@ namespace MusEGui { +QString Appearance::defaultStyle=""; int BG_ITEM_HEIGHT = 30; class BgPreviewWidget : public QWidget { @@ -146,25 +145,9 @@ global_bg->setFlags(Qt::ItemIsEnabled); user_bg = new QTreeWidgetItem(backgroundTree, QStringList(tr("Custom")), 0); user_bg->setFlags(Qt::ItemIsEnabled); - /* - partShownames->setChecked(config->canvasShowPartType & 1); - partShowevents->setChecked(config->canvasShowPartType & 2); - partShowCakes->setChecked(!(config->canvasShowPartType & 2)); - - eventNoteon->setChecked(config->canvasShowPartEvent & (1 << 0)); - eventPolypressure->setChecked(config->canvasShowPartEvent & (1 << 1)); - eventController->setChecked(config->canvasShowPartEvent & (1 << 2)); - eventProgramchange->setChecked(config->canvasShowPartEvent & (1 << 3)); - eventAftertouch->setChecked(config->canvasShowPartEvent & (1 << 4)); - eventPitchbend->setChecked(config->canvasShowPartEvent & (1 << 5)); - eventSpecial->setChecked(config->canvasShowPartEvent & (1 << 6)); - eventButtonGroup->setEnabled(config->canvasShowPartType == 2); - arrGrid->setChecked(config->canvasShowGrid); - */ colorframe->setAutoFillBackground(true); aPalette = new QButtonGroup(aPaletteBox); - // There must be an easier way to do this by a for loop. No? : aPalette->addButton(palette0, 0); aPalette->addButton(palette1, 1); aPalette->addButton(palette2, 2); @@ -189,26 +172,7 @@ itemList->clear(); aid = new IdListViewItem(0, itemList, "Arranger"); id = new IdListViewItem(0, aid, "PartColors"); - // Names moved into global config by Tim. - /* - new IdListViewItem(0x400, id, "Default"); - new IdListViewItem(0x401, id, "Refrain"); - new IdListViewItem(0x402, id, "Bridge"); - new IdListViewItem(0x403, id, "Intro"); - new IdListViewItem(0x404, id, "Coda"); - new IdListViewItem(0x405, id, "Chorus"); - new IdListViewItem(0x406, id, "Solo"); - new IdListViewItem(0x407, id, "Brass"); - new IdListViewItem(0x408, id, "Percussion"); - new IdListViewItem(0x409, id, "Drums"); - new IdListViewItem(0x40a, id, "Guitar"); - new IdListViewItem(0x40b, id, "Bass"); - new IdListViewItem(0x40c, id, "Flute"); - new IdListViewItem(0x40d, id, "Strings"); - new IdListViewItem(0x40e, id, "Keyboard"); - new IdListViewItem(0x40f, id, "Piano"); - new IdListViewItem(0x410, id, "Saxophon"); - */ + for(int i = 0; i < NUM_PARTCOLORS; ++i) new IdListViewItem(0x400 + i, id, MusEGlobal::config.partColorNames[i]); @@ -271,20 +235,6 @@ //--------------------------------------------------- // STYLE //--------------------------------------------------- - - /* - themeComboBox->clear(); - QString cs = MusEGlobal::muse->style().name(); - cs = cs.lower(); - - themeComboBox->insertStringList(QStyleFactory::keys()); - for (int i = 0; i < themeComboBox->count(); ++i) { - if (themeComboBox->text(i).lower() == cs) { - themeComboBox->setCurrentItem(i); - } - } - */ - openStyleSheet->setIcon(*openIcon); connect(openStyleSheet, SIGNAL(clicked()), SLOT(browseStyleSheet())); defaultStyleSheet->setIcon(*undoIcon); @@ -331,111 +281,6 @@ QPalette pal; - /* - pal.setColor(palette0->backgroundRole(), config->palette[0]); - palette0->setPalette(pal); - pal.setColor(palette1->backgroundRole(), config->palette[1]); - palette1->setPalette(pal); - pal.setColor(palette2->backgroundRole(), config->palette[2]); - palette2->setPalette(pal); - pal.setColor(palette3->backgroundRole(), config->palette[3]); - palette3->setPalette(pal); - pal.setColor(palette4->backgroundRole(), config->palette[4]); - palette4->setPalette(pal); - pal.setColor(palette5->backgroundRole(), config->palette[5]); - palette5->setPalette(pal); - pal.setColor(palette6->backgroundRole(), config->palette[6]); - palette6->setPalette(pal); - pal.setColor(palette7->backgroundRole(), config->palette[7]); - palette7->setPalette(pal); - pal.setColor(palette8->backgroundRole(), config->palette[8]); - palette8->setPalette(pal); - pal.setColor(palette9->backgroundRole(), config->palette[9]); - palette9->setPalette(pal); - pal.setColor(palette10->backgroundRole(), config->palette[10]); - palette10->setPalette(pal); - pal.setColor(palette11->backgroundRole(), config->palette[11]); - palette11->setPalette(pal); - pal.setColor(palette12->backgroundRole(), config->palette[12]); - palette12->setPalette(pal); - pal.setColor(palette13->backgroundRole(), config->palette[13]); - palette13->setPalette(pal); - pal.setColor(palette14->backgroundRole(), config->palette[14]); - palette14->setPalette(pal); - pal.setColor(palette15->backgroundRole(), config->palette[15]); - palette15->setPalette(pal); - */ - - /* - pal.setColor(QPalette::Window, config->palette[0]); - palette0->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[1]); - palette1->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[2]); - palette2->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[3]); - palette3->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[4]); - palette4->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[5]); - palette5->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[6]); - palette6->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[7]); - palette7->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[8]); - palette8->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[9]); - palette9->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[10]); - palette10->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[11]); - palette11->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[12]); - palette12->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[13]); - palette13->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[14]); - palette14->setPalette(pal); - pal.setColor(QPalette::Window, config->palette[15]); - palette15->setPalette(pal); - */ - - /* - pal.setColor(QPalette::Button, config->palette[0]); - palette0->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[1]); - palette1->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[2]); - palette2->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[3]); - palette3->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[4]); - palette4->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[5]); - palette5->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[6]); - palette6->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[7]); - palette7->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[8]); - palette8->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[9]); - palette9->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[10]); - palette10->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[11]); - palette11->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[12]); - palette12->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[13]); - palette13->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[14]); - palette14->setPalette(pal); - pal.setColor(QPalette::Button, config->palette[15]); - palette15->setPalette(pal); - */ - palette0->setStyleSheet(QString("background-color: ") + config->palette[0].name()); palette1->setStyleSheet(QString("background-color: ") + config->palette[1].name()); palette2->setStyleSheet(QString("background-color: ") + config->palette[2].name()); @@ -503,23 +348,25 @@ eventAftertouch->setChecked(config->canvasShowPartEvent & (1 << 4)); eventPitchbend->setChecked(config->canvasShowPartEvent & (1 << 5)); eventSpecial->setChecked(config->canvasShowPartEvent & (1 << 6)); - //eventButtonGroup->setEnabled(config->canvasShowPartType == 2); eventButtonGroup->setEnabled(config->canvasShowPartType & 2); arrGrid->setChecked(config->canvasShowGrid); themeComboBox->clear(); QString cs = MusEGlobal::muse->style()->objectName(); - //printf("Appearance::resetValues style:%s\n", cs.toAscii().data()); - //printf("Appearance::resetValues App styleSheet:%s\n", qApp->styleSheet().toAscii().data()); cs = cs.toLower(); - themeComboBox->insertItems(0, QStyleFactory::keys()); - for (int i = 0; i < themeComboBox->count(); ++i) { - if (themeComboBox->itemText(i).toLower() == cs) { - themeComboBox->setCurrentIndex(i); - } - } + themeComboBox->insertItem(0,tr("Keep Qt system style")); + themeComboBox->insertItems(1, QStyleFactory::keys()); + if (QStyleFactory::keys().indexOf(config->style) == -1) + themeComboBox->setCurrentIndex(0); // if none is found use the default + else { + for (int i = 0; i < themeComboBox->count(); ++i) { + if (themeComboBox->itemText(i).toLower() == cs) { + themeComboBox->setCurrentIndex(i); + } + } + } globalAlphaSlider->blockSignals(true); globalAlphaVal->blockSignals(true); globalAlphaSlider->setValue(config->globalAlphaBlend); @@ -691,7 +538,7 @@ config->fonts[6].setItalic(italic6->isChecked()); config->fonts[6].setBold(bold6->isChecked()); - config->style = themeComboBox->currentText(); + config->style = themeComboBox->currentIndex() == 0 ? QString() : themeComboBox->currentText(); // setting up a new theme might change the fontsize, so re-read fontSize0->setValue(QApplication::font().pointSize()); @@ -880,14 +727,12 @@ void Appearance::updateColor() { int r, g, b, h, s, v; - //globalAlphaSlider->setEnabled(color); rslider->setEnabled(color); gslider->setEnabled(color); bslider->setEnabled(color); hslider->setEnabled(color); sslider->setEnabled(color); vslider->setEnabled(color); - //globalAlphaVal->setEnabled(color); rval->setEnabled(color); gval->setEnabled(color); bval->setEnabled(color); @@ -899,15 +744,10 @@ QPalette pal; QColor cfc(*color); - // Oops can't do this - affects all colour items. Need to filter. - ///cfc.setAlpha(globalAlphaVal->value()); - pal.setColor(colorframe->backgroundRole(), cfc); colorframe->setPalette(pal); color->getRgb(&r, &g, &b); color->getHsv(&h, &s, &v); - //a = color->alpha(); - //a = config->globalAlphaBlend; rslider->blockSignals(true); gslider->blockSignals(true); @@ -1049,7 +889,6 @@ if (r == 0xff && g == 0xff && b == 0xff) { // found empty slot aPalette->button(i)->toggle(); - //aPalette->moveFocus(i); ddskrjo button = (QAbstractButton*)aPalette->button(i); // ddskrjo break; } @@ -1058,11 +897,6 @@ if (button) { int id = aPalette->id(button); config->palette[id] = *color; - //QPalette pal; - //pal.setColor(button->backgroundRole(), *color); - //pal.setColor(QPalette::Window, *color); - //pal.setColor(QPalette::Button, *color); - //button->setPalette(pal); button->setStyleSheet(QString("background-color: ") + color->name()); button->update(); //?? } @@ -1078,8 +912,7 @@ return; QAbstractButton* button = (QAbstractButton*)aPalette->button(id); // ddskrjo if (button) { - QColor c = button->palette().color(QPalette::Window); - //QColor c = button->palette().color(button->backgroundRole()); + QColor c = button->palette().color(QPalette::Window); int r, g, b; c.getRgb(&r, &g, &b); if (r == 0xff && g == 0xff && b == 0xff) diff -Nru muse-2.0~rc2/muse/appearance.h muse-2.0/muse/appearance.h --- muse-2.0~rc2/muse/appearance.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/appearance.h 2012-06-30 19:24:42.000000000 +0200 @@ -93,6 +93,7 @@ Appearance(Arranger*, QWidget* parent=0); ~Appearance(); void resetValues(); + static QString defaultStyle; }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/app.h muse-2.0/muse/app.h --- muse-2.0~rc2/muse/app.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/app.h 2012-06-30 19:24:42.000000000 +0200 @@ -31,7 +31,6 @@ #include class QCloseEvent; -class QFocusEvent; class QMainWindow; class QMenu; class QPoint; @@ -211,14 +210,16 @@ MidiTransformerDialog* midiTransformerDialog; QMenu* openRecent; + bool writeTopwinState; + bool readMidi(FILE*); void read(MusECore::Xml& xml, bool doReadMidiPorts, bool isTemplate); void processTrack(MusECore::MidiTrack* track); - void write(MusECore::Xml& xml) const; + void write(MusECore::Xml& xml, bool writeTopwins) const; // If clear_all is false, it will not touch things like midi ports. bool clearSong(bool clear_all = true); - bool save(const QString&, bool); + bool save(const QString&, bool overwriteWarn, bool writeTopwins); void setUntitledProject(); void setConfigDefaults(); @@ -236,8 +237,6 @@ void writeConfiguration(int level, MusECore::Xml&) const; void updateConfiguration(); - virtual void focusInEvent(QFocusEvent*); - QSignalMapper *midiPluginSignalMapper; QSignalMapper *followSignalMapper; QSignalMapper *windowsMapper; @@ -279,18 +278,12 @@ void startSongInfo(bool editable=true); void writeGlobalConfiguration() const; - //void startEditInstrument(); void startClipList(bool); void openRecentMenu(); void selectProject(QAction* act); void cmd(int); -/* void copyMeasure(); // commented out by flo: these are not implemented, - void eraseMeasure(); // but maybe will be in future (state: revision 988) - void deleteMeasure(); - void createMeasure(); - void mixTrack(); -*/ + void startMidiInputPlugin(int); void hideMitPluginTranspose(); void hideMidiInputTransform(); @@ -325,8 +318,6 @@ void arrangeSubWindowsColumns(); void tileSubWindows(); - //void hackishSongOpenTimerTimeout(); - public slots: bool saveAs(); void bounceToFile(MusECore::AudioOutput* ao = 0); @@ -351,7 +342,7 @@ void startEditor(MusECore::PartList*, int); void startScoreQuickly(); void startPianoroll(); - void startPianoroll(MusECore::PartList* /*pl*/, bool /*showDefaultCtrls*/ = false); + void startPianoroll(MusECore::PartList* pl, bool showDefaultCtrls = false); void startWaveEditor(); void startWaveEditor(MusECore::PartList*); void openInScoreEdit(ScoreEdit* destination, MusECore::PartList* pl, bool allInOne=false); @@ -363,7 +354,7 @@ void startListEditor(); void startListEditor(MusECore::PartList*); void startDrumEditor(); - void startDrumEditor(MusECore::PartList* /*pl*/, bool /*showDefaultCtrls*/ = false); + void startDrumEditor(MusECore::PartList* pl, bool showDefaultCtrls = false); void startEditor(MusECore::Track*); void startMidiTransformer(); @@ -376,10 +367,10 @@ void updateWindowMenu(); public: - MusE(int argc, char** argv); - ~MusE(); + MusE(); void loadDefaultSong(int argc, char** argv); Arranger* arranger() const { return _arranger; } + ArrangerView* getArrangerView() const { return arrangerView; } QRect configGeometryMain; QProgressDialog *progress; bool importMidi(const QString name, bool merge); diff -Nru muse-2.0~rc2/muse/arranger/alayout.cpp muse-2.0/muse/arranger/alayout.cpp --- muse-2.0~rc2/muse/arranger/alayout.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/alayout.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -41,12 +41,12 @@ addItem(li[idx]); } -#if 0 +#if 0 // DELETETHIS 36 //--------------------------------------------------------- // TLLayoutIterator //--------------------------------------------------------- -class TLLayoutIterator // : public QGLayoutIterator ddskrjo +class TLLayoutIterator { int idx; QList list; @@ -64,7 +64,7 @@ QLayoutIterator TLLayout::iterator() { - return QLayoutIterator(0); //new TLLayoutIterator(&ilist)); ddskrjo + return QLayoutIterator(0); } void TLLayout::addItem(QLayoutItem *item) @@ -99,10 +99,6 @@ void TLLayout::setGeometry(const QRect &rect) { - //if(_inSetGeometry) // p4.0.11 Tim - // return; - //_inSetGeometry = true; - int w = rect.width(); int h = rect.height(); @@ -117,7 +113,7 @@ QSize s1 = li[1]->sizeHint(); QSize s2 = li[2]->sizeHint(); - //QSize s3 = li[3]->sizeHint(); + //QSize s3 = li[3]->sizeHint(); DELETETHIS huh? QSize s4 = li[4]->sizeHint(); QSize s5 = li[5]->sizeHint(); @@ -136,15 +132,11 @@ int range = s0.height() - y2; if (range < 0) range = 0; - // Note this appears to cause a single recursive call to this function - jumps to beginning, - // because now the scroll bar wants to be put in the layout. - // Moved below. p4.0.44 - ///sb->setVisible(range != 0); + if (range) sb->setMaximum(range); if (widget) { - //QSize r(s0.width(), y2); QSize r(s0.width(), y2 < s0.height() ? s0.height() : y2); // p4.0.11 Tim widget->setGeometry(0, 0, r.width(), r.height()); } @@ -155,10 +147,8 @@ li[4]->setGeometry(QRect(0, y2, w, s4.height())); li[5]->setGeometry(QRect(3, y3, s5.width(), s5.height())); - /// Fix for non-appearing scrollbar. Yes, we must allow the recursive call, but try it here, not above. p4.0.44 Tim + // Fix for non-appearing scrollbar. Yes, we must allow the recursive call, but try it here, not above. p4.0.44 Tim sb->setVisible(range != 0); - - //_inSetGeometry = false; } //--------------------------------------------------------- @@ -168,8 +158,6 @@ QSize TLLayout::sizeHint() const { return QSize(150, 100); - // p4.0.11 Tim. 100 was allowing vertically shrunk trackinfo widgets. Nope, no help. - //return minimumSize(); } //--------------------------------------------------------- @@ -182,8 +170,6 @@ w += li[1]->sizeHint().width(); return QSize(w, 50); - // p4.0.11 Tim. 50 was allowing vertically shrunk trackinfo widgets. Nope, no help. - //return QSize(w, stack->minimumSizeHint().height()); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/arranger/alayout.h muse-2.0/muse/arranger/alayout.h --- muse-2.0~rc2/muse/arranger/alayout.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/alayout.h 2012-06-30 19:24:43.000000000 +0200 @@ -49,7 +49,6 @@ WidgetStack* stack; public: - //TLLayout(QWidget *parent) : QLayout(parent, 0, -1) {} TLLayout(QWidget *parent) : QLayout(parent) { _inSetGeometry = false; setContentsMargins(0, 0, 0, 0); setSpacing(-1); } ~TLLayout() { clear(); } @@ -63,16 +62,10 @@ virtual QSize sizeHint() const; virtual QSize minimumSize() const; virtual QSize maximumSize() const; - //QSize sizeHint() const; - //QSize minimumSize() const; - //QSize maximumSize() const; - ///QLayoutIterator iterator(); virtual void setGeometry(const QRect &rect); - //virtual QLayoutItem* itemAt(int) const { return 0;} // ddskrjo, is pure virtual, overridden virtual QLayoutItem* itemAt(int i) const { return ilist.value(i);} - virtual QLayoutItem* takeAt(int); // { return 0;} // ddskrjo, is pure virtual, overridden - ///virtual int count() const { return ilist.count(); } // ddskrjo, is pure virtual, overridden + virtual QLayoutItem* takeAt(int); }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/arranger/arranger.cpp muse-2.0/muse/arranger/arranger.cpp --- muse-2.0~rc2/muse/arranger/arranger.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/arranger.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -23,7 +23,7 @@ #include "config.h" #include -#include +#include #include #include @@ -37,9 +37,8 @@ #include #include #include -//#include -#include "arrangerview.h" +#include "arrangerview.h" #include "arranger.h" #include "song.h" #include "app.h" @@ -72,6 +71,95 @@ namespace MusEGui { +void ScrollBar::redirectedWheelEvent(QWheelEvent* e) +{ + if(isVisible()) + wheelEvent(e); +} + +std::vector Arranger::custom_columns; //FINDMICH TODO: eliminate all usage of new_custom_columns +std::vector Arranger::new_custom_columns; //and instead let the arranger update without restarting muse! +QByteArray Arranger::header_state; + +void Arranger::writeCustomColumns(int level, MusECore::Xml& xml) +{ + xml.tag(level++, "custom_columns"); + + for (unsigned i=0;isetArrangerRaster(0); toolbar->addWidget(raster); connect(raster, SIGNAL(activated(int)), SLOT(_setRaster(int))); - ///raster->setFocusPolicy(Qt::NoFocus); raster->setFocusPolicy(Qt::TabFocus); // Song len @@ -177,8 +259,8 @@ // song length is limited to 10000 bars; the real song len is limited // by overflows in tick computations - // lenEntry = new SpinBox(1, 10000, 1); + lenEntry->setFocusPolicy(Qt::StrongFocus); lenEntry->setValue(MusEGlobal::song->len()); lenEntry->setToolTip(tr("song length - bars")); lenEntry->setWhatsThis(tr("song length - bars")); @@ -193,7 +275,6 @@ typeBox->setCurrentIndex(0); typeBox->setToolTip(tr("midi song type")); typeBox->setWhatsThis(tr("midi song type")); - ///typeBox->setFocusPolicy(Qt::NoFocus); typeBox->setFocusPolicy(Qt::TabFocus); toolbar->addWidget(typeBox); connect(typeBox, SIGNAL(activated(int)), SLOT(modeChange(int))); @@ -204,6 +285,7 @@ toolbar->addWidget(label); globalPitchSpinBox = new SpinBox(-127, 127, 1); + globalPitchSpinBox->setFocusPolicy(Qt::StrongFocus); globalPitchSpinBox->setValue(MusEGlobal::song->globalPitchShift()); globalPitchSpinBox->setToolTip(tr("midi pitch")); globalPitchSpinBox->setWhatsThis(tr("global midi pitch shift")); @@ -216,6 +298,7 @@ toolbar->addWidget(label); globalTempoSpinBox = new SpinBox(50, 200, 1, toolbar); + globalTempoSpinBox->setFocusPolicy(Qt::StrongFocus); globalTempoSpinBox->setSuffix(QString("%")); globalTempoSpinBox->setValue(MusEGlobal::tempomap.globalTempo()); globalTempoSpinBox->setToolTip(tr("midi tempo")); @@ -225,16 +308,19 @@ QToolButton* tempo50 = new QToolButton(); tempo50->setText(QString("50%")); + tempo50->setFocusPolicy(Qt::NoFocus); toolbar->addWidget(tempo50); connect(tempo50, SIGNAL(clicked()), SLOT(setTempo50())); QToolButton* tempo100 = new QToolButton(); tempo100->setText(tr("N")); + tempo100->setFocusPolicy(Qt::NoFocus); toolbar->addWidget(tempo100); connect(tempo100, SIGNAL(clicked()), SLOT(setTempo100())); QToolButton* tempo200 = new QToolButton(); tempo200->setText(QString("200%")); + tempo200->setFocusPolicy(Qt::NoFocus); toolbar->addWidget(tempo200); connect(tempo200, SIGNAL(clicked()), SLOT(setTempo200())); @@ -242,9 +328,6 @@ box->setContentsMargins(0, 0, 0, 0); box->setSpacing(0); box->addWidget(MusECore::hLine(this), Qt::AlignTop); - //QFrame* hline = MusECore::hLine(this); - //hline->setLineWidth(0); - //box->addWidget(hline, Qt::AlignTop); //--------------------------------------------------- // Tracklist @@ -256,12 +339,10 @@ split = new Splitter(Qt::Horizontal, this, "split"); split->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); box->addWidget(split, 1000); - //split->setHandleWidth(10); - QWidget* tracklist = new QWidget(split); + tracklist = new QWidget(split); split->setStretchFactor(split->indexOf(tracklist), 0); - //tracklist->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding, 0, 100)); QSizePolicy tpolicy = QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); tpolicy.setHorizontalStretch(0); tpolicy.setVerticalStretch(100); @@ -269,11 +350,6 @@ QWidget* editor = new QWidget(split); split->setStretchFactor(split->indexOf(editor), 1); - //editor->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding, - // Changed by T356. Was causing "large int implicitly truncated" warning. These are UCHAR values... - //1000, 100)); - //232, 100)); // 232 is what it was being truncated to, but what is the right value?... - //255, 100)); QSizePolicy epolicy = QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); epolicy.setHorizontalStretch(255); epolicy.setVerticalStretch(100); @@ -283,7 +359,7 @@ // Track Info //--------------------------------------------------- - infoScroll = new QScrollBar(Qt::Vertical, tracklist); + infoScroll = new ScrollBar(Qt::Vertical, tracklist); infoScroll->setObjectName("infoScrollBar"); //genTrackInfo(tracklist); // Moved below @@ -294,9 +370,9 @@ ib->setChecked(showTrackinfoFlag); ib->setFocusPolicy(Qt::NoFocus); connect(ib, SIGNAL(toggled(bool)), SLOT(showTrackInfo(bool))); - - header = new Header(tracklist, "header"); + // set up the header + header = new Header(tracklist, "header"); header->setFixedHeight(30); QFontMetrics fm1(header->font()); @@ -312,6 +388,8 @@ header->setColumnLabel(tr("T"), COL_TIMELOCK, fm1.width('T')+fw); header->setColumnLabel(tr("Automation"), COL_AUTOMATION, 75); header->setColumnLabel(tr("Clef"), COL_CLEF, 75); + for (unsigned i=0;isetColumnLabel(custom_columns[i].name, COL_CUSTOM_MIDICTRL_OFFSET+i, MAX(fm1.width(custom_columns[i].name)+fw, 30)); header->setResizeMode(COL_RECORD, QHeaderView::Fixed); header->setResizeMode(COL_MUTE, QHeaderView::Fixed); header->setResizeMode(COL_SOLO, QHeaderView::Fixed); @@ -322,21 +400,24 @@ header->setResizeMode(COL_TIMELOCK, QHeaderView::Fixed); header->setResizeMode(COL_AUTOMATION, QHeaderView::Interactive); header->setResizeMode(COL_CLEF, QHeaderView::Interactive); + for (unsigned i=0;isetResizeMode(COL_CUSTOM_MIDICTRL_OFFSET+i, QHeaderView::Interactive); setHeaderToolTips(); setHeaderWhatsThis(); - header->setMovable (true ); - list = new TList(header, tracklist, "tracklist"); + header->setMovable (true); + header->restoreState(header_state); + + list = new TList(header, tracklist, "tracklist"); + // Do this now that the list is available. genTrackInfo(tracklist); - ///connect(list, SIGNAL(selectionChanged()), SLOT(trackSelectionChanged())); connect(list, SIGNAL(selectionChanged(MusECore::Track*)), SLOT(trackSelectionChanged())); connect(list, SIGNAL(selectionChanged(MusECore::Track*)), midiTrackInfo, SLOT(setTrack(MusECore::Track*))); connect(header, SIGNAL(sectionResized(int,int,int)), list, SLOT(redraw())); connect(header, SIGNAL(sectionMoved(int,int,int)), list, SLOT(redraw())); - connect(header, SIGNAL(sectionMoved(int,int,int)), this, SLOT(headerMoved())); // tracklist: // @@ -369,15 +450,11 @@ hscroll->setFocusPolicy(Qt::NoFocus); ib->setFixedHeight(hscroll->sizeHint().height()); - // Changed p3.3.43 Too small steps for me... - //vscroll = new QScrollBar(1, 20*20, 1, 5, 0, Vertical, editor); - //vscroll = new QScrollBar(1, 20*20, 5, 25, 0, Qt::Vertical, editor); vscroll = new QScrollBar(editor); - ///vscroll->setMinimum(1); - vscroll->setMinimum(0); // Tim. + vscroll->setMinimum(0); vscroll->setMaximum(20*20); vscroll->setSingleStep(5); - vscroll->setPageStep(25); + vscroll->setPageStep(25); // FIXME: too small steps here for me (flo), better control via window height? vscroll->setValue(0); vscroll->setOrientation(Qt::Vertical); @@ -400,7 +477,8 @@ canvas->setCanvasTools(arrangerTools); canvas->setOrigin(-offset, 0); canvas->setFocus(); - setFocusProxy(canvas); // once removed by Tim (r735), added by flo again + + list->setFocusProxy(canvas); // Make it easy for track list popup line editor to give focus back to canvas. connect(canvas, SIGNAL(setUsedTool(int)), this, SIGNAL(setUsedTool(int))); connect(canvas, SIGNAL(trackChanged(MusECore::Track*)), list, SLOT(selectTrack(MusECore::Track*))); @@ -409,12 +487,19 @@ connect(canvas, SIGNAL(selectTrackBelow()), list, SLOT(selectTrackBelow())); connect(canvas, SIGNAL(horizontalZoomIn()), SLOT(horizontalZoomIn())); connect(canvas, SIGNAL(horizontalZoomOut()), SLOT(horizontalZoomOut())); - - connect(this, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*))); - connect(list, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*))); + connect(lenEntry, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(lenEntry, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(globalPitchSpinBox, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(globalPitchSpinBox, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(globalTempoSpinBox, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(globalTempoSpinBox, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(midiTrackInfo, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(midiTrackInfo, SIGNAL(escapePressed()), SLOT(focusCanvas())); + + //connect(this, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*))); + connect(list, SIGNAL(redirectWheelEvent(QWheelEvent*)), canvas, SLOT(redirectedWheelEvent(QWheelEvent*))); + connect(trackInfo, SIGNAL(redirectWheelEvent(QWheelEvent*)), infoScroll, SLOT(redirectedWheelEvent(QWheelEvent*))); - //egrid->addMultiCellWidget(time, 0, 0, 0, 1); - //egrid->addMultiCellWidget(MusECore::hLine(editor), 1, 1, 0, 1); egrid->addWidget(time, 0, 0, 1, 2); egrid->addWidget(MusECore::hLine(editor), 1, 0, 1, 2); @@ -426,7 +511,7 @@ connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); connect(vscroll, SIGNAL(valueChanged(int)), list, SLOT(setYPos(int))); - connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); // + connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scaleChanged(int)), time, SLOT(setXMag(int))); connect(canvas, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); connect(canvas, SIGNAL(verticalScroll(unsigned)),SLOT(verticalScrollSetYpos(unsigned))); @@ -439,23 +524,17 @@ connect(canvas, SIGNAL(startEditor(MusECore::PartList*,int)), SIGNAL(startEditor(MusECore::PartList*, int))); connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); - //connect(MusEGlobal::song, SIGNAL(mTypeChanged(MType)), SLOT(setMode((int)MType))); // p4.0.7 Tim. connect(canvas, SIGNAL(followEvent(int)), hscroll, SLOT(setOffset(int))); connect(canvas, SIGNAL(selectionChanged()), SIGNAL(selectionChanged())); connect(canvas, SIGNAL(dropSongFile(const QString&)), SIGNAL(dropSongFile(const QString&))); connect(canvas, SIGNAL(dropMidiFile(const QString&)), SIGNAL(dropMidiFile(const QString&))); connect(canvas, SIGNAL(toolChanged(int)), SIGNAL(toolChanged(int))); - connect(MusEGlobal::song, SIGNAL(controllerChanged(MusECore::Track*)), SLOT(controllerChanged(MusECore::Track*))); -// connect(MusEGlobal::song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(seek())); + connect(MusEGlobal::song, SIGNAL(controllerChanged(MusECore::Track*, int)), SLOT(controllerChanged(MusECore::Track*, int))); - // Removed p3.3.43 - // Song::addMarker() already emits a 'markerChanged'. - //connect(time, SIGNAL(addMarker(int)), SIGNAL(addMarker(int))); - configChanged(); // set configuration values if(canvas->part()) - midiTrackInfo->setTrack(canvas->part()->track()); // Tim. + midiTrackInfo->setTrack(canvas->part()->track()); showTrackInfo(showTrackinfoFlag); // Take care of some tabbies! @@ -467,6 +546,7 @@ //setTabOrder(ib, hscroll); } +// DELETETHIS 20 //--------------------------------------------------------- // updateHScrollRange //--------------------------------------------------------- @@ -486,14 +566,6 @@ // hscroll->setRange(s, e); //} -//--------------------------------------------------------- -// headerMoved -//--------------------------------------------------------- - -void Arranger::headerMoved() - { - //header->setResizeMode(COL_NAME, QHeaderView::Stretch); - } //--------------------------------------------------------- // setTime @@ -501,7 +573,7 @@ void Arranger::setTime(unsigned tick) { - if (tick == MAXINT) + if (tick == INT_MAX) cursorPos->setEnabled(false); else { cursVal = tick; @@ -535,23 +607,29 @@ void Arranger::configChanged() { - //printf("Arranger::configChanged\n"); - if (MusEGlobal::config.canvasBgPixmap.isEmpty()) { canvas->setBg(MusEGlobal::config.partCanvasBg); canvas->setBg(QPixmap()); - //printf("Arranger::configChanged - no bitmap!\n"); } else { - - //printf("Arranger::configChanged - bitmap %s!\n", MusEGlobal::config.canvasBgPixmap.ascii()); canvas->setBg(QPixmap(MusEGlobal::config.canvasBgPixmap)); } - ///midiTrackInfo->setFont(MusEGlobal::config.fonts[2]); - //updateTrackInfo(type); } //--------------------------------------------------------- +// focusCanvas +//--------------------------------------------------------- + +void Arranger::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + canvas->setFocus(); + canvas->activateWindow(); + } +} + +//--------------------------------------------------------- // songlenChanged //--------------------------------------------------------- @@ -592,17 +670,15 @@ if(type & SC_SONG_TYPE) setMode(MusEGlobal::song->mtype()); - if(type & SC_SELECTION) // TEST p4.0.36 Try this alone, may need more. + if(type & (SC_SELECTION | SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED)) trackSelectionChanged(); // Keep this light, partsChanged is a heavy move! TEST p4.0.36 Try these, may need more. if(type & (SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED | SC_PART_INSERTED | SC_PART_REMOVED | SC_PART_MODIFIED | - SC_SIG | SC_TEMPO)) // Maybe sig. Requires tempo. + SC_SIG | SC_TEMPO | SC_MASTER)) // Maybe sig. Requires tempo. canvas->partsChanged(); - //typeBox->setCurrentIndex(int(MusEGlobal::song->mtype())); // REMOVE Tim. Redundant. - if (type & SC_SIG) time->redraw(); if (type & SC_TEMPO) @@ -611,7 +687,6 @@ if(type & SC_TRACK_REMOVED) { AudioStrip* w = (AudioStrip*)(trackInfo->getWidget(2)); - //AudioStrip* w = (AudioStrip*)(trackInfo->widget(2)); if(w) { MusECore::Track* t = w->getTrack(); @@ -630,7 +705,7 @@ } } - // TEST p4.0.36 Try this + // TEST p4.0.36 Try this DELETETHIS and below and even more below if(type & ( //SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED | SC_PART_INSERTED | SC_PART_REMOVED | SC_PART_MODIFIED | SC_EVENT_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED)) //| @@ -670,6 +745,7 @@ { MusEGlobal::song->setMType(MType(mode)); updateTrackInfo(-1); + focusCanvas(); } //--------------------------------------------------------- @@ -678,10 +754,10 @@ void Arranger::setMode(int mode) { - typeBox->blockSignals(true); // + typeBox->blockSignals(true); // This will only set if different. typeBox->setCurrentIndex(mode); - typeBox->blockSignals(false); // + typeBox->blockSignals(false); } //--------------------------------------------------------- @@ -693,7 +769,6 @@ xml.tag(level++, "arranger"); xml.intTag(level, "info", ib->isChecked()); split->writeStatus(level, xml); - list->writeStatus(level, xml, "list"); xml.intTag(level, "xpos", hscroll->pos()); xml.intTag(level, "xmag", hscroll->mag()); @@ -701,6 +776,44 @@ xml.etag(level, "arranger"); } +void Arranger::writeConfiguration(int level, MusECore::Xml& xml) + { + xml.tag(level++, "arranger"); + writeCustomColumns(level, xml); + xml.strTag(level, "tlist_header", header->saveState().toHex().constData()); + xml.etag(level, "arranger"); + } + +//--------------------------------------------------------- +// readConfiguration +//--------------------------------------------------------- + +void Arranger::readConfiguration(MusECore::Xml& xml) + { + for (;;) { + MusECore::Xml::Token token(xml.parse()); + const QString& tag(xml.s1()); + switch (token) { + case MusECore::Xml::Error: + case MusECore::Xml::End: + return; + case MusECore::Xml::TagStart: + if (tag == "tlist_header") + header_state = QByteArray::fromHex(xml.parse1().toAscii()); + else if (tag == "custom_columns") + readCustomColumns(xml); + else + xml.unknown("Arranger"); + break; + case MusECore::Xml::TagEnd: + if (tag == "arranger") + return; + default: + break; + } + } + } + //--------------------------------------------------------- // readStatus //--------------------------------------------------------- @@ -719,8 +832,6 @@ showTrackinfoFlag = xml.parseInt(); else if (tag == split->objectName()) split->readStatus(xml); - else if (tag == "list") - list->readStatus(xml, "list"); else if (tag == "xmag") hscroll->setMag(xml.parseInt()); else if (tag == "xpos") { @@ -756,6 +867,7 @@ // Set the audio record part snapping. MusEGlobal::song->setArrangerRaster(_raster); canvas->redraw(); + focusCanvas(); } //--------------------------------------------------------- @@ -954,10 +1066,8 @@ QSize WidgetStack::minimumSizeHint() const { if (top == -1) - { - //printf("WidgetStack::minimumSizeHint top is -1\n"); return (QSize(0, 0)); - } + QSize s(0,0); for (unsigned int i = 0; i < stack.size(); ++i) { if (stack[i]) { @@ -967,11 +1077,20 @@ s = s.expandedTo(ss); } } - //printf("WidgetStack::minimumSizeHint width:%d height:%d\n", s.width(), s.height()); + return s; } //--------------------------------------------------------- +// wheelEvent +//--------------------------------------------------------- + +void WidgetStack::wheelEvent(QWheelEvent* ev) + { + emit redirectWheelEvent(ev); + } + +//--------------------------------------------------------- // clear //--------------------------------------------------------- @@ -985,14 +1104,14 @@ midiTrackInfo->setTrack(0); } -void Arranger::wheelEvent(QWheelEvent* ev) - { - emit redirectWheelEvent(ev); - } +//void Arranger::wheelEvent(QWheelEvent* ev) +// { +// emit redirectWheelEvent(ev); +// } -void Arranger::controllerChanged(MusECore::Track *t) +void Arranger::controllerChanged(MusECore::Track *t, int ctrlId) { - canvas->controllerChanged(t); + canvas->controllerChanged(t, ctrlId); } //--------------------------------------------------------- @@ -1014,12 +1133,10 @@ void Arranger::genTrackInfo(QWidget* parent) { trackInfo = new WidgetStack(parent, "trackInfoStack"); - //trackInfo->setFocusPolicy(Qt::TabFocus); // p4.0.9 - //trackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); noTrackInfo = new QWidget(trackInfo); noTrackInfo->setAutoFillBackground(true); - QPixmap *noInfoPix = new QPixmap(160, 1000); //muse_leftside_logo_xpm); + QPixmap *noInfoPix = new QPixmap(160, 1000); const QPixmap *logo = new QPixmap(*museLeftSideLogo); noInfoPix->fill(noTrackInfo->palette().color(QPalette::Window) ); QPainter p(noInfoPix); @@ -1033,13 +1150,9 @@ midiTrackInfo = new MidiTrackInfo(trackInfo); - //midiTrackInfo->setFocusPolicy(Qt::TabFocus); // p4.0.9 - //midiTrackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum)); trackInfo->addWidget(noTrackInfo, 0); trackInfo->addWidget(midiTrackInfo, 1); trackInfo->addWidget(0, 2); - -/// genMidiTrackInfo(); } //--------------------------------------------------------- @@ -1058,8 +1171,8 @@ } if (selected->isMidiTrack()) { switchInfo(1); - // If a new part was selected, and only if it's different. - if((flags & SC_SELECTION) && midiTrackInfo->track() != selected) + // If a different part was selected + if(midiTrackInfo->track() != selected) // Set a new track and do a complete update. midiTrackInfo->setTrack(selected); else @@ -1101,7 +1214,7 @@ tgrid->update(); // muse-2 Qt4 } -/* +/* DELETETHIS 12 QSize WidgetStack::minimumSize() const { printf("WidgetStack::minimumSize\n"); diff -Nru muse-2.0~rc2/muse/arranger/arranger.h muse-2.0/muse/arranger/arranger.h --- muse-2.0~rc2/muse/arranger/arranger.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/arranger.h 2012-06-30 19:24:43.000000000 +0200 @@ -24,6 +24,10 @@ #define __ARRANGER_H__ #include +#include + +#include +#include #include "midieditor.h" #include "pcanvas.h" @@ -33,11 +37,9 @@ class QCheckBox; class QMainWindow; class QMenu; -class QScrollBar; class QToolButton; class QWheelEvent; class QKeyEvent; -//class QStackedWidget; namespace MusECore { class Track; @@ -59,6 +61,7 @@ class TList; class WidgetStack; + //--------------------------------------------------------- // WidgetStack //--------------------------------------------------------- @@ -68,6 +71,12 @@ std::vector stack; int top; + protected: + virtual void wheelEvent(QWheelEvent* e); + + signals: + void redirectWheelEvent(QWheelEvent*); + public: WidgetStack(QWidget* parent, const char* name = 0); void raiseWidget(int idx); @@ -76,17 +85,35 @@ QWidget* visibleWidget() const; int curIdx() const { return top; } virtual QSize minimumSizeHint() const; - //QSize minimumSize() const; - //int minimumHeight() const; }; //--------------------------------------------------------- +// ScrollBar +//--------------------------------------------------------- + +class ScrollBar : public QScrollBar { + Q_OBJECT + + public slots: + void redirectedWheelEvent(QWheelEvent*); + + protected: + virtual void resizeEvent(QResizeEvent* e) { setPageStep(e->size().height()); } + + public: + ScrollBar(Qt::Orientation orientation, QWidget * parent = 0 ) : QScrollBar(orientation, parent) {}; +}; + + +//--------------------------------------------------------- // Arranger //--------------------------------------------------------- class Arranger : public QWidget { Q_OBJECT + static QByteArray header_state; + int _quant, _raster; PartCanvas* canvas; ScrollScale* hscroll; @@ -97,12 +124,11 @@ SpinBox* lenEntry; bool showTrackinfoFlag; WidgetStack* trackInfo; - //QStackedWidget* trackInfo; - QScrollBar* infoScroll; - //MidiTrackInfoBase* midiTrackInfo; + ScrollBar* infoScroll; MidiTrackInfo* midiTrackInfo; AudioStrip* waveTrackInfo; QWidget* noTrackInfo; + QWidget* tracklist; TLLayout* tgrid; MusECore::Track* selected; @@ -111,7 +137,6 @@ QToolButton* ib; int trackInfoType; Splitter* split; - ///QMenu* pop; int songType; PosLabel* cursorPos; SpinBox* globalTempoSpinBox; @@ -134,31 +159,26 @@ void songChanged(int); void modeChange(int); void setTime(unsigned); - void headerMoved(); void globalPitchChanged(int); void globalTempoChanged(int); void setTempo50(); void setTempo100(); void setTempo200(); - //void seek(); void verticalScrollSetYpos(unsigned); void horizontalZoomIn(); void horizontalZoomOut(); signals: - void redirectWheelEvent(QWheelEvent*); void editPart(MusECore::Track*); void selectionChanged(); void dropSongFile(const QString&); void dropMidiFile(const QString&); void startEditor(MusECore::PartList*, int); void toolChanged(int); - //void addMarker(int); void setUsedTool(int); protected: - virtual void wheelEvent(QWheelEvent* e); virtual void keyPressEvent(QKeyEvent* event); public slots: @@ -166,11 +186,30 @@ void setTool(int); void updateTrackInfo(int flags); void configChanged(); - void controllerChanged(MusECore::Track *t); + void controllerChanged(MusECore::Track *t, int ctrlId); + void focusCanvas(); public: enum { CMD_CUT_PART, CMD_COPY_PART, CMD_COPY_PART_IN_RANGE, CMD_PASTE_PART, CMD_PASTE_CLONE_PART, CMD_PASTE_DIALOG, CMD_PASTE_CLONE_DIALOG, CMD_INSERT_EMPTYMEAS }; + + struct custom_col_t + { + enum affected_pos_t {AFFECT_BEGIN, AFFECT_CPOS}; + + int ctrl; + QString name; + affected_pos_t affected_pos; + + custom_col_t(int c, QString n, affected_pos_t a=AFFECT_BEGIN) + { + ctrl=c; + name=n; + affected_pos=a; + } + }; + static std::vector custom_columns; //FINDMICH TODO: eliminate all usage of new_custom_columns + static std::vector new_custom_columns; //and instead let the arranger update without restarting muse! Arranger(ArrangerView* parent, const char* name = 0); @@ -180,6 +219,11 @@ void writeStatus(int level, MusECore::Xml&); void readStatus(MusECore::Xml&); + void writeConfiguration(int level, MusECore::Xml&); + static void readConfiguration(MusECore::Xml&); + static void writeCustomColumns(int level, MusECore::Xml&); + static void readCustomColumns(MusECore::Xml&); + static custom_col_t readOneCustomColumn(MusECore::Xml&); MusECore::Track* curTrack() const { return selected; } void cmd(int); diff -Nru muse-2.0~rc2/muse/arranger/arrangerview.cpp muse-2.0/muse/arranger/arrangerview.cpp --- muse-2.0~rc2/muse/arranger/arrangerview.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/arrangerview.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -37,7 +37,6 @@ #include #include #include -//#include #include #include #include @@ -59,7 +58,6 @@ #include "mtscale.h" #include "scoreedit.h" #include "shortcuts.h" -#include "sig.h" #include "song.h" #include "structure.h" #include "tb1.h" @@ -67,6 +65,7 @@ #include "ttoolbar.h" #include "visibletracks.h" #include "xml.h" +#include "arrangercolumns.h" namespace MusEGui { @@ -77,15 +76,12 @@ ArrangerView::ArrangerView(QWidget* parent) : TopWin(TopWin::ARRANGER, parent, "arrangerview", Qt::Window) { - //using MusEGlobal::muse; - - //setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(tr("MusE: Arranger")); - setFocusPolicy(Qt::StrongFocus); + setFocusPolicy(Qt::NoFocus); arranger = new Arranger(this, "arranger"); setCentralWidget(arranger); - setFocusProxy(arranger); + //setFocusProxy(arranger); scoreOneStaffPerTrackMapper = new QSignalMapper(this); scoreAllInOneMapper = new QSignalMapper(this); @@ -97,19 +93,6 @@ editSignalMapper->setMapping(sc, CMD_DELETE); // Toolbars --------------------------------------------------------- - QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); - undo_tools->setObjectName("Undo/Redo tools"); - undo_tools->addActions(MusEGlobal::undoRedo->actions()); - - - QToolBar* panic_toolbar = addToolBar(tr("panic")); - panic_toolbar->setObjectName("panic"); - panic_toolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport_toolbar = addToolBar(tr("transport")); - transport_toolbar->setObjectName("transport"); - transport_toolbar->addActions(MusEGlobal::transportAction->actions()); - editTools = new EditToolBar(this, arrangerTools); addToolBar(editTools); editTools->setObjectName("arrangerTools"); @@ -148,7 +131,7 @@ editDeleteSelectedAction = new QAction(QIcon(*edit_track_delIcon), tr("Delete Selected Tracks"), this); editDuplicateSelTrackAction = new QAction(QIcon(*edit_track_addIcon), tr("Duplicate Selected Tracks"), this); - editShrinkPartsAction = new QAction(tr("Shrink selected parts"), this); //FINDMICH TODO tooltips! + editShrinkPartsAction = new QAction(tr("Shrink selected parts"), this); editExpandPartsAction = new QAction(tr("Expand selected parts"), this); editCleanPartsAction = new QAction(tr("Clean selected parts"), this); @@ -285,6 +268,8 @@ QMenu* menuSettings = menuBar()->addMenu(tr("Window &Config")); + menuSettings->addAction(tr("Configure &custom columns"), this, SLOT(configCustomColumns())); + menuSettings->addSeparator(); menuSettings->addAction(subwinAction); menuSettings->addAction(shareAction); menuSettings->addAction(fullscreenAction); @@ -367,7 +352,7 @@ connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); connect(cb, SIGNAL(selectionChanged()), SLOT(clipboardChanged())); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); // work around for probable QT/WM interaction bug. // for certain window managers, e.g xfce, this window is @@ -448,6 +433,8 @@ case MusECore::Xml::TagStart: if (tag == "topwin") TopWin::readConfiguration(ARRANGER, xml); + else if (tag == "arranger") + Arranger::readConfiguration(xml); else xml.unknown("ArrangerView"); break; @@ -468,6 +455,7 @@ { xml.tag(level++, "arrangerview"); TopWin::writeConfiguration(ARRANGER, level, xml); + arranger->writeConfiguration(level,xml); xml.tag(level, "/arrangerview"); } @@ -664,7 +652,6 @@ void ArrangerView::addNewTrack(QAction* action) { MusEGlobal::song->addNewTrack(action, MusEGlobal::muse->arranger()->curTrack()); // Insert at current selected track. - //MusEGlobal::song->addNewTrack(action); // Add at end. } void ArrangerView::updateShortcuts() @@ -754,4 +741,13 @@ void ArrangerView::globalInsertSel() { MusECore::globalInsert(true); } void ArrangerView::globalSplitSel() { MusECore::globalSplit(true); } +void ArrangerView::configCustomColumns() +{ + ArrangerColumns* dialog = new ArrangerColumns(this); + dialog->exec(); + delete dialog; + + QMessageBox::information(this, tr("Changed Settings"), tr("Unfortunately, the changed arranger column settings\ncannot be applied while MusE is running.\nTo apply the changes, please restart MusE. Sorry.\n(we'll try to fix that)")); +} + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/arranger/arrangerview.h muse-2.0/muse/arranger/arrangerview.h --- muse-2.0~rc2/muse/arranger/arrangerview.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/arrangerview.h 2012-06-30 19:24:43.000000000 +0200 @@ -39,7 +39,7 @@ #include #include -#include +#include #include "noteinfo.h" #include "cobject.h" #include "event.h" @@ -125,7 +125,8 @@ void globalInsertSel(); void globalSplitSel(); void cmd(int); - void addNewTrack(QAction* action); + void addNewTrack(QAction* action); + void configCustomColumns(); signals: void isDeleting(MusEGui::TopWin*); @@ -138,6 +139,7 @@ void selectionChanged(); void updateShortcuts(); void updateVisibleTracksButtons(); + virtual void focusCanvas() { arranger->focusCanvas(); } public: ArrangerView(QWidget* parent = 0); @@ -153,7 +155,7 @@ void writeStatus(int level, MusECore::Xml& xml) const; void readStatus(MusECore::Xml& xml); static void readConfiguration(MusECore::Xml&); - static void writeConfiguration(int, MusECore::Xml&); + void writeConfiguration(int, MusECore::Xml&); }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/arranger/pcanvas.cpp muse-2.0/muse/arranger/pcanvas.cpp --- muse-2.0~rc2/muse/arranger/pcanvas.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/pcanvas.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include @@ -34,7 +34,6 @@ #include #include #include -//#include #include #include @@ -48,7 +47,6 @@ #include "globals.h" #include "icons.h" #include "event.h" -//#include "xml.h" #include "wave.h" #include "audio.h" #include "shortcuts.h" @@ -65,8 +63,6 @@ #include "dialogs.h" #include "widgets/pastedialog.h" -//#define ABS(x) ((x) < 0) ? -(x) : (x)) -//#define ABS(x) (x>=0?x:-x) #define ABS(x) (abs(x)) #define EDITING_FINISHED_TIMEOUT 50 /* in milliseconds */ @@ -84,6 +80,8 @@ leftBorderTouches = false; rightBorderTouches = false; + _serial=e->sn(); + int y = track()->y(); setPos(QPoint(e->tick(), y)); setBBox(QRect(e->tick(), y, e->lenTick(), track()->height())); @@ -108,7 +106,6 @@ setMouseTracking(true); drag = DRAG_OFF; curColorIndex = 0; - //automation.currentCtrl = 0; automation.currentCtrlValid = false; automation.controllerState = doNothing; automation.moveController = false; @@ -117,7 +114,6 @@ PartCanvas::~PartCanvas() { - //items.clearDelete(); } //--------------------------------------------------------- @@ -131,7 +127,6 @@ int idx = 0; for (MusECore::iTrack it = tl->begin(); it != tl->end(); ++it, ++idx) { int h = (*it)->height(); - // if ((y >= yy) && (y < yy+h)) if (y < yy+h) break; yy += h; @@ -162,7 +157,7 @@ void PartCanvas::leaveEvent(QEvent*) { - emit timeChanged(MAXINT); + emit timeChanged(INT_MAX); } //--------------------------------------------------------- @@ -177,7 +172,6 @@ //twice. the second call would cause a crash, however! MusECore::Part* oldPart = editPart->part(); MusECore::Part* newPart = oldPart->clone(); - //printf("PartCanvas::returnPressed before msgChangePart oldPart refs:%d Arefs:%d newPart refs:%d Arefs:%d\n", oldPart->events()->refCount(), oldPart->events()->arefCount(), newPart->events()->refCount(), newPart->events()->arefCount()); newPart->setName(lineEditor->text()); // Indicate do undo, and do port controller values but not clone parts. @@ -223,7 +217,7 @@ emit dclickPart(((NPart*)(curItem))->track()); } } - // + // double click creates new part between left and // right mark @@ -234,7 +228,7 @@ int y = event->y(); for (it = tl->begin(); it != tl->end(); ++it) { int h = (*it)->height(); - if (y >= yy && y < (yy + h)) + if (y >= yy && y < (yy + h) && (*it)->isVisible()) break; yy += h; } @@ -289,6 +283,7 @@ { CItem* ci = ici->second; + // DELETETHIS 5 // If this item's part is in the parts2change list, change the item's part to the new part. //MusECore::Part* pt = ci->part(); //iP2C ip2c = parts2change.find(pt); @@ -322,7 +317,6 @@ // return false, if copy/move not allowed //--------------------------------------------------------- -// Changed by T356. bool PartCanvas::moveItem(MusECore::Undo& operations, CItem* item, const QPoint& newpos, DragType t) { NPart* npart = (NPart*) item; @@ -379,12 +373,7 @@ if(t == MOVE_MOVE) item->setPart(dpart); if (t == MOVE_COPY && !clone) { - //dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it - // so we must decrement it first :/ - - // // Copy Events - // MusECore::EventList* se = spart->events(); MusECore::EventList* de = dpart->events(); for (MusECore::iEvent i = se->begin(); i != se->end(); ++i) { @@ -399,7 +388,7 @@ dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it // so we must decrement it first :/ // These will not increment ref count, and will not chain clones... - // TODO FINDMICH: is this still correct (by flo93)? i doubt it! + // TODO DELETETHIS: is the above comment still correct (by flo93)? i doubt it! operations.push_back(MusECore::UndoOp(MusECore::UndoOp::AddPart,dpart)); } else if (t == MOVE_MOVE) { @@ -407,11 +396,11 @@ // But just in case we ever have two different lists... dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it // so we must decrement it first :/ - spart->events()->incARef(1); // the later MusEGlobal::song->applyOperationGroup() will decrement it + spart->events()->incARef(1); // the later MusEGlobal::song->applyOperationGroup() will decrement it // so we must increment it first :/ dpart->setSelected(spart->selected()); // These will increment ref count if not a clone, and will chain clones... - // TODO FINDMICH: is this still correct (by flo93)? i doubt it! + // TODO DELETETHIS: is the above comment still correct (by flo93)? i doubt it! operations.push_back(MusECore::UndoOp(MusECore::UndoOp::ModifyPart,spart, dpart, true, false)); spart->setSelected(false); @@ -455,25 +444,25 @@ void PartCanvas::partsChanged() { - //items.clear(); int sn = -1; - if (curItem) sn=curItem->part()->sn(); - curItem=NULL; + if (curItem) sn=static_cast(curItem)->serial(); + curItem=NULL; items.clearDelete(); for (MusECore::iTrack t = tracks->begin(); t != tracks->end(); ++t) { + if ((*t)->isVisible()) //ignore parts from hidden tracks + { MusECore::PartList* pl = (*t)->parts(); for (MusECore::iPart i = pl->begin(); i != pl->end(); ++i) { MusECore::Part* part = i->second; NPart* np = new NPart(part); items.add(np); - if (np->part()->sn() == sn) + if (np->serial() == sn) curItem=np; - if (i->second->selected()) { + if (i->second->selected()) selectItem(np, true); - } // Check for touching borders. p4.0.29 MusECore::Part* pp; @@ -489,10 +478,11 @@ if(pp->tick() == part->endTick()) np->rightBorderTouches = true; } - } } - redraw(); + } } + redraw(); +} //--------------------------------------------------------- // updateSelection @@ -879,17 +869,14 @@ // viewMousePressEvent //--------------------------------------------------------- -void PartCanvas::mousePress(QMouseEvent* event) +bool PartCanvas::mousePress(QMouseEvent* event) { if (event->modifiers() & Qt::ControlModifier) { - return; + return true; } QPoint pt = event->pos(); CItem* item = items.find(pt); - //if (item == 0 && _tool!=AutomationTool) // FINDMICHJETZT. neccessary? (flo93) - // return; - switch (_tool) { default: if (item) @@ -914,10 +901,39 @@ } } case AutomationTool: - if (automation.controllerState != doNothing) - automation.moveController=true; - break; + if (event->button() & Qt::RightButton || + event->button() & Qt::MidButton) { + + bool do_delete; + + if (event->button() & Qt::MidButton) // mid-click + do_delete=true; + else // right-click + { + QMenu *automationMenu = new QMenu(this); + QAction* act; + act = automationMenu->addAction(tr("Remove selected")); + act = automationMenu->exec(event->globalPos()); + if (act) + do_delete=true; + else + do_delete=false; + } + if (do_delete && automation.currentTrack) { + foreach(int frame, automation.currentCtrlFrameList) + MusEGlobal::audio->msgEraseACEvent((MusECore::AudioTrack*)automation.currentTrack, + automation.currentCtrlList->id(), frame); + } + + } + else { + if (automation.controllerState != doNothing) + automation.moveController=true; + } + return false; + break; } + return true; } //--------------------------------------------------------- @@ -975,7 +991,7 @@ void PartCanvas::keyPress(QKeyEvent* event) { int key = event->key(); - +// DELETETHIS 10 // if (_tool == AutomationTool) { // can't get the cursor pos to work right, skipping for now // // clear all the automation parameters // automation.moveController=false; @@ -992,7 +1008,6 @@ // to "false" some usec ago by returnPressed, called by editingFinished. if ( key == Qt::Key_Return || key == Qt::Key_Enter ) { - //returnPressed(); commented out by flo return; } // the below CAN indeed happen. @@ -1090,9 +1105,8 @@ emit selectTrackBelow(); return; } - // + // Shortcuts that require selected parts from here - // if (!curItem) { if (items.size()==0) { event->ignore(); // give global accelerators a chance @@ -1202,11 +1216,10 @@ MusECore::Track* track = curItem->part()->track();//top->part()->track(); track = y2Track(track->y() - 1); - //If we're at topmost, leave - if (!track) { - //printf("no track above!\n"); + //If we're at topmost (no track above), leave + if (!track) return; - } + int middle = curItem->x() + curItem->part()->lenTick()/2; CItem *aboveL = 0, *aboveR = 0; //Upper limit: song end, lower limit: song start @@ -1366,7 +1379,7 @@ // draws a part //--------------------------------------------------------- -#if 0 +#if 0 // DELETETHIS 430 WHOA! void PartCanvas::drawItem(QPainter& p, const CItem* item, const QRect& rect) { int from = rect.x(); @@ -1793,7 +1806,6 @@ int from = rect.x(); int to = from + rect.width(); - //printf("from %d to %d\n", from,to); MusECore::Part* part = ((NPart*)item)->part(); int pTick = part->tick(); from -= pTick; @@ -1816,17 +1828,13 @@ // Item bounding box x is in tick coordinates, same as rectangle. if((rr & mr).isNull()) - { - //printf("PartCanvas::drawItem rectangle is null\n"); return; - } - //p.save(); p.setWorldMatrixEnabled(false); // NOTE: Optimization: For each item, hasHiddenEvents() is called once in Canvas::draw(), and we use cachedHasHiddenEvents(). // Not used for now. - //int het = part->cachedHasHiddenEvents(); + //int het = part->cachedHasHiddenEvents(); DELETETHIS or FIXME or whatever? int het = part->hasHiddenEvents(); int xs_0 = rr.x(); @@ -1922,18 +1930,13 @@ int h = rr.height(); double s = double(h) / 4.0; int y0 = ys_0; - //int y1 = y0 + lrint(s); int y2 = y0 + lrint(s * 2.0); - //int y3 = y0 + lrint(s * 3.0); int y4 = y0 + h; - //QPoint points[12]; QPoint points[8]; int pts; - // // Fill the part rectangles, accounting for hidden events by using 'jagged' edges... - // p.setBrush(brush); p.setPen(Qt::NoPen); @@ -1945,7 +1948,7 @@ pts = 0; if(het == (MusECore::Part::LeftEventsHidden | MusECore::Part::RightEventsHidden)) { - //points[pts++] = QPoint(xs_0, y0); + //points[pts++] = QPoint(xs_0, y0); DELETETHIS 11 //points[pts++] = QPoint(xe_0, y0); //points[pts++] = QPoint(xe_j, y1); //points[pts++] = QPoint(xe_0, y2); @@ -1968,7 +1971,7 @@ else if(het == MusECore::Part::LeftEventsHidden) { - //points[pts++] = QPoint(xs_0, y0); + //points[pts++] = QPoint(xs_0, y0); DELETETHIS 7 //points[pts++] = QPoint(xe_0, y0); //points[pts++] = QPoint(xe_0, y4); //points[pts++] = QPoint(xs_0, y4); @@ -1987,7 +1990,7 @@ else if(het == MusECore::Part::RightEventsHidden) { - //points[pts++] = QPoint(xs_0, y0); + //points[pts++] = QPoint(xs_0, y0); DELETETHIS 7 //points[pts++] = QPoint(xe_0, y0); //points[pts++] = QPoint(xe_j, y1); //points[pts++] = QPoint(xe_0, y2); @@ -2004,13 +2007,12 @@ p.drawConvexPolygon(points, pts); } - // // Draw remaining 'hidden events' decorations with 'jagged' edges... - // int part_r, part_g, part_b, brightness, color_brightness; MusEGlobal::config.partColors[cidx].getRgb(&part_r, &part_g, &part_b); brightness = part_r*29 + part_g*59 + part_b*12; + // DELETETHIS 4 ?? //if ((brightness < 12000 || part->selected()) && !part->mute() && !item->isMoving()) // color_brightness=223; // too dark: use lighter color //else @@ -2021,11 +2023,10 @@ color_brightness=180; //255; // too dark: use lighter color QColor c(color_brightness,color_brightness,color_brightness, MusEGlobal::config.globalAlphaBlend); p.setBrush(QBrush(MusECore::gGradientFromQColor(c, rr.topLeft(), rr.bottomLeft()))); - //p.setBrush(QBrush(c)); if(het & MusECore::Part::RightEventsHidden) { pts = 0; - //points[pts++] = QPoint(xe_0, y0); + //points[pts++] = QPoint(xe_0, y0); DELETETHIS 5 //points[pts++] = QPoint(xe_0, y4); //points[pts++] = QPoint(xe_j, y3); //points[pts++] = QPoint(xe_0, y2); @@ -2040,7 +2041,7 @@ if(het & MusECore::Part::LeftEventsHidden) { pts = 0; - //points[pts++] = QPoint(xs_0, y0); + //points[pts++] = QPoint(xs_0, y0); DELETETHIS 5 //points[pts++] = QPoint(xs_j, y1); //points[pts++] = QPoint(xs_0, y2); //points[pts++] = QPoint(xs_j, y3); @@ -2055,7 +2056,6 @@ } else { - //p.fillRect(rr, brush); p.fillRect(rr & mr, brush); // Respect the requested drawing rectangle. Gives speed boost! } @@ -2063,11 +2063,8 @@ if(part->mute()) { p.setPen(Qt::NoPen); - //brush.setStyle(Qt::DiagCrossPattern); brush.setStyle(Qt::Dense7Pattern); - //p.fillRect(rr, brush); // FIXME: Some shifting going on - //p.fillRect(QRect(rr.x(), rr.y(), rr.width() + 1, rr.height() + 1), brush); // Same here p.fillRect(rr & mr, brush); // Respect the requested drawing rectangle. Gives speed boost! } @@ -2092,7 +2089,7 @@ p.setWorldMatrixEnabled(false); - #if 0 + #if 0 // DELETETHIS 13 // // Now draw the borders... // Works great but requires clones be drawn with the highest priority on top of all other parts, in Canvas::draw. @@ -2107,7 +2104,7 @@ //#else #endif - #if 1 + #if 1 // DELETETHIS remove wrapping #if // // Now draw the borders, using custom segments... // @@ -2257,12 +2254,11 @@ int part_r, part_g, part_b, brightness; // Since we'll draw the text on the bottom (to accommodate drum 'slivers'), // get the lowest colour in the gradient used to draw the part. - //QRect rr = map(r); QRect tr = rr; tr.setX(tr.x() + 3); MusECore::gGradientFromQColor(MusEGlobal::config.partColors[cidx], tr.topLeft(), tr.bottomLeft()).stops().last().second.getRgb(&part_r, &part_g, &part_b); brightness = part_r*29 + part_g*59 + part_b*12; - //bool rev = (brightness < 12000 || part->selected()) && !part->mute() && !item->isMoving(); + //bool rev = (brightness < 12000 || part->selected()) && !part->mute() && !item->isMoving(); DELETETHIS bool rev = brightness >= 12000 && !part->selected(); p.setFont(MusEGlobal::config.fonts[4]); if (rev) @@ -2277,7 +2273,6 @@ p.drawText(tr, Qt::AlignBottom|Qt::AlignLeft, part->name()); } - //p.restore(); p.setWorldMatrixEnabled(true); } @@ -2291,7 +2286,7 @@ p.setPen( Qt::black); MusECore::Part* part = ((NPart*)item)->part(); QColor c(part->mute() ? Qt::white : MusEGlobal::config.partColors[part->colorIndex()]); - //c.setAlpha(MusEGlobal::config.globalAlphaBlend); + //c.setAlpha(MusEGlobal::config.globalAlphaBlend); DELETETHIS c.setAlpha(128); // Fix this regardless of global setting. Should be OK. p.setBrush(c); p.drawRect(item->mp().x(), item->mp().y(), item->width(), item->height()); @@ -2313,7 +2308,7 @@ int part_r, part_g, part_b, brightness; MusEGlobal::config.partColors[pt->colorIndex()].getRgb(&part_r, &part_g, &part_b); brightness = part_r*29 + part_g*59 + part_b*12; - //if ((brightness < 12000 || pt->selected()) && !pt->mute()) + //if ((brightness < 12000 || pt->selected()) && !pt->mute()) DELETETHIS 4 // color_brightness=192; // too dark: use lighter color //else // color_brightness=64; // otherwise use dark color @@ -2505,8 +2500,6 @@ if (te < (from + pTick)) continue; - //if (te > (to + pTick)) - // te = to + pTick; if (te >= (to + pTick)) te = lrint(rmapxDev_f(rmapx_f(to + pTick) - 1.0)); @@ -2536,9 +2529,7 @@ void PartCanvas::drawWavePart(QPainter& p, const QRect& bb, MusECore::WavePart* wp, const QRect& _pr) { - //QRect rr = p.worldMatrix().mapRect(bb); // Gives inconsistent positions. Source shows wrong operation for our needs. QRect rr = map(bb); // Use our own map instead. - //QRect pr = p.worldMatrix().mapRect(_pr); QRect pr = map(_pr); p.save(); @@ -2591,10 +2582,7 @@ if(ex > x2) ex = x2; if (h < 20) { - // // combine multi channels into one waveform - // - //printf("PartCanvas::drawWavePart i:%d ex:%d\n", i, ex); for (; i < ex; i++) { MusECore::SampleV sa[channels]; @@ -2619,14 +2607,12 @@ } } else { - // // multi channel display - // int hm = hh / (channels * 2); int cc = hh % (channels * 2) ? 0 : 1; for (; i < ex; i++) { y = pr.y() + hm; - MusECore::SampleV sa[channels]; + MusECore::SampleV sa[channels]; xScale = MusEGlobal::tempomap.deltaTick2frame(postick, postick + tickstep); f.read(sa, xScale, pos); postick += tickstep; @@ -2706,6 +2692,7 @@ case 0: paste_mode=PASTEMODE_MIX; break; case 1: paste_mode=PASTEMODE_MOVEALL; break; case 2: paste_mode=PASTEMODE_MOVESOME; break; + default: paste_mode=PASTEMODE_MIX; // shall never be executed } paste(paste_dialog->clone, paste_mode, paste_dialog->all_in_one_track, @@ -3146,10 +3133,6 @@ } //--------------------------------------------------------- -// dragvent -//--------------------------------------------------------- - -//--------------------------------------------------------- // dropEvent //--------------------------------------------------------- @@ -3364,11 +3347,9 @@ //-------------------------------- MusECore::TrackList* tl = MusEGlobal::song->tracks(); - //int yy = 0; int yy = -rmapy(yorg) - ypos; int th; for (MusECore::iTrack it = tl->begin(); it != tl->end(); ++it) { - //if (yy > y + h) if (yy > my + mh) break; MusECore::Track* track = *it; @@ -3378,9 +3359,7 @@ if (MusEGlobal::config.canvasShowGrid && (track->isMidiTrack() || track->type() == MusECore::Track::WAVE)) // Tim. { p.setPen(baseColor.dark(130)); - //p.drawLine(x, yy + th, x + w, yy + th); p.drawLine(mx, yy + th, mx + mw, yy + th); - //p.setPen(baseColor); } // The update rectangle (rect and mr etc) is clipped at x<0 and y<0 in View::pdraw(). @@ -3393,31 +3372,15 @@ // does NOT depend on the update rectangle (except to check intersection). That's why this issue // does not show up there. Should probably try to make that routine more efficient, just like here. Tim. p4.0.30 QRect r(mx, yy, mw, th); - //if(r.intersects(mr)) { if (!track->isMidiTrack() && (track->type() != MusECore::Track::WAVE)) { - //QRect r = rect & QRect(x, yy, w, track->height()); drawAudioTrack(p, mr, r, (MusECore::AudioTrack*)track); - //p.setPen(baseColor); - } - - // This was redundant drawing. Not required, done via drawTopItem in Canvas::draw - /* - //p.setWorldMatrixEnabled(true); - //if (!track->isMidiTrack()) { // draw automation - if (!track->isMidiTrack() && (track->type() != MusECore::Track::WAVE)) { - //QRect r = rect & QRect(x, yy, w, track->height()); - drawAutomation(p, r, (MusECore::AudioTrack*)track); - //p.setPen(baseColor); - } - //p.setWorldMatrixEnabled(false); - */ + } } yy += th; } p.restore(); - //p.setWorldMatrixEnabled(true); } //--------------------------------------------------------- @@ -3425,17 +3388,7 @@ //--------------------------------------------------------- void PartCanvas::drawTopItem(QPainter& p, const QRect& rect) { - //int x = rect.x(); - //int y = rect.y(); - //int w = rect.width(); - //int h = rect.height(); - - // Changed to draw in device coordinate space instead of virtual, transformed space. Tim. p4.0.30 - - //QRect mr = p.transform().mapRect(rect); // Gives inconsistent positions. Source shows wrong operation for our needs. - QRect mr = map(rect); // Use our own map instead. - - //printf("PartCanvas::drawTopItem x:%d y:%d w:%d h:%d\n", rect.x(), rect.y(), rect.width(), rect.height()); + QRect mr = map(rect); int mx = mr.x(); int my = mr.y(); @@ -3443,18 +3396,15 @@ int mh = mr.height(); QColor baseColor(MusEGlobal::config.partCanvasBg.light(104)); - //p.setPen(baseColor); p.save(); p.setWorldMatrixEnabled(false); MusECore::TrackList* tl = MusEGlobal::song->tracks(); int yoff = -rmapy(yorg) - ypos; - //int yy = 0; int yy = yoff; int th; for (MusECore::iTrack it = tl->begin(); it != tl->end(); ++it) { - //if (yy > y + h) if (yy > my + mh) break; MusECore::Track* track = *it; @@ -3462,41 +3412,32 @@ if (!th) continue; if (!track->isMidiTrack()) { // draw automation - //QRect r = rect & QRect(x, yy, w, track->height()); QRect r(mx, yy, mw, th); if(r.intersects(mr)) { drawAutomation(p, r, (MusECore::AudioTrack*)track); - //p.setPen(baseColor); } } - //yy += track->height(); yy += th; } - unsigned int startPos = MusEGlobal::audio->getStartRecordPos().tick(); + unsigned int startPos = MusEGlobal::extSyncFlag.value() ? MusEGlobal::audio->getStartExternalRecTick() : MusEGlobal::audio->getStartRecordPos().tick(); if (MusEGlobal::song->punchin()) startPos=MusEGlobal::song->lpos(); int startx = mapx(startPos); int width = mapx(MusEGlobal::song->cpos()) - mapx(startPos); if (MusEGlobal::song->cpos() < startPos) { - //p.setWorldMatrixEnabled(true); p.restore(); return; // no drawing if we are before punch out } if (MusEGlobal::song->punchout() && MusEGlobal::song->cpos() > MusEGlobal::song->rpos()) { - //p.setWorldMatrixEnabled(true); p.restore(); return; // no drawing if we are beyond punch out. } - ///p.save(); - ///p.resetTransform(); - // write recording while it happens to get feedback // should be enhanced with solution that draws waveform also - //int yPos=0; int yPos = yoff; if (MusEGlobal::song->record() && MusEGlobal::audio->isPlaying()) { for (MusECore::iTrack it = tl->begin(); it != tl->end(); ++it) { @@ -3521,7 +3462,6 @@ } } p.restore(); - //p.setWorldMatrixEnabled(true); // draw midi events on yPos=0; @@ -3587,13 +3527,13 @@ p.setPen(Qt::black); QColor c(Qt::gray); c.setAlpha(MusEGlobal::config.globalAlphaBlend); - //QLinearGradient gradient(r.topLeft(), r.bottomLeft()); QLinearGradient gradient(mex + 1, mey + 1, mex + 1, mey + meh - 1); // Inside the border gradient.setColorAt(0, c); gradient.setColorAt(1, c.darker()); QBrush brush(gradient); p.fillRect(mr, brush); // p4.0.30 ... + // DELETETHIS 6 //int xx = -rmapx(xorg) - xpos; //printf("PartCanvas::drawAudioTrack x:%d y:%d w:%d h:%d th:%d xx:%d\n", r.x(), r.y(), r.width(), r.height(), t->height(), xx); //if(r.x() <= xx) @@ -3603,7 +3543,7 @@ if(mex >= mx && mex <= mx + mw) p.drawLine(mex, my, mex, my + mh - 1); // The left edge - //if(mex + mew >= mx && mex + mew <= mx + mw) + //if(mex + mew >= mx && mex + mew <= mx + mw) DELETETHIS 2 // p.drawLine(mex + mew, my, mex + mew, my + mh - 1); // The right edge. Not used - infinite to the right if(mey >= my && mey <= my + mh) p.drawLine(mx, mey, mx + mw - 1, mey); // The top edge @@ -3646,7 +3586,6 @@ int ypixel = oldY; double min, max; cl->range(&min,&max); - //bool discrete = cl->valueType() == VAL_BOOL || cl->mode() == MusECore::CtrlList::DISCRETE; bool discrete = cl->mode() == MusECore::CtrlList::DISCRETE; QPen pen1(cl->color(), 0); QPen pen2(cl->color(), 2); @@ -3657,7 +3596,6 @@ { double y; if (cl->valueType() == MusECore::VAL_LOG ) { // use db scale for volume - //printf("log conversion val=%f min=%f max=%f\n", cl->curVal(), min, max); y = logToVal(cl->curVal(), min, max); // represent volume between 0 and 1 if (y < 0) y = 0.0; } @@ -3671,7 +3609,6 @@ { double y = ic->second.val; if (cl->valueType() == MusECore::VAL_LOG ) { // use db scale for volume - //printf("log conversion val=%f min=%f max=%f\n", cl->curVal(), min, max); y = logToVal(y, min, max); // represent volume between 0 and 1 if (y < 0) y = 0.0; } @@ -3683,7 +3620,6 @@ if (oldY==-1) oldY = ypixel; - //printf(" line x1:%d x2:%d prevVal:%f nextVal:%f\n", leftX, currentPixel, prevVal, nextVal); p.setPen(pen1); if(discrete) { @@ -3700,25 +3636,83 @@ //p.drawRect(mapx(MusEGlobal::tempomap.frame2tick(prevPosFrame))-2, (rr.bottom()-2)-prevVal*height-2, 5, 5); //p.drawRect(mapx(MusEGlobal::tempomap.frame2tick(prevPosFrame))-1, (rr.bottom()-1)-prevVal*height-2, 3, 3); pen2.setColor((automation.currentCtrlValid && automation.currentCtrlList == cl && - automation.currentCtrlFrame == ic->second.frame) ? + automation.currentCtrlFrameList.contains(ic->second.frame)) ? Qt::white : cl->color()); p.setPen(pen2); p.drawRect(xpixel-2, ypixel-2, 5, 5); oldX = xpixel; oldY = ypixel; + if (automation.currentCtrlValid && automation.currentCtrlList == cl && + automation.currentCtrlFrameList.contains(ic->second.frame) && + automation.currentCtrlFrameList.size() == 1) { + double val = ic->second.val; + QRect textRect = rr; + textRect.setX(xpixel + 20); + textRect.setY(ypixel); + if (cl->valueType() == MusECore::VAL_LOG) { + val = MusECore::fast_log10(ic->second.val) * 20.0; + } + p.drawText(textRect, QString("Value: %1").arg(val)); + } } } if (xpixel <= rr.right()) { - //printf(" endline prevVal:%f\n", prevVal); p.setPen(pen1); p.drawLine(xpixel, ypixel, rr.right(), ypixel); } } - //p.restore(); } +//--------------------------------------------------------- +// checkIfOnLine +// check if our point is on the line defined by +// by first/last X/Y +//--------------------------------------------------------- + +bool checkIfOnLine(double mouseX, double mouseY, double firstX, double lastX, double firstY, double lastY, int circumference) +{ + if (lastX==firstX) + return (ABS(mouseX-lastX) < circumference); + else if (mouseX < firstX || mouseX > lastX+circumference) // (*) + return false; + else + { + double proportion = (mouseX-firstX)/(lastX-firstX); // a value between 0 and 1, where firstX->0 and lastX->1 + double calcY = (lastY-firstY)*proportion+firstY; // where the drawn line's y-coord is at mouseX + double slope = (lastY-firstY)/(lastX-firstX); + + return (ABS(calcY-mouseY) < (circumference * sqrt(1+slope*slope))); + // this is equivalent to circumference / cos( atan(slope) ). to + // verify, draw a sloped line (the graph), a 90°-line to it with + // length "circumference". from the (unconnected) endpoint of that + // line, draw a vertical line down to the sloped line. + // use slope=tan(alpha) <==> alpha=atan(slope) and + // cos(alpha) = adjacent side / hypothenuse (hypothenuse is what we + // want, and adjacent = circumference). + // to optimize: this looks similar to abs(slope)+1 + + //return (ABS(calcY-mouseY) < circumference); + } + + /* without the +circumference in the above if statement (*), moving + * the mouse towards a control point from the right would result in + * the line segment from the targeted point to the next to be con- + * sidered, but not the segment from the previous to the targeted. + * however, only points for which the line segment they _end_ is + * under the cursor are considered, so we need to enlengthen this + * a bit (flo93)*/ +} + +//--------------------------------------------------------- +// checkIfNearPoint +//--------------------------------------------------------- + +bool checkIfNearPoint(int mouseX, int mouseY, int eventX, int eventY, int circumference) +{ + return (ABS(mouseX - eventX) < circumference && ABS(mouseY - eventY) < circumference); +} //--------------------------------------------------------- // checkAutomation @@ -3731,22 +3725,22 @@ // controller added. //--------------------------------------------------------- -void PartCanvas::checkAutomation(MusECore::Track * t, const QPoint &pointer, bool addNewCtrl) +void PartCanvas::checkAutomation(MusECore::Track * t, const QPoint &pointer, bool /*NOTaddNewCtrl*/) { if (t->isMidiTrack()) return; - int currY; + int mouseY; int trackY = t->y(); int trackH = t->height(); { int y = pointer.y(); if(y < trackY || y >= (trackY + trackH)) return; - currY = mapy(y); } + mouseY = mapy(y); } - int currX = mapx(pointer.x()); - int circumference = 5; + int mouseX = mapx(pointer.x()); + int circumference = 10; MusECore::CtrlListList* cll = ((MusECore::AudioTrack*) t)->controller(); for(MusECore::CtrlListList::iterator icll =cll->begin();icll!=cll->end();++icll) @@ -3757,16 +3751,15 @@ } MusECore::iCtrl ic=cl->begin(); - int oldX = mapx(0); - int xpixel = oldX; - int oldY = -1; - int ypixel = oldY; + int eventOldX = mapx(0); + int eventX = eventOldX; + int eventOldY = -1; + int eventY = eventOldY; double min, max; cl->range(&min,&max); - //bool discrete = cl->valueType() == VAL_BOOL || cl->mode() == MusECore::CtrlList::DISCRETE; // Tim bool discrete = cl->mode() == MusECore::CtrlList::DISCRETE; - // First check that there IS automation, ic == cl->end means no automation + // First check that there IS automation for this controller, ic == cl->end means no automation if (ic == cl->end()) { double y; @@ -3776,116 +3769,78 @@ } else y = (cl->curVal() - min)/(max-min); // we need to set curVal between 0 and 1 - ypixel = oldY = mapy(trackY+trackH-1 - 2 - y * trackH); + eventY = eventOldY = mapy(trackY+trackH-1 - 2 - y * trackH); } - else + else // we have automation, loop through it { - for (; ic !=cl->end(); ic++) + for (; ic!=cl->end(); ic++) { double y = ic->second.val; if (cl->valueType() == MusECore::VAL_LOG ) { // use db scale for volume - y = logToVal(y, min, max); // represent volume between 0 and 1 + y = logToVal(y, min, max); // represent volume between 0 and 1 if (y < 0) y = 0; } else y = (y-min)/(max-min); // we need to set curVal between 0 and 1 - ypixel = mapy(trackY + trackH - 2 - y * trackH); - xpixel = mapx(MusEGlobal::tempomap.frame2tick(ic->second.frame)); + eventY = mapy(trackY + trackH - 2 - y * trackH); + eventX = mapx(MusEGlobal::tempomap.frame2tick(ic->second.frame)); - if (oldY==-1) oldY = ypixel; - //printf(" oldX:%d oldY:%d xpixel:%d ypixel:%d\n", oldX, oldY, xpixel, ypixel); + if (eventOldY==-1) eventOldY = eventY; - bool foundIt=false; - if (addNewCtrl) { - // check if we are reasonably close to a line - //printf("xpixel=%d oldX=%d\n", xpixel, oldX); - double firstX=oldX; - double lastX=xpixel; - double firstY=oldY; - double lastY = discrete ? oldY : ypixel; - - double proportion = (currX-firstX)/(lastX-firstX); - - //if ( (currX > lastX && firstY!=lastY) // omit special cases. - // || firstX==lastX ) { - if((currX < oldX) || (currX > lastX) || (firstX==lastX) ) - { - oldX = xpixel; - oldY = ypixel; - continue; // not the right region - } + //if (addNewCtrl) { + bool onLine = checkIfOnLine(mouseX, mouseY, eventOldX,eventX, eventOldY, discrete? eventOldY:eventY, circumference); + bool onPoint = false; + if ( pointer.x() > 0 && pointer.y() > 0) + onPoint = checkIfNearPoint(mouseX, mouseY, eventX, eventY, circumference); - // 10 X(15) 20 - // proportion = 0.5 - // 10 - // / - // Y(5) - // / - // 1 - double calcY = (lastY-firstY)*proportion+firstY; - //printf("calcY=%f currY=%d\n", calcY, currY); - if(ABS(calcY-currY) < circumference || (xpixel == oldX && ABS(currX-xpixel) < circumference)) - foundIt=true; + eventOldX = eventX; + eventOldY = eventY; - } else { - int x1 = ABS(currX - xpixel) ; - int y1 = ABS(currY - ypixel); - if (x1 < circumference && y1 < circumference && pointer.x() > 0 && pointer.y() > 0) { - foundIt=true; - } - - } - oldX = xpixel; - oldY = ypixel; - - if (foundIt) { - QWidget::setCursor(Qt::CrossCursor); - if (addNewCtrl) { - //automation.currentCtrl = 0; + if (onLine) { + if (!onPoint) { + QWidget::setCursor(Qt::CrossCursor); automation.currentCtrlValid = false; automation.controllerState = addNewController; }else { - //automation.currentCtrl=&ic->second; - automation.currentCtrlFrame = ic->second.frame; - //automation.currentCtrlVal = ic->second.val; + QWidget::setCursor(Qt::OpenHandCursor); + automation.currentCtrlFrameList.clear(); + automation.currentCtrlFrameList.append(ic->second.frame); automation.currentCtrlValid = true; automation.controllerState = movingController; } automation.currentCtrlList = cl; automation.currentTrack = t; + update(); return; } } } - if (addNewCtrl) { - // check if we are reasonably close to a line, we only need to check Y - // as the line is straight after the last controller - //printf("post oldX:%d oldY:%d xpixel:%d ypixel:%d currX:%d currY:%d\n", oldX, oldY, xpixel, ypixel, currX, currY); - if(currX >= xpixel && ypixel == oldY && ABS(currY-ypixel) < circumference) { - QWidget::setCursor(Qt::CrossCursor); - automation.controllerState = addNewController; - automation.currentCtrlList = cl; - automation.currentTrack = t; - //automation.currentCtrl = 0; - automation.currentCtrlValid = false; - return; - } + // we are now after the last existing controller + // check if we are reasonably close to a line, we only need to check Y + // as the line is straight after the last controller + //printf("post oldX:%d oldY:%d xpixel:%d ypixel:%d currX:%d currY:%d\n", oldX, oldY, xpixel, ypixel, currX, currY); + if(mouseX >= eventX && ABS(mouseY-eventY) < circumference) { + QWidget::setCursor(Qt::CrossCursor); + automation.controllerState = addNewController; + automation.currentCtrlList = cl; + automation.currentTrack = t; + automation.currentCtrlValid = false; + return; } } // if there are no hits we default to clearing all the data automation.controllerState = doNothing; - //automation.currentCtrl = 0; automation.currentCtrlValid = false; automation.currentCtrlList = 0; automation.currentTrack = 0; + automation.currentCtrlFrameList.clear(); setCursor(); } -void PartCanvas::controllerChanged(MusECore::Track* t) +void PartCanvas::controllerChanged(MusECore::Track* t, int) { - //redraw(); redraw((QRect(0, mapy(t->y()), width(), rmapy(t->height())))); // TODO Check this - correct? } @@ -3903,26 +3858,21 @@ } // automation.moveController is set, lets rock. - int prevFrame = 0; int nextFrame = -1; - int currFrame = 0; if (automation.controllerState == addNewController) { - //printf("adding a new ctrler!\n"); int frame = MusEGlobal::tempomap.tick2frame(pos.x()); // FIXME Inefficient to add with wait here, then remove and add with wait again below. Tim. MusEGlobal::audio->msgAddACEvent((MusECore::AudioTrack*)automation.currentTrack, automation.currentCtrlList->id(), frame, 1.0 /*dummy value */); - //MusEGlobal::song->addACEvent((MusECore::AudioTrack*)automation.currentTrack, automation.currentCtrlList->id(), frame, 1.0 /*dummy value */); MusECore::iCtrl ic=automation.currentCtrlList->begin(); for (; ic !=automation.currentCtrlList->end(); ++ic) { MusECore::CtrlVal &cv = ic->second; if (cv.frame == frame) { - //automation.currentCtrl = &cv; - automation.currentCtrlFrame = cv.frame; - //automation.currentCtrlVal = cv.val; + automation.currentCtrlFrameList.clear(); + automation.currentCtrlFrameList.append(cv.frame); automation.currentCtrlValid = true; automation.controllerState = movingController; break; @@ -3936,10 +3886,9 @@ for (; ic !=automation.currentCtrlList->end(); ++ic) { MusECore::CtrlVal &cv = ic->second; - //if (&cv == automation.currentCtrl) - if (cv.frame == automation.currentCtrlFrame) + if (automation.currentCtrlFrameList.contains(cv.frame)) { - currFrame = cv.frame; + //currFrame = cv.frame; break; } prevFrame = cv.frame; @@ -3957,9 +3906,7 @@ // there is only one value at t, and the next value at t+1, and so on. // Also these are maps, not multimaps. p4.0.32 Tim. int newFrame = MusEGlobal::tempomap.tick2frame(pos.x()); - //if(currFrame == 0) - // newFrame = 0; // Force first item to stay at x = 0. - //else + if (newFrame <= prevFrame) newFrame=prevFrame + (icc == automation.currentCtrlList->begin() ? 0: 1); // Only first item is allowed to go to zero x. if (nextFrame!=-1 && newFrame >= nextFrame) newFrame=nextFrame-1; @@ -3967,7 +3914,6 @@ int posy=mapy(pos.y()); int tracky = mapy(automation.currentTrack->y()); int trackHeight = automation.currentTrack->height(); - //printf("posy=%d tracky=%d trackHeight=%d\n", posy,tracky,trackHeight); int mouseY = trackHeight - (posy - tracky)-2; double yfraction = ((double)mouseY)/automation.currentTrack->height(); @@ -3976,9 +3922,8 @@ automation.currentCtrlList->range(&min,&max); double cvval; if (automation.currentCtrlList->valueType() == MusECore::VAL_LOG ) { // use db scale for volume - printf("log conversion val=%f min=%f max=%f\n", yfraction, min, max); + //printf("log conversion val=%f min=%f max=%f\n", yfraction, min, max); cvval = valToLog(yfraction, min, max); - //printf("calc yfraction = %f v=%f ",yfraction,cvval); if (cvval< min) cvval=min; if (cvval>max) cvval=max; } @@ -3986,26 +3931,20 @@ // we need to set val between 0 and 1 (unless integer) cvval = yfraction * (max-min) + min; // 'Snap' to integer or boolean - //if (automation.currentCtrlList->valueType() == VAL_INT || automation.currentCtrlList->valueType() == VAL_BOOL) if (automation.currentCtrlList->mode() == MusECore::CtrlList::DISCRETE) cvval = rint(cvval + 0.1); // LADSPA docs say add a slight bias to avoid rounding errors. Try this. if (cvval< min) cvval=min; if (cvval>max) cvval=max; } - automation.currentCtrlFrame = newFrame; - //automation.currentCtrlVal = cvval; + automation.currentCtrlFrameList.clear(); + automation.currentCtrlFrameList.append(newFrame); automation.currentCtrlValid = true; if(icc != automation.currentCtrlList->end()) MusEGlobal::audio->msgChangeACEvent((MusECore::AudioTrack*)automation.currentTrack, automation.currentCtrlList->id(), icc->second.frame, newFrame, cvval); - //MusEGlobal::song->changeACEvent((MusECore::AudioTrack*)automation.currentTrack, automation.currentCtrlList->id(), icc->second.frame, newFrame, cvval); else MusEGlobal::audio->msgAddACEvent((MusECore::AudioTrack*)automation.currentTrack, automation.currentCtrlList->id(), newFrame, cvval); - //MusEGlobal::song->addACEvent((MusECore::AudioTrack*)automation.currentTrack, automation.currentCtrlList->id(), newFrame, cvval); - - // Not needed. Redraw is now handled by msgXXX(). - //controllerChanged(automation.currentTrack); } } @@ -4018,7 +3957,6 @@ //--------------------------------------------------------- double PartCanvas::logToVal(double inLog, double min, double max) { - //printf("logToVal inLog %f :", inLog); if (inLog < min) inLog = min; if (inLog > max) inLog = max; double linMin = 20.0*MusECore::fast_log10(min); @@ -4026,7 +3964,6 @@ double linVal = 20.0*MusECore::fast_log10(inLog); double outVal = (linVal-linMin) / (linMax - linMin); - // printf("inLog %f outVal %f linVal %f min %f max %f dbMin %f dbMax %f\n", inLog, outVal, linVal, min, max, linMin, linMax); return outVal; } diff -Nru muse-2.0~rc2/muse/arranger/pcanvas.h muse-2.0/muse/arranger/pcanvas.h --- muse-2.0~rc2/muse/arranger/pcanvas.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/pcanvas.h 2012-06-30 19:24:43.000000000 +0200 @@ -59,20 +59,24 @@ //--------------------------------------------------------- class NPart : public CItem { + protected: + int _serial; + public: NPart(MusECore::Part* e); const QString name() const { return part()->name(); } void setName(const QString& s) { part()->setName(s); } MusECore::Track* track() const { return part()->track(); } + int serial() { return _serial; } bool leftBorderTouches; // Whether the borders touch other part borders. bool rightBorderTouches; + }; enum ControllerVals { doNothing, movingController, addNewController }; struct AutomationObject { - //MusECore::CtrlVal *currentCtrl; - int currentCtrlFrame; + QList currentCtrlFrameList; bool currentCtrlValid; MusECore::CtrlList *currentCtrlList; MusECore::Track *currentTrack; @@ -99,10 +103,8 @@ AutomationObject automation; - //std::vector automationViews; - virtual void keyPress(QKeyEvent*); - virtual void mousePress(QMouseEvent*); + virtual bool mousePress(QMouseEvent*); virtual void mouseMove(QMouseEvent* event); virtual void mouseRelease(const QPoint&); virtual void viewMouseDoubleClickEvent(QMouseEvent*); @@ -137,9 +139,7 @@ enum paste_mode_t { PASTEMODE_MIX, PASTEMODE_MOVEALL, PASTEMODE_MOVESOME }; void paste(bool clone = false, paste_mode_t paste_mode = PASTEMODE_MIX, bool to_single_track=false, int amount=1, int raster=1536); MusECore::Undo pasteAt(const QString&, MusECore::Track*, unsigned int, bool clone = false, bool toTrack = true, int* finalPosPtr = NULL, std::set* affected_tracks = NULL); - //MusECore::Part* readClone(MusECore::Xml&, MusECore::Track*, bool toTrack = true); void drawWavePart(QPainter&, const QRect&, MusECore::WavePart*, const QRect&); - //void drawMidiPart(QPainter&, const QRect& rect, MusECore::EventList* events, MusECore::MidiTrack*mt, const QRect& r, int pTick, int from, int to); void drawMidiPart(QPainter&, const QRect& rect, MusECore::EventList* events, MusECore::MidiTrack*mt, MusECore::MidiPart*pt, const QRect& r, int pTick, int from, int to); MusECore::Track* y2Track(int) const; void drawAudioTrack(QPainter& p, const QRect& r, const QRect& bbox, MusECore::AudioTrack* track); @@ -184,7 +184,7 @@ public slots: void redirKeypress(QKeyEvent* e) { keyPress(e); } - void controllerChanged(MusECore::Track *t); + void controllerChanged(MusECore::Track *t, int CtrlId); }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/arranger/tlist.cpp muse-2.0/muse/arranger/tlist.cpp --- muse-2.0~rc2/muse/arranger/tlist.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/tlist.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -20,13 +20,12 @@ // //========================================================= -//#include "config.h" - #include +#include +#include #include #include -//#include #include #include #include @@ -37,8 +36,9 @@ #include #include #include +#include +#include -#include "popupmenu.h" #include "globals.h" #include "icons.h" #include "scrollscale.h" @@ -46,6 +46,7 @@ #include "xml.h" #include "mididev.h" #include "midiport.h" +#include "midictrl.h" #include "midiseq.h" #include "comment.h" #include "track.h" @@ -63,6 +64,10 @@ #include "config.h" #include "popupmenu.h" #include "menutitleitem.h" +#include "arranger.h" +#include "undo.h" +#include "midi_audio_control.h" +#include "ctrl.h" #ifdef DSSI_SUPPORT #include "dssihost.h" @@ -91,7 +96,8 @@ setObjectName(name); ypos = 0; editMode = false; - setFocusPolicy(Qt::StrongFocus); + editJustFinished=false; + setFocusPolicy(Qt::NoFocus); setMouseTracking(true); header = hdr; @@ -99,14 +105,16 @@ editTrack = 0; editor = 0; chan_edit = NULL; + ctrl_edit = NULL; mode = NORMAL; - //setBackgroundMode(Qt::NoBackground); // ORCAN - FIXME + //setBackgroundMode(Qt::NoBackground); // ORCAN - FIXME. DELETETHIS? //setAttribute(Qt::WA_OpaquePaintEvent); resizeFlag = false; connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); connect(MusEGlobal::muse, SIGNAL(configChanged()), SLOT(redraw())); + connect(MusEGlobal::heartBeatTimer, SIGNAL(timeout()), SLOT(maybeUpdateVolatileCustomColumns())); } //--------------------------------------------------------- @@ -116,7 +124,9 @@ void TList::songChanged(int flags) { if (flags & (SC_MUTE | SC_SOLO | SC_RECFLAG | SC_TRACK_INSERTED - | SC_TRACK_REMOVED | SC_TRACK_MODIFIED | SC_ROUTE | SC_CHANNELS | SC_MIDI_TRACK_PROP)) + | SC_TRACK_REMOVED | SC_TRACK_MODIFIED | SC_ROUTE | SC_CHANNELS | SC_MIDI_TRACK_PROP + | SC_PART_INSERTED | SC_PART_REMOVED | SC_PART_MODIFIED + | SC_EVENT_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED )) redraw(); if (flags & (SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED)) adjustScrollbar(); @@ -159,6 +169,38 @@ update(r); } + +//--------------------------------------------------------- +// event +//--------------------------------------------------------- + +bool TList::event(QEvent *event) +{ + if (event->type() == QEvent::ToolTip) { + QHelpEvent *helpEvent = static_cast(event); + MusECore::TrackList* l = MusEGlobal::song->tracks(); + int idx = 0; + int yy = -ypos; + for (MusECore::iTrack i = l->begin(); i != l->end(); ++idx, yy += (*i)->height(), ++i) { + MusECore::Track* track = *i; + MusECore::Track::TrackType type = track->type(); + int trackHeight = track->height(); + if (trackHeight==0) // not visible + continue; + if (helpEvent->pos().y() > yy && helpEvent->pos().y() < yy + trackHeight) { + if (type == MusECore::Track::AUDIO_SOFTSYNTH) { + MusECore::SynthI *s = (MusECore::SynthI*)track; + QToolTip::showText(helpEvent->globalPos(),track->name() + " : " + s->synth()->description()); + } + else + QToolTip::showText(helpEvent->globalPos(),track->name()); + } + } + return true; + } + return QWidget::event(event); +} + //--------------------------------------------------------- // paint //--------------------------------------------------------- @@ -301,7 +343,6 @@ pm = addtrack_auxsendIcon; break; case MusECore::Track::AUDIO_SOFTSYNTH: - //pm = waveIcon; pm = synthIcon; break; } @@ -390,7 +431,6 @@ if (cl->isVisible()) countVisible++; } - //int count = ((MusECore::AudioTrack*)track)->controller()->size(); //commented out by flo: gives a "unused variable" warning s.sprintf(" %d(%d) %s",countVisible, countAll, tr("visible").toAscii().data()); } @@ -411,6 +451,45 @@ } break; default: + if (section>=COL_CUSTOM_MIDICTRL_OFFSET) + { + if (track->isMidiTrack()) + { + int col_ctrl_no=Arranger::custom_columns[section-COL_CUSTOM_MIDICTRL_OFFSET].ctrl; + MusECore::MidiTrack* mt=dynamic_cast(track); + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; + MusECore::MidiController* mctl = mp->midiController(col_ctrl_no); + int val; + if (Arranger::custom_columns[section-COL_CUSTOM_MIDICTRL_OFFSET].affected_pos == + Arranger::custom_col_t::AFFECT_BEGIN) + val=mt->getControllerChangeAtTick(0,col_ctrl_no,MusECore::CTRL_VAL_UNKNOWN); + else + { + val=mp->hwCtrlState(mt->outChannel(), col_ctrl_no); + old_ctrl_hw_states[mt][section]=val; + } + + if (val!=MusECore::CTRL_VAL_UNKNOWN) + val-=mctl->bias(); + + if (col_ctrl_no!=MusECore::CTRL_PROGRAM) + { + p.drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, + (val!=MusECore::CTRL_VAL_UNKNOWN)?QString::number(val):tr("off")); + } + else + { + MusECore::MidiInstrument* instr = mp->instrument(); + QString name; + if (val!=MusECore::CTRL_VAL_UNKNOWN) + name = instr->getPatchName(mt->outChannel(), val, MusEGlobal::song->mtype(), mt->type()==MusECore::Track::DRUM); + else + name = tr(""); + + p.drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, name); + } + } + } break; } x += header->sectionSize(section); @@ -441,6 +520,46 @@ } } +void TList::maybeUpdateVolatileCustomColumns() +{ + MusECore::TrackList* l = MusEGlobal::song->tracks(); + int idx = 0; + int yy = -ypos; + for (MusECore::iTrack i = l->begin(); i != l->end(); ++idx, yy += (*i)->height(), ++i) + { + MusECore::Track* track = *i; + int trackHeight = track->height(); + if (trackHeight==0) // not visible + continue; + + + int x = 0; + for (int index = 0; index < header->count(); ++index) + { + int section = header->logicalIndex(index); + + if (section>=COL_CUSTOM_MIDICTRL_OFFSET && track->isMidiTrack() && + (Arranger::custom_columns[section-COL_CUSTOM_MIDICTRL_OFFSET].affected_pos == + Arranger::custom_col_t::AFFECT_CPOS) ) + { + int w = header->sectionSize(section); + QRect r = QRect(x+2, yy, w-4, trackHeight); + + int ctrl_no = Arranger::custom_columns[section-COL_CUSTOM_MIDICTRL_OFFSET].ctrl; + + MusECore::MidiTrack* mt=(MusECore::MidiTrack*)track; + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; + int new_val = mp->hwCtrlState(mt->outChannel(), ctrl_no); + + if (new_val != old_ctrl_hw_states[track][section]) + update(r); + } + + x += header->sectionSize(section); + } + } +} + //--------------------------------------------------------- // returnPressed //--------------------------------------------------------- @@ -471,18 +590,14 @@ } } - //MusECore::Track* track = editTrack->clone(false); - //editTrack->setName(editor->text()); - //MusEGlobal::audio->msgChangeTrack(track, editTrack); - // p4.0.46 Tim... MusEGlobal::song->startUndo(); MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyTrackName, editTrack, editTrack->name().toLatin1().constData(), editor->text().toLatin1().constData())); editTrack->setName(editor->text()); - //MusEGlobal::song->update(SC_TRACK_MODIFIED); - MusEGlobal::song->endUndo(-1); + //MusEGlobal::song->update(SC_TRACK_MODIFIED); //DELETETHIS + MusEGlobal::song->endUndo(-1); //uagh, why "-1", why no proper flags? } } @@ -490,7 +605,8 @@ } editMode = false; - if(editor->isVisible()) + editJustFinished = true; + if(editor && editor->isVisible()) { editor->blockSignals(true); editor->hide(); @@ -499,13 +615,6 @@ setFocus(); } -void TList::chanValueChanged(int /*val*/) -{ - //MusECore::Track* track = editTrack->clone(false); - //((MusECore::MidiTrack*)editTrack)->setOutChannel(val-1); - //MusEGlobal::audio->msgChangeTrack(track, editTrack); -} - void TList::chanValueFinished() { if(editTrack) @@ -514,7 +623,6 @@ { MusECore::MidiTrack* mt = dynamic_cast(editTrack); if (mt && mt->type() != MusECore::Track::DRUM) - //if (mt && !mt->isDrumTrack()) // For Flo later with new drum tracks. { int channel = chan_edit->value() - 1; if(channel >= MIDI_CHANNELS) @@ -528,7 +636,7 @@ editTrack, mt->outChannel(), channel)); - //mt->setOutChannel(channel); + //mt->setOutChannel(channel); DELETETHIS 10 (only the comments of course) MusEGlobal::audio->msgIdle(true); //MusEGlobal::audio->msgSetTrackOutChannel(mt, channel); mt->setOutChanAndUpdate(channel); @@ -574,6 +682,7 @@ } editMode = false; + editJustFinished=true; if(chan_edit->isVisible()) { chan_edit->blockSignals(true); @@ -583,6 +692,63 @@ setFocus(); } +void TList::ctrlValueFinished() +{ + if(editTrack && editTrack->isMidiTrack()) + { + MusECore::MidiTrack* mt = dynamic_cast(editTrack); + if (mt && mt->type() != MusECore::Track::DRUM) + { + int val = ctrl_edit->value(); + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; + MusECore::MidiController* mctl = mp->midiController(ctrl_num); + + if (val==ctrl_edit->minimum()) + val=MusECore::CTRL_VAL_UNKNOWN; + else + val+=mctl->bias(); + + if (val!=MusECore::CTRL_VAL_UNKNOWN) + { + record_controller_change_and_maybe_send(ctrl_at_tick, ctrl_num, val, mt); + } + else + { + MusECore::Undo operations; + for (MusECore::iPart p = mt->parts()->begin(); p!=mt->parts()->end(); p++) + { + if (p->second->tick()==0) + { + for (MusECore::iEvent ev=p->second->events()->begin(); ev!=p->second->events()->end(); ev++) + { + if (ev->second.tick()!=0) break; + else if (ev->second.type()==MusECore::Controller && ev->second.dataA()==ctrl_num) + { + using MusECore::UndoOp; + operations.push_back(UndoOp(UndoOp::DeleteEvent, ev->second, p->second, false, false)); + break; + } + } + } + } + MusEGlobal::song->applyOperationGroup(operations); + } + } + + editTrack = 0; + } + + editMode = false; + editJustFinished=true; + if(ctrl_edit->isVisible()) + { + ctrl_edit->blockSignals(true); + ctrl_edit->hide(); + ctrl_edit->blockSignals(false); + } + setFocus(); +} + //--------------------------------------------------------- // adjustScrollbar //--------------------------------------------------------- @@ -647,15 +813,11 @@ editTrack = t; if (editor == 0) { editor = new QLineEdit(this); - /*connect(editor, SIGNAL(returnPressed()), - SLOT(returnPressed()));*/ - editor->setFrame(true); + editor->setFrame(false); connect(editor, SIGNAL(editingFinished()), SLOT(returnPressed())); } - //editor->blockSignals(true); editor->setText(editTrack->name()); - //editor->blockSignals(false); - editor->end(false); + editor->selectAll(); editor->setGeometry(colx, coly, colw, colh); editMode = true; editor->show(); @@ -669,16 +831,21 @@ return; } - //if(t->type() != MusECore::Track::DRUM && t->type() != MusECore::Track::AUDIO_SOFTSYNTH) + // A disabled spinbox up or down button will pass the event to the parent! Causes pseudo 'wrapping'. Eat it up. + if(chan_edit && chan_edit->hasFocus()) + { + ev->accept(); + return; + } + else { editTrack=t; if (chan_edit==0) { chan_edit=new QSpinBox(this); + chan_edit->setFrame(false); chan_edit->setMinimum(1); - //connect(chan_edit, SIGNAL(valueChanged(int)), SLOT(chanValueChanged(int))); connect(chan_edit, SIGNAL(editingFinished()), SLOT(chanValueFinished())); } - //chan_edit->blockSignals(true); if (t->isMidiTrack()) { chan_edit->setMaximum(MIDI_CHANNELS); @@ -689,16 +856,57 @@ chan_edit->setMaximum(MAX_CHANNELS); chan_edit->setValue(((MusECore::AudioTrack*)editTrack)->channels()); } - //chan_edit->blockSignals(false); int w=colw; if (w < chan_edit->sizeHint().width()) w=chan_edit->sizeHint().width(); chan_edit->setGeometry(colx, coly, w, colh); + chan_edit->selectAll(); editMode = true; chan_edit->show(); chan_edit->setFocus(); ev->accept(); } } + else if (section >= COL_CUSTOM_MIDICTRL_OFFSET) + { + if (t->isMidiTrack()) + { + editTrack=t; + + ctrl_num=Arranger::custom_columns[section-COL_CUSTOM_MIDICTRL_OFFSET].ctrl; + + MusECore::MidiTrack* mt=(MusECore::MidiTrack*)t; + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; + MusECore::MidiController* mctl = mp->midiController(ctrl_num); + + if (ctrl_num!=MusECore::CTRL_PROGRAM) + { + if (Arranger::custom_columns[section-COL_CUSTOM_MIDICTRL_OFFSET].affected_pos == + Arranger::custom_col_t::AFFECT_BEGIN) + ctrl_at_tick=0; + else + ctrl_at_tick=MusEGlobal::song->cpos(); + + if (ctrl_edit==0) + { + ctrl_edit=new QSpinBox(this); + ctrl_edit->setSpecialValueText(tr("off")); + connect(ctrl_edit, SIGNAL(editingFinished()), SLOT(ctrlValueFinished())); + } + + ctrl_edit->setMinimum(mctl->minVal()-1); // -1 because of the specialValueText + ctrl_edit->setMaximum(mctl->maxVal()); + ctrl_edit->setValue(((MusECore::MidiTrack*)editTrack)->getControllerChangeAtTick(0,ctrl_num)-mctl->bias()); + int w=colw; + if (w < ctrl_edit->sizeHint().width()) w=ctrl_edit->sizeHint().width(); + ctrl_edit->setGeometry(colx, coly, w, colh); + editMode = true; + ctrl_edit->show(); + ctrl_edit->setFocus(); + } + // else: the CTRL_PROGRAM popup is displayed with a single click + ev->accept(); + } + } else mousePressEvent(ev); } @@ -716,13 +924,11 @@ { MusECore::MidiTrack* track = (MusECore::MidiTrack*)t; - //QPopupMenu* p = MusECore::midiPortsPopup(0); MusECore::MidiDevice* md = 0; int potential_new_port_no=-1; int port = -1; if(t->type() == MusECore::Track::AUDIO_SOFTSYNTH) { - //MusECore::MidiDevice* md = dynamic_cast((MusECore::SynthI*)t); md = dynamic_cast(t); if(md) port = md->midiPort(); @@ -730,7 +936,7 @@ else port = track->outPort(); - QMenu* p = MusECore::midiPortsPopup(this, port); // 0, port); + QMenu* p = MusECore::midiPortsPopup(this, port); if (t->isMidiTrack()) { @@ -882,8 +1088,10 @@ MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[potential_new_port_no], sdev); n=potential_new_port_no; + + MusEGlobal::song->update(); } - // Changed by T356. + // Changed by T356. DELETETHIS 5 //track->setOutPort(n); //MusEGlobal::audio->msgSetTrackOutPort(track, n); @@ -896,27 +1104,23 @@ if (!change) { // Delete all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(false); MusEGlobal::song->changeAllPortDrumCtrlEvents(false); track->setOutPort(n); for (int i=0; ioutPort(); // Add all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(true); MusEGlobal::song->changeAllPortDrumCtrlEvents(true); } else { - //MusEGlobal::audio->msgSetTrackOutPort(track, n); track->setOutPortAndUpdate(n); } MusEGlobal::audio->msgIdle(false); MusEGlobal::audio->msgUpdateSoloStates(); // (p4.0.14) p4.0.17 MusEGlobal::song->update(); } - else - if (t->type() == MusECore::Track::AUDIO_SOFTSYNTH) + else if (t->type() == MusECore::Track::AUDIO_SOFTSYNTH) { if(md != 0) { @@ -927,17 +1131,14 @@ MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[n], (MusEGlobal::midiPorts[n].device() == md) ? 0 : md); MusEGlobal::muse->changeConfig(true); // save configuration file - //MusEGlobal::audio->msgIdle(false); MusEGlobal::song->update(); } } else { MusEGlobal::audio->msgIdle(true); - //MusEGlobal::audio->msgSetTrackOutPort(track, n); track->setOutPortAndUpdate(n); MusEGlobal::audio->msgIdle(false); - //MusEGlobal::song->update(); MusEGlobal::audio->msgUpdateSoloStates(); // (p4.0.14) p4.0.17 MusEGlobal::song->update(SC_MIDI_TRACK_PROP); // } @@ -964,22 +1165,13 @@ MusECore::SynthI* synth = (MusECore::SynthI*)t; QMenu* p = new QMenu; - //QAction* act = p->addAction(tr("Show Gui")); QAction* gact = p->addAction(tr("show gui")); - //act->setCheckable(true); gact->setCheckable(true); - //printf("synth hasgui %d, gui visible %d\n",synth->hasGui(), synth->guiVisible()); - //act->setEnabled(synth->hasGui()); - //act->setChecked(synth->guiVisible()); gact->setEnabled(synth->hasGui()); gact->setChecked(synth->guiVisible()); QAction* nact = p->addAction(tr("show native gui")); - //act->setCheckable(true); nact->setCheckable(true); - //printf("synth hasgui %d, gui visible %d\n",synth->hasGui(), synth->guiVisible()); - //act->setEnabled(synth->hasGui()); - //act->setChecked(synth->guiVisible()); nact->setEnabled(synth->hasNativeGui()); nact->setChecked(synth->nativeGuiVisible()); @@ -988,8 +1180,6 @@ #ifdef DSSI_SUPPORT if(dynamic_cast(synth->sif())) { - //act->setChecked(false); - //act->setEnabled(false); nact->setChecked(false); nact->setEnabled(false); } @@ -997,15 +1187,12 @@ #endif QAction* ract = p->exec(mapToGlobal(QPoint(x, y)), 0); - //if (ract == act) { if (ract == gact) { bool show = !synth->guiVisible(); - //MusEGlobal::audio->msgShowInstrumentGui(synth, show); synth->showGui(show); } else if (ract == nact) { bool show = !synth->nativeGuiVisible(); - //MusEGlobal::audio->msgShowInstrumentNativeGui(synth, show); synth->showNativeGui(show); } delete p; @@ -1019,19 +1206,13 @@ MusECore::MidiPort* port = &MusEGlobal::midiPorts[oPort]; QMenu* p = new QMenu; - //QAction* act = p->addAction(tr("Show Gui")); QAction* gact = p->addAction(tr("show gui")); - //act->setCheckable(true); gact->setCheckable(true); - //printf("synth hasgui %d, gui visible %d\n",port->hasGui(), port->guiVisible()); - //act->setEnabled(port->hasGui()); - //act->setChecked(port->guiVisible()); gact->setEnabled(port->hasGui()); gact->setChecked(port->guiVisible()); QAction* nact = p->addAction(tr("show native gui")); nact->setCheckable(true); - //printf("synth hasgui %d, gui visible %d\n",synth->hasGui(), synth->guiVisible()); nact->setEnabled(port->hasNativeGui()); nact->setChecked(port->nativeGuiVisible()); @@ -1041,8 +1222,6 @@ MusECore::MidiDevice* dev = port->device(); if(dev && dev->isSynti() && (dynamic_cast(((MusECore::SynthI*)dev)->sif()))) { - //act->setChecked(false); - //act->setEnabled(false); nact->setChecked(false); nact->setEnabled(false); } @@ -1050,15 +1229,12 @@ #endif QAction* ract = p->exec(mapToGlobal(QPoint(x, y)), 0); - //if (ract == act) { if (ract == gact) { bool show = !port->guiVisible(); - //MusEGlobal::audio->msgShowInstrumentGui(port->instrument(), show); port->instrument()->showGui(show); } else if (ract == nact) { bool show = !port->nativeGuiVisible(); - //MusEGlobal::audio->msgShowInstrumentNativeGui(port->instrument(), show); port->instrument()->showNativeGui(show); } delete p; @@ -1080,16 +1256,14 @@ void TList::keyPressEvent(QKeyEvent* e) { + if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) + { + e->accept(); + return; + } + if (editMode) { - // First time we get a keypress event when lineedit is open is on the return key: - // -- Not true for Qt4. Modifier keys also send key events - Orcan - //if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) // Removed p4.0.46 Tim. - // { - // returnPressed(); - // return; - // } - //else if ( e->key() == Qt::Key_Escape ) { if(editor && editor->isVisible()) @@ -1104,32 +1278,41 @@ chan_edit->hide(); chan_edit->blockSignals(false); } + if(ctrl_edit && ctrl_edit->isVisible()) + { + ctrl_edit->blockSignals(true); + ctrl_edit->hide(); + ctrl_edit->blockSignals(false); + } editTrack = 0; editMode = false; setFocus(); return; } + return; } - emit keyPressExt(e); //redirect keypress events to main app - - // p4.0.10 Removed by Tim. keyPressExt are sent to part canvas, where they are - // ignored *only* if necessary. - //e->ignore(); - + else if (!editJustFinished) + emit keyPressExt(e); //redirect keypress events to main app. don't call this when confirming an editor + else + editJustFinished=false; + + // Works OK (if focusing allowed). But instead we won't allow focus. Part canvas has Ctrl+up/down which moves selected track only. /* int key = e->key(); switch (key) { - case Key_Up: + case Qt::Key_Up: moveSelection(-1); - break; - case Key_Down: + return; + case Qt::Key_Down: moveSelection(1); - break; + return; default: - break; - } - */ + } */ + + // keyPressExt are sent to part canvas, where they are ignored *only* if necessary. + //e->ignore(); + } //--------------------------------------------------------- @@ -1151,7 +1334,6 @@ for (MusECore::iTrack t = tracks->begin(); t != tracks->end(); ++t) { MusECore::iTrack s = t; if ((*t)->selected()) { - selTrack = *t; if (n > 0) { while (n--) { ++t; @@ -1162,7 +1344,10 @@ // skip over hidden tracks if (!(*t)->isVisible()) { n++; + continue; } + selTrack = *t; + break; } } else { @@ -1173,40 +1358,42 @@ // skip over hidden tracks if (!(*t)->isVisible()) { n--; + continue; } + selTrack = *t; + break; } } - (*s)->setSelected(false); - (*t)->setSelected(true); + if(selTrack) + { + (*s)->setSelected(false); + selTrack->setSelected(true); - // rec enable track if expected - MusECore::TrackList recd = getRecEnabledTracks(); - if (recd.size() == 1 && MusEGlobal::config.moveArmedCheckBox) { // one rec enabled track, move rec enabled with selection - MusEGlobal::song->setRecordFlag((MusECore::Track*)recd.front(),false); - MusEGlobal::song->setRecordFlag((*t),true); - } + // rec enable track if expected + MusECore::TrackList recd = getRecEnabledTracks(); + if (recd.size() == 1 && MusEGlobal::config.moveArmedCheckBox) { // one rec enabled track, move rec enabled with selection + MusEGlobal::song->setRecordFlag((MusECore::Track*)recd.front(),false); + MusEGlobal::song->setRecordFlag((selTrack),true); + } - if (editTrack && editTrack != *t) - returnPressed(); - - redraw(); - break; + if (editTrack && editTrack != selTrack) + returnPressed(); + redraw(); } + break; + } } - ///emit selectionChanged(); - emit selectionChanged(selTrack); + if(selTrack) + emit selectionChanged(selTrack); } MusECore::TrackList TList::getRecEnabledTracks() { - //printf("getRecEnabledTracks\n"); MusECore::TrackList recEnabled; MusECore::TrackList* tracks = MusEGlobal::song->tracks(); for (MusECore::iTrack t = tracks->begin(); t != tracks->end(); ++t) { - if ((*t)->recordFlag()) { - //printf("rec enabled track\n"); + if ((*t)->recordFlag()) recEnabled.push_back(*t); - } } return recEnabled; } @@ -1217,21 +1404,21 @@ void TList::changeAutomation(QAction* act) { - //printf("changeAutomation %d\n", act->data().toInt()); - - //if (editAutomation->type() == MusECore::Track::MIDI) { // commented out by flo93 - if ( (editAutomation->type() == MusECore::Track::MIDI) || (editAutomation->type() == MusECore::Track::DRUM) ) { - printf("this is wrong, we can't edit automation for midi tracks from arranger yet!\n"); + if(!editAutomation || editAutomation->isMidiTrack()) + return; + if(act->data().toInt() == -1) return; - } int colindex = act->data().toInt() & 0xff; - int id = (act->data().toInt() & 0x00ffffff) / 256; + int id = (act->data().toInt() & 0x00ffffff) >> 8; + // Is it the midi control action or clear action item? + if (colindex == 254 || colindex == 255) + return; + if (colindex < 100) return; // this was meant for changeAutomationColor // one of these days I'll rewrite this so it's understandable // this is just to get it up and running... - MusECore::CtrlListList* cll = ((MusECore::AudioTrack*)editAutomation)->controller(); for(MusECore::CtrlListList::iterator icll =cll->begin();icll!=cll->end();++icll) { MusECore::CtrlList *cl = icll->second; @@ -1246,20 +1433,86 @@ //--------------------------------------------------------- void TList::changeAutomationColor(QAction* act) { - if (editAutomation->type() == MusECore::Track::MIDI) { - printf("this is wrong, we can't edit automation for midi tracks from arranger yet!\n"); + if(!editAutomation || editAutomation->isMidiTrack()) + return; + if(act->data().toInt() == -1) return; - } int colindex = act->data().toInt() & 0xff; - int id = (act->data().toInt() & 0x00ffffff) / 256; + int id = (act->data().toInt() & 0x00ffffff) >> 8; + // Is it the clear midi control action item? + if(colindex == 254) + { + MusECore::AudioTrack* track = static_cast(editAutomation); + MusECore::MidiAudioCtrlMap* macp = track->controller()->midiControls(); + MusECore::AudioMidiCtrlStructMap amcs; + macp->find_audio_ctrl_structs(id, &amcs); + if(!amcs.empty()) + MusEGlobal::audio->msgIdle(true); // Gain access to structures, and sync with audio + for(MusECore::iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + macp->erase(*iamcs); + if(!amcs.empty()) + MusEGlobal::audio->msgIdle(false); + + // Hm, need to remove the 'clear' item, and the status lines below it. Try this: + QActionGroup* midi_actgrp = act->actionGroup(); + if(midi_actgrp) + { + QList act_list = midi_actgrp->actions(); + int sz = act_list.size(); + for(int i = 0; i < sz; ++i) + { + QAction* list_act = act_list.at(i); + ///midi_actgrp->removeAction(list_act); + // list_act has no parent now. + ///delete list_act; + list_act->setVisible(false); // HACK Cannot delete any actions! Causes crash with our PopupMenu due to recent fixes. + } + } + return; + } + + // Is it the midi control action item? + if(colindex == 255) + { + MusECore::AudioTrack* track = static_cast(editAutomation); + MusECore::MidiAudioCtrlMap* macm = track->controller()->midiControls(); + MusECore::AudioMidiCtrlStructMap amcs; + macm->find_audio_ctrl_structs(id, &amcs); + + int port = -1, chan = 0, ctrl = 0; + for(MusECore::iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + { + macm->hash_values((*iamcs)->first, &port, &chan, &ctrl); + break; // Only a single item for now, thanks! + } + + MidiAudioControl* pup = new MidiAudioControl(port, chan, ctrl); + + if(pup->exec() == QDialog::Accepted) + { + MusEGlobal::audio->msgIdle(true); // Gain access to structures, and sync with audio + // Erase all for now. + for(MusECore::iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + macm->erase(*iamcs); + + port = pup->port(); chan = pup->chan(); ctrl = pup->ctrl(); + if(port >= 0 && chan >=0 && ctrl >= 0) + // Add will replace if found. + macm->add_ctrl_struct(port, chan, ctrl, MusECore::MidiAudioCtrlStruct(id)); + + MusEGlobal::audio->msgIdle(false); + } + + delete pup; + return; + } + if (colindex > 100) return; // this was meant for changeAutomation // one of these days I'll rewrite this so it's understandable // this is just to get it up and running... - //printf("change automation color %d %d\n", id, colindex); - MusECore::CtrlListList* cll = ((MusECore::AudioTrack*)editAutomation)->controller(); for(MusECore::CtrlListList::iterator icll =cll->begin();icll!=cll->end();++icll) { MusECore::CtrlList *cl = icll->second; @@ -1272,12 +1525,12 @@ //--------------------------------------------------------- // colorMenu //--------------------------------------------------------- -//QMenu* TList::colorMenu(QColor c, int id) PopupMenu* TList::colorMenu(QColor c, int id, QWidget* parent) { - //QMenu * m = new QMenu(this); - //PopupMenu * m = new PopupMenu(this); //, true); TODO - PopupMenu * m = new PopupMenu(parent); //, true); // + PopupMenu * m = new PopupMenu(parent, true); + + QActionGroup* col_actgrp = new QActionGroup(m); + col_actgrp->setExclusive(true); for (int i = 0; i< 6; i++) { QPixmap pix(10,10); QPainter p(&pix); @@ -1285,14 +1538,52 @@ p.setPen(Qt::black); p.drawRect(0,0,10,10); QIcon icon(pix); - QAction *act = m->addAction(icon,""); + QAction *act = col_actgrp->addAction(icon,""); act->setCheckable(true); if (c == collist[i]) act->setChecked(true); - int data = id * 256; // shift 8 bits - data += i; // color in the bottom 8 bits - act->setData(data); + act->setData((id<<8) + i); // Shift 8 bits. Color in the bottom 8 bits. } + m->addActions(col_actgrp->actions()); + + //m->addSeparator(); + m->addAction(new MenuTitleItem(tr("Midi control"), m)); + + if(editAutomation && !editAutomation->isMidiTrack()) + { + QAction *act = m->addAction(tr("Assign")); + act->setCheckable(false); + act->setData((id<<8) + 255); // Shift 8 bits. Make midi menu the last item at 255. + + MusECore::AudioTrack* track = static_cast(editAutomation); + MusECore::MidiAudioCtrlMap* macm = track->controller()->midiControls(); + MusECore::AudioMidiCtrlStructMap amcs; + macm->find_audio_ctrl_structs(id, &amcs); + + // Group only the clear and status items so they can both be easily removed when clear is clicked. + if(!amcs.empty()) + { + QActionGroup* midi_actgrp = new QActionGroup(m); + QAction *cact = midi_actgrp->addAction(tr("Clear")); + cact->setData((id<<8) + 254); // Shift 8 bits. Make clear the second-last item at 254 + for(MusECore::iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + { + int port, chan, mctrl; + macm->hash_values((*iamcs)->first, &port, &chan, &mctrl); + //QString s = QString("Port:%1 Chan:%2 Ctl:%3-%4").arg(port + 1) + QString s = QString("Port:%1 Chan:%2 Ctl:%3").arg(port + 1) + .arg(chan + 1) + //.arg((mctrl >> 8) & 0xff) + //.arg(mctrl & 0xff); + .arg(MusECore::midiCtrlName(mctrl, true)); + QAction *mact = midi_actgrp->addAction(s); + mact->setEnabled(false); + mact->setData(-1); // Not used + } + m->addActions(midi_actgrp->actions()); + } + } + connect(m, SIGNAL(triggered(QAction*)), SLOT(changeAutomationColor(QAction*))); return m; @@ -1341,7 +1632,7 @@ //delete synp; delete p; } - /*else if (button == Qt::LeftButton) { + /*else if (button == Qt::LeftButton) { DELETETHIS if (!ctrl) { MusEGlobal::song->deselectTracks(); @@ -1365,7 +1656,7 @@ ty += h; if (y >= (ty-2)) { - if ( (*it) == tracks->back() && y > ty ) { + if ( (*it) == tracks->back() && y > ty ) { // DELETETHIS, only retain if(foo) break;? //printf("tracks->back() && y > ty\n"); } else if ( y > (ty+2) ) { @@ -1378,7 +1669,7 @@ } - //&& y < (ty)) + //&& y < (ty)) DELETETHIS // break; } } @@ -1427,19 +1718,55 @@ p->setTitle(tr("Viewable automation")); MusECore::CtrlListList* cll = ((MusECore::AudioTrack*)t)->controller(); QAction* act = 0; + int last_rackpos = -1; + bool internal_found = false; + bool synth_found = false; for(MusECore::CtrlListList::iterator icll =cll->begin();icll!=cll->end();++icll) { MusECore::CtrlList *cl = icll->second; - //printf("id = %d", cl->id()); if (cl->dontShow()) continue; + + int ctrl = cl->id(); + + if(ctrl < AC_PLUGIN_CTL_BASE) + { + if(!internal_found) + p->addAction(new MusEGui::MenuTitleItem(tr("Internal"), p)); + internal_found = true; + } + else + { + if(ctrl < (int)MusECore::genACnum(MAX_PLUGINS, 0)) // The beginning of the special dssi synth controller block. + { + int rackpos = (ctrl - AC_PLUGIN_CTL_BASE) >> AC_PLUGIN_CTL_BASE_POW; + if(rackpos < PipelineDepth) + { + if(rackpos != last_rackpos) + { + QString s = ((MusECore::AudioTrack*)t)->efxPipe()->name(rackpos); + p->addAction(new MusEGui::MenuTitleItem(s, p)); + } + last_rackpos = rackpos; + } + } + else + { + if(t->type() == MusECore::Track::AUDIO_SOFTSYNTH) + { + if(!synth_found) + p->addAction(new MusEGui::MenuTitleItem(tr("Synth"), p)); + synth_found = true; + } + } + } + act = p->addAction(cl->name()); act->setCheckable(true); act->setChecked(cl->isVisible()); - int data = cl->id() * 256; // shift 8 bits + + int data = ctrl<<8; // shift 8 bits data += 150; // illegal color > 100 act->setData(data); - //QMenu *m = colorMenu(cl->color(), cl->id()); - //PopupMenu *m = colorMenu(cl->color(), cl->id()); PopupMenu *m = colorMenu(cl->color(), cl->id(), p); act->setMenu(m); } @@ -1500,7 +1827,7 @@ classesPopupMenu(t, x, t->y() - ypos); break; case COL_OPORT: - // Changed by Tim. p3.3.9 + // Changed by Tim. p3.3.9 DELETETHIS 15 // Reverted. if (button == Qt::LeftButton) portsPopupMenu(t, x, t->y() - ypos); @@ -1554,13 +1881,11 @@ t->setSelected(!t->selected()); if (editTrack && editTrack != t) returnPressed(); - ///emit selectionChanged(); emit selectionChanged(t->selected() ? t : 0); } else if (button == Qt::RightButton) { mode = NORMAL; QMenu* p = new QMenu; - //p->clear(); // Leave room for normal track IDs - base these at AUDIO_SOFTSYNTH. p->addAction(QIcon(*automation_clear_dataIcon), tr("Delete Track"))->setData(MusECore::Track::AUDIO_SOFTSYNTH + 1); p->addAction(QIcon(*track_commentIcon), tr("Track Comment"))->setData(MusECore::Track::AUDIO_SOFTSYNTH + 2); @@ -1586,7 +1911,6 @@ { TrackComment* tc = new TrackComment(t, 0); tc->show(); - //QToolTip::add( this, "FOOOOOOOOOOOOO" ); } break; @@ -1638,16 +1962,14 @@ channel = MIDI_CHANNELS - 1; if(channel < 0) channel = 0; - //if (channel != ((MusECore::MidiTrack*)t)->outChannel()) if (channel != mt->outChannel()) { // Changed by T356. - //mt->setOutChannel(channel); MusEGlobal::audio->msgIdle(true); - //MusEGlobal::audio->msgSetTrackOutChannel(mt, channel); mt->setOutChanAndUpdate(channel); MusEGlobal::audio->msgIdle(false); + // DELETETHIS 15? /* --- I really don't like this, you can mess up the whole map "as easy as dell" if (mt->type() == MusECore::MidiTrack::DRUM) {//Change channel on all drum instruments for (int i=0; i=COL_CUSTOM_MIDICTRL_OFFSET && t->isMidiTrack()) + { + if (Arranger::custom_columns[col-COL_CUSTOM_MIDICTRL_OFFSET].affected_pos == + Arranger::custom_col_t::AFFECT_BEGIN) + ctrl_at_tick=0; + else + ctrl_at_tick=MusEGlobal::song->cpos(); + + int delta = 0; + if (button == Qt::RightButton) + delta = 1; + else if (button == Qt::MidButton) + delta = -1; + + if (delta!=0) + { + MusECore::MidiTrack* mt = dynamic_cast(t); + if (mt == 0) + break; + + int ctrl_num = Arranger::custom_columns[col-COL_CUSTOM_MIDICTRL_OFFSET].ctrl; + + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; + MusECore::MidiController* mctl = mp->midiController(ctrl_num); + + int minval=mctl->minVal()+mctl->bias(); + int maxval=mctl->maxVal()+mctl->bias(); + + int val = mt->getControllerChangeAtTick(0,ctrl_num); + int oldval=val; + + if (ctrl_num!=MusECore::CTRL_PROGRAM) + { + val += delta; + if(val > maxval) + val = maxval; + if(val < minval-1) // "-1" because of "off" + val = minval-1; + } + else + { + MusECore::MidiInstrument* instr = mp->instrument(); + if (delta>0) val=instr->getNextPatch(mt->outChannel(), val, MusEGlobal::song->mtype(), false); + else if (delta<0) val=instr->getPrevPatch(mt->outChannel(), val, MusEGlobal::song->mtype(), false); + } + + if (val != oldval) + { + if (val!=minval-1) + { + record_controller_change_and_maybe_send(ctrl_at_tick, ctrl_num, val, mt); + } + else + { + MusECore::Undo operations; + for (MusECore::iPart p = mt->parts()->begin(); p!=mt->parts()->end(); p++) + { + if (p->second->tick()==0) + { + for (MusECore::iEvent ev=p->second->events()->begin(); ev!=p->second->events()->end(); ev++) + { + if (ev->second.tick()!=0) break; + else if (ev->second.type()==MusECore::Controller && ev->second.dataA()==ctrl_num) + { + using MusECore::UndoOp; + operations.push_back(UndoOp(UndoOp::DeleteEvent, ev->second, p->second, false, false)); + break; + } + } + } + } + MusEGlobal::song->applyOperationGroup(operations); + } + } + } + else // if (delta==0) + { + ctrl_num=Arranger::custom_columns[col-COL_CUSTOM_MIDICTRL_OFFSET].ctrl; + + if (ctrl_num==MusECore::CTRL_PROGRAM) + { + editTrack=t; + + MusECore::MidiTrack* mt=(MusECore::MidiTrack*)t; + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; + MusECore::MidiInstrument* instr = mp->instrument(); + + PopupMenu* pup = new PopupMenu(true); + instr->populatePatchPopup(pup, mt->outChannel(), MusEGlobal::song->mtype(), mt->type()==MusECore::Track::DRUM); + + if(pup->actions().count() == 0) + { + delete pup; + return; + } + + connect(pup, SIGNAL(triggered(QAction*)), SLOT(instrPopupActivated(QAction*))); + + QAction *act = pup->exec(ev->globalPos()); + if(act) + { + int val = act->data().toInt(); + if(val != -1) + record_controller_change_and_maybe_send(ctrl_at_tick, MusECore::CTRL_PROGRAM, val, mt); + } + + delete pup; + } + } + } + } //end of "switch" redraw(); - } +} //--------------------------------------------------------- // selectTrack @@ -1744,7 +2176,7 @@ int h = (*it)->height(); ty += h; if (y >= (ty-2)) { - if ( (*it) == tracks->back() && y >= ty ) { + if ( (*it) == tracks->back() && y >= ty ) { // DELETETHIS and cleanup // outside last track don't change to splitVCursor } else if ( y > (ty+2) ) { @@ -1832,7 +2264,7 @@ if (editTrack && editor && editor->isVisible()) editor->setFocus(); //else - //if (editTrack && chan_edit && chan_edit->isVisible()) // p4.0.46 + //if (editTrack && chan_edit && chan_edit->isVisible()) // p4.0.46 DELETETHIS or add the same for ctrl_edit // chan_edit->setFocus(); adjustScrollbar(); } @@ -1894,15 +2326,11 @@ else if (port < 0) port = 0; if (port != ((MusECore::MidiTrack*)t)->outPort()) { - // Changed by T356. - //mt->setOutPort(port); MusEGlobal::audio->msgIdle(true); - //MusEGlobal::audio->msgSetTrackOutPort(mt, port); mt->setOutPortAndUpdate(port); MusEGlobal::audio->msgIdle(false); MusEGlobal::audio->msgUpdateSoloStates(); // p4.0.14 - //MusEGlobal::song->update(SC_ROUTE); MusEGlobal::song->update(SC_MIDI_TRACK_PROP); // p4.0.17 } } @@ -1921,10 +2349,7 @@ else if (channel < 0) channel = 0; if (channel != ((MusECore::MidiTrack*)t)->outChannel()) { - // Changed by T356. - //mt->setOutChannel(channel); MusEGlobal::audio->msgIdle(true); - //MusEGlobal::audio->msgSetTrackOutChannel(mt, channel); mt->setOutChanAndUpdate(channel); MusEGlobal::audio->msgIdle(false); @@ -1947,49 +2372,87 @@ } break; default: - break; - } - } + if (col>=COL_CUSTOM_MIDICTRL_OFFSET) + { + mode = START_DRAG; -//--------------------------------------------------------- -// writeStatus -//--------------------------------------------------------- + if (t->isMidiTrack()) + { + MusECore::MidiTrack* mt = dynamic_cast(t); + if (mt == 0) + break; + + int ctrl_num = Arranger::custom_columns[col-COL_CUSTOM_MIDICTRL_OFFSET].ctrl; + + MusECore::MidiPort* mp = &MusEGlobal::midiPorts[mt->outPort()]; + MusECore::MidiController* mctl = mp->midiController(ctrl_num); + + int minval=mctl->minVal()+mctl->bias(); + int maxval=mctl->maxVal()+mctl->bias(); -void TList::writeStatus(int level, MusECore::Xml& xml, const char* name) const - { - xml.tag(level++, name); - header->writeStatus(level, xml); - xml.etag(level, name); - } + int val = mt->getControllerChangeAtTick(0,ctrl_num); + int oldval=val; -//--------------------------------------------------------- -// readStatus -//--------------------------------------------------------- + if (ctrl_num!=MusECore::CTRL_PROGRAM) + { + val += delta; + if(val > maxval) + val = maxval; + if(val < minval-1) // "-1" because of "off" + val = minval-1; + } + else + { + MusECore::MidiInstrument* instr = mp->instrument(); + if (delta>0) val=instr->getNextPatch(mt->outChannel(), val, MusEGlobal::song->mtype(), false); + else if (delta<0) val=instr->getPrevPatch(mt->outChannel(), val, MusEGlobal::song->mtype(), false); + } -void TList::readStatus(MusECore::Xml& xml, const char* name) - { - for (;;) { - MusECore::Xml::Token token(xml.parse()); - const QString& tag(xml.s1()); - switch (token) { - case MusECore::Xml::Error: - case MusECore::Xml::End: - return; - case MusECore::Xml::TagStart: - if (tag == header->objectName()) - header->readStatus(xml); + if (val != oldval) + { + if (val!=minval-1) + { + int at_tick; + if (Arranger::custom_columns[col-COL_CUSTOM_MIDICTRL_OFFSET].affected_pos == + Arranger::custom_col_t::AFFECT_BEGIN) + at_tick=0; + else + at_tick=MusEGlobal::song->cpos(); + + record_controller_change_and_maybe_send(at_tick, ctrl_num, val, mt); + } else - xml.unknown("Tlist"); - break; - case MusECore::Xml::TagEnd: - if (tag == name) - return; - default: - break; + { + MusECore::Undo operations; + for (MusECore::iPart p = mt->parts()->begin(); p!=mt->parts()->end(); p++) + { + if (p->second->tick()==0) + { + for (MusECore::iEvent ev=p->second->events()->begin(); ev!=p->second->events()->end(); ev++) + { + if (ev->second.tick()!=0) break; + else if (ev->second.type()==MusECore::Controller && ev->second.dataA()==ctrl_num) + { + using MusECore::UndoOp; + operations.push_back(UndoOp(UndoOp::DeleteEvent, ev->second, p->second, false, false)); + break; + } + } + } + } + MusEGlobal::song->applyOperationGroup(operations); + } + } + } } + else + mode = START_DRAG; + + break; } } + //--------------------------------------------------------- // setYPos //--------------------------------------------------------- @@ -2003,15 +2466,6 @@ } //--------------------------------------------------------- -// resizeEvent -//--------------------------------------------------------- - -//void TList::resizeEvent(QResizeEvent* /*ev*/) -// { -// -// } - -//--------------------------------------------------------- // classesPopupMenu //--------------------------------------------------------- @@ -2043,7 +2497,7 @@ int pitch = ev.pitch(); // Changed by T356. // Tested: Notes were being mixed up switching back and forth between midi and drum. - //pitch = MusEGlobal::drumMap[pitch].anote; + //pitch = MusEGlobal::drumMap[pitch].anote; DELETETHIS pitch = MusEGlobal::drumMap[pitch].enote; ev.setPitch(pitch); @@ -2075,7 +2529,6 @@ MusEGlobal::audio->msgIdle(true); // Delete all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(false); MusEGlobal::song->changeAllPortDrumCtrlEvents(false); if (!change) { @@ -2086,7 +2539,6 @@ } } - //MusEGlobal::audio->msgIdle(true); MusECore::PartList* pl = t->parts(); MusECore::MidiTrack* m = (MusECore::MidiTrack*) t; for (MusECore::iPart ip = pl->begin(); ip != pl->end(); ++ip) { @@ -2118,11 +2570,28 @@ t->setType(MusECore::Track::DRUM); // Add all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(true); MusEGlobal::song->changeAllPortDrumCtrlEvents(true); MusEGlobal::audio->msgIdle(false); MusEGlobal::song->update(SC_EVENT_MODIFIED); } } +void TList::instrPopupActivated(QAction* act) +{ + MusECore::MidiTrack* mt = dynamic_cast(editTrack); + if(act && mt) + { + int val = act->data().toInt(); + if(val != -1) + record_controller_change_and_maybe_send(ctrl_at_tick, MusECore::CTRL_PROGRAM, val, mt); + } +} + + +void TList::setHeader(Header* h) +{ + header=h; + redraw(); +} + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/arranger/tlist.h muse-2.0/muse/arranger/tlist.h --- muse-2.0~rc2/muse/arranger/tlist.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/arranger/tlist.h 2012-06-30 19:24:43.000000000 +0200 @@ -24,7 +24,7 @@ #define __TLIST_H__ #include "track.h" - +#include #include class QWidget; @@ -33,10 +33,8 @@ class QSpinBox; class QMouseEvent; class QPaintEvent; -class QResizeEvent; class QScrollBar; class QWheelEvent; -//class QMenu; namespace MusECore { class Track; @@ -59,6 +57,7 @@ COL_TIMELOCK, COL_AUTOMATION, COL_CLEF, + COL_CUSTOM_MIDICTRL_OFFSET, COL_NONE = -1 }; @@ -71,6 +70,9 @@ int ypos; bool editMode; + bool editJustFinished; + + std::map > old_ctrl_hw_states; QPixmap bgPixmap; // background Pixmap bool resizeFlag; // true if resize cursor is shown @@ -79,6 +81,9 @@ QScrollBar* _scroll; QLineEdit* editor; QSpinBox* chan_edit; + QSpinBox* ctrl_edit; + int ctrl_num; + unsigned ctrl_at_tick; MusECore::Track* editTrack; MusECore::Track* editAutomation; @@ -103,25 +108,26 @@ void moveSelection(int n); void adjustScrollbar(); void paint(const QRect& r); - //virtual void resizeEvent(QResizeEvent*); void redraw(const QRect& r); MusECore::Track* y2Track(int) const; void classesPopupMenu(MusECore::Track*, int x, int y); MusECore::TrackList getRecEnabledTracks(); void setHeaderToolTips(); - //QMenu* colorMenu(QColor c, int id); PopupMenu* colorMenu(QColor c, int id, QWidget* parent); + protected: + bool event(QEvent *); private slots: + void maybeUpdateVolatileCustomColumns(); // updates AFFECT_CPOS-columns when and only when the hwState has changed void returnPressed(); - void chanValueChanged(int); void chanValueFinished(); + void ctrlValueFinished(); + void instrPopupActivated(QAction*); void songChanged(int flags); void changeAutomation(QAction*); void changeAutomationColor(QAction*); signals: - ///void selectionChanged(); void selectionChanged(MusECore::Track*); void keyPressExt(QKeyEvent*); void redirectWheelEvent(QWheelEvent*); @@ -133,13 +139,12 @@ void selectTrack(MusECore::Track*); void selectTrackAbove(); void selectTrackBelow(); + void setHeader(Header*); public: TList(Header*, QWidget* parent, const char* name); void setScroll(QScrollBar* s) { _scroll = s; } MusECore::Track* track() const { return editTrack; } - void writeStatus(int level, MusECore::Xml&, const char* name) const; - void readStatus(MusECore::Xml&, const char* name); }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/audioconvert.cpp muse-2.0/muse/audioconvert.cpp --- muse-2.0~rc2/muse/audioconvert.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/audioconvert.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -114,7 +114,6 @@ { if(!cv) return 0; - //if(cv->incRefCount(-1) <= 0) cv->_refCount -= 1; #ifdef AUDIOCONVERT_DEBUG printf("AudioConverter::release converter:%p current refcount:%d\n", cv, cv->_refCount); @@ -130,13 +129,12 @@ return cv; } -//off_t AudioConverter::readAudio(SndFileR& f, off_t sfCurFrame, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) off_t AudioConverter::readAudio(MusECore::SndFileR& f, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) { if(f.isNull()) return _sfCurFrame; - // Added by Tim. p3.3.17 + // Added by Tim. p3.3.17 DELETETHIS or comment it in again. it's disabled anyway //#ifdef AUDIOCONVERT_DEBUG_PRC //printf("AudioConverter::process %s audConv:%p sfCurFrame:%ld offset:%u channel:%d fchan:%d n:%d\n", // f.name().toLatin1(), this, sfCurFrame, offset, channel, f.channels(), n); @@ -162,12 +160,12 @@ // Sample rates are different. Seek to a calculated 'sample rate ratio factored' position. double srcratio = (double)fsrate / (double)MusEGlobal::sampleRate; - //long inSize = long((double)frames * _src_ratio) + 1 // From MusE-2 file converter. + //long inSize = long((double)frames * _src_ratio) + 1 // From MusE-2 file converter. DELETETHIS ??? off_t newfr = (off_t)floor(((double)frame * srcratio)); // From simplesynth. _sfCurFrame = f.seek(newfr, 0); - // Added by Tim. p3.3.17 + // Added by Tim. p3.3.17 DELETETHIS 3 or comment it in //#ifdef AUDIOCONVERT_DEBUG_PRC //printf("AudioConverter::process Seek frame:%ld converted to frame:%ld sfCurFrame:%ld\n", frame, newfr, sfCurFrame); //#endif @@ -178,7 +176,7 @@ else { // No seek requested. - // Added by Tim. p3.3.17 + // Added by Tim. p3.3.17 DELETETHIS 3 or comment it in //#ifdef AUDIOCONVERT_DEBUG_PRC //printf("AudioConverter::process No 'transport' seek, rates different. Seeking to sfCurFrame:%ld\n", sfCurFrame); //#endif @@ -189,19 +187,20 @@ _sfCurFrame = f.seek(_sfCurFrame, 0); } - /* + /* DELETETHIS 5 int fchan = f.channels(); long outFrames = n; long outSize = outFrames * fchan; float outbuffer[outSize]; */ + // DELETETHIS 4 //sfCurFrame = process(f, sfCurFrame, offset, &outbuffer[0], channel, n); // sfCurFrame = process(f, sfCurFrame, outbuffer, channel, n); //sfCurFrame = process(f, sfCurFrame, buffer, channel, n, overwrite); _sfCurFrame = process(f, buffer, channel, n, overwrite); - /* + /* DELETETHIS 58 (whoa!) float* poutbuf = &outbuffer[0]; if(fchan == channel) { @@ -328,24 +327,22 @@ return; } -//off_t SRCAudioConverter::process(SndFileR& f, off_t sfCurFrame, float** buffer, int channel, int n, bool overwrite) off_t SRCAudioConverter::process(MusECore::SndFileR& f, float** buffer, int channel, int n, bool overwrite) { - //return src_process(_src_state, sd); + //return src_process(_src_state, sd); DELETETHIS if(f.isNull()) - //return; return _sfCurFrame; - // Added by Tim. p3.3.17 + // Added by Tim. p3.3.17 DELETETHIS 4 //#ifdef AUDIOCONVERT_DEBUG_PRC //printf("AudioConverter::process %s audConv:%p sfCurFrame:%ld offset:%u channel:%d fchan:%d n:%d\n", // f.name().toLatin1(), this, sfCurFrame, offset, channel, f.channels(), n); //#endif -// off_t frame = offset; // _spos is added before the call. +// off_t frame = offset; // _spos is added before the call. DELETETHIS unsigned fsrate = f.samplerate(); - //bool resample = src_state && ((unsigned)MusEGlobal::sampleRate != fsrate); + //bool resample = src_state && ((unsigned)MusEGlobal::sampleRate != fsrate); DELETETHIS 2 // bool resample = isValid() && ((unsigned)MusEGlobal::sampleRate != fsrate); if((MusEGlobal::sampleRate == 0) || (fsrate == 0)) @@ -364,29 +361,30 @@ long inComp = 1; long outFrames = n; - //long outSize = outFrames * channel; + //long outSize = outFrames * channel; DELETETHIS long outSize = outFrames * fchan; - //long inSize = long(outSize * srcratio) + 1 // From MusE-2 file converter. + //long inSize = long(outSize * srcratio) + 1 // From MusE-2 file converter. DELETETHIS3 //long inSize = (long)floor(((double)outSize / srcratio)); // From simplesynth. //long inFrames = (long)floor(((double)outFrames / srcratio)); // From simplesynth. long inFrames = (long)ceil(((double)outFrames / srcratio)) + inComp; // From simplesynth. + // DELETETHIS //long inFrames = (long)floor(double(outFrames * sfinfo.samplerate) / double(MusEGlobal::sampleRate)); // From simplesynth. long inSize = inFrames * fchan; - //long inSize = inFrames * channel; + //long inSize = inFrames * channel; DELETETHIS // Start with buffers at expected sizes. We won't need anything larger than this, but add 4 for good luck. float inbuffer[inSize + 4]; float outbuffer[outSize]; - //size_t sfTotalRead = 0; + //size_t sfTotalRead = 0; DELETETHIS size_t rn = 0; long totalOutFrames = 0; srcdata.data_in = inbuffer; srcdata.data_out = outbuffer; -// srcdata.data_out = buffer; +// srcdata.data_out = buffer; DELETETHIS // Set some kind of limit on the number of attempts to completely fill the output buffer, // in case something is really screwed up - we don't want to get stuck in a loop here. @@ -394,10 +392,10 @@ for(int attempt = 0; attempt < attempts; ++attempt) { rn = f.readDirect(inbuffer, inFrames); - //sfTotalRead += rn; + //sfTotalRead += rn; DELETETHIS // convert - //srcdata.data_in = inbuffer; + //srcdata.data_in = inbuffer; DELETETHIS 4 //srcdata.data_out = outbuffer; //srcdata.data_out = poutbuf; //srcdata.input_frames = inSize; @@ -406,7 +404,7 @@ srcdata.end_of_input = ((long)rn != inFrames); srcdata.src_ratio = srcratio; - //#ifdef AUDIOCONVERT_DEBUG_PRC + //#ifdef AUDIOCONVERT_DEBUG_PRC DELETETHIS or comment it in, or maybe add an additional if (heavyDebugMsg)? //printf("AudioConverter::process attempt:%d inFrames:%ld outFrames:%ld rn:%d data in:%p out:%p", // attempt, inFrames, outFrames, rn, srcdata.data_in, srcdata.data_out); //#endif @@ -420,7 +418,7 @@ totalOutFrames += srcdata.output_frames_gen; - //#ifdef AUDIOCONVERT_DEBUG_PRC + //#ifdef AUDIOCONVERT_DEBUG_PRC DELETETHIS or comment in or heavyDebugMsg //printf(" frames used in:%ld out:%ld totalOutFrames:%ld data in:%p out:%p\n", srcdata.input_frames_used, srcdata.output_frames_gen, totalOutFrames, srcdata.data_in, srcdata.data_out); //#endif @@ -484,7 +482,7 @@ #endif // We've reached the end of the file. Convert the number of frames read. - //rn = (double)rn * srcratio + 1; + //rn = (double)rn * srcratio + 1; DELETETHIS 5 //rn = (long)floor((double)rn * srcratio); //if(rn > (size_t)outFrames) // rn = outFrames; @@ -505,22 +503,18 @@ long e = n * channel; for(long i = b; i < e; ++i) outbuffer[i] = 0.0f; - //buffer[i] = 0.0f; } - //float* poutbuf = &outbuffer[0]; float* poutbuf = outbuffer; if(fchan == channel) { if(overwrite) - //for (size_t i = 0; i < rn; ++i) for (int i = 0; i < n; ++i) { for(int ch = 0; ch < channel; ++ch) *(buffer[ch] + i) = *poutbuf++; } else - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) { for(int ch = 0; ch < channel; ++ch) @@ -531,11 +525,9 @@ { // stereo to mono if(overwrite) - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) *(buffer[0] + i) = poutbuf[i + i] + poutbuf[i + i + 1]; else - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) *(buffer[0] + i) += poutbuf[i + i] + poutbuf[i + i + 1]; } @@ -543,7 +535,6 @@ { // mono to stereo if(overwrite) - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) { float data = *poutbuf++; @@ -551,7 +542,6 @@ *(buffer[1]+i) = data; } else - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) { float data = *poutbuf++; @@ -585,7 +575,7 @@ _rbs = 0; _channels = channels; - _rbs = new RubberBandStretcher(MusEGlobal::sampleRate, _channels, _options); // , initialTimeRatio = 1.0, initialPitchScale = 1.0 + _rbs = new RubberBandStretcher(MusEGlobal::sampleRate, _channels, _options); // , initialTimeRatio = 1.0, initialPitchScale = 1.0 DELETETHIS } RubberBandAudioConverter::~RubberBandAudioConverter() @@ -624,24 +614,23 @@ ///////////////////////////////// // TODO: Not finished yet.. //////////////////////////////// -//off_t RubberBandAudioConverter::process(SndFileR& f, off_t sfCurFrame, float** buffer, int channel, int n, bool overwrite) +// DELETETHIS well then... but maybe we can clean it up anyway? remove the below for example ;)? off_t RubberBandAudioConverter::process(MusECore::SndFileR& f, float** buffer, int channel, int n, bool overwrite) { - //return src_process(_src_state, sd); + //return src_process(_src_state, sd); DELETETHIS if(f.isNull()) - //return; return _sfCurFrame; - // Added by Tim. p3.3.17 + // Added by Tim. p3.3.17 DELETETHIS 4 //#ifdef AUDIOCONVERT_DEBUG_PRC //printf("AudioConverter::process %s audConv:%p sfCurFrame:%ld offset:%u channel:%d fchan:%d n:%d\n", // f.name().toLatin1(), this, sfCurFrame, offset, channel, f.channels(), n); //#endif -// off_t frame = offset; // _spos is added before the call. +// off_t frame = offset; // _spos is added before the call. DELETETHIS unsigned fsrate = f.samplerate(); - //bool resample = src_state && ((unsigned)MusEGlobal::sampleRate != fsrate); + //bool resample = src_state && ((unsigned)MusEGlobal::sampleRate != fsrate); DELETETHIS 2 // bool resample = isValid() && ((unsigned)MusEGlobal::sampleRate != fsrate); if((MusEGlobal::sampleRate == 0) || (fsrate == 0)) @@ -660,23 +649,24 @@ long inComp = 1; long outFrames = n; - //long outSize = outFrames * channel; + //long outSize = outFrames * channel; DELETETHIS long outSize = outFrames * fchan; - //long inSize = long(outSize * srcratio) + 1 // From MusE-2 file converter. + //long inSize = long(outSize * srcratio) + 1 // From MusE-2 file converter. DELETETHIS 3 //long inSize = (long)floor(((double)outSize / srcratio)); // From simplesynth. //long inFrames = (long)floor(((double)outFrames / srcratio)); // From simplesynth. long inFrames = (long)ceil(((double)outFrames / srcratio)) + inComp; // From simplesynth. + // DELETETHIS //long inFrames = (long)floor(double(outFrames * sfinfo.samplerate) / double(MusEGlobal::sampleRate)); // From simplesynth. long inSize = inFrames * fchan; - //long inSize = inFrames * channel; + //long inSize = inFrames * channel; DELETETHIS // Start with buffers at expected sizes. We won't need anything larger than this, but add 4 for good luck. float inbuffer[inSize]; // +4 -// float outbuffer[outSize]; +// float outbuffer[outSize]; DELETETHIS - //float* rbinbuffer[fchan]; + //float* rbinbuffer[fchan]; DELETETHIS 4 //float rbindata[inSize]; //for (int i = 0; i < fchan; ++i) // rbinbuffer[i] = rbindata + i * inFrames; @@ -686,11 +676,11 @@ for (int i = 0; i < fchan; ++i) rboutbuffer[i] = rboutdata + i * outFrames; - //size_t sfTotalRead = 0; + //size_t sfTotalRead = 0; DELETETHIS size_t rn = 0; long totalOutFrames = 0; -// srcdata.data_in = inbuffer; +// srcdata.data_in = inbuffer; DELETETHIS 3 //srcdata.data_out = outbuffer; // srcdata.data_out = buffer; float** data_out = rboutbuffer; @@ -712,9 +702,9 @@ for(int i = 0; i < fchan; ++i) rbinbuffer[i] = rbindata + i * sreq; -// rn = f.readDirect(inbuffer, inFrames); +// rn = f.readDirect(inbuffer, inFrames); DELETETHIS rn = f.readDirect(inbuffer, sreq); - //sfTotalRead += rn; + //sfTotalRead += rn; DELETETHIS // Must de-interleave soundfile data to feed to rubberband. for(size_t i = 0; i < rn; ++i) @@ -730,7 +720,7 @@ // convert - //srcdata.data_in = inbuffer; + //srcdata.data_in = inbuffer; DELETETHIS 4 //srcdata.data_out = outbuffer; //srcdata.data_out = poutbuf; //srcdata.input_frames = inSize; @@ -739,7 +729,7 @@ srcdata.end_of_input = ((long)rn != inFrames); srcdata.src_ratio = srcratio; - //#ifdef AUDIOCONVERT_DEBUG_PRC + //#ifdef AUDIOCONVERT_DEBUG_PRC DELETETHIS or comment in //printf("AudioConverter::process attempt:%d inFrames:%ld outFrames:%ld rn:%d data in:%p out:%p", // attempt, inFrames, outFrames, rn, srcdata.data_in, srcdata.data_out); //#endif @@ -753,7 +743,7 @@ totalOutFrames += srcdata.output_frames_gen; - //#ifdef AUDIOCONVERT_DEBUG_PRC + //#ifdef AUDIOCONVERT_DEBUG_PRC DELETETHIS or comment in //printf(" frames used in:%ld out:%ld totalOutFrames:%ld data in:%p out:%p\n", srcdata.input_frames_used, srcdata.output_frames_gen, totalOutFrames, srcdata.data_in, srcdata.data_out); //#endif @@ -817,7 +807,7 @@ #endif // We've reached the end of the file. Convert the number of frames read. - //rn = (double)rn * srcratio + 1; + //rn = (double)rn * srcratio + 1; DELETETHIS 5 //rn = (long)floor((double)rn * srcratio); //if(rn > (size_t)outFrames) // rn = outFrames; @@ -837,23 +827,19 @@ long b = totalOutFrames * channel; long e = n * channel; for(long i = b; i < e; ++i) - //outbuffer[i] = 0.0f; buffer[i] = 0.0f; } - //float* poutbuf = &outbuffer[0]; float* poutbuf = outbuffer; if(fchan == channel) { if(overwrite) - //for (size_t i = 0; i < rn; ++i) for (int i = 0; i < n; ++i) { for(int ch = 0; ch < channel; ++ch) *(buffer[ch] + i) = *poutbuf++; } else - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) { for(int ch = 0; ch < channel; ++ch) @@ -864,11 +850,9 @@ { // stereo to mono if(overwrite) - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) *(buffer[0] + i) = poutbuf[i + i] + poutbuf[i + i + 1]; else - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) *(buffer[0] + i) += poutbuf[i + i] + poutbuf[i + i + 1]; } @@ -876,7 +860,6 @@ { // mono to stereo if(overwrite) - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) { float data = *poutbuf++; @@ -884,7 +867,6 @@ *(buffer[1]+i) = data; } else - //for(size_t i = 0; i < rn; ++i) for(int i = 0; i < n; ++i) { float data = *poutbuf++; diff -Nru muse-2.0~rc2/muse/audioconvert.h muse-2.0/muse/audioconvert.h --- muse-2.0~rc2/muse/audioconvert.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/audioconvert.h 2012-06-30 19:24:43.000000000 +0200 @@ -36,7 +36,6 @@ #include #include -//#include "eventbase.h" namespace MusECore { class EventBase; @@ -61,18 +60,14 @@ AudioConverter* reference(); static AudioConverter* release(AudioConverter* cv); - //off_t readAudio(SndFileR& /*sf*/, off_t /*sfCurFrame*/, unsigned /*offset*/, float** /*buffer*/, - // int /*channels*/, int /*frames*/, bool /*doSeek*/, bool /*overwrite*/); - off_t readAudio(MusECore::SndFileR& /*sf*/, unsigned /*offset*/, float** /*buffer*/, - int /*channels*/, int /*frames*/, bool /*doSeek*/, bool /*overwrite*/); + off_t readAudio(MusECore::SndFileR& sf, unsigned offset, float** buffer, + int channels, int frames, bool doSeek, bool overwrite); virtual bool isValid() = 0; virtual void reset() = 0; virtual void setChannels(int ch) = 0; - //virtual off_t process(SndFileR& /*sf*/, off_t /*sfCurFrame*/, float** /*buffer*/, - // int /*channels*/, int /*frames*/, bool /*overwrite*/) = 0; // Interleaved buffer if stereo. - virtual off_t process(MusECore::SndFileR& /*sf*/, float** /*buffer*/, - int /*channels*/, int /*frames*/, bool /*overwrite*/) = 0; // Interleaved buffer if stereo. + virtual off_t process(MusECore::SndFileR& sf, float** buffer, + int channels, int frames, bool overwrite) = 0; // Interleaved buffer if stereo. }; //--------------------------------------------------------- @@ -92,10 +87,8 @@ virtual bool isValid() { return _src_state != 0; } virtual void reset(); virtual void setChannels(int ch); - //virtual off_t process(SndFileR& /*sf*/, off_t /*sfCurFrame*/, float** /*buffer*/, - // int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. - virtual off_t process(MusECore::SndFileR& /*sf*/, float** /*buffer*/, - int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. + virtual off_t process(MusECore::SndFileR& sf, float** buffer, + int channels, int frames, bool overwrite); // Interleaved buffer if stereo. }; #ifdef RUBBERBAND_SUPPORT @@ -117,10 +110,8 @@ virtual bool isValid() { return _rbs != 0; } virtual void reset(); virtual void setChannels(int ch); - //virtual off_t process(SndFileR& /*sf*/, off_t /*sfCurFrame*/, float** /*buffer*/, - // int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. - virtual off_t process(MusECore::SndFileR& /*sf*/, float** /*buffer*/, - int /*channels*/, int /*frames*/, bool /*overwrite*/); // Interleaved buffer if stereo. + virtual off_t process(MusECore::SndFileR& sf, float** buffer, + int channels, int frames, bool overwrite); // Interleaved buffer if stereo. }; #endif // RUBBERBAND_SUPPORT @@ -132,14 +123,12 @@ typedef std::map >::iterator iAudioConvertMap; typedef std::map >::const_iterator ciAudioConvertMap; -//typedef std::map > AudioConvertMap; class AudioConvertMap : public std::map > { public: void remapEvents(const EventList*); iAudioConvertMap addEvent(EventBase*); void removeEvent(EventBase*); - //AudioConverter* getConverter(const EventBase*); iAudioConvertMap getConverter(EventBase*); }; diff -Nru muse-2.0~rc2/muse/audio.cpp muse-2.0/muse/audio.cpp --- muse-2.0~rc2/muse/audio.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/audio.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -45,6 +45,19 @@ #include "pos.h" #include "ticksynth.h" +// Experimental for now - allow other Jack timebase masters to control our midi engine. +// TODO: Be friendly to other apps and ask them to be kind to us by using jack_transport_reposition. +// It is actually required IF we want the extra position info to show up +// in the sync callback, otherwise we get just the frame only. +// This information is shared on the server, it is directly passed around. +// jack_transport_locate blanks the info from sync until the timebase callback reads +// it again right after, from some timebase master. +// Sadly not many of us use jack_transport_reposition. So we need to work around it ! +//#define _JACK_TIMEBASE_DRIVES_MIDI_ + +#ifdef _JACK_TIMEBASE_DRIVES_MIDI_ +#include "jackaudio.h" +#endif namespace MusEGlobal { MusECore::Audio* audio; @@ -59,15 +72,11 @@ { MusEGlobal::audio = new Audio(); } - extern double curTime(); -//static const unsigned char mmcDeferredPlayMsg[] = { 0x7f, 0x7f, 0x06, 0x03 }; -//static const unsigned char mmcStopMsg[] = { 0x7f, 0x7f, 0x06, 0x01 }; - const char* seqMsgList[] = { - "SEQM_ADD_TRACK", "SEQM_REMOVE_TRACK", //"SEQM_CHANGE_TRACK", + "SEQM_ADD_TRACK", "SEQM_REMOVE_TRACK", //"SEQM_CHANGE_TRACK", DELETETHIS "SEQM_MOVE_TRACK", "SEQM_ADD_PART", "SEQM_REMOVE_PART", "SEQM_CHANGE_PART", "SEQM_ADD_EVENT", "SEQM_REMOVE_EVENT", "SEQM_CHANGE_EVENT", @@ -82,20 +91,21 @@ "SEQM_SET_HW_CTRL_STATES", "SEQM_SET_TRACK_OUT_PORT", "SEQM_SET_TRACK_OUT_CHAN", + "SEQM_SET_TRACK_AUTO_TYPE", "SEQM_REMAP_PORT_DRUM_CTL_EVS", "SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS", "SEQM_SCAN_ALSA_MIDI_PORTS", "SEQM_SET_AUX", "SEQM_UPDATE_SOLO_STATES", - //"MIDI_SHOW_INSTR_GUI", - //"MIDI_SHOW_INSTR_NATIVE_GUI", + //"MIDI_SHOW_INSTR_GUI", DELETETHIS + //"MIDI_SHOW_INSTR_NATIVE_GUI", DELETETHIS "AUDIO_RECORD", "AUDIO_ROUTEADD", "AUDIO_ROUTEREMOVE", "AUDIO_REMOVEROUTES", - //"AUDIO_VOL", "AUDIO_PAN", + //"AUDIO_VOL", "AUDIO_PAN", DELETETHIS "AUDIO_ADDPLUGIN", "AUDIO_SET_SEG_SIZE", "AUDIO_SET_PREFADER", "AUDIO_SET_CHANNELS", - //"AUDIO_SET_PLUGIN_CTRL_VAL", + //"AUDIO_SET_PLUGIN_CTRL_VAL", DELETETHIS "AUDIO_SWAP_CONTROLLER_IDX", "AUDIO_CLEAR_CONTROLLER_EVENTS", "AUDIO_SEEK_PREV_AC_EVENT", @@ -105,6 +115,7 @@ "AUDIO_ADD_AC_EVENT", "AUDIO_CHANGE_AC_EVENT", "AUDIO_SET_SOLO", "AUDIO_SET_SEND_METRONOME", + "AUDIO_START_MIDI_LEARN", "MS_PROCESS", "MS_STOP", "MS_SET_RTC", "MS_UPDATE_POLL_FD", "SEQM_IDLE", "SEQM_SEEK" }; @@ -125,12 +136,15 @@ idle = false; _freewheel = false; _bounce = false; - //loopPassed = false; _loopFrame = 0; _loopCount = 0; _pos.setType(Pos::FRAMES); _pos.setFrame(0); +#ifdef _AUDIO_USE_TRUE_FRAME_ + _previousPos.setType(Pos::FRAMES); + _previousPos.setFrame(0); +#endif nextTickPos = curTickPos = 0; midiClick = 0; @@ -145,10 +159,10 @@ state = STOP; msg = 0; - //startRecordPos.setType(Pos::TICKS); - //endRecordPos.setType(Pos::TICKS); startRecordPos.setType(Pos::FRAMES); // Tim endRecordPos.setType(Pos::FRAMES); + startExternalRecTick = 0; + endExternalRecTick = 0; _audioMonitor = 0; _audioMaster = 0; @@ -189,22 +203,16 @@ bool Audio::start() { - //process(MusEGlobal::segmentSize); // warm up caches state = STOP; _loopCount = 0; MusEGlobal::muse->setHeartBeat(); - if (MusEGlobal::audioDevice) { - //_running = true; - //MusEGlobal::audioDevice->start(); - } - else { - if(false == initJackAudio()) { - //_running = true; + if (!MusEGlobal::audioDevice) { + if(initJackAudio() == false) { InputList* itl = MusEGlobal::song->inputs(); for (iAudioInput i = itl->begin(); i != itl->end(); ++i) { - //printf("reconnecting input %s\n", (*i)->name().ascii()); + if (MusEGlobal::debugMsg) printf("reconnecting input %s\n", (*i)->name().toAscii().data()); for (int x=0; x < (*i)->channels();x++) (*i)->setJackPort(x,0); (*i)->setName((*i)->name()); // restore jack connection @@ -212,13 +220,12 @@ OutputList* otl = MusEGlobal::song->outputs(); for (iAudioOutput i = otl->begin(); i != otl->end(); ++i) { - //printf("reconnecting output %s\n", (*i)->name().ascii()); + if (MusEGlobal::debugMsg) printf("reconnecting output %s\n", (*i)->name().toAscii().data()); for (int x=0; x < (*i)->channels();x++) (*i)->setJackPort(x,0); - //printf("name=%s\n",(*i)->name().toLatin1()); + if (MusEGlobal::debugMsg) printf("name=%s\n",(*i)->name().toAscii().data()); (*i)->setName((*i)->name()); // restore jack connection } - //MusEGlobal::audioDevice->start(); } else { printf("Failed to init audio!\n"); @@ -226,16 +233,14 @@ } } + _running = true; // Set before we start to avoid error messages in process. MusEGlobal::audioDevice->start(MusEGlobal::realTimePriority); - - _running = true; // shall we really stop JACK transport and locate to // saved position? MusEGlobal::audioDevice->stopTransport(); - //MusEGlobal::audioDevice->seekTransport(MusEGlobal::song->cPos().frame()); MusEGlobal::audioDevice->seekTransport(MusEGlobal::song->cPos()); return true; @@ -260,12 +265,14 @@ bool Audio::sync(int jackState, unsigned frame) { + //printf("Audio::sync: state:%d jackState:%d\n", state, jackState); + bool done = true; if (state == LOOP1) state = LOOP2; else { State s = State(jackState); - // + // STOP -> START_PLAY start rolling // STOP -> STOP seek in stop state // PLAY -> START_PLAY seek in play state @@ -273,10 +280,10 @@ if (state != START_PLAY) { Pos p(frame, false); seek(p); - if (!_freewheel) + if (!_freewheel) done = MusEGlobal::audioPrefetch->seekDone(); if (s == START_PLAY) - state = START_PLAY; + state = START_PLAY; } else { if (frame != _pos.frame()) { @@ -286,6 +293,7 @@ done = MusEGlobal::audioPrefetch->seekDone(); } } + //printf("Audio::sync: done:%d\n", done); return done; } @@ -296,7 +304,6 @@ void Audio::setFreewheel(bool val) { -// printf("JACK: freewheel callback %d\n", val); _freewheel = val; } @@ -319,9 +326,6 @@ void Audio::process(unsigned frames) { -// extern int watchAudio; -// ++watchAudio; // make a simple watchdog happy. Disabled. - if (!MusEGlobal::checkAudioDevice()) return; if (msg) { processMsg(msg); @@ -360,16 +364,6 @@ startRolling(); } else if (isPlaying() && jackState == STOP) { - // Make sure to stop bounce and freewheel mode, for example if user presses stop - // in QJackCtl before right-hand marker is reached (which is handled below). p3.3.43 - //printf("Audio::process isPlaying() && jackState == STOP\n"); - //if (_bounce) - //{ - //printf(" stopping bounce...\n"); - // _bounce = false; - // write(sigFd, "F", 1); - //} - stopRolling(); } else if (state == START_PLAY && jackState == STOP) { @@ -393,7 +387,7 @@ printf("JACK: state transition %s -> %s ?\n", audioStates[state], audioStates[jackState]); -// printf("p %s %s %d\n", audioStates[jackState], audioStates[state], _pos.frame()); + // printf("p %s %s %d\n", audioStates[jackState], audioStates[state], _pos.frame()); // // clear aux send buffers @@ -410,7 +404,10 @@ (*i)->processInit(frames); int samplePos = _pos.frame(); int offset = 0; // buffer offset in audio buffers - +#ifdef _JACK_TIMEBASE_DRIVES_MIDI_ + bool use_jack_timebase = false; +#endif + if (isPlaying()) { if (!freewheel()) MusEGlobal::audioPrefetch->msgTick(); @@ -420,7 +417,22 @@ write(sigFd, "F", 1); return; } - + +#ifdef _JACK_TIMEBASE_DRIVES_MIDI_ + unsigned curr_jt_tick, next_jt_ticks; + use_jack_timebase = + MusEGlobal::audioDevice->deviceType() == AudioDevice::JACK_AUDIO && + !MusEGlobal::jackTransportMaster && + !MusEGlobal::song->masterFlag() && + !MusEGlobal::extSyncFlag.value() && + static_cast(MusEGlobal::audioDevice)->timebaseQuery( + frames, NULL, NULL, NULL, &curr_jt_tick, &next_jt_ticks); + // NOTE: I would rather trust the reported current tick than rely solely on the stream of + // tempos to correctly advance to the next position (which did actually test OK anyway). + if(use_jack_timebase) + curTickPos = curr_jt_tick; +#endif + // // check for end of song // @@ -428,8 +440,9 @@ && !(MusEGlobal::song->record() || _bounce || MusEGlobal::song->loop())) { - //if(MusEGlobal::debugMsg) - // printf("Audio::process curTickPos >= MusEGlobal::song->len\n"); + + if(MusEGlobal::debugMsg) + printf("Audio::process curTickPos >= MusEGlobal::song->len\n"); MusEGlobal::audioDevice->stopTransport(); return; @@ -456,7 +469,6 @@ for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { if (mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) { if (mp->device()!=NULL) { - //printf("send clear sustain!!!!!!!! port %d ch %d\n", i,ch); MidiPlayEvent ev(0, i, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); // may cause problems, called from audio thread mp->device()->putEvent(ev); @@ -465,10 +477,8 @@ } } - //MusEGlobal::audioDevice->seekTransport(_loopFrame); Pos lp(_loopFrame, false); MusEGlobal::audioDevice->seekTransport(lp); -// printf(" process: seek to %d, end %d\n", _loopFrame, loop.frame()); } } @@ -480,10 +490,19 @@ } else { - - Pos ppp(_pos); - ppp += frames; - nextTickPos = ppp.tick(); + +#ifdef _JACK_TIMEBASE_DRIVES_MIDI_ + if(use_jack_timebase) + // With jack timebase this might not be accurate - + // we are relying on the tempo to figure out the next tick. + nextTickPos = curTickPos + next_jt_ticks; + else +#endif + { + Pos ppp(_pos); + ppp += frames; + nextTickPos = ppp.tick(); + } } } // @@ -493,14 +512,18 @@ syncTime = curTime(); frameOffset = syncFrame - samplePos; - //printf("Audio::process calling process1:\n"); - process1(samplePos, offset, frames); for (iAudioOutput i = ol->begin(); i != ol->end(); ++i) (*i)->processWrite(); + +#ifdef _AUDIO_USE_TRUE_FRAME_ + _previousPos = _pos; +#endif if (isPlaying()) { _pos += frames; - curTickPos = nextTickPos; + // With jack timebase this might not be accurate if we + // set curTickPos (above) from the reported current tick. + curTickPos = nextTickPos; } } @@ -513,8 +536,6 @@ if (MusEGlobal::midiSeqRunning) { processMidi(); } - //MusEGlobal::midiSeq->msgProcess(); - // // process not connected tracks // to animate meter display @@ -553,14 +574,14 @@ track = (AudioTrack*)(*it); if(!track->processed() && track->type() == Track::AUDIO_AUX) { - //printf("Audio::process1 Do aux: track:%s\n", track->name().toLatin1().constData()); + //printf("Audio::process1 Do aux: track:%s\n", track->name().toLatin1().constData()); DELETETHIS channels = track->channels(); // Just a dummy buffer. float* buffer[channels]; float data[frames * channels]; for (int i = 0; i < channels; ++i) buffer[i] = data + i * frames; - //printf("Audio::process1 calling track->copyData for track:%s\n", track->name().toLatin1()); + //printf("Audio::process1 calling track->copyData for track:%s\n", track->name().toLatin1()); DELETETHIS track->copyData(samplePos, channels, -1, -1, frames, buffer); } } @@ -580,20 +601,16 @@ if((*it)->isMidiTrack()) continue; track = (AudioTrack*)(*it); - // Ignore unprocessed tracks which have an output route, because they will be processed by - // whatever track(s) they are routed to. - //if(!track->processed() && track->noOutRoute() && (track->type() != Track::AUDIO_OUTPUT)) - // No, do all. if(!track->processed() && (track->type() != Track::AUDIO_OUTPUT)) { - //printf("Audio::process1 track:%s\n", track->name().toLatin1().constData()); + //printf("Audio::process1 track:%s\n", track->name().toLatin1().constData()); DELETETHIS channels = track->channels(); // Just a dummy buffer. float* buffer[channels]; float data[frames * channels]; for (int i = 0; i < channels; ++i) buffer[i] = data + i * frames; - //printf("Audio::process1 calling track->copyData for track:%s\n", track->name().toLatin1()); + //printf("Audio::process1 calling track->copyData for track:%s\n", track->name().toLatin1()); DELETETHIS track->copyData(samplePos, channels, -1, -1, frames, buffer); } } @@ -618,12 +635,6 @@ case AUDIO_REMOVEROUTES: removeAllRoutes(msg->sroute, msg->droute); break; - //case AUDIO_VOL: - // msg->snode->setVolume(msg->dval); - // break; - //case AUDIO_PAN: - // msg->snode->setPan(msg->dval); - // break; case SEQM_SET_AUX: msg->snode->setAuxSend(msg->ival, msg->dval); break; @@ -636,10 +647,6 @@ case AUDIO_ADDPLUGIN: msg->snode->addPlugin(msg->plugin, msg->ival); break; - //case AUDIO_SET_PLUGIN_CTRL_VAL: - //msg->plugin->track()->setPluginCtrlVal(msg->ival, msg->dval); - // msg->snode->setPluginCtrlVal(msg->ival, msg->dval); - // break; case AUDIO_SWAP_CONTROLLER_IDX: msg->snode->swapControllerIDX(msg->a, msg->b); break; @@ -672,10 +679,17 @@ msg->snode->setSendMetronome((bool)msg->ival); break; + case AUDIO_START_MIDI_LEARN: + // Reset the values. The engine will fill these from driver events. + MusEGlobal::midiLearnPort = -1; + MusEGlobal::midiLearnChan = -1; + MusEGlobal::midiLearnCtrl = -1; + break; + case AUDIO_SET_SEG_SIZE: MusEGlobal::segmentSize = msg->ival; MusEGlobal::sampleRate = msg->iival; -#if 0 //TODO +#if 0 //TODO or DELETETHIS ? audioOutput.MusEGlobal::segmentSizeChanged(); for (int i = 0; i < mixerGroups; ++i) audioGroups[i].MusEGlobal::segmentSizeChanged(); @@ -685,7 +699,6 @@ break; case SEQM_RESET_DEVICES: - //printf("Audio::processMsg SEQM_RESET_DEVICES\n"); for (int i = 0; i < MIDI_PORTS; ++i) { if(MusEGlobal::midiPorts[i].device()) @@ -723,6 +736,7 @@ case SEQM_SCAN_ALSA_MIDI_PORTS: alsaScanMidiPorts(); break; + //DELETETHIS 6 //case MIDI_SHOW_INSTR_GUI: // MusEGlobal::midiSeq->msgUpdatePollFd(); // break; @@ -736,6 +750,9 @@ MusEGlobal::song->processMsg(msg); if (isPlaying()) { if (!MusEGlobal::checkAudioDevice()) return; +#ifdef _AUDIO_USE_TRUE_FRAME_ + _previousPos = _pos; +#endif _pos.setTick(curTickPos); int samplePos = _pos.frame(); syncFrame = MusEGlobal::audioDevice->framePos(); @@ -743,6 +760,7 @@ frameOffset = syncFrame - samplePos; } break; + // DELETETHIS 6 //case SEQM_ADD_TRACK: //case SEQM_REMOVE_TRACK: //case SEQM_CHANGE_TRACK: @@ -756,6 +774,10 @@ MusEGlobal::midiSeq->sendMsg(msg); break; + case SEQM_SET_TRACK_AUTO_TYPE: + msg->track->setAutomationType(AutomationType(msg->ival)); + break; + case SEQM_IDLE: idle = msg->a; MusEGlobal::midiSeq->sendMsg(msg); @@ -780,23 +802,42 @@ printf("Audio::seek already there\n"); return; } - //printf("Audio::seek frame:%d\n", p.frame()); + if (MusEGlobal::heavyDebugMsg) + printf("Audio::seek frame:%d\n", p.frame()); + +#ifdef _AUDIO_USE_TRUE_FRAME_ + _previousPos = _pos; +#endif _pos = p; if (!MusEGlobal::checkAudioDevice()) return; syncFrame = MusEGlobal::audioDevice->framePos(); frameOffset = syncFrame - _pos.frame(); + +#ifdef _JACK_TIMEBASE_DRIVES_MIDI_ + unsigned curr_jt_tick; + if(MusEGlobal::audioDevice->deviceType() == AudioDevice::JACK_AUDIO && + !MusEGlobal::jackTransportMaster && + !MusEGlobal::song->masterFlag() && + !MusEGlobal::extSyncFlag.value() && + static_cast(MusEGlobal::audioDevice)->timebaseQuery( + MusEGlobal::segmentSize, NULL, NULL, NULL, &curr_jt_tick, NULL)) + curTickPos = curr_jt_tick; + else +#endif curTickPos = _pos.tick(); - if (curTickPos == 0 && !MusEGlobal::song->record()) +// ALSA support +#if 1 + MusEGlobal::midiSeq->msgSeek(); // handle stuck notes and set controller for new position +#else + if (curTickPos == 0 && !MusEGlobal::song->record()) // Moved here from MidiSeq::processStop() MusEGlobal::audio->initDevices(); - for(iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) (*i)->handleSeek(); +#endif - //loopPassed = true; // for record loop mode if (state != LOOP2 && !freewheel()) { - //MusEGlobal::audioPrefetch->msgSeek(_pos.frame()); // We need to force prefetch to update, to ensure the most recent data. // Things can happen to a part before play is pressed - such as part muting, // part moving etc. Without a force, the wrong data was being played. Tim 08/17/08 @@ -839,6 +880,7 @@ if(_loopCount == 0) { startRecordPos = _pos; + startExternalRecTick = curTickPos; } if (MusEGlobal::song->record()) { recording = true; @@ -863,11 +905,6 @@ if(!dev) continue; - // Shall we check open flags? - //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) - //if(!(dev->openFlags() & 1)) - // continue; - MidiSyncInfo& si = mp->syncInfo(); if(si.MMCOut()) @@ -887,7 +924,8 @@ && MusEGlobal::song->click() && !MusEGlobal::extSyncFlag.value() && MusEGlobal::song->record()) { -#if 0 +// DELETETHIS 14 or keep? +/* state = PRECOUNT; int z, n; if (precountFromMastertrackFlag) @@ -899,7 +937,7 @@ clickno = z * preMeasures; clicksMeasure = z; ticksBeat = (division * 4)/n; -#endif +*/ } else { // @@ -919,15 +957,12 @@ for (int ch = 0; ch < MIDI_CHANNELS; ++ch) { if (mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) { if(mp->device() != NULL) { - //printf("send enable sustain!!!!!!!! port %d ch %d\n", i,ch); MidiPlayEvent ev(0, i, ch, ME_CONTROLLER, CTRL_SUSTAIN, 127); - mp->device()->addScheduledEvent(ev); // TODO: Not working? Try putEvent + mp->device()->putEvent(ev); } } } } - - //tempomap.clearExtTempoList(); } //--------------------------------------------------------- @@ -936,19 +971,23 @@ void Audio::stopRolling() { - //if(MusEGlobal::debugMsg) - // printf("Audio::stopRolling state %s\n", audioStates[state]); + if (MusEGlobal::debugMsg) + printf("Audio::stopRolling state %s\n", audioStates[state]); state = STOP; - MusEGlobal::midiSeq->setExternalPlayState(false); // not playing Moved here from MidiSeq::processStop() p4.0.34 - +// ALSA support +#if 1 + MusEGlobal::midiSeq->msgStop(); +#else + MusEGlobal::midiSeq->setExternalPlayState(false); // not playing Moved here from MidiSeq::processStop() for(iMidiDevice id = MusEGlobal::midiDevices.begin(); id != MusEGlobal::midiDevices.end(); ++id) { MidiDevice* md = *id; md->handleStop(); } - +#endif + WaveTrackList* tracks = MusEGlobal::song->waves(); for (iWaveTrack i = tracks->begin(); i != tracks->end(); ++i) { WaveTrack* track = *i; @@ -956,6 +995,7 @@ } recording = false; endRecordPos = _pos; + endExternalRecTick = curTickPos; write(sigFd, "0", 1); // STOP } @@ -966,8 +1006,10 @@ void Audio::recordStop() { + MusEGlobal::song->processMasterRec(); + if (MusEGlobal::debugMsg) - printf("recordStop - startRecordPos=%d\n", startRecordPos.tick()); + printf("recordStop - startRecordPos=%d\n", MusEGlobal::extSyncFlag.value() ? startExternalRecTick : startRecordPos.tick()); MusEGlobal::audio->msgIdle(true); // gain access to all data structures @@ -977,7 +1019,7 @@ for (iWaveTrack it = wl->begin(); it != wl->end(); ++it) { WaveTrack* track = *it; if (track->recordFlag() || MusEGlobal::song->bounceTrack == track) { - MusEGlobal::song->cmdAddRecordedWave(track, startRecordPos, endRecordPos); + MusEGlobal::song->cmdAddRecordedWave(track, startRecordPos, endRecordPos); // The track's _recFile pointer may have been kept and turned // into a SndFileR and added to a new part. // Or _recFile may have been discarded (no new recorded part created). @@ -985,9 +1027,7 @@ // MusEGlobal::song->setRecordFlag knows about it... track->setRecFile(0); // flush out the old file - MusEGlobal::song->setRecordFlag(track, false); // - //track->setRecordFlag1(true); // and re-arm the track here - //MusEGlobal::song->setRecordFlag(track, true); // here + MusEGlobal::song->setRecordFlag(track, false); } } MidiTrackList* ml = MusEGlobal::song->midis(); @@ -1000,10 +1040,10 @@ // resolve NoteOff events, Controller etc. //--------------------------------------------------- - //buildMidiEventList(el, mpel, mt, MusEGlobal::config.division, true); // Do SysexMeta. Do loops. buildMidiEventList(el, mpel, mt, MusEGlobal::config.division, true, true); - MusEGlobal::song->cmdAddRecordedEvents(mt, el, startRecordPos.tick()); + MusEGlobal::song->cmdAddRecordedEvents(mt, el, + MusEGlobal::extSyncFlag.value() ? startExternalRecTick : startRecordPos.tick()); el->clear(); mpel->clear(); } @@ -1019,31 +1059,60 @@ if(ao->recordFlag()) { MusEGlobal::song->bounceOutput = 0; - SndFile* sf = ao->recFile(); - if (sf) - delete sf; // close - ao->setRecFile(0); + ao->setRecFile(NULL); // if necessary, this automatically deletes _recFile ao->setRecordFlag1(false); msgSetRecord(ao, false); } } + MusEGlobal::audio->msgIdle(false); MusEGlobal::song->endUndo(0); MusEGlobal::song->setRecord(false); } //--------------------------------------------------------- +// framesSinceCycleStart +// Estimated frames since the last process cycle began +//--------------------------------------------------------- + +unsigned Audio::framesSinceCycleStart() const +{ + unsigned f = lrint((curTime() - syncTime) * MusEGlobal::sampleRate); + // Safety due to inaccuracies. It cannot be after the segment, right? + if(f >= MusEGlobal::segmentSize) + f = MusEGlobal::segmentSize - 1; + return f; +} + +//--------------------------------------------------------- +// curFramePos() +// Current play position frame. Estimated to single-frame resolution while in play mode. +//--------------------------------------------------------- + +unsigned Audio::curFramePos() const +{ + return _pos.frame() + (isPlaying() ? framesSinceCycleStart() : 0); +} + +//--------------------------------------------------------- // curFrame -// extrapolates current play frame on syncTime/syncFrame +// Extrapolates current play frame on syncTime/syncFrame +// Estimated to single-frame resolution. +// This is an always-increasing number. Good for timestamps, and +// handling them during process when referenced to syncFrame. //--------------------------------------------------------- unsigned int Audio::curFrame() const { - return lrint((curTime() - syncTime) * MusEGlobal::sampleRate) + syncFrame; + //return lrint((curTime() - syncTime) * MusEGlobal::sampleRate) + syncFrame; + return framesSinceCycleStart() + syncFrame; } //--------------------------------------------------------- // timestamp +// Estimated to single-frame resolution. +// This is an always-increasing number in play mode, but in stop mode +// it is circular (about the cur pos, width = segment size). //--------------------------------------------------------- int Audio::timestamp() const diff -Nru muse-2.0~rc2/muse/audio.h muse-2.0/muse/audio.h --- muse-2.0~rc2/muse/audio.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/audio.h 2012-06-30 19:24:42.000000000 +0200 @@ -31,6 +31,12 @@ #include "route.h" #include "event.h" +// An experiment to use true frames for time-stamping all recorded input. +// (All recorded data actually arrived in the previous period.) +// TODO: Some more work needs to be done in WaveTrack::getData() in order to +// make everything line up and sync correctly. Cannot use this yet! +//#define _AUDIO_USE_TRUE_FRAME_ + namespace MusECore { class AudioDevice; class AudioTrack; @@ -44,7 +50,6 @@ class MidiTrack; class Part; class PluginI; -class SndFile; class SynthI; class Track; @@ -55,7 +60,7 @@ //--------------------------------------------------------- enum { - SEQM_ADD_TRACK, SEQM_REMOVE_TRACK, //SEQM_CHANGE_TRACK, + SEQM_ADD_TRACK, SEQM_REMOVE_TRACK, //SEQM_CHANGE_TRACK, DELETETHIS SEQM_MOVE_TRACK, SEQM_ADD_PART, SEQM_REMOVE_PART, SEQM_CHANGE_PART, SEQM_ADD_EVENT, SEQM_REMOVE_EVENT, SEQM_CHANGE_EVENT, @@ -71,20 +76,21 @@ SEQM_SET_HW_CTRL_STATES, SEQM_SET_TRACK_OUT_PORT, SEQM_SET_TRACK_OUT_CHAN, + SEQM_SET_TRACK_AUTO_TYPE, SEQM_REMAP_PORT_DRUM_CTL_EVS, SEQM_CHANGE_ALL_PORT_DRUM_CTL_EVS, SEQM_SCAN_ALSA_MIDI_PORTS, SEQM_SET_AUX, SEQM_UPDATE_SOLO_STATES, - //MIDI_SHOW_INSTR_GUI, - //MIDI_SHOW_INSTR_NATIVE_GUI, + //MIDI_SHOW_INSTR_GUI, DELETETHIS + //MIDI_SHOW_INSTR_NATIVE_GUI, DELETETHIS AUDIO_RECORD, AUDIO_ROUTEADD, AUDIO_ROUTEREMOVE, AUDIO_REMOVEROUTES, - //AUDIO_VOL, AUDIO_PAN, + //AUDIO_VOL, AUDIO_PAN, DELETETHIS AUDIO_ADDPLUGIN, AUDIO_SET_SEG_SIZE, AUDIO_SET_PREFADER, AUDIO_SET_CHANNELS, - //AUDIO_SET_PLUGIN_CTRL_VAL, + //AUDIO_SET_PLUGIN_CTRL_VAL, DELETETHIS AUDIO_SWAP_CONTROLLER_IDX, AUDIO_CLEAR_CONTROLLER_EVENTS, AUDIO_SEEK_PREV_AC_EVENT, @@ -94,6 +100,7 @@ AUDIO_ADD_AC_EVENT, AUDIO_CHANGE_AC_EVENT, AUDIO_SET_SOLO, AUDIO_SET_SEND_METRONOME, + AUDIO_START_MIDI_LEARN, MS_PROCESS, MS_STOP, MS_SET_RTC, MS_UPDATE_POLL_FD, SEQM_IDLE, SEQM_SEEK, }; @@ -106,7 +113,7 @@ struct AudioMsg : public ThreadMsg { // this should be an union int serialNo; - SndFile* downmix; + //SndFile* downmix; // DELETETHIS this is unused and probably WRONG (all SndFiles have been replaced by SndFileRs) AudioTrack* snode; AudioTrack* dnode; Route sroute, droute; @@ -147,7 +154,11 @@ int _loopCount; // Number of times we have looped so far Pos _pos; // current play position - + +#ifdef _AUDIO_USE_TRUE_FRAME_ + Pos _previousPos; // previous play position +#endif + unsigned curTickPos; // pos at start of frame during play/record unsigned nextTickPos; // pos at start of next frame during play/record @@ -167,14 +178,14 @@ int fromThreadFdw, fromThreadFdr; // message pipe int sigFd; // pipe fd for messages to gui - //QSocketNotifier* _socketNotifier; int sigFdr; // record values: Pos startRecordPos; Pos endRecordPos; - - // + unsigned startExternalRecTick; + unsigned endExternalRecTick; + AudioOutput* _audioMaster; AudioOutput* _audioMonitor; @@ -208,6 +219,7 @@ void stop(bool); void seek(const Pos& pos); + bool isStarting() const { return state == START_PLAY; } bool isPlaying() const { return state == PLAY || state == LOOP1 || state == LOOP2; } bool isRecording() const { return state == PLAY && recording; } void setRunning(bool val) { _running = val; } @@ -222,7 +234,7 @@ void msgRemoveTrack(Track*, bool u = true); void msgRemoveTracks(); - //void msgChangeTrack(Track* oldTrack, Track* newTrack, bool u = true); + //void msgChangeTrack(Track* oldTrack, Track* newTrack, bool u = true); DELETETHIS void msgMoveTrack(int idx1, int dx2, bool u = true); void msgAddPart(Part*, bool u = true); void msgRemovePart(Part*, bool u = true); @@ -241,8 +253,8 @@ void msgRemoveSig(int tick, int z, int n, bool doUndoFlag = true); void msgAddKey(int tick, int key, bool doUndoFlag = true); void msgRemoveKey(int tick, int key, bool doUndoFlag = true); - //void msgShowInstrumentGui(MidiInstrument*, bool); - //void msgShowInstrumentNativeGui(MidiInstrument*, bool); + //void msgShowInstrumentGui(MidiInstrument*, bool); DELETETHIS + //void msgShowInstrumentNativeGui(MidiInstrument*, bool); DELETETHIS void msgPanic(); void sendMsg(AudioMsg*); bool sendMessage(AudioMsg* m, bool doUndo); @@ -254,8 +266,8 @@ void msgAddRoute1(Route, Route); void msgAddPlugin(AudioTrack*, int idx, PluginI* plugin); void msgSetMute(AudioTrack*, bool val); - //void msgSetVolume(AudioTrack*, double val); - //void msgSetPan(AudioTrack*, double val); + //void msgSetVolume(AudioTrack*, double val); DELETETHIS + //void msgSetPan(AudioTrack*, double val); DELETETHIS void msgAddSynthI(SynthI* synth); void msgRemoveSynthI(SynthI* synth); void msgSetSegSize(int, int); @@ -270,7 +282,7 @@ void msgResetMidiDevices(); void msgIdle(bool); void msgBounce(); - //void msgSetPluginCtrlVal(AudioTrack*, int /*param*/, double /*val*/); + //void msgSetPluginCtrlVal(AudioTrack*, int /*param*/, double /*val*/); DELETETHIS void msgSwapControllerIDX(AudioTrack*, int, int); void msgClearControllerEvents(AudioTrack*, int); void msgSeekPrevACEvent(AudioTrack*, int); @@ -284,9 +296,11 @@ void msgSetHwCtrlStates(MidiPort*, int, int, int, int); void msgSetTrackOutChannel(MidiTrack*, int); void msgSetTrackOutPort(MidiTrack*, int); + void msgSetTrackAutomationType(Track*, int); void msgRemapPortDrumCtlEvents(int, int, int, int); void msgChangeAllPortDrumCtrlEvents(bool, bool); void msgSetSendMetronome(AudioTrack*, bool); + void msgStartMidiLearn(); void msgPlayMidiEvent(const MidiPlayEvent* event); void rescanAlsaPorts(); @@ -294,8 +308,13 @@ void midiPortsChanged(); const Pos& pos() const { return _pos; } +#ifdef _AUDIO_USE_TRUE_FRAME_ + const Pos& previousPos() const { return _previousPos; } +#endif const Pos& getStartRecordPos() const { return startRecordPos; } const Pos& getEndRecordPos() const { return endRecordPos; } + unsigned getStartExternalRecTick() const { return startExternalRecTick; } + unsigned getEndExternalRecTick() const { return endExternalRecTick; } int loopCount() { return _loopCount; } // Number of times we have looped so far unsigned loopFrame() { return _loopFrame; } @@ -303,8 +322,10 @@ unsigned nextTick() const { return nextTickPos; } int timestamp() const; void processMidi(); + unsigned framesSinceCycleStart() const; unsigned curFrame() const; unsigned curSyncFrame() const { return syncFrame; } + unsigned curFramePos() const; void recordStop(); bool freewheel() const { return _freewheel; } void setFreewheel(bool val); diff -Nru muse-2.0~rc2/muse/audioprefetch.cpp muse-2.0/muse/audioprefetch.cpp --- muse-2.0~rc2/muse/audioprefetch.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/audioprefetch.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include "audioprefetch.h" #include "globals.h" @@ -61,14 +61,11 @@ // AudioPrefetch //--------------------------------------------------------- -//AudioPrefetch::AudioPrefetch(int prio, const char* name) -// : Thread(prio,name) AudioPrefetch::AudioPrefetch(const char* name) : Thread(name) { seekPos = ~0; writePos = ~0; - //seekDone = true; seekCount = 0; } @@ -86,12 +83,10 @@ // start //--------------------------------------------------------- -//void AudioPrefetch::start() void AudioPrefetch::start(int priority) { clearPollFd(); addPollFd(toThreadFdr, POLLIN, MusECore::readMsgP, this, 0); - //Thread::start(); Thread::start(priority); } @@ -112,13 +107,10 @@ const PrefetchMsg* msg = (PrefetchMsg*)m; switch(msg->id) { case PREFETCH_TICK: - if (MusEGlobal::audio->isRecording()) { - //puts("writeTick"); + if (MusEGlobal::audio->isRecording()) MusEGlobal::audio->writeTick(); - } + // Indicate do not seek file before each read. - // Changed by Tim. p3.3.17 - //prefetch(); prefetch(false); seekPos = ~0; // invalidate cached last seek position @@ -157,13 +149,10 @@ void AudioPrefetch::msgSeek(unsigned samplePos, bool force) { - if (samplePos == seekPos && !force) { - //seekDone = true; + if (samplePos == seekPos && !force) return; - } ++seekCount; - //seekDone = false; #ifdef AUDIOPREFETCH_DEBUG printf("AudioPrefetch::msgSeek samplePos:%u force:%d seekCount:%d\n", samplePos, force, seekCount); @@ -182,7 +171,6 @@ // prefetch //--------------------------------------------------------- -//void AudioPrefetch::prefetch() void AudioPrefetch::prefetch(bool doSeek) { if (writePos == ~0U) { @@ -197,31 +185,23 @@ // adjust loop start so we get exact loop len if (n > lpos) n = 0; -// printf("prefetch seek %d\n", writePos); writePos = lpos - n; } } WaveTrackList* tl = MusEGlobal::song->waves(); for (iWaveTrack it = tl->begin(); it != tl->end(); ++it) { WaveTrack* track = *it; - // p3.3.29 - // Save time. Don't bother if track is off. Track On/Off not designed for rapid repeated response (but mute is). + // Save time. Don't bother if track is off. Track On/Off not designed for rapid repeated response (but mute is). (p3.3.29) if(track->off()) continue; int ch = track->channels(); float* bp[ch]; -// printf("prefetch %d\n", writePos); - if (track->prefetchFifo()->getWriteBuffer(ch, MusEGlobal::segmentSize, bp, writePos)) { - // printf("AudioPrefetch::prefetch No write buffer!\n"); // p3.3.46 Was getting this... + if (track->prefetchFifo()->getWriteBuffer(ch, MusEGlobal::segmentSize, bp, writePos)) continue; - } - //track->fetchData(writePos, MusEGlobal::segmentSize, bp); + track->fetchData(writePos, MusEGlobal::segmentSize, bp, doSeek); - // p3.3.41 - //fprintf(stderr, "AudioPrefetch::prefetch data: MusEGlobal::segmentSize:%ld %e %e %e %e\n", MusEGlobal::segmentSize, bp[0][0], bp[0][1], bp[0][2], bp[0][3]); - } writePos += MusEGlobal::segmentSize; } @@ -232,7 +212,6 @@ void AudioPrefetch::seek(unsigned seekTo) { -// printf("seek %d\n", seekTo); #ifdef AUDIOPREFETCH_DEBUG printf("AudioPrefetch::seek to:%u seekCount:%d\n", seekTo, seekCount); #endif @@ -264,14 +243,11 @@ for (unsigned int i = 0; i < (MusEGlobal::fifoLength)-1; ++i)//prevent compiler warning: comparison of signed/unsigned { // Indicate do a seek command before read, but only on the first pass. - // Changed by Tim. p3.3.17 - //prefetch(); prefetch(isFirstPrefetch); isFirstPrefetch = false; - // To help speed things up even more, check the count again. Return if more seek messages are pending. - // Added by Tim. p3.3.20 + // To help speed things up even more, check the count again. Return if more seek messages are pending. (p3.3.20) if(seekCount > 1) { --seekCount; @@ -280,7 +256,6 @@ } seekPos = seekTo; - //seekDone = true; --seekCount; } diff -Nru muse-2.0~rc2/muse/audioprefetch.h muse-2.0/muse/audioprefetch.h --- muse-2.0~rc2/muse/audioprefetch.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/audioprefetch.h 2012-06-30 19:24:42.000000000 +0200 @@ -37,24 +37,20 @@ unsigned seekPos; // remember last seek to optimize seeks virtual void processMsg1(const void*); - //void prefetch(); void prefetch(bool doSeek); void seek(unsigned pos); volatile int seekCount; public: - //AudioPrefetch(int prio, const char* name); AudioPrefetch(const char* name); ~AudioPrefetch(); - //virtual void start(); virtual void start(int); void msgTick(); void msgSeek(unsigned samplePos, bool force=false); - //volatile bool seekDone; bool seekDone() const { return seekCount == 0; } }; diff -Nru muse-2.0~rc2/muse/audiotrack.cpp muse-2.0/muse/audiotrack.cpp --- muse-2.0~rc2/muse/audiotrack.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/audiotrack.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -21,7 +21,7 @@ // //========================================================= -#include +#include #include #include @@ -39,6 +39,7 @@ #include "synth.h" #include "dssihost.h" #include "app.h" +#include "controlfifo.h" namespace MusECore { @@ -48,6 +49,7 @@ bool AudioGroup::_isVisible =false; bool WaveTrack::_isVisible=true; +// DELETETHIS 40. this caching stuff seems to be not used any more // By T356. For caching jack in/out routing names BEFORE file save. // Jack often shuts down during file save, causing the routes to be lost in the file. // cacheJackRouteNames() is ONLY called from MusE::save() in app.cpp @@ -95,37 +97,20 @@ AudioTrack::AudioTrack(TrackType t) : Track(t) { - //_totalOutChannels = num_out_bufs; // Is either parameter-default MAX_CHANNELS, or custom value passed (used by syntis). _processed = false; _haveData = false; _sendMetronome = false; _prefader = false; _efxPipe = new Pipeline(); - _recFile = 0; + //_recFile = 0; //unneeded, _recFile's ctor does this _channels = 0; _automationType = AUTO_OFF; - //setChannels(1); setChannels(2); addController(new CtrlList(AC_VOLUME,"Volume",0.001,3.163 /* roughly 10 db */, VAL_LOG)); addController(new CtrlList(AC_PAN, "Pan", -1.0, 1.0, VAL_LINEAR)); addController(new CtrlList(AC_MUTE,"Mute",0.0,1.0, VAL_LINEAR, true /*dont show in arranger */)); - //outBuffers = new float*[MAX_CHANNELS]; - //for (int i = 0; i < MAX_CHANNELS; ++i) - // outBuffers[i] = new float[MusEGlobal::segmentSize]; - //for (int i = 0; i < MAX_CHANNELS; ++i) - // posix_memalign((void**)(outBuffers + i), 16, sizeof(float) * MusEGlobal::segmentSize); - - // Let's allocate it all in one block, and just point the remaining buffer pointers into the block - // which allows faster one-shot buffer copying. - // Nope. Nice but interferes with possibility we don't know if other buffers are contiguous (jack buffers, local stack buffers etc.). - //posix_memalign((void**)(outBuffers), 16, sizeof(float) * MusEGlobal::segmentSize * MAX_CHANNELS); - //for (int i = 0; i < MAX_CHANNELS; ++i) - // *(outBuffers + i) = sizeof(float) * MusEGlobal::segmentSize * i; - - // Easy way, less desirable... Start out with enough for MAX_CHANNELS. Then multi-channel syntis can re-allocate, - // via a call to (a modified!) setChannels(). - // Hard way, more desirable... Creating a synti instance passes the total channels to this constructor, overriding MAX_CHANNELS. + // for a lot of considerations and failures, see revision 1402 or earlier (flo) _totalOutChannels = MAX_CHANNELS; outBuffers = new float*[_totalOutChannels]; for (int i = 0; i < _totalOutChannels; ++i) @@ -134,7 +119,7 @@ // This is only set by multi-channel syntis... _totalInChannels = 0; - bufferPos = MAXINT; + bufferPos = INT_MAX; setVolume(1.0); } @@ -152,9 +137,8 @@ // This is only set by multi-channel syntis... _totalInChannels = 0; - bufferPos = MAXINT; + bufferPos = INT_MAX; - //_recFile = t._recFile; _recFile = NULL; internal_assign(t, flags | ASSIGN_PROPERTIES); @@ -193,16 +177,9 @@ setTotalOutChannels(at._totalOutChannels); // This is only set by multi-channel syntis... - //_totalInChannels = 0; - //_totalInChannels = t._totalInChannels; setTotalInChannels(at._totalInChannels); setChannels(at.channels()); // Set track channels (max 2). - - //bufferPos = MAXINT; - - //_recFile = at._recFile; - //_recFile = NULL; } if(flags & ASSIGN_PLUGINS) @@ -231,9 +208,6 @@ } } - // FIXME: May get "addRoute: src track route already exists" when say, - // an audio output and wave track are selected just because - // of the redundancy (wave track wants to connect to output by default). if(flags & ASSIGN_ROUTES) { for(ciRoute ir = at._inRoutes.begin(); ir != at._inRoutes.end(); ++ir) @@ -241,8 +215,8 @@ // Defer all Jack routes to Audio Input and Output copy constructors or assign ! if(ir->type == Route::JACK_ROUTE) continue; - // Amazingly, this single line seems to work. - MusEGlobal::audio->msgAddRoute(*ir, Route(this, ir->channel, ir->channels)); + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _inRoutes.push_back(*ir); } for(ciRoute ir = at._outRoutes.begin(); ir != at._outRoutes.end(); ++ir) @@ -250,8 +224,8 @@ // Defer all Jack routes to Audio Input and Output copy constructors or assign ! if(ir->type == Route::JACK_ROUTE) continue; - // Amazingly, this single line seems to work. - MusEGlobal::audio->msgAddRoute(Route(this, ir->channel, ir->channels), *ir); + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _outRoutes.push_back(*ir); } } else if(flags & ASSIGN_DEFAULT_ROUTES) @@ -263,23 +237,15 @@ if (!ol->empty()) { AudioOutput* ao = ol->front(); switch(type()) { - //case Track::MIDI: - //case Track::DRUM: - //case Track::AUDIO_OUTPUT: - // break; - case Track::WAVE: - //case Track::AUDIO_GROUP: case Track::AUDIO_AUX: - //case Track::AUDIO_INPUT: - //case Track::AUDIO_SOFTSYNTH: - MusEGlobal::audio->msgAddRoute(Route(this, -1), Route(ao, -1)); - //updateFlags |= SC_ROUTE; + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _outRoutes.push_back(Route(ao, -1)); break; // It should actually never get here now, but just in case. case Track::AUDIO_SOFTSYNTH: - MusEGlobal::audio->msgAddRoute(Route(this, 0, channels()), Route(ao, 0, channels())); - //updateFlags |= SC_ROUTE; + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _outRoutes.push_back(Route(ao, 0, channels())); break; default: break; @@ -420,6 +386,10 @@ void AudioTrack::removeController(int id) { + AudioMidiCtrlStructMap amcs; + _controller.midiControls()->find_audio_ctrl_structs(id, &amcs); + for(ciAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++ iamcs) + _controller.midiControls()->erase(*iamcs); iCtrlList i = _controller.find(id); if (i == _controller.end()) { printf("AudioTrack::removeController id %d not found\n", id); @@ -434,20 +404,14 @@ void AudioTrack::swapControllerIDX(int idx1, int idx2) { - // FIXME This code is ugly. - // At best we would like to modify the keys (IDXs) in-place and - // do some kind of deferred re-sort, but it can't be done... - - if(idx1 == idx2) - return; - - if(idx1 < 0 || idx2 < 0 || idx1 >= PipelineDepth || idx2 >= PipelineDepth) + if(idx1 == idx2 || idx1 < 0 || idx2 < 0 || idx1 >= PipelineDepth || idx2 >= PipelineDepth) return; CtrlList *cl; CtrlList *newcl; int id1 = (idx1 + 1) * AC_PLUGIN_CTL_BASE; int id2 = (idx2 + 1) * AC_PLUGIN_CTL_BASE; + int id_mask = ~((int)AC_PLUGIN_CTL_ID_MASK); int i, j; CtrlListList tmpcll; @@ -457,7 +421,7 @@ { cl = icl->second; i = cl->id() & AC_PLUGIN_CTL_ID_MASK; - j = cl->id() & ~((unsigned long)AC_PLUGIN_CTL_ID_MASK); + j = cl->id() & id_mask; if(j == id1 || j == id2) { newcl = new CtrlList(i | (j == id1 ? id2 : id1)); @@ -495,74 +459,21 @@ _controller.insert(std::pair(newcl->id(), newcl)); } - - /* - unsigned int idmask = ~AC_PLUGIN_CTL_ID_MASK; - - CtrlList* cl; - CtrlList* ctl1 = 0; - CtrlList* ctl2 = 0; - CtrlList* newcl1 = 0; - CtrlList* newcl2 = 0; - CtrlVal cv(0, 0.0); - int id1 = (idx1 + 1) * AC_PLUGIN_CTL_BASE; - int id2 = (idx2 + 1) * AC_PLUGIN_CTL_BASE; - int i, j; - double min, max; - - for(ciCtrlList icl = _controller.begin(); icl != _controller.end(); ++icl) + // Remap midi to audio controls... + MidiAudioCtrlMap* macm = _controller.midiControls(); + for(iMidiAudioCtrlMap imacm = macm->begin(); imacm != macm->end(); ++imacm) { - cl = icl->second; - i = cl->id() & AC_PLUGIN_CTL_ID_MASK; - j = cl->id() & idmask; - - if(j == id1) - { - ctl1 = cl; - newcl1 = new CtrlList( i | id2 ); - newcl1->setMode(cl->mode()); - newcl1->setValueType(cl->valueType()); - newcl1->setName(cl->name()); - cl->range(&min, &max); - newcl1->setRange(min, max); - newcl1->setCurVal(cl->curVal()); - newcl1->setDefault(cl->getDefault()); - for(iCtrl ic = cl->begin(); ic != cl->end(); ++ic) - { - cv = ic->second; - newcl1->insert(std::pair(cv.frame, cv)); - } - } - //else - if(j == id2) - { - ctl2 = cl; - newcl2 = new CtrlList( i | id1 ); - newcl2->setMode(cl->mode()); - newcl2->setValueType(cl->valueType()); - newcl2->setName(cl->name()); - cl->range(&min, &max); - newcl2->setRange(min, max); - newcl2->setCurVal(cl->curVal()); - newcl2->setDefault(cl->getDefault()); - for(iCtrl ic = cl->begin(); ic != cl->end(); ++ic) - { - cv = ic->second; - newcl2->insert(std::pair(cv.frame, cv)); - } - } - } - if(ctl1) - _controller.erase(ctl1->id()); - if(ctl2) - _controller.erase(ctl2->id()); - if(newcl1) - //_controller.add(newcl1); - _controller.insert(std::pair(newcl1->id(), newcl1)); - if(newcl2) - _controller.insert(std::pair(newcl2->id(), newcl2)); - //_controller.add(newcl2); - */ + int actrl = imacm->second.audioCtrlId(); + int id = actrl & id_mask; + actrl &= AC_PLUGIN_CTL_ID_MASK; + if(id == id1) + actrl |= id2; + else if(id == id2) + actrl |= id1; + else + continue; + imacm->second.setAudioCtrlId(actrl); + } } //--------------------------------------------------------- @@ -616,7 +527,6 @@ { // Don't bother looking for start, it's OK, just take the first one. // Needed for mousewheel and paging etc. - //if (icr->id == id && icr->type == ARVT_START) if (icr->id == id) { int start = icr->frame; @@ -646,11 +556,7 @@ if(icr->id == id && icr->type == ARVT_STOP) { int end = icr->frame; - // Erase everything up to, not including, this stop event's frame. - // Because an event was already stored directly when slider released. - if(end > start) - --end; - + iCtrl s = cl->lower_bound(start); iCtrl e = cl->lower_bound(end); @@ -672,24 +578,26 @@ // from CtrlRecList and put into cl. for (iCtrlRec icr = _recEvents.begin(); icr != _recEvents.end(); ++icr) { - if (icr->id == id && (icr->type == ARVT_VAL || icr->type == ARVT_START)) + if (icr->id == id) + { + // Must optimize these types otherwise multiple vertices appear on flat straight lines in the graphs. + CtrlValueType vtype = cl->valueType(); + if(!cl->empty() && (cl->mode() == CtrlList::DISCRETE || vtype == VAL_BOOL || vtype == VAL_INT)) + { + iCtrl icl_prev = cl->lower_bound(icr->frame); + if(icl_prev != cl->begin()) + --icl_prev; + if(icl_prev->second.val == icr->val) + continue; + } + // Now add the value. cl->add(icr->frame, icr->val); + } } } // Done with the recorded automation event list. Clear it. _recEvents.clear(); - - // Try muse without this, so that the user can remain in automation write mode - // after a stop. - /* - if (automationType() == AUTO_WRITE) - { - setAutomationType(AUTO_READ); - MusEGlobal::song->update(SC_AUTOMATION); - } - */ - } //--------------------------------------------------------- @@ -734,13 +642,11 @@ if(cl->empty()) return; - //iCtrl s = cl->lower_bound(MusEGlobal::song->cPos().frame()); - iCtrl s = cl->lower_bound(MusEGlobal::audio->pos().frame()); // p4.0.33 + iCtrl s = cl->lower_bound(MusEGlobal::audio->pos().frame()); if(s != cl->begin()) --s; - //MusEGlobal::song->setPos(Song::CPOS, Pos(s->second.frame, false), true, false, true); - MusEGlobal::song->setPos(Song::CPOS, Pos(s->second.frame, false), false, true, false); // p4.0.33 + MusEGlobal::song->setPos(Song::CPOS, Pos(s->second.frame, false), false, true, false); return; } @@ -758,16 +664,14 @@ if(cl->empty()) return; - //iCtrl s = cl->upper_bound(MusEGlobal::song->cPos().frame()); - iCtrl s = cl->upper_bound(MusEGlobal::audio->pos().frame()); // p4.0.33 + iCtrl s = cl->upper_bound(MusEGlobal::audio->pos().frame()); if(s == cl->end()) { --s; } - //MusEGlobal::song->setPos(Song::CPOS, Pos(s->second.frame, false), true, false, true); - MusEGlobal::song->setPos(Song::CPOS, Pos(s->second.frame, false), false, true, false); // p4.0.33 + MusEGlobal::song->setPos(Song::CPOS, Pos(s->second.frame, false), false, true, false); return; } @@ -841,7 +745,7 @@ iCtrl ic = cl->find(frame); if(ic != cl->end()) cl->erase(ic); - cl->insert(std::pair (newframe, CtrlVal(newframe, newval))); + cl->insert(std::pair (newframe, CtrlVal(newframe, newval))); } //--------------------------------------------------------- @@ -850,15 +754,8 @@ double AudioTrack::volume() const { - ciCtrlList cl = _controller.find(AC_VOLUME); - if (cl == _controller.end()) - return 0.0; - - if (MusEGlobal::automation && - automationType() != AUTO_OFF && _volumeEnCtrl && _volumeEn2Ctrl ) - return cl->second->value(MusEGlobal::song->cPos().frame()); - else - return cl->second->curVal(); + return _controller.value(AC_VOLUME, MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || automationType() == AUTO_OFF || !_volumeEnCtrl || !_volumeEn2Ctrl); } //--------------------------------------------------------- @@ -882,15 +779,8 @@ double AudioTrack::pan() const { - ciCtrlList cl = _controller.find(AC_PAN); - if (cl == _controller.end()) - return 0.0; - - if (MusEGlobal::automation && - automationType() != AUTO_OFF && _panEnCtrl && _panEn2Ctrl ) - return cl->second->value(MusEGlobal::song->cPos().frame()); - else - return cl->second->curVal(); + return _controller.value(AC_PAN, MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || automationType() == AUTO_OFF || !_panEnCtrl || !_panEn2Ctrl); } //--------------------------------------------------------- @@ -913,14 +803,49 @@ double AudioTrack::pluginCtrlVal(int ctlID) const { - ciCtrlList cl = _controller.find(ctlID); - if (cl == _controller.end()) - return 0.0; - - if (MusEGlobal::automation && (automationType() != AUTO_OFF)) - return cl->second->value(MusEGlobal::song->cPos().frame()); + bool en_1 = true, en_2 = true; + if(ctlID < AC_PLUGIN_CTL_BASE) + { + if(ctlID == AC_VOLUME) + { + en_1 = _volumeEnCtrl; + en_2 = _volumeEn2Ctrl; + } + else + if(ctlID == AC_PAN) + { + en_1 = _panEnCtrl; + en_2 = _panEn2Ctrl; + } + } else - return cl->second->curVal(); + { + if(ctlID < (int)genACnum(MAX_PLUGINS, 0)) // The beginning of the special dssi synth controller block. + { + _efxPipe->controllersEnabled(ctlID, &en_1, &en_2); + } + else + { + if(type() == AUDIO_SOFTSYNTH) + { + const SynthI* synth = static_cast(this); + if(synth->synth() && synth->synth()->synthType() == Synth::DSSI_SYNTH) + { + SynthIF* sif = synth->sif(); + if(sif) + { + const DssiSynthIF* dssi_sif = static_cast(sif); + int in_ctrl_idx = ctlID & AC_PLUGIN_CTL_ID_MASK; + en_1 = dssi_sif->controllerEnabled(in_ctrl_idx); + en_2 = dssi_sif->controllerEnabled2(in_ctrl_idx); + } + } + } + } + } + + return _controller.value(ctlID, MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || automationType() == AUTO_OFF || !en_1 || !en_2); } //--------------------------------------------------------- @@ -936,16 +861,150 @@ cl->second->setCurVal(val); } +//--------------------------------------------------------- +// addScheduledControlEvent +// returns true if event cannot be delivered +//--------------------------------------------------------- + +bool AudioTrack::addScheduledControlEvent(int track_ctrl_id, float val, unsigned frame) +{ + if(track_ctrl_id < AC_PLUGIN_CTL_BASE) // FIXME: These controllers (three so far - vol, pan, mute) have no vari-run-length support. + { + iCtrlList icl = _controller.find(track_ctrl_id); + if(icl == _controller.end()) + return true; + icl->second->setCurVal(val); + return false; + } + else + { + if(track_ctrl_id < (int)genACnum(MAX_PLUGINS, 0)) // The beginning of the special dssi synth controller block. + return _efxPipe->addScheduledControlEvent(track_ctrl_id, val, frame); + else + { + if(type() == AUDIO_SOFTSYNTH) + { + const SynthI* synth = static_cast(this); + if(synth->synth() && synth->synth()->synthType() == Synth::DSSI_SYNTH) + { + SynthIF* sif = synth->sif(); + if(sif) + { + DssiSynthIF* dssi_sif = static_cast(sif); + int in_ctrl_idx = track_ctrl_id & AC_PLUGIN_CTL_ID_MASK; + return dssi_sif->addScheduledControlEvent(in_ctrl_idx, val, frame); + } + } + } + } + } + return true; +} + +//--------------------------------------------------------- +// enableController +// Enable or disable gui controls. +// Used during automation recording to inhibit gui controls +// from playback controller stream +//--------------------------------------------------------- + +void AudioTrack::enableController(int track_ctrl_id, bool en) +{ + if(track_ctrl_id < AC_PLUGIN_CTL_BASE) + { + if(track_ctrl_id == AC_VOLUME) + enableVolumeController(en); + else + if(track_ctrl_id == AC_PAN) + enablePanController(en); + } + else + { + if(track_ctrl_id < (int)genACnum(MAX_PLUGINS, 0)) // The beginning of the special dssi synth controller block. + _efxPipe->enableController(track_ctrl_id, en); + else + { + if(type() == AUDIO_SOFTSYNTH) + { + SynthI* synth = static_cast(this); + if(synth->synth() && synth->synth()->synthType() == Synth::DSSI_SYNTH) + { + SynthIF* sif = synth->sif(); + if(sif) + { + DssiSynthIF* dssi_sif = static_cast(sif); + int in_ctrl_idx = track_ctrl_id & AC_PLUGIN_CTL_ID_MASK; + dssi_sif->enableController(in_ctrl_idx, en); + } + } + } + } + } +} + +//--------------------------------------------------------- +// controllersEnabled +//--------------------------------------------------------- + +void AudioTrack::controllersEnabled(int track_ctrl_id, bool* en1, bool* en2) const + { + bool en_1 = true, en_2 = true; + if(track_ctrl_id < AC_PLUGIN_CTL_BASE) + { + if(track_ctrl_id == AC_VOLUME) + { + en_1 = _volumeEnCtrl; + en_2 = _volumeEn2Ctrl; + } + else + if(track_ctrl_id == AC_PAN) + { + en_1 = _panEnCtrl; + en_2 = _panEn2Ctrl; + } + } + else + { + if(track_ctrl_id < (int)genACnum(MAX_PLUGINS, 0)) // The beginning of the special dssi synth controller block. + { + _efxPipe->controllersEnabled(track_ctrl_id, &en_1, &en_2); + } + else + { + if(type() == AUDIO_SOFTSYNTH) + { + const SynthI* synth = static_cast(this); + if(synth->synth() && synth->synth()->synthType() == Synth::DSSI_SYNTH) + { + SynthIF* sif = synth->sif(); + if(sif) + { + const DssiSynthIF* dssi_sif = static_cast(sif); + int in_ctrl_idx = track_ctrl_id & AC_PLUGIN_CTL_ID_MASK; + en_1 = dssi_sif->controllerEnabled(in_ctrl_idx); + en_2 = dssi_sif->controllerEnabled2(in_ctrl_idx); + } + } + } + } + } + + if(en1) + *en1 = en_1; + if(en2) + *en2 = en_2; + } + void AudioTrack::recordAutomation(int n, double v) { if(!MusEGlobal::automation) return; if(MusEGlobal::audio->isPlaying()) - _recEvents.push_back(CtrlRecVal(MusEGlobal::song->cPos().frame(), n, v)); + _recEvents.push_back(CtrlRecVal(MusEGlobal::audio->curFramePos(), n, v)); else { if(automationType() == AUTO_WRITE) - _recEvents.push_back(CtrlRecVal(MusEGlobal::song->cPos().frame(), n, v)); + _recEvents.push_back(CtrlRecVal(MusEGlobal::audio->curFramePos(), n, v)); else if(automationType() == AUTO_TOUCH) // In touch mode and not playing. Send directly to controller list. @@ -954,7 +1013,7 @@ if (cl == _controller.end()) return; // Add will replace if found. - cl->second->add(MusEGlobal::song->cPos().frame(), v); + cl->second->add(MusEGlobal::audio->curFramePos(), v); } } } @@ -966,25 +1025,26 @@ if(MusEGlobal::audio->isPlaying()) { if(automationType() == AUTO_TOUCH) - _recEvents.push_back(CtrlRecVal(MusEGlobal::song->cPos().frame(), n, v, ARVT_START)); - else + _recEvents.push_back(CtrlRecVal(MusEGlobal::audio->curFramePos(), n, v, ARVT_START)); + else if(automationType() == AUTO_WRITE) - _recEvents.push_back(CtrlRecVal(MusEGlobal::song->cPos().frame(), n, v)); + _recEvents.push_back(CtrlRecVal(MusEGlobal::audio->curFramePos(), n, v)); } else { if(automationType() == AUTO_TOUCH) // In touch mode and not playing. Send directly to controller list. { + // FIXME: Unsafe? Should sync by sending a message, but that'll really slow it down with large audio bufs. iCtrlList cl = _controller.find(n); if (cl == _controller.end()) return; // Add will replace if found. - cl->second->add(MusEGlobal::song->cPos().frame(), v); + cl->second->add(MusEGlobal::audio->curFramePos(), v); } else if(automationType() == AUTO_WRITE) - _recEvents.push_back(CtrlRecVal(MusEGlobal::song->cPos().frame(), n, v)); + _recEvents.push_back(CtrlRecVal(MusEGlobal::audio->curFramePos(), n, v)); } } @@ -996,8 +1056,8 @@ { if(automationType() == AUTO_TOUCH) { - MusEGlobal::audio->msgAddACEvent(this, n, MusEGlobal::song->cPos().frame(), v); - _recEvents.push_back(CtrlRecVal(MusEGlobal::song->cPos().frame(), n, v, ARVT_STOP)); + MusEGlobal::audio->msgAddACEvent(this, n, MusEGlobal::audio->curFramePos(), v); + _recEvents.push_back(CtrlRecVal(MusEGlobal::audio->curFramePos(), n, v, ARVT_STOP)); } } } @@ -1015,7 +1075,6 @@ if (hasAuxSend()) { int naux = MusEGlobal::song->auxs()->size(); for (int idx = 0; idx < naux; ++idx) { - //QString s("%2\n"); QString s("%2\n"); // Aux fix from Remon, thanks. xml.nput(level, s.arg(idx).arg(_auxSend[idx]).toAscii().constData()); } @@ -1024,26 +1083,7 @@ if (*ip) (*ip)->writeConfiguration(level, xml); } - for (ciCtrlList icl = _controller.begin(); icl != _controller.end(); ++icl) { - const CtrlList* cl = icl->second; - - QString s= QString("controller id=\"%1\" cur=\"%2\"").arg(cl->id()).arg(cl->curVal()).toAscii().constData(); - s += QString(" color=\"%1\" visible=\"%2\"").arg(cl->color().name()).arg(cl->isVisible()); - xml.tag(level++, s.toAscii().constData()); - int i = 0; - for (ciCtrl ic = cl->begin(); ic != cl->end(); ++ic) { - QString s("%1 %2, "); - xml.nput(level, s.arg(ic->second.frame).arg(ic->second.val).toAscii().constData()); - ++i; - if (i >= 4) { - xml.put(level, ""); - i = 0; - } - } - if (i) - xml.put(level, ""); - xml.etag(level--, "controller"); - } + _controller.write(level, xml); } //--------------------------------------------------------- @@ -1117,10 +1157,6 @@ _sendMetronome = xml.parseInt(); else if (tag == "automation") setAutomationType(AutomationType(xml.parseInt())); - // Removed by T356 - // "recfile" tag not saved anymore - //else if (tag == "recfile") - // readRecfile(xml); else if (tag == "controller") { CtrlList* l = new CtrlList(); l->read(xml); @@ -1132,7 +1168,6 @@ // controls would all be set to zero. // But we will allow for the (unintended, useless) possibility of a controller // with no matching plugin control. - //PluginI* p = 0; PluginIBase* p = 0; bool ctlfound = false; unsigned m = l->id() & AC_PLUGIN_CTL_ID_MASK; @@ -1143,7 +1178,7 @@ if(p && m < p->parameters()) ctlfound = true; } - // Support a special block for dssi synth ladspa controllers. p4.0.20 + // Support a special block for dssi synth ladspa controllers. else if(n == MAX_PLUGINS && type() == AUDIO_SOFTSYNTH) { SynthI* synti = dynamic_cast < SynthI* > (this); @@ -1152,6 +1187,7 @@ SynthIF* sif = synti->sif(); if(sif) { +#ifdef DSSI_SUPPORT DssiSynthIF* dsif = dynamic_cast < DssiSynthIF* > (sif); if(dsif) { @@ -1159,6 +1195,7 @@ if(p && m < p->parameters()) ctlfound = true; } +#endif } } } @@ -1187,6 +1224,8 @@ l->setMode(p->ctrlMode(m)); } } + else if (tag == "midiMapper") + _controller.midiControls()->read(xml); else return Track::readProperties(xml, tag); return false; @@ -1285,7 +1324,6 @@ l->setValueType(p->ctrlValueType(i)); l->setMode(p->ctrlMode(i)); l->setCurVal(p->param(i)); - //l->setDefault(p->defaultValue(i)); } } @@ -1301,26 +1339,27 @@ // Ignore volume, pan, mute etc. if(id < AC_PLUGIN_CTL_BASE) continue; + unsigned param = id & AC_PLUGIN_CTL_ID_MASK; int idx = (id >> AC_PLUGIN_CTL_BASE_POW) - 1; - //PluginI* p = (*_efxPipe)[idx]; - // p4.0.20 - PluginIBase* p = 0; + const PluginIBase* p = 0; if(idx >= 0 && idx < PipelineDepth) p = (*_efxPipe)[idx]; // Support a special block for dssi synth ladspa controllers. else if(idx == MAX_PLUGINS && type() == AUDIO_SOFTSYNTH) { - SynthI* synti = dynamic_cast < SynthI* > (this); + const SynthI* synti = dynamic_cast < const SynthI* > (this); if(synti) { SynthIF* sif = synti->sif(); if(sif) { - DssiSynthIF* dsif = dynamic_cast < DssiSynthIF* > (sif); +#ifdef DSSI_SUPPORT + const DssiSynthIF* dsif = dynamic_cast < const DssiSynthIF* > (sif); if(dsif) p = dsif; +#endif } } } @@ -1341,6 +1380,17 @@ while (loop); + // DELETETHIS 40 i DO trust the below. some container's erase functions + // return an iterator to the next, so sometimes you need it=erase(it) + // instead of erase(it++). + // i'm happy with both AS LONG the above does not slow down things. + // when in doubt, i'd prefer the below however. + // so either remove the below completely (if the above works fast), + // or remove the above and use the below. + // CAUTION: the below isn't quite up-to-date! first recheck. + // this "not-being-up-to-date" is another reason for NOT keeping such + // comments! + // FIXME: Although this tested OK, and is the 'official' way to erase while iterating, // I don't trust it. I'm weary of this method. The technique didn't work // in Audio::msgRemoveTracks(), see comments there. @@ -1357,6 +1407,7 @@ ++icl; continue; } + int param = id & AC_PLUGIN_CTL_ID_MASK; int idx = (id >> AC_PLUGIN_CTL_BASE_POW) - 1; PluginI* p = (*_efxPipe)[idx]; @@ -1372,69 +1423,6 @@ */ } -/* -//--------------------------------------------------------- -// writeRouting -//--------------------------------------------------------- - -void AudioTrack::writeRouting(int level, Xml& xml) const -{ - QString n; - if (type() == Track::AUDIO_INPUT) { - ciJackRouteNameCache circ = jackRouteNameCache.find(this); - if(circ != jackRouteNameCache.end()) - { - jackRouteNameMap rm = circ->second; - for(ciJackRouteNameMap cirm = rm.begin(); cirm != rm.end(); ++cirm) - { - n = cirm->second; - if(!n.isEmpty()) - { - Route dst(name(), true, cirm->first); - xml.tag(level++, "Route"); - xml.strTag(level, "srcNode", n); - xml.strTag(level, "dstNode", dst.name()); - xml.etag(level--, "Route"); - } - } - } - } - if(type() == Track::AUDIO_OUTPUT) - { - ciJackRouteNameCache circ = jackRouteNameCache.find(this); - if(circ != jackRouteNameCache.end()) - { - jackRouteNameMap rm = circ->second; - for(ciJackRouteNameMap cirm = rm.begin(); cirm != rm.end(); ++cirm) - { - n = cirm->second; - if(!n.isEmpty()) - { - Route src(name(), false, cirm->first); - xml.tag(level++, "Route"); - xml.strTag(level, "srcNode", src.name()); - xml.strTag(level, "dstNode", n); - xml.etag(level--, "Route"); - } - } - } - } - else - { - const RouteList* rl = &_outRoutes; - for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - if(!r->name().isEmpty()) - { - xml.tag(level++, "Route"); - xml.strTag(level, "srcNode", name()); - xml.strTag(level, "dstNode", r->name()); - xml.etag(level--, "Route"); - } - } - } -} -*/ - //--------------------------------------------------------- // AudioInput //--------------------------------------------------------- @@ -1444,18 +1432,14 @@ { // set Default for Input Ports: _mute = true; - //setVolume(1.0); for (int i = 0; i < MAX_CHANNELS; ++i) jackPorts[i] = 0; - //_channels = 0; - //setChannels(2); } AudioInput::AudioInput(const AudioInput& t, int flags) : AudioTrack(t, flags) { for (int i = 0; i < MAX_CHANNELS; ++i) - //jackPorts[i] = t.jackPorts[i]; jackPorts[i] = 0; // Register ports. @@ -1491,7 +1475,9 @@ // Defer all Jack routes to these copy constructors or assign ! if(ir->type != Route::JACK_ROUTE) continue; - MusEGlobal::audio->msgAddRoute(*ir, Route(this, ir->channel, ir->channels)); + // FIXME Must use msgAddRoute instead of _inRoutes.push_back, because it connects to Jack. + // The track is still fresh has not been added to track lists yet. Will cause audio processing problems ? + MusEGlobal::audio->msgAddRoute(*ir, Route(this, ir->channel, ir->channels)); } } } @@ -1559,17 +1545,13 @@ { for (int i = 0; i < MAX_CHANNELS; ++i) jackPorts[i] = 0; - //_channels = 0; - //setChannels(2); } AudioOutput::AudioOutput(const AudioOutput& t, int flags) : AudioTrack(t, flags) { for (int i = 0; i < MAX_CHANNELS; ++i) - //jackPorts[i] = t.jackPorts[i]; jackPorts[i] = 0; - //_nframes = t._nframes; _nframes = 0; // Register ports. @@ -1605,7 +1587,9 @@ // Defer all Jack routes to these copy constructors or assign ! if(ir->type != Route::JACK_ROUTE) continue; - MusEGlobal::audio->msgAddRoute(Route(this, ir->channel, ir->channels), *ir); + // FIXME Must use msgAddRoute instead of _outRoutes.push_back, because it connects to Jack. + // The track is still fresh has not been added to track lists yet. Will cause audio processing problems ? + MusEGlobal::audio->msgAddRoute(Route(this, ir->channel, ir->channels), *ir); } } } @@ -1724,10 +1708,6 @@ AudioAux::AudioAux() : AudioTrack(AUDIO_AUX) { - //_channels = 0; - //setChannels(2); - //for (int i = 0; i < MAX_CHANNELS; ++i) - // buffer[i] = (i < channels()) ? new float[MusEGlobal::segmentSize] : 0; for(int i = 0; i < MAX_CHANNELS; ++i) { if(i < channels()) @@ -1740,10 +1720,6 @@ AudioAux::AudioAux(const AudioAux& t, int flags) : AudioTrack(t, flags) { - //_channels = 0; - //setChannels(2); - //for (int i = 0; i < MAX_CHANNELS; ++i) - // buffer[i] = (i < channels()) ? new float[MusEGlobal::segmentSize] : 0; for(int i = 0; i < MAX_CHANNELS; ++i) { if(i < channels()) @@ -1757,14 +1733,12 @@ //--------------------------------------------------------- AudioAux::~AudioAux() - { - //for (int i = 0; i < channels(); ++i) - // delete[] buffer[i]; +{ for (int i = 0; i < MAX_CHANNELS; ++i) { if (buffer[i]) free(buffer[i]); - } } +} //--------------------------------------------------------- // read @@ -1803,7 +1777,7 @@ bool AudioAux::getData(unsigned pos, int ch, unsigned samples, float** data) { - // Make sure all the aux-supporting tracks are processed first so aux data is gathered. p4.0.37 + // Make sure all the aux-supporting tracks are processed first so aux data is gathered. TrackList* tl = MusEGlobal::song->tracks(); AudioTrack* track; for(ciTrack it = tl->begin(); it != tl->end(); ++it) @@ -1821,17 +1795,7 @@ for (int i = 0; i < chans; ++i) buff[i] = buff_data + i * samples; - //printf("AudioAux::getData name:%s\n calling copyData on:%s auxRefCount:%d\n", - // name().toLatin1().constData(), track->name().toLatin1().constData(), track->auxRefCount()); - track->copyData(pos, chans, -1, -1, samples, buff); - - /* float* buff[ch]; - float buff_data[samples * ch]; - for (int i = 0; i < ch; ++i) - buff[i] = buff_data + i * samples; - //printf("Audio::process1 calling track->copyData for track:%s\n", track->name().toLatin1()); - track->copyData(pos, ch, -1, -1, samples, buff); */ } } @@ -1848,15 +1812,11 @@ { if(n > channels()) { - //for (int i = channels(); i < n; ++i) - // buffer[i] = new float[MusEGlobal::segmentSize]; for(int i = channels(); i < n; ++i) posix_memalign((void**)(buffer + i), 16, sizeof(float) * MusEGlobal::segmentSize); } else if(n < channels()) { - //for (int i = n; i < channels(); ++i) - // delete[] buffer[i]; for(int i = n; i < channels(); ++i) { if(buffer[i]) @@ -1876,8 +1836,7 @@ if (f == _recordFlag) return true; if (f) { - // do nothing - if (_recFile == 0 && MusEGlobal::song->record()) { + if (_recFile.isNull() && MusEGlobal::song->record()) { // this rec-enables a track if the global arm already was done // the standard case would be that rec-enable be done there prepareRecording(); @@ -1893,13 +1852,11 @@ // recording, the _recFile pointer is made into an event, // then _recFile is made zero before this function is called. QString s = _recFile->path(); - delete _recFile; - setRecFile(0); + setRecFile(NULL); remove(s.toLatin1().constData()); if(MusEGlobal::debugMsg) printf("AudioNode::setRecordFlag1: remove file %s if it exists\n", s.toLatin1().constData()); - //_recFile = 0; } } return true; @@ -1918,7 +1875,7 @@ if(MusEGlobal::debugMsg) printf("prepareRecording for track %s\n", _name.toLatin1().constData()); - if (_recFile == 0) { + if (_recFile.isNull()) { // // create soundfile for recording // diff -Nru muse-2.0~rc2/muse/cliplist/cliplist.cpp muse-2.0/muse/cliplist/cliplist.cpp --- muse-2.0~rc2/muse/cliplist/cliplist.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/cliplist/cliplist.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -38,7 +38,7 @@ namespace MusEGui { extern int mtcType; -enum { COL_NAME=0, COL_REFS, COL_POS, COL_LEN }; +enum { COL_NAME=0, COL_REFS, COL_SAMPLERATE, COL_LEN }; //--------------------------------------------------------- // ClipItem @@ -57,17 +57,17 @@ ClipItem::ClipItem(QTreeWidget* parent, const MusECore::SndFileR& w) : QTreeWidgetItem(parent), _wf(w) { - setText(COL_NAME, _wf.name()); - setText(COL_REFS, QString().setNum(_wf.getRefCount())); - setText(COL_POS, QString().setNum(_wf.samplerate())); - setText(COL_LEN, QString().setNum(_wf.samples())); + setText(COL_NAME, _wf.name()); + setText(COL_REFS, QString().setNum(_wf.getRefCount())); + setText(COL_SAMPLERATE, QString().setNum(_wf.samplerate())); + setText(COL_LEN, QString().setNum(_wf.samples())); } //--------------------------------------------------------- // samples2smpte //--------------------------------------------------------- -#if 0 +#if 0 // DELETETHIS ? static QString samples2smpte(int samples) { double time = double(samples) / double(sampleRate); @@ -96,7 +96,7 @@ } #endif -/* +/* DELETETHIS //--------------------------------------------------------- // text //--------------------------------------------------------- @@ -126,27 +126,11 @@ ClipListEdit::ClipListEdit(QWidget* parent) : TopWin(TopWin::CLIPLIST, parent, "cliplist", Qt::Window) { - //setAttribute(Qt::WA_DeleteOnClose); setWindowTitle(tr("MusE: Clip List Editor")); editor = new ClipListEditorBaseWidget; setCentralWidget(editor); - //editor->view->setColumnAlignment(COL_REFS, Qt::AlignRight); - - // Toolbars --------------------------------------------------------- - QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); - undo_tools->setObjectName("Undo/Redo tools"); - undo_tools->addActions(MusEGlobal::undoRedo->actions()); - - - QToolBar* panic_toolbar = addToolBar(tr("panic")); - panic_toolbar->setObjectName("panic"); - panic_toolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport_toolbar = addToolBar(tr("transport")); - transport_toolbar->setObjectName("transport"); - transport_toolbar->addActions(MusEGlobal::transportAction->actions()); QMenu* settingsMenu = menuBar()->addMenu(tr("Window &Config")); settingsMenu->addAction(subwinAction); @@ -156,9 +140,7 @@ QFontMetrics fm(editor->view->font()); int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0, this); // ddskrjo 0 int w = 2 + fm.width('9') * 9 + fm.width(':') * 3 + fw * 4; - //editor->view->setColumnAlignment(COL_POS, Qt::AlignRight); - editor->view->setColumnWidth(COL_POS, w); - //editor->view->setColumnAlignment(COL_LEN, Qt::AlignRight); + editor->view->setColumnWidth(COL_SAMPLERATE, w); editor->view->setColumnWidth(COL_LEN, w); connect(editor->view, SIGNAL(itemSelectionChanged()), SLOT(clipSelectionChanged())); @@ -169,7 +151,7 @@ connect(editor->len, SIGNAL(valueChanged(const MusECore::Pos&)), SLOT(lenChanged(const MusECore::Pos&))); updateList(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } ClipListEdit::~ClipListEdit() @@ -296,7 +278,7 @@ void ClipListEdit::startChanged(const MusECore::Pos& /*pos*/)//prevent compiler warning: unsused parameter { -// editor->view->triggerUpdate(); +// editor->view->triggerUpdate(); DELETETHIS whole function? } //--------------------------------------------------------- @@ -305,7 +287,7 @@ void ClipListEdit::lenChanged(const MusECore::Pos& /*pos*/) //prevent compiler warning: unsused parameter { -// curClip.setLenFrame(pos.frame()); +// curClip.setLenFrame(pos.frame()); DELETETHIS whole function? // editor->view->triggerUpdate(); } @@ -321,7 +303,7 @@ editor->start->setEnabled(false); editor->len->setEnabled(false); return; -/* +/* DELETETHIS and the above two comments } editor->start->setEnabled(true); editor->len->setEnabled(true); @@ -341,7 +323,7 @@ void ClipListEdit::clicked(QTreeWidgetItem*, int) { -// printf("clicked\n"); +// printf("clicked\n"); DELETETHIS whole function } } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/cobject.cpp muse-2.0/muse/cobject.cpp --- muse-2.0~rc2/muse/cobject.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/cobject.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -27,6 +27,8 @@ #include "globals.h" #include "app.h" #include "shortcuts.h" +#include "songpos_toolbar.h" +#include "sig_tempo_toolbar.h" #include #include @@ -50,6 +52,8 @@ TopWin::TopWin(ToplevelType t, QWidget* parent, const char* name, Qt::WindowFlags f) : QMainWindow(parent, f) { + _initalizing = true; + _isDeleting = false; if (initInited==false) initConfiguration(); @@ -57,8 +61,7 @@ _type=t; setObjectName(QString(name)); - // Allow multiple rows. Tim. - //setDockNestingEnabled(true); + //setDockNestingEnabled(true); // Allow multiple rows. Tim. setIconSize(ICON_SIZE); subwinAction=new QAction(tr("As subwindow"), this); @@ -76,8 +79,12 @@ connect(fullscreenAction, SIGNAL(toggled(bool)), SLOT(setFullscreen(bool))); mdisubwin=NULL; - _sharesToolsAndMenu=_defaultSubwin[_type] ? _sharesWhenSubwin[_type] : _sharesWhenFree[_type]; - if (_defaultSubwin[_type]) + if (!MusEGlobal::unityWorkaround) + _sharesToolsAndMenu=_defaultSubwin[_type] ? _sharesWhenSubwin[_type] : _sharesWhenFree[_type]; + else + _sharesToolsAndMenu=false; + + if (_defaultSubwin[_type] && !MusEGlobal::unityWorkaround) { setIsMdiWin(true); _savedToolbarState=_toolbarNonsharedInit[_type]; @@ -88,12 +95,54 @@ subwinAction->setChecked(isMdiWin()); shareAction->setChecked(_sharesToolsAndMenu); + if (MusEGlobal::unityWorkaround) + { + shareAction->setEnabled(false); + subwinAction->setEnabled(false); + } fullscreenAction->setEnabled(!isMdiWin()); if (mdisubwin) mdisubwin->resize(_widthInit[_type], _heightInit[_type]); else resize(_widthInit[_type], _heightInit[_type]); + + + QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); + undo_tools->setObjectName("Undo/Redo tools"); + undo_tools->addActions(MusEGlobal::undoRedo->actions()); + + QToolBar* panic_toolbar = addToolBar(tr("Panic")); + panic_toolbar->setObjectName("panic"); + panic_toolbar->addAction(MusEGlobal::panicAction); + + QToolBar* transport_toolbar = addToolBar(tr("Transport")); + transport_toolbar->setObjectName("transport"); + transport_toolbar->addActions(MusEGlobal::transportAction->actions()); + + QToolBar* songpos_tb; + songpos_tb = addToolBar(tr("Song Position")); + songpos_tb->setObjectName("Song Position"); + songpos_tb->addWidget(new MusEGui::SongPosToolbarWidget(songpos_tb)); + songpos_tb->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred); + songpos_tb->setContextMenuPolicy(Qt::PreventContextMenu); + + QToolBar* tempo_tb; + tempo_tb = addToolBar(tr("Tempo")); + tempo_tb->setObjectName("Tempo"); + MusEGui::TempoToolbarWidget* tw = new MusEGui::TempoToolbarWidget(tempo_tb); + tempo_tb->addWidget(tw); + + QToolBar* sig_tb; + sig_tb = addToolBar(tr("Signature")); + sig_tb->setObjectName("Signature"); + MusEGui::SigToolbarWidget* sw = new MusEGui::SigToolbarWidget(tempo_tb); + sig_tb->addWidget(sw); + + connect(tw, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(tw, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(sw, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(sw, SIGNAL(escapePressed()), SLOT(focusCanvas())); } @@ -158,6 +207,8 @@ { if (mdisubwin) { + if(mdisubwin->isMaximized()) + mdisubwin->showNormal(); mdisubwin->move(x, y); mdisubwin->resize(width, height); } @@ -255,6 +306,9 @@ void TopWin::setIsMdiWin(bool val) { + if (MusEGlobal::unityWorkaround) + return; + if (val) { if (!isMdiWin()) @@ -330,7 +384,7 @@ { _toolbars.push_back(toolbar); - if (!_sharesToolsAndMenu) + if (!_sharesToolsAndMenu || MusEGlobal::unityWorkaround) QMainWindow::addToolBar(toolbar); else toolbar->hide(); @@ -348,6 +402,9 @@ void TopWin::shareToolsAndMenu(bool val) { + if (MusEGlobal::unityWorkaround) + return; + if (_sharesToolsAndMenu == val) { if (MusEGlobal::debugMsg) printf("TopWin::shareToolsAndMenu() called but has no effect\n"); @@ -516,6 +573,12 @@ xml.etag(level, "topwin"); } +void TopWin::finalizeInit() +{ + MusEGlobal::muse->topwinMenuInited(this); + _initalizing=false; +} + void TopWin::initTopwinState() { if (sharesToolsAndMenu()) diff -Nru muse-2.0~rc2/muse/cobject.h muse-2.0/muse/cobject.h --- muse-2.0~rc2/muse/cobject.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/cobject.h 2012-06-30 19:24:43.000000000 +0200 @@ -62,6 +62,7 @@ ToplevelType type() const { return _type; } static QString typeName(ToplevelType t); + bool initalizing() const { return _initalizing; } bool deleting() const { return _isDeleting; } virtual void readStatus(MusECore::Xml&); @@ -93,6 +94,7 @@ QMdiSubWindow* mdisubwin; bool _sharesToolsAndMenu; std::list _toolbars; + bool _initalizing; void insertToolBar(QToolBar*, QToolBar*); void insertToolBarBreak(QToolBar*); @@ -124,6 +126,7 @@ // which may cause a crash while deleting. bool _isDeleting; + void finalizeInit(); void initTopwinState(); private slots: @@ -138,7 +141,7 @@ void restoreMainwinState(); void storeInitialState() const; virtual void setWindowTitle (const QString&); - + virtual void focusCanvas() { } }; @@ -146,10 +149,6 @@ // ToplevelList //--------------------------------------------------------- -//typedef std::list ToplevelList; -//typedef ToplevelList::iterator iToplevel; -//typedef ToplevelList::const_iterator ciToplevel; - typedef std::list::iterator iToplevel; typedef std::list::const_iterator ciToplevel; diff -Nru muse-2.0~rc2/muse/conf.cpp muse-2.0/muse/conf.cpp --- muse-2.0~rc2/muse/conf.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/conf.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -39,7 +39,6 @@ #include "arrangerview.h" #include "marker/markerview.h" #include "master/lmaster.h" -///#include "transport.h" #include "bigtime.h" #include "arranger.h" #include "conf.h" @@ -171,7 +170,6 @@ case Xml::TagEnd: if (tag == "controller") { MidiPort* port = &MusEGlobal::midiPorts[midiPort]; - //port->addManagedController(channel, id); val = port->limitValToInstrCtlRange(id, val); // The value here will actually be sent to the device LATER, in MidiPort::setMidiDevice() port->setHwCtrlState(channel, id, val); @@ -225,9 +223,6 @@ int idx = 0; QString device; - //QString instrument; - // Changed by Tim. - //QString instrument("generic midi"); // Let's be bold. New users have been confused by generic midi not enabling any patches and controllers. // I had said this may cause HW problems by sending out GM sysEx when really the HW might not be GM. // But this really needs to be done, one way or another. @@ -306,7 +301,6 @@ if(onlyReadChannelState) // p4.0.41 return; - //if (idx > MIDI_PORTS) { if (idx < 0 || idx >= MIDI_PORTS) { fprintf(stderr, "bad midi port %d (>%d)\n", idx, MIDI_PORTS); @@ -315,9 +309,6 @@ MidiDevice* dev = MusEGlobal::midiDevices.find(device); - //if(MusEGlobal::debugMsg && !dev) - // fprintf(stderr, "readConfigMidiPort: device not found %s\n", device.toLatin1().constData()); - if(!dev && type == MidiDevice::JACK_MIDI) { if(MusEGlobal::debugMsg) @@ -357,83 +348,6 @@ } } -/* -//--------------------------------------------------------- -// readConfigMidiSyncInfo -//--------------------------------------------------------- - -static void readConfigMidiSyncInfo(Xml& xml) -{ - QString device; - int idOut = 127; - int idIn = 127; - bool sendMC = false; - bool sendMMC = false; - bool sendMTC = false; - bool recMC = false; - bool recMMC = false; - bool recMTC = false; - - for (;;) { - Xml::Token token = xml.parse(); - if (token == Xml::Error || token == Xml::End) - break; - QString tag = xml.s1(); - switch (token) { - case Xml::TagStart: - if (tag == "device") - device = xml.parse1(); - else if (tag == "idOut") - idOut = (xml.parseInt()); - else if (tag == "idIn") - idIn = xml.parseInt(); - else if (tag == "sendMC") - sendMC = xml.parseInt(); - else if (tag == "sendMMC") - sendMMC = xml.parseInt(); - else if (tag == "sendMTC") - sendMTC = xml.parseInt(); - else if (tag == "recMC") - recMC = xml.parseInt(); - else if (tag == "recMMC") - recMMC = xml.parseInt(); - else if (tag == "recMTC") - recMTC = xml.parseInt(); - else - xml.unknown("midiSyncInfo"); - break; - case Xml::Attribut: - break; - case Xml::TagEnd: - if(tag == "midiSyncInfo") - { - MidiDevice* dev = MusEGlobal::midiDevices.find(device); - if(dev) - { - MidiSyncInfo& si = dev->syncInfo(); - si.setIdIn(idIn); - si.setIdOut(idOut); - - si.setMCIn(recMC); - si.setMMCIn(recMMC); - si.setMTCIn(recMTC); - - si.setMCOut(sendMC); - si.setMMCOut(sendMMC); - si.setMTCOut(sendMTC); - } - else - fprintf(stderr, "Read configuration: Sync device: %s not found\n", device.toLatin1().constData()); - - return; - } - default: - break; - } - } -} -*/ - //--------------------------------------------------------- // loadConfigMetronom //--------------------------------------------------------- @@ -647,6 +561,23 @@ if(MusEGlobal::audioDevice) MusEGlobal::audioDevice->setMaster(MusEGlobal::jackTransportMaster); } + else if (tag == "syncRecFilterPreset") + { + int p = xml.parseInt(); + if(p >= 0 && p < MidiSyncInfo::TYPE_END) + { + MusEGlobal::syncRecFilterPreset = MidiSyncInfo::SyncRecFilterPresetType(p); + if(MusEGlobal::midiSeq) + MusEGlobal::midiSeq->setSyncRecFilterPreset(MusEGlobal::syncRecFilterPreset); + } + } + else if (tag == "syncRecTempoValQuant") + { + double qv = xml.parseDouble(); + MusEGlobal::syncRecTempoValQuant = qv; + if(MusEGlobal::midiSeq) + MusEGlobal::midiSeq->setRecTempoValQuant(qv); + } else if (tag == "mtcoffset") { QString qs(xml.parse1()); QByteArray ba = qs.toLatin1(); @@ -958,6 +889,8 @@ MusEGlobal::config.startMode = xml.parseInt(); else if (tag == "startSong") MusEGlobal::config.startSong = xml.parse1(); + else if (tag == "startSongLoadConfig") + MusEGlobal::config.startSongLoadConfig = xml.parseInt(); else if (tag == "projectBaseFolder") MusEGlobal::config.projectBaseFolder = xml.parse1(); else if (tag == "projectStoreInFolder") @@ -974,52 +907,37 @@ MusEGlobal::config.addHiddenTracks = xml.parseInt(); else if (tag == "unhideTracks") MusEGlobal::config.unhideTracks = xml.parseInt(); + else if (tag == "smartFocus") + MusEGlobal::config.smartFocus = xml.parseInt(); // ---- the following only skips obsolete entries ---- else if ((tag == "arranger") || (tag == "geometryPianoroll") || (tag == "geometryDrumedit")) xml.skip(tag); else if (tag == "mixerVisible") - // MusEGlobal::config.mixerVisible = xml.parseInt(); // Obsolete xml.skip(tag); else if (tag == "geometryMixer") - // MusEGlobal::config.geometryMixer = readGeometry(xml, tag); // Obsolete xml.skip(tag); else if (tag == "txDeviceId") - //txDeviceId = xml.parseInt(); xml.parseInt(); else if (tag == "rxDeviceId") - //rxDeviceId = xml.parseInt(); xml.parseInt(); else if (tag == "txSyncPort") - //txSyncPort= xml.parseInt(); xml.parseInt(); else if (tag == "rxSyncPort") - //rxSyncPort= xml.parseInt(); xml.parseInt(); - else if (tag == "syncgentype") { - // for compatibility - //int syncGenType= xml.parseInt(); - //genMTCSync = syncGenType == 1; - //genMCSync = syncGenType == 2; + else if (tag == "syncgentype") xml.parseInt(); - } else if (tag == "genMTCSync") - //genMTCSync = xml.parseInt(); xml.parseInt(); else if (tag == "genMCSync") - //genMCSync = xml.parseInt(); xml.parseInt(); else if (tag == "genMMC") - //genMMC = xml.parseInt(); xml.parseInt(); else if (tag == "acceptMTC") - //acceptMTC = xml.parseInt(); xml.parseInt(); else if (tag == "acceptMMC") - //acceptMMC = xml.parseInt(); xml.parseInt(); else if (tag == "acceptMC") - //acceptMC = xml.parseInt(); xml.parseInt(); else if ((tag == "samplerate") || (tag == "segmentsize") || (tag == "segmentcount")) xml.parseInt(); @@ -1156,8 +1074,6 @@ // This prevents bogus routes from being saved and propagated in the med file. // Hmm tough decision, should we save if no device? That would preserve routes in case user upgrades HW, // or ALSA reorders or renames devices etc etc, then we have at least kept the track <-> port routes. - //if(((!mport->noInRoute() || !mport->noOutRoute()) && dev) || - //mport->defaultInChannels() || mport->defaultOutChannels() || mport->defaultInChannels() != (1<defaultOutChannels() || (!mport->instrument()->iname().isEmpty() && mport->instrument()->iname() != "GM") || @@ -1181,7 +1097,6 @@ continue; xml.tag(level++, "midiport idx=\"%d\"", i); - //if(mport->defaultInChannels()) if(mport->defaultInChannels() != (1<defaultInChannels()); if(mport->defaultOutChannels()) @@ -1194,14 +1109,9 @@ if (dev) { xml.strTag(level, "name", dev->name()); - //if(dynamic_cast(dev)) if(dev->deviceType() != MidiDevice::ALSA_MIDI) - //xml.intTag(level, "type", MidiDevice::JACK_MIDI); xml.intTag(level, "type", dev->deviceType()); - // Changed by T356. "record" is old and by mistake written as rwFlags here. - // openFlags was read before, but never written here. - //xml.intTag(level, "record", dev->rwFlags() & 0x2 ? 1 : 0); xml.intTag(level, "openFlags", dev->openFlags()); if(dev->deviceType() == MidiDevice::JACK_MIDI) @@ -1274,8 +1184,6 @@ xml.uintTag(level, "minControlProcessPeriod", MusEGlobal::config.minControlProcessPeriod); xml.intTag(level, "guiRefresh", MusEGlobal::config.guiRefresh); - // Removed by Orcan. 20101220 - //xml.strTag(level, "helpBrowser", config.helpBrowser); xml.intTag(level, "extendedMidi", MusEGlobal::config.extendedMidi); xml.intTag(level, "midiExportDivision", MusEGlobal::config.midiDivision); xml.intTag(level, "guiDivision", MusEGlobal::config.guiDivision); @@ -1286,6 +1194,7 @@ xml.intTag(level, "importMidiSplitParts", MusEGlobal::config.importMidiSplitParts); xml.intTag(level, "startMode", MusEGlobal::config.startMode); xml.strTag(level, "startSong", MusEGlobal::config.startSong); + xml.intTag(level, "startSongLoadConfig", MusEGlobal::config.startSongLoadConfig); xml.strTag(level, "projectBaseFolder", MusEGlobal::config.projectBaseFolder); xml.intTag(level, "projectStoreInFolder", MusEGlobal::config.projectStoreInFolder); xml.intTag(level, "useProjectSaveDialog", MusEGlobal::config.useProjectSaveDialog); @@ -1298,8 +1207,6 @@ xml.intTag(level, "midiFilterCtrl3", MusEGlobal::midiFilterCtrl3); xml.intTag(level, "midiFilterCtrl4", MusEGlobal::midiFilterCtrl4); - //xml.intTag(level, "txDeviceId", txDeviceId); - //xml.intTag(level, "rxDeviceId", rxDeviceId); xml.strTag(level, "theme", MusEGlobal::config.style); xml.strTag(level, "styleSheetFile", MusEGlobal::config.styleSheetFile); xml.strTag(level, "externalWavEditor", MusEGlobal::config.externalWavEditor); @@ -1308,6 +1215,7 @@ xml.intTag(level, "popupsDefaultStayOpen", MusEGlobal::config.popupsDefaultStayOpen); xml.intTag(level, "leftMouseButtonCanDecrease", MusEGlobal::config.leftMouseButtonCanDecrease); xml.intTag(level, "rangeMarkerWithoutMMB", MusEGlobal::config.rangeMarkerWithoutMMB); + xml.intTag(level, "smartFocus", MusEGlobal::config.smartFocus); xml.intTag(level, "unhideTracks", MusEGlobal::config.unhideTracks); xml.intTag(level, "addHiddenTracks", MusEGlobal::config.addHiddenTracks); @@ -1320,7 +1228,6 @@ xml.intTag(level, "outputTracksVisible", MusECore::AudioOutput::visible()); xml.intTag(level, "synthTracksVisible", MusECore::SynthI::visible()); - //for (int i = 0; i < 6; ++i) { for (int i = 0; i < NUM_FONTS; ++i) { char buffer[32]; sprintf(buffer, "font%d", i); @@ -1372,28 +1279,15 @@ xml.colorTag(level, "auxTrackBg", MusEGlobal::config.auxTrackBg); xml.colorTag(level, "synthTrackBg", MusEGlobal::config.synthTrackBg); - //xml.intTag(level, "txSyncPort", txSyncPort); - //xml.intTag(level, "rxSyncPort", rxSyncPort); xml.intTag(level, "mtctype", MusEGlobal::mtcType); xml.nput(level, "%02d:%02d:%02d:%02d:%02d\n", MusEGlobal::mtcOffset.h(), MusEGlobal::mtcOffset.m(), MusEGlobal::mtcOffset.s(), MusEGlobal::mtcOffset.f(), MusEGlobal::mtcOffset.sf()); - //xml.uintTag(level, "sendClockDelay", MusEGlobal::syncSendFirstClockDelay); - //xml.intTag(level, "useJackTransport", MusEGlobal::useJackTransport); - //xml.intTag(level, "jackTransportMaster", MusEGlobal::jackTransportMaster); MusEGlobal::extSyncFlag.save(level, xml); -// xml.intTag(level, "genMTCSync", genMTCSync); -// xml.intTag(level, "genMCSync", genMCSync); -// xml.intTag(level, "genMMC", genMMC); -// xml.intTag(level, "acceptMTC", acceptMTC); -// xml.intTag(level, "acceptMMC", acceptMMC); -// xml.intTag(level, "acceptMC", acceptMC); - xml.qrectTag(level, "geometryMain", MusEGlobal::config.geometryMain); xml.qrectTag(level, "geometryTransport", MusEGlobal::config.geometryTransport); xml.qrectTag(level, "geometryBigTime", MusEGlobal::config.geometryBigTime); - //xml.qrectTag(level, "geometryMixer", MusEGlobal::config.geometryMixer); // Obsolete xml.intTag(level, "bigtimeVisible", MusEGlobal::config.bigTimeVisible); xml.intTag(level, "transportVisible", MusEGlobal::config.transportVisible); @@ -1426,7 +1320,7 @@ MusEGui::ClipListEdit::writeConfiguration(level, xml); MusEGui::LMaster::writeConfiguration(level, xml); MusEGui::MarkerView::writeConfiguration(level, xml); - MusEGui::ArrangerView::writeConfiguration(level, xml); + arrangerView->writeConfiguration(level, xml); MusEGui::write_function_dialog_config(level, xml); @@ -1452,39 +1346,6 @@ xml.intTag(level, "midiFilterCtrl3", MusEGlobal::midiFilterCtrl3); xml.intTag(level, "midiFilterCtrl4", MusEGlobal::midiFilterCtrl4); - //xml.intTag(level, "txDeviceId", txDeviceId); - //xml.intTag(level, "rxDeviceId", rxDeviceId); - - //xml.intTag(level, "txSyncPort", txSyncPort); - /* - // To keep old muse versions happy... - bool mcsync = mmc = mtc = false; - for(int sp = 0; sp < MIDI_PORTS; ++sp) - { - MidiSyncTxPort* txPort = &midiSyncTxPorts[sp]; - if(txPort->doMCSync() || txPort->doMMC() || txPort->doMTC()) - { - if(txPort->doMCSync()) - mcsync = true; - if(txPort->doMMC()) - mmc = true; - if(txPort->doMTC()) - mtc = true; - xml.intTag(level, "txSyncPort", sp); - break; - } - } - */ - - //xml.tag(level++, "midiSyncInfo"); - //for(iMusECore::MidiDevice id = MusECore::MusEGlobal::midiDevices.begin(); id != MusECore::MusEGlobal::midiDevices.end(); ++id) - //{ - // MusECore::MidiDevice* md = *id; - // md->syncInfo().write(level, xml, md); - //} - //xml.etag(level, "midiSyncInfo"); - - //xml.intTag(level, "rxSyncPort", rxSyncPort); xml.intTag(level, "mtctype", MusEGlobal::mtcType); xml.nput(level, "%02d:%02d:%02d:%02d:%02d\n", MusEGlobal::mtcOffset.h(), MusEGlobal::mtcOffset.m(), MusEGlobal::mtcOffset.s(), @@ -1492,18 +1353,13 @@ xml.uintTag(level, "sendClockDelay", MusEGlobal::syncSendFirstClockDelay); xml.intTag(level, "useJackTransport", MusEGlobal::useJackTransport.value()); xml.intTag(level, "jackTransportMaster", MusEGlobal::jackTransportMaster); + xml.intTag(level, "syncRecFilterPreset", MusEGlobal::syncRecFilterPreset); + xml.doubleTag(level, "syncRecTempoValQuant", MusEGlobal::syncRecTempoValQuant); MusEGlobal::extSyncFlag.save(level, xml); -// xml.intTag(level, "genMTCSync", genMTCSync); -// xml.intTag(level, "genMCSync", genMCSync); -// xml.intTag(level, "genMMC", genMMC); -// xml.intTag(level, "acceptMTC", acceptMTC); -// xml.intTag(level, "acceptMMC", acceptMMC); -// xml.intTag(level, "acceptMC", acceptMC); - xml.intTag(level, "bigtimeVisible", viewBigtimeAction->isChecked()); xml.intTag(level, "transportVisible", viewTransportAction->isChecked()); - + xml.geometryTag(level, "geometryMain", this); // FINDME: maybe remove this? do we want // the main win to jump around when loading? if (transport) @@ -1540,7 +1396,6 @@ void MusE::configMidiSync() { if (!midiSyncConfig) - //midiSyncConfig = new MusEGui::MidiSyncConfig(this); midiSyncConfig = new MusEGui::MidiSyncConfig; if (midiSyncConfig->isVisible()) { @@ -1716,11 +1571,9 @@ else if (tag == "showSyntiTracks") showSyntiTracks = xml.parseInt(); else - //xml.unknown(name.toLatin1().constData()); xml.unknown("Mixer"); break; case MusECore::Xml::TagEnd: - //if (tag == name) if (tag == "Mixer") return; default: diff -Nru muse-2.0~rc2/muse/confmport.cpp muse-2.0/muse/confmport.cpp --- muse-2.0~rc2/muse/confmport.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/confmport.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -112,7 +112,6 @@ if(defch) MusEGlobal::audio->msgAddRoute(MusECore::Route(no, defch), MusECore::Route(*it, defch)); } - //MusEGlobal::audio->msgUpdateSoloStates(); MusEGlobal::song->update(SC_ROUTE); } } @@ -153,9 +152,9 @@ return; int actid = act->data().toInt(); int defch = MusEGlobal::midiPorts[no].defaultOutChannels(); - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS?? #if 0 - int allch = (1 << MIDI_CHANNELS) - 1; + int allch = (1 << MIDI_CHANNELS) - 1; #endif if(actid == MIDI_CHANNELS + 1) // Apply to all tracks now. @@ -164,6 +163,12 @@ // Tested: Hmm, allow ports with no device since that is a valid situation. if(!MusEGlobal::song->midis()->empty()) // && MusEGlobal::midiPorts[no].device()) { + // Turn off if and when multiple output routes are supported. + #if 1 + if(!defch) // No channels selected? Just return. + return; + #endif + int ret = QMessageBox::question(this, tr("Default output connections"), tr("Are you sure you want to apply to all existing midi tracks now?"), QMessageBox::Ok | QMessageBox::Cancel, @@ -171,7 +176,7 @@ if(ret == QMessageBox::Ok) { MusECore::MidiTrackList* mtl = MusEGlobal::song->midis(); - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS?? #if 0 for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) { @@ -208,7 +213,7 @@ } else { - #if 0 // Turn on if and when multiple output routes are supported. + #if 0 // Turn on if and when multiple output routes are supported. DELETETHIS?? int chbits; if(actid == MIDI_CHANNELS) // Toggle all. { @@ -229,21 +234,31 @@ if(actid < MIDI_CHANNELS) { int chbits = 1 << actid; - // Multiple out routes not supported. Make the setting exclusive to this port - exclude all other ports. - MusECore::setPortExclusiveDefOutChan(no, chbits); - int j = mdevView->rowCount(); - for(int i = 0; i < j; ++i) - mdevView->item(i, DEVCOL_DEF_OUT_CHANS)->setText(MusECore::bitmap2String(i == no ? chbits : 0)); - if(defpup) + // Are we toggling off? + if(chbits & defch) { - QAction* a; - for(int i = 0; i < MIDI_CHANNELS; ++i) + // Just clear this port's default channels. + MusEGlobal::midiPorts[no].setDefaultOutChannels(0); + mdevView->item(item->row(), DEVCOL_DEF_OUT_CHANS)->setText(MusECore::bitmap2String(0)); + } + else + { + // Multiple out routes not supported. Make the setting exclusive to this port - exclude all other ports. + MusECore::setPortExclusiveDefOutChan(no, chbits); + int j = mdevView->rowCount(); + for(int i = 0; i < j; ++i) + mdevView->item(i, DEVCOL_DEF_OUT_CHANS)->setText(MusECore::bitmap2String(i == no ? chbits : 0)); + if(defpup) { - a = defpup->findActionFromData(i); - if(a) - a->setChecked(i == actid); + QAction* a; + for(int i = 0; i < MIDI_CHANNELS; ++i) + { + a = defpup->findActionFromData(i); + if(a) + a->setChecked(i == actid); + } } - } + } } #endif } @@ -257,13 +272,12 @@ { int col = item->column(); QString s = item->text(); - //printf("MPConfig::mdevViewItemRenamed col:%d txt:%s\n", col, s.toLatin1().constData()); if(item == 0) return; switch(col) { // Enabled: Use editor (Not good - only responds if text changed. We need to respond always). - // Disabled: Use pop-up menu. + // Disabled: Use pop-up menu. DELETETHIS? #if 0 case DEVCOL_DEF_IN_CHANS: { @@ -284,7 +298,7 @@ QMessageBox::No); if(ret == QMessageBox::Yes) { - MusECore::MidiTrackList* mtl = MusEGlobal::song->midis(); + MusECore::MidiTrackList* mtl = MusEGlobal::song->midis(); for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) { // Remove all routes from this port to the tracks first. @@ -301,7 +315,7 @@ // Enabled: Use editor (Not good - only responds if text changed. We need to respond always). // Disabled: Use pop-up menu. - // Only turn on if and when multiple output routes are supported. + // Only turn on if and when multiple output routes are supported. DELETETHIS? #if 0 case DEVCOL_DEF_OUT_CHANS: { @@ -368,7 +382,6 @@ } break; default: - //printf("MPConfig::mdevViewItemRenamed unknown column clicked col:%d txt:%s\n", col, s.toLatin1().constData()); break; } } @@ -402,16 +415,10 @@ case DEVCOL_GUI: if (dev == 0) return; - //if (port->hasGui()) if (port->hasNativeGui()) { - //bool v = port->nativeGuiVisible() - //port->instrument()->showGui(!port->guiVisible()); port->instrument()->showNativeGui(!port->nativeGuiVisible()); - //port->instrument()->showNativeGui(!v); - //item->setIcon(port->guiVisible() ? QIcon(*dotIcon) : QIcon(*dothIcon)); item->setIcon(port->nativeGuiVisible() ? QIcon(*dotIcon) : QIcon(*dothIcon)); - //item->setIcon(!v ? QIcon(*dotIcon) : QIcon(*dothIcon)); } return; @@ -428,12 +435,12 @@ if(dev->openFlags() & 2) { item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setIcon(QIcon(*buttondownIcon)); - item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setText(tr("in")); - } + item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setText(tr("in")); + } else { item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setIcon(QIcon()); - item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setText(""); + item->tableWidget()->item(item->row(), DEVCOL_INROUTES)->setText(""); } } return; @@ -451,12 +458,12 @@ if(dev->openFlags() & 1) { item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setIcon(QIcon(*buttondownIcon)); - item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setText(tr("out")); + item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setText(tr("out")); } else { item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setIcon(QIcon()); - item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setText(""); + item->tableWidget()->item(item->row(), DEVCOL_OUTROUTES)->setText(""); } } return; @@ -474,16 +481,12 @@ return; // Only Jack midi devices. - //MusECore::MidiJackDevice* mjd = dynamic_cast(dev); - //if(!mjd) if(dev->deviceType() != MusECore::MidiDevice::JACK_MIDI) return; - //if(!(dev->rwFlags() & ((col == DEVCOL_OUTROUTES) ? 1 : 2))) if(!(dev->openFlags() & ((col == DEVCOL_OUTROUTES) ? 1 : 2))) return; - //MusECore::RouteList* rl = (dev->rwFlags() & 1) ? dev->outRoutes() : dev->inRoutes(); MusECore::RouteList* rl = (col == DEVCOL_OUTROUTES) ? dev->outRoutes() : dev->inRoutes(); QMenu* pup = 0; int gid = 0; @@ -495,53 +498,40 @@ gid = 0; // Jack input ports if device is writable, and jack output ports if device is readable. - //sl = (dev->rwFlags() & 1) ? MusEGlobal::audioDevice->inputPorts(true, _showAliases) : MusEGlobal::audioDevice->outputPorts(true, _showAliases); sl = (col == DEVCOL_OUTROUTES) ? MusEGlobal::audioDevice->inputPorts(true, _showAliases) : MusEGlobal::audioDevice->outputPorts(true, _showAliases); - //for (int i = 0; i < channel; ++i) - //{ - //char buffer[128]; - //snprintf(buffer, 128, "%s %d", tr("Channel").toLatin1().constData(), i+1); - //MenuTitleItem* titel = new MenuTitleItem(QString(buffer)); - //pup->insertItem(titel); - - QAction* act; - - act = pup->addAction(tr("Show first aliases")); - act->setData(gid); - act->setCheckable(true); - act->setChecked(_showAliases == 0); - ++gid; - - act = pup->addAction(tr("Show second aliases")); + QAction* act; + + act = pup->addAction(tr("Show first aliases")); + act->setData(gid); + act->setCheckable(true); + act->setChecked(_showAliases == 0); + ++gid; + + act = pup->addAction(tr("Show second aliases")); + act->setData(gid); + act->setCheckable(true); + act->setChecked(_showAliases == 1); + ++gid; + + pup->addSeparator(); + for(std::list::iterator ip = sl.begin(); ip != sl.end(); ++ip) + { + act = pup->addAction(*ip); act->setData(gid); act->setCheckable(true); - act->setChecked(_showAliases == 1); - ++gid; - pup->addSeparator(); - for(std::list::iterator ip = sl.begin(); ip != sl.end(); ++ip) + MusECore::Route rt(*ip, (col == DEVCOL_OUTROUTES), -1, MusECore::Route::JACK_ROUTE); + for(MusECore::ciRoute ir = rl->begin(); ir != rl->end(); ++ir) { - act = pup->addAction(*ip); - act->setData(gid); - act->setCheckable(true); - - //MusECore::Route dst(*ip, true, i); - //MusECore::Route rt(*ip, (dev->rwFlags() & 1), -1, MusECore::Route::JACK_ROUTE); - MusECore::Route rt(*ip, (col == DEVCOL_OUTROUTES), -1, MusECore::Route::JACK_ROUTE); - for(MusECore::ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + if (*ir == rt) { - if (*ir == rt) - { - act->setChecked(true); - break; - } + act->setChecked(true); + break; } - ++gid; } - //if (i+1 != channel) - // pup->insertSeparator(); - //} + ++gid; + } act = pup->exec(ppt); if(act) @@ -549,7 +539,6 @@ n = act->data().toInt(); if(n == 0) // Show first aliases { - //delete pup; if(_showAliases == 0) _showAliases = -1; else @@ -559,7 +548,6 @@ else if(n == 1) // Show second aliases { - //delete pup; if(_showAliases == 1) _showAliases = -1; else @@ -569,7 +557,6 @@ QString s(act->text()); - //if(dev->rwFlags() & 1) // Writeable if(col == DEVCOL_OUTROUTES) // Writeable { MusECore::Route srcRoute(dev, -1); @@ -589,8 +576,6 @@ MusEGlobal::audio->msgAddRoute(srcRoute, dstRoute); } else - //if(dev->rwFlags() & 2) // Readable - //if(col == DEVCOL_INROUTES) // Readable { MusECore::Route srcRoute(s, false, -1, MusECore::Route::JACK_ROUTE); MusECore::Route dstRoute(dev, -1); @@ -612,24 +597,16 @@ MusEGlobal::audio->msgUpdateSoloStates(); MusEGlobal::song->update(SC_ROUTE); - //delete pup; // FIXME: // Routes can't be re-read until the message sent from msgAddRoute1() // has had time to be sent and actually affected the routes. - ///goto _redisplay; // Go back + //goto _redisplay; // Go back } delete pup; - //iR->setDown(false); // pup->exec() catches mouse release event } - //break; return; case DEVCOL_DEF_IN_CHANS: - // Enabled: Use editor (Not good - only responds if text changed. We need to respond always). - // Disabled: Use pop-up menu. - #if 0 - return; - #else { defpup = new MusEGui::PopupMenu(this, true); defpup->addAction(new MusEGui::MenuTitleItem("Channel", defpup)); @@ -651,9 +628,10 @@ act->setData(MIDI_CHANNELS + 1); // Enable only if there are tracks, and port has a device. // Tested: Hmm, allow ports with no device since that is a valid situation. - act->setEnabled(!MusEGlobal::song->midis()->empty()); // && MusEGlobal::midiPorts[no].device()); + act->setEnabled(!MusEGlobal::song->midis()->empty()); // && MusEGlobal::midiPorts[no].device()); DELETETHIS connect(defpup, SIGNAL(triggered(QAction*)), SLOT(changeDefInputRoutes(QAction*))); + // DELETETHIS 2 //connect(defpup, SIGNAL(aboutToHide()), MusEGlobal::muse, SLOT(routingPopupMenuAboutToHide())); //defpup->popup(QCursor::pos()); defpup->exec(QCursor::pos()); @@ -661,15 +639,8 @@ defpup = 0; } return; - #endif case DEVCOL_DEF_OUT_CHANS: - // Enabled: Use editor (Not good - only responds if text changed. We need to respond always). - // Disabled: Use pop-up menu. - // Only turn on if and when multiple output routes are supported. - #if 0 - return; - #else { defpup = new MusEGui::PopupMenu(this, true); defpup->addAction(new MusEGui::MenuTitleItem("Channel", defpup)); @@ -683,7 +654,7 @@ act->setChecked((1 << i) & chbits); } - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS? #if 0 act = defpup->addAction(tr("Toggle all")); act->setData(MIDI_CHANNELS); @@ -697,27 +668,21 @@ act->setEnabled(!MusEGlobal::song->midis()->empty()); // && MusEGlobal::midiPorts[no].device()); connect(defpup, SIGNAL(triggered(QAction*)), SLOT(changeDefOutputRoutes(QAction*))); - //connect(defpup, SIGNAL(aboutToHide()), MusEGlobal::muse, SLOT(routingPopupMenuAboutToHide())); - //defpup->popup(QCursor::pos()); defpup->exec(QCursor::pos()); delete defpup; defpup = 0; } return; - #endif case DEVCOL_NAME: { - //printf("MPConfig::rbClicked DEVCOL_NAME\n"); - // Did we click in the text area? if((mousepos.x() - ppt.x()) > buttondownIcon->width()) { - //printf("MPConfig::rbClicked starting item rename... enabled?:%d\n", item->renameEnabled(DEVCOL_NAME)); // Start the renaming of the cell... - QModelIndex current = item->tableWidget()->currentIndex(); - if (item->flags() & Qt::ItemIsEditable) - item->tableWidget()->edit(current.sibling(current.row(), DEVCOL_NAME)); + QModelIndex current = item->tableWidget()->currentIndex(); + if (item->flags() & Qt::ItemIsEditable) + item->tableWidget()->edit(current.sibling(current.row(), DEVCOL_NAME)); return; } @@ -748,20 +713,14 @@ int six = 0x30000000; for(MusECore::iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) { - //devALSA = dynamic_cast(*i); - //if(devALSA) if((*i)->deviceType() == MusECore::MidiDevice::ALSA_MIDI) { - //mapALSA.insert( std::pair (std::string(devALSA->name().lower().toLatin1().constData()), ii) ); mapALSA.insert( std::pair (std::string((*i)->name().toLatin1().constData()), aix) ); ++aix; } else if((*i)->deviceType() == MusECore::MidiDevice::JACK_MIDI) { - //devJACK = dynamic_cast(*i); - //if(devJACK) - //mapJACK.insert( std::pair (std::string(devJACK->name().lower().toLatin1().constData()), ii) ); mapJACK.insert( std::pair (std::string((*i)->name().toLatin1().constData()), jix) ); ++jix; } @@ -775,8 +734,7 @@ printf("MPConfig::rbClicked unknown midi device: %s\n", (*i)->name().toLatin1().constData()); } - //int sz = MusEGlobal::midiDevices.size(); - //if(!mapALSA.empty()) + if(!mapALSA.empty()) { pup->addSeparator(); pup->addAction(new MusEGui::MenuTitleItem("ALSA:", pup)); @@ -784,13 +742,13 @@ for(imap i = mapALSA.begin(); i != mapALSA.end(); ++i) { int idx = i->second; - //if(idx > sz) // Sanity check + //if(idx > sz) // Sanity check DELETETHIS 2 // continue; QString s(i->first.c_str()); MusECore::MidiDevice* md = MusEGlobal::midiDevices.find(s, MusECore::MidiDevice::ALSA_MIDI); if(md) { - //if(!dynamic_cast(md)) + //if(!dynamic_cast(md)) DELETETHIS if(md->deviceType() != MusECore::MidiDevice::ALSA_MIDI) continue; @@ -799,8 +757,8 @@ act->setCheckable(true); act->setChecked(md == dev); } - } - } + } + } if(!mapSYNTH.empty()) { @@ -810,13 +768,10 @@ for(imap i = mapSYNTH.begin(); i != mapSYNTH.end(); ++i) { int idx = i->second; - //if(idx > sz) - // continue; QString s(i->first.c_str()); MusECore::MidiDevice* md = MusEGlobal::midiDevices.find(s, MusECore::MidiDevice::SYNTH_MIDI); if(md) { - //if(!dynamic_cast(md)) if(md->deviceType() != MusECore::MidiDevice::SYNTH_MIDI) continue; @@ -828,7 +783,7 @@ } } - //if(!mapJACK.empty()) + if(!mapJACK.empty()) { pup->addSeparator(); pup->addAction(new MusEGui::MenuTitleItem("JACK:", pup)); @@ -836,13 +791,10 @@ for(imap i = mapJACK.begin(); i != mapJACK.end(); ++i) { int idx = i->second; - //if(idx > sz) - // continue; QString s(i->first.c_str()); MusECore::MidiDevice* md = MusEGlobal::midiDevices.find(s, MusECore::MidiDevice::JACK_MIDI); if(md) { - //if(!dynamic_cast(md)) if(md->deviceType() != MusECore::MidiDevice::JACK_MIDI) continue; @@ -852,18 +804,16 @@ act->setChecked(md == dev); } } - } + } act = pup->exec(ppt); if(!act) { delete pup; - //break; return; } n = act->data().toInt(); - //printf("MPConfig::rbClicked n:%d\n", n); MusECore::MidiDevice* sdev = 0; if(n < 0x10000000) @@ -891,11 +841,9 @@ int typ; if(n < 0x20000000) typ = MusECore::MidiDevice::ALSA_MIDI; - else - if(n < 0x30000000) + else if(n < 0x30000000) typ = MusECore::MidiDevice::JACK_MIDI; - else - //if(n < 0x40000000) + else //if(n < 0x40000000) typ = MusECore::MidiDevice::SYNTH_MIDI; sdev = MusEGlobal::midiDevices.find(act->text(), typ); @@ -918,13 +866,10 @@ for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) MusEGlobal::audio->msgRemoveRoute(MusECore::Route(i, allch), MusECore::Route(*it, allch)); - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS? #if 0 for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) MusEGlobal::audio->msgRemoveRoute(MusECore::Route(no, allch), MusECore::Route(*it, allch)); - - //MusEGlobal::audio->msgUpdateSoloStates(); - //MusEGlobal::song->update(SC_ROUTE); #endif break; @@ -936,17 +881,14 @@ for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) // Remove all routes from this port to the tracks. MusEGlobal::audio->msgRemoveRoute(MusECore::Route(no, allch), MusECore::Route(*it, allch)); - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS? #if 0 for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) MusEGlobal::audio->msgRemoveRoute(MusECore::Route(no, allch), MusECore::Route(*it, allch)); - - //MusEGlobal::audio->msgUpdateSoloStates(); - //MusEGlobal::song->update(SC_ROUTE); #endif MusEGlobal::midiSeq->msgSetMidiDevice(port, sdev); - MusEGlobal::muse->changeConfig(true); // save configuration file + MusEGlobal::muse->changeConfig(true); // save configuration file // Add all track routes to/from this port... if(sdev) @@ -957,63 +899,54 @@ { for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) { - // Remove all routes from this port to the tracks first. - //MusEGlobal::audio->msgRemoveRoute(MusECore::Route(no, allch), MusECore::Route(*it, allch)); - // Now connect all the specified routes. + // Connect all the specified routes. if(chbits) MusEGlobal::audio->msgAddRoute(MusECore::Route(no, chbits), MusECore::Route(*it, chbits)); } } - chbits = MusEGlobal::midiPorts[no].defaultOutChannels(); - // Turn on if and when multiple output routes are supported. +// chbits = MusEGlobal::midiPorts[no].defaultOutChannels(); + // Turn on if and when multiple output routes are supported. DELETETHIS? #if 0 for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) { - // Remove all routes from this port to the tracks first. - //MusEGlobal::audio->msgRemoveRoute(MusECore::Route(no, allch), MusECore::Route(*it, allch)); - // Now connect all the specified routes. + // Connect all the specified routes. if(chbits) MusEGlobal::audio->msgAddRoute(MusECore::Route(no, chbits), MusECore::Route(*it, chbits)); } - //MusEGlobal::audio->msgUpdateSoloStates(); - //MusEGlobal::song->update(SC_ROUTE); #else - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - if(chbits & (1 << ch)) - { - MusEGlobal::audio->msgIdle(true); - for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) - { - // Leave drum track channel at current setting. - if((*it)->type() == MusECore::Track::DRUM) - (*it)->setOutPortAndUpdate(no); - else - (*it)->setOutPortAndChannelAndUpdate(no, ch); - } - MusEGlobal::audio->msgIdle(false); - //MusEGlobal::audio->msgUpdateSoloStates(); - //MusEGlobal::song->update(SC_MIDI_TRACK_PROP); - - // Stop at the first output channel found. - break; - } +// REMOVE Tim. +// for(int ch = 0; ch < MIDI_CHANNELS; ++ch) +// if(chbits & (1 << ch)) +// { +// MusEGlobal::audio->msgIdle(true); +// for(MusECore::iMidiTrack it = mtl->begin(); it != mtl->end(); ++it) +// { +// // We are only interested in tracks which use this port being changed now. +// if((*it)->outPort() != no) +// continue; +// // Leave drum track channel at current setting. // REMOVE Tim. +// //if((*it)->type() == MusECore::Track::DRUM) +// // (*it)->setOutPortAndUpdate(no); +// //else +// // (*it)->setOutPortAndChannelAndUpdate(no, ch); +// (*it)->setOutPortAndUpdate(no); +// } +// MusEGlobal::audio->msgIdle(false); +// // Stop at the first output channel found. +// break; +// } #endif } - //MusEGlobal::audio->msgUpdateSoloStates(); - ////MusEGlobal::song->update(SC_ROUTE); - MusEGlobal::audio->msgUpdateSoloStates(); MusEGlobal::song->update(); } } - //break; return; case DEVCOL_INSTR: { if (dev && dev->isSynti()) - //break; return; if (instrPopup == 0) instrPopup = new QMenu(this); @@ -1033,10 +966,9 @@ QAction* act = instrPopup->exec(ppt); if(!act) - //break; return; QString s = act->text(); - item->tableWidget()->item(item->row(), DEVCOL_INSTR)->setText(s); + item->tableWidget()->item(item->row(), DEVCOL_INSTR)->setText(s); for (MusECore::iMidiInstrument i = MusECore::midiInstruments.begin(); i != MusECore::midiInstruments.end(); ++i) { if ((*i)->iname() == s) { @@ -1046,10 +978,8 @@ } MusEGlobal::song->update(); } - //break; return; } - //songChanged(-1); } //--------------------------------------------------------- @@ -1065,11 +995,10 @@ case DEVCOL_PLAY: item->setToolTip(tr("Enable writing")); break; case DEVCOL_INSTR: item->setToolTip(tr("Port instrument")); break; case DEVCOL_NAME: item->setToolTip(tr("Midi device name. Click to edit (Jack)")); break; - //case DEVCOL_ROUTES: item->setToolTip(tr("Jack midi ports")); break; case DEVCOL_INROUTES: item->setToolTip(tr("Connections from Jack Midi outputs")); break; case DEVCOL_OUTROUTES: item->setToolTip(tr("Connections to Jack Midi inputs")); break; case DEVCOL_DEF_IN_CHANS: item->setToolTip(tr("Auto-connect these channels to new midi tracks")); break; - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS? #if 0 case DEVCOL_DEF_OUT_CHANS: item->setToolTip(tr("Auto-connect new midi tracks to these channels")); break; #else @@ -1100,23 +1029,14 @@ " this port number. Click to edit Jack midi name.")); break; case DEVCOL_INSTR: item->setWhatsThis(tr("Instrument connected to port")); break; - //case DEVCOL_ROUTES: - // item->setWhatsThis(tr("Jack midi ports")); break; case DEVCOL_INROUTES: item->setWhatsThis(tr("Connections from Jack Midi output ports")); break; case DEVCOL_OUTROUTES: item->setWhatsThis(tr("Connections to Jack Midi input ports")); break; case DEVCOL_DEF_IN_CHANS: - //item->setWhatsThis(tr("Auto-connect these channels, on this port, to new midi tracks.\n" - // "Example:\n" - // " 1 2 3 channel 1 2 and 3\n" - // " 1-3 same\n" - // " 1-3 5 channel 1 2 3 and 5\n" - // " all all channels\n" - // " none no channels")); break; item->setWhatsThis(tr("Auto-connect these channels, on this port, to new midi tracks.")); break; case DEVCOL_DEF_OUT_CHANS: - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS? #if 0 item->setWhatsThis(tr("Connect new midi tracks to these channels, on this port.")); break; #else @@ -1158,11 +1078,8 @@ mdevView->setSelectionMode(QAbstractItemView::SingleSelection); mdevView->setShowGrid(false); - //popup = 0; instrPopup = 0; defpup = 0; - //_showAliases = -1; // 0: Show first aliases, if available. Nah, stick with -1: none at first. - //_showAliases = 0; // 0: Show first aliases, if available. _showAliases = 1; // 0: Show second aliases, if available. QStringList columnnames; @@ -1199,7 +1116,6 @@ connect(synthList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(addInstanceClicked())); connect(removeInstance, SIGNAL(clicked()), SLOT(removeInstanceClicked())); connect(instanceList, SIGNAL(itemDoubleClicked(QTreeWidgetItem*,int)), SLOT(removeInstanceClicked())); - //songChanged(0); songChanged(SC_CONFIG); } @@ -1224,9 +1140,6 @@ void MPConfig::songChanged(int flags) { - // Is it simply a midi controller value adjustment? Forget it. - //if(flags == SC_MIDI_CONTROLLER) - // return; if(!(flags & (SC_CONFIG | SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED))) return; @@ -1235,7 +1148,7 @@ QTableWidgetItem* sitem = mdevView->currentItem(); if(sitem) { - QString id = sitem->tableWidget()->item(sitem->row(), DEVCOL_NO)->text(); + QString id = sitem->tableWidget()->item(sitem->row(), DEVCOL_NO)->text(); no = atoi(id.toLatin1().constData()) - 1; if(no < 0 || no >= MIDI_PORTS) no = -1; @@ -1251,45 +1164,44 @@ MusECore::MidiDevice* dev = port->device(); QString s; s.setNum(i+1); - QTableWidgetItem* itemno = new QTableWidgetItem(s); - addItem(i, DEVCOL_NO, itemno, mdevView); - itemno->setTextAlignment(Qt::AlignHCenter); - itemno->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* itemstate = new QTableWidgetItem(port->state()); - addItem(i, DEVCOL_STATE, itemstate, mdevView); - itemstate->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* iteminstr = new QTableWidgetItem(port->instrument() ? - port->instrument()->iname() : - tr("")); - addItem(i, DEVCOL_INSTR, iteminstr, mdevView); - iteminstr->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* itemname = new QTableWidgetItem; - addItem(i, DEVCOL_NAME, itemname, mdevView); - itemname->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* itemgui = new QTableWidgetItem; - addItem(i, DEVCOL_GUI, itemgui, mdevView); - itemgui->setTextAlignment(Qt::AlignHCenter); - itemgui->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* itemrec = new QTableWidgetItem; - addItem(i, DEVCOL_REC, itemrec, mdevView); - itemrec->setTextAlignment(Qt::AlignHCenter); - itemrec->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* itemplay = new QTableWidgetItem; - addItem(i, DEVCOL_PLAY, itemplay, mdevView); - itemplay->setTextAlignment(Qt::AlignHCenter); - itemplay->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* itemout = new QTableWidgetItem; - addItem(i, DEVCOL_OUTROUTES, itemout, mdevView); - itemout->setFlags(Qt::ItemIsEnabled); - QTableWidgetItem* itemin = new QTableWidgetItem; - addItem(i, DEVCOL_INROUTES, itemin, mdevView); - itemin->setFlags(Qt::ItemIsEnabled); - //QTableWidgetItem* itemdefin = new QTableWidgetItem(MusECore::bitmap2String(port->defaultInChannels())); + QTableWidgetItem* itemno = new QTableWidgetItem(s); + addItem(i, DEVCOL_NO, itemno, mdevView); + itemno->setTextAlignment(Qt::AlignHCenter); + itemno->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* itemstate = new QTableWidgetItem(port->state()); + addItem(i, DEVCOL_STATE, itemstate, mdevView); + itemstate->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* iteminstr = new QTableWidgetItem(port->instrument() ? + port->instrument()->iname() : + tr("")); + addItem(i, DEVCOL_INSTR, iteminstr, mdevView); + iteminstr->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* itemname = new QTableWidgetItem; + addItem(i, DEVCOL_NAME, itemname, mdevView); + itemname->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* itemgui = new QTableWidgetItem; + addItem(i, DEVCOL_GUI, itemgui, mdevView); + itemgui->setTextAlignment(Qt::AlignHCenter); + itemgui->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* itemrec = new QTableWidgetItem; + addItem(i, DEVCOL_REC, itemrec, mdevView); + itemrec->setTextAlignment(Qt::AlignHCenter); + itemrec->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* itemplay = new QTableWidgetItem; + addItem(i, DEVCOL_PLAY, itemplay, mdevView); + itemplay->setTextAlignment(Qt::AlignHCenter); + itemplay->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* itemout = new QTableWidgetItem; + addItem(i, DEVCOL_OUTROUTES, itemout, mdevView); + itemout->setFlags(Qt::ItemIsEnabled); + QTableWidgetItem* itemin = new QTableWidgetItem; + addItem(i, DEVCOL_INROUTES, itemin, mdevView); + itemin->setFlags(Qt::ItemIsEnabled); // Ignore synth devices. Default input routes make no sense for them (right now). QTableWidgetItem* itemdefin = new QTableWidgetItem((dev && dev->isSynti()) ? QString() : MusECore::bitmap2String(port->defaultInChannels())); addItem(i, DEVCOL_DEF_IN_CHANS, itemdefin, mdevView); - // Enabled: Use editor (not good). Disabled: Use pop-up menu. + // Enabled: Use editor (not good). Disabled: Use pop-up menu. DELETETHIS #if 0 itemdefin->setFlags((dev && dev->isSynti()) ? Qt::NoItemFlags : Qt::ItemIsEditable | Qt::ItemIsEnabled); # else @@ -1302,13 +1214,12 @@ } #endif - // Turn on if and when multiple output routes are supported. + // Turn on if and when multiple output routes are supported. DELETETHIS? #if 0 QTableWidgetItem* itemdefout = new QTableWidgetItem(MusECore::bitmap2String(port->defaultOutChannels())); addItem(i, DEVCOL_DEF_OUT_CHANS, itemdefout, mdevView); itemdefout->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled); #else - //QTableWidgetItem* itemdefout = new QTableWidgetItem(QString("--")); QTableWidgetItem* itemdefout = new QTableWidgetItem(MusECore::bitmap2String(0)); defochs = port->defaultOutChannels(); if(defochs) @@ -1333,7 +1244,6 @@ itemname->setText(dev->name()); // Is it a Jack midi device? Allow renaming. - //if(dynamic_cast(dev)) if (dev->deviceType() == MusECore::MidiDevice::JACK_MIDI) itemname->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled); @@ -1347,46 +1257,38 @@ itemplay->setIcon(QIcon(QPixmap())); } else { - itemname->setText(tr("")); + itemname->setText(tr("")); itemgui->setIcon(QIcon(*dothIcon)); - itemrec->setIcon(QIcon(QPixmap())); - itemplay->setIcon(QIcon(QPixmap())); + itemrec->setIcon(QIcon(QPixmap())); + itemplay->setIcon(QIcon(QPixmap())); } - //if (port->hasGui()) { - if (port->hasNativeGui()) { - //itemgui->setIcon(port->guiVisible() ? QIcon(*dotIcon) : QIcon(*dothIcon)); + if (port->hasNativeGui()) itemgui->setIcon(port->nativeGuiVisible() ? QIcon(*dotIcon) : QIcon(*dothIcon)); - } - else { - itemgui->setIcon(QIcon(QPixmap())); - } + else + itemgui->setIcon(QIcon(QPixmap())); + if (!(dev && dev->isSynti())) - iteminstr->setIcon(QIcon(*buttondownIcon)); - itemname->setIcon(QIcon(*buttondownIcon)); + iteminstr->setIcon(QIcon(*buttondownIcon)); + + itemname->setIcon(QIcon(*buttondownIcon)); - //if(dev && dynamic_cast(dev)) if(dev && dev->deviceType() == MusECore::MidiDevice::JACK_MIDI) { - //item->setPixmap(DEVCOL_ROUTES, *buttondownIcon); - //item->setText(DEVCOL_ROUTES, tr("routes")); - if(dev->rwFlags() & 1) - //if(dev->openFlags() & 1) { if(dev->openFlags() & 1) { itemout->setIcon(QIcon(*buttondownIcon)); - itemout->setText(tr("out")); + itemout->setText(tr("out")); } } if(dev->rwFlags() & 2) - //if(dev->openFlags() & 2) { if(dev->openFlags() & 2) { itemin->setIcon(QIcon(*buttondownIcon)); - itemin->setText(tr("in")); + itemin->setText(tr("in")); } } } @@ -1405,7 +1307,6 @@ item->setText(1, MusECore::synthType2String((*i)->synthType())); s.setNum((*i)->instances()); item->setText(2, s); - //item->setTextAlignment(2, Qt::AlignHCenter); item->setText(3, QString((*i)->name())); item->setText(4, QString((*i)->version())); @@ -1422,7 +1323,6 @@ else s.setNum((*si)->midiPort() + 1); iitem->setText(2, s); - //iitem->setTextAlignment(2, Qt::AlignHCenter); } synthList->resizeColumnToContents(1); mdevView->resizeColumnsToContents(); @@ -1456,7 +1356,7 @@ MusECore::MidiDevice* dev = port->device(); if (dev==0) { MusEGlobal::midiSeq->msgSetMidiDevice(port, si); - MusEGlobal::muse->changeConfig(true); // save configuration file + MusEGlobal::muse->changeConfig(true); // save configuration file MusEGlobal::song->update(); break; } diff -Nru muse-2.0~rc2/muse/confmport.h muse-2.0/muse/confmport.h --- muse-2.0~rc2/muse/confmport.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/confmport.h 2012-06-30 19:24:43.000000000 +0200 @@ -50,7 +50,6 @@ class MPConfig : public QDialog, Ui::SynthConfigBase { Q_OBJECT QMenu* instrPopup; - //QMenu* popup; MusEGui::PopupMenu* defpup; int _showAliases; // -1: None. 0: First aliases. 1: Second aliases etc. void setWhatsThis(QTableWidgetItem *item, int col); diff -Nru muse-2.0~rc2/muse/controlfifo.cpp muse-2.0/muse/controlfifo.cpp --- muse-2.0~rc2/muse/controlfifo.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/controlfifo.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -34,7 +34,6 @@ if (size < CONTROL_FIFO_SIZE) { fifo[wIndex] = event; wIndex = (wIndex + 1) % CONTROL_FIFO_SIZE; - // q_atomic_increment(&size); ++size; return false; } @@ -49,7 +48,6 @@ { ControlEvent event(fifo[rIndex]); rIndex = (rIndex + 1) % CONTROL_FIFO_SIZE; - // q_atomic_decrement(&size); --size; return event; } @@ -71,7 +69,6 @@ void ControlFifo::remove() { rIndex = (rIndex + 1) % CONTROL_FIFO_SIZE; - // q_atomic_decrement(&size); --size; } diff -Nru muse-2.0~rc2/muse/ctrl/ctrlcanvas.cpp muse-2.0/muse/ctrl/ctrlcanvas.cpp --- muse-2.0~rc2/muse/ctrl/ctrlcanvas.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ctrl/ctrlcanvas.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -21,7 +21,7 @@ //========================================================= #include -#include +#include #include #include @@ -113,7 +113,6 @@ CEvent::CEvent(MusECore::Event e, MusECore::MidiPart* pt, int v) { _event = e; - //_state = Normal; _part = pt; _val = v; ex = !e.empty() ? e.tick() : 0; @@ -127,16 +126,11 @@ { if(_event.empty()) return false; - //int y1 = wh - (_val * wh / 128); int y1 = computeY(mc, _val, wh); int tick1 = _event.tick() + _part->tick(); if(ex == -1) - { - //printf("ex:-1 tick1:%d y1:%d r.x:%d r.y:%d r.w:%d r.h:%d\n", tick1, y1, r.x(), r.y(), r.width(), r.height()); - //return tick1 < (r.x() + r.width()) && y1 >= r.y() && y1 < (r.y() + r.height()); return tick1 < (r.x() + r.width()) && y1 < (r.y() + r.height()); - } int tick2 = ex + _part->tick(); @@ -146,18 +140,10 @@ // So that's 3 x tickstep for each velocity line. // Hmm, actually, for better pin-point accuracy just use one tickstep for now. if(MusECore::midiControllerType(mc->num()) == MusECore::MidiController::Velo) - { - //tick1 -= tickstep; - //if(tick1 <= 0) - // tick1 = 0; - //tick2 += 2 * tickstep; - tick2 += tickstep; - } QRect er(tick1, y1, tick2 - tick1, wh - y1); - //printf("t1:%d t2:%d ex:%d r.x:%d r.y:%d r.w:%d r.h:%d er.x:%d er.y:%d er.w:%d er.h:%d\n", - // tick1, tick2, ex, r.x(), r.y(), r.width(), r.height(), er.x(), er.y(), er.width(), er.height()); + return r.intersects(er); } @@ -173,7 +159,7 @@ int tick2 = ex + _part->tick(); return ((tick1 >= x1 && tick1 < x2) - //|| (tick2 >= x1 && tick2 < x2) + //|| (tick2 >= x1 && tick2 < x2) DELETETHIS? || (tick2 > x1 && tick2 < x2) || (tick1 < x1 && tick2 >= x2)); } @@ -209,8 +195,6 @@ pos[1] = 0; pos[2] = 0; noEvents=false; - //_isFirstMove = true; - //_lastDelta = QPoint(0, 0); ctrl = &veloList; _controller = &MusECore::veloCtrl; @@ -320,8 +304,7 @@ void CtrlCanvas::setMidiController(int num) { _cnum = num; - //if(curPart) - partControllers(curPart, _cnum, &_dnum, &_didx, &_controller, &ctrl); + partControllers(curPart, _cnum, &_dnum, &_didx, &_controller, &ctrl); if(_panel) { @@ -338,7 +321,7 @@ void CtrlCanvas::leaveEvent(QEvent*) { - emit xposChanged(MAXINT); + emit xposChanged(INT_MAX); emit yposChanged(-1); } @@ -358,14 +341,9 @@ void CtrlCanvas::deselectAll() { for(iCEvent i = selection.begin(); i != selection.end(); ++i) - { - //(*i)->setState(CEvent::Normal); - //if(!(*i)->event().empty()) - // (*i)->event().setSelected(false); (*i)->setSelected(false); - } + selection.clear(); - ///update(); } //--------------------------------------------------------- @@ -374,12 +352,8 @@ void CtrlCanvas::selectItem(CEvent* e) { - //e->setState(CEvent::Selected); - //if(!e->event().empty()) - // e->event().setSelected(true); e->setSelected(true); selection.push_back(e); - ///update(); } //--------------------------------------------------------- @@ -388,9 +362,6 @@ void CtrlCanvas::deselectItem(CEvent* e) { - //e->setState(CEvent::Normal); - //if(!e->event().empty()) - // e->event().setSelected(false); e->setSelected(false); for (iCEvent i = selection.begin(); i != selection.end(); ++i) { if (*i == e) { @@ -398,7 +369,6 @@ break; } } - ///update(); } //--------------------------------------------------------- @@ -486,19 +456,15 @@ // some other useless calls using SC_CONFIG, which was not used // anywhere else in muse before now, except song header. if((type & (SC_CONFIG | SC_DRUMMAP)) || ((type & (SC_PART_MODIFIED | SC_SELECTION)) && changed)) - { setMidiController(_cnum); - //return; - } - if(!curPart) // p4.0.27 + if(!curPart) return; - if(type & (SC_CONFIG | SC_DRUMMAP | SC_PART_MODIFIED | SC_EVENT_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED)) // p4.0.18 + if(type & (SC_CONFIG | SC_DRUMMAP | SC_PART_MODIFIED | SC_EVENT_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED)) updateItems(); - else - if(type & SC_SELECTION) - updateSelections(); // p4.0.18 + else if(type & SC_SELECTION) + updateSelections(); } //--------------------------------------------------------- @@ -520,7 +486,7 @@ } else { - if(!part) // p4.0.27 + if(!part) { if(mcvl) *mcvl = 0; @@ -545,7 +511,6 @@ { di = (num & ~0xff) | curDrumInstrument; n = (num & ~0xff) | MusEGlobal::drumMap[curDrumInstrument].anote; // construct real controller number - //num = (num & ~0xff) | curDrumInstrument); // construct real controller number mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[curDrumInstrument].port]; } else @@ -603,9 +568,7 @@ MusECore::MidiPart* part = (MusECore::MidiPart*)(p->second); MusECore::EventList* el = part->events(); - //MusECore::MidiController* mc; MusECore::MidiCtrlValList* mcvl; - //partControllers(part, _cnum, 0, 0, &mc, &mcvl); partControllers(part, _cnum, 0, 0, 0, &mcvl); unsigned len = part->lenTick(); @@ -618,7 +581,6 @@ if(_cnum == MusECore::CTRL_VELOCITY && e.type() == MusECore::Note) { - //printf("CtrlCanvas::updateItems MusECore::CTRL_VELOCITY curDrumInstrument:%d\n", curDrumInstrument); newev = 0; if(curDrumInstrument == -1) { @@ -677,7 +639,7 @@ void CtrlCanvas::viewMousePressEvent(QMouseEvent* event) { - if(!_controller) // p4.0.27 + if(!_controller) return; start = event->pos(); @@ -691,7 +653,7 @@ switch (activeTool) { case MusEGui::PointerTool: - if(curPart) // p4.0.27 + if(curPart) { drag = DRAG_LASSO_START; bool do_redraw = false; @@ -785,7 +747,7 @@ void CtrlCanvas::viewMouseMoveEvent(QMouseEvent* event) { - if(!_controller) // p4.0.27 + if(!_controller) return; QPoint pos = event->pos(); @@ -796,7 +758,7 @@ if (!moving) break; drag = DRAG_LASSO; - // weiter mit DRAG_LASSO: + // fallthrough case DRAG_LASSO: lasso.setRect(start.x(), start.y(), dist.x(), dist.y()); redraw(); @@ -807,7 +769,6 @@ break; case DRAG_NEW: - ///newVal(start.x(), pos.x(), pos.y()); newVal(start.x(), start.y(), pos.x(), pos.y()); start = pos; break; @@ -841,11 +802,6 @@ bool ctrlKey = event->modifiers() & Qt::ControlModifier; switch (drag) { - ///case DRAG_RESIZE: - ///case DRAG_NEW: - ///case DRAG_DELETE: - ///MusEGlobal::song->endUndo(SC_EVENT_MODIFIED | SC_EVENT_INSERTED); - ///break; case DRAG_RESIZE: MusEGlobal::song->endUndo(SC_EVENT_MODIFIED); break; @@ -860,38 +816,24 @@ lasso.setRect(-1, -1, -1, -1); case DRAG_LASSO: - if(_controller) // p4.0.27 + if(_controller) { - ///if (!ctrlKey) - /// deselectAll(); lasso = lasso.normalized(); int h = height(); - //bool do_redraw = false; int tickstep = rmapxDev(1); for (iCEvent i = items.begin(); i != items.end(); ++i) { if((*i)->part() != curPart) continue; if ((*i)->intersects(_controller, lasso, tickstep, h)) { if (ctrlKey && (*i)->selected()) - { - //if (!ctrlKey) // ctrlKey p4.0.18 - { - ///deselectItem(*i); - //do_redraw = true; - (*i)->setSelected(false); - } - } + (*i)->setSelected(false); else - { - ///selectItem(*i); - //do_redraw = true; - (*i)->setSelected(true); - } + (*i)->setSelected(true); } } drag = DRAG_OFF; // Let songChanged handle the redraw upon SC_SELECTION. - MusEGlobal::song->update(SC_SELECTION); // + MusEGlobal::song->update(SC_SELECTION); } break; @@ -907,7 +849,7 @@ void CtrlCanvas::newValRamp(int x1, int y1, int x2, int y2) { - if(!curPart || !_controller) // p4.0.27 + if(!curPart || !_controller) return; if(x2 - x1 < 0) @@ -933,8 +875,7 @@ int raster = editor->raster(); if (raster == 1) // set reasonable raster { - //raster = MusEGlobal::config.division/4; - raster = MusEGlobal::config.division/16; // Let's use 64th notes, for a bit finer resolution. p4.0.18 Tim. + raster = MusEGlobal::config.division/16; // Let's use 64th notes, for a bit finer resolution. Tim. useRaster = true; } @@ -1011,11 +952,10 @@ void CtrlCanvas::changeValRamp(int x1, int y1, int x2, int y2) { - if(!curPart || !_controller) // p4.0.27 + if(!curPart || !_controller) return; int h = height(); - bool changed = false; int type = _controller->num(); MusECore::Undo operations; @@ -1053,7 +993,6 @@ ev->setEvent(newEvent); // Do not do port controller values and clone parts. operations.push_back(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, curPart, false, false)); - changed = true; } } else { @@ -1064,7 +1003,6 @@ ev->setEvent(newEvent); // Do port controller values and clone parts. operations.push_back(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, curPart, true, true)); - changed = true; } } } @@ -1080,7 +1018,7 @@ void CtrlCanvas::changeVal(int x1, int x2, int y) { - if(!curPart || !_controller) // p4.0.27 + if(!curPart || !_controller) return; bool changed = false; @@ -1089,7 +1027,6 @@ for (ciCEvent i = items.begin(); i != items.end(); ++i) { if (!(*i)->contains(x1, x2)) - //if (!(*i)->contains(xx1, x2)) continue; CEvent* ev = *i; if(ev->part() != curPart) @@ -1103,8 +1040,7 @@ newEvent.setVelo(newval); ev->setEvent(newEvent); // Indicate no undo, and do not do port controller values and clone parts. - MusEGlobal::audio->msgChangeEvent(event, newEvent, curPart, false, false, false); - ///ev->setEvent(newEvent); + MusEGlobal::audio->msgChangeEvent(event, newEvent, curPart, false, false, false); changed = true; } } @@ -1129,8 +1065,7 @@ newEvent.setB(nval); ev->setEvent(newEvent); // Indicate no undo, and do port controller values and clone parts. - MusEGlobal::audio->msgChangeEvent(event, newEvent, curPart, false, true, true); - ///ev->setEvent(newEvent); + MusEGlobal::audio->msgChangeEvent(event, newEvent, curPart, false, true, true); changed = true; } } @@ -1146,7 +1081,7 @@ void CtrlCanvas::newVal(int x1, int y) { - if(!curPart || !_controller) // p4.0.27 + if(!curPart || !_controller) return; int xx1 = editor->rasterVal1(x1); @@ -1161,7 +1096,6 @@ bool found = false; bool do_redraw = false; - //bool do_selchanged = false; iCEvent ice_tmp; iCEvent prev_ev = items.end(); // End is OK with multi-part, this is just an end 'invalid' marker at first. iCEvent insertPoint = items.end(); // Similar case here. @@ -1172,7 +1106,6 @@ lastpv = ctrl->hwVal(); int partTick = curPart->tick(); - //for (ciCEvent i = items.begin(); i != items.end(); ++i) { for (iCEvent i = items.begin(); i != items.end() ; ) { CEvent* ev = *i; @@ -1191,7 +1124,6 @@ } curPartFound = true; - //int partTick = ev->part()->tick(); MusECore::Event event = ev->event(); if (event.empty()) { @@ -1200,7 +1132,6 @@ continue; } int ax = event.tick() + partTick; - //printf("CtrlCanvas::newVal2 ax:%d xx1:%d xx2:%d len:%d\n", ax, xx1, xx2, curPart->lenTick()); if (ax < xx1) { @@ -1208,31 +1139,17 @@ ++i; continue; } - //if(ax <= xx1) - //{ - // if(type == MusECore::CTRL_PROGRAM && event.dataB() != MusECore::CTRL_VAL_UNKNOWN && ((event.dataB() & 0xffffff) != 0xffffff)) - // lastpv = event.dataB(); - // if(ax < xx1) - // continue; - //} if (ax >= xx2) { insertPoint = i; break; } - // Do not add events which are past the end of the part. - //if(event.tick() >= curPart->lenTick()) - // break; - int nval = newval; if(type == MusECore::CTRL_PROGRAM) { if(event.dataB() == MusECore::CTRL_VAL_UNKNOWN) { - //if(lastpv == MusECore::CTRL_VAL_UNKNOWN) - // lastpv = ctrl->hwVal(); - if(lastpv == MusECore::CTRL_VAL_UNKNOWN) { --nval; @@ -1255,14 +1172,11 @@ { MusECore::Event newEvent = event.clone(); newEvent.setB(nval); - //printf("CtrlCanvas::newVal2 change xx1:%d xx2:%d len:%d\n", xx1, xx2, curPart->lenTick()); ev->setEvent(newEvent); // Indicate no undo, and do port controller values and clone parts. - MusEGlobal::audio->msgChangeEvent(event, newEvent, curPart, false, true, true); - - ///ev->setEvent(newEvent); + MusEGlobal::audio->msgChangeEvent(event, newEvent, curPart, false, true, true); do_redraw = true; } @@ -1273,11 +1187,9 @@ { // delete event - //printf("CtrlCanvas::newVal2 delete xx1:%d xx2:%d len:%d\n", xx1, xx2, curPart->lenTick()); - deselectItem(ev); // Indicate no undo, and do port controller values and clone parts. - MusEGlobal::audio->msgDeleteEvent(event, curPart, false, true, true); + MusEGlobal::audio->msgDeleteEvent(event, curPart, false, true, true); delete (ev); i = items.erase(i); @@ -1292,7 +1204,6 @@ } do_redraw = true; // Let songChanged handle the redraw upon SC_SELECTION. - //do_selchanged = true; // prev_ev = i; } @@ -1323,10 +1234,8 @@ else event.setB(newval); - //printf("CtrlCanvas::newVal2 add tick:%d A:%d B:%d\n", tick, event.dataA(), event.dataB()); - // Indicate no undo, and do port controller values and clone parts. - MusEGlobal::audio->msgAddEvent(event, curPart, false, true, true); + MusEGlobal::audio->msgAddEvent(event, curPart, false, true, true); CEvent* newev = new CEvent(event, curPart, event.dataB()); insertPoint = items.insert(insertPoint, newev); @@ -1357,7 +1266,7 @@ void CtrlCanvas::newVal(int x1, int y1, int x2, int y2) { - if(!curPart || !_controller) // p4.0.27 + if(!curPart || !_controller) return; if(x2 - x1 < 0) @@ -1391,8 +1300,7 @@ int raster = editor->raster(); if (raster == 1) // set reasonable raster { - //raster = MusEGlobal::config.division/4; - raster = MusEGlobal::config.division/16; // Let's use 64th notes, for a bit finer resolution. p4.0.18 Tim. + raster = MusEGlobal::config.division/16; // Let's use 64th notes, for a bit finer resolution. Tim. useRaster = true; } @@ -1432,7 +1340,6 @@ continue; } int x = event.tick() + partTick; - //printf("CtrlCanvas::newVal x:%d xx1:%d xx2:%d len:%d\n", x, xx1, xx2, curPart->lenTick()); if (x < xx1) { @@ -1440,13 +1347,6 @@ ++i; continue; } - //if (x <= xx1) - //{ - // if(type == MusECore::CTRL_PROGRAM && event.dataB() != MusECore::CTRL_VAL_UNKNOWN && ((event.dataB() & 0xffffff) != 0xffffff)) - // lastpv = event.dataB(); - // if (x < xx1) - // continue; - //} if (x >= xx2) { insertPoint = i; @@ -1455,7 +1355,7 @@ deselectItem(ev); // Indicate no undo, and do port controller values and clone parts. - MusEGlobal::audio->msgDeleteEvent(event, curPart, false, true, true); + MusEGlobal::audio->msgDeleteEvent(event, curPart, false, true, true); delete (ev); i = items.erase(i); @@ -1508,7 +1408,7 @@ event.setB(nval); // Indicate no undo, and do port controller values and clone parts. - MusEGlobal::audio->msgAddEvent(event, curPart, false, true, true); + MusEGlobal::audio->msgAddEvent(event, curPart, false, true, true); CEvent* newev = new CEvent(event, curPart, event.dataB()); insertPoint = items.insert(insertPoint, newev); @@ -1539,7 +1439,7 @@ void CtrlCanvas::deleteVal(int x1, int x2, int) { - if(!curPart) // p4.0.27 + if(!curPart) return; if(x2 - x1 < 0) @@ -1596,7 +1496,7 @@ deselectItem(ev); // Indicate no undo, and do port controller values and clone parts. - MusEGlobal::audio->msgDeleteEvent(event, curPart, false, true, true); + MusEGlobal::audio->msgDeleteEvent(event, curPart, false, true, true); delete (ev); i = items.erase(i); @@ -1659,7 +1559,6 @@ { CEvent* e = *i; // Draw selected part velocity events on top of unselected part events. - //if((fg && e->part() != part) || (!fg && e->part() == part)) if(e->part() != part) continue; MusECore::Event event = e->event(); @@ -1673,7 +1572,6 @@ if(fg) { if(e->selected()) - //if(!event.empty() && event.selected()) p.setPen(QPen(Qt::blue, 3)); else p.setPen(QPen(MusEGlobal::config.ctrlGraphFg, 3)); @@ -1685,7 +1583,7 @@ } else { - if(!part) // p4.0.27 + if(!part) return; MusECore::MidiTrack* mt = part->track(); @@ -1715,14 +1613,12 @@ } int x1 = rect.x(); int lval = MusECore::CTRL_VAL_UNKNOWN; - ///noEvents=false; bool selected = false; for (iCEvent i = items.begin(); i != items.end(); ++i) { noEvents=false; CEvent* e = *i; // Draw unselected part controller events (lines) on top of selected part events (bars). - //if((fg && (e->part() == part)) || (!fg && (e->part() != part))) if(e->part() != part) { continue; @@ -1783,13 +1679,11 @@ lval = wh - ((val - min - bias) * wh / (max - min)); } selected = e->selected(); - //selected = !ev.empty() && ev.selected(); } if (lval == MusECore::CTRL_VAL_UNKNOWN) { if(!fg) { p.fillRect(x1, 0, (x+w) - x1, wh, Qt::darkGray); - ///noEvents=true; } } else @@ -1800,7 +1694,6 @@ p.drawLine(x1, lval, x + w, lval); } else - //p.fillRect(x1, lval, (x+w) - x1, wh - lval, MusEGlobal::config.ctrlGraphFg); p.fillRect(x1, lval, (x+w) - x1, wh - lval, selected ? Qt::blue : MusEGlobal::config.ctrlGraphFg); } } @@ -1812,7 +1705,7 @@ void CtrlCanvas::pdraw(QPainter& p, const QRect& rect) { - if(!_controller) // p4.0.27 + if(!_controller) return; int x = rect.x() - 1; // compensate for 3 pixel line width @@ -1857,7 +1750,6 @@ for(MusECore::iPart ip = editor->parts()->begin(); ip != editor->parts()->end(); ++ip) { MusECore::MidiPart* part = (MusECore::MidiPart*)(ip->second); - //if((velo && part == curPart) || (!velo && part != curPart)) if(part == curPart) continue; // Draw items for all parts - other than current part @@ -1924,12 +1816,8 @@ int y = fontMetrics().lineSpacing() + 2; p.drawText(2, y, s); - if (noEvents) { - //p.setFont(MusEGlobal::config.fonts[3]); - //p.setPen(Qt::black); - //p.drawText(width()/2-100,height()/2-10, tr("Use shift + pencil or line tool to draw new events")); + if (noEvents) p.drawText(2 , y * 2, tr("Drawing hint: Hold Ctrl to affect only existing events")); - } } //--------------------------------------------------------- @@ -1943,7 +1831,6 @@ QFontMetrics fm(fontMetrics()); QRect r(fm.boundingRect(_controller ? _controller->name() : QString(""))); - //r.translate(2, 2); // top/left margin int y = fm.lineSpacing() + 2; r.translate(2, y); if (noEvents) @@ -1953,8 +1840,6 @@ r2.translate(2, y * 2); r |= r2; } - - //printf("CtrlCanvas::overlayRect x:%d y:%d w:%d h:%d\n", r.x(), r.y(), r.width(), r.height()); return r; } @@ -1965,7 +1850,6 @@ void CtrlCanvas::draw(QPainter& p, const QRect& rect) { drawTickRaster(p, rect.x(), rect.y(), - //rect.width(), rect.height(), editor->quant()); rect.width(), rect.height(), editor->raster()); //--------------------------------------------------- @@ -1985,6 +1869,7 @@ void CtrlCanvas::setCurDrumInstrument(int di) { curDrumInstrument = di; + // DELETETHIS //printf("CtrlCanvas::setCurDrumInstrument curDrumInstrument:%d\n", curDrumInstrument); // diff -Nru muse-2.0~rc2/muse/ctrl/ctrlcanvas.h muse-2.0/muse/ctrl/ctrlcanvas.h --- muse-2.0~rc2/muse/ctrl/ctrlcanvas.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ctrl/ctrlcanvas.h 2012-06-30 19:24:43.000000000 +0200 @@ -53,12 +53,8 @@ //--------------------------------------------------------- class CEvent { - public: - //enum State { Normal, Selected }; - private: MusECore::Event _event; - //State _state; int _val; MusECore::MidiPart* _part; int ex; @@ -67,17 +63,14 @@ CEvent(MusECore::Event e, MusECore::MidiPart* part, int v); MusECore::Event event() const { return _event; } void setEvent(MusECore::Event& ev) { _event = ev; } - //State state() { return _state; } - //void setState(State s) { _state = s; } - //bool isSelected() { return _state == Selected; } bool selected() const { return !_event.empty() && _event.selected(); } void setSelected(bool v) { if(!_event.empty()) _event.setSelected(v); } int val() const { return _val; } void setVal(int v) { _val = v; } void setEX(int v) { ex = v; } MusECore::MidiPart* part() const { return _part; } - bool contains(int /*x1*/, int /*x2*/) const; - bool intersects(const MusECore::MidiController*, const QRect&, const int /*tickstep*/, const int /*windowHeight*/) const; + bool contains(int x1, int x2) const; + bool intersects(const MusECore::MidiController*, const QRect&, const int tickstep, const int windowHeight) const; int x() { return ex; } }; @@ -111,10 +104,8 @@ MusECore::MidiController* _controller; CtrlPanel* _panel; int _cnum; - // Current real drum controller number (anote). - int _dnum; - // Current real drum controller index. - int _didx; + int _dnum; // Current real drum controller number (anote). + int _didx; // Current real drum controller index. int line1x; int line1y; int line2x; @@ -134,7 +125,6 @@ void changeValRamp(int x1, int x2, int y1, int y2); void newValRamp(int x1, int y1, int x2, int y2); void changeVal(int x1, int x2, int y); - //void newVal(int x1, int x2, int y); void newVal(int x1, int y); void newVal(int x1, int y1, int x2, int y2); void deleteVal(int x1, int x2, int y); @@ -175,8 +165,6 @@ void setMidiController(int); void updateItems(); void updateSelections(); - - //virtual void closeEvent(QCloseEvent*); private slots: void songChanged(int type); diff -Nru muse-2.0~rc2/muse/ctrl/ctrledit.cpp muse-2.0/muse/ctrl/ctrledit.cpp --- muse-2.0~rc2/muse/ctrl/ctrledit.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ctrl/ctrledit.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -86,7 +86,6 @@ { if (canvas->controller()) { xml.tag(level++, "ctrledit"); - //xml.strTag(level, "ctrl", canvas->controller()->name()); xml.intTag(level, "ctrlnum", canvas->controller()->num()); xml.tag(level, "/ctrledit"); } @@ -106,23 +105,8 @@ case MusECore::Xml::End: return; case MusECore::Xml::TagStart: - if (tag == "ctrl") { - xml.parse1(); // Obsolete. - /* - QString name = xml.parse1(); - int portno = canvas->track()->outPort(); - MusECore::MidiPort* port = &midiPorts[portno]; - MusECore::MidiInstrument* instr = port->instrument(); - MusECore::MidiControllerList* mcl = instr->controller(); - - for (MusECore::iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) { - if (ci->second->name() == name) { - canvas->setController(ci->second->num()); - break; - } - } - */ - } + if (tag == "ctrl") + xml.parse1(); // Obsolete. else if (tag == "ctrlnum") { int num = xml.parseInt(); canvas->setController(num); diff -Nru muse-2.0~rc2/muse/ctrl/ctrledit.h muse-2.0/muse/ctrl/ctrledit.h --- muse-2.0~rc2/muse/ctrl/ctrledit.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ctrl/ctrledit.h 2012-06-30 19:24:43.000000000 +0200 @@ -59,7 +59,7 @@ void setXPos(int val) { canvas->setXPos(val); } void setXMag(int val) { canvas->setXMag(val); } void setCanvasWidth(int w); - void setController(int /*n*/); + void setController(int n); signals: void timeChanged(unsigned); diff -Nru muse-2.0~rc2/muse/ctrl/ctrlpanel.cpp muse-2.0/muse/ctrl/ctrlpanel.cpp --- muse-2.0~rc2/muse/ctrl/ctrlpanel.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ctrl/ctrlpanel.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -26,7 +26,6 @@ #include "ctrlpanel.h" #include "ctrlcanvas.h" -//#include #include #include #include @@ -69,8 +68,6 @@ { setObjectName(name); inHeartBeat = true; - //ctrlMainPop = 0; - //ctrlSubPop = 0; editor = e; setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QVBoxLayout* vbox = new QVBoxLayout; @@ -89,16 +86,16 @@ dbox->setContentsMargins(0, 0, 0, 0); selCtrl = new QPushButton(tr("S")); + selCtrl->setFocusPolicy(Qt::NoFocus); selCtrl->setFont(MusEGlobal::config.fonts[3]); selCtrl->setFixedHeight(20); selCtrl->setSizePolicy( QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed)); selCtrl->setToolTip(tr("select controller")); - ///pop = new QMenu; - // destroy button QPushButton* destroy = new QPushButton(tr("X")); + destroy->setFocusPolicy(Qt::NoFocus); destroy->setFont(MusEGlobal::config.fonts[3]); destroy->setFixedHeight(20); destroy->setSizePolicy( @@ -125,7 +122,7 @@ _dl = new MusEGui::DoubleLabel(-1.0, 0.0, +127.0); _dl->setPrecision(0); - _dl->setToolTip(tr("double click on/off")); + _dl->setToolTip(tr("ctrl-double-click on/off")); _dl->setSpecialText(tr("off")); _dl->setFont(MusEGlobal::config.fonts[1]); _dl->setBackgroundRole(QPalette::Mid); @@ -137,9 +134,8 @@ connect(_knob, SIGNAL(sliderMoved(double,int)), SLOT(ctrlChanged(double))); connect(_knob, SIGNAL(sliderRightClicked(const QPoint&, int)), SLOT(ctrlRightClicked(const QPoint&, int))); - //connect(_knob, SIGNAL(sliderReleased(int)), SLOT(ctrlReleased(int))); connect(_dl, SIGNAL(valueChanged(double,int)), SLOT(ctrlChanged(double))); - connect(_dl, SIGNAL(doubleClicked(int)), SLOT(labelDoubleClicked())); + connect(_dl, SIGNAL(ctrlDoubleClicked(int)), SLOT(labelDoubleClicked())); bbox->addStretch(); bbox->addWidget(selCtrl); @@ -168,7 +164,6 @@ if(_track && _ctrl && _dnum != -1) { - //if(_dnum != MusECore::CTRL_VELOCITY && _dnum != MusECore::CTRL_PROGRAM) if(_dnum != MusECore::CTRL_VELOCITY) { int outport; @@ -200,7 +195,7 @@ else // Auto bias... v -= _ctrl->bias(); - if(double(v) != _knob->value()) + if (double(v) != _knob->value()) { // Added by Tim. p3.3.6 //printf("CtrlPanel::heartBeat setting knob\n"); @@ -209,14 +204,11 @@ } } } - else - if(v != _val) + else if(v != _val) { _val = v; if(v == MusECore::CTRL_VAL_UNKNOWN || ((_dnum == MusECore::CTRL_PROGRAM) && ((v & 0xff) == 0xff) )) { - // MusEGui::DoubleLabel ignores the value if already set... - //_dl->setValue(double(_ctrl->minVal() - 1)); _dl->setValue(_dl->off() - 1.0); } else @@ -227,9 +219,6 @@ // Auto bias... v -= _ctrl->bias(); - // Added by Tim. p3.3.6 - //printf("CtrlPanel::heartBeat setting knob and label\n"); - _knob->setValue(double(v)); _dl->setValue(double(v)); } @@ -275,25 +264,22 @@ // (or the controller's initial value?) to 'turn on' the controller. if(lastv == MusECore::CTRL_VAL_UNKNOWN || ((lastv & 0xffffff) == 0xffffff)) { - //int kiv = _ctrl->initVal()); int kiv = lrint(_knob->value()); --kiv; kiv &= 0x7f; kiv |= 0xffff00; - //MusECore::MidiPlayEvent ev(MusEGlobal::song->cpos(), outport, chan, MusECore::ME_CONTROLLER, _dnum, kiv); MusECore::MidiPlayEvent ev(0, outport, chan, MusECore::ME_CONTROLLER, _dnum, kiv); MusEGlobal::audio->msgPlayMidiEvent(&ev); } else { - //MusECore::MidiPlayEvent ev(MusEGlobal::song->cpos(), outport, chan, MusECore::ME_CONTROLLER, _dnum, lastv); MusECore::MidiPlayEvent ev(0, outport, chan, MusECore::ME_CONTROLLER, _dnum, lastv); MusEGlobal::audio->msgPlayMidiEvent(&ev); } } else { - //if((curv & 0xffff00) == 0xffff00) + //if((curv & 0xffff00) == 0xffff00) DELETETHIS? //{ ////if(mp->hwCtrlState(chan, _dnum) != MusECore::CTRL_VAL_UNKNOWN) MusEGlobal::audio->msgSetHwCtrlState(mp, chan, _dnum, MusECore::CTRL_VAL_UNKNOWN); @@ -313,28 +299,24 @@ // (or the controller's initial value?) to 'turn on' the controller. if(lastv == MusECore::CTRL_VAL_UNKNOWN) { - //int kiv = _ctrl->initVal()); int kiv = lrint(_knob->value()); if(kiv < _ctrl->minVal()) kiv = _ctrl->minVal(); if(kiv > _ctrl->maxVal()) kiv = _ctrl->maxVal(); kiv += _ctrl->bias(); - //MusECore::MidiPlayEvent ev(MusEGlobal::song->cpos(), outport, chan, MusECore::ME_CONTROLLER, _dnum, kiv); MusECore::MidiPlayEvent ev(0, outport, chan, MusECore::ME_CONTROLLER, _dnum, kiv); MusEGlobal::audio->msgPlayMidiEvent(&ev); } else { - //MusECore::MidiPlayEvent ev(MusEGlobal::song->cpos(), outport, chan, MusECore::ME_CONTROLLER, _dnum, lastv); MusECore::MidiPlayEvent ev(0, outport, chan, MusECore::ME_CONTROLLER, _dnum, lastv); MusEGlobal::audio->msgPlayMidiEvent(&ev); } } else { - //if(mp->hwCtrlState(chan, _dnum) != MusECore::CTRL_VAL_UNKNOWN) - MusEGlobal::audio->msgSetHwCtrlState(mp, chan, _dnum, MusECore::CTRL_VAL_UNKNOWN); + MusEGlobal::audio->msgSetHwCtrlState(mp, chan, _dnum, MusECore::CTRL_VAL_UNKNOWN); } } MusEGlobal::song->update(SC_MIDI_CONTROLLER); @@ -378,7 +360,6 @@ ival |= 0xffff00; else ival |= (curval & 0xffff00); - //MusECore::MidiPlayEvent ev(MusEGlobal::song->cpos(), outport, chan, MusECore::ME_CONTROLLER, _dnum, ival); MusECore::MidiPlayEvent ev(0, outport, chan, MusECore::ME_CONTROLLER, _dnum, ival); MusEGlobal::audio->msgPlayMidiEvent(&ev); } @@ -386,7 +367,6 @@ // Shouldn't happen, but... if((ival < _ctrl->minVal()) || (ival > _ctrl->maxVal())) { - //if(mp->hwCtrlState(chan, _dnum) != MusECore::CTRL_VAL_UNKNOWN) if(curval != MusECore::CTRL_VAL_UNKNOWN) MusEGlobal::audio->msgSetHwCtrlState(mp, chan, _dnum, MusECore::CTRL_VAL_UNKNOWN); } @@ -395,7 +375,6 @@ // Auto bias... ival += _ctrl->bias(); - //MusECore::MidiPlayEvent ev(MusEGlobal::song->cpos(), outport, chan, MusECore::ME_CONTROLLER, _dnum, ival); MusECore::MidiPlayEvent ev(0, outport, chan, MusECore::ME_CONTROLLER, _dnum, ival); MusEGlobal::audio->msgPlayMidiEvent(&ev); } @@ -438,7 +417,6 @@ ch = _track->outChannel(); } - //if(_dnum == MusECore::CTRL_VELOCITY || _dnum == MusECore::CTRL_PROGRAM) if(_dnum == MusECore::CTRL_VELOCITY) { _knob->setEnabled(false); @@ -460,7 +438,6 @@ _val = v; _knob->setRange(double(mn), double(mx), 1.0); _dl->setRange(double(mn), double(mx)); - //_dl->setOff(double(mn - 1)); if(v == MusECore::CTRL_VAL_UNKNOWN || ((v & 0xffffff) == 0xffffff)) { int lastv = mp->lastValidHWCtrlState(ch, _dnum); @@ -477,7 +454,6 @@ if(v > 128) v = 128; - //dlv = mn - 1; dlv = _dl->off() - 1.0; } else @@ -496,7 +472,6 @@ _val = v; _knob->setRange(double(mn), double(mx), 1.0); _dl->setRange(double(mn), double(mx)); - //_dl->setOff(double(mn - 1)); if(v == MusECore::CTRL_VAL_UNKNOWN) { int lastv = mp->lastValidHWCtrlState(ch, _dnum); @@ -509,7 +484,6 @@ } else v = lastv - _ctrl->bias(); - //dlv = mn - 1; dlv = _dl->off() - 1.0; } else @@ -541,7 +515,12 @@ setFixedHeight(h); } -#if 0 +#if 0 // DELETETHIS. yeah, really! +// when flo added the new style drumtracks in trunk, he changed a +// lot of things. he didn't update that disabled area here, so +// after releasing 2.0, when we continue developing on trunk, +// then the below code is not only disabled but INVALID (as in WRONG) + struct CI { QString s; bool used; @@ -962,34 +941,18 @@ void CtrlPanel::ctrlRightClicked(const QPoint& p, int /*id*/) { - //if(!_knob->selectedFaceColor()) - // _knob->selectFaceColor(true); - //if(_dnum == -1) - // return; if(!editor->curCanvasPart() || !_ctrl) return; int cdi = editor->curDrumInstrument(); int ctlnum = _ctrl->num(); if(_track->type() == MusECore::Track::DRUM && ((ctlnum & 0xff) == 0xff) && cdi != -1) - //ctlnum = (ctlnum & ~0xff) | MusEGlobal::drumMap[cdi].enote; + //ctlnum = (ctlnum & ~0xff) | MusEGlobal::drumMap[cdi].enote; DELETETHIS or which of them is correct? ctlnum = (ctlnum & ~0xff) | cdi; MusECore::MidiPart* part = dynamic_cast(editor->curCanvasPart()); MusEGlobal::song->execMidiAutomationCtlPopup(0, part, p, ctlnum); } -/* -//--------------------------------------------------------- -// ctrlReleased -//--------------------------------------------------------- - -void CtrlPanel::ctrlReleased(int id) -{ - //if(_knob->selectedFaceColor()) - // _knob->selectFaceColor(false); -} -*/ - } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/ctrl/ctrlpanel.h muse-2.0/muse/ctrl/ctrlpanel.h --- muse-2.0~rc2/muse/ctrl/ctrlpanel.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ctrl/ctrlpanel.h 2012-06-30 19:24:43.000000000 +0200 @@ -45,7 +45,6 @@ class CtrlPanel: public QWidget { Q_OBJECT - //QMenu* pop; QPushButton* selCtrl; MidiEditor* editor; @@ -67,7 +66,6 @@ void ctrlChanged(double val); void labelDoubleClicked(); void ctrlRightClicked(const QPoint& p, int id); - //void ctrlReleased(int id); protected slots: virtual void heartBeat(); diff -Nru muse-2.0~rc2/muse/ctrl.cpp muse-2.0/muse/ctrl.cpp --- muse-2.0~rc2/muse/ctrl.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/ctrl.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -6,7 +6,7 @@ // controller handling for mixer automation // // (C) Copyright 2003 Werner Schweer (ws@seh.de) -// (C) Copyright 2011 Time E. Real (terminator356 on users dot sourceforge dot net) +// (C) Copyright 2011-2012 Tim E. Real (terminator356 on users dot sourceforge dot net) // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -24,18 +24,21 @@ // //========================================================= +// Turn on debugging messages +//#define _CTRL_DEBUG_ #include #include -//#include +#include + +#include #include "gconfig.h" #include "fastlog.h" -#include "math.h" #include "globals.h" #include "ctrl.h" +#include "midictrl.h" #include "xml.h" -#include "audio.h" namespace MusECore { @@ -50,9 +53,269 @@ _visible = false; } +//--------------------------------------------------------- +// midi2AudioCtrlValue +// Apply mapper if it is non-null +//--------------------------------------------------------- + +double midi2AudioCtrlValue(const CtrlList* audio_ctrl_list, const MidiAudioCtrlStruct* /*mapper*/, int midi_ctlnum, int midi_val) +{ + double fmin, fmax; + audio_ctrl_list->range(&fmin, &fmax); + double frng = fmax - fmin; // The audio control range. + + MidiController::ControllerType t = midiControllerType(midi_ctlnum); + CtrlValueType aud_t = audio_ctrl_list->valueType(); + + #ifdef _CTRL_DEBUG_ + printf("midi2AudioCtrlValue: midi_ctlnum:%d val:%d fmin:%f fmax:%f\n", midi_ctlnum, midi_val, fmin, fmax); + #endif + + int ctlmn = 0; + int ctlmx = 127; + + int bval = midi_val; + switch(t) + { + case MidiController::RPN: + case MidiController::NRPN: + case MidiController::Controller7: + ctlmn = 0; + ctlmx = 127; + break; + case MidiController::Controller14: + case MidiController::RPN14: + case MidiController::NRPN14: + ctlmn = 0; + ctlmx = 16383; + break; + case MidiController::Program: + ctlmn = 0; + ctlmx = 0xffffff; + break; + case MidiController::Pitch: + ctlmn = -8192; + ctlmx = 8191; + bval += 8192; + break; + case MidiController::Velo: // cannot happen + default: + break; + } + + double fictlrng = double(ctlmx - ctlmn); // Float version of the integer midi range. + double normval = double(bval) / fictlrng; // Float version of the normalized midi value. + // ---------- TODO: Do stuff with the mapper, if supplied. + + if(aud_t == VAL_LOG) + { + // FIXME: Although this should be correct, some sliders show "---" at top end, some don't. + // Possibly because of use of fast_log10 in value(), and in sliders and automation IIRC. + fmin = 20.0*log10(fmin); + fmax = 20.0*log10(fmax); + frng = fmax - fmin; + double ret = exp10((normval * frng + fmin) / 20.0); + #ifdef _CTRL_DEBUG_ + printf("midi2AudioCtrlValue: is VAL_LOG normval:%f frng:%f returning:%f\n", normval, frng, ret); + #endif + return ret; + } + + if(aud_t == VAL_LINEAR) + { + double ret = normval * frng + fmin; + #ifdef _CTRL_DEBUG_ + printf("midi2AudioCtrlValue: is VAL_LINEAR normval:%f frng:%f returning:%f\n", normval, frng, ret); + #endif + return ret; + } + + if(aud_t == VAL_INT) + { + double ret = int(normval * frng + fmin); + #ifdef _CTRL_DEBUG_ + printf("midi2AudioCtrlValue: is VAL_INT returning:%f\n", ret); + #endif + return ret; + } + + if(aud_t == VAL_BOOL) + { + #ifdef _CTRL_DEBUG_ + printf("midi2AudioCtrlValue: is VAL_BOOL\n"); + #endif + //if(midi_val > ((ctlmx - ctlmn)/2 + ctlmn)) + if((normval * frng + fmin) > (frng/2.0 + fmin)) + return fmax; + else + return fmin; + } + + printf("midi2AudioCtrlValue: unknown audio controller type:%d\n", aud_t); + return 0.0; +} //--------------------------------------------------------- +// Midi to audio controller stuff +//--------------------------------------------------------- + +MidiAudioCtrlStruct::MidiAudioCtrlStruct() +{ + _audio_ctrl_id = 0; +}; + +MidiAudioCtrlStruct::MidiAudioCtrlStruct(int audio_ctrl_id) : _audio_ctrl_id(audio_ctrl_id) +{ +}; + +MidiAudioCtrlMap_idx_t MidiAudioCtrlMap::index_hash(int midi_port, int midi_chan, int midi_ctrl_num) const +{ + return ((MidiAudioCtrlMap_idx_t(midi_port) & 0xff) << 24) | + ((MidiAudioCtrlMap_idx_t(midi_chan) & 0xf) << 20) | + (MidiAudioCtrlMap_idx_t(midi_ctrl_num) & 0xfffff); +} + +void MidiAudioCtrlMap::hash_values(MidiAudioCtrlMap_idx_t hash, int* midi_port, int* midi_chan, int* midi_ctrl_num) const +{ + if(midi_ctrl_num) + *midi_ctrl_num = hash & 0xfffff; + if(midi_chan) + *midi_chan = (hash >> 20) & 0xf; + if(midi_port) + *midi_port = (hash >> 24) & 0xff; +} + +iMidiAudioCtrlMap MidiAudioCtrlMap::add_ctrl_struct(int midi_port, int midi_chan, int midi_ctrl_num, + const MidiAudioCtrlStruct& macs) +{ + MidiAudioCtrlMap_idx_t h = index_hash(midi_port, midi_chan, midi_ctrl_num); + std::pair range = equal_range(h); + for(iMidiAudioCtrlMap imacp = range.first; imacp != range.second; ++imacp) + if(imacp->second.audioCtrlId() == macs.audioCtrlId()) + return imacp; + return insert(std::pair(h, macs)); +} + +void MidiAudioCtrlMap::erase_ctrl_struct(int midi_port, int midi_chan, int midi_ctrl_num, int audio_ctrl_id) +{ + MidiAudioCtrlMap_idx_t h = index_hash(midi_port, midi_chan, midi_ctrl_num); + std::pair range = equal_range(h); + MidiAudioCtrlMap macm; + macm.insert(range.first, range.second); + for(iMidiAudioCtrlMap imacm = macm.begin(); imacm != macm.end(); ++imacm) + if(imacm->second.audioCtrlId() == audio_ctrl_id) + erase(imacm); +} + +void MidiAudioCtrlMap::find_audio_ctrl_structs(int audio_ctrl_id, AudioMidiCtrlStructMap* amcs) //const +{ + for(iMidiAudioCtrlMap imacm = begin(); imacm != end(); ++imacm) + if(imacm->second.audioCtrlId() == audio_ctrl_id) + amcs->push_back(imacm); +} + +void MidiAudioCtrlMap::write(int level, Xml& xml) const +{ + for(ciMidiAudioCtrlMap imacm = begin(); imacm != end(); ++imacm) + { + int port, chan, mctrl; + hash_values(imacm->first, &port, &chan, &mctrl); + int actrl = imacm->second.audioCtrlId(); + QString s= QString("midiMapper port=\"%1\" ch=\"%2\" mctrl=\"%3\" actrl=\"%4\"") + .arg(port) + .arg(chan) + .arg(mctrl) + .arg(actrl); + xml.tag(level++, s.toAscii().constData()); + + // TODO + //const MidiAudioCtrlStruct& macs = imacs->second; + //xml.intTag(level, "macs ???", macs.); + + xml.etag(level--, "midiMapper"); + } +} + +//--------------------------------------------------------- +// read +//--------------------------------------------------------- + +void MidiAudioCtrlMap::read(Xml& xml) + { + int port = -1, chan = -1, midi_ctrl = -1; + MidiAudioCtrlStruct macs(-1); + + QLocale loc = QLocale::c(); + bool ok; + int errcount = 0; + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Attribut: + if (tag == "port") + { + port = loc.toInt(xml.s2(), &ok); + if(!ok) + { + ++errcount; + printf("MidiAudioCtrlPortMap::read failed reading port string: %s\n", xml.s2().toLatin1().constData()); + } + } + else if (tag == "ch") + { + chan = loc.toInt(xml.s2(), &ok); + if(!ok) + { + ++errcount; + printf("MidiAudioCtrlPortMap::read failed reading ch string: %s\n", xml.s2().toLatin1().constData()); + } + } + else if (tag == "mctrl") + { + midi_ctrl = loc.toInt(xml.s2(), &ok); + if(!ok) + { + ++errcount; + printf("MidiAudioCtrlPortMap::read failed reading mctrl string: %s\n", xml.s2().toLatin1().constData()); + } + } + else if (tag == "actrl") + { + macs.setAudioCtrlId(loc.toInt(xml.s2(), &ok)); + if(!ok) + { + ++errcount; + printf("MidiAudioCtrlPortMap::read failed reading actrl string: %s\n", xml.s2().toLatin1().constData()); + } + } + else + printf("unknown tag %s\n", tag.toLatin1().constData()); + break; + case Xml::TagStart: + // TODO + //if (tag == "???") { + // } + //else + xml.unknown("midiMapper"); + break; + case Xml::TagEnd: + if (xml.s1() == "midiMapper") + { + if(errcount == 0 && port != -1 && chan != -1 && midi_ctrl != -1 && macs.audioCtrlId() != -1) + add_ctrl_struct(port, chan, midi_ctrl, macs); + return; + } + default: + break; + } + } + } +//--------------------------------------------------------- // CtrlList //--------------------------------------------------------- @@ -64,6 +327,7 @@ _mode = INTERPOLATE; _dontShow = false; _visible = false; + _guiUpdatePending = false; initColor(0); } @@ -75,6 +339,7 @@ _mode = INTERPOLATE; _dontShow = false; _visible = false; + _guiUpdatePending = false; initColor(id); } @@ -90,6 +355,7 @@ _valueType = v; _dontShow = dontShow; _visible = false; + _guiUpdatePending = false; initColor(id); } @@ -117,70 +383,69 @@ if(flags & ASSIGN_VALUES) { *this = l; // Let the vector assign values. + _guiUpdatePending = true; } } //--------------------------------------------------------- // value +// Returns value at frame. +// cur_val_only means read the current 'manual' value, not from the list even if it is not empty. +// If passed a nextFrame, sets nextFrame to the next event frame, or -1 if no next frame (wide-open), or, +// since CtrlList is a map, ZERO if should be replaced with some other frame by the caller (interpolation). //--------------------------------------------------------- -double CtrlList::value(int frame) const +double CtrlList::value(int frame, bool cur_val_only, int* nextFrame) const { - // Changed by Tim. p4.0.32... - - ///if (!automation || empty()) - /// return _curVal; - if(empty()) + if(cur_val_only || empty()) + { + if(nextFrame) + *nextFrame = -1; return _curVal; + } double rv; - ciCtrl i = upper_bound(frame); // get the index after current frame + int nframe; + ciCtrl i = upper_bound(frame); // get the index after current frame if (i == end()) { // if we are past all items just return the last value - ///ciCtrl i = end(); --i; - ///const CtrlVal& val = i->second; - ///_curVal = val.val; - rv = i->second.val; + if(nextFrame) + *nextFrame = -1; + return i->second.val; } else if(_mode == DISCRETE) { if(i == begin()) { - ///_curVal = _default; - //if(i->second.frame == frame) + nframe = i->second.frame; rv = i->second.val; - //else - // rv = _default; } else { + nframe = i->second.frame; --i; - ///const CtrlVal& val = i->second; - ///_curVal = val.val; rv = i->second.val; } } - else { - ///int frame2 = i->second.frame; - ///double val2 = i->second.val; - ///int frame1; - ///double val1; + else { // INTERPOLATE if (i == begin()) { - ///frame1 = 0; - ///val1 = _default; + nframe = i->second.frame; rv = i->second.val; } else { int frame2 = i->second.frame; double val2 = i->second.val; --i; - ///frame1 = i->second.frame; - ///val1 = i->second.val; int frame1 = i->second.frame; double val1 = i->second.val; - ///} - //printf("before val1=%f val2=%f\n", val1,val2); + + + if(val2 != val1) + nframe = 0; // Zero signifies the next frame should be determined by caller. + else + nframe = frame2; + if (_valueType == VAL_LOG) { val1 = 20.0*fast_log10(val1); if (val1 < MusEGlobal::config.minSlider) @@ -189,57 +454,154 @@ if (val2 < MusEGlobal::config.minSlider) val2=MusEGlobal::config.minSlider; } - //printf("after val1=%f val2=%f\n", val1,val2); - frame -= frame1; + val2 -= val1; - frame2 -= frame1; - val1 += (double(frame) * val2)/double(frame2); + val1 += (double(frame - frame1) * val2)/double(frame2 - frame1); if (_valueType == VAL_LOG) { val1 = exp10(val1/20.0); } - //printf("after val1=%f\n", val1); - ///_curVal = val1; + rv = val1; } } -// printf("autoVal %d %f\n", frame, _curVal); - ///return _curVal; + + if(nextFrame) + *nextFrame = nframe; + return rv; } //--------------------------------------------------------- // curVal -// returns the value at the current audio position +// returns the static 'manual' value //--------------------------------------------------------- double CtrlList::curVal() const { - //double v = value(Pos(audio->tickPos()).frame()); // p4.0.33 - //double v = value(audio->pos().frame()); // Try this. - //return v; return _curVal; } //--------------------------------------------------------- // setCurVal +// Sets the static 'manual' value //--------------------------------------------------------- void CtrlList::setCurVal(double val) { +#ifdef _CTRL_DEBUG_ + printf("CtrlList::setCurVal val:%f\n", val); +#endif + + bool upd = (val != _curVal); _curVal = val; - //if (size() < 2) // Removed p4.0.32 - // add(0,val); + // If empty, any controller graphs etc. will be displaying this value. + // Otherwise they'll be displaying the list, so update is not required. + if(empty() && upd) + _guiUpdatePending = true; +} + +//--------------------------------------------------------- +// +// Catch all insert, erase, clear etc. +// +//--------------------------------------------------------- + +CtrlList& CtrlList::operator=(const CtrlList& cl) +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::operator= id:%d\n", cl.id()); +#endif + std::map >::operator=(cl); + _guiUpdatePending = true; + return *this; +} + +void CtrlList::swap(CtrlList& cl) +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::swap id:%d\n", cl.id()); +#endif + std::map >::swap(cl); + cl.setGuiUpdatePending(true); + _guiUpdatePending = true; +} + +std::pair CtrlList::insert(const std::pair& p) +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::insert frame:%d val:%f\n", p.first, p.second.val); +#endif + std::pair res = std::map >::insert(p); + _guiUpdatePending = true; + return res; +} + +iCtrl CtrlList::insert(iCtrl ic, const std::pair& p) +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::insert2 frame:%d val:%f\n", p.first, p.second.val); +#endif + iCtrl res = std::map >::insert(ic, p); + _guiUpdatePending = true; + return res; +} + +void CtrlList::erase(iCtrl ictl) +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::erase iCtrl frame:%d val:%f\n", ictl->second.frame, ictl->second.val); +#endif + std::map >::erase(ictl); + _guiUpdatePending = true; +} + +std::map >::size_type CtrlList::erase(int frame) +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::erase frame:%d\n", frame); +#endif + std::map >::size_type res = std::map >::erase(frame); + _guiUpdatePending = true; + return res; +} + +void CtrlList::erase(iCtrl first, iCtrl last) +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::erase range first frame:%d val:%f second frame:%d val:%f\n", + first->second.frame, first->second.val, + last->second.frame, last->second.val); +#endif + std::map >::erase(first, last); + _guiUpdatePending = true; +} + +void CtrlList::clear() +{ +#ifdef _CTRL_DEBUG_ + printf("CtrlList::clear\n"); +#endif + std::map >::clear(); + _guiUpdatePending = true; } //--------------------------------------------------------- // add +// Add, or replace, an event at time frame having value val. //--------------------------------------------------------- void CtrlList::add(int frame, double val) { -// printf("add %d %f\n", frame, val); iCtrl e = find(frame); if (e != end()) + { + bool upd = (val != e->second.val); e->second.val = val; +#ifdef _CTRL_DEBUG_ + printf("CtrlList::add frame:%d val:%f\n", frame, val); +#endif + if(upd) + _guiUpdatePending = true; + } else insert(std::pair (frame, CtrlVal(frame, val))); } @@ -251,14 +613,30 @@ void CtrlList::del(int frame) { iCtrl e = find(frame); - if (e == end()) { - //printf("CtrlList::del(%d): not found\n", frame); + if (e == end()) return; - } + erase(e); } //--------------------------------------------------------- +// updateCurValues +// Set the current static 'manual' value (non-automation value) +// from the automation value at the given time. +//--------------------------------------------------------- + +void CtrlList::updateCurValue(int frame) +{ + double v = value(frame); + bool upd = (v != _curVal); + _curVal = v; + // If empty, any controller graphs etc. will be displaying this value. + // Otherwise they'll be displaying the list, so update is not required. + if(empty() && upd) + _guiUpdatePending = true; +} + +//--------------------------------------------------------- // read //--------------------------------------------------------- @@ -276,14 +654,12 @@ case Xml::Attribut: if (tag == "id") { - //_id = xml.s2().toInt(); _id = loc.toInt(xml.s2(), &ok); if(!ok) printf("CtrlList::read failed reading _id string: %s\n", xml.s2().toLatin1().constData()); } else if (tag == "cur") { - //_curVal = xml.s2().toDouble(); _curVal = loc.toDouble(xml.s2(), &ok); if(!ok) printf("CtrlList::read failed reading _curVal string: %s\n", xml.s2().toLatin1().constData()); @@ -310,33 +686,6 @@ break; case Xml::Text: { - // Changed by Tim. Users in some locales reported corrupt reading, - // because of the way floating point is represented (2,3456 not 2.3456). - /* - QByteArray ba = tag.toLatin1(); - const char* s = ba;.constData(); - int frame; - double val; - - for (;;) { - char* endp; - while (*s == ' ' || *s == '\n') - ++s; - if (*s == 0) - break; - frame = strtol(s, &endp, 10); - s = endp; - while (*s == ' ' || *s == '\n') - ++s; - val = strtod(s, &endp); - add(frame, val); - s = endp; - ++s; - } - */ - - //printf("CtrlList::read tag:%s\n", tag.toLatin1().constData()); - int len = tag.length(); int frame; double val; @@ -358,9 +707,6 @@ if(i == len) break; - // Works OK, but only because if current locale fails it falls back on 'C' locale. - // So, let's skip the fallback and force use of 'C' locale. - //frame = fs.toInt(&ok); frame = loc.toInt(fs, &ok); if(!ok) { @@ -380,9 +726,6 @@ ++i; } - // Works OK, but only because if current locale fails it falls back on 'C' locale. - // So, let's skip the fallback and force use of 'C' locale. - //val = vs.toDouble(&ok); val = loc.toDouble(vs, &ok); if(!ok) { @@ -390,8 +733,6 @@ break; } - //printf("CtrlList::read i:%d len:%d fs:%s frame %d: vs:%s val %f \n", i, len, fs.toLatin1().constData(), frame, vs.toLatin1().constData(), val); - add(frame, val); if(i == len) @@ -401,11 +742,7 @@ break; case Xml::TagEnd: if (xml.s1() == "controller") - { - //printf("CtrlList::read _id:%d _curVal:%f\n", _id, _curVal); - return; - } default: break; } @@ -418,8 +755,76 @@ void CtrlListList::add(CtrlList* vl) { -// printf("CtrlListList(%p)::add(id=%d) size %d\n", this, vl->id(), size()); insert(std::pair(vl->id(), vl)); } + +//--------------------------------------------------------- +// value +// Returns value at frame for controller with id ctrlId. +// cur_val_only means read the current 'manual' value, not from the list even if it is not empty. +// If passed a nextFrame, sets nextFrame to the next event frame, or -1 if no next frame (wide-open), or, +// since CtrlList is a map, ZERO if should be replaced with some other frame by the caller (interpolation). +//--------------------------------------------------------- + +double CtrlListList::value(int ctrlId, int frame, bool cur_val_only, int* nextFrame) const + { + ciCtrlList cl = find(ctrlId); + if (cl == end()) + { + if(nextFrame) + *nextFrame = -1; + return 0.0; + } + return cl->second->value(frame, cur_val_only, nextFrame); + } + +//--------------------------------------------------------- +// updateCurValues +// Set the current 'manual' values (non-automation values) +// from the automation values at the given time. +// This is typically called right after a track's automation type changes +// to OFF, so that the manual value becomes the last automation value. +// There are some interesting advantages to having completely independent +// 'manual' and automation values, but the jumping around when switching to OFF +// becomes disconcerting. +//--------------------------------------------------------- + +void CtrlListList::updateCurValues(int frame) +{ + for(ciCtrlList cl = begin(); cl != end(); ++cl) + cl->second->updateCurValue(frame); +} + +//--------------------------------------------------------- +// value +//--------------------------------------------------------- + +void CtrlListList::write(int level, Xml& xml) const +{ + for (ciCtrlList icl = begin(); icl != end(); ++icl) { + const CtrlList* cl = icl->second; + + QString s= QString("controller id=\"%1\" cur=\"%2\"").arg(cl->id()).arg(cl->curVal()).toAscii().constData(); + s += QString(" color=\"%1\" visible=\"%2\"").arg(cl->color().name()).arg(cl->isVisible()); + xml.tag(level++, s.toAscii().constData()); + int i = 0; + for (ciCtrl ic = cl->begin(); ic != cl->end(); ++ic) { + QString s("%1 %2, "); + xml.nput(level, s.arg(ic->second.frame).arg(ic->second.val).toAscii().constData()); + ++i; + if (i >= 4) { + xml.put(level, ""); + i = 0; + } + } + if (i) + xml.put(level, ""); + xml.etag(level--, "controller"); + } + + _midi_controls.write(level, xml); +} + + } // namespace MusECore diff -Nru muse-2.0~rc2/muse/ctrl.h muse-2.0/muse/ctrl.h --- muse-2.0~rc2/muse/ctrl.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ctrl.h 2012-06-30 19:24:43.000000000 +0200 @@ -6,7 +6,7 @@ // controller for mixer automation // // (C) Copyright 2003-2004 Werner Schweer (ws@seh.de) -// (C) Copyright 2011 Time E. Real (terminator356 on users dot sourceforge dot net) +// (C) Copyright 2011-2012 Tim E. Real (terminator356 on users dot sourceforge dot net) // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -29,7 +29,9 @@ #include #include +#include #include +#include #define AC_PLUGIN_CTL_BASE 0x1000 #define AC_PLUGIN_CTL_BASE_POW 12 @@ -43,7 +45,6 @@ const int AC_PAN = 1; const int AC_MUTE = 2; -//inline int genACnum(int plugin, int ctrl) { return (plugin + 1) * AC_PLUGIN_CTL_BASE + ctrl; } inline unsigned long genACnum(unsigned long plugin, unsigned long ctrl) { return (plugin + 1) * AC_PLUGIN_CTL_BASE + ctrl; } enum CtrlValueType { VAL_LOG, VAL_LINEAR, VAL_INT, VAL_BOOL }; @@ -86,6 +87,47 @@ typedef CtrlRecList::iterator iCtrlRec; //--------------------------------------------------------- +// MidiAudioCtrlMap +// Describes midi control of audio controllers +//--------------------------------------------------------- + +class MidiAudioCtrlStruct { + int _audio_ctrl_id; + public: + MidiAudioCtrlStruct(); + MidiAudioCtrlStruct(int audio_ctrl_id); + int audioCtrlId() const { return _audio_ctrl_id; } + void setAudioCtrlId(int actrl) { _audio_ctrl_id = actrl; } + }; + +typedef uint32_t MidiAudioCtrlMap_idx_t; + +typedef std::multimap >::iterator iMidiAudioCtrlMap; +typedef std::multimap >::const_iterator ciMidiAudioCtrlMap; + +// Reverse lookup based on audio control. +typedef std::vector::iterator iAudioMidiCtrlStructMap; +typedef std::vector::const_iterator ciAudioMidiCtrlStructMap; +class AudioMidiCtrlStructMap : public std::vector { + public: + + }; + +// Midi to audio controller map. +// The index is a hash of port, chan, and midi control number. +class MidiAudioCtrlMap : public std::multimap > { + public: + MidiAudioCtrlMap_idx_t index_hash(int midi_port, int midi_chan, int midi_ctrl_num) const; + void hash_values(MidiAudioCtrlMap_idx_t hash, int* midi_port, int* midi_chan, int* midi_ctrl_num) const; + iMidiAudioCtrlMap add_ctrl_struct(int midi_port, int midi_chan, int midi_ctrl_num, const MidiAudioCtrlStruct& amcs); + void find_audio_ctrl_structs(int audio_ctrl_id, AudioMidiCtrlStructMap* amcs); // const; + void erase_ctrl_struct(int midi_port, int midi_chan, int midi_ctrl_num, int audio_ctrl_id); + void write(int level, Xml& xml) const; + void read(Xml& xml); + }; + + +//--------------------------------------------------------- // CtrlList // arrange controller events of a specific type in a // list for easy retrieval @@ -110,6 +152,7 @@ QColor _displayColor; bool _visible; bool _dontShow; // when this is true the control exists but is not compatible with viewing in the arranger + volatile bool _guiUpdatePending; // Gui heartbeat routines read this. Checked and cleared in Song::beat(). void initColor(int i); public: @@ -118,12 +161,22 @@ CtrlList(int id, QString name, double min, double max, CtrlValueType v, bool dontShow=false); void assign(const CtrlList& l, int flags); + void swap(CtrlList&); + std::pair insert(const std::pair& p); + iCtrl insert(iCtrl ic, const std::pair& p); + void erase(iCtrl ictl); + size_type erase(int frame); + void erase(iCtrl first, iCtrl last); + void clear(); + CtrlList& operator=(const CtrlList&); + Mode mode() const { return _mode; } void setMode(Mode m) { _mode = m; } double getDefault() const { return _default; } void setDefault(double val) { _default = val; } - double curVal() const; /* { return _curVal; } */ - void setCurVal(double val); // { _curVal = val; } + double curVal() const; + void updateCurValue(int frame); + void setCurVal(double val); int id() const { return _id; } QString name() const { return _name; } void setName(const QString& s) { _name = s; } @@ -138,7 +191,7 @@ CtrlValueType valueType() const { return _valueType; } void setValueType(CtrlValueType t) { _valueType = t; } - double value(int frame) const; + double value(int frame, bool cur_val_only = false, int* nextFrame = NULL) const; void add(int frame, double value); void del(int frame); void read(Xml& xml); @@ -148,6 +201,8 @@ void setVisible(bool v) { _visible = v; } bool isVisible() const { return _visible; } bool dontShow() const { return _dontShow; } + bool guiUpdatePending() const { return _guiUpdatePending; } + void setGuiUpdatePending(bool v) { _guiUpdatePending = v; } }; //--------------------------------------------------------- @@ -161,6 +216,8 @@ typedef std::map >::const_iterator ciCtrlList; class CtrlListList : public std::map > { + private: + MidiAudioCtrlMap _midi_controls; // For midi control of audio controllers. public: void add(CtrlList* vl); void clearDelete() { @@ -175,8 +232,20 @@ ciCtrlList find(int id) const { return std::map >::find(id); } + + MidiAudioCtrlMap* midiControls() { return &_midi_controls; } + + double value(int ctrlId, int frame, bool cur_val_only = false, int* nextFrame = NULL) const; + void updateCurValues(int frame); + void clearAllAutomation() { + for(iCtrlList i = begin(); i != end(); ++i) + i->second->clear(); + } + void write(int level, Xml& xml) const; }; +extern double midi2AudioCtrlValue(const CtrlList* audio_ctrl_list, const MidiAudioCtrlStruct* mapper, int midi_ctlnum, int midi_val); + } // namespace MusECore #endif diff -Nru muse-2.0~rc2/muse/dialogs.cpp muse-2.0/muse/dialogs.cpp --- muse-2.0~rc2/muse/dialogs.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/dialogs.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -89,13 +89,6 @@ void read_function_dialog_config(MusECore::Xml& xml) { - if (erase_dialog==NULL) - { - cout << "ERROR: THIS SHOULD NEVER HAPPEN: read_function_dialog_config() called, but\n" - " dialogs are still uninitalized (NULL)!"< +// Enable debugging: +//#define ALSA_DEBUG 1 + + namespace MusECore { static int alsaSeqFdi = -1; @@ -58,8 +63,6 @@ : MidiDevice(n) { adr = a; - stopPending = false; - seekPending = false; init(); } @@ -99,7 +102,9 @@ int cap = snd_seq_port_info_get_capability(pinfo); - //printf("MidiAlsaDevice::open cap:%d\n", cap); +#ifdef ALSA_DEBUG + printf("MidiAlsaDevice::open cap:%d\n", cap); +#endif // subscribe for writing if (_openFlags & 1) @@ -176,7 +181,9 @@ int cap = snd_seq_port_info_get_capability(pinfo); - //printf("MidiAlsaDevice::close cap:%d\n", cap); +#ifdef ALSA_DEBUG + printf("MidiAlsaDevice::close cap:%d\n", cap); +#endif // This function appears to be called only by MidiPort::setMidiDevice(), // which closes then opens the device. @@ -285,7 +292,7 @@ bool MidiAlsaDevice::putMidiEvent(const MidiPlayEvent& e) { if (MusEGlobal::midiOutputTrace) { - printf("MidiOut: midiAlsa: "); + printf("MidiOut: Alsa: <%s>: ", name().toLatin1().constData()); e.dump(); } int chn = e.channel(); @@ -309,6 +316,19 @@ snd_seq_ev_set_pgmchange(&event, chn, a); break; case ME_CONTROLLER: + { + if(a == CTRL_PROGRAM) + { + snd_seq_ev_set_pgmchange(&event, chn, b); + break; + } + else if(a == CTRL_PITCH) + { + snd_seq_ev_set_pitchbend(&event, chn, b); + break; + } + } + #if 1 snd_seq_ev_set_controller(&event, chn, a, b); #else @@ -422,6 +442,10 @@ { int error; +#ifdef ALSA_DEBUG + printf("MidiAlsaDevice::putEvent\n"); +#endif + do { error = snd_seq_event_output_direct(alsaSeq, event); int len = snd_seq_event_length(event); @@ -453,77 +477,160 @@ // Called from ALSA midi sequencer thread only. //--------------------------------------------------------- -#if 0 void MidiAlsaDevice::processMidi() { - processStuckNotes(); - if (_playEvents.empty()) - return; - int port = midiPort(); - MidiPort* mp = port != -1 ? &MusEGlobal::midiPorts[port] : 0; - unsigned curFrame = MusEGlobal::audio->curFrame(); - int tickpos = MusEGlobal::audio->tickPos(); - bool extsync = MusEGlobal::extSyncFlag.value(); - //int frameOffset = getFrameOffset(); - //int nextTick = MusEGlobal::audio->nextTick(); - - // Play all events up to current frame. - iMPEvent i = _playEvents.begin(); - for (; i != _playEvents.end(); ++i) { - if (i->time() > (extsync ? tickpos : curFrame)) // p3.3.25 Check: Should be nextTickPos? p4.0.34 - break; - if(mp){ - if (mp->sendEvent(*i)) - break; - } - else - if(putMidiEvent(*i)) - break; - } - _playEvents.erase(_playEvents.begin(), i); -} - -#else -void MidiAlsaDevice::processMidi() -{ - bool stop = stopPending; // Snapshots - bool seek = seekPending; // - seekPending = stopPending = false; + //bool stop = stopPending; // Snapshots + //bool seek = seekPending; // + //seekPending = stopPending = false; // Transfer the stuck notes FIFO to the play events list. // FIXME It would be faster to have MidiAlsaDevice automatically add the stuck note so that only // one FIFO would be needed. But that requires passing an extra 'tick' and 'off velocity' in // addScheduledEvent, which felt too weird. - while(!stuckNotesFifo.isEmpty()) - _stuckNotes.add(stuckNotesFifo.get()); + //while(!stuckNotesFifo.isEmpty()) + // _stuckNotes.add(stuckNotesFifo.get()); - bool extsync = MusEGlobal::extSyncFlag.value(); //int frameOffset = getFrameOffset(); //int nextTick = MusEGlobal::audio->nextTick(); - // We're in the ALSA midi thread. MusEGlobal::audio->isPlaying() might not be true during seek right now. - //if(stop || (seek && MusEGlobal::audio->isPlaying())) - if(stop || seek) + //bool is_playing = MusEGlobal::audio->isPlaying(); + // We're in the ALSA midi thread. audio->isPlaying() might not be true during seek right now. Include START_PLAY state... + //bool is_playing = MusEGlobal::audio->isPlaying() || MusEGlobal::audio->isStarting(); // TODO Check this. It includes LOOP1 and LOOP2 besides PLAY. + int pos = MusEGlobal::audio->tickPos(); + int port = midiPort(); + MidiPort* mp = port == -1 ? 0 : &MusEGlobal::midiPorts[port]; + bool ext_sync = MusEGlobal::extSyncFlag.value(); + + /* + if(mp) { - //--------------------------------------------------- - // Clear all notes and handle stuck notes - //--------------------------------------------------- - playEventFifo.clear(); + MidiSyncInfo& si = mp->syncInfo(); + if(stop) + { + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!ext_sync) + { + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // return; + + // Send MMC stop... + if(si.MMCOut()) + { + unsigned char msg[mmcStopMsgLen]; + memcpy(msg, mmcStopMsg, mmcStopMsgLen); + msg[1] = si.idOut(); + putMidiEvent(MidiPlayEvent(0, 0, ME_SYSEX, msg, mmcStopMsgLen)); + } + + // Send midi stop... + if(si.MRTOut()) + { + putMidiEvent(MidiPlayEvent(0, 0, 0, ME_STOP, 0, 0)); + // Added check of option send continue not start. p3.3.31 + // Hmm, is this required? Seems to make other devices unhappy. + // (Could try now that this is in MidiDevice. p4.0.22 ) + //if(!si.sendContNotStart()) + // mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / config.division); + } + } + } + + if(seek) + { + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!ext_sync) + { + // Send midi stop and song position pointer... + if(si.MRTOut()) + { + // Shall we check for device write open flag to see if it's ok to send?... + //if(!(rwFlags() & 0x1) || !(openFlags() & 1)) + //if(!(openFlags() & 1)) + // continue; + putMidiEvent(MidiPlayEvent(0, 0, 0, ME_STOP, 0, 0)); + // Hm, try sending these after stuck notes below... + //putMidiEvent(MidiPlayEvent(0, 0, 0, ME_SONGPOS, beat, 0)); + //if(is_playing) + // putMidiEvent(MidiPlayEvent(0, 0, 0, ME_CONTINUE, 0, 0)); + } + } + } + } + */ + + /* + if(stop || (seek && is_playing)) + { + // Clear all notes and handle stuck notes... + //playEventFifo.clear(); _playEvents.clear(); - //printf("transferring stuck notes\n"); for(iMPEvent i = _stuckNotes.begin(); i != _stuckNotes.end(); ++i) { - //printf(" stuck note\n"); MidiPlayEvent ev = *i; ev.setTime(0); - _playEvents.add(ev); + //_playEvents.add(ev); + putMidiEvent(ev); // Play immediately. } _stuckNotes.clear(); } - else + */ + + /* + if(mp) + { + MidiSyncInfo& si = mp->syncInfo(); + // Try sending these now after stuck notes above... + if(stop || seek) + { + // Reset sustain. + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) + putMidiEvent(MidiPlayEvent(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0)); + } + if(seek) + { + // Send new song position. + if(!ext_sync && si.MRTOut()) + { + int beat = (pos * 4) / MusEGlobal::config.division; + putMidiEvent(MidiPlayEvent(0, 0, 0, ME_SONGPOS, beat, 0)); + } + // Send new controller values. + MidiCtrlValListList* cll = mp->controller(); + for(iMidiCtrlValList ivl = cll->begin(); ivl != cll->end(); ++ivl) + { + MidiCtrlValList* vl = ivl->second; + iMidiCtrlVal imcv = vl->iValue(pos); + if(imcv != vl->end()) { + Part* p = imcv->second.part; + // Don't send if part or track is muted or off. + if(!p || p->mute()) + continue; + Track* track = p->track(); + if(track && (track->isMute() || track->off())) + continue; + unsigned t = (unsigned)imcv->first; + // Do not add values that are outside of the part. + if(t >= p->tick() && t < (p->tick() + p->lenTick())) + // Use sendEvent to get the optimizations and limiting. But force if there's a value at this exact position. + mp->sendEvent(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val), imcv->first == pos); + } + } + + // Send continue. + // REMOVE Tim. This is redundant and too early - Audio::startRolling already properly sends it when sync ready. + //if(is_playing && !ext_sync && si.MRTOut()) + // putMidiEvent(MidiPlayEvent(0, 0, 0, ME_CONTINUE, 0, 0)); + } + } + */ + + //if(!(stop || (seek && is_playing))) { // Transfer the play events FIFO to the play events list. - while(!playEventFifo.isEmpty()) - _playEvents.add(playEventFifo.get()); + //while(!playEventFifo.isEmpty()) + // _playEvents.add(playEventFifo.get()); /* TODO Handle these more directly than putting them into play events list. //if(MusEGlobal::audio->isPlaying()) @@ -545,53 +652,18 @@ processStuckNotes(); } - /* Instead, done immediately in handleStop and handleSeek using putEvent. - if(stop) - { - // reset sustain... - MidiPort* mp = &MusEGlobal::midiPorts[_port]; - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - { - if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) - { - //printf("send clear sustain!!!!!!!! port %d ch %d\n", i,ch); - MidiPlayEvent ev(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); - _playEvents.add(ev); - } - } - } - if(seek) - { - // Send new contoller values... - for(iMidiCtrlValList ivl = cll->begin(); ivl != cll->end(); ++ivl) - { - MidiCtrlValList* vl = ivl->second; - iMidiCtrlVal imcv = vl->iValue(pos); - if(imcv != vl->end()) { - Part* p = imcv->second.part; - unsigned t = (unsigned)imcv->first; - // Do not add values that are outside of the part. - if(p && t >= p->tick() && t < (p->tick() + p->lenTick()) ) - _playEvents.add(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); - } - } - } */ - - if (_playEvents.empty()) - return; + if(_playEvents.empty()) + return; - int port = midiPort(); - MidiPort* mp = port != -1 ? &MusEGlobal::midiPorts[port] : 0; unsigned curFrame = MusEGlobal::audio->curFrame(); - int tickpos = MusEGlobal::audio->tickPos(); // Play all events up to current frame. iMPEvent i = _playEvents.begin(); for (; i != _playEvents.end(); ++i) { - if (i->time() > (extsync ? tickpos : curFrame)) // p3.3.25 Check: Should be nextTickPos? p4.0.34 + if (i->time() > (ext_sync ? pos : curFrame)) // p3.3.25 Check: Should be nextTickPos? p4.0.34 break; if(mp){ - if (mp->sendEvent(*i)) + if (mp->sendEvent(*i, true)) // Force the event to be sent. break; } else @@ -601,6 +673,7 @@ _playEvents.erase(_playEvents.begin(), i); } +/* //--------------------------------------------------------- // handleStop //--------------------------------------------------------- @@ -614,21 +687,6 @@ stopPending = true; // Trigger stop handling in processMidi. //--------------------------------------------------- - // reset sustain - //--------------------------------------------------- - - MidiPort* mp = &MusEGlobal::midiPorts[_port]; - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - { - if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) - { - //printf("send clear sustain!!!!!!!! port %d ch %d\n", i,ch); - MidiPlayEvent ev(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); - putMidiEvent(ev); - } - } - - //--------------------------------------------------- // send midi stop //--------------------------------------------------- @@ -646,18 +704,61 @@ if(si.MRTOut()) { - // Send STOP mp->sendStop(); - - // Added check of option send continue not start. p3.3.31 - // Hmm, is this required? Seems to make other devices unhappy. - // (Could try now that this is in MidiDevice. p4.0.22 ) + // Added check of option send continue not start. Hmm, is this required? Seems to make other devices unhappy. + // (Could try now that this is in MidiDevice.) //if(!si.sendContNotStart()) // mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / config.division); } } + + //--------------------------------------------------- + // reset sustain + //--------------------------------------------------- + + MidiPort* mp = &MusEGlobal::midiPorts[_port]; + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) + { + MidiPlayEvent ev(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); + //putMidiEvent(ev); + putEvent(ev); + // Do sendEvent to get the optimizations - send only on a change of value. + //mp->sendEvent(ev); + } + } + + //--------------------------------------------------- + // send midi stop + //--------------------------------------------------- + +// // Don't send if external sync is on. The master, and our sync routing system will take care of that. +// if(!MusEGlobal::extSyncFlag.value()) +// { +// // Shall we check open flags? +// //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) +// //if(!(dev->openFlags() & 1)) +// // return; +// +// MidiSyncInfo& si = mp->syncInfo(); +// if(si.MMCOut()) +// mp->sendMMCStop(); +// +// if(si.MRTOut()) +// { +// // Send STOP +// mp->sendStop(); +// // Added check of option send continue not start. Hmm, is this required? Seems to make other devices unhappy. +// // (Could try now that this is in MidiDevice.) +// //if(!si.sendContNotStart()) +// // mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / config.division); +// } +// } } +*/ +/* //--------------------------------------------------------- // handleSeek //--------------------------------------------------------- @@ -675,7 +776,41 @@ int pos = MusEGlobal::audio->tickPos(); //--------------------------------------------------- - // Send new contoller values + // Send STOP + //--------------------------------------------------- + + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!MusEGlobal::extSyncFlag.value()) + { + if(mp->syncInfo().MRTOut()) + { + // Shall we check for device write open flag to see if it's ok to send?... + //if(!(rwFlags() & 0x1) || !(openFlags() & 1)) + //if(!(openFlags() & 1)) + // continue; + mp->sendStop(); + } + } + + //--------------------------------------------------- + // reset sustain + //--------------------------------------------------- + + MidiPort* mp = &MusEGlobal::midiPorts[_port]; + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) + { + MidiPlayEvent ev(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); + putEvent(ev); + //putMidiEvent(ev); + // Do sendEvent to get the optimizations - send only on a change of value. + //mp->sendEvent(ev); + } + } + + //--------------------------------------------------- + // Send new controller values //--------------------------------------------------- for(iMidiCtrlValList ivl = cll->begin(); ivl != cll->end(); ++ivl) @@ -685,12 +820,18 @@ if(imcv != vl->end()) { Part* p = imcv->second.part; + // Don't send if part or track is muted or off. + if(!p || p->mute()) + continue; + Track* track = p->track(); + if(track && (track->isMute() || track->off())) + continue; unsigned t = (unsigned)imcv->first; // Do not add values that are outside of the part. if(p && t >= p->tick() && t < (p->tick() + p->lenTick()) ) //_playEvents.add(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); - // Hmm, play event list for immediate playback? Try putEvent instead. p4.0.34 - putMidiEvent(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); + // Use sendEvent to get the optimizations and limiting. But force if there's a value at this exact position. + mp->sendEvent(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val), imcv->first == pos); } } @@ -698,31 +839,23 @@ // Send STOP and "set song position pointer" //--------------------------------------------------- - // Don't send if external sync is on. The master, and our sync routing system will take care of that. p3.3.31 + // Don't send if external sync is on. The master, and our sync routing system will take care of that. if(!MusEGlobal::extSyncFlag.value()) { if(mp->syncInfo().MRTOut()) { // Shall we check for device write open flag to see if it's ok to send?... - // This means obey what the user has chosen for read/write in the midi port config dialog, - // which already takes into account whether the device is writable or not. //if(!(rwFlags() & 0x1) || !(openFlags() & 1)) //if(!(openFlags() & 1)) // continue; + //mp->sendStop(); // Moved above. int beat = (pos * 4) / MusEGlobal::config.division; - - //bool isPlaying = (state == PLAY); - bool isPlaying = MusEGlobal::audio->isPlaying(); // TODO Check this it includes LOOP1 and LOOP2 besides PLAY. p4.0.22 - - mp->sendStop(); mp->sendSongpos(beat); - if(isPlaying) - mp->sendContinue(); } } } -#endif +*/ //--------------------------------------------------------- // initMidiAlsa @@ -739,9 +872,10 @@ snd_strerror(error)); return true; } + const int inCap = SND_SEQ_PORT_CAP_SUBS_READ; const int outCap = SND_SEQ_PORT_CAP_SUBS_WRITE; - + snd_seq_client_info_t *cinfo; snd_seq_client_info_alloca(&cinfo); snd_seq_client_info_set_client(cinfo, -1); @@ -834,7 +968,11 @@ //snd_seq_set_client_name(alsaSeq, "MusE Sequencer"); - snd_seq_set_client_name(alsaSeq, MusEGlobal::audioDevice->clientName()); + error = snd_seq_set_client_name(alsaSeq, MusEGlobal::audioDevice->clientName()); + if (error < 0) { + printf("Alsa: Set client name failed: %s", snd_strerror(error)); + return true; + } int ci = snd_seq_poll_descriptors_count(alsaSeq, POLLIN); int co = snd_seq_poll_descriptors_count(alsaSeq, POLLOUT); @@ -924,6 +1062,24 @@ } +//--------------------------------------------------------- +// setAlsaClientName +//--------------------------------------------------------- + +void setAlsaClientName(const char* name) +{ +#ifdef ALSA_DEBUG + printf("setAlsaClientName: %s seq:%p\n", name, alsaSeq); +#endif + + if(!alsaSeq) + return; + + int error = snd_seq_set_client_name(alsaSeq, name); + if (error < 0) + printf("setAlsaClientName: failed: %s", snd_strerror(error)); +} + struct AlsaPort { snd_seq_addr_t adr; char* name; @@ -943,7 +1099,9 @@ void alsaScanMidiPorts() { -// printf("alsa scan midi ports\n"); +#ifdef ALSA_DEBUG + printf("alsa scan midi ports\n"); +#endif const int inCap = SND_SEQ_PORT_CAP_SUBS_READ; const int outCap = SND_SEQ_PORT_CAP_SUBS_WRITE; @@ -1160,24 +1318,24 @@ break; case SND_SEQ_EVENT_CLOCK: - MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_CLOCK); + MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_CLOCK, curTime()); //mdev->syncInfo().trigMCSyncDetect(); break; case SND_SEQ_EVENT_START: - MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_START); + MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_START, curTime()); break; case SND_SEQ_EVENT_CONTINUE: - MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_CONTINUE); + MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_CONTINUE, curTime()); break; case SND_SEQ_EVENT_STOP: - MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_STOP); + MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_STOP, curTime()); break; case SND_SEQ_EVENT_TICK: - MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_TICK); + MusEGlobal::midiSeq->realtimeSystemInput(curPort, ME_TICK, curTime()); //mdev->syncInfo().trigTickDetect(); break; diff -Nru muse-2.0~rc2/muse/driver/alsamidi.h muse-2.0/muse/driver/alsamidi.h --- muse-2.0~rc2/muse/driver/alsamidi.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/alsamidi.h 2012-06-30 19:24:42.000000000 +0200 @@ -45,10 +45,8 @@ private: // Special for ALSA midi device: Play event list is processed in the ALSA midi sequencer thread. // Need this FIFO, to decouple from audio thread which adds events to the list. - MidiFifo playEventFifo; - MidiFifo stuckNotesFifo; - volatile bool stopPending; - volatile bool seekPending; + //MidiFifo playEventFifo; + //MidiFifo stuckNotesFifo; virtual QString open(); virtual void close(); @@ -69,13 +67,13 @@ virtual void writeRouting(int, Xml&) const; virtual inline int deviceType() const { return ALSA_MIDI; } // Schedule an event for playback. Returns false if event cannot be delivered. - virtual bool addScheduledEvent(const MidiPlayEvent& ev) { return !playEventFifo.put(ev); } + //virtual bool addScheduledEvent(const MidiPlayEvent& ev) { return !playEventFifo.put(ev); } // Add a stuck note. Returns false if event cannot be delivered. - virtual bool addStuckNote(const MidiPlayEvent& ev) { return !stuckNotesFifo.put(ev); } + //virtual bool addStuckNote(const MidiPlayEvent& ev) { return !stuckNotesFifo.put(ev); } // Play all events up to current frame. virtual void processMidi(); - virtual void handleStop(); - virtual void handleSeek(); + //virtual void handleStop(); + //virtual void handleSeek(); }; extern bool initMidiAlsa(); @@ -84,6 +82,7 @@ extern int alsaSelectWfd(); extern void alsaProcessMidiInput(); extern void alsaScanMidiPorts(); +extern void setAlsaClientName(const char*); } // namespace MusECore diff -Nru muse-2.0~rc2/muse/driver/alsatimer.cpp muse-2.0/muse/driver/alsatimer.cpp --- muse-2.0~rc2/muse/driver/alsatimer.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/alsatimer.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -1,12 +1,12 @@ - //========================================================= - // MusE - // Linux Music Editor - // $Id: alsatimer.cpp,v 1.1.2.9 2009/03/28 01:46:10 terminator356 Exp $ - // - // Plenty of code borrowed from timer.c example in - // alsalib 1.0.7 - // - // (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) +//========================================================= +// MusE +// Linux Music Editor +// $Id: alsatimer.cpp,v 1.1.2.9 2009/03/28 01:46:10 terminator356 Exp $ +// +// Plenty of code borrowed from timer.c example in +// alsalib 1.0.7 +// +// (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,10 +22,10 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // - //========================================================= +//========================================================= - #include "alsatimer.h" - #include +#include "alsatimer.h" +#include #define TIMER_DEBUG 0 @@ -73,7 +73,7 @@ int max_ids = sizeof(test_ids) / sizeof(int); long best_res = LONG_MAX; //int best_dev = -1; // SND_TIMER_GLOBAL_SYSTEM; - int best_dev = SND_TIMER_GLOBAL_SYSTEM; // p3.3.51 + int best_dev = SND_TIMER_GLOBAL_SYSTEM; int i; if (id || info || params) { @@ -107,14 +107,13 @@ device = best_dev; } - // p3.3.51 Removed. //if(best_dev==-1) // return -1; // no working timer found sprintf(timername, "hw:CLASS=%i,SCLASS=%i,CARD=%i,DEV=%i,SUBDEV=%i", devclass, sclass, card, device, subdevice); if ((err = snd_timer_open(&handle, timername, SND_TIMER_OPEN_NONBLOCK))<0) { fprintf(stderr, "AlsaTimer::initTimer(): timer open %i (%s)\n", err, snd_strerror(err)); - return -1; // p3.3.51 + return -1; } if ((err = snd_timer_info(handle, info)) < 0) { @@ -173,7 +172,7 @@ (long int)((1000000000.0 / snd_timer_info_get_resolution(info)) / snd_timer_params_get_ticks(params))); } - return 0; + return (long int)((1000000000.0 / snd_timer_info_get_resolution(info)) / snd_timer_params_get_ticks(params)); } actFreq = (1000000000 / snd_timer_info_get_resolution(info)) / setTick; if (actFreq != freq) { diff -Nru muse-2.0~rc2/muse/driver/audiodev.h muse-2.0/muse/driver/audiodev.h --- muse-2.0~rc2/muse/driver/audiodev.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/audiodev.h 2012-06-30 19:24:42.000000000 +0200 @@ -52,6 +52,7 @@ virtual void stop () = 0; virtual int framePos() const = 0; virtual unsigned frameTime() const = 0; + virtual double systemTime() const = 0; virtual float* getBuffer(void* port, unsigned long nframes) = 0; @@ -75,7 +76,7 @@ virtual void* findPort(const char* name) = 0; virtual QString portName(void* port) = 0; virtual int getState() = 0; - virtual unsigned getCurFrame() = 0; + virtual unsigned getCurFrame() const = 0; virtual bool isRealtime() = 0; virtual int realtimePriority() const = 0; // return zero if not realtime virtual void startTransport() = 0; diff -Nru muse-2.0~rc2/muse/driver/dummyaudio.cpp muse-2.0/muse/driver/dummyaudio.cpp --- muse-2.0~rc2/muse/driver/dummyaudio.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/dummyaudio.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -27,6 +27,8 @@ #include #include #include +#include +#include #include "config.h" #include "audio.h" @@ -137,7 +139,7 @@ // if(DEBUG_DUMMY) // printf("DummyAudioDevice::getState %d\n", state); return state; } - virtual unsigned getCurFrame() { + virtual unsigned getCurFrame() const { if(DEBUG_DUMMY) printf("DummyAudioDevice::getCurFrame %d\n", _framePos); @@ -145,6 +147,13 @@ virtual unsigned frameTime() const { return lrint(curTime() * MusEGlobal::sampleRate); } + virtual double systemTime() const + { + struct timeval t; + gettimeofday(&t, 0); + //printf("%ld %ld\n", t.tv_sec, t.tv_usec); // Note I observed values coming out of order! Causing some problems. + return (double)((double)t.tv_sec + (t.tv_usec / 1000000.0)); + } virtual bool isRealtime() { return realtimeFlag; } //virtual int realtimePriority() const { return 40; } virtual int realtimePriority() const { return _realTimePriority; } diff -Nru muse-2.0~rc2/muse/driver/jackaudio.h muse-2.0/muse/driver/jackaudio.h --- muse-2.0~rc2/muse/driver/jackaudio.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/jackaudio.h 2012-06-30 19:24:42.000000000 +0200 @@ -40,13 +40,16 @@ class JackAudioDevice : public AudioDevice { jack_client_t* _client; - double sampleTime; - int samplePos; + //double sampleTime; + //int samplePos; + float _syncTimeout; jack_transport_state_t transportState; jack_position_t pos; char jackRegisteredName[16]; int dummyState; int dummyPos; + volatile int _dummyStatePending; + volatile int _dummyPosPending; // Free-running frame counter incremented always in process. jack_nframes_t _frameCounter; @@ -58,17 +61,17 @@ virtual ~JackAudioDevice(); virtual void nullify_client() { _client = 0; } - virtual inline int deviceType() const { return JACK_AUDIO; } // p3.3.52 + virtual inline int deviceType() const { return JACK_AUDIO; } void scanMidiPorts(); //virtual void start(); virtual void start(int); virtual void stop (); - virtual bool dummySync(int state); // Artificial sync when not using Jack transport. virtual int framePos() const; virtual unsigned frameTime() const { return _frameCounter; } + virtual double systemTime() const; virtual float* getBuffer(void* port, unsigned long nframes) { return (float*)jack_port_get_buffer((jack_port_t*)port, nframes); @@ -77,11 +80,10 @@ virtual std::list outputPorts(bool midi = false, int aliases = -1); virtual std::list inputPorts(bool midi = false, int aliases = -1); + jack_client_t* jackClient() const { return _client; } virtual void registerClient(); virtual const char* clientName() { return jackRegisteredName; } - //virtual void* registerOutPort(const char* name); - //virtual void* registerInPort(const char* name); virtual void* registerOutPort(const char* /*name*/, bool /*midi*/); virtual void* registerInPort(const char* /*name*/, bool /*midi*/); @@ -95,7 +97,7 @@ virtual void* findPort(const char* name); virtual QString portName(void* port); virtual int getState(); - virtual unsigned int getCurFrame(); + virtual unsigned int getCurFrame() const; virtual bool isRealtime() { return jack_is_realtime(_client); } virtual int realtimePriority() const; virtual void startTransport(); @@ -104,6 +106,7 @@ virtual void seekTransport(const Pos &p); virtual void setFreewheel(bool f); jack_transport_state_t transportQuery(jack_position_t* pos); + bool timebaseQuery(unsigned frames, unsigned* bar, unsigned* beat, unsigned* tick, unsigned* curr_abs_tick, unsigned* next_ticks); void graphChanged(); void registrationChanged(); void connectJackMidiPorts(); diff -Nru muse-2.0~rc2/muse/driver/jack.cpp muse-2.0/muse/driver/jack.cpp --- muse-2.0~rc2/muse/driver/jack.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/jack.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -3,6 +3,7 @@ // Linux Music Editor // $Id: jack.cpp,v 1.30.2.17 2009/12/20 05:00:35 terminator356 Exp $ // (C) Copyright 2002 Werner Schweer (ws@seh.de) +// (C) Copyright 2012 Tim E. Real (terminator356 on sourceforge.net) // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -41,6 +42,7 @@ #include "tempo.h" #include "sync.h" #include "utils.h" +#include "gconfig.h" #include "midi.h" #include "mididev.h" @@ -49,7 +51,7 @@ #include "jackmidi.h" -#define JACK_DEBUG 0 +#define JACK_DEBUG 0 //#include "errorhandler.h" @@ -82,15 +84,6 @@ namespace MusECore { -//extern int jackmidi_pi[2]; -//extern int jackmidi_po[2]; - -//jack_port_t *midi_port_in[JACK_MIDI_CHANNELS]; -//jack_port_t *midi_port_out[JACK_MIDI_CHANNELS]; - -//muse_jack_midi_buffer jack_midi_out_data[JACK_MIDI_CHANNELS]; -//muse_jack_midi_buffer jack_midi_in_data[JACK_MIDI_CHANNELS]; - JackAudioDevice* jackAudio; //--------------------------------------------------------- @@ -109,38 +102,11 @@ // jack_thread_init //--------------------------------------------------------- -static void jack_thread_init (void* ) // data +static void jack_thread_init (void* ) { + if (JACK_DEBUG) + printf("jack_thread_init()\n"); MusEGlobal::doSetuid(); - /* - if (jackAudio->isRealtime()) { - struct sched_param rt_param; - int rv; - memset(&rt_param, 0, sizeof(sched_param)); - int type; - rv = pthread_getschedparam(pthread_self(), &type, &rt_param); - if (rv != 0) - perror("get scheduler parameter"); - if (type != SCHED_FIFO) { - fprintf(stderr, "JACK thread not running SCHED_FIFO, try to set...\n"); - - memset(&rt_param, 0, sizeof(sched_param)); - rt_param.sched_priority = 1; - rv = pthread_setschedparam(pthread_self(), SCHED_FIFO, &rt_param); - if (rv != 0) - perror("set realtime scheduler"); - memset(&rt_param, 0, sizeof(sched_param)); - rv = pthread_getschedparam(pthread_self(), &type, &rt_param); - if (rv != 0) - perror("get scheduler parameter"); - if (type != SCHED_FIFO) - fprintf(stderr, "JACK still not running FIFO !?!\n" - "======reliable RT operation not possible!!======\n"); - else - fprintf(stderr, "JACK thread succesfully set to SCHED_FIFO\n"); - } - } - */ #ifdef VST_SUPPORT if (loadVST) fst_adopt_thread(); @@ -148,161 +114,78 @@ MusEGlobal::undoSetuid(); } -/* -//--------------------------------------------------------- -// processAudio + Midi -// JACK callback -//--------------------------------------------------------- -void -print_triplet(unsigned char *data) -{ - int a,b,c; - a = b = c = 0; - memcpy(&a, data, 1); - memcpy(&b, data+1, 1); - memcpy(&c, data+2, 1); - fprintf(stderr, "%x,%x,%x", a, b, c); -} -*/ - -/* -void handle_jack_midi_in_events(jack_nframes_t frames) -{ - char buf = 0; - int i,j; - jack_midi_event_t midi_event; - unsigned char t,n,v; - - for(j = 0; j < JACK_MIDI_CHANNELS; j++){ - void *midi_buffer_in = jack_port_get_buffer(midi_port_in[j], frames); - int event_count = jack_midi_get_event_count(midi_buffer_in); - - for(i = 0; i < event_count; i++){ - jack_midi_event_get(&midi_event, midi_buffer_in, i); - t = midi_event.buffer[0]; - n = midi_event.buffer[1]; - v = midi_event.buffer[2]; - if(((*(midi_event.buffer) & 0xf0)) == 0x90){ - fprintf(stderr, "jack-midi-in-event: ON_ time=%d %u ", midi_event.time, - midi_event.size); - print_triplet(midi_event.buffer); - fprintf(stderr, "\n"); - }else if(((*(midi_event.buffer)) & 0xf0) == 0x80){ - fprintf(stderr, "jack-midi-in-event: OFF time=%d %u ", midi_event.time, - midi_event.size); - print_triplet(midi_event.buffer); - fprintf(stderr, "\n"); - }else{ - fprintf(stderr, "jack-midi-in-event: ??? time=%d %u ", midi_event.time, - midi_event.size); - print_triplet(midi_event.buffer); - fprintf(stderr, "\n"); - } - jack_midi_in_data[j].buffer[0] = t; - jack_midi_in_data[j].buffer[1] = n; - jack_midi_in_data[j].buffer[2] = v; - jack_midi_in_data[j].buffer[3] = 1; - fprintf(stderr, "handle_jack_midi_in_events() w\n"); - write(jackmidi_pi[1], &buf, 1); - fprintf(stderr, "handle_jack_midi_in_events() wd\n"); - } - } -} - -void handle_jack_midi_out_events(jack_nframes_t frames) -{ - unsigned char *data; - void *port_buf; - int i,j,n,x; - - //for(i = 0; i < JACK_MIDI_CHANNELS; i++){ - for(i = 0; i < JACK_MIDI_CHANNELS; ++i){ - // jack-midi-clear any old events - while(jack_midi_out_data[i].buffer[jack_midi_out_data[i].take*4+3] == 2){ - port_buf = jack_port_get_buffer(midi_port_out[i], frames); - jack_midi_clear_buffer(port_buf); - jack_midi_out_data[i].buffer[jack_midi_out_data[i].take*4+3] = 0; - // point the take to the next slot - jack_midi_out_data[i].take++; - if(jack_midi_out_data[i].take >= JACK_MIDI_BUFFER_SIZE){ - jack_midi_out_data[i].take = 0; - } - } - // check if any incoming midi-events from muse - if(jack_midi_out_data[i].give != jack_midi_out_data[i].take){ - - if(jack_midi_out_data[i].give > jack_midi_out_data[i].take){ - n = jack_midi_out_data[i].give - jack_midi_out_data[i].take; - }else{ - n = jack_midi_out_data[i].give + - (JACK_MIDI_BUFFER_SIZE - jack_midi_out_data[i].take); - } - port_buf = jack_port_get_buffer(midi_port_out[i], frames); - jack_midi_clear_buffer(port_buf); - // FIX: midi events has different sizes, compare note-on to - // program-change. We should first walk over the events - // counting the size. - //data = jack_midi_event_reserve(port_buf, 0, n*3); - //x = jack_midi_out_data[i].take; - //for(j = 0; j < n; j++){ - // data[j*3+0] = jack_midi_out_data[i].buffer[x*4+0]; - // data[j*3+1] = jack_midi_out_data[i].buffer[x*4+1]; - // data[j*3+2] = jack_midi_out_data[i].buffer[x*4+2]; - // after having copied the buffer over to the jack-buffer, - // mark the muses midi-out buffer as 'need-cleaning' - // jack_midi_out_data[i].buffer[x*4+3] = 2; - // x++; - // if(x >= JACK_MIDI_BUFFER_SIZE){ - // x = 0; - // } - //} - - x = jack_midi_out_data[i].take; - for(j = 0; j < n; ++j) - { - data = jack_midi_event_reserve(port_buf, 0, 3); - if(data == 0) - { - fprintf(stderr, "handle_jack_midi_out_events: buffer overflow, event lost\n"); - // Can do no more processing. Just return. - return; - } - data[0] = jack_midi_out_data[i].buffer[x*4+0]; - data[1] = jack_midi_out_data[i].buffer[x*4+1]; - data[2] = jack_midi_out_data[i].buffer[x*4+2]; - // after having copied the buffer over to the jack-buffer, - // mark the muses midi-out buffer as 'need-cleaning' - jack_midi_out_data[i].buffer[x*4+3] = 2; - x++; - if(x >= JACK_MIDI_BUFFER_SIZE){ - x = 0; - } - } - - } - } -} -*/ - -//static int processAudio(jack_nframes_t frames, void*) int JackAudioDevice::processAudio(jack_nframes_t frames, void*) { - jackAudio->_frameCounter += frames; - -/// handle_jack_midi_in_events(frames); -/// handle_jack_midi_out_events(frames); - -// if (JACK_DEBUG) -// printf("processAudio - >>>>\n"); + int state_pending = jackAudio->_dummyStatePending; // Snapshots. + int pos_pending = jackAudio->_dummyPosPending; // + jackAudio->_dummyStatePending = -1; // Reset. + jackAudio->_dummyPosPending = -1; // + + jackAudio->_frameCounter += frames; MusEGlobal::segmentSize = frames; + if (MusEGlobal::audio->isRunning()) - MusEGlobal::audio->process((unsigned long)frames); + { + // Are we not using Jack transport? + if(!MusEGlobal::useJackTransport.value()) + { + // STOP -> STOP, STOP -> START_PLAY, PLAY -> START_PLAY all count as 'syncing'. + if(((jackAudio->dummyState == Audio::STOP || jackAudio->dummyState == Audio::PLAY) && state_pending == Audio::START_PLAY) + || (jackAudio->dummyState == Audio::STOP && state_pending == Audio::STOP) ) + { + jackAudio->_syncTimeout = (float)frames / (float)MusEGlobal::sampleRate; // (Re)start the timeout counter... + if(pos_pending != -1) + jackAudio->dummyPos = pos_pending; // Set the new dummy position. + if((jackAudio->dummyState == Audio::STOP || jackAudio->dummyState == Audio::PLAY) && state_pending == Audio::START_PLAY) + jackAudio->dummyState = Audio::START_PLAY; + } + else // All other states such as START_PLAY -> STOP, PLAY -> STOP. + if(state_pending != -1 && state_pending != jackAudio->dummyState) + { + jackAudio->_syncTimeout = 0.0; // Reset. + jackAudio->dummyState = state_pending; + } + + // Is the sync timeout counter running? + if(jackAudio->_syncTimeout > 0.0) + { + //printf("Jack processAudio dummy sync: state:%d pending:%d\n", jackAudio->dummyState, state_pending); + // Is MusE audio ready to roll? + if(MusEGlobal::audio->sync(jackAudio->dummyState, jackAudio->dummyPos)) + { + jackAudio->_syncTimeout = 0.0; // Reset. + // We're ready. Switch to PLAY state. + if(jackAudio->dummyState == Audio::START_PLAY) + jackAudio->dummyState = Audio::PLAY; + } + else + { + jackAudio->_syncTimeout += (float)frames / (float)MusEGlobal::sampleRate; + if(jackAudio->_syncTimeout > 5.0) // TODO: Make this timeout a 'settings' option so it can be applied both to Jack and here. + { + if (MusEGlobal::debugMsg) + puts("Jack dummy sync timeout! Starting anyway...\n"); + jackAudio->_syncTimeout = 0.0; // Reset. + // We're not ready, but no time left - gotta roll anyway. Switch to PLAY state, similar to how Jack is supposed to work. + if(jackAudio->dummyState == Audio::START_PLAY) + { + jackAudio->dummyState = Audio::PLAY; + // Docs say sync will be called with Rolling state when timeout expires. + MusEGlobal::audio->sync(jackAudio->dummyState, jackAudio->dummyPos); + } + } + } + } + } + + //if(jackAudio->getState() != Audio::START_PLAY) // Don't process while we're syncing. TODO: May need to deliver silence in process! + MusEGlobal::audio->process((unsigned long)frames); + } else { if (MusEGlobal::debugMsg) puts("jack calling when audio is disconnected!\n"); } -// if (JACK_DEBUG) -// printf("processAudio - <<<<\n"); + return 0; } @@ -314,8 +197,21 @@ static int processSync(jack_transport_state_t state, jack_position_t* pos, void*) { if (JACK_DEBUG) - printf("processSync()\n"); + { + printf("processSync frame:%u\n", pos->frame); + if(pos->valid & JackPositionBBT) + { + if(JACK_DEBUG) + { + printf("processSync BBT:\n bar:%d beat:%d tick:%d\n bar_start_tick:%f beats_per_bar:%f beat_type:%f ticks_per_beat:%f beats_per_minute:%f\n", + pos->bar, pos->beat, pos->tick, pos->bar_start_tick, pos->beats_per_bar, pos->beat_type, pos->ticks_per_beat, pos->beats_per_minute); + if(pos->valid & JackBBTFrameOffset) + printf("processSync BBTFrameOffset: %u\n", pos->bbt_offset); + } + } + } + if(!MusEGlobal::useJackTransport.value()) return 1; @@ -344,13 +240,9 @@ } unsigned frame = pos->frame; - //printf("processSync valid:%d frame:%d\n", pos->valid, frame); - - // p3.3.23 - //printf("Jack processSync() before MusEGlobal::audio->sync frame:%d\n", frame); //return MusEGlobal::audio->sync(audioState, frame); int rv = MusEGlobal::audio->sync(audioState, frame); - //printf("Jack processSync() after MusEGlobal::audio->sync frame:%d\n", frame); + //printf("Jack processSync() after MusEGlobal::audio->sync frame:%d\n", frame); return rv; } @@ -359,50 +251,54 @@ //--------------------------------------------------------- static void timebase_callback(jack_transport_state_t /* state */, - jack_nframes_t /* nframes */, + jack_nframes_t nframes, jack_position_t* pos, - int /* new_pos */, + int new_pos, void*) { - //printf("Jack timebase_callback pos->frame:%u MusEGlobal::audio->tickPos:%d MusEGlobal::song->cpos:%d\n", pos->frame, MusEGlobal::audio->tickPos(), MusEGlobal::song->cpos()); - - // p3.3.27 - //Pos p(pos->frame, false); + + if (JACK_DEBUG) + { + if(pos->valid & JackPositionBBT) + printf("timebase_callback BBT:\n bar:%d beat:%d tick:%d\n bar_start_tick:%f beats_per_bar:%f beat_type:%f ticks_per_beat:%f beats_per_minute:%f\n", + pos->bar, pos->beat, pos->tick, pos->bar_start_tick, pos->beats_per_bar, pos->beat_type, pos->ticks_per_beat, pos->beats_per_minute); + if(pos->valid & JackBBTFrameOffset) + printf("timebase_callback BBTFrameOffset: %u\n", pos->bbt_offset); + if(pos->valid & JackPositionTimecode) + printf("timebase_callback JackPositionTimecode: frame_time:%f next_time:%f\n", pos->frame_time, pos->next_time); + if(pos->valid & JackAudioVideoRatio) + printf("timebase_callback JackAudioVideoRatio: %f\n", pos->audio_frames_per_video_frame); + if(pos->valid & JackVideoFrameOffset) + printf("timebase_callback JackVideoFrameOffset: %u\n", pos->video_offset); + } + + //Pos p(pos->frame, false); Pos p(MusEGlobal::extSyncFlag.value() ? MusEGlobal::audio->tickPos() : pos->frame, MusEGlobal::extSyncFlag.value() ? true : false); // Can't use song pos - it is only updated every (slow) GUI heartbeat ! //Pos p(MusEGlobal::extSyncFlag.value() ? MusEGlobal::song->cpos() : pos->frame, MusEGlobal::extSyncFlag.value() ? true : false); pos->valid = JackPositionBBT; p.mbt(&pos->bar, &pos->beat, &pos->tick); + pos->bar_start_tick = Pos(pos->bar, 0, 0).tick(); pos->bar++; pos->beat++; - pos->bar_start_tick = Pos(pos->bar, 0, 0).tick(); - // - // dummy: - // - - // p3.3.26 - //pos->beats_per_bar = 4; - //pos->beat_type = 4; - //pos->ticks_per_beat = 384; - // - /* // From example client transport.c : - float time_beats_per_bar = 4.0; - float time_beat_type = 0.25; // Huh? Inverted? From docs: "Time signature 'denominator'" - double time_ticks_per_beat = 1920.0; // Huh? Ticks per beat should be 24 etc. not 384 or 1920 etc. Otherwise it would be called 'frames_per_beat'. - double time_beats_per_minute = 120.0; - */ - // int z, n; AL::sigmap.timesig(p.tick(), z, n); pos->beats_per_bar = z; pos->beat_type = n; - //pos->ticks_per_beat = config.division; - pos->ticks_per_beat = 24; + pos->ticks_per_beat = MusEGlobal::config.division; + //pos->ticks_per_beat = 24; + + double tempo = MusEGlobal::tempomap.tempo(p.tick()); + pos->beats_per_minute = (60000000.0 / tempo) * double(MusEGlobal::tempomap.globalTempo())/100.0; + if (JACK_DEBUG) + { + printf("timebase_callback is new_pos:%d nframes:%u frame:%u tickPos:%d cpos:%d\n", new_pos, nframes, pos->frame, MusEGlobal::audio->tickPos(), MusEGlobal::song->cpos()); + printf(" new: bar:%d beat:%d tick:%d\n bar_start_tick:%f beats_per_bar:%f beat_type:%f ticks_per_beat:%f beats_per_minute:%f\n", + pos->bar, pos->beat, pos->tick, pos->bar_start_tick, pos->beats_per_bar, pos->beat_type, pos->ticks_per_beat, pos->beats_per_minute); + } - int tempo = MusEGlobal::tempomap.tempo(p.tick()); - pos->beats_per_minute = (60000000.0 / tempo) * MusEGlobal::tempomap.globalTempo()/100.0; } //--------------------------------------------------------- @@ -446,6 +342,7 @@ static void noJackError(const char* /* s */) { + //printf("noJackError()\n"); } //--------------------------------------------------------- @@ -472,20 +369,7 @@ if (JACK_DEBUG) printf("~JackAudioDevice()\n"); if (_client) { - - /* - // p3.3.35 - for(int i = 0; i < JACK_MIDI_CHANNELS; i++) - { - if(midi_port_in[i]) - jack_port_unregister(_client, midi_port_in[i]); - if(midi_port_out[i]) - jack_port_unregister(_client, midi_port_out[i]); - } - */ - if (jack_client_close(_client)) { - //error->logError("jack_client_close() failed: %s\n", strerror(errno)); fprintf(stderr,"jack_client_close() failed: %s\n", strerror(errno)); } } @@ -518,32 +402,6 @@ return param.sched_priority; } -/* -//--------------------------------------------------------- -// getJackName() -//--------------------------------------------------------- - -char* JackAudioDevice::getJackName() - { - return jackRegisteredName; - } -*/ - -/* -//--------------------------------------------------------- -// clientName() -//--------------------------------------------------------- - -const char* JackAudioDevice::clientName() -{ - //if(_client) - // return jack_get_client_name(_client); - //else - // return "MusE"; - return jackRegisteredName; -} -*/ - //--------------------------------------------------------- // initJackAudio // return true if JACK not found @@ -551,15 +409,6 @@ bool initJackAudio() { - /* - // p3.3.35 - for(int i = 0; i < JACK_MIDI_CHANNELS; i++) - { - midi_port_in[i] = 0; - midi_port_out[i] = 0; - } - */ - if (JACK_DEBUG) printf("initJackAudio()\n"); if (MusEGlobal::debugMsg) { @@ -596,65 +445,31 @@ if (status & JackVersionError) printf("jack server has wrong version\n"); printf("cannot create jack client\n"); - MusEGlobal::undoSetuid(); // p3.3.51 + MusEGlobal::undoSetuid(); return true; } if (MusEGlobal::debugMsg) fprintf(stderr, "initJackAudio(): client %s opened.\n", jack_get_client_name(client)); - if (client) { - jack_set_error_function(jackError); - //jackAudio = new JackAudioDevice(client, jackIdString); - jackAudio = new JackAudioDevice(client, jack_get_client_name(client)); - if (MusEGlobal::debugMsg) - fprintf(stderr, "initJackAudio(): registering client...\n"); - jackAudio->registerClient(); - MusEGlobal::sampleRate = jack_get_sample_rate(client); - MusEGlobal::segmentSize = jack_get_buffer_size(client); - jack_set_thread_init_callback(client, (JackThreadInitCallback) jack_thread_init, 0); - //jack_set_timebase_callback(client, 0, (JackTimebaseCallback) timebase_callback, 0); - } + //jack_set_error_function(jackError); + //jackAudio = new JackAudioDevice(client, jackIdString); + jackAudio = new JackAudioDevice(client, jack_get_client_name(client)); + if (MusEGlobal::debugMsg) + fprintf(stderr, "initJackAudio(): registering client...\n"); + MusEGlobal::undoSetuid(); - /* - // setup midi input/output - //memset(jack_midi_out_data, 0, JACK_MIDI_CHANNELS * sizeof(muse_jack_midi_buffer)); - //memset(jack_midi_in_data, 0, JACK_MIDI_CHANNELS * sizeof(muse_jack_midi_buffer)); - if(client){ - for(i = 0; i < JACK_MIDI_CHANNELS; i++) - { - char buf[80]; - snprintf(buf, 80, "muse-jack-midi-in-%d", i+1); - midi_port_in[i] = jack_port_register(client, buf, - JACK_DEFAULT_MIDI_TYPE, - JackPortIsInput, 0); - if(midi_port_in[i] == NULL){ - fprintf(stderr, "failed to register jack-midi-in\n"); - exit(-1); - } - snprintf(buf, 80, "muse-jack-midi-out-%d", i+1); - midi_port_out[i] = jack_port_register(client, buf, - JACK_DEFAULT_MIDI_TYPE, - JackPortIsOutput, 0); - if(midi_port_out == NULL) - { - fprintf(stderr, "failed to register jack-midi-out\n"); - exit(-1); - } - } - } - else - { - fprintf(stderr, "WARNING NO muse-jack midi connection\n"); - } - */ - - if (client) { - MusEGlobal::audioDevice = jackAudio; - jackAudio->scanMidiPorts(); - return false; - } - return true; + MusEGlobal::audioDevice = jackAudio; + + // WARNING Don't do this here. Do it after any MusE ALSA client is registered, otherwise random crashes can occur. + //jackAudio->registerClient(); + + MusEGlobal::sampleRate = jack_get_sample_rate(client); + MusEGlobal::segmentSize = jack_get_buffer_size(client); + + jackAudio->scanMidiPorts(); + + return false; } static int bufsize_callback(jack_nframes_t n, void*) @@ -730,8 +545,8 @@ //void* port = md->clientPort(); if(md->rwFlags() & 1) { - void* port = md->outClientPort(); // p3.3.55 - if(port) // + void* port = md->outClientPort(); + if(port) { RouteList* rl = md->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) @@ -743,12 +558,10 @@ } } - // else // p3.3.55 Removed - if(md->rwFlags() & 2) { - void* port = md->inClientPort(); // p3.3.55 - if(port) // + void* port = md->inClientPort(); + if(port) { RouteList* rl = md->inRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) @@ -760,117 +573,8 @@ } } } - - - /* - const char* type = JACK_DEFAULT_MIDI_TYPE; - const char** ports = jack_get_ports(_client, 0, type, 0); - for (const char** p = ports; p && *p; ++p) - { - jack_port_t* port = jack_port_by_name(_client, *p); - if(!port) - continue; - // Ignore our own client ports. - if(jack_port_is_mine(_client, port)) - { - if(MusEGlobal::debugMsg) - printf(" ignoring own port: %s\n", *p); - continue; - } - int nsz = jack_port_name_size(); - char buffer[nsz]; - strncpy(buffer, *p, nsz); - // Ignore the MusE Jack port. - //if(strncmp(buffer, "MusE", 4) == 0) - // continue; - - if(MusEGlobal::debugMsg) - printf(" found port: %s ", buffer); - - // If there are aliases for this port, use the first one - much better for identifying. - //char a1[nsz]; - char a2[nsz]; - char* aliases[2]; - //aliases[0] = a1; - aliases[0] = buffer; - aliases[1] = a2; - // To disable aliases, just rem this line. - jack_port_get_aliases(port, aliases); - //int na = jack_port_get_aliases(port, aliases); - //char* namep = (na >= 1) ? aliases[0] : buffer; - char* namep = aliases[0]; - - if(MusEGlobal::debugMsg) - printf("alias: %s\n", aliases[0]); - - //int flags = 0; - int pf = jack_port_flags(port); - // If Jack port can send data to us... - //if(pf & JackPortIsOutput) - // Mark as input capable. - // flags |= 2; - // If Jack port can receive data from us... - //if(pf & JackPortIsInput) - // Mark as output capable. - // flags |= 1; - - //JackPort jp(0, QString(buffer), flags); - //portList.append(jp); - - QString name(namep); - - if(JACK_DEBUG) - printf("JackAudioDevice::graphChanged %s\n", name.toLatin1()); - - for(iMidiDevice imd = MusEGlobal::midiDevices.begin(); imd != MusEGlobal::midiDevices.end(); ++imd) - { - // Is it a Jack midi device? - MidiJackDevice* mjd = dynamic_cast(*imd); - if(!mjd) - continue; - - //if(dev->name() != name) - // continue; - - // Is this port the one created for the Jack midi device? - if(!mjd->clientJackPort() || (mjd->clientJackPort() != port)) - continue; - - jack_port_t* devport = jack_port_by_name(_client, mjd->name().toLatin1()); - if(!devport) - continue; - - int ofl = mjd->openFlags(); - - if(JACK_DEBUG) - printf("JackAudioDevice::graphChanged found MidiJackDevice:%s\n", mjd->name().toLatin1()); - - // Note docs say it can't be both input and output. src, dest - // If Jack port can receive data from us and we actually want to... - if((pf & JackPortIsOutput) && (ofl & 1)) - { - if(JACK_DEBUG) - printf("JackAudioDevice::graphChanged connecting MusE output\n"); - MusEGlobal::audioDevice->connect(port, devport); - } - else - // If Jack port can send data to us and we actually want it... - if((pf & JackPortIsInput) && (ofl & 2)) - { - if(JACK_DEBUG) - printf("JackAudioDevice::graphChanged connecting MusE input\n"); - MusEGlobal::audioDevice->connect(devport, port); - } - - break; - } - } - - if(ports) - free(ports); - - */ } + //--------------------------------------------------------- // client_registration_callback //--------------------------------------------------------- @@ -1009,9 +713,6 @@ ++pn; } - // p3.3.37 - //delete ports; - //free(ports); jack_free(ports); // p4.0.29 ports = NULL; @@ -1100,9 +801,6 @@ ++pn; } - // p3.3.37 - //delete ports; - //free(ports); jack_free(ports); // p4.0.29 ports = NULL; @@ -1134,12 +832,9 @@ if(md->rwFlags() & 1) // Writable { - // p3.3.55 jack_port_t* port = (jack_port_t*)md->outClientPort(); if(port != 0) { - //printf("graphChanged() valid out client port\n"); // p3.3.55 - const char** ports = jack_port_get_all_connections(_client, port); RouteList* rl = md->outRoutes(); @@ -1160,7 +855,7 @@ //if (irl->channel != channel) // continue; QString name = irl->name(); - //name += QString(JACK_MIDI_OUT_PORT_SUFFIX); // p3.3.55 + //name += QString(JACK_MIDI_OUT_PORT_SUFFIX); QByteArray ba = name.toLatin1(); const char* portName = ba.constData(); bool found = false; @@ -1224,9 +919,6 @@ ++pn; } - // p3.3.55 - // Done with ports. Free them. - //free(ports); jack_free(ports); // p4.0.29 } } @@ -1239,11 +931,9 @@ if(md->rwFlags() & 2) // Readable { - // p3.3.55 jack_port_t* port = (jack_port_t*)md->inClientPort(); if(port != 0) { - //printf("graphChanged() valid in client port\n"); // p3.3.55 const char** ports = jack_port_get_all_connections(_client, port); RouteList* rl = md->inRoutes(); @@ -1326,20 +1016,11 @@ } ++pn; } - // p3.3.55 - // Done with ports. Free them. - //free(ports); + jack_free(ports); // p4.0.29 } } } - - // p3.3.55 Removed. - //if(ports) - // Done with ports. Free them. - //delete ports; - // free(ports); - //ports = NULL; } } @@ -1358,20 +1039,17 @@ if (JACK_DEBUG) printf("registerClient()\n"); if(!checkJackClient(_client)) return; + + jack_set_thread_init_callback(_client, (JackThreadInitCallback) jack_thread_init, 0); + //jack_set_timebase_callback(client, 0, (JackTimebaseCallback) timebase_callback, 0); jack_set_process_callback(_client, processAudio, 0); jack_set_sync_callback(_client, processSync, 0); - // FIXME: FIXME: - // Added by Tim. p3.3.20 - // Did not help. Seek during play: Jack keeps switching to STOP state after about 1-2 seconds timeout if sync is holding it up. - // Nothing in MusE seems to be telling it to stop. - // NOTE: Update: It was a bug in QJackCtl. Fixed now. //jack_set_sync_timeout(_client, 5000000); // Change default 2 to 5 second sync timeout because prefetch may be very slow esp. with resampling ! jack_on_shutdown(_client, processShutdown, 0); jack_set_buffer_size_callback(_client, bufsize_callback, 0); jack_set_sample_rate_callback(_client, srate_callback, 0); jack_set_port_registration_callback(_client, registration_callback, 0); - // p3.3.37 jack_set_client_registration_callback(_client, client_registration_callback, 0); jack_set_port_connect_callback(_client, port_connect_callback, 0); @@ -1384,7 +1062,6 @@ // registerInPort //--------------------------------------------------------- -//void* JackAudioDevice::registerInPort(const char* name) void* JackAudioDevice::registerInPort(const char* name, bool midi) { if (JACK_DEBUG) @@ -1401,7 +1078,6 @@ // registerOutPort //--------------------------------------------------------- -//void* JackAudioDevice::registerOutPort(const char* name) void* JackAudioDevice::registerOutPort(const char* name, bool midi) { if (JACK_DEBUG) @@ -1452,7 +1128,7 @@ if (JACK_DEBUG) printf("JackAudioDevice::disconnect()\n"); if(!checkJackClient(_client)) return; - if(!src || !dst) // p3.3.55 + if(!src || !dst) return; const char* sn = jack_port_name((jack_port_t*) src); const char* dn = jack_port_name((jack_port_t*) dst); @@ -1478,7 +1154,6 @@ // start //--------------------------------------------------------- -//void JackAudioDevice::start() void JackAudioDevice::start(int /*priority*/) { if (JACK_DEBUG) @@ -1488,7 +1163,7 @@ MusEGlobal::doSetuid(); if (jack_activate(_client)) { - MusEGlobal::undoSetuid(); // p3.3.51 + MusEGlobal::undoSetuid(); fprintf (stderr, "JACK: cannot activate client\n"); exit(-1); } @@ -1530,7 +1205,6 @@ } } - // p3.3.37 // Connect the Jack midi client ports to device ports. connectJackMidiPorts(); @@ -1571,10 +1245,96 @@ } //--------------------------------------------------------- +// timebaseQuery +// Given the number of frames in this period, get the bar, beat, tick, +// and current absolute tick, and number of ticks in this period. +// Return false if information could not be obtained. +//--------------------------------------------------------- + +bool JackAudioDevice::timebaseQuery(unsigned frames, unsigned* bar, unsigned* beat, unsigned* tick, unsigned* curr_abs_tick, unsigned* next_ticks) +{ + jack_position_t jp; + jack_transport_query(_client, &jp); + + if(JACK_DEBUG) + printf("timebaseQuery frame:%u\n", jp.frame); + + if(jp.valid & JackPositionBBT) + { + if(JACK_DEBUG) + { + printf("timebaseQuery BBT:\n bar:%d beat:%d tick:%d\n bar_start_tick:%f beats_per_bar:%f beat_type:%f ticks_per_beat:%f beats_per_minute:%f\n", + jp.bar, jp.beat, jp.tick, jp.bar_start_tick, jp.beats_per_bar, jp.beat_type, jp.ticks_per_beat, jp.beats_per_minute); + if(jp.valid & JackBBTFrameOffset) + printf("timebaseQuery BBTFrameOffset: %u\n", jp.bbt_offset); + } + + if(jp.ticks_per_beat > 0.0) + { + unsigned muse_tick = unsigned((double(jp.tick) / jp.ticks_per_beat) * double(MusEGlobal::config.division)); + unsigned curr_tick = ((jp.bar - 1) * jp.beats_per_bar + (jp.beat - 1)) * double(MusEGlobal::config.division) + muse_tick; + // Prefer the reported frame rate over the app's rate if possible. + double f_rate = jp.frame_rate != 0 ? jp.frame_rate : MusEGlobal::sampleRate; + // beats_per_minute is "supposed" to be quantized to period size - that is, computed + // so that mid-period changes are averaged out to produce a single tempo which + // produces the same tick in the end. If we can rely on that, we should be good accuracy. + unsigned ticks = double(MusEGlobal::config.division) * (jp.beats_per_minute / 60.0) * double(frames) / f_rate; + + if(JACK_DEBUG) + printf("timebaseQuery curr_tick:%u f_rate:%f ticks:%u\n", curr_tick, f_rate, ticks); + + if(bar) *bar = jp.bar; + if(beat) *beat = jp.beat; + if(tick) *tick = muse_tick; + + if(curr_abs_tick) *curr_abs_tick = curr_tick; + if(next_ticks) *next_ticks = ticks; + + return true; + } + } + + if(JACK_DEBUG) + { + if(jp.valid & JackPositionTimecode) + printf("timebaseQuery JackPositionTimecode: frame_time:%f next_time:%f\n", jp.frame_time, jp.next_time); + if(jp.valid & JackAudioVideoRatio) + printf("timebaseQuery JackAudioVideoRatio: %f\n", jp.audio_frames_per_video_frame); + if(jp.valid & JackVideoFrameOffset) + printf("timebaseQuery JackVideoFrameOffset: %u\n", jp.video_offset); + } + + return false; +} + +//--------------------------------------------------------- +// systemTime +// Return system time. Depends on selected clock source. +// With Jack, may be based upon wallclock time, the +// processor cycle counter or the HPET clock etc. +//--------------------------------------------------------- + +double JackAudioDevice::systemTime() const +{ + // Client valid? According to sletz: For jack_get_time "There are some timing related + // initialization that are done once when a first client is created." + if(!checkJackClient(_client)) + { + struct timeval t; + gettimeofday(&t, 0); + //printf("%ld %ld\n", t.tv_sec, t.tv_usec); // Note I observed values coming out of order! Causing some problems. + return (double)((double)t.tv_sec + (t.tv_usec / 1000000.0)); + } + + jack_time_t t = jack_get_time(); + return double(t) / 1000000.0; +} + +//--------------------------------------------------------- // getCurFrame //--------------------------------------------------------- -unsigned int JackAudioDevice::getCurFrame() +unsigned int JackAudioDevice::getCurFrame() const { if (JACK_DEBUG) printf("JackAudioDevice::getCurFrame pos.frame:%d\n", pos.frame); @@ -1723,9 +1483,6 @@ name_list.push_back(qname); } - // p3.3.37 - //if(ports) - //free(ports); // jack_free(ports); // p4.0.29 //return clientList; @@ -1744,61 +1501,6 @@ const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; const char** ports = jack_get_ports(_client, 0, type, JackPortIsOutput); - /* - QString qname; - for (const char** p = ports; p && *p; ++p) { - jack_port_t* port = jack_port_by_name(_client, *p); - //int flags = jack_port_flags(port); - //if (!(flags & JackPortIsOutput)) - // continue; - //char buffer[128]; - - int nsz = jack_port_name_size(); - char buffer[nsz]; - - strncpy(buffer, *p, nsz); - //if (strncmp(buffer, "MusE", 4) == 0) - //{ - // if(MusEGlobal::debugMsg) - // printf("JackAudioDevice::outputPorts ignoring own MusE port: %s\n", *p); - // continue; - //} - - // Ignore our own client ports. - if(jack_port_is_mine(_client, port)) - { - if(MusEGlobal::debugMsg) - printf("JackAudioDevice::outputPorts ignoring own port: %s\n", *p); - continue; - } - - // p3.3.38 - if((aliases == 0) || (aliases == 1)) - { - //char a1[nsz]; - char a2[nsz]; - char* al[2]; - //aliases[0] = a1; - al[0] = buffer; - al[1] = a2; - int na = jack_port_get_aliases(port, al); - int a = aliases; - if(a >= na) - { - a = na; - if(a > 0) - a--; - } - qname = QString(al[a]); - } - else - qname = QString(buffer); - - //clientList.push_back(QString(buffer)); - clientList.push_back(qname); - } - */ - if(ports) { getJackPorts(ports, clientList, midi, true, aliases); // Get physical ports first. @@ -1823,61 +1525,6 @@ const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; const char** ports = jack_get_ports(_client, 0, type, JackPortIsInput); - /* - QString qname; - for (const char** p = ports; p && *p; ++p) { - jack_port_t* port = jack_port_by_name(_client, *p); - //int flags = jack_port_flags(port); - //if (!(flags & JackPortIsInput)) - // continue; - //char buffer[128]; - - int nsz = jack_port_name_size(); - char buffer[nsz]; - - strncpy(buffer, *p, nsz); - //if (strncmp(buffer, "MusE", 4) == 0) - //{ - // if(MusEGlobal::debugMsg) - // printf("JackAudioDevice::inputPorts ignoring own MusE port: %s\n", *p); - // continue; - //} - - // Ignore our own client ports. - if(jack_port_is_mine(_client, port)) - { - if(MusEGlobal::debugMsg) - printf("JackAudioDevice::inputPorts ignoring own port: %s\n", *p); - continue; - } - - // p3.3.38 - if((aliases == 0) || (aliases == 1)) - { - //char a1[nsz]; - char a2[nsz]; - char* al[2]; - //aliases[0] = a1; - al[0] = buffer; - al[1] = a2; - int na = jack_port_get_aliases(port, al); - int a = aliases; - if(a >= na) - { - a = na; - if(a > 0) - a--; - } - qname = QString(al[a]); - } - else - qname = QString(buffer); - - //clientList.push_back(QString(buffer)); - clientList.push_back(qname); - } - */ - if(ports) { getJackPorts(ports, clientList, midi, true, aliases); // Get physical ports first. @@ -1894,8 +1541,8 @@ QString JackAudioDevice::portName(void* port) { - if (JACK_DEBUG) - printf("JackAudioDevice::portName(\n"); + //if (JACK_DEBUG) + // printf("JackAudioDevice::portName\n"); if(!checkJackClient(_client)) return ""; if (!port) return ""; @@ -1979,37 +1626,6 @@ } //--------------------------------------------------------- -// dummySync -//--------------------------------------------------------- - -bool JackAudioDevice::dummySync(int state) -{ - // Roughly segment time length. - //timespec ts = { 0, (1000000000 * MusEGlobal::segmentSize) / MusEGlobal::sampleRate }; // In nanoseconds. - unsigned int sl = (1000000 * MusEGlobal::segmentSize) / MusEGlobal::sampleRate; // In microseconds. - - double ct = curTime(); - // Wait for a default maximum of 5 seconds. - // Similar to how Jack is supposed to wait a default of 2 seconds for slow clients. - // TODO: Make this timeout a 'settings' option so it can be applied both to Jack and here. - while((curTime() - ct) < 5.0) - { - // Is MusE audio ready to roll? - if(MusEGlobal::audio->sync(state, dummyPos)) - return true; - - // Not ready. Wait a 'segment', try again... - //nanosleep(&ts, NULL); - usleep(sl); // usleep is supposed to be obsolete! - } - - //if(JACK_DEBUG) - printf("JackAudioDevice::dummySync Sync timeout - audio not ready!\n"); - - return false; -} - -//--------------------------------------------------------- // startTransport //--------------------------------------------------------- @@ -2022,19 +1638,7 @@ // as if processSync was called. if(!MusEGlobal::useJackTransport.value()) { - //dummyState = Audio::START_PLAY; - - // Is MusE audio ready to roll? - //if(dummySync(dummyState)) - if(dummySync(Audio::START_PLAY)) - { - // MusE audio is ready to roll. Let's play. - dummyState = Audio::PLAY; - return; - } - - // Ready or not, we gotta roll. Similar to how Jack is supposed to roll anyway. - dummyState = Audio::PLAY; + _dummyStatePending = Audio::START_PLAY; return; } @@ -2052,11 +1656,9 @@ if (JACK_DEBUG) printf("JackAudioDevice::stopTransport()\n"); - dummyState = Audio::STOP; - if(!MusEGlobal::useJackTransport.value()) { - //dummyState = Audio::STOP; + _dummyStatePending = Audio::STOP; return; } @@ -2077,32 +1679,11 @@ if (JACK_DEBUG) printf("JackAudioDevice::seekTransport() frame:%d\n", frame); - dummyPos = frame; if(!MusEGlobal::useJackTransport.value()) { - // If we're not using Jack's transport, just pass the current state and new frame along - // as if processSync was called. - //dummyPos = frame; - int tempState = dummyState; - //dummyState = Audio::START_PLAY; - - // Is MusE audio ready yet? - //MusEGlobal::audio->sync(dummyState, dummyPos); - //if(dummySync(dummyState)) - if(dummySync(Audio::START_PLAY)) - { - dummyState = tempState; - return; - } - - // Not ready, resume previous state anyway. - // FIXME: Observed: Seek during play: Jack transport STOPs on timeout. - // Docs say when starting play, transport will roll anyway, ready or not (observed), - // but don't mention what should happen on seek during play. - // And setting the slow-sync timeout doesn't seem to do anything! - // NOTE: Update: It was a bug with QJackCtl. Fixed now. - //dummyState = tempState; - dummyState = Audio::STOP; + _dummyPosPending = frame; + // STOP -> STOP means seek in stop mode. PLAY -> START_PLAY means seek in play mode. + _dummyStatePending = (dummyState == Audio::STOP ? Audio::STOP : Audio::START_PLAY); return; } @@ -2118,53 +1699,40 @@ void JackAudioDevice::seekTransport(const Pos &p) { if (JACK_DEBUG) - printf("JackAudioDevice::seekTransport() frame:%d\n", p.frame()); + printf("JackAudioDevice::seekTransport(Pos) frame:%d\n", p.frame()); - dummyPos = p.frame(); if(!MusEGlobal::useJackTransport.value()) { - // If we're not using Jack's transport, just pass the current state and new frame along - // as if processSync was called. - //dummyPos = p.frame(); - int tempState = dummyState; - //dummyState = Audio::START_PLAY; - - // Is MusE audio ready yet? - //MusEGlobal::audio->sync(dummyState, dummyPos); - //if(dummySync(dummyState)) - if(dummySync(Audio::START_PLAY)) - { - dummyState = tempState; - return; - } - - // Not ready, resume previous state anyway. - // FIXME: See fixme in other seekTransport... - //dummyState = tempState; - dummyState = Audio::STOP; + _dummyPosPending = p.frame(); + // STOP -> STOP means seek in stop mode. PLAY -> START_PLAY means seek in play mode. + _dummyStatePending = (dummyState == Audio::STOP ? Audio::STOP : Audio::START_PLAY); return; } if(!checkJackClient(_client)) return; + +// TODO: Be friendly to other apps... Sadly not many of us use jack_transport_reposition. +// This is actually required IF we want the extra position info to show up +// in the sync callback, otherwise we get just the frame only. +// This information is shared on the server, it is directly passed around. +// jack_transport_locate blanks the info from sync until the timebase callback reads +// it again right after, from some timebase master. See process in audio.cpp + +// jack_position_t jp; +// jp.frame = p.frame(); +// +// jp.valid = JackPositionBBT; +// p.mbt(&jp.bar, &jp.beat, &jp.tick); +// jp.bar_start_tick = Pos(jp.bar, 0, 0).tick(); +// jp.bar++; +// jp.beat++; +// jp.beats_per_bar = 5; // TODO Make this correct ! +// jp.beat_type = 8; // +// jp.ticks_per_beat = MusEGlobal::config.division; +// int tempo = MusEGlobal::tempomap.tempo(p.tick()); +// jp.beats_per_minute = (60000000.0 / tempo) * MusEGlobal::tempomap.globalTempo()/100.0; +// jack_transport_reposition(_client, &jp); - /* - jack_position_t jp; - jp.valid = JackPositionBBT; - p.mbt(&jp.bar, &jp.beat, &jp.tick); - jp.bar++; - jp.beat++; - jp.bar_start_tick = Pos(jp.bar, 0, 0).tick(); - // - // dummy: - // - jp.beats_per_bar = 4; - jp.beat_type = 4; - jp.ticks_per_beat = 384; - int tempo = MusEGlobal::tempomap.tempo(p.tick()); - jp.beats_per_minute = (60000000.0 / tempo) * MusEGlobal::tempomap.globalTempo()/100.0; - - jack_transport_reposition(_client, &jp); - */ jack_transport_locate(_client, p.frame()); } @@ -2230,8 +1798,8 @@ void JackAudioDevice::scanMidiPorts() { - if(MusEGlobal::debugMsg) - printf("JackAudioDevice::scanMidiPorts:\n"); + //if(MusEGlobal::debugMsg) + // printf("JackAudioDevice::scanMidiPorts:\n"); /* const char* type = JACK_DEFAULT_MIDI_TYPE; @@ -2380,7 +1948,6 @@ if (JACK_DEBUG) printf("exitJackAudio() after delete jackAudio\n"); - // Added by Tim. p3.3.14 MusEGlobal::audioDevice = NULL; } diff -Nru muse-2.0~rc2/muse/driver/jackmidi.cpp muse-2.0/muse/driver/jackmidi.cpp --- muse-2.0~rc2/muse/driver/jackmidi.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/jackmidi.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -24,11 +24,13 @@ #include #include +#include #include //#include #include "jackmidi.h" +#include "jackaudio.h" #include "song.h" #include "globals.h" #include "midi.h" @@ -43,14 +45,12 @@ #include "../mplugins/midiitransform.h" #include "../mplugins/mitplugin.h" #include "xml.h" +#include "gconfig.h" +#include "track.h" // Turn on debug messages. //#define JACK_MIDI_DEBUG -namespace MusEGlobal { -extern unsigned int volatile lastExtMidiSyncTick; -} - namespace MusECore { //--------------------------------------------------------- @@ -336,10 +336,10 @@ event.setLoopNum(MusEGlobal::audio->loopCount()); if (MusEGlobal::midiInputTrace) { - printf("Jack MidiInput: "); + printf("MidiIn Jack: <%s>: ", name().toLatin1().constData()); event.dump(); } - + int typ = event.type(); if(_port != -1) @@ -419,7 +419,7 @@ // Split the events up into channel fifos. Special 'channel' number 17 for sysex events. unsigned int ch = (typ == ME_SYSEX)? MIDI_CHANNELS : event.channel(); - if(_recordFifo[ch].put(MidiPlayEvent(event))) + if(_recordFifo[ch].put(event)) printf("MidiJackDevice::recordEvent: fifo channel %d overflow\n", ch); } @@ -431,7 +431,8 @@ { MidiRecordEvent event; event.setB(0); - + event.setPort(_port); + // NOTE: From muse_qt4_evolution. Not done here in Muse-2 (yet). // move all events 2*MusEGlobal::segmentSize into the future to get // jitterfree playback @@ -442,16 +443,25 @@ // catch process play // - //int frameOffset = MusEGlobal::audio->getFrameOffset(); - unsigned pos = MusEGlobal::audio->pos().frame(); - - event.setTime(MusEGlobal::extSyncFlag.value() ? MusEGlobal::lastExtMidiSyncTick : (pos + ev->time)); // p3.3.25 + // These Jack events arrived in the previous period, and it may not have been at the audio position before this one (after a seek). + // This is how our ALSA driver works, events there are timestamped asynchronous of any process, referenced to the CURRENT audio + // position, so that by the time of the NEXT process, THOSE events have also occured in the previous period. + // So, technically this is correct. What MATTERS is how we adjust the times for storage, and/or simultaneous playback in THIS period, + // and TEST: we'll need to make sure any non-contiguous previous period is handled correctly by process - will it work OK as is? + // If ALSA works OK than this should too... +#ifdef _AUDIO_USE_TRUE_FRAME_ + event.setTime(MusEGlobal::audio->previousPos().frame() + ev->time); +#else + event.setTime(MusEGlobal::audio->pos().frame() + ev->time); +#endif + event.setTick(MusEGlobal::lastExtMidiSyncTick); event.setChannel(*(ev->buffer) & 0xf); int type = *(ev->buffer) & 0xf0; int a = *(ev->buffer + 1) & 0x7f; int b = *(ev->buffer + 2) & 0x7f; event.setType(type); + switch(type) { case ME_NOTEON: case ME_NOTEOFF: @@ -494,7 +504,7 @@ return; case ME_SONGPOS: if(_port != -1) - MusEGlobal::midiSeq->setSongPosition(_port, *(ev->buffer + 1) | (*(ev->buffer + 2) >> 2 )); // LSB then MSB + MusEGlobal::midiSeq->setSongPosition(_port, *(ev->buffer + 1) | (*(ev->buffer + 2) << 7 )); // LSB then MSB return; //case ME_SONGSEL: //case ME_TUNE_REQ: @@ -504,9 +514,20 @@ case ME_START: case ME_CONTINUE: case ME_STOP: - if(_port != -1) - MusEGlobal::midiSeq->realtimeSystemInput(_port, type); + { + if(MusEGlobal::audioDevice && MusEGlobal::audioDevice->deviceType() == JACK_MIDI && _port != -1) + { + MusECore::JackAudioDevice* jad = static_cast(MusEGlobal::audioDevice); + jack_client_t* jc = jad->jackClient(); + if(jc) + { + jack_nframes_t abs_ft = jack_last_frame_time(jc) + ev->time; + double abs_ev_t = double(jack_frames_to_time(jc, abs_ft)) / 1000000.0; + MusEGlobal::midiSeq->realtimeSystemInput(_port, type, abs_ev_t); + } + } return; + } //case ME_SYSEX_END: //break; // return; @@ -525,11 +546,6 @@ return; } - if (MusEGlobal::midiInputTrace) { - printf("MidiInput<%s>: ", name().toLatin1().constData()); - event.dump(); - } - #ifdef JACK_MIDI_DEBUG printf("MidiJackDevice::eventReceived time:%d type:%d ch:%d A:%d B:%d\n", event.time(), event.type(), event.channel(), event.dataA(), event.dataB()); #endif @@ -600,14 +616,6 @@ //if(port >= JACK_MIDI_CHANNELS) // return false; - //if (midiOutputTrace) { - // printf("MidiOut<%s>: jackMidi: ", portName(port).toLatin1().constData()); - // e.dump(); - // } - - //if(MusEGlobal::debugMsg) - // printf("MidiJackDevice::queueEvent\n"); - if(!_out_client_jackport) return false; void* pb = jack_port_get_buffer(_out_client_jackport, MusEGlobal::segmentSize); @@ -626,9 +634,14 @@ } #ifdef JACK_MIDI_DEBUG - printf("MidiJackDevice::queueEvent time:%d type:%d ch:%d A:%d B:%d\n", e.time(), e.type(), e.channel(), e.dataA(), e.dataB()); + printf("MidiJackDevice::queueEvent pos:%d fo:%d ft:%d time:%d type:%d ch:%d A:%d B:%d\n", pos, frameOffset, ft, e.time(), e.type(), e.channel(), e.dataA(), e.dataB()); #endif + if (MusEGlobal::midiOutputTrace) { + printf("MidiOut: Jack: <%s>: ", name().toLatin1().constData()); + e.dump(); + } + switch(e.type()) { case ME_NOTEON: case ME_NOTEOFF: @@ -698,14 +711,47 @@ } break; case ME_SONGPOS: + { + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::queueEvent songpos %d\n", e.dataA()); + #endif + + unsigned char* p = jack_midi_event_reserve(pb, ft, 3); + if (p == 0) { + #ifdef JACK_MIDI_DEBUG + fprintf(stderr, "MidiJackDevice::queueEvent songpos: buffer overflow, stopping until next cycle\n"); + #endif + return false; + } + int pos = e.dataA(); + p[0] = e.type(); + p[1] = pos & 0x7f; // LSB + p[2] = (pos >> 7) & 0x7f; // MSB + } + break; case ME_CLOCK: case ME_START: case ME_CONTINUE: case ME_STOP: + { + #ifdef JACK_MIDI_DEBUG + printf("MidiJackDevice::queueEvent realtime %x\n", e.type()); + #endif + + unsigned char* p = jack_midi_event_reserve(pb, ft, 1); + if (p == 0) { + #ifdef JACK_MIDI_DEBUG + fprintf(stderr, "MidiJackDevice::queueEvent realtime: buffer overflow, stopping until next cycle\n"); + #endif + return false; + } + p[0] = e.type(); + } + break; + default: if(MusEGlobal::debugMsg) printf("MidiJackDevice::queueEvent: event type %x not supported\n", e.type()); - //return false; - return true; // Absorb the event. Don't want it hanging around in the list. FIXME: Support these? p4.0.15 Tim. + return true; // Absorb the event. Don't want it hanging around in the list. break; } @@ -757,12 +803,18 @@ // event.time(), event.type(), event.channel(), event.dataA(), event.dataB(), hb, lb, pr); if (hb != 0xff) + { if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HBANK, hb))) return false; // p4.0.15 Inform that processing the event in general failed. Ditto all below... +/// t += 1; + } if (lb != 0xff) - if(!queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LBANK, lb))) + { + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LBANK, lb))) return false; - if(!queueEvent(MidiPlayEvent(t+2, port, chn, ME_PROGRAM, pr, 0))) +/// t += 1; + } + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_PROGRAM, pr, 0))) return false; // } @@ -815,13 +867,15 @@ { if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HBANK, hb))) return false; +/// t += 1; } if (lb != 0xff) { - if(!queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LBANK, lb))) + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LBANK, lb))) return false; +/// t += 1; } - if(!queueEvent(MidiPlayEvent(t+2, port, chn, ME_PROGRAM, pr, 0))) + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_PROGRAM, pr, 0))) return false; // } @@ -851,7 +905,8 @@ int dataL = b & 0x7f; if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, ctrlH, dataH))) return false; - if(!queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, ctrlL, dataL))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, ctrlL, dataL))) return false; } else if (a < CTRL_NRPN_OFFSET) @@ -860,19 +915,22 @@ int ctrlL = a & 0x7f; if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH))) return false; - if(!queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL))) return false; - if(!queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, b))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HDATA, b))) return false; +/// t += 1; - t += 3; + //t += 3; // Select null parameters so that subsequent data controller events do not upset the last *RPN controller. //sendNullRPNParams(chn, false); if(nvh != 0xff) { if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, nvh & 0x7f))) return false; - t += 1; +/// t += 1; } if(nvl != 0xff) { @@ -887,18 +945,21 @@ int ctrlL = a & 0x7f; if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH))) return false; - if(!queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL))) return false; - if(!queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, b))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HDATA, b))) return false; +/// t += 1; - t += 3; + //t += 3; //sendNullRPNParams(chn, true); if(nvh != 0xff) { if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, nvh & 0x7f))) return false; - t += 1; +/// t += 1; } if(nvl != 0xff) { @@ -914,20 +975,24 @@ int dataL = b & 0x7f; if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, ctrlH))) return false; - if(!queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LRPN, ctrlL))) return false; - if(!queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, dataH))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HDATA, dataH))) return false; - if(!queueEvent(MidiPlayEvent(t+3, port, chn, ME_CONTROLLER, CTRL_LDATA, dataL))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LDATA, dataL))) return false; +/// t += 1; - t += 4; + //t += 4; //sendNullRPNParams(chn, false); if(nvh != 0xff) { if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HRPN, nvh & 0x7f))) return false; - t += 1; +/// t += 1; } if(nvl != 0xff) { @@ -943,20 +1008,24 @@ int dataL = b & 0x7f; if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, ctrlH))) return false; - if(!queueEvent(MidiPlayEvent(t+1, port, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LNRPN, ctrlL))) return false; - if(!queueEvent(MidiPlayEvent(t+2, port, chn, ME_CONTROLLER, CTRL_HDATA, dataH))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HDATA, dataH))) return false; - if(!queueEvent(MidiPlayEvent(t+3, port, chn, ME_CONTROLLER, CTRL_LDATA, dataL))) +/// t += 1; + if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_LDATA, dataL))) return false; +/// t += 1; - t += 4; + //t += 4; //sendNullRPNParams(chn, true); if(nvh != 0xff) { if(!queueEvent(MidiPlayEvent(t, port, chn, ME_CONTROLLER, CTRL_HNRPN, nvh & 0x7f))) return false; - t += 1; +/// t += 1; } if(nvl != 0xff) { @@ -988,8 +1057,16 @@ void MidiJackDevice::processMidi() { + //bool stop = stopPending; // Snapshots + //bool seek = seekPending; // + //seekPending = stopPending = false; + processStuckNotes(); + // Don't process if the device is not assigned to a port. + //if(_port == -1) + // return; + void* port_buf = 0; if(_out_client_jackport && _writeEnable) { @@ -997,65 +1074,294 @@ jack_midi_clear_buffer(port_buf); } + int port = midiPort(); + MidiPort* mp = port == -1 ? 0 : &MusEGlobal::midiPorts[port]; + + /* + bool is_playing = MusEGlobal::audio->isPlaying(); // TODO Check this. It includes LOOP1 and LOOP2 besides PLAY. + //bool is_playing = MusEGlobal::audio->isPlaying() || MusEGlobal::audio->isStarting(); + int pos = MusEGlobal::audio->tickPos(); + bool ext_sync = MusEGlobal::extSyncFlag.value(); + + if(mp) + { + MidiSyncInfo& si = mp->syncInfo(); + if(stop) + { + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!ext_sync) + { + // Shall we check open flags? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // return; + + // Send MMC stop... + if(si.MMCOut()) + { + unsigned char msg[mmcStopMsgLen]; + memcpy(msg, mmcStopMsg, mmcStopMsgLen); + msg[1] = si.idOut(); + putEvent(MidiPlayEvent(0, 0, ME_SYSEX, msg, mmcStopMsgLen)); + } + + // Send midi stop... + if(si.MRTOut()) + { + putEvent(MidiPlayEvent(0, 0, 0, ME_STOP, 0, 0)); + // Added check of option send continue not start. p3.3.31 + // Hmm, is this required? Seems to make other devices unhappy. + // (Could try now that this is in MidiDevice. p4.0.22 ) + //if(!si.sendContNotStart()) + // mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / config.division); + } + } + } + + if(seek) + { + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!ext_sync) + { + // Send midi stop and song position pointer... + if(si.MRTOut()) + { + // Shall we check for device write open flag to see if it's ok to send?... + //if(!(rwFlags() & 0x1) || !(openFlags() & 1)) + //if(!(openFlags() & 1)) + // continue; + putEvent(MidiPlayEvent(0, 0, 0, ME_STOP, 0, 0)); + // Hm, try scheduling these for after stuck notes scheduled below... + //putEvent(MidiPlayEvent(0, 0, 0, ME_SONGPOS, beat, 0)); + //if(is_playing) + // putEvent(MidiPlayEvent(0, 0, 0, ME_CONTINUE, 0, 0)); + } + } + } + } + + if(stop || (seek && is_playing)) + { + // Clear all notes and handle stuck notes... + _playEvents.clear(); + for(iMPEvent i = _stuckNotes.begin(); i != _stuckNotes.end(); ++i) + { + MidiPlayEvent ev = *i; + ev.setTime(0); // Schedule immediately. + putEvent(ev); + } + _stuckNotes.clear(); + } + + if(mp) + { + MidiSyncInfo& si = mp->syncInfo(); + // Try scheduling these now for after stuck notes scheduled above... + if(stop || seek) + { + // Reset sustain. + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) + putEvent(MidiPlayEvent(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0)); + } + if(seek) + { + // Send new song position. + if(!ext_sync && si.MRTOut()) + { + int beat = (pos * 4) / MusEGlobal::config.division; + putEvent(MidiPlayEvent(0, 0, 0, ME_SONGPOS, beat, 0)); + } + // Send new controller values. + MidiCtrlValListList* cll = mp->controller(); + for(iMidiCtrlValList ivl = cll->begin(); ivl != cll->end(); ++ivl) + { + MidiCtrlValList* vl = ivl->second; + iMidiCtrlVal imcv = vl->iValue(pos); + if(imcv != vl->end()) { + Part* p = imcv->second.part; + // Don't send if part or track is muted or off. + if(!p || p->mute()) + continue; + Track* track = p->track(); + if(track && (track->isMute() || track->off())) + continue; + unsigned t = (unsigned)imcv->first; + // Do not add values that are outside of the part. + if(t >= p->tick() && t < (p->tick() + p->lenTick())) + // Use sendEvent to get the optimizations and limiting. But force if there's a value at this exact position. + mp->sendEvent(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val), imcv->first == pos); + } + } + // Send continue. + // REMOVE Tim. This is redundant and too early - Audio::startRolling already properly sends it when sync ready. + //if(is_playing && !ext_sync && si.MRTOut()) + // putEvent(MidiPlayEvent(0, 0, 0, ME_CONTINUE, 0, 0)); + } + } + */ + while(!eventFifo.isEmpty()) { MidiPlayEvent e(eventFifo.peek()); + //printf("MidiJackDevice::processMidi FIFO event time:%d type:%d ch:%d A:%d B:%d\n", e.time(), e.type(), e.channel(), e.dataA(), e.dataB()); // Try to process only until full, keep rest for next cycle. If no out client port or no write enable, eat up events. p4.0.15 if(port_buf && !processEvent(e)) return; // Give up. The Jack buffer is full. Nothing left to do. eventFifo.remove(); // Successfully processed event. Remove it from FIFO. } + //if(!(stop || (seek && is_playing))) + // processStuckNotes(); + if(_playEvents.empty()) - { - //printf("MidiJackDevice::processMidi play events empty\n"); return; - } iMPEvent i = _playEvents.begin(); for(; i != _playEvents.end(); ++i) { //printf("MidiJackDevice::processMidi playEvent time:%d type:%d ch:%d A:%d B:%d\n", i->time(), i->type(), i->channel(), i->dataA(), i->dataB()); // Update hardware state so knobs and boxes are updated. Optimize to avoid re-setting existing values. - // Same code as in MidiPort::sendEvent() - if(_port != -1) - { - MidiPort* mp = &MusEGlobal::midiPorts[_port]; - if(i->type() == ME_CONTROLLER) - { - int da = i->dataA(); - int db = i->dataB(); - db = mp->limitValToInstrCtlRange(da, db); - if(!mp->setHwCtrlState(i->channel(), da, db)) - continue; - //mp->setHwCtrlState(i->channel(), da, db); - } - else - if(i->type() == ME_PITCHBEND) - { - //printf("MidiJackDevice::processMidi playEvents ME_PITCHBEND time:%d type:%d ch:%d A:%d B:%d\n", (*i).time(), (*i).type(), (*i).channel(), (*i).dataA(), (*i).dataB()); - int da = mp->limitValToInstrCtlRange(CTRL_PITCH, i->dataA()); - if(!mp->setHwCtrlState(i->channel(), CTRL_PITCH, da)) - continue; - //mp->setHwCtrlState(i->channel(), CTRL_PITCH, da); - //(MidiPlayEvent(t, port, chn, ME_PITCHBEND, v & 0x7f, (v >> 7) & 0x7f)); - } - else - if(i->type() == ME_PROGRAM) - { - if(!mp->setHwCtrlState(i->channel(), CTRL_PROGRAM, i->dataA())) - continue; - //mp->setHwCtrlState(i->channel(), CTRL_PROGRAM, i->dataA()); - } - } + if(mp && !mp->sendHwCtrlState(*i, true)) // Force the event to be sent. + continue; // Try to process only until full, keep rest for next cycle. If no out client port or no write enable, eat up events. p4.0.15 if(port_buf && !processEvent(*i)) break; } _playEvents.erase(_playEvents.begin(), i); +} + +/* +//--------------------------------------------------------- +// handleStop +//--------------------------------------------------------- + +void MidiJackDevice::handleStop() +{ + // If the device is not in use by a port, don't bother it. + if(_port == -1) + return; + + stopPending = true; // Trigger stop handling in processMidi. +// //--------------------------------------------------- +// // reset sustain +// //--------------------------------------------------- +// +// MidiPort* mp = &MusEGlobal::midiPorts[_port]; +// for(int ch = 0; ch < MIDI_CHANNELS; ++ch) +// { +// if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) +// { +// //printf("send clear sustain!!!!!!!! port %d ch %d\n", i,ch); +// MidiPlayEvent ev(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); +// putEvent(ev); +// // Do sendEvent to get the optimizations - send only on a change of value. +// //mp->sendEvent(ev); +// } +// } + +// //--------------------------------------------------- +// // send midi stop +// //--------------------------------------------------- +// +// // Don't send if external sync is on. The master, and our sync routing system will take care of that. +// if(!MusEGlobal::extSyncFlag.value()) +// { +// // Shall we check open flags? +// //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) +// //if(!(dev->openFlags() & 1)) +// // return; +// +// MidiSyncInfo& si = mp->syncInfo(); +// if(si.MMCOut()) +// mp->sendMMCStop(); +// +// if(si.MRTOut()) +// { +// // Send STOP +// mp->sendStop(); +// +// // Added check of option send continue not start. p3.3.31 +// // Hmm, is this required? Seems to make other devices unhappy. +// // (Could try now that this is in MidiDevice. p4.0.22 ) +// //if(!si.sendContNotStart()) +// // mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / config.division); +// } +// } +} +*/ + +/* +//--------------------------------------------------------- +// handleSeek +//--------------------------------------------------------- + +void MidiJackDevice::handleSeek() +{ + // If the device is not in use by a port, don't bother it. + if(_port == -1) + return; + + seekPending = true; // Trigger seek handling in processMidi. + + //MidiPort* mp = &MusEGlobal::midiPorts[_port]; + //MidiCtrlValListList* cll = mp->controller(); + //int pos = MusEGlobal::audio->tickPos(); + + //--------------------------------------------------- + // Send new contoller values + //--------------------------------------------------- + +// for(iMidiCtrlValList ivl = cll->begin(); ivl != cll->end(); ++ivl) +// { +// MidiCtrlValList* vl = ivl->second; +// iMidiCtrlVal imcv = vl->iValue(pos); +// if(imcv != vl->end()) +// { +// Part* p = imcv->second.part; +// //printf("MidiAlsaDevice::handleSeek _port:%d ctl:%d num:%d val:%d\n", _port, ivl->first >> 24, vl->num(), imcv->second.val); +// unsigned t = (unsigned)imcv->first; +// // Do not add values that are outside of the part. +// if(p && t >= p->tick() && t < (p->tick() + p->lenTick()) ) +// // Keep this and the section in processMidi() just in case we need to revert... +// //_playEvents.add(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); +// // Hmm, play event list for immediate playback? Try putEvent, putMidiEvent, or sendEvent (for the optimizations) instead. +// mp->sendEvent(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); +// } +// } + + //--------------------------------------------------- + // Send STOP and "set song position pointer" + //--------------------------------------------------- + +// // Don't send if external sync is on. The master, and our sync routing system will take care of that. p3.3.31 +// if(!MusEGlobal::extSyncFlag.value()) +// { +// if(mp->syncInfo().MRTOut()) +// { +// // Shall we check for device write open flag to see if it's ok to send?... +// // This means obey what the user has chosen for read/write in the midi port config dialog, +// // which already takes into account whether the device is writable or not. +// //if(!(rwFlags() & 0x1) || !(openFlags() & 1)) +// //if(!(openFlags() & 1)) +// // continue; +// +// int beat = (pos * 4) / MusEGlobal::config.division; +// +// //bool isPlaying = (state == PLAY); +// bool isPlaying = MusEGlobal::audio->isPlaying(); // TODO Check this it includes LOOP1 and LOOP2 besides PLAY. p4.0.22 +// +// mp->sendStop(); +// mp->sendSongpos(beat); +// // REMOVE Tim. This is redundant and too early - Audio::startRolling already properly sends it when sync ready. +// //if(isPlaying) +// // mp->sendContinue(); +// } +// } } +*/ //--------------------------------------------------------- // initMidiJack diff -Nru muse-2.0~rc2/muse/driver/jackmidi.h muse-2.0/muse/driver/jackmidi.h --- muse-2.0~rc2/muse/driver/jackmidi.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/jackmidi.h 2012-06-30 19:24:42.000000000 +0200 @@ -74,13 +74,15 @@ public: MidiJackDevice(const QString& name); + virtual ~MidiJackDevice(); static MidiDevice* createJackMidiDevice(QString name = "", int rwflags = 3); // 1:Writable 2: Readable 3: Writable + Readable virtual inline int deviceType() const { return JACK_MIDI; } virtual void setName(const QString&); + //virtual void handleStop(); + //virtual void handleSeek(); virtual void processMidi(); - virtual ~MidiJackDevice(); virtual void recordEvent(MidiRecordEvent&); diff -Nru muse-2.0~rc2/muse/driver/rtctimer.cpp muse-2.0/muse/driver/rtctimer.cpp --- muse-2.0~rc2/muse/driver/rtctimer.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/muse/driver/rtctimer.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -1,12 +1,12 @@ - //========================================================= - // MusE - // Linux Music Editor - // $Id: rtctimer.cpp,v 1.1.2.11 2009/03/09 02:05:18 terminator356 Exp $ - // - // Most code moved from midiseq.cpp by Werner Schweer. - // - // (C) Copyright -2004 Werner Schweer (werner@seh.de) - // (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) +//========================================================= +// MusE +// Linux Music Editor +// $Id: rtctimer.cpp,v 1.1.2.11 2009/03/09 02:05:18 terminator356 Exp $ +// +// Most code moved from midiseq.cpp by Werner Schweer. +// +// (C) Copyright -2004 Werner Schweer (werner@seh.de) +// (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,7 +22,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // - //========================================================= +//========================================================= #include #if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,0) @@ -99,9 +99,9 @@ { int rc = ioctl(timerFd, RTC_IRQP_SET, freq); if (rc == -1) { - fprintf(stderr, "RtcTimer::setTimerFreq(): cannot set tick on /dev/rtc: %s\n", + fprintf(stderr, "RtcTimer::setTimerFreq(): cannot set freq %d on /dev/rtc: %s\n", freq, strerror(errno)); - fprintf(stderr, " precise timer not available\n"); + fprintf(stderr, " precise timer not available, check file permissions and allowed RTC freq (/sys/class/rtc/rtc0/max_user_freq)\n"); return 0; } return freq; @@ -119,7 +119,7 @@ { unsigned int freq; int rv = ioctl(timerFd, RTC_IRQP_READ, &freq); - if (rv < 1) + if (rv < 0) return 0; return freq; } diff -Nru muse-2.0~rc2/muse/driver/rtctimer.h muse-2.0/muse/driver/rtctimer.h --- muse-2.0~rc2/muse/driver/rtctimer.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/driver/rtctimer.h 2012-06-30 19:24:42.000000000 +0200 @@ -1,12 +1,12 @@ - //========================================================= - // MusE - // Linux Music Editor - // $Id: rtctimer.h,v 1.1.2.3 2005/08/21 18:11:28 spamatica Exp $ - // - // Most code moved from midiseq.cpp - // - // (C) Copyright -2004 Werner Schweer (werner@seh.de) - // (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) +//========================================================= +// MusE +// Linux Music Editor +// $Id: rtctimer.h,v 1.1.2.3 2005/08/21 18:11:28 spamatica Exp $ +// +// Most code moved from midiseq.cpp +// +// (C) Copyright -2004 Werner Schweer (werner@seh.de) +// (C) Copyright 2004 Robert Jonsson (rj@spamatica.se) // // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License @@ -22,7 +22,7 @@ // along with this program; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. // - //========================================================= +//========================================================= #ifndef __RTCTIMER_H__ #define __RTCTIMER_H__ @@ -59,4 +59,4 @@ } // namespace MusECore -#endif //__ALSATIMER_H__ +#endif //__RTCTIMER_H__ diff -Nru muse-2.0~rc2/muse/dssihost.cpp muse-2.0/muse/dssihost.cpp --- muse-2.0~rc2/muse/dssihost.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/muse/dssihost.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,8 @@ // Turn on debugging messages //#define DSSI_DEBUG +// Turn on constant flow of process debugging messages +//#define DSSI_DEBUG_PROCESS // Support vst state saving/loading with vst chunks. //#define DSSI_VST_CHUNK_SUPPORT @@ -50,6 +52,7 @@ #include "controlfifo.h" #include "xml.h" #include "song.h" +#include "ctrl.h" #include "app.h" #include "globals.h" @@ -112,19 +115,12 @@ for(is = MusEGlobal::synthis.begin(); is != MusEGlobal::synthis.end(); ++is) { Synth* s = *is; - //#ifdef DSSI_DEBUG - // fprintf(stderr, "scanDSSILib: name:%s listname:%s lib:%s listlib:%s\n", - // label.toLatin1().constData(), s->name().toLatin1().constData(), fi.baseName(true).toLatin1().constData(), s->baseName().toLatin1().constData()); - //#endif - if(s->name() == label && s->baseName() == fi.completeBaseName()) break; } if(is != MusEGlobal::synthis.end()) - { - //delete descr; continue; - } + DssiSynth* s = new DssiSynth(fi, descr); if(MusEGlobal::debugMsg) @@ -147,14 +143,11 @@ if(LADSPA_IS_PORT_OUTPUT(pd) && LADSPA_IS_PORT_CONTROL(pd)) co++; } - fprintf(stderr, "MusEGlobal::audio ins:%d outs:%d control ins:%d outs:%d\n", ai, ao, ci, co); + fprintf(stderr, " audio ins:%d outs:%d control ins:%d outs:%d\n", ai, ao, ci, co); } MusEGlobal::synthis.push_back(s); } - //else - // delete descr; - } } dlclose(handle); @@ -331,12 +324,8 @@ iUsedIdx.clear(); midiCtl2PortMap.clear(); port2MidiCtlMap.clear(); - //synti->_guiUpdateControls.clear(); const LADSPA_Descriptor* descr = dssi->LADSPA_Plugin; - //#ifdef DSSI_DEBUG - // printf("DssiSynth::createSIF ladspa plugin PortCount:%lu\n", d->PortCount); - //#endif _portCount = descr->PortCount; @@ -370,8 +359,6 @@ { rpIdx.push_back(_controlInPorts); ++_controlInPorts; - // Set to false at first. - //synti->_guiUpdateControls.push_back(false); } else if (LADSPA_IS_PORT_OUTPUT(pd)) { @@ -403,14 +390,10 @@ ++_instances; sif->init(this); - //_plugin->incInstances(1); - QString guiPath(info.path() + "/" + info.baseName()); QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); _hasGui = guiDir.exists(); - //sif->initGui(); - return sif; } @@ -418,7 +401,6 @@ // guiVisible //--------------------------------------------------------- -//bool DssiSynthIF::guiVisible() const bool DssiSynthIF::nativeGuiVisible() const { #ifdef OSC_SUPPORT @@ -433,7 +415,7 @@ } //--------------------------------------------------------- -// showGui +// showNativeGui //--------------------------------------------------------- void DssiSynthIF::showNativeGui(bool v) @@ -441,7 +423,7 @@ #ifdef OSC_SUPPORT #ifdef DSSI_DEBUG - printf("DssiSynthIF::showGui(): v:%d visible:%d\n", v, guiVisible()); + printf("DssiSynthIF::showNativeGui(): v:%d visible:%d\n", v, guiVisible()); #endif _oscif.oscShowGui(v); @@ -538,8 +520,6 @@ synth->midiCtl2PortMap.clear(); synth->port2MidiCtlMap.clear(); - synti->_guiUpdateControls.clear(); - synti->_guiUpdateProgram = false; int cip = 0; int cop = 0; @@ -563,15 +543,12 @@ controls[cip].enCtrl = true; controls[cip].en2Ctrl = true; - // Set to false at first. - synti->_guiUpdateControls.push_back(false); - #ifdef DSSI_DEBUG - printf("DssiSynthIF::init control port:%d port idx:%d name:%s\n", cip, k, ld->PortNames[k]); + printf("DssiSynthIF::init control port:%d port idx:%lu name:%s\n", cip, k, ld->PortNames[k]); #endif // This code is duplicated in ::getControllerInfo() - // + int ctlnum = DSSI_NONE; if(dssi->get_midi_controller_for_port) @@ -663,7 +640,7 @@ controlsOut[cop].en2Ctrl = false; #ifdef DSSI_DEBUG - printf("DssiSynthIF::init control output port:%d port idx:%d name:%s\n", cop, k, ld->PortNames[k]); + printf("DssiSynthIF::init control output port:%d port idx:%lu name:%s\n", cop, k, ld->PortNames[k]); #endif // Control outs are not handled but still must be connected to something. @@ -703,7 +680,7 @@ // Set current program. if(dssi->select_program) - dssi->select_program(handle, synti->_curBankL, synti->_curProgram); + doSelectProgram(handle, synti->_curBankL, synti->_curProgram); // // For stored initial control values, let SynthI::initInstance() take care of that via ::setParameter(). @@ -740,6 +717,10 @@ #ifdef DSSI_DEBUG printf("DssiSynthIF::~DssiSynthIF\n"); #endif + + #ifdef OSC_SUPPORT + _oscif.oscSetSynthIF(NULL); + #endif if(synth) { @@ -858,43 +839,15 @@ void DssiSynthIF::setParameter(unsigned long n, float v) { - if(n >= synth->_controlInPorts) - { - printf("DssiSynthIF::setParameter param number %lu out of range of ports:%lu\n", n, synth->_controlInPorts); - return; - } - - ControlEvent ce; - ce.unique = false; - ce.idx = n; - ce.value = v; - // Time-stamp the event. This does a possibly slightly slow call to gettimeofday via timestamp(). - // timestamp() is more or less an estimate of the current frame. (This is exactly how ALSA events - // are treated when they arrive in our ALSA driver.) - //ce.frame = MusEGlobal::audio->timestamp(); - // p4.0.23 timestamp() is circular, which is making it impossible to deal with 'modulo' events which - // slip in 'under the wire' before processing the ring buffers. So try this linear timestamp instead: - ce.frame = MusEGlobal::audio->curFrame(); - if(_controlFifo.put(ce)) - { - fprintf(stderr, "DssiSynthIF::setParameter: fifo overflow: in control number:%lu\n", n); - } - - // Notify that changes are to be sent upon heartbeat. - // TODO: No, at least not for now. So far, setParameter is only called during loading of stored params, - // and we don't want this interfering with oscUpdate which also sends the values. - //synti->_guiUpdateControls[n] = true; + addScheduledControlEvent(n, v, MusEGlobal::audio->curFrame()); } //--------------------------------------------------------- // write //--------------------------------------------------------- -//void DssiSynthIF::write(Xml&) const void DssiSynthIF::write(int level, Xml& xml) const { - //bool vstsaved = false; - #ifdef DSSI_VST_CHUNK_SUPPORT if(synth->dssi->getCustomData) { @@ -913,16 +866,13 @@ void* p = 0; synth->dssi->getCustomData(handle,&p, &len); if (len) { - //xml.tag(level++, "midistate"); xml.tag(level++, "midistate version=\"%d\"", SYNTH_MIDI_STATE_SAVE_VERSION); xml.nput(level++, "\n", len+7 /*VSTSAVE*/); - xml.nput(" datalen=\"%d\">\n", len+9 /* 2 bytes header + "VSTSAVE" */); + xml.nput(" datalen=\"%d\">\n", len+9 /* 9 = 2 bytes header + "VSTSAVE"*/); xml.nput(level, ""); xml.nput("%02x %02x ", (char)MUSE_SYNTH_SYSEX_MFG_ID, (char)DSSI_SYNTH_UNIQUE_ID); // Wrap in a proper header xml.nput("56 53 54 53 41 56 45 "); // embed a save marker "string 'VSTSAVE' for (long unsigned int i = 0; i < len; ++i) { - //if (i && (((i+7) % 16) == 0)) { if (i && (((i+9) % 16) == 0)) { xml.nput("\n"); xml.nput(level, ""); @@ -932,14 +882,14 @@ xml.nput("\n"); xml.tag(level--, "/event"); xml.etag(level--, "midistate"); - //vstsaved = true; } } } #else printf("support for vst chunks not compiled in!\n"); #endif - + + // DELETETHIS 97 ??? /* // p3.3.39 Store the state of current program and bank and all input control values, but only if VSTSAVE above didn't do it already! // TODO: Not quite good enough, we would want to store all controls for EACH program, not just the current one. @@ -1040,7 +990,6 @@ { float f = controls[c].val; xml.floatTag(level, "param", f); - //xml.tag(level, "param name=\"%s\" val=\"%s\"/", name, r->first.c_str(), r->second.c_str()); } } @@ -1065,17 +1014,6 @@ int chn = e.channel(); int a = e.dataA(); int b = e.dataB(); - //for sysex - //QByteArray ba = QByteArray((const char*)e.data(), e.len()); - //we must had 0xF0 at the beginning and 0xF7 at the end of e.data() - //ba.push_front(0xF0); - //ba.push_back(0xF7); - - //QByteArray ba(); - ////ba.assign((const char*)e.data(), e.len()); - ////ba.duplicate((const char*)e.data(), e.len()); - ////ba.setRawData((const char*)e.data(), e.len()); - //int len = e.len() + 2; int len = e.len(); char ca[len + 2]; @@ -1105,6 +1043,10 @@ snd_seq_ev_set_noteoff(event, chn, a, 0); break; case MusECore::ME_NOTEOFF: + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::processEvent midi event is MusECore::ME_NOTEOFF\n"); + #endif + snd_seq_ev_clear(event); event->queue = SND_SEQ_QUEUE_DIRECT; snd_seq_ev_set_noteoff(event, chn, a, 0); @@ -1117,18 +1059,13 @@ int bank = (a >> 8) & 0xff; int prog = a & 0xff; - //_curBank = bank; - //_curProgram = prog; synti->_curBankH = 0; synti->_curBankL = bank; synti->_curProgram = prog; if(dssi->select_program) - { - dssi->select_program(handle, bank, prog); - // Notify that changes are to be sent upon heartbeat. - synti->_guiUpdateProgram = true; - } + doSelectProgram(handle, bank, prog); + // Event pointer not filled. Return false. return false; } @@ -1156,11 +1093,8 @@ synti->_curProgram = prog; if(dssi->select_program) - { - dssi->select_program(handle, bank, prog); - // Notify that changes are to be sent upon heartbeat. - synti->_guiUpdateProgram = true; - } + doSelectProgram(handle, bank, prog); + // Event pointer not filled. Return false. return false; } @@ -1171,7 +1105,6 @@ fprintf(stderr, "DssiSynthIF::processEvent midi event is MusECore::ME_CONTROLLER, dataA is MusECore::CTRL_PITCH\n"); #endif - b &= 0x3fff; snd_seq_ev_clear(event); event->queue = SND_SEQ_QUEUE_DIRECT; snd_seq_ev_set_pitchbend(event, chn, b); @@ -1187,29 +1120,12 @@ // For example sustain footpedal or pitch bend may be supported, but not mapped to any LADSPA port. if(ip == synth->midiCtl2PortMap.end()) { - // p3.3.39 Changed to return false because of crashes with unknown controllers when switching a midi track - // among different dssi synths and regular synths etc. For example high RPN offset numbers (set by another - // device selected into the midi port before selecting this synth) were passing through here when in fact - // the particular synth had no such midi controllers. - // No, that leaves out regular controllers like footpedal - //#ifdef DSSI_DEBUG - //fprintf(stderr, "DssiSynthIF::processEvent dataA:%d not found in map (not a ladspa controller). Ignoring.\n", a); - //#endif - //return false; - - //#ifdef DSSI_DEBUG - //fprintf(stderr, "DssiSynthIF::processEvent dataA:%d not found in map (not a ladspa controller). Filling event as regular controller.\n", a); - //#endif - //snd_seq_ev_set_controller(event, chn, a, b); - //return true; - int ctlnum = a; if(MusECore::midiControllerType(a) != MusECore::MidiController::Controller7) return false; // Event pointer not filled. Return false. else { #ifdef DSSI_DEBUG - //fprintf(stderr, "DssiSynthIF::processEvent midi event is Controller7. Changing to DSSI_CC type. Current dataA:%d\n", a); fprintf(stderr, "DssiSynthIF::processEvent non-ladspa midi event is Controller7. Current dataA:%d\n", a); #endif a &= 0x7f; @@ -1239,12 +1155,6 @@ if(k > synth->_controlInPorts) return false; - // TODO: If necessary... choose non-existing numbers... - //for(int k = 0; k < controlPorts; ++k) - //{ - // int i = synth->pIdx[k]; - //} - // Simple but flawed solution: Start them at 0x60000 + 0x2000 = 0x62000. Max NRPN number is 0x3fff. ctlnum = k + (MusECore::CTRL_NRPN14_OFFSET + 0x2000); } @@ -1284,16 +1194,16 @@ float val = midi2LadspaValue(ld, i, ctlnum, b); #ifdef DSSI_DEBUG - //fprintf(stderr, "DssiSynthIF::processEvent No midi controller for control port:%d port:%d dataA:%d Converting val from:%d to ladspa:%f\n", i, k, a, b, val); fprintf(stderr, "DssiSynthIF::processEvent control port:%lu port:%lu dataA:%d Converting val from:%d to ladspa:%f\n", i, k, a, b, val); #endif // Set the ladspa port value. controls[k].val = val; - // FIXME: Testing - Works but is this safe in a RT process callback? Try hooking into gui heartbeat timer instead... - //lo_send(uiTarget, uiOscControlPath, "if", i, val); - // Notify that changes are to be sent upon heartbeat. - synti->_guiUpdateControls[k] = true; + + // Need to update the automation value, otherwise it overwrites later with the last automation value. + if(id() != -1) + // We're in the audio thread context: no need to send a message, just modify directly. + synti->setPluginCtrlVal(genACnum(id(), k), val); // Since we absorbed the message as a ladspa control change, return false - the event is not filled. return false; @@ -1324,14 +1234,11 @@ { if(e.len() >= 9) { - //if (QString((const char*)e.data()).startsWith("VSTSAVE")) { if (QString((const char*)(data + 2)).startsWith("VSTSAVE")) { #ifdef DSSI_VST_CHUNK_SUPPORT if(dssi->setCustomData) { - //printf("loading chunk from sysex %s!\n", e.data()+7); printf("loading chunk from sysex %s!\n", data+9); - //dssi->setCustomData(handle, e.data()+7 /* len of str*/,e.len()-7); dssi->setCustomData(handle, (unsigned char*)(data+9) /* len of str*/,e.len()-9); } #else @@ -1344,6 +1251,8 @@ } } } + + // DELETETHIS, 50 clean it up or fix it? /* // p3.3.39 Read the state of current bank and program and all input control values. // TODO: Needs to be better. See write(). @@ -1408,7 +1317,6 @@ snd_seq_ev_clear(event); event->queue = SND_SEQ_QUEUE_DIRECT; snd_seq_ev_set_sysex(event, len, - //(unsigned char*)ba.data()); (unsigned char*)ca); } } @@ -1430,34 +1338,25 @@ MusECore::iMPEvent DssiSynthIF::getData(MusECore::MidiPort* /*mp*/, MusECore::MPEventList* el, MusECore::iMPEvent start_event, unsigned pos, int ports, unsigned nframes, float** buffer) { - //#ifdef DSSI_DEBUG - // fprintf(stderr, "DssiSynthIF::getData elsize:%d pos:%d ports:%d samples:%d processed already?:%d\n", el->size(), pos, ports, n, synti->processed()); - //#endif - - // Grab the control ring buffer size now. - //const int cbsz = _controlFifo.getSize(); - // We may not be using nevents all at once - this will be just the maximum. unsigned long nevents = el->size() + synti->eventFifo.getSize(); snd_seq_event_t events[nevents]; - // No, do this in processEvent. - //memset(events, 0, sizeof(events)); int frameOffset = MusEGlobal::audio->getFrameOffset(); unsigned long syncFrame = MusEGlobal::audio->curSyncFrame(); + #ifdef DSSI_DEBUG_PROCESS + fprintf(stderr, "DssiSynthIF::getData: pos:%u ports:%d nframes:%u syncFrame:%lu nevents:%lu\n", pos, ports, nframes, syncFrame, nevents); + #endif + // All ports must be connected to something! unsigned long nop, k; - // Watch our limits. - //willyfoobar-2011-02-13 - //old code//np = ports > synth->_outports ? synth->_outports : ports; nop = ((unsigned long) ports) > synth->_outports ? synth->_outports : ((unsigned long) ports); const DSSI_Descriptor* dssi = synth->dssi; const LADSPA_Descriptor* descr = dssi->LADSPA_Plugin; unsigned long sample = 0; - int loopcount = 0; // REMOVE Tim. // To remember the last retrieved value of each AudioTrack controller. //float prev_ctrl_values[synth->_controlInPorts]; @@ -1478,13 +1377,11 @@ // But this 'packet' method sure seems to work nicely so far, so we'll throw it in... // // Must make this detectable for dssi vst synths, just like the plugins' in-place blacklist. - //const bool usefixedrate = true; - const bool usefixedrate = synth->_isDssiVst; // Try this. + const bool usefixedrate = synth->_isDssiVst; // Try this. (was: true) // TODO Make this number a global setting. // Note for dssi-vst this MUST equal MusEGlobal::audio period. It doesn't like broken-up runs (it stutters), // even with fixed sizes. Could be a Wine + Jack thing, wanting a full Jack buffer's length. - //unsigned long fixedsize = 2048; - unsigned long fixedsize = nframes; + unsigned long fixedsize = nframes; // was: 2048 // For now, the fixed size is clamped to the MusEGlobal::audio buffer size. // TODO: We could later add slower processing over several cycles - @@ -1492,23 +1389,20 @@ if(fixedsize > nframes) fixedsize = nframes; - unsigned long min_per = MusEGlobal::config.minControlProcessPeriod; + unsigned long min_per = MusEGlobal::config.minControlProcessPeriod; // Must be power of 2 ! if(min_per > nframes) min_per = nframes; - // - // p4.0.38 Handle inputs... - // + #ifdef DSSI_DEBUG_PROCESS + fprintf(stderr, "DssiSynthIF::getData: Handling inputs...\n"); + #endif + + // Handle inputs... if(!((MusECore::AudioTrack*)synti)->noInRoute()) { RouteList* irl = ((MusECore::AudioTrack*)synti)->inRoutes(); iRoute i = irl->begin(); - if(i->track->isMidiTrack()) - { - //if(MusEGlobal::debugMsg) - //printf("DssiSynthIF::getData: Error: First route is a midi track route!\n"); - } - else + if(!i->track->isMidiTrack()) { int ch = i->channel == -1 ? 0 : i->channel; int remch = i->remoteChannel == -1 ? 0 : i->remoteChannel; @@ -1516,14 +1410,9 @@ if((unsigned)ch < synth->_inports && (unsigned)(ch + chs) <= synth->_inports) { - //printf("DssiSynthIF::getData calling copyData on %s ch:%d remch:%d chs:%d\n", i->track->name().toLatin1().constData(), ch, remch, chs); - int h = remch + chs; for(int j = remch; j < h; ++j) - { - //printf(" setting used idx:%d\n", j); synth->iUsedIdx[j] = true; - } ((MusECore::AudioTrack*)i->track)->copyData(pos, chs, ch, -1, nframes, &audioInBuffers[remch]); } @@ -1533,11 +1422,7 @@ for(; i != irl->end(); ++i) { if(i->track->isMidiTrack()) - { - //if(MusEGlobal::debugMsg) - // printf("DssiSynthIF::getData: Error: Route is a midi track route!\n"); continue; - } int ch = i->channel == -1 ? 0 : i->channel; int remch = i->remoteChannel == -1 ? 0 : i->remoteChannel; @@ -1545,8 +1430,6 @@ if((unsigned)ch < synth->_inports && (unsigned)(ch + chs) <= synth->_inports) { - //printf("DssiSynthIF::getData calling addData on %s ch:%d remch:%d chs:%d\n", i->track->name().toLatin1().constData(), ch, remch, chs); - bool u1 = synth->iUsedIdx[remch]; if(chs >= 2) { @@ -1579,133 +1462,120 @@ int h = remch + chs; for(int j = remch; j < h; ++j) - { - //printf(" setting used idx:%d\n", j); synth->iUsedIdx[j] = true; - } } } } - // Process automation control values now. - // TODO: This needs to be respect frame resolution. Put this inside the sample loop below. - if(MusEGlobal::automation && synti && synti->automationType() != AUTO_OFF && id() != -1) - { - for(unsigned long k = 0; k < synth->_controlInPorts; ++k) - { - if(controls[k].enCtrl && controls[k].en2Ctrl ) - controls[k].val = synti->pluginCtrlVal(genACnum(id(), k)); - } - } - + #ifdef DSSI_DEBUG_PROCESS + fprintf(stderr, "DssiSynthIF::getData: Processing automation control values...\n"); + #endif + while(sample < nframes) { - //unsigned long nsamp = n; - //unsigned long nsamp = n - sample; unsigned long nsamp = usefixedrate ? fixedsize : nframes - sample; + + // + // Process automation control values, while also determining the maximum acceptable + // size of this run. Further processing, from FIFOs for example, can lower the size + // from there, but this section determines where the next highest maximum frame + // absolutely needs to be for smooth playback of the controller value stream... + // + if(id() != -1) + { + unsigned long frame = pos + sample; + AutomationType at = AUTO_OFF; + at = synti->automationType(); + bool no_auto = !MusEGlobal::automation || at == AUTO_OFF; + AudioTrack* track = (static_cast(synti)); + int nextFrame; + for(unsigned long k = 0; k < synth->_controlInPorts; ++k) + { + controls[k].val = track->controller()->value(genACnum(id(), k), frame, + no_auto || !controls[k].enCtrl || !controls[k].en2Ctrl, + &nextFrame); +#ifdef DSSI_DEBUG_PROCESS + printf("DssiSynthIF::getData k:%lu sample:%lu frame:%lu nextFrame:%d nsamp:%lu \n", k, sample, frame, nextFrame, nsamp); +#endif + if(MusEGlobal::audio->isPlaying() && !usefixedrate && nextFrame != -1) + { + // Returned value of nextFrame can be zero meaning caller replaces with some (constant) value. + unsigned long samps = (unsigned long)nextFrame; + if(samps > frame + min_per) + { + unsigned long diff = samps - frame; + unsigned long mask = min_per-1; // min_per must be power of 2 + samps = diff & ~mask; + if((diff & mask) != 0) + samps += min_per; + } + else + samps = min_per; + + if(samps < nsamp) + nsamp = samps; + } + } +#ifdef DSSI_DEBUG + printf("DssiSynthIF::getData sample:%lu nsamp:%lu\n", sample, nsamp); +#endif + } + bool found = false; unsigned long frame = 0; unsigned long index = 0; unsigned long evframe; // Get all control ring buffer items valid for this time period... - //for(int m = 0; m < cbsz; ++m) // Doesn't like this. Why? while(!_controlFifo.isEmpty()) { - //ControlValue v = _controlFifo.get(); ControlEvent v = _controlFifo.peek(); - // The events happened in the last period or even before that. Shift into this period with + n. This will sync with MusEGlobal::audio. + // The events happened in the last period or even before that. Shift into this period with + n. This will sync with audio. // If the events happened even before current frame - n, make sure they are counted immediately as zero-frame. - //evframe = (pos + frameOffset > v.frame + n) ? 0 : v.frame - pos - frameOffset + n; evframe = (syncFrame > v.frame + nframes) ? 0 : v.frame - syncFrame + nframes; + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::getData found:%d evframe:%lu frame:%lu event frame:%lu idx:%lu val:%f unique:%d\n", + found, evframe, frame, v.frame, v.idx, v.value, v.unique); + #endif + // Protection. Observed this condition. Why? Supposed to be linear timestamps. if(found && evframe < frame) { - printf("DssiSynthIF::getData *** Error: evframe:%lu < frame:%lu idx:%lu val:%f unique:%d\n", - evframe, v.frame, v.idx, v.value, v.unique); - // Just make it equal to the current frame so it gets processed right away. - evframe = frame; + printf("DssiSynthIF::getData *** Error: evframe:%lu < frame:%lu event: frame:%lu idx:%lu val:%f unique:%d\n", + evframe, frame, v.frame, v.idx, v.value, v.unique); + + // No choice but to ignore it. + _controlFifo.remove(); // Done with the ring buffer's item. Remove it. + continue; } - //printf("DssiSynthIF::getData ctrl dssi:%d idx:%lu frame:%lu val:%f unique:%d evframe:%lu\n", - // synth->_isDssiVst, v.idx, v.frame, v.value, v.unique, evframe); // REMOVE Tim. - // Process only items in this time period. Make sure to process all - // subsequent items which have the same frame. - //if(v.frame >= (endPos + frameOffset) || (found && v.frame != frame)) - //if(v.frame < sample || v.frame >= (sample + nsamp) || (found && v.frame != frame)) - //if(v.frame < sample || v.frame >= (endPos + frameOffset) || (found && v.frame != frame)) - //if(v.frame < startPos || v.frame >= (endPos + frameOffset) - //if(evframe < sample || evframe >= n - //if(evframe < sample || evframe >= (n + frameOffset) - if(evframe >= nframes - //|| (found && v.frame != frame) - //|| (!usefixedrate && found && !v.unique && v.frame != frame) - //|| (found && !v.unique && evframe != frame) - // Not enough requested samples to satisfy minimum setting? Keep going. - || (found && !v.unique && (evframe - sample >= min_per)) - // dssi-vst needs them serialized and accounted for, no matter what. This works with fixed rate - // because nsamp is constant. But with packets, we need to guarantee at least one-frame spacing. - // Although we likely won't be using packets with dssi-vst, so it's OK for now. - //|| (found && v.idx == index)) - //|| (usefixedrate && found && v.idx == index)) // Try this. - || (usefixedrate && found && v.unique && v.idx == index)) // + if(evframe >= nframes // Next events are for a later period. + || (!usefixedrate && !found && !v.unique && (evframe - sample >= nsamp)) // Next events are for a later run in this period. (Autom took prio.) + || (found && !v.unique && (evframe - sample >= min_per)) // Eat up events within minimum slice - they're too close. + || (usefixedrate && found && v.unique && v.idx == index)) // Special for dssi-vst: Fixed rate and must reply to all. break; _controlFifo.remove(); // Done with the ring buffer's item. Remove it. + if(v.idx >= synth->_controlInPorts) // Sanity check. break; found = true; - //frame = v.frame; frame = evframe; index = v.idx; // Set the ladspa control port value. controls[v.idx].val = v.value; - // Need to update the automation value, otherwise it overwrites later with the last MusEGlobal::automation value. + // Need to update the automation value, otherwise it overwrites later with the last automation value. if(id() != -1) - { - // Since we are now in the audio thread context, there's no need to send a message, - // just modify directly. - //MusEGlobal::audio->msgSetPluginCtrlVal(_track, genACnum(_id, k), controls[k].val); synti->setPluginCtrlVal(genACnum(id(), v.idx), v.value); - - // Record automation. - // NO! Take care of this immediately in the OSC control handler, because we don't want - // any delay. - // OTOH Since this is the actual place and time where the control ports values - // are set, best to reflect what happens here to automation. - // However for dssi-vst it might be best to handle it that way. - - //AutomationType at = _track->automationType(); - // TODO: Taken from our native gui control handlers. - // This may need modification or may cause problems - - // we don't have the luxury of access to the dssi gui controls ! - //if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) - // enableController(k, false); - //_track->recordAutomation(id, v.value); - } - } - // Process automation control values now. - //if(MusEGlobal::automation && synti && synti->automationType() != AUTO_OFF && id() != -1) - //{ - // for(unsigned long k = 0; k < synth->_controlInPorts; ++k) - // { - // if(controls[k].enCtrl && controls[k].en2Ctrl ) - // controls[k].val = synti->pluginCtrlVal(genACnum(id(), k)); - // } - //} - - //if(found) - if(found && !usefixedrate) - //nsamp = frame - sample + 1; + if(found && !usefixedrate) // If a control FIFO item was found, takes priority over automation controller stream. nsamp = frame - sample; + if(sample + nsamp >= nframes) // Safety check. nsamp = nframes - sample; - //printf("DssiSynthIF::getData n:%d frame:%lu sample:%lu nsamp:%lu pos:%d fOffset:%d syncFrame:%lu loopcount:%d\n", - // n, frame, sample, nsamp, pos, frameOffset, syncFrame, loopcount); // REMOVE Tim. - - // TODO: TESTING: Don't allow zero-length runs. This could/should be checked in the control loop instead. + // TODO: Don't allow zero-length runs. This could/should be checked in the control loop instead. // Note this means it is still possible to get stuck in the top loop (at least for a while). if(nsamp == 0) continue; @@ -1714,13 +1584,17 @@ // Process event list events... for(; start_event != el->end(); ++start_event) { - //if(i->time() >= (endPos + frameOffset)) // NOTE: frameOffset? Tested, examined printouts of times: Seems OK for playback. - if(start_event->time() >= (pos + sample + nsamp + frameOffset)) // frameOffset? Test again... - break; - #ifdef DSSI_DEBUG - fprintf(stderr, "DssiSynthIF::getData eventlist event time:%d\n", i->time()); + fprintf(stderr, "DssiSynthIF::getData eventlist event time:%d pos:%u sample:%lu nsamp:%lu frameOffset:%d\n", start_event->time(), pos, sample, nsamp, frameOffset); #endif + + if(start_event->time() >= (pos + sample + nsamp + frameOffset)) // frameOffset? Test again... + { + #ifdef DSSI_DEBUG + fprintf(stderr, " event is for future:%lu, breaking loop now\n", start_event->time() - frameOffset - pos - sample); + #endif + break; + } // Update hardware state so knobs and boxes are updated. Optimize to avoid re-setting existing values. // Same code as in MidiPort::sendEvent() @@ -1735,15 +1609,13 @@ if(!mp->setHwCtrlState(start_event->channel(), da, db)) continue; } - else - if(start_event->type() == MusECore::ME_PITCHBEND) + else if(start_event->type() == MusECore::ME_PITCHBEND) { int da = mp->limitValToInstrCtlRange(MusECore::CTRL_PITCH, start_event->dataA()); if(!mp->setHwCtrlState(start_event->channel(), MusECore::CTRL_PITCH, da)) continue; } - else - if(start_event->type() == MusECore::ME_PROGRAM) + else if(start_event->type() == MusECore::ME_PROGRAM) { if(!mp->setHwCtrlState(start_event->channel(), MusECore::CTRL_PROGRAM, start_event->dataA())) continue; @@ -1753,37 +1625,38 @@ // Returns false if the event was not filled. It was handled, but some other way. if(processEvent(*start_event, &events[nevents])) { - // Time-stamp the event. p4.0.15 Tim. - int ft = start_event->time() - frameOffset - pos; + // Time-stamp the event. + int ft = start_event->time() - frameOffset - pos - sample; if(ft < 0) ft = 0; - //if (ft >= (int)MusEGlobal::segmentSize) - if (ft >= int(sample + nsamp)) + + if (ft >= int(nsamp)) { - printf("DssiSynthIF::getData: eventlist event time:%d out of range. pos:%d offset:%d ft:%d sample:%lu nsamp:%lu\n", start_event->time(), pos, frameOffset, ft, sample, nsamp); - ///if (ft > (int)MusEGlobal::segmentSize) - //ft = MusEGlobal::segmentSize - 1; - ft = sample + nsamp - 1; + printf("DssiSynthIF::getData: eventlist event time:%d out of range. pos:%d offset:%d ft:%d sample:%lu nsamp:%lu\n", start_event->time(), pos, frameOffset, ft, sample, nsamp); + ft = nsamp - 1; } + + #ifdef DSSI_DEBUG + fprintf(stderr, "DssiSynthIF::getData eventlist: ft:%d current nevents:%lu\n", ft, nevents); + #endif + // "Each event is timestamped relative to the start of the block, (mis)using the ALSA "tick time" field as a frame count. // The host is responsible for ensuring that events with differing timestamps are already ordered by time." - From dssi.h events[nevents].time.tick = ft; ++nevents; - } + } } // Now process putEvent events... while(!synti->eventFifo.isEmpty()) { - //MusECore::MidiPlayEvent e = synti->eventFifo.get(); MusECore::MidiPlayEvent e = synti->eventFifo.peek(); #ifdef DSSI_DEBUG fprintf(stderr, "DssiSynthIF::getData eventFifo event time:%d\n", e.time()); #endif - //if(e.time() >= (endPos + frameOffset)) if(e.time() >= (pos + sample + nsamp + frameOffset)) break; @@ -1791,18 +1664,14 @@ // Returns false if the event was not filled. It was handled, but some other way. if(processEvent(e, &events[nevents])) { - // Time-stamp the event. p4.0.15 Tim. - int ft = e.time() - frameOffset - pos; + // Time-stamp the event. + int ft = e.time() - frameOffset - pos - sample; if(ft < 0) ft = 0; - //if (ft >= (int)MusEGlobal::segmentSize) - if (ft >= int(sample + nsamp)) + if (ft >= int(nsamp)) { - //printf("DssiSynthIF::getData: eventFifo event time:%d out of range. pos:%d offset:%d ft:%d (seg=%d)\n", e.time(), pos, frameOffset, ft, MusEGlobal::segmentSize); - printf("DssiSynthIF::getData: eventFifo event time:%d out of range. pos:%d offset:%d ft:%d sample:%lu nsamp:%lu\n", e.time(), pos, frameOffset, ft, sample, nsamp); - ///if (ft > (int)MusEGlobal::segmentSize) - //ft = MusEGlobal::segmentSize - 1; - ft = sample + nsamp - 1; + printf("DssiSynthIF::getData: eventFifo event time:%d out of range. pos:%d offset:%d ft:%d sample:%lu nsamp:%lu\n", e.time(), pos, frameOffset, ft, sample, nsamp); + ft = nsamp - 1; } // "Each event is timestamped relative to the start of the block, (mis)using the ALSA "tick time" field as a frame count. // The host is responsible for ensuring that events with differing timestamps are already ordered by time." - From dssi.h @@ -1812,6 +1681,10 @@ } } + #ifdef DSSI_DEBUG_PROCESS + fprintf(stderr, "DssiSynthIF::getData: Connecting and running. sample:%lu nsamp:%lu nevents:%lu\n", sample, nsamp, nevents); + #endif + k = 0; // Connect the given buffers directly to the ports, up to a max of synth ports. for(; k < nop; ++k) @@ -1822,7 +1695,6 @@ // Connect all inputs either to some local buffers, or a silence buffer. for(k = 0; k < synth->_inports; ++k) { - //printf(" k:%d synth->iIdx[k]:%d\n", k, synth->iIdx[k]); if(synth->iUsedIdx[k]) { synth->iUsedIdx[k] = false; // Reset @@ -1830,7 +1702,6 @@ } else { - //printf(" input used size:%ld idx:%ld = %d silencing...\n", synth->iUsedIdx.size(), k, synth->iUsedIdx[k]); descr->connect_port(handle, synth->iIdx[k], audioInSilenceBuf + sample); } } @@ -1853,7 +1724,6 @@ //} sample += nsamp; - loopcount++; // REMOVE Tim. } return start_event; @@ -1871,7 +1741,6 @@ if (MusEGlobal::midiOutputTrace) ev.dump(); return synti->eventFifo.put(ev); - //return false; } //--------------------------------------------------------- @@ -1900,7 +1769,6 @@ iUsedIdx.clear(); midiCtl2PortMap.clear(); port2MidiCtlMap.clear(); - //synti->_guiUpdateControls.clear(); } } @@ -1923,25 +1791,13 @@ { #ifdef OSC_SUPPORT // Update the gui's program if needed. - if(synti->_guiUpdateProgram) - { - _oscif.oscSendProgram(synti->_curProgram, synti->_curBankL); - synti->_guiUpdateProgram = false; - } + _oscif.oscSendProgram(synti->_curProgram, synti->_curBankL); // Update the gui's controls if needed. unsigned long ports = synth->_controlInPorts; - if(ports > synti->_guiUpdateControls.size()) - return; + for(unsigned long i = 0; i < ports; ++i) - { - if(synti->_guiUpdateControls[i]) - { - _oscif.oscSendControl(controls[i].idx, controls[i].val); - // Reset. - synti->_guiUpdateControls[i] = false; - } - } + _oscif.oscSendControl(controls[i].idx, controls[i].val); #endif } @@ -1967,13 +1823,13 @@ } // Send current bank and program. - _oscif.oscSendProgram(synti->_curProgram, synti->_curBankL); + _oscif.oscSendProgram(synti->_curProgram, synti->_curBankL, true /*force*/); // Send current control values. unsigned long ports = synth->_controlInPorts; for(unsigned long i = 0; i < ports; ++i) { - _oscif.oscSendControl(controls[i].idx, controls[i].val); + _oscif.oscSendControl(controls[i].idx, controls[i].val, true /*force*/); // Avoid overloading the GUI if there are lots and lots of ports. if((i+1) % 50 == 0) usleep(300000); @@ -1991,8 +1847,6 @@ int ch = 0; // TODO: ?? int port = synti->midiPort(); - //_curBank = bank; - //_curProgram = program; synti->_curBankH = 0; synti->_curBankL = bank; synti->_curProgram = program; @@ -2000,11 +1854,8 @@ bank &= 0xff; program &= 0xff; - //MidiEvent event(0, ch, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, (bank << 8) + program); - if(port != -1) { - //MusECore::MidiPlayEvent event(0, port, ch, MusECore::ME_CONTROLLER, MusECore::CTRL_PROGRAM, (bank << 8) + program); MusECore::MidiPlayEvent event(0, port, ch, MusECore::ME_PROGRAM, (bank << 8) + program, 0); #ifdef DSSI_DEBUG @@ -2014,7 +1865,7 @@ MusEGlobal::midiPorts[port].sendEvent(event); } - //synti->playMidiEvent(&event); // TODO + //synti->playMidiEvent(&event); // TODO DELETETHIS 7 hasn't changed since r462 // //MidiDevice* md = dynamic_cast(synti); //if(md) @@ -2050,11 +1901,12 @@ return 0; } + // DELETETHIS????: is the below still correct? of so, then keep it of course! // p3.3.39 Set the DSSI control input port's value. // Observations: With a native DSSI synth like LessTrivialSynth, the native GUI's controls do not change the sound at all // ie. they don't update the DSSI control port values themselves. // Hence in response to the call to this oscControl, sent by the native GUI, it is required to that here. -/// controls[cport].val = value; +/// controls[cport].val = value; DELETETHIS // DSSI-VST synths however, unlike DSSI synths, DO change their OWN sound in response to their gui controls. // AND this function is called. // Despite the descrepency we are STILL required to update the DSSI control port values here @@ -2071,6 +1923,7 @@ // (Because the server simply ignores the 'expected' messages.) // // Well, at least here are the fifos. Try this ... + // DELETETHIS 20 pretty old as well /* OscControlFifo* cfifo = _oscif.oscFifo(cport); if(cfifo) @@ -2093,13 +1946,12 @@ ce.unique = synth->_isDssiVst; // Special for messages from vst gui to host - requires processing every message. ce.idx = cport; ce.value = value; - // Time-stamp the event. This does a possibly slightly slow call to gettimeofday via timestamp(). - // timestamp() is more or less an estimate of the current frame. (This is exactly how ALSA events - // are treated when they arrive in our ALSA driver.) - //ce.frame = MusEGlobal::audio->timestamp(); - // p4.0.23 timestamp() is circular, which is making it impossible to deal with 'modulo' events which - // slip in 'under the wire' before processing the ring buffers. So try this linear timestamp instead: - ce.frame = MusEGlobal::audio->curFrame(); + + ce.frame = MusEGlobal::audio->curFrame(); + // don't use timestamp(), because it's circular, which is making it impossible to deal + // with 'modulo' events which slip in 'under the wire' before processing the ring buffers. + + if(_controlFifo.put(ce)) { fprintf(stderr, "DssiSynthIF::oscControl: fifo overflow: in control number:%lu\n", cport); @@ -2113,30 +1965,19 @@ // That makes this pretty useless... But what the heck... if(id() != -1) { - //int id = genACnum(_id, cport); unsigned long pid = genACnum(id(), cport); AutomationType at = synti->automationType(); // TODO: Taken from our native gui control handlers. // This may need modification or may cause problems - // we don't have the luxury of access to the dssi gui controls ! - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) - enableController(cport, false); + if ((at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying())) + enableController(cport, false); //TODO maybe re-enable the ctrl soon? synti->recordAutomation(pid, value); } - //MusECore::ciMidiCtl2LadspaPort ip = synth->port2MidiCtlMap.find(cport); - //if(ip != synth->port2MidiCtlMap.end()) - //{ - // TODO: TODO: Update midi MusE's midi controller knobs, sliders, boxes etc with a call to the midi port's setHwCtrlState() etc. - // But first we need a ladspa2MidiValue() function! ... - // - // - //float val = ladspa2MidiValue(ld, i, ?, ?); - - //} - return 0; } @@ -2164,15 +2005,6 @@ MusEGlobal::midiPorts[port].sendEvent(event); } - //synti->playMidiEvent(&event); // TODO - // - //MidiDevice* md = dynamic_cast(synti); - //if(md) - // md->putEvent(event); - // - //synti->putEvent(event); - // - return 0; } @@ -2217,6 +2049,7 @@ free(message); } + // DELETETHIS 6 ??? // "also call back on UIs for plugins other than the one // that requested this:" // if (n != instance->number && instances[n].uiTarget) { @@ -2258,11 +2091,29 @@ } } +void DssiSynthIF::doSelectProgram(LADSPA_Handle handle, int bank, int prog) +{ + const DSSI_Descriptor* dssi = synth->dssi; + dssi->select_program(handle, bank, prog); + + // Need to update the automation value, otherwise it overwrites later with the last automation value. + // "A plugin is permitted to re-write the values of its input control ports when select_program is called. + // The host should re-read the input control port values and update its own records appropriately. + // (This is the only circumstance in which a DSSI plugin is allowed to modify its own input ports.)" From dssi.h + if(id() != -1) + { + for(unsigned long k = 0; k < synth->_controlInPorts; ++k) + { + // We're in the audio thread context: no need to send a message, just modify directly. + synti->setPluginCtrlVal(genACnum(id(), k), controls[k].val); + } + } +} + //--------------------------------------------------------- // getPatchName //--------------------------------------------------------- -//QString DssiSynthIF::getPatchName(int, int prog) const char* DssiSynthIF::getPatchName(int /*chan*/, int prog, MType /*type*/, bool /*drum*/) { unsigned program = prog & 0x7f; @@ -2315,16 +2166,10 @@ const DSSI_Descriptor* dssi = synth->dssi; const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; - // Hmm, has a weird [] operator. Would it work? - // For now just use duplicate code found in ::init() - //iMidiCtl2LadspaPort ip = midiCtl2PortMap[id]; - //int ctlnum = ip->first; - //int k = ip->second; - unsigned long i = controls[id].idx; #ifdef DSSI_DEBUG - printf("DssiSynthIF::getControllerInfo control port:%d port idx:%d name:%s\n", id, i, ld->PortNames[i]); + printf("DssiSynthIF::getControllerInfo control port:%d port idx:%lu name:%s\n", id, i, ld->PortNames[i]); #endif int ctlnum = DSSI_NONE; @@ -2335,12 +2180,6 @@ // No controller number? Give it one. if(ctlnum == DSSI_NONE) { - // TODO: If neccesary... choose non-existing numbers... - //for(int k = 0; k < controlPorts; ++k) - //{ - // int i = synth->pIdx[k]; - //} - // Simple but flawed solution: Start them at 0x60000 + 0x2000 = 0x62000. Max NRPN number is 0x3fff. ctlnum = MusECore::CTRL_NRPN14_OFFSET + 0x2000 + id; } @@ -2393,9 +2232,6 @@ int DssiSynthIF::channels() const { - //willyfoobar-2011-02-13 - //!! either change return type to unsigend long or do this change - //old code //return synth->_outports > MAX_CHANNELS ? MAX_CHANNELS : synth->_outports; return ((int)synth->_outports) > MAX_CHANNELS ? MAX_CHANNELS : ((int)synth->_outports) ; } @@ -2426,14 +2262,30 @@ MusECore::AudioTrack* DssiSynthIF::track() { return (MusECore::AudioTrack*)synti; } void DssiSynthIF::enableController(unsigned long i, bool v) { controls[i].enCtrl = v; } bool DssiSynthIF::controllerEnabled(unsigned long i) const { return controls[i].enCtrl; } +void DssiSynthIF::enable2Controller(unsigned long i, bool v) { controls[i].en2Ctrl = v; } bool DssiSynthIF::controllerEnabled2(unsigned long i) const { return controls[i].en2Ctrl; } +void DssiSynthIF::enableAllControllers(bool v) +{ + if(!synth) + return; + for(unsigned long i = 0; i < synth->_controlInPorts; ++i) + controls[i].enCtrl = v; +} +void DssiSynthIF::enable2AllControllers(bool v) +{ + if(!synth) + return; + for(unsigned long i = 0; i < synth->_controlInPorts; ++i) + controls[i].en2Ctrl = v; +} + void DssiSynthIF::updateControllers() { } void DssiSynthIF::writeConfiguration(int /*level*/, Xml& /*xml*/) { } bool DssiSynthIF::readConfiguration(Xml& /*xml*/, bool /*readPreset*/) { return false; } unsigned long DssiSynthIF::parameters() const { return synth ? synth->_controlInPorts : 0; } unsigned long DssiSynthIF::parametersOut() const { return synth ? synth->_controlOutPorts : 0; } -void DssiSynthIF::setParam(unsigned long i, float val) { setParameter(i, val); } +void DssiSynthIF::setParam(unsigned long i, float val) { setParameter(i, val); } float DssiSynthIF::param(unsigned long i) const { return getParameter(i); } float DssiSynthIF::paramOut(unsigned long i) const { return getParameterOut(i); } const char* DssiSynthIF::paramName(unsigned long i) { return (synth && synth->dssi) ? synth->dssi->LADSPA_Plugin->PortNames[controls[i].idx] : 0; } diff -Nru muse-2.0~rc2/muse/dssihost.h muse-2.0/muse/dssihost.h --- muse-2.0~rc2/muse/dssihost.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/dssihost.h 2012-06-30 19:24:42.000000000 +0200 @@ -26,15 +26,21 @@ #include "config.h" -#include -#include -#include - // Make sure this number is unique among all the MESS synths and DSSI host synth. #define DSSI_SYNTH_UNIQUE_ID 8 // Midistate sysex initialization command. #define DSSI_INIT_DATA_CMD 1 +#define DSSI_PARAMSAVE_VERSION_MAJOR 0 +#define DSSI_PARAMSAVE_VERSION_MINOR 1 + + +#ifdef DSSI_SUPPORT + +#include +#include +#include + #ifdef OSC_SUPPORT #include #include "osc.h" @@ -42,6 +48,7 @@ #include "ladspa.h" #include + #include #include "midictrl.h" @@ -53,15 +60,15 @@ //#include #include "popupmenu.h" -#define DSSI_PARAMSAVE_VERSION_MAJOR 0 -#define DSSI_PARAMSAVE_VERSION_MINOR 1 +#endif // DSSI_SUPPORT namespace MusECore { +#ifdef DSSI_SUPPORT + struct _DSSI; class DssiPluginIF; -//class LadspaPort; class Port; //--------------------------------------------------------- @@ -76,7 +83,6 @@ unsigned long _portCount, _inports, _outports, _controlInPorts, _controlOutPorts; std::vector iIdx; // Audio input index to port number. std::vector oIdx; // Audio output index to port number. - //std::vector iUsedIdx; // During process, tells whether an audio input port was used by any input routes. std::vector iUsedIdx; // During process, tells whether an audio input port was used by any input routes. std::vector rpIdx; // Port number to control input index. Item is -1 if it's not a control input. MusECore::MidiCtl2LadspaPortMap midiCtl2PortMap; // Maps midi controller numbers to DSSI port numbers. @@ -95,11 +101,12 @@ virtual SynthIF* createSIF(SynthI*); friend class DssiSynthIF; - //float defaultValue(int); // Not required unsigned long inPorts() const { return _inports; } unsigned long outPorts() const { return _outports; } unsigned long inControls() const { return _controlInPorts; } unsigned long outControls() const { return _controlOutPorts; } + + const std::vector* getRpIdx() { return &rpIdx; } }; //--------------------------------------------------------- @@ -121,6 +128,7 @@ std::vector programs; void queryPrograms(); + void doSelectProgram(LADSPA_Handle handle, int bank, int prog); bool processEvent(const MusECore::MidiPlayEvent&, snd_seq_event_t*); float** audioInBuffers; @@ -179,19 +187,18 @@ #ifdef OSC_SUPPORT OscDssiIF& oscIF() { return _oscif; } - int oscProgram(unsigned long /*prog*/, unsigned long /*bank*/); - int oscControl(unsigned long /*dssiPort*/, float /*val*/); - int oscMidi(int /*a*/, int /*b*/, int /*c*/); - int oscConfigure(const char */*key*/, const char */*val*/); + int oscProgram(unsigned long prog, unsigned long bank); + int oscControl(unsigned long dssiPort, float val); + int oscMidi(int a, int b, int c); + int oscConfigure(const char *key, const char *val); int oscUpdate(); - //int oscExiting(); #endif //------------------------- // Methods for PluginIBase: //------------------------- bool on() const; - void setOn(bool /*val*/); + void setOn(bool val); unsigned long pluginID(); int id(); QString pluginLabel() const; @@ -201,28 +208,33 @@ QString fileName() const; QString titlePrefix() const; MusECore::AudioTrack* track(); - void enableController(unsigned long /*i*/, bool v = true); - bool controllerEnabled(unsigned long /*i*/) const; - bool controllerEnabled2(unsigned long /*i*/) const; + void enableController(unsigned long i, bool v = true); + bool controllerEnabled(unsigned long i) const; + void enable2Controller(unsigned long i, bool v = true); + bool controllerEnabled2(unsigned long i) const; + void enableAllControllers(bool v = true); + void enable2AllControllers(bool v = true); void updateControllers(); - void writeConfiguration(int /*level*/, Xml& /*xml*/); - bool readConfiguration(Xml& /*xml*/, bool readPreset=false); + void writeConfiguration(int level, Xml& xml); + bool readConfiguration(Xml& xml, bool readPreset=false); unsigned long parameters() const; unsigned long parametersOut() const; - void setParam(unsigned long /*i*/, float /*val*/); - float param(unsigned long /*i*/) const; - float paramOut(unsigned long /*i*/) const; - const char* paramName(unsigned long /*i*/); - const char* paramOutName(unsigned long /*i*/); - LADSPA_PortRangeHint range(unsigned long /*i*/); - LADSPA_PortRangeHint rangeOut(unsigned long /*i*/); - CtrlValueType ctrlValueType(unsigned long /*i*/) const; - CtrlList::Mode ctrlMode(unsigned long /*i*/) const; + void setParam(unsigned long i, float val); + float param(unsigned long i) const; + float paramOut(unsigned long i) const; + const char* paramName(unsigned long i); + const char* paramOutName(unsigned long i); + LADSPA_PortRangeHint range(unsigned long i); + LADSPA_PortRangeHint rangeOut(unsigned long i); + CtrlValueType ctrlValueType(unsigned long i) const; + CtrlList::Mode ctrlMode(unsigned long i) const; friend class DssiSynth; }; +#endif // DSSI_SUPPORT + extern void initDSSI(); } // namespace MusECore diff -Nru muse-2.0~rc2/muse/evdata.h muse-2.0/muse/evdata.h --- muse-2.0~rc2/muse/evdata.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/evdata.h 2012-06-30 19:24:43.000000000 +0200 @@ -25,7 +25,6 @@ #define __EVDATA_H__ #include -// #include namespace MusECore { diff -Nru muse-2.0~rc2/muse/eventbase.h muse-2.0/muse/eventbase.h --- muse-2.0~rc2/muse/eventbase.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/eventbase.h 2012-06-30 19:24:43.000000000 +0200 @@ -24,13 +24,11 @@ #ifndef __EVENTBASE_H__ #define __EVENTBASE_H__ -//#include #include #include "pos.h" #include "event.h" -//class AudioConverter; namespace MusECore { class WavePart; @@ -60,7 +58,6 @@ void move(int offset); virtual void read(Xml&) = 0; - //virtual void write(int, Xml&, const Pos& offset) const = 0; virtual void write(int, Xml&, const Pos& offset, bool forcePath = false) const = 0; virtual void dump(int n = 0) const; virtual EventBase* mid(unsigned, unsigned) = 0; @@ -100,12 +97,6 @@ virtual void setSndFile(SndFileR&) { } virtual EventBase* clone() = 0; - //virtual void read(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool overwrite = true) {} - //virtual void readAudio(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) {} - //virtual off_t readAudio(SRC_STATE* /*src_state*/, off_t /*sfCurFrame*/, unsigned /*offset*/, - // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) { return 0; } - //virtual off_t readAudio(AudioConverter* /*audConv*/, off_t /*sfCurFrame*/, unsigned /*offset*/, - // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) { return 0; } virtual void readAudio(WavePart* /*part*/, unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/) { } }; diff -Nru muse-2.0~rc2/muse/event.cpp muse-2.0/muse/event.cpp --- muse-2.0~rc2/muse/event.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/event.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -239,11 +239,6 @@ #ifdef USE_SAMPLERATE if(_audConv) { - // Do we release? Or keep the converter around, while gaining speed since no rapid creation/destruction. - //if(sf.isNull()) - // _audConv = AudioConverter::release(_audConv); - //else - // _audConv->setChannels(sf.channels()); if(!sf.isNull()) _audConv->setChannels(sf.channels()); } diff -Nru muse-2.0~rc2/muse/event.h muse-2.0/muse/event.h --- muse-2.0~rc2/muse/event.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/event.h 2012-06-30 19:24:43.000000000 +0200 @@ -27,9 +27,9 @@ #include #include -#include "wave.h" // wg. SndFile #include "pos.h" #include "evdata.h" +#include "wave.h" // for SndFileR class QString; @@ -103,7 +103,7 @@ MusECore::SndFileR sndFile() const; virtual void setSndFile(MusECore::SndFileR& sf); - virtual void readAudio(MusECore::WavePart* /*part*/, unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + virtual void readAudio(MusECore::WavePart* part, unsigned offset, float** bpp, int channels, int nn, bool doSeek, bool overwrite); void setTick(unsigned val); unsigned tick() const; diff -Nru muse-2.0~rc2/muse/eventlist.cpp muse-2.0/muse/eventlist.cpp --- muse-2.0~rc2/muse/eventlist.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/eventlist.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -104,9 +104,6 @@ iEvent EventList::find(const Event& event) { - // Changed by T356. - // Changed by Tim. p3.3.8 - //EventRange range = equal_range(event.tick()); EventRange range = equal_range(event.type() == Wave ? event.frame() : event.tick()); diff -Nru muse-2.0~rc2/muse/exportmidi.cpp muse-2.0/muse/exportmidi.cpp --- muse-2.0~rc2/muse/exportmidi.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/exportmidi.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -48,12 +48,9 @@ static void addController(MPEventList* l, int tick, int port, int channel, int a, int b) { - // p3.3.37 - //if (a < 0x1000) { // 7 Bit Controller if (a < CTRL_14_OFFSET) { // 7 Bit Controller l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, a, b)); } - //else if (a < 0x20000) { // 14 Bit Controller else if (a < CTRL_RPN_OFFSET) { // 14 Bit Controller int ctrlH = (a >> 8) & 0x7f; int ctrlL = a & 0x7f; @@ -62,7 +59,6 @@ l->add(MidiPlayEvent(tick, port, channel, ME_CONTROLLER, ctrlH, dataH)); l->add(MidiPlayEvent(tick+1, port, channel, ME_CONTROLLER, ctrlL, dataL)); } - //else if (a < 0x30000) { // RPN 7-Bit Controller else if (a < CTRL_NRPN_OFFSET) { // RPN 7-Bit Controller int ctrlH = (a >> 8) & 0x7f; int ctrlL = a & 0x7f; @@ -70,7 +66,6 @@ l->add(MidiPlayEvent(tick+1, port, channel, ME_CONTROLLER, CTRL_LRPN, ctrlL)); l->add(MidiPlayEvent(tick+2, port, channel, ME_CONTROLLER, CTRL_HDATA, b)); } - //else if (a < 0x40000) { // NRPN 7-Bit Controller else if (a < CTRL_INTERNAL_OFFSET) { // NRPN 7-Bit Controller int ctrlH = (a >> 8) & 0x7f; int ctrlL = a & 0x7f; @@ -106,7 +101,6 @@ } l->add(MidiPlayEvent(tick+tickoffset, port, channel, ME_PROGRAM, pr, 0)); } - //else if (a < 0x60000) { // RPN14 Controller else if (a < CTRL_NRPN14_OFFSET) { // RPN14 Controller int ctrlH = (a >> 8) & 0x7f; int ctrlL = a & 0x7f; @@ -117,7 +111,6 @@ l->add(MidiPlayEvent(tick+2, port, channel, ME_CONTROLLER, CTRL_HDATA, dataH)); l->add(MidiPlayEvent(tick+3, port, channel, ME_CONTROLLER, CTRL_LDATA, dataL)); } - //else if (a < 0x70000) { // NRPN14 Controller else if (a < CTRL_NONE_OFFSET) { // NRPN14 Controller int ctrlH = (a >> 8) & 0x7f; int ctrlL = a & 0x7f; @@ -142,21 +135,17 @@ { MusEGui::MFile file(QString("midis"), QString(".mid")); - //FILE* fp = file.open("w", midi_file_pattern, this, false, true, FILE* fp = file.open("w", MusEGlobal::midi_file_save_pattern, this, false, true, tr("MusE: Export Midi")); if (fp == 0) return; MusECore::MidiFile mf(fp); - //MusECore::MidiTrackList* tl = MusEGlobal::song->midis(); MusECore::TrackList* tl = MusEGlobal::song->tracks(); // Changed to full track list so user can rearrange tracks. - //int ntracks = tl->size(); MusECore::MidiFileTrackList* mtl = new MusECore::MidiFileTrackList; int i = 0; MusECore::MidiFileTrack* mft = 0; - //for (MusECore::iMidiTrack im = tl->begin(); im != tl->end(); ++im, ++i) { for (MusECore::ciTrack im = tl->begin(); im != tl->end(); ++im) { if(!(*im)->isMidiTrack()) @@ -164,7 +153,6 @@ MusECore::MidiTrack* track = (MusECore::MidiTrack*)(*im); - //MusECore::MidiFileTrack* mft = new MusECore::MidiFileTrack; if (i == 0 || (i != 0 && MusEGlobal::config.smfFormat != 0)) // Changed to single track. Tim { mft = new MusECore::MidiFileTrack; @@ -192,7 +180,7 @@ for (MusECore::ciMarker m = ml->begin(); m != ml->end(); ++m) { QByteArray ba = m->second.name().toLatin1(); const char* name = ba.constData(); - int len = strlen(name); + int len = ba.length(); MusECore::MidiPlayEvent ev(m->first, port, MusECore::ME_META, (unsigned char*)name, len); ev.setA(0x6); l->add(ev); @@ -204,14 +192,14 @@ QByteArray ba = MusEGlobal::config.copyright.toLatin1(); const char* copyright = ba.constData(); if (copyright && *copyright) { - int len = strlen(copyright); + int len = ba.length(); MusECore::MidiPlayEvent ev(0, port, MusECore::ME_META, (unsigned char*)copyright, len); ev.setA(0x2); l->add(ev); } //--------------------------------------------------- - // Write Coment + // Write Comment // //if (MusEGlobal::config.smfFormat == 0) // Only for smf 0 added by Tim. FIXME: Is this correct? See below. { @@ -263,11 +251,8 @@ //--------------------------------------------------- // Write Signatures // - ///const SigList* sl = &sigmap; const AL::SigList* sl = &AL::sigmap; - ///for (ciSigEvent e = sl->begin(); e != sl->end(); ++e) { for (AL::ciSigEvent e = sl->begin(); e != sl->end(); ++e) { - ///SigEvent* event = e->second; AL::SigEvent* event = e->second; int sz = (MusEGlobal::config.exp2ByteTimeSigs ? 2 : 4); // export 2 byte timesigs instead of 4 ? unsigned char data[sz]; @@ -281,7 +266,7 @@ case 32: data[1] = 5; break; case 64: data[1] = 6; break; default: - fprintf(stderr, "falsche Signatur; nenner %d\n", event->sig.n); + fprintf(stderr, "wrong Signature; denominator is %d\n", event->sig.n); break; } // By T356. In muse the metronome pulse is fixed at 24 (once per quarter-note). @@ -308,7 +293,7 @@ if (!track->name().isEmpty()) { QByteArray ba = track->name().toLatin1(); const char* name = ba.constData(); - int len = strlen(name); + int len = ba.length(); MusECore::MidiPlayEvent ev(0, port, MusECore::ME_META, (unsigned char*)name, len+1); ev.setA(0x3); // Meta Sequence/Track Name l->add(ev); @@ -319,16 +304,12 @@ // track comment //----------------------------------- - // FIXME: What are these 0x0F? All I found was that they are unspecified part of the sixteen text meta events. - // So why not use 0x01? And do we include it for all tracks, or only above 1? Tim. - //if (i == 0 || (i != 0 && MusEGlobal::config.smfFormat != 0)) - //if (i != 0 && MusEGlobal::config.smfFormat != 0) if (MusEGlobal::config.smfFormat != 0) { if (!track->comment().isEmpty()) { QByteArray ba = track->comment().toLatin1(); const char* comment = ba.constData(); - int len = strlen(comment); + int len = ba.length(); MusECore::MidiPlayEvent ev(0, port, MusECore::ME_META, (unsigned char*)comment, len+1); ev.setA(0xf); // Meta Text l->add(ev); @@ -351,13 +332,9 @@ } int pitch; if (track->type() == MusECore::Track::DRUM) { - // // Map drum-notes to the drum-map values - // int instr = ev.pitch(); pitch = MusEGlobal::drumMap[instr].anote; - // port = MusEGlobal::drumMap[instr].port; - // channel = MusEGlobal::drumMap[instr].channel; } else pitch = ev.pitch(); @@ -431,10 +408,10 @@ } mf.setDivision(MusEGlobal::config.midiDivision); mf.setMType(MusEGlobal::song->mtype()); - //mf.setTrackList(mtl, ntracks); mf.setTrackList(mtl, i); mf.write(); + // DELETETHIS 4 ??? or is this still an issue? // TESTING: Cleanup. I did not valgrind this feature in last memleak fixes, but I suspect it leaked. //for(MusECore::iMidiFileTrack imft = mtl->begin(); imft != mtl->end(); ++imft) // delete *imft; diff -Nru muse-2.0~rc2/muse/functions.cpp muse-2.0/muse/functions.cpp --- muse-2.0~rc2/muse/functions.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/functions.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -41,10 +41,9 @@ #include "widgets/function_dialogs/legato.h" #include "widgets/pasteeventsdialog.h" -#include +#include #include #include -#include #include #include #include @@ -177,7 +176,7 @@ { if (!MusEGui::quantize_dialog->exec()) return false; -// (1<raster_power2) + int raster = MusEGui::rasterVals[MusEGui::quantize_dialog->raster_index]; quantize_notes(parts, MusEGui::quantize_dialog->range, (MusEGlobal::config.division*4)/raster, MusEGui::quantize_dialog->quant_len, MusEGui::quantize_dialog->strength, MusEGui::quantize_dialog->swing, @@ -832,7 +831,7 @@ Event& event1=*(it1->first); Part* part1=it1->second; - unsigned len=MAXINT; + unsigned len=INT_MAX; // we may NOT optimize by letting it2 start at (it1 +1); this optimisation // is only allowed when events was sorted by time. it is, however, sorted // randomly by pointer. @@ -851,7 +850,7 @@ len=event2.tick()-event1.tick(); } - if (len==MAXINT) len=event1.lenTick(); // if no following note was found, keep the length + if (len==INT_MAX) len=event1.lenTick(); // if no following note was found, keep the length if (event1.lenTick() != len) { @@ -955,7 +954,7 @@ // if nothing is selected/relevant, this function returns NULL QMimeData* selected_events_to_mime(const set& parts, int range) { - unsigned start_tick = MAXINT; //will be the tick of the first event or MAXINT if no events are there + unsigned start_tick = INT_MAX; //will be the tick of the first event or INT_MAX if no events are there for (set::iterator part=parts.begin(); part!=parts.end(); part++) for (iEvent ev=(*part)->events()->begin(); ev!=(*part)->events()->end(); ev++) @@ -963,7 +962,7 @@ if (ev->second.tick() < start_tick) start_tick=ev->second.tick(); - if (start_tick == MAXINT) + if (start_tick == INT_MAX) return NULL; //--------------------------------------------------- @@ -1181,7 +1180,7 @@ schedule_resize_all_same_len_clone_parts(it->first, it->second, operations); MusEGlobal::song->informAboutNewParts(new_part_map); // must be called before apply. otherwise - // pointer changes (by resize) screw it up + // pointer changes (by resize) screw it up MusEGlobal::song->applyOperationGroup(operations); MusEGlobal::song->update(SC_SELECTION); } @@ -1402,7 +1401,7 @@ { Track* track=*t_it; - unsigned begin=MAXINT, end=0; + unsigned begin=INT_MAX, end=0; Part* first_part=NULL; // find begin of the first and end of the last part @@ -1420,9 +1419,9 @@ end=p->endTick(); } - if (begin==MAXINT || end==0) + if (begin==INT_MAX || end==0) { - printf("THIS SHOULD NEVER HAPPEN: begin==MAXINT || end==0 in merge_parts()\n"); + printf("THIS SHOULD NEVER HAPPEN: begin==INT_MAX || end==0 in merge_parts()\n"); continue; // skip the actual work, as we cannot work under errornous conditions. } diff -Nru muse-2.0~rc2/muse/gconfig.cpp muse-2.0/muse/gconfig.cpp --- muse-2.0~rc2/muse/gconfig.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/gconfig.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -140,11 +140,11 @@ true, // Split imported tracks into multiple parts. 1, // startMode QString(""), // start song path + false, // startSongLoadConfig 384, // gui division QRect(0, 0, 400, 300), // GeometryMain; QRect(0, 0, 200, 100), // GeometryTransport; QRect(0, 0, 600, 200), // GeometryBigTime; - //QRect(0, 0, 300, 500), // GeometryMixer; // Obsolete { QString("Mixer A"), QRect(0, 0, 300, 500), // Mixer1 @@ -183,15 +183,13 @@ QString("./"), // projectBaseFolder true, // projectStoreInFolder true, // useProjectSaveDialog - 64, // minControlProcessPeriod + 256, // minControlProcessPeriod false, // popupsDefaultStayOpen false, // leftMouseButtonCanDecrease false, // rangeMarkerWithoutMMB true, // addHiddenTracks - true // unhideTracks - + true, // unhideTracks + true // smartFocus }; -//GlobalConfigValues globalConfig = config; - } // namespace MusEGlobal diff -Nru muse-2.0~rc2/muse/gconfig.h muse-2.0/muse/gconfig.h --- muse-2.0~rc2/muse/gconfig.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/gconfig.h 2012-06-30 19:24:43.000000000 +0200 @@ -54,11 +54,7 @@ bool showAuxTracks; bool showSyntiTracks; - //void write(MusECore::Xml&, const char* name); - //void write(int level, MusECore::Xml& xml, const char* name); void write(int level, MusECore::Xml& xml); - //void read(QDomNode); - //void read(MusECore::Xml& xml, const QString& name); void read(MusECore::Xml& xml); }; @@ -75,7 +71,6 @@ QColor bigTimeForegroundColor; QColor bigTimeBackgroundColor; QColor waveEditBackgroundColor; - //QFont fonts[6]; QFont fonts[NUM_FONTS]; QColor trackBg; QColor selectTrackBg; @@ -123,17 +118,16 @@ // 1 - start with default template // 2 - start with song QString startSong; // path for start song + bool startSongLoadConfig; // Whether to load configuration with the start template or song int guiDivision; // division for tick display QRect geometryMain; QRect geometryTransport; QRect geometryBigTime; -// QRect geometryMixer; MixerConfig mixer1; MixerConfig mixer2; bool transportVisible; bool bigTimeVisible; -// bool mixerVisible; bool mixer1Visible; bool mixer2Visible; bool markerVisible; @@ -166,6 +160,7 @@ bool rangeMarkerWithoutMMB; bool addHiddenTracks; bool unhideTracks; + bool smartFocus; }; diff -Nru muse-2.0~rc2/muse/globals.cpp muse-2.0/muse/globals.cpp --- muse-2.0~rc2/muse/globals.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/globals.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -103,6 +103,7 @@ QString lastMidiPath("."); bool debugMode = false; +bool unityWorkaround = false; bool debugMsg = false; bool heavyDebugMsg = false; bool midiInputTrace = false; @@ -115,6 +116,7 @@ bool loadDSSI = true; bool usePythonBridge = false; bool useLASH = true; +bool useAlsaWithJack = false; const char* midi_file_pattern[] = { QT_TRANSLATE_NOOP("file_patterns", "Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2)"), @@ -129,18 +131,7 @@ // the file is a pipe, and pipes can't seek ! // This results in a corrupted midi file from MidiFile::writeTrack(). // So exporting compressed midi has simply been disabled here for now... -/* -const char* midi_file_save_pattern[] = { - "Midi (*.mid)", - "gzip compressed Midi (*.mid.gz)", - "bzip2 compressed Midi (*.mid.bz2)", - "Karaoke (*.kar)", - "gzip compressed karaoke (*.kar.gz)", - "bzip2 compressed karaoke (*.kar.bz2)", - "All Files (*)", - 0 - }; -*/ +// For re-enabling, add .mid.gz and .mid.bz2 and same for .kar again const char* midi_file_save_pattern[] = { QT_TRANSLATE_NOOP("file_patterns", "Midi (*.mid)"), QT_TRANSLATE_NOOP("file_patterns", "Karaoke (*.kar)"), @@ -181,15 +172,6 @@ 0 }; -// Not used. -/* -const char* ctrl_file_pattern[] = { - "ctrl Files (*.ctrl *.ctrl.gz *.ctrl.bz2)", - "All Files (*)", - 0 - }; -*/ - const char* part_file_pattern[] = { QT_TRANSLATE_NOOP("file_patterns", "part Files (*.mpt *.mpt.gz *.mpt.bz2)"), QT_TRANSLATE_NOOP("file_patterns", "All Files (*)"), @@ -203,14 +185,6 @@ 0 }; -/* -const char* plug_file_pattern[] = { - QT_TRANSLATE_NOOP("file_patterns", "part Files (*.pre)"), - QT_TRANSLATE_NOOP("file_patterns", "All Files (*)"), - 0 - }; -*/ - const char* preset_file_pattern[] = { QT_TRANSLATE_NOOP("file_patterns", "Presets (*.pre *.pre.gz *.pre.bz2)"), QT_TRANSLATE_NOOP("file_patterns", "All Files (*)"), @@ -247,7 +221,6 @@ 0 }; -///Qt::ButtonState globalKeyState; Qt::KeyboardModifiers globalKeyState; // Midi Filter Parameter @@ -275,7 +248,6 @@ QAction* recordAction; QAction* panicAction; -//AudioMixerApp* audioMixer; MusEGui::MusE* muse = 0; int preMeasures = 2; @@ -303,6 +275,12 @@ unsigned char rcSteprecNote = 36; bool automation = true; +// Midi learn params. These will be initialized to -1 by any midi learn function, +// and then filled by the midi engine in response to the drivers. +int midiLearnPort = -1; +int midiLearnChan = -1; +int midiLearnCtrl = -1; + uid_t euid, ruid; // effective user id, real user id bool midiSeqRunning = false; diff -Nru muse-2.0~rc2/muse/globals.h muse-2.0/muse/globals.h --- muse-2.0~rc2/muse/globals.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/globals.h 2012-06-30 19:24:42.000000000 +0200 @@ -77,6 +77,7 @@ extern bool debugMode; extern bool midiInputTrace; extern bool midiOutputTrace; +extern bool unityWorkaround; extern bool debugMsg; extern bool heavyDebugMsg; extern bool debugSync; @@ -85,6 +86,7 @@ extern bool loadDSSI; extern bool usePythonBridge; extern bool useLASH; +extern bool useAlsaWithJack; extern bool realTimeScheduling; extern int realTimePriority; @@ -96,7 +98,6 @@ extern const char* med_file_save_pattern[]; extern const char* project_create_file_save_pattern[]; extern const char* image_file_pattern[]; -//extern const char* ctrl_file_pattern[]; extern const char* part_file_pattern[]; extern const char* part_file_save_pattern[]; extern const char* preset_file_pattern[]; @@ -105,7 +106,6 @@ extern const char* drum_map_file_save_pattern[]; extern const char* audio_file_pattern[]; -///extern Qt::ButtonState globalKeyState; extern Qt::KeyboardModifiers globalKeyState; extern int midiInputPorts; //!< receive from all devices @@ -146,8 +146,6 @@ extern QAction* recordAction; extern QAction* panicAction; -//class AudioMixerApp; -//extern AudioMixerApp* audioMixer; extern MusEGui::MusE* muse; extern int preMeasures; @@ -174,6 +172,10 @@ extern unsigned char rcPlayNote; extern unsigned char rcSteprecNote; +extern int midiLearnPort; +extern int midiLearnChan; +extern int midiLearnCtrl; + extern bool midiSeqRunning; extern bool automation; diff -Nru muse-2.0~rc2/muse/gui.h muse-2.0/muse/gui.h --- muse-2.0~rc2/muse/gui.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/gui.h 2012-06-30 19:24:43.000000000 +0200 @@ -29,27 +29,6 @@ // central point of tweaking the gui // -/* -// size of horizontal and vertical splitter -// -static const int splitWidth = 6; - -// arranger: -static const int trackRowHeight = 24; -static const int minTrackHeight = trackRowHeight + splitWidth + 1; -static const int defaultTrackHeight = minTrackHeight; -static const int infoHeight = 20; -static const int infoWidth = 140; -static const int trackSeparator = 1; -static const int yTrackOffset = -2; // -4; - -// mixer: -static const int STRIP_WIDTH = 60; -static const int LABEL_HEIGHT = 20; -static const int BUTTON_HEIGHT = STRIP_WIDTH / 3; -static const int ENTRY_HEIGHT = 17; -*/ - static const int ICON_WIDTH = 18; static const QSize ICON_SIZE(ICON_WIDTH, ICON_WIDTH); diff -Nru muse-2.0~rc2/muse/help.cpp muse-2.0/muse/help.cpp --- muse-2.0~rc2/muse/help.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/help.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -73,7 +73,6 @@ void MusE::startBugBrowser() { - //QString museBugPage("http://www.muse-sequencer.org/wiki/index.php/Report_a_bug"); QString museBugPage("http://www.muse-sequencer.org/index.php/Report_a_bug"); launchBrowser(museBugPage); } diff -Nru muse-2.0~rc2/muse/helper.cpp muse-2.0/muse/helper.cpp --- muse-2.0~rc2/muse/helper.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/helper.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -38,14 +38,15 @@ #include "globaldefs.h" #include "audio.h" #include "audiodev.h" +#include "midi.h" #include "midiseq.h" +#include #include #include #include #include #include -//#include #ifdef DSSI_SUPPORT #include "dssihost.h" @@ -116,6 +117,23 @@ return !get_events(parts, in_range ? 3 : 1).empty(); } +void record_controller_change_and_maybe_send(unsigned tick, int ctrl_num, int val, MidiTrack* mt) +{ + MusECore::Event a(MusECore::Controller); + a.setTick(tick); + a.setA(ctrl_num); + a.setB(val); + MusEGlobal::song->recordEvent(mt, a); + + if (MusEGlobal::song->cpos() < mt->getControllerValueLifetime(tick, ctrl_num)) + { + // this CC has an immediate effect? so send it out to the device. + MusECore::MidiPlayEvent ev(0, mt->outPort(), mt->outChannel(), MusECore::ME_CONTROLLER, ctrl_num, val); + MusEGlobal::audio->msgPlayMidiEvent(&ev); + } +} + + } // namespace MusECore namespace MusEGui { @@ -128,14 +146,11 @@ { QMenu* synp = new QMenu(parent); - //typedef std::multimap asmap; typedef std::multimap asmap; - - //typedef std::multimap::iterator imap; typedef std::multimap::iterator imap; - int ntypes = MusECore::Synth::SYNTH_TYPE_END; + const int ntypes = MusECore::Synth::SYNTH_TYPE_END; asmap smaps[ntypes]; QMenu* mmaps[ntypes]; for(int itype = 0; itype < ntypes; ++itype) @@ -252,8 +267,6 @@ addTrack->addMenu(synp); } - //QObject::connect(addTrack, SIGNAL(triggered(QAction *)), MusEGlobal::song, SLOT(addNewTrack(QAction *))); - return grp; } @@ -263,9 +276,7 @@ QString getFilterExtension(const QString &filter) { - // // Return the first extension found. Must contain at least one * character. - // int pos = filter.indexOf('*'); if(pos == -1) @@ -305,8 +316,6 @@ QString dir = QFileDialog::getExistingDirectory(parent, qApp->translate("@default", QT_TRANSLATE_NOOP("@default", "Select project directory")), path); if(dir.isEmpty()) dir = MusEGlobal::config.projectBaseFolder; - // projDirLineEdit->setText(dir); - //return QFileDialog::getExistingDirectory(this, qApp->translate("@default", QT_TRANSLATE_NOOP("@default", "Select project directory")), path); return dir; } @@ -324,7 +333,6 @@ QFileInfo fi(filename); - //return fi.baseName(); return fi.fileName(); } @@ -353,9 +361,6 @@ QString getUniqueUntitledName() { QString filename("untitled"); - //QTemporaryFile tf(MusEGlobal::config.projectBaseFolder +"/" + s + "XXXXXX.med"); - //if(tf.open()) - // s = MusEGui::projectTitleFromFilename(tf.fileName()); QString fbase(MusEGlobal::config.projectBaseFolder); @@ -364,7 +369,6 @@ nfb += "/" + filename; QFileInfo fi(nfb + "/" + filename + ".med"); // TODO p4.0.40 Check other extensions. if(!fi.exists()) - //return filename; return fi.filePath(); // Find a new filename @@ -378,14 +382,10 @@ nfb += "/" + nfn; QFileInfo fi(nfb + "/" + nfn + ".med"); if(!fi.exists()) - //break; return fi.filePath(); } - //if(idx >= 10000) - printf("MusE error: Could not make untitled project name (10000 or more untitled projects in project dir - clean up!\n"); - - //return nfn; + printf("MusE error: Could not make untitled project name (10000 or more untitled projects in project dir - clean up!\n"); nfb = fbase; if(MusEGlobal::config.projectStoreInFolder) @@ -424,8 +424,6 @@ if(dev) { ++jack_midis_found; - //printf("populateMidiPorts Created jack writeable device: %s\n", dev->name().toLatin1().constData()); - //dev->setOpenFlags(1); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); MusECore::Route srcRoute(dev, -1); MusECore::Route dstRoute(*i, true, -1, MusECore::Route::JACK_ROUTE); @@ -442,8 +440,6 @@ if(dev) { ++jack_midis_found; - //printf("populateMidiPorts Created jack readable device: %s\n", dev->name().toLatin1().constData()); - //dev->setOpenFlags(2); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); MusECore::Route srcRoute(*i, false, -1, MusECore::Route::JACK_ROUTE); MusECore::Route dstRoute(dev, -1); @@ -455,10 +451,10 @@ } //else // If Jack is not running, use ALSA devices. - //if(MusEGlobal::audioDevice->deviceType() == MusECore::AudioDevice::DUMMY_AUDIO) // Try to do the user a favour: If we still have no Jack devices, even if Jack is running, fill with ALSA. // It is possible user has Jack running on ALSA back-end but without midi support. // IE. They use Jack for audio but use ALSA for midi! + // If unwanted, remove "|| jack_midis_found == 0". if(MusEGlobal::audioDevice->deviceType() == MusECore::AudioDevice::DUMMY_AUDIO || jack_midis_found == 0) { for(MusECore::iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) @@ -466,40 +462,16 @@ if((*i)->deviceType() != MusECore::MidiDevice::ALSA_MIDI) continue; dev = *i; - // Select only sensible devices first - not thru etc. - //if( ... ) - // continue; - - //dev->setOpenFlags(1); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); if(++port_num == MIDI_PORTS) return; } - - //for(MusECore::iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) - //{ - // if((*i)->deviceType() != MusECore::MidiDevice::ALSA_MIDI) - // continue; - // // Select the ones ignored in the first pass. - // if(! ... ) - // continue; - // - // dev->setOpenFlags(1); - // MusEGlobal::midiSeq->msgSetMidiDevice(port_num, dev); - // - // if(++port_num == MIDI_PORTS) - // return; - //} } - - //MusEGlobal::muse->changeConfig(true); // save configuration file - //MusEGlobal::song->update(); - } #else - +// DELETETHIS uhm, yeah... do we need this? // ------------------------------------------------------------------------------------------------------- // populateMidiPorts() // This version worked somewhat well with system devices. @@ -524,9 +496,7 @@ { std::list wsl; std::list rsl; - //wsl = MusEGlobal::audioDevice->inputPorts(true, 1); // Ask for second aliases. wsl = MusEGlobal::audioDevice->inputPorts(true, 0); // Ask for first aliases. - //rsl = MusEGlobal::audioDevice->outputPorts(true, 1); // Ask for second aliases. rsl = MusEGlobal::audioDevice->outputPorts(true, 0); // Ask for first aliases. for(std::list::iterator wi = wsl.begin(); wi != wsl.end(); ++wi) @@ -556,16 +526,9 @@ // Do we have a matching pair? if(rs == ws) { - // Would like to remove the client name, but no, we need it as a distinguishing identifier. - //int z = ws.indexOf(":"); - //if(z >= 0) - // ws.remove(0, z + 1); - dev = MusECore::MidiJackDevice::createJackMidiDevice(ws, 3); if(dev) { - //printf("populateMidiPorts Created jack writeable/readable device: %s\n", dev->name().toLatin1().constData()); - //dev->setOpenFlags(1); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); MusECore::Route devRoute(dev, -1); MusECore::Route wdstRoute(*wi, true, -1, MusECore::Route::JACK_ROUTE); @@ -586,15 +549,9 @@ { // No match was found. Create a single writeable device. QString s = *wi; - // Would like to remove the client name, but no, we need it as a distinguishing identifier. - //int z = s.indexOf(":"); - //if(z >= 0) - // s.remove(0, z + 1); dev = MusECore::MidiJackDevice::createJackMidiDevice(s, 1); if(dev) { - //printf("populateMidiPorts Created jack writeable device: %s\n", dev->name().toLatin1().constData()); - //dev->setOpenFlags(1); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); MusECore::Route srcRoute(dev, -1); MusECore::Route dstRoute(*wi, true, -1, MusECore::Route::JACK_ROUTE); @@ -609,15 +566,9 @@ for(std::list::iterator ri = rsl.begin(); ri != rsl.end(); ++ri) { QString s = *ri; - // Would like to remove the client name, but no, we need it as a distinguishing identifier. - //int z = s.indexOf(":"); - //if(z >= 0) - // s.remove(0, z + 1); dev = MusECore::MidiJackDevice::createJackMidiDevice(s, 2); if(dev) { - //printf("populateMidiPorts Created jack readable device: %s\n", dev->name().toLatin1().constData()); - //dev->setOpenFlags(2); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); MusECore::Route srcRoute(*ri, false, -1, MusECore::Route::JACK_ROUTE); MusECore::Route dstRoute(dev, -1); @@ -636,36 +587,12 @@ if((*i)->deviceType() != MusECore::MidiDevice::ALSA_MIDI) continue; dev = *i; - // Select only sensible devices first - not thru etc. - //if( ... ) - // continue; - - //dev->setOpenFlags(1); MusEGlobal::midiSeq->msgSetMidiDevice(&MusEGlobal::midiPorts[port_num], dev); if(++port_num == MIDI_PORTS) return; } - - //for(MusECore::iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) - //{ - // if((*i)->deviceType() != MusECore::MidiDevice::ALSA_MIDI) - // continue; - // // Select the ones ignored in the first pass. - // if(! ... ) - // continue; - // - // dev->setOpenFlags(1); - // MusEGlobal::midiSeq->msgSetMidiDevice(port_num, dev); - // - // if(++port_num == MIDI_PORTS) - // return; - //} } - - //MusEGlobal::muse->changeConfig(true); // save configuration file - //MusEGlobal::song->update(); - } #endif // populateMidiPorts diff -Nru muse-2.0~rc2/muse/helper.h muse-2.0/muse/helper.h --- muse-2.0~rc2/muse/helper.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/helper.h 2012-06-30 19:24:42.000000000 +0200 @@ -30,13 +30,14 @@ class QString; class QMenu; class QWidget; - +class MidiTrack; namespace MusECore { class Part; QString pitch2string(int v); Part* partFromSerialNumber(int serial); bool any_event_selected(const std::set&, bool in_range=false); +void record_controller_change_and_maybe_send(unsigned tick, int ctrl_num, int val, MidiTrack* mt); } namespace MusEGui { diff -Nru muse-2.0~rc2/muse/icons.cpp muse-2.0/muse/icons.cpp --- muse-2.0~rc2/muse/icons.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/icons.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -204,6 +204,8 @@ #include "xpm/cliplistS.xpm" #include "xpm/mixeraudioS.xpm" #include "xpm/initS.xpm" +#include "xpm/delta_on.xpm" +#include "xpm/delta_off.xpm" #include "xpm/addtrack_addmiditrack.xpm" #include "xpm/addtrack_audiogroup.xpm" @@ -284,6 +286,8 @@ QPixmap* cliplistSIcon; QPixmap* mixerAudioSIcon; QPixmap* initSIcon; +QPixmap* deltaOnIcon; +QPixmap* deltaOffIcon; QPixmap* exitIcon; QPixmap* exit1Icon; @@ -656,6 +660,8 @@ cliplistSIcon = new MPIXMAP(cliplistS_xpm, NULL); mixerAudioSIcon = new MPIXMAP(mixerAudioS_xpm, NULL); initSIcon = new MPIXMAP(initS_xpm, NULL); + deltaOnIcon = new MPIXMAP(delta_on_xpm, NULL); + deltaOffIcon = new MPIXMAP(delta_off_xpm, NULL); addtrack_addmiditrackIcon = new MPIXMAP(addtrack_addmiditrack_xpm, NULL); addtrack_audiogroupIcon = new MPIXMAP(addtrack_audiogroup_xpm, NULL); @@ -731,4 +737,241 @@ sawIcon = new MPIXMAP(saw_xpm, NULL); } +//--------------------------------------------------------- +// deleteIcons +//--------------------------------------------------------- + +void deleteIcons() + { + delete track_commentIcon; + delete pointerIcon; + delete pencilIcon; + delete deleteIcon; + delete punchinIcon; + delete punchoutIcon; + delete punchin1Icon; + delete punchout1Icon; + delete loopIcon; + delete loop1Icon; + delete playIcon; + + delete record1_Icon; + delete record_on_Icon; + delete record_off_Icon; + delete recordIcon; + delete stopIcon; + delete startIcon; + delete fforwardIcon; + delete frewindIcon; + delete dotIcon; + delete dothIcon; + delete dot1Icon; + delete noteIcon; + delete note1Icon; + delete stickIcon; + delete waveIcon; + delete synthIcon; + delete markIcon[0]; + delete markIcon[1]; + delete markIcon[2]; + delete cutIcon; + delete steprecIcon; + delete glueIcon; + delete drawIcon; + delete cursorIcon; + delete quantIcon; + delete saveIcon; + delete saveasIcon; + delete printIcon; + delete openIcon; + delete saveIconS; + delete saveasIconS; + delete printIconS; + delete openIconS; + delete masterIcon; + delete filenewIcon; + delete filenewIconS; + delete homeIcon; + delete backIcon; + delete forwardIcon; + delete muteIcon; + delete upIcon; + delete downIcon; + delete boldIcon; + delete italicIcon; + delete underlinedIcon; + delete gvIcon; + delete midiinIcon; + delete sysexIcon; + delete ctrlIcon; + delete metaIcon; + delete pitchIcon; + delete cafterIcon; + delete pafterIcon; + delete flagIcon; + delete flagIconS; + delete lockIcon; + delete tocIcon; + delete exitIconS; + + delete undoIcon; + delete redoIcon; + delete undoIconS; + delete redoIconS; + + delete speakerIcon; + delete buttondownIcon; + delete configureIcon; + + delete editmuteIcon; + delete editmuteSIcon; + delete panicIcon; + + delete editcutIconSet; + delete editcopyIconSet; + delete editpasteIconSet; + delete editmuteIconSet; + delete editpaste2TrackIconSet; + delete editpasteCloneIconSet; + delete editpasteClone2TrackIconSet; + + /* Not used - Orcan + delete pianoIcon; + delete editcutIcon; + delete editcopyIcon; + delete editpasteIcon; + delete editpasteCloneIcon; + delete editpaste2TrackIcon; + delete editpasteClone2TrackIcon; + */ + + delete exitIcon; + delete exit1Icon; + + // 2 lines odd code + delete newmuteIcon; + delete soloIcon; + + delete routesInIcon; + delete routesOutIcon; + delete routesMidiInIcon; + delete routesMidiOutIcon; + + delete recEchoIconOn; + delete recEchoIconOff; + delete muteIconOn; + delete muteIconOff; + delete soloIconOn; + delete soloIconOff; + delete soloblksqIconOn; + delete soloblksqIconOff; + //delete soloIconSet1 + //delete soloIconSet2 + + delete toggle_small_Icon; + delete redLedIcon; + delete darkRedLedIcon; + delete greendotIcon; + //delete darkgreendotIcon; + delete bluedotIcon; + delete graydotIcon; + delete offIcon; + delete blacksquareIcon; + delete blacksqcheckIcon; + + delete mastertrackSIcon; + delete localoffSIcon; + delete miditransformSIcon; + delete midi_plugSIcon; + delete miditransposeSIcon; + delete midiThruOnIcon; + delete midiThruOffIcon; + + delete mixerSIcon; + delete mustangSIcon; + delete resetSIcon; + delete track_addIcon; + delete track_deleteIcon; + delete listSIcon; + delete inputpluginSIcon; + delete cliplistSIcon; + delete mixerAudioSIcon; + delete initSIcon; + delete deltaOnIcon; + delete deltaOffIcon; + + delete addtrack_addmiditrackIcon; + delete addtrack_audiogroupIcon; + delete addtrack_audioinputIcon; + delete addtrack_audiooutputIcon; + delete addtrack_auxsendIcon; + delete addtrack_drumtrackIcon; + delete addtrack_wavetrackIcon; + delete edit_drummsIcon; + delete edit_listIcon; + delete edit_waveIcon; + delete edit_mastertrackIcon; + delete edit_pianorollIcon; + delete edit_scoreIcon; + delete edit_track_addIcon; + delete edit_track_delIcon; + delete mastertrack_graphicIcon; + delete mastertrack_listIcon; + delete midi_transformIcon; + delete midi_transposeIcon; + delete selectIcon; + delete select_allIcon; + delete select_all_parts_on_trackIcon; + delete select_deselect_allIcon; + delete select_inside_loopIcon; + delete select_invert_selectionIcon; + delete select_outside_loopIcon; + delete pianoIconSet; + delete scoreIconSet; + + delete audio_bounce_to_fileIcon; + delete audio_bounce_to_trackIcon; + delete audio_restartaudioIcon; + delete automation_clear_dataIcon; + delete automation_mixerIcon; + delete automation_take_snapshotIcon; + delete edit_midiIcon; + delete midi_edit_instrumentIcon; + delete midi_init_instrIcon; + delete midi_inputpluginsIcon; + delete midi_inputplugins_midi_input_filterIcon; + delete midi_inputplugins_midi_input_transformIcon; + delete midi_inputplugins_random_rhythm_generatorIcon; + delete midi_inputplugins_remote_controlIcon; + delete midi_inputplugins_transposeIcon; + delete midi_local_offIcon; + delete midi_reset_instrIcon; + delete settings_appearance_settingsIcon; + delete settings_configureshortcutsIcon; + delete settings_follow_songIcon; + delete settings_globalsettingsIcon; + delete settings_metronomeIcon; + delete settings_midifileexportIcon; + delete settings_midiport_softsynthsIcon; + delete settings_midisyncIcon; + delete view_bigtime_windowIcon; + delete view_cliplistIcon; + delete view_markerIcon; + delete view_mixerIcon; + delete view_transport_windowIcon; + + delete monoIcon; + delete stereoIcon; + + delete museIcon; + delete aboutMuseImage; + delete museLeftSideLogo; + delete globalIcon; + delete userIcon; + delete projectIcon; + + delete sineIcon; + delete sawIcon; + } + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/icons.h muse-2.0/muse/icons.h --- muse-2.0~rc2/muse/icons.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/icons.h 2012-06-30 19:24:42.000000000 +0200 @@ -188,6 +188,8 @@ extern QPixmap* cliplistSIcon; extern QPixmap* mixerAudioSIcon; extern QPixmap* initSIcon; +extern QPixmap* deltaOnIcon; +extern QPixmap* deltaOffIcon; extern QPixmap* addtrack_addmiditrackIcon; extern QPixmap* addtrack_audiogroupIcon; diff -Nru muse-2.0~rc2/muse/importmidi.cpp muse-2.0/muse/importmidi.cpp --- muse-2.0~rc2/muse/importmidi.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/importmidi.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -22,7 +22,7 @@ //========================================================= #include -#include +#include #include #include @@ -38,13 +38,11 @@ #include "midiport.h" #include "transport.h" #include "arranger.h" -//#include "arranger/arranger.h" // p4.0.2 #include "mpevent.h" #include "event.h" #include "midictrl.h" #include "instruments/minstrument.h" #include "drummap.h" -//#include "midiedit/drummap.h" // p4.0.2 #include "xml.h" #include "audio.h" #include "gconfig.h" @@ -190,9 +188,7 @@ mport->setInstrument(instr); MusECore::EventList* mel = track->events(); - //buildMidiEventList(mel, el, track, division, first); - // Don't do loops. - buildMidiEventList(mel, el, track, division, first, false); + buildMidiEventList(mel, el, track, division, first, false); // Don't do loops. first = false; // Comment Added by T356. @@ -200,9 +196,8 @@ // But it seems to work. How? Must test. if (channel == 9 && MusEGlobal::song->mtype() != MT_UNKNOWN) { track->setType(MusECore::Track::DRUM); - // // remap drum pitch with drumOutmap (was: Inmap. flo93 thought this was wrong) - // + MusECore::EventList* tevents = track->events(); for (MusECore::iEvent i = tevents->begin(); i != tevents->end(); ++i) { MusECore::Event ev = i->second; @@ -237,9 +232,7 @@ track->setOutChannel(0); track->setOutPort(0); MusECore::EventList* mel = track->events(); - //buildMidiEventList(mel, el, track, division, true); - // Do SysexMeta. Don't do loops. - buildMidiEventList(mel, el, track, division, true, false); + buildMidiEventList(mel, el, track, division, true, false); // Do SysexMeta. Don't do loops. processTrack(track); MusEGlobal::song->insertTrack0(track, -1); } @@ -254,7 +247,6 @@ MusEGlobal::song->initLen(); int z, n; - ///sigmap.timesig(0, z, n); AL::sigmap.timesig(0, z, n); int tempo = MusEGlobal::tempomap.tempo(0); @@ -268,7 +260,6 @@ MusEGlobal::song->updatePos(); _arranger->reset(); - ///_arranger->setMode(int(MusEGlobal::song->mtype())); // p4.0.7 Tim } else { MusEGlobal::song->initLen(); @@ -315,7 +306,6 @@ int bar2, beat; unsigned tick; - ///sigmap.tickValues(len, &bar2, &beat, &tick); AL::sigmap.tickValues(len, &bar2, &beat, &tick); int lastOff = 0; @@ -324,7 +314,6 @@ int x2 = 0; // end tick current measure for (int bar = 0; bar < bar2; ++bar, x1 = x2) { - ///x2 = sigmap.bar2tick(bar+1, 0, 0); x2 = AL::sigmap.bar2tick(bar+1, 0, 0); if (lastOff > x2) { // this measure is busy! @@ -338,7 +327,6 @@ MusECore::MidiPart* part = new MusECore::MidiPart(track); part->setTick(st); part->setLenTick(x1-st); - // printf("new part %d len: %d\n", st, x1-st); part->setName(partname); pl->add(part); st = -1; @@ -362,7 +350,6 @@ if (st != -1) { MusECore::MidiPart* part = new MusECore::MidiPart(track); part->setTick(st); - // printf("new part %d len: %d\n", st, x2-st); part->setLenTick(x2-st); part->setName(partname); pl->add(part); @@ -372,7 +359,6 @@ { // Just one long part... MusECore::MidiPart* part = new MusECore::MidiPart(track); - //part->setTick(st); part->setTick(0); part->setLenTick(len); part->setName(partname); @@ -425,11 +411,9 @@ return; // controller does already exist MusECore::MidiController* ctrl = 0; MusECore::MidiControllerList* mcl = instr->controller(); -// printf("import Ctrl\n"); for (MusECore::iMidiController i = mcl->begin(); i != mcl->end(); ++i) { MusECore::MidiController* mc = i->second; int cn = mc->num(); -// printf(" %x %x\n", n, cn); if (cn == n) { ctrl = mc; break; @@ -443,8 +427,6 @@ if (ctrl == 0) { printf("controller 0x%x not defined for instrument %s, channel %d\n", n, instr->iname().toLatin1().constData(), channel); -// TODO: register default Controller -// MusECore::MidiController* MusECore::MidiPort::midiController(int num) const } MusECore::MidiCtrlValList* newValList = new MusECore::MidiCtrlValList(n); vll->add(channel, newValList); @@ -464,13 +446,11 @@ MusECore::Track* t = *i; if (t->selected()) { // Changed by T356. Support mixed .mpt files. - //if (t->isMidiTrack()) { if (t->isMidiTrack() || t->type() == MusECore::Track::WAVE) { track = t; break; } else { - //QMessageBox::warning(this, QString("MusE"), tr("Import part is only valid for midi tracks!")); QMessageBox::warning(this, QString("MusE"), tr("Import part is only valid for midi and wave tracks!")); return; } @@ -506,6 +486,7 @@ //--------------------------------------------------------- void MusE::importPartToTrack(QString& filename, unsigned tick, MusECore::Track* track) { + // DELETETHIS 41 // Changed by T356 /* bool popenFlag = false; @@ -572,9 +553,6 @@ break; case MusECore::Xml::TagStart: if (tag == "part") { - //MusECore::MidiPart* p = new MusECore::MidiPart((MusECore::MidiTrack*)track); - //p->read(xml); - // Read the part. MusECore::Part* p = 0; p = readXmlPart(xml, track); @@ -595,8 +573,6 @@ posOffset = tick - p->tick(); } p->setTick(p->tick() + posOffset); - //finalPos=p->tick() + p->lenTick(); - ////pos += p->lenTick(); MusEGlobal::audio->msgAddPart(p,false); } else diff -Nru muse-2.0~rc2/muse/instruments/editinstrument.cpp muse-2.0/muse/instruments/editinstrument.cpp --- muse-2.0~rc2/muse/instruments/editinstrument.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/instruments/editinstrument.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -66,16 +66,13 @@ toolBar->addAction(QWhatsThis::createAction(this)); Help->addAction(QWhatsThis::createAction(this)); - ///patchpopup = new QMenu(patchButton); - //patchpopup->setCheckable(false);// Qt4 doc says this is unnecessary. - // populate instrument list // Populate common controller list. for(int i = 0; i < 128; ++i) - { - QListWidgetItem *lci = new QListWidgetItem(MusECore::midiCtrlName(i)); - listController->addItem(lci); - } + { + QListWidgetItem *lci = new QListWidgetItem(MusECore::midiCtrlName(i)); + listController->addItem(lci); + } oldMidiInstrument = 0; oldPatchItem = 0; for (MusECore::iMidiInstrument i = MusECore::midiInstruments.begin(); i != MusECore::midiInstruments.end(); ++i) { @@ -95,6 +92,7 @@ instrumentList->setSelectionMode(QAbstractItemView::SingleSelection); if(instrumentList->item(0)) instrumentList->setCurrentItem(instrumentList->item(0)); + //DELETETHIS //oldMidiInstrument = (MusECore::MidiInstrument*)((ListBoxData*)instrumentList->item(0))->data(); //oldMidiInstrument = (ListBoxData*)instrumentList->item(0); //oldMidiInstrument = (ListBoxData*)instrumentList->selectedItem(); @@ -108,13 +106,10 @@ connect(instrumentList, SIGNAL(itemSelectionChanged()), SLOT(instrumentChanged())); connect(patchView, SIGNAL(itemSelectionChanged()), SLOT(patchChanged())); - //instrumentChanged(); changeInstrument(); - //connect(listController, SIGNAL(selectionChanged()), SLOT(controllerChanged())); connect(viewController, SIGNAL(itemSelectionChanged()), SLOT(controllerChanged())); - //connect(instrumentName, SIGNAL(textChanged(const QString&)), SLOT(instrumentNameChanged(const QString&))); connect(instrumentName, SIGNAL(returnPressed()), SLOT(instrumentNameReturn())); connect(instrumentName, SIGNAL(lostFocus()), SLOT(instrumentNameReturn())); @@ -123,7 +118,6 @@ connect(patchDelete, SIGNAL(clicked()), SLOT(deletePatchClicked())); connect(patchNew, SIGNAL(clicked()), SLOT(newPatchClicked())); connect(patchNewGroup, SIGNAL(clicked()), SLOT(newGroupClicked())); - //connect(newCategory, SIGNAL(clicked()), SLOT(newCategoryClicked())); connect(patchButton, SIGNAL(clicked()), SLOT(patchButtonClicked())); connect(defPatchH, SIGNAL(valueChanged(int)), SLOT(defPatchChanged(int))); @@ -136,7 +130,6 @@ connect(ctrlType,SIGNAL(activated(int)), SLOT(ctrlTypeChanged(int))); connect(ctrlName, SIGNAL(returnPressed()), SLOT(ctrlNameReturn())); connect(ctrlName, SIGNAL(lostFocus()), SLOT(ctrlNameReturn())); - //connect(ctrlName, SIGNAL(textChanged(const QString&)), SLOT(ctrlNameChanged(const QString&))); connect(spinBoxHCtrlNo, SIGNAL(valueChanged(int)), SLOT(ctrlHNumChanged(int))); connect(spinBoxLCtrlNo, SIGNAL(valueChanged(int)), SLOT(ctrlLNumChanged(int))); connect(spinBoxMin, SIGNAL(valueChanged(int)), SLOT(ctrlMinChanged(int))); @@ -146,7 +139,7 @@ connect(nullParamSpinBoxL, SIGNAL(valueChanged(int)), SLOT(ctrlNullParamLChanged(int))); connect(tabWidget3, SIGNAL(currentChanged(QWidget*)), SLOT(tabChanged(QWidget*))); - //connect(sysexList, SIGNAL(selectionChanged()), SLOT(sysexChanged())); + //connect(sysexList, SIGNAL(selectionChanged()), SLOT(sysexChanged())); DELETETHIS or is it needed later? //connect(deleteSysex, SIGNAL(clicked()), SLOT(deleteSysexClicked())); //connect(newSysex, SIGNAL(clicked()), SLOT(newSysexClicked())); } @@ -181,21 +174,15 @@ } } if (!found) { - //if(oldMidiInstrument) - //{ MusECore::MidiInstrument* oi = 0; if(oldMidiInstrument) oi = (MusECore::MidiInstrument*)oldMidiInstrument->data(Qt::UserRole).value(); MusECore::MidiInstrument* wip = &workingInstrument; - //checkDirty(oi); - //if(checkDirty(oi)) - if(checkDirty(wip)) - // No save was chosen. Restore the actual instrument name. + if(checkDirty(wip)) // No save was chosen. Restore the actual instrument name. { if(oi) { oldMidiInstrument->setText(oi->iname()); - //workingInstrument.setIName(oi->iname()); // No file path? Only a new unsaved instrument can do that. So delete it. if(oi->filePath().isEmpty()) @@ -204,29 +191,14 @@ } } - //else - //{ - // if(oi) - // Save was chosen. Assign the working instrument to the actual instrument. - // oi->assign(workingInstrument); - //} - - //oi->setDirty(false); workingInstrument.setDirty(false); - //} MusECore::MidiInstrument* ni = new MusECore::MidiInstrument(s); - //MusECore::midiInstruments.append(ni); MusECore::midiInstruments.push_back(ni); - //QListWidgetItem* item = new QListWidgetItem(ni->iname()); - //InstrumentListItem* item = new InstrumentListItem(ni->iname()); QListWidgetItem* item = new QListWidgetItem(ni->iname()); - //oldMidiInstrument = item; workingInstrument.assign( *ni ); - //workingInstrument.setDirty(false); - - //item->setText(ni->iname()); + QVariant v = qVariantFromValue((void*)(ni)); item->setData(Qt::UserRole, v); instrumentList->addItem(item); @@ -252,14 +224,8 @@ // fileOpen //--------------------------------------------------------- -void EditInstrument::fileOpen() +void EditInstrument::fileOpen() //DELETETHIS? { - // Allow these to update... - //instrumentNameReturn(); - //patchNameReturn(); - //ctrlNameReturn(); - - } //--------------------------------------------------------- @@ -268,10 +234,8 @@ void EditInstrument::fileSave() { - //if (instrument->filePath().isEmpty()) if (workingInstrument.filePath().isEmpty()) { - //fileSaveAs(); saveAs(); return; } @@ -280,18 +244,13 @@ QFileInfo qfi(workingInstrument.filePath()); if(qfi.absolutePath() == MusEGlobal::museInstruments) { - //fileSaveAs(); saveAs(); return; } - //QFile f(instrument->filePath()); - //if (!f.open(QIODevice::WriteOnly)) { - //FILE* f = fopen(instrument->filePath().toLatin1().constData(), "w"); FILE* f = fopen(workingInstrument.filePath().toLatin1().constData(), "w"); if(f == 0) { - //fileSaveAs(); saveAs(); return; } @@ -301,20 +260,14 @@ patchNameReturn(); ctrlNameReturn(); - //f.close(); if(fclose(f) != 0) { - //QString s = QString("Creating file:\n") + instrument->filePath() + QString("\nfailed: ") QString s = QString("Creating file:\n") + workingInstrument.filePath() + QString("\nfailed: ") - //+ f.errorString(); + QString(strerror(errno) ); - //fprintf(stderr, "poll failed: %s\n", strerror(errno)); QMessageBox::critical(this, tr("MusE: Create file failed"), s); return; } - //if(fileSave(instrument, instrument->filePath())) - // instrument->setDirty(false); if(fileSave(&workingInstrument, workingInstrument.filePath())) workingInstrument.setDirty(false); } @@ -325,7 +278,7 @@ bool EditInstrument::fileSave(MusECore::MidiInstrument* instrument, const QString& name) { - //QFile f(name); + //QFile f(name); DELETETHIS //if (!f.open(QIODevice::WriteOnly)) { // QString s("Creating file failed: "); // s += strerror(errno); @@ -338,8 +291,6 @@ FILE* f = fopen(name.toAscii().constData(), "w"); if(f == 0) { - //if(debugMsg) - // printf("READ IDF %s\n", fi->filePath().toLatin1().constData()); QString s("Creating file failed: "); s += QString(strerror(errno)); QMessageBox::critical(this, @@ -351,7 +302,6 @@ updateInstrument(instrument); - //instrument->write(xml); instrument->write(0, xml); // Assign the working instrument values to the actual current selected instrument... @@ -364,18 +314,13 @@ // Now signal the rest of the app so stuff can change... MusEGlobal::song->update(SC_CONFIG | SC_MIDI_CONTROLLER); - //MusEGlobal::song->update(SC_CONFIG | SC_MIDI_CONTROLLER | SC_MIDI_CONTROLLER_ADD); } } - //f.close(); - //if (f.error()) { if(fclose(f) != 0) { QString s = QString("Write File\n") + name + QString("\nfailed: ") - //+ f.errorString(); + QString(strerror(errno)); - //fprintf(stderr, "poll failed: %s\n", strerror(errno)); QMessageBox::critical(this, tr("MusE: Write File failed"), s); return false; } @@ -393,7 +338,7 @@ patchNameReturn(); ctrlNameReturn(); - //QListWidgetItem* item = instrumentList->currentItem(); + //QListWidgetItem* item = instrumentList->currentItem(); DELETETHIS // ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); // if (item == 0) // return; @@ -409,15 +354,13 @@ { printf("MusE Error! User instrument directory: %s does not exist. Should be created at startup!\n", MusEGlobal::museUserInstruments.toLatin1().constData()); - //path = MusEGlobal::museUser; + //path = MusEGlobal::museUser; DELETETHIS? //path = MusEGlobal::configPath; } - //if (instrument->filePath().isEmpty()) if (workingInstrument.filePath().isEmpty()) path += QString("/%1.idf").arg(workingInstrument.iname()); else { - //QFileInfo fi(instrument->filePath()); QFileInfo fi(workingInstrument.filePath()); // Prompt for a new instrument name if the name has not been changed, to avoid duplicates. @@ -432,7 +375,7 @@ // This will still allow a user instrument to override a built-in instrument with the same name. if(fi.absolutePath() != MusEGlobal::museInstruments) { - //QMessageBox::critical(this, + //QMessageBox::critical(this, DELETETHIS??? // tr("MusE: Bad instrument name"), // tr("Please change the instrument name to a new unique name before saving, to avoid duplicates"), // QMessageBox::Ok, @@ -446,20 +389,13 @@ } path += QString("/%1.idf").arg(fi.baseName()); } - //QString s = QFileDialog::getSaveFileName(this, - // tr("MusE: Save Instrument Definition"), - // path, - // tr("Instrument Definition (*.idf)")); - + QString s = QFileDialog::getSaveFileName(this, tr("MusE: Save Instrument Definition").toLatin1().constData(), path, tr("Instrument Definition (*.idf)")); if (s.isEmpty()) return; - //instrument->setFilePath(s); workingInstrument.setFilePath(s); - //if (fileSave(instrument, s)) - // instrument->setDirty(false); if(fileSave(&workingInstrument, s)) workingInstrument.setDirty(false); } @@ -491,16 +427,10 @@ { // No save: case 1: - //item->setText(instrument->iname()); - //instrumentList->triggerUpdate(true); - //instrument->setDirty(false); workingInstrument.setDirty(false); if(oi) { oldMidiInstrument->setText(oi->iname()); - //workingInstrument.setIName(oi->iname()); - - //workingInstrument.assign(*oi); // No file path? Only a new unsaved instrument can do that. So delete it. if(oi->filePath().isEmpty()) @@ -523,13 +453,11 @@ // Save: case 0: - //if(oi) - // oi->assign(workingInstrument); workingInstrument.setDirty(false); break; } - //QListWidgetItem* item = instrumentList->currentItem(); + //QListWidgetItem* item = instrumentList->currentItem(); DELETETHIS // ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); // if (item == 0) // return; @@ -610,8 +538,7 @@ break; } } - // Assign the found instrument to the working instrument. - //workingInstrument.assign(*(*imi)); + // Assign the found instrument name to the working instrument name. workingInstrument.setIName(s); @@ -642,22 +569,13 @@ ni->assign(workingInstrument); ni->setIName(so); ni->setFilePath(QString()); - //MusECore::midiInstruments.append(ni); MusECore::midiInstruments.push_back(ni); - //QListWidgetItem* item = new QListWidgetItem(ni->iname()); - //InstrumentListItem* item = new InstrumentListItem(ni->iname()); - //ListBoxData* item = new ListBoxData(ni->iname()); QListWidgetItem* item = new QListWidgetItem(so); - //oldMidiInstrument = item; workingInstrument.assign( *ni ); - //workingInstrument.setDirty(false); - - //item->setText(ni->iname()); - //item->setData((void*)ni); + QVariant v = qVariantFromValue((void*)(ni)); item->setData(Qt::UserRole, v); - //instrumentList->addItem(item); instrumentList->addItem(item); oldMidiInstrument = 0; @@ -675,25 +593,17 @@ break; } - //QString path = QDir::homePath() + "/" + MusEGlobal::config.instrumentPath; - //QString path = QDir::homeDirPath() + "/" + MusEGlobal::museGlobalShare; - //QString path = MusEGlobal::museInstruments; QString path = MusEGlobal::museUserInstruments; if(!QDir(MusEGlobal::museUserInstruments).exists()) { printf("MusE Error! User instrument directory: %s does not exist. Should be created at startup!\n", MusEGlobal::museUserInstruments.toLatin1().constData()); - //path = MusEGlobal::museUser; + //path = MusEGlobal::museUser; DELETETHIS //path = MusEGlobal::configPath; } path += QString("/%1.idf").arg(so); - - //QString s = QFileDialog::getSaveFileName(this, - // tr("MusE: Save Instrument Definition"), - // path, - // tr("Instrument Definition (*.idf)")); - + QString sfn; // If we are overwriting a user instrument just force the path. if(isuser) @@ -704,12 +614,9 @@ path, tr("Instrument Definition (*.idf)")); if (sfn.isEmpty()) return; - //instrument->setFilePath(s); workingInstrument.setFilePath(sfn); } - //if (fileSave(instrument, s)) - // instrument->setDirty(false); if(fileSave(&workingInstrument, sfn)) workingInstrument.setDirty(false); } @@ -734,7 +641,7 @@ patchNameReturn(); ctrlNameReturn(); - //QListWidgetItem* item = instrumentList->currentItem(); + //QListWidgetItem* item = instrumentList->currentItem(); DELETETHIS // ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); @@ -752,16 +659,10 @@ { // No save: case 1: - //item->setText(instrument->iname()); - //instrumentList->triggerUpdate(true); - //instrument->setDirty(false); workingInstrument.setDirty(false); if(oi) { oldMidiInstrument->setText(oi->iname()); - //workingInstrument.setIName(oi->iname()); - - //workingInstrument.assign(*oi); // No file path? Only a new unsaved instrument can do that. So delete it. if(oi->filePath().isEmpty()) @@ -784,14 +685,10 @@ // Save: case 0: - //if(oi) - // oi->assign(workingInstrument); workingInstrument.setDirty(false); break; } - -// } QMainWindow::closeEvent(ev); } @@ -807,10 +704,8 @@ if(!sel) return; - //oldMidiInstrument = (MusECore::MidiInstrument*)sel->data(); oldMidiInstrument = sel; // Assignment - //workingInstrument = *((MusECore::MidiInstrument*)sel->data()); // Assign will 'delete' any existing patches, groups, or controllers. workingInstrument.assign( *((MusECore::MidiInstrument*)sel->data(Qt::UserRole).value()) ); @@ -824,23 +719,11 @@ patchView->clear(); patchView->blockSignals(false); - //viewController->blockSignals(true); for (int i = 0; i < viewController->topLevelItemCount(); ++i) qDeleteAll(viewController->topLevelItem(i)->takeChildren()); viewController->clear(); - //viewController->blockSignals(false); - - //listController->clear(); - //category->clear(); - //sysexList->clear(); - - - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)sel->data(Qt::UserRole).value(); - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)sel->data(); - //instrument->setDirty(false); instrumentName->blockSignals(true); - //instrumentName->setText(instrument->iname()); instrumentName->setText(workingInstrument.iname()); instrumentName->blockSignals(false); @@ -868,55 +751,30 @@ nullParamSpinBoxH->blockSignals(false); nullParamSpinBoxL->blockSignals(false); - //std::vector* pg = instrument->groups(); - //MusECore::PatchGroupList* pg = instrument->groups(); MusECore::PatchGroupList* pg = workingInstrument.groups(); - //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { for (MusECore::ciPatchGroup g = pg->begin(); g != pg->end(); ++g) { MusECore::PatchGroup* pgp = *g; if(pgp) { - //QTreeWidgetItem* item = new QTreeWidgetItem; QTreeWidgetItem* item = new QTreeWidgetItem(patchView); - //item->setText(0, g->name); item->setText(0, pgp->name); - //QVariant v = QVariant::fromValue((void*)0); - //item->setData(0, Qt::UserRole, v); - //item->setData((void*)*g); - //item->setData((void*)0); - //item->setData((void*)&*g); - //item->setData((void*)pgp); QVariant v = qVariantFromValue((void*)(pgp)); item->setData(0, Qt::UserRole, v); - //patchView->addTopLevelItem(item); - //for (MusECore::ciPatch p = g->patches.begin(); p != g->patches.end(); ++p) for (MusECore::ciPatch p = pgp->patches.begin(); p != pgp->patches.end(); ++p) { - //const Patch& patch = *p; MusECore::Patch* patch = *p; if(patch) { - //QTreeWidgetItem* sitem = new QTreeWidgetItem; QTreeWidgetItem* sitem = new QTreeWidgetItem(item); - //printf("%s \n", qPrintable(patch->name)); - - //sitem->setText(0, patch.name); - //sitem->setText(0, p->name); sitem->setText(0, patch->name); - //QVariant v = QVariant::fromValue((void*)patch); - //sitem->setData(0, Qt::UserRole, v); - //sitem->setData((void*)&*p); - //sitem->setData((void*)patch); QVariant v = QVariant::fromValue((void*)patch); sitem->setData(0, Qt::UserRole, v); - //item->addChild(sitem); } } } } - //patchView->setSelected(patchView->item(0), true); oldPatchItem = 0; @@ -924,20 +782,20 @@ if(fc) { // This may cause a patchChanged call. - //if(patchView->selectedItem() != fc) + //if(patchView->selectedItem() != fc) DELETETHIS patchView->blockSignals(true); fc->setSelected(true); patchView->blockSignals(false); //else - // patchChanged(); + // patchChanged(); DELETETHIS - //patchView->firstChild()->setSelected(true); + //patchView->firstChild()->setSelected(true); DELETETHIS //patchView->triggerUpdate(true); } patchChanged(); -// oldPatchItem = (ListViewData*)patchView->selectedItem(); +// oldPatchItem = (ListViewData*)patchView->selectedItem(); DELETETHIS //patchChanged(); // if(oldPatchItem) // { @@ -952,7 +810,7 @@ MusECore::MidiControllerList* cl = workingInstrument.controller(); for (MusECore::ciMidiController ic = cl->begin(); ic != cl->end(); ++ic) { MusECore::MidiController* c = ic->second; - //QListWidgetItem* item = new QListWidgetItem(c->name()); + //QListWidgetItem* item = new QListWidgetItem(c->name()); DELETETHIS // ListBoxData* item = new ListBoxData(c->name()); //QVariant v = QVariant::fromValue((void*)c); //item->setData(Qt::UserRole, v); @@ -963,7 +821,7 @@ } - //listController->setItemSelected(listController->item(0), true); + //listController->setItemSelected(listController->item(0), true); DELETETHIS // oldController = 0; @@ -973,7 +831,7 @@ if(ci) { - // This may cause a controllerChanged call. + // This may cause a controllerChanged call. DELETETHIS //if(listController->selectedItem != ci) // listController->blockSignals(true); // listController->setSelected(ci, true); @@ -988,13 +846,13 @@ controllerChanged(); - //oldController = (ListBoxData*)listController->selectedItem(); + //oldController = (ListBoxData*)listController->selectedItem(); DELETETHIS //controllerChanged(listController->item(0), 0); //controllerChanged(); -/* +/* DELETETHIS category->addItems(instrument->categories()); foreach(const SysEx* s, instrument->sysex()) { @@ -1027,25 +885,17 @@ if(!sel) return; - //printf("instrument changed: %s\n", sel->text().toLatin1().constData()); - - //if (old) { - //if(oldMidiInstrument) - //{ MusECore::MidiInstrument* oi = 0; if(oldMidiInstrument) oi = (MusECore::MidiInstrument*)oldMidiInstrument->data(Qt::UserRole).value(); MusECore::MidiInstrument* wip = &workingInstrument; // Returns true if aborted. - //checkDirty(oi); - //if(checkDirty(oi)) if(checkDirty(wip)) { // No save was chosen. Abandon changes, or delete if it is new... if(oi) { oldMidiInstrument->setText(oi->iname()); - //wip->setText(oi->iname()); // No file path? Only a new unsaved instrument can do that. So delete it. if(oi->filePath().isEmpty()) @@ -1057,20 +907,9 @@ } } - //else - //{ - // Save was chosen. - // if(oi) - // oi->assign(workingInstrument); - //} - - //oi->setDirty(false); - //wip->setDirty(false); workingInstrument.setDirty(false); - //} changeInstrument(); - } //--------------------------------------------------------- @@ -1078,9 +917,7 @@ //--------------------------------------------------------- void EditInstrument::instrumentNameReturn() -//void EditInstrument::instrumentNameChanged(const QString& s) { - //instrumentNameChanged(instrumentName->text()); QListWidgetItem* item = instrumentList->currentItem(); if (item == 0) @@ -1098,7 +935,6 @@ { instrumentName->blockSignals(true); // Grab the last valid name from the item text, since the instrument has not been updated yet. - //instrumentName->setText(curins->iname()); instrumentName->setText(item->text()); instrumentName->blockSignals(false); @@ -1113,16 +949,9 @@ } } - //if (s != workingInstrument.iname()) { - item->setText(s); - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(); - //instrument->setDirty(true); - workingInstrument.setIName(s); - workingInstrument.setDirty(true); - //instrumentList->updateItem(item); - //instrumentList->update(); - // } + item->setText(s); + workingInstrument.setIName(s); + workingInstrument.setDirty(true); } //--------------------------------------------------------- @@ -1134,20 +963,15 @@ if(!item) return; - //ListBoxData* curritem = (ListBoxData*)instrumentList->selectedItem(); - MusECore::MidiInstrument* ins = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); - // Be kind to the list item, just in case we install a delete handler or something. - //item->setData(0); - // Delete the list item. // Test this: Is this going to change the current selection? instrumentList->blockSignals(true); delete item; instrumentList->blockSignals(false); - // Test this: Neccessary? + // Test this: Neccessary? DELETETHIS // if(curritem) // instrumentList->setCurrentItem(curritem); @@ -1235,7 +1059,6 @@ { patchNameEdit->blockSignals(true); // Grab the last valid name from the item text, since the patch has not been updated yet. - //patchNameEdit->setText(curp->name); patchNameEdit->setText(item->text(0)); patchNameEdit->blockSignals(false); @@ -1258,7 +1081,6 @@ { patchNameEdit->blockSignals(true); // Grab the last valid name from the item text, since the patch group has not been updated yet. - //patchNameEdit->setText(curpg->name); patchNameEdit->setText(item->text(0)); patchNameEdit->blockSignals(false); @@ -1277,6 +1099,7 @@ item->setText(0, s); workingInstrument.setDirty(true); + // DELETETHIS // Since the name of the patch/group in the working instrument will be updated later, // there's no need to do manually set the name here now. /* @@ -1312,15 +1135,8 @@ //--------------------------------------------------------- void EditInstrument::patchChanged() { - //if (old && old->data(0, Qt::UserRole).value()) { if(oldPatchItem) { - //QListWidgetItem* item = instrumentList->currentItem(); - //if (item == 0) - // return; - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); - //MusECore::Patch* p = (MusECore::Patch*)old->data(0, Qt::UserRole).value(); - //updatePatch(instrument, p); if(oldPatchItem->parent()) updatePatch(&workingInstrument, (MusECore::Patch*)oldPatchItem->data(0, Qt::UserRole).value()); else @@ -1362,12 +1178,10 @@ spinBoxHBank->setValue(hb); spinBoxLBank->setValue(lb); spinBoxProgram->setValue(pr); - //checkBoxDrum->setChecked(p->drumMap); checkBoxDrum->setChecked(p->drum); checkBoxGM->setChecked(p->typ & 1); checkBoxGS->setChecked(p->typ & 2); checkBoxXG->setChecked(p->typ & 4); - //category->setCurrentIndex(p->categorie); } else // The item is a patch group item. @@ -1398,10 +1212,7 @@ int val = getDefaultPatchNumber(); - //if(val == c->minVal() - 1) - // c->setInitVal(MusECore::CTRL_VAL_UNKNOWN); - //else - c->setInitVal(val); + c->setInitVal(val); setDefaultPatchName(val); @@ -1415,13 +1226,6 @@ void EditInstrument::patchButtonClicked() { - //MidiTrack* track = (MidiTrack*)selected; - //int channel = track->outChannel(); - //int port = track->outPort(); - //MusECore::MidiInstrument* instr = midiPorts[port].instrument(); - - //patchpopup->clear(); - QMenu* patchpopup = new QMenu; MusECore::PatchGroupList* pg = workingInstrument.groups(); @@ -1435,17 +1239,10 @@ const MusECore::PatchList& pl = pgp->patches; for (MusECore::ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { const MusECore::Patch* mp = *ipl; - //if ((mp->typ & mask) && - // ((drum && songType != MT_GM) || - // (mp->drum == drumchan)) ) - - // { int id = ((mp->hbank & 0xff) << 16) + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); QAction *ac1 = pm->addAction(mp->name); - ac1->setData(id); - // } - + ac1->setData(id); } } } @@ -1454,12 +1251,10 @@ const MusECore::PatchList& pl = pg->front()->patches; for (MusECore::ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { const MusECore::Patch* mp = *ipl; - //if (mp->typ & mask) { int id = ((mp->hbank & 0xff) << 16) + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); QAction *ac2 = patchpopup->addAction(mp->name); ac2->setData(id); - // } } } @@ -1481,8 +1276,6 @@ if (rv != -1) { - //if(rv != workingInstrument. - setDefaultPatchControls(rv); QTreeWidgetItem* item = viewController->currentItem(); @@ -1512,7 +1305,6 @@ QString def; int defval = mctrl->initVal(); int n = mctrl->num(); - //int h = (n >> 7) & 0x7f; int h = (n >> 8) & 0x7f; int l = n & 0x7f; if((n & 0xff) == 0xff) @@ -1522,8 +1314,6 @@ switch(t) { case MusECore::MidiController::Controller7: - //case MusECore::MidiController::RPN: - //case MusECore::MidiController::NRPN: hnum = "---"; if(l == -1) lnum = "*"; @@ -1574,8 +1364,6 @@ default: hnum = "---"; lnum = "---"; - //min.setNum(0); - //max.setNum(0); min = "---"; max = "---"; def = "---"; @@ -1583,12 +1371,8 @@ } QTreeWidgetItem* ci = new QTreeWidgetItem(viewController, QStringList() << mctrl->name() << int2ctrlType(t) << hnum << lnum << min << max << def); - //ListViewData* ci = new ListViewData(viewController, mctrl->name(), int2ctrlType(t), - // hnum, lnum, min, max, def); - //ci->setData((void*)mctrl); QVariant v = qVariantFromValue((void*)(mctrl)); ci->setData(0, Qt::UserRole, v); - //setModified(true); return ci; } @@ -1599,29 +1383,13 @@ void EditInstrument::controllerChanged() { - //if (old) { -// if(oldController) -// { - //QListWidgetItem* item = instrumentList->currentItem(); - //if (item == 0) - // return; - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); - //MusECore::MidiController* oc = (MusECore::MidiController*)old->data(Qt::UserRole).value(); - //updateController(instrument, oc); -// updateController(&workingInstrument, (MusECore::MidiController*)oldController->data()); -// } - - // ListBoxData* sel = (ListBoxData*)listController->selectedItem(); - QTreeWidgetItem* sel = viewController->selectedItems().size() ? viewController->selectedItems()[0] : 0; -// oldController = sel; if(!sel || !sel->data(0, Qt::UserRole).value()) { ctrlName->blockSignals(true); ctrlName->setText(""); ctrlName->blockSignals(false); - //ctrlComment->setText(""); return; } @@ -1631,33 +1399,24 @@ ctrlName->setText(c->name()); ctrlName->blockSignals(false); - //ctrlComment->setText(c->comment()); int ctrlH = (c->num() >> 8) & 0x7f; int ctrlL = c->num() & 0x7f; if((c->num() & 0xff) == 0xff) ctrlL = -1; - //int type = int(c->type()); MusECore::MidiController::ControllerType type = MusECore::midiControllerType(c->num()); - //ctrlType->setCurrentIndex(type); ctrlType->blockSignals(true); ctrlType->setCurrentIndex(type); ctrlType->blockSignals(false); - //ctrlTypeChanged(type); - spinBoxHCtrlNo->blockSignals(true); spinBoxLCtrlNo->blockSignals(true); spinBoxMin->blockSignals(true); spinBoxMax->blockSignals(true); spinBoxDefault->blockSignals(true); - //ctrlTypeChanged(type); - switch (type) { - //case MusECore::MidiController::RPN: - //case MusECore::MidiController::NRPN: case MusECore::MidiController::Controller7: spinBoxHCtrlNo->setEnabled(false); spinBoxLCtrlNo->setEnabled(true); @@ -1745,14 +1504,11 @@ { spinBoxDefault->setRange(c->minVal() - 1, c->maxVal()); if(c->initVal() == MusECore::CTRL_VAL_UNKNOWN) - //spinBoxDefault->setValue(c->minVal() - 1); spinBoxDefault->setValue(spinBoxDefault->minimum()); else spinBoxDefault->setValue(c->initVal()); } - //moveWithPart->setChecked(c->moveWithPart()); - spinBoxHCtrlNo->blockSignals(false); spinBoxLCtrlNo->blockSignals(false); spinBoxMin->blockSignals(false); @@ -1765,7 +1521,6 @@ //--------------------------------------------------------- void EditInstrument::ctrlNameReturn() -//void EditInstrument::ctrlNameChanged(const QString& s) { QTreeWidgetItem* item = viewController->currentItem(); @@ -1777,8 +1532,7 @@ if(c->name() == cName) return; - - //MusECore::MidiControllerList* cl = instrument->controller(); + MusECore::MidiControllerList* cl = workingInstrument.controller(); for(MusECore::ciMidiController ic = cl->begin(); ic != cl->end(); ++ic) { @@ -1802,8 +1556,6 @@ c->setName(ctrlName->text()); item->setText(COL_NAME, ctrlName->text()); - //c->setName(s); - //item->setText(COL_NAME, s); workingInstrument.setDirty(true); } @@ -1823,20 +1575,15 @@ if(t == MusECore::midiControllerType(c->num())) return; - //if(item) - item->setText(COL_TYPE, ctrlType->currentText()); + item->setText(COL_TYPE, ctrlType->currentText()); int hnum = 0, lnum = 0; - //int rng = 0; - //int min = 0, max = 0; spinBoxMin->blockSignals(true); spinBoxMax->blockSignals(true); spinBoxDefault->blockSignals(true); switch (t) { - //case MusECore::MidiController::RPN: - //case MusECore::MidiController::NRPN: case MusECore::MidiController::Controller7: spinBoxHCtrlNo->setEnabled(false); spinBoxLCtrlNo->setEnabled(true); @@ -1852,22 +1599,17 @@ spinBoxDefault->setValue(spinBoxDefault->minimum()); lnum = spinBoxLCtrlNo->value(); - //rng = 127; - //min = -128; - //max = 127; - //if(item) - //{ - //item->setText(COL_LNUM, QString().setNum(spinBoxLCtrlNo->value())); - if(lnum == -1) - item->setText(COL_LNUM, QString("*")); - else - item->setText(COL_LNUM, QString().setNum(lnum)); - item->setText(COL_HNUM, QString("---")); - item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); - item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); - item->setText(COL_DEF, QString("---")); - //} + + if(lnum == -1) + item->setText(COL_LNUM, QString("*")); + else + item->setText(COL_LNUM, QString().setNum(lnum)); + item->setText(COL_HNUM, QString("---")); + item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); + item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); + item->setText(COL_DEF, QString("---")); break; + case MusECore::MidiController::RPN: case MusECore::MidiController::NRPN: spinBoxHCtrlNo->setEnabled(true); @@ -1885,23 +1627,17 @@ hnum = spinBoxHCtrlNo->value(); lnum = spinBoxLCtrlNo->value(); - //rng = 127; - //min = -128; - //max = 127; - //if(item) - //{ - //item->setText(COL_LNUM, QString().setNum(spinBoxLCtrlNo->value())); - //item->setText(COL_HNUM, QString().setNum(spinBoxHCtrlNo->value())); - if(lnum == -1) - item->setText(COL_LNUM, QString("*")); - else - item->setText(COL_LNUM, QString().setNum(lnum)); - item->setText(COL_HNUM, QString().setNum(hnum)); - item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); - item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); - item->setText(COL_DEF, QString("---")); - //} + + if(lnum == -1) + item->setText(COL_LNUM, QString("*")); + else + item->setText(COL_LNUM, QString().setNum(lnum)); + item->setText(COL_HNUM, QString().setNum(hnum)); + item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); + item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); + item->setText(COL_DEF, QString("---")); break; + case MusECore::MidiController::Controller14: case MusECore::MidiController::RPN14: case MusECore::MidiController::NRPN14: @@ -1920,23 +1656,16 @@ hnum = spinBoxHCtrlNo->value(); lnum = spinBoxLCtrlNo->value(); - //rng = 16383; - //min = -16384; - //max = 16383; - //if(item) - //{ - //item->setText(COL_LNUM, QString().setNum(spinBoxLCtrlNo->value())); - //item->setText(COL_HNUM, QString().setNum(spinBoxHCtrlNo->value())); - if(lnum == -1) - item->setText(COL_LNUM, QString("*")); - else - item->setText(COL_LNUM, QString().setNum(lnum)); - item->setText(COL_HNUM, QString().setNum(hnum)); - item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); - item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); - item->setText(COL_DEF, QString("---")); - //} + if(lnum == -1) + item->setText(COL_LNUM, QString("*")); + else + item->setText(COL_LNUM, QString().setNum(lnum)); + item->setText(COL_HNUM, QString().setNum(hnum)); + item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); + item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); + item->setText(COL_DEF, QString("---")); break; + case MusECore::MidiController::Pitch: spinBoxHCtrlNo->setEnabled(false); spinBoxLCtrlNo->setEnabled(false); @@ -1951,18 +1680,13 @@ spinBoxDefault->setRange(spinBoxMin->value() - 1, spinBoxMax->value()); spinBoxDefault->setValue(spinBoxDefault->minimum()); - //rng = 8191; - //min = -8192; - //max = 8191; - //if(item) - //{ item->setText(COL_LNUM, QString("---")); item->setText(COL_HNUM, QString("---")); item->setText(COL_MIN, QString().setNum(spinBoxMin->value())); item->setText(COL_MAX, QString().setNum(spinBoxMax->value())); item->setText(COL_DEF, QString("---")); - //} break; + case MusECore::MidiController::Program: spinBoxHCtrlNo->setEnabled(false); spinBoxLCtrlNo->setEnabled(false); @@ -1977,17 +1701,13 @@ spinBoxDefault->setRange(0, 0); spinBoxDefault->setValue(0); - //if(item) - //{ item->setText(COL_LNUM, QString("---")); item->setText(COL_HNUM, QString("---")); item->setText(COL_MIN, QString("---")); item->setText(COL_MAX, QString("---")); - - //item->setText(COL_DEF, QString("0-0-0")); item->setText(COL_DEF, QString("---")); - //} break; + // Shouldn't happen... default: spinBoxHCtrlNo->setEnabled(false); @@ -2027,7 +1747,7 @@ } - /* + /* DELETETHIS if(rng != 0) { @@ -2116,7 +1836,6 @@ QString s; s.setNum(val); MusECore::MidiController* c = (MusECore::MidiController*)item->data(0, Qt::UserRole).value(); - //int n = c->num() & 0xff; int n = c->num() & 0x7fff00ff; c->setNum(n | ((val & 0xff) << 8)); item->setText(COL_HNUM, s); @@ -2134,7 +1853,6 @@ if (item == 0) return; MusECore::MidiController* c = (MusECore::MidiController*)item->data(0, Qt::UserRole).value(); - //int n = c->num() & 0xff00; int n = c->num() & ~0xff; c->setNum(n | (val & 0xff)); if(val == -1) @@ -2167,7 +1885,6 @@ c->setMinVal(val); int rng = 0; - //switch((MusECore::MidiController::ControllerType)ctrlType->currentItem()) switch(MusECore::midiControllerType(c->num())) { case MusECore::MidiController::Controller7: @@ -2187,7 +1904,6 @@ int mx = c->maxVal(); - //if(val > item->text(COL_MAX).toInt()) if(val > mx) { c->setMaxVal(val); @@ -2253,7 +1969,6 @@ c->setMaxVal(val); int rng = 0; - //switch((MusECore::MidiController::ControllerType)ctrlType->currentItem()) switch(MusECore::midiControllerType(c->num())) { case MusECore::MidiController::Controller7: @@ -2273,7 +1988,6 @@ int mn = c->minVal(); - //if(val < item->text(COL_MIN).toInt()) if(val < mn) { c->setMinVal(val); @@ -2414,49 +2128,23 @@ void EditInstrument::deletePatchClicked() { - //QListWidgetItem* item = instrumentList->currentItem(); -// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); -// if (item == 0) -// return; - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); -// MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(); - //QTreeWidgetItem* pi = patchView->currentItem(); QTreeWidgetItem* pi = patchView->currentItem(); if (pi == 0) return; - //void* p = pi->data(0, Qt::UserRole).value(); -// MusECore::Patch* patch = (MusECore::Patch*)pi->data(); - //if (p == 0) - // If patch is zero it's a patch group. -// if(patch == 0) - // If the item has a parent item, it's a patch item... if(pi->parent()) { - MusECore::PatchGroup* group = (MusECore::PatchGroup*)(pi->parent())->data(0, Qt::UserRole).value(); + MusECore::PatchGroup* group = (MusECore::PatchGroup*)(pi->parent())->data(0, Qt::UserRole).value(); // If there is an allocated patch in the data, delete it. - //MusECore::Patch* patch = (MusECore::Patch*)pi->auxData(); MusECore::Patch* patch = (MusECore::Patch*)pi->data(0, Qt::UserRole).value(); if(patch) { if(group) - { - //for(iPatch ip = group->patches.begin(); ip != group->patches.end(); ++ip) - // if(&*ip == patch) - // if(*ip == patch) - // { - // - // printf("deletePatchClicked: erasing patch\n"); - // - // group->patches.erase(ip); - // break; - // } - //group->patches.remove( (const Patch&)(*patch) ); group->patches.remove(patch); - } + delete patch; } } @@ -2464,19 +2152,14 @@ // The item has no parent item, it's a patch group item... { // Is there an allocated patch group in the data? - //MusECore::PatchGroup* group = (MusECore::PatchGroup*)pi->auxData(); MusECore::PatchGroup* group = (MusECore::PatchGroup*)pi->data(0, Qt::UserRole).value(); if(group) { MusECore::PatchGroupList* pg = workingInstrument.groups(); - //for(MusECore::ciPatchGroup ipg = pg->begin(); ipg != pg->end(); ++ipg) for(MusECore::iPatchGroup ipg = pg->begin(); ipg != pg->end(); ++ipg) { - //printf("deletePatchClicked: working patch group name:%s ad:%X group name:%s ad:%X\n", (*ipg)->name.toLatin1().constData(), (unsigned int)(*ipg), group->name.toLatin1().constData(), (unsigned int) group); - - //if(&*ipg == group) if(*ipg == group) { pg->erase(ipg); @@ -2484,43 +2167,20 @@ } } - // Iterate all child list view (patch) items. Find and delete any allocated patches in the items' data. -// for(ListViewData* i = (ListViewData*)pi->firstChild(); i; i = (ListViewData*)i->nextSibling()) -// { - //MusECore::Patch* patch = (MusECore::Patch*)i->auxData(); -// MusECore::Patch* patch = (MusECore::Patch*)i->data(); -// if(patch) -// { - //delete patch; - //group->patches.remove(*patch); const MusECore::PatchList& pl = group->patches; for(MusECore::ciPatch ip = pl.begin(); ip != pl.end(); ++ip) { -// if(&*ip == patch) -// { -// group->patches.erase(ip); -// break; -// } - // Delete the patch. if(*ip) delete *ip; } - //group->patches.clear(); - -// } -// } - // Now delete the group. delete group; } } - //oldPatchItem = (ListViewData*)patchView->selectedItem(); - //oldPatchItem = 0; - // Now delete the patch or group item (and any child patch items) from the list view tree. // !!! This will trigger a patchChanged call. patchView->blockSignals(true); @@ -2532,24 +2192,6 @@ oldPatchItem = 0; patchChanged(); - //MusECore::Patch* patch = (MusECore::Patch*)p; - - //std::vector* pg = instrument->groups(); - //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { - // for (MusECore::iPatch p = g->patches.begin(); p != g->patches.end(); ++p) { - // if (patch == *p) { - // g->patches.erase(p); - // delete pi; - // instrument->setDirty(true); - // return; - // } - // } - // } - //printf("fatal: patch not found\n"); - //delete patch; - //delete pi; - - workingInstrument.setDirty(true); } @@ -2559,11 +2201,6 @@ void EditInstrument::newPatchClicked() { - //QListWidgetItem* item = instrumentList->currentItem(); -// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); -// if (item == 0) -// return; - if(oldPatchItem) { if(oldPatchItem->parent()) @@ -2571,23 +2208,16 @@ else updatePatchGroup(&workingInstrument, (MusECore::PatchGroup*)oldPatchItem->data(0, Qt::UserRole).value()); } - - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); -// MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(); - //std::vector* pg = instrument->groups(); -// MusECore::PatchGroupList* pg = instrument->groups(); + MusECore::PatchGroupList* pg = workingInstrument.groups(); QString patchName; for (int i = 1;; ++i) { patchName = QString("Patch-%1").arg(i); bool found = false; - //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { for (MusECore::iPatchGroup g = pg->begin(); g != pg->end(); ++g) { MusECore::PatchGroup* pgp = *g; - //for (MusECore::iPatch p = g->patches.begin(); p != g->patches.end(); ++p) { for (MusECore::iPatch p = pgp->patches.begin(); p != pgp->patches.end(); ++p) { - //if (p->name == patchName) { if ((*p)->name == patchName) { found = true; break; @@ -2600,20 +2230,12 @@ break; } - // // search current patch group - // - //MusECore::PatchGroup* pGroup = 0; - //QTreeWidgetItem* pi = patchView->currentItem(); QTreeWidgetItem* pi = patchView->currentItem(); if (pi == 0) return; - // If there is data then pi is a patch item, and there must be a parent patch group item (with null data). - //if (pi->data(0, Qt::UserRole).value()) - //if (pi->data()) - MusECore::Patch* selpatch = 0; // If there is a parent item then pi is a patch item, and there must be a parent patch group item. @@ -2629,17 +2251,6 @@ if(!group) return; - //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { -// for (MusECore::ciPatchGroup g = pg->begin(); g != pg->end(); ++g) { -// if (g->name == pi->text(0)) { -// pGroup = &*g; -// break; -// } -// } -// if (pGroup == 0) { -// printf("group not found\n"); -// return; -// } // Create a new Patch, then store its pointer in a new patch item, // to be added later to the patch group only upon save... @@ -2678,10 +2289,10 @@ for(MusECore::iPatchGroup g = pg->begin(); g != pg->end(); ++g) { - MusECore::PatchGroup* pgp = *g; + MusECore::PatchGroup* pgp = *g; for(MusECore::iPatch ip = pgp->patches.begin(); ip != pgp->patches.end(); ++ip) { - MusECore::Patch* p = *ip; + MusECore::Patch* p = *ip; if((p->prog == ((prg + i) & 0x7f)) && ((p->lbank == -1 && lb == -1) || (p->lbank == ((lb + j) & 0x7f))) && ((p->hbank == -1 && hb == -1) || (p->hbank == ((hb + k) & 0x7f)))) @@ -2707,8 +2318,6 @@ else patch->hbank = (hb + k) & 0x7f; - //patch->typ = selpatch->typ; - //patch->drum = selpatch->drum; break; } @@ -2723,34 +2332,14 @@ patch->name = patchName; group->patches.push_back(patch); - //MusECore::Patch* pp = &(group->patches.back()); - - //QTreeWidgetItem* sitem = new QTreeWidgetItem; + QTreeWidgetItem* sitem = new QTreeWidgetItem(pi); - //sitem->setText(0, patch->name); sitem->setText(0, patchName); patchNameEdit->setText(patchName); - //QVariant v = QVariant::fromValue((void*)(patch)); - //sitem->setData(0, Qt::UserRole, v); - - // Set the list view item's data. - //sitem->setData((void*)patch); QVariant v = qVariantFromValue((void*)(patch)); sitem->setData(0, Qt::UserRole, v); - //sitem->setAuxData((void*)patch); - //sitem->setData((void*)pp); - - //pi->addChild(sitem); - - //printf("newPatchClicked: before patchView->setCurrentItem\n"); - - //patchView->setCurrentItem(sitem); - - //printf("newPatchClicked: after patchView->setCurrentItem\n"); - - //oldPatchItem = 0; // May cause patchChanged call. patchView->blockSignals(true); @@ -2758,10 +2347,6 @@ patchView->scrollToItem((QTreeWidgetItem*)sitem, QAbstractItemView::EnsureVisible); patchView->blockSignals(false); - //oldPatchItem = (ListViewData*)patchView->selectedItem(); - //oldPatchItem = sitem; - //oldPatchItem = 0; - spinBoxHBank->setEnabled(true); spinBoxLBank->setEnabled(true); spinBoxProgram->setEnabled(true); @@ -2773,7 +2358,6 @@ oldPatchItem = 0; patchChanged(); - //instrument->setDirty(true); workingInstrument.setDirty(true); } @@ -2783,11 +2367,6 @@ void EditInstrument::newGroupClicked() { - //QListWidgetItem* item = instrumentList->currentItem(); -// ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); -// if (item == 0) -// return; - if(oldPatchItem) { if(oldPatchItem->parent()) @@ -2796,19 +2375,13 @@ updatePatchGroup(&workingInstrument, (MusECore::PatchGroup*)oldPatchItem->data(0, Qt::UserRole).value()); } - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); -// MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(); - //std::vector* pg = instrument->groups(); -// MusECore::PatchGroupList* pg = instrument->groups(); MusECore::PatchGroupList* pg = workingInstrument.groups(); QString groupName; for (int i = 1;; ++i) { groupName = QString("Group-%1").arg(i); bool found = false; - //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { for (MusECore::ciPatchGroup g = pg->begin(); g != pg->end(); ++g) { - //if (g->name == groupName) { if ((*g)->name == groupName) { found = true; break; @@ -2822,40 +2395,25 @@ // to be added later to the instrument only upon save... MusECore::PatchGroup* group = new MusECore::PatchGroup; group->name = groupName; - //MusECore::PatchGroup group; - //group.name = groupName; pg->push_back(group); - //MusECore::PatchGroup* pgp = &(pg->back()); QTreeWidgetItem* sitem = new QTreeWidgetItem(patchView); sitem->setText(0, groupName); patchNameEdit->setText(groupName); - //QVariant v = QVariant::fromValue((void*)0); - //sitem->setData(0, Qt::UserRole, v); - //sitem->setData((void*)0); - // Set the list view item's data. QVariant v = qVariantFromValue((void*)(group)); sitem->setData(0, Qt::UserRole, v); //sitem->setAuxData((void*)pgp); - //patchView->addTopLevelItem(sitem); - //patchView->setCurrentItem(sitem); - - //oldPatchItem = 0; - // May cause patchChanged call. patchView->blockSignals(true); sitem->setSelected(true); patchView->blockSignals(false); - //oldPatchItem = (ListViewData*)patchView->selectedItem(); oldPatchItem = sitem; - //oldPatchItem = 0; - //patchChanged(); spinBoxHBank->setEnabled(false); spinBoxLBank->setEnabled(false); @@ -2865,7 +2423,6 @@ checkBoxGS->setEnabled(false); checkBoxXG->setEnabled(false); - //instrument->setDirty(true); workingInstrument.setDirty(true); } @@ -2875,21 +2432,10 @@ void EditInstrument::deleteControllerClicked() { - //QListWidgetItem* item = instrumentList->currentItem(); - //ListBoxData* item = (ListBoxData*)instrumentList->selectedItem(); - //QListWidgetItem* item2 = listController->currentItem(); -// ListBoxData* item = (ListBoxData*)listController->selectedItem(); QTreeWidgetItem* item = viewController->currentItem(); - //if (item == 0 || item2 == 0) if(!item) return; - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); -// MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(); - //MusECore::MidiController* ctrl = (MusECore::MidiController*)item2->data(Qt::UserRole).value(); - //MusECore::MidiController* ctrl = (MusECore::MidiController*)item2->data(); - //MusECore::MidiControllerList* cl = instrument->controller(); - //cl->removeAll(ctrl); MusECore::MidiController* ctrl = (MusECore::MidiController*)item->data(0, Qt::UserRole).value(); if(!ctrl) @@ -2901,20 +2447,14 @@ // Now remove the controller item from the list. // This may cause a controllerChanged call. -// listController->blockSignals(true); viewController->blockSignals(true); delete item; if(viewController->currentItem()) viewController->currentItem()->setSelected(true); -// listController->blockSignals(false); viewController->blockSignals(false); - //oldController = (ListBoxData*)listController->selectedItem(); -// oldController = 0; - controllerChanged(); - //instrument->setDirty(true); workingInstrument.setDirty(true); } @@ -2923,20 +2463,10 @@ //--------------------------------------------------------- void EditInstrument::newControllerClicked() - { - //QListWidgetItem* item = instrumentList->currentItem(); - //if (item == 0) - // return; - //MusECore::MidiInstrument* instrument = (MusECore::MidiInstrument*)item->data(Qt::UserRole).value(); - -// if(oldController) -// updateController(&workingInstrument, (MusECore::MidiController*)oldController->data()); - + { QString cName; - //MusECore::MidiControllerList* cl = instrument->controller(); MusECore::MidiControllerList* cl = workingInstrument.controller(); for (int i = 1;; ++i) { - //ctrlName = QString("Controller-%d").arg(i); cName = QString("Controller-%1").arg(i); bool found = false; for (MusECore::iMidiController ic = cl->begin(); ic != cl->end(); ++ic) { @@ -2964,17 +2494,12 @@ if(ci) { MusECore::MidiController* selctl = (MusECore::MidiController*)ci->data(0, Qt::UserRole).value(); - // Assign. - // *ctrl = *selctl; // Auto increment controller number. - //int l = ctrl->num() & 0x7f; - //int h = ctrl->num() & 0xffffff00; int l = selctl->num() & 0x7f; int h = selctl->num() & 0xffffff00; // Ignore internal controllers and wild cards. - //if(((h & 0xff0000) != 0x40000) && ((ctrl->num() & 0xff) != 0xff)) if(((h & 0xff0000) != 0x40000) && ((selctl->num() & 0xff) != 0xff)) { // Assign. @@ -2982,8 +2507,6 @@ for (int i = 1; i < 128; ++i) { - //ctrlName = QString("Controller-%d").arg(i); - //cName = QString("Controller-%1").arg(i); int j = ((i + l) & 0x7f) | h; found = false; for (MusECore::iMidiController ic = cl->begin(); ic != cl->end(); ++ic) @@ -3006,34 +2529,15 @@ ctrl->setName(cName); - //item = new QListWidgetItem(ctrlName); -// ListBoxData* item = new ListBoxData(ctrlName); - - //QVariant v = qVariantFromValue((void*)(ctrl)); - //item->setData(Qt::UserRole, v); -// item->setData((void*)ctrl); - //listController->addItem(item); -// listController->insertItem(item); - //listController->setCurrentItem(item); - workingInstrument.controller()->add(ctrl); QTreeWidgetItem* item = addControllerToView(ctrl); -// listController->blockSignals(true); -// listController->setSelected(item, true); -// listController->blockSignals(false); viewController->blockSignals(true); item->setSelected(true); viewController->blockSignals(false); - //oldController = (ListBoxData*)listController->selectedItem(); -// oldController = item; - //oldController = 0; - // MidiController is a class, with itialized values. We have to call this to show the values. - // To make multiple entries easier, don't bother calling this. controllerChanged(); - - //instrument->setDirty(true); + workingInstrument.setDirty(true); } @@ -3043,12 +2547,6 @@ void EditInstrument::addControllerClicked() { - //int lnum = listController->currentItem(); - //if(lnum == -1) - // return; - - //QString name = midiCtrlName(lnum); - QListWidgetItem* idx = listController->currentItem(); if(idx == 0) return; @@ -3120,7 +2618,7 @@ workingInstrument.setDirty(true); } -/* +/* DELETETHIS or later needed??? //--------------------------------------------------------- // deleteSysexClicked //--------------------------------------------------------- @@ -3178,8 +2676,6 @@ } signed char hb = (spinBoxHBank->value() - 1) & 0xff; - //if (p->hbank != (spinBoxHBank->value() & 0xff)) { - // p->hbank = spinBoxHBank->value() & 0xff; if (p->hbank != hb) { p->hbank = hb; @@ -3187,8 +2683,6 @@ } signed char lb = (spinBoxLBank->value() - 1) & 0xff; - //if (p->lbank != (spinBoxLBank->value() & 0xff)) { - // p->lbank = spinBoxLBank->value() & 0xff; if (p->lbank != lb) { p->lbank = lb; @@ -3225,14 +2719,9 @@ p->typ = value; instrument->setDirty(true); } - - //if (p->categorie != category->currentIndex()) { - // p->categorie = category->currentIndex(); - // instrument->setDirty(true); - // } } -/* +/* DELETETHIS //--------------------------------------------------------- // updateController //--------------------------------------------------------- @@ -3320,38 +2809,10 @@ void EditInstrument::updateInstrument(MusECore::MidiInstrument* instrument) { - //QListWidgetItem* sysexItem = sysexList->currentItem(); - //ListBoxData* sysexItem = sysexList->currentItem(); - //if (sysexItem) { - // SysEx* so = (SysEx*)sysexItem->data(Qt::UserRole).value(); - // updateSysex(instrument, so); - // } - - //QListWidgetItem* ctrlItem = listController->currentItem(); - //ListBoxData* ctrlItem = (ListBoxData*)listController->currentItem(); - //ListBoxData* ctrlItem = (ListBoxData*)listController->selectedItem(); -// ListViewData* ctrlItem = (ListViewData*)viewController->selectedItem(); - -// if (ctrlItem) { - //MusECore::MidiController* ctrl = (MusECore::MidiController*)ctrlItem->data(Qt::UserRole).value(); - -// printf("updateInstrument: AB\n"); - -// MusECore::MidiController* ctrl = (MusECore::MidiController*)ctrlItem->data(); - -// printf("updateInstrument: AC\n"); - -// updateController(instrument, ctrl); -// } - -// printf("updateInstrument: B\n"); - QTreeWidgetItem* patchItem = patchView->currentItem(); if (patchItem) { - //MusECore::Patch* p = (MusECore::Patch*)patchItem->data(0, Qt::UserRole).value(); - // If the item has a parent, it's a patch item. if(patchItem->parent()) updatePatch(instrument, (MusECore::Patch*)patchItem->data(0, Qt::UserRole).value()); @@ -3370,8 +2831,8 @@ { updateInstrument(i); if (!i->dirty()) - //return false; return 0; + int n; if(isClose) n = QMessageBox::warning(this, tr("MusE"), @@ -3386,18 +2847,13 @@ if (n == 0) { if (i->filePath().isEmpty()) { - //fileSaveAs(); saveAs(); } else { - //QFile f(i->filePath()); - //if (!f.open(QIODevice::WriteOnly)) FILE* f = fopen(i->filePath().toLatin1().constData(), "w"); if(f == 0) - //fileSaveAs(); saveAs(); else { - //f.close(); if(fclose(f) != 0) printf("EditInstrument::checkDirty: Error closing file\n"); @@ -3405,10 +2861,8 @@ i->setDirty(false); } } - //return false; return 0; } - //return n == 2; return n; } @@ -3515,7 +2969,7 @@ defPatchH->blockSignals(true); defPatchL->blockSignals(true); defPatchProg->blockSignals(true); - defPatchH->setValue(hb); + defPatchH->setValue(hb); defPatchL->setValue(lb); defPatchProg->setValue(pr); defPatchH->blockSignals(false); @@ -3543,8 +2997,6 @@ if(prog == MusECore::CTRL_VAL_UNKNOWN || pr == 0xff) return "---"; - //int hbank = (prog >> 16) & 0x7f; - //int lbank = (prog >> 8) & 0x7f; int hbank = (prog >> 16) & 0xff; int lbank = (prog >> 8) & 0xff; @@ -3554,9 +3006,9 @@ const MusECore::PatchList& pl = (*i)->patches; for (MusECore::ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { const MusECore::Patch* mp = *ipl; - if (//(mp->typ & tmask) && + if (//(mp->typ & tmask) && DELETETHIS (pr == mp->prog) - //&& ((drum && mode != MT_GM) || + //&& ((drum && mode != MT_GM) || DELETETHIS // (mp->drum == drumchan)) //&& (hbank == mp->hbank || !hb || mp->hbank == -1) diff -Nru muse-2.0~rc2/muse/instruments/editinstrument.h muse-2.0/muse/instruments/editinstrument.h --- muse-2.0~rc2/muse/instruments/editinstrument.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/instruments/editinstrument.h 2012-06-30 19:24:42.000000000 +0200 @@ -61,7 +61,6 @@ void setDefaultPatchControls(int); QString getPatchName(int); void deleteInstrument(QListWidgetItem*); - ///QMenu* patchpopup; private slots: virtual void fileNew(); @@ -74,7 +73,6 @@ void tabChanged(QWidget*); void patchChanged(); void controllerChanged(); - //void instrumentNameChanged(const QString&); void instrumentNameReturn(); void patchNameReturn(); void deletePatchClicked(); @@ -82,19 +80,17 @@ void newGroupClicked(); void patchButtonClicked(); void defPatchChanged(int); - //void newCategoryClicked(); void deleteControllerClicked(); void newControllerClicked(); void addControllerClicked(); void ctrlTypeChanged(int); - //void ctrlNameChanged(const QString&); void ctrlNameReturn(); void ctrlHNumChanged(int); void ctrlLNumChanged(int); void ctrlMinChanged(int); void ctrlMaxChanged(int); void ctrlDefaultChanged(int); - //void sysexChanged(); + //void sysexChanged(); DELETETHIS? //void deleteSysexClicked(); //void newSysexClicked(); void ctrlNullParamHChanged(int); diff -Nru muse-2.0~rc2/muse/instruments/midictrledit.cpp muse-2.0/muse/instruments/midictrledit.cpp --- muse-2.0~rc2/muse/instruments/midictrledit.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/instruments/midictrledit.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -146,19 +146,12 @@ return; if(flags & (SC_CONFIG | SC_MIDI_CONTROLLER)) - //if(flags & (SC_CONFIG | SC_MIDI_CONTROLLER_ADD)) { - //listController->blockSignals(true); midiPortsList->blockSignals(true); - //viewController->blockSignals(true); updatePredefinedList(); updateMidiPortsList(); updateViewController(); - //viewController->setCurrentItem(viewController->firstChild()); - //controllerChanged(viewController->currentItem()); - //listController->blockSignals(false); midiPortsList->blockSignals(false); - //viewController->blockSignals(false); } } @@ -199,18 +192,11 @@ void MidiControllerEditDialog::updateViewController() { - //for (iMidiController i = midiControllerList.begin(); - // i != midiControllerList.end(); ++i) { - // addControllerToView(&*i); int mpidx = midiPortsList->currentItem(); viewController->clear(); - //MidiControllerList* mcl; MidiInstrument* mi = midiPorts[mpidx].instrument(); - //if(mi) MidiControllerList* mcl = mi->controller(); - //else - // mcl = &defaultMidiController; for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) addControllerToView(*i); @@ -249,15 +235,6 @@ void MidiControllerEditDialog::reject() { - //MidiControllerList* mcl; -// MidiInstrument* mi = midiPorts[mpidx].instrument(); - //if(mi) -// MidiControllerList* mcl = mi->controller(); - //else - // mcl = &defaultMidiController; -// for (iMidiController i = mcl->begin(); i != mcl->end(); ++i) -// addControllerToView(*i); - // Restore the list before closing this dialog. updateViewController(); //setModified(false); @@ -272,12 +249,8 @@ void MidiControllerEditDialog::apply() { int mpidx = midiPortsList->currentItem(); - //MidiControllerList* mcl; MidiInstrument* mi = midiPorts[mpidx].instrument(); - //if(mi) MidiControllerList* mcl = mi->controller(); - //else - // mcl = &defaultMidiController; mcl->clear(); @@ -336,9 +309,6 @@ item = item->nextSibling(); } - // Update the list before closing this dialog. - //updateViewController(); - //setModified(false); MusEGlobal::song->update(SC_CONFIG | SC_MIDI_CONTROLLER); } @@ -442,14 +412,14 @@ return; _lastPort = n; - //listController->blockSignals(true); + //listController->blockSignals(true); DELETETHIS //midiPortsList->blockSignals(true); //viewController->blockSignals(true); //updatePredefinedList(); //updateMidiPortsList(); //reject(); // populate list updateViewController(); - //viewController->setCurrentItem(viewController->firstChild()); + //viewController->setCurrentItem(viewController->firstChild()); DELETETHIS //controllerChanged(viewController->currentItem()); //listController->blockSignals(false); //midiPortsList->blockSignals(false); diff -Nru muse-2.0~rc2/muse/instruments/minstrument.cpp muse-2.0/muse/instruments/minstrument.cpp --- muse-2.0~rc2/muse/instruments/minstrument.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/instruments/minstrument.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,14 +26,13 @@ #include #include #include -//#include #include #include "minstrument.h" #include "midiport.h" -#include "mididev.h" // p4.0.15 -#include "audio.h" // p4.0.15 -#include "midi.h" // p4.0.15 +#include "mididev.h" +#include "audio.h" +#include "midi.h" #include "globals.h" #include "xml.h" #include "event.h" @@ -151,7 +150,7 @@ static void loadIDF(QFileInfo* fi) { -/* +/* DELETETHIS QFile qf(fi->filePath()); if (!qf.open(IO_ReadOnly)) { printf("cannot open file %s\n", fi->fileName().toLatin1()); @@ -280,7 +279,7 @@ ++it; } } - //else + //else DELETETHIS //{ // if(usrInstrumentsDir.mkdir(MusEGlobal::museUserInstruments)) // printf("Created user instrument directory: %s\n", MusEGlobal::museUserInstruments.toLatin1()); @@ -410,7 +409,7 @@ delete _initScript; } -/* +/* DELETETHIS //--------------------------------------------------------- // uniqueCopy //--------------------------------------------------------- @@ -458,7 +457,6 @@ _nullvalue = ins._nullvalue; // Assignment - // *_controller = *(ins._controller); for(ciMidiController i = ins._controller->begin(); i != ins._controller->end(); ++i) { MidiController* mc = i->second; @@ -466,7 +464,7 @@ } // pg.clear(); -// for(iPatchGroup ipg = pg.begin(); ipg != pg.end(); ++ipg) +// for(iPatchGroup ipg = pg.begin(); ipg != pg.end(); ++ipg) DELETETHIS // { //ipg->patches.clear(); @@ -491,7 +489,6 @@ pg.clear(); // Assignment -// pg = ins.pg; for(ciPatchGroup g = ins.pg.begin(); g != ins.pg.end(); ++g) { PatchGroup* pgp = *g; @@ -516,7 +513,7 @@ _name = ins._name; _filePath = ins._filePath; - // Hmm, dirty, yes? But init sets it to false... + // Hmm, dirty, yes? But init sets it to false... DELETETHIS //_dirty = ins._dirty; //_dirty = false; //_dirty = true; @@ -532,18 +529,13 @@ void MidiInstrument::reset(int portNo, MType) { MusECore::MidiPort* port = &MusEGlobal::midiPorts[portNo]; - //if (port == 0) - // return; if(port->device() == 0) // p4.0.15 - { - //printf("MidiInstrument::reset port device is 0\n"); return; - } + MusECore::MidiPlayEvent ev; ev.setType(0x90); ev.setPort(portNo); ev.setTime(0); // p4.0.15 - //ev.setTime(audio->getFrameOffset() + audio->pos().frame()); for (int chan = 0; chan < MIDI_CHANNELS; ++chan) { @@ -552,15 +544,8 @@ { ev.setA(pitch); ev.setB(0); - //printf("MidiInstrument::reset adding event channel:%d pitch:%d\n", chan, pitch); - //ev.dump(); port->sendEvent(ev); - // Changed to use play events list instead of putEvent FIFO. - // These loops send 2048 events, which is more than our FIFO (or Jack buffer) can handle! p4.0.15 Tim. - // Nope, instead, increased FIFO sizes to accommodate. - //port->device()->playEvents()->add(ev); - //port->device()->addScheduledEvent(ev); } } } @@ -650,13 +635,6 @@ void Patch::write(int level, Xml& xml) { - //if (drumMap == 0) - //{ - //QString s = QString("Patch name=\"%1\"").arg(Xml::xmlString(name)); - //if (typ != -1) - // s += QString(" mode=\"%d\"").arg(typ); - //s += QString(" hbank=\"%1\" lbank=\"%2\" prog=\"%3\"").arg(hbank).arg(lbank).arg(prog); - //xml.tagE(s); xml.nput(level, ""); xml.put(" />"); - - //return; - //} - - //QString s = QString("drummap name=\"%1\"").arg(Xml::xmlString(name)); - //s += QString(" hbank=\"%1\" lbank=\"%2\" prog=\"%3\"").arg(hbank).arg(lbank).arg(prog); - //xml.stag(s); - //for (int i = 0; i < DRUM_MAPSIZE; ++i) { - // DrumMapEntry* dm = drumMap->entry(i); - // dm->write(xml); - // } - //xml.etag("drummap"); } //--------------------------------------------------------- @@ -695,8 +658,6 @@ void MidiInstrument::readMidiState(Xml& xml) { - ///_midiState->read(xml, "midistate", true); - // p4.0.27 A kludge to support old midistates by wrapping them in the proper header. _tmpMidiStateVersion = 1; // Assume old (unmarked) first version 1. for (;;) @@ -796,7 +757,7 @@ delete _initScript; QByteArray ba = xml.parse1().toLatin1(); const char* istr = ba.constData(); - int len = strlen(istr) +1; + int len = ba.length() +1; if (len > 1) { _initScript = new char[len]; memcpy(_initScript, istr, len); @@ -829,11 +790,8 @@ void MidiInstrument::write(int level, Xml& xml) { xml.header(); - //xml.stag("muse version=\"2.1\""); xml.tag(level, "muse version=\"1.0\""); - //xml.stag(QString("MidiInstrument name=\"%1\"").arg(Xml::xmlString(iname()))); level++; - //xml.tag(level, "MidiInstrument name=\"%s\"", Xml::xmlString(iname()).toLatin1().constData()); xml.nput(level, "* pg = groups(); - //for (std::vector::iterator g = pg->begin(); g != pg->end(); ++g) { level++; - //for (std::vector::iterator g = pg.begin(); g != pg.end(); ++g) { for (ciPatchGroup g = pg.begin(); g != pg.end(); ++g) { PatchGroup* pgp = *g; const PatchList& pl = pgp->patches; @@ -861,20 +816,14 @@ level++; //for (iPatch p = g->patches.begin(); p != g->patches.end(); ++p) for (ciPatch p = pl.begin(); p != pl.end(); ++p) - //(*p)->write(xml); - //p->write(level, xml); (*p)->write(level, xml); level--; - //xml.etag("PatchGroup"); xml.etag(level, "PatchGroup"); } for (iMidiController ic = _controller->begin(); ic != _controller->end(); ++ic) - //(*ic)->write(xml); ic->second->write(level, xml); - //xml.etag("MidiInstrument"); level--; xml.etag(level, "MidiInstrument"); - //xml.etag("muse"); level--; xml.etag(level, "muse"); } @@ -932,6 +881,125 @@ return ""; } + + + + + +unsigned MidiInstrument::getNextPatch(int channel, unsigned patch, MType songType, bool drum) +{ + QList haystack=getPatches(channel,songType,drum); + if (haystack.empty()) return MusECore::CTRL_VAL_UNKNOWN; + + int prog=patch&0xFF; + int lbank=(patch>>8)&0xFF; + int hbank=(patch>>16)&0xFF; + + dumb_patchlist_entry_t needle=dumb_patchlist_entry_t(prog, (lbank!=0xFF)?lbank:-1, (hbank!=0xFF)?hbank:-1); + + QList::iterator it; + for (it=haystack.begin(); it!=haystack.end(); it++) + if ((*it) == needle) + break; + + if (it==haystack.end()) //not found? use first entry + it=haystack.begin(); + else + { + for (;it!=haystack.end(); it++) + if ((*it)!=needle) + break; + if (it==haystack.end()) it=haystack.begin(); //wrap-over + } + + return (it->prog&0xFF) | + ((((it->lbank==-1)?0xFF:it->lbank)<<8)&0xFF00) | + ((((it->hbank==-1)?0xFF:it->hbank)<<16)&0xFF0000); +} + +unsigned MidiInstrument::getPrevPatch(int channel, unsigned patch, MType songType, bool drum) +{ + QList haystack=getPatches(channel,songType,drum); + if (haystack.empty()) return MusECore::CTRL_VAL_UNKNOWN; + + int prog=patch&0xFF; + int lbank=(patch>>8)&0xFF; + int hbank=(patch>>16)&0xFF; + + dumb_patchlist_entry_t needle=dumb_patchlist_entry_t(prog, (lbank!=0xFF)?lbank:-1, (hbank!=0xFF)?hbank:-1); + + QList::iterator it; + for (it=haystack.begin(); it!=haystack.end(); it++) + if ((*it) == needle) + break; + + if (it==haystack.end()) //not found? use first entry + it=haystack.begin(); + else + { + if (it==haystack.begin()) it=haystack.end(); //wrap-over + it--; + } + + return (it->prog&0xFF) | + ((((it->lbank==-1)?0xFF:it->lbank)<<8)&0xFF00) | + ((((it->hbank==-1)?0xFF:it->hbank)<<16)&0xFF0000); +} + +QList MidiInstrument::getPatches(int channel, MType mode, bool drum) + { + int tmask = 1; + bool drumchan = channel == 9; + bool hb = false; + bool lb = false; + switch (mode) { + case MT_GS: + tmask = 2; + hb = true; + break; + case MT_XG: + hb = true; + lb = true; + tmask = 4; + break; + case MT_GM: + if(drumchan) + { + QList tmp; + tmp.push_back(dumb_patchlist_entry_t(0,-1,-1)); + } + else + tmask = 1; + break; + default: + hb = true; // MSB bank matters + lb = true; // LSB bank matters + break; + } + + + QList tmp; + + for (ciPatchGroup i = pg.begin(); i != pg.end(); ++i) { + const PatchList& pl = (*i)->patches; + for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { + const Patch* mp = *ipl; + if ((mp->typ & tmask) && + ((drum && mode != MT_GM) || + (mp->drum == drumchan)) ) + { + int prog = mp->prog; + int lbank = (mp->lbank==-1 || !lb) ? -1 : mp->lbank; + int hbank = (mp->hbank==-1 || !hb) ? -1 : mp->hbank; + tmp.push_back(dumb_patchlist_entry_t(prog,lbank,hbank)); + } + } + } + + return tmp; + } + + //--------------------------------------------------------- // populatePatchPopup //--------------------------------------------------------- @@ -949,7 +1017,6 @@ { int id = (0xff << 16) + (0xff << 8) + 0x00; // First patch QAction* act = menu->addAction(gmdrumname); - //act->setCheckable(true); act->setData(id); return; } @@ -960,7 +1027,6 @@ if (pg.size() > 1) { for (ciPatchGroup i = pg.begin(); i != pg.end(); ++i) { PatchGroup* pgp = *i; - //QMenu* pm = menu->addMenu(pgp->name); MusEGui::PopupMenu* pm = new MusEGui::PopupMenu(pgp->name, menu, menu->stayOpen()); // Use the parent stayOpen here. menu->addMenu(pm); pm->setFont(MusEGlobal::config.fonts[0]); @@ -974,7 +1040,6 @@ int id = ((mp->hbank & 0xff) << 16) + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); QAction* act = pm->addAction(mp->name); - //act->setCheckable(true); act->setData(id); } @@ -990,7 +1055,6 @@ int id = ((mp->hbank & 0xff) << 16) + ((mp->lbank & 0xff) << 8) + (mp->prog & 0xff); QAction* act = menu->addAction(mp->name); - //act->setCheckable(true); act->setData(id); } } @@ -999,7 +1063,7 @@ } // namespace MusECore /* -namespace MusEGui { +namespace MusEGui { DELETETHIS void populatePatchPopup(MusECore::MidiInstrument* midiInstrument, PopupMenu* menu, int chan, MType songType, bool drum) { diff -Nru muse-2.0~rc2/muse/instruments/minstrument.h muse-2.0/muse/instruments/minstrument.h --- muse-2.0~rc2/muse/instruments/minstrument.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/instruments/minstrument.h 2012-06-30 19:24:42.000000000 +0200 @@ -80,6 +80,45 @@ unsigned char* data; }; +struct dumb_patchlist_entry_t +{ + int prog; + int lbank; + int hbank; // "-1" means "unused" + + dumb_patchlist_entry_t(int p, int l, int h) + { + prog=p; + lbank=l; + hbank=h; + } + + bool operator<(const dumb_patchlist_entry_t& other) const + { + if (hbank < other.hbank) return true; + if (hbank > other.hbank) return false; + if (lbank < other.lbank) return true; + if (lbank > other.lbank) return false; + return (prog < other.prog); + } + + bool operator>(const dumb_patchlist_entry_t& other) const + { + return other < *this; + } + + bool operator==(const dumb_patchlist_entry_t& other) const + { + return (prog==other.prog && lbank==other.lbank && hbank==other.hbank); + } + + bool operator!=(const dumb_patchlist_entry_t& other) const + { + return (!(*this==other)); + } +}; + + //--------------------------------------------------------- // MidiInstrument //--------------------------------------------------------- @@ -122,6 +161,9 @@ const QList& sysex() const { return _sysex; } void removeSysex(SysEx* sysex) { _sysex.removeAll(sysex); } void addSysex(SysEx* sysex) { _sysex.append(sysex); } + QList getPatches(int channel, MType songType, bool drum); + unsigned getNextPatch(int channel, unsigned patch, MType songType, bool drum); + unsigned getPrevPatch(int channel, unsigned patch, MType songType, bool drum); EventList* midiInit() const { return _midiInit; } EventList* midiReset() const { return _midiReset; } @@ -142,7 +184,6 @@ virtual void reset(int, MType); virtual QString getPatchName(int,int,MType,bool); - //virtual void populatePatchPopup(QMenu*, int, MType, bool); virtual void populatePatchPopup(MusEGui::PopupMenu*, int, MType, bool); void read(Xml&); void write(int level, Xml&); @@ -172,7 +213,7 @@ } // namespace MusECore //namespace MusEGui { -//extern void populatePatchPopup(MusECore::MidiInstrument*, PopupMenu*, int, MType, bool); +//extern void populatePatchPopup(MusECore::MidiInstrument*, PopupMenu*, int, MType, bool); DELETETHIS //} #endif diff -Nru muse-2.0~rc2/muse/liste/editevent.cpp muse-2.0/muse/liste/editevent.cpp --- muse-2.0~rc2/muse/liste/editevent.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/liste/editevent.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -27,7 +27,6 @@ #include #include #include -//#include #include #include #include @@ -45,7 +44,6 @@ #include "pitchedit.h" #include "intlabel.h" #include "globals.h" -///#include "posedit.h" #include "gconfig.h" #include "midiport.h" #include "midiedit/drummap.h" @@ -381,7 +379,7 @@ QString dst; if (flag) { // convert to hex - dst = string2hex((unsigned char*)src, strlen(src)); + dst = string2hex((unsigned char*)src, ba.length()); } else { // convert to string int len; @@ -424,7 +422,7 @@ const char* src = ba.constData(); if (!hexButton->isChecked()) { meta = (unsigned char*)strdup(src); - len = strlen(src); + len = ba.length(); QDialog::accept(); return; } @@ -445,7 +443,6 @@ setWindowTitle(tr("MusE: Enter Channel Aftertouch")); QLabel* l1 = new QLabel(tr("Time Position")); - ///epos = new PosEdit; epos = new Awl::PosEdit; QLabel* l2 = new QLabel(tr("Pressure")); @@ -504,7 +501,6 @@ setWindowTitle(tr("MusE: Enter Poly Aftertouch")); QLabel* l1 = new QLabel(tr("Time Position")); - ///epos = new PosEdit; epos = new Awl::PosEdit; QLabel* l2 = new QLabel(tr("Pitch")); @@ -632,8 +628,8 @@ std::list sList; typedef std::list::iterator isList; - for (MusECore::iMidiCtrlValList i = cll->begin(); i != cll->end(); ++i) { - MusECore::MidiCtrlValList* cl = i->second; + for (MusECore::iMidiCtrlValList it = cll->begin(); it != cll->end(); ++it) { + MusECore::MidiCtrlValList* cl = it->second; int num = cl->num(); // dont show drum specific controller if not a drum track @@ -642,6 +638,7 @@ continue; } MusECore::MidiController* c = port->midiController(num); + { isList i = sList.begin(); for (; i != sList.end(); ++i) { if (*i == c->name()) @@ -649,6 +646,7 @@ } if (i == sList.end()) sList.push_back(c->name()); + } } MusECore::MidiController* mc = port->midiController(num); int idx = 0; @@ -697,13 +695,11 @@ void EditCtrlDialog::newController() { - //QMenu* pup = new QMenu(this); MusEGui::PopupMenu* pup = new MusEGui::PopupMenu(this); - //pup->setCheckable(this);//not necessary in Qt4 - // + // populate popup with all controllers available for // current instrument - // + MusECore::MidiTrack* track = part->track(); int portn = track->outPort(); MusECore::MidiPort* port = &MusEGlobal::midiPorts[portn]; @@ -732,24 +728,16 @@ { MusECore::MidiCtrlValList* vl = new MusECore::MidiCtrlValList(mc->num()); cll->add(channel, vl); - //MusEGlobal::song->update(SC_MIDI_CONTROLLER_ADD); } - //for (int idx = 0; ;++idx) { int idx = 0; for (; idx < ctrlList->count() ;++idx) { // p4.0.25 Fix segfault - QString str = ctrlList->item(idx)->text(); + QString str = ctrlList->item(idx)->text(); if (s == str) { - ctrlList->item(idx)->setSelected(true); + ctrlList->item(idx)->setSelected(true); ctrlListClicked(ctrlList->item(idx)); break; } - //if (str.isNull()) { - // ctrlList->addItem(s); - // ctrlList->item(idx)->setSelected(true); - // ctrlListClicked(ctrlList->item(idx)); - // break; - // } } if (idx >= ctrlList->count()) { // p4.0.25 Fix segfault ctrlList->addItem(s); @@ -871,9 +859,7 @@ int port = track->outPort(); MusECore::MidiInstrument* instr = MusEGlobal::midiPorts[port].instrument(); - //QMenu* pup = new QMenu(this); MusEGui::PopupMenu* pup = new MusEGui::PopupMenu(this); - //populatePatchPopup(instr, pup, channel, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM); instr->populatePatchPopup(pup, channel, MusEGlobal::song->mtype(), track->type() == MusECore::Track::DRUM); if(pup->actions().count() == 0) @@ -897,9 +883,6 @@ void EditCtrlDialog::programChanged() { -// MusECore::MidiTrack* track = part->track(); -// int channel = track->outChannel(); -// int port = track->outPort(); int hb = hbank->value(); int lb = lbank->value(); int prog = program->value(); diff -Nru muse-2.0~rc2/muse/liste/editevent.h muse-2.0/muse/liste/editevent.h --- muse-2.0~rc2/muse/liste/editevent.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/liste/editevent.h 2012-06-30 19:24:43.000000000 +0200 @@ -48,7 +48,6 @@ class IntLabel; class PitchEdit; -///class PosEdit; //--------------------------------------------------------- @@ -117,7 +116,6 @@ int val; // controller value (for prog. changes) const MusECore::MidiPart* part; - ///QMenu* pop; void updatePatch(); @@ -148,7 +146,6 @@ unsigned char* meta; int len; - ///PosEdit* epos; Awl::PosEdit* epos; QTextEdit* edit; MusEGui::IntLabel* il2; @@ -179,7 +176,6 @@ class EditCAfterDialog : public EditEventDialog { Q_OBJECT - ///PosEdit* epos; Awl::PosEdit* epos; MusEGui::IntLabel* il2; @@ -201,7 +197,6 @@ class EditPAfterDialog : public EditEventDialog { Q_OBJECT - ///PosEdit* epos; Awl::PosEdit* epos; MusEGui::PitchEdit* pl; MusEGui::IntLabel* il2; diff -Nru muse-2.0~rc2/muse/liste/listedit.cpp muse-2.0/muse/liste/listedit.cpp --- muse-2.0~rc2/muse/liste/listedit.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/liste/listedit.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -46,6 +46,7 @@ #include "midiport.h" #include "midictrl.h" #include "app.h" +#include "gconfig.h" namespace MusEGui { @@ -197,13 +198,13 @@ { if(_isDeleting) // Ignore while while deleting to prevent crash. return; - + if (type == 0) return; if (type & (SC_PART_REMOVED | SC_PART_MODIFIED | SC_PART_INSERTED | SC_EVENT_REMOVED | SC_EVENT_MODIFIED | SC_EVENT_INSERTED | SC_SELECTION)) { - if (type & (SC_PART_REMOVED | SC_PART_INSERTED)) + if (type & (SC_PART_REMOVED | SC_PART_INSERTED | SC_PART_MODIFIED)) genPartlist(); // close window if editor has no parts anymore if (parts()->empty()) { @@ -213,6 +214,8 @@ liste->setSortingEnabled(false); if (type == SC_SELECTION) { + + // DELETETHIS or clean up or whatever? // BUGFIX: I found the keyboard modifier states affect how QTreeWidget::setCurrentItem() operates. // So for example (not) holding shift while lassoo-ing notes in piano roll affected // whether multiple items were selected in this event list editor! @@ -244,12 +247,10 @@ // Go backwards to avoid QTreeWidget::setCurrentItem() dependency on KB modifiers! for (int row = liste->topLevelItemCount() -1; row >= 0 ; --row) { - //printf("ListEdit::songChanged row:%d\n", row); QTreeWidgetItem* i = liste->topLevelItem(row); bool sel = ((EventListItem*)i)->event.selected(); if (i->isSelected() ^ sel) { - //printf("ListEdit::songChanged changing row:%d sel:%d\n", row, sel); // Do setCurrentItem() before setSelected(). if(sel && !ci_done) { @@ -496,7 +497,7 @@ menuEdit->addActions(MusEGlobal::undoRedo->actions()); menuEdit->addSeparator(); -#if 0 +#if 0 // DELETETHIS or implement? QAction *cutAction = menuEdit->addAction(QIcon(*editcutIconSet), tr("Cut")); connect(cutAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); editSignalMapper->setMapping(cutAction, EList::CMD_CUT); @@ -528,21 +529,9 @@ // Toolbars --------------------------------------------------------- - QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); - undo_tools->setObjectName("Undo/Redo tools"); - undo_tools->addActions(MusEGlobal::undoRedo->actions()); - QToolBar* insertTools = addToolBar(tr("Insert tools")); insertTools->setObjectName("list insert tools"); insertTools->addActions(insertItems->actions()); - - QToolBar* panic_toolbar = addToolBar(tr("panic")); - panic_toolbar->setObjectName("panic"); - panic_toolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport_toolbar = addToolBar(tr("transport")); - transport_toolbar->setObjectName("transport"); - transport_toolbar->addActions(MusEGlobal::transportAction->actions()); // //--------------------------------------------------- @@ -618,7 +607,7 @@ setWindowTitle("MusE: List Editor"); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } //--------------------------------------------------------- @@ -627,7 +616,6 @@ ListEdit::~ListEdit() { - // MusEGlobal::undoRedo->removeFrom(listTools); // p4.0.6 Removed } //--------------------------------------------------------- @@ -1015,11 +1003,24 @@ void ListEdit::keyPressEvent(QKeyEvent* event) { -int key = event->key(); -if (key == Qt::Key_Escape) { + int key = event->key(); + if (key == Qt::Key_Escape) { close(); return; } } +//--------------------------------------------------------- +// focusCanvas +//--------------------------------------------------------- + +void ListEdit::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + liste->setFocus(); + liste->activateWindow(); + } +} + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/liste/listedit.h muse-2.0/muse/liste/listedit.h --- muse-2.0~rc2/muse/liste/listedit.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/liste/listedit.h 2012-06-30 19:24:43.000000000 +0200 @@ -84,6 +84,7 @@ public slots: void songChanged(int); + void focusCanvas(); signals: void isDeleting(MusEGui::TopWin*); diff -Nru muse-2.0~rc2/muse/main.cpp muse-2.0/muse/main.cpp --- muse-2.0~rc2/muse/main.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/main.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -35,7 +35,12 @@ #include #include #include +#include +#include +#include +#include +#include #include #include @@ -43,12 +48,17 @@ #include "app.h" #include "audio.h" #include "audiodev.h" +#include "config.h" #include "gconfig.h" #include "globals.h" #include "helper.h" -#include "icons.h" #include "sync.h" #include "functions.h" +#include "appearance.h" +#include "midiseq.h" +#include "minstrument.h" +#include "midiport.h" +#include "mididev.h" #ifdef HAVE_LASH #include @@ -64,12 +74,19 @@ extern void initPlugins(); extern void initDSSI(); extern void readConfiguration(); + +extern void initMidiSequencer(); +extern void initAudio(); +extern void initAudioPrefetch(); +extern void initMidiSynth(); + extern snd_seq_t * alsaSeq; +extern void setAlsaClientName(const char*); } namespace MusEGui { -extern void initIcons(); -extern void initShortCuts(); +void initIcons(); +void initShortCuts(); #ifdef HAVE_LASH extern lash_client_t * lash_client; #endif @@ -138,27 +155,17 @@ } bool notify(QObject* receiver, QEvent* event) { - //if (event->type() == QEvent::KeyPress) - // printf("notify key press before app::notify accepted:%d\n", event->isAccepted()); bool flag = QApplication::notify(receiver, event); if (event->type() == QEvent::KeyPress) { - //printf("notify key press after app::notify accepted:%d\n", event->isAccepted()); QKeyEvent* ke = (QKeyEvent*)event; - ///MusEGlobal::globalKeyState = ke->stateAfter(); - MusEGlobal::globalKeyState = ke->modifiers(); + MusEGlobal::globalKeyState = ke->modifiers(); bool accepted = ke->isAccepted(); if (!accepted) { int key = ke->key(); - ///if (ke->state() & Qt::ShiftModifier) - //if (MusEGlobal::globalKeyState & Qt::ShiftModifier) if (((QInputEvent*)ke)->modifiers() & Qt::ShiftModifier) key += Qt::SHIFT; - ///if (ke->state() & Qt::AltModifier) - //if (MusEGlobal::globalKeyState & Qt::AltModifier) if (((QInputEvent*)ke)->modifiers() & Qt::AltModifier) key += Qt::ALT; - ///if (ke->state() & Qt::ControlModifier) - //if (MusEGlobal::globalKeyState & Qt::ControlModifier) if (((QInputEvent*)ke)->modifiers() & Qt::ControlModifier) key+= Qt::CTRL; muse->kbAccel(key); @@ -175,7 +182,7 @@ } #ifdef HAVE_LASH - virtual void timerEvent (QTimerEvent * /* e */) { + virtual void timerEvent (QTimerEvent*) { if(MusEGlobal::useLASH) muse->lash_idle_cb (); } @@ -215,36 +222,58 @@ static void usage(const char* prog, const char* txt) { - fprintf(stderr, "%s: %s\nusage: %s flags midifile\n Flags:\n", + fprintf(stderr, "\n"); + fprintf(stderr, "%s: %s\nUsage: %s flags midifile\n Flags:\n", prog, txt, prog); - fprintf(stderr, " -h this help\n"); - fprintf(stderr, " -v print version\n"); - fprintf(stderr, " -d debug mode: no threads, no RT\n"); - fprintf(stderr, " -D debug mode: enable some debug messages\n"); - fprintf(stderr, " specify twice for lots of debug messages\n"); - fprintf(stderr, " this may slow down MusE massively!\n"); - fprintf(stderr, " -m debug mode: trace midi Input\n"); - fprintf(stderr, " -M debug mode: trace midi Output\n"); - fprintf(stderr, " -s debug mode: trace sync\n"); - fprintf(stderr, " -a no audio\n"); - fprintf(stderr, " -P n set audio driver real time priority to n\n"); - fprintf(stderr, " (Dummy only, default 40. Else fixed by Jack.)\n"); - fprintf(stderr, " -Y n force midi real time priority to n (default: audio driver prio +2)\n"); - fprintf(stderr, " -p don't load LADSPA plugins\n"); -#ifdef ENABLE_PYTHON - fprintf(stderr, " -y enable Python control support\n"); -#endif + fprintf(stderr, " -h This help\n"); + fprintf(stderr, " -v Print version\n"); + fprintf(stderr, " -a No audio, use dummy audio driver, plus ALSA midi\n"); + fprintf(stderr, " -A Force inclusion of ALSA midi even if using Jack\n"); + fprintf(stderr, " -P n Set audio driver real time priority to n\n"); + fprintf(stderr, " (Dummy only, default 40. Else fixed by Jack.)\n"); + fprintf(stderr, " -Y n Force midi real time priority to n (default: audio driver prio +2)\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " -p Don't load LADSPA plugins\n"); #ifdef VST_SUPPORT - fprintf(stderr, " -V don't load VST plugins\n"); + fprintf(stderr, " -V Don't load VST plugins\n"); #endif #ifdef DSSI_SUPPORT - fprintf(stderr, " -I don't load DSSI plugins\n"); + fprintf(stderr, " -I Don't load DSSI plugins\n"); #endif #ifdef HAVE_LASH - fprintf(stderr, " -L don't use LASH\n"); + fprintf(stderr, " -L Don't use LASH\n"); #endif - fprintf(stderr, " -l xx force locale to the given language/country code\n"); +#ifdef ENABLE_PYTHON + fprintf(stderr, " -y Enable Python control support\n"); +#endif + fprintf(stderr, "\n"); + fprintf(stderr, " -l xx Force locale to the given language/country code\n"); fprintf(stderr, " (xx = %s)\n", localeList().toLatin1().constData()); + fprintf(stderr, " -u Ubuntu/unity workaround: don't allow sharing menus\n"); + fprintf(stderr, " and mdi-subwins.\n"); + fprintf(stderr, "\n"); + fprintf(stderr, " -d Debug mode: no threads, no RT\n"); + fprintf(stderr, " -D Debug mode: enable some debug messages\n"); + fprintf(stderr, " specify twice for lots of debug messages\n"); + fprintf(stderr, " this may slow down MusE massively!\n"); + fprintf(stderr, " -m Debug mode: trace midi Input\n"); + fprintf(stderr, " -M Debug mode: trace midi Output\n"); + fprintf(stderr, " -s Debug mode: trace sync\n"); + fprintf(stderr, "\n"); +#ifdef HAVE_LASH + fprintf(stderr, "LASH and "); +#endif + fprintf(stderr, "Qt options are also accepted. Some common Qt options:\n"); + fprintf(stderr, " -style [=] style Set application GUI style. Motif, Windows, Platinum etc.\n" + " -stylesheet [=] stylesheet Set application styleSheet\n" + " -session [=] session Restore application from an earlier session\n" + " -widgetcount Print debug message at end, about undestroyed/maximum widgets\n" + " -reverse Set application's layout direction to Qt::RightToLeft\n" + " -graphicssystem Set backend used for on-screen widgets/QPixmaps: raster or opengl\n" + " -qmljsdebugger = port Activate QML/JS debugger with port, formatted port:1234[,block]\n" + ); + + fprintf(stderr, "\n"); } //--------------------------------------------------------- @@ -253,53 +282,17 @@ int main(int argc, char* argv[]) { - -// error = ErrorHandler::create(argv[0]); - MusEGlobal::ruid = getuid(); - MusEGlobal::euid = geteuid(); - MusEGlobal::undoSetuid(); - getCapabilities(); - int noAudio = false; - MusEGlobal::museUser = QString(getenv("HOME")); MusEGlobal::museGlobalLib = QString(LIBDIR); MusEGlobal::museGlobalShare = QString(SHAREDIR); MusEGlobal::museProject = MusEGlobal::museProjectInitPath; //getcwd(0, 0); MusEGlobal::museInstruments = MusEGlobal::museGlobalShare + QString("/instruments"); - // Create config dir if it doesn't exists + // Create config dir if it doesn't exist QDir cPath = QDir(MusEGlobal::configPath); if (! cPath.exists()) cPath.mkpath("."); - // Create user templates dir if it doesn't exist - QDir utemplDir = QDir(MusEGlobal::configPath + QString("/templates")); - if(!utemplDir.exists()) - { - utemplDir.mkpath("."); - // Support old versions: Copy existing templates over. - QDir old_utemplDir = QDir(QString(getenv("HOME")) + QString("/templates")); - // printf(" old templates dir:%s\n", (QString(getenv("HOME")) + QString("/templates")).toLatin1().constData()); - if(old_utemplDir.exists()) - { - //printf(" found old templates dir\n"); - // We really just want these, even though it's possible other filenames were saved. - // Another application might have used that directory. - QStringList flt; flt << "*.med" << "*.med.gz" << "*.med.bz2" << "*.mid" << "*.midi" << "*.kar"; - old_utemplDir.setNameFilters(flt); - - QFileInfoList fil = old_utemplDir.entryInfoList(); - QFileInfo fi; - foreach(fi, fil) - { - QString fn = fi.fileName(); - QFile f(fi.absoluteFilePath()); - f.copy(utemplDir.absolutePath() + "/" + fn); - //printf(" copy old template to:%s result:%d\n", QString(utemplPath.absolutePath() + "/" + fn).toLatin1().constData(), rv); - } - } - } - QFile cConf (MusEGlobal::configName); QFile cConfTempl (MusEGlobal::museGlobalShare + QString("/templates/MusE.cfg")); bool cConfExists = cConf.exists(); @@ -323,86 +316,38 @@ printf (" FAILED!\n"); } -#ifdef HAVE_LASH - lash_args_t * lash_args = 0; - if(MusEGlobal::useLASH) - lash_args = lash_extract_args (&argc, &argv); -#endif - - srand(time(0)); // initialize random number generator -// signal(SIGCHLD, catchSignal); // interferes with initVST() - MusECore::initMidiController(); - QApplication::setColorSpec(QApplication::ManyColor); - MuseApplication app(argc, argv); - - MusEGui::init_function_dialogs(MusEGlobal::muse); MusEGui::initShortCuts(); - MusECore::readConfiguration(); - - // Need to put a sane default here because we can't use ~ in the file name string. - if(!cConfExists) - MusEGlobal::config.projectBaseFolder = MusEGlobal::museUser + QString("/MusE"); - - //MusEGlobal::museUserInstruments = MusEGlobal::config.userInstrumentsDir; - // Create user instruments dir if it doesn't exist + // Need to put a sane defaults here because we can't use '~' in the file name strings. + if(!cConfExists) { - QString uinstrPath = MusEGlobal::configPath + QString("/instruments"); - QDir uinstrDir = QDir(uinstrPath); - if(!uinstrDir.exists()) - uinstrDir.mkpath("."); - - if(!MusEGlobal::config.userInstrumentsDir.isEmpty() && MusEGlobal::config.userInstrumentsDir != uinstrPath) // Only if it is different. - { - // Support old versions: Copy existing instruments over. - QDir old_uinstrDir(MusEGlobal::config.userInstrumentsDir); - //printf(" old instruments dir:%s\n", MusEGlobal::config.userInstrumentsDir.toLatin1().constData()); - if(old_uinstrDir.exists()) - { - //printf(" found old instruments dir\n"); - QStringList flt; flt << "*.idf"; - old_uinstrDir.setNameFilters(flt); - - QFileInfoList fil = old_uinstrDir.entryInfoList(); - QFileInfo fi; - foreach(fi, fil) - { - QString fn = fi.fileName(); - QFile f(fi.absoluteFilePath()); - QFile newf(uinstrDir.absolutePath() + "/" + fn); - if(!newf.exists()) - { - f.copy(newf.fileName()); - //printf(" copy old instrument to:%s result:%d\n", newf.fileName().toLatin1().constData(), rv); - } - } - } - } - MusEGlobal::museUserInstruments = uinstrPath; + MusEGlobal::config.projectBaseFolder = MusEGlobal::museUser + QString("/MusE"); + MusEGlobal::config.startSong = MusEGlobal::museGlobalShare + QString("/templates/default.med"); } - if (MusEGlobal::config.useDenormalBias) - printf("Denormal protection enabled.\n"); - // SHOW MUSE SPLASH SCREEN - if (MusEGlobal::config.showSplashScreen) { - QPixmap splsh(MusEGlobal::museGlobalShare + "/splash.png"); - - if (!splsh.isNull()) { - QSplashScreen* muse_splash = new QSplashScreen(splsh, - Qt::WindowStaysOnTopHint); - muse_splash->setAttribute(Qt::WA_DeleteOnClose); // Possibly also Qt::X11BypassWindowManagerHint - muse_splash->show(); - QTimer* stimer = new QTimer(0); - muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close())); - stimer->setSingleShot(true); - stimer->start(6000); - } - } + // May need this. Tested OK. Grab the default style BEFORE calling setStyle and creating the app. + //{ int dummy_argc = 1; char** dummy_argv = &argv[0]; + // QApplication dummy_app(dummy_argc, dummy_argv); + // MusEGui::Appearance::defaultStyle = dummy_app.style()->objectName(); } + //QStringList sl = QStyleFactory::keys(); + //if (sl.indexOf(MusEGlobal::config.style) != -1) { + // QStyle* style = QApplication::setStyle(MusEGlobal::config.style); + // style->setObjectName(MusEGlobal::config.style); + //} - int i; + // Let LASH remove its recognized arguments first (generally longer than Qt's). + // Tip: LADISH's LASH emulation (current 1.0) does not take any arguments. +#ifdef HAVE_LASH + lash_args_t * lash_args = 0; + lash_args = lash_extract_args (&argc, &argv); +#endif - QString optstr("ahvdDmMsP:Y:l:py"); + // Now create the application, and let Qt remove recognized arguments. + MuseApplication app(argc, argv); + MusEGui::Appearance::defaultStyle = app.style()->objectName(); // NOTE: May need alternate method, above. + + QString optstr("aAhvdDumMsP:Y:l:py"); #ifdef VST_SUPPORT optstr += QString("V"); #endif @@ -412,68 +357,226 @@ #ifdef HAVE_LASH optstr += QString("L"); #endif - -//#ifdef VST_SUPPORT -// while ((i = getopt(argc, argv, "ahvdDmMsVP:py")) != EOF) { -//#else -// while ((i = getopt(argc, argv, "ahvdDmMsP:py")) != EOF) { -//#endif + bool noAudio = false; + int i; + + // Now read the remaining arguments as our own... while ((i = getopt(argc, argv, optstr.toLatin1().constData())) != EOF) { char c = (char)i; switch (c) { - case 'v': printVersion(argv[0]); return 0; + case 'v': printVersion(argv[0]); +#ifdef HAVE_LASH + if(lash_args) lash_args_destroy(lash_args); +#endif + return 0; + case 'a': + noAudio = true; + break; + case 'A': + MusEGlobal::useAlsaWithJack = true; + break; case 'd': MusEGlobal::debugMode = true; MusEGlobal::realTimeScheduling = false; break; - case 'a': - noAudio = true; - break; case 'D': if (!MusEGlobal::debugMsg) MusEGlobal::debugMsg=true; else MusEGlobal::heavyDebugMsg=true; + break; case 'm': MusEGlobal::midiInputTrace = true; break; case 'M': MusEGlobal::midiOutputTrace = true; break; case 's': MusEGlobal::debugSync = true; break; + case 'u': MusEGlobal::unityWorkaround = true; break; case 'P': MusEGlobal::realTimePriority = atoi(optarg); break; case 'Y': MusEGlobal::midiRTPrioOverride = atoi(optarg); break; case 'p': MusEGlobal::loadPlugins = false; break; case 'V': MusEGlobal::loadVST = false; break; case 'I': MusEGlobal::loadDSSI = false; break; - case 'L': MusEGlobal::useLASH = false; break; + case 'L': MusEGlobal::useLASH = false; break; case 'y': MusEGlobal::usePythonBridge = true; break; case 'l': locale_override = QString(optarg); break; - case 'h': usage(argv[0], argv[1]); return -1; - default: usage(argv[0], "bad argument"); return -1; + case 'h': usage(argv[0], argv[1]); +#ifdef HAVE_LASH + if(lash_args) lash_args_destroy(lash_args); +#endif + return -1; + default: usage(argv[0], "bad argument"); +#ifdef HAVE_LASH + if(lash_args) lash_args_destroy(lash_args); +#endif + return -1; } } + + argc -= optind; + ++argc; + + MusEGlobal::ruid = getuid(); + MusEGlobal::euid = geteuid(); + MusEGlobal::undoSetuid(); + getCapabilities(); + if (MusEGlobal::debugMsg) + printf("Start euid: %d ruid: %d, Now euid %d\n", + MusEGlobal::euid, MusEGlobal::ruid, geteuid()); + + srand(time(0)); // initialize random number generator + //signal(SIGCHLD, catchSignal); // interferes with initVST(). see also app.cpp, function catchSignal() - /* - if(!MusEGlobal::config.styleSheetFile.isEmpty()) - { - if(MusEGlobal::debugMsg) - printf("loading style sheet <%s> \n", qPrintable(MusEGlobal::config.styleSheetFile)); - QFile cf(MusEGlobal::config.styleSheetFile); - if (cf.open(QIODevice::ReadOnly)) { - QByteArray ss = cf.readAll(); - QString sheet(QString::fromUtf8(ss.data())); - app.setStyleSheet(sheet); - cf.close(); - } - else - printf("loading style sheet <%s> failed\n", qPrintable(MusEGlobal::config.styleSheetFile)); + static QTranslator translator(0); + QString locale(QLocale::system().name()); + if (locale_override.length() >0 ) + locale = locale_override; + if (locale != "C") { + QString loc("muse_"); + loc += locale; + if (translator.load(loc, QString(".")) == false) { + QString lp(MusEGlobal::museGlobalShare); + lp += QString("/locale"); + if (translator.load(loc, lp) == false) { + printf("no locale <%s>/<%s>\n", loc.toLatin1().constData(), lp.toLatin1().constData()); + } + } + app.installTranslator(&translator); + } + printf("LOCALE %s\n",QLocale::system().name().toLatin1().data()); + + if (QLocale::system().name() == "de" || locale_override == "de") { + printf("locale de - setting override parameter.\n"); + MusEGlobal::hIsB = false; } - */ + QApplication::addLibraryPath(MusEGlobal::museGlobalLib + "/qtplugins"); + if (MusEGlobal::debugMsg) { + QStringList list = app.libraryPaths(); + QStringList::Iterator it = list.begin(); + printf("QtLibraryPath:\n"); + while(it != list.end()) { + printf(" <%s>\n", (*it).toLatin1().constData()); + ++it; + } + } + + // Create user templates dir if it doesn't exist + QDir utemplDir = QDir(MusEGlobal::configPath + QString("/templates")); + if(!utemplDir.exists()) + { + utemplDir.mkpath("."); + // Support old versions: Copy existing templates over. + QDir old_utemplDir = QDir(QString(getenv("HOME")) + QString("/templates")); + if(old_utemplDir.exists()) + { + // We really just want these, even though it's possible other filenames were saved. + // Another application might have used that directory. + QStringList flt; + flt << "*.med" << "*.med.gz" << "*.med.bz2" << "*.mid" << "*.midi" << "*.kar"; + old_utemplDir.setNameFilters(flt); + + QFileInfoList fil = old_utemplDir.entryInfoList(); + QFileInfo fi; + foreach(fi, fil) + { + QString fn = fi.fileName(); + QFile f(fi.absoluteFilePath()); + f.copy(utemplDir.absolutePath() + "/" + fn); + } + } + } + + // Create user instruments dir if it doesn't exist + QString uinstrPath = MusEGlobal::configPath + QString("/instruments"); + QDir uinstrDir = QDir(uinstrPath); + if(!uinstrDir.exists()) + uinstrDir.mkpath("."); + if(!MusEGlobal::config.userInstrumentsDir.isEmpty() && MusEGlobal::config.userInstrumentsDir != uinstrPath) // Only if it is different. + { + // Support old versions: Copy existing instruments over. + QDir old_uinstrDir(MusEGlobal::config.userInstrumentsDir); + if(old_uinstrDir.exists()) + { + QStringList flt; flt << "*.idf"; + old_uinstrDir.setNameFilters(flt); + + QFileInfoList fil = old_uinstrDir.entryInfoList(); + QFileInfo fi; + foreach(fi, fil) + { + QString fn = fi.fileName(); + QFile f(fi.absoluteFilePath()); + QFile newf(uinstrDir.absolutePath() + "/" + fn); + if(!newf.exists()) + { + f.copy(newf.fileName()); + } + } + } + } + MusEGlobal::museUserInstruments = uinstrPath; + + // NOTE: May need alternate method, above. + // If setStyle is called after MusE is created, bug: I get transparent background in MDI windows, other artifacts. + // Docs say any style should be set before QApplication created, but this actually works OK up to that point! + QStringList sl = QStyleFactory::keys(); + if (sl.indexOf(MusEGlobal::config.style) != -1) + { + QStyle* style = app.setStyle(MusEGlobal::config.style); + style->setObjectName(MusEGlobal::config.style); + } AL::initDsp(); + MusECore::initAudio(); + + MusEGui::initIcons(); + + MusEGlobal::muse = new MusEGui::MusE(); + app.setMuse(MusEGlobal::muse); + + MusEGui::init_function_dialogs(MusEGlobal::muse); + MusEGui::retranslate_function_dialogs(); + + // SHOW MUSE SPLASH SCREEN + if (MusEGlobal::config.showSplashScreen) { + QPixmap splsh(MusEGlobal::museGlobalShare + "/splash.png"); + + if (!splsh.isNull()) { + QSplashScreen* muse_splash = new QSplashScreen(splsh, + Qt::WindowStaysOnTopHint); + muse_splash->setAttribute(Qt::WA_DeleteOnClose); // Possibly also Qt::X11BypassWindowManagerHint + muse_splash->show(); + QTimer* stimer = new QTimer(0); + muse_splash->connect(stimer, SIGNAL(timeout()), muse_splash, SLOT(close())); + stimer->setSingleShot(true); + stimer->start(6000); + } + } + + if (MusEGlobal::config.useDenormalBias) + printf("Denormal protection enabled.\n"); + if (MusEGlobal::debugMsg) { + printf("global lib: <%s>\n", MusEGlobal::museGlobalLib.toLatin1().constData()); + printf("global share: <%s>\n", MusEGlobal::museGlobalShare.toLatin1().constData()); + printf("muse home: <%s>\n", MusEGlobal::museUser.toLatin1().constData()); + printf("project dir: <%s>\n", MusEGlobal::museProject.toLatin1().constData()); + printf("user instruments: <%s>\n", MusEGlobal::museUserInstruments.toLatin1().constData()); + } + + //rlimit lim; getrlimit(RLIMIT_RTPRIO, &lim); + //printf("RLIMIT_RTPRIO soft:%d hard:%d\n", lim.rlim_cur, lim.rlim_max); // Reported 80, 80 even with non-RT kernel. + if (MusEGlobal::realTimePriority < sched_get_priority_min(SCHED_FIFO)) + MusEGlobal::realTimePriority = sched_get_priority_min(SCHED_FIFO); + else if (MusEGlobal::realTimePriority > sched_get_priority_max(SCHED_FIFO)) + MusEGlobal::realTimePriority = sched_get_priority_max(SCHED_FIFO); + // If we requested to force the midi thread priority... + if(MusEGlobal::midiRTPrioOverride > 0) + { + if (MusEGlobal::midiRTPrioOverride < sched_get_priority_min(SCHED_FIFO)) + MusEGlobal::midiRTPrioOverride = sched_get_priority_min(SCHED_FIFO); + else if (MusEGlobal::midiRTPrioOverride > sched_get_priority_max(SCHED_FIFO)) + MusEGlobal::midiRTPrioOverride = sched_get_priority_max(SCHED_FIFO); + } - if (MusEGlobal::debugMsg) - printf("Start euid: %d ruid: %d, Now euid %d\n", - MusEGlobal::euid, MusEGlobal::ruid, geteuid()); if (MusEGlobal::debugMode) { MusECore::initDummyAudio(); MusEGlobal::realTimeScheduling = false; @@ -481,9 +584,6 @@ else if (noAudio) { MusECore::initDummyAudio(); MusEGlobal::realTimeScheduling = true; - //if (MusEGlobal::debugMode) { // ?? - // MusEGlobal::realTimeScheduling = false; - // } } else if (MusECore::initJackAudio()) { if (!MusEGlobal::debugMode) @@ -507,7 +607,6 @@ fprintf(stderr, "no audio functions available\n"); fprintf(stderr, "*** experimental mode -- no play possible ***\n"); MusECore::initDummyAudio(); - //MusEGlobal::realTimeScheduling = MusEGlobal::audioDevice->isRealtime(); } MusEGlobal::realTimeScheduling = true; } @@ -517,49 +616,28 @@ // ??? With Jack2 this reports true even if it is not running realtime. // Jack says: "Cannot use real-time scheduling (RR/10)(1: Operation not permitted)". The kernel is non-RT. // I cannot seem to find a reliable answer to the question, even with dummy audio and system calls. - //if (MusEGlobal::debugMsg) - // printf("MusEGlobal::realTimeScheduling:%d\n", MusEGlobal::realTimeScheduling); MusEGlobal::useJackTransport.setValue(true); - + // setup the prefetch fifo length now that the segmentSize is known MusEGlobal::fifoLength = 131072 / MusEGlobal::segmentSize; - - argc -= optind; - ++argc; - - if (MusEGlobal::debugMsg) { - printf("global lib: <%s>\n", MusEGlobal::museGlobalLib.toLatin1().constData()); - printf("global share: <%s>\n", MusEGlobal::museGlobalShare.toLatin1().constData()); - printf("muse home: <%s>\n", MusEGlobal::museUser.toLatin1().constData()); - printf("project dir: <%s>\n", MusEGlobal::museProject.toLatin1().constData()); - printf("user instruments: <%s>\n", MusEGlobal::museUserInstruments.toLatin1().constData()); - } + MusECore::initAudioPrefetch(); - static QTranslator translator(0); - QString locale(QApplication::keyboardInputLocale().name()); - if (locale_override.length()) - locale = locale_override; - if (locale != "C") { - QString loc("muse_"); - loc += locale; - if (translator.load(loc, QString(".")) == false) { - QString lp(MusEGlobal::museGlobalShare); - lp += QString("/locale"); - if (translator.load(loc, lp) == false) { - printf("no locale <%s>/<%s>\n", loc.toLatin1().constData(), lp.toLatin1().constData()); - } - } - app.installTranslator(&translator); - } - - if (locale == "de") { - printf("locale de\n"); - MusEGlobal::hIsB = false; - } - - MusEGui::retranslate_function_dialogs(); + // WARNING Must do it this way. Call registerClient long AFTER Jack client is created and MusE ALSA client is + // created (in initMidiDevices), otherwise random crashes can occur within Jack <= 1.9.8. Fixed in Jack 1.9.9. Tim. + MusECore::initMidiDevices(); + // Wait until things have settled. One second seems OK so far. + for(int t = 0; t < 100; ++t) + usleep(10000); + // Now it is safe to call registerClient. + MusEGlobal::audioDevice->registerClient(); + MusECore::initMidiController(); + MusECore::initMidiInstruments(); + MusECore::initMidiPorts(); + MusECore::initMidiSequencer(); + MusEGlobal::midiSeq->checkAndReportTimingResolution(); + if (MusEGlobal::loadPlugins) MusECore::initPlugins(); @@ -571,34 +649,9 @@ MusECore::initOSC(); - MusEGui::initIcons(); - MusECore::initMetronome(); - //QApplication::clipboard()->setSelectionMode(false); ddskrjo obsolete even in Qt3 - - QApplication::addLibraryPath(MusEGlobal::museGlobalLib + "/qtplugins"); - if (MusEGlobal::debugMsg) { - QStringList list = app.libraryPaths(); - QStringList::Iterator it = list.begin(); - printf("QtLibraryPath:\n"); - while(it != list.end()) { - printf(" <%s>\n", (*it).toLatin1().constData()); - ++it; - } - } - - MusEGlobal::muse = new MusEGui::MusE(argc, &argv[optind]); - app.setMuse(MusEGlobal::muse); - MusEGlobal::muse->setWindowIcon(*MusEGui::museIcon); - - if (!MusEGlobal::debugMode) { - if (mlockall(MCL_CURRENT | MCL_FUTURE)) - perror("WARNING: Cannot lock memory:"); - } - - MusEGlobal::muse->show(); - MusEGlobal::muse->seqStart(); + MusECore::initMidiSynth(); #ifdef HAVE_LASH { @@ -608,19 +661,30 @@ int lash_flags = LASH_Config_File; const char *muse_name = PACKAGE_NAME; MusEGui::lash_client = lash_init (lash_args, muse_name, lash_flags, LASH_PROTOCOL(2,0)); - lash_alsa_client_id (MusEGui::lash_client, snd_seq_client_id (MusECore::alsaSeq)); + if(MusECore::alsaSeq) + lash_alsa_client_id (MusEGui::lash_client, snd_seq_client_id (MusECore::alsaSeq)); if (!noAudio) { const char *jack_name = MusEGlobal::audioDevice->clientName(); lash_jack_client_name (MusEGui::lash_client, jack_name); } } + if(lash_args) + lash_args_destroy(lash_args); } #endif /* HAVE_LASH */ + if (!MusEGlobal::debugMode) { + if (mlockall(MCL_CURRENT | MCL_FUTURE)) + perror("WARNING: Cannot lock memory:"); + } + + MusEGlobal::muse->show(); + MusEGlobal::muse->seqStart(); + //-------------------------------------------------- - // Auto-fill the midi ports, if appropriate. p4.0.41 + // Auto-fill the midi ports, if appropriate. //-------------------------------------------------- - if(argc < 2 && MusEGlobal::config.startMode == 1) + if(argc < 2 && (MusEGlobal::config.startMode == 1 || MusEGlobal::config.startMode == 2) && !MusEGlobal::config.startSongLoadConfig) { MusEGui::populateMidiPorts(); //MusEGlobal::muse->changeConfig(true); // save configuration file @@ -630,8 +694,8 @@ //-------------------------------------------------- // Load the default song. //-------------------------------------------------- - MusEGlobal::muse->loadDefaultSong(argc, &argv[optind]); // p4.0.41 - + MusEGlobal::muse->loadDefaultSong(argc, &argv[optind]); + QTimer::singleShot(100, MusEGlobal::muse, SLOT(showDidYouKnowDialog())); int rv = app.exec(); diff -Nru muse-2.0~rc2/muse/marker/marker.cpp muse-2.0/muse/marker/marker.cpp --- muse-2.0~rc2/muse/marker/marker.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/marker/marker.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -84,7 +84,6 @@ for (ciMarker i = begin(); i != end(); ++i) { const Marker& m = i->second; xml.put(level, "", - //m.tick(), m.type()==Pos::FRAMES, m.name().toLatin1().constData()); m.tick(), m.type()==Pos::FRAMES, Xml::xmlString(m.name()).toLatin1().constData()); } } diff -Nru muse-2.0~rc2/muse/marker/markerview.cpp muse-2.0/muse/marker/markerview.cpp --- muse-2.0~rc2/muse/marker/markerview.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/marker/markerview.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -30,7 +30,6 @@ #include "sync.h" #include "icons.h" #include "song.h" -///#include "posedit.h" #include "awl/posedit.h" #include @@ -121,7 +120,6 @@ QString s; int bar, beat; unsigned tick; - ///sigmap.tickValues(v, &bar, &beat, &tick); AL::sigmap.tickValues(v, &bar, &beat, &tick); s.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick); setText(COL_TICK, s); @@ -168,10 +166,8 @@ //--------------------------------------------------------- MarkerView::MarkerView(QWidget* parent) - : TopWin(TopWin::MARKER, parent, "markerview", Qt::Window /*| WDestructiveClose*/) + : TopWin(TopWin::MARKER, parent, "markerview", Qt::Window) { - //setAttribute(Qt::WA_DeleteOnClose); - setWindowTitle(tr("MusE: Marker")); QAction* markerAdd = new QAction(QIcon(*flagIcon), tr("add marker"), this); @@ -181,10 +177,6 @@ connect(markerDelete, SIGNAL(activated()), SLOT(deleteMarker())); //---------Pulldown Menu---------------------------- - /* We probably don't need an empty menu - Orcan - QMenu* fileMenu = new QMenu(tr("&File")); - menuBar()->addMenu(fileMenu); - */ QMenu* editMenu = menuBar()->addMenu(tr("&Edit")); editMenu->addAction(markerAdd); @@ -198,23 +190,11 @@ // Toolbars --------------------------------------------------------- - QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); - undo_tools->setObjectName("Undo/Redo tools"); - undo_tools->addActions(MusEGlobal::undoRedo->actions()); - QToolBar* edit = addToolBar(tr("edit tools")); edit->setObjectName("marker edit tools"); edit->addAction(markerAdd); edit->addAction(markerDelete); - QToolBar* panic_toolbar = addToolBar(tr("panic")); - panic_toolbar->setObjectName("panic"); - panic_toolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport_toolbar = addToolBar(tr("transport")); - transport_toolbar->setObjectName("transport"); - transport_toolbar->addActions(MusEGlobal::transportAction->actions()); - //--------------------------------------------------- // master //--------------------------------------------------- @@ -250,7 +230,6 @@ editTick->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed)); - ///editSMPTE = new PosEdit; editSMPTE = new Awl::PosEdit; editSMPTE->setSmpte(true); editSMPTE->setSizePolicy(QSizePolicy(QSizePolicy::Fixed, @@ -292,12 +271,11 @@ // Rest //--------------------------------------------------- - //connect(song, SIGNAL(songChanged(int)), SLOT(updateList())); connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); updateList(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); // work around for probable QT/WM interaction bug. // for certain window managers, e.g xfce, this window is @@ -308,14 +286,11 @@ } //--------------------------------------------------------- -// MArkerView +// MarkerView //--------------------------------------------------------- MarkerView::~MarkerView() { - //printf("MarkerView::~MarkerView() before undoRedo->removeFrom(tools)\n"); - - // undoRedo->removeFrom(tools); // p4.0.6 Removed } //--------------------------------------------------------- @@ -519,9 +494,6 @@ MusECore::Marker* m = &i->second; // Changed p3.3.43 - //QString tick; - //tick.setNum(i->first); - //new MarkerItem(table, m); MarkerItem* item = new MarkerItem(table, m); if(m == selm) { @@ -560,8 +532,6 @@ lock->setChecked(item->lock()); lock->setEnabled(true); - //printf("MarkerView::markerSelectionChanged item->lock:%d\n", item->lock()); - editSMPTE->setEnabled(item->lock()); editTick->setEnabled(!item->lock()); } @@ -625,9 +595,6 @@ void MarkerView::markerChanged(int val) { - //if (val != MusECore::Song::MARKER_CUR) - // return; - // p3.3.43 switch(val) { // MARKER_CUR, MARKER_ADD, MARKER_REMOVE, MARKER_NAME, @@ -685,8 +652,7 @@ if (i->second.tick() < curPos && i->second.tick() > nextPos) nextPos = i->second.tick(); } -/* if (nextPos == 0) - return;*/ + MusECore::Pos p(nextPos, true); MusEGlobal::song->setPos(0, p, true, true, false); } diff -Nru muse-2.0~rc2/muse/marker/markerview.h muse-2.0/muse/marker/markerview.h --- muse-2.0~rc2/muse/marker/markerview.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/marker/markerview.h 2012-06-30 19:24:43.000000000 +0200 @@ -72,8 +72,6 @@ QTreeWidget* table; QLineEdit* editName; - ///PosEdit* editSMPTE; - ///PosEdit* editTick; Awl::PosEdit* editSMPTE; Awl::PosEdit* editTick; QToolButton* lock; diff -Nru muse-2.0~rc2/muse/master/lmaster.cpp muse-2.0/muse/master/lmaster.cpp --- muse-2.0~rc2/muse/master/lmaster.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/master/lmaster.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -29,10 +29,9 @@ #include "globals.h" #include "app.h" #include "audio.h" -//#include "posedit.h" -//#include "sigedit.h" #include "shortcuts.h" #include "debug.h" +#include "gconfig.h" #include #include @@ -157,8 +156,8 @@ editingNewItem = false; setWindowTitle(tr("MusE: Mastertrack")); setMinimumHeight(100); - setFixedWidth(400); - setFocusPolicy(Qt::StrongFocus); + //setFixedWidth(400); // FIXME: Arbitrary. But without this, sig editor is too wide. Must fix sig editor width... + setFocusPolicy(Qt::NoFocus); comboboxTimer=new QTimer(this); @@ -203,15 +202,14 @@ connect(signalMapper, SIGNAL(mapped(int)), SLOT(cmd(int))); // Toolbars --------------------------------------------------------- - QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); - undo_tools->setObjectName("Undo/Redo tools"); - undo_tools->addActions(MusEGlobal::undoRedo->actions()); - QToolBar* edit = addToolBar(tr("Edit tools")); edit->setObjectName("Master List Edit Tools"); QToolButton* tempoButton = new QToolButton(); QToolButton* timeSigButton = new QToolButton(); QToolButton* keyButton = new QToolButton(); + tempoButton->setFocusPolicy(Qt::NoFocus); + timeSigButton->setFocusPolicy(Qt::NoFocus); + keyButton->setFocusPolicy(Qt::NoFocus); tempoButton->setText(tr("Tempo")); timeSigButton->setText(tr("Timesig")); keyButton->setText(tr("Key")); @@ -222,18 +220,6 @@ edit->addWidget(timeSigButton); edit->addWidget(keyButton); - QToolBar* panic_toolbar = addToolBar(tr("panic")); - panic_toolbar->setObjectName("panic"); - panic_toolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport_toolbar = addToolBar(tr("transport")); - transport_toolbar->setObjectName("transport"); - transport_toolbar->addActions(MusEGlobal::transportAction->actions()); - - ///Q3Accel* qa = new Q3Accel(this); - ///qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Z), song, SLOT(undo())); - ///qa->connectItem(qa->insertItem(Qt::CTRL+Qt::Key_Y), song, SLOT(redo())); - //--------------------------------------------------- // master //--------------------------------------------------- @@ -254,25 +240,26 @@ // Rest //--------------------------------------------------- -// QSizeGrip* corner = new QSizeGrip(mainw); - mainGrid->setRowStretch(0, 100); mainGrid->setColumnStretch(0, 100); mainGrid->addWidget(view, 0, 0); -// mainGrid->addWidget(corner, 1, 1, AlignBottom | AlignRight); updateList(); tempo_editor = new QLineEdit(view->viewport()); + tempo_editor->setFrame(false); tempo_editor->hide(); connect(tempo_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); sig_editor = new SigEdit(view->viewport()); + sig_editor->setFrame(false); sig_editor->hide(); connect(sig_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); pos_editor = new Awl::PosEdit(view->viewport()); + pos_editor->setFrame(false); pos_editor->hide(); connect(pos_editor, SIGNAL(returnPressed()), SLOT(returnPressed())); key_editor = new QComboBox(view->viewport()); + key_editor->setFrame(false); key_editor->addItems(MusECore::keyStrs); key_editor->hide(); connect(key_editor, SIGNAL(activated(int)), SLOT(returnPressed())); @@ -287,7 +274,7 @@ connect(keyButton, SIGNAL(clicked()), SLOT(insertKey())); initShortcuts(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } //--------------------------------------------------------- @@ -296,10 +283,22 @@ LMaster::~LMaster() { - //undoRedo->removeFrom(tools); // p4.0.6 Removed } //--------------------------------------------------------- +// focusCanvas +//--------------------------------------------------------- + +void LMaster::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + view->setFocus(); + view->activateWindow(); + } +} + +//--------------------------------------------------------- // insertSig //--------------------------------------------------------- @@ -491,9 +490,9 @@ // select //--------------------------------------------------------- +//DELETETHIS (whole function)? or is this todo? void LMaster::select(QTreeWidgetItem* /*item*/, QTreeWidgetItem* /*previous_item*/) { -// printf("select %x\n", unsigned(item)); } //--------------------------------------------------------- @@ -530,7 +529,6 @@ case LMASTER_KEYEVENT: { LMasterKeyEventItem* k = (LMasterKeyEventItem*) l; - //keymap.delKey(l->tick()); MusEGlobal::audio->msgRemoveKey(k->tick(), k->key()); break; } @@ -565,7 +563,6 @@ */ void LMaster::itemPressed(QTreeWidgetItem* i, int column) { - //printf("itemPressed, column: %d\n", column); if (editedItem) { if (editorColumn != column || editedItem != i) returnPressed(); @@ -584,9 +581,10 @@ //--------------------------------------------------------- void LMaster::itemDoubleClicked(QTreeWidgetItem* i) { - //printf("itemDoubleClicked\n"); emit seekTo(((LMasterLViewItem*) i)->tick()); + QFontMetrics fm(font()); + int fnt_w = fm.width('0'); if (!editedItem && editorColumn == LMASTER_VAL_COL) { editedItem = (LMasterLViewItem*) i; QRect itemRect = view->visualItemRect(editedItem); @@ -595,7 +593,6 @@ itemRect.setX(x1); //Qt makes crazy things with itemRect if this is called directly.. if (editingNewItem) { - QFontMetrics fm(font()); int fw = style()->pixelMetric(QStyle::PM_DefaultFrameWidth,0 , this); // ddskrjo 0 int h = fm.height() + fw * 2; itemRect.setWidth(view->columnWidth(LMASTER_VAL_COL)); @@ -613,9 +610,11 @@ tempo_editor->selectAll(); } else if (editedItem->getType() == LMASTER_SIGEVENT) { // Edit signatur value: - //sig_editor->setValue(editedItem->text(LMASTER_VAL_COL)); sig_editor->setValue(((LMasterSigEventItem*)editedItem)->getEvent()->sig); - sig_editor->setGeometry(itemRect); + int w = fnt_w * 14; + if(w > itemRect.width()) + w = itemRect.width(); + sig_editor->setGeometry(itemRect.x(), itemRect.y(), w, itemRect.height()); sig_editor->show(); sig_editor->setFocus(); } @@ -643,8 +642,11 @@ else { pos_editor->setValue(editedItem->tick()); QRect itemRect = view->visualItemRect(editedItem); - itemRect.setX(0); - itemRect.setWidth(view->columnWidth(LMASTER_BEAT_COL)); + itemRect.setX(view->indentation()); + int w = view->columnWidth(LMASTER_BEAT_COL) - view->indentation(); + if(w < (fnt_w * 13)) + w = fnt_w * 13; + itemRect.setWidth(w); pos_editor->setGeometry(itemRect); pos_editor->show(); pos_editor->setFocus(); @@ -736,7 +738,6 @@ } else MusEGlobal::audio->msgAddSig(newtick, z, n, false); - //MusEGlobal::audio->msgAddSig(newtick, z, n, true); // Select the item: QTreeWidgetItem* newSelected = (QTreeWidgetItem*) getItemAtPos(newtick, LMASTER_SIGEVENT); @@ -773,7 +774,6 @@ // else if (editedItem->getType() == LMASTER_SIGEVENT && editorColumn == LMASTER_VAL_COL) { - ///Sig newSig = sig_editor->sig(); AL::TimeSignature newSig = sig_editor->sig(); sig_editor->hide(); @@ -782,7 +782,6 @@ if(newSig.isValid()) { LMasterSigEventItem* e = (LMasterSigEventItem*) editedItem; - //printf("adding sig %d %d\n", e->z(),e->n()); int tick = e->tick(); if (!editingNewItem) { MusEGlobal::song->startUndo(); @@ -877,7 +876,6 @@ int msec = int((time - (min*60 + sec)) * 1000.0); c2.sprintf("%03d:%02d:%03d", min, sec, msec); c3 = "Key"; - //int dt = ev.key; c4 = keyToString(ev.key); setText(0, c1); setText(1, c2); @@ -896,13 +894,12 @@ { tempoEvent = ev; unsigned t = ev->tick; - //QString c1, c2, c3, c4; int bar, beat; unsigned tick; AL::sigmap.tickValues(t, &bar, &beat, &tick); c1.sprintf("%04d.%02d.%03d", bar+1, beat+1, tick); - double time = double(MusEGlobal::tempomap.tick2frame(t) /*ev->frame*/) / double(MusEGlobal::sampleRate); + double time = double(MusEGlobal::tempomap.tick2frame(t)) / double(MusEGlobal::sampleRate); int min = int(time) / 60; int sec = int(time) % 60; int msec = int((time - (min*60 + sec)) * 1000.0); @@ -950,7 +947,7 @@ void LMaster::tempoButtonClicked() { LMasterTempoItem* lastTempo = (LMasterTempoItem*) getLastOfType(LMASTER_TEMPO); -// QString beatString = ((LMasterLViewItem*)lastTempo)->text(LMASTER_BEAT_COL); +// QString beatString = ((LMasterLViewItem*)lastTempo)->text(LMASTER_BEAT_COL); DELETETHIS? // int m, b, t; // Pos p = Pos(beatString); // p.mbt(&m, &b, &t); @@ -960,7 +957,6 @@ MusECore::TEvent* ev = new MusECore::TEvent(lastTempo->tempo(), newTick); new LMasterTempoItem(view, ev); QTreeWidgetItem* newTempoItem = view->topLevelItem(0); - //LMasterTempoItem* newTempoItem = new LMasterTempoItem(view, ev); editingNewItem = true; // State editorColumn = LMASTER_VAL_COL; // Set that we edit editorColumn @@ -977,7 +973,7 @@ void LMaster::timeSigButtonClicked() { LMasterSigEventItem* lastSig = (LMasterSigEventItem*) getLastOfType(LMASTER_SIGEVENT); -// QString beatString = ((LMasterLViewItem*)lastSig)->text(LMASTER_BEAT_COL); +// QString beatString = ((LMasterLViewItem*)lastSig)->text(LMASTER_BEAT_COL); DELETETHIS // int m, b, t; // Pos p = Pos(beatString); // p.mbt(&m, &b, &t); @@ -987,7 +983,6 @@ AL::SigEvent* ev = new AL::SigEvent(AL::TimeSignature(lastSig->z(), lastSig->n()), newTick); new LMasterSigEventItem(view, ev); QTreeWidgetItem* newSigItem = view->topLevelItem(0); - //LMasterSigEventItem* newSigItem = new LMasterSigEventItem(view, ev); editingNewItem = true; // State editorColumn = LMASTER_VAL_COL; // Set that we edit editorColumn @@ -1004,13 +999,12 @@ { LMasterKeyEventItem* lastKey = (LMasterKeyEventItem*) getLastOfType(LMASTER_KEYEVENT); - //QString beatString = ((LMasterLViewItem*)lastKey)->text(LMASTER_BEAT_COL); + //QString beatString = ((LMasterLViewItem*)lastKey)->text(LMASTER_BEAT_COL); DELETETHIS //int m, b, t; //Pos p = Pos(beatString); //p.mbt(&m, &b, &t); //m++; //Next bar - //int newTick = AL::sigmap.bar2tick(m, b, t); int newTick = MusEGlobal::song->cpos(); new LMasterKeyEventItem(view, MusECore::KeyEvent(lastKey->key(), newTick)); QTreeWidgetItem* newKeyItem = view->topLevelItem(0); @@ -1078,17 +1072,4 @@ key_editor->showPopup(); } -//void LMaster::keyPressEvent(QKeyEvent*ev) -//{ -// switch (ev->key()) { -// case Qt::Key_Return: -// // add return as a valid action for editing values too -// cmd (CMD_EDIT_VALUE); -// break; -// default: -// break; -// } -// MidiEditor::keyPressEvent(ev); -//} - } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/master/lmaster.h muse-2.0/muse/master/lmaster.h --- muse-2.0~rc2/muse/master/lmaster.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/master/lmaster.h 2012-06-30 19:24:42.000000000 +0200 @@ -28,7 +28,6 @@ #include "cobject.h" #include "tempo.h" #include "keyevent.h" -///#include "sig.h" #include "al/sig.h" #include @@ -154,9 +153,6 @@ QAction *tempoAction, *signAction, *posAction, *valAction, *delAction, *keyAction; -// protected: -// virtual void keyPressEvent(QKeyEvent*); - private slots: void select(QTreeWidgetItem*, QTreeWidgetItem*); void itemDoubleClicked(QTreeWidgetItem* item); @@ -171,6 +167,7 @@ public slots: void songChanged(int); void configChanged(); + void focusCanvas(); signals: void isDeleting(MusEGui::TopWin*); diff -Nru muse-2.0~rc2/muse/master/master.cpp muse-2.0/muse/master/master.cpp --- muse-2.0~rc2/muse/master/master.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/master/master.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -21,7 +21,7 @@ //========================================================= #include -#include +#include #include #include @@ -138,7 +138,7 @@ void Master::leaveEvent(QEvent*) { emit tempoChanged(-1); - emit timeChanged(MAXINT); + emit timeChanged(INT_MAX); } //--------------------------------------------------------- @@ -245,7 +245,7 @@ { QPoint pos = event->pos(); // QPoint dist = pos - start; -// bool moving = dist.y() >= 3 || dist.y() <= 3 || dist.x() >= 3 || dist.x() <= 3; +// bool moving = dist.y() >= 3 || dist.y() <= 3 || dist.x() >= 3 || dist.x() <= 3; DELETETHIS switch (drag) { case DRAG_NEW: diff -Nru muse-2.0~rc2/muse/master/masteredit.cpp muse-2.0/muse/master/masteredit.cpp --- muse-2.0~rc2/muse/master/masteredit.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/master/masteredit.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -35,11 +35,12 @@ #include "xml.h" #include "lcombo.h" #include "doublelabel.h" -///#include "sigedit.h" #include "globals.h" #include "app.h" +#include "gconfig.h" +#include "audio.h" -#include +#include #include #include @@ -76,7 +77,7 @@ return; if (type & SC_TEMPO) { - int tempo = MusEGlobal::tempomap.tempo(MusEGlobal::song->cpos()); + int tempo = MusEGlobal::tempomap.tempoAt(MusEGlobal::song->cpos()); // Bypass the useList flag and read from the list. curTempo->blockSignals(true); curTempo->setValue(double(60000000.0/tempo)); @@ -105,37 +106,23 @@ : MidiEditor(TopWin::MASTER, _rasterInit, 0) { setWindowTitle(tr("MusE: Mastertrack")); + setFocusPolicy(Qt::NoFocus); _raster = 0; // measure //---------Pulldown Menu---------------------------- -// QPopupMenu* file = new QPopupMenu(this); -// menuBar()->insertItem("&File", file); - QMenu* settingsMenu = menuBar()->addMenu(tr("Window &Config")); settingsMenu->addAction(subwinAction); settingsMenu->addAction(shareAction); settingsMenu->addAction(fullscreenAction); // Toolbars --------------------------------------------------------- - QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); - undo_tools->setObjectName("Undo/Redo tools"); - undo_tools->addActions(MusEGlobal::undoRedo->actions()); - - - QToolBar* panic_toolbar = addToolBar(tr("panic")); - panic_toolbar->setObjectName("panic"); - panic_toolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport_toolbar = addToolBar(tr("transport")); - transport_toolbar->setObjectName("transport"); - transport_toolbar->addActions(MusEGlobal::transportAction->actions()); - MusEGui::EditToolBar* tools2 = new MusEGui::EditToolBar(this, MusEGui::PointerTool | MusEGui::PencilTool | MusEGui::RubberTool); addToolBar(tools2); QToolBar* enableMaster = addToolBar(tr("Enable master")); enableMaster->setObjectName("Enable master"); enableButton = new QToolButton(); + enableButton->setFocusPolicy(Qt::NoFocus); enableButton->setCheckable(true); enableButton->setText(tr("Enable")); enableButton->setToolTip(tr("Enable usage of master track")); @@ -163,7 +150,7 @@ QT_TRANSLATE_NOOP("MusEGui::MasterEdit", "Off"), QT_TRANSLATE_NOOP("MusEGui::MasterEdit", "Bar"), "1/2", "1/4", "1/8", "1/16" }; rasterLabel = new MusEGui::LabelCombo(tr("Snap"), 0); - rasterLabel->setFocusPolicy(Qt::NoFocus); + rasterLabel->setFocusPolicy(Qt::TabFocus); for (int i = 0; i < 6; i++) rasterLabel->insertItem(i, tr(rastval[i])); rasterLabel->setCurrentIndex(1); @@ -173,17 +160,16 @@ //---------values for current position--------------- info->addWidget(new QLabel(tr("CurPos "))); curTempo = new MusEGui::TempoEdit(0); - curSig = new SigEdit(0); + curSig = new SigEdit(0); // SigEdit is already StrongFocus. + curTempo->setFocusPolicy(Qt::StrongFocus); curSig->setValue(AL::TimeSignature(4, 4)); curTempo->setToolTip(tr("tempo at current position")); curSig->setToolTip(tr("time signature at current position")); info->addWidget(curTempo); info->addWidget(curSig); - ///connect(curSig, SIGNAL(valueChanged(int,int)), song, SLOT(setSig(int,int))); - connect(curSig, SIGNAL(valueChanged(const AL::TimeSignature&)), MusEGlobal::song, SLOT(setSig(const AL::TimeSignature&))); - - ///connect(curTempo, SIGNAL(valueChanged(double)), song, SLOT(setTempo(double))); - connect(curTempo, SIGNAL(tempoChanged(double)), MusEGlobal::song, SLOT(setTempo(double))); + + connect(curSig, SIGNAL(valueChanged(const AL::TimeSignature&)), SLOT(sigChange(const AL::TimeSignature&))); + connect(curTempo, SIGNAL(tempoChanged(double)), SLOT(tempoChange(double))); //--------------------------------------------------- // master @@ -196,7 +182,7 @@ vscroll->setRange(30000, 250000); time1 = new MusEGui::MTScale(&_raster, mainw, xscale); sign = new MusEGui::SigScale(&_raster, mainw, xscale); -// thits = new MusEGui::HitScale(&_raster, mainw, xscale); +// thits = new MusEGui::HitScale(&_raster, mainw, xscale); DELETETHIS what IS this? delete zhits as well canvas = new Master(this, mainw, xscale, yscale); @@ -209,8 +195,6 @@ // Rest //--------------------------------------------------- -// QSizeGrip* corner = new QSizeGrip(mainw); - mainGrid->setRowStretch(5, 100); mainGrid->setColumnStretch(1, 100); @@ -219,19 +203,18 @@ mainGrid->addWidget(MusECore::hLine(mainw), 2, 1); mainGrid->addWidget(sign, 3, 1); mainGrid->addWidget(MusECore::hLine(mainw), 4, 1); -// mainGrid->addWidget(thits, 5, 1); +// mainGrid->addWidget(thits, 5, 1); DELETETHIS // mainGrid->addWidget(MusECore::hLine(mainw), 6, 1); mainGrid->addWidget(canvas, 5, 1); mainGrid->addWidget(tscale, 5, 0); mainGrid->addWidget(MusECore::hLine(mainw), 6, 1); -// mainGrid->addWidget(zhits, 9, 1); +// mainGrid->addWidget(zhits, 9, 1); DELETETHIS // mainGrid->addWidget(MusECore::hLine(mainw), 7, 1); mainGrid->addWidget(time2, 7, 1); mainGrid->addWidget(hscroll, 8, 1); mainGrid->addWidget(vscroll, 0, 2, 10, 1); -// mainGrid->addWidget(corner, 9, 2, AlignBottom | AlignRight); - canvas->setFocus(); // Tim. + canvas->setFocus(); connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool(int))); connect(vscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setYPos(int))); @@ -242,20 +225,20 @@ connect(hscroll, SIGNAL(scrollChanged(int)), time1, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scrollChanged(int)), sign, SLOT(setXPos(int))); -// connect(hscroll, SIGNAL(scrollChanged(int)), thits, SLOT(setXPos(int))); +// connect(hscroll, SIGNAL(scrollChanged(int)), thits, SLOT(setXPos(int))); DELETETHIS connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); -// connect(hscroll, SIGNAL(scrollChanged(int)), zhits, SLOT(setXPos(int))); +// connect(hscroll, SIGNAL(scrollChanged(int)), zhits, SLOT(setXPos(int)));DELETETHIS connect(hscroll, SIGNAL(scrollChanged(int)), time2, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scaleChanged(int)), time1, SLOT(setXMag(int))); connect(hscroll, SIGNAL(scaleChanged(int)), sign, SLOT(setXMag(int))); -// connect(hscroll, SIGNAL(scaleChanged(int)), thits, SLOT(setXMag(int))); +// connect(hscroll, SIGNAL(scaleChanged(int)), thits, SLOT(setXMag(int)));DELETETHIS connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); -// connect(hscroll, SIGNAL(scaleChanged(int)), zhits, SLOT(setXMag(int))); +// connect(hscroll, SIGNAL(scaleChanged(int)), zhits, SLOT(setXMag(int))); DELETETHIS connect(hscroll, SIGNAL(scaleChanged(int)), time2, SLOT(setXMag(int))); connect(time1, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); -// connect(sign, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); +// connect(sign, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); DELETETHIS // connect(thits, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); // connect(canvas, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); // connect(zhits, SIGNAL(timeChanged(unsigned)), pos, SLOT(setValue(unsigned))); @@ -269,8 +252,13 @@ connect(canvas, SIGNAL(followEvent(int)), hscroll, SLOT(setOffset(int))); connect(canvas, SIGNAL(timeChanged(unsigned)), SLOT(setTime(unsigned))); + connect(curSig, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(curSig, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(curTempo, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(curTempo, SIGNAL(escapePressed()), SLOT(focusCanvas())); + initTopwinState(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } //--------------------------------------------------------- @@ -279,7 +267,6 @@ MasterEdit::~MasterEdit() { - //undoRedo->removeFrom(tools); // p4.0.6 Removed } //--------------------------------------------------------- @@ -310,7 +297,7 @@ break; case MusECore::Xml::TagEnd: if (tag == "master") { - // raster setzen + // set raster int item = 0; switch(_raster) { case 1: item = 0; break; @@ -386,6 +373,19 @@ } //--------------------------------------------------------- +// focusCanvas +//--------------------------------------------------------- + +void MasterEdit::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + canvas->setFocus(); + canvas->activateWindow(); + } +} + +//--------------------------------------------------------- // _setRaster //--------------------------------------------------------- @@ -396,6 +396,7 @@ }; _raster = rasterTable[index]; _rasterInit = _raster; + focusCanvas(); } //--------------------------------------------------------- @@ -406,7 +407,7 @@ { if (idx == 0) { int z, n; - int tempo = MusEGlobal::tempomap.tempo(val); + int tempo = MusEGlobal::tempomap.tempoAt(val); // Bypass the useList flag and read from the list. AL::sigmap.timesig(val, z, n); curTempo->blockSignals(true); curSig->blockSignals(true); @@ -425,7 +426,7 @@ void MasterEdit::setTime(unsigned tick) { - if (tick == MAXINT) + if (tick == INT_MAX) cursorPos->setEnabled(false); else { cursorPos->setEnabled(true); @@ -448,5 +449,24 @@ tempo->setValue(val); } } + +void MasterEdit::sigChange(const AL::TimeSignature& sig) +{ + // TODO: FIXME: Tempo/sig undo + redo broken here. Either fix tempo and sig, or finish something here... + MusEGlobal::audio->msgAddSig(MusEGlobal::song->cPos().tick(), sig.z, sig.n); // Add will replace if found. +} + +void MasterEdit::tempoChange(double t) +{ + if(int(t) == 0) + return; + + // TODO: FIXME: Tempo/sig undo + redo broken here. Either fix tempo and sig, or finish something here... Also in transport. + //MusEGlobal::song->startUndo(); + //iTEvent e = find(tick); + //MusEGlobal::audio->msgDeleteTempo(it->first, it->second, false); + MusEGlobal::audio->msgAddTempo(MusEGlobal::song->cPos().tick(), int(60000000.0/t), true); // Add will replace if found. + //MusEGlobal::song->endUndo(SC_TEMPO); +} } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/master/masteredit.h muse-2.0/muse/master/masteredit.h --- muse-2.0~rc2/muse/master/masteredit.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/master/masteredit.h 2012-06-30 19:24:42.000000000 +0200 @@ -85,10 +85,12 @@ void posChanged(int,unsigned,bool); void setTime(unsigned); void setTempo(int); + void sigChange(const AL::TimeSignature&); + void tempoChange(double); public slots: void songChanged(int); -// void tempoChanged(double); + void focusCanvas(); signals: void isDeleting(MusEGui::TopWin*); diff -Nru muse-2.0~rc2/muse/master/tscale.cpp muse-2.0/muse/master/tscale.cpp --- muse-2.0~rc2/muse/master/tscale.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/master/tscale.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -38,7 +38,6 @@ : View(parent, 1, ymag) { setFont(MusEGlobal::config.fonts[5]); - //int w = 4 * QFontMetrics(MusEGlobal::config.fonts[4]).width('0'); int w = 4 * fontMetrics().width('0'); setFixedWidth(w); setMouseTracking(true); @@ -52,7 +51,6 @@ { int y = r.y(); int h = r.height(); - //p.setFont(MusEGlobal::config.fonts[4]); QString s; for (int i = 30000; i <= 250000; i += 10000) { int yy = mapy(280000 - i); @@ -62,8 +60,6 @@ continue; p.drawLine(0, yy, width(), yy); s.setNum(i/1000); - //QFontMetrics fm(MusEGlobal::config.fonts[4]); - //p.drawText(width() - fm.width(s) - 1, yy-2, s); p.drawText(width() - fontMetrics().width(s) - 1, yy-2, s); // Use the window font. Tim p4.0.31 } } diff -Nru muse-2.0~rc2/muse/memory.cpp muse-2.0/muse/memory.cpp --- muse-2.0~rc2/muse/memory.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/memory.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -61,8 +61,6 @@ void Pool::grow(int idx) { -// printf("grow memory idx %d\n", idx); - int esize = (idx+1) * sizeof(unsigned long); Chunk* n = new Chunk; @@ -93,14 +91,13 @@ }; typedef std::list > List; -// typedef std::vector List; typedef List::iterator iList; //--------------------------------------------------------- // main // 2.8 s normal 0.7 vector // 2.5 s RTalloc -// 1.18 alle optimierungen (0.97) +// 1.18 all optimisations (0.97) //--------------------------------------------------------- int main() diff -Nru muse-2.0~rc2/muse/midi.cpp muse-2.0/muse/midi.cpp --- muse-2.0~rc2/muse/midi.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midi.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -24,7 +24,6 @@ #include #include -#include #include "song.h" #include "midi.h" @@ -35,6 +34,7 @@ #include "marker/marker.h" #include "midiport.h" #include "midictrl.h" +#include "sync.h" #include "audio.h" #include "mididev.h" #include "driver/alsamidi.h" @@ -168,7 +168,6 @@ case 0x43: s = "Yamaha: "; break; case 0x44: s = "Casio"; break; case 0x45: s = "Akai"; break; - //case 0x7c: s = "MusE Soft Synth"; break; case MUSE_SYNTH_SYSEX_MFG_ID: s = "MusE Soft Synth"; break; // p4.0.27 case 0x7d: s = "Educational Use"; break; case 0x7e: s = "Universal: Non Real Time"; break; @@ -424,7 +423,7 @@ break; case 0x6: // Marker { - unsigned ltick = CALC_TICK(tick);//(tick * MusEGlobal::config.division + div/2) / div; + unsigned ltick = CALC_TICK(tick); MusEGlobal::song->addMarker(QString((const char*)(data)), ltick, false); } break; @@ -440,8 +439,8 @@ case 0x51: // Tempo { unsigned tempo = data[2] + (data[1] << 8) + (data[0] <<16); - unsigned ltick = CALC_TICK(tick);// (unsigned(tick) * unsigned(MusEGlobal::config.division) + unsigned(div/2)) / unsigned(div); - // After ca 10 mins 32 bits will not be enough... This expression has to be changed/factorized or so in some "sane" way... + unsigned ltick = CALC_TICK(tick); + // FIXME: After ca 10 mins 32 bits will not be enough... This expression has to be changed/factorized or so in some "sane" way... MusEGlobal::tempomap.addTempo(ltick, tempo); } break; @@ -452,8 +451,7 @@ int timesig_n = 1; for (int i = 0; i < n; i++) timesig_n *= 2; - int ltick = CALC_TICK(tick);//(tick * MusEGlobal::config.division + div/2) / div; - ///sigmap.add(ltick, timesig_z, timesig_n); + int ltick = CALC_TICK(tick); AL::sigmap.add(ltick, AL::TimeSignature(timesig_z, timesig_n)); } break; @@ -536,9 +534,9 @@ i->first, ev.pitch(), ev.velo()); continue; } - int tick = CALC_TICK(ev.tick()); //(ev.tick() * MusEGlobal::config.division + div/2) / div; + int tick = CALC_TICK(ev.tick()); if (ev.isNote()) { - int lenTick = CALC_TICK(ev.lenTick()); //(ev.lenTick() * MusEGlobal::config.division + div/2) / div; + int lenTick = CALC_TICK(ev.lenTick()); ev.setLenTick(lenTick); } ev.setTick(tick); @@ -567,7 +565,7 @@ { for (int k = 0; k < MIDI_PORTS; ++k) { for (int i = 0; i < MIDI_CHANNELS; ++i) - MusEGlobal::midiPorts[k].sendEvent(MusECore::MidiPlayEvent(0, k, i, MusECore::ME_CONTROLLER, MusECore::CTRL_LOCAL_OFF, 0)); + MusEGlobal::midiPorts[k].sendEvent(MusECore::MidiPlayEvent(0, k, i, MusECore::ME_CONTROLLER, MusECore::CTRL_LOCAL_OFF, 0), true); } } @@ -637,12 +635,10 @@ } } // - // damit Midi-Devices, die mehrere Ports besitzen, wie z.B. - // das Korg NS5R, nicht mehrmals zwischen GM und XG/GS hin und - // hergeschaltet werden, wird zun�hst auf allen Ports GM - // initialisiert, und dann erst XG/GS + // First all ports are initialized to GM and then are changed + // to XG/GS in order to prevent that devices with more than one + // port, e.g. Korg NS5R, toggle between GM and XG/GS several times. // - // Standard initialization... for (int i = 0; i < MIDI_PORTS; ++i) { if (!activePorts[i]) @@ -864,31 +860,149 @@ void Audio::processMidi() { MusEGlobal::midiBusy=true; + + bool extsync = MusEGlobal::extSyncFlag.value(); + // // TODO: syntis should directly write into recordEventList // - for (iMidiDevice id = MusEGlobal::midiDevices.begin(); id != MusEGlobal::midiDevices.end(); ++id) { - MidiDevice* md = *id; + for (iMidiDevice id = MusEGlobal::midiDevices.begin(); id != MusEGlobal::midiDevices.end(); ++id) + { + MidiDevice* md = *id; + + // klumsy hack for MESS synti devices: + if(md->isSynti()) + { + SynthI* s = (SynthI*)md; + while (s->eventsPending()) + { + MusECore::MidiRecordEvent ev = s->receiveEvent(); + md->recordEvent(ev); + } + } + + md->collectMidiEvents(); + + // Take snapshots of the current sizes of the recording fifos, + // because they may change while here in process, asynchronously. + md->beforeProcess(); + + // + // --------- Handle midi events for audio tracks ----------- + // + + int port = md->midiPort(); // Port should be same as event.port() from this device. Same idea event.channel(). + if(port < 0) + continue; + + for(int chan = 0; chan < MIDI_CHANNELS; ++chan) + { + MusECore::MidiRecFifo& rf = md->recordEvents(chan); + int count = md->tmpRecordCount(chan); + for(int i = 0; i < count; ++i) + { + MusECore::MidiRecordEvent event(rf.peek(i)); - // klumsy hack for synti devices: - if(md->isSynti()) + int etype = event.type(); + if(etype == MusECore::ME_CONTROLLER || etype == MusECore::ME_PITCHBEND || etype == MusECore::ME_PROGRAM) { - SynthI* s = (SynthI*)md; - while (s->eventsPending()) + int ctl, val; + if(etype == MusECore::ME_CONTROLLER) { - MusECore::MidiRecordEvent ev = s->receiveEvent(); - md->recordEvent(ev); + ctl = event.dataA(); + val = event.dataB(); } + else if(etype == MusECore::ME_PITCHBEND) + { + ctl = MusECore::CTRL_PITCH; + val = event.dataA(); + } + else if(etype == MusECore::ME_PROGRAM) + { + ctl = MusECore::CTRL_PROGRAM; + val = event.dataA(); + } + + // Midi learn! + MusEGlobal::midiLearnPort = port; + MusEGlobal::midiLearnChan = chan; + MusEGlobal::midiLearnCtrl = ctl; + + // Send to audio tracks... + for (MusECore::iTrack t = MusEGlobal::song->tracks()->begin(); t != MusEGlobal::song->tracks()->end(); ++t) + { + if((*t)->isMidiTrack()) + continue; + MusECore::AudioTrack* track = static_cast(*t); + MidiAudioCtrlMap* macm = track->controller()->midiControls(); + int h = macm->index_hash(port, chan, ctl); + std::pair range = macm->equal_range(h); + for(ciMidiAudioCtrlMap imacm = range.first; imacm != range.second; ++imacm) + { + const MidiAudioCtrlStruct* macs = &imacm->second; + int actrl = macs->audioCtrlId(); + + iCtrlList icl = track->controller()->find(actrl); + if(icl == track->controller()->end()) + continue; + CtrlList* cl = icl->second; + double dval = midi2AudioCtrlValue(cl, macs, ctl, val); + + // Time here needs to be frames always. + unsigned int ev_t = event.time(); + unsigned int t = ev_t; + +#ifdef _AUDIO_USE_TRUE_FRAME_ + unsigned int pframe = _previousPos.frame(); +#else + unsigned int pframe = _pos.frame(); +#endif + if(pframe > t) // Technically that's an error, shouldn't happen + t = 0; + else + // Subtract the current audio position frame + t -= pframe; + + // Add the current running sync frame to make the control processing happy + t += syncFrame; + track->addScheduledControlEvent(actrl, dval, t); + + // Rec automation... + + // For the record time, if stopped we don't want the circular running position, + // just the static one. + unsigned int rec_t = isPlaying() ? ev_t : pframe; + + if(!MusEGlobal::automation) + continue; + AutomationType at = track->automationType(); + // Unlike our built-in gui controls, there is not much choice here but to + // just do this: + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) + //if(isPlaying() && (at == AUTO_WRITE || at == AUTO_TOUCH)) DELETETHIS + track->enableController(actrl, false); + if(isPlaying()) + { + if(at == AUTO_WRITE || at == AUTO_TOUCH) + track->recEvents()->push_back(CtrlRecVal(rec_t, actrl, dval)); + } + else + { + if(at == AUTO_WRITE) + track->recEvents()->push_back(CtrlRecVal(rec_t, actrl, dval)); + else if(at == AUTO_TOUCH) + // In touch mode and not playing. Send directly to controller list. + // Add will replace if found. + cl->add(rec_t, dval); + } + } + } } - - md->collectMidiEvents(); - - // Take snapshots of the current sizes of the recording fifos, - // because they may change while here in process, asynchronously. - md->beforeProcess(); - } + } + } + } - bool extsync = MusEGlobal::extSyncFlag.value(); for (MusECore::iMidiTrack t = MusEGlobal::song->midis()->begin(); t != MusEGlobal::song->midis()->end(); ++t) { MusECore::MidiTrack* track = *t; @@ -938,15 +1052,30 @@ for(int i = 0; i < count; ++i) { - MusECore::MidiPlayEvent event(rf.peek(i)); + MusECore::MidiRecordEvent event(rf.peek(i)); event.setPort(port); // dont't echo controller changes back to software // synthesizer: if(!dev->isSynti() && md && track->recEcho()) + { + // All recorded events arrived in the previous period. Shift into this period for playback. + unsigned int et = event.time(); +#ifdef _AUDIO_USE_TRUE_FRAME_ + unsigned int t = et - _previousPos.frame() + _pos.frame() + frameOffset; +#else + unsigned int t = et + frameOffset; +#endif + event.setTime(t); md->addScheduledEvent(event); - // If syncing externally the event time is already in units of ticks, set above. p3.3.25 - if(!extsync) - event.setTime(MusEGlobal::tempomap.frame2tick(event.time())); // set tick time + event.setTime(et); // Restore for recording. + } + + // Make sure the event is recorded in units of ticks. + if(extsync) + event.setTime(event.tick()); // HACK: Transfer the tick to the frame time + else + event.setTime(MusEGlobal::tempomap.frame2tick(event.time())); + if(recording) rl->add(event); } @@ -957,7 +1086,7 @@ int count = dev->tmpRecordCount(channel); for(int i = 0; i < count; ++i) { - MusECore::MidiPlayEvent event(rf.peek(i)); + MusECore::MidiRecordEvent event(rf.peek(i)); int defaultPort = devport; int drumRecPitch=0; //prevent compiler warning: variable used without initialization MusECore::MidiController *mc = 0; @@ -1048,28 +1177,39 @@ if (!dev->isSynti()) { - //Check if we're outputting to another port than default: + // All recorded events arrived in previous period. Shift into this period for playback. + // frameoffset needed to make process happy. + unsigned int et = event.time(); +#ifdef _AUDIO_USE_TRUE_FRAME_ + unsigned int t = et - _previousPos.frame() + _pos.frame() + frameOffset; +#else + unsigned int t = et + frameOffset; +#endif + event.setTime(t); + // Check if we're outputting to another port than default: if (devport == defaultPort) { event.setPort(port); if(md && track->recEcho()) - //playEvents->add(event); md->addScheduledEvent(event); } else { // Hmm, this appears to work, but... Will this induce trouble with md->setNextPlayEvent?? MidiDevice* mdAlt = MusEGlobal::midiPorts[devport].device(); if(mdAlt && track->recEcho()) - //mdAlt->playEvents()->add(event); mdAlt->addScheduledEvent(event); } + event.setTime(et); // Restore for recording. + // Shall we activate meters even while rec echo is off? Sure, why not... if(event.isNote() && event.dataB() > track->activity()) track->setActivity(event.dataB()); } - // If syncing externally the event time is already in units of ticks, set above. p3.3.25 - if(!extsync) - event.setTime(MusEGlobal::tempomap.frame2tick(event.time())); // set tick time + // Make sure the event is recorded in units of ticks. + if(extsync) + event.setTime(event.tick()); // HACK: Transfer the tick to the frame time + else + event.setTime(MusEGlobal::tempomap.frame2tick(event.time())); // Special handling of events stored in rec-lists. a bit hACKish. TODO: Clean up (after 0.7)! :-/ (ml) if (recording) @@ -1098,7 +1238,6 @@ drumRecEvent.setB(preVelo); // Tested: Events were not being recorded for a drum map entry pointing to a // different port. This must have been wrong - buildMidiEventList would ignore this. Tim. - //drumRecEvent.setPort(devport); drumRecEvent.setPort(port); //rec-event to current port drumRecEvent.setChannel(track->outChannel()); //rec-event to current channel @@ -1144,11 +1283,9 @@ else if (state == PRECOUNT) { isMeasure = (clickno % clicksMeasure) == 0; } - //int frame = MusEGlobal::tempomap.tick2frame(midiClick) + frameOffset; int evtime = extsync ? midiClick : MusEGlobal::tempomap.tick2frame(midiClick) + frameOffset; // p3.3.25 if (md) { - //MusECore::MidiPlayEvent ev(frame, MusEGlobal::clickPort, MusEGlobal::clickChan, MusECore::ME_NOTEON, MusECore::MidiPlayEvent ev(evtime, MusEGlobal::clickPort, MusEGlobal::clickChan, MusECore::ME_NOTEON, MusEGlobal::beatClickNote, MusEGlobal::beatClickVelo); @@ -1163,7 +1300,6 @@ md->addStuckNote(ev); } if (MusEGlobal::audioClickFlag) { - //MusECore::MidiPlayEvent ev1(frame, 0, 0, MusECore::ME_NOTEON, 0, 0); MusECore::MidiPlayEvent ev(evtime, 0, 0, MusECore::ME_NOTEON, 0, 0); ev.setA(isMeasure ? 0 : 1); metronome->addScheduledEvent(ev); @@ -1191,7 +1327,6 @@ // ALSA devices handled by another thread. if((*id)->deviceType() != MidiDevice::ALSA_MIDI) - //if((*id)->deviceType() == MidiDevice::JACK_MIDI) (*id)->processMidi(); } MusEGlobal::midiBusy=false; diff -Nru muse-2.0~rc2/muse/midictrl.cpp muse-2.0/muse/midictrl.cpp --- muse-2.0~rc2/muse/midictrl.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midictrl.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -148,7 +148,6 @@ defaultMidiController.add(&veloCtrl); defaultMidiController.add(&pitchCtrl); defaultMidiController.add(&programCtrl); - // Removed p3.3.37 Re-added p4.0.15 defaultMidiController.add(&mastervolCtrl); defaultMidiController.add(&volumeCtrl); defaultMidiController.add(&panCtrl); @@ -198,11 +197,6 @@ QString midiCtrlName(int ctrl, bool fullyQualified) { - //if (ctrl < 0x10000) - // return QString(ctrlName[ctrl]); - //return QString("?N?"); - - // p4.0.25 Tim int h = (ctrl >> 8) & 0xff; int l = ctrl & 0xff; QString s1 = QString("%1").arg(h); @@ -271,7 +265,6 @@ _minVal = mc._minVal; _maxVal = mc._maxVal; _initVal = mc._initVal; - //updateBias(); _bias = mc._bias; } @@ -291,17 +284,12 @@ MidiController::ControllerType midiControllerType(int num) { - // p3.3.37 - //if (num < 0x10000) if (num < CTRL_14_OFFSET) return MidiController::Controller7; - //if (num < 0x20000) if (num < CTRL_RPN_OFFSET) return MidiController::Controller14; - //if (num < 0x30000) if (num < CTRL_NRPN_OFFSET) return MidiController::RPN; - //if (num < 0x40000) if (num < CTRL_INTERNAL_OFFSET) return MidiController::NRPN; if (num == CTRL_PITCH) @@ -310,16 +298,47 @@ return MidiController::Program; if (num == CTRL_VELOCITY) return MidiController::Velo; - //if (num < 0x60000) if (num < CTRL_NRPN14_OFFSET) return MidiController::RPN14; - //if (num < 0x70000) if (num < CTRL_NONE_OFFSET) return MidiController::NRPN14; return MidiController::Controller7; } //--------------------------------------------------------- +// midiCtrlTerms2Number +//--------------------------------------------------------- + +int midiCtrlTerms2Number(int type_num, int ctrl) +{ + ctrl &= 0xffff; + switch(type_num) + { + case MidiController::Controller7: + return ctrl & 0xff; + case MidiController::Controller14: + return CTRL_14_OFFSET + ctrl; + case MidiController::RPN: + return CTRL_RPN_OFFSET + ctrl; + case MidiController::NRPN: + return CTRL_NRPN_OFFSET + ctrl; + case MidiController::Pitch: + return CTRL_PITCH; + case MidiController::Program: + return CTRL_PROGRAM; + case MidiController::Velo: + return CTRL_VELOCITY; + case MidiController::RPN14: + return CTRL_RPN14_OFFSET + ctrl; + case MidiController::NRPN14: + return CTRL_NRPN14_OFFSET + ctrl; + default: + printf("MusE: unknown ctrl type in midiCtrTerms2Number()\n"); + return ctrl; + } +} + +//--------------------------------------------------------- // updateBias //--------------------------------------------------------- @@ -366,14 +385,6 @@ break; } - // Special handling of pan: Only thing to do is force the range! - //if(_num == CTRL_PANPOT) - //{ - // _minVal = -64; - // _maxVal = 63; - // _initVal = 0; - //} - // TODO: Limit _minVal and _maxVal to range. if(_minVal >= 0) @@ -386,11 +397,9 @@ { // Adjust bias to fit desired range. if(_minVal + _bias < mn) - //_minVal = mn - _bias; _bias += mn - _minVal + _bias; else if(_maxVal + _bias > mx) - //_maxVal = mx - _bias; _bias -= _maxVal + _bias - mx; } } @@ -467,7 +476,6 @@ if(_initVal != CTRL_VAL_UNKNOWN) xml.nput(" init=\"%d\"", _initVal); } - //xml.put(level, " />"); xml.put(" />"); } @@ -532,14 +540,11 @@ case RPN: if (_maxVal == NOT_SET) _maxVal = 127; - // p3.3.37 - //_num |= 0x20000; _num |= CTRL_RPN_OFFSET; break; case NRPN: if (_maxVal == NOT_SET) _maxVal = 127; - //_num |= 0x30000; _num |= CTRL_NRPN_OFFSET; break; case Controller7: @@ -547,7 +552,6 @@ _maxVal = 127; break; case Controller14: - //_num |= 0x10000; _num |= CTRL_14_OFFSET; if (_maxVal == NOT_SET) _maxVal = 16383; @@ -555,13 +559,11 @@ case RPN14: if (_maxVal == NOT_SET) _maxVal = 16383; - //_num |= 0x50000; _num |= CTRL_RPN14_OFFSET; break; case NRPN14: if (_maxVal == NOT_SET) _maxVal = 16383; - //_num |= 0x60000; _num |= CTRL_NRPN14_OFFSET; break; case Pitch: @@ -604,10 +606,8 @@ case Controller14: return val + CTRL_14_OFFSET; case RPN: - //return l + CTRL_RPN_OFFSET; return val + CTRL_RPN_OFFSET; case NRPN: - //return l + CTRL_NRPN_OFFSET; return val + CTRL_NRPN_OFFSET; case RPN14: return val + CTRL_RPN14_OFFSET; @@ -772,8 +772,6 @@ // return true if new controller value added or replaced //--------------------------------------------------------- -// Changed by T356. -//bool MidiCtrlValList::add(int tick, int val) bool MidiCtrlValList::addMCtlVal(int tick, int val, Part* part) { iMidiCtrlVal e = findMCtlVal(tick, part); @@ -798,8 +796,6 @@ // del //--------------------------------------------------------- -// Changed by T356. -//void MidiCtrlValList::del(int tick) void MidiCtrlValList::delMCtlVal(int tick, Part* part) { iMidiCtrlVal e = findMCtlVal(tick, part); @@ -815,8 +811,6 @@ // find //--------------------------------------------------------- -// Changed by T356. -//iMidiCtrlVal MidiCtrlValList::find(int tick, Part* part) iMidiCtrlVal MidiCtrlValList::findMCtlVal(int tick, Part* part) { MidiCtrlValRange range = equal_range(tick); @@ -834,8 +828,6 @@ MidiControllerList::MidiControllerList(const MidiControllerList& mcl) : std::map() { - //copy(mcl); - for(ciMidiController i = mcl.begin(); i != mcl.end(); ++i) { MidiController* mc = i->second; @@ -843,26 +835,4 @@ } } -//--------------------------------------------------------- -// copy -//--------------------------------------------------------- -//void MidiControllerList::copy(const MidiControllerList &mcl) -//{ -// clear(); -// for(ciMidiController i = mcl.begin(); i != mcl.end(); ++i) -// { -// MidiController* mc = *i; -// push_back(new MidiController(*mc)); -// } -//} - -//--------------------------------------------------------- -// operator = -//--------------------------------------------------------- -//MidiControllerList& MidiControllerList::operator= (const MidiControllerList &mcl) -//{ -// copy(mcl); -// return *this; -//} - } // namespace MusECore diff -Nru muse-2.0~rc2/muse/midictrl.h muse-2.0/muse/midictrl.h --- muse-2.0~rc2/muse/midictrl.h 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/muse/midictrl.h 2012-06-30 19:24:42.000000000 +0200 @@ -80,11 +80,6 @@ // internal controller types: const int CTRL_INTERNAL_OFFSET = 0x40000; -// p3.3.37 -//const int CTRL_PITCH = 0x40000; -//const int CTRL_PROGRAM = 0x40001; -//const int CTRL_VELOCITY = 0x40002; -//const int CTRL_MASTER_VOLUME = 0x40003; const int CTRL_PITCH = CTRL_INTERNAL_OFFSET; const int CTRL_PROGRAM = CTRL_INTERNAL_OFFSET + 1; const int CTRL_VELOCITY = CTRL_INTERNAL_OFFSET + 2; @@ -167,15 +162,10 @@ // list for easy retrieval //--------------------------------------------------------- -// Changed by T356. -//typedef std::map >::iterator iMidiCtrlVal; -//typedef std::map >::const_iterator ciMidiCtrlVal; typedef std::multimap >::iterator iMidiCtrlVal; typedef std::multimap >::const_iterator ciMidiCtrlVal; typedef std::pair MidiCtrlValRange; -// Changed by T356. -//class MidiCtrlValList : public std::map > { class MidiCtrlValList : public std::multimap > { int ctrlNum; @@ -194,11 +184,7 @@ iMidiCtrlVal iValue(int tick); int value(int tick) const; - //int value(int tick, Part** part = 0) const; int value(int tick, Part* part) const; - // Changed by T356. - //bool add(int tick, int value); - //void del(int tick); bool addMCtlVal(int tick, int value, Part* part); void delMCtlVal(int tick, Part* part); @@ -256,6 +242,7 @@ extern MidiControllerList defaultMidiController; extern void initMidiController(); extern MidiController::ControllerType midiControllerType(int num); +extern int midiCtrlTerms2Number(int type_num, int ctrl); extern const QString& int2ctrlType(int n); diff -Nru muse-2.0~rc2/muse/mididev.cpp muse-2.0/muse/mididev.cpp --- muse-2.0~rc2/muse/mididev.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/mididev.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -38,15 +38,14 @@ #include "gconfig.h" #include "globals.h" #include "audio.h" +#include "audiodev.h" #include "midiseq.h" #include "sync.h" #include "midiitransform.h" #include "part.h" -//#include "mpevent.h" namespace MusEGlobal { MusECore::MidiDeviceList midiDevices; -extern unsigned int volatile lastExtMidiSyncTick; } namespace MusECore { @@ -69,13 +68,16 @@ #ifdef MIDI_DRIVER_MIDI_SERIAL initMidiSerial(); #endif - if(initMidiAlsa()) + if(MusEGlobal::useAlsaWithJack || MusEGlobal::audioDevice->deviceType() != AudioDevice::JACK_AUDIO) + { + if(initMidiAlsa()) { QMessageBox::critical(NULL, "MusE fatal error.", "MusE failed to initialize the\n" "Alsa midi subsystem, check\n" "your configuration."); exit(-1); } + } if(initMidiJack()) { @@ -92,6 +94,9 @@ void MidiDevice::init() { + stopPending = false; + seekPending = false; + _readEnable = false; _writeEnable = false; _rwFlags = 3; @@ -109,7 +114,6 @@ _tmpRecordCount[i] = 0; _sysexFIFOProcessed = false; - //_sysexWritingChunks = false; _sysexReadingChunks = false; init(); @@ -122,7 +126,6 @@ _tmpRecordCount[i] = 0; _sysexFIFOProcessed = false; - //_sysexWritingChunks = false; _sysexReadingChunks = false; init(); @@ -205,43 +208,21 @@ _sysexFIFOProcessed = false; } -/* -//--------------------------------------------------------- -// getEvents -//--------------------------------------------------------- - -void MidiDevice::getEvents(unsigned , unsigned , int ch, MPEventList* dst) //from //to -{ - for (int i = 0; i < _tmpRecordCount; ++i) { - const MidiPlayEvent& ev = _recordFifo.peek(i); - if (ch == -1 || (ev.channel() == ch)) - dst->insert(ev); - } - - //while(!recordFifo.isEmpty()) - //{ - // MidiPlayEvent e(recordFifo.get()); - // if (ch == -1 || (e.channel() == ch)) - // dst->insert(e); - //} -} -*/ - //--------------------------------------------------------- // recordEvent //--------------------------------------------------------- void MidiDevice::recordEvent(MidiRecordEvent& event) { - // p3.3.35 - // TODO: Tested, but record resolution not so good. Switch to wall clock based separate list in MidiDevice. And revert this line. - //event.setTime(MusEGlobal::audio->timestamp()); - event.setTime(MusEGlobal::extSyncFlag.value() ? MusEGlobal::lastExtMidiSyncTick : MusEGlobal::audio->timestamp()); - - //printf("MidiDevice::recordEvent event time:%d\n", event.time()); + // TODO: Tested, but record resolution not so good. Switch to wall clock based separate list in MidiDevice. + unsigned frame_ts = MusEGlobal::audio->timestamp(); +#ifndef _AUDIO_USE_TRUE_FRAME_ + if(MusEGlobal::audio->isPlaying()) + frame_ts += MusEGlobal::segmentSize; // Shift forward into this period if playing +#endif + event.setTime(frame_ts); + event.setTick(MusEGlobal::lastExtMidiSyncTick); - // By T356. Set the loop number which the event came in at. - //if(MusEGlobal::audio->isRecording()) if(MusEGlobal::audio->isPlaying()) event.setLoopNum(MusEGlobal::audio->loopCount()); @@ -255,10 +236,7 @@ if(_port != -1) { int idin = MusEGlobal::midiPorts[_port].syncInfo().idIn(); - -// p3.3.26 1/23/10 Section was disabled, enabled by Tim. -//#if 0 - + //--------------------------------------------------- // filter some SYSEX events //--------------------------------------------------- @@ -268,21 +246,17 @@ int n = event.len(); if (n >= 4) { if ((p[0] == 0x7f) - //&& ((p[1] == 0x7f) || (p[1] == rxDeviceId))) { && ((p[1] == 0x7f) || (idin == 0x7f) || (p[1] == idin))) { if (p[2] == 0x06) { - //mmcInput(p, n); MusEGlobal::midiSeq->mmcInput(_port, p, n); return; } if (p[2] == 0x01) { - //mtcInputFull(p, n); MusEGlobal::midiSeq->mtcInputFull(_port, p, n); return; } } else if (p[0] == 0x7e) { - //nonRealtimeSystemSysex(p, n); MusEGlobal::midiSeq->nonRealtimeSystemSysex(_port, p, n); return; } @@ -291,9 +265,6 @@ else // Trigger general activity indicator detector. Sysex has no channel, don't trigger. MusEGlobal::midiPorts[_port].syncInfo().trigActDetect(event.channel()); - -//#endif - } // @@ -332,7 +303,7 @@ // Split the events up into channel fifos. Special 'channel' number 17 for sysex events. unsigned int ch = (typ == ME_SYSEX)? MIDI_CHANNELS : event.channel(); - if(_recordFifo[ch].put(MidiPlayEvent(event))) + if(_recordFifo[ch].put(event)) printf("MidiDevice::recordEvent: fifo channel %d overflow\n", ch); } @@ -485,8 +456,9 @@ putMidiEvent(MidiPlayEvent(0, 0, chn, ME_CONTROLLER, CTRL_LBANK, lb)); return putMidiEvent(MidiPlayEvent(0, 0, chn, ME_PROGRAM, pr, 0)); } + return false; // Should absorb anyway and return, right? p4.0.48 Tim. } -#if 1 // if ALSA cannot handle RPN NRPN etc. +#if 1 // if ALSA cannot handle RPN NRPN etc. DELETETHIS? remove the wrapping #if #endif if (a < CTRL_14_OFFSET) { // 7 Bit Controller putMidiEvent(ev); @@ -590,6 +562,35 @@ if(_port == -1) return; + MidiPort* mp = &MusEGlobal::midiPorts[_port]; + + //--------------------------------------------------- + // send midi stop + //--------------------------------------------------- + + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!MusEGlobal::extSyncFlag.value()) + { + // Shall we check open flags? DELETETHIS 4? + //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) + //if(!(dev->openFlags() & 1)) + // return; + + MidiSyncInfo& si = mp->syncInfo(); + if(si.MMCOut()) + mp->sendMMCStop(); + + if(si.MRTOut()) + { + mp->sendStop(); + //DELETETHIS 5? + // Added check of option send continue not start. Hmm, is this required? Seems to make other devices unhappy. + // (Could try now that this is in MidiDevice.) + //if(!si.sendContNotStart()) + // mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / MusEGlobal::config.division); + } + } + //--------------------------------------------------- // Clear all notes and handle stuck notes //--------------------------------------------------- @@ -599,26 +600,24 @@ { MidiPlayEvent ev = *i; ev.setTime(0); - _playEvents.add(ev); + putEvent(ev); } _stuckNotes.clear(); - //--------------------------------------------------- // reset sustain //--------------------------------------------------- - MidiPort* mp = &MusEGlobal::midiPorts[_port]; for(int ch = 0; ch < MIDI_CHANNELS; ++ch) { if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) { - //printf("send clear sustain!!!!!!!! port %d ch %d\n", i,ch); MidiPlayEvent ev(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); putEvent(ev); } } + /* DELETETHIS 23 //--------------------------------------------------- // send midi stop //--------------------------------------------------- @@ -626,11 +625,6 @@ // Don't send if external sync is on. The master, and our sync routing system will take care of that. if(!MusEGlobal::extSyncFlag.value()) { - // Shall we check open flags? - //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) - //if(!(dev->openFlags() & 1)) - // return; - MidiSyncInfo& si = mp->syncInfo(); if(si.MMCOut()) mp->sendMMCStop(); @@ -639,17 +633,13 @@ { // Send STOP mp->sendStop(); - - // p3.3.31 - // Added check of option send continue not start. - // Hmm, is this required? Seems to make other devices unhappy. - // (Could try now that this is in MidiDevice. p4.0.22 ) - /* - if(!si.sendContNotStart()) - mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / MusEGlobal::config.division); - */ + // Added check of option send continue not start. Hmm, is this required? Seems to make other devices unhappy. + // (Could try now that this is in MidiDevice.) + //if(!si.sendContNotStart()) + // mp->sendSongpos(MusEGlobal::audio->tickPos() * 4 / MusEGlobal::config.division); } } + */ } //--------------------------------------------------------- @@ -662,6 +652,27 @@ if(_port == -1) return; + MidiPort* mp = &MusEGlobal::midiPorts[_port]; + MidiCtrlValListList* cll = mp->controller(); + int pos = MusEGlobal::audio->tickPos(); + + //--------------------------------------------------- + // Send STOP + //--------------------------------------------------- + + // Don't send if external sync is on. The master, and our sync routing system will take care of that. + if(!MusEGlobal::extSyncFlag.value()) + { + if(mp->syncInfo().MRTOut()) + { + // Shall we check for device write open flag to see if it's ok to send?... + //if(!(rwFlags() & 0x1) || !(openFlags() & 1)) + //if(!(openFlags() & 1)) + // continue; + mp->sendStop(); + } + } + //--------------------------------------------------- // If playing, clear all notes and handle stuck notes //--------------------------------------------------- @@ -673,17 +684,15 @@ { MidiPlayEvent ev = *i; ev.setTime(0); - _playEvents.add(ev); + //_playEvents.add(ev); + putEvent(ev); // For immediate playback try putEvent, putMidiEvent, or sendEvent (for the optimizations) instead. + //mp->sendEvent(ev); } _stuckNotes.clear(); } - MidiPort* mp = &MusEGlobal::midiPorts[_port]; - MidiCtrlValListList* cll = mp->controller(); - int pos = MusEGlobal::audio->tickPos(); - //--------------------------------------------------- - // Send new contoller values + // Send new controller values //--------------------------------------------------- for(iMidiCtrlValList ivl = cll->begin(); ivl != cll->end(); ++ivl) @@ -693,10 +702,32 @@ if(imcv != vl->end()) { Part* p = imcv->second.part; + // Don't send if part or track is muted or off. + if(!p || p->mute()) + continue; + Track* track = p->track(); + if(track && (track->isMute() || track->off())) + continue; unsigned t = (unsigned)imcv->first; // Do not add values that are outside of the part. if(p && t >= p->tick() && t < (p->tick() + p->lenTick()) ) - _playEvents.add(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); + //_playEvents.add(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val)); + // Use sendEvent to get the optimizations and limiting. But force if there's a value at this exact position. + mp->sendEvent(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val), imcv->first == pos); + //mp->sendEvent(MidiPlayEvent(0, _port, ivl->first >> 24, ME_CONTROLLER, vl->num(), imcv->second.val), pos == 0 || imcv->first == pos); + } + } + + //--------------------------------------------------- + // reset sustain + //--------------------------------------------------- + + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + if(mp->hwCtrlState(ch, CTRL_SUSTAIN) == 127) + { + MidiPlayEvent ev(0, _port, ch, ME_CONTROLLER, CTRL_SUSTAIN, 0); + putEvent(ev); } } @@ -709,24 +740,9 @@ { if(mp->syncInfo().MRTOut()) { - // Shall we check for device write open flag to see if it's ok to send?... - // This means obey what the user has chosen for read/write in the midi port config dialog, - // which already takes into account whether the device is writable or not. - //if(!(rwFlags() & 0x1) || !(openFlags() & 1)) - //if(!(openFlags() & 1)) - // continue; - + //mp->sendStop(); // Moved above int beat = (pos * 4) / MusEGlobal::config.division; - - //bool isPlaying = false; - //if(state == PLAY) - // isPlaying = true; - bool isPlaying = MusEGlobal::audio->isPlaying(); // Check this it includes LOOP1 and LOOP2 besides PLAY. p4.0.22 - - mp->sendStop(); mp->sendSongpos(beat); - if(isPlaying) - mp->sendContinue(); } } } diff -Nru muse-2.0~rc2/muse/mididev.h muse-2.0/muse/mididev.h --- muse-2.0~rc2/muse/mididev.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/mididev.h 2012-06-30 19:24:42.000000000 +0200 @@ -28,7 +28,6 @@ #include #include "mpevent.h" -//#include "sync.h" #include "route.h" #include "globaldefs.h" @@ -37,7 +36,6 @@ namespace MusECore { -//class RouteList; class Xml; //--------------------------------------------------------- @@ -57,9 +55,6 @@ bool _readEnable; // set when opened/closed. bool _writeEnable; // - //int _sysexWriteChunk; - //int _sysexReadChunk; - //bool _sysexWritingChunks; bool _sysexReadingChunks; MPEventList _stuckNotes; @@ -69,6 +64,9 @@ MidiFifo eventFifo; // Recording fifos. To speed up processing, one per channel plus one special system 'channel' for channel-less events like sysex. MidiRecFifo _recordFifo[MIDI_CHANNELS + 1]; + + volatile bool stopPending; + volatile bool seekPending; RouteList _inRoutes, _outRoutes; @@ -126,7 +124,7 @@ virtual bool putEvent(const MidiPlayEvent&); // This method will try to putEvent 'tries' times, waiting 'delayUs' microseconds between tries. // Since it waits, it should not be used in RT or other time-sensitive threads. p4.0.15 - bool putEventWithRetry(const MidiPlayEvent&, int /*tries*/ = 2, long /*delayUs*/ = 50000); // 2 tries, 50 mS by default. + bool putEventWithRetry(const MidiPlayEvent&, int tries = 2, long delayUs = 50000); // 2 tries, 50 mS by default. virtual void handleStop(); virtual void handleSeek(); @@ -140,11 +138,8 @@ MidiRecFifo& recordEvents(const unsigned int ch) { return _recordFifo[ch]; } bool sysexFIFOProcessed() { return _sysexFIFOProcessed; } void setSysexFIFOProcessed(bool v) { _sysexFIFOProcessed = v; } - //bool sysexWritingChunks() { return _sysexWritingChunks; } - //void setSysexWritingChunks(bool v) { _sysexWritingChunks = v; } bool sysexReadingChunks() { return _sysexReadingChunks; } void setSysexReadingChunks(bool v) { _sysexReadingChunks = v; } - //virtual void getEvents(unsigned /*from*/, unsigned /*to*/, int /*channel*/, MPEventList* /*dst*/); bool sendNullRPNParams(int, bool); }; diff -Nru muse-2.0~rc2/muse/midiedit/dcanvas.cpp muse-2.0/muse/midiedit/dcanvas.cpp --- muse-2.0~rc2/muse/midiedit/dcanvas.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/dcanvas.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -30,13 +30,13 @@ #include #include #include +#include +#include #include -#include +#include #include #include -//#include -//#include #include "dcanvas.h" #include "midieditor.h" @@ -86,7 +86,7 @@ int diff = event.endTick()-part->lenTick(); if (diff > 0) {// too short part? extend it - //printf("addItem - this code should not be run!\n"); + //printf("addItem - this code should not be run!\n"); DELETETHIS //MusECore::Part* newPart = part->clone(); //newPart->setLenTick(newPart->lenTick()+diff); //MusEGlobal::audio->msgChangePart(part, newPart,false); @@ -117,7 +117,6 @@ DrumCanvas::~DrumCanvas() { - //items.clearDelete(); } //--------------------------------------------------------- @@ -266,10 +265,9 @@ newEvent.setPitch(npitch); newEvent.setTick(ntick); - // Added by T356, removed by flo93: with operation groups, it happens that the - // part is too short right now, even if it's queued for being extended - //if(((int)newEvent.endTick() - (int)part->lenTick()) > 0) - // printf("DrumCanvas::moveItem Error! New event end:%d exceeds length:%d of part:%s\n", newEvent.endTick(), part->lenTick(), part->name().toLatin1().constData()); + // don't check, whether the new event is within the part + // at this place. with operation groups, the part isn't + // resized yet. (flo93) if (dtype == MOVE_COPY || dtype == MOVE_CLONE) return MusECore::UndoOp(MusECore::UndoOp::AddEvent, newEvent, part, false, false); @@ -283,7 +281,7 @@ CItem* DrumCanvas::newItem(const QPoint& p, int state) { - int instr = y2pitch(p.y()); //MusEGlobal::drumInmap[y2pitch(p.y())]; + int instr = y2pitch(p.y()); int velo = MusEGlobal::drumMap[instr].lv4; if (state == Qt::ShiftModifier) velo = MusEGlobal::drumMap[instr].lv3; @@ -302,6 +300,9 @@ CItem* DrumCanvas::newItem(int tick, int instrument, int velocity) { tick -= curPart->tick(); + if (tick < 0) + //tick=0; + return 0; MusECore::Event e(MusECore::Note); e.setTick(tick); e.setPitch(instrument); @@ -334,16 +335,16 @@ DEvent* nevent = (DEvent*) item; MusECore::Event event = nevent->event(); int x = item->x(); + if (x<0) + x=0; if (!noSnap) x = editor->rasterVal(x); event.setTick(x - nevent->part()->tick()); int npitch = event.pitch(); event.setPitch(npitch); - // // check for existing event // if found change command semantic from insert to delete - // MusECore::EventList* el = nevent->part()->events(); MusECore::iEvent lower = el->lower_bound(event.tick()); MusECore::iEvent upper = el->upper_bound(event.tick()); @@ -753,7 +754,7 @@ MusECore::MidiPlayEvent e(0, port, channel, 0x90, pitch, velocity); MusEGlobal::audio->msgPlayMidiEvent(&e); - if (_steprec && pos[0] >= start_tick /* && pos[0] < end_tick [removed by flo93: this is handled in steprec->record] */ && curPart) + if (_steprec && curPart && pos[0] >= start_tick) // && pos[0] < end_tick [removed by flo93: this is handled in steprec->record] steprec->record(curPart,index,MusEGlobal::drumMap[index].len,editor->raster(),velocity,MusEGlobal::globalKeyState&Qt::ControlModifier,MusEGlobal::globalKeyState&Qt::ShiftModifier); } @@ -875,8 +876,9 @@ // modifySelected //--------------------------------------------------------- -void DrumCanvas::modifySelected(NoteInfo::ValType type, int delta) +void DrumCanvas::modifySelected(NoteInfo::ValType type, int val, bool delta_mode) { + QList< QPair > already_done; MusEGlobal::audio->msgIdle(true); MusEGlobal::song->startUndo(); for (iCItem i = items.begin(); i != items.end(); ++i) { @@ -888,29 +890,64 @@ continue; MusECore::MidiPart* part = (MusECore::MidiPart*)(e->part()); + + if (already_done.contains(QPair(part->events(), event))) + continue; + MusECore::Event newEvent = event.clone(); switch (type) { - case NoteInfo::VAL_TIME: + case MusEGui::NoteInfo::VAL_TIME: { - int newTime = event.tick() + delta; + int newTime = val; + if(delta_mode) + newTime += event.tick(); + else + newTime -= part->tick(); if (newTime < 0) newTime = 0; newEvent.setTick(newTime); } break; - case NoteInfo::VAL_LEN: - printf("DrumCanvas::modifySelected - NoteInfo::VAL_LEN not implemented\n"); + case MusEGui::NoteInfo::VAL_LEN: + { + int len = val; + if(delta_mode) + len += event.lenTick(); + if (len < 1) + len = 1; + newEvent.setLenTick(len); + } break; - case NoteInfo::VAL_VELON: - printf("DrumCanvas::modifySelected - NoteInfo::VAL_VELON not implemented\n"); + case MusEGui::NoteInfo::VAL_VELON: + { + int velo = val; + if(delta_mode) + velo += event.velo(); + if (velo > 127) + velo = 127; + else if (velo < 0) + velo = 0; + newEvent.setVelo(velo); + } break; - case NoteInfo::VAL_VELOFF: - printf("DrumCanvas::modifySelected - NoteInfo::VAL_VELOFF not implemented\n"); + case MusEGui::NoteInfo::VAL_VELOFF: + { + int velo = val; + if(delta_mode) + velo += event.veloOff(); + if (velo > 127) + velo = 127; + else if (velo < 0) + velo = 0; + newEvent.setVeloOff(velo); + } break; case NoteInfo::VAL_PITCH: { - int pitch = event.pitch() - delta; // Reversing order since the drumlist is displayed in increasing order + int pitch = val; + if(delta_mode) + pitch += event.pitch(); if (pitch > 127) pitch = 127; else if (pitch < 0) @@ -922,6 +959,8 @@ MusEGlobal::song->changeEvent(event, newEvent, part); // Indicate do not do port controller values and clone parts. MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part, false, false)); + + already_done.append(QPair(part->events(), event)); } MusEGlobal::song->endUndo(SC_EVENT_MODIFIED); MusEGlobal::audio->msgIdle(false); diff -Nru muse-2.0~rc2/muse/midiedit/dcanvas.h muse-2.0/muse/midiedit/dcanvas.h --- muse-2.0~rc2/muse/midiedit/dcanvas.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/dcanvas.h 2012-06-30 19:24:42.000000000 +0200 @@ -117,7 +117,7 @@ const char* name = 0); virtual ~DrumCanvas(); void cmd(int); - virtual void modifySelected(NoteInfo::ValType type, int delta); + virtual void modifySelected(NoteInfo::ValType type, int val, bool delta_mode = true); virtual void keyPress(QKeyEvent* event); MusECore::Event *getEventAtCursorPos(); void selectCursorEvent(MusECore::Event *ev); diff -Nru muse-2.0~rc2/muse/midiedit/dlist.cpp muse-2.0/muse/midiedit/dlist.cpp --- muse-2.0~rc2/muse/midiedit/dlist.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/dlist.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -70,7 +70,7 @@ if (dm == currentlySelected) p.fillRect(x, yy, w, TH, Qt::yellow); // else -// p.eraseRect(x, yy, w, TH); +// p.eraseRect(x, yy, w, TH); DELETETHIS? QHeaderView *h = header; p.save(); p.setWorldMatrixEnabled(false); @@ -82,8 +82,6 @@ QString s; int align = Qt::AlignVCenter | Qt::AlignHCenter; - //p.save(); - //p.setWorldMatrixEnabled(false); switch (k) { case COL_VOL: s.setNum(dm->vol); @@ -137,7 +135,6 @@ } if (!s.isEmpty()) p.drawText(r, align, s); - //p.restore(); } p.restore(); } @@ -232,7 +229,6 @@ { int instr = getSelectedInstrument(); if(instr != -1) - //emit curDrumInstrumentChanged(instr); MusEGlobal::song->update(SC_DRUMMAP); } } @@ -641,7 +637,6 @@ break; case COL_LEN: - ///editEntry->len = atoi(editor->text().ascii()); editEntry->len = atoi(editor->text().toAscii().constData()); break; @@ -770,7 +765,7 @@ h = new QHeaderView(Qt::Horizontal, parent);} header = h; scroll = 0; - //ORCAN- CHECK if really needed: header->setTracking(true); + //ORCAN- CHECK if really needed: header->setTracking(true); DELETETHIS seems like it's unneeded ;) connect(header, SIGNAL(sectionResized(int,int,int)), SLOT(sizeChange(int,int,int))); connect(header, SIGNAL(sectionMoved(int, int,int)), SLOT(moved(int,int,int))); @@ -836,7 +831,7 @@ emit mapChanged(sPitch, dPitch); //Track pitch change done in canvas } drag = NORMAL; -//?? redraw(); //commented out NOT by flo93; was already commented out +//?? redraw(); //commented out NOT by flo93; was already commented out. DELETETHIS? not the below, only this single line! // if (editEntry) //removed by flo93; seems to work without it // editor->setFocus(); //and causes segfaults after adding the pitchedits int x = ev->x(); diff -Nru muse-2.0~rc2/muse/midiedit/dlist.h muse-2.0/muse/midiedit/dlist.h --- muse-2.0~rc2/muse/midiedit/dlist.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/dlist.h 2012-06-30 19:24:42.000000000 +0200 @@ -113,8 +113,6 @@ int x2col(int x) const; void devicesPopupMenu(MusECore::DrumMap* t, int x, int y, bool changeAll); - //void setCurDrumInstrument(int n); - private slots: void sizeChange(int, int, int); void returnPressed(); diff -Nru muse-2.0~rc2/muse/midiedit/drumedit.cpp muse-2.0/muse/midiedit/drumedit.cpp --- muse-2.0~rc2/muse/midiedit/drumedit.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/drumedit.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -65,21 +65,6 @@ namespace MusEGui { -/* -static const char* map_file_pattern[] = { - "Presets (*.map *.map.gz *.map.bz2)", - "All Files (*)", - 0 - }; -static const char* map_file_save_pattern[] = { - "Presets (*.map)", - "gzip compressed presets (*.map.gz)", - "bzip2 compressed presets (*.map.bz2)", - "All Files (*)", - 0 - }; -*/ - int DrumEdit::_rasterInit = 96; int DrumEdit::_dlistWidthInit = 50; int DrumEdit::_dcanvasWidthInit = 300; @@ -156,7 +141,6 @@ _isDeleting = true; // Set flag so certain signals like songChanged, which may cause crash during delete, can be ignored. QSettings settings("MusE", "MusE-qt"); - //settings.setValue("Drumedit/geometry", saveGeometry()); settings.setValue("Drumedit/windowState", saveState()); //Store values of the horizontal splitter @@ -176,10 +160,23 @@ DrumEdit::DrumEdit(MusECore::PartList* pl, QWidget* parent, const char* name, unsigned initPos) : MidiEditor(TopWin::DRUM, _rasterInit, pl, parent, name) { - setFocusPolicy(Qt::StrongFocus); + setFocusPolicy(Qt::NoFocus); + deltaMode = false; + tickValue = 0; + lenValue = 0; + pitchValue = 0; + veloOnValue = 0; + veloOffValue = 0; + firstValueSet = false; + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; + lastSelections = 0; split1w1 = 0; - selPart = 0; + //selPart = 0; QSignalMapper *signalMapper = new QSignalMapper(this); //---------Pulldown Menu---------------------------- @@ -306,31 +303,33 @@ QToolButton *ldm = new QToolButton(); ldm->setToolTip(tr("Load Drummap")); ldm->setIcon(*openIcon); + ldm->setFocusPolicy(Qt::NoFocus); connect(ldm, SIGNAL(clicked()), SLOT(load())); tools->addWidget(ldm); QToolButton *sdm = new QToolButton(); sdm->setToolTip(tr("Store Drummap")); sdm->setIcon(*saveIcon); + sdm->setFocusPolicy(Qt::NoFocus); connect(sdm, SIGNAL(clicked()), SLOT(save())); tools->addWidget(sdm); tools->addAction(QWhatsThis::createAction()); tools->addSeparator(); - tools->addActions(MusEGlobal::undoRedo->actions()); - tools->addSeparator(); srec = new QToolButton(); srec->setToolTip(tr("Step Record")); srec->setIcon(*steprecIcon); srec->setCheckable(true); + srec->setFocusPolicy(Qt::NoFocus); tools->addWidget(srec); midiin = new QToolButton(); midiin->setToolTip(tr("Midi Input")); midiin->setIcon(*midiinIcon); midiin->setCheckable(true); + midiin->setFocusPolicy(Qt::NoFocus); tools->addWidget(midiin); @@ -353,17 +352,10 @@ stepLenWidget->addItem("8"); stepLenWidget->addItem("16"); stepLenWidget->setCurrentIndex(0); - connect(stepLenWidget, SIGNAL(currentIndexChanged(QString)), SLOT(setStep(QString))); + stepLenWidget->setFocusPolicy(Qt::TabFocus); + connect(stepLenWidget, SIGNAL(activated(QString)), SLOT(setStep(QString))); cursorToolbar->addWidget(stepLenWidget); - QToolBar* panicToolbar = addToolBar(tr("panic")); - panicToolbar->setObjectName("panic"); - panicToolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport = addToolBar(tr("transport")); - transport->setObjectName("transport"); - transport->addActions(MusEGlobal::transportAction->actions()); - addToolBarBreak(); // don't show pitch value in toolbar toolbar = new MusEGui::Toolbar1(this, _rasterInit, false); @@ -381,9 +373,9 @@ QPushButton* ctrl = new QPushButton(tr("ctrl"), mainw); ctrl->setObjectName("Ctrl"); ctrl->setFont(MusEGlobal::config.fonts[3]); - //hscroll = new MusEGui::ScrollScale(-25, -2, xscale, 20000, Qt::Horizontal, mainw); - // Increased scale to -1. To resolve/select/edit 1-tick-wide (controller graph) events. p4.0.18 Tim. - hscroll = new MusEGui::ScrollScale(-25, -1, xscale, 20000, Qt::Horizontal, mainw); + ctrl->setFocusPolicy(Qt::NoFocus); + // Increased scale to -1. To resolve/select/edit 1-tick-wide (controller graph) events. + hscroll = new MusEGui::ScrollScale(-25, -1 /* formerly -2 */, xscale, 20000, Qt::Horizontal, mainw); ctrl->setFixedSize(40, hscroll->sizeHint().height()); ctrl->setToolTip(tr("Add Controller View")); @@ -397,8 +389,6 @@ mainGrid->addWidget(ctrl, 1, 0); mainGrid->addWidget(hscroll, 1, 1); mainGrid->addWidget(corner, 1, 2, Qt::AlignBottom|Qt::AlignRight); -// mainGrid->addRowSpacing(1, hscroll->sizeHint().height()); -// mainGrid->addItem(new QSpacerItem(0, hscroll->sizeHint().height()), 1, 0); split2 = new MusEGui::Splitter(Qt::Horizontal, split1, "split2"); split1w1 = new QWidget(split2); @@ -427,7 +417,7 @@ split2->setSizes(mops); // By T356. Not much choice but to disable this for now, to stop runaway resize bug. // Can't seem to get the splitter to readjust when manually setting sizes. - //split2->setResizeMode(split1w1, QSplitter::KeepSize); + //split2->setResizeMode(split1w1, QSplitter::KeepSize); DELETETHIS or FIXME? gridS2->setRowStretch(1, 100); gridS2->setColumnStretch(0, 100); @@ -437,9 +427,8 @@ gridS2->addWidget(canvas, 2, 0); gridS2->addWidget(vscroll, 2, 1); - // - // Reihenfolge in dlist.c festgeschrieben ("Dcols") - // + + // Ordering is hardcoded in dlist.c ("Dcols") header = new MusEGui::Header(split1w1, "header"); header->setFixedHeight(31); header->setColumnLabel(tr("M"), COL_MUTE, 20); @@ -460,7 +449,6 @@ setHeaderWhatsThis(); dlist = new DList(header, split1w1, yscale); - // p3.3.44 setCurDrumInstrument(dlist->getSelectedInstrument()); connect(dlist, SIGNAL(keyPressed(int, int)), canvas, SLOT(keyPressed(int, int))); @@ -493,8 +481,8 @@ connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool(int))); // in Canvas connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool2(int))); // in DrumCanvas - connect(canvas, SIGNAL(selectionChanged(int, MusECore::Event&, MusECore::Part*)), this, - SLOT(setSelection(int, MusECore::Event&, MusECore::Part*))); + connect(canvas, SIGNAL(selectionChanged(int, MusECore::Event&, MusECore::Part*, bool)), this, + SLOT(setSelection(int, MusECore::Event&, MusECore::Part*, bool))); connect(canvas, SIGNAL(followEvent(int)), SLOT(follow(int))); connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange())); @@ -508,7 +496,10 @@ connect(toolbar, SIGNAL(rasterChanged(int)), SLOT(setRaster(int))); connect(toolbar, SIGNAL(soloChanged(bool)), SLOT(soloChanged(bool))); connect(info, SIGNAL(valueChanged(MusEGui::NoteInfo::ValType, int)), SLOT(noteinfoChanged(MusEGui::NoteInfo::ValType, int))); - + connect(info, SIGNAL(deltaModeChanged(bool)), SLOT(deltaModeChanged(bool))); + connect(info, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(info, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(ctrl, SIGNAL(clicked()), SLOT(addCtrl())); QClipboard* cb = QApplication::clipboard(); @@ -524,10 +515,10 @@ //canvas->selectFirst(); unsigned pos=0; - if(initPos >= MAXINT) + if(initPos >= INT_MAX) pos = MusEGlobal::song->cpos(); - if(pos > MAXINT) - pos = MAXINT; + if(pos > INT_MAX) + pos = INT_MAX; if (pos) hscroll->setOffset((int)pos); @@ -536,7 +527,7 @@ initTopwinState(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } //--------------------------------------------------------- @@ -545,16 +536,13 @@ void DrumEdit::songChanged1(int bits) { - if(_isDeleting) // Ignore while while deleting to prevent crash. + if(_isDeleting) // Ignore while deleting to prevent crash. return; if (bits & SC_SOLO) - { - toolbar->setSolo(canvas->track()->solo()); - return; - } - songChanged(bits); + toolbar->setSolo(canvas->track()->solo()); + songChanged(bits); } //--------------------------------------------------------- @@ -608,7 +596,6 @@ DrumEdit::~DrumEdit() { - //MusEGlobal::undoRedo->removeFrom(tools); // p4.0.6 Removed } //--------------------------------------------------------- @@ -616,23 +603,120 @@ // update Info Line //--------------------------------------------------------- -void DrumEdit::setSelection(int tick, MusECore::Event& e, MusECore::Part* p) +void DrumEdit::setSelection(int tick, MusECore::Event& e, MusECore::Part*, bool update) { - selEvent = e; - selPart = (MusECore::MidiPart*)p; - selTick = tick; - info->setEnabled(!e.empty()); - if (!e.empty()) { - info->setValues(tick, - selEvent.lenTick(), - selEvent.pitch(), - selEvent.velo(), - selEvent.veloOff()); + int selections = canvas->selectionSize(); + + // Diagnostics: + //printf("DrumEdit::setSelection selections:%d event empty:%d firstValueSet:%d\n", selections, e.empty(), firstValueSet); + //if(!e.empty()) + // e.dump(); + + if(update) + { + // Selections have changed. Reset these. + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; + + // Force 'suggested' modes: + if (selections == 1) + { + deltaMode = false; + info->setDeltaMode(deltaMode); + } + else + if (selections > 1) + { + // A feeble attempt to hold on to the user's setting. Should try to bring back + // selEvent (removed), but there were problems using it (it's a reference). + //if(lastSelections <= 1) + { + deltaMode = true; + info->setDeltaMode(deltaMode); + } + } + } + + lastSelections = selections; + + if ((selections == 1) || (selections > 1 && !firstValueSet)) + { + tickValue = tick; + lenValue = e.lenTick(); + pitchValue = e.pitch(); + veloOnValue = e.velo(); + veloOffValue = e.veloOff(); + firstValueSet = true; + } + + if (selections > 0) { + info->setEnabled(true); + if (deltaMode) + info->setValues(tickOffset, lenOffset, pitchOffset, veloOnOffset, veloOffOffset); + else + info->setValues(tickValue, lenValue, pitchValue, veloOnValue, veloOffValue); + } + else { + info->setEnabled(false); + info->setValues(0, 0, 0, 0, 0); + firstValueSet = false; + tickValue = 0; + lenValue = 0; + pitchValue = 0; + veloOnValue = 0; + veloOffValue = 0; + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; } + + info->setReturnMode(selections >= 2); selectionChanged(); } //--------------------------------------------------------- +// focusCanvas +//--------------------------------------------------------- + +void DrumEdit::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + canvas->setFocus(); + canvas->activateWindow(); + } +} + +//--------------------------------------------------------- +// deltaModeChanged +//--------------------------------------------------------- + +void DrumEdit::deltaModeChanged(bool delta_on) +{ + if(deltaMode == delta_on) + return; + deltaMode = delta_on; + + int selections = canvas->selectionSize(); + + if(deltaMode) + { + if(selections > 0) + info->setValues(tickOffset, lenOffset, pitchOffset, veloOnOffset, veloOffOffset); + } + else + { + if(selections > 0) + info->setValues(tickValue, lenValue, pitchValue, veloOnValue, veloOffValue); + } +} + +//--------------------------------------------------------- // soloChanged //--------------------------------------------------------- @@ -651,6 +735,7 @@ _rasterInit = val; MidiEditor::setRaster(val); canvas->redrawGrid(); + focusCanvas(); // give back focus after kb input } //--------------------------------------------------------- @@ -659,31 +744,62 @@ void DrumEdit::noteinfoChanged(MusEGui::NoteInfo::ValType type, int val) { - if (selEvent.empty()) { - printf("noteinfoChanged while note is zero %d\n", type); - return; + int selections = canvas->selectionSize(); + + if (selections == 0) { + printf("noteinfoChanged while nothing selected\n"); } - MusECore::Event event = selEvent.clone(); - switch (type) { - case MusEGui::NoteInfo::VAL_TIME: - event.setTick(val - selPart->tick()); - break; - case MusEGui::NoteInfo::VAL_LEN: - event.setLenTick(val); - break; - case MusEGui::NoteInfo::VAL_VELON: - event.setVelo(val); - break; - case MusEGui::NoteInfo::VAL_VELOFF: - event.setVeloOff(val); - break; - case MusEGui::NoteInfo::VAL_PITCH: - event.setPitch(val); - break; + else if (selections > 0) { + if(deltaMode) { + // treat noteinfo values as offsets to event values + int delta = 0; + switch (type) { + case MusEGui::NoteInfo::VAL_TIME: + delta = val - tickOffset; + tickOffset = val; + break; + case MusEGui::NoteInfo::VAL_LEN: + delta = val - lenOffset; + lenOffset = val; + break; + case MusEGui::NoteInfo::VAL_VELON: + delta = val - veloOnOffset; + veloOnOffset = val; + break; + case MusEGui::NoteInfo::VAL_VELOFF: + delta = val - veloOffOffset; + veloOffOffset = val; + break; + case MusEGui::NoteInfo::VAL_PITCH: + delta = val - pitchOffset; + pitchOffset = val; + break; + } + if (delta) + canvas->modifySelected(type, delta); + } + else { + switch (type) { + case MusEGui::NoteInfo::VAL_TIME: + tickValue = val; + break; + case MusEGui::NoteInfo::VAL_LEN: + lenValue = val; + break; + case MusEGui::NoteInfo::VAL_VELON: + veloOnValue = val; + break; + case MusEGui::NoteInfo::VAL_VELOFF: + veloOffValue = val; + break; + case MusEGui::NoteInfo::VAL_PITCH: + pitchValue = val; + break; + } + canvas->modifySelected(type, val, false); // No delta mode. + } } - // Indicate do undo, and do not do port controller values and clone parts. - //MusEGlobal::audio->msgChangeEvent(selEvent, event, selPart); - MusEGlobal::audio->msgChangeEvent(selEvent, event, selPart, true, false, false); + } //--------------------------------------------------------- @@ -829,7 +945,6 @@ void DrumEdit::load() { - //QString fn = MusEGui::getOpenFileName("drummaps", map_file_pattern, QString fn = MusEGui::getOpenFileName("drummaps", MusEGlobal::drum_map_file_pattern, this, tr("Muse: Load Drum Map"), 0); if (fn.isEmpty()) @@ -882,7 +997,6 @@ void DrumEdit::save() { - //QString fn = MusEGui::getSaveFileName(QString("drummaps"), map_file_pattern, QString fn = MusEGui::getSaveFileName(QString("drummaps"), MusEGlobal::drum_map_file_save_pattern, this, tr("MusE: Store Drum Map")); if (fn.isEmpty()) @@ -952,7 +1066,7 @@ if (quantize_dialog->exec()) quantize_notes(partlist_to_set(parts()), quantize_dialog->range, (MusEGlobal::config.division*4)/raster, - /* quant_len= */false, quantize_dialog->strength, + /* quant_len= */false, quantize_dialog->strength, // DELETETHIS quantize_dialog->swing, quantize_dialog->threshold); break; } @@ -1006,19 +1120,14 @@ connect(dlist, SIGNAL(curDrumInstrumentChanged(int)), SLOT(setCurDrumInstrument(int))); connect(dlist, SIGNAL(curDrumInstrumentChanged(int)), canvas, SLOT(setCurDrumInstrument(int))); - //printf("DrumEdit::addCtrl curDrumInstrument:%d\n", dlist->getSelectedInstrument()); - setCurDrumInstrument(dlist->getSelectedInstrument()); - // p3.3.44 ctrlEdit->setTool(tools2->curTool()); - ctrlEdit->setXPos(hscroll->pos()); ctrlEdit->setXMag(hscroll->getScaleValue()); if(split1w1) { - ///split2->setCollapsible(split1w1, false); split2->setCollapsible(split2->indexOf(split1w1), false); split1w1->setMinimumWidth(CTRL_PANEL_FIXED_WIDTH); } @@ -1052,7 +1161,6 @@ if(ctrlEditList.empty()) { split1w1->setMinimumWidth(0); - ///split2->setCollapsible(split1w1, true); split2->setCollapsible(split2->indexOf(split1w1), true); } } @@ -1068,11 +1176,8 @@ nw = 1; for (std::list::iterator i = ctrlEditList.begin(); - i != ctrlEditList.end(); ++i) { - // Changed by Tim. p3.3.7 - //(*i)->setCanvasWidth(w); + i != ctrlEditList.end(); ++i) (*i)->setCanvasWidth(nw); - } updateHScrollRange(); } @@ -1225,7 +1330,7 @@ } /* - else if (key == shortcuts[SHRT_INSERT_AT_LOCATION].key) { + else if (key == shortcuts[SHRT_INSERT_AT_LOCATION].key) { DELETETHIS pc->pianoCmd(CMD_INSERT); return; } @@ -1247,7 +1352,7 @@ else if (key == shortcuts[SHRT_TOGGLE_TRIOL].key) val = rasterTable[index + ((off == 0) ? 9 : 0)]; /* - else if (key == shortcuts[SHRT_EVENT_COLOR].key) { + else if (key == shortcuts[SHRT_EVENT_COLOR].key) { DELETETHIS if (colorMode == 0) colorMode = 1; else if (colorMode == 1) @@ -1314,7 +1419,6 @@ //--------------------------------------------------------- void DrumEdit::execDeliveredScript(int id) { - //QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; QString scriptfile = MusEGlobal::song->getScriptPath(id, true); MusEGlobal::song->executeScript(scriptfile.toLatin1().constData(), parts(), raster(), true); } @@ -1331,8 +1435,7 @@ void DrumEdit::setStep(QString v) { ((DrumCanvas*)canvas)->setStep(v.toInt()); - stepLenWidget->setFocusPolicy(Qt::NoFocus); - canvas->setFocus(); + focusCanvas(); } } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/midiedit/drumedit.h muse-2.0/muse/midiedit/drumedit.h --- muse-2.0~rc2/muse/midiedit/drumedit.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/drumedit.h 2012-06-30 19:24:42.000000000 +0200 @@ -25,7 +25,7 @@ #include -#include +#include #include "midieditor.h" #include "noteinfo.h" #include "cobject.h" @@ -72,11 +72,22 @@ class DrumEdit : public MidiEditor { Q_OBJECT - MusECore::Event selEvent; - MusECore::MidiPart* selPart; - int selTick; QMenu* menuEdit, *menuFunctions, *menuFile, *menuSelect; + int tickValue; + int lenValue; + int pitchValue; + int veloOnValue; + int veloOffValue; + bool firstValueSet; + int tickOffset; + int lenOffset; + int pitchOffset; + int veloOnOffset; + int veloOffOffset; + bool deltaMode; + int lastSelections; + MusEGui::NoteInfo* info; QToolButton* srec; QToolButton* midiin; @@ -113,7 +124,6 @@ private slots: void setRaster(int); void noteinfoChanged(MusEGui::NoteInfo::ValType type, int val); - //CtrlEdit* addCtrl(); void removeCtrl(CtrlEdit* ctrl); void cmd(int); void clipboardChanged(); // enable/disable "Paste" @@ -127,12 +137,14 @@ void configChanged(); void songChanged1(int); void setStep(QString); + void deltaModeChanged(bool); public slots: - void setSelection(int, MusECore::Event&, MusECore::Part*); + void setSelection(int /*tick*/, MusECore::Event&, MusECore::Part*, bool /*update*/); void soloChanged(bool); // called by Solo button void execDeliveredScript(int); void execUserScript(int); + void focusCanvas(); CtrlEdit* addCtrl(); virtual void updateHScrollRange(); @@ -140,7 +152,7 @@ void isDeleting(MusEGui::TopWin*); public: - DrumEdit(MusECore::PartList*, QWidget* parent = 0, const char* name = 0, unsigned initPos = MAXINT); + DrumEdit(MusECore::PartList*, QWidget* parent = 0, const char* name = 0, unsigned initPos = INT_MAX); virtual ~DrumEdit(); virtual void readStatus(MusECore::Xml&); virtual void writeStatus(int, MusECore::Xml&) const; diff -Nru muse-2.0~rc2/muse/midiedit/drummap.cpp muse-2.0/muse/midiedit/drummap.cpp --- muse-2.0~rc2/muse/midiedit/drummap.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/drummap.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -109,77 +109,6 @@ { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, - /* - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false }, - - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 83, 83, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 84, 84, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 85, 85, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 86, 86, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 87, 87, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 88, 88, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 89, 89, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 90, 90, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 91, 91, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 92, 92, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 93, 93, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 94, 94, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 95, 95, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 96, 96, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 97, 97, false }, - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 98, 98, false } - }; - */ - { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 99, 99, false }, { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 100, 100, false }, { QString(""), 100, 16, 32, 9, 0, 70, 90, 127, 110, 101, 101, false }, @@ -280,9 +209,7 @@ void resetGMDrumMap() { MusEGlobal::audio->msgIdle(true); - // Delete all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(false); - MusEGlobal::song->changeAllPortDrumCtrlEvents(false); + MusEGlobal::song->changeAllPortDrumCtrlEvents(false); // Delete all port controller events. for(int i = 0; i < DRUM_MAPSIZE; ++i) MusEGlobal::drumMap[i] = idrumMap[i]; @@ -292,9 +219,8 @@ MusEGlobal::drumInmap[(unsigned int)(MusEGlobal::drumMap[i].enote)] = i; MusEGlobal::drumOutmap[(unsigned int)(MusEGlobal::drumMap[i].anote)] = i; } - // Add all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(true); - MusEGlobal::song->changeAllPortDrumCtrlEvents(true); + + MusEGlobal::song->changeAllPortDrumCtrlEvents(true); // Add all port controller events. MusEGlobal::audio->msgIdle(false); } @@ -302,7 +228,6 @@ // operator == //--------------------------------------------------------- -//bool const DrumMap::operator==(const DrumMap& map) const bool DrumMap::operator==(const DrumMap& map) const { return @@ -456,9 +381,7 @@ void readDrumMap(Xml& xml, bool external) { MusEGlobal::audio->msgIdle(true); - // Delete all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(false); - MusEGlobal::song->changeAllPortDrumCtrlEvents(false); + MusEGlobal::song->changeAllPortDrumCtrlEvents(false); // Delete all port controller events. if (external) { for (int i = 0; i < DRUM_MAPSIZE; ++i) @@ -502,9 +425,8 @@ MusEGlobal::drumInmap[(unsigned int)(MusEGlobal::drumMap[i].enote)] = i; MusEGlobal::drumOutmap[(unsigned int)(MusEGlobal::drumMap[i].anote)] = i; } - // Add all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(true); - MusEGlobal::song->changeAllPortDrumCtrlEvents(true); + + MusEGlobal::song->changeAllPortDrumCtrlEvents(true); // Add all port controller events. MusEGlobal::audio->msgIdle(false); return; @@ -513,9 +435,8 @@ break; } } - // Add all port controller events. - //MusEGlobal::audio->msgChangeAllPortDrumCtrlEvents(true); - MusEGlobal::song->changeAllPortDrumCtrlEvents(true); + + MusEGlobal::song->changeAllPortDrumCtrlEvents(true); // Add all port controller events. MusEGlobal::audio->msgIdle(false); } diff -Nru muse-2.0~rc2/muse/midiedit/drummap.h muse-2.0/muse/midiedit/drummap.h --- muse-2.0~rc2/muse/midiedit/drummap.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/drummap.h 2012-06-30 19:24:42.000000000 +0200 @@ -44,7 +44,6 @@ char lv1, lv2, lv3, lv4; // velocities char enote, anote; // input note - output note bool mute; -// bool selected; bool operator==(const DrumMap& map) const; bool operator!=(const DrumMap& map) const { return !operator==(map); } diff -Nru muse-2.0~rc2/muse/midiedit/ecanvas.cpp muse-2.0/muse/midiedit/ecanvas.cpp --- muse-2.0~rc2/muse/midiedit/ecanvas.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/ecanvas.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -21,8 +21,9 @@ // //========================================================= +#include #include -#include +#include #include #include #include @@ -76,9 +77,7 @@ { int bar1, bar2, xx; unsigned x; - ///sigmap.tickValues(curPart->tick(), &bar1, &xx, &x); AL::sigmap.tickValues(curPart->tick(), &bar1, &xx, &x); - ///sigmap.tickValues(curPart->tick() + curPart->lenTick(), &bar2, &xx, &x); AL::sigmap.tickValues(curPart->tick() + curPart->lenTick(), &bar2, &xx, &x); return QString("MusE: Part <") + curPart->name() @@ -92,7 +91,7 @@ void EventCanvas::leaveEvent(QEvent*) { emit pitchChanged(-1); - emit timeChanged(MAXINT); + emit timeChanged(INT_MAX); } //--------------------------------------------------------- @@ -150,7 +149,8 @@ return; if (flags & ~SC_SELECTION) { - //items.clear(); + // TODO FIXME: don't we actually only want SC_PART_*, and maybe SC_TRACK_DELETED? + // (same in waveview.cpp) bool curItemNeedsRestore=false; MusECore::Event storedEvent; int partSn; @@ -163,7 +163,7 @@ curItem=NULL; items.clearDelete(); - start_tick = MAXINT; + start_tick = INT_MAX; end_tick = 0; curPart = 0; for (MusECore::iPart p = editor->parts()->begin(); p != editor->parts()->end(); ++p) { @@ -181,10 +181,8 @@ MusECore::EventList* el = part->events(); for (MusECore::iEvent i = el->begin(); i != el->end(); ++i) { MusECore::Event e = i->second; - // Added by T356. Do not add events which are either past, or extend past the end of the part. - // Reverted to just events which are past. p4.0.24 + // Do not add events which are past the end of the part. if(e.tick() > len) - //if(e.endTick() > len) break; if (e.isNote()) { @@ -224,17 +222,26 @@ start_tick = MusEGlobal::song->roundDownBar(start_tick); end_tick = MusEGlobal::song->roundUpBar(end_tick); - if (n == 1) { + if (n >= 1) + { x = nevent->x(); event = nevent->event(); part = (MusECore::MidiPart*)nevent->part(); - if (curPart != part) { + if (n == 1 && curPart != part) { curPart = part; curPartId = curPart->sn(); curPartChanged(); } - } - emit selectionChanged(x, event, part); + } + + bool f1 = flags & (SC_EVENT_INSERTED | SC_EVENT_MODIFIED | SC_EVENT_REMOVED | + SC_PART_INSERTED | SC_PART_MODIFIED | SC_PART_REMOVED | + SC_TRACK_INSERTED | SC_TRACK_REMOVED | SC_TRACK_MODIFIED | + SC_SIG | SC_TEMPO | SC_KEY | SC_MASTER | SC_CONFIG | SC_DRUMMAP); + bool f2 = flags & SC_SELECTION; + if(f1 || f2) // Try to avoid all unnecessary emissions. + emit selectionChanged(x, event, part, !f1); + if (curPart == 0) curPart = (MusECore::MidiPart*)(editor->parts()->begin()->second); redraw(); @@ -286,13 +293,10 @@ void EventCanvas::keyPress(QKeyEvent* event) { int key = event->key(); - ///if (event->state() & Qt::ShiftButton) if (((QInputEvent*)event)->modifiers() & Qt::ShiftModifier) key += Qt::SHIFT; - ///if (event->state() & Qt::AltButton) if (((QInputEvent*)event)->modifiers() & Qt::AltModifier) key += Qt::ALT; - ///if (event->state() & Qt::ControlButton) if (((QInputEvent*)event)->modifiers() & Qt::ControlModifier) key+= Qt::CTRL; @@ -327,6 +331,9 @@ // Select items by key (PianoRoll & DrumEditor) else if (key == shortcuts[SHRT_SEL_RIGHT].key || key == shortcuts[SHRT_SEL_RIGHT_ADD].key) { rciCItem i; + + if (items.empty()) + return; for (i = items.rbegin(); i != items.rend(); ++i) if (i->second->isSelected()) break; @@ -355,7 +362,9 @@ //Select items by key: (PianoRoll & DrumEditor) else if (key == shortcuts[SHRT_SEL_LEFT].key || key == shortcuts[SHRT_SEL_LEFT_ADD].key) { ciCItem i; - for (i = items.begin(); i != items.end(); ++i) + if (items.empty()) + return; + for (i = items.begin(); i != items.end(); ++i) if (i->second->isSelected()) break; diff -Nru muse-2.0~rc2/muse/midiedit/ecanvas.h muse-2.0/muse/midiedit/ecanvas.h --- muse-2.0~rc2/muse/midiedit/ecanvas.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/ecanvas.h 2012-06-30 19:24:42.000000000 +0200 @@ -57,9 +57,9 @@ class EventCanvas : public Canvas { Q_OBJECT + virtual void leaveEvent(QEvent*e); virtual void enterEvent(QEvent*e); - virtual void mouseMove(QMouseEvent* event); protected: @@ -72,7 +72,6 @@ void updateSelection(); virtual CItem* addItem(MusECore::Part*, MusECore::Event&) = 0; - // Added by T356. virtual QPoint raster(const QPoint&) const; virtual MusECore::Undo moveCanvasItems(CItemList&, int, int, DragType) = 0; virtual MusECore::UndoOp moveItem(CItem*, const QPoint&, DragType) = 0; @@ -86,7 +85,7 @@ signals: void pitchChanged(int); // current cursor position void timeChanged(unsigned); - void selectionChanged(int, MusECore::Event&, MusECore::Part*); + void selectionChanged(int /*tick*/ , MusECore::Event&, MusECore::Part*, bool /*update*/); void enterCanvas(); public: @@ -102,7 +101,7 @@ void playEvents(bool flag) { _playEvents = flag; } void selectAtTick(unsigned int tick); void viewDropEvent(QDropEvent* event); - virtual void modifySelected(NoteInfo::ValType, int) {} + virtual void modifySelected(NoteInfo::ValType, int /*val*/, bool /*delta_mode*/ = true) {} virtual void keyPress(QKeyEvent*); }; diff -Nru muse-2.0~rc2/muse/midiedit/piano.cpp muse-2.0/muse/midiedit/piano.cpp --- muse-2.0~rc2/muse/midiedit/piano.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/piano.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -404,13 +404,10 @@ int drawY = octaveSize * drawKey + 81 - KH*2; if (drawY > r.y() && drawY < r.y() + r.height()) { - //printf("drawing c %d at %d r.y %d r.x %d\n",drawKey, drawY, r.y(), r.x()); p.drawPixmap(0,drawY,*c_keys[drawKey]); } } - //p.drawTiledPixmap(r, *c1, r.topLeft()+offset + coffset); - //printf("drawText KH %d %d, x %d y %d\n",KH, curPitch, r.x(), r.y()); - //p.drawText(r,Qt::AlignAuto,"A"); + if (curPitch == -1) return; int y = pitch2y(curPitch); @@ -457,7 +454,7 @@ int Piano::y2pitch(int y) const { - const int total = (10 * 7 + 5) * KH; // 75 Ganztonschritte + const int total = (10 * 7 + 5) * KH; // 75 full tone steps y = total - y; int oct = (y / (7 * KH)) * 12; char kt[] = { @@ -524,7 +521,6 @@ keyDown = nk; if (keyDown != -1) { int velocity = event->x()*127/40; - //emit keyPressed(keyDown, shift); emit keyPressed(keyDown, velocity>127 ? 127 : velocity, shift); } } diff -Nru muse-2.0~rc2/muse/midiedit/pianoroll.cpp muse-2.0/muse/midiedit/pianoroll.cpp --- muse-2.0~rc2/muse/midiedit/pianoroll.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/pianoroll.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -87,8 +87,19 @@ PianoRoll::PianoRoll(MusECore::PartList* pl, QWidget* parent, const char* name, unsigned initPos) : MidiEditor(TopWin::PIANO_ROLL, _rasterInit, pl, parent, name) { - deltaMode = false; - selPart = 0; + deltaMode = false; + tickValue = 0; + lenValue = 0; + pitchValue = 0; + veloOnValue = 0; + veloOffValue = 0; + firstValueSet = false; + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; + lastSelections = 0; _playEvents = false; colorMode = colorModeInit; @@ -157,12 +168,10 @@ menuSelect->addSeparator(); - //selectPrevPartAction = select->addAction(tr("&Previous Part")); selectPrevPartAction = menuSelect->addAction(QIcon(*select_all_parts_on_trackIcon), tr("&Previous Part")); mapper->setMapping(selectPrevPartAction, PianoCanvas::CMD_SELECT_PREV_PART); connect(selectPrevPartAction, SIGNAL(triggered()), mapper, SLOT(map())); - //selNextPartAction = select->addAction(tr("&Next Part")); selectNextPartAction = menuSelect->addAction(QIcon(*select_all_parts_on_trackIcon), tr("&Next Part")); mapper->setMapping(selectNextPartAction, PianoCanvas::CMD_SELECT_NEXT_PART); connect(selectNextPartAction, SIGNAL(triggered()), mapper, SLOT(map())); @@ -232,17 +241,14 @@ QActionGroup* actgrp = new QActionGroup(this); actgrp->setExclusive(true); - //evColorBlueAction = eventColor->addAction(tr("&Blue")); evColorBlueAction = actgrp->addAction(tr("&Blue")); evColorBlueAction->setCheckable(true); colorMapper->setMapping(evColorBlueAction, 0); - //evColorPitchAction = eventColor->addAction(tr("&Pitch colors")); evColorPitchAction = actgrp->addAction(tr("&Pitch colors")); evColorPitchAction->setCheckable(true); colorMapper->setMapping(evColorPitchAction, 1); - //evColorVelAction = eventColor->addAction(tr("&Velocity colors")); evColorVelAction = actgrp->addAction(tr("&Velocity colors")); evColorVelAction->setCheckable(true); colorMapper->setMapping(evColorVelAction, 2); @@ -264,40 +270,31 @@ //---------ToolBar---------------------------------- tools = addToolBar(tr("Pianoroll tools")); tools->setObjectName("Pianoroll tools"); - tools->addActions(MusEGlobal::undoRedo->actions()); - tools->addSeparator(); srec = new QToolButton(); srec->setToolTip(tr("Step Record")); srec->setIcon(*steprecIcon); srec->setCheckable(true); + srec->setFocusPolicy(Qt::NoFocus); tools->addWidget(srec); midiin = new QToolButton(); midiin->setToolTip(tr("Midi Input")); midiin->setIcon(*midiinIcon); midiin->setCheckable(true); + midiin->setFocusPolicy(Qt::NoFocus); tools->addWidget(midiin); speaker = new QToolButton(); speaker->setToolTip(tr("Play Events")); speaker->setIcon(*speakerIcon); speaker->setCheckable(true); + speaker->setFocusPolicy(Qt::NoFocus); tools->addWidget(speaker); tools2 = new MusEGui::EditToolBar(this, pianorollTools); addToolBar(tools2); - QToolBar* panicToolbar = addToolBar(tr("panic")); - panicToolbar->setObjectName("panic"); - panicToolbar->addAction(MusEGlobal::panicAction); - - //------------------------------------------------------------- - // Transport Bar - QToolBar* transport = addToolBar(tr("transport")); - transport->setObjectName("transport"); - transport->addActions(MusEGlobal::transportAction->actions()); - addToolBarBreak(); toolbar = new MusEGui::Toolbar1(this, _rasterInit); addToolBar(toolbar); @@ -318,31 +315,21 @@ hsplitter->setHandleWidth(2); QPushButton* ctrl = new QPushButton(tr("ctrl"), mainw); - //QPushButton* ctrl = new QPushButton(tr("C"), mainw); // Tim. ctrl->setObjectName("Ctrl"); ctrl->setFont(MusEGlobal::config.fonts[3]); ctrl->setToolTip(tr("Add Controller View")); - //hscroll = new MusEGui::ScrollScale(-25, -2, xscale, 20000, Qt::Horizontal, mainw); - // Increased scale to -1. To resolve/select/edit 1-tick-wide (controller graph) events. p4.0.18 Tim. - hscroll = new MusEGui::ScrollScale(-25, -1, xscale, 20000, Qt::Horizontal, mainw); + ctrl->setFocusPolicy(Qt::NoFocus); + // Increased scale to -1. To resolve/select/edit 1-tick-wide (controller graph) events. + hscroll = new MusEGui::ScrollScale(-25, -1 /* formerly -2 */, xscale, 20000, Qt::Horizontal, mainw); ctrl->setFixedSize(pianoWidth, hscroll->sizeHint().height()); - //ctrl->setFixedSize(pianoWidth / 2, hscroll->sizeHint().height()); // Tim. - - // Tim. - /* - QPushButton* trackInfoButton = new QPushButton(tr("T"), mainw); - trackInfoButton->setObjectName("TrackInfo"); - trackInfoButton->setFont(MusEGlobal::config.fonts[3]); - trackInfoButton->setToolTip(tr("Show track info")); - trackInfoButton->setFixedSize(pianoWidth / 2, hscroll->sizeHint().height()); - */ + //ctrl->setFixedSize(pianoWidth / 2, hscroll->sizeHint().height()); // DELETETHIS? QSizeGrip* corner = new QSizeGrip(mainw); midiTrackInfo = new MusEGui::MidiTrackInfo(mainw); int mtiw = midiTrackInfo->width(); // Save this. midiTrackInfo->setMinimumWidth(100); - //midiTrackInfo->setMaximumWidth(150); + //midiTrackInfo->setMaximumWidth(150); DELETETHIS ? midiTrackInfo->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding)); infoScroll = new QScrollArea; @@ -351,7 +338,8 @@ infoScroll->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Expanding)); infoScroll->setWidget(midiTrackInfo); infoScroll->setWidgetResizable(true); - //infoScroll->setVisible(false); + infoScroll->setFocusPolicy(Qt::NoFocus); + //infoScroll->setVisible(false); DELETETHIS 4? //infoScroll->setEnabled(false); //hsplitter->addWidget(midiTrackInfo); @@ -362,43 +350,17 @@ mainGrid->setColumnStretch(1, 100); mainGrid->addWidget(hsplitter, 0, 1, 1, 3); - // Original. - /* - mainGrid->setColumnStretch(1, 100); - mainGrid->addWidget(splitter, 0, 0, 1, 3); - mainGrid->addWidget(ctrl, 1, 0); - mainGrid->addWidget(hscroll, 1, 1); - mainGrid->addWidget(corner, 1, 2, Qt::AlignBottom|Qt::AlignRight); - */ - - - // Tim. - /* - mainGrid->setColumnStretch(2, 100); - mainGrid->addWidget(splitter, 0, 0, 1, 4); - mainGrid->addWidget(trackInfoButton, 1, 0); - mainGrid->addWidget(ctrl, 1, 1); - mainGrid->addWidget(hscroll, 1, 2); - mainGrid->addWidget(corner, 1, 3, Qt::AlignBottom|Qt::AlignRight); - */ - - //mainGrid->addRowSpacing(1, hscroll->sizeHint().height()); - //mainGrid->addItem(new QSpacerItem(0, hscroll->sizeHint().height()), 1, 0); // Orig + Tim. - QWidget* split1 = new QWidget(splitter); split1->setObjectName("split1"); QGridLayout* gridS1 = new QGridLayout(split1); gridS1->setContentsMargins(0, 0, 0, 0); gridS1->setSpacing(0); - //Defined and configure your program change bar here. - //This may well be a copy of MTScale extended for our needs + time = new MusEGui::MTScale(&_raster, split1, xscale); Piano* piano = new Piano(split1, yscale); canvas = new PianoCanvas(this, split1, xscale, yscale); vscroll = new MusEGui::ScrollScale(-3, 7, yscale, KH * 75, Qt::Vertical, split1); - //setFocusProxy(canvas); // Tim. - int offset = -(MusEGlobal::config.division/4); canvas->setOrigin(offset, 0); canvas->setCanvasTools(pianorollTools); @@ -410,7 +372,6 @@ gridS1->setRowStretch(2, 100); gridS1->setColumnStretch(1, 100); - //gridS1->setColumnStretch(2, 100); // Tim. gridS1->addWidget(time, 0, 1, 1, 2); gridS1->addWidget(MusECore::hLine(split1), 1, 0, 1, 3); @@ -418,17 +379,6 @@ gridS1->addWidget(canvas, 2, 1); gridS1->addWidget(vscroll, 2, 2); - // Tim. - /* - gridS1->addWidget(time, 0, 2, 1, 3); - gridS1->addWidget(MusECore::hLine(split1), 1, 1, 1, 4); - //gridS1->addWidget(infoScroll, 2, 0); - gridS1->addWidget(infoScroll, 0, 0, 3, 1); - gridS1->addWidget(piano, 2, 1); - gridS1->addWidget(canvas, 2, 2); - gridS1->addWidget(vscroll, 2, 3); - */ - ctrlLane = new MusEGui::Splitter(Qt::Vertical, splitter, "ctrllane"); QWidget* split2 = new QWidget(splitter); split2->setMaximumHeight(hscroll->sizeHint().height()); @@ -441,11 +391,9 @@ gridS2->addWidget(ctrl, 0, 0); gridS2->addWidget(hscroll, 0, 1); gridS2->addWidget(corner, 0, 2, Qt::AlignBottom|Qt::AlignRight); - //splitter->setCollapsible(0, true); piano->setFixedWidth(pianoWidth); - // Tim. QList mops; mops.append(mtiw + 30); // 30 for possible scrollbar mops.append(width() - mtiw - 30); @@ -454,8 +402,9 @@ connect(tools2, SIGNAL(toolChanged(int)), canvas, SLOT(setTool(int))); connect(ctrl, SIGNAL(clicked()), SLOT(addCtrl())); - //connect(trackInfoButton, SIGNAL(clicked()), SLOT(toggleTrackInfo())); Tim. connect(info, SIGNAL(valueChanged(MusEGui::NoteInfo::ValType, int)), SLOT(noteinfoChanged(MusEGui::NoteInfo::ValType, int))); + connect(info, SIGNAL(deltaModeChanged(bool)), SLOT(deltaModeChanged(bool))); + connect(vscroll, SIGNAL(scrollChanged(int)), piano, SLOT(setYPos(int))); connect(vscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setYPos(int))); connect(vscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setYMag(int))); @@ -472,8 +421,8 @@ connect(canvas, SIGNAL(verticalScroll(unsigned)), vscroll, SLOT(setPos(unsigned))); connect(canvas, SIGNAL(horizontalScroll(unsigned)),hscroll, SLOT(setPos(unsigned))); connect(canvas, SIGNAL(horizontalScrollNoLimit(unsigned)),hscroll, SLOT(setPosNoLimit(unsigned))); - connect(canvas, SIGNAL(selectionChanged(int, MusECore::Event&, MusECore::Part*)), this, - SLOT(setSelection(int, MusECore::Event&, MusECore::Part*))); + connect(canvas, SIGNAL(selectionChanged(int, MusECore::Event&, MusECore::Part*, bool)), this, + SLOT(setSelection(int, MusECore::Event&, MusECore::Part*, bool))); connect(piano, SIGNAL(keyPressed(int, int, bool)), canvas, SLOT(pianoPressed(int, int, bool))); connect(piano, SIGNAL(keyReleased(int, bool)), canvas, SLOT(pianoReleased(int, bool))); @@ -482,11 +431,15 @@ connect(speaker, SIGNAL(toggled(bool)), SLOT(setSpeaker(bool))); connect(canvas, SIGNAL(followEvent(int)), SLOT(follow(int))); + connect(info, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(info, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(midiTrackInfo, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(midiTrackInfo, SIGNAL(escapePressed()), SLOT(focusCanvas())); + connect(hscroll, SIGNAL(scaleChanged(int)), SLOT(updateHScrollRange())); piano->setYPos(KH * 30); canvas->setYPos(KH * 30); vscroll->setPos(KH * 30); - //setSelection(0, 0, 0); //Really necessary? Causes segfault when only 1 item selected, replaced by the following: info->setEnabled(false); connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged1(int))); @@ -502,10 +455,10 @@ connect(toolbar, SIGNAL(rasterChanged(int)),SLOT(setRaster(int))); connect(toolbar, SIGNAL(soloChanged(bool)), SLOT(soloChanged(bool))); - setFocusPolicy(Qt::StrongFocus); + setFocusPolicy(Qt::NoFocus); + setEventColorMode(colorMode); - QClipboard* cb = QApplication::clipboard(); connect(cb, SIGNAL(dataChanged()), SLOT(clipboardChanged())); @@ -516,13 +469,12 @@ const MusECore::Pos cpos=MusEGlobal::song->cPos(); canvas->setPos(0, cpos.tick(), true); canvas->selectAtTick(cpos.tick()); - //canvas->selectFirst();// unsigned pos=0; - if(initPos >= MAXINT) + if(initPos >= INT_MAX) pos = MusEGlobal::song->cpos(); - if(pos > MAXINT) - pos = MAXINT; + if(pos > INT_MAX) + pos = INT_MAX; if (pos) hscroll->setOffset((int)pos); @@ -533,7 +485,7 @@ } initTopwinState(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } //--------------------------------------------------------- @@ -546,12 +498,10 @@ return; if (bits & SC_SOLO) - { toolbar->setSolo(canvas->track()->solo()); - return; - } + songChanged(bits); - //trackInfo->songChanged(bits); + // We'll receive SC_SELECTION if a different part is selected. if (bits & SC_SELECTION) updateTrackInfo(); @@ -564,7 +514,6 @@ void PianoRoll::configChanged() { initShortcuts(); - //trackInfo->updateTrackInfo(); } //--------------------------------------------------------- @@ -592,7 +541,6 @@ selected = curCanvasPart()->track(); if (selected->isMidiTrack()) { midiTrackInfo->setTrack(selected); - ///midiTrackInfo->updateTrackInfo(-1); } } @@ -627,7 +575,6 @@ PianoRoll::~PianoRoll() { - // MusEGlobal::undoRedo->removeFrom(tools); // p4.0.6 Removed } //--------------------------------------------------------- @@ -674,107 +621,174 @@ // update Info Line //--------------------------------------------------------- -void PianoRoll::setSelection(int tick, MusECore::Event& e, MusECore::Part* p) +void PianoRoll::setSelection(int tick, MusECore::Event& e, MusECore::Part* /*part*/, bool update) { int selections = canvas->selectionSize(); - selEvent = e; - selPart = (MusECore::MidiPart*)p; - selTick = tick; + // Diagnostics: + //printf("PianoRoll::setSelection selections:%d event empty:%d firstValueSet:%d\n", selections, e.empty(), firstValueSet); + //if(!e.empty()) + // e.dump(); + + if(update) + { + // Selections have changed. Reset these. + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; + + // Force 'suggested' modes: + if (selections == 1) + { + deltaMode = false; + info->setDeltaMode(deltaMode); + } + else + if (selections > 1) + { + // A feeble attempt to hold on to the user's setting. Should try to bring back + // selEvent (removed), but there were problems using it (it's a reference). + //if(lastSelections <= 1) + { + deltaMode = true; + info->setDeltaMode(deltaMode); + } + } + } - if (selections > 1) { - info->setEnabled(true); - info->setDeltaMode(true); - if (!deltaMode) { - deltaMode = true; - info->setValues(0, 0, 0, 0, 0); - tickOffset = 0; - lenOffset = 0; - pitchOffset = 0; - veloOnOffset = 0; - veloOffOffset = 0; - } - } - else if (selections == 1) { - deltaMode = false; + lastSelections = selections; + + if ((selections == 1) || (selections > 1 && !firstValueSet)) + { + tickValue = tick; + lenValue = e.lenTick(); + pitchValue = e.pitch(); + veloOnValue = e.velo(); + veloOffValue = e.veloOff(); + firstValueSet = true; + } + + if (selections > 0) { info->setEnabled(true); - info->setDeltaMode(false); - info->setValues(tick, - selEvent.lenTick(), - selEvent.pitch(), - selEvent.velo(), - selEvent.veloOff()); + if (deltaMode) + info->setValues(tickOffset, lenOffset, pitchOffset, veloOnOffset, veloOffOffset); + else + info->setValues(tickValue, lenValue, pitchValue, veloOnValue, veloOffValue); } else { - deltaMode = false; info->setEnabled(false); + info->setValues(0, 0, 0, 0, 0); + firstValueSet = false; + tickValue = 0; + lenValue = 0; + pitchValue = 0; + veloOnValue = 0; + veloOffValue = 0; + tickOffset = 0; + lenOffset = 0; + pitchOffset = 0; + veloOnOffset = 0; + veloOffOffset = 0; } + + info->setReturnMode(selections >= 2); selectionChanged(); } //--------------------------------------------------------- +// focusCanvas +//--------------------------------------------------------- + +void PianoRoll::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + canvas->setFocus(); + canvas->activateWindow(); + } +} + +//--------------------------------------------------------- +// deltaModeChanged +//--------------------------------------------------------- + +void PianoRoll::deltaModeChanged(bool delta_on) +{ + if(deltaMode == delta_on) + return; + deltaMode = delta_on; + + if(canvas->selectionSize() > 0) + { + if(deltaMode) + info->setValues(tickOffset, lenOffset, pitchOffset, veloOnOffset, veloOffOffset); + else + info->setValues(tickValue, lenValue, pitchValue, veloOnValue, veloOffValue); + } +} + +//--------------------------------------------------------- // edit currently selected Event //--------------------------------------------------------- void PianoRoll::noteinfoChanged(MusEGui::NoteInfo::ValType type, int val) - { + { int selections = canvas->selectionSize(); if (selections == 0) { printf("noteinfoChanged while nothing selected\n"); } - else if (selections == 1) { - MusECore::Event event = selEvent.clone(); - switch(type) { - case MusEGui::NoteInfo::VAL_TIME: - event.setTick(val - selPart->tick()); - break; - case MusEGui::NoteInfo::VAL_LEN: - event.setLenTick(val); - break; - case MusEGui::NoteInfo::VAL_VELON: - event.setVelo(val); - break; - case MusEGui::NoteInfo::VAL_VELOFF: - event.setVeloOff(val); - break; - case MusEGui::NoteInfo::VAL_PITCH: - event.setPitch(val); - break; + else if (selections > 0) { + if(deltaMode) { + // treat noteinfo values as offsets to event values + int delta = 0; + switch (type) { + case MusEGui::NoteInfo::VAL_TIME: + delta = val - tickOffset; + tickOffset = val; + break; + case MusEGui::NoteInfo::VAL_LEN: + delta = val - lenOffset; + lenOffset = val; + break; + case MusEGui::NoteInfo::VAL_VELON: + delta = val - veloOnOffset; + veloOnOffset = val; + break; + case MusEGui::NoteInfo::VAL_VELOFF: + delta = val - veloOffOffset; + veloOffOffset = val; + break; + case MusEGui::NoteInfo::VAL_PITCH: + delta = val - pitchOffset; + pitchOffset = val; + break; + } + if (delta) + canvas->modifySelected(type, delta); } - // Indicate do undo, and do not do port controller values and clone parts. - //MusEGlobal::audio->msgChangeEvent(selEvent, event, selPart); - MusEGlobal::audio->msgChangeEvent(selEvent, event, selPart, true, false, false); - } - else { - // multiple events are selected; treat noteinfo values - // as offsets to event values - - int delta = 0; - switch (type) { - case MusEGui::NoteInfo::VAL_TIME: - delta = val - tickOffset; - tickOffset = val; - break; - case MusEGui::NoteInfo::VAL_LEN: - delta = val - lenOffset; - lenOffset = val; - break; - case MusEGui::NoteInfo::VAL_VELON: - delta = val - veloOnOffset; - veloOnOffset = val; - break; - case MusEGui::NoteInfo::VAL_VELOFF: - delta = val - veloOffOffset; - veloOffOffset = val; - break; - case MusEGui::NoteInfo::VAL_PITCH: - delta = val - pitchOffset; - pitchOffset = val; - break; + else { + switch (type) { + case MusEGui::NoteInfo::VAL_TIME: + tickValue = val; + break; + case MusEGui::NoteInfo::VAL_LEN: + lenValue = val; + break; + case MusEGui::NoteInfo::VAL_VELON: + veloOnValue = val; + break; + case MusEGui::NoteInfo::VAL_VELOFF: + veloOffValue = val; + break; + case MusEGui::NoteInfo::VAL_PITCH: + pitchValue = val; + break; + } + canvas->modifySelected(type, val, false); // No delta mode. } - if (delta) - canvas->modifySelected(type, delta); } } @@ -784,8 +798,7 @@ CtrlEdit* PianoRoll::addCtrl() { - ///CtrlEdit* ctrlEdit = new CtrlEdit(splitter, this, xscale, false, "pianoCtrlEdit"); - CtrlEdit* ctrlEdit = new CtrlEdit(ctrlLane/*splitter*/, this, xscale, false, "pianoCtrlEdit"); // ccharrett + CtrlEdit* ctrlEdit = new CtrlEdit(ctrlLane/* formerly splitter*/, this, xscale, false, "pianoCtrlEdit"); // ccharrett connect(tools2, SIGNAL(toolChanged(int)), ctrlEdit, SLOT(setTool(int))); connect(hscroll, SIGNAL(scrollChanged(int)), ctrlEdit, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scaleChanged(int)), ctrlEdit, SLOT(setXMag(int))); @@ -828,7 +841,6 @@ _isDeleting = true; // Set flag so certain signals like songChanged, which may cause crash during delete, can be ignored. QSettings settings("MusE", "MusE-qt"); - //settings.setValue("Pianoroll/geometry", saveGeometry()); settings.setValue("Pianoroll/windowState", saveState()); emit isDeleting(static_cast(this)); @@ -899,7 +911,7 @@ _rasterInit = val; MidiEditor::setRaster(val); canvas->redrawGrid(); - canvas->setFocus(); // give back focus after kb input + focusCanvas(); // give back focus after kb input } //--------------------------------------------------------- @@ -1202,9 +1214,6 @@ colorMode = mode; colorModeInit = colorMode; - ///eventColor->setItemChecked(0, mode == 0); - ///eventColor->setItemChecked(1, mode == 1); - ///eventColor->setItemChecked(2, mode == 2); evColorBlueAction->setChecked(mode == 0); evColorPitchAction->setChecked(mode == 1); evColorVelAction->setChecked(mode == 2); @@ -1244,20 +1253,6 @@ canvas->playEvents(_playEvents); } - - -/* -//--------------------------------------------------------- -// trackInfoScroll -//--------------------------------------------------------- - -void PianoRoll::trackInfoScroll(int y) - { - if (trackInfo->visibleWidget()) - trackInfo->visibleWidget()->move(0, -y); - } -*/ - //--------------------------------------------------------- // initShortcuts //--------------------------------------------------------- @@ -1301,7 +1296,6 @@ //--------------------------------------------------------- void PianoRoll::execDeliveredScript(int id) { - //QString scriptfile = QString(INSTPREFIX) + SCRIPTSSUFFIX + deliveredScriptNames[id]; QString scriptfile = MusEGlobal::song->getScriptPath(id, true); MusEGlobal::song->executeScript(scriptfile.toAscii().data(), parts(), raster(), true); } @@ -1321,7 +1315,7 @@ void PianoRoll::newCanvasWidth(int /*w*/) { -/* +/* DELETETHIS whole function? int nw = w + (vscroll->width() - 18); // 18 is the fixed width of the CtlEdit VScale widget. if(nw < 1) nw = 1; diff -Nru muse-2.0~rc2/muse/midiedit/pianoroll.h muse-2.0/muse/midiedit/pianoroll.h --- muse-2.0~rc2/muse/midiedit/pianoroll.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/pianoroll.h 2012-06-30 19:24:42.000000000 +0200 @@ -28,7 +28,7 @@ #include #include -#include +#include #include "noteinfo.h" #include "cobject.h" #include "midieditor.h" @@ -72,15 +72,6 @@ class PianoRoll : public MidiEditor { Q_OBJECT - MusECore::Event selEvent; - MusECore::MidiPart* selPart; - int selTick; - - //enum { CMD_EVENT_COLOR, CMD_CONFIG_QUANT, CMD_LAST }; - //int menu_ids[CMD_LAST]; - //Q3PopupMenu *menuEdit, *menuFunctions, *menuSelect, *menuConfig, *menuPlugins; - - QMenu *menuEdit, *menuFunctions, *menuSelect, *menuConfig, *eventColor, *menuPlugins; MusEGui::MidiTrackInfo *midiTrackInfo; MusECore::Track* selected; @@ -115,12 +106,19 @@ QAction* funcDelOverlapsAction; + int tickValue; + int lenValue; + int pitchValue; + int veloOnValue; + int veloOffValue; + bool firstValueSet; int tickOffset; int lenOffset; int pitchOffset; int veloOnOffset; int veloOffOffset; bool deltaMode; + int lastSelections; MusEGui::NoteInfo* info; QToolButton* srec; @@ -143,7 +141,6 @@ bool _playEvents; - //QScrollBar* infoScroll; QScrollArea* infoScroll; @@ -154,12 +151,10 @@ virtual void keyPressEvent(QKeyEvent*); private slots: - void setSelection(int, MusECore::Event&, MusECore::Part*); + void setSelection(int /*tick*/, MusECore::Event&, MusECore::Part*, bool /*update*/); void noteinfoChanged(MusEGui::NoteInfo::ValType, int); - //CtrlEdit* addCtrl(); void removeCtrl(CtrlEdit* ctrl); void soloChanged(bool flag); - //void trackInfoScroll(int); void setRaster(int); void cmd(int); void setSteprec(bool); @@ -174,6 +169,7 @@ void newCanvasWidth(int); void toggleTrackInfo(); void updateTrackInfo(); + void deltaModeChanged(bool); signals: void isDeleting(MusEGui::TopWin*); @@ -182,10 +178,11 @@ virtual void updateHScrollRange(); void execDeliveredScript(int id); void execUserScript(int id); + void focusCanvas(); CtrlEdit* addCtrl(); public: - PianoRoll(MusECore::PartList*, QWidget* parent = 0, const char* name = 0, unsigned initPos = MAXINT); + PianoRoll(MusECore::PartList*, QWidget* parent = 0, const char* name = 0, unsigned initPos = INT_MAX); ~PianoRoll(); virtual void readStatus(MusECore::Xml&); virtual void writeStatus(int, MusECore::Xml&) const; diff -Nru muse-2.0~rc2/muse/midiedit/prcanvas.cpp muse-2.0/muse/midiedit/prcanvas.cpp --- muse-2.0~rc2/muse/midiedit/prcanvas.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/prcanvas.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -34,15 +34,10 @@ #include -#include +#include #include #include #include -//#include -//#include -//#include -//#include -//#include #include "xml.h" #include "prcanvas.h" @@ -88,7 +83,7 @@ int diff = event.tick()-part->lenTick(); if (diff > 0) {// too short part? extend it - //printf("addItem - this code should not be run!\n"); + //printf("addItem - this code should not be run!\n"); DELETETHIS //MusECore::Part* newPart = part->clone(); //newPart->setLenTick(newPart->lenTick()+diff); //MusEGlobal::audio->msgChangePart(part, newPart,false); @@ -173,24 +168,16 @@ QRect rr = map(rect); // Use our own map instead. QRect mer = map(r); - ///r = r.intersected(rect); - //QRect rr = r & rect; - ///if(!r.isValid()) - //if(!rr.isValid()) - // return; QRect mr = rr & mer; - //if(!mr.isValid()) if(mr.isNull()) return; - //p.save(); - p.setPen(Qt::black); struct Triple { int r, g, b; }; - static Triple myColors /*Qt::color1*/[12] = { // ddskrjp + static Triple myColors [12] = { // ddskrjp { 0xff, 0x3d, 0x39 }, { 0x39, 0xff, 0x39 }, { 0x39, 0x3d, 0xff }, @@ -230,7 +217,7 @@ break; case 1: // pitch { - Triple* c = &myColors/*Qt::color1*/[event.pitch() % 12]; + Triple* c = &myColors[event.pitch() % 12]; color.setRgb(c->r, c->g, c->b); } break; @@ -257,7 +244,7 @@ int mey = mer.y(); int mew = mer.width(); int meh = mer.height(); - //int mfx = mx; + //int mfx = mx; DELETETHIS //if(mfx == mex) mfx += 1; //int mfy = my; //if(mfy == mey) mfy += 1; @@ -268,13 +255,13 @@ //if(mfh == meh) mfh -= 1; //if(mfy == mey) mfh -= 1; color.setAlpha(MusEGlobal::config.globalAlphaBlend); - //QLinearGradient gradient(mex + 1, mey + 1, mex + 1, mey + meh - 2); // Inside the border + //QLinearGradient gradient(mex + 1, mey + 1, mex + 1, mey + meh - 2); // Inside the border DELETETHIS //gradient.setColorAt(0, color); //gradient.setColorAt(1, color.darker()); //QBrush brush(gradient); QBrush brush(color); p.fillRect(mr, brush); - //p.fillRect(mfx, mfy, mfw, mfh, brush); + //p.fillRect(mfx, mfy, mfw, mfh, brush); DELETETHIS if(mex >= mx && mex <= mx + mw) p.drawLine(mex, my, mex, my + mh - 1); // The left edge @@ -285,9 +272,7 @@ if(mey + meh >= my && mey + meh <= my + mh) p.drawLine(mx, mey + meh - 1, mx + mw - 1, mey + meh - 1); // The bottom edge - //p.setWorldMatrixEnabled(true); p.setWorldMatrixEnabled(wmtxen); - //p.restore(); } //--------------------------------------------------------- @@ -303,10 +288,6 @@ void PianoCanvas::drawMoving(QPainter& p, const MusEGui::CItem* item, const QRect& rect) { - //if(((NEvent*)item)->part() != curPart) - // return; - //if(!item->isMoving()) - // return; QRect mr = QRect(item->mp().x(), item->mp().y() - item->height()/2, item->width(), item->height()); mr = mr.intersected(rect); if(!mr.isValid()) @@ -475,9 +456,7 @@ MusEGlobal::audio->msgPlayMidiEvent(&ev2); } - // Changed by T356. - MusECore::Part* part = nevent->part(); // - //MusECore::Part* part = Canvas::part(); // part can be dynamically recreated, ask the authority + MusECore::Part* part = nevent->part(); newEvent.setPitch(npitch); int ntick = editor->rasterVal(x) - part->tick(); @@ -486,10 +465,9 @@ newEvent.setTick(ntick); newEvent.setLenTick(event.lenTick()); - // Added by T356, removed by flo93: with operation groups, it happens that the - // part is too short right now, even if it's queued for being extended - //if(((int)newEvent.endTick() - (int)part->lenTick()) > 0) - // printf("PianoCanvas::moveItem Error! New event end:%d exceeds length:%d of part:%s\n", newEvent.endTick(), part->lenTick(), part->name().toLatin1().constData()); + // don't check, whether the new event is within the part + // at this place. with operation groups, the part isn't + // resized yet. (flo93) if (dtype == MOVE_COPY || dtype == MOVE_CLONE) return MusECore::UndoOp(MusECore::UndoOp::AddEvent, newEvent, part, false, false); @@ -503,13 +481,13 @@ MusEGui::CItem* PianoCanvas::newItem(const QPoint& p, int) { - //printf("newItem point\n"); int pitch = y2pitch(p.y()); int tick = editor->rasterVal1(p.x()); int len = p.x() - tick; tick -= curPart->tick(); if (tick < 0) - tick=0; + //tick=0; + return 0; MusECore::Event e = MusECore::Event(MusECore::Note); e.setTick(tick); e.setPitch(pitch); @@ -520,7 +498,6 @@ void PianoCanvas::newItem(MusEGui::CItem* item, bool noSnap) { - //printf("newItem citem\n"); NEvent* nevent = (NEvent*) item; MusECore::Event event = nevent->event(); int x = item->x(); @@ -554,8 +531,7 @@ MusEGlobal::song->applyOperationGroup(operations); } - //else forbid action by not applying it - else + else // forbid action by not applying it songChanged(SC_EVENT_INSERTED); //this forces an update of the itemlist, which is neccessary //to remove "forbidden" events from the list again } @@ -566,7 +542,6 @@ void PianoCanvas::resizeItem(MusEGui::CItem* item, bool noSnap, bool) // experimental changes to try dynamically extending parts { - //printf("resizeItem!\n"); NEvent* nevent = (NEvent*) item; MusECore::Event event = nevent->event(); MusECore::Event newEvent = event.clone(); @@ -577,7 +552,6 @@ if (noSnap) len = nevent->width(); else { - //MusECore::Part* part = nevent->part(); unsigned tick = event.tick() + part->tick(); len = editor->rasterVal(tick + nevent->width()) - tick; if (len <= 0) @@ -681,7 +655,7 @@ for (std::list::iterator i = elist.begin(); i != elist.end(); ++i) { MusECore::Event event = *i; MusECore::Event newEvent = event.clone(); - newEvent.setTick(event.tick() + editor->raster());// - part->tick()); + newEvent.setTick(event.tick() + editor->raster());// - part->tick()); DELETETHIS // Do not do port controller values and clone parts. operations.push_back(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part, false, false)); } @@ -734,7 +708,7 @@ MusECore::MidiPlayEvent e(0, port, channel, 0x90, pitch, velocity); MusEGlobal::audio->msgPlayMidiEvent(&e); - if (_steprec && pos[0] >= start_tick /* && pos[0] < end_tick [removed by flo93: this is handled in steprec->record] */ && curPart) + if (_steprec && curPart && pos[0] >= start_tick) // && pos[0] < end_tick [removed by flo93: this is handled in steprec->record] steprec->record(curPart,pitch,editor->raster(),editor->raster(),velocity,MusEGlobal::globalKeyState&Qt::ControlModifier,shift); } @@ -764,6 +738,8 @@ int w = rect.width(); int h = rect.height(); + //DELETETHIS whoa, clean up the whole function. remove every commented out code line + // Changed to draw in device coordinate space instead of virtual, transformed space. Tim. p4.0.30 //int mx = mapx(x); @@ -984,7 +960,7 @@ void PianoCanvas::dragEnterEvent(QDragEnterEvent* event) { - ///event->accept(Q3TextDrag::canDecode(event)); + //event->accept(Q3TextDrag::canDecode(event)); event->acceptProposedAction(); // TODO CHECK Tim. } @@ -994,7 +970,7 @@ void PianoCanvas::dragMoveEvent(QDragMoveEvent*) { - //printf("drag move %x\n", this); + //printf("drag move %x\n", this); DELETETHIS (whole function?) //event->acceptProposedAction(); } @@ -1004,7 +980,7 @@ void PianoCanvas::dragLeaveEvent(QDragLeaveEvent*) { - //printf("drag leave\n"); + //printf("drag leave\n"); DELETETHIS (whole function?) //event->acceptProposedAction(); } @@ -1082,7 +1058,7 @@ // modifySelected //--------------------------------------------------------- -void PianoCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int delta) +void PianoCanvas::modifySelected(MusEGui::NoteInfo::ValType type, int val, bool delta_mode) { QList< QPair > already_done; MusEGlobal::audio->msgIdle(true); @@ -1105,7 +1081,11 @@ switch (type) { case MusEGui::NoteInfo::VAL_TIME: { - int newTime = event.tick() + delta; + int newTime = val; + if(delta_mode) + newTime += event.tick(); + else + newTime -= part->tick(); if (newTime < 0) newTime = 0; newEvent.setTick(newTime); @@ -1113,7 +1093,9 @@ break; case MusEGui::NoteInfo::VAL_LEN: { - int len = event.lenTick() + delta; + int len = val; + if(delta_mode) + len += event.lenTick(); if (len < 1) len = 1; newEvent.setLenTick(len); @@ -1121,7 +1103,9 @@ break; case MusEGui::NoteInfo::VAL_VELON: { - int velo = event.velo() + delta; + int velo = val; + if(delta_mode) + velo += event.velo(); if (velo > 127) velo = 127; else if (velo < 0) @@ -1131,7 +1115,9 @@ break; case MusEGui::NoteInfo::VAL_VELOFF: { - int velo = event.veloOff() + delta; + int velo = val; + if(delta_mode) + velo += event.veloOff(); if (velo > 127) velo = 127; else if (velo < 0) @@ -1141,7 +1127,9 @@ break; case MusEGui::NoteInfo::VAL_PITCH: { - int pitch = event.pitch() + delta; + int pitch = val; + if(delta_mode) + pitch += event.pitch(); if (pitch > 127) pitch = 127; else if (pitch < 0) @@ -1150,9 +1138,9 @@ } break; } + MusEGlobal::song->changeEvent(event, newEvent, part); // Indicate do not do port controller values and clone parts. - //MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part)); MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part, false, false)); already_done.append(QPair(part->events(), event)); diff -Nru muse-2.0~rc2/muse/midiedit/prcanvas.h muse-2.0/muse/midiedit/prcanvas.h --- muse-2.0~rc2/muse/midiedit/prcanvas.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/prcanvas.h 2012-06-30 19:24:42.000000000 +0200 @@ -125,7 +125,7 @@ colorMode = mode; redraw(); } - virtual void modifySelected(NoteInfo::ValType type, int delta); + virtual void modifySelected(NoteInfo::ValType type, int val, bool delta_mode = true); }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/midiedit/scoreedit.cpp muse-2.0/muse/midiedit/scoreedit.cpp --- muse-2.0~rc2/muse/midiedit/scoreedit.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/scoreedit.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -45,7 +45,6 @@ #include #include #include -#include #include #include @@ -69,12 +68,9 @@ #include "functions.h" #include "helper.h" #include "cmd.h" -#include "sig.h" #include "song.h" #include "shortcuts.h" -//#include "../ctrl/ctrledit.h" - using MusEGlobal::debugMsg; using MusEGlobal::heavyDebugMsg; @@ -108,7 +104,8 @@ -//do NOT put parentheses around this! +//do NOT put parentheses around this! and always right-multiply it, +//that is: foo * PAGESTEP, never PAGESTEP * foo! #define PAGESTEP 3/4 @@ -184,7 +181,7 @@ : TopWin(TopWin::SCORE, parent, name) { setAttribute(Qt::WA_DeleteOnClose); - setFocusPolicy(Qt::StrongFocus); + setFocusPolicy(Qt::NoFocus); mainw = new QWidget(this); @@ -237,17 +234,13 @@ // Toolbars --------------------------------------------------------- - QToolBar* undo_tools=addToolBar(tr("Undo/Redo tools")); - undo_tools->setObjectName("Undo/Redo tools"); - undo_tools->addActions(MusEGlobal::undoRedo->actions()); - addToolBar(undo_tools); - QToolBar* steprec_tools=addToolBar(tr("Step recording tools")); steprec_tools->setObjectName("Step recording tools"); srec = new QToolButton(); srec->setToolTip(tr("Step Record")); srec->setIcon(*steprecIcon); srec->setCheckable(true); + srec->setFocusPolicy(Qt::NoFocus); steprec_tools->addWidget(srec); connect(srec, SIGNAL(toggled(bool)), score_canvas, SLOT(set_steprec(bool))); @@ -258,14 +251,6 @@ score_canvas->set_tool(MusEGui::PointerTool); connect(edit_tools, SIGNAL(toolChanged(int)), score_canvas, SLOT(set_tool(int))); - QToolBar* panic_toolbar = addToolBar(tr("panic")); - panic_toolbar->setObjectName("panic"); - panic_toolbar->addAction(MusEGlobal::panicAction); - - QToolBar* transport_toolbar = addToolBar(tr("transport")); - transport_toolbar->setObjectName("transport"); - transport_toolbar->addActions(MusEGlobal::transportAction->actions()); - addToolBarBreak(); QToolBar* note_settings_toolbar = addToolBar(tr("Note settings")); @@ -331,24 +316,28 @@ note_settings_toolbar->addWidget(apply_velo_to_label); note_settings_toolbar->addWidget(new QLabel(tr("Velocity:"), note_settings_toolbar)); - velo_spinbox = new QSpinBox(this); + velo_spinbox = new SpinBox(this); velo_spinbox->setRange(0, 127); velo_spinbox->setSingleStep(1); //we do not use the valueChanged signal, because that would generate //many many undos when using the spin buttons. connect(velo_spinbox, SIGNAL(editingFinished()), SLOT(velo_box_changed())); connect(this,SIGNAL(velo_changed(int)), score_canvas, SLOT(set_velo(int))); + connect(velo_spinbox, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(velo_spinbox, SIGNAL(escapePressed()), SLOT(focusCanvas())); note_settings_toolbar->addWidget(velo_spinbox); velo_spinbox->setValue(ScoreCanvas::note_velo_init); note_settings_toolbar->addWidget(new QLabel(tr("Off-Velocity:"), note_settings_toolbar)); - velo_off_spinbox = new QSpinBox(this); + velo_off_spinbox = new SpinBox(this); velo_off_spinbox->setRange(0, 127); velo_off_spinbox->setSingleStep(1); //we do not use the valueChanged signal, because that would generate //many many undos when using the spin buttons. connect(velo_off_spinbox, SIGNAL(editingFinished()), SLOT(velo_off_box_changed())); connect(this,SIGNAL(velo_off_changed(int)), score_canvas, SLOT(set_velo_off(int))); + connect(velo_off_spinbox, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(velo_off_spinbox, SIGNAL(escapePressed()), SLOT(focusCanvas())); note_settings_toolbar->addWidget(velo_off_spinbox); velo_off_spinbox->setValue(ScoreCanvas::note_velo_off_init); @@ -363,25 +352,30 @@ quant_combobox->addItem("8"); // _quant_power2 and _quant_power2_init quant_combobox->addItem("16"); // and MAX_QUANT_POWER (must be log2(largest_value)) quant_combobox->addItem("32"); + quant_combobox->setFocusPolicy(Qt::TabFocus); quant_combobox->setCurrentIndex(score_canvas->quant_power2()-1); // the above is intendedly executed BEFORE connecting. otherwise this would // destroy pixels_per_whole_init! - connect(quant_combobox, SIGNAL(currentIndexChanged(int)), score_canvas, SLOT(set_quant(int))); + //connect(quant_combobox, SIGNAL(currentIndexChanged(int)), score_canvas, SLOT(set_quant(int))); + connect(quant_combobox, SIGNAL(activated(int)), SLOT(quant_combobox_changed(int))); // Tim quant_toolbar->addWidget(quant_combobox); quant_toolbar->addSeparator(); quant_toolbar->addWidget(new QLabel(tr("Pixels per whole:"), quant_toolbar)); - px_per_whole_spinbox = new QSpinBox(this); + px_per_whole_spinbox = new SpinBox(this); + px_per_whole_spinbox->setFocusPolicy(Qt::StrongFocus); px_per_whole_spinbox->setRange(10, 1200); px_per_whole_spinbox->setSingleStep(50); connect(px_per_whole_spinbox, SIGNAL(valueChanged(int)), score_canvas, SLOT(set_pixels_per_whole(int))); connect(score_canvas, SIGNAL(pixels_per_whole_changed(int)), px_per_whole_spinbox, SLOT(setValue(int))); + connect(px_per_whole_spinbox, SIGNAL(returnPressed()), SLOT(focusCanvas())); + connect(px_per_whole_spinbox, SIGNAL(escapePressed()), SLOT(focusCanvas())); quant_toolbar->addWidget(px_per_whole_spinbox); px_per_whole_spinbox->setValue(ScoreCanvas::_pixels_per_whole_init); - QMenu* edit_menu = menuBar()->addMenu(tr("&Edit")); + QMenu* edit_menu = menuBar()->addMenu(tr("&Edit")); edit_menu->addActions(MusEGlobal::undoRedo->actions()); edit_menu->addSeparator(); @@ -439,7 +433,7 @@ connect(select_oloop_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); - QMenu* functions_menu = menuBar()->addMenu(tr("Fu&nctions")); + QMenu* functions_menu = menuBar()->addMenu(tr("Fu&nctions")); func_quantize_action = functions_menu->addAction(tr("&Quantize"), menu_mapper, SLOT(map())); func_notelen_action = functions_menu->addAction(tr("Change note &length"), menu_mapper, SLOT(map())); @@ -463,7 +457,7 @@ menu_mapper->setMapping(func_legato_action, CMD_LEGATO); - QMenu* settings_menu = menuBar()->addMenu(tr("Window &Config")); + QMenu* settings_menu = menuBar()->addMenu(tr("Window &Config")); color_menu = settings_menu->addMenu(tr("Note head &colors")); color_actions = new QActionGroup(this); @@ -504,7 +498,7 @@ preamble_keysig_action->setChecked(ScoreCanvas::preamble_contains_keysig_init); preamble_timesig_action->setChecked(ScoreCanvas::preamble_contains_timesig_init); - + QAction* set_name_action = settings_menu->addAction(tr("Set Score &name"), menu_mapper, SLOT(map())); menu_mapper->setMapping(set_name_action, CMD_SET_NAME); @@ -512,7 +506,7 @@ settings_menu->addAction(subwinAction); settings_menu->addAction(shareAction); settings_menu->addAction(fullscreenAction); - + init_shortcuts(); @@ -539,7 +533,7 @@ apply_velo=true; initTopwinState(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } void ScoreEdit::init_shortcuts() @@ -627,6 +621,15 @@ names.erase(name); } +void ScoreEdit::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + score_canvas->setFocus(); + score_canvas->activateWindow(); + } +} + void ScoreEdit::velo_box_changed() { emit velo_changed(velo_spinbox->value()); @@ -637,11 +640,17 @@ emit velo_off_changed(velo_off_spinbox->value()); } +void ScoreEdit::quant_combobox_changed(int idx) +{ + score_canvas->set_quant(idx); + focusCanvas(); +} + void ScoreEdit::song_changed(int flags) { if(_isDeleting) // Ignore while while deleting to prevent crash. return; - + if (flags & (SC_SELECTION | SC_EVENT_MODIFIED | SC_EVENT_REMOVED)) { map selection=get_events(score_canvas->get_all_parts(),1); @@ -712,7 +721,7 @@ { _isDeleting = true; // Set flag so certain signals like songChanged, which may cause crash during delete, can be ignored. names.erase(name); - + QSettings settings("MusE", "MusE-qt"); //settings.setValue("ScoreEdit/geometry", saveGeometry()); settings.setValue("ScoreEdit/windowState", saveState()); @@ -989,6 +998,10 @@ void ScoreEdit::readStatus(MusECore::Xml& xml) { + // never "return;" inside that function. + // instead, goto end_of_scoreedit_read_status; + // (there is a command which must be executed!) + bool apply_velo_temp=apply_velo; apply_velo=false; @@ -1076,12 +1089,15 @@ case MusECore::Xml::TagEnd: if (tag == "scoreedit") - return; + goto end_of_scoreedit_read_status; default: break; } } + +end_of_scoreedit_read_status: + apply_velo=apply_velo_temp; } @@ -1518,7 +1534,7 @@ { if(parent && parent->deleting()) // Ignore while while deleting to prevent crash. return; - + if (flags & (SC_PART_MODIFIED | SC_PART_REMOVED | SC_PART_INSERTED | SC_TRACK_REMOVED)) { update_parts(); @@ -2140,12 +2156,19 @@ #define NUMBER_HEIGHT (pix_num[0].height()) -//kann 0 oder 1 sein: -//bei notenkollisionen mit ungerader anzahl von kollidierenden -//wird immer so ausgewichen, dass möglichst wenige ausweichen müssen -//wenn die anzahl aber gerade ist, gibt es keine "bessere" lösung -//in dem fall werden immer die geraden (0) bzw. ungeraden (1) -//ausweichen. +// kann 0 oder 1 sein: +// bei notenkollisionen mit ungerader anzahl von kollidierenden +// wird immer so ausgewichen, dass möglichst wenige ausweichen müssen +// wenn die anzahl aber gerade ist, gibt es keine "bessere" lösung +// in dem fall werden immer die geraden (0) bzw. ungeraden (1) +// ausweichen. +// ROUGH TRANSLATION: +// can be 0 or 1: +// when there are note head collisions with an odd number of colliding +// heads there's an unique solution for "stepping aside", so that +// fewer notes must "step aside". but when the number of colliding +// heads is even, there is no "better" solution. this constant +// specifies whether the "odd" (1) or the "even" (0) heads will move. #define AUSWEICHEN_BEVORZUGT 0 #define STEM_LEN 30 @@ -2869,9 +2892,11 @@ void staff_t::calc_item_pos() { - MusECore::key_enum curr_key=MusECore::KEY_C; //this has to be KEY_C or KEY_C_B and nothing else, - //because only with these two keys the next (initial) - //key signature is properly drawn. + //this has to be KEY_C or KEY_C_B and nothing else, + //because only with these two keys the next (initial) + //key signature is properly drawn. + MusECore::key_enum curr_key=MusECore::KEY_C; + int pos_add=0; max_y_coord=0; @@ -2982,9 +3007,13 @@ //process key changes - MusECore::key_enum curr_key=MusECore::KEY_C; //this has to be KEY_C or KEY_C_B and nothing else, - //because only with these two keys the next (initial) - //key signature is properly calculated. + + //this has to be KEY_C or KEY_C_B and nothing else, + //because only with these two keys the next (initial) + //key signature is properly calculated. + MusECore::key_enum curr_key=MusECore::KEY_C; + + for (MusECore::iKeyEvent it=MusEGlobal::keymap.begin(); it!=MusEGlobal::keymap.end(); it++) { MusECore::key_enum new_key=it->second.key; @@ -3260,10 +3289,10 @@ list aufloes_list=calc_accidentials(curr_key, staff.clef, new_key); list new_acc_list=calc_accidentials(new_key, staff.clef); - // vorzeichen aus curr_key auflösen + // cancel accidentials from curr_key draw_accidentials(p, it->x + KEYCHANGE_ACC_LEFTDIST - x_pos+x_left, y_offset, aufloes_list, pix_noacc[BLACK_PIXMAP]); - // alle vorzeichen aus new_key zeichnen + // draw all accidentials from new_key QPixmap* pix = is_sharp_key(new_key) ? &pix_sharp[BLACK_PIXMAP] : &pix_b[BLACK_PIXMAP]; vorzeichen_t new_accidential = is_sharp_key(new_key) ? SHARP : B; @@ -3658,9 +3687,9 @@ keystate=event->modifiers(); bool ctrl=keystate & Qt::ControlModifier; - // den errechneten tick immer ABrunden! - // denn der "bereich" eines schlags geht von schlag_begin bis nächsterschlag_begin-1 - // noten werden aber genau in die mitte dieses bereiches gezeichnet + // always round DOWN. + // because the "area" of a beat goes from "beat_begin" to "nextbeat_begin-1", + // but notes are drawn in the middle of that area! list::iterator staff_it=staff_at_y(event->y() + y_pos); @@ -3995,7 +4024,7 @@ } old_pitch=-1; - old_dest_tick=MAXINT; + old_dest_tick=INT_MAX; old_len=-1; } } @@ -4652,7 +4681,8 @@ /* BUGS and potential bugs * o tied notes don't work properly when there's a key-change in - * between, for example, when a cis is tied to a des + * between, for example, when a cis is tied to a des [ will not fix ] + * (reason: this actually never happens if dealing with a sane piece) * > o when changing toolbarstate when sharing and immediately after that * changing "share" status, the changed state isn't stored * (could be solved by storing the current window when quitting/saving whatever) @@ -4661,11 +4691,16 @@ * * CURRENT TODO * > o fix valgrind problems (the two "FINDMICHJETZT" lines in scoreedit.cpp) - * > o add a songposition scrollbar-toolbar (in different sizes) - * this might be equivalent to "redo transport menu" (below). - * > o add toolbar(s) for tempo- etc spinboxes from the transport window * * IMPORTANT TODO + * o canvas editor: create clone via "alt+drag" moves window instead + * o controller view in score editor + * o solo button + * o do partial recalculating; recalculating can take pretty long + * (0,5 sec) when displaying a whole song in scores + * o transpose etc. must also transpose key-pressure events + * o transpose: support in-key-transpose + * o thin out: remove unneeded ctrl messages * o support edge-scrolling when opening a lasso * o add "dotted quarter" quantize option (for 6/8 beat) * o ticks-to-quarter spinboxes @@ -4676,20 +4711,9 @@ * "range" setting, or they've been modified), default to "in range" or "selected in range" * * o rename stuff with F2 key - * o redo transport menu: offer "one beat" and "one bar" steps - * maybe also offer scrollbar * * o shrink a part from its beginning as well! watch out for clones! * - * o canvas editor: create clone via "alt+drag" moves window instead - * o controller view in score editor - * o solo button - * > o do partial recalculating; recalculating can take pretty long - * (0,5 sec) when displaying a whole song in scores - * o transpose etc. must also transpose key-pressure events - * o transpose: support in-key-transpose - * o thin out: remove unneeded ctrl messages - * * less important stuff * o allow "fixating" toolbars? * o quantize-templates (everything is forced into a specified diff -Nru muse-2.0~rc2/muse/midiedit/scoreedit.h muse-2.0/muse/midiedit/scoreedit.h --- muse-2.0~rc2/muse/midiedit/scoreedit.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiedit/scoreedit.h 2012-06-30 19:24:42.000000000 +0200 @@ -39,7 +39,7 @@ #include #include -#include +#include #include "noteinfo.h" #include "cobject.h" #include "event.h" @@ -51,6 +51,7 @@ #include "steprec.h" #include "cleftypes.h" #include "helper.h" +#include "spinbox.h" #include #include @@ -106,11 +107,11 @@ QWidget* mainw; MusEGui::EditToolBar* edit_tools; - QSpinBox* velo_spinbox; - QSpinBox* velo_off_spinbox; + SpinBox* velo_spinbox; + SpinBox* velo_off_spinbox; QComboBox* quant_combobox; - QSpinBox* px_per_whole_spinbox; + SpinBox* px_per_whole_spinbox; QAction* preamble_keysig_action; QAction* preamble_timesig_action; @@ -179,6 +180,7 @@ void menu_command(int); void velo_box_changed(); void velo_off_box_changed(); + void quant_combobox_changed(int); void init_shortcuts(); void selection_changed(); void clipboard_changed(); @@ -195,9 +197,10 @@ void canvas_height_changed(int); void viewport_height_changed(int); void song_changed(int); + void focusCanvas(); public: - ScoreEdit(QWidget* parent = 0, const char* name = 0, unsigned initPos = MAXINT); + ScoreEdit(QWidget* parent = 0, const char* name = 0, unsigned initPos = INT_MAX); ~ScoreEdit(); void writeStatus(int level, MusECore::Xml& xml) const; diff -Nru muse-2.0~rc2/muse/midieditor.cpp muse-2.0/muse/midieditor.cpp --- muse-2.0~rc2/muse/midieditor.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midieditor.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -200,7 +200,8 @@ if (type & (SC_PART_REMOVED | SC_PART_MODIFIED | SC_PART_INSERTED | SC_TRACK_REMOVED)) { - updateHScrollRange(); + updateHScrollRange(); + if (canvas) setWindowTitle(canvas->getCaption()); else if (wview) diff -Nru muse-2.0~rc2/muse/midieditor.h muse-2.0/muse/midieditor.h --- muse-2.0~rc2/muse/midieditor.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midieditor.h 2012-06-30 19:24:42.000000000 +0200 @@ -23,7 +23,6 @@ #ifndef __MIDIEDITOR_H__ #define __MIDIEDITOR_H__ -///#include "sig.h" #include "al/sig.h" #include "cobject.h" @@ -93,10 +92,6 @@ QWidget* parent = 0, const char* name = 0); ~MidiEditor(); - ///int rasterStep(unsigned tick) const { return sigmap.rasterStep(tick, _raster); } - ///unsigned rasterVal(unsigned v) const { return sigmap.raster(v, _raster); } - ///unsigned rasterVal1(unsigned v) const { return sigmap.raster1(v, _raster); } - ///unsigned rasterVal2(unsigned v) const { return sigmap.raster2(v, _raster); } int rasterStep(unsigned tick) const { return AL::sigmap.rasterStep(tick, _raster); } unsigned rasterVal(unsigned v) const { return AL::sigmap.raster(v, _raster); } unsigned rasterVal1(unsigned v) const { return AL::sigmap.raster1(v, _raster); } diff -Nru muse-2.0~rc2/muse/midievent.cpp muse-2.0/muse/midievent.cpp --- muse-2.0~rc2/muse/midievent.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midievent.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -90,7 +90,6 @@ // MidiEventBase::write //--------------------------------------------------------- -//void MidiEventBase::write(int level, Xml& xml, const Pos& offset) const void MidiEventBase::write(int level, Xml& xml, const Pos& offset, bool /*forcePath*/) const { xml.nput(level++, "\n"); } } diff -Nru muse-2.0~rc2/muse/midievent.h muse-2.0/muse/midievent.h --- muse-2.0~rc2/muse/midievent.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midievent.h 2012-06-30 19:24:43.000000000 +0200 @@ -70,7 +70,6 @@ virtual void dump(int n = 0) const; virtual void read(Xml&); - //virtual void write(int, Xml&, const Pos& offset) const; virtual void write(int, Xml&, const Pos& offset, bool forcePath = false) const; virtual EventBase* mid(unsigned, unsigned); }; diff -Nru muse-2.0~rc2/muse/midifile.cpp muse-2.0/muse/midifile.cpp --- muse-2.0~rc2/muse/midifile.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midifile.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -22,7 +22,6 @@ //========================================================= #include -#include #include "song.h" #include "midi.h" @@ -340,8 +339,8 @@ return -2; } if (buffer[len-1] != 0xf7) { - printf("SYSEX endet nicht mit 0xf7!\n"); - // Fortsetzung folgt? + printf("SYSEX doesn't end with 0xf7!\n"); + // to be continued? } else --len; // don't count 0xf7 @@ -566,7 +565,7 @@ int c = event->channel(); int nstat = event->type(); - // we dont save meta data into smf type 0 files: + // we dont save meta data into smf type 0 files: DELETETHIS 4 ??? // Oct 16, 2011: Apparently it is legal to do that. Part of fix for bug tracker 3293339. //if (MusEGlobal::config.smfFormat == 0 && nstat == ME_META) // return; @@ -620,6 +619,7 @@ writeLong(6); // header len writeShort(MusEGlobal::config.smfFormat); if (MusEGlobal::config.smfFormat == 0) { + // DELETETHIS 30 /* //writeShort(1); // Removed. Bug tracker 3293339 MidiFileTrack dst; @@ -645,7 +645,7 @@ */ writeShort(1); - //writeShort(_division); + //writeShort(_division); DELETETHIS 3 //if(!_tracks->empty()) // writeTrack(*(_tracks->begin())); @@ -658,7 +658,7 @@ writeShort(_division); for (ciMidiFileTrack i = _tracks->begin(); i != _tracks->end(); ++i) writeTrack(*i); -/// } + return (ferror(fp) != 0); } diff -Nru muse-2.0~rc2/muse/midi.h muse-2.0/muse/midi.h --- muse-2.0~rc2/muse/midi.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midi.h 2012-06-30 19:24:42.000000000 +0200 @@ -90,8 +90,7 @@ class MPEventList; class MidiTrack; -extern void buildMidiEventList(EventList* mel, const MPEventList* el, MidiTrack* track, int division, bool /*addSysexMeta*/, bool /*doLoops*/); -// extern bool checkSysex(MidiTrack* track, unsigned int len, unsigned char* buf); +extern void buildMidiEventList(EventList* mel, const MPEventList* el, MidiTrack* track, int division, bool addSysexMeta, bool doLoops); } // namespace MusECore diff -Nru muse-2.0~rc2/muse/midiport.cpp muse-2.0/muse/midiport.cpp --- muse-2.0~rc2/muse/midiport.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/midiport.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -21,8 +21,6 @@ // //========================================================= -//#include "config.h" - #include #include @@ -31,7 +29,6 @@ #include "midictrl.h" #include "midi.h" #include "minstrument.h" -//#include "instruments/minstrument.h" // p4.0.2 #include "xml.h" #include "globals.h" #include "mpevent.h" @@ -41,10 +38,6 @@ #include "menutitleitem.h" #include "icons.h" -//#ifdef DSSI_SUPPORT -//#include "dssihost.h" -//#endif - namespace MusEGlobal { MusECore::MidiPort midiPorts[MIDI_PORTS]; } @@ -75,7 +68,6 @@ MidiPort::MidiPort() : _state("not configured") { - //_defaultInChannels = 0; _defaultInChannels = (1 << MIDI_CHANNELS) -1; // p4.0.17 Default is now to connect to all channels. _defaultOutChannels = 0; _device = 0; @@ -181,15 +173,14 @@ // The 'reverb level' controller would still be at '100', and could adversely affect the song, // but if the instrument has an available initial value of say '0', it will be used instead. // - //if(_instrument) - // p3.3.39 NOT for syntis! Use midiState an/or initParams for that. + + // NOT for syntis. Use midiState and/or initParams for that. if(_instrument && !_device->isSynti()) { MidiControllerList* cl = _instrument->controller(); MidiController* mc; for(ciMidiController imc = cl->begin(); imc != cl->end(); ++imc) { - //mc = *imc; mc = imc->second; for(int chan = 0; chan < MIDI_CHANNELS; ++chan) { @@ -210,38 +201,12 @@ if(mc->initVal() != CTRL_VAL_UNKNOWN) { int ctl = mc->num(); - -///#ifdef DSSI_SUPPORT - // Exclude dssi synths from this, as some of them have hundreds of controls. - // Another difference is dssi synth devices (usually) have readable default port values, - // unlike a midi output port, which cannot be queried for a current or default value, - // so we blindly send values here. Also some dssi have a different default mechanism or - // storage systems for parameters, with complex GUIs with their own manipulation schemes. - // Another difference is dssi controls are best manipulated as ladspa controls - - // (they ARE ladspa controls). This is stuff I mainly put for midi ports and MESS... - // I DO allow midi control of those ladspa controls, so our midi controls shall be updated here... - // p3.3.39 Only non-syntis! Use midiState an/or initParams for that. - ///if(!_device->isSynti() || (dynamic_cast(((SynthI*)_device)->sif()) == 0)) - ///{ -///#endif - // Note the addition of bias! - //_device->putEvent(MidiPlayEvent(0, portno(), chan, - // ME_CONTROLLER, ctl, mc->initVal() + mc->bias())); - // Retry added. Use default attempts and delay. p4.0.15 - _device->putEventWithRetry(MidiPlayEvent(0, portno(), chan, - ME_CONTROLLER, ctl, mc->initVal() + mc->bias())); - //if(_device->putEventWithRetry(MidiPlayEvent(0, portno(), chan, - // ME_CONTROLLER, ctl, mc->initVal() + mc->bias()))) - // return; - -///#ifdef DSSI_SUPPORT - ///} -///#endif - + // Note the addition of bias! + // Retry added. Use default attempts and delay. + _device->putEventWithRetry(MidiPlayEvent(0, portno(), chan, + ME_CONTROLLER, ctl, mc->initVal() + mc->bias())); // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... - //setHwCtrlState(chan, ctl, mc->initVal() + mc->bias()); // Set it again so that control labels show 'off'... - //setHwCtrlState(chan, ctl, CTRL_VAL_UNKNOWN); setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, mc->initVal() + mc->bias()); } } @@ -250,42 +215,18 @@ } // init HW controller state - // p3.3.39 NOT for syntis! Use midiState an/or initParams for that. - if(!_device->isSynti()) - { - for (iMidiCtrlValList i = _controller->begin(); i != _controller->end(); ++i) { - int channel = i->first >> 24; - int cntrl = i->first & 0xffffff; - int val = i->second->hwVal(); - if (val != CTRL_VAL_UNKNOWN) { - - -///#ifdef DSSI_SUPPORT - // Not for dssi synths... - ///if(!_device->isSynti() || (dynamic_cast(((SynthI*)_device)->sif()) == 0)) - ///{ -///#endif - //_device->putEvent(MidiPlayEvent(0, portno(), channel, - // ME_CONTROLLER, cntrl, val)); - // Retry added. Use default attempts and delay. p4.0.15 - _device->putEventWithRetry(MidiPlayEvent(0, portno(), channel, - ME_CONTROLLER, cntrl, val)); - //if(_device->putEventWithRetry(MidiPlayEvent(0, portno(), channel, - // ME_CONTROLLER, cntrl, val))) - // return; - -///#ifdef DSSI_SUPPORT - ///} -///#endif - - // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... - setHwCtrlState(channel, cntrl, val); - // Set it again so that control labels show 'off'... - //setHwCtrlState(channel, cntrl, CTRL_VAL_UNKNOWN); - //setHwCtrlStates(channel, cntrl, CTRL_VAL_UNKNOWN, val); - } + for (iMidiCtrlValList i = _controller->begin(); i != _controller->end(); ++i) { + int channel = i->first >> 24; + int cntrl = i->first & 0xffffff; + int val = i->second->hwVal(); + if (val != CTRL_VAL_UNKNOWN) { + // Retry added. Use default attempts and delay. + _device->putEventWithRetry(MidiPlayEvent(0, portno(), channel, + ME_CONTROLLER, cntrl, val)); + // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... + setHwCtrlState(channel, cntrl, val); } - } + } } else @@ -331,9 +272,7 @@ for( ; pi < MIDI_PORTS; ++pi) { MusECore::MidiDevice* md = MusEGlobal::midiPorts[pi].device(); - //if(md && !md->isSynti() && (md->rwFlags() & 1)) if(md && (md->rwFlags() & 1)) - //if(md && (md->rwFlags() & 1 || md->isSynti()) ) // Revert. Hm, why synths? Only writeable ports. p4.0.41 break; } if(pi == MIDI_PORTS) @@ -353,7 +292,6 @@ for (int i = 0; i < MIDI_PORTS; ++i) { MidiPort* port = &MusEGlobal::midiPorts[i]; MusECore::MidiDevice* md = port->device(); - //if(md && !(md->rwFlags() & 1 || md->isSynti()) && (i != checkPort)) if(md && !(md->rwFlags() & 1) && (i != checkPort)) // Only writeable ports, or current one. continue; name.sprintf("%d:%s", port->portno()+1, port->portname().toLatin1().constData()); @@ -371,9 +309,7 @@ { subp = new QMenu(p); subp->setTitle(qApp->translate("@default", QT_TRANSLATE_NOOP("@default", "Empty ports"))); - //subp->addAction(new MusEGui::MenuTitleItem("Empty Ports", subp)); } - //act = subp->addAction(name); // No need for all those "" names. act = subp->addAction(QString().setNum(i+1)); act->setData(i); act->setCheckable(true); @@ -391,7 +327,6 @@ const QString& MidiPort::portname() const { - //static const QString none(""); static const QString none(QT_TRANSLATE_NOOP("@default", "")); if (_device) return _device->name(); @@ -405,50 +340,18 @@ void MidiPort::tryCtrlInitVal(int chan, int ctl, int val) { - // p4.0.27 - // Look for an initial value in the song for this midi controller, on this midi channel... - //for(iMidiCtrlValList i = _controller->begin(); i != _controller->end(); ++i) + // Look for an initial value in the song for this midi controller, on this midi channel... (p4.0.27) iMidiCtrlValList i = _controller->find(chan, ctl); if(i != _controller->end()) { - //int channel = i->first >> 24; - //int cntrl = i->first & 0xffffff; - //if(channel == chan && cntrl == ctl) int v = i->second->value(0); // Value at tick 0. if(v != CTRL_VAL_UNKNOWN) { if(_device) - { - ///#ifdef DSSI_SUPPORT - - // Not for dssi synths... - ///if(!_device->isSynti() || (dynamic_cast(((SynthI*)_device)->sif()) == 0)) - ///{ - - ///#endif - - //_device->putEvent(MidiPlayEvent(0, portno(), channel, - // ME_CONTROLLER, cntrl, v)); - // Retry added. Use default attempts and delay. p4.0.15 - _device->putEventWithRetry(MidiPlayEvent(0, portno(), chan, - ME_CONTROLLER, ctl, v)); - //if(_device->putEventWithRetry(MidiPlayEvent(0, portno(), chan, - // ME_CONTROLLER, ctl, v))) - // return; - - ///#ifdef DSSI_SUPPORT - - ///} - - ///#endif - - } + _device->putEventWithRetry(MidiPlayEvent(0, portno(), chan, ME_CONTROLLER, ctl, v)); // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... setHwCtrlState(chan, ctl, v); - // Set it again so that control labels show 'off'... - //setHwCtrlState(chan, ctl, CTRL_VAL_UNKNOWN); - //setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, v); return; } @@ -458,52 +361,35 @@ if(_instrument) { MidiControllerList* cl = _instrument->controller(); - //for(ciMidiController imc = cl->begin(); imc != cl->end(); ++imc) ciMidiController imc = cl->find(ctl); if(imc != cl->end()) { - //MidiController* mc = *imc; MidiController* mc = imc->second; - //int cnum = mc->num(); - //if(cnum == ctl) - //{ - int initval = mc->initVal(); - - // Initialize from either the instrument controller's initial value, or the supplied value. - if(initval != CTRL_VAL_UNKNOWN) + int initval = mc->initVal(); + + // Initialize from either the instrument controller's initial value, or the supplied value. + if(initval != CTRL_VAL_UNKNOWN) + { + if(_device) { - if(_device) - { - //MidiPlayEvent ev(song->cpos(), portno(), chan, ME_CONTROLLER, ctl, initval + mc->bias()); - MidiPlayEvent ev(0, portno(), chan, ME_CONTROLLER, ctl, initval + mc->bias()); - _device->putEvent(ev); - // Retry added. Use default attempts and delay. p4.0.15 - //_device->putEventWithRetry(ev); - } - // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... - //setHwCtrlState(chan, ctl, initval + mc->bias()); - // Set it again so that control labels show 'off'... - //setHwCtrlState(chan, ctl, CTRL_VAL_UNKNOWN); - setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, initval + mc->bias()); - - return; - } + MidiPlayEvent ev(0, portno(), chan, ME_CONTROLLER, ctl, initval + mc->bias()); + _device->putEvent(ev); + // Retry added. Use default attempts and delay. p4.0.15 + //_device->putEventWithRetry(ev); + } + setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, initval + mc->bias()); + + return; + } } } // No initial value was found in the song or instrument for this midi controller. Just send the given value. if(_device) { - //MidiPlayEvent ev(song->cpos(), portno(), chan, ME_CONTROLLER, ctl, val); MidiPlayEvent ev(0, portno(), chan, ME_CONTROLLER, ctl, val); _device->putEvent(ev); - // Retry added. Use default attempts and delay. p4.0.15 - //_device->putEventWithRetry(ev); } - // Set it once so the 'last HW value' is set, and control knobs are positioned at the value... - //setHwCtrlState(chan, ctl, val); - // Set it again so that control labels show 'off'... - //setHwCtrlState(chan, ctl, CTRL_VAL_UNKNOWN); setHwCtrlStates(chan, ctl, CTRL_VAL_UNKNOWN, val); } @@ -514,14 +400,6 @@ void MidiPort::sendGmInitValues() { for (int i = 0; i < MIDI_CHANNELS; ++i) { - // Changed by T356. - //setHwCtrlState(i, CTRL_PROGRAM, 0); - //setHwCtrlState(i, CTRL_PITCH, 0); - //setHwCtrlState(i, CTRL_VOLUME, 100); - //setHwCtrlState(i, CTRL_PANPOT, 64); - //setHwCtrlState(i, CTRL_REVERB_SEND, 40); - //setHwCtrlState(i, CTRL_CHORUS_SEND, 0); - // By T356. Initialize from instrument controller if it has an initial value, otherwise use the specified value. // Tested: Ultimately, a track's controller stored values take priority by sending any 'zero time' value // AFTER these GM/GS/XG init routines are called via initDevices(). @@ -550,25 +428,6 @@ void MidiPort::sendXgInitValues() { for (int i = 0; i < MIDI_CHANNELS; ++i) { - // Changed by T356. - //setHwCtrlState(i, CTRL_PROGRAM, 0); - //setHwCtrlState(i, CTRL_MODULATION, 0); - //setHwCtrlState(i, CTRL_PORTAMENTO_TIME, 0); - //setHwCtrlState(i, CTRL_VOLUME, 0x64); - //setHwCtrlState(i, CTRL_PANPOT, 0x40); - //setHwCtrlState(i, CTRL_EXPRESSION, 0x7f); - //setHwCtrlState(i, CTRL_SUSTAIN, 0x0); - //setHwCtrlState(i, CTRL_PORTAMENTO, 0x0); - //setHwCtrlState(i, CTRL_SOSTENUTO, 0x0); - //setHwCtrlState(i, CTRL_SOFT_PEDAL, 0x0); - //setHwCtrlState(i, CTRL_HARMONIC_CONTENT, 0x40); - //setHwCtrlState(i, CTRL_RELEASE_TIME, 0x40); - //setHwCtrlState(i, CTRL_ATTACK_TIME, 0x40); - //setHwCtrlState(i, CTRL_BRIGHTNESS, 0x40); - //setHwCtrlState(i, CTRL_REVERB_SEND, 0x28); - //setHwCtrlState(i, CTRL_CHORUS_SEND, 0x0); - //setHwCtrlState(i, CTRL_VARIATION_SEND, 0x0); - // By T356. Initialize from instrument controller if it has an initial value, otherwise use the specified value. tryCtrlInitVal(i, CTRL_PROGRAM, 0); tryCtrlInitVal(i, CTRL_MODULATION, 0); @@ -609,10 +468,6 @@ void MidiPort::sendGsOn() { - //static unsigned char data2[] = { 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x33, 0x50, 0x3c }; - //static unsigned char data3[] = { 0x41, 0x10, 0x42, 0x12, 0x40, 0x01, 0x34, 0x50, 0x3b }; - //sendSysex(data2, sizeof(data2)); - //sendSysex(data3, sizeof(data3)); sendSysex(gsOnMsg2, gsOnMsg2Len); sendSysex(gsOnMsg3, gsOnMsg3Len); } @@ -822,57 +677,21 @@ } //--------------------------------------------------------- -// sendEvent -// return true, if event cannot be delivered +// sendHwCtrlState +// Return true if it is OK to go ahead and deliver the event. //--------------------------------------------------------- -bool MidiPort::sendEvent(const MidiPlayEvent& ev, bool forceSend) +bool MidiPort::sendHwCtrlState(const MidiPlayEvent& ev, bool forceSend) { if (ev.type() == ME_CONTROLLER) { -// printf("current sustain %d %d %d\n", hwCtrlState(ev.channel(),CTRL_SUSTAIN), CTRL_SUSTAIN, ev.dataA()); - - // Added by T356. int da = ev.dataA(); int db = ev.dataB(); - /* - // Is it a drum controller? - MidiController* mc = drumController(da); - if(mc) - { - DrumMap* dm = &drumMap[da & 0x7f]; - int port = dm->port; - MidiPort* mp = &MusEGlobal::midiPorts[port]; - // Is it NOT for this MidiPort? - if(mp && (mp != this)) - { - // Redirect the event to the mapped port and channel... - da = (da & ~0xff) | (dm->anote & 0x7f); - db = mp->limitValToInstrCtlRange(da, db); - MidiPlayEvent nev(ev.time(), port, dm->channel, ME_CONTROLLER, da, db); - if(!mp->setHwCtrlState(ev.channel(), da, db)) - return false; - if(!mp->device()) - return true; - return mp->device()->putEvent(nev); - } - } - */ db = limitValToInstrCtlRange(da, db); - - // Removed by T356. - // - // optimize controller settings - // - //if (hwCtrlState(ev.channel(), ev.dataA()) == ev.dataB()) { -// printf("optimize ctrl %d %x val %d\n", ev.dataA(), ev.dataA(), ev.dataB()); - // return false; - // } -// printf("set HW Ctrl State ch:%d 0x%x 0x%x\n", ev.channel(), ev.dataA(), ev.dataB()); if(!setHwCtrlState(ev.channel(), da, db)) { if (MusEGlobal::debugMsg && forceSend) - printf("sendEvent: State already set. Forcing anyway...\n"); + printf("sendHwCtrlState: State already set. Forcing anyway...\n"); if (!forceSend) return false; } @@ -881,10 +700,6 @@ if (ev.type() == ME_PITCHBEND) { int da = limitValToInstrCtlRange(CTRL_PITCH, ev.dataA()); - // Removed by T356. - //if (hwCtrlState(ev.channel(), CTRL_PITCH) == ev.dataA()) - // return false; - if(!setHwCtrlState(ev.channel(), CTRL_PITCH, da)) { if (!forceSend) return false; @@ -899,7 +714,19 @@ } } - + return true; + } + +//--------------------------------------------------------- +// sendEvent +// return true, if event cannot be delivered +//--------------------------------------------------------- + +bool MidiPort::sendEvent(const MidiPlayEvent& ev, bool forceSend) + { + if(!sendHwCtrlState(ev, forceSend)) + return false; + if (!_device) { if (MusEGlobal::debugMsg) printf("no device for this midi port\n"); @@ -931,11 +758,8 @@ { ch &= 0xff; iMidiCtrlValList cl = _controller->find(ch, ctrl); - if (cl == _controller->end()) { - //if (MusEGlobal::debugMsg) - // printf("hwCtrlState: chan %d ctrl 0x%x not found\n", ch, ctrl); + if (cl == _controller->end()) return CTRL_VAL_UNKNOWN; - } MidiCtrlValList* vl = cl->second; return vl->hwVal(); } @@ -947,22 +771,6 @@ bool MidiPort::setHwCtrlState(int ch, int ctrl, int val) { - // Changed by T356. - //iMidiCtrlValList cl = _controller->find(ch, ctrl); - //if (cl == _controller->end()) { - // try to add new controller - // addManagedController(ch, ctrl); -// muse->importController(ch, this, ctrl); - // cl = _controller->find(ch, ctrl); - // if (cl == _controller->end()) { - // if (MusEGlobal::debugMsg) - // printf("setHwCtrlState(%d,0x%x,0x%x): not found\n", ch, ctrl, val); - // return; - // } - // } - //MidiCtrlValList* vl = cl->second; -// printf("setHwCtrlState ch %d ctrl %x val %x\n", ch, ctrl, val); - // By T356. This will create a new value list if necessary, otherwise it returns the existing list. MidiCtrlValList* vl = addManagedController(ch, ctrl); @@ -985,24 +793,6 @@ return vl->setHwVals(val, lastval); } -// Removed by T356. -//--------------------------------------------------------- -// setCtrl -// return true if new controller value added -//--------------------------------------------------------- - -//bool MidiPort::setCtrl(int ch, int tick, int ctrl, int val) -// { -// if (MusEGlobal::debugMsg) -// printf("setCtrl(tick=%d val=%d)\n",tick,val); -// iMidiCtrlValList cl = _controller->find(ch, ctrl); -// if (cl == _controller->end()) { -// if (MusEGlobal::debugMsg) -// printf("setCtrl: controller 0x%x for channel %d not found\n", ctrl, ch); -// return false; -// } -// return cl->second->add(tick, val); -// } //--------------------------------------------------------- // setControllerVal @@ -1033,24 +823,18 @@ int MidiPort::getCtrl(int ch, int tick, int ctrl) const { iMidiCtrlValList cl = _controller->find(ch, ctrl); - if (cl == _controller->end()) { - //if (MusEGlobal::debugMsg) - // printf("getCtrl: controller %d(0x%x) for channel %d not found size %zd\n", - // ctrl, ctrl, ch, _controller->size()); + if (cl == _controller->end()) return CTRL_VAL_UNKNOWN; - } + return cl->second->value(tick); } int MidiPort::getCtrl(int ch, int tick, int ctrl, Part* part) const { iMidiCtrlValList cl = _controller->find(ch, ctrl); - if (cl == _controller->end()) { - //if (MusEGlobal::debugMsg) - // printf("getCtrl: controller %d(0x%x) for channel %d not found size %zd\n", - // ctrl, ctrl, ch, _controller->size()); + if (cl == _controller->end()) return CTRL_VAL_UNKNOWN; - } + return cl->second->value(tick, part); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/midiport.h muse-2.0/muse/midiport.h --- muse-2.0~rc2/muse/midiport.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiport.h 2012-06-30 19:24:43.000000000 +0200 @@ -75,7 +75,6 @@ int getCtrl(int ch, int tick, int ctrl) const; int getCtrl(int ch, int tick, int ctrl, Part* part) const; // Removed by T356. - //bool setCtrl(int ch, int tick, int ctrl, int val); bool setControllerVal(int ch, int tick, int ctrl, int val, Part* part); // Can be CTRL_VAL_UNKNOWN until a valid state is set int lastValidHWCtrlState(int ch, int ctrl) const; @@ -138,6 +137,7 @@ void sendMMCStop(int devid = -1); void sendMMCDeferredPlay(int devid = -1); + bool sendHwCtrlState(const MidiPlayEvent&, bool forceSend = false ); bool sendEvent(const MidiPlayEvent&, bool forceSend = false ); AutomationType automationType(int channel) { return _automationType[channel]; } void setAutomationType(int channel, AutomationType t) { @@ -153,7 +153,6 @@ extern void setPortExclusiveDefOutChan(int /*port*/, int /*chan*/); #endif -//extern QPopupMenu* midiPortsPopup(QWidget*); extern QMenu* midiPortsPopup(QWidget* parent = 0, int checkPort = -1); } // namespace MusECore diff -Nru muse-2.0~rc2/muse/midiseq.cpp muse-2.0/muse/midiseq.cpp --- muse-2.0~rc2/muse/midiseq.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiseq.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -24,6 +24,7 @@ //========================================================= #include +#include #include #include @@ -31,6 +32,7 @@ #include #include +#include "app.h" #include "globals.h" #include "midi.h" #include "midiseq.h" @@ -44,7 +46,6 @@ #include "synth.h" #include "song.h" #include "gconfig.h" -#include namespace MusEGlobal { MusECore::MidiSeq* midiSeq; @@ -57,7 +58,6 @@ void initMidiSequencer() { - //MusEGlobal::midiSeq = new MidiSeq(MusEGlobal::realTimeScheduling ? MusEGlobal::realTimePriority : 0, "Midi"); MusEGlobal::midiSeq = new MidiSeq("Midi"); } @@ -80,19 +80,18 @@ { MusECore::AudioMsg* msg = (MusECore::AudioMsg*)m; switch(msg->id) { - // This does not appear to be used anymore. Was sent in Audio::process1, + // This does not appear to be used anymore. Was sent in Audio::process1, DELETETHIS 5 ?? // now Audio::processMidi is called directly. p4.0.15 Tim. //case MusECore::MS_PROCESS: // audio->processMidi(); // break; - // Removed p4.0.34 - //case MusECore::SEQM_SEEK: - // processSeek(); - // break; - //case MusECore::MS_STOP: - // processStop(); - // break; + case MusECore::SEQM_SEEK: + processSeek(); + break; + case MusECore::MS_STOP: + processStop(); + break; case MusECore::MS_SET_RTC: MusEGlobal::doSetuid(); @@ -102,8 +101,9 @@ case MusECore::MS_UPDATE_POLL_FD: updatePollFd(); break; - // Moved into Song::processMsg p4.0.34 - /* + + + // Moved into Song::processMsg p4.0.34 ... case MusECore::SEQM_ADD_TRACK: MusEGlobal::song->insertTrack2(msg->track, msg->ival); updatePollFd(); @@ -112,10 +112,10 @@ MusEGlobal::song->cmdRemoveTrack(msg->track); updatePollFd(); break; - case MusECore::SEQM_CHANGE_TRACK: - MusEGlobal::song->changeTrack((Track*)(msg->p1), (Track*)(msg->p2)); - updatePollFd(); - break; + //case MusECore::SEQM_CHANGE_TRACK: DELETETHIS 4 + // MusEGlobal::song->changeTrack((Track*)(msg->p1), (Track*)(msg->p2)); + // updatePollFd(); + // break; case MusECore::SEQM_ADD_PART: MusEGlobal::song->cmdAddPart((Part*)msg->p1); break; @@ -123,10 +123,10 @@ MusEGlobal::song->cmdRemovePart((Part*)msg->p1); break; case MusECore::SEQM_CHANGE_PART: - //MusEGlobal::song->cmdChangePart((Part*)msg->p1, (Part*)msg->p2); MusEGlobal::song->cmdChangePart((Part*)msg->p1, (Part*)msg->p2, msg->a, msg->b); break; - */ + + case MusECore::SEQM_SET_TRACK_OUT_CHAN: { MidiTrack* track = (MidiTrack*)(msg->p1); @@ -158,29 +158,26 @@ } } -#if 0 -// Removed p4.0.34 +#if 1 // DELETETHIS the #if and #endif? //--------------------------------------------------------- // processStop //--------------------------------------------------------- void MidiSeq::processStop() { - // p3.3.28 - // TODO Try to move this into Audio::stopRolling(). p4.0.22 // Done p4.0.34 - //playStateExt = false; // not playing + // TODO Try to move this into Audio::stopRolling(). + playStateExt = false; // not playing // // clear Alsa midi device notes and stop stuck notes - // Jack midi devices are handled in Audio::stopRolling() // for(iMidiDevice id = MusEGlobal::midiDevices.begin(); id != MusEGlobal::midiDevices.end(); ++id) { - //MidiDevice* md = *id; + //MidiDevice* md = *id; DELETETHIS 3 // Only ALSA devices are handled by this thread. - if((*id)->deviceType() == MidiDevice::ALSA_MIDI) // p4.0.22 - (*id)->handleStop(); // p4.0.22 - /* + //if((*id)->deviceType() == MidiDevice::ALSA_MIDI) + (*id)->handleStop(); + /* DELETETHIS 14 if (md->midiPort() == -1) continue; MPEventList* pel = md->playEvents(); @@ -199,18 +196,17 @@ } #endif -#if 0 -// Removed p4.0.34 +#if 1 //DELETETHIS #if and #endif //--------------------------------------------------------- // processSeek //--------------------------------------------------------- void MidiSeq::processSeek() { - //int pos = MusEGlobal::audio->tickPos(); - // TODO Try to move this into MusEGlobal::audio::seek(). p4.0.22 Done p4.0.34 - //if (pos == 0 && !MusEGlobal::song->record()) - // MusEGlobal::audio->initDevices(); + int pos = MusEGlobal::audio->tickPos(); + // TODO Try to move this into MusEGlobal::audio::seek(). + if (pos == 0 && !MusEGlobal::song->record()) + MusEGlobal::audio->initDevices(); //--------------------------------------------------- // set all controller @@ -218,11 +214,11 @@ for (iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) { - //MidiDevice* md = *i; + //MidiDevice* md = *i; DELETETHIS 3 // Only ALSA devices are handled by this thread. - if((*i)->deviceType() == MidiDevice::ALSA_MIDI) // p4.0.22 - (*i)->handleSeek(); // p4.0.22 - /* + //if((*i)->deviceType() == MidiDevice::ALSA_MIDI) + (*i)->handleSeek(); + /* DELETETHIS 47 int port = md->midiPort(); if (port == -1) continue; @@ -278,13 +274,9 @@ // MidiSeq //--------------------------------------------------------- -//MidiSeq::MidiSeq(int priority, const char* name) -// : Thread(priority, name) MidiSeq::MidiSeq(const char* name) : Thread(name) { - // Changed by Tim. p3.3.17 - //prio = priority; prio = 0; idle = false; @@ -295,6 +287,18 @@ lastTempo = 0; storedtimediffs = 0; playStateExt = false; // not playing + + _clockAveragerStages = new int[16]; // Max stages is 16! + setSyncRecFilterPreset(MusEGlobal::syncRecFilterPreset); + + for(int i = 0; i < _clockAveragerPoles; ++i) + { + _avgClkDiffCounter[i] = 0; + _averagerFull[i] = false; + } + _tempoQuantizeAmount = 1.0; + _lastRealTempo = 0.0; + MusEGlobal::doSetuid(); timerFd=selectTimer(); MusEGlobal::undoSetuid(); @@ -308,6 +312,7 @@ MidiSeq::~MidiSeq() { delete timer; + delete _clockAveragerStages; } //--------------------------------------------------------- @@ -352,7 +357,7 @@ void MidiSeq::threadStart(void*) { - // Removed by Tim. p3.3.17 + // Removed by Tim. p3.3.17 DELETETHIS 13 /* struct sched_param rt_param; memset(&rt_param, 0, sizeof(rt_param)); @@ -397,6 +402,7 @@ dev->processInput(); } +// DELETETHIS 12 //--------------------------------------------------------- // synthIRead //--------------------------------------------------------- @@ -446,24 +452,13 @@ for (iMidiDevice imd = MusEGlobal::midiDevices.begin(); imd != MusEGlobal::midiDevices.end(); ++imd) { MidiDevice* dev = *imd; int port = dev->midiPort(); - //const QString name = dev->name(); if (port == -1) continue; if ((dev->rwFlags() & 0x2) || (MusEGlobal::extSyncFlag.value() - //&& (rxSyncPort == port || rxSyncPort == -1))) { - //&& (dev->syncInfo().MCIn()))) { - && (MusEGlobal::midiPorts[port].syncInfo().MCIn()))) { - if(dev->selectRfd() < 0){ - //fprintf(stderr, "WARNING: read-file-descriptor for {%s} is negative\n", name.toLatin1()); - } + && (MusEGlobal::midiPorts[port].syncInfo().MCIn()))) addPollFd(dev->selectRfd(), POLLIN, MusECore::midiRead, this, dev); - } - if (dev->bytesToWrite()){ - if(dev->selectWfd() < 0){ - //fprintf(stderr, "WARNING: write-file-descriptor for {%s} is negative\n", name.toLatin1()); - } + if (dev->bytesToWrite()) addPollFd(dev->selectWfd(), POLLOUT, MusECore::midiWrite, this, dev); - } } // special handling for alsa midi: // (one fd for all devices) @@ -480,23 +475,19 @@ void MidiSeq::threadStop() { timer->stopTimer(); - //timer.stopTimer(); } //--------------------------------------------------------- // setRtcTicks -// return true on success +// returns actual tick frequency //--------------------------------------------------------- -bool MidiSeq::setRtcTicks() +int MidiSeq::setRtcTicks() { + int gotTicks = timer->setTimerFreq(MusEGlobal::config.rtcTicks); - //timer.setTimerFreq(MusEGlobal::config.rtcTicks); - //timer.startTimer(); - timer->setTimerFreq(MusEGlobal::config.rtcTicks); timer->startTimer(); - realRtcTicks = MusEGlobal::config.rtcTicks; - return true; + return gotTicks; } //--------------------------------------------------------- @@ -504,32 +495,99 @@ // return true on error //--------------------------------------------------------- -//bool MidiSeq::start() void MidiSeq::start(int priority) { - // Changed by Tim. p3.3.17 - prio = priority; - //timerFd = -1; - MusEGlobal::doSetuid(); - //timerFd = selectTimer(); - //timerFd = timer.initTimer(); - //printf("timerFd=%d\n",timerFd); setRtcTicks(); MusEGlobal::undoSetuid(); - //Thread::start(); Thread::start(priority); - //return false; } //--------------------------------------------------------- +// checkAndReportTimingResolution +//--------------------------------------------------------- +void MidiSeq::checkAndReportTimingResolution() +{ + int freq = timer->getTimerFreq(); + if (freq < 500) { + QMessageBox::warning( MusEGlobal::muse, + qApp->translate("@default", QT_TRANSLATE_NOOP("@default", "Bad timing")), + qApp->translate("@default", QT_TRANSLATE_NOOP("@default", + "Timing source frequency is %1hz, which is below the recommended minimum: 500hz!\n" \ + "This could lead to audible timing problems for MIDI.\n" \ + "Please see the FAQ on http://muse-sequencer.org for remedies.\n" \ + "Also please check console output for any further error messages.\n ")).arg(freq) ); + } +} + +//--------------------------------------------------------- +// setSyncRecFilterPreset +// To be called in realtime thread only. +//--------------------------------------------------------- +void MidiSeq::setSyncRecFilterPreset(MidiSyncInfo::SyncRecFilterPresetType type) +{ + _syncRecFilterPreset = type; + alignAllTicks(); + + switch(_syncRecFilterPreset) + { + // NOTE: Max _clockAveragerPoles is 16 and maximum stages is 48 per pole ! + case MidiSyncInfo::NONE: + _clockAveragerPoles = 0; + _preDetect = false; + break; + case MidiSyncInfo::TINY: + _clockAveragerPoles = 2; + _clockAveragerStages[0] = 4; + _clockAveragerStages[1] = 4; + _preDetect = false; + break; + case MidiSyncInfo::SMALL: + _clockAveragerPoles = 3; + _clockAveragerStages[0] = 12; + _clockAveragerStages[1] = 8; + _clockAveragerStages[2] = 4; + _preDetect = false; + break; + case MidiSyncInfo::MEDIUM: + _clockAveragerPoles = 3; + _clockAveragerStages[0] = 28; + _clockAveragerStages[1] = 12; + _clockAveragerStages[2] = 8; + _preDetect = false; + break; + case MidiSyncInfo::LARGE: + _clockAveragerPoles = 4; + _clockAveragerStages[0] = 48; + _clockAveragerStages[1] = 48; + _clockAveragerStages[2] = 48; + _clockAveragerStages[3] = 48; + _preDetect = false; + break; + case MidiSyncInfo::LARGE_WITH_PRE_DETECT: + _clockAveragerPoles = 4; + _clockAveragerStages[0] = 8; + _clockAveragerStages[1] = 48; + _clockAveragerStages[2] = 48; + _clockAveragerStages[3] = 48; + _preDetect = true; + break; + + default: + printf("MidiSeq::setSyncRecFilterPreset unknown preset type:%d\n", (int)type); + } +} + + +//--------------------------------------------------------- // processMidiClock //--------------------------------------------------------- void MidiSeq::processMidiClock() { + // DELETETHIS 30, maybe remove entire function? // if (genMCSync) { // MusEGlobal::midiPorts[txSyncPort].sendClock(); // } @@ -584,10 +642,6 @@ void MidiSeq::processTimerTick() { - // Disabled by Tim. p3.3.22 -// extern int watchMidi; -// ++watchMidi; // make a simple watchdog happy - //--------------------------------------------------- // read elapsed rtc timer ticks //--------------------------------------------------- @@ -596,14 +650,12 @@ unsigned long nn; if (timerFd != -1) { nn = timer->getTimerTicks(); - //nn = timer.getTimerTicks(); nn >>= 8; } - if (idle) { -// printf("IDLE\n"); + if (idle) return; - } + if (MusEGlobal::midiBusy) { // we hit MusEGlobal::audio: MusEGlobal::midiSeq->msgProcess (actually this has been MusEGlobal::audio->processMidi for some time now - Tim) // miss this timer tick @@ -612,70 +664,32 @@ unsigned curFrame = MusEGlobal::audio->curFrame(); - // Keep the sync detectors running... - // No, done in Song::beat(), (at the much slower heartbeat rate). - // - //for(int port = 0; port < MIDI_PORTS; ++port) - //{ - // Must keep them running even if there's no device... - //if(MusEGlobal::midiPorts[port].device()) - // MusEGlobal::midiPorts[port].syncInfo().setCurFrame(curFrame); - //} - //for(iMidiDevice imd = MusEGlobal::midiDevices.begin(); imd != MusEGlobal::midiDevices.end(); ++imd) - // (*imd)->syncInfo().setCurFrame(curFrame); - if (!MusEGlobal::extSyncFlag.value()) { - //int curTick = MusEGlobal::tempomap.frame2tick(curFrame); - // Copied from Tempomap. - //int curTick = lrint((double(curFrame)/double(MusEGlobal::sampleRate)) * MusEGlobal::tempomap.globalTempo() * MusEGlobal::config.division * 10000.0 / double(MusEGlobal::tempomap.tempo(MusEGlobal::song->cpos()))); - //int curTick = lrint((double(curFrame)/double(MusEGlobal::sampleRate)) * MusEGlobal::tempomap.globalTempo() * 240000.0 / double(MusEGlobal::tempomap.tempo(MusEGlobal::song->cpos()))); int curTick = lrint((double(curFrame)/double(MusEGlobal::sampleRate)) * double(MusEGlobal::tempomap.globalTempo()) * double(MusEGlobal::config.division) * 10000.0 / double(MusEGlobal::tempomap.tempo(MusEGlobal::song->cpos()))); - //int curTick = int((double(curFrame)/double(MusEGlobal::sampleRate)) * double(MusEGlobal::tempomap.globalTempo()) * double(MusEGlobal::config.division * 10000.0) / double(MusEGlobal::tempomap.tempo(MusEGlobal::song->cpos()))); - -/* if ( midiClock > curTick + 100) // reinitialize - { - midiClock = curTick; - } - else if( curTick > midiClock + 100) // reinitialize - { - midiClock = curTick; - }*/ if(midiClock > curTick) midiClock = curTick; int div = MusEGlobal::config.division/24; if(curTick >= midiClock + div) { - //if(curTick >= midiClock) { - //processMidiClock(); int perr = (curTick - midiClock) / div; - //int perr = curTick - midiClock; bool used = false; - //if(genMCSync) - //{ - //MusEGlobal::midiPorts[txSyncPort].sendClock(); for(int port = 0; port < MIDI_PORTS; ++port) { MidiPort* mp = &MusEGlobal::midiPorts[port]; - // No device? Clock out not turned on? - //MidiDevice* dev = mp->device(); - //if(!dev || !mp->syncInfo().MCOut()) + // No device? Clock out not turned on? DELETETHIS 3 if(!mp->device() || !mp->syncInfo().MCOut()) continue; - // Shall we check open flags? - //if(!(dev->rwFlags() & 0x1) || !(dev->openFlags() & 1)) - //if(!(dev->openFlags() & 1)) - // continue; - used = true; mp->sendClock(); } + // DELETETHIS 35 ?? /* for(iMidiDevice imd = MusEGlobal::midiDevices.begin(); imd != MusEGlobal::midiDevices.end(); ++imd) { @@ -710,7 +724,7 @@ if(MusEGlobal::debugMsg && used && perr > 1) printf("Dropped %d midi out clock(s). curTick:%d midiClock:%d div:%d\n", perr, curTick, midiClock, div); - //} + //} DELETETHIS and maybe the below ??? // Increment as if we had caught the timer exactly on the mark, even if the timer // has passed beyond the mark, or even beyond 2 * div. @@ -732,25 +746,16 @@ // // Using equalization periods... midiClock += (perr * div); - //midiClock += perr; + //midiClock += perr; DELETETHIS // - // No equalization periods... TODO: + // No equalization periods... TODO: or DELETETHIS? //midiClock += (perr * div); } } -// if (genMTCSync) { - // printf("Midi Time Code Sync generation not impl.\n"); -// } - - // p3.3.25 - //int tickpos = MusEGlobal::audio->tickPos(); - //bool extsync = MusEGlobal::extSyncFlag.value(); - // // play all events upto curFrame - // for (iMidiDevice id = MusEGlobal::midiDevices.begin(); id != MusEGlobal::midiDevices.end(); ++id) { - //MidiDevice* md = *id; + //MidiDevice* md = *id; DELETETHIS 10 // Is it a Jack midi device? They are iterated in Audio::processMidi. p3.3.36 //MidiJackDevice* mjd = dynamic_cast(md); //if(mjd) @@ -762,7 +767,7 @@ if((*id)->deviceType() == MidiDevice::ALSA_MIDI) (*id)->processMidi(); - // Moved into MidiAlsaDevice. p4.0.34 + // Moved into MidiAlsaDevice. p4.0.34 DELETETHIS 40 /* int port = md->midiPort(); MidiPort* mp = port != -1 ? &MusEGlobal::midiPorts[port] : 0; @@ -838,10 +843,8 @@ Thread::sendMsg(&msg); } -// This does not appear to be used anymore. Was called in Audio::process1, now Audio::processMidi is called directly. p4.0.15 Tim. -//void MidiSeq::msgProcess() { msgMsg(MusECore::MS_PROCESS); } -//void MidiSeq::msgSeek() { msgMsg(MusECore::SEQM_SEEK); } // Removed p4.0.34 -//void MidiSeq::msgStop() { msgMsg(MusECore::MS_STOP); } // +void MidiSeq::msgSeek() { msgMsg(MusECore::SEQM_SEEK); } +void MidiSeq::msgStop() { msgMsg(MusECore::MS_STOP); } void MidiSeq::msgSetRtc() { msgMsg(MusECore::MS_SET_RTC); } void MidiSeq::msgUpdatePollFd() { msgMsg(MusECore::MS_UPDATE_POLL_FD); } diff -Nru muse-2.0~rc2/muse/midiseq.h muse-2.0/muse/midiseq.h --- muse-2.0~rc2/muse/midiseq.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/midiseq.h 2012-06-30 19:24:43.000000000 +0200 @@ -28,6 +28,7 @@ #include "mpevent.h" #include "driver/alsatimer.h" #include "driver/rtctimer.h" +#include "sync.h" namespace MusECore { @@ -42,7 +43,6 @@ //--------------------------------------------------------- class MidiSeq : public Thread { - int realRtcTicks; int timerFd; int idle; int prio; // realtime priority @@ -52,23 +52,28 @@ /* Testing */ bool playStateExt; // used for keeping play state in sync functions int recTick; // ext sync tick position -// int lastTickPos; // position of last sync tick - // run values: -// unsigned _midiTick; double mclock1, mclock2; double songtick1, songtick2; int recTick1, recTick2; int lastTempo; - double timediff[24]; + double timediff[16][48]; int storedtimediffs; - + int _avgClkDiffCounter[16]; + double _lastRealTempo; + bool _averagerFull[16]; + int _clockAveragerPoles; + int* _clockAveragerStages; + bool _preDetect; + double _tempoQuantizeAmount; + MidiSyncInfo::SyncRecFilterPresetType _syncRecFilterPreset; + void alignAllTicks(int frameOverride = 0); /* Testing */ Timer *timer; signed int selectTimer(); - bool setRtcTicks(); + int setRtcTicks(); static void midiTick(void* p, void*); void processTimerTick(); void processSeek(); @@ -78,16 +83,12 @@ void updatePollFd(); void mtcSyncMsg(const MTC&, int, bool); - //void mtcInputFull(const unsigned char* p, int n); - //void nonRealtimeSystemSysex(const unsigned char* p, int n); public: - //MidiSeq(int prio, const char* name); MidiSeq(const char* name); ~MidiSeq(); - //bool start(); virtual void start(int); virtual void threadStop(); @@ -95,19 +96,21 @@ bool externalPlayState() const { return playStateExt; } void setExternalPlayState(bool v) { playStateExt = v; } - void realtimeSystemInput(int, int); + void realtimeSystemInput(int port, int type, double time = 0.0); void mtcInputQuarter(int, unsigned char); void setSongPosition(int, int); - // void eventReceived(MidiRecordEvent& event); - //void mmcInput(const unsigned char* p, int n); void mmcInput(int, const unsigned char*, int); void mtcInputFull(int, const unsigned char*, int); void nonRealtimeSystemSysex(int, const unsigned char*, int); + void checkAndReportTimingResolution(); + MidiSyncInfo::SyncRecFilterPresetType syncRecFilterPreset() const { return _syncRecFilterPreset; } + void setSyncRecFilterPreset(MidiSyncInfo::SyncRecFilterPresetType type); + double recTempoValQuant() const { return _tempoQuantizeAmount; } + void setRecTempoValQuant(double q) { _tempoQuantizeAmount = q; } void msgMsg(int id); - //void msgProcess(); - //void msgSeek(); - //void msgStop(); + void msgSeek(); + void msgStop(); void msgSetRtc(); void msgUpdatePollFd(); void msgAddSynthI(SynthI* synth); diff -Nru muse-2.0~rc2/muse/miditransform.cpp muse-2.0/muse/miditransform.cpp --- muse-2.0~rc2/muse/miditransform.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/miditransform.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -37,7 +37,6 @@ #include "xml.h" #include "globals.h" #include "comboQuant.h" -//#include "pitchedit.h" #include "audio.h" #include "gconfig.h" #include "midictrl.h" @@ -467,9 +466,6 @@ presetList->setCurrentItem(0); } - //data->cindex = 0; - //presetList->setCurrentItem(0); - } //--------------------------------------------------------- @@ -683,13 +679,11 @@ // Indicate do clone parts. addPortCtrlEvents(newEvent, part, true); // Indicate do port controller values and clone parts. - //MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part)); MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part, true, true)); MusEGlobal::song->addUpdateFlags(SC_EVENT_MODIFIED); break; case MusECore::Insert: // Indicate do port controller values and clone parts. - //MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::AddEvent, dummy, newEvent, part)); MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::AddEvent, dummy, newEvent, part, true, true)); MusEGlobal::song->addEvent(newEvent, part); // Indicate do clone parts. @@ -698,7 +692,6 @@ break; case MusECore::Extract: // Indicate do port controller values and clone parts. - //MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::DeleteEvent, dummy, event, part)); MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::DeleteEvent, dummy, event, part, true, true)); // Indicate do clone parts. removePortCtrlEvents(event, part, true); @@ -734,7 +727,6 @@ // Indicate do clone parts. addPortCtrlEvents(newEvent, part, true); // Indicate do port controller values and clone parts. - //MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part)); MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyEvent, newEvent, event, part, true, true)); MusEGlobal::song->addUpdateFlags(SC_EVENT_MODIFIED); } @@ -744,7 +736,6 @@ { MusECore::Event ev; // Indicate do port controller values and clone parts. - //MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::DeleteEvent, ev, event, part, true, true)); MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::DeleteEvent, ev, event, part, true, true)); // Indicate do clone parts. removePortCtrlEvents(event, part, true); diff -Nru muse-2.0~rc2/muse/miditransform.h muse-2.0/muse/miditransform.h --- muse-2.0~rc2/muse/miditransform.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/miditransform.h 2012-06-30 19:24:43.000000000 +0200 @@ -68,7 +68,6 @@ MusECore::MidiTransformPrivate* data; virtual void accept(); -// virtual void reject(); void setValOp(QWidget* a, QWidget* b, MusECore::ValOp op); void processEvent(MusECore::Event&, MusECore::MidiPart*, MusECore::MidiPart*); bool isSelected(MusECore::Event&, MusECore::MidiPart*); diff -Nru muse-2.0~rc2/muse/mixer/astrip.cpp muse-2.0/muse/mixer/astrip.cpp --- muse-2.0~rc2/muse/mixer/astrip.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/mixer/astrip.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -121,7 +121,7 @@ void AudioStrip::configChanged() { - // Set the whole strip's font, except for the label. + // Set the whole strip's font, except for the label. if(font() != MusEGlobal::config.fonts[1]) setFont(MusEGlobal::config.fonts[1]); @@ -150,6 +150,22 @@ meter[c]->setRange(MusEGlobal::config.minMeter, 10.0); } +void AudioStrip::updateRouteButtons() +{ + if (iR) + { + if (track->noInRoute()) + iR->setStyleSheet("background-color:darkgray;"); + else + iR->setStyleSheet(""); + } + + if (track->noOutRoute()) + oR->setStyleSheet("background-color:red;"); + else + oR->setStyleSheet(""); +} + //--------------------------------------------------------- // songChanged //--------------------------------------------------------- @@ -159,6 +175,8 @@ // Is it simply a midi controller value adjustment? Forget it. if (val == SC_MIDI_CONTROLLER) return; + + updateRouteButtons(); MusECore::AudioTrack* src = (MusECore::AudioTrack*)track; @@ -437,10 +455,11 @@ // volumeChanged //--------------------------------------------------------- -void AudioStrip::volumeChanged(double val) +void AudioStrip::volumeChanged(double val, int, bool shift_pressed) { AutomationType at = ((MusECore::AudioTrack*)track)->automationType(); - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) track->enableVolumeController(false); double vol; @@ -454,12 +473,7 @@ //MusEGlobal::audio->msgSetVolume((MusECore::AudioTrack*)track, vol); // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? ((MusECore::AudioTrack*)track)->setVolume(vol); - MusEGlobal::song->controllerChange(track); - - ((MusECore::AudioTrack*)track)->recordAutomation(MusECore::AC_VOLUME, vol); - - //MusEGlobal::song->update(SC_TRACK_MODIFIED); // for graphical automation update - //MusEGlobal::song->controllerChange(track); + if (!shift_pressed) ((MusECore::AudioTrack*)track)->recordAutomation(MusECore::AC_VOLUME, vol); } //--------------------------------------------------------- @@ -469,7 +483,7 @@ void AudioStrip::volumePressed() { AutomationType at = ((MusECore::AudioTrack*)track)->automationType(); - if(at == AUTO_WRITE || (at == AUTO_READ || at == AUTO_TOUCH)) + if (at == AUTO_READ || at == AUTO_TOUCH || at == AUTO_WRITE) track->enableVolumeController(false); double val = slider->value(); @@ -484,8 +498,6 @@ //MusEGlobal::audio->msgSetVolume((MusECore::AudioTrack*)track, volume); // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? ((MusECore::AudioTrack*)track)->setVolume(volume); - MusEGlobal::song->controllerChange(track); - ((MusECore::AudioTrack*)track)->startAutoRecord(MusECore::AC_VOLUME, volume); } @@ -495,7 +507,8 @@ void AudioStrip::volumeReleased() { - if(track->automationType() != AUTO_WRITE) + AutomationType at = track->automationType(); + if (at == AUTO_OFF || at == AUTO_READ || at == AUTO_TOUCH) track->enableVolumeController(true); ((MusECore::AudioTrack*)track)->stopAutoRecord(MusECore::AC_VOLUME, volume); @@ -516,7 +529,8 @@ void AudioStrip::volLabelChanged(double val) { AutomationType at = ((MusECore::AudioTrack*)track)->automationType(); - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) track->enableVolumeController(false); double vol; @@ -531,8 +545,6 @@ //audio->msgSetVolume((MusECore::AudioTrack*)track, vol); // p4.0.21 audio->msgXXX waits. Do we really need to? ((MusECore::AudioTrack*)track)->setVolume(vol); - MusEGlobal::song->controllerChange(track); - ((MusECore::AudioTrack*)track)->startAutoRecord(MusECore::AC_VOLUME, vol); } @@ -540,19 +552,18 @@ // panChanged //--------------------------------------------------------- -void AudioStrip::panChanged(double val) +void AudioStrip::panChanged(double val, int, bool shift_pressed) { AutomationType at = ((MusECore::AudioTrack*)track)->automationType(); - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) track->enablePanController(false); panVal = val; //MusEGlobal::audio->msgSetPan(((MusECore::AudioTrack*)track), val); // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? ((MusECore::AudioTrack*)track)->setPan(val); - MusEGlobal::song->controllerChange(track); - - ((MusECore::AudioTrack*)track)->recordAutomation(MusECore::AC_PAN, val); + if (!shift_pressed) ((MusECore::AudioTrack*)track)->recordAutomation(MusECore::AC_PAN, val); } //--------------------------------------------------------- @@ -562,15 +573,13 @@ void AudioStrip::panPressed() { AutomationType at = ((MusECore::AudioTrack*)track)->automationType(); - if(at == AUTO_WRITE || (at == AUTO_READ || at == AUTO_TOUCH)) + if (at == AUTO_READ || at == AUTO_TOUCH || at == AUTO_WRITE) track->enablePanController(false); panVal = pan->value(); //MusEGlobal::audio->msgSetPan(((MusECore::AudioTrack*)track), panVal); // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? ((MusECore::AudioTrack*)track)->setPan(panVal); - MusEGlobal::song->controllerChange(track); - ((MusECore::AudioTrack*)track)->startAutoRecord(MusECore::AC_PAN, panVal); } @@ -580,7 +589,8 @@ void AudioStrip::panReleased() { - if(track->automationType() != AUTO_WRITE) + AutomationType at = track->automationType(); + if (at == AUTO_OFF || at == AUTO_READ || at == AUTO_TOUCH) track->enablePanController(true); ((MusECore::AudioTrack*)track)->stopAutoRecord(MusECore::AC_PAN, panVal); } @@ -599,8 +609,9 @@ void AudioStrip::panLabelChanged(double val) { - AutomationType at = ((MusECore::AudioTrack*)track)->automationType(); - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + AutomationType at = ((MusECore::AudioTrack*)track)->automationType(); + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) track->enablePanController(false); panVal = val; @@ -608,8 +619,6 @@ //MusEGlobal::audio->msgSetPan((MusECore::AudioTrack*)track, val); // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? ((MusECore::AudioTrack*)track)->setPan(val); - MusEGlobal::song->controllerChange(track); - ((MusECore::AudioTrack*)track)->startAutoRecord(MusECore::AC_PAN, val); } @@ -709,11 +718,10 @@ _curGridRow += 2; connect(knob, SIGNAL(valueChanged(double,int)), pl, SLOT(setValue(double))); - //connect(pl, SIGNAL(valueChanged(double, int)), SLOT(panChanged(double))); if (type == 0) { connect(pl, SIGNAL(valueChanged(double, int)), SLOT(panLabelChanged(double))); - connect(knob, SIGNAL(sliderMoved(double,int)), SLOT(panChanged(double))); + connect(knob, SIGNAL(sliderMoved(double,int,bool)), SLOT(panChanged(double,int,bool))); connect(knob, SIGNAL(sliderPressed(int)), SLOT(panPressed())); connect(knob, SIGNAL(sliderReleased(int)), SLOT(panReleased())); connect(knob, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(panRightClicked(const QPoint &))); @@ -781,6 +789,7 @@ stereo = new QToolButton(); ///stereo->setFont(MusEGlobal::config.fonts[1]); + stereo->setFocusPolicy(Qt::NoFocus); stereo->setCheckable(true); stereo->setToolTip(tr("1/2 channel")); stereo->setChecked(channel == 2); @@ -795,6 +804,7 @@ pre = new QToolButton(); ///pre->setFont(MusEGlobal::config.fonts[1]); + pre->setFocusPolicy(Qt::NoFocus); pre->setCheckable(true); pre->setText(tr("Pre")); pre->setToolTip(tr("pre fader - post fader")); @@ -874,9 +884,8 @@ sl->setValue(MusECore::fast_log10(t->volume()) * 20.0); connect(sl, SIGNAL(valueChanged(double,int)), SLOT(volLabelChanged(double))); - //connect(sl, SIGNAL(valueChanged(double,int)), SLOT(volumeChanged(double))); connect(slider, SIGNAL(valueChanged(double,int)), sl, SLOT(setValue(double))); - connect(slider, SIGNAL(sliderMoved(double,int)), SLOT(volumeChanged(double))); + connect(slider, SIGNAL(sliderMoved(double,int,bool)), SLOT(volumeChanged(double,int,bool))); connect(slider, SIGNAL(sliderPressed(int)), SLOT(volumePressed())); connect(slider, SIGNAL(sliderReleased(int)), SLOT(volumeReleased())); connect(slider, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(volumeRightClicked(const QPoint &))); @@ -895,6 +904,7 @@ if (track->canRecord()) { record = new MusEGui::TransparentToolButton(this); + record->setFocusPolicy(Qt::NoFocus); record->setCheckable(true); record->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); record->setBackgroundRole(QPalette::Mid); @@ -908,6 +918,7 @@ MusECore::Track::TrackType type = t->type(); mute = new QToolButton(); + mute->setFocusPolicy(Qt::NoFocus); mute->setCheckable(true); mute->setToolTip(tr("mute")); mute->setChecked(t->mute()); @@ -917,7 +928,7 @@ connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); solo = new QToolButton(); - + solo->setFocusPolicy(Qt::NoFocus); solo->setCheckable(true); solo->setChecked(t->solo()); if(t->internalSolo()) @@ -938,6 +949,7 @@ } off = new MusEGui::TransparentToolButton(this); + off->setFocusPolicy(Qt::NoFocus); off->setBackgroundRole(QPalette::Mid); off->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); off->setCheckable(true); @@ -960,6 +972,7 @@ if (type != MusECore::Track::AUDIO_AUX) { iR = new QToolButton(); + iR->setFocusPolicy(Qt::NoFocus); ///iR->setFont(MusEGlobal::config.fonts[1]); iR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); ///iR->setText(tr("iR")); @@ -972,6 +985,7 @@ } oR = new QToolButton(); + oR->setFocusPolicy(Qt::NoFocus); ///oR->setFont(MusEGlobal::config.fonts[1]); oR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); ///oR->setText(tr("oR")); @@ -987,6 +1001,7 @@ //--------------------------------------------------- autoType = new MusEGui::ComboBox(); + autoType->setFocusPolicy(Qt::NoFocus); ///autoType->setFont(MusEGlobal::config.fonts[1]); autoType->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); //autoType->setAutoFillBackground(true); @@ -1047,6 +1062,9 @@ off->blockSignals(false); } connect(MusEGlobal::heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); + + updateRouteButtons(); + } //--------------------------------------------------------- @@ -1059,7 +1077,7 @@ RoutePopupMenu* pup = new RoutePopupMenu(); pup->exec(QCursor::pos(), track, false); delete pup; - iR->setDown(false); + iR->setDown(false); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/mixer/astrip.h muse-2.0/muse/mixer/astrip.h --- muse-2.0~rc2/muse/mixer/astrip.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/mixer/astrip.h 2012-06-30 19:24:42.000000000 +0200 @@ -85,6 +85,7 @@ void updateVolume(); void updatePan(); void updateChannels(); + void updateRouteButtons(); private slots: void stereoToggled(bool); @@ -93,10 +94,10 @@ void iRoutePressed(); void oRoutePressed(); void auxChanged(double, int); - void volumeChanged(double); + void volumeChanged(double,int,bool); void volumePressed(); void volumeReleased(); - void panChanged(double); + void panChanged(double,int,bool); void panPressed(); void panReleased(); void volLabelChanged(double); diff -Nru muse-2.0~rc2/muse/mixer/mstrip.cpp muse-2.0/muse/mixer/mstrip.cpp --- muse-2.0~rc2/muse/mixer/mstrip.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/mixer/mstrip.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -108,7 +108,7 @@ MusEGui::DoubleLabel* dl = new MusEGui::DoubleLabel(0.0, double(mn), double(mx), this); dl->setId(idx); dl->setSpecialText(tr("off")); - dl->setToolTip(tr("double click on/off")); + dl->setToolTip(tr("ctrl-double-click on/off")); controller[idx].dl = dl; ///dl->setFont(MusEGlobal::config.fonts[1]); dl->setBackgroundRole(QPalette::Mid); @@ -166,7 +166,7 @@ connect(knob, SIGNAL(sliderMoved(double,int)), slot); connect(knob, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(controlRightClicked(const QPoint &, int))); connect(dl, SIGNAL(valueChanged(double, int)), slot); - connect(dl, SIGNAL(doubleClicked(int)), SLOT(labelDoubleClicked(int))); + connect(dl, SIGNAL(ctrlDoubleClicked(int)), SLOT(labelDoubleClicked(int))); } //--------------------------------------------------------- @@ -233,7 +233,7 @@ sl->setBackgroundRole(QPalette::Mid); sl->setSpecialText(tr("off")); sl->setSuffix(tr("dB")); - sl->setToolTip(tr("double click on/off")); + sl->setToolTip(tr("ctrl-double-click on/off")); sl->setFrame(true); sl->setPrecision(0); sl->setSizePolicy(QSizePolicy(QSizePolicy::Maximum, QSizePolicy::Minimum)); @@ -278,7 +278,7 @@ connect(slider, SIGNAL(sliderMoved(double,int)), SLOT(setVolume(double))); connect(slider, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(controlRightClicked(const QPoint &, int))); connect(sl, SIGNAL(valueChanged(double, int)), SLOT(volLabelChanged(double))); - connect(sl, SIGNAL(doubleClicked(int)), SLOT(labelDoubleClicked(int))); + connect(sl, SIGNAL(ctrlDoubleClicked(int)), SLOT(labelDoubleClicked(int))); grid->addWidget(sl, _curGridRow++, 0, 1, 2, Qt::AlignCenter); @@ -297,6 +297,7 @@ //--------------------------------------------------- record = new MusEGui::TransparentToolButton(this); + record->setFocusPolicy(Qt::NoFocus); record->setBackgroundRole(QPalette::Mid); record->setCheckable(true); record->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); @@ -307,6 +308,7 @@ connect(record, SIGNAL(clicked(bool)), SLOT(recordToggled(bool))); mute = new QToolButton(); + mute->setFocusPolicy(Qt::NoFocus); mute->setCheckable(true); mute->setToolTip(tr("mute")); mute->setChecked(track->mute()); @@ -316,7 +318,7 @@ connect(mute, SIGNAL(clicked(bool)), SLOT(muteToggled(bool))); solo = new QToolButton(); - //solo->setToolTip(tr("pre fader listening")); + solo->setFocusPolicy(Qt::NoFocus); solo->setToolTip(tr("solo mode")); solo->setCheckable(true); solo->setChecked(track->solo()); @@ -328,43 +330,8 @@ ///solo->setIconSize(soloIconOn->size()); connect(solo, SIGNAL(clicked(bool)), SLOT(soloToggled(bool))); - /* - // Changed by Tim. p3.3.21 - //QToolTip::add(record, tr("record")); - //smBox1->addStretch(100); - //smBox1->addWidget(record); - QLabel* dev_ch_label = new QLabel(); - ///dev_ch_label->setMinimumWidth(STRIP_WIDTH/2); - - // Special here: Must make label same size as the 'exit' button would be IF this were an audio strip... - // (The 'exit1' icon is BIGGER than the 'record on' icon.) - MusEGui::TransparentToolButton* off = new MusEGui::TransparentToolButton(this); - QIcon iconOff; - iconOff.addPixmap(*exit1Icon, QIcon::Normal, QIcon::On); - iconOff.addPixmap(*exitIcon, QIcon::Normal, QIcon::Off); - off->setIcon(iconOff); - off->setIconSize(exit1Icon->size()); - dev_ch_label->setMinimumHeight(off->height()); - delete off; - - //dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::Ignored, QSizePolicy::Minimum)); - ///dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum)); - dev_ch_label->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); - dev_ch_label->setAlignment(Qt::AlignCenter); - int port = track->outPort(); - int channel = track->outChannel(); - QString dcs; - dcs.sprintf("%d-%d", port + 1, channel + 1); - dev_ch_label->setText(dcs); - //dev_ch_label->setBackgroundColor(QColor(0, 160, 255)); // Med blue - //dev_ch_label->setFont(MusEGlobal::config.fonts[6]); - dev_ch_label->setFont(MusEGlobal::config.fonts[1]); - // Dealing with a horizontally constrained label. Ignore vertical. Use a minimum readable point size. - //autoAdjustFontSize(dev_ch_label, dev_ch_label->text(), false, true, MusEGlobal::config.fonts[6].pointSize(), 5); - QToolTip::add(dev_ch_label, tr("output port and channel")); - */ - off = new MusEGui::TransparentToolButton(this); + off->setFocusPolicy(Qt::NoFocus); off->setBackgroundRole(QPalette::Mid); off->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); off->setCheckable(true); @@ -384,6 +351,7 @@ //--------------------------------------------------- iR = new QToolButton(); + iR->setFocusPolicy(Qt::NoFocus); ///iR->setFont(MusEGlobal::config.fonts[1]); iR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); ///iR->setText(tr("iR")); @@ -393,7 +361,9 @@ iR->setToolTip(tr("input routing")); grid->addWidget(iR, _curGridRow, 0); connect(iR, SIGNAL(pressed()), SLOT(iRoutePressed())); + oR = new QToolButton(); + oR->setFocusPolicy(Qt::NoFocus); ///oR->setFont(MusEGlobal::config.fonts[1]); oR->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Maximum)); ///oR->setText(tr("oR")); @@ -412,6 +382,7 @@ //--------------------------------------------------- autoType = new MusEGui::ComboBox(); + autoType->setFocusPolicy(Qt::NoFocus); ///autoType->setFont(MusEGlobal::config.fonts[1]); autoType->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Minimum)); autoType->setEnabled(false); diff -Nru muse-2.0~rc2/muse/mixer/panknob.cpp muse-2.0/muse/mixer/panknob.cpp --- muse-2.0~rc2/muse/mixer/panknob.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/mixer/panknob.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -48,7 +48,6 @@ //audio->msgSetPan(src, val); // p4.0.21 audio->msgXXX waits. Do we really need to? src->setPan(val); - MusEGlobal::song->controllerChange(src); } } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/mixer/rack.cpp muse-2.0/muse/mixer/rack.cpp --- muse-2.0~rc2/muse/mixer/rack.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/mixer/rack.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -182,6 +182,7 @@ setSpacing(0); setAcceptDrops(true); + setFocusPolicy(Qt::NoFocus); } void EffectRack::updateContents() @@ -410,8 +411,17 @@ return; } if (pipe) { - bool flag = !pipe->guiVisible(idx); - pipe->showGui(idx, flag); + bool flag; + if (pipe->has_dssi_ui(idx)) + { + flag = !pipe->nativeGuiVisible(idx); + pipe->showNativeGui(idx, flag); + + } + else { + flag = !pipe->guiVisible(idx); + pipe->showGui(idx, flag); + } } } @@ -507,6 +517,8 @@ QString xmlconf; xml.dump(xmlconf); + printf("[%s]\n", xmlconf.toLatin1().constData()); + QByteArray data(xmlconf.toLatin1().constData()); //printf("sending %d [%s]\n", data.length(), xmlconf.toLatin1().constData()); @@ -683,6 +695,8 @@ //printf("instantiated!\n"); MusEGlobal::audio->msgAddPlugin(track, idx, plugi); MusEGlobal::song->update(SC_RACK); + if (plugi->guiVisible()) + plugi->gui()->setWindowTitle(plugi->titlePrefix() + plugi->name()); return; } } diff -Nru muse-2.0~rc2/muse/mixer/strip.cpp muse-2.0/muse/mixer/strip.cpp --- muse-2.0~rc2/muse/mixer/strip.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/mixer/strip.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -293,10 +293,23 @@ //--------------------------------------------------------- void Strip::setAutomationType(int t) - { - track->setAutomationType(AutomationType(t)); - MusEGlobal::song->update(SC_AUTOMATION); - } +{ + // If going to OFF mode, need to update current 'manual' values from the automation values at this time... + if(t == AUTO_OFF && track->automationType() != AUTO_OFF) // && track->automationType() != AUTO_WRITE) + { + // May have a lot to do in updateCurValues, so try using idle. + MusEGlobal::audio->msgIdle(true); + track->setAutomationType(AutomationType(t)); + if(!track->isMidiTrack()) + (static_cast(track))->controller()->updateCurValues(MusEGlobal::audio->curFramePos()); + MusEGlobal::audio->msgIdle(false); + } + else + // Try it within one message. + MusEGlobal::audio->msgSetTrackAutomationType(track, t); + + MusEGlobal::song->update(SC_AUTOMATION); +} void Strip::resizeEvent(QResizeEvent* ev) { diff -Nru muse-2.0~rc2/muse/mpevent.cpp muse-2.0/muse/mpevent.cpp --- muse-2.0~rc2/muse/mpevent.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/mpevent.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -116,7 +116,8 @@ if (channel() == e.channel()) return type() == ME_NOTEOFF - || (type() == ME_NOTEON && dataB() == 0); + || (type() == ME_NOTEON && dataB() == 0) + || type() != ME_NOTEON; // Make note-ons last so that controllers such as program come before notes played. 1/31/2012 Tim. int map[16] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 10, 11, 12, 13, 14, 15 }; return map[channel()] < map[e.channel()]; @@ -147,7 +148,6 @@ { MidiPlayEvent event(fifo[rIndex]); rIndex = (rIndex + 1) % MIDI_FIFO_SIZE; - // q_atomic_decrement(&size); --size; return event; } @@ -169,7 +169,6 @@ void MidiFifo::remove() { rIndex = (rIndex + 1) % MIDI_FIFO_SIZE; - // q_atomic_decrement(&size); --size; } @@ -179,12 +178,11 @@ // return true on fifo overflow //--------------------------------------------------------- -bool MidiRecFifo::put(const MidiPlayEvent& event) +bool MidiRecFifo::put(const MidiRecordEvent& event) { if (size < MIDI_REC_FIFO_SIZE) { fifo[wIndex] = event; wIndex = (wIndex + 1) % MIDI_REC_FIFO_SIZE; - // q_atomic_increment(&size); ++size; return false; } @@ -195,11 +193,10 @@ // get //--------------------------------------------------------- -MidiPlayEvent MidiRecFifo::get() +MidiRecordEvent MidiRecFifo::get() { - MidiPlayEvent event(fifo[rIndex]); + MidiRecordEvent event(fifo[rIndex]); rIndex = (rIndex + 1) % MIDI_REC_FIFO_SIZE; - // q_atomic_decrement(&size); --size; return event; } @@ -208,7 +205,7 @@ // peek //--------------------------------------------------------- -const MidiPlayEvent& MidiRecFifo::peek(int n) +const MidiRecordEvent& MidiRecFifo::peek(int n) { int idx = (rIndex + n) % MIDI_REC_FIFO_SIZE; return fifo[idx]; @@ -221,7 +218,6 @@ void MidiRecFifo::remove() { rIndex = (rIndex + 1) % MIDI_REC_FIFO_SIZE; - // q_atomic_decrement(&size); --size; } diff -Nru muse-2.0~rc2/muse/mpevent.h muse-2.0/muse/mpevent.h --- muse-2.0~rc2/muse/mpevent.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/mpevent.h 2012-06-30 19:24:43.000000000 +0200 @@ -30,13 +30,10 @@ #include "memory.h" // Play events ring buffer size -//#define MIDI_FIFO_SIZE 512 -// Increased. FE/6/11 p4.0.15 Tim. -#define MIDI_FIFO_SIZE 2100 +#define MIDI_FIFO_SIZE 4096 // Record events ring buffer size -//#define MIDI_REC_FIFO_SIZE 512 -#define MIDI_REC_FIFO_SIZE 160 +#define MIDI_REC_FIFO_SIZE 256 namespace MusECore { @@ -114,6 +111,8 @@ //--------------------------------------------------------- class MidiRecordEvent : public MEvent { + private: + unsigned int _tick; // To store tick when external sync is on, required besides frame. public: MidiRecordEvent() : MEvent() {} MidiRecordEvent(const MEvent& e) : MEvent(e) {} @@ -124,6 +123,9 @@ MidiRecordEvent(unsigned t, int p, int type, EvData data) : MEvent(t, p, type, data) {} ~MidiRecordEvent() {} + + unsigned int tick() {return _tick;} + void setTick(unsigned int tick) {_tick = tick;} }; //--------------------------------------------------------- @@ -155,13 +157,12 @@ struct MPEventList : public MPEL { void add(const MidiPlayEvent& ev) { MPEL::insert(ev); } - //iterator add(const MidiPlayEvent& ev) { return MPEL::insert(ev); } // p4.0.15 We need the iterator. }; typedef MPEventList::iterator iMPEvent; typedef MPEventList::const_iterator ciMPEvent; -/* +/* DELETETHIS 20 ?? //--------------------------------------------------------- // MREventList // memory allocation in midi thread domain @@ -193,7 +194,7 @@ public: MidiFifo() { clear(); } - bool put(const MidiPlayEvent& /*event*/); // returns true on fifo overflow + bool put(const MidiPlayEvent& event); // returns true on fifo overflow MidiPlayEvent get(); const MidiPlayEvent& peek(int = 0); void remove(); @@ -204,20 +205,19 @@ //--------------------------------------------------------- // MidiRecFifo -// (Same as MidiFifo, but with a smaller size.) //--------------------------------------------------------- class MidiRecFifo { - MidiPlayEvent fifo[MIDI_REC_FIFO_SIZE]; + MidiRecordEvent fifo[MIDI_REC_FIFO_SIZE]; volatile int size; int wIndex; int rIndex; public: MidiRecFifo() { clear(); } - bool put(const MidiPlayEvent& /*event*/); // returns true on fifo overflow - MidiPlayEvent get(); - const MidiPlayEvent& peek(int = 0); + bool put(const MidiRecordEvent& event); // returns true on fifo overflow + MidiRecordEvent get(); + const MidiRecordEvent& peek(int = 0); void remove(); bool isEmpty() const { return size == 0; } void clear() { size = 0, wIndex = 0, rIndex = 0; } diff -Nru muse-2.0~rc2/muse/node.cpp muse-2.0/muse/node.cpp --- muse-2.0~rc2/muse/node.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/node.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -42,11 +42,12 @@ #include "ticksynth.h" // metronome #include "al/dsp.h" -// Uncomment this (and make sure to set Jack buffer size high like 2048) -// to see process flow messages. -//#define NODE_DEBUG -//#define FIFO_DEBUG +// Turn on debugging messages +//#define NODE_DEBUG +// Turn on constant flow of process debugging messages +//#define NODE_DEBUG_PROCESS +//#define FIFO_DEBUG //#define METRONOME_DEBUG namespace MusECore { @@ -375,7 +376,7 @@ // Make better use of AudioTrack::outBuffers as a post-effect pre-volume cache system for multiple calls here during processing. // Previously only WaveTrack used them. (Changed WaveTrack as well). - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::copyData name:%s processed:%d\n", name().toLatin1().constData(), processed()); #endif @@ -392,7 +393,6 @@ // and it has no in or out routes, yet multiple output tracks may call addData on it ! // We can't tell how many output tracks call it, so we can only assume there might be more than one. // Not strictly necessary here because only addData is ever called, but just to be consistent... - //bool usedirectbuf = ((outRoutes()->size() <= 1) || (type() == AUDIO_OUTPUT)) && (this != metronome); int i; @@ -401,8 +401,11 @@ // precalculate stereo volume double vol[2]; - double _volume = volume(); - double _pan = pan(); + double _volume = controller()->value(AC_VOLUME, pos, + !MusEGlobal::automation || automationType() == AUTO_OFF || !_volumeEnCtrl || !_volumeEn2Ctrl); + double _pan = controller()->value(AC_PAN, pos, + !MusEGlobal::automation || automationType() == AUTO_OFF || !_panEnCtrl || !_panEn2Ctrl); + vol[0] = _volume * (1.0 - _pan); vol[1] = _volume * (1.0 + _pan); float meter[trackChans]; @@ -412,7 +415,7 @@ { // If there is only one (or no) output routes, it's an error - we've been called more than once per process cycle! // No, this is no longer an error, it's deliberate. Processing no longer done in 'chains', now done randomly. p4.0.37 - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::copyData name:%s already processed _haveData:%d\n", name().toLatin1().constData(), _haveData); #endif @@ -448,7 +451,7 @@ if(off()) { - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::copyData name:%s dstChannels:%d Off, zeroing buffers\n", name().toLatin1().constData(), dstChannels); #endif @@ -468,23 +471,8 @@ _efxPipe->apply(0, nframes, 0); // Just process controls only, not audio (do not 'run'). for(i = 0; i < trackChans; ++i) - { _meter[i] = 0.0; - /*if(!usedirectbuf) - { - if(MusEGlobal::config.useDenormalBias) - { - for(q = 0; q < nframes; ++q) - outBuffers[i][q] = MusEGlobal::denormalBias; - } - else - memset(outBuffers[i], 0, sizeof(float) * nframes); - } */ - } - //_haveData = false; - //_processed = true; - //_isProcessing = false; // Unblock. return; } @@ -498,7 +486,7 @@ // so still call getData before it. Off is NOT meant to be toggled rapidly, but mute is ! if(!getData(pos, srcTotalOutChans, nframes, buffer) || (isMute() && !_prefader)) { - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::copyData name:%s srcTotalOutChans:%d zeroing buffers\n", name().toLatin1().constData(), srcTotalOutChans); #endif @@ -520,7 +508,6 @@ // apply plugin chain //--------------------------------------------------- - //fprintf(stderr, "AudioTrack::copyData %s efx apply srcChans:%d\n", name().toLatin1().constData(), srcChans); _efxPipe->apply(trackChans, nframes, buffer); //--------------------------------------------------- @@ -598,22 +585,6 @@ memset(dstBuffer[i], 0, sizeof(float) * nframes); } - /* - if(!usedirectbuf) - { - for(i = 0; i < srcChannels; ++i) - { - if(MusEGlobal::config.useDenormalBias) - { - for(q = 0; q < nframes; ++q) - outBuffers[i][q] = MusEGlobal::denormalBias; - } - else - memset(outBuffers[i], 0, sizeof(float) * nframes); - } - } */ - - if(!_prefader) for(i = 0; i < trackChans; ++i) // Must process ALL channels, even if unconnected. Only max 2 channels. _meter[i] = 0.0; @@ -622,11 +593,8 @@ } // If we're using local cached 'pre-volume' buffers, copy the input buffers (as they are right now: post-effect pre-volume) back to them. - //if(!usedirectbuf) - { - for(i = 0; i < srcTotalOutChans; ++i) - AL::dsp->cpy(outBuffers[i], buffer[i], nframes); - } + for(i = 0; i < srcTotalOutChans; ++i) + AL::dsp->cpy(outBuffers[i], buffer[i], nframes); // We have some data! Set to true. _haveData = true; @@ -658,7 +626,7 @@ // postfader metering //--------------------------------------------------- - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::copyData trackChans:%d srcTotalOutChans:%d srcStartChan:%d srcChans:%d dstChannels:%d\n", trackChans, srcTotalOutChans, srcStartChan, srcChans, dstChannels); #endif @@ -688,7 +656,6 @@ { double v; if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. - //v = _volume; v = 1.0; else if(srcChans >= 2) // If 2 channels apply pan normally. @@ -702,7 +669,6 @@ float* sp = buffer[c + srcStartChan]; float* dp = dstBuffer[c]; for(unsigned k = 0; k < nframes; ++k) - //*dp++ = (*sp++ * vol[c]); *dp++ = (*sp++ * v); } } @@ -712,7 +678,6 @@ { double v; if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. - //v = _volume; v = 1.0; else if(trackChans <= 1) // If track is mono apply pan. @@ -723,21 +688,17 @@ float* sp = buffer[srcStartChan]; float* dp = dstBuffer[c]; for(unsigned k = 0; k < nframes; ++k) - //*dp++ = (*sp++ * vol[c]); *dp++ = (*sp++ * v); } } else if(srcChans == 2 && dstChannels == 1) { - //double v1 = (srcStartChan > 2 ? _volume : vol[srcStartChan]); // - //double v2 = (srcStartChan > 2 ? _volume : vol[srcStartChan + 1]); // double v1 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan]); // Don't apply pan or volume to extra channels above 2. Or if prefader on. double v2 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan + 1]); // float* dp = dstBuffer[0]; float* sp1 = buffer[srcStartChan]; float* sp2 = buffer[srcStartChan + 1]; for(unsigned k = 0; k < nframes; ++k) - //*dp++ = (*sp1++ * vol[0] + *sp2++ * vol[1]); *dp++ = (*sp1++ * v1 + *sp2++ * v2); } } @@ -754,16 +715,10 @@ // Make better use of AudioTrack::outBuffers as a post-effect pre-volume cache system for multiple calls here during processing. // Previously only WaveTrack used them. (Changed WaveTrack as well). - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::addData name:%s processed:%d\n", name().toLatin1().constData(), processed()); #endif - //if (off()) - //{ - // _processed = true; - // return; - //} - if(srcStartChan == -1) srcStartChan = 0; @@ -773,10 +728,9 @@ if(channels() == 1) srcTotalOutChans = 1; - // Special consideration for metronome: It is not part of the track list, + // Special consideration for metronome: It is not part of the track list, DELETETHIS?? // and it has no in or out routes, yet multiple output tracks may call addData on it ! // We can't tell how many output tracks call it, so we can only assume there might be more than one. - //bool usedirectbuf = ((outRoutes()->size() <= 1) || (type() == AUDIO_OUTPUT)) && (this != metronome); int i; @@ -785,11 +739,13 @@ // precalculate stereo volume double vol[2]; - double _volume = volume(); - double _pan = pan(); + double _volume = controller()->value(AC_VOLUME, pos, + !MusEGlobal::automation || automationType() == AUTO_OFF || !_volumeEnCtrl || !_volumeEn2Ctrl); + double _pan = controller()->value(AC_PAN, pos, + !MusEGlobal::automation || automationType() == AUTO_OFF || !_panEnCtrl || !_panEn2Ctrl); + vol[0] = _volume * (1.0 - _pan); vol[1] = _volume * (1.0 + _pan); - //float meter[srcChans]; float meter[trackChans]; // Have we been here already during this process cycle? @@ -797,7 +753,7 @@ { // If there is only one (or no) output routes, it's an error - we've been called more than once per process cycle! // No, this is no longer an error, it's deliberate. Processing no longer done in 'chains', now done randomly. p4.0.37 - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::addData name:%s already processed _haveData:%d\n", name().toLatin1().constData(), _haveData); #endif @@ -823,7 +779,7 @@ if(off()) { - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::addData name:%s dstChannels:%d Track is Off \n", name().toLatin1().constData(), dstChannels); #endif @@ -832,19 +788,7 @@ _efxPipe->apply(0, nframes, 0); // Track is off. Just process controls only, not audio (do not 'run'). for(i = 0; i < trackChans; ++i) - { _meter[i] = 0.0; - /*if(!usedirectbuf) - { - if(MusEGlobal::config.useDenormalBias) - { - for(q = 0; q < nframes; ++q) - outBuffers[i][q] = MusEGlobal::denormalBias; - } - else - memset(outBuffers[i], 0, sizeof(float) * nframes); - } */ - } return; } @@ -873,15 +817,9 @@ //--------------------------------------------------- // apply plugin chain //--------------------------------------------------- - - //fprintf(stderr, "AudioTrack::addData %s efx apply srcChans:%d nframes:%ld %e %e %e %e\n", - // name().toLatin1().constData(), srcChans, nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); _efxPipe->apply(trackChans, nframes, buffer); - //fprintf(stderr, "AudioTrack::addData after efx: %e %e %e %e\n", - // buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); - //--------------------------------------------------- // aux sends //--------------------------------------------------- @@ -945,23 +883,7 @@ if(isMute()) { - // If we're using local buffers, we must zero them. - /* if(!usedirectbuf) - { - for(i = 0; i < srcChannels; ++i) - { - if(MusEGlobal::config.useDenormalBias) - { - for(unsigned int q = 0; q < nframes; ++q) - outBuffers[i][q] = MusEGlobal::denormalBias; - } - else - memset(outBuffers[i], 0, sizeof(float) * nframes); - } - } */ - if(!_prefader) - //for(i = 0; i < srcChans; ++i) for(i = 0; i < trackChans; ++i) _meter[i] = 0.0; @@ -969,11 +891,8 @@ } // If we're using local cached 'pre-volume' buffers, copy the input buffers (as they are right now: post-effect pre-volume) back to them. - //if(!usedirectbuf) - { - for(i = 0; i < srcTotalOutChans; ++i) - AL::dsp->cpy(outBuffers[i], buffer[i], nframes); - } + for(i = 0; i < srcTotalOutChans; ++i) + AL::dsp->cpy(outBuffers[i], buffer[i], nframes); // We have some data! Set to true. _haveData = true; @@ -1005,7 +924,7 @@ // postfader metering //--------------------------------------------------- - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioTrack::addData trackChans:%d srcTotalOutChans:%d srcChans:%d dstChannels:%d\n", trackChans, srcTotalOutChans, srcChans, dstChannels); #endif @@ -1035,7 +954,6 @@ { double v; if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. - //v = _volume; v = 1.0; else if(srcChans >= 2) // If 2 channels apply pan normally. @@ -1049,7 +967,6 @@ float* sp = buffer[c + srcStartChan]; float* dp = dstBuffer[c]; for(unsigned k = 0; k < nframes; ++k) - //*dp++ += (*sp++ * vol[c]); *dp++ += (*sp++ * v); } } @@ -1059,7 +976,6 @@ { double v; if(srcStartChan > 2 || _prefader) // Don't apply pan or volume to extra channels above 2. Or if prefader on. - //v = _volume; v = 1.0; else if(trackChans <= 1) // If track is mono apply pan. @@ -1070,21 +986,17 @@ float* sp = buffer[srcStartChan]; float* dp = dstBuffer[c]; for(unsigned k = 0; k < nframes; ++k) - //*dp++ += (*sp++ * vol[c]); *dp++ += (*sp++ * v); } } else if(srcChans == 2 && dstChannels == 1) { - //double v1 = (srcStartChan > 2 ? _volume : vol[srcStartChan]); // Don't apply pan to extra channels above 2. - //double v2 = (srcStartChan > 2 ? _volume : vol[srcStartChan + 1]); // double v1 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan]); // Don't apply pan or volume to extra channels above 2. Or if prefader on. double v2 = ((srcStartChan > 2 || _prefader) ? 1.0 : vol[srcStartChan + 1]); // float* sp1 = buffer[srcStartChan]; float* sp2 = buffer[srcStartChan + 1]; float* dp = dstBuffer[0]; for(unsigned k = 0; k < nframes; ++k) - //*dp++ += (*sp1++ * vol[0] + *sp2++ * vol[1]); *dp++ += (*sp1++ * v1 + *sp2++ * v2); } } @@ -1095,7 +1007,6 @@ void AudioTrack::readVolume(Xml& xml) { - //int ch = 0; for (;;) { Xml::Token token = xml.parse(); switch (token) { @@ -1122,9 +1033,14 @@ } } +// DELETETHIS 56 // Removed by T356 // "recfile" tag not saved anymore /* + +THIS CODE IS OBSOLETE! _recFile has been changed from SndFile* to SndFileR. +this code has NOT been adapted! + //--------------------------------------------------------- // readRecfile //--------------------------------------------------------- @@ -1189,9 +1105,7 @@ else _channels = n; for (int i = 0; i < _channels; ++i) { - //_meter[i] = 0; _meter[i] = 0.0; - //_peak[i] = 0; _peak[i] = 0.0; } } @@ -1201,7 +1115,6 @@ { if (n == _channels) return; -//was ist mit: void* jackPorts[MAX_CHANNELS]; AudioTrack::setChannels(n); } @@ -1234,8 +1147,8 @@ RouteList* rl = inRoutes(); - #ifdef NODE_DEBUG - printf("AudioTrack::getData name:%s inRoutes:%d\n", name().toLatin1().constData(), rl->size()); + #ifdef NODE_DEBUG_PROCESS + printf("AudioTrack::getData name:%s inRoutes:%lu\n", name().toLatin1().constData(), rl->size()); #endif ciRoute ir = rl->begin(); @@ -1245,21 +1158,19 @@ if(ir->track->isMidiTrack()) return false; - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf(" calling copyData on %s...\n", ir->track->name().toLatin1().constData()); #endif ((AudioTrack*)ir->track)->copyData(pos, channels, - //(ir->track->type() == Track::AUDIO_SOFTSYNTH && ir->channel != -1) ? ir->channel : 0, ir->channel, ir->channels, nframes, buffer); - //fprintf(stderr, "AudioTrack::getData %s data: nframes:%ld %e %e %e %e\n", name().toLatin1().constData(), nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); ++ir; for (; ir != rl->end(); ++ir) { - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf(" calling addData on %s...\n", ir->track->name().toLatin1().constData()); #endif @@ -1286,7 +1197,6 @@ for (int ch = 0; ch < channels; ++ch) { void* jackPort = jackPorts[ch]; - //float* jackbuf = 0; // Do not get buffers of unconnected client ports. Causes repeating leftover data, can be loud, or DC ! if (jackPort && MusEGlobal::audioDevice->connections(jackPort)) @@ -1302,15 +1212,12 @@ // their channel port buffers (if that's even possible) in order to determine if the buffer is shared, // let's just copy always, for now shall we ? float* jackbuf = MusEGlobal::audioDevice->getBuffer(jackPort, nframes); - //memcpy(buffer[ch], jackbuf, nframes* sizeof(float)); AL::dsp->cpy(buffer[ch], jackbuf, nframes); if (MusEGlobal::config.useDenormalBias) { for (unsigned int i=0; i < nframes; i++) buffer[ch][i] += MusEGlobal::denormalBias; - //fprintf(stderr, "AudioInput::getData %s Jack port %p efx apply channels:%d nframes:%ld %e %e %e %e\n", - // name().toLatin1().constData(), jackPort, channels, nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); } } else @@ -1324,8 +1231,6 @@ { memset(buffer[ch], 0, nframes * sizeof(float)); } - - // name().toLatin1().constData(), channels, nframes, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); } } return true; @@ -1345,7 +1250,6 @@ if (jackPorts[i]) MusEGlobal::audioDevice->setPortName(jackPorts[i], buffer); else { - //jackPorts[i] = MusEGlobal::audioDevice->registerInPort(buffer); jackPorts[i] = MusEGlobal::audioDevice->registerInPort(buffer, false); } } @@ -1359,7 +1263,6 @@ void Track::resetMeter() { for (int i = 0; i < _channels; ++i) - //_meter[i] = 0; _meter[i] = 0.0; } @@ -1370,7 +1273,6 @@ void Track::resetPeaks() { for (int i = 0; i < _channels; ++i) - //_peak[i] = 0; _peak[i] = 0.0; _lastActivity = 0; } @@ -1454,8 +1356,6 @@ unsigned pos = 0; float* buffer[_channels]; - //printf("AudioTrack: record() fifo %p, count=%d\n", &fifo, fifo.getCount()); - while(fifo.getCount()) { if (fifo.get(_channels, MusEGlobal::segmentSize, buffer, &pos)) { @@ -1509,8 +1409,6 @@ if( (pos >= fr) && (!MusEGlobal::song->punchout() || (!MusEGlobal::song->loop() && pos < MusEGlobal::song->rPos().frame())) ) { pos -= fr; - //int position = _recFile->seek(0, SEEK_CUR); - //printf("AudioTrack::record loopcnt:%d lframe:%d newpos:%d curpos:%d start:%d end:%d\n", MusEGlobal::audio->loopCount(), MusEGlobal::audio->loopFrame(), pos, position, MusEGlobal::audio->getStartRecordPos().frame(), MusEGlobal::audio->getEndRecordPos().frame()); _recFile->seek(pos, 0); _recFile->write(_channels, buffer, MusEGlobal::segmentSize); @@ -1552,7 +1450,7 @@ void AudioOutput::process(unsigned pos, unsigned offset, unsigned n) { - #ifdef NODE_DEBUG + #ifdef NODE_DEBUG_PROCESS printf("MusE: AudioOutput::process name:%s processed:%d\n", name().toLatin1().constData(), processed()); #endif @@ -1600,8 +1498,6 @@ putFifo(_channels, _nframes, buffer); } } - // Changed by Tim. - //if (MusEGlobal::audioClickFlag && MusEGlobal::song->click()) { if (sendMetronome() && MusEGlobal::audioClickFlag && MusEGlobal::song->click()) { #ifdef METRONOME_DEBUG @@ -1621,13 +1517,10 @@ for (int i = 0; i < channels(); ++i) { char buffer[128]; snprintf(buffer, 128, "%s-%d", _name.toLatin1().constData(), i); - if (jackPorts[i]) { + if (jackPorts[i]) MusEGlobal::audioDevice->setPortName(jackPorts[i], buffer); - } - else { - //jackPorts[i] = MusEGlobal::audioDevice->registerOutPort(buffer); + else jackPorts[i] = MusEGlobal::audioDevice->registerOutPort(buffer, false); - } } } @@ -1639,7 +1532,6 @@ Fifo::Fifo() { muse_atomic_init(&count); - //nbuffer = FIFO_BUFFER; nbuffer = MusEGlobal::fifoLength; buffer = new FifoBuffer*[nbuffer]; for (int i = 0; i < nbuffer; ++i) @@ -1652,10 +1544,7 @@ for (int i = 0; i < nbuffer; ++i) { if(buffer[i]->buffer) - { - //printf("Fifo::~Fifo freeing buffer\n"); free(buffer[i]->buffer); - } delete buffer[i]; } @@ -1684,14 +1573,9 @@ if (b->maxSize < n) { if (b->buffer) { - // Changed by Tim. p3.3.15 - //delete[] b->buffer; free(b->buffer); - // p3.3.45 b->buffer = 0; } - // Changed by Tim. p3.3.15 - //b->buffer = new float[n]; posix_memalign((void**)&(b->buffer), 16, sizeof(float) * n); if(!b->buffer) { @@ -1711,7 +1595,6 @@ b->segs = segs; b->pos = pos; for (int i = 0; i < segs; ++i) - //memcpy(b->buffer + i * samples, src[i], samples * sizeof(float)); AL::dsp->cpy(b->buffer + i * samples, src[i], samples); add(); return false; @@ -1779,15 +1662,10 @@ if (b->maxSize < n) { if (b->buffer) { - // Changed by Tim. p3.3.15 - //delete[] b->buffer; free(b->buffer); - // p3.3.45 b->buffer = 0; } - // Changed by Tim. p3.3.15 - //b->buffer = new float[n]; posix_memalign((void**)&(b->buffer), 16, sizeof(float) * n); if(!b->buffer) { @@ -1840,14 +1718,9 @@ void AudioTrack::setTotalOutChannels(int num) { - //if(num == _totalOutChannels) - // return; - // p4.0.27 Fixes crash if file loaded with track channels less than synth channels. int chans = _totalOutChannels; if(num != chans) { - - //int chans = _totalOutChannels; // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. if(chans < MAX_CHANNELS) chans = MAX_CHANNELS; @@ -1870,11 +1743,6 @@ outBuffers = new float*[chans]; for (int i = 0; i < chans; ++i) posix_memalign((void**)&outBuffers[i], 16, sizeof(float) * MusEGlobal::segmentSize); - - //chans = num; - // Limit the actual track (meters, copying etc, all 'normal' operation) to two-channel stereo. - //if(chans > MAX_CHANNELS) - // chans = MAX_CHANNELS; } chans = num; // Limit the actual track (meters, copying etc, all 'normal' operation) to two-channel stereo. diff -Nru muse-2.0~rc2/muse/node.h muse-2.0/muse/node.h --- muse-2.0~rc2/muse/node.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/node.h 2012-06-30 19:24:42.000000000 +0200 @@ -98,12 +98,8 @@ class Xml; class Pipeline; -class SndFile; -// superceeded by dynamic allocation of fifoLength -//const int FIFO_BUFFER = 4096;//64; - //--------------------------------------------------------- // Fifo //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/osc.cpp muse-2.0/muse/osc.cpp --- muse-2.0~rc2/muse/osc.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/osc.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -33,6 +33,8 @@ #include #include +#include +#include #include #include @@ -43,7 +45,6 @@ #else #include #include - #include #endif #include @@ -154,55 +155,102 @@ fprintf(stderr, "oscMessageHandler: got message for ladspa effect...\n"); #endif - // FIXME: Slowdowns: Shouldn't need these retries but they are needed, only upon creation of the synth. - // Need to fix the real source of the problem! The instance is taking too long to appear after creation. - // - ///for(int retry = 0; retry < 5000; ++retry) - { - ///#ifdef OSC_DEBUG - ///fprintf(stderr, "oscMessageHandler: search retry number:%d ...\n", retry); - ///#endif - - //if(_uiOscPath) - // break; - #ifdef DSSI_SUPPORT - if(isSynth) + #ifdef DSSI_SUPPORT + if(isSynth) + { + // Message is meant for a dssi synth. Check dssi synth instances... + SynthIList* sl = MusEGlobal::song->syntis(); + for(iSynthI si = sl->begin(); si != sl->end(); ++si) { - // Message is meant for a dssi synth. Check dssi synth instances... - SynthIList* sl = MusEGlobal::song->syntis(); - for(iSynthI si = sl->begin(); si != sl->end(); ++si) + SynthI* synti = *si; + + #ifdef OSC_DEBUG + fprintf(stderr, "oscMessageHandler: searching for:%s checking synth instance:%s\n", p, synti->name().toLatin1().constData()); + #endif + + QByteArray ba = synti->name().toLatin1(); + const char* sub = strstr(p, ba.constData()); + if(sub == NULL) + continue; + + // TODO: Fix this dynamic cast - it may be a slowdown. + DssiSynthIF* instance = dynamic_cast(synti->sif()); + if(!instance) + break; + + p = sub + ba.length(); + if (*p != '/' || *(p + 1) == 0) { - SynthI* synti = *si; + fprintf(stderr, "oscMessageHandler error: synth: end of path or no /\n"); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + + ++p; + + #ifdef OSC_DEBUG + fprintf(stderr, "oscMessageHandler: synth track:%s method:%s\n", synti->name().toLatin1().constData(), p); + #endif + + OscIF& oscif = instance->oscIF(); + + if (!strcmp(p, "configure") && argc == 2 && !strcmp(types, "ss")) + return oscif.oscConfigure(argv); + else if (!strcmp(p, "control") && argc == 2 && !strcmp(types, "if")) + return oscif.oscControl(argv); + else if (!strcmp(p, "midi") && argc == 1 && !strcmp(types, "m")) + return oscif.oscMidi(argv); + else if (!strcmp(p, "program") && argc == 2 && !strcmp(types, "ii")) + return oscif.oscProgram(argv); + else if (!strcmp(p, "update") && argc == 1 && !strcmp(types, "s")) + return oscif.oscUpdate(argv); + else if (!strcmp(p, "exiting") && argc == 0) + return oscif.oscExiting(argv); + return oscDebugHandler(path, types, argv, argc, data, user_data); + } + } + else + #endif //DSSI_SUPPORT + // Message is meant for a ladspa effect. Check all ladspa effect instances... + for(ciTrack it = tl->begin(); it != tl->end(); ++it) + { + if((*it)->isMidiTrack()) + continue; + + Pipeline* efxPipe = ((AudioTrack*)*it)->efxPipe(); + if(efxPipe) + { + for(ciPluginI ip = efxPipe->begin(); ip != efxPipe->end(); ++ip) + { + PluginI* instance = *ip; + if(!instance) + continue; #ifdef OSC_DEBUG - fprintf(stderr, "oscMessageHandler: searching for:%s checking synth instance:%s\n", p, synti->name().toLatin1().constData()); + fprintf(stderr, "oscMessageHandler: searching for:%s checking effect instance:%s label:%s lib:%s\n", + p, instance->name().toLatin1().constData(), instance->label().toLatin1().constData(), instance->lib().toLatin1().constData()); #endif - QByteArray ba = synti->name().toLatin1(); + QByteArray ba = instance->label().toLatin1(); const char* sub = strstr(p, ba.constData()); if(sub == NULL) continue; - - //DssiSynthIF* instance = (DssiSynthIF*)synti->sif(); - // TODO: Fix this dynamic cast - it may be a slowdown. - DssiSynthIF* instance = dynamic_cast(synti->sif()); - if(!instance) - break; - QByteArray ba2 = synti->name().toLatin1(); - p = sub + strlen(ba2.constData()); + Plugin* plugin = instance->plugin(); + if(!plugin) + break; + p = sub + ba.length(); if (*p != '/' || *(p + 1) == 0) { - fprintf(stderr, "oscMessageHandler error: synth: end of path or no /\n"); + fprintf(stderr, "oscMessageHandler: error: effect: end of path or no /\n"); return oscDebugHandler(path, types, argv, argc, data, user_data); } ++p; #ifdef OSC_DEBUG - fprintf(stderr, "oscMessageHandler: synth track:%s method:%s\n", synti->name().toLatin1().constData(), p); + fprintf(stderr, "oscMessageHandler: effect:%s method:%s\n", instance->label().toLatin1().constData(), p); #endif OscIF& oscif = instance->oscIF(); @@ -222,76 +270,6 @@ return oscDebugHandler(path, types, argv, argc, data, user_data); } } - else - #endif //DSSI_SUPPORT - // Message is meant for a ladspa effect. Check all ladspa effect instances... - for(ciTrack it = tl->begin(); it != tl->end(); ++it) - { - if((*it)->isMidiTrack()) - continue; - - Pipeline* efxPipe = ((AudioTrack*)*it)->efxPipe(); - if(efxPipe) - { - for(ciPluginI ip = efxPipe->begin(); ip != efxPipe->end(); ++ip) - { - PluginI* instance = *ip; - if(!instance) - continue; - - #ifdef OSC_DEBUG - fprintf(stderr, "oscMessageHandler: searching for:%s checking effect instance:%s label:%s lib:%s\n", - p, instance->name().toLatin1().constData(), instance->label().toLatin1().constData(), instance->lib().toLatin1().constData()); - #endif - - //const char* sub = strstr(p, instance->name().toLatin1().constData()); - ///const char* sub = strstr(p, instance->label().toLatin1().constData()); - QByteArray ba = instance->label().toLatin1(); - const char* sub = strstr(p, ba.constData()); - if(sub == NULL) - continue; - - Plugin* plugin = instance->plugin(); - if(!plugin) - break; - - //p = sub + strlen(instance->name().toLatin1().constData()); - QByteArray ba3 = instance->label().toLatin1(); - p = sub + strlen(ba3.constData()); - - if (*p != '/' || *(p + 1) == 0) - { - fprintf(stderr, "oscMessageHandler: error: effect: end of path or no /\n"); - return oscDebugHandler(path, types, argv, argc, data, user_data); - } - - ++p; - - #ifdef OSC_DEBUG - //fprintf(stderr, "oscMessageHandler: effect:%s method:%s\n", instance->name().toLatin1().constData(), p); - fprintf(stderr, "oscMessageHandler: effect:%s method:%s\n", instance->label().toLatin1().constData(), p); - #endif - - OscIF& oscif = instance->oscIF(); - - if (!strcmp(p, "configure") && argc == 2 && !strcmp(types, "ss")) - return oscif.oscConfigure(argv); - else if (!strcmp(p, "control") && argc == 2 && !strcmp(types, "if")) - return oscif.oscControl(argv); - else if (!strcmp(p, "midi") && argc == 1 && !strcmp(types, "m")) - return oscif.oscMidi(argv); - else if (!strcmp(p, "program") && argc == 2 && !strcmp(types, "ii")) - return oscif.oscProgram(argv); - else if (!strcmp(p, "update") && argc == 1 && !strcmp(types, "s")) - return oscif.oscUpdate(argv); - else if (!strcmp(p, "exiting") && argc == 0) - return oscif.oscExiting(argv); - return oscDebugHandler(path, types, argv, argc, data, user_data); - } - } - } - - ///usleep(1000); } fprintf(stderr, "oscMessageHandler: timeout error: no synth or effect instance found for given path\n"); @@ -321,12 +299,6 @@ } } - ///snprintf(osc_path_tmp, 31, "/dssi"); - // Test: Clear the temp path: - //snprintf(osc_path_tmp, 31, ""); - - ///char* tmp = lo_server_thread_get_url(serverThread); - url = lo_server_thread_get_url(serverThread); if(!url) { @@ -335,14 +307,6 @@ return; } - ///url = (char *)malloc(strlen(tmp) + strlen(osc_path_tmp)); - //url = (char *)malloc(strlen(tmp)); - - ///sprintf(url, "%s%s", tmp, osc_path_tmp + 1); - //sprintf(url, "%s", tmp, osc_path_tmp + 1); - - ///free(tmp); - lo_method meth = 0; meth = lo_server_thread_add_method(serverThread, 0, 0, oscMessageHandler, 0); if(!meth) @@ -420,6 +384,11 @@ _guiPid = -1; #endif _oscGuiVisible = false; + + old_prog=old_bank=0xDEADBEEF; + old_control=NULL; + control_port_mapper=NULL; + maxDssiPort=0; } OscIF::~OscIF() @@ -433,19 +402,7 @@ printf("OscIF::~OscIF terminating _oscGuiQProc\n"); #endif - //_oscGuiQProc->kill(); - // "This tries to terminate the process the nice way. If the process is still running after 5 seconds, - // it terminates the process the hard way. The timeout should be chosen depending on the time the - // process needs to do all its cleanup: use a higher value if the process is likely to do a lot of - // computation or I/O on cleanup." _oscGuiQProc->terminate(); - // FIXME: In Qt4 this can only be used with threads started with QThread. - // Kill is bad anyway, app should check at close if all these guis closed or not - // and ask user if they really want to close, possibly with kill. - // Terminate might not terminate the thread. It is given a chance to prompt for saving etc. - // so kill is not desirable. - // We could wait until terminate finished but don't think that's good here. - ///QTimer::singleShot( 5000, _oscGuiQProc, SLOT( kill() ) ); _oscGuiQProc->waitForFinished(3000); } delete _oscGuiQProc; @@ -474,6 +431,9 @@ free(_uiOscProgramPath); if(_uiOscPath) free(_uiOscPath); + + if (old_control) + delete [] old_control; } //--------------------------------------------------------- @@ -552,6 +512,7 @@ // Send sample rate. lo_send(_uiOscTarget, _uiOscSampleRatePath, "i", MusEGlobal::sampleRate); + // DELETETHIS 46 // Send project directory. //lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", // DSSI_PROJECT_DIRECTORY_KEY, museProject.toLatin1().constData()); // MusEGlobal::song->projectPath() @@ -598,7 +559,7 @@ lo_send(_uiOscTarget, uiOscGuiPath, ""); */ - + // DELETETHIS 22 #if 0 /* Send current bank/program (-FIX- another race...) */ if (instance->pendingProgramChange < 0) { @@ -633,6 +594,7 @@ // The gui is gone now, right? _oscGuiVisible = false; +// DELETETHIS 52 // Just an attempt to really kill the process, an attempt to fix gui not re-showing after closing. Doesn't help. /* #ifdef _USE_QPROCESS_FOR_GUI_ @@ -707,6 +669,7 @@ free(_uiOscPath); _uiOscPath = 0; + // DELETETHIS 20 //const DSSI_Descriptor* dssi = synth->dssi; //const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; //if(ld->deactivate) @@ -726,7 +689,8 @@ lo_send(_uiOscTarget, uiOscGuiPath, ""); */ - + +// DELETETHIS 37 #if 0 int i; @@ -769,20 +733,29 @@ // oscSendProgram //--------------------------------------------------------- -void OscIF::oscSendProgram(unsigned long prog, unsigned long bank) +void OscIF::oscSendProgram(unsigned long prog, unsigned long bank, bool force) { - if(_uiOscTarget && _uiOscProgramPath) + if(_uiOscTarget && _uiOscProgramPath && + (bank!=old_bank || prog!=old_prog || force) ) + { lo_send(_uiOscTarget, _uiOscProgramPath, "ii", bank, prog); + old_bank=bank; + old_prog=prog; + } } //--------------------------------------------------------- // oscSendControl //--------------------------------------------------------- -void OscIF::oscSendControl(unsigned long dssiPort, float v) +void OscIF::oscSendControl(unsigned long dssiPort, float v, bool force) { - if(_uiOscTarget && _uiOscControlPath) + if(_uiOscTarget && _uiOscControlPath && + ((dssiPortat(dssiPort)]!=v) || force) ) + { lo_send(_uiOscTarget, _uiOscControlPath, "if", dssiPort, v); + old_control[control_port_mapper->at(dssiPort)]=v; + } } //--------------------------------------------------------- @@ -800,8 +773,45 @@ //--------------------------------------------------------- bool OscIF::oscInitGui(const QString& typ, const QString& baseName, const QString& name, - const QString& label, const QString& filePath, const QString& guiPath) + const QString& label, const QString& filePath, const QString& guiPath, + const std::vector* control_port_mapper_) { + if (old_control==NULL) + { + control_port_mapper=control_port_mapper_; + + unsigned long nDssiPorts=0; + for (unsigned i=0;isize();i++) + if (control_port_mapper->at(i)!=(unsigned long)-1 && control_port_mapper->at(i)+1 > nDssiPorts) + nDssiPorts=control_port_mapper->at(i)+1; + + old_control=new float[nDssiPorts]; + for (unsigned long i=0;isize();i++) + if (control_port_mapper->at(i)!=(unsigned long)-1 && control_port_mapper->at(i)+1 > nDssiPorts) + nDssiPorts=control_port_mapper->at(i)+1; + + if (maxDssiPort!=nDssiPorts) + { + // this should never happen, right? + printf("STRANGE: nDssiPorts has changed (old=%lu, now=%lu)!\n", maxDssiPort, nDssiPorts); + delete [] old_control; + old_control=new float[nDssiPorts]; + for (unsigned long i=0;istate())) @@ -837,7 +847,6 @@ // Using QProcess works OK. // No QProcess created yet? Do it now. Only once per SynthIF instance. Exists until parent destroyed. if(_oscGuiQProc == 0) - //_oscGuiQProc = new QProcess(muse); _oscGuiQProc = new QProcess(); QString program(guiPath); @@ -845,7 +854,6 @@ arguments << oscUrl << filePath << name - //<< QString("channel-1"); << (titlePrefix() + label); #ifdef OSC_DEBUG @@ -867,7 +875,6 @@ filePath.toLatin1().constData(), name.toLatin1().constData(), strerror(errno)); - //exit(1); } #ifdef OSC_DEBUG @@ -946,8 +953,7 @@ } } - //for (int i = 0; i < 5; ++i) { - for (int i = 0; i < 20; ++i) { // Give it a wee bit more time? + for (int i = 0; i < 20; ++i) { if (_uiOscPath) break; sleep(1); @@ -998,7 +1004,7 @@ // Make sure to call base method. OscIF::oscUpdate(argv); - // Send sample rate. No, done in base class. + // Send sample rate. No, done in base class. DELETETHIS 7 //lo_send(_uiOscTarget, _uiOscSampleRatePath, "i", sampleRate); // Send project directory. No, done in DssiSynthIF. @@ -1007,7 +1013,7 @@ if(_oscSynthIF) _oscSynthIF->oscUpdate(); - +// DELETETHIS 23 #if 0 /* Send current bank/program (-FIX- another race...) */ if (instance->pendingProgramChange < 0) { @@ -1064,7 +1070,11 @@ int OscDssiIF::oscProgram(lo_arg** argv) { if(_oscSynthIF) + { _oscSynthIF->oscProgram(argv[1]->i, argv[0]->i); + old_prog=argv[1]->i; + old_bank=argv[0]->i; + } return 0; } @@ -1080,7 +1090,11 @@ return 0; if(_oscSynthIF) + { _oscSynthIF->oscControl(argv[0]->i, argv[1]->f); + if (port<(int)maxDssiPort) + old_control[control_port_mapper->at(port)]=argv[1]->f; + } return 0; } @@ -1092,10 +1106,11 @@ { if(!_oscSynthIF) return false; - + return OscIF::oscInitGui("dssi_synth", _oscSynthIF->dssiSynth()->baseName(), _oscSynthIF->dssiSynth()->name(), _oscSynthIF->dssiSynthI()->name(), - _oscSynthIF->dssiSynth()->fileName(), _oscSynthIF->dssi_ui_filename()); + _oscSynthIF->dssiSynth()->fileName(), _oscSynthIF->dssi_ui_filename(), + _oscSynthIF->dssiSynth()->getRpIdx()); } QString OscDssiIF::titlePrefix() const @@ -1124,10 +1139,6 @@ // Make sure to call base method. OscIF::oscUpdate(argv); - // Send project directory. No, done in PluginI. - //lo_send(_uiOscTarget, _uiOscConfigurePath, "ss", - // DSSI_PROJECT_DIRECTORY_KEY, museProject.toLatin1().constData()); // MusEGlobal::song->projectPath() - if(_oscPluginI) _oscPluginI->oscUpdate(); @@ -1157,7 +1168,11 @@ return 0; if(_oscPluginI) + { _oscPluginI->oscControl(argv[0]->i, argv[1]->f); + if (port<(int)maxDssiPort) + old_control[control_port_mapper->at(port)]=argv[1]->f; + } return 0; } @@ -1172,7 +1187,8 @@ return OscIF::oscInitGui("ladspa_efx", _oscPluginI->plugin()->lib(false), _oscPluginI->plugin()->label(), _oscPluginI->label(), - _oscPluginI->plugin()->fileName(), _oscPluginI->dssi_ui_filename()); + _oscPluginI->plugin()->fileName(), _oscPluginI->dssi_ui_filename(), + _oscPluginI->plugin()->getRpIdx()); } QString OscEffectIF::titlePrefix() const diff -Nru muse-2.0~rc2/muse/osc.h muse-2.0/muse/osc.h --- muse-2.0~rc2/muse/osc.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/osc.h 2012-06-30 19:24:42.000000000 +0200 @@ -24,14 +24,19 @@ #ifndef __OSC_H__ #define __OSC_H__ -#include - #include "config.h" +#ifdef OSC_SUPPORT +#include + class QProcess; class QString; +#endif // OSC_SUPPORT + namespace MusECore { +#ifdef OSC_SUPPORT + #ifdef DSSI_SUPPORT class DssiSynthIF; #endif @@ -52,9 +57,16 @@ char* _uiOscControlPath; char* _uiOscShowPath; bool _oscGuiVisible; - - virtual bool oscInitGui(const QString& /*typ*/, const QString& /*baseName*/, const QString& /*name*/, - const QString& /*label*/, const QString& /*filePath*/, const QString& /*guiPath*/); + + unsigned long old_prog; + unsigned long old_bank; + float* old_control; + unsigned long maxDssiPort; + const std::vector* control_port_mapper; + + virtual bool oscInitGui(const QString& typ, const QString& baseName, const QString& name, + const QString& label, const QString& filePath, const QString& guiPath, + const std::vector* control_port_mapper_); public: OscIF(); @@ -67,9 +79,9 @@ virtual int oscMidi(lo_arg**) { return 0; } virtual int oscConfigure(lo_arg**) { return 0; } - virtual void oscSendProgram(unsigned long /*prog*/, unsigned long /*bank*/); - virtual void oscSendControl(unsigned long /*dssiPort*/, float /*val*/); - virtual void oscSendConfigure(const char */*key*/, const char */*val*/); + virtual void oscSendProgram(unsigned long prog, unsigned long bank, bool force=false); + virtual void oscSendControl(unsigned long dssiPort, float val, bool force=false); + virtual void oscSendConfigure(const char *key, const char *val); virtual bool oscInitGui() { return false; } virtual void oscShowGui(bool); @@ -85,15 +97,11 @@ public: OscEffectIF() {} - //~OscEffectIF(); - void oscSetPluginI(PluginI*); + void oscSetPluginI(PluginI*); // this MUST be called with NULL-argument from PluginI's destructor! virtual int oscUpdate(lo_arg**); - //virtual int oscProgram(lo_arg**); virtual int oscControl(lo_arg**); - //virtual int oscExiting(lo_arg**); - //virtual int oscMidi(lo_arg**); virtual int oscConfigure(lo_arg**); virtual bool oscInitGui(); @@ -109,14 +117,12 @@ public: OscDssiIF() {} - //~OscDssiIF(); - void oscSetSynthIF(DssiSynthIF*); + void oscSetSynthIF(DssiSynthIF*); // this MUST be called with NULL-argument from DssiSynthIF's destructor! virtual int oscUpdate(lo_arg**); virtual int oscProgram(lo_arg**); virtual int oscControl(lo_arg**); - //virtual int oscExiting(lo_arg**); virtual int oscMidi(lo_arg**); virtual int oscConfigure(lo_arg**); @@ -125,6 +131,8 @@ virtual QString titlePrefix() const; }; #endif // DSSI_SUPPORT + +#endif // OSC_SUPPORT extern void initOSC(); diff -Nru muse-2.0~rc2/muse/part.cpp muse-2.0/muse/part.cpp --- muse-2.0~rc2/muse/part.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/part.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -34,7 +34,6 @@ #include "wave.h" #include "midiport.h" #include "drummap.h" -//#include "midiedit/drummap.h" // p4.0.2 namespace MusECore { @@ -168,6 +167,7 @@ // replaceClone //--------------------------------------------------------- +// this replaces p1 by p2. p1 is isolated, and p2 takes its place instead. void replaceClone(Part* p1, Part* p2) { chainCheckErr(p1); @@ -182,7 +182,7 @@ if(p1->cevents() != p2->cevents()) { bool ret = false; - // If the part to be replaced is a single uncloned part, + // If the part to be replaced is a single uncloned part, [DELETETHIS 4 this seems outdated=wrong to me] // and the replacement part is not, then this operation // MUST be an undo of a de-cloning of a cloned part. //if(p1->cevents()->refCount() <= 1 && p2->cevents()->refCount() > 1) @@ -191,11 +191,11 @@ // Chain the replacement part. We don't know the chain it came from, // so we use the slow method. chainCloneInternal(p2); - //return; + //return; DELETETHIS ret = true; } - // If the replacement part is a single uncloned part, + // If the replacement part is a single uncloned part, DELETETHIS same as above // and the part to be replaced is not, then this operation // MUST be a de-cloning of a cloned part. //if(p1->cevents()->refCount() > 1 && p2->cevents()->refCount() <= 1) @@ -207,7 +207,6 @@ // Isolate the part. p1->setPrevClone(p1); p1->setNextClone(p1); - //return; ret = true; } @@ -376,57 +375,52 @@ // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. Part* p = part; - //int j = doClones ? p->cevents()->arefCount() : 1; - //if(j > 0) + while(1) { - //for(int i = 0; i < j; ++i) - while(1) + Track* t = p->track(); + if(t && t->isMidiTrack()) { - Track* t = p->track(); - if(t && t->isMidiTrack()) - { - MidiTrack* mt = (MidiTrack*)t; - int port = mt->outPort(); - unsigned len = p->lenTick(); + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + unsigned len = p->lenTick(); + + // Do not add events which are past the end of the part. + if(event.tick() >= len) + break; + + if(event.type() == Controller) + { + int ch = mt->outChannel(); + int tck = event.tick() + p->tick(); + int cntrl = event.dataA(); + int val = event.dataB(); + MidiPort* mp = &MusEGlobal::midiPorts[port]; - // Do not add events which are past the end of the part. - if(event.tick() >= len) - break; - - if(event.type() == Controller) + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) { - int ch = mt->outChannel(); - int tck = event.tick() + p->tick(); - int cntrl = event.dataA(); - int val = event.dataB(); - MidiPort* mp = &MusEGlobal::midiPorts[port]; - - // Is it a drum controller event, according to the track port's instrument? - if(mt->type() == Track::DRUM) + MidiController* mc = mp->drumController(cntrl); + if(mc) { - MidiController* mc = mp->drumController(cntrl); - if(mc) - { - int note = cntrl & 0x7f; - cntrl &= ~0xff; - ch = MusEGlobal::drumMap[note].channel; - mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; - cntrl |= MusEGlobal::drumMap[note].anote; - } + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = MusEGlobal::drumMap[note].channel; + mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; + cntrl |= MusEGlobal::drumMap[note].anote; } - - mp->setControllerVal(ch, tck, cntrl, val, p); } - } - - if(!doClones) - break; - // Get the next clone in the chain ring. - p = p->nextClone(); - // Same as original part? Finished. - if(p == part) - break; + + mp->setControllerVal(ch, tck, cntrl, val, p); + } } + + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; } } @@ -441,61 +435,56 @@ // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. Part* p = part; - //int j = doClones ? p->cevents()->arefCount() : 1; - //if(j > 0) + while(1) { - //for(int i = 0; i < j; ++i) - while(1) + Track* t = p->track(); + if(t && t->isMidiTrack()) { - Track* t = p->track(); - if(t && t->isMidiTrack()) - { - MidiTrack* mt = (MidiTrack*)t; - int port = mt->outPort(); - const EventList* el = p->cevents(); - unsigned len = p->lenTick(); - for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + const EventList* el = p->cevents(); + unsigned len = p->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not add events which are past the end of the part. + if(ev.tick() >= len) + break; + + if(ev.type() == Controller) { - const Event& ev = ie->second; - // Added by T356. Do not add events which are past the end of the part. - if(ev.tick() >= len) - break; - - if(ev.type() == Controller) + int ch = mt->outChannel(); + int tck = ev.tick() + p->tick(); + int cntrl = ev.dataA(); + int val = ev.dataB(); + MidiPort* mp = &MusEGlobal::midiPorts[port]; + + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) { - int ch = mt->outChannel(); - int tck = ev.tick() + p->tick(); - int cntrl = ev.dataA(); - int val = ev.dataB(); - MidiPort* mp = &MusEGlobal::midiPorts[port]; - - // Is it a drum controller event, according to the track port's instrument? - if(mt->type() == Track::DRUM) + MidiController* mc = mp->drumController(cntrl); + if(mc) { - MidiController* mc = mp->drumController(cntrl); - if(mc) - { - int note = cntrl & 0x7f; - cntrl &= ~0xff; - ch = MusEGlobal::drumMap[note].channel; - mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; - cntrl |= MusEGlobal::drumMap[note].anote; - } + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = MusEGlobal::drumMap[note].channel; + mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; + cntrl |= MusEGlobal::drumMap[note].anote; } - - mp->setControllerVal(ch, tck, cntrl, val, p); } + + mp->setControllerVal(ch, tck, cntrl, val, p); } } - if(!doClones) - break; - // Get the next clone in the chain ring. - p = p->nextClone(); - // Same as original part? Finished. - if(p == part) - break; } - } + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; + } } //--------------------------------------------------------- @@ -509,51 +498,46 @@ // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. Part* p = part; - //int j = doClones ? p->cevents()->arefCount() : 1; - //if(j > 0) + while(1) { - //for(int i = 0; i < j; ++i) - while(1) + Track* t = p->track(); + if(t && t->isMidiTrack()) { - Track* t = p->track(); - if(t && t->isMidiTrack()) - { - MidiTrack* mt = (MidiTrack*)t; - int port = mt->outPort(); - - if(event.type() == Controller) + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + + if(event.type() == Controller) + { + int ch = mt->outChannel(); + int tck = event.tick() + p->tick(); + int cntrl = event.dataA(); + MidiPort* mp = &MusEGlobal::midiPorts[port]; + + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) { - int ch = mt->outChannel(); - int tck = event.tick() + p->tick(); - int cntrl = event.dataA(); - MidiPort* mp = &MusEGlobal::midiPorts[port]; - - // Is it a drum controller event, according to the track port's instrument? - if(mt->type() == Track::DRUM) + MidiController* mc = mp->drumController(cntrl); + if(mc) { - MidiController* mc = mp->drumController(cntrl); - if(mc) - { - int note = cntrl & 0x7f; - cntrl &= ~0xff; - ch = MusEGlobal::drumMap[note].channel; - mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; - cntrl |= MusEGlobal::drumMap[note].anote; - } + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = MusEGlobal::drumMap[note].channel; + mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; + cntrl |= MusEGlobal::drumMap[note].anote; } - - mp->deleteController(ch, tck, cntrl, p); } - } - - if(!doClones) - break; - // Get the next clone in the chain ring. - p = p->nextClone(); - // Same as original part? Finished. - if(p == part) - break; - } + + mp->deleteController(ch, tck, cntrl, p); + } + } + + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; } } @@ -568,62 +552,57 @@ // Update: Due to the varying calls, and order of, incARefcount, (msg)ChangePart, replaceClone, and remove/addPortCtrlEvents, // we can not rely on the reference count as a safety net in these routines. We will just have to trust the clone chain. Part* p = part; - //int j = doClones ? p->cevents()->arefCount() : 1; - //if(j > 0) + while(1) { - //for(int i = 0; i < j; ++i) - while(1) + Track* t = p->track(); + if(t && t->isMidiTrack()) { - Track* t = p->track(); - if(t && t->isMidiTrack()) - { - MidiTrack* mt = (MidiTrack*)t; - int port = mt->outPort(); - const EventList* el = p->cevents(); - //unsigned len = p->lenTick(); - for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + MidiTrack* mt = (MidiTrack*)t; + int port = mt->outPort(); + const EventList* el = p->cevents(); + //unsigned len = p->lenTick(); + for(ciEvent ie = el->begin(); ie != el->end(); ++ie) + { + const Event& ev = ie->second; + // Added by T356. Do not remove events which are past the end of the part. DELETETHIS 5 + // No, actually, do remove ALL of them belonging to the part. + // Just in case there are stray values left after the part end. + //if(ev.tick() >= len) + // break; + + if(ev.type() == Controller) { - const Event& ev = ie->second; - // Added by T356. Do not remove events which are past the end of the part. - // No, actually, do remove ALL of them belonging to the part. - // Just in case there are stray values left after the part end. - //if(ev.tick() >= len) - // break; - - if(ev.type() == Controller) + int ch = mt->outChannel(); + int tck = ev.tick() + p->tick(); + int cntrl = ev.dataA(); + MidiPort* mp = &MusEGlobal::midiPorts[port]; + + // Is it a drum controller event, according to the track port's instrument? + if(mt->type() == Track::DRUM) { - int ch = mt->outChannel(); - int tck = ev.tick() + p->tick(); - int cntrl = ev.dataA(); - MidiPort* mp = &MusEGlobal::midiPorts[port]; - - // Is it a drum controller event, according to the track port's instrument? - if(mt->type() == Track::DRUM) + MidiController* mc = mp->drumController(cntrl); + if(mc) { - MidiController* mc = mp->drumController(cntrl); - if(mc) - { - int note = cntrl & 0x7f; - cntrl &= ~0xff; - ch = MusEGlobal::drumMap[note].channel; - mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; - cntrl |= MusEGlobal::drumMap[note].anote; - } + int note = cntrl & 0x7f; + cntrl &= ~0xff; + ch = MusEGlobal::drumMap[note].channel; + mp = &MusEGlobal::midiPorts[MusEGlobal::drumMap[note].port]; + cntrl |= MusEGlobal::drumMap[note].anote; } - - mp->deleteController(ch, tck, cntrl, p); } + + mp->deleteController(ch, tck, cntrl, p); } - } - - if(!doClones) - break; - // Get the next clone in the chain ring. - p = p->nextClone(); - // Same as original part? Finished. - if(p == part) - break; - } + } + } + + if(!doClones) + break; + // Get the next clone in the chain ring. + p = p->nextClone(); + // Same as original part? Finished. + if(p == part) + break; } } @@ -649,7 +628,6 @@ } if(MusEGlobal::debugMsg) printf("PartList::index(): not found!\n"); - //return 0; // don't comment this in again return -1; // don't change that value. at least MidiEditor::addNewParts relies on this } @@ -670,6 +648,22 @@ // Part //--------------------------------------------------------- +Part::Part(const Part& p) : PosLen(p) +{ + _sn=p._sn; + _name=p._name; + _selected=p._selected; + _mute=p._mute; + _colorIndex=p._colorIndex; + _hiddenEvents=p._hiddenEvents; + _track=p._track; + _events=p._events; + _prevClone=p._prevClone; + _nextClone=p._nextClone; + + _events->incRef(1); +} + Part::Part(Track* t) { _hiddenEvents = NoEventsHidden; @@ -685,10 +679,6 @@ _events->incARef(1); } -//--------------------------------------------------------- -// Part -//--------------------------------------------------------- - Part::Part(Track* t, EventList* ev) { _hiddenEvents = NoEventsHidden; @@ -874,17 +864,18 @@ unsigned event_endframe = event_startframe + e.lenFrame(); if (event_endframe < new_partlength) continue; - if (event_startframe > new_partlength) { // If event start was after the new length, remove it from part - // Do not do port controller values and clone parts. - operations.push_back(UndoOp(UndoOp::DeleteEvent, e, nPart, false, false)); - continue; - } - if (event_endframe > new_partlength) { // If this event starts before new length and ends after, shrink it - Event newEvent = e.clone(); - newEvent.setLenFrame(new_partlength - event_startframe); - // Do not do port controller values and clone parts. - operations.push_back(UndoOp(UndoOp::ModifyEvent, newEvent, e, nPart, false,false)); - } +// REMOVE Tim. +// if (event_startframe > new_partlength) { // If event start was after the new length, remove it from part +// // Do not do port controller values and clone parts. +// operations.push_back(UndoOp(UndoOp::DeleteEvent, e, nPart, false, false)); +// continue; +// } +// if (event_endframe > new_partlength) { // If this event starts before new length and ends after, shrink it +// Event newEvent = e.clone(); +// newEvent.setLenFrame(new_partlength - event_startframe); +// // Do not do port controller values and clone parts. +// operations.push_back(UndoOp(UndoOp::ModifyEvent, newEvent, e, nPart, false,false)); +// } } nPart->setLenFrame(new_partlength); // Do not do port controller values and clone parts. @@ -903,19 +894,20 @@ iEvent i = el->end(); i--; Event last = i->second; - unsigned last_start = last.frame(); - MusECore::SndFileR file = last.sndFile(); +// REMOVE Tim. unsigned last_start = last.frame(); + MusECore::SndFileR file = last.sndFile(); if (file.isNull()) return; - unsigned clipframes = (file.samples() - last.spos());// / file.channels(); +// unsigned clipframes = (file.samples() - last.spos());// / file.channels(); Event newEvent = last.clone(); - unsigned new_eventlength = new_partlength - last_start; - if (new_eventlength > clipframes) // Shrink event length if new partlength exceeds last clip - new_eventlength = clipframes; - - newEvent.setLenFrame(new_eventlength); +// REMOVE Tim. +// unsigned new_eventlength = new_partlength - last_start; +// if (new_eventlength > clipframes) // Shrink event length if new partlength exceeds last clip +// new_eventlength = clipframes; +// +// newEvent.setLenFrame(new_eventlength); // Do not do port controller values and clone parts. operations.push_back(UndoOp(UndoOp::ModifyEvent, newEvent, last, nPart, false, false)); } @@ -1066,7 +1058,6 @@ startUndo(); // Indicate no undo, and do port controller values but not clone parts. - //MusEGlobal::audio->msgChangePart(part, p1, false); MusEGlobal::audio->msgChangePart(part, p1, false, true, false); MusEGlobal::audio->msgAddPart(p2, false); endUndo(SC_TRACK_MODIFIED | SC_PART_MODIFIED | SC_PART_INSERTED); @@ -1207,33 +1198,41 @@ return new WavePart(*this); } +//--------------------------------------------------------- +// hasHiddenEvents +// Returns combination of HiddenEventsType enum. +//--------------------------------------------------------- -/* -bool Part::hasHiddenNotes() +int MidiPart::hasHiddenEvents() { - unsigned lastNote=0; + unsigned len = lenTick(); - for (iEvent ev=events()->begin(); ev!=events()->end(); ev++) - if (ev->second.endTick() > lastNote) - lastNote=ev->second.endTick(); - - return lastNote > lenTick(); + // TODO: For now, we don't support events before the left border, only events past the right border. + for(iEvent ev=events()->begin(); ev!=events()->end(); ev++) + { + if(ev->second.endTick() > len) + { + _hiddenEvents = RightEventsHidden; // Cache the result for later. + return _hiddenEvents; + } + } + _hiddenEvents = NoEventsHidden; // Cache the result for later. + return _hiddenEvents; } -*/ //--------------------------------------------------------- // hasHiddenEvents // Returns combination of HiddenEventsType enum. //--------------------------------------------------------- -int Part::hasHiddenEvents() +int WavePart::hasHiddenEvents() { - unsigned len = lenTick(); - + unsigned len = lenFrame(); + // TODO: For now, we don't support events before the left border, only events past the right border. for(iEvent ev=events()->begin(); ev!=events()->end(); ev++) { - if(ev->second.endTick() > len) + if(ev->second.endFrame() > len) { _hiddenEvents = RightEventsHidden; // Cache the result for later. return _hiddenEvents; @@ -1243,4 +1242,16 @@ return _hiddenEvents; } +//--------------------------------------------------------- +// ClonePart +//--------------------------------------------------------- + +ClonePart::ClonePart(const Part* p, int i) +{ + cp = p; + id = i; + uuid_generate(uuid); +} + + } // namespace MusECore diff -Nru muse-2.0~rc2/muse/part.h muse-2.0/muse/part.h --- muse-2.0~rc2/muse/part.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/part.h 2012-06-30 19:24:42.000000000 +0200 @@ -61,6 +61,12 @@ public: enum HiddenEventsType { NoEventsHidden = 0, LeftEventsHidden, RightEventsHidden }; + // @@@@@@@@@@@ IMPORTANT @@@@@@@@@@@@ + // @@ when adding member variables @@ + // @@ here, don't forget to update @@ + // @@ the copy-constructor! @@ + // @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ + private: static int snGen; int _sn; @@ -70,17 +76,17 @@ bool _mute; int _colorIndex; - int _hiddenEvents; // Combination of HiddenEventsType. - protected: Track* _track; EventList* _events; Part* _prevClone; Part* _nextClone; - + int _hiddenEvents; // Combination of HiddenEventsType. + public: Part(Track*); Part(Track*, EventList*); + Part(const Part& p); virtual ~Part(); int sn() { return _sn; } void setSn(int n) { _sn = n; } @@ -107,7 +113,7 @@ void setNextClone(Part* p) { _nextClone = p; } // Returns combination of HiddenEventsType enum. - int hasHiddenEvents(); + virtual int hasHiddenEvents() = 0; // If repeated calls to hasHiddenEvents() are desired, then to avoid re-iteration of the event list, // call this after hasHiddenEvents(). int cachedHasHiddenEvents() const { return _hiddenEvents; } @@ -133,7 +139,9 @@ virtual ~MidiPart() {} virtual MidiPart* clone() const; MidiTrack* track() const { return (MidiTrack*)Part::track(); } - + // Returns combination of HiddenEventsType enum. + int hasHiddenEvents(); + virtual void dump(int n = 0) const; }; @@ -154,6 +162,8 @@ virtual ~WavePart() {} virtual WavePart* clone() const; WaveTrack* track() const { return (WaveTrack*)Part::track(); } + // Returns combination of HiddenEventsType enum. + int hasHiddenEvents(); virtual void dump(int n = 0) const; }; diff -Nru muse-2.0~rc2/muse/plugin.cpp muse-2.0/muse/plugin.cpp --- muse-2.0~rc2/muse/plugin.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/plugin.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -78,31 +79,16 @@ // Turn on debugging messages. //#define PLUGIN_DEBUGIN +// Turn on constant stream of debugging messages. +//#define PLUGIN_DEBUGIN_PROCESS + namespace MusEGlobal { MusECore::PluginList plugins; } -/* -static const char* MusEGlobal::preset_file_pattern[] = { - QT_TRANSLATE_NOOP("@default", "Presets (*.pre *.pre.gz *.pre.bz2)"), - QT_TRANSLATE_NOOP("@default", "All Files (*)"), - 0 - }; - -static const char* MusEGlobal::preset_file_save_pattern[] = { - QT_TRANSLATE_NOOP("@default", "Presets (*.pre)"), - QT_TRANSLATE_NOOP("@default", "gzip compressed presets (*.pre.gz)"), - QT_TRANSLATE_NOOP("@default", "bzip2 compressed presets (*.pre.bz2)"), - QT_TRANSLATE_NOOP("@default", "All Files (*)"), - 0 - }; -*/ - namespace MusEGui { int PluginDialog::selectedPlugType = 0; QStringList PluginDialog::sortItems = QStringList(); -///int PluginDialog::sortColumn = 0; -///Qt::SortOrder PluginDialog::sortOrder = Qt::AscendingOrder; QRect PluginDialog::geometrySave = QRect(); QByteArray PluginDialog::listSave = QByteArray(); } @@ -113,7 +99,6 @@ // ladspa2MidiControlValues //--------------------------------------------------------- -//bool ladspa2MidiControlValues(const LADSPA_Descriptor* plugin, int port, int ctlnum, int* min, int* max, int* def) bool ladspa2MidiControlValues(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum, int* min, int* max, int* def) { LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; @@ -122,12 +107,8 @@ float fmin, fmax, fdef; int imin, imax; float frng; - //int idef; - - //ladspaControlRange(plugin, port, &fmin, &fmax); bool hasdef = ladspaDefaultValue(plugin, port, &fdef); - //bool isint = desc & LADSPA_HINT_INTEGER; MidiController::ControllerType t = midiControllerType(ctlnum); #ifdef PLUGIN_DEBUGIN @@ -142,7 +123,7 @@ *min = 0; *max = 1; - *def = (int)lrint(fdef); + *def = (int)lrintf(fdef); return hasdef; } @@ -179,9 +160,8 @@ fmax = 1.0; frng = fmax - fmin; - imin = lrint(fmin); - imax = lrint(fmax); - //irng = imax - imin; + imin = lrintf(fmin); + imax = lrintf(fmax); int ctlmn = 0; int ctlmx = 127; @@ -190,7 +170,6 @@ printf("ladspa2MidiControlValues: port min:%f max:%f \n", fmin, fmax); #endif - //bool isneg = (fmin < 0.0); bool isneg = (imin < 0); int bias = 0; switch(t) @@ -227,7 +206,6 @@ break; case MidiController::Program: ctlmn = 0; - //ctlmx = 0xffffff; ctlmx = 0x3fff; // FIXME: Really should not happen or be allowed. What to do here... break; case MidiController::Pitch: @@ -238,7 +216,6 @@ default: break; } - //int ctlrng = ctlmx - ctlmn; float fctlrng = float(ctlmx - ctlmn); // Is it an integer control? @@ -248,17 +225,7 @@ printf("ladspa2MidiControlValues: has LADSPA_HINT_INTEGER\n"); #endif - // If the upper or lower limit is beyond the controller limits, just scale the whole range to fit. - // We could get fancy by scaling only the negative or positive domain, or each one separately, but no... - //if((imin < ctlmn) || (imax > ctlmx)) - //{ - // float scl = float(irng) / float(fctlrng); - // if((ctlmn - imin) > (ctlmx - imax)) - // scl = float(ctlmn - imin); - // else - // scl = float(ctlmx - imax); - //} - // No, instead just clip the limits. ie fit the range into clipped space. + // just clip the limits instead of scaling the whole range. ie fit the range into clipped space. if(imin < ctlmn) imin = ctlmn; if(imax > ctlmx) @@ -267,14 +234,7 @@ *min = imin; *max = imax; - //int idef = (int)lrint(fdef); - //if(idef < ctlmn) - // idef = ctlmn; - //if(idef > ctlmx) - // idef = ctlmx; - //*def = idef; - - *def = (int)lrint(fdef); + *def = (int)lrintf(fdef); return hasdef; } @@ -283,15 +243,12 @@ *min = ctlmn; *max = ctlmx; - // Orcan: commented out next 2 lines to suppress compiler warning: - //float fbias = (fmin + fmax) / 2.0; - //float normbias = fbias / frng; float normdef = fdef / frng; fdef = normdef * fctlrng; // FIXME: TODO: Incorrect... Fix this somewhat more trivial stuff later.... - *def = (int)lrint(fdef) + bias; + *def = (int)lrintf(fdef) + bias; #ifdef PLUGIN_DEBUGIN printf("ladspa2MidiControlValues: setting default:%d\n", *def); @@ -304,7 +261,6 @@ // midi2LadspaValue //--------------------------------------------------------- -//float midi2LadspaValue(const LADSPA_Descriptor* plugin, int port, int ctlnum, int val) float midi2LadspaValue(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum, int val) { LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; @@ -312,14 +268,8 @@ float fmin, fmax; int imin; - //int imax; float frng; - //int idef; - //ladspaControlRange(plugin, port, &fmin, &fmax); - - //bool hasdef = ladspaDefaultValue(plugin, port, &fdef); - //bool isint = desc & LADSPA_HINT_INTEGER; MidiController::ControllerType t = midiControllerType(ctlnum); #ifdef PLUGIN_DEBUGIN @@ -359,9 +309,7 @@ fmax = 1.0; frng = fmax - fmin; - imin = lrint(fmin); - //imax = lrint(fmax); - //irng = imax - imin; + imin = lrintf(fmin); if(desc & LADSPA_HINT_TOGGLED) { @@ -382,7 +330,6 @@ printf("midi2LadspaValue: port min:%f max:%f \n", fmin, fmax); #endif - //bool isneg = (fmin < 0.0); bool isneg = (imin < 0); int bval = val; int cval = val; @@ -458,11 +405,6 @@ // It's a floating point control, just use wide open maximum range. float normval = float(bval) / fctlrng; - //float fbias = (fmin + fmax) / 2.0; - //float normfbias = fbias / frng; - //float ret = (normdef + normbias) * fctlrng; - //float normdef = fdef / frng; - float ret = normval * frng + fmin; #ifdef PLUGIN_DEBUGIN @@ -510,13 +452,13 @@ return CtrlList::INTERPOLATE; } +// DELETETHIS 20 // Works but not needed. /* //--------------------------------------------------------- // ladspa2MidiController //--------------------------------------------------------- -//MidiController* ladspa2MidiController(const LADSPA_Descriptor* plugin, int port, int ctlnum) MidiController* ladspa2MidiController(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum) { int min, max, def; @@ -535,30 +477,29 @@ // If no default ladspa value found, still sets *def to 1.0, but returns false. //--------------------------------------------------------------------------------- -//float ladspaDefaultValue(const LADSPA_Descriptor* plugin, int k) -//bool ladspaDefaultValue(const LADSPA_Descriptor* plugin, int port, float* val) bool ladspaDefaultValue(const LADSPA_Descriptor* plugin, unsigned long port, float* val) { if(port < plugin->PortCount) { LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; LADSPA_PortRangeHintDescriptor rh = range.HintDescriptor; - // bool isLog = LADSPA_IS_HINT_LOGARITHMIC(rh); - //double val = 1.0; float m = (rh & LADSPA_HINT_SAMPLE_RATE) ? float(MusEGlobal::sampleRate) : 1.0f; + if (LADSPA_IS_HINT_DEFAULT_MINIMUM(rh)) { - *val = range.LowerBound * m; - return true; + *val = range.LowerBound * m; + return true; + } + else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) + { + *val = range.UpperBound*m; + return true; } else if (LADSPA_IS_HINT_DEFAULT_LOW(rh)) { if (LADSPA_IS_HINT_LOGARITHMIC(rh)) { - //*val = exp(fast_log10(range.LowerBound * m) * .75 + - // log(range.UpperBound * m) * .25); - // p4.0.21 And below... - *val = expf(fast_log10(range.LowerBound * m) * .75 + // Why fast_log10? + *val = expf(logf(range.LowerBound * m) * .75 + logf(range.UpperBound * m) * .25); return true; } @@ -572,10 +513,8 @@ { if (LADSPA_IS_HINT_LOGARITHMIC(rh)) { - //*val = exp(log(range.LowerBound * m) * .5 + - // log10(range.UpperBound * m) * .5); *val = expf(logf(range.LowerBound * m) * .5 + - log10f(range.UpperBound * m) * .5); // Why log10? + logf(range.UpperBound * m) * .5); return true; } else @@ -588,8 +527,6 @@ { if (LADSPA_IS_HINT_LOGARITHMIC(rh)) { - //*val = exp(log(range.LowerBound * m) * .25 + - // log(range.UpperBound * m) * .75); *val = expf(logf(range.LowerBound * m) * .25 + logf(range.UpperBound * m) * .75); return true; @@ -600,11 +537,6 @@ return true; } } - else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) - { - *val = range.UpperBound*m; - return true; - } else if (LADSPA_IS_HINT_DEFAULT_0(rh)) { *val = 0.0; @@ -625,10 +557,42 @@ *val = 440.0; return true; } + + // No default found. Make one up... + else if (LADSPA_IS_HINT_BOUNDED_BELOW(rh) && LADSPA_IS_HINT_BOUNDED_ABOVE(rh)) + { + if (LADSPA_IS_HINT_LOGARITHMIC(rh)) + { + *val = expf(logf(range.LowerBound * m) * .5 + + logf(range.UpperBound * m) * .5); + return true; + } + else + { + *val = range.LowerBound*.5*m + range.UpperBound*.5*m; + return true; + } + } + else if (LADSPA_IS_HINT_BOUNDED_BELOW(rh)) + { + *val = range.LowerBound; + return true; + } + else if (LADSPA_IS_HINT_BOUNDED_ABOVE(rh)) + { + // Hm. What to do here... Just try 0.0 or the upper bound if less than zero. + //if(range.UpperBound > 0.0) + // *val = 0.0; + //else + // *val = range.UpperBound * m; + // Instead try this: Adopt an 'attenuator-like' policy, where upper is the default. + *val = range.UpperBound * m; + return true; + } } - // No default found. Set return value to 1.0, but return false. - *val = 1.0; + // No default found. Set return value to 0.0, but return false. + *val = 0.0; return false; } @@ -636,7 +600,6 @@ // ladspaControlRange //--------------------------------------------------------- -//void ladspaControlRange(const LADSPA_Descriptor* plugin, int i, float* min, float* max) void ladspaControlRange(const LADSPA_Descriptor* plugin, unsigned long port, float* min, float* max) { LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; @@ -660,46 +623,14 @@ *max = 1.0; } -/* -//--------------------------------------------------------- -// PluginBase -//--------------------------------------------------------- - -//--------------------------------------------------------- -// range -//--------------------------------------------------------- - -void PluginBase::range(unsigned long i, float* min, float* max) const - { - LADSPA_PortRangeHint range = plugin->PortRangeHints[i]; - LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; - if (desc & LADSPA_HINT_TOGGLED) { - *min = 0.0; - *max = 1.0; - return; - } - float m = 1.0; - if (desc & LADSPA_HINT_SAMPLE_RATE) - m = float(MusEGlobal::sampleRate); - - if (desc & LADSPA_HINT_BOUNDED_BELOW) - *min = range.LowerBound * m; - else - *min = 0.0; - if (desc & LADSPA_HINT_BOUNDED_ABOVE) - *max = range.UpperBound * m; - else - *max = 1.0; - } -*/ - //--------------------------------------------------------- // Plugin //--------------------------------------------------------- -Plugin::Plugin(QFileInfo* f, const LADSPA_Descriptor* d, bool isDssi) +Plugin::Plugin(QFileInfo* f, const LADSPA_Descriptor* d, bool isDssi, bool isDssiSynth) { _isDssi = isDssi; + _isDssiSynth = isDssiSynth; #ifdef DSSI_SUPPORT dssi_descr = NULL; #endif @@ -717,10 +648,6 @@ _copyright = QString(d->Copyright); _portCount = d->PortCount; - //_portDescriptors = 0; - //if(_portCount) - // _portDescriptors = new LADSPA_PortDescriptor[_portCount]; - _inports = 0; _outports = 0; @@ -729,7 +656,6 @@ for(unsigned long k = 0; k < _portCount; ++k) { LADSPA_PortDescriptor pd = d->PortDescriptors[k]; - //_portDescriptors[k] = pd; if(pd & LADSPA_PORT_AUDIO) { if(pd & LADSPA_PORT_INPUT) @@ -780,8 +706,6 @@ Plugin::~Plugin() { - //if(_portDescriptors) - // delete[] _portDescriptors; if(plugin) delete plugin; } @@ -822,18 +746,14 @@ return 0; } - //if(_references == 0) if(_handle == 0) { - //_references = 0; _handle = dlopen(fi.filePath().toLatin1().constData(), RTLD_NOW); - //handle = dlopen(fi.absFilePath().toLatin1().constData(), RTLD_NOW); if(_handle == 0) { fprintf(stderr, "Plugin::incReferences dlopen(%s) failed: %s\n", fi.filePath().toLatin1().constData(), dlerror()); - //fi.absFilePath().toLatin1().constData(), dlerror()); return 0; } @@ -842,22 +762,14 @@ if(dssi) { const DSSI_Descriptor* descr; - //for(int i = 0;; ++i) - for(unsigned long i = 0;; ++i) // p4.0.21 + for(unsigned long i = 0;; ++i) { descr = dssi(i); if(descr == NULL) break; QString label(descr->LADSPA_Plugin->Label); - // Listing effect plugins only while excluding synths: - // Do exactly what dssi-vst.cpp does for listing ladspa plugins. - //if(label == _name && - if(label == _label && - !descr->run_synth && - !descr->run_synth_adding && - !descr->run_multiple_synths && - !descr->run_multiple_synths_adding) + if(label == _label) { _isDssi = true; ladspa = NULL; @@ -865,8 +777,6 @@ plugin = descr->LADSPA_Plugin; break; } - //else - // delete descr; } } else @@ -876,15 +786,13 @@ if(ladspadf) { const LADSPA_Descriptor* descr; - //for(int i = 0;; ++i) - for(unsigned long i = 0;; ++i) // p4.0.21 + for(unsigned long i = 0;; ++i) { descr = ladspadf(i); if(descr == NULL) break; QString label(descr->Label); - //if(label == _name) if(label == _label) { _isDssi = false; @@ -897,26 +805,18 @@ break; } - //else - // delete descr; } } } if(plugin != NULL) { - //_instNo = 0; _name = QString(plugin->Name); _uniqueID = plugin->UniqueID; _maker = QString(plugin->Maker); _copyright = QString(plugin->Copyright); - //if(_portDescriptors) - // delete[] _portDescriptors; - //_portDescriptors = 0; _portCount = plugin->PortCount; - //if(_portCount) - // _portDescriptors = new LADSPA_PortDescriptor[_portCount]; _inports = 0; _outports = 0; @@ -925,7 +825,6 @@ for(unsigned long k = 0; k < _portCount; ++k) { LADSPA_PortDescriptor pd = plugin->PortDescriptors[k]; - //_portDescriptors[k] = pd; if(pd & LADSPA_PORT_AUDIO) { if(pd & LADSPA_PORT_INPUT) @@ -974,10 +873,6 @@ _references = newref; - //QString guiPath(info.dirPath() + "/" + info.baseName()); - //QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); - //_hasGui = guiDir.exists(); - return _references; } @@ -987,89 +882,18 @@ void Plugin::range(unsigned long i, float* min, float* max) const { - /* - LADSPA_PortRangeHint range = plugin->PortRangeHints[i]; - LADSPA_PortRangeHintDescriptor desc = range.HintDescriptor; - if (desc & LADSPA_HINT_TOGGLED) { - *min = 0.0; - *max = 1.0; - return; - } - float m = 1.0; - if (desc & LADSPA_HINT_SAMPLE_RATE) - m = float(MusEGlobal::sampleRate); - - if (desc & LADSPA_HINT_BOUNDED_BELOW) - *min = range.LowerBound * m; - else - *min = 0.0; - if (desc & LADSPA_HINT_BOUNDED_ABOVE) - *max = range.UpperBound * m; - else - *max = 1.0; - */ - ladspaControlRange(plugin, i, min, max); // p4.0.20 + ladspaControlRange(plugin, i, min, max); } //--------------------------------------------------------- // defaultValue //--------------------------------------------------------- -//double Plugin::defaultValue(unsigned long port) const float Plugin::defaultValue(unsigned long port) const { - // p4.0.21 float val; ladspaDefaultValue(plugin, port, &val); return val; - - /* - if(port >= plugin->PortCount) - return 0.0; - - LADSPA_PortRangeHint range = plugin->PortRangeHints[port]; - LADSPA_PortRangeHintDescriptor rh = range.HintDescriptor; - //double val = 1.0; - float val = 1.0; - if (LADSPA_IS_HINT_DEFAULT_MINIMUM(rh)) - val = range.LowerBound; - else if (LADSPA_IS_HINT_DEFAULT_LOW(rh)) - if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) - //val = exp(fast_log10(range.LowerBound) * .75 + - // log(range.UpperBound) * .25); - val = expf(fast_log10(range.LowerBound) * .75 + - logf(range.UpperBound) * .25); - else - val = range.LowerBound*.75 + range.UpperBound*.25; - else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(rh)) - if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) - //val = exp(log(range.LowerBound) * .5 + - // log(range.UpperBound) * .5); - val = expf(logf(range.LowerBound) * .5 + - logf(range.UpperBound) * .5); - else - val = range.LowerBound*.5 + range.UpperBound*.5; - else if (LADSPA_IS_HINT_DEFAULT_HIGH(rh)) - if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) - //val = exp(log(range.LowerBound) * .25 + - // log(range.UpperBound) * .75); - val = expf(logf(range.LowerBound) * .25 + - logf(range.UpperBound) * .75); - else - val = range.LowerBound*.25 + range.UpperBound*.75; - else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) - val = range.UpperBound; - else if (LADSPA_IS_HINT_DEFAULT_0(rh)) - val = 0.0; - else if (LADSPA_IS_HINT_DEFAULT_1(rh)) - val = 1.0; - else if (LADSPA_IS_HINT_DEFAULT_100(rh)) - val = 100.0; - else if (LADSPA_IS_HINT_DEFAULT_440(rh)) - val = 440.0; - - return val; - */ } //--------------------------------------------------------- @@ -1108,40 +932,30 @@ if(dssi) { const DSSI_Descriptor* descr; - //for (int i = 0;; ++i) - for (unsigned long i = 0;; ++i) // p4.0.21 + for (unsigned long i = 0;; ++i) { descr = dssi(i); if (descr == 0) break; - // Listing effect plugins only while excluding synths: - // Do exactly what dssi-vst.cpp does for listing ladspa plugins. - if(!descr->run_synth && - !descr->run_synth_adding && - !descr->run_multiple_synths && - !descr->run_multiple_synths_adding) - { - // Make sure it doesn't already exist. - if(MusEGlobal::plugins.find(fi->completeBaseName(), QString(descr->LADSPA_Plugin->Label)) != 0) - { - //delete descr; - continue; - } - #ifdef PLUGIN_DEBUGIN - fprintf(stderr, "loadPluginLib: dssi effect name:%s inPlaceBroken:%d\n", descr->LADSPA_Plugin->Name, LADSPA_IS_INPLACE_BROKEN(descr->LADSPA_Plugin->Properties)); - #endif - - //LADSPA_Properties properties = descr->LADSPA_Plugin->Properties; - //bool inPlaceBroken = LADSPA_IS_INPLACE_BROKEN(properties); - //MusEGlobal::plugins.add(fi, descr, !inPlaceBroken); - if(MusEGlobal::debugMsg) - fprintf(stderr, "loadPluginLib: adding dssi effect plugin:%s name:%s label:%s\n", fi->filePath().toLatin1().constData(), descr->LADSPA_Plugin->Name, descr->LADSPA_Plugin->Label); - - MusEGlobal::plugins.add(fi, descr->LADSPA_Plugin, true); - } - //else - // delete descr; + // Make sure it doesn't already exist. + if(MusEGlobal::plugins.find(fi->completeBaseName(), QString(descr->LADSPA_Plugin->Label)) != 0) + continue; + + #ifdef PLUGIN_DEBUGIN + fprintf(stderr, "loadPluginLib: dssi effect name:%s inPlaceBroken:%d\n", descr->LADSPA_Plugin->Name, LADSPA_IS_INPLACE_BROKEN(descr->LADSPA_Plugin->Properties)); + #endif + + bool is_synth = descr->run_synth || descr->run_synth_adding + || descr->run_multiple_synths || descr->run_multiple_synths_adding; + if(MusEGlobal::debugMsg) + fprintf(stderr, "loadPluginLib: adding dssi effect plugin:%s name:%s label:%s synth:%d\n", + fi->filePath().toLatin1().constData(), + descr->LADSPA_Plugin->Name, descr->LADSPA_Plugin->Label, + is_synth + ); + + MusEGlobal::plugins.add(fi, descr->LADSPA_Plugin, true, is_synth); } } else @@ -1165,8 +979,7 @@ } const LADSPA_Descriptor* descr; - //for (int i = 0;; ++i) - for (unsigned long i = 0;; ++i) // p4.0.21 + for (unsigned long i = 0;; ++i) { descr = ladspa(i); if (descr == NULL) @@ -1174,17 +987,12 @@ // Make sure it doesn't already exist. if(MusEGlobal::plugins.find(fi->completeBaseName(), QString(descr->Label)) != 0) - { - //delete descr; continue; - } + #ifdef PLUGIN_DEBUGIN fprintf(stderr, "loadPluginLib: ladspa effect name:%s inPlaceBroken:%d\n", descr->Name, LADSPA_IS_INPLACE_BROKEN(descr->Properties)); #endif - //LADSPA_Properties properties = descr->Properties; - //bool inPlaceBroken = LADSPA_IS_INPLACE_BROKEN(properties); - //MusEGlobal::plugins.add(fi, ladspa, descr, !inPlaceBroken); if(MusEGlobal::debugMsg) fprintf(stderr, "loadPluginLib: adding ladspa plugin:%s name:%s label:%s\n", fi->filePath().toLatin1().constData(), descr->Name, descr->Label); MusEGlobal::plugins.add(fi, descr); @@ -1289,7 +1097,7 @@ if ((file == i->lib()) && (name == i->label())) return &*i; } - //printf("Plugin <%s> not found\n", name.ascii()); + return 0; } @@ -1335,6 +1143,76 @@ } //--------------------------------------------------------- +// addScheduledControlEvent +// track_ctrl_id is the fully qualified track audio controller number +// Returns true if event cannot be delivered +//--------------------------------------------------------- + +bool Pipeline::addScheduledControlEvent(int track_ctrl_id, float val, unsigned frame) +{ + // If a track controller, or the special dssi synth controller block, just return. + if(track_ctrl_id < AC_PLUGIN_CTL_BASE || track_ctrl_id >= (int)genACnum(MAX_PLUGINS, 0)) + return true; + int rack_idx = (track_ctrl_id - AC_PLUGIN_CTL_BASE) >> AC_PLUGIN_CTL_BASE_POW; + for (int i = 0; i < PipelineDepth; ++i) + { + PluginI* p = (*this)[i]; + if(p && p->id() == rack_idx) + return p->addScheduledControlEvent(track_ctrl_id & AC_PLUGIN_CTL_ID_MASK, val, frame); + } + return true; +} + +//--------------------------------------------------------- +// controllersEnabled +// Returns whether automation control stream is enabled or disabled. +// Used during automation recording to inhibit gui controls +//--------------------------------------------------------- + +void Pipeline::controllersEnabled(int track_ctrl_id, bool* en1, bool* en2) +{ + // If a track controller, or the special dssi synth controller block, just return. + if(track_ctrl_id < AC_PLUGIN_CTL_BASE || track_ctrl_id >= (int)genACnum(MAX_PLUGINS, 0)) + return; + int rack_idx = (track_ctrl_id - AC_PLUGIN_CTL_BASE) >> AC_PLUGIN_CTL_BASE_POW; + for (int i = 0; i < PipelineDepth; ++i) + { + PluginI* p = (*this)[i]; + if(p && p->id() == rack_idx) + { + if(en1) + *en1 = p->controllerEnabled(track_ctrl_id & AC_PLUGIN_CTL_ID_MASK); + if(en2) + *en2 = p->controllerEnabled2(track_ctrl_id & AC_PLUGIN_CTL_ID_MASK); + return; + } + } +} + +//--------------------------------------------------------- +// enableController +// Enable or disable gui automation control stream. +// Used during automation recording to inhibit gui controls +//--------------------------------------------------------- + +void Pipeline::enableController(int track_ctrl_id, bool en) +{ + // If a track controller, or the special dssi synth controller block, just return. + if(track_ctrl_id < AC_PLUGIN_CTL_BASE || track_ctrl_id >= (int)genACnum(MAX_PLUGINS, 0)) + return; + int rack_idx = (track_ctrl_id - AC_PLUGIN_CTL_BASE) >> AC_PLUGIN_CTL_BASE_POW; + for (int i = 0; i < PipelineDepth; ++i) + { + PluginI* p = (*this)[i]; + if(p && p->id() == rack_idx) + { + p->enableController(track_ctrl_id & AC_PLUGIN_CTL_ID_MASK, en); + return; + } + } +} + +//--------------------------------------------------------- // setChannels //--------------------------------------------------------- @@ -1492,21 +1370,6 @@ return false; } -/* -//--------------------------------------------------------- -// dssi_ui_filename -//--------------------------------------------------------- - -QString dssi_ui_filename(int idx) const -{ - PluginI* p = (*this)[idx]; - if(p) - return p->dssi_ui_filename(); - - return QString(); -} -*/ - //--------------------------------------------------------- // has_dssi_ui //--------------------------------------------------------- @@ -1597,15 +1460,6 @@ void Pipeline::apply(unsigned long ports, unsigned long nframes, float** buffer1) { - // prepare a second set of buffers in case a plugin is not - // capable of inPlace processing - //float* buffer2[ports]; - //float data[nframes * ports]; - //for (int i = 0; i < ports; ++i) - // buffer2[i] = data + i * nframes; - - //fprintf(stderr, "Pipeline::apply data: nframes:%lu %e %e %e %e\n", nframes, buffer1[0][0], buffer1[0][1], buffer1[0][2], buffer1[0][3]); - bool swap = false; for (iPluginI ip = begin(); ip != end(); ++ip) { @@ -1613,10 +1467,8 @@ if(p) { - //if (p && p->on()) { if (p->on()) { - //fprintf(stderr, "Pipeline::apply PluginI:%p on:%d\n", p, p->on()); if (p->inPlaceCapable()) { if (swap) @@ -1642,8 +1494,6 @@ if (ports != 0 && swap) { for (unsigned long i = 0; i < ports; ++i) - //memcpy(buffer1[i], buffer2[i], sizeof(float) * nframes); - //memcpy(buffer1[i], buffer[i], sizeof(float) * nframes); AL::dsp->cpy(buffer1[i], buffer[i], nframes); } } @@ -1663,6 +1513,39 @@ delete _gui; } +//--------------------------------------------------------- +// addScheduledControlEvent +// i is the specific index of the control input port +// Returns true if event cannot be delivered +//--------------------------------------------------------- + +bool PluginIBase::addScheduledControlEvent(unsigned long i, float val, unsigned frame) +{ + if(i >= parameters()) + { + printf("PluginIBase::addScheduledControlEvent param number %lu out of range of ports:%lu\n", i, parameters()); + return true; + } + ControlEvent ce; + ce.unique = false; + ce.idx = i; + ce.value = val; + // Time-stamp the event. This does a possibly slightly slow call to gettimeofday via timestamp(). + // timestamp() is more or less an estimate of the current frame. (This is exactly how ALSA events + // are treated when they arrive in our ALSA driver.) + //ce.frame = MusEGlobal::audio->timestamp(); + // p4.0.23 timestamp() is circular, which is making it impossible to deal with 'modulo' events which + // slip in 'under the wire' before processing the ring buffers. So try this linear timestamp instead: + ce.frame = frame; + + if(_controlFifo.put(ce)) + { + fprintf(stderr, "PluginIBase::addScheduledControlEvent: fifo overflow: in control number:%lu\n", i); + return true; + } + return false; +} + QString PluginIBase::dssi_ui_filename() const { QString libr(lib()); @@ -1671,8 +1554,6 @@ QString guiPath(dirPath() + "/" + libr); - //fprintf(stderr, "PluginIBase::dssi_ui_filename guiPath:%s\n", guiPath.toLatin1().constData()); - QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); if(!guiDir.exists()) return QString(); @@ -1713,10 +1594,6 @@ } } - //fprintf(stderr, "PluginIBase::dssi_ui_filename plug_qt_ui:%s plug_any_ui:%s lib_qt_ui:%s lib_any_ui:%s\n", - // plug_qt_ui.toLatin1().constData(), plug_any_ui.toLatin1().constData(), - // lib_qt_ui.toLatin1().constData(), lib_any_ui.toLatin1().constData()); - // Prefer qt plugin ui if(!plug_qt_ui.isEmpty()) return plug_qt_ui; @@ -1767,12 +1644,14 @@ PluginI::~PluginI() { + #ifdef OSC_SUPPORT + _oscif.oscSetPluginI(NULL); + #endif + if (_plugin) { deactivate(); _plugin->incReferences(-1); } - //if (_gui) - // delete _gui; if (controlsOut) delete[] controlsOut; if (controls) @@ -1799,15 +1678,8 @@ if(!_track) return; - //for(int i = 0; i < controlPorts; ++i) for(unsigned long i = 0; i < controlPorts; ++i) - //MusEGlobal::audio->msgSetPluginCtrlVal(this, genACnum(_id, i), controls[i].val); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(_track, genACnum(_id, i), controls[i].val); - // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? _track->setPluginCtrlVal(genACnum(_id, i), controls[i].val); // TODO A faster bulk message - - MusEGlobal::song->controllerChange(_track); } //--------------------------------------------------------- @@ -1816,30 +1688,10 @@ void PluginI::setChannels(int c) { - // p3.3.41 Removed - //if (channel == c) - // return; - - // p3.3.41 channel = c; - //int ni = c / _plugin->outports(); - //if (ni == 0) - // ni = 1; - // p3.3.41 Some plugins have zero out ports, causing exception with the above line. - // Also, pick the least number of ins or outs, and base the number of instances on that. unsigned long ins = _plugin->inports(); unsigned long outs = _plugin->outports(); - /* - unsigned long minports = ~0ul; - if(outs && outs < minports) - minports = outs; - if(ins && ins < minports) - minports = ins; - if(minports == ~0ul) - minports = 1; - int ni = c / minports; - */ int ni = 1; if(outs) ni = c / outs; @@ -1853,9 +1705,6 @@ if (ni == instances) return; - // p3.3.41 Moved above. - //channel = c; - // remove old instances: deactivate(); delete[] handle; @@ -1869,9 +1718,7 @@ } } - //int curPort = 0; - //int curOutPort = 0; - unsigned long curPort = 0; // p4.0.21 + unsigned long curPort = 0; unsigned long curOutPort = 0; unsigned long ports = _plugin->ports(); for (unsigned long k = 0; k < ports; ++k) @@ -1906,43 +1753,13 @@ void PluginI::setParam(unsigned long i, float val) { - //controls[i].tmpVal = val; - - // p4.0.21 - if(i >= _plugin->_controlInPorts) - //if(i >= controlPorts) - { - printf("PluginI::setParameter param number %lu out of range of ports:%lu\n", i, _plugin->_controlInPorts); - return; - } - ControlEvent ce; - ce.unique = false; - ce.idx = i; - ce.value = val; - // Time-stamp the event. This does a possibly slightly slow call to gettimeofday via timestamp(). - // timestamp() is more or less an estimate of the current frame. (This is exactly how ALSA events - // are treated when they arrive in our ALSA driver.) - //ce.frame = MusEGlobal::audio->timestamp(); - // p4.0.23 timestamp() is circular, which is making it impossible to deal with 'modulo' events which - // slip in 'under the wire' before processing the ring buffers. So try this linear timestamp instead: - ce.frame = MusEGlobal::audio->curFrame(); - - if(_controlFifo.put(ce)) - { - fprintf(stderr, "PluginI::setParameter: fifo overflow: in control number:%lu\n", i); - } - - // Notify that changes are to be sent upon heartbeat. - // TODO: No, at least not for now. So far, setParameter is only called during loading of stored params, - // and we don't want this interfering with oscUpdate which also sends the values. - //synti->_guiUpdateControls[n] = true; + addScheduledControlEvent(i, val, MusEGlobal::audio->curFrame()); } //--------------------------------------------------------- // defaultValue //--------------------------------------------------------- -//double PluginI::defaultValue(unsigned int param) const float PluginI::defaultValue(unsigned long param) const { if(param >= controlPorts) @@ -1960,10 +1777,6 @@ return NULL; } - //QString guiPath(info.dirPath() + "/" + info.baseName()); - //QDir guiDir(guiPath, "*", QDir::Unsorted, QDir::Files); - //_hasGui = guiDir.exists(); - return h; } @@ -1992,23 +1805,8 @@ _name = _plugin->name() + inst; _label = _plugin->label() + inst; - //instances = channel/plug->outports(); - // p3.3.41 Some plugins have zero out ports, causing exception with the above line. - // Also, pick the least number of ins or outs, and base the number of instances on that. unsigned long ins = plug->inports(); unsigned long outs = plug->outports(); - /* - unsigned long minports = ~0ul; - if(outs && outs < minports) - minports = outs; - if(ins && ins < minports) - minports = ins; - if(minports == ~0ul) - minports = 1; - instances = channel / minports; - if(instances < 1) - instances = 1; - */ if(outs) { instances = channel / outs; @@ -2033,7 +1831,6 @@ #endif handle[i] = _plugin->instantiate(); - //if (handle[i] == 0) if(handle[i] == NULL) return true; } @@ -2059,8 +1856,6 @@ controls = new Port[controlPorts]; controlsOut = new Port[controlOutPorts]; - //int i = 0; - //int ii = 0; unsigned long curPort = 0; unsigned long curOutPort = 0; for(unsigned long k = 0; k < ports; ++k) @@ -2070,8 +1865,7 @@ { if(pd & LADSPA_PORT_INPUT) { - //double val = _plugin->defaultValue(k); - float val = _plugin->defaultValue(k); // p4.0.21 + float val = _plugin->defaultValue(k); controls[curPort].val = val; controls[curPort].tmpVal = val; controls[curPort].enCtrl = true; @@ -2081,8 +1875,6 @@ else if(pd & LADSPA_PORT_OUTPUT) { - //double val = _plugin->defaultValue(k); - //float val = _plugin->defaultValue(k); controlsOut[curOutPort].val = 0.0; controlsOut[curOutPort].tmpVal = 0.0; controlsOut[curOutPort].enCtrl = false; @@ -2091,8 +1883,6 @@ } } } - //unsigned long curPort = 0; - //unsigned long curOutPort = 0; curPort = 0; curOutPort = 0; for(unsigned long k = 0; k < ports; ++k) @@ -2125,16 +1915,13 @@ // connect //--------------------------------------------------------- -//void PluginI::connect(int ports, float** src, float** dst) void PluginI::connect(unsigned long ports, unsigned long offset, float** src, float** dst) { - //int port = 0; - unsigned long port = 0; // p4.0.21 + unsigned long port = 0; for (int i = 0; i < instances; ++i) { for (unsigned long k = 0; k < _plugin->ports(); ++k) { if (isAudioIn(k)) { - //_plugin->connectPort(handle[i], k, src[port]); - _plugin->connectPort(handle[i], k, src[port] + offset); // p4.0.21 + _plugin->connectPort(handle[i], k, src[port] + offset); port = (port + 1) % ports; } } @@ -2143,13 +1930,8 @@ for (int i = 0; i < instances; ++i) { for (unsigned long k = 0; k < _plugin->ports(); ++k) { if (isAudioOut(k)) { - // _plugin->connectPort(handle[i], k, dst[port]); - _plugin->connectPort(handle[i], k, dst[port] + offset); // p4.0.21 + _plugin->connectPort(handle[i], k, dst[port] + offset); port = (port + 1) % ports; // overwrite output? -// ++port; -// if (port >= ports) { -// return; -// } } } } @@ -2176,18 +1958,12 @@ for (int i = 0; i < instances; ++i) _plugin->activate(handle[i]); if (initControlValues) { - //printf("PluginI::activate init:%d\n", initControlValues); - //for (int i = 0; i < controlPorts; ++i) { for (unsigned long i = 0; i < controlPorts; ++i) { controls[i].val = controls[i].tmpVal; } } else { - // // get initial control values from plugin - // - //printf("PluginI::activate init:%d\n", initControlValues); - //for (int i = 0; i < controlPorts; ++i) { for (unsigned long i = 0; i < controlPorts; ++i) { controls[i].tmpVal = controls[i].val; } @@ -2199,14 +1975,11 @@ // set plugin instance controller value by name //--------------------------------------------------------- -//bool PluginI::setControl(const QString& s, double val) bool PluginI::setControl(const QString& s, float val) { - //for (int i = 0; i < controlPorts; ++i) { for (unsigned long i = 0; i < controlPorts; ++i) { if (_plugin->portName(controls[i].idx) == s) { - //controls[i].val = controls[i].tmpVal = val; - setParam(i, val); // p4.0.21 + setParam(i, val); return false; } } @@ -2222,17 +1995,11 @@ void PluginI::writeConfiguration(int level, Xml& xml) { xml.tag(level++, "plugin file=\"%s\" label=\"%s\" channel=\"%d\"", - //_plugin->lib().toLatin1().constData(), _plugin->label().toLatin1().constData(), instances * _plugin->inports()); - // p3.3.41 - //_plugin->lib().toLatin1().constData(), _plugin->label().toLatin1().constData(), channel); Xml::xmlString(_plugin->lib()).toLatin1().constData(), Xml::xmlString(_plugin->label()).toLatin1().constData(), channel); - //for (int i = 0; i < controlPorts; ++i) { - //int idx = controls[i].idx; - for (unsigned long i = 0; i < controlPorts; ++i) { // p4.0.21 - unsigned long idx = controls[i].idx; // + for (unsigned long i = 0; i < controlPorts; ++i) { + unsigned long idx = controls[i].idx; QString s("control name=\"%1\" val=\"%2\" /"); - //xml.tag(level, s.arg(_plugin->portName(idx)).arg(controls[i].tmpVal).toLatin1().constData()); xml.tag(level, s.arg(Xml::xmlString(_plugin->portName(idx)).toLatin1().constData()).arg(controls[i].tmpVal).toLatin1().constData()); } if (_on == false) @@ -2241,11 +2008,9 @@ xml.intTag(level, "gui", 1); xml.geometryTag(level, "geometry", _gui); } - if (nativeGuiVisible()) { + if (nativeGuiVisible()) xml.intTag(level, "nativegui", 1); - // TODO: - //xml.geometryTag(level, "nativegeometry", ?); - } + xml.tag(level--, "/plugin"); } @@ -2258,8 +2023,7 @@ QString file; QString label; QString name("mops"); - //double val = 0.0; - float val = 0.0; // p4.0.21 + float val = 0.0; for (;;) { Xml::Token token = xml.parse(); @@ -2276,36 +2040,30 @@ if (tag == "name") name = xml.s2(); else if (tag == "val") - //val = xml.s2().toDouble(); - val = xml.s2().toFloat(); // p4.0.21 + val = xml.s2().toFloat(); break; case Xml::TagEnd: if (tag == "control") { - //if (setControl(name, val)) - // return false; - // p4.0.23 Special for loader - bypass the ring buffer and store directly, - // so that upon the 'gui = 1' tag (show the gui), the gui has immediate - // access to the values. if(_plugin) - { - bool found = false; - for(unsigned long i = 0; i < controlPorts; ++i) - { - if(_plugin->portName(controls[i].idx) == name) - { - controls[i].val = controls[i].tmpVal = val; - found = true; - } - } - if(!found) - { - printf("PluginI:loadControl(%s, %f) controller not found\n", - name.toLatin1().constData(), val); - return false; - } - initControlValues = true; - } + { + bool found = false; + for(unsigned long i = 0; i < controlPorts; ++i) + { + if(_plugin->portName(controls[i].idx) == name) + { + controls[i].val = controls[i].tmpVal = val; + found = true; + } + } + if(!found) + { + printf("PluginI:loadControl(%s, %f) controller not found\n", + name.toLatin1().constData(), val); + return false; + } + initControlValues = true; } + } return true; default: break; @@ -2324,8 +2082,6 @@ QString file; QString label; if (!readPreset) - //instances = 1; - // p3.3.41 channel = 1; for (;;) { @@ -2339,24 +2095,16 @@ if (!readPreset && _plugin == 0) { _plugin = MusEGlobal::plugins.find(file, label); - //if (_plugin && initPluginInstance(_plugin, instances)) { - // p3.3.41 if (_plugin) - { - if(initPluginInstance(_plugin, channel)) { + { + if(initPluginInstance(_plugin, channel)) { _plugin = 0; xml.parse1(); printf("Error initializing plugin instance (%s, %s)\n", file.toLatin1().constData(), label.toLatin1().constData()); - //break; // Don't break - let it read any control tags. + //break; // Don't break - let it read any control tags. } - } - else - { - //printf("Warning: Plugin not found (%s, %s)\n", - // file.toLatin1().constData(), label.toLatin1().constData()); - //break; // Don't break - let it read any control tags. - } + } } if (tag == "control") loadControl(xml); @@ -2368,7 +2116,7 @@ else if (tag == "gui") { bool flag = xml.parseInt(); if (_plugin) - showGui(flag); + showGui(flag); } else if (tag == "nativegui") { // We can't tell OSC to show the native plugin gui @@ -2407,8 +2155,6 @@ } else if (tag == "channel") { if (!readPreset) - //instances = xml.s2().toInt(); - // p3.3.41 channel = xml.s2().toInt(); } break; @@ -2417,20 +2163,18 @@ if (!readPreset && _plugin == 0) { _plugin = MusEGlobal::plugins.find(file, label); if (_plugin == 0) - { + { printf("Warning: Plugin not found (%s, %s)\n", file.toLatin1().constData(), label.toLatin1().constData()); return true; - } + } - //if (initPluginInstance(_plugin, instances)) - // p3.3.41 if (initPluginInstance(_plugin, channel)) - { + { printf("Error initializing plugin instance (%s, %s)\n", file.toLatin1().constData(), label.toLatin1().constData()); return true; - } + } } if (_gui) _gui->updateValues(); @@ -2531,7 +2275,6 @@ // makeGui //--------------------------------------------------------- -//void PluginI::makeGui() void PluginIBase::makeGui() { _gui = new MusEGui::PluginGui(this); @@ -2540,7 +2283,6 @@ //--------------------------------------------------------- // deleteGui //--------------------------------------------------------- -//void PluginI::deleteGui() void PluginIBase::deleteGui() { if(_gui) @@ -2556,7 +2298,6 @@ void PluginI::enableAllControllers(bool v) { - //for(int i = 0; i < controlPorts; ++i) for(unsigned long i = 0; i < controlPorts; ++i) controls[i].enCtrl = v; } @@ -2567,7 +2308,6 @@ void PluginI::enable2AllControllers(bool v) { - //for(int i = 0; i < controlPorts; ++i) for(unsigned long i = 0; i < controlPorts; ++i) controls[i].en2Ctrl = v; } @@ -2578,7 +2318,9 @@ QString PluginI::titlePrefix() const { - return _track->name() + QString(": "); + if (_track) + return _track->name() + QString(": "); + else return ":"; } //--------------------------------------------------------- @@ -2586,128 +2328,19 @@ // If ports is 0, just process controllers only, not audio (do not 'run'). //--------------------------------------------------------- -/* -//void PluginI::apply(int n) -void PluginI::apply(unsigned long n) -{ - // Process control value changes. - //if(MusEGlobal::automation && _track && _track->automationType() != AUTO_OFF && _id != -1) - //{ - // for(int i = 0; i < controlPorts; ++i) - // { - // if( controls[i].enCtrl && controls[i].en2Ctrl ) - // controls[i].tmpVal = _track->pluginCtrlVal(genACnum(_id, i)); - // } - //} - - unsigned long ctls = controlPorts; - for(unsigned long k = 0; k < ctls; ++k) - { - // First, update the temporary value if needed... - - #ifdef OSC_SUPPORT - // Process OSC gui input control fifo events. - // It is probably more important that these are processed so that they take precedence over all other - // events because OSC + DSSI/DSSI-VST are fussy about receiving feedback via these control ports, from GUI changes. - - OscControlFifo* cfifo = _oscif.oscFifo(k); - //if(!cfifo) - // continue; - - // If there are 'events' in the fifo, get exactly one 'event' per control per process cycle... - //if(!cfifo->isEmpty()) - if(cfifo && !cfifo->isEmpty()) - { - OscControlValue v = cfifo->get(); - - #ifdef PLUGIN_DEBUGIN - fprintf(stderr, "PluginI::apply OscControlFifo event input control number:%lu value:%f\n", k, v.value); - #endif - - // Set the ladspa control port value. - controls[k].tmpVal = v.value; - - // Need to update the automation value, otherwise it overwrites later with the last automation value. - if(_track && _id != -1) - { - // Since we are now in the audio thread context, there's no need to send a message, - // just modify directly. - //MusEGlobal::audio->msgSetPluginCtrlVal(this, genACnum(_id, k), controls[k].val); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(_track, genACnum(_id, k), controls[k].val); - _track->setPluginCtrlVal(genACnum(_id, k), v.value); - - // Record automation. - // NO! Take care of this immediately in the OSC control handler, because we don't want - // the silly delay associated with processing the fifo one-at-a-time here. - - //AutomationType at = _track->automationType(); - // TODO: Taken from our native gui control handlers. - // This may need modification or may cause problems - - // we don't have the luxury of access to the dssi gui controls ! - //if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) - // enableController(k, false); - //_track->recordAutomation(id, v.value); - } - } - else - #endif // OSC_SUPPORT - { - // Process automation control value. - if(MusEGlobal::automation && _track && _track->automationType() != AUTO_OFF && _id != -1) - { - if(controls[k].enCtrl && controls[k].en2Ctrl ) - controls[k].tmpVal = _track->pluginCtrlVal(genACnum(_id, k)); - } - } - - // Now update the actual value from the temporary value... - controls[k].val = controls[k].tmpVal; - } - - //for (int i = 0; i < controlPorts; ++i) - // controls[i].val = controls[i].tmpVal; - - for (int i = 0; i < instances; ++i) - { - // p3.3.41 - //fprintf(stderr, "PluginI::apply handle %d\n", i); - _plugin->apply(handle[i], n); - } - } -*/ - -#if 1 + void PluginI::apply(unsigned long n, unsigned long ports, float** bufIn, float** bufOut) { - // Process control value changes. - //if(MusEGlobal::automation && _track && _track->automationType() != AUTO_OFF && _id != -1) - //{ - // for(int i = 0; i < controlPorts; ++i) - // { - // if( controls[i].enCtrl && controls[i].en2Ctrl ) - // controls[i].tmpVal = _track->pluginCtrlVal(genACnum(_id, i)); - // } - //} - - // Grab the control ring buffer size now. - //const int cbsz = _controlFifo.getSize(); - - //unsigned endPos = pos + n; - //unsigned long frameOffset = MusEGlobal::audio->getFrameOffset(); unsigned long syncFrame = MusEGlobal::audio->curSyncFrame(); - unsigned long sample = 0; - int loopcount = 0; // REMOVE Tim. // Must make this detectable for dssi vst effects. - //const bool usefixedrate = true; - const bool usefixedrate = _plugin->_isDssiVst; // Try this. + const bool usefixedrate = _plugin->_isDssiVst; // Try this. (was: = true; ) + // TODO Make this number a global setting. // Note for dssi-vst this MUST equal audio period. It doesn't like broken-up runs (it stutters), // even with fixed sizes. Could be a Wine + Jack thing, wanting a full Jack buffer's length. - //unsigned fixedsize = 2048; - unsigned long fixedsize = n; + unsigned long fixedsize = n; // was: 2048 // For now, the fixed size is clamped to the audio buffer size. // TODO: We could later add slower processing over several cycles - @@ -2719,125 +2352,208 @@ if(min_per > n) min_per = n; - // Process automation control values now. - // TODO: This needs to be respect frame resolution. Put this inside the sample loop below. - if(MusEGlobal::automation && _track && _track->automationType() != AUTO_OFF && _id != -1) + // CtrlListList* cll = NULL; // WIP + AutomationType at = AUTO_OFF; + if(_track) { - for(unsigned long k = 0; k < controlPorts; ++k) - { - if(controls[k].enCtrl && controls[k].en2Ctrl ) - controls[k].tmpVal = _track->pluginCtrlVal(genACnum(_id, k)); - } + at = _track->automationType(); + //cll = _track->controller(); // WIP } - + bool no_auto = !MusEGlobal::automation || at == AUTO_OFF; + while(sample < n) { - //unsigned long nsamp = n; - //unsigned long nsamp = n - sample; + // nsamp is the number of samples the plugin->process() call will be supposed to do unsigned long nsamp = usefixedrate ? fixedsize : n - sample; + + // + // Process automation control values, while also determining the maximum acceptable + // size of this run. Further processing, from FIFOs for example, can lower the size + // from there, but this section determines where the next highest maximum frame + // absolutely needs to be for smooth playback of the controller value stream... + // + if(_track && _id != -1 && ports != 0) // Don't bother if not 'running'. + { + unsigned long frame = MusEGlobal::audio->pos().frame() + sample; + int nextFrame; + //double val; // WIP + for(unsigned long k = 0; k < controlPorts; ++k) + { + + +#if 0 // WIP - Work in progress. Tim. + + ciCtrlList icl = cll->find(genACnum(_id, k)); + if(icl == cll->end()) + continue; + CtrlList* cl = icl->second; + if(no_auto || !controls[k].enCtrl || !controls[k].en2Ctrl || cl->empty()) + { + nextFrame = -1; + val = cl->curVal(); + } + else + { + ciCtrl i = cl->upper_bound(frame); // get the index after current frame + if (i == cl->end()) { // if we are past all items just return the last value + --i; + nextFrame = -1; + val = i->second.val; + } + else if(cl->mode() == CtrlList::DISCRETE) + { + if(i == cl->begin()) + { + nextFrame = i->second.frame; + val = i->second.val; + } + else + { + nextFrame = i->second.frame; + --i; + val = i->second.val; + } + } + else { // INTERPOLATE + if (i == cl->begin()) { + nextFrame = i->second.frame; + val = i->second.val; + } + else { + int frame2 = i->second.frame; + double val2 = i->second.val; + --i; + int frame1 = i->second.frame; + double val1 = i->second.val; + + + if(val2 != val1) + nextFrame = 0; // Zero signifies the next frame should be determined by caller. + else + nextFrame = frame2; + + if (cl->valueType() == VAL_LOG) { + val1 = 20.0*fast_log10(val1); + if (val1 < MusEGlobal::config.minSlider) + val1=MusEGlobal::config.minSlider; + val2 = 20.0*fast_log10(val2); + if (val2 < MusEGlobal::config.minSlider) + val2=MusEGlobal::config.minSlider; + } + + val2 -= val1; + val1 += (double(frame - frame1) * val2)/double(frame2 - frame1); + + if (cl->valueType() == VAL_LOG) { + val1 = exp10(val1/20.0); + } + + val = val1; + } + } + } + + controls[k].tmpVal = val; + + +#else + controls[k].tmpVal = _track->controller()->value(genACnum(_id, k), frame, + no_auto || !controls[k].enCtrl || !controls[k].en2Ctrl, + &nextFrame); +#endif + + +#ifdef PLUGIN_DEBUGIN_PROCESS + printf("PluginI::apply k:%lu sample:%lu frame:%lu nextFrame:%d nsamp:%lu \n", k, sample, frame, nextFrame, nsamp); +#endif + if(MusEGlobal::audio->isPlaying() && !usefixedrate && nextFrame != -1) + { + // Returned value of nextFrame can be zero meaning caller replaces with some (constant) value. + unsigned long samps = (unsigned long)nextFrame; + if(samps > frame + min_per) + { + unsigned long diff = samps - frame; + unsigned long mask = min_per-1; // min_per must be power of 2 + samps = diff & ~mask; + if((diff & mask) != 0) + samps += min_per; + } + else + samps = min_per; + + if(samps < nsamp) + nsamp = samps; + } + } + +#ifdef PLUGIN_DEBUGIN_PROCESS + printf("PluginI::apply sample:%lu nsamp:%lu\n", sample, nsamp); +#endif + } + + // + // Process all control ring buffer items valid for this time period... + // bool found = false; unsigned long frame = 0; unsigned long index = 0; unsigned long evframe; - // Get all control ring buffer items valid for this time period... - //for(int m = 0; m < cbsz; ++m) // Doesn't like this. Why? while(!_controlFifo.isEmpty()) { - //ControlValue v = _controlFifo.get(); ControlEvent v = _controlFifo.peek(); // The events happened in the last period or even before that. Shift into this period with + n. This will sync with audio. // If the events happened even before current frame - n, make sure they are counted immediately as zero-frame. - //evframe = (pos + frameOffset > v.frame + n) ? 0 : v.frame - pos - frameOffset + n; evframe = (syncFrame > v.frame + n) ? 0 : v.frame - syncFrame + n; // Process only items in this time period. Make sure to process all // subsequent items which have the same frame. - //printf("PluginI::apply control idx:%lu frame:%lu val:%f unique:%d evframe:%lu\n", - // v.idx, v.frame, v.value, v.unique, evframe); // REMOVE Tim. + // Protection. Observed this condition. Why? Supposed to be linear timestamps. if(found && evframe < frame) { printf("PluginI::apply *** Error: evframe:%lu < frame:%lu idx:%lu val:%f unique:%d\n", evframe, v.frame, v.idx, v.value, v.unique); - // Just make it equal to the current frame so it gets processed right away. - evframe = frame; - } - //if(v.frame >= (endPos + frameOffset) || (found && v.frame != frame)) - //if(v.frame < sample || v.frame >= (sample + nsamp) || (found && v.frame != frame)) - //if(v.frame < sample || v.frame >= (endPos + frameOffset) || (found && v.frame != frame)) - //if(v.frame < sample || v.frame >= (endPos + frameOffset) - //if(v.frame < sample || v.frame >= frameOffset - if(evframe >= n - //|| (found && v.frame != frame) - //|| (!usefixedrate && found && !v.unique && v.frame != frame) - //|| (found && !v.unique && evframe != frame) - // Not enough requested samples to satisfy minimum setting? Keep going. - || (found && !v.unique && (evframe - sample >= min_per)) - // Protection. Observed this condition (dummy audio so far). Why? Supposed to be linear timestamps. - //|| (found && evframe < frame) - // dssi-vst needs them serialized and accounted for, no matter what. This works with fixed rate - // because nsamp is constant. But with packets, we need to guarantee at least one-frame spacing. - // Although we likely won't be using packets with dssi-vst, so it's OK for now. - //|| (found && v.idx == index)) - //|| (usefixedrate && found && v.idx == index)) // Try this. - || (usefixedrate && found && v.unique && v.idx == index)) // + + // No choice but to ignore it. + _controlFifo.remove(); // Done with the ring buffer's item. Remove it. + continue; + } + + // process control events up to the end of our processing cycle. + // but stop after a control event was found (then process(), + // then loop here again), but ensure that process() must process + // at least min_per frames. + if(evframe >= n // Next events are for a later period. + || (!usefixedrate && !found && !v.unique && (evframe - sample >= nsamp)) // Next events are for a later run in this period. (Autom took prio.) + || (found && !v.unique && (evframe - sample >= min_per)) // Eat up events within minimum slice - they're too close. + || (usefixedrate && found && v.unique && v.idx == index)) // Special for dssi-vst: Fixed rate and must reply to all. break; _controlFifo.remove(); // Done with the ring buffer's item. Remove it. - //if(v.idx >= controlPorts) // Sanity check. - if(v.idx >= _plugin->_controlInPorts) + + if(v.idx >= _plugin->_controlInPorts) // Sanity check break; + found = true; - //frame = v.frame; frame = evframe; index = v.idx; - // Set the ladspa control port value. - //controls[v.idx].val = v.value; + controls[v.idx].tmpVal = v.value; - // Need to update the automation value, otherwise it overwrites later with the last MusEGlobal::automation value. + // Need to update the automation value, otherwise it overwrites later with the last automation value. if(_track && _id != -1) - { - // Since we are now in the audio thread context, there's no need to send a message, - // just modify directly. - //MusEGlobal::audio->msgSetPluginCtrlVal(this, genACnum(_id, k), controls[k].val); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(_track, genACnum(_id, k), controls[k].val); _track->setPluginCtrlVal(genACnum(_id, v.idx), v.value); - - // Record automation. - // NO! Take care of this immediately in the OSC control handler, because we don't want - // any delay. - // OTOH Since this is the actual place and time where the control ports values - // are set, best to reflect what happens here to automation. - // However for dssi-vst it might be best to handle it that way. - - //AutomationType at = _track->automationType(); - // TODO: Taken from our native gui control handlers. - // This may need modification or may cause problems - - // we don't have the luxury of access to the dssi gui controls ! - //if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) - // enableController(k, false); - //_track->recordAutomation(id, v.value); - } } // Now update the actual values from the temporary values... for(unsigned long k = 0; k < controlPorts; ++k) - { - // printf("PluginI::apply updating port:%lu val:%f\n", k, controls[k].tmpVal); controls[k].val = controls[k].tmpVal; - } - //if(found) - if(found && !usefixedrate) - //nsamp = frame - sample + 1; - nsamp = frame - sample; - if(sample + nsamp >= n) // Safety check. + if(found && !usefixedrate) // If a control FIFO item was found, takes priority over automation controller stream. + nsamp = frame - sample; + + if(sample + nsamp >= n) // Safety check. nsamp = n - sample; - //printf("PluginI::apply ports:%lu n:%lu frame:%lu sample:%lu nsamp:%lu syncFrame:%lu loopcount:%d\n", - // ports, n, frame, sample, nsamp, syncFrame, loopcount); - - // Don't allow zero-length runs. This could/should be checked in the control loop instead. + // TODO: Don't allow zero-length runs. This could/should be checked in the control loop instead. // Note this means it is still possible to get stuck in the top loop (at least for a while). if(nsamp == 0) continue; @@ -2847,17 +2563,12 @@ connect(ports, sample, bufIn, bufOut); for(int i = 0; i < instances; ++i) - { - //fprintf(stderr, "PluginI::apply handle %d\n", i); _plugin->apply(handle[i], nsamp); - } } sample += nsamp; - loopcount++; // REMOVE Tim. } } -#endif //--------------------------------------------------------- // oscConfigure @@ -2885,7 +2596,6 @@ char* message = dssi_descr->configure(handle, key, value); if (message) { printf("Plugin::oscConfigure on configure '%s' '%s', plugin '%s' returned error '%s'\n", - //key, value, synti->name().toAscii().data(), message); key, value, plugin->Label, message); free(message); @@ -2898,10 +2608,6 @@ // instances[n].ui_osc_configure_path, "ss", key, value); // } - // configure invalidates bank and program information, so - // we should do this again now: - //queryPrograms(); - #endif // DSSI_SUPPORT return 0; @@ -2928,9 +2634,6 @@ // concept of restoring an instance from one run to the next, so // we don't bother remembering these at all. - //const char *key = (const char *)&argv[0]->s; - //const char *value = (const char *)&argv[1]->s; - #ifdef PLUGIN_DEBUGIN printf("PluginI::oscConfigure effect plugin name:%s label:%s key:%s value:%s\n", _name.toLatin1().constData(), _label.toLatin1().constData(), key, value); #endif @@ -2939,17 +2642,6 @@ // FIXME: Don't think this is right, should probably do as example shows below. for(int i = 0; i < instances; ++i) _plugin->oscConfigure(handle[i], key, value); - - // also call back on UIs for plugins other than the one - // that requested this: - // if (n != instance->number && instances[n].uiTarget) { - // lo_send(instances[n].uiTarget, - // instances[n].ui_osc_configure_path, "ss", key, value); - // } - - // configure invalidates bank and program information, so - // we should do this again now: - //queryPrograms(); #endif // DSSI_SUPPORT return 0; @@ -2965,7 +2657,7 @@ // Send project directory. _oscif.oscSendConfigure(DSSI_PROJECT_DIRECTORY_KEY, MusEGlobal::museProject.toLatin1().constData()); // MusEGlobal::song->projectPath() - /* + /* DELETETHIS 20 // Send current string configuration parameters. StringParamMap& map = synti->stringParameters(); int i = 0; @@ -2981,7 +2673,7 @@ // Send current bank and program. unsigned long bank, prog; synti->currentProg(&prog, &bank, 0); - _oscIF.oscSendProgram(prog, bank); + _oscIF.oscSendProgram(prog, bank, true); // "true" means "force" */ // FIXME: TESTING FLAM: I have to put a delay because flammer hasn't opened yet. @@ -2989,14 +2681,9 @@ usleep(300000); // Send current control values. - //unsigned long ports = controlPorts; - //for(int i = 0; i < controlPorts; ++i) for(unsigned long i = 0; i < controlPorts; ++i) { - //unsigned long k = synth->pIdx(i); - //_oscIF.oscSendControl(k, controls[i]); - //printf("PluginI::oscUpdate() sending control:%lu val:%f\n", i, controls[i].val); - _oscif.oscSendControl(controls[i].idx, controls[i].val); + _oscif.oscSendControl(controls[i].idx, controls[i].val, true /*force*/); // Avoid overloading the GUI if there are lots and lots of ports. if((i+1) % 50 == 0) usleep(300000); @@ -3012,17 +2699,10 @@ int PluginI::oscControl(unsigned long port, float value) { - //int port = argv[0]->i; - //LADSPA_Data value = argv[1]->f; - #ifdef PLUGIN_DEBUGIN printf("PluginI::oscControl received oscControl port:%lu val:%f\n", port, value); #endif - //int controlPorts = synth->_controller; - - //if(port >= controlPorts) - //if(port < 0 || port >= _plugin->rpIdx.size()) if(port >= _plugin->rpIdx.size()) { fprintf(stderr, "PluginI::oscControl: port number:%lu is out of range of index list size:%zd\n", port, _plugin->rpIdx.size()); @@ -3054,7 +2734,7 @@ // TODO: May need FIFOs on each control(!) so that the control changes get sent one per process cycle! // Observed countdown not actually going to zero upon string of changes. // Try this ... - /* + /* DELETETHIS 20 OscControlFifo* cfifo = _oscif.oscFifo(cport); if(cfifo) { @@ -3071,7 +2751,6 @@ } } */ - // p4.0.21 ControlEvent ce; ce.unique = _plugin->_isDssiVst; // Special for messages from vst gui to host - requires processing every message. ce.idx = cport; @@ -3097,20 +2776,20 @@ // That makes this pretty useless... But what the heck... if(_track && _id != -1) { - //int id = genACnum(_id, cport); unsigned long id = genACnum(_id, cport); AutomationType at = _track->automationType(); // TODO: Taken from our native gui control handlers. // This may need modification or may cause problems - // we don't have the luxury of access to the dssi gui controls ! - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) - enableController(cport, false); + if ((at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying())) + enableController(cport, false); //TODO maybe re-enable the ctrl soon? _track->recordAutomation(id, value); } - /* + /* DELETETHIS 12 const DSSI_Descriptor* dssi = synth->dssi; const LADSPA_Descriptor* ld = dssi->LADSPA_Plugin; @@ -3126,26 +2805,6 @@ } */ -#if 0 - int port = argv[0]->i; - LADSPA_Data value = argv[1]->f; - - if (port < 0 || port > instance->plugin->descriptor->LADSPA_Plugin->PortCount) { - fprintf(stderr, "MusE: OSC: %s port number (%d) is out of range\n", - instance->friendly_name, port); - return 0; - } - if (instance->pluginPortControlInNumbers[port] == -1) { - fprintf(stderr, "MusE: OSC: %s port %d is not a control in\n", - instance->friendly_name, port); - return 0; - } - pluginControlIns[instance->pluginPortControlInNumbers[port]] = value; - if (verbose) { - printf("MusE: OSC: %s port %d = %f\n", - instance->friendly_name, port, value); - } -#endif return 0; } @@ -3171,12 +2830,12 @@ QVBoxLayout* layout = new QVBoxLayout(this); pList = new QTreeWidget(this); - pList->setColumnCount(11); + pList->setColumnCount(12); // "Note: In order to avoid performance issues, it is recommended that sorting // is enabled after inserting the items into the tree. Alternatively, you could // also insert the items into a list before inserting the items into the tree. " - //pList->setSortingEnabled(true); QStringList headerLabels; + headerLabels << tr("Type"); headerLabels << tr("Lib"); headerLabels << tr("Label"); headerLabels << tr("Name"); @@ -3191,15 +2850,19 @@ pList->setHeaderLabels(headerLabels); + pList->headerItem()->setToolTip(4, tr("Audio inputs")); + pList->headerItem()->setToolTip(5, tr("Audio outputs")); + pList->headerItem()->setToolTip(6, tr("Control inputs")); + pList->headerItem()->setToolTip(7, tr("Control outputs")); + pList->headerItem()->setToolTip(8, tr("In-place capable")); + pList->headerItem()->setToolTip(9, tr("ID number")); + + pList->setRootIsDecorated(false); pList->setSelectionBehavior(QAbstractItemView::SelectRows); pList->setSelectionMode(QAbstractItemView::SingleSelection); pList->setAlternatingRowColors(true); pList->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - //fillPlugs(selectedPlugType); - //pList->setSortingEnabled(true); - //pList->sortByColumn(sortColumn, sortOrder); - layout->addWidget(pList); //--------------------------------------------------- @@ -3218,20 +2881,14 @@ okB->setFixedWidth(80); okB->setEnabled(false); cancelB->setFixedWidth(80); - //ok_lo->addStretch(4); - //ok_lo->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Maximum)); ok_lo->addWidget(okB); ok_lo->addSpacing(8); ok_lo->addWidget(cancelB); - //ok_lo->addStretch(4); - //ok_lo->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Maximum)); QGroupBox* plugSelGroup = new QGroupBox(this); - plugSelGroup->setTitle("Show plugs:"); + plugSelGroup->setTitle(tr("Show plugs:")); plugSelGroup->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); - //QHBoxLayout* psl = new QHBoxLayout; QGridLayout* psl = new QGridLayout; - //psl->setRowStretch(0, 0); plugSelGroup->setLayout(psl); QButtonGroup* plugSel = new QButtonGroup(plugSelGroup); @@ -3239,25 +2896,21 @@ onlySM->setText(tr("Mono and Stereo")); onlySM->setCheckable(true); plugSel->addButton(onlySM); - //psl->addWidget(onlySM); psl->addWidget(onlySM, 1, 0); onlyS = new QRadioButton(this); onlyS->setText(tr("Stereo")); onlyS->setCheckable(true); plugSel->addButton(onlyS); - //psl->addWidget(onlyS); psl->addWidget(onlyS, 0, 1); onlyM = new QRadioButton(this); onlyM->setText(tr("Mono")); onlyM->setCheckable(true); plugSel->addButton(onlyM); - //psl->addWidget(onlyM); psl->addWidget(onlyM, 0, 0); allPlug = new QRadioButton(this); allPlug->setText(tr("Show All")); allPlug->setCheckable(true); plugSel->addButton(allPlug); - //psl->addWidget(allPlug); psl->addWidget(allPlug, 1, 1); plugSel->setExclusive(true); @@ -3269,8 +2922,8 @@ } plugSelGroup->setToolTip(tr("Select which types of plugins should be visible in the list.
" - "Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.
" - "Also beware that the 'all' alternative includes plugins that probably not are usable by MusE.")); + "Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.
" + "Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack.")); w5->addSpacing(8); w5->addWidget(plugSelGroup); @@ -3292,7 +2945,6 @@ sortBox->setMinimumSize(100, 10); srch_lo->addWidget(sortBox); - //srch_lo->addStretch(); // FIXME: Adding this makes the whole bottom hlayout expand. Would like some space between lineedit and bottom. // Same thing if spacers added to group box or Ok Cancel box. //srch_lo->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Maximum)); @@ -3303,19 +2955,13 @@ if(listSave.isEmpty()) { - //int sizes[] = { 110, 110, 0, 30, 30, 30, 30, 30, 50, 110, 110 }; - int sizes[] = { 110, 110, 110, 30, 30, 30, 30, 30, 50, 110, 110 }; - for (int i = 0; i < 11; ++i) { - //if (sizes[i] == 0) { - // pList->header()->setResizeMode(i, QHeaderView::Stretch); - // } - //else { - if (sizes[i] <= 50) // hack alert! - pList->header()->setResizeMode(i, QHeaderView::Fixed); - pList->header()->resizeSection(i, sizes[i]); - // } - } - pList->sortByColumn(0, Qt::AscendingOrder); + int sizes[] = { 80, 110, 110, 110, 30, 30, 30, 30, 30, 50, 110, 110 }; + for (int i = 0; i < 12; ++i) { + if (sizes[i] <= 50) // hack alert! + pList->header()->setResizeMode(i, QHeaderView::Fixed); + pList->header()->resizeSection(i, sizes[i]); + } + pList->sortByColumn(3, Qt::AscendingOrder); } else pList->header()->restoreState(listSave); @@ -3346,7 +2992,7 @@ { QTreeWidgetItem* item = pList->currentItem(); if (item) - return MusEGlobal::plugins.find(item->text(0), item->text(1)); + return MusEGlobal::plugins.find(item->text(1), item->text(2)); printf("plugin not found\n"); return 0; } @@ -3368,13 +3014,10 @@ sortItems.push_front(sortBox->currentText()); } - ///sortColumn = pList->sortColumn(); QHeaderView* hdr = pList->header(); if(hdr) - { - ///sortOrder = hdr->sortIndicatorOrder(); listSave = hdr->saveState(); - } + geometrySave = geometry(); } @@ -3405,29 +3048,22 @@ void PluginDialog::fillPlugs(QAbstractButton* ab) { if (ab == allPlug) - //fillPlugs(SEL_ALL); selectedPlugType = SEL_ALL; else if (ab == onlyM) - //fillPlugs(SEL_M); selectedPlugType = SEL_M; else if (ab == onlyS) - //fillPlugs(SEL_S); selectedPlugType = SEL_S; else if (ab == onlySM) - //fillPlugs(SEL_SM); selectedPlugType = SEL_SM; fillPlugs(); } void PluginDialog::fillPlugs() { + QString type_name; pList->clear(); for (MusECore::iPlugin i = MusEGlobal::plugins.begin(); i != MusEGlobal::plugins.end(); ++i) { - //int ai = i->inports(); - //int ao = i->outports(); - //int ci = i->controlInPorts(); - //int co = i->controlOutPorts(); - unsigned long ai = i->inports(); // p4.0.21 + unsigned long ai = i->inports(); unsigned long ao = i->outports(); unsigned long ci = i->controlInPorts(); unsigned long co = i->controlOutPorts(); @@ -3459,17 +3095,24 @@ } if (found && addFlag) { QTreeWidgetItem* item = new QTreeWidgetItem; - item->setText(0, i->lib()); - item->setText(1, i->label()); - item->setText(2, i->name()); - item->setText(3, QString().setNum(ai)); - item->setText(4, QString().setNum(ao)); - item->setText(5, QString().setNum(ci)); - item->setText(6, QString().setNum(co)); - item->setText(7, QString().setNum(i->inPlaceCapable())); - item->setText(8, QString().setNum(i->id())); - item->setText(9, i->maker()); - item->setText(10, i->copyright()); + if(i->isDssiSynth()) + type_name = tr("dssi synth"); + else if(i->isDssiPlugin()) + type_name = tr("dssi effect"); + else + type_name = tr("ladspa"); + item->setText(0, type_name); + item->setText(1, i->lib()); + item->setText(2, i->label()); + item->setText(3, i->name()); + item->setText(4, QString().setNum(ai)); + item->setText(5, QString().setNum(ao)); + item->setText(6, QString().setNum(ci)); + item->setText(7, QString().setNum(co)); + item->setText(8, QString().setNum(i->inPlaceCapable())); + item->setText(9, QString().setNum(i->id())); + item->setText(10, i->maker()); + item->setText(11, i->copyright()); pList->addTopLevelItem(item); } } @@ -3503,8 +3146,6 @@ // PluginGui //--------------------------------------------------------- -//PluginGui::PluginGui(PluginI* p) -// p3.3.43 PluginGui::PluginGui(MusECore::PluginIBase* p) : QMainWindow(0) { @@ -3512,7 +3153,6 @@ params = 0; paramsOut = 0; plugin = p; - //setWindowTitle(plugin->name()); setWindowTitle(plugin->titlePrefix() + plugin->name()); QToolBar* tools = addToolBar(tr("File Buttons")); @@ -3536,7 +3176,6 @@ // TODO: We need to use .qrc files to use icons in WhatsThis bubbles. See Qt // Resource System in Qt documentation - ORCAN - //Q3MimeSourceFactory::defaultFactory()->setPixmap(QString("fileopen"), *openIcon ); fileOpen->setWhatsThis(tr(presetOpenText)); onOff->setWhatsThis(tr(presetBypassText)); fileSave->setWhatsThis(tr(presetSaveText)); @@ -3567,11 +3206,7 @@ const char* name = ba.constData(); if (*name !='P') continue; - //int parameter = -1; - //sscanf(name, "P%d", ¶meter); - //if (parameter == -1) - // continue; - unsigned long parameter; // p4.0.21 + unsigned long parameter; int rv = sscanf(name, "P%lu", ¶meter); if(rv != 1) continue; @@ -3582,15 +3217,17 @@ nobj = 0; QSignalMapper* mapper = new QSignalMapper(this); - // FIXME: There's no unsigned for gui params. We would need to limit nobj to MAXINT. // p4.0.21 - // FIXME: Our MusEGui::Slider class uses doubles for values, giving some problems with float conversion. // p4.0.21 + // FIXME: There's no unsigned for gui params. We would need to limit nobj to MAXINT. + // FIXME: Our MusEGui::Slider class uses doubles for values, giving some problems with float conversion. connect(mapper, SIGNAL(mapped(int)), SLOT(guiParamChanged(int))); - QSignalMapper* mapperPressed = new QSignalMapper(this); - QSignalMapper* mapperReleased = new QSignalMapper(this); + QSignalMapper* mapperPressed = new QSignalMapper(this); + QSignalMapper* mapperReleased = new QSignalMapper(this); + QSignalMapper* mapperContextMenuReq = new QSignalMapper(this); connect(mapperPressed, SIGNAL(mapped(int)), SLOT(guiParamPressed(int))); connect(mapperReleased, SIGNAL(mapped(int)), SLOT(guiParamReleased(int))); + connect(mapperContextMenuReq, SIGNAL(mapped(int)), SLOT(guiContextMenuReq(int))); for (it = l.begin(); it != l.end(); ++it) { obj = *it; @@ -3598,18 +3235,15 @@ const char* name = ba.constData(); if (*name !='P') continue; - //int parameter = -1; - //sscanf(name, "P%d", ¶meter); - //if (parameter == -1) - // continue; - unsigned long parameter; // p4.0.21 + unsigned long parameter; int rv = sscanf(name, "P%lu", ¶meter); - if(rv != 1) + if(rv != 1) continue; mapper->setMapping(obj, nobj); mapperPressed->setMapping(obj, nobj); mapperReleased->setMapping(obj, nobj); + mapperContextMenuReq->setMapping(obj, nobj); gw[nobj].widget = (QWidget*)obj; gw[nobj].param = parameter; @@ -3619,21 +3253,19 @@ gw[nobj].type = GuiWidgets::SLIDER; ((Slider*)obj)->setId(nobj); ((Slider*)obj)->setCursorHoming(true); - //for(int i = 0; i < nobj; i++) - for(unsigned long i = 0; i < nobj; i++) // p4.0.21 + for(unsigned long i = 0; i < nobj; i++) { if(gw[i].type == GuiWidgets::DOUBLE_LABEL && gw[i].param == parameter) ((DoubleLabel*)gw[i].widget)->setSlider((Slider*)obj); } - connect(obj, SIGNAL(sliderMoved(double,int)), mapper, SLOT(map())); - connect(obj, SIGNAL(sliderPressed(int)), SLOT(guiSliderPressed(int))); - connect(obj, SIGNAL(sliderReleased(int)), SLOT(guiSliderReleased(int))); - connect(obj, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(guiSliderRightClicked(const QPoint &, int))); + connect((Slider*)obj, SIGNAL(sliderMoved(double,int)), mapper, SLOT(map())); + connect((Slider*)obj, SIGNAL(sliderPressed(int)), SLOT(guiSliderPressed(int))); + connect((Slider*)obj, SIGNAL(sliderReleased(int)), SLOT(guiSliderReleased(int))); + connect((Slider*)obj, SIGNAL(sliderRightClicked(const QPoint &, int)), SLOT(guiSliderRightClicked(const QPoint &, int))); } else if (strcmp(obj->metaObject()->className(), "MusEGui::DoubleLabel") == 0) { gw[nobj].type = GuiWidgets::DOUBLE_LABEL; ((DoubleLabel*)obj)->setId(nobj); - //for(int i = 0; i < nobj; i++) for(unsigned long i = 0; i < nobj; i++) { if(gw[i].type == GuiWidgets::SLIDER && gw[i].param == parameter) @@ -3642,17 +3274,23 @@ break; } } - connect(obj, SIGNAL(valueChanged(double,int)), mapper, SLOT(map())); + connect((DoubleLabel*)obj, SIGNAL(valueChanged(double,int)), mapper, SLOT(map())); } else if (strcmp(obj->metaObject()->className(), "QCheckBox") == 0) { gw[nobj].type = GuiWidgets::QCHECKBOX; - connect(obj, SIGNAL(toggled(bool)), mapper, SLOT(map())); - connect(obj, SIGNAL(pressed()), mapperPressed, SLOT(map())); - connect(obj, SIGNAL(released()), mapperReleased, SLOT(map())); + gw[nobj].widget->setContextMenuPolicy(Qt::CustomContextMenu); + connect((QCheckBox*)obj, SIGNAL(toggled(bool)), mapper, SLOT(map())); + connect((QCheckBox*)obj, SIGNAL(pressed()), mapperPressed, SLOT(map())); + connect((QCheckBox*)obj, SIGNAL(released()), mapperReleased, SLOT(map())); + connect((QCheckBox*)obj, SIGNAL(customContextMenuRequested(const QPoint &)), + mapperContextMenuReq, SLOT(map())); } else if (strcmp(obj->metaObject()->className(), "QComboBox") == 0) { gw[nobj].type = GuiWidgets::QCOMBOBOX; - connect(obj, SIGNAL(activated(int)), mapper, SLOT(map())); + gw[nobj].widget->setContextMenuPolicy(Qt::CustomContextMenu); + connect((QComboBox*)obj, SIGNAL(activated(int)), mapper, SLOT(map())); + connect((QComboBox*)obj, SIGNAL(customContextMenuRequested(const QPoint &)), + mapperContextMenuReq, SLOT(map())); } else { printf("unknown widget class %s\n", obj->metaObject()->className()); @@ -3663,7 +3301,6 @@ updateValues(); // otherwise the GUI won't have valid data } else { - // p3.4.43 view = new QScrollArea; view->setWidgetResizable(true); setCentralWidget(view); @@ -3674,16 +3311,13 @@ mw->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); - //int n = plugin->parameters(); - unsigned long n = plugin->parameters(); // p4.0.21 + unsigned long n = plugin->parameters(); params = new GuiParam[n]; - //int style = Slider::BgTrough | Slider::BgSlot; QFontMetrics fm = fontMetrics(); int h = fm.height() + 4; - //for (int i = 0; i < n; ++i) { - for (unsigned long i = 0; i < n; ++i) { // p4.0.21 + for (unsigned long i = 0; i < n; ++i) { QLabel* label = 0; LADSPA_PortRangeHint range = plugin->range(i); double lower = 0.0; // default values @@ -3698,7 +3332,7 @@ if (LADSPA_IS_HINT_TOGGLED(range.HintDescriptor)) { params[i].type = GuiParam::GUI_SWITCH; - CheckBox* cb = new CheckBox(mw, i, "param"); + CheckBox* cb = new CheckBox(mw, i, "param"); cb->setId(i); cb->setText(QString(plugin->paramName(i))); cb->setChecked(plugin->param(i) != 0.0); @@ -3734,24 +3368,19 @@ params[i].actuator = s; params[i].label->setSlider((Slider*)params[i].actuator); } - //params[i].actuator->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); params[i].actuator->setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed)); if (params[i].type == GuiParam::GUI_SLIDER) { - //label->setFixedHeight(20); - //label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); - //params[i].label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Maximum)); params[i].label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); grid->addWidget(label, i, 0); grid->addWidget(params[i].label, i, 1); grid->addWidget(params[i].actuator, i, 2); } else if (params[i].type == GuiParam::GUI_SWITCH) { - //grid->addMultiCellWidget(params[i].actuator, i, i, 0, 2); grid->addWidget(params[i].actuator, i, 0, 1, 3); } if (params[i].type == GuiParam::GUI_SLIDER) { - connect(params[i].actuator, SIGNAL(sliderMoved(double,int)), SLOT(sliderChanged(double,int))); + connect(params[i].actuator, SIGNAL(sliderMoved(double,int,bool)), SLOT(sliderChanged(double,int,bool))); connect(params[i].label, SIGNAL(valueChanged(double,int)), SLOT(labelChanged(double,int))); connect(params[i].actuator, SIGNAL(sliderPressed(int)), SLOT(ctrlPressed(int))); connect(params[i].actuator, SIGNAL(sliderReleased(int)), SLOT(ctrlReleased(int))); @@ -3789,24 +3418,20 @@ paramsOut[i].label->setPrecision(2); paramsOut[i].label->setId(i); - Meter::MeterType mType=Meter::LinMeter; + Meter::MeterType mType=Meter::LinMeter; if(LADSPA_IS_HINT_INTEGER(range.HintDescriptor)) mType=Meter::DBMeter; - VerticalMeter* m = new VerticalMeter(this, mType); - //printf("lower =%f upper=%f dlower=%f dupper=%f\n", lower, upper,dlower,dupper); + VerticalMeter* m = new VerticalMeter(this, mType); m->setRange(dlower, dupper); m->setVal(dval); m->setFixedHeight(h); paramsOut[i].actuator = m; -// paramsOut[i].label->setSlider((Slider*)params[i].actuator); - //paramsOut[i].actuator->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); paramsOut[i].label->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); grid->addWidget(label, n+i, 0); grid->addWidget(paramsOut[i].label, n+i, 1); grid->addWidget(paramsOut[i].actuator, n+i, 2); -// connect(paramsOut[i].label, SIGNAL(valueChanged(double,int)), SLOT(labelChanged(double,int))); } } @@ -3863,7 +3488,10 @@ void PluginGui::heartBeat() { - updateControls(); + updateControls(); // FINDMICHJETZT TODO: this is not good. we have concurrent + // access from the audio thread (possibly writing control values) + // while reading them from some GUI thread. this will lead + // to problems if writing floats is non-atomic } //--------------------------------------------------------- @@ -3877,7 +3505,7 @@ if(track) at = track->automationType(); - if(at != AUTO_OFF) + if (at == AUTO_READ || at == AUTO_TOUCH || at == AUTO_WRITE) plugin->enableController(param, false); int id = plugin->id(); @@ -3897,40 +3525,23 @@ plugin->setParam(param, val); ((DoubleLabel*)params[param].label)->setValue(val); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); - if(track) { - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(track, id, val); - // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? track->setPluginCtrlVal(id, val); - MusEGlobal::song->controllerChange(track); - track->startAutoRecord(id, val); - } - } + } + } else if(params[param].type == GuiParam::GUI_SWITCH) { - //double val = (double)((CheckBox*)params[param].actuator)->isChecked(); - float val = (float)((CheckBox*)params[param].actuator)->isChecked(); // p4.0.21 + float val = (float)((CheckBox*)params[param].actuator)->isChecked(); plugin->setParam(param, val); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); - if(track) { - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(track, id, val); - // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? track->setPluginCtrlVal(id, val); - MusEGlobal::song->controllerChange(track); - track->startAutoRecord(id, val); - } - } + } + } } //--------------------------------------------------------- @@ -3945,9 +3556,10 @@ at = track->automationType(); // Special for switch - don't enable controller until transport stopped. - if(at != AUTO_WRITE && ((params[param].type != GuiParam::GUI_SWITCH - || !MusEGlobal::audio->isPlaying() - || at != AUTO_TOUCH) || (!MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) ) + if ((at == AUTO_OFF) || + (at == AUTO_READ) || + (at == AUTO_TOUCH && (params[param].type != GuiParam::GUI_SWITCH || + !MusEGlobal::audio->isPlaying()) ) ) plugin->enableController(param, true); int id = plugin->id(); @@ -3963,13 +3575,7 @@ else if (LADSPA_IS_HINT_INTEGER(params[param].hint)) val = rint(val); track->stopAutoRecord(id, val); - } - //else if(params[param].type == GuiParam::GUI_SWITCH) - //{ - //double val = (double)((CheckBox*)params[param].actuator)->isChecked(); - // No concept of 'untouching' a checkbox. Remain 'touched' until stop. - //plugin->track()->stopAutoRecord(MusECore::genACnum(plugin->id(), param), val); - //} + } } //--------------------------------------------------------- @@ -3980,7 +3586,6 @@ { int id = plugin->id(); if(id != -1) - //MusEGlobal::song->execAutomationCtlPopup((MusECore::AudioTrack*)plugin->track(), p, MusECore::genACnum(id, param)); MusEGlobal::song->execAutomationCtlPopup(plugin->track(), p, MusECore::genACnum(id, param)); } @@ -3988,20 +3593,22 @@ // sliderChanged //--------------------------------------------------------- -void PluginGui::sliderChanged(double val, int param) +void PluginGui::sliderChanged(double val, int param, bool shift_pressed) { AutomationType at = AUTO_OFF; MusECore::AudioTrack* track = plugin->track(); if(track) at = track->automationType(); - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) plugin->enableController(param, false); if (LADSPA_IS_HINT_LOGARITHMIC(params[param].hint)) val = pow(10.0, val/20.0); else if (LADSPA_IS_HINT_INTEGER(params[param].hint)) val = rint(val); + if (plugin->param(param) != val) { plugin->setParam(param, val); ((DoubleLabel*)params[param].label)->setValue(val); @@ -4012,18 +3619,10 @@ return; id = MusECore::genACnum(id, param); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); - if(track) { - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(track, id, val); - // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? track->setPluginCtrlVal(id, val); - MusEGlobal::song->controllerChange(track); - - track->recordAutomation(id, val); + if (!shift_pressed) track->recordAutomation(id, val); //with shift, we get straight lines :) } } @@ -4038,7 +3637,8 @@ if(track) at = track->automationType(); - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) plugin->enableController(param, false); double dval = val; @@ -4057,17 +3657,9 @@ id = MusECore::genACnum(id, param); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); - if(track) { - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(track, id, val); - // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? track->setPluginCtrlVal(id, val); - MusEGlobal::song->controllerChange(track); - track->startAutoRecord(id, val); } } @@ -4079,7 +3671,6 @@ void PluginGui::load() { QString s("presets/plugins/"); - //s += plugin->plugin()->label(); s += plugin->pluginLabel(); s += "/"; @@ -4144,11 +3735,9 @@ void PluginGui::save() { QString s("presets/plugins/"); - //s += plugin->plugin()->label(); s += plugin->pluginLabel(); s += "/"; - //QString fn = getSaveFileName(s, MusEGlobal::preset_file_pattern, this, QString fn = getSaveFileName(s, MusEGlobal::preset_file_save_pattern, this, tr("MusE: save preset")); if (fn.isEmpty()) @@ -4199,8 +3788,7 @@ void PluginGui::updateValues() { if (params) { - //for (int i = 0; i < plugin->parameters(); ++i) { - for (unsigned long i = 0; i < plugin->parameters(); ++i) { // p4.0.21 + for (unsigned long i = 0; i < plugin->parameters(); ++i) { GuiParam* gp = ¶ms[i]; if (gp->type == GuiParam::GUI_SLIDER) { double lv = plugin->param(i); @@ -4221,13 +3809,10 @@ } } else if (gw) { - //for (int i = 0; i < nobj; ++i) { - for (unsigned long i = 0; i < nobj; ++i) { // p4.0.21 + for (unsigned long i = 0; i < nobj; ++i) { QWidget* widget = gw[i].widget; int type = gw[i].type; - //int param = gw[i].param; - //double val = plugin->param(param); - unsigned long param = gw[i].param; // p4.0.21 + unsigned long param = gw[i].param; float val = plugin->param(param); switch(type) { case GuiWidgets::SLIDER: @@ -4279,19 +3864,17 @@ } - //if(!MusEGlobal::automation) - // return; - //AutomationType at = plugin->track()->automationType(); - //if(at == AUTO_OFF) - // return; if (params) { - //for (int i = 0; i < plugin->parameters(); ++i) { - for (unsigned long i = 0; i < plugin->parameters(); ++i) { // p4.0.21 + for (unsigned long i = 0; i < plugin->parameters(); ++i) { GuiParam* gp = ¶ms[i]; if (gp->type == GuiParam::GUI_SLIDER) { - if( plugin->controllerEnabled(i) && plugin->controllerEnabled2(i) ) { - double lv = plugin->track()->pluginCtrlVal(MusECore::genACnum(plugin->id(), i)); + double lv = plugin->track()->controller()->value(MusECore::genACnum(plugin->id(), i), + MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || + plugin->track()->automationType() == AUTO_OFF || + !plugin->controllerEnabled(i) || + !plugin->controllerEnabled2(i)); double sv = lv; if (LADSPA_IS_HINT_LOGARITHMIC(params[i].hint)) sv = MusECore::fast_log10(lv) * 20.0; @@ -4303,8 +3886,6 @@ } if(((Slider*)(gp->actuator))->value() != sv) { - //printf("PluginGui::updateControls slider\n"); - gp->label->blockSignals(true); ((Slider*)(gp->actuator))->blockSignals(true); ((Slider*)(gp->actuator))->setValue(sv); @@ -4313,16 +3894,17 @@ gp->label->blockSignals(false); } } - } else if (gp->type == GuiParam::GUI_SWITCH) { - if( plugin->controllerEnabled(i) && plugin->controllerEnabled2(i) ) { - bool v = (int)plugin->track()->pluginCtrlVal(MusECore::genACnum(plugin->id(), i)); + bool v = (int)plugin->track()->controller()->value(MusECore::genACnum(plugin->id(), i), + MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || + plugin->track()->automationType() == AUTO_OFF || + !plugin->controllerEnabled(i) || + !plugin->controllerEnabled2(i)); if(((CheckBox*)(gp->actuator))->isChecked() != v) { - //printf("PluginGui::updateControls switch\n"); - ((CheckBox*)(gp->actuator))->blockSignals(true); ((CheckBox*)(gp->actuator))->setChecked(v); ((CheckBox*)(gp->actuator))->blockSignals(false); @@ -4332,21 +3914,21 @@ } } else if (gw) { - //for (int i = 0; i < nobj; ++i) { - for (unsigned long i = 0; i < nobj; ++i) { // p4.0.21 + for (unsigned long i = 0; i < nobj; ++i) { QWidget* widget = gw[i].widget; int type = gw[i].type; - //int param = gw[i].param; - unsigned long param = gw[i].param; // p4.0.21 + unsigned long param = gw[i].param; switch(type) { case GuiWidgets::SLIDER: - if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) { - double v = plugin->track()->pluginCtrlVal(MusECore::genACnum(plugin->id(), param)); + double v = plugin->track()->controller()->value(MusECore::genACnum(plugin->id(), param), + MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || + plugin->track()->automationType() == AUTO_OFF || + !plugin->controllerEnabled(param) || + !plugin->controllerEnabled2(param)); if(((Slider*)widget)->value() != v) { - //printf("PluginGui::updateControls slider\n"); - ((Slider*)widget)->blockSignals(true); ((Slider*)widget)->setValue(v); ((Slider*)widget)->blockSignals(false); @@ -4354,13 +3936,15 @@ } break; case GuiWidgets::DOUBLE_LABEL: - if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) { - double v = plugin->track()->pluginCtrlVal(MusECore::genACnum(plugin->id(), param)); + double v = plugin->track()->controller()->value(MusECore::genACnum(plugin->id(), param), + MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || + plugin->track()->automationType() == AUTO_OFF || + !plugin->controllerEnabled(param) || + !plugin->controllerEnabled2(param)); if(((DoubleLabel*)widget)->value() != v) { - //printf("PluginGui::updateControls label\n"); - ((DoubleLabel*)widget)->blockSignals(true); ((DoubleLabel*)widget)->setValue(v); ((DoubleLabel*)widget)->blockSignals(false); @@ -4368,13 +3952,15 @@ } break; case GuiWidgets::QCHECKBOX: - if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) { - bool b = (bool) plugin->track()->pluginCtrlVal(MusECore::genACnum(plugin->id(), param)); + bool b = (bool) plugin->track()->controller()->value(MusECore::genACnum(plugin->id(), param), + MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || + plugin->track()->automationType() == AUTO_OFF || + !plugin->controllerEnabled(param) || + !plugin->controllerEnabled2(param)); if(((QCheckBox*)widget)->isChecked() != b) { - //printf("PluginGui::updateControls checkbox\n"); - ((QCheckBox*)widget)->blockSignals(true); ((QCheckBox*)widget)->setChecked(b); ((QCheckBox*)widget)->blockSignals(false); @@ -4382,13 +3968,15 @@ } break; case GuiWidgets::QCOMBOBOX: - if( plugin->controllerEnabled(param) && plugin->controllerEnabled2(param) ) { - int n = (int) plugin->track()->pluginCtrlVal(MusECore::genACnum(plugin->id(), param)); + int n = (int) plugin->track()->controller()->value(MusECore::genACnum(plugin->id(), param), + MusEGlobal::audio->curFramePos(), + !MusEGlobal::automation || + plugin->track()->automationType() == AUTO_OFF || + !plugin->controllerEnabled(param) || + !plugin->controllerEnabled2(param)); if(((QComboBox*)widget)->currentIndex() != n) { - //printf("PluginGui::updateControls combobox\n"); - ((QComboBox*)widget)->blockSignals(true); ((QComboBox*)widget)->setCurrentIndex(n); ((QComboBox*)widget)->blockSignals(false); @@ -4407,8 +3995,7 @@ void PluginGui::guiParamChanged(int idx) { QWidget* w = gw[idx].widget; - //int param = gw[idx].param; - unsigned long param = gw[idx].param; // p4.0.21 + unsigned long param = gw[idx].param; int type = gw[idx].type; AutomationType at = AUTO_OFF; @@ -4416,7 +4003,8 @@ if(track) at = track->automationType(); - if(at == AUTO_WRITE || (MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + if ( (at == AUTO_WRITE) || + (at == AUTO_TOUCH && MusEGlobal::audio->isPlaying()) ) plugin->enableController(param, false); double val = 0.0; @@ -4435,8 +4023,7 @@ break; } - //for (int i = 0; i < nobj; ++i) { - for (unsigned long i = 0; i < nobj; ++i) { // p4.0.21 + for (unsigned long i = 0; i < nobj; ++i) { QWidget* widget = gw[i].widget; if (widget == w || param != gw[i].param) continue; @@ -4461,29 +4048,17 @@ if(track && id != -1) { id = MusECore::genACnum(id, param); - - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); - - //if(track) - //{ - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(track, id, val); - // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? - track->setPluginCtrlVal(id, val); - MusEGlobal::song->controllerChange(track); - - switch(type) - { - case GuiWidgets::DOUBLE_LABEL: - case GuiWidgets::QCHECKBOX: - track->startAutoRecord(id, val); - break; - default: - track->recordAutomation(id, val); - break; - } - //} + track->setPluginCtrlVal(id, val); + switch(type) + { + case GuiWidgets::DOUBLE_LABEL: + case GuiWidgets::QCHECKBOX: + track->startAutoRecord(id, val); + break; + default: + track->recordAutomation(id, val); + break; + } } plugin->setParam(param, val); } @@ -4494,15 +4069,14 @@ void PluginGui::guiParamPressed(int idx) { - //int param = gw[idx].param; - unsigned long param = gw[idx].param; // p4.0.21 + unsigned long param = gw[idx].param; AutomationType at = AUTO_OFF; MusECore::AudioTrack* track = plugin->track(); if(track) at = track->automationType(); - if(at != AUTO_OFF) + if (at == AUTO_READ || at == AUTO_TOUCH || at == AUTO_WRITE) plugin->enableController(param, false); int id = plugin->id(); @@ -4514,8 +4088,8 @@ // NOTE: For this to be of any use, the freeverb gui 2142.ui // would have to be used, and changed to use CheckBox and ComboBox // instead of QCheckBox and QComboBox, since both of those would - // need customization (Ex. QCheckBox doesn't check on click). - /* + // need customization (Ex. QCheckBox doesn't check on click). RECHECK: Qt4 it does? + /* switch(type) { case GuiWidgets::QCHECKBOX: double val = (double)((CheckBox*)w)->isChecked(); @@ -4535,8 +4109,7 @@ void PluginGui::guiParamReleased(int idx) { - //int param = gw[idx].param; - unsigned long param = gw[idx].param; // p4.0.21 + unsigned long param = gw[idx].param; int type = gw[idx].type; AutomationType at = AUTO_OFF; @@ -4545,9 +4118,10 @@ at = track->automationType(); // Special for switch - don't enable controller until transport stopped. - if(at != AUTO_WRITE && (type != GuiWidgets::QCHECKBOX - || !MusEGlobal::audio->isPlaying() - || at != AUTO_TOUCH)) + if ((at == AUTO_OFF) || + (at == AUTO_READ) || + (at == AUTO_TOUCH && (type != GuiWidgets::QCHECKBOX || + !MusEGlobal::audio->isPlaying()) ) ) plugin->enableController(param, true); int id = plugin->id(); @@ -4560,8 +4134,8 @@ // NOTE: For this to be of any use, the freeverb gui 2142.ui // would have to be used, and changed to use CheckBox and ComboBox // instead of QCheckBox and QComboBox, since both of those would - // need customization (Ex. QCheckBox doesn't check on click). - /* + // need customization (Ex. QCheckBox doesn't check on click). // RECHECK Qt4 it does? + /* switch(type) { case GuiWidgets::QCHECKBOX: double val = (double)((CheckBox*)w)->isChecked(); @@ -4581,8 +4155,7 @@ void PluginGui::guiSliderPressed(int idx) { - //int param = gw[idx].param; - unsigned long param = gw[idx].param; // p4.0.21 + unsigned long param = gw[idx].param; QWidget *w = gw[idx].widget; AutomationType at = AUTO_OFF; @@ -4592,7 +4165,7 @@ int id = plugin->id(); - if(at == AUTO_WRITE || (at == AUTO_READ || at == AUTO_TOUCH)) + if (at == AUTO_READ || at == AUTO_TOUCH || at == AUTO_WRITE) plugin->enableController(param, false); if(!track || id == -1) @@ -4603,18 +4176,11 @@ double val = ((Slider*)w)->value(); plugin->setParam(param, val); - //MusEGlobal::audio->msgSetPluginCtrlVal(((PluginI*)plugin), id, val); - // p3.3.43 - //MusEGlobal::audio->msgSetPluginCtrlVal(track, id, val); - // p4.0.21 MusEGlobal::audio->msgXXX waits. Do we really need to? track->setPluginCtrlVal(id, val); - MusEGlobal::song->controllerChange(track); - track->startAutoRecord(id, val); // Needed so that paging a slider updates a label or other buddy control. - //for (int i = 0; i < nobj; ++i) { - for (unsigned long i = 0; i < nobj; ++i) { // p4.0.21 + for (unsigned long i = 0; i < nobj; ++i) { QWidget* widget = gw[i].widget; if (widget == w || param != gw[i].param) continue; @@ -4650,7 +4216,12 @@ if(track) at = track->automationType(); - if(at != AUTO_WRITE || (!MusEGlobal::audio->isPlaying() && at == AUTO_TOUCH)) + /* equivalent to + if ((at == AUTO_OFF) || + (at == AUTO_READ) || + (at == AUTO_TOUCH && (type != GuiWidgets::QCHECKBOX || <--- this type is SLIDER != CHECKBOX -> true + !MusEGlobal::audio->isPlaying()) ) ) <--- above==true -> this doesn't matter */ + if (at == AUTO_OFF || at == AUTO_READ || at == AUTO_TOUCH) plugin->enableController(param, true); int id = plugin->id(); @@ -4673,11 +4244,19 @@ int param = gw[idx].param; int id = plugin->id(); if(id != -1) - //MusEGlobal::song->execAutomationCtlPopup((MusECore::AudioTrack*)plugin->track(), p, MusECore::genACnum(id, param)); MusEGlobal::song->execAutomationCtlPopup(plugin->track(), p, MusECore::genACnum(id, param)); } //--------------------------------------------------------- +// guiContextMenuReq +//--------------------------------------------------------- + +void PluginGui::guiContextMenuReq(int idx) +{ + guiSliderRightClicked(QCursor().pos(), idx); +} + +//--------------------------------------------------------- // PluginLoader //--------------------------------------------------------- QWidget* PluginLoader::createWidget(const QString & className, QWidget * parent, const QString & name) diff -Nru muse-2.0~rc2/muse/plugin.h muse-2.0/muse/plugin.h --- muse-2.0~rc2/muse/plugin.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/plugin.h 2012-06-30 19:24:43.000000000 +0200 @@ -40,12 +40,9 @@ #include "ctrl.h" #include "controlfifo.h" -//#include "stringparam.h" - #include "config.h" #ifdef OSC_SUPPORT -//class OscIF; #include "osc.h" #endif @@ -95,6 +92,7 @@ QString _maker; QString _copyright; + bool _isDssiSynth; bool _isDssi; // Hack: Special flag required. bool _isDssiVst; @@ -103,7 +101,6 @@ const DSSI_Descriptor* dssi_descr; #endif - //LADSPA_PortDescriptor* _portDescriptors; unsigned long _portCount; unsigned long _inports; unsigned long _outports; @@ -114,7 +111,7 @@ bool _inPlaceCapable; public: - Plugin(QFileInfo* f, const LADSPA_Descriptor* d, bool isDssi = false); + Plugin(QFileInfo* f, const LADSPA_Descriptor* d, bool isDssi = false, bool isDssiSynth = false); ~Plugin(); QString label() const { return _label; } @@ -122,7 +119,7 @@ unsigned long id() const { return _uniqueID; } QString maker() const { return _maker; } QString copyright() const { return _copyright; } - QString lib(bool complete = true) /*const*/ { return complete ? fi.completeBaseName() : fi.baseName(); } // ddskrjo const + QString lib(bool complete = true) { return complete ? fi.completeBaseName() : fi.baseName(); } // ddskrjo const QString dirPath(bool complete = true) const { return complete ? fi.absolutePath() : fi.path(); } QString filePath() const { return fi.filePath(); } QString fileName() const { return fi.fileName(); } @@ -131,6 +128,7 @@ int instNo() { return _instNo++; } bool isDssiPlugin() const { return _isDssi; } + bool isDssiSynth() const { return _isDssiSynth; } LADSPA_Handle instantiate(); void activate(LADSPA_Handle handle) { @@ -155,7 +153,7 @@ } #ifdef OSC_SUPPORT - int oscConfigure(LADSPA_Handle /*handle*/, const char* /*key*/, const char* /*value*/); + int oscConfigure(LADSPA_Handle handle, const char* key, const char* value); #endif unsigned long ports() { return _portCount; } @@ -166,27 +164,26 @@ LADSPA_PortRangeHint range(unsigned long i) { // FIXME: - //return plugin ? plugin->PortRangeHints[i] : 0; + //return plugin ? plugin->PortRangeHints[i] : 0; DELETETHIS return plugin->PortRangeHints[i]; } float defaultValue(unsigned long port) const; void range(unsigned long i, float*, float*) const; - CtrlValueType ctrlValueType(unsigned long /*i*/) const; - CtrlList::Mode ctrlMode(unsigned long /*i*/) const; + CtrlValueType ctrlValueType(unsigned long i) const; + CtrlList::Mode ctrlMode(unsigned long i) const; const char* portName(unsigned long i) { return plugin ? plugin->PortNames[i] : 0; } - // Returns (int)-1 if not an input control. - //unsigned long port2InCtrl(unsigned long p) { return p >= rpIdx.size() ? (unsigned long)-1 : rpIdx[p]; } - unsigned long inports() const { return _inports; } unsigned long outports() const { return _outports; } unsigned long controlInPorts() const { return _controlInPorts; } unsigned long controlOutPorts() const { return _controlOutPorts; } bool inPlaceCapable() const { return _inPlaceCapable; } + + const std::vector* getRpIdx() { return &rpIdx; } }; typedef std::list::iterator iPlugin; @@ -197,9 +194,9 @@ class PluginList : public std::list { public: - void add(QFileInfo* fi, const LADSPA_Descriptor* d, bool isDssi = false) + void add(QFileInfo* fi, const LADSPA_Descriptor* d, bool isDssi = false, bool isDssiSynth = false) { - push_back(Plugin(fi, d, isDssi)); + push_back(Plugin(fi, d, isDssi, isDssiSynth)); } Plugin* find(const QString&, const QString&); @@ -211,7 +208,6 @@ //--------------------------------------------------------- struct Port { - //int idx; unsigned long idx; float val; float tmpVal; @@ -236,7 +232,7 @@ PluginIBase(); ~PluginIBase(); virtual bool on() const = 0; - virtual void setOn(bool /*val*/) = 0; + virtual void setOn(bool val) = 0; virtual unsigned long pluginID() = 0; virtual int id() = 0; virtual QString pluginLabel() const = 0; @@ -248,64 +244,36 @@ virtual AudioTrack* track() = 0; - virtual void enableController(unsigned long /*i*/, bool /*v*/ = true) = 0; - virtual bool controllerEnabled(unsigned long /*i*/) const = 0; - virtual bool controllerEnabled2(unsigned long /*i*/) const = 0; + virtual void enableController(unsigned long i, bool v = true) = 0; + virtual bool controllerEnabled(unsigned long i) const = 0; + virtual void enable2Controller(unsigned long i, bool v = true) = 0; + virtual bool controllerEnabled2(unsigned long i) const = 0; + virtual void enableAllControllers(bool v = true) = 0; + virtual void enable2AllControllers(bool v = true) = 0; virtual void updateControllers() = 0; - virtual void writeConfiguration(int /*level*/, Xml& /*xml*/) = 0; - virtual bool readConfiguration(Xml& /*xml*/, bool /*readPreset*/=false) = 0; + virtual void writeConfiguration(int level, Xml& xml) = 0; + virtual bool readConfiguration(Xml& xml, bool readPreset=false) = 0; + virtual bool addScheduledControlEvent(unsigned long i, float val, unsigned frame); // returns true if event cannot be delivered virtual unsigned long parameters() const = 0; virtual unsigned long parametersOut() const = 0; - virtual void setParam(unsigned long /*i*/, float /*val*/) = 0; - virtual float param(unsigned long /*i*/) const = 0; - virtual float paramOut(unsigned long /*i*/) const = 0; - virtual const char* paramName(unsigned long /*i*/) = 0; - virtual const char* paramOutName(unsigned long /*i*/) = 0; - virtual LADSPA_PortRangeHint range(unsigned long /*i*/) = 0; - virtual LADSPA_PortRangeHint rangeOut(unsigned long /*i*/) = 0; + virtual void setParam(unsigned long i, float val) = 0; + virtual float param(unsigned long i) const = 0; + virtual float paramOut(unsigned long i) const = 0; + virtual const char* paramName(unsigned long i) = 0; + virtual const char* paramOutName(unsigned long i) = 0; + virtual LADSPA_PortRangeHint range(unsigned long i) = 0; + virtual LADSPA_PortRangeHint rangeOut(unsigned long i) = 0; - virtual CtrlValueType ctrlValueType(unsigned long /*i*/) const = 0; - virtual CtrlList::Mode ctrlMode(unsigned long /*i*/) const = 0; + virtual CtrlValueType ctrlValueType(unsigned long i) const = 0; + virtual CtrlList::Mode ctrlMode(unsigned long i) const = 0; QString dssi_ui_filename() const; MusEGui::PluginGui* gui() const { return _gui; } void deleteGui(); }; -/* -class PluginBase -{ - public: - bool on() const { return _on; } - void setOn(bool val) { _on = val; } - int pluginID() { return plugin()->id(); } - int id() { return _id; } - QString pluginLabel() const { return _plugin->label(); } - QString name() const { return _name; } - - AudioTrack* track() { return _track; } - - void enableController(int i, bool v = true) { controls[i].enCtrl = v; } - bool controllerEnabled(int i) const { return controls[i].enCtrl; } - bool controllerEnabled2(int i) const { return controls[i].en2Ctrl; } - void updateControllers(); - - void writeConfiguration(int level, Xml& xml); - bool readConfiguration(Xml& xml, bool readPreset=false); - - int parameters() const { return controlPorts; } - void setParam(int i, double val) { controls[i].tmpVal = val; } - double param(int i) const { return controls[i].val; } - const char* paramName(int i) { return _plugin->portName(controls[i].idx); } - LADSPA_PortRangeHint range(int i) - { - return _plugin->range(controls[i].idx); - } -}; -*/ - //--------------------------------------------------------- // PluginI // plugin instance @@ -328,23 +296,17 @@ unsigned long controlPorts; unsigned long controlOutPorts; - ///PluginGui* _gui; bool _on; bool initControlValues; QString _name; QString _label; - //#ifdef DSSI_SUPPORT - //StringParamMap _stringParamMap; - //#endif - #ifdef OSC_SUPPORT OscEffectIF _oscif; #endif bool _showNativeGuiPending; void init(); - ///void makeGui(); public: PluginI(); @@ -353,8 +315,6 @@ Plugin* plugin() const { return _plugin; } bool on() const { return _on; } void setOn(bool val) { _on = val; } - ///PluginGui* gui() const { return _gui; } - ///void deleteGui(); void setTrack(AudioTrack* t) { _track = t; } AudioTrack* track() { return _track; } @@ -387,17 +347,10 @@ #ifdef OSC_SUPPORT OscEffectIF& oscIF() { return _oscif; } - /* - int oscConfigure(lo_arg**); - int oscControl(lo_arg**); - //int oscUpdate(lo_arg**); - //int oscExiting(lo_arg**); - */ - int oscControl(unsigned long /*dssiPort*/, float /*val*/); - int oscConfigure(const char */*key*/, const char */*val*/); + int oscControl(unsigned long dssiPort, float val); + int oscConfigure(const char *key, const char *val); int oscUpdate(); - //int oscExiting(); #endif void writeConfiguration(int level, Xml& xml); @@ -453,7 +406,6 @@ QString name(int idx) const; void showGui(int, bool); bool isDssiPlugin(int) const; - //QString dssi_ui_filename(int) const; bool has_dssi_ui(int idx) const; void showNativeGui(int, bool); void deleteGui(int idx); @@ -464,6 +416,10 @@ void move(int idx, bool up); bool empty(int idx) const; void setChannels(int); + bool addScheduledControlEvent(int track_ctrl_id, float val, unsigned frame); // returns true if event cannot be delivered + void enableController(int track_ctrl_id, bool en); + void enable2Controller(int track_ctrl_id, bool en); + void controllersEnabled(int track_ctrl_id, bool* en1, bool* en2); }; typedef Pipeline::iterator iPluginI; @@ -477,7 +433,6 @@ extern float midi2LadspaValue(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum, int val); extern CtrlValueType ladspaCtrlValueType(const LADSPA_Descriptor* plugin, int port); extern CtrlList::Mode ladspaCtrlMode(const LADSPA_Descriptor* plugin, int port); -//extern MidiController* ladspa2MidiController(const LADSPA_Descriptor* plugin, unsigned long port, int ctlnum); } // namespace MusECore @@ -550,7 +505,7 @@ void load(); void save(); void bypassToggled(bool); - void sliderChanged(double, int); + void sliderChanged(double, int, bool); void labelChanged(double, int); void guiParamChanged(int); void ctrlPressed(int); @@ -561,6 +516,7 @@ void guiSliderReleased(int); void ctrlRightClicked(const QPoint &, int); void guiSliderRightClicked(const QPoint &, int); + void guiContextMenuReq(int idx); protected slots: void heartBeat(); @@ -599,8 +555,6 @@ void accept(); void reject(); void fillPlugs(QAbstractButton*); - //void fillPlugs(int i); - //void fillPlugs(const QString& sortValue); void fillPlugs(); private slots: @@ -610,8 +564,6 @@ QComboBox *sortBox; static int selectedPlugType; static QStringList sortItems; - //static int sortColumn; - //static Qt::SortOrder sortOrder; static QRect geometrySave; static QByteArray listSave; }; diff -Nru muse-2.0~rc2/muse/pos.cpp muse-2.0/muse/pos.cpp --- muse-2.0~rc2/muse/pos.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/pos.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -458,8 +458,7 @@ { _lenTick = len; sn = -1; -// if (type() == FRAMES) - _lenFrame = MusEGlobal::tempomap.deltaTick2frame(tick(), tick() + len, &sn); + _lenFrame = MusEGlobal::tempomap.deltaTick2frame(tick(), tick() + len, &sn); } //--------------------------------------------------------- @@ -470,8 +469,7 @@ { _lenFrame = len; sn = -1; -// if (type() == TICKS) - _lenTick = MusEGlobal::tempomap.deltaFrame2tick(frame(), frame() + len, &sn); + _lenTick = MusEGlobal::tempomap.deltaFrame2tick(frame(), frame() + len, &sn); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/remote/pyapi.cpp muse-2.0/muse/remote/pyapi.cpp --- muse-2.0~rc2/muse/remote/pyapi.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/remote/pyapi.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -1128,11 +1128,12 @@ pipeline->setOn(fxid, onoff); break; } - case QPybridgeEvent::SONG_ADD_TRACK: + case QPybridgeEvent::SONG_ADD_TRACK: { MusECore::Undo operations; MusEGlobal::song->addTrack(operations, (Track::TrackType)e->getP1()); // Add at end of list. MusEGlobal::song->applyOperationGroup(operations); break; + } case QPybridgeEvent::SONG_CHANGE_TRACKNAME: { Track* t = this->findTrack(e->getS1()); if (t == NULL) diff -Nru muse-2.0~rc2/muse/route.cpp muse-2.0/muse/route.cpp --- muse-2.0~rc2/muse/route.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/route.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -173,9 +173,7 @@ { if (*i == src) // route already there { - //#ifdef ROUTE_DEBUG fprintf(stderr, "addRoute: src track route already exists.\n"); - //#endif return; } } @@ -195,9 +193,7 @@ { if (*i == src) // route already there { - //#ifdef ROUTE_DEBUG fprintf(stderr, "addRoute: src Jack midi route already exists.\n"); - //#endif return; } } @@ -262,9 +258,7 @@ { if (*i == dst) // route already there { - //#ifdef ROUTE_DEBUG fprintf(stderr, "addRoute: dst Jack midi route already exists.\n"); - //#endif return; } } @@ -295,13 +289,7 @@ MidiPort *mp = &MusEGlobal::midiPorts[src.midiPort]; - // Do not allow ports with synth midi devices to connect to audio ins! p4.0.17 - //if(dst.track->type() == Track::AUDIO_INPUT && mp->device() && mp->device()->isSynti()) - //{ - // fprintf(stderr, "addRoute: destination is audio in, but source midi port:%d is synth device\n", src.midiPort); - // return; - //} - // Actually, do not allow synth ports to connect to any track. It may be useful in some cases, + // Do not allow synth ports to connect to any track. It may be useful in some cases, // may be desired later, but for now it's just a routing hassle. p4.0.35 if(mp->device() && mp->device()->isSynti()) return; @@ -311,14 +299,7 @@ fprintf(stderr, "addRoute: source is midi port:%d, but destination channel mask:%d out of range\n", src.midiPort, dst.channel); return; } - - //MidiDevice *md = MusEGlobal::midiPorts[src.midiPort].device(); - //if(!md) - //{ - // fprintf(stderr, "addRoute: source is midi port, but no destination port device\n"); - // return; - //} - + src.channel = dst.channel; RouteList* outRoutes = mp->outRoutes(); iRoute ir = outRoutes->begin(); @@ -366,13 +347,6 @@ return; } - //MidiDevice *md = MusEGlobal::midiPorts[dst.midiPort].device(); - //if(!md) - //{ - // fprintf(stderr, "addRoute: dst is midi port, but no destination port device\n"); - // return; - //} - dst.channel = src.channel; RouteList* outRoutes = src.track->outRoutes(); @@ -437,7 +411,7 @@ for (ciRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { if (*i == dst) // route already there - // TODO: + // TODO: DELETETHIS all these comments wtf? //if (i->type == dst.type && i->channel == dst.channel) { //if(i->type == Route::TRACK_ROUTE) @@ -463,29 +437,23 @@ RouteList* inRoutes; #ifdef ROUTE_DEBUG - //fprintf(stderr, "addRoute: src track ch:%d chs:%d dst track ch:%d chs:%d name: %s pushing destination and source routes\n", src.channel, src.channels, dst.channel, dst.channels, dst.track->name().toLatin1().constData()); fprintf(stderr, "addRoute: src track ch:%d chs:%d remch:%d dst track ch:%d chs:%d remch:%d name: %s pushing dest and source routes\n", src.channel, src.channels, src.remoteChannel, dst.channel, dst.channels, dst.remoteChannel, dst.track->name().toLatin1().constData()); - //fprintf(stderr, "addRoute: src track ch:%d dst track ch:%d name: %s pushing destination and source routes\n", src.channel, dst.channel, dst.track->name().toLatin1().constData()); #endif inRoutes = dst.track->inRoutes(); - // // make sure AUDIO_AUX is processed last - // if (src.track->type() == Track::AUDIO_AUX) // REMOVE Tim. This special aux code may not be useful or needed now. - inRoutes->push_back(src); // + inRoutes->push_back(src); // so DELETETHIS? else inRoutes->insert(inRoutes->begin(), src); // Is the source an Aux Track or else does it have Aux Tracks routed to it? // Update the destination track's aux ref count, and all tracks it is routed to. if(src.track->auxRefCount()) - //dst.track->updateAuxStates( src.track->auxRefCount() ); src.track->updateAuxRoute( src.track->auxRefCount(), dst.track ); else if(src.track->type() == Track::AUDIO_AUX) - //dst.track->updateAuxStates( 1 ); src.track->updateAuxRoute( 1, dst.track ); } } @@ -496,10 +464,6 @@ void removeRoute(Route src, Route dst) { - //printf("removeRoute %d.%d:<%s> %d.%d:<%s>\n", - // src.type, src.channel, src.name().toLatin1().constData(), - // dst.type, dst.channel, dst.name().toLatin1().constData()); - if (src.type == Route::JACK_ROUTE) { if(!dst.isValid()) @@ -701,11 +665,9 @@ if(src.isValid() && dst.isValid()) { if(src.track->auxRefCount()) - //dst.track->updateAuxStates( -src.track->auxRefCount() ); src.track->updateAuxRoute( -src.track->auxRefCount(), dst.track ); else if(src.track->type() == Track::AUDIO_AUX) - //dst.track->updateAuxStates( -1 ); src.track->updateAuxRoute( -1, dst.track ); } @@ -755,7 +717,7 @@ { // TODO: Is the source an Aux Track or else does it have Aux Tracks routed to it? // Update the destination track's aux ref count, and all tracks it is routed to. - /* if(src.isValid() && dst.isValid()) + /* if(src.isValid() && dst.isValid()) DELETETHIS 8 { if(src.track->auxRefCount()) dst.track->updateAuxStates( -src.track->auxRefCount() ); @@ -804,6 +766,7 @@ { if(device) { + // DELETETHIS 6 // For unified jack in/out devices, the actual port names are now different from device name. // Like this: device: "MyJackDevice1" -> inport: "MyJackDevice1_in" outport: "MyJackDevice1_out" /* @@ -835,10 +798,8 @@ // name2route //--------------------------------------------------------- -//Route name2route(const QString& rn, bool dst) Route name2route(const QString& rn, bool /*dst*/, int rtype) { -// printf("name2route %s\n", rn.toLatin1().constData()); int channel = -1; QString s(rn); // Support old route style in med files. Obsolete. @@ -919,7 +880,7 @@ if((*i)->name() == s) return Route(*i, channel); - /* + /* DELETETHIS 16? MidiJackDevice* jmd = dynamic_cast(*i); if(jmd) { @@ -1049,9 +1010,6 @@ } } } - //else if (dst.type == Route::MIDI_PORT_ROUTE) - //{ - //} else { RouteList* outRoutes = (src.type == Route::MIDI_DEVICE_ROUTE) ? src.device->outRoutes() : src.track->outRoutes(); @@ -1086,9 +1044,6 @@ case Xml::Error: case Xml::End: return; - //case Xml::TagStart: - // xml.unknown("Route"); - // break; case Xml::Attribut: #ifdef ROUTE_DEBUG printf("Route::read(): attribute:%s\n", tag.toLatin1().constData()); @@ -1310,7 +1265,6 @@ } else { - //printf("adding new route...\n"); addRoute(sroute, droute); } } @@ -1331,12 +1285,7 @@ void RouteList::removeRoute(const Route& r) { - //printf("RouteList::removeRoute:\n"); - //r.dump(); - //printf("Searching routes:\n"); - for (iRoute i = begin(); i != end(); ++i) { - //i->dump(); if (r == *i) { erase(i); return; @@ -1355,9 +1304,6 @@ { if(track) printf("Route dump: track <%s> channel %d channels %d\n", track->name().toLatin1().constData(), channel, channels); - //printf("Route dump: track <%s> channel %d\n", track->name().toLatin1().constData(), channel); - //else - // printf("Route dump: invalid track, channel %d\n", channel); } else if (type == JACK_ROUTE) @@ -1413,16 +1359,7 @@ bool Route::operator==(const Route& a) const { - //if (type == MIDI_PORT_ROUTE) // p3.3.50 - //{ - // Use new channel mask. True if all the bits in a.channel are contained in this route's channel. - // Hmm, not commutative... Two such routes are equal if _____ what? ... Code-specific for now. - // return midiPort == a.midiPort && (channel & a.channel) == a.channel; - //} - //else - if ((type == a.type) && (channel == a.channel)) - //if (type == a.type) { if (type == TRACK_ROUTE) { @@ -1433,8 +1370,8 @@ { if (type == JACK_ROUTE) { - //if (!MusEGlobal::checkAudioDevice()) return false; - //return MusEGlobal::audioDevice->portName(jackPort) == MusEGlobal::audioDevice->portName(a.jackPort); + //if (!MusEGlobal::checkAudioDevice()) return false; DELETETHIS? or keep? + //else return MusEGlobal::audioDevice->portName(jackPort) == MusEGlobal::audioDevice->portName(a.jackPort); return jackPort == a.jackPort; // Simplified. } else @@ -1452,7 +1389,7 @@ return false; } -/* +/* yaaaay, depth search. just wrote an exam about that. but DELETETHIS, looks unused //--------------------------------------------------------- // isCircularRoute // Recursive. @@ -1462,10 +1399,6 @@ bool isCircularRoutePath(Track* src, Track* dst) { - //if(isMidiTrack() || _type == AUDIO_AUX) - //if(isMidiTrack()) - // return; - bool rv = false; if(dst) @@ -1473,8 +1406,6 @@ src->setNodeTraversed(true); rv = isCircularRoutePath(dst, NULL); src->setNodeTraversed(false); - //if(rv) - // fprintf(stderr, " Circular route %s -> %s\n", src->name().toLatin1().constData(), dst->name().toLatin1().constData()); return rv; } @@ -1483,8 +1414,6 @@ src->setNodeTraversed(true); - //printf("isCircularRoute %s\n", src->name().toLatin1().constData()); - RouteList* orl = src->outRoutes(); for (iRoute i = orl->begin(); i != orl->end(); ++i) { diff -Nru muse-2.0~rc2/muse/route.h muse-2.0/muse/route.h --- muse-2.0~rc2/muse/route.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/route.h 2012-06-30 19:24:43.000000000 +0200 @@ -105,17 +105,7 @@ extern void removeAllRoutes(Route, Route); // p3.3.55 extern Route name2route(const QString&, bool dst, int rtype = -1); extern bool checkRoute(const QString&, const QString&); -//extern bool isCircularRoutePath(Track* src, Track* dst); // Recursive. - -//--------------------------------------------------------- -// RouteMenuMap -//--------------------------------------------------------- - -//typedef std::map >::iterator iRouteMenuMap; -//typedef std::map >::const_iterator ciRouteMenuMap; -//typedef std::map > RouteMenuMap; -//typedef std::pair pRouteMenuMap; -//typedef std::pair rpRouteMenuMap; +//extern bool isCircularRoutePath(Track* src, Track* dst); // Recursive. DELETETHIS } // namespace MusECore diff -Nru muse-2.0~rc2/muse/seqmsg.cpp muse-2.0/muse/seqmsg.cpp --- muse-2.0~rc2/muse/seqmsg.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/muse/seqmsg.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -46,6 +46,7 @@ // sendMsg //--------------------------------------------------------- +// this function blocks until the request has been processed void Audio::sendMsg(AudioMsg* m) { static int sno = 0; @@ -83,7 +84,7 @@ MusEGlobal::song->startUndo(); sendMsg(m); if (doUndo) - MusEGlobal::song->endUndo(0); // MusEGlobal::song->endMsgCmd(); + MusEGlobal::song->endUndo(0); return false; } @@ -94,22 +95,17 @@ void Audio::msgRemoveRoute(Route src, Route dst) { msgRemoveRoute1(src, dst); - //if (!MusEGlobal::checkAudioDevice()) return; if (src.type == Route::JACK_ROUTE) { if (!MusEGlobal::checkAudioDevice()) return; - //if(dst.type == Route::JACK_MIDI_ROUTE) if(dst.type == Route::MIDI_DEVICE_ROUTE) { - //MidiJackDevice* jmd = dynamic_cast(dst.device); - //if(jmd) if(dst.device) { if(dst.device->deviceType() == MidiDevice::JACK_MIDI) - //MusEGlobal::audioDevice->disconnect(src.jackPort, dst.device->clientPort()); MusEGlobal::audioDevice->disconnect(src.jackPort, dst.device->inClientPort()); // p3.3.55 - //else + //else DELETETHIS //{ // TODO... //MidiAlsaDevice* amd = dynamic_cast(dst.device); @@ -124,17 +120,16 @@ { if (!MusEGlobal::checkAudioDevice()) return; - //if(src.type == Route::JACK_MIDI_ROUTE) + //if(src.type == Route::JACK_MIDI_ROUTE) DELETETHIS if(src.type == Route::MIDI_DEVICE_ROUTE) { - //MidiJackDevice* jmd = dynamic_cast(src.device); + //MidiJackDevice* jmd = dynamic_cast(src.device); DELETETHIS //if(jmd) if(src.device) { if(src.device->deviceType() == MidiDevice::JACK_MIDI) - //MusEGlobal::audioDevice->disconnect(src.device->clientPort(), dst.jackPort); MusEGlobal::audioDevice->disconnect(src.device->outClientPort(), dst.jackPort); // p3.3.55 - //else + //else DELETETHIS //{ // TODO... //MidiAlsaDevice* amd = dynamic_cast(src.device); @@ -169,7 +164,7 @@ { msgRemoveRoutes1(src, dst); - // TODO + // TODO or DELETETHIS? looks old. /* //if (!MusEGlobal::checkAudioDevice()) return; if (src.type == Route::JACK_ROUTE) @@ -230,7 +225,6 @@ // msgRemoveRoutes1 //--------------------------------------------------------- -// p3.3.55 void Audio::msgRemoveRoutes1(Route src, Route dst) { AudioMsg msg; @@ -251,22 +245,12 @@ if (!MusEGlobal::checkAudioDevice()) return; if (isRunning()) { - //if(dst.type == Route::JACK_MIDI_ROUTE) if(dst.type == Route::MIDI_DEVICE_ROUTE) { - //MidiJackDevice* jmd = dynamic_cast(dst.device); - //if(jmd) if(dst.device) { if(dst.device->deviceType() == MidiDevice::JACK_MIDI) - //MusEGlobal::audioDevice->connect(src.jackPort, dst.device->clientPort()); - MusEGlobal::audioDevice->connect(src.jackPort, dst.device->inClientPort()); // p3.3.55 - //else - //{ - // TODO... - //MidiAlsaDevice* amd = dynamic_cast(dst.device); - //if(amd) - //} + MusEGlobal::audioDevice->connect(src.jackPort, dst.device->inClientPort()); } } else @@ -278,22 +262,12 @@ if (!MusEGlobal::checkAudioDevice()) return; if (MusEGlobal::audio->isRunning()) { - //if(src.type == Route::JACK_MIDI_ROUTE) if(src.type == Route::MIDI_DEVICE_ROUTE) { - //MidiJackDevice* jmd = dynamic_cast(src.device); - //if(jmd) if(src.device) { if(src.device->deviceType() == MidiDevice::JACK_MIDI) - //MusEGlobal::audioDevice->connect(src.device->clientPort(), dst.jackPort); - MusEGlobal::audioDevice->connect(src.device->outClientPort(), dst.jackPort); // p3.3.55 - //else - //{ - // TODO... - //MidiAlsaDevice* amd = dynamic_cast(src.device); - //if(amd) - //} + MusEGlobal::audioDevice->connect(src.device->outClientPort(), dst.jackPort); } } else @@ -343,7 +317,7 @@ sendMsg(&msg); } -/* +/* DELETETHIS 34 //--------------------------------------------------------- // msgSetVolume //--------------------------------------------------------- @@ -411,7 +385,6 @@ { char buffer[128]; snprintf(buffer, 128, "%s-%d", name.toLatin1().constData(), i); - //ai->setJackPort(i, MusEGlobal::audioDevice->registerInPort(buffer)); ai->setJackPort(i, MusEGlobal::audioDevice->registerInPort(buffer, false)); } else if ((i >= n) && ai->jackPort(i)) @@ -442,7 +415,6 @@ { char buffer[128]; snprintf(buffer, 128, "%s-%d", name.toLatin1().constData(), i); - //ao->setJackPort(i, MusEGlobal::audioDevice->registerOutPort(buffer)); ao->setJackPort(i, MusEGlobal::audioDevice->registerOutPort(buffer, false)); } else if (i >= n && jp) @@ -464,6 +436,7 @@ } } + // DELETETHIS 47 /* TODO TODO: Change all stereo routes to mono. // If we are going from stereo to mono we need to disconnect any stray synti 'mono last channel'... if(n == 1 && node->channels() > 1) @@ -517,13 +490,11 @@ sendMsg(&msg); } -/* +/* DELETETHIS 20 //--------------------------------------------------------- // msgSetPluginCtrlVal //--------------------------------------------------------- -//void Audio::msgSetPluginCtrlVal(PluginI* plugin, int param, double val) -// p3.3.43 void Audio::msgSetPluginCtrlVal(AudioTrack* track, int param, double val) { AudioMsg msg; @@ -552,8 +523,6 @@ msg.a = idx1; msg.b = idx2; sendMsg(&msg); - //muse->arranger->controllerChanged(node); - MusEGlobal::song->controllerChange(node); } //--------------------------------------------------------- @@ -568,8 +537,6 @@ msg.snode = node; msg.ival = acid; sendMsg(&msg); - //muse->arranger->controllerChanged(node); - MusEGlobal::song->controllerChange(node); } //--------------------------------------------------------- @@ -613,8 +580,6 @@ msg.ival = acid; msg.a = frame; sendMsg(&msg); - //muse->arranger->controllerChanged(node); - MusEGlobal::song->controllerChange(node); } //--------------------------------------------------------- @@ -631,8 +596,6 @@ msg.a = frame1; msg.b = frame2; sendMsg(&msg); - //muse->arranger->controllerChanged(node); - MusEGlobal::song->controllerChange(node); } //--------------------------------------------------------- @@ -649,8 +612,6 @@ msg.a = frame; msg.dval = val; sendMsg(&msg); - //muse->arranger->controllerChanged(node); - MusEGlobal::song->controllerChange(node); } //--------------------------------------------------------- @@ -668,8 +629,6 @@ msg.b = newFrame; msg.dval = val; sendMsg(&msg); - //muse->arranger->controllerChanged(node); - MusEGlobal::song->controllerChange(node); } //--------------------------------------------------------- @@ -705,12 +664,7 @@ void Audio::msgSeek(const Pos& pos) { if (!MusEGlobal::checkAudioDevice()) return; - //MusEGlobal::audioDevice->seekTransport(pos.frame()); - // p3.3.23 - //printf("Audio::msgSeek before MusEGlobal::audioDevice->seekTransport frame:%d\n", pos.frame()); MusEGlobal::audioDevice->seekTransport(pos); - // p3.3.23 - //printf("Audio::msgSeek after MusEGlobal::audioDevice->seekTransport frame:%d\n", pos.frame()); } //--------------------------------------------------------- @@ -747,7 +701,6 @@ unsigned sfr = MusEGlobal::song->cPos().frame(); unsigned dcfr = MusEGlobal::audioDevice->getCurFrame(); if(dcfr != sfr) - //MusEGlobal::audioDevice->seekTransport(sfr); MusEGlobal::audioDevice->seekTransport(MusEGlobal::song->cPos()); MusEGlobal::audioDevice->startTransport(); } @@ -759,7 +712,7 @@ } } -/* +/* DELETETHIS 31 //--------------------------------------------------------- // msgShowInstrumentGui //--------------------------------------------------------- @@ -849,7 +802,7 @@ } while (loop); - /* + /* DELETETHIS 28 // TESTED: DIDN'T WORK: It still skipped some selected tracks ! // Quote from SGI STL: "Erasing an element from a map also does not invalidate any iterators, // except, of course, for iterators that actually point to the element @@ -879,7 +832,7 @@ } -/* +/* DELETETHIS 18 //--------------------------------------------------------- // msgChangeTrack // oldTrack - copy of the original track befor modification @@ -971,7 +924,6 @@ // msgChangePart //--------------------------------------------------------- -//void Audio::msgChangePart(Part* oldPart, Part* newPart, bool doUndoFlag) void Audio::msgChangePart(Part* oldPart, Part* newPart, bool doUndoFlag, bool doCtrls, bool doClones) { AudioMsg msg; @@ -987,7 +939,6 @@ // msgAddEvent //--------------------------------------------------------- -//void Audio::msgAddEvent(Event& event, Part* part, bool doUndoFlag) void Audio::msgAddEvent(Event& event, Part* part, bool doUndoFlag, bool doCtrls, bool doClones) { AudioMsg msg; @@ -1003,7 +954,6 @@ // msgDeleteEvent //--------------------------------------------------------- -//void Audio::msgDeleteEvent(Event& event, Part* part, bool doUndoFlag) void Audio::msgDeleteEvent(Event& event, Part* part, bool doUndoFlag, bool doCtrls, bool doClones) { AudioMsg msg; @@ -1019,7 +969,6 @@ // msgChangeEvent //--------------------------------------------------------- -//void Audio::msgChangeEvent(Event& oe, Event& ne, Part* part, bool doUndoFlag) void Audio::msgChangeEvent(Event& oe, Event& ne, Part* part, bool doUndoFlag, bool doCtrls, bool doClones) { AudioMsg msg; @@ -1289,6 +1238,19 @@ } //--------------------------------------------------------- +// msgSetTrackAutomationType +//--------------------------------------------------------- + +void Audio::msgSetTrackAutomationType(Track* track, int type) +{ + AudioMsg msg; + msg.id = SEQM_SET_TRACK_AUTO_TYPE; + msg.track = track; + msg.ival = type; + sendMessage(&msg, false); +} + +//--------------------------------------------------------- // msgRemapPortDrumCtlEvents //--------------------------------------------------------- @@ -1330,6 +1292,18 @@ } //--------------------------------------------------------- +// msgStartMidiLearn +// Start learning midi +//--------------------------------------------------------- + +void Audio::msgStartMidiLearn() +{ + AudioMsg msg; + msg.id = AUDIO_START_MIDI_LEARN; + sendMessage(&msg, false); +} + +//--------------------------------------------------------- // msgBounce // start bounce operation //--------------------------------------------------------- @@ -1338,7 +1312,6 @@ { _bounce = true; if (!MusEGlobal::checkAudioDevice()) return; - //MusEGlobal::audioDevice->seekTransport(MusEGlobal::song->lPos().frame()); MusEGlobal::audioDevice->seekTransport(MusEGlobal::song->lPos()); } diff -Nru muse-2.0~rc2/muse/shortcuts.h muse-2.0/muse/shortcuts.h --- muse-2.0~rc2/muse/shortcuts.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/shortcuts.h 2012-06-30 19:24:43.000000000 +0200 @@ -4,12 +4,12 @@ // $Id: ./muse/shortcuts.h $ // // Copyright (C) 1999-2011 by Werner Schweer and others +// // Author: Mathias Lundgren , (C) 2003 // // Copyright: Mathias Lundgren (lunar_shuttle@users.sourceforge.net) (C) 2003 // // -// // This program is free software; you can redistribute it and/or // modify it under the terms of the GNU General Public License // as published by the Free Software Foundation; version 2 of diff -Nru muse-2.0~rc2/muse/sig.cpp muse-2.0/muse/sig.cpp --- muse-2.0~rc2/muse/sig.cpp 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/muse/sig.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -1,3 +1,5 @@ +// THIS FILE IS ORPHANED: nothing uses its functions + //========================================================= // MusE // Linux Music Editor @@ -84,7 +86,6 @@ void SigList::del(unsigned tick) { -// printf("SigList::del(%d)\n", tick); iSigEvent e = find(tick); if (e == end()) { printf("SigList::del(%d): not found\n", tick); @@ -98,7 +99,7 @@ } ne->second->z = e->second->z; ne->second->n = e->second->n; - ne->second->tick = e->second->tick; + ne->second->tick = e->second->tick; erase(e); normalize(); } @@ -133,7 +134,7 @@ int ticksB = ticks_beat(e->second->n); int ticksM = ticksB * e->second->z; bar += delta / ticksM; - if (delta % ticksM) // Teil eines Taktes + if (delta % ticksM) // Part of a measure ++bar; ++e; } @@ -175,7 +176,6 @@ ciSigEvent i = upper_bound(tick); if (i == end()) { printf("ticksMeasure: not found %d\n", tick); - // abort(); return 0; } return ticksMeasure(i->second->z, i->second->n); @@ -223,7 +223,6 @@ ciSigEvent i = upper_bound(tick); if (i == end()) { printf("timesig(%d): not found\n", tick); - // abort(); z = 4; n = 4; } @@ -242,7 +241,6 @@ ciSigEvent e = upper_bound(t); if (e == end()) { fprintf(stderr, "tickValues(0x%x) not found(%zd)\n", t, size()); - // abort(); *bar = 0; *beat = 0; *tick = 0; @@ -293,7 +291,6 @@ ciSigEvent e = upper_bound(t); if (e == end()) { printf("SigList::raster(%x,)\n", t); - // abort(); return t; } int delta = t - e->second->tick; diff -Nru muse-2.0~rc2/muse/sig.h muse-2.0/muse/sig.h --- muse-2.0~rc2/muse/sig.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/sig.h 2012-06-30 19:24:43.000000000 +0200 @@ -1,3 +1,5 @@ +// THIS FILE IS ORPHANED: nothing uses its functions + //========================================================= // MusE // Linux Music Editor @@ -39,8 +41,8 @@ //--------------------------------------------------------- struct SigEvent { - int z, n; // takt signatur - unsigned tick; // ab dieser Position gilt signatur + int z, n; // beat signature + unsigned tick; // valid from this position int bar; // precomputed int read(Xml&); diff -Nru muse-2.0~rc2/muse/song.cpp muse-2.0/muse/song.cpp --- muse-2.0~rc2/muse/song.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/song.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -57,13 +57,13 @@ #include "sync.h" #include "midictrl.h" #include "menutitleitem.h" +#include "midi_audio_control.h" #include "tracks_duplicate.h" #include "midi.h" -///#include "sig.h" #include "al/sig.h" #include "keyevent.h" #include -//#include "utils.h" +#include "tempo.h" namespace MusEGlobal { MusECore::Song* song = 0; @@ -86,8 +86,8 @@ noteFifoSize = 0; noteFifoWindex = 0; noteFifoRindex = 0; - undoList = new UndoList; - redoList = new UndoList; + undoList = new UndoList(true); // "true" means "this is an undoList", + redoList = new UndoList(false); // "false" means "redoList" _markerList = new MarkerList; _globalPitchShift = 0; bounceTrack = NULL; @@ -158,7 +158,6 @@ Track* Song::addNewTrack(QAction* action, Track* insertAt) { -printf("Song::addNewTrack\n"); int n = action->data().toInt(); // Ignore negative numbers since this slot could be called by a menu or list etc. passing -1. if(n < 0) @@ -176,7 +175,9 @@ if(n >= (int)MusEGlobal::synthis.size()) return 0; - //printf("Song::addNewTrack synth: type:%d idx:%d class:%s label:%s\n", ntype, n, MusEGlobal::synthis[n]->baseName().toLatin1().constData(), MusEGlobal::synthis[n]->name().toLatin1().constData()); + if (MusEGlobal::debugMsg) + printf("Song::addNewTrack synth: type:%d idx:%d class:%s label:%s\n", ntype, n, MusEGlobal::synthis[n]->baseName().toLatin1().constData(), MusEGlobal::synthis[n]->name().toLatin1().constData()); + SynthI* si = createSynthI(MusEGlobal::synthis[n]->baseName(), MusEGlobal::synthis[n]->name(), (Synth::Type)ntype, insertAt); if(!si) return 0; @@ -234,9 +235,8 @@ // If insertAt is valid, inserts before insertAt. Else at the end after all tracks. //--------------------------------------------------------- -Track* Song::addTrack(Undo& operations, Track::TrackType type, Track* insertAt) +Track* Song::addTrack(Undo& /*operations*/, Track::TrackType type, Track* insertAt) { - printf("Song::addTrack\n"); Track* track = 0; int lastAuxIdx = _auxs.size(); switch(type) { @@ -287,10 +287,12 @@ int idx = insertAt ? _tracks.index(insertAt) : -1; - // insertTrack1(track, idx); // this and the below are replaced - // msgInsertTrack(track, idx, true); // by the UndoOp-operation - // insertTrack3(track, idx); // does nothing - operations.push_back(UndoOp(UndoOp::AddTrack, idx, track)); + insertTrack1(track, idx); // this and the below are replaced + msgInsertTrack(track, idx, true); // by the UndoOp-operation + insertTrack3(track, idx); // does nothing + // No, can't do this. insertTrack2 needs to be called now, not later, otherwise it sees + // that the track may have routes, and reciprocates them, causing duplicate routes. + ///operations.push_back(UndoOp(UndoOp::AddTrack, idx, track)); // Add default track <-> midiport routes. if(track->isMidiTrack()) @@ -349,17 +351,8 @@ if (!ol->empty()) { AudioOutput* ao = ol->front(); switch(type) { - //case Track::MIDI: - //case Track::DRUM: - //case Track::AUDIO_OUTPUT: - // break; - case Track::WAVE: - //case Track::AUDIO_GROUP: // Removed by Tim. case Track::AUDIO_AUX: - //case Track::AUDIO_INPUT: // Removed by Tim. - // p3.3.38 - //case Track::AUDIO_SOFTSYNTH: MusEGlobal::audio->msgAddRoute(Route((AudioTrack*)track, -1), Route(ao, -1)); updateFlags |= SC_ROUTE; break; @@ -398,7 +391,6 @@ continue; if(type == Track::DRUM) - //if(track->isDrumTrack()) // For Flo later with new drum tracks. ++drum_found; else if(type == Track::MIDI) @@ -456,7 +448,9 @@ // required for fine-grained control over initializing various track types. // - // Set to 0 to use the copy constructor. Set to 1 to use new + assign(). + // Set to 0 to use the copy constructor. Set to 1 to use new + assign(). + // DELETETHIS is this still necessary to keep around? + // also consider removing and adding a hint to a revision number instead #if 0 Track* new_track = 0; @@ -464,7 +458,7 @@ switch(track->type()) { case Track::AUDIO_SOFTSYNTH: // TODO: Handle synths. p4.0.47 - // ((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + // ((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); DELETETHIS? break; case Track::MIDI: @@ -474,25 +468,25 @@ case Track::DRUM: new_track = new MidiTrack(); new_track->setType(Track::DRUM); - //((MidiTrack*)new_track)->setOutChannel(9); + //((MidiTrack*)new_track)->setOutChannel(9); DELETETHIS? break; case Track::WAVE: new_track = new MusECore::WaveTrack(); - //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); DELETETHIS? break; case Track::AUDIO_OUTPUT: new_track = new AudioOutput(); break; case Track::AUDIO_GROUP: new_track = new AudioGroup(); - //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); DELETETHIS? break; case Track::AUDIO_AUX: new_track = new AudioAux(); break; case Track::AUDIO_INPUT: new_track = new AudioInput(); - //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); DELETETHIS? break; default: printf("Song::duplicateTracks: Illegal type %d\n", track->type()); @@ -526,13 +520,6 @@ update_flags |= SC_ROUTE; MusEGlobal::song->endUndo(update_flags); MusEGlobal::audio->msgUpdateSoloStates(); - - //if (t->isVisible()) - //{ - ////deselectTracks(); - //t->setSelected(true); - ////update(SC_SELECTION); - //} } //--------------------------------------------------------- @@ -576,24 +563,6 @@ (*t)->setSelected(false); } -/* -//--------------------------------------------------------- -// changeTrack -// oldTrack - copy of the original track befor modification -// newTrack - modified original track -//--------------------------------------------------------- - -void Song::changeTrack(Track* oldTrack, Track* newTrack) - { - oldTrack->setSelected(false); //?? - int idx = _tracks.index(newTrack); - - //addUndo(UndoOp(UndoOp::ModifyTrack, oldTrack, newTrack)); - addUndo(UndoOp(UndoOp::ModifyTrack, idx, oldTrack, newTrack)); - updateFlags |= SC_TRACK_MODIFIED; - } -*/ - //--------------------------------------------------------- // addEvent // return true if event was added @@ -627,9 +596,7 @@ // This can be normal for some (redundant) operations. if(MusEGlobal::debugMsg) printf("Song::changeEvent event not found in part:%s size:%zd\n", part->name().toLatin1().constData(), part->events()->size()); - // Removed by T356. Allow it to add the new event. - // (And remove the old one from the midi port controller!) - //return; + // no "return;" because: Allow it to add the new event. (And remove the old one from the midi port controller!) (tim) } else part->events()->erase(i); @@ -675,16 +642,9 @@ { MidiPart* part = (MidiPart*)(ip->second); const EventList* el = part->cevents(); - // unsigned len = part->lenTick(); // unneeded, see below. for(ciEvent ie = el->begin(); ie != el->end(); ++ie) { const Event& ev = ie->second; - // Added by T356. Do not handle events which are past the end of the part. - // Commented out by flo: yes, DO handle them! these are "hidden events" - // which may be revealed later again! - // if(ev.tick() >= len) - // break; - if(ev.type() != Controller) continue; @@ -793,18 +753,11 @@ void Song::addACEvent(AudioTrack* t, int acid, int frame, double val) { MusEGlobal::audio->msgAddACEvent(t, acid, frame, val); - emit controllerChanged(t); } void Song::changeACEvent(AudioTrack* t, int acid, int frame, int newFrame, double val) { MusEGlobal::audio->msgChangeACEvent(t, acid, frame, newFrame, val); - emit controllerChanged(t); -} - -void Song::controllerChange(Track* t) -{ - emit controllerChanged(t); } //--------------------------------------------------------- @@ -823,9 +776,6 @@ iEvent e; unsigned endTick; - // Changed by Tim. p3.3.8 - - //if (punchin()) if((MusEGlobal::audio->loopCount() > 0 && startTick > lPos().tick()) || (punchin() && startTick < lPos().tick())) { startTick = lpos(); @@ -834,28 +784,17 @@ else { s = events->begin(); -// startTick = s->first; } - // Changed by Tim. p3.3.8 - - //if (punchout()) - //{ - // endTick = rpos(); - // e = events->lower_bound(endTick); - //} - //else - //{ - // search for last noteOff: - endTick = 0; - for (iEvent i = events->begin(); i != events->end(); ++i) { - Event ev = i->second; - unsigned l = ev.endTick(); - if (l > endTick) - endTick = l; - } - // e = events->end(); - //} + // search for last noteOff: + endTick = 0; + for (iEvent i = events->begin(); i != events->end(); ++i) { + Event ev = i->second; + unsigned l = ev.endTick(); + if (l > endTick) + endTick = l; + } + if((MusEGlobal::audio->loopCount() > 0) || (punchout() && endTick > rPos().tick()) ) { endTick = rpos(); @@ -893,11 +832,6 @@ // create new part part = new MidiPart(mt); - // Changed by Tim. p3.3.8 - - // Honour the Arranger snap settings. (Set to bar by default). - //startTick = roundDownBar(startTick); - //endTick = roundUpBar(endTick); // Round the start down using the Arranger part snap raster value. startTick = AL::sigmap.raster1(startTick, arrangerRaster()); // Round the end up using the Arranger part snap raster value. @@ -933,28 +867,29 @@ if (endTick < tick) endTick = tick; } - // Added by Tim. p3.3.8 // Round the end up (again) using the Arranger part snap raster value. endTick = AL::sigmap.raster2(endTick, arrangerRaster()); - // Remove all of the part's port controller values. Indicate do not do clone parts. - removePortCtrlEvents(part, false); + + removePortCtrlEvents(part, false); // Remove all of the part's port controller values. Don't do clone parts. + // Clone the part. This doesn't increment aref count, and doesn't chain clones. // It also gives the new part a new serial number, but it is // overwritten with the old one by Song::changePart(), below. Part* newPart = part->clone(); - // Set the new part's length. - newPart->setLenTick(endTick); - // Change the part. - changePart(part, newPart); - // Manually adjust reference counts. - part->events()->incARef(-1); + + newPart->setLenTick(endTick); // Set the new part's length. + changePart(part, newPart); // Change the part. + + part->events()->incARef(-1); // Manually adjust reference counts. HACK! newPart->events()->incARef(1); - // Replace the part in the clone chain with the new part. - replaceClone(part, newPart); + + replaceClone(part, newPart); // Replace the part in the clone chain with the new part. + // Now add all of the new part's port controller values. Indicate do not do clone parts. addPortCtrlEvents(newPart, false); + // Create an undo op. Indicate do port controller values but not clone parts. addUndo(UndoOp(UndoOp::ModifyPart, part, newPart, true, false)); updateFlags |= SC_PART_MODIFIED; @@ -966,7 +901,7 @@ for (iEvent i = si; i != ei; ++i) { Event event = i->second; - // Create an undo op. Indicate do port controller values and clone parts. + // Indicate do port controller values and clone parts. addUndo(UndoOp(UndoOp::DeleteEvent, event, newPart, true, true)); // Remove the event from the new part's port controller values, and do all clone parts. removePortCtrlEvents(event, newPart, true); @@ -995,8 +930,7 @@ for (iEvent i = si; i != ei; ++i) { Event event = i->second; - // Create an undo op. Indicate that controller values and clone parts were handled. - //addUndo(UndoOp(UndoOp::DeleteEvent, event, part)); + // Indicate that controller values and clone parts were handled. addUndo(UndoOp(UndoOp::DeleteEvent, event, part, true, true)); // Remove the event from the part's port controller values, and do all clone parts. removePortCtrlEvents(event, part, true); @@ -1008,11 +942,9 @@ int tick = event.tick() - partTick; event.setTick(tick); - // Create an undo op. Indicate that controller values and clone parts were handled. - //addUndo(UndoOp(UndoOp::AddEvent, event, part)); + // Indicate that controller values and clone parts were handled. addUndo(UndoOp(UndoOp::AddEvent, event, part, true, true)); - //addEvent(event, part); if(part->events()->find(event) == part->events()->end()) part->events()->add(event); @@ -1097,7 +1029,7 @@ Track *selectedTrack = 0; // loop through list and check if any track is rec enabled // if not then rec enable the selected track - MusECore::WaveTrackList* wtl = waves(); + MusECore::WaveTrackList* wtl = waves(); for (MusECore::iWaveTrack i = wtl->begin(); i != wtl->end(); ++i) { if((*i)->recordFlag()) { @@ -1141,6 +1073,7 @@ } } +// DELETETHIS? 14 #if 0 // check for midi devices suitable for recording bool portFound = false; @@ -1228,11 +1161,8 @@ _masterFlag = val; if (MusEGlobal::tempomap.setMasterFlag(cpos(), val)) { - //MusEGlobal::audioDevice->setMaster(val); emit songChanged(SC_MASTER); } - // Removed. p3.3.26 - //MusEGlobal::audioDevice->setMaster(val); } //--------------------------------------------------------- @@ -1313,31 +1243,31 @@ void Song::setPos(int idx, const Pos& val, bool sig, bool isSeek, bool adjustScrollbar) { -// printf("setPos %d sig=%d,seek=%d,scroll=%d ", -// idx, sig, isSeek, adjustScrollbar); -// val.dump(0); -// printf("\n"); - //printf("Song::setPos before MusEGlobal::audio->msgSeek idx:%d isSeek:%d frame:%d\n", idx, isSeek, val.frame()); - - // If seeking audio, ensure frame resolution CAN be kept throughout. This compares apples and oranges. Moved below. p4.0.33 - //if (pos[idx] == val) - // return; + if (MusEGlobal::heavyDebugMsg) + { + printf("setPos %d sig=%d,seek=%d,scroll=%d ", + idx, sig, isSeek, adjustScrollbar); + val.dump(0); + printf("\n"); + printf("Song::setPos before MusEGlobal::audio->msgSeek idx:%d isSeek:%d frame:%d\n", idx, isSeek, val.frame()); + } + if (idx == CPOS) { _vcpos = val; if (isSeek && !MusEGlobal::extSyncFlag.value()) { if (val == MusEGlobal::audio->pos()) { - //printf("Song::setPos seek MusEGlobal::audio->pos already == val tick:%d frame:%d\n", val.tick(), val.frame()); + if (MusEGlobal::heavyDebugMsg) printf("Song::setPos seek MusEGlobal::audio->pos already == val tick:%d frame:%d\n", val.tick(), val.frame()); return; } MusEGlobal::audio->msgSeek(val); - //printf("Song::setPos after MusEGlobal::audio->msgSeek idx:%d isSeek:%d frame:%d\n", idx, isSeek, val.frame()); + if (MusEGlobal::heavyDebugMsg) printf("Song::setPos after MusEGlobal::audio->msgSeek idx:%d isSeek:%d frame:%d\n", idx, isSeek, val.frame()); return; } } if (val == pos[idx]) { - //printf("Song::setPos MusEGlobal::song->pos already == val tick:%d frame:%d\n", val.tick(), val.frame()); + if (MusEGlobal::heavyDebugMsg) printf("Song::setPos MusEGlobal::song->pos already == val tick:%d frame:%d\n", val.tick(), val.frame()); return; } pos[idx] = val; @@ -1422,13 +1352,7 @@ void Song::rewindStart() { - // Added by T356 - //MusEGlobal::audio->msgIdle(true); - MusEGlobal::audio->msgSeek(Pos(0, true)); - - // Added by T356 - //MusEGlobal::audio->msgIdle(false); } //--------------------------------------------------------- @@ -1563,15 +1487,6 @@ { PartList* parts = new PartList(); - //------------------------------------------------------ - // wenn ein Part selektiert ist, diesen editieren - // wenn ein Track selektiert ist, den Ersten - // Part des Tracks editieren, die restlichen sind - // 'ghostparts' - // wenn mehrere Parts selektiert sind, dann Ersten - // editieren, die restlichen sind 'ghostparts' - // - // Rough translation: /* If a part is selected, edit that. If a track is selected, edit the first @@ -1615,16 +1530,16 @@ { PartList* parts = new PartList(); - //------------------------------------------------------ - // wenn ein Part selektiert ist, diesen editieren - // wenn ein Track selektiert ist, den Ersten - // Part des Tracks editieren, die restlichen sind - // 'ghostparts' - // wenn mehrere Parts selektiert sind, dann Ersten - // editieren, die restlichen sind 'ghostparts' - // + /* + If a part is selected, edit that. + If a track is selected, edit the first + part of the track, the rest are + 'ghost parts' + When multiple parts are selected, then edit the first, + the rest are 'ghost parts' + */ - // markierte Parts sammeln + // collect selected parts for (ciTrack t = _tracks.begin(); t != _tracks.end(); ++t) { MusECore::WaveTrack* track = dynamic_cast(*t); if (track == 0) @@ -1636,8 +1551,8 @@ } } } - // wenn keine Parts selektiert, dann markierten Track suchen - // und alle Parts dieses Tracks zusammensuchen + // if no parts are selected, then search the selected track + // and collect all parts in this track if (parts->empty()) { for (ciTrack t = _tracks.begin(); t != _tracks.end(); ++t) { @@ -1657,9 +1572,8 @@ void Song::setMType(MType t) { -// printf("set MType %d\n", t); _mtype = t; - MusEGlobal::song->update(SC_SONG_TYPE); // p4.0.7 Tim. + MusEGlobal::song->update(SC_SONG_TYPE); } //--------------------------------------------------------- @@ -1668,6 +1582,7 @@ void Song::beat() { + // DELETETHIS 15 #if 0 // Just a rate test... static double _heartbeatRateTimer = 0.0; @@ -1686,21 +1601,33 @@ // Keep the sync detectors running... for(int port = 0; port < MIDI_PORTS; ++port) - { - // Must keep them running even if there's no device... - //if(MusEGlobal::midiPorts[port].device()) MusEGlobal::midiPorts[port].syncInfo().setTime(); - } - //int tick = MusEGlobal::audio->tickPos(); if (MusEGlobal::audio->isPlaying()) - { - //Pos tick(MusEGlobal::audio->tickPos()); - //setPos(0, tick, true, false, true); setPos(0, MusEGlobal::audio->tickPos(), true, false, true); + + // Process external tempo changes: + while(!_tempoFifo.isEmpty()) + MusEGlobal::tempo_rec_list.addTempo(_tempoFifo.get()); + + // Update anything related to audio controller graphs etc. + for(ciTrack it = _tracks.begin(); it != _tracks.end(); ++ it) + { + if((*it)->isMidiTrack()) + continue; + AudioTrack* at = static_cast(*it); + CtrlListList* cll = at->controller(); + for(ciCtrlList icl = cll->begin(); icl != cll->end(); ++icl) + { + CtrlList* cl = icl->second; + if(cl->isVisible() && !cl->dontShow() && cl->guiUpdatePending()) + emit controllerChanged(at, cl->id()); + cl->setGuiUpdatePending(false); + } } - // p3.3.40 Update synth native guis at the heartbeat rate. + + // Update synth native guis at the heartbeat rate. for(ciSynthI is = _synthIs.begin(); is != _synthIs.end(); ++is) (*is)->guiHeartBeat(); @@ -1758,11 +1685,9 @@ { iMarker markerI; for (markerI=_markerList->begin(); markerI != _markerList->end(); ++markerI) { -// if (i1->second.current()) - if (unsigned(t) == markerI->second.tick())//prevent of copmiler warning: comparison signed/unsigned + if (unsigned(t) == markerI->second.tick()) //prevent of compiler warning: comparison signed/unsigned return &markerI->second; } - //Marker* marker = _markerList->add(s, t, lck); return NULL; } @@ -1800,23 +1725,6 @@ return m; } -// kommer inte att gå göra undo på, kanske skulle fixa det. - -//void Song::moveMarkers(int startOffset, int ticks) -//{ -// iMarker markerI; -// for (markerI=_markerList->rbegin(); markerI != _markerList->rend(); ++markerI) { -// if (markerI->second.tick() > startOffset) { -// if (markerI-> ) -// } -// -// -// -// if (unsigned(t) == markerI->second.tick())//prevent of copmiler warning: comparison signed/unsigned -// return &markerI->second; -// } -// -//} //--------------------------------------------------------- // setRecordFlag @@ -1834,7 +1742,6 @@ track->setRecordFlag1(val); track->setRecordFlag2(val); } -// updateFlags |= SC_RECFLAG; update(SC_RECFLAG); } @@ -1855,8 +1762,7 @@ void Song::endMsgCmd() { if (updateFlags) { - //redoList->clear(); // TODO: delete elements in list - redoList->clearDelete(); // p4.0.46 Tim. NOTE Hm, shouldn't this be above? + redoList->clearDelete(); MusEGlobal::undoAction->setEnabled(true); MusEGlobal::redoAction->setEnabled(false); emit songChanged(updateFlags); @@ -1937,7 +1843,6 @@ updateFlags = SC_EVENT_INSERTED; if (addEvent(msg->ev1, (MidiPart*)msg->p2)) { Event ev; - //addUndo(UndoOp(UndoOp::AddEvent, ev, msg->ev1, (Part*)msg->p2)); addUndo(UndoOp(UndoOp::AddEvent, ev, msg->ev1, (Part*)msg->p2, msg->a, msg->b)); } else @@ -1952,7 +1857,6 @@ if(msg->a) removePortCtrlEvents(event, part, msg->b); Event e; - //addUndo(UndoOp(UndoOp::DeleteEvent, e, event, (Part*)part)); addUndo(UndoOp(UndoOp::DeleteEvent, e, event, (Part*)part, msg->a, msg->b)); deleteEvent(event, part); updateFlags = SC_EVENT_REMOVED; @@ -1964,7 +1868,6 @@ changeEvent(msg->ev1, msg->ev2, (MidiPart*)msg->p3); if(msg->a) addPortCtrlEvents(msg->ev2, (Part*)msg->p3, msg->b); - //addUndo(UndoOp(UndoOp::ModifyEvent, msg->ev2, msg->ev1, (Part*)msg->p3)); addUndo(UndoOp(UndoOp::ModifyEvent, msg->ev2, msg->ev1, (Part*)msg->p3, msg->a, msg->b)); updateFlags = SC_EVENT_MODIFIED; break; @@ -1974,10 +1877,9 @@ insertTrack2(msg->track, msg->ival); break; case SEQM_REMOVE_TRACK: - //removeTrack2(msg->track); cmdRemoveTrack(msg->track); break; - //case SEQM_CHANGE_TRACK: + //case SEQM_CHANGE_TRACK: DELETETHIS 3 // changeTrack((Track*)(msg->p1), (Track*)(msg->p2)); // break; case SEQM_ADD_PART: @@ -1987,7 +1889,6 @@ cmdRemovePart((Part*)msg->p1); break; case SEQM_CHANGE_PART: - //cmdChangePart((Part*)msg->p1, (Part*)msg->p2); cmdChangePart((Part*)msg->p1, (Part*)msg->p2, msg->a, msg->b); break; @@ -2063,7 +1964,6 @@ removePart(part); addUndo(UndoOp(UndoOp::DeletePart, part)); part->events()->incARef(-1); - //part->unchainClone(); unchainClone(part); updateFlags = SC_PART_REMOVED; } @@ -2074,14 +1974,11 @@ void Song::cmdChangePart(Part* oldPart, Part* newPart, bool doCtrls, bool doClones) { - //printf("Song::cmdChangePart before changePart oldPart:%p events:%p refs:%d Arefs:%d sn:%d newPart:%p events:%p refs:%d Arefs:%d sn:%d\n", oldPart, oldPart->events(), oldPart->events()->refCount(), oldPart->events()->arefCount(), oldPart->sn(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount(), newPart->sn()); - if(doCtrls) removePortCtrlEvents(oldPart, doClones); changePart(oldPart, newPart); - //addUndo(UndoOp(UndoOp::ModifyPart, oldPart, newPart)); addUndo(UndoOp(UndoOp::ModifyPart, oldPart, newPart, doCtrls, doClones)); // Changed by T356. Do not decrement ref count if the new part is a clone of the old part, since the event list @@ -2089,17 +1986,11 @@ if(oldPart->cevents() != newPart->cevents()) oldPart->events()->incARef(-1); - //oldPart->replaceClone(newPart); - - //printf("Song::cmdChangePart before repl/unchClone oldPart:%p events:%p refs:%d Arefs:%d sn:%d newPart:%p events:%p refs:%d Arefs:%d sn:%d\n", oldPart, oldPart->events(), oldPart->events()->refCount(), oldPart->events()->arefCount(), oldPart->sn(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount(), newPart->sn()); - replaceClone(oldPart, newPart); if(doCtrls) addPortCtrlEvents(newPart, doClones); - //printf("Song::cmdChangePart after repl/unchClone oldPart:%p events:%p refs:%d Arefs:%d sn:%d newPart:%p events:%p refs:%d Arefs:%d sn:%d\n", oldPart, oldPart->events(), oldPart->events()->refCount(), oldPart->events()->arefCount(), oldPart->sn(), newPart, newPart->events(), newPart->events()->refCount(), newPart->events()->arefCount(), newPart->sn()); - updateFlags = SC_PART_MODIFIED; } @@ -2161,7 +2052,6 @@ loop = false; for(iMidiDevice imd = MusEGlobal::midiDevices.begin(); imd != MusEGlobal::midiDevices.end(); ++imd) { - //if((*imd)->deviceType() == MidiDevice::JACK_MIDI) if(dynamic_cast< MidiJackDevice* >(*imd)) { if(clear_all) // Allow not touching devices. p4.0.17 TESTING: Maybe some problems... @@ -2177,9 +2067,7 @@ break; } } - else - //if((*imd)->deviceType() == MidiDevice::ALSA_MIDI) - if(dynamic_cast< MidiAlsaDevice* >(*imd)) + else if(dynamic_cast< MidiAlsaDevice* >(*imd)) { // With alsa devices, we must not delete them (they're always in the list). But we must // clear all routes. They point to non-existant midi tracks, which were all deleted above. @@ -2191,16 +2079,16 @@ while (loop); MusEGlobal::tempomap.clear(); + MusEGlobal::tempo_rec_list.clear(); AL::sigmap.clear(); MusEGlobal::keymap.clear(); undoList->clearDelete(); - //redoList->clear(); // Check this - Should we do a clearDelete? IIRC it was OK this way - no clearDelete in case of same items in both lists. - redoList->clearDelete(); // p4.0.46 Tim + redoList->clearDelete(); if(MusEGlobal::undoAction) - MusEGlobal::undoAction->setEnabled(false); // + MusEGlobal::undoAction->setEnabled(false); if(MusEGlobal::redoAction) - MusEGlobal::redoAction->setEnabled(false); // + MusEGlobal::redoAction->setEnabled(false); _markerList->clear(); pos[0].setTick(0); @@ -2232,7 +2120,6 @@ _quantize = false; _len = 0; // song len in ticks _follow = JUMP; - // _tempo = 500000; // default tempo 120 dirty = false; initDrumMap(); if (signal) { @@ -2289,10 +2176,9 @@ MusEGlobal::keymap.clear(); if(MusEGlobal::debugMsg) - printf("deleting undoList, clearing redoList\n"); + printf("deleting undoList and redoList\n"); undoList->clearDelete(); - //redoList->clear(); // Check this - Should we do a clearDelete? IIRC it was OK this way - no clearDelete in case of same items in both lists. - redoList->clearDelete(); // p4.0.46 Tim + redoList->clearDelete(); _markerList->clear(); @@ -2303,12 +2189,12 @@ if(MusEGlobal::debugMsg) printf("deleting midiport controllers\n"); + // Clear all midi port controllers and values. for(int i = 0; i < MIDI_PORTS; ++i) - // Remove the controllers and the values. - MusEGlobal::midiPorts[i].controller()->clearDelete(true); + MusEGlobal::midiPorts[i].controller()->clearDelete(true); // Remove the controllers and the values. - // Can't do this here. Jack isn't running. Fixed. Test OK so far. + // Can't do this here. Jack isn't running. Fixed. Test OK so far. DELETETHIS (the comment and #if/#endif) #if 1 if(MusEGlobal::debugMsg) printf("deleting midi devices except synths\n"); @@ -2326,6 +2212,7 @@ if(MusEGlobal::debugMsg) printf("deleting global available synths\n"); + // Delete all synths. std::vector::iterator is; for(is = MusEGlobal::synthis.begin(); is != MusEGlobal::synthis.end(); ++is) @@ -2354,10 +2241,6 @@ // are handled by ~AudioTrack. if(MusEGlobal::debugMsg) - printf("Muse: Deleting sound files\n"); - SndFile::sndFiles.clearDelete(); - - if(MusEGlobal::debugMsg) printf("...finished cleaning up.\n"); } @@ -2378,7 +2261,6 @@ return; } for (int i = 0; i < n; ++i) { -// printf("seqSignal to gui:<%c>\n", buffer[i]); switch(buffer[i]) { case '0': // STOP stopRolling(); @@ -2422,7 +2304,7 @@ "click on the Restart button."), "restart", "cancel"); if (btn == 0) { printf("restarting!\n"); - MusEGlobal::muse->seqRestart(); + MusEGlobal::muse->seqRestart(); } } @@ -2444,7 +2326,7 @@ MusEGlobal::audioDevice->setFreewheel(false); MusEGlobal::audio->msgPlay(false); -#if 0 +#if 0 // DELETETHIS if (record()) MusEGlobal::audio->recordStop(); setStopPlay(false); @@ -2497,7 +2379,6 @@ // create new part part = new MidiPart(mt); int startTick = roundDownBar(tick); - //int endTick = roundUpBar(tick); int endTick = roundUpBar(tick + 1); part->setTick(startTick); part->setLenTick(endTick - startTick); @@ -2518,15 +2399,9 @@ for(iEvent i = range.first; i != range.second; ++i) { ev = i->second; - // At the moment, Song::recordEvent() is only called by the 'Rec' buttons in the - // midi track info panel. So only controller types are fed to it. If other event types - // are to be passed, we will have to expand on this to check if equal. Instead, maybe add an isEqual() to Event class. - //if((ev.type() == Controller && event.type() == Controller || ev.type() == Controller && event.type() == Controller) - // && ev.dataA() == event.dataA() && ev.dataB() == event.dataB()) if(ev.type() == Controller && ev.dataA() == event.dataA()) { - // Don't bother if already set. - if(ev.dataB() == event.dataB()) + if(ev.dataB() == event.dataB()) // Don't bother if already set. return; // Indicate do undo, and do port controller values and clone parts. MusEGlobal::audio->msgChangeEvent(ev, event, part, true, true, true); @@ -2536,7 +2411,6 @@ } // Indicate do undo, and do port controller values and clone parts. - //MusEGlobal::audio->msgAddEvent(event, part); MusEGlobal::audio->msgAddEvent(event, part, true, true, true); } @@ -2546,13 +2420,14 @@ int Song::execAutomationCtlPopup(AudioTrack* track, const QPoint& menupos, int acid) { - enum { PREV_EVENT, NEXT_EVENT, ADD_EVENT, CLEAR_EVENT, CLEAR_RANGE, CLEAR_ALL_EVENTS }; + enum { PREV_EVENT=0, NEXT_EVENT, ADD_EVENT, CLEAR_EVENT, CLEAR_RANGE, CLEAR_ALL_EVENTS, MIDI_ASSIGN, MIDI_CLEAR }; QMenu* menu = new QMenu; int count = 0; bool isEvent = false, canSeekPrev = false, canSeekNext = false, canEraseRange = false; bool canAdd = false; double ctlval = 0.0; + int frame = 0; if(track) { ciCtrlList icl = track->controller()->find(acid); @@ -2561,17 +2436,17 @@ CtrlList *cl = icl->second; canAdd = true; - //int frame = pos[0].frame(); - int frame = MusEGlobal::audio->pos().frame(); // Try this. p4.0.33 + frame = MusEGlobal::audio->pos().frame(); - //printf("pos[0]:%d f:%d tickPos:%d f:%d\n", pos[0].tick(), pos[0].frame(), MusEGlobal::audio->tickPos(), Pos(MusEGlobal::audio->tickPos(), true).frame()); + bool en1, en2; + track->controllersEnabled(acid, &en1, &en2); + + AutomationType at = track->automationType(); + if(!MusEGlobal::automation || at == AUTO_OFF || !en1 || !en2) + ctlval = cl->curVal(); + else + ctlval = cl->value(frame); - //ctlval = cl->curVal(); - //AutomationType at = track->MusEGlobal::automationType(); - //if(!MusEGlobal::automation || track->MusEGlobal::automationType() == AUTO_OFF) - ctlval = cl->curVal(); - //else - // ctlval = cl->value(frame); count = cl->size(); if(count) { @@ -2624,27 +2499,57 @@ clearAction->setData(CLEAR_ALL_EVENTS); clearAction->setEnabled((bool)count); + + menu->addSeparator(); + menu->addAction(new MusEGui::MenuTitleItem(tr("Midi control"), menu)); + + QAction *assign_act = menu->addAction(tr("Assign")); + assign_act->setCheckable(false); + assign_act->setData(MIDI_ASSIGN); + + MidiAudioCtrlMap* macm = track->controller()->midiControls(); + AudioMidiCtrlStructMap amcs; + macm->find_audio_ctrl_structs(acid, &amcs); + + if(!amcs.empty()) + { + QAction *cact = menu->addAction(tr("Clear")); + cact->setData(MIDI_CLEAR); + menu->addSeparator(); + } + + for(iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + { + int port, chan, mctrl; + macm->hash_values((*iamcs)->first, &port, &chan, &mctrl); + //QString s = QString("Port:%1 Chan:%2 Ctl:%3-%4").arg(port + 1) + QString s = QString("Port:%1 Chan:%2 Ctl:%3").arg(port + 1) + .arg(chan + 1) + //.arg((mctrl >> 8) & 0xff) + //.arg(mctrl & 0xff); + .arg(midiCtrlName(mctrl, true)); + QAction *mact = menu->addAction(s); + mact->setEnabled(false); + mact->setData(-1); // Not used + } + QAction* act = menu->exec(menupos); - //delete menu; if (!act || !track) { delete menu; return -1; } - //if(!track) - // return -1; - int sel = act->data().toInt(); delete menu; switch(sel) { case ADD_EVENT: - MusEGlobal::audio->msgAddACEvent(track, acid, pos[0].frame(), ctlval); + MusEGlobal::audio->msgAddACEvent(track, acid, frame, ctlval); break; case CLEAR_EVENT: - MusEGlobal::audio->msgEraseACEvent(track, acid, pos[0].frame()); + MusEGlobal::audio->msgEraseACEvent(track, acid, frame); break; case CLEAR_RANGE: @@ -2666,6 +2571,45 @@ MusEGlobal::audio->msgSeekNextACEvent(track, acid); break; + case MIDI_ASSIGN: + { + int port = -1, chan = 0, ctrl = 0; + for(MusECore::iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + { + macm->hash_values((*iamcs)->first, &port, &chan, &ctrl); + break; // Only a single item for now, thanks! + } + + MusEGui::MidiAudioControl* pup = new MusEGui::MidiAudioControl(port, chan, ctrl); + + if(pup->exec() == QDialog::Accepted) + { + MusEGlobal::audio->msgIdle(true); // Gain access to structures, and sync with audio + // Erase all for now. + for(MusECore::iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + macm->erase(*iamcs); + + port = pup->port(); chan = pup->chan(); ctrl = pup->ctrl(); + if(port >= 0 && chan >=0 && ctrl >= 0) + // Add will replace if found. + macm->add_ctrl_struct(port, chan, ctrl, MusECore::MidiAudioCtrlStruct(acid)); + + MusEGlobal::audio->msgIdle(false); + } + + delete pup; + } + break; + + case MIDI_CLEAR: + if(!amcs.empty()) + MusEGlobal::audio->msgIdle(true); // Gain access to structures, and sync with audio + for(MusECore::iAudioMidiCtrlStructMap iamcs = amcs.begin(); iamcs != amcs.end(); ++iamcs) + macm->erase(*iamcs); + if(!amcs.empty()) + MusEGlobal::audio->msgIdle(false); + break; + default: return -1; break; @@ -2683,15 +2627,10 @@ if(!track && !part) return -1; - //enum { PREV_EVENT, NEXT_EVENT, ADD_EVENT, CLEAR_EVENT, CLEAR_RANGE, CLEAR_ALL_EVENTS }; enum { ADD_EVENT, CLEAR_EVENT }; QMenu* menu = new QMenu; - //int count = 0; bool isEvent = false; - //bool canSeekPrev = false, canSeekNext = false, canEraseRange = false; - //bool canAdd = false; - //double ctlval = 0.0; MidiTrack* mt; if(track) @@ -2715,8 +2654,6 @@ dctl |= MusEGlobal::drumMap[note].anote; } - //printf("Song::execMidiAutomationCtlPopup ctlnum:%d dctl:%d anote:%d\n", ctlnum, dctl, MusEGlobal::drumMap[ctlnum & 0x7f].anote); - unsigned tick = cpos(); if(!part) @@ -2757,9 +2694,6 @@ ev = i->second; if(ev.type() == Controller) { - //printf("Song::execMidiAutomationCtlPopup ev.dataA:%d\n", ev.dataA()); - - //if(ev.dataA() == dctl) if(ev.dataA() == ctlnum) { isEvent = true; @@ -2779,31 +2713,19 @@ else addEvent->setText(tr("add event")); addEvent->setData(ADD_EVENT); - //addEvent->setEnabled(canAdd); addEvent->setEnabled(true); QAction* eraseEventAction = menu->addAction(tr("erase event")); eraseEventAction->setData(CLEAR_EVENT); eraseEventAction->setEnabled(isEvent); -// menu->insertItem(tr("erase range"), CLEAR_RANGE, CLEAR_RANGE); -// menu->setItemEnabled(CLEAR_RANGE, canEraseRange); - -// menu->insertItem(tr("clear automation"), CLEAR_ALL_EVENTS, CLEAR_ALL_EVENTS); -// menu->setItemEnabled(CLEAR_ALL_EVENTS, (bool)count); - - QAction* act = menu->exec(menupos); - //delete menu; if (!act) { delete menu; return -1; } - //if(!part) - // return -1; - int sel = act->data().toInt(); delete menu; @@ -2811,19 +2733,16 @@ { case ADD_EVENT: { - //int val = mp->hwCtrlState(channel, ctlnum); int val = mp->hwCtrlState(channel, dctl); if(val == CTRL_VAL_UNKNOWN) return -1; Event e(Controller); - //e.setA(dctl); e.setA(ctlnum); e.setB(val); // Do we replace an old event? if(isEvent) { - // Don't bother if already set. - if(ev.dataB() == val) + if(ev.dataB() == val) // Don't bother if already set. return -1; e.setTick(tick - part->tick()); @@ -2861,25 +2780,6 @@ MusEGlobal::audio->msgDeleteEvent(ev, part, true, true, true); break; - //case CLEAR_RANGE: - //MusEGlobal::audio->msgEraseRangeACEvents(track, acid, pos[1].frame(), pos[2].frame()); - //break; - - //case CLEAR_ALL_EVENTS: - //if(QMessageBox::question(MusEGlobal::muse, QString("Muse"), - // tr("Clear all controller events?"), tr("&Ok"), tr("&Cancel"), - // QString::null, 0, 1 ) == 0) - //MusEGlobal::audio->msgClearControllerEvents(track, acid); - //break; - - //case PREV_EVENT: - //MusEGlobal::audio->msgSeekPrevACEvent(track, acid); - //break; - - //case NEXT_EVENT: - //MusEGlobal::audio->msgSeekNextACEvent(track, acid); - //break; - default: return -1; break; @@ -2920,16 +2820,78 @@ void Song::processAutomationEvents() { + MusEGlobal::audio->msgIdle(true); // gain access to all data structures + // Just clear all pressed and touched flags, not rec event lists. clearRecAutomation(false); if (!MusEGlobal::automation) + { + MusEGlobal::audio->msgIdle(false); return; + } + for(iTrack i = _tracks.begin(); i != _tracks.end(); ++i) { if(!(*i)->isMidiTrack()) // Process (and clear) rec events. ((AudioTrack*)(*i))->processAutomationEvents(); } + + MusEGlobal::audio->msgIdle(false); +} + +//--------------------------------------------------------- +// processMasterRec +//--------------------------------------------------------- + +void Song::processMasterRec() +{ + bool do_tempo = false; + + // Wait a few seconds for the tempo fifo to be empty. + int tout = 30; + while(!_tempoFifo.isEmpty()) + { + usleep(100000); + --tout; + if(tout == 0) + break; + } + + int tempo_rec_list_sz = MusEGlobal::tempo_rec_list.size(); + if(tempo_rec_list_sz != 0) + { + if(QMessageBox::question(MusEGlobal::muse, + tr("MusE: Tempo list"), + tr("External tempo changes were recorded.\nTransfer them to master tempo list?"), + QMessageBox::Ok | QMessageBox::Cancel, QMessageBox::Cancel) == QMessageBox::Ok) + do_tempo = true; + } + + MusEGlobal::audio->msgIdle(true); // gain access to all data structures + + if(do_tempo) + { + // Erase from master tempo the (approximate) recording start/end tick range according to the recorded tempo map, + //MusEGlobal::tempomap.eraseRange(MusEGlobal::tempo_rec_list.frame2tick(MusEGlobal::audio->getStartRecordPos().frame()), + // MusEGlobal::tempo_rec_list.frame2tick(MusEGlobal::audio->getEndRecordPos().frame())); + // This is more accurate but lacks resolution: + MusEGlobal::tempomap.eraseRange(MusEGlobal::audio->getStartExternalRecTick(), MusEGlobal::audio->getEndExternalRecTick()); + + // Add the recorded tempos to the master tempo list: + for(int i = 0; i < tempo_rec_list_sz; ++i) + MusEGlobal::tempomap.addTempo(MusEGlobal::tempo_rec_list[i].tick, + MusEGlobal::tempo_rec_list[i].tempo, + false); // False: Defer normalize + MusEGlobal::tempomap.normalize(); + } + + MusEGlobal::tempo_rec_list.clear(); + + MusEGlobal::audio->msgIdle(false); + + if(do_tempo) + update(SC_TEMPO); } //--------------------------------------------------------- @@ -2949,7 +2911,10 @@ void Song::stopRolling() { - abortRolling(); + if (record()) + MusEGlobal::audio->recordStop(); + setStopPlay(false); + processAutomationEvents(); } @@ -3039,7 +3004,7 @@ void Song::insertTrack0(Track* track, int idx) { insertTrack1(track, idx); - insertTrack2(track, idx); // MusEGlobal::audio->msgInsertTrack(track, idx, false); + insertTrack2(track, idx); // MusEGlobal::audio->msgInsertTrack(track, idx, false); DELETETHIS or is this somehow explanatory? insertTrack3(track, idx); } @@ -3050,8 +3015,6 @@ void Song::insertTrack1(Track* track, int /*idx*/) { - //printf("Song::insertTrack1 track:%lx\n", track); - switch(track->type()) { case Track::AUDIO_SOFTSYNTH: { @@ -3065,9 +3028,6 @@ default: break; } - - //printf("Song::insertTrack1 end of function\n"); - } //--------------------------------------------------------- @@ -3077,15 +3037,11 @@ void Song::insertTrack2(Track* track, int idx) { - //printf("Song::insertTrack2 track:%lx\n", track); - int n; switch(track->type()) { case Track::MIDI: case Track::DRUM: _midis.push_back((MidiTrack*)track); - // Added by T356. - //((MidiTrack*)track)->addPortCtrlEvents(); addPortCtrlEvents(((MidiTrack*)track)); break; @@ -3122,14 +3078,10 @@ return; } - // // initialize missing aux send - // iTrack i = _tracks.index2iterator(idx); - //printf("Song::insertTrack2 inserting into _tracks...\n"); _tracks.insert(i, track); - //printf("Song::insertTrack2 inserted\n"); n = _auxs.size(); for (iTrack i = _tracks.begin(); i != _tracks.end(); ++i) { @@ -3141,18 +3093,13 @@ } } - // // add routes - // if (track->type() == Track::AUDIO_OUTPUT) { const RouteList* rl = track->inRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->outRoutes()->push_back(*r); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->outRoutes()->push_back(src); @@ -3160,8 +3107,7 @@ // Update the Audio Output track's aux ref count. p4.0.37 if(r->track->auxRefCount()) track->updateAuxRoute( r->track->auxRefCount(), NULL ); - else - if(r->track->type() == Track::AUDIO_AUX) + else if(r->track->type() == Track::AUDIO_AUX) track->updateAuxRoute( 1, NULL ); } } @@ -3170,9 +3116,6 @@ const RouteList* rl = track->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->inRoutes()->push_back(*r); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->inRoutes()->push_back(src); @@ -3180,8 +3123,7 @@ // Update the other track's aux ref count and all tracks it is connected to. p4.0.37 if(track->auxRefCount()) r->track->updateAuxRoute( track->auxRefCount(), NULL ); - else - if(track->type() == Track::AUDIO_AUX) + else if(track->type() == Track::AUDIO_AUX) r->track->updateAuxRoute( 1, NULL ); } } @@ -3190,14 +3132,12 @@ const RouteList* rl = track->inRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //printf("Song::insertTrack2 %s in route port:%d\n", track->name().toLatin1().constData(), r->midiPort); Route src(track, r->channel); MusEGlobal::midiPorts[r->midiPort].outRoutes()->push_back(src); } rl = track->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //printf("Song::insertTrack2 %s out route port:%d\n", track->name().toLatin1().constData(), r->midiPort); Route src(track, r->channel); MusEGlobal::midiPorts[r->midiPort].inRoutes()->push_back(src); } @@ -3207,9 +3147,6 @@ const RouteList* rl = track->inRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->outRoutes()->push_back(*r); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->outRoutes()->push_back(src); @@ -3217,16 +3154,12 @@ // Update this track's aux ref count. p4.0.37 if(r->track->auxRefCount()) track->updateAuxRoute( r->track->auxRefCount(), NULL ); - else - if(r->track->type() == Track::AUDIO_AUX) + else if(r->track->type() == Track::AUDIO_AUX) track->updateAuxRoute( 1, NULL ); } rl = track->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->inRoutes()->push_back(*r); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->inRoutes()->push_back(src); @@ -3234,14 +3167,10 @@ // Update the other track's aux ref count and all tracks it is connected to. p4.0.37 if(track->auxRefCount()) r->track->updateAuxRoute( track->auxRefCount(), NULL ); - else - if(track->type() == Track::AUDIO_AUX) + else if(track->type() == Track::AUDIO_AUX) r->track->updateAuxRoute( 1, NULL ); } } - - //printf("Song::insertTrack2 end of function\n"); - } //--------------------------------------------------------- @@ -3263,7 +3192,6 @@ removeTrack1(track); MusEGlobal::audio->msgRemoveTrack(track); removeTrack3(track); - //delete track; update(SC_TRACK_REMOVED); } @@ -3315,20 +3243,15 @@ void Song::removeTrack2(Track* track) { - //printf("Song::removeTrack2 track:%s\n", track->name().toLatin1().constData()); - switch(track->type()) { case Track::MIDI: case Track::DRUM: - // Added by T356. - //((MidiTrack*)track)->removePortCtrlEvents(); removePortCtrlEvents(((MidiTrack*)track)); unchainTrackParts(track, true); _midis.erase(track); break; case Track::WAVE: - // Added by T356. unchainTrackParts(track, true); _waves.erase(track); @@ -3355,19 +3278,13 @@ } _tracks.erase(track); - // // remove routes - // if (track->type() == Track::AUDIO_OUTPUT) { const RouteList* rl = track->inRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->outRoutes()->removeRoute(*r); - //printf("Song::removeTrack2 %s audio out track:%s\n", track->name().toLatin1().constData(), r->track->name().toLatin1().constData()); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->outRoutes()->removeRoute(src); @@ -3375,8 +3292,7 @@ // Update the Audio Output track's aux ref count. p4.0.37 if(r->track->auxRefCount()) track->updateAuxRoute( -r->track->auxRefCount(), NULL ); - else - if(r->track->type() == Track::AUDIO_AUX) + else if(r->track->type() == Track::AUDIO_AUX) track->updateAuxRoute( -1, NULL ); } } @@ -3385,10 +3301,6 @@ const RouteList* rl = track->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->inRoutes()->removeRoute(*r); - //printf("Song::removeTrack2 %s audio in track:%s\n", track->name().toLatin1().constData(), r->track->name().toLatin1().constData()); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->inRoutes()->removeRoute(src); @@ -3396,8 +3308,7 @@ // Update the other track's aux ref count and all tracks it is connected to. p4.0.37 if(track->auxRefCount()) r->track->updateAuxRoute( -track->auxRefCount(), NULL ); - else - if(track->type() == Track::AUDIO_AUX) + else if(track->type() == Track::AUDIO_AUX) r->track->updateAuxRoute( -1, NULL ); } } @@ -3406,14 +3317,12 @@ const RouteList* rl = track->inRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //printf("Song::removeTrack2 %s in route port:%d\n", track->name().toLatin1().constData(), r->midiPort); Route src(track, r->channel); MusEGlobal::midiPorts[r->midiPort].outRoutes()->removeRoute(src); } rl = track->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //printf("Song::removeTrack2 %s out route port:%d\n", track->name().toLatin1().constData(), r->midiPort); Route src(track, r->channel); MusEGlobal::midiPorts[r->midiPort].inRoutes()->removeRoute(src); } @@ -3423,10 +3332,6 @@ const RouteList* rl = track->inRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->outRoutes()->removeRoute(*r); - //printf("Song::removeTrack2 %s in route track:%s\n", track->name().toLatin1().constData(), r->track->name().toLatin1().constData()); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->outRoutes()->removeRoute(src); @@ -3434,17 +3339,12 @@ // Update this track's aux ref count. p4.0.37 if(r->track->auxRefCount()) track->updateAuxRoute( -r->track->auxRefCount(), NULL ); - else - if(r->track->type() == Track::AUDIO_AUX) + else if(r->track->type() == Track::AUDIO_AUX) track->updateAuxRoute( -1, NULL ); } rl = track->outRoutes(); for (ciRoute r = rl->begin(); r != rl->end(); ++r) { - //if(r->track == track) - // r->track->inRoutes()->removeRoute(*r); - //printf("Song::removeTrack2 %s out route track:%s\n", track->name().toLatin1().constData(), r->track->name().toLatin1().constData()); - // p3.3.50 Route src(track, r->channel, r->channels); src.remoteChannel = r->remoteChannel; r->track->inRoutes()->removeRoute(src); @@ -3452,8 +3352,7 @@ // Update the other track's aux ref count and all tracks it is connected to. p4.0.37 if(track->auxRefCount()) r->track->updateAuxRoute( -track->auxRefCount(), NULL ); - else - if(track->type() == Track::AUDIO_AUX) + else if(track->type() == Track::AUDIO_AUX) r->track->updateAuxRoute( -1, NULL ); } } @@ -3502,7 +3401,6 @@ fprintf(fp, "BEATLEN %d\n", AL::sigmap.ticksBeat(0)); fprintf(fp, "QUANTLEN %d\n", quant); - //for (iCItem i = items.begin(); i != items.end(); ++i) { for (iEvent e = part->events()->begin(); e != part->events()->end(); e++) { Event ev = e->second; @@ -3566,7 +3464,6 @@ QStringList sl = line.split(" "); Event e(Controller); - //int tick = sl[1].toInt(); int a = sl[2].toInt(); int b = sl[3].toInt(); int c = sl[4].toInt(); @@ -3590,11 +3487,8 @@ void Song::populateScriptMenu(QMenu* menuPlugins, QObject* receiver) { - // // List scripts - // QString distScripts = MusEGlobal::museGlobalShare + "/scripts"; - QString userScripts = MusEGlobal::configPath + "/scripts"; QFileInfo distScriptsFi(distScripts); @@ -3614,13 +3508,9 @@ QSignalMapper* userSignalMapper = new QSignalMapper(this); if (deliveredScriptNames.size() > 0 || userScriptNames.size() > 0) { - //menuPlugins = new QPopupMenu(this); - //menuBar()->insertItem(tr("&Plugins"), menuPlugins); int id = 0; if (deliveredScriptNames.size() > 0) { for (QStringList::Iterator it = deliveredScriptNames.begin(); it != deliveredScriptNames.end(); it++, id++) { - //menuPlugins->insertItem(*it, this, SLOT(execDeliveredScript(int)), 0, id); - //menuPlugins->insertItem(*it, this, slot_deliveredscripts, 0, id); QAction* act = menuPlugins->addAction(*it); connect(act, SIGNAL(triggered()), distSignalMapper, SLOT(map())); distSignalMapper->setMapping(act, id); @@ -3629,7 +3519,6 @@ } if (userScriptNames.size() > 0) { for (QStringList::Iterator it = userScriptNames.begin(); it != userScriptNames.end(); it++, id++) { - //menuPlugins->insertItem(*it, this, slot_userscripts, 0, id); QAction* act = menuPlugins->addAction(*it); connect(act, SIGNAL(triggered()), userSignalMapper, SLOT(map())); userSignalMapper->setMapping(act, id); diff -Nru muse-2.0~rc2/muse/songfile.cpp muse-2.0/muse/songfile.cpp --- muse-2.0~rc2/muse/songfile.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/songfile.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -29,23 +29,18 @@ #include "song.h" #include "arranger.h" #include "arrangerview.h" -//#include "arranger/arranger.h" // p4.0.2 #include "cobject.h" #include "drumedit.h" -//#include "midiedit/drumedit.h" // p4.0.2 #include "pianoroll.h" #include "scoreedit.h" -//#include "midiedit/pianoroll.h" // p4.0.2 #include "globals.h" #include "xml.h" #include "drummap.h" -//#include "midiedit/drummap.h" // p4.0.2 #include "event.h" #include "marker/marker.h" #include "midiport.h" #include "audio.h" #include "mitplugin.h" -//#include "mplugins/mitplugin.h" // p4.0.2 #include "wave.h" #include "midictrl.h" #include "amixer.h" @@ -55,38 +50,13 @@ #include "keyevent.h" namespace MusEGlobal { -//static CloneList cloneList; -//static CloneList copyCloneList; MusECore::CloneList cloneList; -//CloneList copyCloneList; } namespace MusECore { -//struct ClonePart { - //const EventList* el; -// const Part* cp; -// int id; - //ClonePart(const EventList* e, int i) : el(e), id(i) {} -// ClonePart(const Part* p, int i) : cp(p), id(i) {} -// }; -//typedef std::list CloneList; -//typedef CloneList::iterator iClone; - -//--------------------------------------------------------- -// ClonePart -//--------------------------------------------------------- - -ClonePart::ClonePart(const Part* p, int i) -{ - cp = p; - id = i; - uuid_generate(uuid); -} - - -/* +/* DELETETHIS 42 //--------------------------------------------------------- // updateCloneList //--------------------------------------------------------- @@ -219,41 +189,28 @@ case Xml::End: return npart; case Xml::TagStart: - // If the part has not been created yet... - if(!npart) + if(!npart) // If the part has not been created yet... { - // If an id was found... - if(id != -1) + if(id != -1) // If an id was found... { for(iClone i = MusEGlobal::cloneList.begin(); i != MusEGlobal::cloneList.end(); ++i) { - // Is a matching part found in the clone list? - if(i->id == id) + if(i->id == id) // Is a matching part found in the clone list? { - // If it's a regular paste (not paste clone), and the original part is - // not a clone, defer so that a new copy is created in TagStart above. - //if(!doClone && i->cp->cevents()->arefCount() <= 1) - //if(!doClone && !isclone) - // break; - // This makes a clone, chains the part, and increases ref counts. npart = track->newPart((Part*)i->cp, true); break; } } } - else - // If a uuid was found... - if(uuidvalid) + else if(uuidvalid) // If a uuid was found... { for(iClone i = MusEGlobal::cloneList.begin(); i != MusEGlobal::cloneList.end(); ++i) { - // Is a matching part found in the clone list? - if(uuid_compare(uuid, i->uuid) == 0) + if(uuid_compare(uuid, i->uuid) == 0) // Is a matching part found in the clone list? { Track* cpt = i->cp->track(); - // If we want to paste to the given track... - if(toTrack) + if(toTrack) // If we want to paste to the given track... { // If the given track type is not the same as the part's // original track type, we can't continue. Just return. @@ -263,15 +220,13 @@ return 0; } } - else - // ...else we want to paste to the part's original track. + else // ...else we want to paste to the part's original track. { // Make sure the track exists (has not been deleted). if((cpt->isMidiTrack() && MusEGlobal::song->midis()->find(cpt) != MusEGlobal::song->midis()->end()) || (cpt->type() == Track::WAVE && MusEGlobal::song->waves()->find(cpt) != MusEGlobal::song->waves()->end())) track = cpt; - else - // Track was not found. Try pasting to the given track, as above... + else // Track was not found. Try pasting to the given track, as above... { if(!track || cpt->type() != track->type()) { @@ -284,7 +239,6 @@ // If it's a regular paste (not paste clone), and the original part is // not a clone, defer so that a new copy is created in TagStart above. - //if(!doClone && i->cp->cevents()->arefCount() <= 1) if(!doClone && !isclone) break; @@ -295,12 +249,11 @@ } } - // If the part still has not been created yet... - if(!npart) + if(!npart) // If the part still has not been created yet... { - // A clone was not created from any matching part. Create a non-clone part now. - if(!track) - { + + if(!track) // A clone was not created from any matching + { // part. Create a non-clone part now. xml.skip("part"); return 0; } @@ -387,6 +340,7 @@ e.move( -npart->tick() ); int tick = e.tick(); + // DELETETHIS 7 // Do not discard events belonging to clone parts, // at least not yet. A later clone might have a longer, // fully accommodating part length! @@ -396,7 +350,6 @@ // No choice but to accept all events past 0. if(tick < 0) { - //printf("readClone: warning: event not in part: %d - %d -%d, discarded\n", printf("readClone: warning: event at tick:%d not in part:%s, discarded\n", tick, npart->name().toLatin1().constData()); } @@ -405,8 +358,7 @@ npart->events()->add(e); } } - else - // ...Otherwise a clone was created, so we don't need the events. + else // ...Otherwise a clone was created, so we don't need the events. xml.skip(tag); } else @@ -421,7 +373,7 @@ else if (tag == "cloneId") { id = xml.s2().toInt(); - //if(id != -1) + //if(id != -1) DELETETHIS 19 //{ // for(iClone i = MusEGlobal::cloneList.begin(); i != MusEGlobal::cloneList.end(); ++i) // { @@ -447,7 +399,7 @@ if(!uuid_is_null(uuid)) { uuidvalid = true; - /* + /* DELETETHIS 50 for(iClone i = MusEGlobal::cloneList.begin(); i != MusEGlobal::cloneList.end(); ++i) { // Is a matching part found in the clone list? @@ -517,7 +469,6 @@ // we can have 'Paste Clone' feature. //--------------------------------------------------------- -//void Part::write(int level, Xml& xml) const void Part::write(int level, Xml& xml, bool isCopy, bool forceWavePaths) const { const EventList* el = cevents(); @@ -529,28 +480,19 @@ if(isCopy) { - //for(iClone i = copyCloneList.begin(); i != copyCloneList.end(); ++i) for(iClone i = MusEGlobal::cloneList.begin(); i != MusEGlobal::cloneList.end(); ++i) { - //if(i->el == el) { if(i->cp->cevents() == el) { - //id = i->id; uuid_copy(uuid, i->uuid); dumpEvents = false; break; } } - //if(id == -1) if(uuid_is_null(uuid)) { - //id = copyCloneList.size(); - //id = MusEGlobal::cloneList.size(); - //ClonePart cp(el, id); - //ClonePart cp(this, id); ClonePart cp(this); uuid_copy(uuid, cp.uuid); - //copyCloneList.push_back(cp); MusEGlobal::cloneList.push_back(cp); } } @@ -560,22 +502,17 @@ { for (iClone i = MusEGlobal::cloneList.begin(); i != MusEGlobal::cloneList.end(); ++i) { - //if (i->el == el) { if (i->cp->cevents() == el) { id = i->id; - //uuid_copy(id, i->uid); dumpEvents = false; break; } } if (id == -1) - //if(uuid_is_null(id)) { id = MusEGlobal::cloneList.size(); - //ClonePart cp(el, id); ClonePart cp(this, id); - //ClonePart cp(this); MusEGlobal::cloneList.push_back(cp); } } @@ -588,9 +525,7 @@ char sid[40]; // uuid string is 36 chars. Try 40 for good luck. sid[0] = 0; uuid_unparse_lower(uuid, sid); - //if(midi) - // xml.nput(level, "begin(); e != el->end(); ++e) - //e->second.write(level, xml, *this); e->second.write(level, xml, *this, forceWavePaths); } xml.etag(level, "part"); } +// DELETETHIS 280! whoa! /* //--------------------------------------------------------- // Part::read @@ -920,7 +847,6 @@ const QFont& font) const { xml.nput(level, "<%s family=\"%s\" size=\"%d\"", - //name, font.family().toLatin1().constData(), font.pointSize()); name, Xml::xmlString(font.family()).toLatin1().constData(), font.pointSize()); if (font.weight() != QFont::Normal) xml.nput(" weight=\"%d\"", font.weight()); @@ -1175,33 +1101,18 @@ (*i)->write(level, xml); // write routing - for (ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) { - - // p3.3.38 Changed - //if ((*i)->isMidiTrack()) - // continue; - //MusECore::WaveTrack* track = (MusECore::WaveTrack*)(*i); - //track->writeRouting(level, xml); - + for (ciTrack i = _tracks.begin(); i != _tracks.end(); ++i) (*i)->writeRouting(level, xml); - } // Write midi device routing. - for (iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) { - //MidiJackDevice* mjd = dynamic_cast(*i); - //if (!mjd) - // continue; - //mjd->writeRouting(level, xml); + for (iMidiDevice i = MusEGlobal::midiDevices.begin(); i != MusEGlobal::midiDevices.end(); ++i) (*i)->writeRouting(level, xml); - } - // p3.3.49 Write midi port routing. - for (int i = 0; i < MIDI_PORTS; ++i) { + // Write midi port routing. + for (int i = 0; i < MIDI_PORTS; ++i) MusEGlobal::midiPorts[i].writeRouting(level, xml); - } MusEGlobal::tempomap.write(level, xml); - ///sigmap.write(level, xml); AL::sigmap.write(level, xml); MusEGlobal::keymap.write(level, xml); _markerList->write(level, xml); @@ -1377,7 +1288,7 @@ void MusE::readCtrl(MusECore::Xml&, int /*prt*/, int /*channel*/) { -#if 0 +#if 0 // DELETETHIS 30. delete the whole function? ChannelState* iState = MusEGlobal::midiPorts[prt].iState(channel); int idx = 0; @@ -1401,7 +1312,6 @@ case MusECore::Xml::TagEnd: if (xml.s1() == "ctrl") { iState->controller[idx] = val; -// printf("%d %d ctrl %d val %d\n", prt, channel, idx, val); return; } default: @@ -1418,7 +1328,6 @@ void MusE::readMidichannel(MusECore::Xml& xml, int prt) { int channel = 0; -// MidiPort* port = &MusEGlobal::midiPorts[prt]; for (;;) { MusECore::Xml::Token token = xml.parse(); @@ -1429,7 +1338,7 @@ return; case MusECore::Xml::TagStart: if (tag == "pitch") { -//TODO port->setCtrl(channel, 0, CTRL_PITCH, xml.parseInt()); +//TODO port->setCtrl(channel, 0, CTRL_PITCH, xml.parseInt()); DELETETHIS? and below } else if (tag == "program") { //TODO port->setCtrl(channel, 0, CTRL_PROGRAM, xml.parseInt()); @@ -1498,6 +1407,9 @@ void MusE::read(MusECore::Xml& xml, bool doReadMidiPorts, bool isTemplate) { bool skipmode = true; + + writeTopwinState=true; + for (;;) { if (progress) progress->setValue(progress->value()+1); @@ -1554,6 +1466,14 @@ readStatusMidiInputTransformPlugin(xml); else if (tag == "toplevels") readToplevels(xml); + else if (tag == "no_toplevels") + { + if (!isTemplate) + writeTopwinState=false; + + xml.skip("no_toplevels"); + } + else xml.unknown("muse"); break; @@ -1579,7 +1499,7 @@ // write song //--------------------------------------------------------- -void MusE::write(MusECore::Xml& xml) const +void MusE::write(MusECore::Xml& xml, bool writeTopwins) const { xml.header(); @@ -1591,7 +1511,7 @@ MusEGlobal::song->write(level, xml); - if (!toplevels.empty()) { + if (writeTopwins && !toplevels.empty()) { xml.tag(level++, "toplevels"); for (MusEGui::ciToplevel i = toplevels.begin(); i != toplevels.end(); ++i) { if ((*i)->isVisible()) @@ -1599,6 +1519,11 @@ } xml.tag(level--, "/toplevels"); } + else if (!writeTopwins) + { + xml.tag(level, "no_toplevels"); + xml.etag(level, "no_toplevels"); + } xml.tag(level, "/muse"); } diff -Nru muse-2.0~rc2/muse/song.h muse-2.0/muse/song.h --- muse-2.0~rc2/muse/song.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/song.h 2012-06-30 19:24:42.000000000 +0200 @@ -33,7 +33,6 @@ #include "pos.h" #include "globaldefs.h" #include "tempo.h" -///#include "sig.h" #include "al/sig.h" #include "undo.h" #include "track.h" @@ -127,6 +126,8 @@ int noteFifoWindex; int noteFifoRindex; + TempoFifo _tempoFifo; // External tempo changes, processed in heartbeat. + int updateFlags; TrackList _tracks; // tracklist as seen by arranger @@ -264,8 +265,7 @@ // event manipulations //----------------------------------------- - //void cmdAddRecordedWave(WaveTrack* track, const Pos&, const Pos&); - void cmdAddRecordedWave(WaveTrack* track, Pos, Pos); + void cmdAddRecordedWave(WaveTrack* track, Pos, Pos); void cmdAddRecordedEvents(MidiTrack*, EventList*, unsigned); bool addEvent(Event&, Part*); void changeEvent(Event&, Event&, Part*); @@ -276,8 +276,8 @@ void addACEvent(AudioTrack* t, int acid, int frame, double val); void changeACEvent(AudioTrack* t, int acid, int frame, int newFrame, double val); - void controllerChange(Track* t); - + void addExternalTempo(const TempoRecEvent& e) { _tempoFifo.put(e); } + //----------------------------------------- // part manipulations //----------------------------------------- @@ -293,7 +293,6 @@ PartList* getSelectedWaveParts() const; bool msgRemoveParts(); - //void cmdChangePart(Part* oldPart, Part* newPart); void cmdChangePart(Part* oldPart, Part* newPart, bool doCtrls, bool doClones); void cmdRemovePart(Part* part); void cmdAddPart(Part* part); @@ -319,7 +318,7 @@ void removeTrack2(Track* track); void removeTrack3(Track* track); void removeMarkedTracks(); - //void changeTrack(Track* oldTrack, Track* newTrack); + //void changeTrack(Track* oldTrack, Track* newTrack); DELETETHIS MidiTrack* findTrack(const Part* part) const; Track* findTrack(const QString& name) const; void swapTracks(int i1, int i2); @@ -335,11 +334,11 @@ void msgInsertTrack(Track* track, int idx, bool u = true); void clearRecAutomation(bool clearList); void processAutomationEvents(); + void processMasterRec(); int execAutomationCtlPopup(AudioTrack*, const QPoint&, int); int execMidiAutomationCtlPopup(MidiTrack*, MidiPart*, const QPoint&, int); void connectJackRoutes(AudioTrack* track, bool disconnect); void updateSoloStates(); - //void chooseMidiRoutes(QButton* /*parent*/, MidiTrack* /*track*/, bool /*dst*/); //----------------------------------------- // undo, redo @@ -430,7 +429,7 @@ void markerChanged(int); void midiPortsChanged(); void midiNote(int pitch, int velo); - void controllerChanged(MusECore::Track* t); + void controllerChanged(MusECore::Track*, int); void newPartsCreated(const std::map< MusECore::Part*, std::set >&); }; diff -Nru muse-2.0~rc2/muse/stringparam.h muse-2.0/muse/stringparam.h --- muse-2.0~rc2/muse/stringparam.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/stringparam.h 2012-06-30 19:24:43.000000000 +0200 @@ -33,21 +33,19 @@ class Xml; -//typedef std::pair StringParamMapItem; typedef std::map::iterator iStringParamMap; typedef std::map::const_iterator ciStringParamMap; class StringParamMap : public std::map { public: - void set(const char* /*key*/, const char* /*value*/); - void remove(const char* /*key*/); + void set(const char* key, const char* value); + void remove(const char* key); - iStringParamMap findKey(const char* /*key*/); - //int index(char* /*key*/); + iStringParamMap findKey(const char* key); - void read(Xml& /*xml*/, const QString& /*name*/); - void write(int /*level*/, Xml& /*xml*/, const char* /*name*/) const; + void read(Xml& xml, const QString& name); + void write(int level, Xml& xml, const char* name) const; }; } // namespace MusECore diff -Nru muse-2.0~rc2/muse/structure.cpp muse-2.0/muse/structure.cpp --- muse-2.0~rc2/muse/structure.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/structure.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -145,7 +145,6 @@ TrackList* tracks = MusEGlobal::song->tracks(); for (iTrack it = tracks->begin(); it != tracks->end(); ++it) { - //MidiTrack* track = dynamic_cast(*it); Track* track = *it; if (track == 0 || (onlySelectedTracks && !track->selected())) continue; @@ -169,7 +168,6 @@ nPart = new WavePart(*(WavePart*)part); nPart->setLenTick(len); - // // cut Events in nPart EventList* el = nPart->events(); for (iEvent ie = el->lower_bound(len); ie != el->end(); ++ie) @@ -214,7 +212,6 @@ nPart = new MidiPart(*(MidiPart*)part); else nPart = new WavePart(*(WavePart*)part); - //MidiPart* nPart = new MidiPart(*(MidiPart*)part); int nt = part->tick(); nPart->setTick(nt - (rpos -lpos)); // Indicate no undo, and do port controller values but not clone parts. diff -Nru muse-2.0~rc2/muse/style.qss muse-2.0/muse/style.qss --- muse-2.0~rc2/muse/style.qss 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/style.qss 2012-06-30 19:24:43.000000000 +0200 @@ -5,7 +5,7 @@ /* TODO */ -/* +/* DELETETHIS all? QLabel#midiChannelLabel { font-size: 6pt } MidiRack, EffectRack { font-size: 8pt } @@ -70,4 +70,4 @@ background-color: gray; } -*/ \ Manca newline alla fine del file +*/ diff -Nru muse-2.0~rc2/muse/sync.cpp muse-2.0/muse/sync.cpp --- muse-2.0~rc2/muse/sync.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/sync.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -21,6 +21,7 @@ // //========================================================= +#include #include #include "sync.h" #include "song.h" @@ -31,18 +32,12 @@ #include "midiseq.h" #include "audio.h" #include "audiodev.h" -//#include "driver/audiodev.h" // p4.0.2 #include "gconfig.h" #include "xml.h" #include "midi.h" namespace MusEGlobal { -//int rxSyncPort = -1; // receive from all ports -//int txSyncPort = 1; -//int rxDeviceId = 0x7f; // any device -//int txDeviceId = 0x7f; // any device -//MidiSyncPort midiSyncPorts[MIDI_PORTS]; int volatile curMidiSyncInPort = -1; bool debugSync = false; @@ -50,12 +45,6 @@ int mtcType = 1; MusECore::MTC mtcOffset; MusECore::BValue extSyncFlag(0, "extSync"); // false - MASTER, true - SLAVE -//bool genMTCSync = false; // output MTC Sync -//bool genMCSync = false; // output MidiClock Sync -//bool genMMC = false; // output Midi Machine Control -//bool acceptMTC = false; -//bool acceptMC = true; -//bool acceptMMC = true; MusECore::BValue useJackTransport(0,"useJackTransport"); bool volatile jackTransportMaster = true; @@ -65,20 +54,19 @@ static int mtcLost; static bool mtcSync; // receive complete mtc frame? -// p3.3.28 static bool playPendingFirstClock = false; unsigned int syncSendFirstClockDelay = 1; // In milliseconds. -//static int lastStoppedBeat = 0; static unsigned int curExtMidiSyncTick = 0; unsigned int volatile lastExtMidiSyncTick = 0; double volatile curExtMidiSyncTime = 0.0; double volatile lastExtMidiSyncTime = 0.0; +MusECore::MidiSyncInfo::SyncRecFilterPresetType syncRecFilterPreset = MusECore::MidiSyncInfo::SMALL; +double syncRecTempoValQuant = 1.0; -// Not used yet. +// Not used yet. DELETETHIS? // static bool mcStart = false; // static int mcStartTick; -// p3.3.25 // From the "Introduction to the Volatile Keyword" at Embedded dot com /* A variable should be declared volatile whenever its value could change unexpectedly. ... global variables within a multi-threaded application @@ -124,7 +112,6 @@ _MTCDetect = false; _recMTCtype = 0; _recRewOnStart = true; - //_sendContNotStart = false; _actDetectBits = 0; for(int i = 0; i < MIDI_CHANNELS; ++i) { @@ -140,8 +127,6 @@ MidiSyncInfo& MidiSyncInfo::operator=(const MidiSyncInfo &sp) { - //_port = sp._port; - copyParams(sp); _lastClkTime = sp._lastClkTime; @@ -175,8 +160,6 @@ MidiSyncInfo& MidiSyncInfo::copyParams(const MidiSyncInfo &sp) { - //_port = sp._port; - _idOut = sp._idOut; _idIn = sp._idIn; _sendMC = sp._sendMC; @@ -188,7 +171,6 @@ _recMMC = sp._recMMC; _recMTC = sp._recMTC; _recRewOnStart = sp._recRewOnStart; - //_sendContNotStart = sp._sendContNotStart; return *this; } @@ -235,7 +217,7 @@ if(_MRTDetect && (t - _lastMRTTime) >= 1.0) // Set detect indicator timeout to about 1 second. { _MRTDetect = false; - // Give up the current midi sync in port number if we took it... + // Give up the current midi sync in port number if we took it... DELETETHIS 3 //if(MusEGlobal::curMidiSyncInPort == _port) // MusEGlobal::curMidiSyncInPort = -1; } @@ -249,7 +231,7 @@ if(_MMCDetect && (t - _lastMMCTime) >= 1.0) // Set detect indicator timeout to about 1 second. { _MMCDetect = false; - // Give up the current midi sync in port number if we took it... + // Give up the current midi sync in port number if we took it... DELETETHIS 3 //if(MusEGlobal::curMidiSyncInPort == _port) // MusEGlobal::curMidiSyncInPort = -1; } @@ -279,7 +261,6 @@ if(_actDetect[i] && (t - _lastActTime[i]) >= 1.0) // Set detect indicator timeout to about 1 second. { _actDetect[i] = false; - //_actDetectBits &= ~bitShiftLU[i]; _actDetectBits &= ~(1 << i); } } @@ -304,6 +285,7 @@ void MidiSyncInfo::setMRTIn(const bool v) { _recMRT = v; + // DELETETHIS 4 // If sync receive was turned off, clear the current midi sync in port number so another port can grab it. //if(!_recMRT && _port != -1 && MusEGlobal::curMidiSyncInPort == _port) // MusEGlobal::curMidiSyncInPort = -1; @@ -316,6 +298,7 @@ void MidiSyncInfo::setMMCIn(const bool v) { _recMMC = v; + // DELETETHIS 4 // If sync receive was turned off, clear the current midi sync in port number so another port can grab it. //if(!_recMMC && _port != -1 && MusEGlobal::curMidiSyncInPort == _port) // MusEGlobal::curMidiSyncInPort = -1; @@ -364,7 +347,7 @@ { _MRTDetect = true; _MRTTrig = true; - // Set the current midi sync in port number if it's not taken... + // Set the current midi sync in port number if it's not taken... //DELETETHIS 3 //if(_recMRT && MusEGlobal::curMidiSyncInPort == -1) // MusEGlobal::curMidiSyncInPort = _port; } @@ -377,7 +360,7 @@ { _MMCDetect = true; _MMCTrig = true; - // Set the current midi sync in port number if it's not taken... + // Set the current midi sync in port number if it's not taken... DELETETHIS 3 //if(_recMMC && MusEGlobal::curMidiSyncInPort == -1) // MusEGlobal::curMidiSyncInPort = _port; } @@ -416,7 +399,6 @@ if(ch < 0 || ch >= MIDI_CHANNELS) return; - //_actDetectBits |= bitShiftLU[ch]; _actDetectBits |= (1 << ch); _actDetect[ch] = true; _actTrig[ch] = true; @@ -429,7 +411,7 @@ bool MidiSyncInfo::isDefault() const { return(_idOut == 127 && _idIn == 127 && !_sendMC && !_sendMRT && !_sendMMC && !_sendMTC && - /* !_sendContNotStart && */ !_recMC && !_recMRT && !_recMMC && !_recMTC && _recRewOnStart); + !_recMC && !_recMRT && !_recMMC && !_recMTC && _recRewOnStart); } //--------------------------------------------------------- @@ -458,8 +440,6 @@ _sendMMC = xml.parseInt(); else if (tag == "sendMTC") _sendMTC = xml.parseInt(); - //else if (tag == "sendContNotStart") - // _sendContNotStart = xml.parseInt(); else if (tag == "recMC") _recMC = xml.parseInt(); else if (tag == "recMRT") @@ -486,26 +466,13 @@ // write //--------------------------------------------------------- -//void MidiSyncInfo::write(int level, Xml& xml, MidiDevice* md) void MidiSyncInfo::write(int level, Xml& xml) { - //if(!md) - // return; - - // All defaults? Nothing to write. - //if(_idOut == 127 && _idIn == 127 && !_sendMC && !_sendMRT && !_sendMMC && !_sendMTC && - // /* !_sendContNotStart && */ !_recMC && !_recMRT && !_recMMC && !_recMTC && _recRewOnStart) - // return; if(isDefault()) return; xml.tag(level++, "midiSyncInfo"); - //xml.intTag(level, "idx", idx); - //xml.intTag(level++, "midiSyncPort", idx); - //xml.tag(level++, "midiSyncInfo idx=\"%d\"", idx); - - //xml.strTag(level, "device", md->name()); - + if(_idOut != 127) xml.intTag(level, "idOut", _idOut); if(_idIn != 127) @@ -515,12 +482,10 @@ xml.intTag(level, "sendMC", true); if(_sendMRT) xml.intTag(level, "sendMRT", true); - if(_sendMRT) + if(_sendMMC) xml.intTag(level, "sendMMC", true); if(_sendMTC) xml.intTag(level, "sendMTC", true); - //if(_sendContNotStart) - // xml.intTag(level, "sendContNotStart", true); if(_recMC) xml.intTag(level, "recMC", true); @@ -541,7 +506,6 @@ // Midi Machine Control Input received //--------------------------------------------------------- -//void MidiSeq::mmcInput(const unsigned char* p, int n) void MidiSeq::mmcInput(int port, const unsigned char* p, int n) { if (MusEGlobal::debugSync) @@ -560,10 +524,6 @@ if(!msync.MMCIn()) return; - //if (!(MusEGlobal::extSyncFlag.value() && acceptMMC)) - //if(!MusEGlobal::extSyncFlag.value()) - // return; - switch(p[3]) { case 1: if (MusEGlobal::debugSync) @@ -571,12 +531,10 @@ MusEGlobal::playPendingFirstClock = false; - //if ((state == PLAY || state == PRECOUNT)) if (MusEGlobal::audio->isPlaying()) MusEGlobal::audio->msgPlay(false); playStateExt = false; alignAllTicks(); - //stopPlay(); break; case 2: if (MusEGlobal::debugSync) @@ -588,7 +546,6 @@ MusEGlobal::mtcValid = false; MusEGlobal::mtcLost = 0; MusEGlobal::mtcSync = false; - //startPlay(); alignAllTicks(); MusEGlobal::audio->msgPlay(true); playStateExt = true; @@ -623,23 +580,16 @@ if (!MusEGlobal::checkAudioDevice()) return; MTC mtc(p[6] & 0x1f, p[7], p[8], p[9], p[10]); int type = (p[6] >> 5) & 3; - //int mmcPos = MusEGlobal::tempomap.frame2tick(lrint(mtc.time()*MusEGlobal::sampleRate)); - //int mmcPos = lrint(mtc.time()*MusEGlobal::sampleRate); int mmcPos = lrint(mtc.time(type) * MusEGlobal::sampleRate); - //Pos tp(mmcPos, true); Pos tp(mmcPos, false); - //MusEGlobal::audioDevice->seekTransport(tp.frame()); MusEGlobal::audioDevice->seekTransport(tp); alignAllTicks(); - //seek(tp); if (MusEGlobal::debugSync) { - //printf("MMC: %f %d seek ", mtc.time(), mmcPos); printf("MMC: LOCATE mtc type:%d time:%lf frame:%d mtc: ", type, mtc.time(), mmcPos); mtc.print(); printf("\n"); } - //write(sigFd, "G", 1); break; } // fall through @@ -653,12 +603,9 @@ // process Quarter Frame Message //--------------------------------------------------------- -//void MidiSeq::mtcInputQuarter(int, unsigned char c) void MidiSeq::mtcInputQuarter(int port, unsigned char c) { static int hour, min, sec, frame; - - //printf("MidiSeq::mtcInputQuarter c:%h\n", c); int valL = c & 0xf; int valH = valL << 4; @@ -727,9 +674,7 @@ } else if (MusEGlobal::mtcValid && (MusEGlobal::mtcLost == 0)) { - //MusEGlobal::mtcCurTime.incQuarter(); MusEGlobal::mtcCurTime.incQuarter(type); - //MusEGlobal::mtcSyncMsg(MusEGlobal::mtcCurTime, type, false); } } @@ -738,13 +683,10 @@ // process Frame Message //--------------------------------------------------------- -//void MidiSeq::mtcInputFull(const unsigned char* p, int n) void MidiSeq::mtcInputFull(int port, const unsigned char* p, int n) { if (MusEGlobal::debugSync) printf("mtcInputFull\n"); - //if (!MusEGlobal::extSyncFlag.value()) - // return; if (p[3] != 1) { if (p[3] != 2) { // silently ignore user bits @@ -779,10 +721,8 @@ msync.setRecMTCtype(type); msync.trigMTCDetect(); // MTC in not turned on? Forget it. - //if(MusEGlobal::extSyncFlag.value() && msync.MTCIn()) if(msync.MTCIn()) { - //Pos tp(lrint(MusEGlobal::mtcCurTime.time() * MusEGlobal::sampleRate), false); Pos tp(lrint(MusEGlobal::mtcCurTime.time(type) * MusEGlobal::sampleRate), false); MusEGlobal::audioDevice->seekTransport(tp); alignAllTicks(); @@ -794,10 +734,8 @@ // nonRealtimeSystemSysex //--------------------------------------------------------- -//void MidiSeq::nonRealtimeSystemSysex(const unsigned char* p, int n) void MidiSeq::nonRealtimeSystemSysex(int /*port*/, const unsigned char* p, int n) { -// int chan = p[2]; switch(p[3]) { case 4: printf("NRT Setup\n"); @@ -822,30 +760,23 @@ if (MusEGlobal::midiInputTrace) printf("set song position port:%d %d\n", port, midiBeat); - //MusEGlobal::midiPorts[port].syncInfo().trigMCSyncDetect(); MusEGlobal::midiPorts[port].syncInfo().trigMRTDetect(); - //if (!MusEGlobal::extSyncFlag.value()) - // External sync not on? Clock in not turned on? - //if(!MusEGlobal::extSyncFlag.value() || !MusEGlobal::midiPorts[port].syncInfo().MCIn()) if(!MusEGlobal::extSyncFlag.value() || !MusEGlobal::midiPorts[port].syncInfo().MRTIn()) return; // Re-transmit song position to other devices if clock out turned on. for(int p = 0; p < MIDI_PORTS; ++p) - //if(p != port && MusEGlobal::midiPorts[p].syncInfo().MCOut()) if(p != port && MusEGlobal::midiPorts[p].syncInfo().MRTOut()) MusEGlobal::midiPorts[p].sendSongpos(midiBeat); MusEGlobal::curExtMidiSyncTick = (MusEGlobal::config.division * midiBeat) / 4; MusEGlobal::lastExtMidiSyncTick = MusEGlobal::curExtMidiSyncTick; - //Pos pos((MusEGlobal::config.division * midiBeat) / 4, true); Pos pos(MusEGlobal::curExtMidiSyncTick, true); if (!MusEGlobal::checkAudioDevice()) return; - //MusEGlobal::audioDevice->seekTransport(pos.frame()); MusEGlobal::audioDevice->seekTransport(pos); alignAllTicks(pos.frame()); if (MusEGlobal::debugSync) @@ -859,8 +790,6 @@ //--------------------------------------------------------- void MidiSeq::alignAllTicks(int frameOverride) { - //printf("alignAllTicks audioDriver->framePos=%d, audio->pos().frame()=%d\n", - // MusEGlobal::audioDevice->framePos(), audio->pos().frame()); unsigned curFrame; if (!frameOverride) curFrame = MusEGlobal::audio->pos().frame(); @@ -893,26 +822,26 @@ recTick2 = 0; if (MusEGlobal::debugSync) printf("alignAllTicks curFrame=%d recTick=%d tempo=%.3f frameOverride=%d\n",curFrame,recTick,(float)((1000000.0 * 60.0)/tempo), frameOverride); - + + lastTempo = 0; + for(int i = 0; i < _clockAveragerPoles; ++i) + { + _avgClkDiffCounter[i] = 0; + _averagerFull[i] = false; + } + _lastRealTempo = 0.0; } //--------------------------------------------------------- // realtimeSystemInput // real time message received //--------------------------------------------------------- -void MidiSeq::realtimeSystemInput(int port, int c) +void MidiSeq::realtimeSystemInput(int port, int c, double time) { if (MusEGlobal::midiInputTrace) - printf("realtimeSystemInput port:%d 0x%x\n", port+1, c); + printf("realtimeSystemInput port:%d 0x%x time:%f\n", port+1, c, time); - //if (MusEGlobal::midiInputTrace && (rxSyncPort != port) && rxSyncPort != -1) { - // if (MusEGlobal::debugSync) - // printf("rxSyncPort configured as %d; received sync from port %d\n", - // rxSyncPort, port); - // return; - // } - MidiPort* mp = &MusEGlobal::midiPorts[port]; // Trigger on any tick, clock, or realtime command. @@ -944,8 +873,6 @@ if(port != MusEGlobal::curMidiSyncInPort) break; - //printf("midi clock:%f\n", curTime()); - // Re-transmit clock to other devices if clock out turned on. // Must be careful not to allow more than one clock input at a time. // Would re-transmit mixture of multiple clocks - confusing receivers. @@ -955,7 +882,9 @@ if(p != port && MusEGlobal::midiPorts[p].syncInfo().MCOut()) MusEGlobal::midiPorts[p].sendClock(); - // p3.3.28 + MusEGlobal::lastExtMidiSyncTime = MusEGlobal::curExtMidiSyncTime; + MusEGlobal::curExtMidiSyncTime = time; + if(MusEGlobal::playPendingFirstClock) { MusEGlobal::playPendingFirstClock = false; @@ -965,21 +894,166 @@ if(!MusEGlobal::audio->isPlaying()) MusEGlobal::audioDevice->startTransport(); } - //else + //else DELETETHIS? // This part will be run on the second and subsequent clocks, after start. // Can't check audio state, might not be playing yet, we might miss some increments. - //if(MusEGlobal::audio->isPlaying()) if(playStateExt) { - MusEGlobal::lastExtMidiSyncTime = MusEGlobal::curExtMidiSyncTime; - MusEGlobal::curExtMidiSyncTime = curTime(); int div = MusEGlobal::config.division/24; MusEGlobal::midiExtSyncTicks += div; MusEGlobal::lastExtMidiSyncTick = MusEGlobal::curExtMidiSyncTick; MusEGlobal::curExtMidiSyncTick += div; + + if(MusEGlobal::song->record() && MusEGlobal::lastExtMidiSyncTime > 0.0) + { + double diff = MusEGlobal::curExtMidiSyncTime - MusEGlobal::lastExtMidiSyncTime; + if(diff != 0.0) + { + if(_clockAveragerPoles == 0) + { + double real_tempo = 60.0/(diff * 24.0); + if(_tempoQuantizeAmount > 0.0) + { + double f_mod = fmod(real_tempo, _tempoQuantizeAmount); + if(f_mod < _tempoQuantizeAmount/2.0) + real_tempo -= f_mod; + else + real_tempo += _tempoQuantizeAmount - f_mod; + } + int new_tempo = ((1000000.0 * 60.0) / (real_tempo)); + if(new_tempo != lastTempo) + { + lastTempo = new_tempo; + // Compute tick for this tempo - it is one step back in time. + int add_tick = MusEGlobal::curExtMidiSyncTick - div; + if(MusEGlobal::debugSync) + printf("adding new tempo tick:%d curExtMidiSyncTick:%d avg_diff:%f real_tempo:%f new_tempo:%d = %f\n", add_tick, MusEGlobal::curExtMidiSyncTick, diff, real_tempo, new_tempo, (double)((1000000.0 * 60.0)/new_tempo)); + MusEGlobal::song->addExternalTempo(TempoRecEvent(add_tick, new_tempo)); + } + } + else + { + double avg_diff = diff; + for(int pole = 0; pole < _clockAveragerPoles; ++pole) + { + timediff[pole][_avgClkDiffCounter[pole]] = avg_diff; + ++_avgClkDiffCounter[pole]; + if(_avgClkDiffCounter[pole] >= _clockAveragerStages[pole]) + { + _avgClkDiffCounter[pole] = 0; + _averagerFull[pole] = true; + } + + // Each averager needs to be full before we can pass the data to + // the next averager or use the data if all averagers are full... + if(!_averagerFull[pole]) + break; + else + { + avg_diff = 0.0; + for(int i = 0; i < _clockAveragerStages[pole]; ++i) + avg_diff += timediff[pole][i]; + avg_diff /= _clockAveragerStages[pole]; + + int fin_idx = _clockAveragerPoles - 1; + + // On the first pole? Check for large differences. + if(_preDetect && pole == 0) + { + double real_tempo = 60.0/(avg_diff * 24.0); + double real_tempo_diff = abs(real_tempo - _lastRealTempo); + + // If the tempo changed a large amount, reset. + if(real_tempo_diff >= 10.0) // TODO: User-adjustable? + { + if(_tempoQuantizeAmount > 0.0) + { + double f_mod = fmod(real_tempo, _tempoQuantizeAmount); + if(f_mod < _tempoQuantizeAmount/2.0) + real_tempo -= f_mod; + else + real_tempo += _tempoQuantizeAmount - f_mod; + } + _lastRealTempo = real_tempo; + int new_tempo = ((1000000.0 * 60.0) / (real_tempo)); + + if(new_tempo != lastTempo) + { + lastTempo = new_tempo; + // Compute tick for this tempo - it is way back in time. + int add_tick = MusEGlobal::curExtMidiSyncTick - _clockAveragerStages[0] * div; + if(add_tick < 0) + { + printf("FIXME sync: adding restart tempo curExtMidiSyncTick:%d: add_tick:%d < 0 !\n", MusEGlobal::curExtMidiSyncTick, add_tick); + add_tick = 0; + } + if(MusEGlobal::debugSync) + printf("adding restart tempo tick:%d curExtMidiSyncTick:%d tick_idx_sub:%d avg_diff:%f real_tempo:%f real_tempo_diff:%f new_tempo:%d = %f\n", add_tick, MusEGlobal::curExtMidiSyncTick, _clockAveragerStages[0], avg_diff, real_tempo, real_tempo_diff, new_tempo, (double)((1000000.0 * 60.0)/new_tempo)); + MusEGlobal::song->addExternalTempo(TempoRecEvent(add_tick, new_tempo)); + } + + // Reset all the poles. + //for(int i = 0; i < clockAveragerPoles; ++i) + // We have a value for this pole, let's keep it but reset the other poles. + for(int i = 1; i < _clockAveragerPoles; ++i) + { + _avgClkDiffCounter[i] = 0; + _averagerFull[i] = false; + } + break; + } + } + + // On the last pole? + // All averagers need to be full before we can use the data... + if(pole == fin_idx) + { + double real_tempo = 60.0/(avg_diff * 24.0); + double real_tempo_diff = abs(real_tempo - _lastRealTempo); + + if(real_tempo_diff >= _tempoQuantizeAmount/2.0) // Anti-hysteresis + { + if(_tempoQuantizeAmount > 0.0) + { + double f_mod = fmod(real_tempo, _tempoQuantizeAmount); + if(f_mod < _tempoQuantizeAmount/2.0) + real_tempo -= f_mod; + else + real_tempo += _tempoQuantizeAmount - f_mod; + } + _lastRealTempo = real_tempo; + int new_tempo = ((1000000.0 * 60.0) / (real_tempo)); + + if(new_tempo != lastTempo) + { + lastTempo = new_tempo; + // Compute tick for this tempo - it is way back in time. + int tick_idx_sub = 0; + for(int i = 0; i <= pole; ++i) + tick_idx_sub += _clockAveragerStages[i]; + // Compensate: Each pole > 0 has a delay one less than its number of stages. + // For example three pole {8, 8, 8} has a delay of 22 not 24. + tick_idx_sub -= pole; + int add_tick = MusEGlobal::curExtMidiSyncTick - tick_idx_sub * div; + if(add_tick < 0) + { + printf("FIXME sync: adding new tempo curExtMidiSyncTick:%d: add_tick:%d < 0 !\n", MusEGlobal::curExtMidiSyncTick, add_tick); + add_tick = 0; + } + if(MusEGlobal::debugSync) + printf("adding new tempo tick:%d curExtMidiSyncTick:%d tick_idx_sub:%d avg_diff:%f real_tempo:%f new_tempo:%d = %f\n", add_tick, MusEGlobal::curExtMidiSyncTick, tick_idx_sub, avg_diff, real_tempo, new_tempo, (double)((1000000.0 * 60.0)/new_tempo)); + MusEGlobal::song->addExternalTempo(TempoRecEvent(add_tick, new_tempo)); + } + } + } + } + } + } + } + } } -//BEGIN : Original code: +//BEGIN : Original code: DELETETHIS 250 /* double mclock0 = curTime(); // Difference in time last 2 rounds: @@ -1230,6 +1304,7 @@ } break; case ME_TICK: // midi tick (every 10 msec) + //DELETETHIS 6 // FIXME: Unfinished? mcStartTick is uninitialized and Song::setPos doesn't set it either. Dangerous to allow this. //if (mcStart) { // song->setPos(0, mcStartTick); @@ -1240,10 +1315,8 @@ case ME_START: // start // Re-transmit start to other devices if clock out turned on. for(int p = 0; p < MIDI_PORTS; ++p) - //if(p != port && MusEGlobal::midiPorts[p].syncInfo().MCOut()) if(p != port && MusEGlobal::midiPorts[p].syncInfo().MRTOut()) { - // p3.3.31 // If we aren't rewinding on start, there's no point in re-sending start. // Re-send continue instead, for consistency. if(MusEGlobal::midiPorts[port].syncInfo().recRewOnStart()) @@ -1254,34 +1327,24 @@ if (MusEGlobal::debugSync) printf(" start\n"); - //printf("midi start:%f\n", curTime()); + // DELETETHIS, remove the wrapping if(true) if (1 /* !MusEGlobal::audio->isPlaying()*/ /*state == IDLE*/) { if (!MusEGlobal::checkAudioDevice()) return; - // p3.3.31 // Rew on start option. if(MusEGlobal::midiPorts[port].syncInfo().recRewOnStart()) { MusEGlobal::curExtMidiSyncTick = 0; MusEGlobal::lastExtMidiSyncTick = MusEGlobal::curExtMidiSyncTick; - //MusEGlobal::audioDevice->seekTransport(0); MusEGlobal::audioDevice->seekTransport(Pos(0, false)); } - //unsigned curFrame = MusEGlobal::audio->curFrame(); - //if (MusEGlobal::debugSync) - // printf(" curFrame=%d\n", curFrame); - alignAllTicks(); - //if (MusEGlobal::debugSync) - // printf(" curFrame: %d curTick: %d tempo: %d\n", curFrame, recTick, MusEGlobal::tempomap.tempo(0)); storedtimediffs = 0; - for (int i=0; i<24; i++) - timediff[i] = 0.0; - // p3.3.26 1/23/10 + // p3.3.26 1/23/10 DELETETHIS 6 // Changed because msgPlay calls MusEGlobal::audioDevice->seekTransport(song->cPos()) // and song->cPos() may not be changed to 0 yet, causing tranport not to go to 0. //MusEGlobal::audio->msgPlay(true); @@ -1296,7 +1359,6 @@ case ME_CONTINUE: // continue // Re-transmit continue to other devices if clock out turned on. for(int p = 0; p < MIDI_PORTS; ++p) - //if(p != port && MusEGlobal::midiPorts[p].syncInfo().MCOut()) if(p != port && MusEGlobal::midiPorts[p].syncInfo().MRTOut()) MusEGlobal::midiPorts[p].sendContinue(); @@ -1321,7 +1383,6 @@ break; case ME_STOP: // stop { - // p3.3.35 // Stop the increment right away. MusEGlobal::midiExtSyncTicks = 0; playStateExt = false; @@ -1329,25 +1390,17 @@ // Re-transmit stop to other devices if clock out turned on. for(int p = 0; p < MIDI_PORTS; ++p) - //if(p != port && MusEGlobal::midiPorts[p].syncInfo().MCOut()) if(p != port && MusEGlobal::midiPorts[p].syncInfo().MRTOut()) MusEGlobal::midiPorts[p].sendStop(); - //MusEGlobal::playPendingFirstClock = false; - //lastStoppedBeat = (MusEGlobal::audio->tickPos() * 4) / MusEGlobal::config.division; - //MusEGlobal::curExtMidiSyncTick = (MusEGlobal::config.division * lastStoppedBeat) / 4; - - //printf("stop:%f\n", curTime()); - - if (MusEGlobal::audio->isPlaying() /*state == PLAY*/) { + if (MusEGlobal::audio->isPlaying()) MusEGlobal::audio->msgPlay(false); - //playStateExt = false; - } if (MusEGlobal::debugSync) printf("realtimeSystemInput stop\n"); - + + //DELETETHIS 7 // Just in case the process still runs a cycle or two and causes the // audio tick position to increment, reset the incrementer and force // the transport position to what the hardware thinks is the current position. @@ -1358,7 +1411,7 @@ } break; - //case 0xfd: // unknown + //case 0xfd: // unknown DELETETHIS 3 //case ME_SENSE: // active sensing //case ME_META: // system reset (reset is 0xff same enumeration as file meta event) default: @@ -1381,10 +1434,7 @@ if (MusEGlobal::debugSync) printf("MidiSeq::MusEGlobal::mtcSyncMsg time:%lf stime:%lf seekFlag:%d\n", time, stime, seekFlag); - if (seekFlag && MusEGlobal::audio->isRunning() /*state == START_PLAY*/) { -// int tick = MusEGlobal::tempomap.time2tick(time); - //state = PLAY; - //write(sigFd, "1", 1); // say PLAY to gui + if (seekFlag && MusEGlobal::audio->isRunning()) { if (!MusEGlobal::checkAudioDevice()) return; if (MusEGlobal::debugSync) printf("MidiSeq::MusEGlobal::mtcSyncMsg starting transport.\n"); @@ -1392,7 +1442,7 @@ return; } - /*if (tempoSN != MusEGlobal::tempomap.tempoSN()) { + /*if (tempoSN != MusEGlobal::tempomap.tempoSN()) { DELETETHIS 13 double cpos = MusEGlobal::tempomap.tick2time(_midiTick, 0); samplePosStart = samplePos - lrint(cpos * MusEGlobal::sampleRate); rtcTickStart = rtcTick - lrint(cpos * realRtcTicks); diff -Nru muse-2.0~rc2/muse/sync.h muse-2.0/muse/sync.h --- muse-2.0~rc2/muse/sync.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/sync.h 2012-06-30 19:24:43.000000000 +0200 @@ -31,11 +31,12 @@ namespace MusECore { class Xml; -//class MidiDevice; -//class MidiSyncPort class MidiSyncInfo { + public: + enum SyncRecFilterPresetType { NONE=0, TINY, SMALL, MEDIUM, LARGE, LARGE_WITH_PRE_DETECT, TYPE_END }; + private: int _port; @@ -54,7 +55,6 @@ int _recMTCtype; bool _recRewOnStart; - //bool _sendContNotStart; double _lastClkTime; double _lastTickTime; @@ -113,8 +113,6 @@ bool recRewOnStart() const { return _recRewOnStart; } void setRecRewOnStart(const bool v) { _recRewOnStart = v; } - //bool sendContNotStart() const { return _sendContNotStart; } - //void setSendContNotStart(const bool v) { _sendContNotStart = v; } bool MCSyncDetect() const { return _clockDetect; } void trigMCSyncDetect(); @@ -139,7 +137,6 @@ bool isDefault() const; void read(Xml& xml); - //void write(int level, Xml& xml, MidiDevice* md); void write(int level, Xml& xml); }; @@ -147,28 +144,18 @@ namespace MusEGlobal { -//extern MidiSync midiSyncPorts[MIDI_PORTS]; - extern bool debugSync; -//extern int rxSyncPort; -//extern int txSyncPort; -//extern int rxDeviceId; -//extern int txDeviceId; - extern int mtcType; extern MusECore::MTC mtcOffset; extern MusECore::BValue extSyncFlag; -//extern bool genMTCSync; // output MTC Sync -//extern bool genMCSync; // output MidiClock Sync -//extern bool genMMC; // output Midi Machine Control -//extern bool acceptMTC; -//extern bool acceptMC; -//extern bool acceptMMC; extern int volatile curMidiSyncInPort; extern MusECore::BValue useJackTransport; extern bool volatile jackTransportMaster; extern unsigned int syncSendFirstClockDelay; // In milliseconds. +extern unsigned int volatile lastExtMidiSyncTick; +extern MusECore::MidiSyncInfo::SyncRecFilterPresetType syncRecFilterPreset; +extern double syncRecTempoValQuant; } // namespace MusEGlobal diff -Nru muse-2.0~rc2/muse/synth.cpp muse-2.0/muse/synth.cpp --- muse-2.0~rc2/muse/synth.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/synth.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -33,7 +33,6 @@ #include #include -//#include #include "app.h" #include "arranger.h" @@ -50,7 +49,6 @@ #include "audio.h" #include "midiseq.h" #include "midictrl.h" -//#include "stringparam.h" #include "popupmenu.h" #include "globaldefs.h" @@ -76,26 +74,6 @@ return Synth::SYNTH_TYPE_END; } -/* -//--------------------------------------------------------- -// description -//--------------------------------------------------------- - -const char* MessSynth::description() const - { - return _descr ? _descr->description : ""; - } - -//--------------------------------------------------------- -// version -//--------------------------------------------------------- - -const char* MessSynth::version() const - { - return _descr ? _descr->version : ""; - } -*/ - bool MessSynthIF::nativeGuiVisible() const { return _mess ? _mess->nativeGuiVisible() : false; @@ -165,7 +143,7 @@ i != MusEGlobal::synthis.end(); ++i) { if( ((*i)->baseName() == sclass) && - (label.isEmpty() || ((*i)->name() == label)) && + (label.isEmpty() || ((*i)->name() == label)) && (type == Synth::SYNTH_TYPE_END || type == (*i)->synthType()) ) return *i; } @@ -186,9 +164,7 @@ si = new SynthI(); QString n; n.setNum(s->instances()); - //QString instance_name = s->baseName() + "-" + n; QString instance_name = s->name() + "-" + n; - if (si->initInstance(s, instance_name)) { delete si; return 0; @@ -203,10 +179,6 @@ // Synth //--------------------------------------------------------- -//Synth::Synth(const QFileInfo& fi) -// : info(fi) -//Synth::Synth(const QFileInfo& fi, QString label) -// : info(fi), _name(label) Synth::Synth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver) : info(fi), _name(label), _description(descr), _maker(maker), _version(ver) { @@ -217,15 +189,10 @@ // instantiate //--------------------------------------------------------- -//void* MessSynth::instantiate() void* MessSynth::instantiate(const QString& instanceName) { ++_instances; - //QString n; - //n.setNum(_instances); - //QString instanceName = baseName() + "-" + n; - MusEGlobal::doSetuid(); QByteArray ba = info.filePath().toLatin1(); const char* path = ba.constData(); @@ -326,13 +293,17 @@ //--------------------------------------------------------- bool SynthI::putEvent(const MidiPlayEvent& ev) -//bool SynthI::putMidiEvent(const MidiPlayEvent& ev) { if(_writeEnable) + { + if (MusEGlobal::midiOutputTrace) + { + printf("MidiOut: Synth: <%s>: ", name().toLatin1().constData()); + ev.dump(); + } return _sif->putEvent(ev); - - // Hmm, act as if the event went through? - //return true; + } + return false; } @@ -373,10 +344,8 @@ // init //--------------------------------------------------------- -//bool MessSynthIF::init(Synth* s) bool MessSynthIF::init(Synth* s, SynthI* si) { - //_mess = (Mess*)s->instantiate(); _mess = (Mess*)((MessSynth*)s)->instantiate(si->name()); return (_mess == 0); @@ -397,11 +366,8 @@ return 0; } -//SynthIF* MessSynth::createSIF() const SynthIF* MessSynth::createSIF(SynthI* si) { - //return new MessSynthIF(si); - MessSynthIF* sif = new MessSynthIF(si); sif->init(this, si); return sif; @@ -415,17 +381,11 @@ bool SynthI::initInstance(Synth* s, const QString& instanceName) { synthesizer = s; - //sif = s->createSIF(); - //_sif = s->createSIF(this); - - //sif->init(s); setName(instanceName); // set midi device name setIName(instanceName); // set instrument name _sif = s->createSIF(this); - // p3.3.38 - //AudioTrack::setChannels(_sif->channels()); AudioTrack::setTotalOutChannels(_sif->totalOutChannels()); AudioTrack::setTotalInChannels(_sif->totalInChannels()); @@ -442,10 +402,8 @@ int max; int initval = CTRL_VAL_UNKNOWN; id = _sif->getControllerInfo(id, &name, &ctrl, &min, &max, &initval); -// printf("looking for params\n"); if (id == 0) break; -// printf("got parameter:: %s\n", name); // Added by T356. Override existing program controller. @@ -543,8 +501,8 @@ void SynthI::deactivate3() { _sif->deactivate3(); - // Moved below by Tim. p3.3.14 - //synthesizer->incInstances(-1); + + //synthesizer->incInstances(-1); // Moved below by Tim. p3.3.14 if(MusEGlobal::debugMsg) printf("SynthI::deactivate3 deleting _sif...\n"); @@ -596,17 +554,13 @@ while(it!=list.end()) { fi = &*it; - //MusEGlobal::doSetuid(); QByteArray ba = fi->filePath().toLatin1(); const char* path = ba.constData(); // load Synti dll - //printf("initMidiSynth: dlopen file:%s name:%s desc:%s\n", fi->filePath().toLatin1().constData(), QString(descr->name), QString(descr->description), QString(""), QString(descr->version))); void* handle = dlopen(path, RTLD_NOW); if (handle == 0) { fprintf(stderr, "initMidiSynth: MESS dlopen(%s) failed: %s\n", path, dlerror()); - //MusEGlobal::undoSetuid(); - //return 0; ++it; continue; } @@ -622,8 +576,6 @@ "library file \"%s\": %s.\n" "Are you sure this is a MESS plugin file?\n", path, txt); - //MusEGlobal::undoSetuid(); - //return 0; } #endif dlclose(handle); @@ -633,19 +585,11 @@ const MESS* descr = msynth(); if (descr == 0) { fprintf(stderr, "initMidiSynth: no MESS descr found in %s\n", path); - //MusEGlobal::undoSetuid(); - //return 0; dlclose(handle); ++it; continue; } - //Mess* mess = descr->instantiate(MusEGlobal::sampleRate, muse, &museProject, instanceName.toLatin1().constData()); - //MusEGlobal::undoSetuid(); - - - - //MusEGlobal::synthis.push_back(new MessSynth(*fi)); MusEGlobal::synthis.push_back(new MessSynth(*fi, QString(descr->name), QString(descr->description), QString(""), QString(descr->version))); dlclose(handle); @@ -665,38 +609,29 @@ SynthI* Song::createSynthI(const QString& sclass, const QString& label, Synth::Type type, Track* insertAt) { - //printf("Song::createSynthI calling ::createSynthI class:%s\n", sclass.toLatin1().constData()); - SynthI* si = createSynthInstance(sclass, label, type); if(!si) return 0; - //printf("Song::createSynthI created SynthI. Before insertTrack1...\n"); int idx = insertAt ? _tracks.index(insertAt) : -1; insertTrack1(si, idx); - //printf("Song::createSynthI after insertTrack1. Before msgInsertTrack...\n"); msgInsertTrack(si, idx, true); // add to instance list - //printf("Song::createSynthI after msgInsertTrack. Before insertTrack3...\n"); insertTrack3(si, idx); - //printf("Song::createSynthI after insertTrack3. Adding default routes...\n"); - OutputList* ol = MusEGlobal::song->outputs(); // add default route to master (first audio output) if (!ol->empty()) { AudioOutput* ao = ol->front(); - // p3.3.38 - //MusEGlobal::audio->msgAddRoute(Route(si, -1), Route(ao, -1)); - //MusEGlobal::audio->msgAddRoute(Route((AudioTrack*)si, -1), Route(ao, -1)); // Make sure the route channel and channels are valid. MusEGlobal::audio->msgAddRoute(Route((AudioTrack*)si, 0, ((AudioTrack*)si)->channels()), Route(ao, 0, ((AudioTrack*)si)->channels())); MusEGlobal::audio->msgUpdateSoloStates(); } + // DELETETHIS 5 // Now that the track has been added to the lists in insertTrack2(), // if it's a dssi synth, OSC can find the synth, and initialize (and show) its native gui. // No, initializing OSC without actually showing the gui doesn't work, at least for @@ -714,7 +649,6 @@ { xml.tag(level++, "SynthI"); AudioTrack::writeProperties(level, xml); - //xml.intTag(level, "synthType", synth()->synthType()); xml.strTag(level, "synthType", synthType2String(synth()->synthType())); xml.strTag(level, "class", synth()->baseName()); @@ -739,7 +673,6 @@ getGeometry(&x, &y, &w, &h); if (h || w) xml.qrectTag(level, "geometry", QRect(x, y, w, h)); - //xml.geometryTag(level, "geometry", _gui); } if (hasNativeGui()) { @@ -851,7 +784,6 @@ return; case Xml::TagStart: if (tag == "synthType") - //type = xml.parseInt(); type = string2SynthType(xml.parse1()); else if (tag == "class") sclass = xml.parse1(); @@ -900,6 +832,7 @@ if (port != -1 && port < MIDI_PORTS) MusEGlobal::midiPorts[port].setMidiDevice(this); + // DELETETHIS 5 // Now that the track has been added to the lists in insertTrack2(), // if it's a dssi synth, OSC can find the synth, and initialize (and show) its native gui. // No, initializing OSC without actually showing the gui doesn't work, at least for @@ -934,7 +867,6 @@ { if (_mess) { - //return _mess->getPatchName(channel, prog, type, drum); const char* s = _mess->getPatchName(channel, prog, type, drum); if(s) return s; @@ -953,7 +885,7 @@ while (mp) { int id = ((mp->hbank & 0xff) << 16) + ((mp->lbank & 0xff) << 8) + mp->prog; - /* + /* DELETETHIS 9 int pgid = ((mp->hbank & 0xff) << 8) | (mp->lbank & 0xff) | 0x40000000; int itemnum = menu->indexOf(pgid); if(itemnum == -1) @@ -997,10 +929,10 @@ if(off()) { // Clear any accumulated play events. - //playEvents()->clear(); + //playEvents()->clear(); DELETETHIS _playEvents.clear(); // Eat up any fifo events. - //while(!eventFifo.isEmpty()) + //while(!eventFifo.isEmpty()) DELETETHIS // eventFifo.get(); eventFifo.clear(); // Clear is the same but faster AND safer, right? } @@ -1023,26 +955,18 @@ int p = midiPort(); MidiPort* mp = (p != -1) ? &MusEGlobal::midiPorts[p] : 0; - //MPEventList* el = playEvents(); - ///iMPEvent ie = nextPlayEvent(); - //iMPEvent ie = el->begin(); // p4.0.15 Tim. iMPEvent ie = _playEvents.begin(); - - //ie = _sif->getData(mp, el, ie, pos, ports, n, buffer); ie = _sif->getData(mp, &_playEvents, ie, pos, ports, n, buffer); - ///setNextPlayEvent(ie); // p4.0.15 We are done with these events. Let us erase them here instead of Audio::processMidi. // That way we can simply set the next play event to the beginning. // This also allows other events to be inserted without the problems caused by the next play event // being at the 'end' iterator and not being *easily* set to some new place beginning of the newer insertions. // The way that MPEventList sorts made it difficult to predict where the iterator of the first newly inserted items was. // The erasure in Audio::processMidi was missing some events because of that. - //el->erase(el->begin(), ie); _playEvents.erase(_playEvents.begin(), ie); - // setNextPlayEvent(el->begin()); // Removed p4.0.15 return true; } @@ -1057,22 +981,17 @@ for (; i != el->end(); ++i) { int evTime = i->time(); - if (evTime == 0) { - // printf("MessSynthIF::getData - time is 0!\n"); - // continue; + if (evTime == 0) evTime=abs(frameOffset); // will cause frame to be zero, problem? - } + int frame = evTime - abs(frameOffset); - if (frame >= endPos) { - printf("frame > endPos!! frame = %d >= endPos %d, i->time() %d, frameOffset %d curPos=%d\n", frame, endPos, i->time(), frameOffset,curPos); - continue; - } + if (frame >= endPos) { + printf("frame > endPos!! frame = %d >= endPos %d, i->time() %d, frameOffset %d curPos=%d\n", frame, endPos, i->time(), frameOffset,curPos); + continue; + } if (frame > curPos) { - //willyfoobar-2011-02-13 - //!!! comparison of signed with unsigened - //old code//if (frame < pos) if (frame < (int) pos) printf("should not happen: missed event %d\n", pos -frame); else @@ -1085,14 +1004,16 @@ } } curPos = frame; - } + } + if (mp) mp->sendEvent(*i); else { if (putEvent(*i)) break; - } } + } + if (endPos - curPos) { if (!_mess) @@ -1112,14 +1033,17 @@ bool MessSynthIF::putEvent(const MidiPlayEvent& ev) { - if (MusEGlobal::midiOutputTrace) - ev.dump(); + //if (MusEGlobal::midiOutputTrace) DELETETHIS or re-enable? + //{ + // printf("MidiOut: MESS: <%s>: ", synti->name().toLatin1().constData()); + // ev.dump(); + //} if (_mess) return _mess->processEvent(ev); return true; } -//unsigned long MessSynthIF::uniqueID() const +//unsigned long MessSynthIF::uniqueID() const DELETETHIS //{ // return _mess ? _mess->uniqueID() : 0; //} diff -Nru muse-2.0~rc2/muse/synth.h muse-2.0/muse/synth.h --- muse-2.0~rc2/muse/synth.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/synth.h 2012-06-30 19:24:42.000000000 +0200 @@ -40,8 +40,6 @@ // Current version of saved midistate data. #define SYNTH_MIDI_STATE_SAVE_VERSION 2 -//class QMenu; - class Mess; struct MESS; @@ -51,9 +49,6 @@ namespace MusECore { -//class MidiEvent; -//class MidiPlayEvent; - class SynthI; class SynthIF; @@ -74,19 +69,15 @@ public: enum Type { METRO_SYNTH=0, MESS_SYNTH, DSSI_SYNTH, VST_SYNTH, SYNTH_TYPE_END }; - //Synth(const QFileInfo& fi); - //Synth(const QFileInfo& fi, QString label); Synth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver); virtual ~Synth() {} - //virtual const char* description() const { return ""; } - //virtual const char* version() const { return ""; } virtual Type synthType() const = 0; int instances() const { return _instances; } virtual void incInstances(int val) { _instances += val; } - QString completeBaseName() /*const*/ { return info.completeBaseName(); } // ddskrjo - QString baseName() /*const*/ { return info.baseName(); } // ddskrjo + QString completeBaseName() { return info.completeBaseName(); } // ddskrjo + QString baseName() { return info.baseName(); } // ddskrjo QString name() const { return _name; } QString absolutePath() const { return info.absolutePath(); } QString path() const { return info.path(); } @@ -94,12 +85,8 @@ QString fileName() const { return info.fileName(); } QString description() const { return _description; } QString version() const { return _version; } - //QString maker() const { return _version; } ?? QString maker() const { return _maker; } - //virtual void* instantiate() = 0; - - //virtual SynthIF* createSIF() const = 0; virtual SynthIF* createSIF(SynthI*) = 0; }; @@ -111,21 +98,14 @@ const MESS* _descr; public: - //MessSynth(const QFileInfo& fi) : Synth(fi) { descr = 0; } - //MessSynth(const QFileInfo& fi) : Synth(fi, fi.baseName()) { descr = 0; } MessSynth(const QFileInfo& fi, QString label, QString descr, QString maker, QString ver) : Synth(fi, label, descr, maker, ver) { _descr = 0; } virtual ~MessSynth() {} - //virtual const char* description() const; - //virtual const char* version() const; - virtual Type synthType() const { return MESS_SYNTH; } - //virtual void* instantiate(); virtual void* instantiate(const QString&); - //virtual SynthIF* createSIF() const; virtual SynthIF* createSIF(SynthI*); }; @@ -145,7 +125,6 @@ SynthI* synti; public: - //SynthIF() {} SynthIF(SynthI* s) { synti = s; } virtual ~SynthIF() {} @@ -157,15 +136,9 @@ virtual bool guiVisible() const = 0; virtual void showGui(bool v) = 0; virtual bool hasGui() const = 0; - //virtual bool guiVisible() const { return false; } - //virtual void showGui(bool v) { }; - //virtual bool hasGui() const { return false; } virtual bool nativeGuiVisible() const = 0; virtual void showNativeGui(bool v) = 0; virtual bool hasNativeGui() const = 0; - //virtual bool nativeGuiVisible() const { return false; } - //virtual void showNativeGui(bool v) { }; - //virtual bool hasNativeGui() const { return false; } virtual void getGeometry(int*, int*, int*, int*) const = 0; virtual void setGeometry(int, int, int, int) = 0; virtual void getNativeGeometry(int*, int*, int*, int*) const = 0; @@ -176,15 +149,12 @@ virtual MidiPlayEvent receiveEvent() = 0; virtual int eventsPending() const = 0; - //virtual bool init(Synth* s) = 0; - virtual int channels() const = 0; virtual int totalOutChannels() const = 0; virtual int totalInChannels() const = 0; virtual void deactivate3() = 0; virtual const char* getPatchName(int, int, int, bool) const = 0; virtual const char* getPatchName(int, int, MType, bool) = 0; - //virtual void populatePatchPopup(QMenu*, int, MType, bool) = 0; virtual void populatePatchPopup(MusEGui::PopupMenu*, int, MType, bool) = 0; virtual void write(int level, Xml& xml) const = 0; virtual float getParameter(unsigned long idx) const = 0; @@ -213,12 +183,10 @@ // List of initial floating point parameters, for synths which use them. // Used once upon song reload, then discarded. std::vector initParams; - // List of gui controls to update upon heartbeat. - std::vector _guiUpdateControls; - // Update gui program upon heartbeat. - bool _guiUpdateProgram; + // Initial, and running, string parameters for synths which use them, like dssi. StringParamMap _stringParamMap; + // Current bank and program for synths which use them, like dssi. // In cases like dssi which have no 'hi' and 'lo' bank, just use _curBankL. unsigned long _curBankH; @@ -228,13 +196,10 @@ void preProcessAlways(); bool getData(unsigned a, int b, unsigned c, float** data); - //bool putEvent(const MidiPlayEvent& ev); - virtual QString open(); virtual void close(); virtual bool putMidiEvent(const MidiPlayEvent&) {return true;} - //bool putMidiEvent(const MidiEvent&); virtual Track* newTrack() const { return 0; } @@ -246,7 +211,7 @@ SynthI(); virtual ~SynthI(); - SynthI* clone(int /*flags*/) const { return new SynthI(*this/*, flags*/); } + SynthI* clone(int /*flags*/) const { return new SynthI(*this); } virtual inline int deviceType() const { return SYNTH_MIDI; } @@ -263,19 +228,15 @@ Synth* synth() const { return synthesizer; } virtual bool isSynti() const { return true; } - //virtual const char* getPatchName(int ch, int prog, MType t, bool dr) { virtual QString getPatchName(int ch, int prog, MType t, bool dr) { return _sif->getPatchName(ch, prog, t, dr); } - //virtual void populatePatchPopup(QMenu* m, int i, MType t, bool d) { virtual void populatePatchPopup(MusEGui::PopupMenu* m, int i, MType t, bool d) { _sif->populatePatchPopup(m, i, t, d); } - // void setParameter(const char* name, const char* value) const; // Not required - //StringParamMap& stringParameters() { return _stringParamMap; } // Not required - void currentProg(unsigned long */*prog*/, unsigned long */*bankL*/, unsigned long */*bankH*/); + void currentProg(unsigned long *prog, unsigned long *bankL, unsigned long *bankH); void guiHeartBeat() { return _sif->guiHeartBeat(); } bool initGui() const { return _sif->initGui(); } @@ -326,7 +287,6 @@ Mess* _mess; public: - //MessSynthIF() { _mess = 0; } MessSynthIF(SynthI* s) : SynthIF(s) { _mess = 0; } virtual ~MessSynthIF() { } @@ -350,7 +310,6 @@ virtual bool putEvent(const MidiPlayEvent& ev); virtual MidiPlayEvent receiveEvent(); virtual int eventsPending() const; - //virtual bool init(Synth* s); bool init(Synth* s, SynthI* si); virtual int channels() const; @@ -359,7 +318,6 @@ virtual void deactivate3(); virtual const char* getPatchName(int, int, int, bool) const { return ""; } virtual const char* getPatchName(int, int, MType, bool); - //virtual void populatePatchPopup(QMenu*, int, MType, bool); virtual void populatePatchPopup(MusEGui::PopupMenu*, int, MType, bool); virtual void write(int level, Xml& xml) const; virtual float getParameter(unsigned long) const { return 0.0; } diff -Nru muse-2.0~rc2/muse/tempo.cpp muse-2.0/muse/tempo.cpp --- muse-2.0~rc2/muse/tempo.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/tempo.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -32,6 +32,7 @@ namespace MusEGlobal { MusECore::TempoList tempomap; +MusECore::TempoRecList tempo_rec_list; } namespace MusECore { @@ -59,7 +60,7 @@ // add //--------------------------------------------------------- -void TempoList::add(unsigned tick, int tempo) +void TempoList::add(unsigned tick, int tempo, bool do_normalize) { if (tick > MAX_TICK) tick = MAX_TICK; @@ -74,7 +75,8 @@ ne->tick = tick; insert(std::pair (tick, ev)); } - normalize(); + if(do_normalize) + normalize(); } //--------------------------------------------------------- @@ -120,6 +122,33 @@ } //--------------------------------------------------------- +// eraseRange +//--------------------------------------------------------- + +void TempoList::eraseRange(unsigned stick, unsigned etick) +{ + if(stick >= etick || stick > MAX_TICK) + return; + if(etick > MAX_TICK) + etick = MAX_TICK; + + iTEvent se = MusEGlobal::tempomap.upper_bound(stick); + if(se == end() || (se->first == MAX_TICK+1)) + return; + + iTEvent ee = MusEGlobal::tempomap.upper_bound(etick); + + ee->second->tempo = se->second->tempo; + ee->second->tick = se->second->tick; + + for(iTEvent ite = se; ite != ee; ++ite) + delete ite->second; + erase(se, ee); // Erase range does NOT include the last element. + normalize(); + ++_tempoSN; +} + +//--------------------------------------------------------- // tempo //--------------------------------------------------------- @@ -138,12 +167,26 @@ } //--------------------------------------------------------- +// tempo +// Bypass the useList flag and read from the list +//--------------------------------------------------------- + +int TempoList::tempoAt(unsigned tick) const + { + ciTEvent i = upper_bound(tick); + if (i == end()) { + printf("tempoAt: no TEMPO at tick %d,0x%x\n", tick, tick); + return 1000; + } + return i->second->tempo; + } + +//--------------------------------------------------------- // del //--------------------------------------------------------- void TempoList::del(unsigned tick) { -// printf("TempoList::del(%d)\n", tick); iTEvent e = find(tick); if (e == end()) { printf("TempoList::del(%d): not found\n", tick); @@ -210,9 +253,9 @@ // addTempo //--------------------------------------------------------- -void TempoList::addTempo(unsigned t, int tempo) +void TempoList::addTempo(unsigned t, int tempo, bool do_normalize) { - add(t, tempo); + add(t, tempo, do_normalize); ++_tempoSN; } @@ -270,7 +313,6 @@ ciTEvent i = upper_bound(tick); if (i == end()) { printf("tick2frame(%d,0x%x): not found\n", tick, tick); - // abort(); return 0; } unsigned dtick = tick - i->second->tick; @@ -525,5 +567,54 @@ return 0; } +//--------------------------------------------------------- +// put +// return true on fifo overflow +//--------------------------------------------------------- + +bool TempoFifo::put(const TempoRecEvent& event) + { + if (size < TEMPO_FIFO_SIZE) { + fifo[wIndex] = event; + wIndex = (wIndex + 1) % TEMPO_FIFO_SIZE; + // q_atomic_increment(&size); + ++size; + return false; + } + return true; + } + +//--------------------------------------------------------- +// get +//--------------------------------------------------------- + +TempoRecEvent TempoFifo::get() + { + TempoRecEvent event(fifo[rIndex]); + rIndex = (rIndex + 1) % TEMPO_FIFO_SIZE; + --size; + return event; + } + +//--------------------------------------------------------- +// peek +//--------------------------------------------------------- + +const TempoRecEvent& TempoFifo::peek(int n) + { + int idx = (rIndex + n) % TEMPO_FIFO_SIZE; + return fifo[idx]; + } + +//--------------------------------------------------------- +// remove +//--------------------------------------------------------- + +void TempoFifo::remove() + { + rIndex = (rIndex + 1) % TEMPO_FIFO_SIZE; + --size; + } + } // namespace MusECore diff -Nru muse-2.0~rc2/muse/tempo.h muse-2.0/muse/tempo.h --- muse-2.0~rc2/muse/tempo.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/tempo.h 2012-06-30 19:24:42.000000000 +0200 @@ -25,11 +25,16 @@ #define __TEMPO_H__ #include +#include #ifndef MAX_TICK #define MAX_TICK (0x7fffffff/100) #endif +// Tempo ring buffer size +#define TEMPO_FIFO_SIZE 1024 + + namespace MusECore { class Xml; @@ -70,8 +75,7 @@ int _tempo; // tempo if not using tempo list int _globalTempo; // %percent 50-200% - void normalize(); - void add(unsigned tick, int tempo); + void add(unsigned tick, int tempo, bool do_normalize = true); void change(unsigned tick, int newTempo); void del(iTEvent); void del(unsigned tick); @@ -79,13 +83,16 @@ public: TempoList(); ~TempoList(); + void normalize(); void clear(); + void eraseRange(unsigned stick, unsigned etick); void read(Xml&); void write(int, Xml&) const; void dump() const; int tempo(unsigned tick) const; + int tempoAt(unsigned tick) const; unsigned tick2frame(unsigned tick, unsigned frame, int* sn) const; unsigned tick2frame(unsigned tick, int* sn = 0) const; unsigned frame2tick(unsigned frame, int* sn = 0) const; @@ -95,18 +102,62 @@ int tempoSN() const { return _tempoSN; } void setTempo(unsigned tick, int newTempo); - void addTempo(unsigned t, int tempo); + void addTempo(unsigned t, int tempo, bool do_normalize = true); void delTempo(unsigned tick); void changeTempo(unsigned tick, int newTempo); + bool masterFlag() const { return useList; } bool setMasterFlag(unsigned tick, bool val); int globalTempo() const { return _globalTempo; } void setGlobalTempo(int val); }; +//--------------------------------------------------------- +// Tempo Record Event +//--------------------------------------------------------- + +struct TempoRecEvent { + int tempo; + unsigned tick; + TempoRecEvent() { } + TempoRecEvent(unsigned tk, unsigned t) { + tick = tk; + tempo = t; + } + }; + +class TempoRecList : public std::vector +{ + public: + void addTempo(int tick, int tempo) { push_back(TempoRecEvent(tick, tempo)); } + void addTempo(const TempoRecEvent& e) { push_back(e); } +}; + +//--------------------------------------------------------- +// TempoFifo +//--------------------------------------------------------- + +class TempoFifo { + TempoRecEvent fifo[TEMPO_FIFO_SIZE]; + volatile int size; + int wIndex; + int rIndex; + + public: + TempoFifo() { clear(); } + bool put(const TempoRecEvent& event); // returns true on fifo overflow + TempoRecEvent get(); + const TempoRecEvent& peek(int = 0); + void remove(); + bool isEmpty() const { return size == 0; } + void clear() { size = 0, wIndex = 0, rIndex = 0; } + int getSize() const { return size; } + }; + } // namespace MusECore namespace MusEGlobal { extern MusECore::TempoList tempomap; +extern MusECore::TempoRecList tempo_rec_list; } #endif diff -Nru muse-2.0~rc2/muse/thread.cpp muse-2.0/muse/thread.cpp --- muse-2.0~rc2/muse/thread.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/thread.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -57,16 +57,13 @@ // start //--------------------------------------------------------- -//void Thread::start(void* ptr) void Thread::start(int prio, void* ptr) { - // Changed by Tim. p3.3.17 - userPtr = ptr; pthread_attr_t* attributes = 0; _realTimePriority = prio; - /* + /* DELETETHIS 14 attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); pthread_attr_init(attributes); */ @@ -105,7 +102,7 @@ } - /* + /* DELETETHIS 8 if (pthread_create(&thread, attributes, MusECore::loop, this)) perror("creating thread failed:"); // else @@ -136,7 +133,6 @@ free(attributes); } - //undoSetuid(); } //--------------------------------------------------------- @@ -145,11 +141,8 @@ void Thread::stop(bool force) { - // Changed by Tim. p3.3.17 - if (thread == 0) return; - //if (force && thread > 0) { if (force) { pthread_cancel(thread); threadStop(); @@ -157,7 +150,7 @@ _running = false; if (thread) { if (pthread_join(thread, 0)) { - // perror("Failed to join sequencer thread"); + // perror("Failed to join sequencer thread"); DELETETHIS and the if around? } } } @@ -166,14 +159,10 @@ // prio = 0 no realtime scheduling //--------------------------------------------------------- -//Thread::Thread(int prio, const char* s) Thread::Thread(const char* s) { - // Changed by Tim. p3.3.17 - userPtr = 0; _name = s; - //realTimePriority = prio; _realTimePriority = 0; pfd = 0; @@ -183,9 +172,6 @@ _pollWait = -1; thread = 0; - //if (MusEGlobal::debugMsg) - // printf("Start thread %s with priority %d\n", s, prio); - // create message channels int filedes[2]; // 0 - reading 1 - writing if (pipe(filedes) == -1) { @@ -202,7 +188,7 @@ fromThreadFdr = filedes[0]; fromThreadFdw = filedes[1]; -// pthread_mutexattr_t mutexattr; +// pthread_mutexattr_t mutexattr; DELETETHIS 5 // pthread_mutexattr_init(&mutexattr); // pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_TIMED_NP); // pthread_mutex_init(&lock, &mutexattr); @@ -264,61 +250,11 @@ void Thread::loop() { - // Changed by Tim. p3.3.17 - if (!MusEGlobal::debugMode) { if (mlockall(MCL_CURRENT | MCL_FUTURE)) perror("WARNING: Cannot lock memory:"); } -/* - pthread_attr_t* attributes = 0; - attributes = (pthread_attr_t*) malloc(sizeof(pthread_attr_t)); - pthread_attr_init(attributes); - - if (MusEGlobal::realTimeScheduling && realTimePriority > 0) { - - doSetuid(); -// if (pthread_attr_setschedpolicy(attributes, SCHED_FIFO)) { -// printf("cannot set FIFO scheduling class for RT thread\n"); -// } -// if (pthread_attr_setscope (attributes, PTHREAD_SCOPE_SYSTEM)) { -// printf("Cannot set scheduling scope for RT thread\n"); -// } -// struct sched_param rt_param; -// memset(&rt_param, 0, sizeof(rt_param)); -// rt_param.sched_priority = realTimePriority; -// if (pthread_attr_setschedparam (attributes, &rt_param)) { -// printf("Cannot set scheduling priority %d for RT thread (%s)\n", -// realTimePriority, strerror(errno)); -// } - - // do the SCHED_FIFO stuff _after_ thread creation: - struct sched_param *param = new struct sched_param; - param->sched_priority = realTimePriority; - int error = pthread_setschedparam(pthread_self(), SCHED_FIFO, param); - if (error != 0) - perror( "error set_schedparam 2:"); - -// if (!MusEGlobal::debugMode) { -// if (mlockall(MCL_CURRENT|MCL_FUTURE)) -// perror("WARNING: Cannot lock memory:"); -// } - - undoSetuid(); - } - -*/ - - -/* -#define BIG_ENOUGH_STACK (1024*1024*1) - char buf[BIG_ENOUGH_STACK]; - for (int i = 0; i < BIG_ENOUGH_STACK; i++) - buf[i] = i; -#undef BIG_ENOUGH_STACK -*/ - #ifdef __APPLE__ #define BIG_ENOUGH_STACK (1024*256*1) #else @@ -332,24 +268,19 @@ pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, 0); pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0); - int policy = 0; + int policy = buf[0]; // Initialize using buf[0] to keep the compiler from complaining about unused buf. + policy = 0; // Now set the true desired inital value. if ((policy = sched_getscheduler (0)) < 0) { printf("Thread: Cannot get current client scheduler: %s\n", strerror(errno)); } - /* - if (MusEGlobal::debugMsg) - printf("Thread <%s> set to %s priority %d\n", - _name, policy == SCHED_FIFO ? "SCHED_FIFO" : "SCHED_OTHER", - realTimePriority); - */ if (MusEGlobal::debugMsg) printf("Thread <%s, id %p> has %s priority %d\n", _name, (void *)pthread_self(), policy == SCHED_FIFO ? "SCHED_FIFO" : "SCHED_OTHER", policy == SCHED_FIFO ? _realTimePriority : 0); -// pthread_mutex_lock(&lock); +// pthread_mutex_lock(&lock); DELETETHIS and below _running = true; // pthread_cond_signal(&ready); // pthread_mutex_unlock(&lock); @@ -394,8 +325,6 @@ bool Thread::sendMsg(const ThreadMsg* m) { - // Changed by Tim. p3.3.17 - if (_running) { int rv = write(toThreadFdw, &m, sizeof(ThreadMsg*)); @@ -412,7 +341,7 @@ perror("Thread::sendMessage(): read pipe failed"); return true; } - //int c; + //int c; DELETETHIS 6 //rv = read(fromThreadFdr, &c, sizeof(c)); //if (rv != sizeof(c)) { // perror("Thread::sendMessage(): read pipe failed"); @@ -460,7 +389,7 @@ int rv = write(fromThreadFdw, &c, 1); if (rv != 1) perror("Thread::readMessage(): write pipe failed"); - //int c = p->serialNo; + //int c = p->serialNo; DELETETHIS 4 //int rv = write(fromThreadFdw, &c, sizeof(c)); //if (rv != sizeof(c)) // perror("Thread::readMsg(): write pipe failed"); diff -Nru muse-2.0~rc2/muse/thread.h muse-2.0/muse/thread.h --- muse-2.0~rc2/muse/thread.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/thread.h 2012-06-30 19:24:42.000000000 +0200 @@ -70,7 +70,6 @@ class Thread { const char* _name; volatile bool _running; - //int realTimePriority; int _pollWait; // poll timeout in msec (-1 = infinite) pthread_t thread; @@ -78,7 +77,7 @@ int toThreadFdw; // message to thread (app write) PollList plist; -// pthread_mutex_t lock; +// pthread_mutex_t lock; DELETETHIS 2 // pthread_cond_t ready; void* userPtr; @@ -95,13 +94,11 @@ virtual void defaultTick() {} public: - //Thread(int prio, const char* name); Thread(const char* name); virtual ~Thread(); const char* name() const { return _name; } - //virtual void start(void* ptr=0); virtual void start(int priority, void* ptr=0); void stop(bool); diff -Nru muse-2.0~rc2/muse/ticksynth.cpp muse-2.0/muse/ticksynth.cpp --- muse-2.0~rc2/muse/ticksynth.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/ticksynth.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -24,7 +24,6 @@ #include "ticksynth.h" #include "default_click.h" -//#include #include "popupmenu.h" // If sysex support is ever added, make sure this number is unique among all the MESS synths. @@ -45,15 +44,12 @@ class MetronomeSynth : public Synth { public: - //MetronomeSynth(const QFileInfo& fi) : Synth(fi) {} - //MetronomeSynth(const QFileInfo& fi) : Synth(fi, QString("Metronome")) {} MetronomeSynth(const QFileInfo& fi) : Synth(fi, QString("Metronome"), QString("Metronome"), QString(), QString()) {} virtual ~MetronomeSynth() {} virtual Type synthType() const { return METRO_SYNTH; } virtual void incInstances(int) {} virtual void* instantiate(); - //virtual SynthIF* createSIF() const; virtual SynthIF* createSIF(SynthI*); }; @@ -78,9 +74,6 @@ void process(float** buffer, int offset, int n); public: - //MetronomeSynthIF() { - // data = 0; - // } MetronomeSynthIF(SynthI* s) : SynthIF(s) { data = 0; } @@ -103,15 +96,12 @@ virtual MidiPlayEvent receiveEvent() { return MidiPlayEvent(); } virtual int eventsPending() const { return 0; } - //virtual bool init(Synth*) { return true; } - virtual int channels() const { return 1; } virtual int totalOutChannels() const { return 1; } virtual int totalInChannels() const { return 0; } virtual void deactivate3() {} virtual const char* getPatchName(int, int, int, bool) const { return ""; } virtual const char* getPatchName(int, int, MType, bool) { return ""; } - //virtual void populatePatchPopup(QMenu*, int, MType, bool) {}; virtual void populatePatchPopup(MusEGui::PopupMenu*, int, MType, bool) {}; virtual void write(int, Xml&) const {} virtual float getParameter(unsigned long) const { return 0.0; } @@ -130,7 +120,7 @@ printf("MusE: MetronomeSynthIF::getData\n"); #endif - //set type to unsigned , due to compiler warning: comparison signed/unsigned + //set type to unsigned , due to compiler warning: comparison signed/unsigned unsigned int curPos = pos; //prevent compiler warning: comparison signed/unsigned unsigned int endPos = pos + n; //prevent compiler warning: comparison signed/unsigned unsigned int off = pos; //prevent compiler warning: comparison signed/unsigned @@ -172,6 +162,7 @@ return false; } +// DELETETHIS 9 //--------------------------------------------------------- // createSIF //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/track.cpp muse-2.0/muse/track.cpp --- muse-2.0~rc2/muse/track.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/track.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -33,16 +33,15 @@ #include "audio.h" #include "globaldefs.h" #include "route.h" +#include "limits.h" +#include "dssihost.h" namespace MusECore { -//bool Track::_isVisible=true; unsigned int Track::_soloRefCnt = 0; Track* Track::_tmpSoloChainTrack = 0; bool Track::_tmpSoloChainDoIns = false; bool Track::_tmpSoloChainNoDec = false; -//bool Track::_tmpIsAuxProcessing = false; -//int Track::_tmpIsAuxProcRefCount = 0; const char* Track::_cname[] = { "Midi", "Drum", "Wave", "AudioOut", "AudioIn", "AudioGroup", @@ -110,15 +109,9 @@ { Part* part = ip->second; const EventList* el = part->cevents(); - //unsigned len = part->lenTick(); for(ciEvent ie = el->begin(); ie != el->end(); ++ie) { const Event& ev = ie->second; - // Added by T356. Do not remove events which are past the end of the part. - // No, actually, do remove ALL of them belonging to the part. - // Just in case there are stray values left after the part end. - //if(ev.tick() >= len) - // break; if(ev.type() == Controller) { @@ -156,7 +149,6 @@ { case Track::AUDIO_AUX: return AudioAux::visible(); - break; case Track::AUDIO_GROUP: return AudioGroup::visible(); case Track::AUDIO_INPUT: @@ -166,9 +158,10 @@ case Track::WAVE: return WaveTrack::visible(); case Track::MIDI: + case Track::DRUM: return MidiTrack::visible(); case Track::AUDIO_SOFTSYNTH: - return AudioAux::visible(); + return SynthI::visible(); default: break; } @@ -222,8 +215,6 @@ _height = 20; _locked = false; for (int i = 0; i < MAX_CHANNELS; ++i) { - //_meter[i] = 0; - //_peak[i] = 0; _meter[i] = 0.0; _peak[i] = 0.0; } @@ -239,8 +230,6 @@ { internal_assign(t, flags | ASSIGN_PROPERTIES); for (int i = 0; i < MAX_CHANNELS; ++i) { - //_meter[i] = 0; - //_peak[i] = 0; _meter[i] = 0.0; _peak[i] = 0.0; } @@ -287,7 +276,6 @@ _type = t.type(); _locked = t.locked(); - //_name = t.name(); _name = t.name() + " #"; for(int i = 2; true; ++i) { @@ -300,7 +288,6 @@ // Do not call setName here. Audio Input and Output override it and try to set // Jack ports, which have not been initialized yet here. Must wait until // .Audio Input and Output copy constructors or assign are called. - //setName(s); _name = s; break; } @@ -394,7 +381,21 @@ continue; p->enableAllControllers(true); } - + + if(type() == AUDIO_SOFTSYNTH) + { + SynthI* synth = static_cast(this); + if(synth->synth() && synth->synth()->synthType() == Synth::DSSI_SYNTH) + { + SynthIF* sif = synth->sif(); + if(sif) + { + DssiSynthIF* dssi_sif = static_cast(sif); + dssi_sif->enableAllControllers(true); + } + } + } + if(clearList) t->recEvents()->clear(); } @@ -417,12 +418,9 @@ void Track::updateAuxRoute(int refInc, Track* dst) { - //if(isMidiTrack() || _type == AUDIO_AUX) if(isMidiTrack()) return; - //printf("Track::updateAuxRoute %s _auxRouteCount:%d refInc:%d\n", name().toLatin1().constData(), _auxRouteCount, refInc); - if(dst) { _nodeTraversed = true; @@ -450,7 +448,6 @@ if(_auxRouteCount < 0) { fprintf(stderr, "Track::updateAuxRoute Ref underflow! %s _auxRouteCount:%d refInc:%d\n", name().toLatin1().constData(), _auxRouteCount, refInc); - //_auxRouteCount = 0; } for (iRoute i = _outRoutes.begin(); i != _outRoutes.end(); ++i) @@ -458,8 +455,6 @@ if( !(*i).isValid() || (*i).type != Route::TRACK_ROUTE ) continue; Track* t = (*i).track; - //if(t->isMidiTrack()) - // continue; t->updateAuxRoute(refInc, NULL); } @@ -474,10 +469,6 @@ bool Track::isCircularRoute(Track* dst) { - //if(isMidiTrack() || _type == AUDIO_AUX) - //if(isMidiTrack()) - // return; - bool rv = false; if(dst) @@ -485,8 +476,6 @@ _nodeTraversed = true; rv = dst->isCircularRoute(NULL); _nodeTraversed = false; - //if(rv) - // fprintf(stderr, " Circular route %s -> %s\n", name().toLatin1().constData(), dst->name().toLatin1().constData()); return rv; } @@ -500,8 +489,6 @@ if( !(*i).isValid() || (*i).type != Route::TRACK_ROUTE ) continue; Track* t = (*i).track; - //if(t->isMidiTrack()) - // continue; rv = t->isCircularRoute(NULL); if(rv) break; @@ -552,18 +539,15 @@ clefType = mt.clefType; } - // FIXME: May get "addRoute: src track route already exists" when say, - // an audio output and wave track are selected just because - // of the redundancy (wave track wants to connect to output by default). if(flags & ASSIGN_ROUTES) { for(ciRoute ir = mt._inRoutes.begin(); ir != mt._inRoutes.end(); ++ir) - // Amazingly, this single line seems to work. - MusEGlobal::audio->msgAddRoute(*ir, Route(this, ir->channel)); + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _inRoutes.push_back(*ir); for(ciRoute ir = mt._outRoutes.begin(); ir != mt._outRoutes.end(); ++ir) - // Amazingly, this single line seems to work. - MusEGlobal::audio->msgAddRoute(Route(this, ir->channel), *ir); + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _outRoutes.push_back(*ir); } else if(flags & ASSIGN_DEFAULT_ROUTES) { @@ -578,13 +562,11 @@ { c = mp->defaultInChannels(); if(c) - { - MusEGlobal::audio->msgAddRoute(Route(i, c), Route(this, c)); - //updateFlags |= SC_ROUTE; - } + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _inRoutes.push_back(Route(i, c)); } - if(!defOutFound) /// + if(!defOutFound) { c = mp->defaultOutChannels(); if(c) @@ -592,8 +574,8 @@ /// TODO: Switch if and when multiple output routes supported. #if 0 - MusEGlobal::audio->msgAddRoute(Route(this, c), Route(i, c)); - //updateFlags |= SC_ROUTE; + // Don't call msgAddRoute. Caller later calls msgAddTrack which 'mirrors' this routing node. + _outRoutes.push_back(Route(i, c)); #else for(ch = 0; ch < MIDI_CHANNELS; ++ch) { @@ -604,7 +586,6 @@ _outPort = i; if(type() != Track::DRUM) // Leave drum tracks at channel 10. _outChannel = ch; - //updateFlags |= SC_ROUTE; break; } } @@ -636,10 +617,7 @@ { _outPort = 0; _outChannel = 0; - //_inPortMask = 0xffff; - ///_inPortMask = 0xffffffff; - - ///_inChannelMask = 0xffff; // "ALL" + transposition = 0; velocity = 0; delay = 0; @@ -667,10 +645,8 @@ if(_outChannel == i) return; - //removePortCtrlEvents(); removePortCtrlEvents(this); _outChannel = i; - //addPortCtrlEvents(); addPortCtrlEvents(this); } @@ -683,10 +659,8 @@ if(_outPort == i) return; - //removePortCtrlEvents(); removePortCtrlEvents(this); _outPort = i; - //addPortCtrlEvents(); addPortCtrlEvents(this); } @@ -699,11 +673,9 @@ if(_outPort == port && _outChannel == ch) return; - //removePortCtrlEvents(); removePortCtrlEvents(this); _outPort = port; _outChannel = ch; - //addPortCtrlEvents(); addPortCtrlEvents(this); } @@ -715,10 +687,6 @@ void MidiTrack::setInPortAndChannelMask(unsigned int portmask, int chanmask) { - //if(!portmask || !chanmask) - // return; - - //RouteList* rl = inRoutes(); bool changed = false; for(int port = 0; port < 32; ++port) // 32 is the old maximum number of ports. @@ -728,7 +696,7 @@ if(!MusEGlobal::midiPorts[port].foundInSongFile()) continue; - //if(!(portmask & (1 << port))) + //if(!(portmask & (1 << port))) DELETETHIS 8 // continue; // Removed. Allow to connect to port with no device so user can change device later. @@ -741,24 +709,17 @@ Route bRoute(this, chanmask); // Route wanted? - //if((portmask & (1 << port)) && (chanmask & (1 << ch))) if(portmask & (1 << port)) { - // Route already exists? - //if(iir != rl->end()) - // continue; MusEGlobal::audio->msgAddRoute(aRoute, bRoute); changed = true; } else { - // Route does not exist? - //if(iir == rl->end()) - // continue; MusEGlobal::audio->msgRemoveRoute(aRoute, bRoute); changed = true; } - //} + //} DELETETHIS } if(changed) @@ -768,7 +729,7 @@ } } -/* +/* DELETETHIS 84 //--------------------------------------------------------- // addPortCtrlEvents //--------------------------------------------------------- @@ -912,9 +873,6 @@ xml.intTag(level, "device", outPort()); xml.intTag(level, "channel", outChannel()); - //xml.intTag(level, "inportMap", inPortMask()); - ///xml.uintTag(level, "inportMap", inPortMask()); // Obsolete - ///xml.intTag(level, "inchannelMap", inChannelMask()); // Obsolete xml.intTag(level, "locked", _locked); xml.intTag(level, "echo", _recEcho); @@ -972,14 +930,9 @@ else if (tag == "channel") setOutChannel(xml.parseInt()); else if (tag == "inportMap") - //setInPortMask(xml.parseInt()); - ///setInPortMask(xml.parseUInt()); - //xml.skip(tag); // Obsolete. - portmask = xml.parseUInt(); // Support old files. + portmask = xml.parseUInt(); // Obsolete but support old files. else if (tag == "inchannelMap") - ///setInChannelMask(xml.parseInt()); - //xml.skip(tag); // Obsolete. - chanmask = xml.parseInt(); // Support old files. + chanmask = xml.parseInt(); // Obsolete but support old files. else if (tag == "locked") _locked = xml.parseInt(); else if (tag == "echo") @@ -1176,13 +1129,9 @@ s = "dest"; - //if(r->type == Route::MIDI_DEVICE_ROUTE) // Obsolete since 1.1-RC2 - // s += QString(QT_TRANSLATE_NOOP("@default", " devtype=\"%1\"")).arg(r->device->deviceType()); // - //if(r->type != Route::TRACK_ROUTE) // if(r->type != Route::TRACK_ROUTE && r->type != Route::MIDI_PORT_ROUTE) s += QString(" type=\"%1\"").arg(r->type); - //s += QString(QT_TRANSLATE_NOOP("@default", " name=\"%1\"/")).arg(r->name()); if(r->type == Route::MIDI_PORT_ROUTE) s += QString(" mport=\"%1\"/").arg(r->midiPort); else @@ -1195,4 +1144,80 @@ } } +int MidiTrack::getFirstControllerValue(int ctrl, int def) +{ + int val=def; + unsigned tick=-1; // maximum integer + + for (iPart pit=parts()->begin(); pit!=parts()->end(); pit++) + { + Part* part=pit->second; + if (part->tick() > tick) break; // ignore this and the rest. we won't find anything new. + for (iEvent eit=part->events()->begin(); eit!=part->events()->end(); eit++) + { + if (eit->first+part->tick() >= tick) break; + if (eit->first > part->lenTick()) break; // ignore events past the end of the part + // else if (eit->first+part->tick() < tick) and + if (eit->second.type()==Controller && eit->second.dataA()==ctrl) + { + val = eit->second.dataB(); + tick = eit->first+part->tick(); + break; + } + } + } + + return val; +} + +int MidiTrack::getControllerChangeAtTick(unsigned tick, int ctrl, int def) +{ + for (iPart pit=parts()->begin(); pit!=parts()->end(); pit++) + { + Part* part=pit->second; + if (part->tick() > tick) break; // ignore this and the rest. we'd find nothing any more + if (part->endTick() < tick) continue; // ignore only this. + for (iEvent eit=part->events()->begin(); eit!=part->events()->end(); eit++) + { + if (eit->first+part->tick() > tick) break; // we won't find anything in this part from now on. + if (eit->first > part->lenTick()) break; // ignore events past the end of the part + if (eit->first+part->tick() < tick) continue; // ignore only this + + // else if (eit->first+part->tick() == tick) and + if (eit->second.type()==Controller && eit->second.dataA()==ctrl) + return eit->second.dataB(); + } + } + + return def; +} + +// returns the tick where this CC gets overriden by a new one +// returns UINT_MAX for "never" +unsigned MidiTrack::getControllerValueLifetime(unsigned tick, int ctrl) +{ + unsigned result=UINT_MAX; + + for (iPart pit=parts()->begin(); pit!=parts()->end(); pit++) + { + Part* part=pit->second; + if (part->tick() > result) break; // ignore this and the rest. we won't find anything new. + if (part->endTick() < tick) continue; // ignore only this part, we won't find anything there. + for (iEvent eit=part->events()->begin(); eit!=part->events()->end(); eit++) + { + if (eit->first+part->tick() >= result) break; + if (eit->first > part->lenTick()) break; // ignore events past the end of the part + // else if (eit->first+part->tick() < result) and + if (eit->first+part->tick() > tick && + eit->second.type()==Controller && eit->second.dataA()==ctrl) + { + result = eit->first+part->tick(); + break; + } + } + } + + return result; +} + } // namespace MusECore diff -Nru muse-2.0~rc2/muse/track.h muse-2.0/muse/track.h --- muse-2.0~rc2/muse/track.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/track.h 2012-06-30 19:24:43.000000000 +0200 @@ -30,6 +30,7 @@ #include #include +#include "wave.h" // for SndFileR #include "part.h" #include "key.h" #include "node.h" @@ -42,10 +43,9 @@ class MPEventList; class Pipeline; class PluginI; -class SndFile; class SynthI; class Xml; - +class ControlEvent; //--------------------------------------------------------- // Track @@ -109,7 +109,6 @@ Track(TrackType); Track(const Track&, int flags); virtual ~Track(); - //virtual Track& operator=(const Track& t); virtual void assign(const Track&, int flags); static const char* _cname[]; @@ -182,7 +181,7 @@ bool mute() const { return _mute; } bool off() const { return _off; } bool recordFlag() const { return _recordFlag; } - // + // Internal use... static void clearSoloRefCounts(); void updateSoloState(); @@ -218,14 +217,8 @@ //--------------------------------------------------------- class MidiTrack : public Track { - //friend class AudioTrack; - //static unsigned int _soloRefCnt; - int _outPort; int _outChannel; - //int _inPortMask; - //unsigned int _inPortMask; // bitmask of accepted record ports - //int _inChannelMask; // bitmask of accepted record channels bool _recEcho; // For midi (and audio). Whether to echo incoming record events to output device. EventList* _events; // tmp Events during midi import @@ -270,23 +263,17 @@ void setOutChannel(int i) { _outChannel = i; } void setOutPort(int i) { _outPort = i; } // These will transfer controller data to the new selected port and/or channel. - void setOutChanAndUpdate(int /*chan*/); - void setOutPortAndUpdate(int /*port*/); + void setOutChanAndUpdate(int chan); + void setOutPortAndUpdate(int port); // Combines both port and channel operations. - void setOutPortAndChannelAndUpdate(int /*port*/, int /*chan*/); + void setOutPortAndChannelAndUpdate(int port, int chan); - //void setInPortMask(int i) { _inPortMask = i; } - //void setInPortMask(unsigned int i) { _inPortMask = i; } // Obsolete - //void setInChannelMask(int i) { _inChannelMask = i; } // // Backward compatibility: For reading old songs. - void setInPortAndChannelMask(unsigned int /*portmask*/, int /*chanmask*/); + void setInPortAndChannelMask(unsigned int portmask, int chanmask); void setRecEcho(bool b) { _recEcho = b; } int outPort() const { return _outPort; } - //int inPortMask() const { return _inPortMask; } - //unsigned int inPortMask() const { return _inPortMask; } int outChannel() const { return _outChannel; } - //int inChannelMask() const { return _inChannelMask; } bool recEcho() const { return _recEcho; } virtual bool isMute() const; @@ -294,11 +281,13 @@ virtual void updateSoloStates(bool noDec); virtual void updateInternalSoloStates(); - //bool soloMode() const { return _soloRefCnt; } - virtual bool canRecord() const { return true; } static void setVisible(bool t) { _isVisible = t; } static bool visible() { return _isVisible; } + int getFirstControllerValue(int ctrl, int def=-1); + int getControllerChangeAtTick(unsigned tick, int ctrl, int def=-1); + unsigned getControllerValueLifetime(unsigned tick, int ctrl); // returns the tick where this CC gets overriden by a new one + // returns UINT_MAX for "never" void setClef(clefTypes i) { clefType = i; } clefTypes getClef() { return clefType; } @@ -312,9 +301,6 @@ //--------------------------------------------------------- class AudioTrack : public Track { - //friend class MidiTrack; - //static unsigned int _soloRefCnt; - bool _haveData; // Whether we have data from a previous process call during current cycle. CtrlListList _controller; @@ -322,7 +308,6 @@ bool _prefader; // prefader metering std::vector _auxSend; - //void readRecfile(Xml& xml); void readAuxSend(Xml& xml); bool _sendMetronome; @@ -332,19 +317,17 @@ protected: float** outBuffers; - //float* outBuffers[MAX_CHANNELS]; int _totalOutChannels; int _totalInChannels; unsigned bufferPos; virtual bool getData(unsigned, int, unsigned, float**); - SndFile* _recFile; + SndFileR _recFile; Fifo fifo; // fifo -> _recFile bool _processed; public: AudioTrack(TrackType t); - //AudioTrack(TrackType t, int num_out_bufs = MAX_CHANNELS); AudioTrack(const AudioTrack&, int flags); virtual ~AudioTrack(); @@ -359,7 +342,6 @@ bool prepareRecording(); bool processed() { return _processed; } - //void setProcessed(bool v) { _processed = v; } void addController(CtrlList*); void removeController(int id); @@ -371,8 +353,8 @@ void mapRackPluginsToControllers(); void showPendingPluginNativeGuis(); - SndFile* recFile() const { return _recFile; } - void setRecFile(SndFile* sf) { _recFile = sf; } + SndFileR recFile() const { return _recFile; } + void setRecFile(SndFileR sf) { _recFile = sf; } CtrlListList* controller() { return &_controller; } @@ -387,8 +369,6 @@ virtual void updateSoloStates(bool noDec); virtual void updateInternalSoloStates(); - //bool soloMode() const { return _soloRefCnt; } - void putFifo(int channels, unsigned long n, float** bp); void record(); @@ -419,11 +399,10 @@ void setPluginCtrlVal(int param, double val); void readVolume(Xml& xml); - //void writeRouting(int, Xml&) const; virtual void preProcessAlways() { _processed = false; } - virtual void addData(unsigned /*samplePos*/, int /*channels*/, int /*srcStartChan*/, int /*srcChannels*/, unsigned /*frames*/, float** /*buffer*/); - virtual void copyData(unsigned /*samplePos*/, int /*channels*/, int /*srcStartChan*/, int /*srcChannels*/, unsigned /*frames*/, float** /*buffer*/); + virtual void addData(unsigned samplePos, int channels, int srcStartChan, int srcChannels, unsigned frames, float** buffer); + virtual void copyData(unsigned samplePos, int channels, int srcStartChan, int srcChannels, unsigned frames, float** buffer); virtual bool hasAuxSend() const { return false; } // automation @@ -431,6 +410,9 @@ virtual void setAutomationType(AutomationType t); void processAutomationEvents(); CtrlRecList* recEvents() { return &_recEvents; } + bool addScheduledControlEvent(int track_ctrl_id, float val, unsigned frame); // return true if event cannot be delivered + void enableController(int track_ctrl_id, bool en); + void controllersEnabled(int track_ctrl_id, bool* en1, bool* en2) const; void recordAutomation(int n, double v); void startAutoRecord(int, double); void stopAutoRecord(int, double); @@ -501,7 +483,6 @@ void* jackPort(int channel) { return jackPorts[channel]; } void setJackPort(int channel, void*p) { jackPorts[channel] = p; } virtual void setChannels(int n); -// virtual bool isMute() const; void processInit(unsigned); void process(unsigned pos, unsigned offset, unsigned); void processWrite(); @@ -579,7 +560,6 @@ virtual void read(Xml&); virtual void write(int, Xml&) const; - //virtual void fetchData(unsigned pos, unsigned frames, float** bp); virtual void fetchData(unsigned pos, unsigned frames, float** bp, bool doSeek); virtual bool getData(unsigned, int ch, unsigned, float** bp); diff -Nru muse-2.0~rc2/muse/transport.cpp muse-2.0/muse/transport.cpp --- muse-2.0~rc2/muse/transport.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/transport.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -37,11 +37,11 @@ #include "siglabel.h" #include "globals.h" #include "icons.h" -///#include "posedit.h" #include "sync.h" #include "shortcuts.h" #include "gconfig.h" #include "app.h" +#include "audio.h" namespace MusEGui { @@ -76,8 +76,7 @@ //--------------------------------------------------------- // Handle -// erlaubt das Verschieben eines Root-Windows mit der -// Maus +// allows moving a root-window with the mouse //--------------------------------------------------------- Handle::Handle(QWidget* r, QWidget* parent) @@ -114,7 +113,7 @@ //--------------------------------------------------------- // TempoSig -// Widget f�r Tempo + Signature +// Widget for Tempo + Signature //--------------------------------------------------------- TempoSig::TempoSig(QWidget* parent) @@ -228,10 +227,6 @@ //--------------------------------------------------------- Transport::Transport(QWidget* parent, const char* name) - // : QWidget(0, name, WStyle_Customize | WType_TopLevel | WStyle_Tool - //| WStyle_NoBorder | WStyle_StaysOnTop) - //: QWidget(0, name, Qt::WStyle_Customize | Qt::Window | Qt::WStyle_NoBorder | Qt::WStyle_StaysOnTop) - //: QWidget(0, name, Qt::Window | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint ) // Possibly also Qt::X11BypassWindowManagerHint : QWidget(parent, Qt::Window | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint ) // Possibly also Qt::X11BypassWindowManagerHint { setObjectName(name); @@ -326,7 +321,6 @@ marken->setSpacing(0); marken->setContentsMargins(0, 0, 0, 0); - ///tl1 = new PosEdit(0); tl1 = new Awl::PosEdit(0); tl1->setMinimumSize(105,0); tl1->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); @@ -339,7 +333,6 @@ l5->setAlignment(Qt::AlignCenter); marken->addWidget(l5); - ///tl2 = new PosEdit(0); tl2 = new Awl::PosEdit(0); tl2->setMinimumSize(105,0); tl2->setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed)); @@ -364,9 +357,7 @@ QHBoxLayout *hbox1 = new QHBoxLayout; hbox1->setContentsMargins(0, 0, 0, 0); - ///time1 = new PosEdit(0); time1 = new Awl::PosEdit(0); - ///time2 = new PosEdit(0); time2 = new Awl::PosEdit(0); time2->setSmpte(true); time1->setMinimumSize(105,0); @@ -508,8 +499,7 @@ connect(slider,SIGNAL(valueChanged(int)), SLOT(cposChanged(int))); connect(MusEGlobal::song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(setPos(int, unsigned, bool))); connect(tempo, SIGNAL(tempoChanged(int)), MusEGlobal::song, SLOT(setTempo(int))); - ///connect(tempo, SIGNAL(sigChanged(int, int)), MusEGlobal::song, SLOT(setSig(int, int))); - connect(tempo, SIGNAL(sigChanged(const AL::TimeSignature&)), MusEGlobal::song, SLOT(setSig(const AL::TimeSignature&))); + connect(tempo, SIGNAL(sigChanged(const AL::TimeSignature&)), SLOT(sigChange(const AL::TimeSignature&))); connect(MusEGlobal::song, SIGNAL(playChanged(bool)), SLOT(setPlay(bool))); connect(MusEGlobal::song, SIGNAL(songChanged(int)), this, SLOT(songChanged(int))); connect(MusEGlobal::muse, SIGNAL(configChanged()), SLOT(configChanged())); @@ -548,6 +538,11 @@ tempo->setTempo(t); tempoVal = t; } + blockSignals(true); + // Make sure positional controls are updated + unsigned v = MusEGlobal::song->cpos(); + time2->setValue(v); // time2 is SMPTE, it only need tempo updates. + blockSignals(false); } //--------------------------------------------------------- @@ -568,7 +563,19 @@ void Transport::setTimesig(int z, int n) { + blockSignals(true); tempo->setTimesig(z, n); + + // Make sure positional controls are updated + unsigned v = MusEGlobal::song->cpos(); + time1->setValue(v); // time2 is SMPTE. It only need tempo updates. + + v = MusEGlobal::song->lpos(); + tl1->setValue(v); + v = MusEGlobal::song->rpos(); + tl2->setValue(v); + + blockSignals(false); } //--------------------------------------------------------- @@ -801,5 +808,11 @@ buttons[4]->blockSignals(false); } } + +void Transport::sigChange(const AL::TimeSignature& sig) +{ + MusEGlobal::audio->msgAddSig(MusEGlobal::song->cPos().tick(), sig.z, sig.n); // Add will replace if found. +} + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/transport.h muse-2.0/muse/transport.h --- muse-2.0~rc2/muse/transport.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/transport.h 2012-06-30 19:24:42.000000000 +0200 @@ -136,6 +136,7 @@ void stopToggled(bool); void playToggled(bool); void configChanged(); + void sigChange(const AL::TimeSignature&); public slots: void setTempo(int tempo); diff -Nru muse-2.0~rc2/muse/undo.cpp muse-2.0/muse/undo.cpp --- muse-2.0~rc2/muse/undo.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/undo.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -49,7 +49,7 @@ const char* UndoOp::typeName() { static const char* name[] = { - "AddTrack", "DeleteTrack", "ModifyTrack", + "AddTrack", "DeleteTrack", "AddPart", "DeletePart", "ModifyPart", "AddEvent", "DeleteEvent", "ModifyEvent", "AddTempo", "DeleteTempo", @@ -73,10 +73,7 @@ switch(type) { case AddTrack: case DeleteTrack: - printf("%d %s\n", trackno, oTrack->name().toLatin1().constData()); - break; - case ModifyTrack: - printf("%d <%s>-<%s>\n", trackno, oTrack->name().toLatin1().constData(), nTrack->name().toLatin1().constData()); + printf("%d %s\n", trackno, track->name().toLatin1().constData()); break; case AddPart: case DeletePart: @@ -124,100 +121,85 @@ { if(!empty()) { - for(iUndo iu = begin(); iu != end(); ++iu) + if (this->isUndo) { - Undo& u = *iu; - for(riUndoOp i = u.rbegin(); i != u.rend(); ++i) + for(iUndo iu = begin(); iu != end(); ++iu) { - switch(i->type) + Undo& u = *iu; + for(iUndoOp i = u.begin(); i != u.end(); ++i) { - case UndoOp::DeleteTrack: - if(i->oTrack) - { - delete i->oTrack; - iUndo iu2 = iu; - ++iu2; - for(; iu2 != end(); ++iu2) - { - Undo& u2 = *iu2; - for(riUndoOp i2 = u2.rbegin(); i2 != u2.rend(); ++i2) - { - if(i2->type == UndoOp::DeleteTrack) - { - if(i2->oTrack == i->oTrack) - i2->oTrack = 0; - } - } - } - } - break; - /* case UndoOp::ModifyTrack: - if(i->oTrack) - { - // Prevent delete i->oTrack from crashing. - switch(i->oTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->oTrack; - for(int ch = 0; ch < ao->channels(); ++ch) - ao->setJackPort(ch, 0); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->oTrack; - for(int ch = 0; ch < ai->channels(); ++ch) - ai->setJackPort(ch, 0); - } - break; - default: - break; - } - if(!i->oTrack->isMidiTrack()) - ((AudioTrack*)i->oTrack)->clearEfxList(); - delete i->oTrack; - - iUndo iu2 = iu; - ++iu2; - for(; iu2 != end(); ++iu2) - { - Undo& u2 = *iu2; - for(riUndoOp i2 = u2.rbegin(); i2 != u2.rend(); ++i2) - { - if(i2->type == UndoOp::ModifyTrack) - { - if(i2->oTrack == i->oTrack) - i2->oTrack = 0; - } - } - } - } - break; */ - - //case UndoOp::DeletePart: - //delete i->oPart; - // break; - //case UndoOp::DeleteTempo: - // break; - //case UndoOp::DeleteSig: - // break; + switch(i->type) + { + case UndoOp::DeleteTrack: + if(i->track) + delete i->track; + break; + + case UndoOp::DeletePart: + delete i->oPart; + break; + + case UndoOp::ModifyPart: + delete i->oPart; + break; + + case UndoOp::ModifyMarker: + if (i->copyMarker) + delete i->copyMarker; + break; + + case UndoOp::ModifyTrackName: + if (i->_oldName) + delete [] i->_oldName; + if (i->_newName) + delete [] i->_newName; + break; + + default: + break; + } + } + u.clear(); + } + } + else + { + for(riUndo iu = rbegin(); iu != rend(); ++iu) + { + Undo& u = *iu; + for(riUndoOp i = u.rbegin(); i != u.rend(); ++i) + { + switch(i->type) + { + case UndoOp::AddTrack: + delete i->track; + break; + + case UndoOp::AddPart: + delete i->oPart; + break; + + case UndoOp::ModifyPart: + delete i->nPart; + break; case UndoOp::ModifyMarker: - if (i->copyMarker) - delete i->copyMarker; - break; - case UndoOp::ModifyTrackName: - //printf("UndoList::clearDelete ModifyTrackName old:%s new:%s\n", i->_oldName, i->_newName); - if (i->_oldName) - delete i->_oldName; - if (i->_newName) - delete i->_newName; - break; - default: - break; + if (i->realMarker) + delete i->realMarker; + break; + + case UndoOp::ModifyTrackName: + if (i->_oldName) + delete [] i->_oldName; + if (i->_newName) + delete [] i->_newName; + break; + + default: + break; + } } + u.clear(); } - u.clear(); } } @@ -230,9 +212,8 @@ void Song::startUndo() { - //redoList->clear(); // added by flo93: redo must be invalidated when a new undo is started - redoList->clearDelete(); // p4.0.46 Tim - MusEGlobal::redoAction->setEnabled(false); // + redoList->clearDelete(); // redo must be invalidated when a new undo is started + MusEGlobal::redoAction->setEnabled(false); undoList->push_back(Undo()); updateFlags = 0; @@ -263,12 +244,12 @@ iUndoOp op_=op; op_++; - if ((op->type==UndoOp::ModifyTrack) || (op->type==UndoOp::DeleteTrack)) + if (op->type==UndoOp::DeleteTrack) { - if (processed_tracks.find(op->oTrack)!=processed_tracks.end()) + if (processed_tracks.find(op->track)!=processed_tracks.end()) group.erase(op); else - processed_tracks.insert(op->oTrack); + processed_tracks.insert(op->track); } else if ((op->type==UndoOp::ModifyPart) || (op->type==UndoOp::DeletePart)) { @@ -299,9 +280,8 @@ } else { - //redoList->clear(); // added by flo93: redo must be invalidated when a new undo is started - redoList->clearDelete(); // p4.0.46 Tim. - MusEGlobal::redoAction->setEnabled(false); // + redoList->clearDelete(); // redo must be invalidated when a new undo is started + MusEGlobal::redoAction->setEnabled(false); } return doUndo; @@ -323,150 +303,15 @@ for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { switch(i->type) { case UndoOp::AddTrack: - removeTrack2(i->oTrack); + removeTrack2(i->track); updateFlags |= SC_TRACK_REMOVED; break; case UndoOp::DeleteTrack: - insertTrack2(i->oTrack, i->trackno); - // Added by T356. - chainTrackParts(i->oTrack, true); + insertTrack2(i->track, i->trackno); + chainTrackParts(i->track, true); updateFlags |= SC_TRACK_INSERTED; break; -/* - case UndoOp::ModifyTrack: - { - //printf("Song::doUndo2 ModifyTrack #1 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().toLatin1().constData(), i->nTrack, i->nTrack->name().toLatin1().constData()); - - // Unchain the track parts, but don't touch the ref counts. - unchainTrackParts(i->nTrack, false); - - //Track* track = i->nTrack->clone(); - Track* track = i->nTrack->clone(false); - - // A Track custom assignment operator was added by Tim. - *(i->nTrack) = *(i->oTrack); - - //printf("Song::doUndo2 ModifyTrack #2 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().toLatin1().constData(), i->nTrack, i->nTrack->name().toLatin1().constData()); - - // Prevent delete i->oTrack from crashing. - switch(i->oTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->oTrack; - for(int ch = 0; ch < ao->channels(); ++ch) - ao->setJackPort(ch, 0); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->oTrack; - for(int ch = 0; ch < ai->channels(); ++ch) - ai->setJackPort(ch, 0); - } - break; - default: - break; - } - if(!i->oTrack->isMidiTrack()) - ((AudioTrack*)i->oTrack)->clearEfxList(); - - delete i->oTrack; - i->oTrack = track; - - // Chain the track parts, but don't touch the ref counts. - chainTrackParts(i->nTrack, false); - - //printf("Song::doUndo2 ModifyTrack #3 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().toLatin1().constData(), i->nTrack, i->nTrack->name().toLatin1().constData()); - - // Connect and register ports. - switch(i->nTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->nTrack; - ao->setName(ao->name()); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->nTrack; - ai->setName(ai->name()); - } - break; - default: - break; - } - - // Update solo states, since the user may have changed soloing on other tracks. - updateSoloStates(); - - updateFlags |= SC_TRACK_MODIFIED; - } - break; -*/ - - /* - switch(i->nTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->nTrack; - for(int ch = 0; ch < ao->channels(); ++ch) - ao->setJackPort(ch, 0); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->nTrack; - for(int ch = 0; ch < ai->channels(); ++ch) - ai->setJackPort(ch, 0); - } - break; - default: - break; - } - if(!i->nTrack->isMidiTrack()) - ((AudioTrack*)i->nTrack)->clearEfxList(); - - //delete i->oTrack; - //i->oTrack = track; - - // Remove the track. removeTrack2 takes care of unchaining the new track. - removeTrack2(i->nTrack); - - // Connect and register ports. - switch(i->oTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->oTrack; - ao->setName(ao->name()); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->oTrack; - ai->setName(ai->name()); - } - break; - default: - break; - } - - // Insert the old track. - insertTrack2(i->oTrack, i->trackno); - // Chain the old track parts. (removeTrack2, above, takes care of unchaining the new track). - chainTrackParts(i->oTrack, true); - - // Update solo states, since the user may have changed soloing on other tracks. - updateSoloStates(); - - updateFlags |= SC_TRACK_MODIFIED; - } - break; - */ case UndoOp::SwapTrack: { @@ -483,7 +328,6 @@ removePart(part); updateFlags |= SC_PART_REMOVED; i->oPart->events()->incARef(-1); - //i->oPart->unchainClone(); unchainClone(i->oPart); } break; @@ -491,19 +335,17 @@ addPart(i->oPart); updateFlags |= SC_PART_INSERTED; i->oPart->events()->incARef(1); - //i->oPart->chainClone(); chainClone(i->oPart); break; case UndoOp::ModifyPart: if(i->doCtrls) - removePortCtrlEvents(i->oPart, i->doClones); - changePart(i->oPart, i->nPart); - i->oPart->events()->incARef(-1); - i->nPart->events()->incARef(1); - //i->oPart->replaceClone(i->nPart); - replaceClone(i->oPart, i->nPart); + removePortCtrlEvents(i->nPart, i->doClones); + changePart(i->nPart, i->oPart); + i->nPart->events()->incARef(-1); + i->oPart->events()->incARef(1); + replaceClone(i->nPart, i->oPart); if(i->doCtrls) - addPortCtrlEvents(i->nPart, i->doClones); + addPortCtrlEvents(i->oPart, i->doClones); updateFlags |= SC_PART_MODIFIED; break; case UndoOp::AddEvent: @@ -527,22 +369,18 @@ updateFlags |= SC_EVENT_MODIFIED; break; case UndoOp::AddTempo: - //printf("doUndo2: UndoOp::AddTempo. deleting tempo at: %d\n", i->a); MusEGlobal::tempomap.delTempo(i->a); updateFlags |= SC_TEMPO; break; case UndoOp::DeleteTempo: - //printf("doUndo2: UndoOp::DeleteTempo. adding tempo at: %d, tempo=%d\n", i->a, i->b); MusEGlobal::tempomap.addTempo(i->a, i->b); updateFlags |= SC_TEMPO; break; case UndoOp::AddSig: - ///sigmap.del(i->a); AL::sigmap.del(i->a); updateFlags |= SC_SIG; break; case UndoOp::DeleteSig: - ///sigmap.add(i->a, i->b, i->c); AL::sigmap.add(i->a, AL::TimeSignature(i->b, i->c)); updateFlags |= SC_SIG; break; @@ -580,146 +418,17 @@ for (iUndoOp i = u.begin(); i != u.end(); ++i) { switch(i->type) { case UndoOp::AddTrack: - insertTrack2(i->oTrack, i->trackno); - // Added by T356. - chainTrackParts(i->oTrack, true); + insertTrack2(i->track, i->trackno); + chainTrackParts(i->track, true); updateFlags |= SC_TRACK_INSERTED; break; case UndoOp::DeleteTrack: - removeTrack2(i->oTrack); + removeTrack2(i->track); updateFlags |= SC_TRACK_REMOVED; break; -/* - case UndoOp::ModifyTrack: - { - // Unchain the track parts, but don't touch the ref counts. - unchainTrackParts(i->nTrack, false); - - //Track* track = i->nTrack->clone(); - Track* track = i->nTrack->clone(false); - - *(i->nTrack) = *(i->oTrack); - - // Prevent delete i->oTrack from crashing. - switch(i->oTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->oTrack; - for(int ch = 0; ch < ao->channels(); ++ch) - ao->setJackPort(ch, 0); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->oTrack; - for(int ch = 0; ch < ai->channels(); ++ch) - ai->setJackPort(ch, 0); - } - break; - default: - break; - } - if(!i->oTrack->isMidiTrack()) - ((AudioTrack*)i->oTrack)->clearEfxList(); - - delete i->oTrack; - i->oTrack = track; - - // Chain the track parts, but don't touch the ref counts. - chainTrackParts(i->nTrack, false); - - // Connect and register ports. - switch(i->nTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->nTrack; - ao->setName(ao->name()); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->nTrack; - ai->setName(ai->name()); - } - break; - default: - break; - } - - // Update solo states, since the user may have changed soloing on other tracks. - updateSoloStates(); - - updateFlags |= SC_TRACK_MODIFIED; - } - break; -*/ - - /* - // Prevent delete i->oTrack from crashing. - switch(i->oTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->oTrack; - for(int ch = 0; ch < ao->channels(); ++ch) - ao->setJackPort(ch, 0); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->oTrack; - for(int ch = 0; ch < ai->channels(); ++ch) - ai->setJackPort(ch, 0); - } - break; - default: - break; - } - if(!i->oTrack->isMidiTrack()) - ((AudioTrack*)i->oTrack)->clearEfxList(); - - //delete i->oTrack; - //i->oTrack = track; - - // Remove the track. removeTrack2 takes care of unchaining the old track. - removeTrack2(i->oTrack); - - // Connect and register ports. - switch(i->nTrack->type()) - { - case Track::AUDIO_OUTPUT: - { - AudioOutput* ao = (AudioOutput*)i->nTrack; - ao->setName(ao->name()); - } - break; - case Track::AUDIO_INPUT: - { - AudioInput* ai = (AudioInput*)i->nTrack; - ai->setName(ai->name()); - } - break; - default: - break; - } - - // Insert the new track. - insertTrack2(i->nTrack, i->trackno); - // Chain the new track parts. (removeTrack2, above, takes care of unchaining the old track). - chainTrackParts(i->nTrack, true); - // Update solo states, since the user may have changed soloing on other tracks. - updateSoloStates(); - - updateFlags |= SC_TRACK_MODIFIED; - } - break; - */ - case UndoOp::SwapTrack: { Track* track = _tracks[i->a]; @@ -732,26 +441,23 @@ addPart(i->oPart); updateFlags |= SC_PART_INSERTED; i->oPart->events()->incARef(1); - //i->oPart->chainClone(); chainClone(i->oPart); break; case UndoOp::DeletePart: removePart(i->oPart); updateFlags |= SC_PART_REMOVED; i->oPart->events()->incARef(-1); - //i->oPart->unchainClone(); unchainClone(i->oPart); break; case UndoOp::ModifyPart: if(i->doCtrls) - removePortCtrlEvents(i->nPart, i->doClones); - changePart(i->nPart, i->oPart); - i->oPart->events()->incARef(1); - i->nPart->events()->incARef(-1); - //i->nPart->replaceClone(i->oPart); - replaceClone(i->nPart, i->oPart); + removePortCtrlEvents(i->oPart, i->doClones); + changePart(i->oPart, i->nPart); + i->nPart->events()->incARef(1); + i->oPart->events()->incARef(-1); + replaceClone(i->oPart, i->nPart); if(i->doCtrls) - addPortCtrlEvents(i->oPart, i->doClones); + addPortCtrlEvents(i->nPart, i->doClones); updateFlags |= SC_PART_MODIFIED; break; case UndoOp::AddEvent: @@ -775,22 +481,18 @@ updateFlags |= SC_EVENT_MODIFIED; break; case UndoOp::AddTempo: - //printf("doRedo2: UndoOp::AddTempo. adding tempo at: %d with tempo=%d\n", i->a, i->b); MusEGlobal::tempomap.addTempo(i->a, i->b); updateFlags |= SC_TEMPO; break; case UndoOp::DeleteTempo: - //printf("doRedo2: UndoOp::DeleteTempo. deleting tempo at: %d with tempo=%d\n", i->a, i->b); MusEGlobal::tempomap.delTempo(i->a); updateFlags |= SC_TEMPO; break; case UndoOp::AddSig: - ///sigmap.add(i->a, i->b, i->c); AL::sigmap.add(i->a, AL::TimeSignature(i->b, i->c)); updateFlags |= SC_SIG; break; case UndoOp::DeleteSig: - ///sigmap.del(i->a); AL::sigmap.del(i->a); updateFlags |= SC_SIG; break; @@ -834,19 +536,12 @@ c = c_; } -UndoOp::UndoOp(UndoType type_, int n, Track* oldTrack, Track* newTrack) - { - type = type_; - trackno = n; - oTrack = oldTrack; - nTrack = newTrack; - } -UndoOp::UndoOp(UndoType type_, int n, Track* track) +UndoOp::UndoOp(UndoType type_, int n, Track* track_) { type = type_; trackno = n; - oTrack = track; + track = track_; } UndoOp::UndoOp(UndoType type_, Part* part) @@ -877,8 +572,8 @@ UndoOp::UndoOp(UndoType type_, Part* oPart_, Part* nPart_, bool doCtrls_, bool doClones_) { type = type_; - oPart = nPart_; - nPart = oPart_; + oPart = oPart_; + nPart = nPart_; doCtrls = doCtrls_; doClones = doClones_; } @@ -892,12 +587,6 @@ nVal = nv; } -UndoOp::UndoOp(UndoType type_, SigEvent* oevent, SigEvent* nevent) - { - type = type_; - oSignature = oevent; - nSignature = nevent; - } UndoOp::UndoOp(UndoType type_, Marker* copyMarker_, Marker* realMarker_) { type = type_; @@ -914,20 +603,20 @@ endframe = endframe_; } -UndoOp::UndoOp(UndoOp::UndoType type_, Track* track, const char* old_name, const char* new_name) +UndoOp::UndoOp(UndoOp::UndoType type_, Track* track_, const char* old_name, const char* new_name) { type = type_; - _renamedTrack = track; + _renamedTrack = track_; _oldName = new char[strlen(old_name) + 1]; _newName = new char[strlen(new_name) + 1]; strcpy(_oldName, old_name); strcpy(_newName, new_name); } -UndoOp::UndoOp(UndoOp::UndoType type_, Track* track, int old_chan, int new_chan) +UndoOp::UndoOp(UndoOp::UndoType type_, Track* track_, int old_chan, int new_chan) { type = type_; - _propertyTrack = track; + _propertyTrack = track_; _oldPropValue = old_chan; _newPropValue = new_chan; } @@ -966,24 +655,24 @@ for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { switch(i->type) { case UndoOp::AddTrack: - removeTrack1(i->oTrack); + removeTrack1(i->track); break; case UndoOp::DeleteTrack: - insertTrack1(i->oTrack, i->trackno); + insertTrack1(i->track, i->trackno); // FIXME: Would like to put this part in Undo2, but indications // elsewhere are that (dis)connecting jack routes must not be // done in the realtime thread. The result is that we get a few // "PANIC Process init: No buffer from audio device" messages // before the routes are (dis)connected. So far seems to do no harm though... - switch(i->oTrack->type()) + switch(i->track->type()) { case Track::AUDIO_OUTPUT: case Track::AUDIO_INPUT: - connectJackRoutes((AudioTrack*)i->oTrack, false); + connectJackRoutes((AudioTrack*)i->track, false); break; - //case Track::AUDIO_SOFTSYNTH: - //SynthI* si = (SynthI*)i->oTrack; + //case Track::AUDIO_SOFTSYNTH: DELETETHIS 4 + //SynthI* si = (SynthI*)i->track; //si->synth()->init( // break; default: @@ -1003,22 +692,19 @@ { MusECore::MidiTrack* mt = dynamic_cast(i->_propertyTrack); if (mt == 0 || mt->type() == MusECore::Track::DRUM) - //if (mt == 0 || mt->isDrumTrack()) // For Flo later with new drum tracks. p4.0.46 Tim break; if (i->_oldPropValue != mt->outChannel()) { - //mt->setOutChannel(i->_oldPropValue); MusEGlobal::audio->msgIdle(true); - //MusEGlobal::audio->msgSetTrackOutChannel(mt, i->_oldPropValue); mt->setOutChanAndUpdate(i->_oldPropValue); MusEGlobal::audio->msgIdle(false); + // DELETETHIS 6 //if (mt->type() == MusECore::MidiTrack::DRUM) {//Change channel on all drum instruments // for (int i=0; i_oldPropValue; // } //updateFlags |= SC_CHANNELS; MusEGlobal::audio->msgUpdateSoloStates(); - //updateFlags |= SC_MIDI_TRACK_PROP | SC_ROUTE; updateFlags |= SC_MIDI_TRACK_PROP; } } @@ -1055,25 +741,19 @@ for (riUndoOp i = u.rbegin(); i != u.rend(); ++i) { switch(i->type) { case UndoOp::AddTrack: - removeTrack3(i->oTrack); + removeTrack3(i->track); break; case UndoOp::DeleteTrack: - insertTrack3(i->oTrack, i->trackno); + insertTrack3(i->track, i->trackno); break; - case UndoOp::ModifyTrack: - // Not much choice but to do this - Tim. - //clearClipboardAndCloneList(); - break; case UndoOp::ModifyMarker: { - //printf("performing undo for one marker at copy %d real %d\n", i->copyMarker, i->realMarker); if (i->realMarker) { Marker tmpMarker = *i->realMarker; *i->realMarker = *i->copyMarker; // swap them *i->copyMarker = tmpMarker; } else { - //printf("flipping marker\n"); i->realMarker = _markerList->add(*i->copyMarker); delete i->copyMarker; i->copyMarker = 0; @@ -1103,17 +783,17 @@ for (iUndoOp i = u.begin(); i != u.end(); ++i) { switch(i->type) { case UndoOp::AddTrack: - insertTrack1(i->oTrack, i->trackno); + insertTrack1(i->track, i->trackno); // FIXME: See comments in Undo1. - switch(i->oTrack->type()) + switch(i->track->type()) { case Track::AUDIO_OUTPUT: case Track::AUDIO_INPUT: - connectJackRoutes((AudioTrack*)i->oTrack, false); + connectJackRoutes((AudioTrack*)i->track, false); break; - //case Track::AUDIO_SOFTSYNTH: - //SynthI* si = (SynthI*)i->oTrack; + //case Track::AUDIO_SOFTSYNTH: DELETETHIS 4 + //SynthI* si = (SynthI*)i->track; //si->synth()->init( // break; default: @@ -1122,7 +802,7 @@ break; case UndoOp::DeleteTrack: - removeTrack1(i->oTrack); + removeTrack1(i->track); break; case UndoOp::ModifyTrackName: i->_renamedTrack->setName(i->_newName); @@ -1136,22 +816,19 @@ { MusECore::MidiTrack* mt = dynamic_cast(i->_propertyTrack); if (mt == 0 || mt->type() == MusECore::Track::DRUM) - //if (mt == 0 || mt->isDrumTrack()) // For Flo later with new drum tracks. p4.0.46 Tim break; if (i->_newPropValue != mt->outChannel()) { - //mt->setOutChannel(i->_newPropValue); MusEGlobal::audio->msgIdle(true); - //MusEGlobal::audio->msgSetTrackOutChannel(mt, i->_newPropValue); mt->setOutChanAndUpdate(i->_newPropValue); MusEGlobal::audio->msgIdle(false); + // DELETETHIS 5 //if (mt->type() == MusECore::MidiTrack::DRUM) {//Change channel on all drum instruments // for (int i=0; i_newPropValue; // } //updateFlags |= SC_CHANNELS; MusEGlobal::audio->msgUpdateSoloStates(); - //updateFlags |= SC_MIDI_TRACK_PROP | SC_ROUTE; updateFlags |= SC_MIDI_TRACK_PROP; } } @@ -1188,18 +865,13 @@ for (iUndoOp i = u.begin(); i != u.end(); ++i) { switch(i->type) { case UndoOp::AddTrack: - insertTrack3(i->oTrack, i->trackno); + insertTrack3(i->track, i->trackno); break; case UndoOp::DeleteTrack: - removeTrack3(i->oTrack); + removeTrack3(i->track); break; - case UndoOp::ModifyTrack: - // Not much choice but to do this - Tim. - //clearClipboardAndCloneList(); - break; case UndoOp::ModifyMarker: { - //printf("performing redo for one marker at copy %d real %d\n", i->copyMarker, i->realMarker); if (i->copyMarker) { Marker tmpMarker = *i->realMarker; *i->realMarker = *i->copyMarker; // swap them diff -Nru muse-2.0~rc2/muse/undo.h muse-2.0/muse/undo.h --- muse-2.0~rc2/muse/undo.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/undo.h 2012-06-30 19:24:43.000000000 +0200 @@ -45,7 +45,7 @@ struct UndoOp { enum UndoType { - AddTrack, DeleteTrack, ModifyTrack, + AddTrack, DeleteTrack, AddPart, DeletePart, ModifyPart, AddEvent, DeleteEvent, ModifyEvent, AddTempo, DeleteTempo, @@ -67,8 +67,7 @@ int c; }; struct { - Track* oTrack; - Track* nTrack; + Track* track; int trackno; }; struct { @@ -76,11 +75,7 @@ Part* nPart; }; struct { - Part* part; - }; - struct { - SigEvent* nSignature; - SigEvent* oSignature; + Part* part; // this part is only relevant for EVENT operations, NOT for part ops! }; struct { int channel; @@ -119,14 +114,12 @@ UndoOp(); UndoOp(UndoType type, int a, int b, int c=0); - UndoOp(UndoType type, int n, Track* oldTrack, Track* newTrack); UndoOp(UndoType type, int n, Track* track); UndoOp(UndoType type, Part* part); UndoOp(UndoType type, Event& oev, Event& nev, Part* part, bool doCtrls, bool doClones); UndoOp(UndoType type, Event& nev, Part* part, bool doCtrls, bool doClones); UndoOp(UndoType type, Part* oPart, Part* nPart, bool doCtrls, bool doClones); UndoOp(UndoType type, int c, int ctrl, int ov, int nv); - UndoOp(UndoType type, SigEvent* oevent, SigEvent* nevent); UndoOp(UndoType type, const char* changedFile, const char* changeData, int startframe, int endframe); UndoOp(UndoType type, Marker* copyMarker, Marker* realMarker); UndoOp(UndoType type, Track* track, const char* old_name, const char* new_name); @@ -143,11 +136,15 @@ typedef Undo::reverse_iterator riUndoOp; class UndoList : public std::list { + protected: + bool isUndo; public: void clearDelete(); + UndoList(bool _isUndo) : std::list() { isUndo=_isUndo; } }; typedef UndoList::iterator iUndo; +typedef UndoList::reverse_iterator riUndo; } // namespace MusECore diff -Nru muse-2.0~rc2/muse/vst.cpp muse-2.0/muse/vst.cpp --- muse-2.0~rc2/muse/vst.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/vst.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -60,7 +60,6 @@ { static VstTimeInfo _timeInfo; -// JackVST* jackvst = effect ? ((JackVST*) effect->user) : NULL; jack_position_t jack_pos; jack_transport_state_t tstate; @@ -300,7 +299,6 @@ FSTInfo* info = fst_get_info(path); if (info) { if (info->numInputs == 0 && info->numOutputs) - //synthis.push_back(new VstSynth(*fi)); synthis.push_back(new VstSynth(*fi, fi->baseName(), QString(), QString(), QString())); fst_free_info(info); } @@ -468,7 +466,7 @@ undoSetuid(); return 0; } -// int vst_version = plugin->dispatcher (plugin, effGetVstVersion, 0, 0, NULL, 0.0f); + undoSetuid(); return fst; } @@ -509,11 +507,8 @@ // createSIF //--------------------------------------------------------- -//SynthIF* VstSynth::createSIF() const SynthIF* VstSynth::createSIF(SynthI* s) { - //return new VstSynthIF(); - VstSynthIF* sif = new VstSynthIF(s); sif->init(this, s); return sif; diff -Nru muse-2.0~rc2/muse/vst.h muse-2.0/muse/vst.h --- muse-2.0~rc2/muse/vst.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/vst.h 2012-06-30 19:24:43.000000000 +0200 @@ -44,7 +44,6 @@ _FSTHandle* fstHandle; public: - //VstSynth(const QFileInfo& fi) : Synth(fi) { fstHandle = 0; } VstSynth(const QFileInfo& fi) : Synth(fi, fi->baseName()) { fstHandle = 0; } @@ -53,7 +52,6 @@ virtual Type synthType() const { return VST_SYNTH; } virtual void incInstances(int val); virtual void* instantiate(); - //virtual SynthIF* createSIF() const; virtual SynthIF* createSIF(SynthI*) const; }; @@ -68,7 +66,6 @@ bool _guiVisible; public: - //VstSynthIF() { _fst = 0; _guiVisible = false; } VstSynthIF(SynthI* s) : SynthIF(s) { _fst = 0; _guiVisible = false; @@ -98,7 +95,6 @@ virtual void deactivate3(); virtual const char* getPatchName(int, int, int, bool) const { return ""; } virtual const char* getPatchName(int, int, MType, bool) { return ""; } - //virtual void populatePatchPopup(QMenu*, int, MType, bool) {}; virtual void populatePatchPopup(PopupMenu*, int, MType, bool) {}; virtual void write(int level, Xml& xml) const; virtual float getParameter(unsigned long idx) const; diff -Nru muse-2.0~rc2/muse/wave.cpp muse-2.0/muse/wave.cpp --- muse-2.0~rc2/muse/wave.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/wave.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -48,18 +48,8 @@ namespace MusECore { -/* -const char* audioFilePattern[] = { - "Wave/Binary (*.wav *.ogg *.bin)", - "Wave (*.wav *.ogg)", - "Binary (*.bin)", - "All Files (*)", - 0 - }; -*/ const int cacheMag = 128; -// ClipList* waveClips; SndFileList SndFile::sndFiles; @@ -147,18 +137,14 @@ void SndFile::readCache(const QString& path, bool showProgress) { -// printf("readCache %s for %d samples channel %d\n", -// path.toLatin1().constData(), samples(), channels()); - if (cache) { for (unsigned i = 0; i < channels(); ++i) delete [] cache[i]; delete[] cache; } - if (samples() == 0) { -// printf("SndFile::readCache: file empty\n"); + if (samples() == 0) return; - } + csize = (samples() + cacheMag - 1)/cacheMag; cache = new SampleV*[channels()]; for (unsigned ch = 0; ch < channels(); ++ch) @@ -249,10 +235,9 @@ s[ch].rms = 0; } - if (pos > samples()) { -// printf("%p pos %d > samples %d\n", this, pos, samples()); + if (pos > samples()) return; - } + if (mag < cacheMag) { float data[channels()][mag]; @@ -556,7 +541,6 @@ if (srcChannels == dstChannels) { for (size_t i = 0; i < n; ++i) { for (int ch = 0; ch < dstChannels; ++ch) - //*dst++ = *(src[ch]+i); // < limitValue ? *(src[ch]+i) : limitValue; if (*(src[ch]+i) > 0) *dst++ = *(src[ch]+i) < limitValue ? *(src[ch]+i) : limitValue; else @@ -627,14 +611,14 @@ if ((*i)->path() == name) return *i; } - return 0; + return NULL; } //--------------------------------------------------------- -// getSnd +// getWave //--------------------------------------------------------- -SndFile* getWave(const QString& inName, bool readOnlyFlag) +SndFileR getWave(const QString& inName, bool readOnlyFlag) { QString name = inName; @@ -648,7 +632,6 @@ } } } -// printf("=====%s %s\n", inName.toLatin1().constData(), name.toLatin1().constData()); // only open one instance of wave file SndFile* f = SndFile::sndFiles.search(name); @@ -656,7 +639,7 @@ if (!QFile::exists(name)) { fprintf(stderr, "wave file <%s> not found\n", name.toLatin1().constData()); - return 0; + return NULL; } f = new SndFile(name); bool error; @@ -669,7 +652,6 @@ QString cacheName = wavinfo.absolutePath() + QString("/") + wavinfo.completeBaseName() + QString(".wca"); QFileInfo wcainfo(cacheName); if (!wcainfo.exists() || wcainfo.lastModified() < wavinfo.lastModified()) { - //printf("wcafile is older or does not exist!\n"); QFile(cacheName).remove(); f->readCache(cacheName,true); } @@ -702,7 +684,6 @@ QString cacheName = wavinfo.absolutePath() + QString("/") + wavinfo.completeBaseName() + QString(".wca"); QFileInfo wcainfo(cacheName); if (!wcainfo.exists() || wcainfo.lastModified() < wavinfo.lastModified()) { - //printf("wcafile is older or does not exist!\n"); QFile(cacheName).remove(); f->readCache(cacheName,true); } @@ -727,7 +708,6 @@ // put in the tmpfile, and when redo is eventually called the data is switched again (causing the muted data to be written to the "original" // file. The data is merely switched. - //printf("Applying undofile: orig=%s tmpfile=%s startframe=%d endframe=%d\n", original.toLatin1().constData(), tmpfile.toLatin1().constData(), startframe, endframe); SndFile* orig = sndFiles.search(original); SndFile tmp = SndFile(tmpfile); if (!orig) { @@ -809,6 +789,7 @@ MusEGlobal::audio->msgIdle(false); } +// DELETETHIS 170 #if 0 //--------------------------------------------------------- // Clip @@ -897,7 +878,7 @@ ClipBase* readClip(Xml& xml) { - SndFile* f = 0; + SndFileR f = 0; QString name; unsigned spos = 0; int len = 0; @@ -983,80 +964,96 @@ // cmdAddRecordedWave //--------------------------------------------------------- -//void Song::cmdAddRecordedWave(WaveTrack* track, const MusECore::Pos& s, const MusECore::Pos& e) -void Song::cmdAddRecordedWave(MusECore::WaveTrack* track, MusECore::Pos s, MusECore::Pos e) +void Song::cmdAddRecordedWave(MusECore::WaveTrack* track, MusECore::Pos s, MusECore::Pos e) { if (MusEGlobal::debugMsg) printf("cmdAddRecordedWave - loopCount = %d, punchin = %d", MusEGlobal::audio->loopCount(), punchin()); - MusECore::SndFile* f = track->recFile(); - if (f == 0) { + MusECore::SndFileR f = track->recFile(); + if (f.isNull()) { printf("cmdAddRecordedWave: no snd file for track <%s>\n", track->name().toLatin1().constData()); return; } - // Removed by Tim. p3.3.8 - //unsigned startTick = roundDownBar(s.tick()); - //unsigned endTick = roundUpBar(e.tick()); - - // Added by Tim. p3.3.8 + // If externally clocking (and therefore master was forced off), + // tempos may have been recorded. We really should temporarily force + // the master tempo map on in order to properly determine the ticks below. + // Else internal clocking, the user decided to record either with or without + // master on, so let it be. + // FIXME: We really should allow the master flag to be on at the same time as + // the external sync flag! AFAIR when external sync is on, no part of the app shall + // depend on the tempo map anyway, so it should not matter whether it's on or off. + // If we do that, then we may be able to remove this section and user simply decides + // whether master is on/off, because we may be able to use the flag to determine + // whether to record external tempos at all, because we may want a switch for it! + bool master_was_on = MusEGlobal::tempomap.masterFlag(); + if(MusEGlobal::extSyncFlag.value() && !master_was_on) + MusEGlobal::tempomap.setMasterFlag(0, true); if((MusEGlobal::audio->loopCount() > 0 && s.tick() > lPos().tick()) || (punchin() && s.tick() < lPos().tick())) s.setTick(lPos().tick()); // If we are looping, just set the end to the right marker, since we don't know how many loops have occurred. // (Fixed: Added Audio::loopCount) // Otherwise if punchout is on, limit the end to the right marker. - //if(loop() || (punchout() && e.tick() > rPos().tick()) ) - if((MusEGlobal::audio->loopCount() > 0) || (punchout() && e.tick() > rPos().tick()) ) + if((MusEGlobal::audio->loopCount() > 0) || (punchout() && e.tick() > rPos().tick()) ) e.setTick(rPos().tick()); + // No part to be created? Delete the rec sound file. - if(s.tick() >= e.tick()) + if(s.frame() >= e.frame()) { QString st = f->path(); - delete f; // The function which calls this function already does this immediately after. But do it here anyway. - track->setRecFile(0); + track->setRecFile(NULL); // upon "return", f is removed from the stack, the WaveTrack::_recFile's + // counter has dropped by 2 and _recFile will probably deleted then remove(st.toLatin1().constData()); if(MusEGlobal::debugMsg) - printf("Song::cmdAddRecordedWave: remove file %s - start=%d end=%d\n", st.toLatin1().constData(), s.tick(), e.tick()); + printf("Song::cmdAddRecordedWave: remove file %s - startframe=%d endframe=%d\n", st.toLatin1().constData(), s.frame(), e.frame()); + + // Restore master flag. + if(MusEGlobal::extSyncFlag.value() && !master_was_on) + MusEGlobal::tempomap.setMasterFlag(0, false); + return; } // Round the start down using the Arranger part snap raster value. - unsigned startTick = AL::sigmap.raster1(s.tick(), MusEGlobal::song->arrangerRaster()); + int a_rast = MusEGlobal::song->arrangerRaster(); + unsigned sframe = (a_rast == 1) ? s.frame() : Pos(AL::sigmap.raster1(s.tick(), MusEGlobal::song->arrangerRaster())).frame(); // Round the end up using the Arranger part snap raster value. - unsigned endTick = AL::sigmap.raster2(e.tick(), MusEGlobal::song->arrangerRaster()); + unsigned eframe = (a_rast == 1) ? e.frame() : Pos(AL::sigmap.raster2(e.tick(), MusEGlobal::song->arrangerRaster())).frame(); + unsigned etick = Pos(eframe).tick(); + + // Done using master tempo map. Restore master flag. + if(MusEGlobal::extSyncFlag.value() && !master_was_on) + MusEGlobal::tempomap.setMasterFlag(0, false); f->update(); MusECore::WavePart* part = new MusECore::WavePart(track); - part->setTick(startTick); - part->setLenTick(endTick - startTick); + part->setFrame(sframe); + part->setLenFrame(eframe - sframe); part->setName(track->name()); // create Event MusECore::Event event(MusECore::Wave); - MusECore::SndFileR sf(f); - event.setSndFile(sf); + event.setSndFile(f); // We are done with the _recFile member. Set to zero. The function which // calls this function already does this immediately after. But do it here anyway. track->setRecFile(0); event.setSpos(0); - // Since the part start was snapped down, we must apply the difference so that the // wave event tick lines up with when the user actually started recording. - // Added by Tim. p3.3.8 - event.setTick(s.tick() - startTick); - - + event.setFrame(s.frame() - sframe); + // NO Can't use this. SF reports too long samples at first part recorded in sequence. See samples() - funny business with SEEK ? + //event.setLenFrame(f.samples()); event.setLenFrame(e.frame() - s.frame()); part->addEvent(event); MusEGlobal::song->cmdAddPart(part); - if (MusEGlobal::song->len() < endTick) - MusEGlobal::song->setLen(endTick); + if (MusEGlobal::song->len() < etick) + MusEGlobal::song->setLen(etick); } //--------------------------------------------------------- @@ -1094,17 +1091,22 @@ // operator= //--------------------------------------------------------- -SndFileR& SndFileR::operator=(const SndFileR& ed) - { - if (sf == ed.sf) +SndFileR& SndFileR::operator=(SndFile* ptr) +{ + if (sf == ptr) return *this; if (sf && --(sf->refCount) == 0) { delete sf; } - sf = ed.sf; + sf = ptr; if (sf) (sf->refCount)++; return *this; +} + +SndFileR& SndFileR::operator=(const SndFileR& ed) + { + return operator=(ed.sf); } //--------------------------------------------------------- @@ -1113,27 +1115,9 @@ SndFileR::~SndFileR() { - if (sf) - if (--(sf->refCount) == 0) { - delete sf; - sf=NULL; - } + *this=NULL; // decrease the refcounter, maybe delete } -void SndFileList::clearDelete() -{ - // ~SndFile searches itself on the list (and will find for - // sure) and deletes the entry on its own. - while (!empty()) - delete *begin(); - - /* this is wrong, because ~SndFile deletes itself from the - * list, causing the iterator to be invalidated -> fail. - for (SndFileList::iterator i = begin(); i != end(); ++i) - delete *i; - clear(); - */ -} } // namespace MusECore @@ -1153,7 +1137,6 @@ "a wave track")); return; } - //QString fn = MusEGui::getOpenFileName(MusEGlobal::lastWavePath, audioFilePattern, this, QString fn = MusEGui::getOpenFileName(MusEGlobal::lastWavePath, MusEGlobal::audio_file_pattern, this, tr("Import Wave File"), 0); if (!fn.isEmpty()) { @@ -1171,14 +1154,14 @@ if (track==NULL) track = (MusECore::WaveTrack*)(_arranger->curTrack()); - MusECore::SndFile* f = MusECore::getWave(name, true); + MusECore::SndFileR f = MusECore::getWave(name, true); - if (f == 0) { + if (f.isNull()) { printf("import audio file failed\n"); return true; } int samples = f->samples(); - if ((unsigned)MusEGlobal::sampleRate !=f->samplerate()) { + if ((unsigned)MusEGlobal::sampleRate != f->samplerate()) { if(QMessageBox::question(this, tr("Import Wavefile"), tr("This wave file has a samplerate of %1,\n" "as opposed to current setting %2.\n" @@ -1186,10 +1169,7 @@ tr("&Yes"), tr("&No"), QString::null, 0, 1 )) { - //printf("why won't muse let me delete the file object? %d\n", f->getRefCount()); - if (f->getRefCount() == 0) - delete f; - return true; + return true; // this removed f from the stack, dropping refcount maybe to zero and maybe deleting the thing } } track->setChannels(f->channels()); diff -Nru muse-2.0~rc2/muse/waveedit/waveedit.cpp muse-2.0/muse/waveedit/waveedit.cpp --- muse-2.0~rc2/muse/waveedit/waveedit.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/waveedit/waveedit.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -80,7 +80,7 @@ WaveEdit::WaveEdit(MusECore::PartList* pl) : MidiEditor(TopWin::WAVE, 1, pl) { - setFocusPolicy(Qt::StrongFocus); + setFocusPolicy(Qt::NoFocus); QSignalMapper* mapper = new QSignalMapper(this); QAction* act; @@ -175,19 +175,9 @@ settingsMenu->addAction(shareAction); settingsMenu->addAction(fullscreenAction); - //---------ToolBar---------------------------------- - tools = addToolBar(tr("Wave edit tools")); - tools->setObjectName("Wave edit tools"); - - tools->addActions(MusEGlobal::undoRedo->actions()); connect(MusEGlobal::muse, SIGNAL(configChanged()), SLOT(configChanged())); - //-------------------------------------------------- - // Transport Bar - QToolBar* transport = addToolBar(tr("transport")); - transport->setObjectName("transport"); - transport->addActions(MusEGlobal::transportAction->actions()); //-------------------------------------------------- // ToolBar: Solo Cursor1 Cursor2 @@ -200,6 +190,7 @@ solo = new QToolButton(); solo->setText(tr("Solo")); solo->setCheckable(true); + solo->setFocusPolicy(Qt::NoFocus); tb1->addWidget(solo); connect(solo, SIGNAL(toggled(bool)), SLOT(soloChanged(bool))); @@ -240,7 +231,8 @@ ymag->setMaximum(256); ymag->setPageStep(256); ymag->setValue(yscale); - + ymag->setFocusPolicy(Qt::NoFocus); + time = new MTScale(&_raster, mainw, xscale, true); ymag->setFixedWidth(16); connect(view, SIGNAL(mouseWheelMoved(int)), this, SLOT(moveVerticalSlider(int))); @@ -260,7 +252,7 @@ mainGrid->addWidget(hscroll, 3, 0); mainGrid->addWidget(corner, 3, 1, Qt::AlignBottom | Qt::AlignRight); - view->setFocus(); // Tim. + view->setFocus(); connect(hscroll, SIGNAL(scrollChanged(int)), view, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scaleChanged(int)), view, SLOT(setXMag(int))); @@ -289,7 +281,7 @@ } initTopwinState(); - MusEGlobal::muse->topwinMenuInited(this); + finalizeInit(); } void WaveEdit::initShortcuts() @@ -540,4 +532,17 @@ } +//--------------------------------------------------------- +// focusCanvas +//--------------------------------------------------------- + +void WaveEdit::focusCanvas() +{ + if(MusEGlobal::config.smartFocus) + { + view->setFocus(); + view->activateWindow(); + } +} + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/waveedit/waveedit.h muse-2.0/muse/waveedit/waveedit.h --- muse-2.0~rc2/muse/waveedit/waveedit.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/waveedit/waveedit.h 2012-06-30 19:24:42.000000000 +0200 @@ -58,7 +58,6 @@ WaveView* view; QSlider* ymag; - QToolBar* tools; QToolBar* tb1; QToolButton* solo; MusEGui::PosLabel* pos1; @@ -87,11 +86,10 @@ public slots: void configChanged(); - virtual void updateHScrollRange(); void horizontalZoomIn(); void horizontalZoomOut(); - + void focusCanvas(); signals: void isDeleting(MusEGui::TopWin*); diff -Nru muse-2.0~rc2/muse/waveedit/waveview.cpp muse-2.0/muse/waveedit/waveview.cpp --- muse-2.0~rc2/muse/waveedit/waveview.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/waveedit/waveview.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -21,7 +21,7 @@ //========================================================= #include -#include +#include #include #include @@ -221,8 +221,6 @@ if (pos[2] >= x && pos[2] < x2) p.drawLine(pos[2], y, pos[2], y2); - // Changed by T356. Support multiple (or none) selected parts. - //int n = curPart->track()->channels(); int n = 1; if(curPart) n = curPart->track()->channels(); @@ -245,9 +243,6 @@ QString WaveView::getCaption() const { - - // Changed by T356. Support multiple (or none) selected parts. - //return QString("Part ") + curPart->name(); if(curPart) return QString("Part ") + curPart->name(); else @@ -265,8 +260,10 @@ if(flags == SC_MIDI_CONTROLLER) return; - if (flags & SC_SELECTION) { - startSample = MAXINT; + if (flags & ~SC_SELECTION) { + // TODO FIXME: don't we actually only want SC_PART_*, and maybe SC_TRACK_DELETED? + // (same in ecanvas.cpp) + startSample = INT_MAX; endSample = 0; curPart = 0; for (MusECore::iPart p = editor->parts()->begin(); p != editor->parts()->end(); ++p) { diff -Nru muse-2.0~rc2/muse/waveevent.cpp muse-2.0/muse/waveevent.cpp --- muse-2.0~rc2/muse/waveevent.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/waveevent.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -32,7 +32,7 @@ // Added by Tim. p3.3.18 //#define USE_SAMPLERATE -// + //#define WAVEEVENT_DEBUG //#define WAVEEVENT_DEBUG_PRC @@ -110,10 +110,8 @@ else if (tag == "frame") _spos = xml.parseInt(); else if (tag == "file") { - SndFile* wf = getWave(xml.parse1(), true); - if (wf) { - f = SndFileR(wf); - } + SndFileR wf = getWave(xml.parse1(), true); + if (wf) f = wf; } else xml.unknown("Event"); @@ -141,8 +139,6 @@ xml.tag(level++, "event"); PosLen wpos(*this); wpos += offset; -// if (offset) -// wpos.setTick(wpos.tick() + offset); wpos.write(level, xml, "poslen"); xml.intTag(level, "frame", _spos); // offset in wave file @@ -152,7 +148,6 @@ // QString path = f.dirPath(); - //if (path.contains(MusEGlobal::museProject)) { if (!forcePath && path.contains(MusEGlobal::museProject)) { // extract MusEGlobal::museProject. QString newName = f.path().remove(MusEGlobal::museProject+"/"); @@ -163,11 +158,6 @@ xml.etag(level, "event"); } -//void WaveEventBase::read(unsigned offset, float** buffer, int channel, int n, bool overwrite) -//void WaveEventBase::readAudio(unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) -//off_t WaveEventBase::readAudio(SRC_STATE* src_state, off_t sfCurFrame, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) -//off_t WaveEventBase::readAudio(AudioConverter* audConv, off_t sfCurFrame, unsigned offset, float** buffer, int channel, int n, bool doSeek, bool overwrite) -// p3.3.33 void WaveEventBase::readAudio(WavePart* /*part*/, unsigned offset, float** buffer, int channel, int n, bool /*doSeek*/, bool overwrite) { // Added by Tim. p3.3.17 @@ -175,6 +165,11 @@ printf("WaveEventBase::readAudio audConv:%p sfCurFrame:%ld offset:%u channel:%d n:%d\n", audConv, sfCurFrame, offset, channel, n); #endif + // DELETETHIS 270. all the below stuff hasn't changed since revision 462, and + // will not compile, and has a TODO in it. + // will this ever be done, or is it completely obsolete? + // even if we keep the #ifdef branch, there's a huge + // comment in it. delete that? // Changed by Tim. p3.3.18 #ifdef USE_SAMPLERATE @@ -182,7 +177,7 @@ >>>>>>>>>>>+++++++++++++++++++++++++++++ // If we have a valid audio converter then use it to do the processing. Otherwise just a normal seek + read. if(audConv) - //sfCurFrame = audConv->process(f, sfCurFrame, offset + _spos, buffer, channel, n, doSeek, overwrite); + //sfCurFrame = audConv->process(f, sfCurFrame, offset + _spos, buffer, channel, n, doSeek, overwrite); DELETETHIS sfCurFrame = audConv->readAudio(f, sfCurFrame, offset, buffer, channel, n, doSeek, overwrite); else { @@ -192,10 +187,9 @@ sfCurFrame += f.read(channel, buffer, n, overwrite); } } - //return sfCurFrame; return; - /* + /* DELETETHIS 250 unsigned fsrate = f.samplerate(); int fchan = f.channels(); off_t frame = offset + _spos; @@ -451,18 +445,12 @@ #else if(f.isNull()) return; - //return sfCurFrame; - //sfCurFrame = f.seek(offset + _spos, 0); + //sfCurFrame = f.seek(offset + _spos, 0); DELETETHIS 2 //sfCurFrame += f.read(channel, buffer, n, overwrite); f.seek(offset + _spos, 0); f.read(channel, buffer, n, overwrite); - // p3.3.41 - //fprintf(stderr, "WaveEventBase::readAudio data: n:%ld %e %e %e %e\n", n, buffer[0][0], buffer[0][1], buffer[0][2], buffer[0][3]); - - - //return sfCurFrame; return; #endif diff -Nru muse-2.0~rc2/muse/waveevent.h muse-2.0/muse/waveevent.h --- muse-2.0~rc2/muse/waveevent.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/waveevent.h 2012-06-30 19:24:42.000000000 +0200 @@ -24,7 +24,6 @@ #ifndef __WAVE_EVENT_H__ #define __WAVE_EVENT_H__ -//#include #include #include "eventbase.h" @@ -45,8 +44,6 @@ int _spos; // start sample position in WaveFile bool deleted; - // p3.3.31 - //virtual EventBase* clone() { return new WaveEventBase(*this); } virtual EventBase* clone(); public: @@ -54,7 +51,6 @@ virtual ~WaveEventBase() {} virtual void read(Xml&); - //virtual void write(int, Xml&, const Pos& offset) const; virtual void write(int, Xml&, const Pos& offset, bool forcePath = false) const; virtual EventBase* mid(unsigned, unsigned); @@ -67,15 +63,8 @@ virtual SndFileR sndFile() const { return f; } virtual void setSndFile(SndFileR& sf) { f = sf; } - // Changed by Tim. p3.3.17 - //virtual void read(unsigned offset, float** bpp, int channels, int nn, bool overwrite = true); - //virtual void readAudio(unsigned /*offset*/, float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); - //virtual off_t readAudio(SRC_STATE* /*src_state*/, off_t /*sfCurFrame*/, unsigned /*offset*/, - // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); - //virtual off_t readAudio(AudioConverter* /*audConv*/, off_t /*sfCurFrame*/, unsigned /*offset*/, - // float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); - virtual void readAudio(WavePart* /*part*/, unsigned /*offset*/, - float** /*bpp*/, int /*channels*/, int /*nn*/, bool /*doSeek*/, bool /*overwrite*/); + virtual void readAudio(WavePart* part, unsigned offset, + float** bpp, int channels, int nn, bool doSeek, bool overwrite); }; } // namespace MusECore diff -Nru muse-2.0~rc2/muse/wave.h muse-2.0/muse/wave.h --- muse-2.0~rc2/muse/wave.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/wave.h 2012-06-30 19:24:43.000000000 +0200 @@ -52,7 +52,6 @@ //--------------------------------------------------------- class SndFile { - //static SndFileList _sndFiles; QFileInfo* finfo; SNDFILE* sf; SNDFILE* sfUI; @@ -125,9 +124,13 @@ SndFileR() { sf = 0; } SndFileR(SndFile* _sf); SndFileR(const SndFileR& ed); + SndFileR& operator=(SndFile* ptr); SndFileR& operator=(const SndFileR& ed); bool operator==(const SndFileR& c) const { return sf == c.sf; } bool operator==(SndFile* c) const { return sf == c; } + SndFile* operator->() { return sf; } + const SndFile* operator->() const { return sf; } + operator bool() { return sf!=NULL; } ~SndFileR(); int getRefCount() const { return sf->refCount; } bool isNull() const { return sf == 0; } @@ -182,7 +185,8 @@ class SndFileList : public std::list { public: SndFile* search(const QString& name); - void clearDelete(); + // void clearDelete(); // clearDelete MUST NOT exist! deleting is handled by the refcounting SndFileRs! + // this SndFileList is just for information, consider it as "weak pointers" }; typedef SndFileList::iterator iSndFile; @@ -242,7 +246,6 @@ bool operator==(ClipBase* c) const { return clip == c; } ~Clip(); - // ClipBase* clipBase() const { return clip; } bool isNull() const { return clip == 0; } int getRefCount() const { return clip->getRefCount(); } @@ -280,7 +283,7 @@ extern ClipBase* readClip(Xml& xml); #endif -extern SndFile* getWave(const QString& name, bool readOnlyFlag); +extern SndFileR getWave(const QString& name, bool readOnlyFlag); } // namespace MusECore diff -Nru muse-2.0~rc2/muse/wavetrack.cpp muse-2.0/muse/wavetrack.cpp --- muse-2.0~rc2/muse/wavetrack.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/wavetrack.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -41,7 +41,6 @@ // called from prefetch thread //--------------------------------------------------------- -//void WaveTrack::fetchData(unsigned pos, unsigned samples, float** bp) void WaveTrack::fetchData(unsigned pos, unsigned samples, float** bp, bool doSeek) { // Added by Tim. p3.3.17 @@ -53,7 +52,6 @@ for (int i = 0; i < channels(); ++i) memset(bp[i], 0, samples * sizeof(float)); - // p3.3.29 // Process only if track is not off. if(!off()) { @@ -62,8 +60,6 @@ unsigned n = samples; for (iPart ip = pl->begin(); ip != pl->end(); ++ip) { WavePart* part = (WavePart*)(ip->second); - // Changed by Tim. p3.3.17 - //if (part->mute() || isMute()) if (part->mute()) continue; @@ -106,12 +102,6 @@ for (int i = 0; i < channels(); ++i) bpp[i] = bp[i] + dstOffset; - // By T356. Allow overlapping parts or events to mix together ! - // Since the buffers are cleared above, just read and add (don't overwrite) the samples. - //event.read(srcOffset, bpp, channels(), nn); - //event.read(srcOffset, bpp, channels(), nn, false); - //event.readAudio(srcOffset, bpp, channels(), nn, doSeek, false); - // p3.3.33 event.readAudio(part, srcOffset, bpp, channels(), nn, doSeek, false); } @@ -122,22 +112,9 @@ // add denormal bias to outdata for (int i = 0; i < channels(); ++i) for (unsigned int j = 0; j < samples; ++j) - { bp[i][j] +=MusEGlobal::denormalBias; - - /* - // p3.3.41 - if(j & 1) - bp[i][j] -=MusEGlobal::denormalBias; - else - bp[i][j] +=MusEGlobal::denormalBias; - */ - } } - // p3.3.41 - //fprintf(stderr, "WaveTrack::fetchData data: samples:%ld %e %e %e %e\n", samples, bp[0][0], bp[0][1], bp[0][2], bp[0][3]); - _prefetchFifo.add(); } @@ -170,8 +147,6 @@ return; case Xml::TagStart: if (tag == "part") { - //Part* p = newPart(); - //p->read(xml); Part* p = 0; p = readXmlPart(xml, this); if(p) @@ -209,7 +184,6 @@ } if(clone) - //p->chainClone(part); chainClone(p, part); return part; @@ -221,22 +195,13 @@ bool WaveTrack::getData(unsigned framePos, int channels, unsigned nframe, float** bp) { - //if(MusEGlobal::debugMsg) - // printf("WaveTrack::getData framePos:%u channels:%d nframe:%u processed?:%d\n", framePos, channels, nframe, processed()); - if ((MusEGlobal::song->bounceTrack != this) && !noInRoute()) { RouteList* irl = inRoutes(); ciRoute i = irl->begin(); if(i->track->isMidiTrack()) - { - //if(MusEGlobal::debugMsg) - // printf("WaveTrack::getData: Error: First route is a midi track route!\n"); return false; - } - // p3.3.38 - //((AudioTrack*)i->track)->copyData(framePos, channels, nframe, bp); + ((AudioTrack*)i->track)->copyData(framePos, channels, - //(i->track->type() == Track::AUDIO_SOFTSYNTH && i->channel != -1) ? i->channel : 0, i->channel, i->channels, nframe, bp); @@ -245,16 +210,9 @@ for (; i != irl->end(); ++i) { if(i->track->isMidiTrack()) - { - //if(MusEGlobal::debugMsg) - // printf("WaveTrack::getData: Error: Route is a midi track route!\n"); - //return false; continue; - } - // p3.3.38 - //((AudioTrack*)i->track)->addData(framePos, channels, nframe, bp); + ((AudioTrack*)i->track)->addData(framePos, channels, - //(i->track->type() == Track::AUDIO_SOFTSYNTH && i->channel != -1) ? i->channel : 0, i->channel, i->channels, nframe, bp); @@ -265,7 +223,17 @@ if (MusEGlobal::audio->freewheel()) { } else { - if (fifo.put(channels, nframe, bp, MusEGlobal::audio->pos().frame())) +#ifdef _AUDIO_USE_TRUE_FRAME_ + // TODO: Tested: This is the line that would be needed for Audio Inputs, + // because the data arrived in the previous period! Test OK, the waves are in sync. + // So we need to do Audio Inputs separately above, AND find a way to mix two overlapping + // periods into the file! Nothing wrong with the FIFO per se, we could stamp overlapping + // times. But the soundfile just writes, does not mix. + //if (fifo.put(channels, nframe, bp, MusEGlobal::audio->previousPos().frame())) + // + // Tested: This line is OK for track-to-track recording, the waves are in sync: +#endif + if (fifo.put(channels, nframe, bp, MusEGlobal::audio->pos().frame())) printf("WaveTrack::getData(%d, %d, %d): fifo overrun\n", framePos, channels, nframe); } @@ -276,6 +244,7 @@ if (!MusEGlobal::audio->isPlaying()) return false; + // DELETETHIS 43 // Removed by T356. Multiple out route cacheing now handled by AudioTrack::copyData and ::addData. /* if (outRoutes()->size() > 1) { @@ -318,14 +287,11 @@ else { */ - //printf("WaveTrack::getData no out routes\n"); if (MusEGlobal::audio->freewheel()) { // when freewheeling, read data direct from file: // Indicate do not seek file before each read. - // Changed by Tim. p3.3.17 - //fetchData(framePos, nframe, bp); fetchData(framePos, nframe, bp, false); } @@ -348,12 +314,7 @@ } } } - - // p3.3.41 - //fprintf(stderr, "WaveTrack::getData %s data: nframe:%ld %e %e %e %e\n", name().toLatin1().constData(), nframe, bp[0][0], bp[0][1], bp[0][2], bp[0][3]); - } - //} return true; } @@ -364,7 +325,7 @@ void WaveTrack::setChannels(int n) { AudioTrack::setChannels(n); - SndFile* sf = recFile(); + SndFileR sf = recFile(); if (sf) { if (sf->samples() == 0) { sf->remove(); diff -Nru muse-2.0~rc2/muse/widgets/aboutbox.ui muse-2.0/muse/widgets/aboutbox.ui --- muse-2.0~rc2/muse/widgets/aboutbox.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/aboutbox.ui 2012-06-30 19:24:43.000000000 +0200 @@ -48,7 +48,7 @@ - Version 2 pre-alpha + Version 2 false @@ -58,7 +58,7 @@ - (C) Copyright 1999-2010 Werner Schweer and others. + (C) Copyright 1999-2012 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. diff -Nru muse-2.0~rc2/muse/widgets/appearancebase.ui muse-2.0/muse/widgets/appearancebase.ui --- muse-2.0~rc2/muse/widgets/appearancebase.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/appearancebase.ui 2012-06-30 19:24:43.000000000 +0200 @@ -1149,6 +1149,13 @@ + + + May require restarting MusE for best results + + + + Qt::Horizontal @@ -1158,7 +1165,7 @@ - 190 + 90 20 diff -Nru muse-2.0~rc2/muse/widgets/arrangercolumnsbase.ui muse-2.0/muse/widgets/arrangercolumnsbase.ui --- muse-2.0~rc2/muse/widgets/arrangercolumnsbase.ui 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/arrangercolumnsbase.ui 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,301 @@ + + + ArrangerColumnsBase + + + + 0 + 0 + 319 + 485 + + + + Configure arranger columns + + + + + + Columns: + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + + + + + Name: + + + + + + + + + + + + + + Controller type: + + + false + + + + + + + Midi controller type + + + Midi controller type + + + + Control7 + + + + + Control14 + + + + + RPN + + + + + NRPN + + + + + RPN14 + + + + + NRPN14 + + + + + Pitch + + + + + Program + + + + + + + + + + + + H-Ctrl + + + false + + + 10 + + + + + + + + 0 + 0 + + + + Midi controller number high byte + + + Midi controller number high byte + + + 0 + + + 127 + + + 0 + + + + + + + L-Ctrl + + + false + + + 10 + + + + + + + + 0 + 0 + + + + Midi controller number low byte + + + Midi controller number low byte + + + * + + + -1 + + + 127 + + + 0 + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + affect CCs at + + + + 6 + + + 0 + + + 0 + + + + + begin of song + + + true + + + + + + + current position + + + + + + + + + + + + + + + + + &Add + + + + + + + &Delete + + + + + + + Done + + + + + + + + + + + doneBtn + clicked() + ArrangerColumnsBase + accept() + + + 260 + 383 + + + 159 + 203 + + + + + diff -Nru muse-2.0~rc2/muse/widgets/arrangercolumns.cpp muse-2.0/muse/widgets/arrangercolumns.cpp --- muse-2.0~rc2/muse/widgets/arrangercolumns.cpp 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/arrangercolumns.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,188 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: arrangercolumns.cpp, flo93 $ +// +// (C) Copyright 2012 Florian Jung (florian.a.jung@web.de) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#include "arrangercolumns.h" +#include "midictrl.h" +#include "arranger.h" + +namespace MusEGui { + +ArrangerColumns::ArrangerColumns(QWidget* parent) : QDialog(parent) +{ + ignoreSomethingChanged=true; + + setupUi(this); + + initList(); + + connect(ctrlType,SIGNAL(currentIndexChanged(int)), SLOT(ctrlTypeChanged(int))); + // connect(ctrlType,SIGNAL(activated(int)), SLOT(somethingChanged())); // called by ctrlTypeChanged + connect(nameEdit,SIGNAL(textEdited(const QString&)), SLOT(somethingChanged())); + connect(spinBoxHCtrlNo,SIGNAL(valueChanged(int)), SLOT(somethingChanged())); + connect(spinBoxLCtrlNo,SIGNAL(valueChanged(int)), SLOT(somethingChanged())); + connect(affectBeginButton,SIGNAL(toggled(bool)), SLOT(somethingChanged())); + connect(affectCposButton,SIGNAL(toggled(bool)), SLOT(somethingChanged())); + connect(listWidget,SIGNAL(currentRowChanged(int)), SLOT(itemSelected(int))); + connect(addBtn,SIGNAL(clicked()), SLOT(addEntry())); + connect(delBtn,SIGNAL(clicked()), SLOT(delEntry())); + + if (listWidget->count()!=0) + listWidget->setCurrentRow(0); + else + itemSelected(-1); + + ctrlTypeChanged(ctrlType->currentIndex()); + + ignoreSomethingChanged=false; +} + +void ArrangerColumns::ctrlTypeChanged(int idx) +{ + MusECore::MidiController::ControllerType t = (MusECore::MidiController::ControllerType)idx; + + switch (t) + { + case MusECore::MidiController::Controller7: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(true); + break; + + case MusECore::MidiController::RPN: + case MusECore::MidiController::NRPN: + case MusECore::MidiController::Controller14: + case MusECore::MidiController::RPN14: + case MusECore::MidiController::NRPN14: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + break; + + default: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + break; + } + + somethingChanged(); +} + +void ArrangerColumns::somethingChanged() +{ + if (ignoreSomethingChanged) return; + + int row=listWidget->currentRow(); + if (row!=-1) + { + int hnum = spinBoxHCtrlNo->value(); + int lnum = spinBoxLCtrlNo->value(); + MusECore::MidiController::ControllerType t = (MusECore::MidiController::ControllerType)ctrlType->currentIndex(); + int ctrl_number = MusECore::MidiController::genNum(t, hnum, lnum); + + Arranger::new_custom_columns[row].name=nameEdit->text(); + Arranger::new_custom_columns[row].ctrl=ctrl_number; + Arranger::new_custom_columns[row].affected_pos=(affectBeginButton->isChecked() ? Arranger::custom_col_t::AFFECT_BEGIN : Arranger::custom_col_t::AFFECT_CPOS); + + listWidget->currentItem()->setText(getListEntryString(row)); + } +} + +QString ArrangerColumns::getListEntryString(int row) +{ + return "\""+Arranger::new_custom_columns[row].name+"\": "+MusECore::midiCtrlNumString(Arranger::new_custom_columns[row].ctrl, true); +} + +void ArrangerColumns::initList() +{ + listWidget->clear(); + + for (unsigned int i=0;iaddItem(getListEntryString(i)); +} + +void ArrangerColumns::itemSelected(int i) +{ + ignoreSomethingChanged=true; + + if (i==-1) + { + frame->setEnabled(false); + delBtn->setEnabled(false); + } + else + { + frame->setEnabled(true); + delBtn->setEnabled(true); + + nameEdit->setText(Arranger::new_custom_columns[i].name); + int num=Arranger::new_custom_columns[i].ctrl; + ctrlType->setCurrentIndex(MusECore::midiControllerType(num)); + if (spinBoxHCtrlNo->isEnabled()) + spinBoxHCtrlNo->setValue((num & 0xFF00)>>8); + else + spinBoxHCtrlNo->setValue(0); + + if (spinBoxLCtrlNo->isEnabled()) + spinBoxLCtrlNo->setValue(num & 0xFF); + else + spinBoxLCtrlNo->setValue(0); + + affectBeginButton->setChecked(Arranger::new_custom_columns[i].affected_pos == Arranger::custom_col_t::AFFECT_BEGIN); + affectCposButton->setChecked(Arranger::new_custom_columns[i].affected_pos == Arranger::custom_col_t::AFFECT_CPOS); + } + + ignoreSomethingChanged=false; +} + +void ArrangerColumns::addEntry() +{ + Arranger::new_custom_columns.push_back(Arranger::custom_col_t(0,QString("?"))); + listWidget->addItem(getListEntryString(listWidget->count())); + listWidget->setCurrentRow(listWidget->count()-1); +} + +void ArrangerColumns::delEntry() +{ + int row=listWidget->currentRow(); + + if (row!=-1) + { + std::vector::iterator it=Arranger::new_custom_columns.begin(); + advance(it, row); + Arranger::new_custom_columns.erase(it); + + initList(); + + if (listWidget->count()>0) + { + if (listWidget->count()<=row) + row=listWidget->count()-1; + + listWidget->setCurrentRow(row); + itemSelected(row); + } + else + itemSelected(-1); + } +} + +} // namespace MusEGui + diff -Nru muse-2.0~rc2/muse/widgets/arrangercolumns.cpp~ muse-2.0/muse/widgets/arrangercolumns.cpp~ --- muse-2.0~rc2/muse/widgets/arrangercolumns.cpp~ 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/arrangercolumns.cpp~ 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,360 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: arrangercolumns.cpp, flo93 $ +// +// (C) Copyright 2012 Florian Jung (florian.a.jung@web.de) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#include "arrangercolumns.h" +#include "midictrl.h" +#include "arranger.h" + +namespace MusEGui { + +ArrangerColumns::ArrangerColumns(QWidget* parent) : QDialog(parent) +{ + ignoreSomethingChanged=true; + + setupUi(this); + + initList(); + + connect(ctrlType,SIGNAL(currentIndexChanged(int)), SLOT(ctrlTypeChanged(int))); + // connect(ctrlType,SIGNAL(activated(int)), SLOT(somethingChanged())); // called by ctrlTypeChanged + connect(nameEdit,SIGNAL(textEdited(const QString&)), SLOT(somethingChanged())); + connect(spinBoxHCtrlNo,SIGNAL(valueChanged(int)), SLOT(somethingChanged())); + connect(spinBoxLCtrlNo,SIGNAL(valueChanged(int)), SLOT(somethingChanged())); + connect(affectBeginButton,SIGNAL(toggled(bool)), SLOT(somethingChanged())); + connect(affectCposButton,SIGNAL(toggled(bool)), SLOT(somethingChanged())); + connect(listWidget,SIGNAL(currentRowChanged(int)), SLOT(itemSelected(int))); + connect(addBtn,SIGNAL(clicked()), SLOT(addEntry())); + connect(delBtn,SIGNAL(clicked()), SLOT(delEntry())); + + if (listWidget->count()!=0) + listWidget->setCurrentRow(0); + else + itemSelected(-1); + + ctrlTypeChanged(ctrlType->currentIndex()); + + ignoreSomethingChanged=false; +} + +void ArrangerColumns::ctrlTypeChanged(int idx) +{ + MusECore::MidiController::ControllerType t = (MusECore::MidiController::ControllerType)idx; + + switch (t) + { + case MusECore::MidiController::Controller7: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(true); + break; + + case MusECore::MidiController::RPN: + case MusECore::MidiController::NRPN: + case MusECore::MidiController::Controller14: + case MusECore::MidiController::RPN14: + case MusECore::MidiController::NRPN14: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + break; + + default: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + break; + } + + somethingChanged(); +} + +void ArrangerColumns::somethingChanged() +{ + if (ignoreSomethingChanged) return; + + int row=listWidget->currentRow(); + if (row!=-1) + { + int hnum = spinBoxHCtrlNo->value(); + int lnum = spinBoxLCtrlNo->value(); + MusECore::MidiController::ControllerType t = (MusECore::MidiController::ControllerType)ctrlType->currentIndex(); + int ctrl_number = MusECore::MidiController::genNum(t, hnum, lnum); + + Arranger::new_custom_columns[row].name=nameEdit->text(); + Arranger::new_custom_columns[row].ctrl=ctrl_number; + Arranger::new_custom_columns[row].affected_pos=(affectBeginButton->isChecked() ? Arranger::custom_col_t::AFFECT_BEGIN : Arranger::custom_col_t::AFFECT_CPOS); + + listWidget->currentItem()->setText(getListEntryString(row)); + } +} + +QString ArrangerColumns::getListEntryString(int row) +{ + return "\""+Arranger::new_custom_columns[row].name+"\": "+MusECore::midiCtrlNumString(Arranger::new_custom_columns[row].ctrl, true); +} + +void ArrangerColumns::initList() +{ + listWidget->clear(); + + for (unsigned int i=0;iaddItem(getListEntryString(i)); +} + +void ArrangerColumns::itemSelected(int i) +{ + ignoreSomethingChanged=true; + + if (i==-1) + { + frame->setEnabled(false); + delBtn->setEnabled(false); + } + else + { + frame->setEnabled(true); + delBtn->setEnabled(true); + + nameEdit->setText(Arranger::new_custom_columns[i].name); + int num=Arranger::new_custom_columns[i].ctrl; + ctrlType->setCurrentIndex(MusECore::midiControllerType(num)); + if (spinBoxHCtrlNo->isEnabled()) + spinBoxHCtrlNo->setValue((num & 0xFF00)>>8); + else + spinBoxHCtrlNo->setValue(0); + + if (spinBoxLCtrlNo->isEnabled()) + spinBoxLCtrlNo->setValue(num & 0xFF); + else + spinBoxLCtrlNo->setValue(0); + + affectBeginButton->setChecked(Arranger::new_custom_columns[i].affected_pos == Arranger::custom_col_t::AFFECT_BEGIN); + affectCposButton->setChecked(Arranger::new_custom_columns[i].affected_pos == Arranger::custom_col_t::AFFECT_CPOS); + } + + ignoreSomethingChanged=false; +} + +void ArrangerColumns::addEntry() +{ + Arranger::new_custom_columns.push_back(Arranger::custom_col_t(0,QString("?"))); + listWidget->addItem(getListEntryString(listWidget->count())); + listWidget->setCurrentRow(listWidget->count()-1); +} + +void ArrangerColumns::delEntry() +{ + int row=listWidget->currentRow(); + + if (row!=-1) + { + std::vector::iterator it=Arranger::new_custom_columns.begin(); + advance(it, row); + Arranger::new_custom_columns.erase(it); + + initList(); + + if (listWidget->count()>0) + { + if (listWidget->count()<=row) + row=listWidget->count()-1; + + listWidget->setCurrentRow(row); + itemSelected(row); + } + else + itemSelected(-1); + } +} + +} // namespace MusEGui + +//========================================================= +// MusE +// Linux Music Editor +// $Id: arrangercolumns.cpp, flo93 $ +// +// (C) Copyright 2012 Florian Jung (florian.a.jung@web.de) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#include "arrangercolumns.h" +#include "midictrl.h" +#include "arranger.h" + +namespace MusEGui { + +ArrangerColumns::ArrangerColumns(QWidget* parent) : QDialog(parent) +{ + setupUi(this); + + initList(); + + connect(ctrlType,SIGNAL(currentIndexChanged(int)), SLOT(ctrlTypeChanged(int))); + // connect(ctrlType,SIGNAL(activated(int)), SLOT(somethingChanged())); // called by ctrlTypeChanged + connect(nameEdit,SIGNAL(textEdited(const QString&)), SLOT(somethingChanged())); + connect(spinBoxHCtrlNo,SIGNAL(valueChanged(int)), SLOT(somethingChanged())); + connect(spinBoxLCtrlNo,SIGNAL(valueChanged(int)), SLOT(somethingChanged())); + connect(listWidget,SIGNAL(currentRowChanged(int)), SLOT(itemSelected(int))); + connect(addBtn,SIGNAL(clicked()), SLOT(addEntry())); + connect(delBtn,SIGNAL(clicked()), SLOT(delEntry())); + + if (listWidget->count()!=0) + listWidget->setCurrentRow(0); + else + itemSelected(-1); + + ctrlTypeChanged(ctrlType->currentIndex()); +} + +void ArrangerColumns::ctrlTypeChanged(int idx) +{ + MusECore::MidiController::ControllerType t = (MusECore::MidiController::ControllerType)idx; + + switch (t) + { + case MusECore::MidiController::Controller7: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(true); + break; + + case MusECore::MidiController::RPN: + case MusECore::MidiController::NRPN: + case MusECore::MidiController::Controller14: + case MusECore::MidiController::RPN14: + case MusECore::MidiController::NRPN14: + spinBoxHCtrlNo->setEnabled(true); + spinBoxLCtrlNo->setEnabled(true); + break; + + default: + spinBoxHCtrlNo->setEnabled(false); + spinBoxLCtrlNo->setEnabled(false); + break; + } + + somethingChanged(); +} + +void ArrangerColumns::somethingChanged() +{ + int row=listWidget->currentRow(); + if (row!=-1) + { + int hnum = spinBoxHCtrlNo->value(); + int lnum = spinBoxLCtrlNo->value(); + MusECore::MidiController::ControllerType t = (MusECore::MidiController::ControllerType)ctrlType->currentIndex(); + int ctrl_number = MusECore::MidiController::genNum(t, hnum, lnum); + + Arranger::new_custom_columns[row].name=nameEdit->text(); + Arranger::new_custom_columns[row].ctrl=ctrl_number; + + listWidget->currentItem()->setText(getListEntryString(row)); + } +} + +QString ArrangerColumns::getListEntryString(int row) +{ + return "\""+Arranger::new_custom_columns[row].name+"\": "+MusECore::midiCtrlNumString(Arranger::new_custom_columns[row].ctrl, true); +} + +void ArrangerColumns::initList() +{ + listWidget->clear(); + + for (unsigned int i=0;iaddItem(getListEntryString(i)); +} + +void ArrangerColumns::itemSelected(int i) +{ + if (i==-1) + { + frame->setEnabled(false); + delBtn->setEnabled(false); + } + else + { + frame->setEnabled(true); + delBtn->setEnabled(true); + + nameEdit->setText(Arranger::new_custom_columns[i].name); + int num=Arranger::new_custom_columns[i].ctrl; + ctrlType->setCurrentIndex(MusECore::midiControllerType(num)); + if (spinBoxHCtrlNo->isEnabled()) + spinBoxHCtrlNo->setValue((num & 0xFF00)>>8); + else + spinBoxHCtrlNo->setValue(0); + + if (spinBoxLCtrlNo->isEnabled()) + spinBoxLCtrlNo->setValue(num & 0xFF); + else + spinBoxLCtrlNo->setValue(0); + } +} + +void ArrangerColumns::addEntry() +{ + Arranger::new_custom_columns.push_back(Arranger::custom_col_t(0,QString("?"))); + listWidget->addItem(getListEntryString(listWidget->count())); + listWidget->setCurrentRow(listWidget->count()-1); +} + +void ArrangerColumns::delEntry() +{ + int row=listWidget->currentRow(); + + if (row!=-1) + { + std::vector::iterator it=Arranger::new_custom_columns.begin(); + advance(it, row); + Arranger::new_custom_columns.erase(it); + + initList(); + + if (listWidget->count()>0) + { + if (listWidget->count()<=row) + row=listWidget->count()-1; + + listWidget->setCurrentRow(row); + itemSelected(row); + } + else + itemSelected(-1); + } +} + +} // namespace MusEGui + diff -Nru muse-2.0~rc2/muse/widgets/arrangercolumns.h muse-2.0/muse/widgets/arrangercolumns.h --- muse-2.0~rc2/muse/widgets/arrangercolumns.h 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/arrangercolumns.h 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,56 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: arrangercolumns.h, flo93 $ +// +// (C) Copyright 2012 Florian Jung (florian.a.jung@web.de) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#ifndef __ARRANGERCOLUMNS_H__ +#define __ARRANGERCOLUMNS_H__ + +#include "ui_arrangercolumnsbase.h" +#include + +namespace MusEGui { + +class ArrangerColumns : public QDialog, private Ui::ArrangerColumnsBase +{ + Q_OBJECT + + public: + ArrangerColumns(QWidget* parent); + + private slots: + void ctrlTypeChanged(int idx); + void somethingChanged(); + void initList(); + void itemSelected(int idx); + void addEntry(); + void delEntry(); + + QString getListEntryString(int idx); + + private: + bool ignoreSomethingChanged; +}; + +} // namespace MusEGui + +#endif + diff -Nru muse-2.0~rc2/muse/widgets/arrangercolumns.h~ muse-2.0/muse/widgets/arrangercolumns.h~ --- muse-2.0~rc2/muse/widgets/arrangercolumns.h~ 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/arrangercolumns.h~ 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,109 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: arrangercolumns.h, flo93 $ +// +// (C) Copyright 2012 Florian Jung (florian.a.jung@web.de) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#ifndef __ARRANGERCOLUMNS_H__ +#define __ARRANGERCOLUMNS_H__ + +#include "ui_arrangercolumnsbase.h" +#include + +namespace MusEGui { + +class ArrangerColumns : public QDialog, private Ui::ArrangerColumnsBase +{ + Q_OBJECT + + public: + ArrangerColumns(QWidget* parent); + + private slots: + void ctrlTypeChanged(int idx); + void somethingChanged(); + void initList(); + void itemSelected(int idx); + void addEntry(); + void delEntry(); + + QString getListEntryString(int idx); + + private: + bool ignoreSomethingChanged; +}; + +} // namespace MusEGui + +#endif + +//========================================================= +// MusE +// Linux Music Editor +// $Id: arrangercolumns.h, flo93 $ +// +// (C) Copyright 2012 Florian Jung (florian.a.jung@web.de) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#ifndef __ARRANGERCOLUMNS_H__ +#define __ARRANGERCOLUMNS_H__ + +#include "ui_arrangercolumnsbase.h" +#include + +namespace MusEGui { + +class ArrangerColumns : public QDialog, private Ui::ArrangerColumnsBase +{ + Q_OBJECT + + public: + ArrangerColumns(QWidget* parent); + + private slots: + void ctrlTypeChanged(int idx); + void somethingChanged(); + void initList(); + void itemSelected(int idx); + void addEntry(); + void delEntry(); + + QString getListEntryString(int idx); +}; + +} // namespace MusEGui + +#endif + diff -Nru muse-2.0~rc2/muse/widgets/bigtime.cpp muse-2.0/muse/widgets/bigtime.cpp --- muse-2.0~rc2/muse/widgets/bigtime.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/bigtime.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -32,6 +32,7 @@ #include "song.h" #include "app.h" #include "gconfig.h" +#include "audio.h" namespace MusEGlobal { extern int mtcType; @@ -229,7 +230,9 @@ return true; } - unsigned absFrame = MusEGlobal::tempomap.tick2frame(v); + // Quick fix: Not much to do but ignore the supplied tick: We need the exact frame here. + unsigned absFrame = MusEGlobal::audio->pos().frame(); + int bar, beat; unsigned tick; AL::sigmap.tickValues(v, &bar, &beat, &tick); diff -Nru muse-2.0~rc2/muse/widgets/canvas.cpp muse-2.0/muse/widgets/canvas.cpp --- muse-2.0~rc2/muse/widgets/canvas.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/canvas.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -635,6 +635,9 @@ void Canvas::viewMousePressEvent(QMouseEvent* event) { + if (!mousePress(event)) + return; + ///keyState = event->state(); keyState = ((QInputEvent*)event)->modifiers(); button = event->button(); @@ -808,7 +811,6 @@ break; } } - mousePress(event); } void Canvas::scrollTimerDone() diff -Nru muse-2.0~rc2/muse/widgets/canvas.h muse-2.0/muse/widgets/canvas.h --- muse-2.0~rc2/muse/widgets/canvas.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/canvas.h 2012-06-30 19:24:43.000000000 +0200 @@ -105,7 +105,7 @@ virtual void draw(QPainter&, const QRect&); virtual void wheelEvent(QWheelEvent* e); - virtual void mousePress(QMouseEvent*) {} + virtual bool mousePress(QMouseEvent*) { return true; } virtual void keyPress(QKeyEvent*); virtual void mouseMove(QMouseEvent* event) = 0; virtual void mouseRelease(const QPoint&) {} diff -Nru muse-2.0~rc2/muse/widgets/cliplisteditorbase.ui muse-2.0/muse/widgets/cliplisteditorbase.ui --- muse-2.0~rc2/muse/widgets/cliplisteditorbase.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/cliplisteditorbase.ui 2012-06-30 19:24:42.000000000 +0200 @@ -55,7 +55,7 @@ - Start + Samplerate true diff -Nru muse-2.0~rc2/muse/widgets/CMakeLists.txt muse-2.0/muse/widgets/CMakeLists.txt --- muse-2.0~rc2/muse/widgets/CMakeLists.txt 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/CMakeLists.txt 2012-06-30 19:24:43.000000000 +0200 @@ -32,6 +32,7 @@ ## QT4_WRAP_CPP (widget_mocs aboutbox_impl.h + arrangercolumns.h action.h bigtime.h canvas.h @@ -44,6 +45,7 @@ dentry.h didyouknow.h doublelabel.h + doublespinbox.h filedialog.h genset.h mdisettings.h @@ -55,6 +57,7 @@ menutitleitem.h meter.h metronome.h + midi_audio_control.h midisyncimpl.h mixdowndialog.h mlabel.h @@ -79,9 +82,11 @@ # sigedit.h siglabel.h sigscale.h + sig_tempo_toolbar.h slider.h sliderbase.h songinfo.h + songpos_toolbar.h spinbox.h spinboxFP.h splitter.h @@ -104,6 +109,7 @@ ## file (GLOB widgets_ui_files aboutbox.ui + arrangercolumnsbase.ui appearancebase.ui cliplisteditorbase.ui commentbase.ui @@ -117,6 +123,7 @@ itransformbase.ui metronomebase.ui midisync.ui + midi_audio_control_base.ui mittransposebase.ui mixdowndialogbase.ui mtrackinfobase.ui @@ -138,6 +145,7 @@ ## file (GLOB widgets_source_files aboutbox_impl.cpp + arrangercolumns.cpp bigtime.cpp canvas.cpp checkbox.cpp @@ -150,6 +158,7 @@ dentry.cpp dimap.cpp doublelabel.cpp + doublespinbox.cpp drange.cpp filedialog.cpp genset.cpp @@ -162,6 +171,7 @@ menutitleitem.cpp meter.cpp metronome.cpp + midi_audio_control.cpp midisyncimpl.cpp mixdowndialog.cpp mlabel.cpp @@ -190,8 +200,10 @@ # sigedit.cpp siglabel.cpp sigscale.cpp + sig_tempo_toolbar.cpp slider.cpp sliderbase.cpp + songpos_toolbar.cpp spinbox.cpp spinboxFP.cpp splitter.cpp diff -Nru muse-2.0~rc2/muse/widgets/dentry.cpp muse-2.0/muse/widgets/dentry.cpp --- muse-2.0~rc2/muse/widgets/dentry.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/dentry.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -235,6 +235,8 @@ QLineEdit::setFrame(true); update(); emit doubleClicked(_id); + if(event->modifiers() & Qt::ControlModifier) + emit ctrlDoubleClicked(_id); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/widgets/dentry.h muse-2.0/muse/widgets/dentry.h --- muse-2.0~rc2/muse/widgets/dentry.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/dentry.h 2012-06-30 19:24:43.000000000 +0200 @@ -73,6 +73,7 @@ signals: void valueChanged(double, int); void doubleClicked(int); + void ctrlDoubleClicked(int); public slots: virtual void setValue(double); diff -Nru muse-2.0~rc2/muse/widgets/didyouknow.h muse-2.0/muse/widgets/didyouknow.h --- muse-2.0~rc2/muse/widgets/didyouknow.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/didyouknow.h 2012-06-30 19:24:42.000000000 +0200 @@ -34,8 +34,35 @@ { Q_OBJECT + int currTip; public: - DidYouKnowWidget(QDialog *parent = 0) : QDialog(parent) { setupUi(this); } + QStringList tipList; + + DidYouKnowWidget(QDialog *parent = 0) : QDialog(parent) + { + setupUi(this); + tipText->setBackgroundRole(QPalette::Text); + tipText->setForegroundRole(QPalette::Foreground); + tipText->setOpenExternalLinks(true); + currTip=0; + connect(nextButton,SIGNAL(clicked()),SLOT(nextTip())); + } + + public slots: + void nextTip() + { + if (currTip > tipList.size()-1){ + currTip=0; + } + tipText->setText(tipList[currTip]); + currTip++; + } + void show() + { + nextTip(); + QDialog::show(); + } + }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/widgets/didyouknow.ui muse-2.0/muse/widgets/didyouknow.ui --- muse-2.0~rc2/muse/widgets/didyouknow.ui 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/didyouknow.ui 2012-06-30 19:24:43.000000000 +0200 @@ -6,63 +6,480 @@ 0 0 - 494 - 249 + 386 + 194 Did you know? - - - + + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 170 + 170 + 170 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 127 + 127 + 127 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 0 + 0 + 0 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 220 + + + + + + + 0 + 0 + 0 + + + + + + + + QFrame::Panel + + + QFrame::Sunken + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + + + Don't show on startup + + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 121 + 31 + + + + - - - true + + + Next tip - - - - - Don't show on startup - - - - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 121 - 31 - - - - - - - - Next tip - - - - - - - Close - - - - + + + Close + + diff -Nru muse-2.0~rc2/muse/widgets/doublelabel.h muse-2.0/muse/widgets/doublelabel.h --- muse-2.0~rc2/muse/widgets/doublelabel.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/doublelabel.h 2012-06-30 19:24:42.000000000 +0200 @@ -36,6 +36,7 @@ Q_PROPERTY( double minValue READ minValue WRITE setMinValue ) Q_PROPERTY( double maxValue READ maxValue WRITE setMaxValue ) + Q_PROPERTY( double offValue READ off WRITE setOff ) Q_PROPERTY( QString specialText READ specialText WRITE setSpecialText ) Q_PROPERTY( QString suffix READ suffix WRITE setSuffix ) Q_PROPERTY( int precision READ precision WRITE setPrecision ) diff -Nru muse-2.0~rc2/muse/widgets/doublespinbox.cpp muse-2.0/muse/widgets/doublespinbox.cpp --- muse-2.0~rc2/muse/widgets/doublespinbox.cpp 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/doublespinbox.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,102 @@ +//========================================================= +// MusE +// Linux Music Editor +// doublespinbox.cpp (C) Copyright 2012 Tim E. Real (terminator356 at users dot sourceforge dot net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#include +#include +#include +#include "doublespinbox.h" + +namespace MusEGui { + +void DoubleSpinBoxLineEdit::mouseDoubleClickEvent(QMouseEvent* e) +{ + QLineEdit::mouseDoubleClickEvent(e); + emit doubleClicked(); + if((e->buttons() & Qt::LeftButton) && (e->modifiers() & Qt::ControlModifier)) + emit ctrlDoubleClicked(); +} + +//void DoubleSpinBoxLineEdit::mousePressEvent(QMouseEvent* e) +//{ +// QLineEdit::mousePressEvent(e); + //selectAll(); +// if((e->buttons() & Qt::LeftButton) && (e->modifiers() & Qt::ControlModifier)) +// emit ctrlClicked(); +//} + +//--------------------------------------------------------- +// DoubleSpinBox +//--------------------------------------------------------- + +DoubleSpinBox::DoubleSpinBox(QWidget* parent) + : QDoubleSpinBox(parent) +{ + DoubleSpinBoxLineEdit* le = new DoubleSpinBoxLineEdit(this); + setLineEdit(le); + setKeyboardTracking(false); + + connect(le, SIGNAL(doubleClicked()), this, SIGNAL(doubleClicked())); + connect(le, SIGNAL(ctrlDoubleClicked()), this, SIGNAL(ctrlDoubleClicked())); + //connect(le, SIGNAL(ctrlClicked()), this, SIGNAL(ctrlClicked())); +} + +DoubleSpinBox::DoubleSpinBox(double minValue, double maxValue, double step, QWidget* parent) + : QDoubleSpinBox(parent) +{ + DoubleSpinBoxLineEdit* le = new DoubleSpinBoxLineEdit(this); + setLineEdit(le); + setRange(minValue, maxValue); + setSingleStep(step); + setKeyboardTracking(false); + + connect(le, SIGNAL(doubleClicked()), this, SIGNAL(doubleClicked())); + connect(le, SIGNAL(ctrlDoubleClicked()), this, SIGNAL(ctrlDoubleClicked())); + //connect(le, SIGNAL(ctrlClicked()), this, SIGNAL(ctrlClicked())); +} + +void DoubleSpinBox::keyPressEvent(QKeyEvent* ev) +{ + switch (ev->key()) { + case Qt::Key_Return: + QDoubleSpinBox::keyPressEvent(ev); + emit returnPressed(); + return; + break; + case Qt::Key_Escape: + emit escapePressed(); + return; + break; + default: + break; + } + QDoubleSpinBox::keyPressEvent(ev); +} + +void DoubleSpinBox::wheelEvent(QWheelEvent* e) +{ + QDoubleSpinBox::wheelEvent(e); + // Need this because Qt doesn't deselect the text if not focused. + if(!hasFocus() && lineEdit()) + lineEdit()->deselect(); +} + +} // namespace MusEGui + diff -Nru muse-2.0~rc2/muse/widgets/doublespinbox.h muse-2.0/muse/widgets/doublespinbox.h --- muse-2.0~rc2/muse/widgets/doublespinbox.h 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/doublespinbox.h 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,73 @@ +//========================================================= +// MusE +// Linux Music Editor +// doublespinbox.h (C) Copyright 2012 Tim E. Real (terminator356 at users dot sourceforge dot net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#ifndef __DOUBLESPINBOX_H__ +#define __DOUBLESPINBOX_H__ + +#include +#include + +namespace MusEGui { + +class DoubleSpinBoxLineEdit : public QLineEdit +{ + Q_OBJECT + + protected: + virtual void mouseDoubleClickEvent(QMouseEvent* e); + //virtual void mousePressEvent(QMouseEvent* e); + + signals: + void doubleClicked(); + void ctrlDoubleClicked(); + //void ctrlClicked(); + + public: + DoubleSpinBoxLineEdit(QWidget* parent = 0) : QLineEdit(parent) {}; +}; + +//--------------------------------------------------------- +// DoubleSpinBox +//--------------------------------------------------------- + +class DoubleSpinBox : public QDoubleSpinBox { + Q_OBJECT + + protected: + virtual void keyPressEvent(QKeyEvent*); + virtual void wheelEvent(QWheelEvent*); + + signals: + void doubleClicked(); + void ctrlDoubleClicked(); + //void ctrlClicked(); + void returnPressed(); + void escapePressed(); + + public: + DoubleSpinBox(QWidget* parent=0); + DoubleSpinBox(double minValue, double maxValue, double step = 1.0, QWidget* parent=0); +}; + +} // namespace MusEGui + +#endif + diff -Nru muse-2.0~rc2/muse/widgets/fdialogbuttons.ui muse-2.0/muse/widgets/fdialogbuttons.ui --- muse-2.0~rc2/muse/widgets/fdialogbuttons.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/fdialogbuttons.ui 2012-06-30 19:24:42.000000000 +0200 @@ -6,7 +6,7 @@ 0 0 - 150 + 154 438 @@ -140,6 +140,29 @@ true + + + + + + + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + write window +states + + + true diff -Nru muse-2.0~rc2/muse/widgets/filedialog.cpp muse-2.0/muse/widgets/filedialog.cpp --- muse-2.0~rc2/muse/widgets/filedialog.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/filedialog.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -101,12 +101,11 @@ void MFileDialog::globalToggled(bool flag) { if (flag) { - buttons.userButton->setChecked(!flag); - buttons.projectButton->setChecked(!flag); + buttons.readMidiPortsButton->setChecked(false); + readMidiPortsSaved = false; if (lastGlobalDir.isEmpty()) lastGlobalDir = MusEGlobal::museGlobalShare + QString("/") + baseDir; // Initialize if first time - QString dir = lastGlobalDir; - setDirectory(dir); + setDirectory(lastGlobalDir); lastViewUsed = GLOBAL_VIEW; } } @@ -118,10 +117,8 @@ void MFileDialog::userToggled(bool flag) { if (flag) { - buttons.globalButton->setChecked(!flag); - buttons.projectButton->setChecked(!flag); - - + buttons.readMidiPortsButton->setChecked(true); + readMidiPortsSaved = true; if (lastUserDir.isEmpty()) { //lastUserDir = MusEGlobal::museUser + QString("/") + baseDir; // Initialize if first time lastUserDir = MusEGlobal::configPath + QString("/") + baseDir; // Initialize if first time // p4.0.39 @@ -144,9 +141,8 @@ void MFileDialog::projectToggled(bool flag) { if (flag) { - buttons.globalButton->setChecked(!flag); - buttons.userButton->setChecked(!flag); - + buttons.readMidiPortsButton->setChecked(true); + readMidiPortsSaved = true; QString s; if (MusEGlobal::museProject == MusEGlobal::museProjectInitPath ) { // if project path is uninitialized, meaning it is still set to museProjectInitPath. @@ -165,6 +161,29 @@ } } +void MFileDialog::fileChanged(const QString& path) +{ + bool is_mid = path.endsWith(".mid", Qt::CaseInsensitive) || + path.endsWith(".midi", Qt::CaseInsensitive) || + path.endsWith(".kar", Qt::CaseInsensitive); + + if (is_mid) + { + readMidiPortsSaved=buttons.readMidiPortsButton->isChecked(); + buttons.readMidiPortsButton->setEnabled(false); + buttons.readMidiPortsButton->setChecked(false); + } + else + { + if (!buttons.readMidiPortsButton->isEnabled()) + { + buttons.readMidiPortsButton->setEnabled(true); + buttons.readMidiPortsButton->setChecked(readMidiPortsSaved); + } + } + +} + //--------------------------------------------------------- // MFileDialog @@ -174,6 +193,7 @@ const QString& filter, QWidget* parent, bool writeFlag) : QFileDialog(parent, QString(), QString("."), filter) { + readMidiPortsSaved = true; showButtons = false; lastUserDir = ""; lastGlobalDir = ""; @@ -204,10 +224,15 @@ buttons.projectButton->setIcon(style()->standardIcon(QStyle::SP_DirOpenIcon)); #endif + buttons.globalButton->setAutoExclusive(true); + buttons.userButton->setAutoExclusive(true); + buttons.projectButton->setAutoExclusive(true); + connect(buttons.globalButton, SIGNAL(toggled(bool)), this, SLOT(globalToggled(bool))); connect(buttons.userButton, SIGNAL(toggled(bool)), this, SLOT(userToggled(bool))); connect(buttons.projectButton, SIGNAL(toggled(bool)), this, SLOT(projectToggled(bool))); connect(this, SIGNAL(directoryEntered(const QString&)), SLOT(directoryChanged(const QString&))); + connect(this, SIGNAL(currentChanged(const QString&)), SLOT(fileChanged(const QString&))); if (writeFlag) { setAcceptMode(QFileDialog::AcceptSave); @@ -215,31 +240,32 @@ switch (lastViewUsed) { case GLOBAL_VIEW: case PROJECT_VIEW: - buttons.projectButton->setChecked(true); + buttons.globalButton->setChecked(true); // Let toggled be called. Don't block these... break; case USER_VIEW: - buttons.userButton->setChecked(true); + buttons.userButton->setChecked(true); break; } } else { switch (lastViewUsed) { case GLOBAL_VIEW: - buttons.globalButton->setChecked(true); + buttons.globalButton->setChecked(true); break; case PROJECT_VIEW: - buttons.projectButton->setChecked(true); + buttons.projectButton->setChecked(true); break; case USER_VIEW: - buttons.userButton->setChecked(true); + buttons.userButton->setChecked(true); break; } } buttons.readMidiPortsGroup->setVisible(false); + buttons.writeWinStateGroup->setVisible(false); } } @@ -280,21 +306,19 @@ { QStringList filters = localizedStringListFromCharArray(filters_chararray, "file_patterns"); - QString initialSelection; // FIXME Tim. MFileDialog *dlg = new MFileDialog(startWith, QString::null, parent, false); dlg->setNameFilters(filters); dlg->setWindowTitle(name); + if (doReadMidiPorts) + dlg->buttons.readMidiPortsGroup->setVisible(true); + // Allow overrides. FIXME - some redundancy in MFileDialog ctor. Make this better. if (viewType == MFileDialog::GLOBAL_VIEW) - dlg->globalToggled(true); + dlg->buttons.globalButton->setChecked(true); // Let toggled be called. Don't block these... else if (viewType == MFileDialog::PROJECT_VIEW) - dlg->projectToggled(true); + dlg->buttons.projectButton->setChecked(true); else if (viewType == MFileDialog::USER_VIEW) - dlg->userToggled(true); - if (doReadMidiPorts) - dlg->buttons.readMidiPortsGroup->setVisible(true); + dlg->buttons.userButton->setChecked(true); - if (!initialSelection.isEmpty()) - dlg->selectFile(initialSelection); dlg->setFileMode(QFileDialog::ExistingFile); QStringList files; QString result; @@ -314,7 +338,7 @@ //--------------------------------------------------------- QString getSaveFileName(const QString &startWith, - const char** filters_chararray, QWidget* parent, const QString& name) + const char** filters_chararray, QWidget* parent, const QString& name, bool* writeWinState) { QStringList filters = localizedStringListFromCharArray(filters_chararray, "file_patterns"); @@ -322,12 +346,20 @@ dlg->setNameFilters(filters); dlg->setWindowTitle(name); dlg->setFileMode(QFileDialog::AnyFile); + if (writeWinState) + { + dlg->buttons.writeWinStateGroup->setVisible(true); + dlg->buttons.writeWinStateButton->setChecked(*writeWinState); + } + QStringList files; QString result; if (dlg->exec() == QDialog::Accepted) { files = dlg->selectedFiles(); if (!files.isEmpty()) result = files[0]; + if (writeWinState) + *writeWinState = dlg->buttons.writeWinStateButton->isChecked(); } // Added by T356. @@ -487,10 +519,10 @@ zip += QString(" > \""); //zip += name; zip = zip + name + QString("\""); // p4.0.40 - fp = popen(zip.toAscii().data(), mode); + fp = popen(zip.toLocal8Bit().data(), mode); } else { - fp = fopen(name.toAscii().data(), mode); + fp = fopen(name.toLocal8Bit().data(), mode); } if (fp == 0 && !noError) { QString s(QWidget::tr("Open File\n%1\nfailed: %2").arg(name).arg(strerror(errno))); diff -Nru muse-2.0~rc2/muse/widgets/filedialog.h muse-2.0/muse/widgets/filedialog.h --- muse-2.0~rc2/muse/widgets/filedialog.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/filedialog.h 2012-06-30 19:24:42.000000000 +0200 @@ -52,9 +52,12 @@ QString lastUserDir, lastGlobalDir; bool showButtons; QString baseDir; + + bool readMidiPortsSaved; private slots: void directoryChanged(const QString& directory); + void fileChanged(const QString&); public slots: void globalToggled(bool); void userToggled(bool); @@ -91,7 +94,7 @@ */ QString getSaveFileName(const QString& startWidth, const char** filters, - QWidget* parent, const QString& name); + QWidget* parent, const QString& name, bool* writeWinState=NULL); QString getOpenFileName(const QString& startWidth, const char** filters, QWidget* parent, const QString& name, bool* doReadMidiPorts, MFileDialog::ViewType viewType = MFileDialog::PROJECT_VIEW); QString getImageFileName(const QString& startWith, const char** filters, diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/crescendo.cpp muse-2.0/muse/widgets/function_dialogs/crescendo.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/crescendo.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/crescendo.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,11 @@ namespace MusEGui { +int Crescendo::range = 3; +int Crescendo::start_val = 80; +int Crescendo::end_val = 130; +bool Crescendo::absolute = 0; + Crescendo::Crescendo(QWidget* parent) : QDialog(parent) { @@ -35,8 +40,6 @@ range_group->addButton(selected_looped_button,3); connect(absolute_button, SIGNAL(toggled(bool)), SLOT(absolute_changed(bool))); - - pull_values(); } void Crescendo::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/crescendo.h muse-2.0/muse/widgets/function_dialogs/crescendo.h --- muse-2.0~rc2/muse/widgets/function_dialogs/crescendo.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/crescendo.h 2012-06-30 19:24:42.000000000 +0200 @@ -47,12 +47,12 @@ public: Crescendo(QWidget* parent = 0); - int range; - int start_val; - int end_val; - bool absolute; + static int range; + static int start_val; + static int end_val; + static bool absolute; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/deloverlaps.cpp muse-2.0/muse/widgets/function_dialogs/deloverlaps.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/deloverlaps.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/deloverlaps.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,8 @@ namespace MusEGui { +int DelOverlaps::range = 1; + DelOverlaps::DelOverlaps(QWidget* parent) : QDialog(parent) { @@ -35,8 +37,6 @@ range_group->addButton(selected_events_button,1); range_group->addButton(looped_events_button,2); range_group->addButton(selected_looped_button,3); - - pull_values(); } void DelOverlaps::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/deloverlaps.h muse-2.0/muse/widgets/function_dialogs/deloverlaps.h --- muse-2.0~rc2/muse/widgets/function_dialogs/deloverlaps.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/deloverlaps.h 2012-06-30 19:24:42.000000000 +0200 @@ -47,9 +47,9 @@ public: DelOverlaps(QWidget* parent = 0); - int range; + static int range; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); public slots: diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/gatetime.cpp muse-2.0/muse/widgets/function_dialogs/gatetime.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/gatetime.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/gatetime.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -30,6 +30,10 @@ namespace MusEGui { +int GateTime::range = 1; +int GateTime::rateVal = 100; +int GateTime::offsetVal = 0; + //--------------------------------------------------------- // GateTime //--------------------------------------------------------- @@ -44,8 +48,6 @@ rangeGroup->addButton(loopButton, 2); rangeGroup->addButton(sloopButton, 3); rangeGroup->setExclusive(true); - - pullValues(); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/gatetime.h muse-2.0/muse/widgets/function_dialogs/gatetime.h --- muse-2.0~rc2/muse/widgets/function_dialogs/gatetime.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/gatetime.h 2012-06-30 19:24:42.000000000 +0200 @@ -50,11 +50,11 @@ public: GateTime(QWidget* parent=0); - int range; - int rateVal; - int offsetVal; + static int range; + static int rateVal; + static int offsetVal; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/legato.cpp muse-2.0/muse/widgets/function_dialogs/legato.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/legato.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/legato.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,10 @@ namespace MusEGui { +int Legato::range = 1; +int Legato::min_len = 0; +bool Legato::allow_shortening = 0; + Legato::Legato(QWidget* parent) : QDialog(parent) { @@ -35,8 +39,6 @@ range_group->addButton(selected_events_button,1); range_group->addButton(looped_events_button,2); range_group->addButton(selected_looped_button,3); - - pull_values(); } void Legato::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/legato.h muse-2.0/muse/widgets/function_dialogs/legato.h --- muse-2.0~rc2/muse/widgets/function_dialogs/legato.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/legato.h 2012-06-30 19:24:42.000000000 +0200 @@ -47,11 +47,11 @@ public: Legato(QWidget* parent = 0); - int range; - int min_len; - bool allow_shortening; + static int range; + static int min_len; + static bool allow_shortening; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/move.cpp muse-2.0/muse/widgets/function_dialogs/move.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/move.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/move.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,9 @@ namespace MusEGui { +int Move::range = 1; +int Move::amount = 0; + Move::Move(QWidget* parent) : QDialog(parent) { @@ -35,8 +38,6 @@ range_group->addButton(selected_events_button,1); range_group->addButton(looped_events_button,2); range_group->addButton(selected_looped_button,3); - - pull_values(); } void Move::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/move.h muse-2.0/muse/widgets/function_dialogs/move.h --- muse-2.0~rc2/muse/widgets/function_dialogs/move.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/move.h 2012-06-30 19:24:42.000000000 +0200 @@ -47,10 +47,10 @@ public: Move(QWidget* parent = 0); - int range; - int amount; + static int range; + static int amount; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/quantize.cpp muse-2.0/muse/widgets/function_dialogs/quantize.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/quantize.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/quantize.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,14 @@ namespace MusEGui { +int Quantize::range = 1; +int Quantize::strength = 90; +int Quantize::threshold = 0; +int Quantize::raster_index = 3; +int Quantize::swing = 0; +bool Quantize::quant_len = 1; + + int rasterVals[] = { 1, // Whole note divisor 2, // Half note divisor @@ -49,8 +57,6 @@ range_group->addButton(selected_events_button,1); range_group->addButton(looped_events_button,2); range_group->addButton(selected_looped_button,3); - - pull_values(); } void Quantize::pull_values() @@ -58,7 +64,7 @@ range = range_group->checkedId(); strength = strength_spinbox->value(); threshold = threshold_spinbox->value(); - raster_index = raster_combobox->currentIndex(); + raster_index = raster_combobox->currentIndex(); quant_len = len_checkbox->isChecked(); swing = swing_spinbox->value(); } @@ -102,7 +108,7 @@ else if (tag == "threshold") threshold=xml.parseInt(); else if (tag == "raster") - raster_index=xml.parseInt(); + raster_index=xml.parseInt(); else if (tag == "swing") swing=xml.parseInt(); else if (tag == "quant_len") diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/quantize.h muse-2.0/muse/widgets/function_dialogs/quantize.h --- muse-2.0~rc2/muse/widgets/function_dialogs/quantize.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/quantize.h 2012-06-30 19:24:42.000000000 +0200 @@ -48,14 +48,14 @@ public: Quantize(QWidget* parent = 0); - int range; - int strength; - int threshold; - int raster_index; - int swing; - bool quant_len; + static int range; + static int strength; + static int threshold; + static int raster_index; + static int swing; + static bool quant_len; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); public slots: diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/remove.cpp muse-2.0/muse/widgets/function_dialogs/remove.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/remove.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/remove.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,13 @@ namespace MusEGui { +int Remove::range = 1; +int Remove::velo_threshold = 16; +bool Remove::velo_thres_used = 0; +int Remove::len_threshold = 12; +bool Remove::len_thres_used = 0; + + Remove::Remove(QWidget* parent) : QDialog(parent) { @@ -35,8 +42,6 @@ range_group->addButton(selected_events_button,1); range_group->addButton(looped_events_button,2); range_group->addButton(selected_looped_button,3); - - pull_values(); } void Remove::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/remove.h muse-2.0/muse/widgets/function_dialogs/remove.h --- muse-2.0~rc2/muse/widgets/function_dialogs/remove.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/remove.h 2012-06-30 19:24:42.000000000 +0200 @@ -47,13 +47,13 @@ public: Remove(QWidget* parent = 0); - int range; - int velo_threshold; - bool velo_thres_used; - int len_threshold; - bool len_thres_used; + static int range; + static int velo_threshold; + static bool velo_thres_used; + static int len_threshold; + static bool len_thres_used; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/setlen.cpp muse-2.0/muse/widgets/function_dialogs/setlen.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/setlen.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/setlen.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,9 @@ namespace MusEGui { +int Setlen::range = 1; +int Setlen::len = 384; + Setlen::Setlen(QWidget* parent) : QDialog(parent) { @@ -35,8 +38,6 @@ range_group->addButton(selected_events_button,1); range_group->addButton(looped_events_button,2); range_group->addButton(selected_looped_button,3); - - pull_values(); } void Setlen::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/setlen.h muse-2.0/muse/widgets/function_dialogs/setlen.h --- muse-2.0~rc2/muse/widgets/function_dialogs/setlen.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/setlen.h 2012-06-30 19:24:42.000000000 +0200 @@ -47,10 +47,10 @@ public: Setlen(QWidget* parent = 0); - int range; - int len; + static int range; + static int len; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/transpose.cpp muse-2.0/muse/widgets/function_dialogs/transpose.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/transpose.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/transpose.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,9 @@ namespace MusEGui { +int Transpose::range = 1; +int Transpose::amount = 0; + Transpose::Transpose(QWidget* parent) : QDialog(parent) { @@ -35,8 +38,6 @@ range_group->addButton(selected_events_button,1); range_group->addButton(looped_events_button,2); range_group->addButton(selected_looped_button,3); - - pull_values(); } void Transpose::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/transpose.h muse-2.0/muse/widgets/function_dialogs/transpose.h --- muse-2.0~rc2/muse/widgets/function_dialogs/transpose.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/transpose.h 2012-06-30 19:24:42.000000000 +0200 @@ -45,10 +45,10 @@ public: Transpose(QWidget* parent = 0); - int range; - int amount; + static int range; + static int amount; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/velocity.cpp muse-2.0/muse/widgets/function_dialogs/velocity.cpp --- muse-2.0~rc2/muse/widgets/function_dialogs/velocity.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/velocity.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -26,6 +26,10 @@ namespace MusEGui { +int Velocity::range = 1; +int Velocity::rateVal = 100; +int Velocity::offsetVal = 0; + //--------------------------------------------------------- // Velocity //--------------------------------------------------------- @@ -39,8 +43,6 @@ rangeGroup->addButton(selectedEvents,1); rangeGroup->addButton(loopedEvents,2); rangeGroup->addButton(selectedLooped,3); - - pullValues(); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/widgets/function_dialogs/velocity.h muse-2.0/muse/widgets/function_dialogs/velocity.h --- muse-2.0~rc2/muse/widgets/function_dialogs/velocity.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/function_dialogs/velocity.h 2012-06-30 19:24:42.000000000 +0200 @@ -50,11 +50,11 @@ public: Velocity(QWidget* parent = 0); - int range; - int rateVal; - int offsetVal; + static int range; + static int rateVal; + static int offsetVal; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/gensetbase.ui muse-2.0/muse/widgets/gensetbase.ui --- muse-2.0~rc2/muse/widgets/gensetbase.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/gensetbase.ui 2012-06-30 19:24:43.000000000 +0200 @@ -6,8 +6,8 @@ 0 0 - 556 - 527 + 525 + 549 @@ -36,6 +36,9 @@ Project directory + + -1 + @@ -450,45 +453,39 @@ - - - - Qt::Vertical - - - QSizePolicy::Expanding - - - - 20 - 51 - - - - - + - - - start song: + + + + + + Choose start song or template - - false + + ... - + + + Reset to default + + + ... + + - + Start song - + @@ -508,7 +505,7 @@ - start with template: default.med + start with template false @@ -525,12 +522,12 @@ - + On Launch - + @@ -548,18 +545,26 @@ - - - - Qt::Vertical + + + + Start template or song: - - - 20 - 40 - + + false + + + + + + + Read MIDI Ports configuration from file, + or else automatically configure - + + Read MIDI Ports configuration + + @@ -1411,19 +1416,6 @@ - - - - Qt::Vertical - - - - 20 - 40 - - - - @@ -1452,6 +1444,49 @@ + + + + Smart focus + + + false + + + + + + + + 0 + 0 + + + + Smart focus + + + After editing, controls will return + focus to their respective canvas + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + @@ -1513,8 +1548,8 @@ 0 0 - 512 - 378 + 481 + 386 @@ -1533,6 +1568,22 @@ + + + Qt::Vertical + + + QSizePolicy::Expanding + + + + 20 + 51 + + + + + diff -Nru muse-2.0~rc2/muse/widgets/genset.cpp muse-2.0/muse/widgets/genset.cpp --- muse-2.0~rc2/muse/widgets/genset.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/genset.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -37,6 +37,7 @@ #include "globals.h" #include "icons.h" #include "helper.h" +#include "filedialog.h" namespace MusEGui { @@ -65,121 +66,16 @@ startSongGroup->addButton(startLastButton, 0); startSongGroup->addButton(startEmptyButton, 1); startSongGroup->addButton(startSongButton, 2); - for (unsigned i = 0; i < sizeof(rtcResolutions)/sizeof(*rtcResolutions); ++i) { - if (rtcResolutions[i] == MusEGlobal::config.rtcTicks) { - rtcResolutionSelect->setCurrentIndex(i); - break; - } - } - for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) { - if (divisions[i] == MusEGlobal::config.division) { - midiDivisionSelect->setCurrentIndex(i); - break; - } - } - for (unsigned i = 0; i < sizeof(divisions)/sizeof(*divisions); ++i) { - if (divisions[i] == MusEGlobal::config.guiDivision) { - guiDivisionSelect->setCurrentIndex(i); - break; - } - } - for (unsigned i = 0; i < sizeof(dummyAudioBufSizes)/sizeof(*dummyAudioBufSizes); ++i) { - if (dummyAudioBufSizes[i] == MusEGlobal::config.dummyAudioBufSize) { - dummyAudioSize->setCurrentIndex(i); - break; - } - } - - for (unsigned i = 0; i < sizeof(minControlProcessPeriods)/sizeof(*minControlProcessPeriods); ++i) { - if (minControlProcessPeriods[i] == MusEGlobal::config.minControlProcessPeriod) { - minControlProcessPeriodComboBox->setCurrentIndex(i); - break; - } - } - - guiRefreshSelect->setValue(MusEGlobal::config.guiRefresh); - minSliderSelect->setValue(int(MusEGlobal::config.minSlider)); - minMeterSelect->setValue(MusEGlobal::config.minMeter); - freewheelCheckBox->setChecked(MusEGlobal::config.freewheelMode); - denormalCheckBox->setChecked(MusEGlobal::config.useDenormalBias); - outputLimiterCheckBox->setChecked(MusEGlobal::config.useOutputLimiter); - vstInPlaceCheckBox->setChecked(MusEGlobal::config.vstInPlace); - dummyAudioRate->setValue(MusEGlobal::config.dummyAudioSampleRate); - - //DummyAudioDevice* dad = dynamic_cast(audioDevice); - //dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---"); - //dummyAudioRealRate->setText(QString().setNum(sampleRate)); // Not used any more. p4.0.20 - // Just a record of what the gensetbase.ui file contained for dummyAudioRate whats this: - /* - Actual rate used depends on limitations of - timer used. If a high rate timer is available, - short periods can be used with high sample rates. -Period affects midi playback resolution. -Shorter periods are desirable. - */ - - projDirEntry->setText(MusEGlobal::config.projectBaseFolder); - projDirOpenToolButton->setIcon(*openIcon); - - startSongEntry->setText(MusEGlobal::config.startSong); - startSongGroup->button(MusEGlobal::config.startMode)->setChecked(true); - - showTransport->setChecked(MusEGlobal::config.transportVisible); - showBigtime->setChecked(MusEGlobal::config.bigTimeVisible); - //showMixer->setChecked(MusEGlobal::config.mixerVisible); - showMixer->setChecked(MusEGlobal::config.mixer1Visible); - showMixer2->setChecked(MusEGlobal::config.mixer2Visible); - mainX->setValue(MusEGlobal::config.geometryMain.x()); - mainY->setValue(MusEGlobal::config.geometryMain.y()); - mainW->setValue(MusEGlobal::config.geometryMain.width()); - mainH->setValue(MusEGlobal::config.geometryMain.height()); - - transportX->setValue(MusEGlobal::config.geometryTransport.x()); - transportY->setValue(MusEGlobal::config.geometryTransport.y()); - - bigtimeX->setValue(MusEGlobal::config.geometryBigTime.x()); - bigtimeY->setValue(MusEGlobal::config.geometryBigTime.y()); - bigtimeW->setValue(MusEGlobal::config.geometryBigTime.width()); - bigtimeH->setValue(MusEGlobal::config.geometryBigTime.height()); - - //mixerX->setValue(MusEGlobal::config.geometryMixer.x()); - //mixerY->setValue(MusEGlobal::config.geometryMixer.y()); - //mixerW->setValue(MusEGlobal::config.geometryMixer.width()); - //mixerH->setValue(MusEGlobal::config.geometryMixer.height()); - mixerX->setValue(MusEGlobal::config.mixer1.geometry.x()); - mixerY->setValue(MusEGlobal::config.mixer1.geometry.y()); - mixerW->setValue(MusEGlobal::config.mixer1.geometry.width()); - mixerH->setValue(MusEGlobal::config.mixer1.geometry.height()); - mixer2X->setValue(MusEGlobal::config.mixer2.geometry.x()); - mixer2Y->setValue(MusEGlobal::config.mixer2.geometry.y()); - mixer2W->setValue(MusEGlobal::config.mixer2.geometry.width()); - mixer2H->setValue(MusEGlobal::config.mixer2.geometry.height()); - - //setMixerCurrent->setEnabled(MusEGlobal::muse->mixerWindow()); - setMixerCurrent->setEnabled(MusEGlobal::muse->mixer1Window()); - setMixer2Current->setEnabled(MusEGlobal::muse->mixer2Window()); - - setBigtimeCurrent->setEnabled(MusEGlobal::muse->bigtimeWindow()); - setTransportCurrent->setEnabled(MusEGlobal::muse->transportWindow()); - - showSplash->setChecked(MusEGlobal::config.showSplashScreen); - showDidYouKnow->setChecked(MusEGlobal::config.showDidYouKnow); - externalWavEditorSelect->setText(MusEGlobal::config.externalWavEditor); - oldStyleStopCheckBox->setChecked(MusEGlobal::config.useOldStyleStopShortCut); - moveArmedCheckBox->setChecked(MusEGlobal::config.moveArmedCheckBox); - projectSaveCheckBox->setChecked(MusEGlobal::config.useProjectSaveDialog); - popsDefStayOpenCheckBox->setChecked(MusEGlobal::config.popupsDefaultStayOpen); - lmbDecreasesCheckBox->setChecked(MusEGlobal::config.leftMouseButtonCanDecrease); - rangeMarkerWithoutMMBCheckBox->setChecked(MusEGlobal::config.rangeMarkerWithoutMMB); - - addHiddenCheckBox->setChecked(MusEGlobal::config.addHiddenTracks); - unhideTracksCheckBox->setChecked(MusEGlobal::config.unhideTracks); - - //updateSettings(); // TESTING + updateSettings(); + projDirOpenToolButton->setIcon(*openIcon); // FINDMICH connect(projDirOpenToolButton, SIGNAL(clicked()), SLOT(browseProjDir())); - + startSongFileOpenToolButton->setIcon(*openIcon); + connect(startSongFileOpenToolButton, SIGNAL(clicked()), SLOT(browseStartSongFile())); + startSongResetToolButton->setIcon(*undoIcon); + connect(startSongResetToolButton, SIGNAL(clicked()), SLOT(startSongReset())); + connect(applyButton, SIGNAL(clicked()), SLOT(apply())); connect(okButton, SIGNAL(clicked()), SLOT(ok())); connect(cancelButton, SIGNAL(clicked()), SLOT(cancel())); @@ -262,16 +158,16 @@ //DummyAudioDevice* dad = dynamic_cast(audioDevice); //dummyAudioRealRate->setText(dad ? QString().setNum(sampleRate) : "---"); - //dummyAudioRealRate->setText(QString().setNum(sampleRate)); // Not used any more. p4.0.20 + //dummyAudioRealRate->setText(QString().setNum(sampleRate)); // Not used any more. p4.0.20 DELETETHIS? projDirEntry->setText(MusEGlobal::config.projectBaseFolder); startSongEntry->setText(MusEGlobal::config.startSong); startSongGroup->button(MusEGlobal::config.startMode)->setChecked(true); - + readMidiConfigFromSongCheckBox->setChecked(MusEGlobal::config.startSongLoadConfig); + showTransport->setChecked(MusEGlobal::config.transportVisible); showBigtime->setChecked(MusEGlobal::config.bigTimeVisible); - //showMixer->setChecked(MusEGlobal::config.mixerVisible); showMixer->setChecked(MusEGlobal::config.mixer1Visible); showMixer2->setChecked(MusEGlobal::config.mixer2Visible); @@ -288,10 +184,6 @@ bigtimeW->setValue(MusEGlobal::config.geometryBigTime.width()); bigtimeH->setValue(MusEGlobal::config.geometryBigTime.height()); - //mixerX->setValue(MusEGlobal::config.geometryMixer.x()); - //mixerY->setValue(MusEGlobal::config.geometryMixer.y()); - //mixerW->setValue(MusEGlobal::config.geometryMixer.width()); - //mixerH->setValue(MusEGlobal::config.geometryMixer.height()); mixerX->setValue(MusEGlobal::config.mixer1.geometry.x()); mixerY->setValue(MusEGlobal::config.mixer1.geometry.y()); mixerW->setValue(MusEGlobal::config.mixer1.geometry.width()); @@ -301,7 +193,6 @@ mixer2W->setValue(MusEGlobal::config.mixer2.geometry.width()); mixer2H->setValue(MusEGlobal::config.mixer2.geometry.height()); - //setMixerCurrent->setEnabled(MusEGlobal::muse->mixerWindow()); setMixerCurrent->setEnabled(MusEGlobal::muse->mixer1Window()); setMixer2Current->setEnabled(MusEGlobal::muse->mixer2Window()); @@ -317,6 +208,7 @@ popsDefStayOpenCheckBox->setChecked(MusEGlobal::config.popupsDefaultStayOpen); lmbDecreasesCheckBox->setChecked(MusEGlobal::config.leftMouseButtonCanDecrease); rangeMarkerWithoutMMBCheckBox->setChecked(MusEGlobal::config.rangeMarkerWithoutMMB); + smartFocusCheckBox->setChecked(MusEGlobal::config.smartFocus); addHiddenCheckBox->setChecked(MusEGlobal::config.addHiddenTracks); unhideTracksCheckBox->setChecked(MusEGlobal::config.unhideTracks); @@ -343,7 +235,7 @@ void GlobalSettingsConfig::showEvent(QShowEvent* e) { QDialog::showEvent(e); - //updateSettings(); // TESTING + updateSettings(); } //--------------------------------------------------------- @@ -366,6 +258,8 @@ MusEGlobal::config.startSong = startSongEntry->text(); MusEGlobal::config.startMode = startSongGroup->checkedId(); + MusEGlobal::config.startSongLoadConfig = readMidiConfigFromSongCheckBox->isChecked(); + int das = dummyAudioSize->currentIndex(); MusEGlobal::config.dummyAudioBufSize = dummyAudioBufSizes[das]; MusEGlobal::config.dummyAudioSampleRate = dummyAudioRate->value(); @@ -379,7 +273,6 @@ MusEGlobal::config.transportVisible = showTransport->isChecked(); MusEGlobal::config.bigTimeVisible = showBigtime->isChecked(); - //MusEGlobal::config.mixerVisible = showMixer->isChecked(); MusEGlobal::config.mixer1Visible = showMixer->isChecked(); MusEGlobal::config.mixer2Visible = showMixer2->isChecked(); @@ -398,10 +291,6 @@ MusEGlobal::config.geometryBigTime.setWidth(bigtimeW->value()); MusEGlobal::config.geometryBigTime.setHeight(bigtimeH->value()); - //MusEGlobal::config.geometryMixer.setX(mixerX->value()); - //MusEGlobal::config.geometryMixer.setY(mixerY->value()); - //MusEGlobal::config.geometryMixer.setWidth(mixerW->value()); - //MusEGlobal::config.geometryMixer.setHeight(mixerH->value()); MusEGlobal::config.mixer1.geometry.setX(mixerX->value()); MusEGlobal::config.mixer1.geometry.setY(mixerY->value()); MusEGlobal::config.mixer1.geometry.setWidth(mixerW->value()); @@ -420,11 +309,11 @@ MusEGlobal::config.popupsDefaultStayOpen = popsDefStayOpenCheckBox->isChecked(); MusEGlobal::config.leftMouseButtonCanDecrease = lmbDecreasesCheckBox->isChecked(); MusEGlobal::config.rangeMarkerWithoutMMB = rangeMarkerWithoutMMBCheckBox->isChecked(); + MusEGlobal::config.smartFocus = smartFocusCheckBox->isChecked(); MusEGlobal::config.addHiddenTracks = addHiddenCheckBox->isChecked(); MusEGlobal::config.unhideTracks = unhideTracksCheckBox->isChecked(); - //MusEGlobal::muse->showMixer(MusEGlobal::config.mixerVisible); MusEGlobal::muse->showMixer1(MusEGlobal::config.mixer1Visible); MusEGlobal::muse->showMixer2(MusEGlobal::config.mixer2Visible); @@ -435,11 +324,6 @@ w->resize(MusEGlobal::config.geometryTransport.size()); w->move(MusEGlobal::config.geometryTransport.topLeft()); } - //w = MusEGlobal::muse->mixerWindow(); - //if (w) { - // w->resize(MusEGlobal::config.geometryMixer.size()); - // w->move(MusEGlobal::config.geometryMixer.topLeft()); - // } w = MusEGlobal::muse->mixer1Window(); if (w) { w->resize(MusEGlobal::config.mixer1.geometry.size()); @@ -604,5 +488,24 @@ projDirEntry->setText(dir); } +void GlobalSettingsConfig::browseStartSongFile() +{ + bool doReadMidiPorts; + QString sstr = startSongGroup->button(1)->isChecked() ? QString("templates") : QString(""); + + QString fn = MusEGui::getOpenFileName(sstr, MusEGlobal::med_file_pattern, this, + tr("MusE: Choose start template or song"), &doReadMidiPorts, MusEGui::MFileDialog::GLOBAL_VIEW); + if (!fn.isEmpty()) { + startSongEntry->setText(fn); + readMidiConfigFromSongCheckBox->setChecked(doReadMidiPorts); + } +} + +void GlobalSettingsConfig::startSongReset() +{ + startSongEntry->setText(MusEGlobal::museGlobalShare + QString("/templates/default.med")); + readMidiConfigFromSongCheckBox->setChecked(false); +} + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/widgets/genset.h muse-2.0/muse/widgets/genset.h --- muse-2.0~rc2/muse/widgets/genset.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/genset.h 2012-06-30 19:24:43.000000000 +0200 @@ -55,6 +55,8 @@ void mainCurrent(); void transportCurrent(); void browseProjDir(); + void browseStartSongFile(); + void startSongReset(); void traditionalPreset(); void mdiPreset(); void borlandPreset(); diff -Nru muse-2.0~rc2/muse/widgets/header.cpp muse-2.0/muse/widgets/header.cpp --- muse-2.0~rc2/muse/widgets/header.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/header.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -36,7 +36,6 @@ void Header::readStatus(MusECore::Xml& xml) { - for (;;) { MusECore::Xml::Token token = xml.parse(); const QString& tag = xml.s1(); @@ -45,36 +44,7 @@ case MusECore::Xml::End: return; case MusECore::Xml::Text: - { - QStringList l = tag.split(QString(" "), QString::SkipEmptyParts); - int index = count() -1; - for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) { - int logialIdx=abs((*it).toInt()); - bool isHidden = (*it).toInt() < 0 ? true:false; - int section = visualIndex(logialIdx - (isHidden? 1:0)); - moveSection(section, index); - if (isHidden) - hideSection(logialIdx-1); - else - showSection(logialIdx); - --index; - } - - // loop again looking for missing indexes - for (int i =0; i < count(); i++) { - bool foundIt=false; - for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) { - int id=((*it).toInt()); - if ( id == i || i == -1 - id ) - foundIt=true; - } - if (foundIt == false) { - int section = visualIndex(i); - moveSection(section, i); - //printf("Adding missing i %d index %d section %d!\n", i, index, section); - } - } - } + restoreState(QByteArray::fromHex(tag.toAscii())); break; case MusECore::Xml::TagStart: xml.unknown("Header"); @@ -94,16 +64,8 @@ void Header::writeStatus(int level, MusECore::Xml& xml) const { - //xml.nput(level, "<%s> ", name()); xml.nput(level, "<%s> ", MusECore::Xml::xmlString(objectName()).toLatin1().constData()); - int n = count(); - for (int i = n-1; i >= 0; --i) { - if (isSectionHidden(logicalIndex(i))) - xml.nput("%d ", -logicalIndex(i)-1); // hidden is stored as negative value starting from -1 - else - xml.nput("%d ", logicalIndex(i)); - } - //xml.put("", name()); + xml.nput("%s", saveState().toHex().constData()); xml.put("", MusECore::Xml::xmlString(objectName()).toLatin1().constData()); } diff -Nru muse-2.0~rc2/muse/widgets/header.h muse-2.0/muse/widgets/header.h --- muse-2.0~rc2/muse/widgets/header.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/header.h 2012-06-30 19:24:43.000000000 +0200 @@ -25,6 +25,7 @@ #include #include +#include class QStandardItemModel; diff -Nru muse-2.0~rc2/muse/widgets/knob.cpp muse-2.0/muse/widgets/knob.cpp --- muse-2.0~rc2/muse/widgets/knob.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/knob.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -340,6 +340,7 @@ } setValue(v * halfRange + midValue); SliderBase::valueChange(); + emit sliderMoved(value(),id()); // sliderMoved is used by auxChanged // fake a left-click to make the knob still "stick" to // the mouse. diff -Nru muse-2.0~rc2/muse/widgets/midi_audio_control_base.ui muse-2.0/muse/widgets/midi_audio_control_base.ui --- muse-2.0~rc2/muse/widgets/midi_audio_control_base.ui 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/midi_audio_control_base.ui 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,310 @@ + + + MidiAudioControlBase + + + + 0 + 0 + 341 + 148 + + + + Midi control + + + + + + + + + 0 + 0 + + + + Port: + + + + + + + + + + + 0 + 0 + + + + Channel: + + + + + + + + 0 + 0 + + + + 1 + + + 16 + + + + + + + + + + + Control type: + + + + + + + + 0 + 0 + + + + + Control7 + + + + + Control14 + + + + + RPN + + + + + NRPN + + + + + RPN14 + + + + + NRPN14 + + + + + Pitch + + + + + Program + + + + + + + + + 0 + 0 + + + + + + + + + + + + 0 + 0 + + + + Hi: + + + + + + + + 0 + 0 + + + + 0 + + + 255 + + + 0 + + + + + + + + 0 + 0 + + + + Lo: + + + + + + + + 0 + 0 + + + + 0 + + + 255 + + + 0 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + 0 + 0 + + + + Learn + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Vertical + + + + 20 + 18 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + buttonBox + accepted() + MidiAudioControlBase + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + MidiAudioControlBase + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff -Nru muse-2.0~rc2/muse/widgets/midi_audio_control.cpp muse-2.0/muse/widgets/midi_audio_control.cpp --- muse-2.0~rc2/muse/widgets/midi_audio_control.cpp 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/midi_audio_control.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,340 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// midi_audio_control.cpp +// Copyright (C) 2012 by Tim E. Real (terminator356 at users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= +#include "midi_audio_control.h" + +#include "globals.h" +#include "globaldefs.h" +#include "mididev.h" +#include "midiport.h" +#include "midictrl.h" +#include "audio.h" +#include "app.h" + +#include + +namespace MusEGui { + +// ----------------------------------- +// MidiAudioControl +// Set port to -1 to automatically set it to the port of +// the first combo box item (the first readable port). +// ----------------------------------- + +MidiAudioControl::MidiAudioControl(int port, int chan, int ctrl, QWidget* parent) + : QDialog(parent) +{ + setupUi(this); + + _port = port; + _chan = chan; + _ctrl = ctrl; + _is_learning = false; + + update(); + + connect(learnPushButton, SIGNAL(clicked(bool)), SLOT(learnChanged(bool))); + connect(portComboBox, SIGNAL(currentIndexChanged(int)), SLOT(portChanged(int))); + connect(channelSpinBox, SIGNAL(valueChanged(int)), SLOT(chanChanged())); + connect(controlTypeComboBox, SIGNAL(currentIndexChanged(int)), SLOT(ctrlTypeChanged(int))); + connect(ctrlHiSpinBox, SIGNAL(valueChanged(int)), SLOT(ctrlHChanged())); + connect(ctrlLoSpinBox, SIGNAL(valueChanged(int)), SLOT(ctrlLChanged())); + connect(MusEGlobal::muse, SIGNAL(configChanged()), SLOT(configChanged())); + connect(MusEGlobal::heartBeatTimer, SIGNAL(timeout()), SLOT(heartbeat())); +} + +void MidiAudioControl::heartbeat() +{ + if(_is_learning) + { + if(MusEGlobal::midiLearnPort != -1) + { + int port_item = portComboBox->findData(MusEGlobal::midiLearnPort); + if(port_item != -1 && port_item != portComboBox->currentIndex()) + { + _port = MusEGlobal::midiLearnPort; + portComboBox->blockSignals(true); + portComboBox->setCurrentIndex(port_item); + portComboBox->blockSignals(false); + } + } + + if(MusEGlobal::midiLearnChan != -1 && (MusEGlobal::midiLearnChan + 1) != channelSpinBox->value()) + { + _chan = MusEGlobal::midiLearnChan; + channelSpinBox->blockSignals(true); + channelSpinBox->setValue(_chan + 1); + channelSpinBox->blockSignals(false); + } + + if(MusEGlobal::midiLearnCtrl != -1) + { + int type = MusECore::midiControllerType(MusEGlobal::midiLearnCtrl); + if(type < controlTypeComboBox->count() && type != controlTypeComboBox->currentIndex()) + { + controlTypeComboBox->blockSignals(true); + controlTypeComboBox->setCurrentIndex(type); + controlTypeComboBox->blockSignals(false); + } + + int hv = (MusEGlobal::midiLearnCtrl >> 8) & 0xff; + int lv = MusEGlobal::midiLearnCtrl & 0xff; + if(type == MusECore::MidiController::Program || type == MusECore::MidiController::Pitch) + { + ctrlHiSpinBox->setEnabled(false); + ctrlLoSpinBox->setEnabled(false); + ctrlHiSpinBox->blockSignals(true); + ctrlLoSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(0); + ctrlLoSpinBox->setValue(0); + ctrlHiSpinBox->blockSignals(false); + ctrlLoSpinBox->blockSignals(false); + } + else if(type == MusECore::MidiController::Controller7) + { + ctrlHiSpinBox->setEnabled(false); + ctrlLoSpinBox->setEnabled(true); + + ctrlHiSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(0); + ctrlHiSpinBox->blockSignals(false); + + if(lv != ctrlLoSpinBox->value()) + { + ctrlLoSpinBox->blockSignals(true); + ctrlLoSpinBox->setValue(lv); + ctrlLoSpinBox->blockSignals(false); + } + } + else + { + ctrlHiSpinBox->setEnabled(true); + ctrlLoSpinBox->setEnabled(true); + if(hv != ctrlHiSpinBox->value()) + { + ctrlHiSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(hv); + ctrlHiSpinBox->blockSignals(false); + } + if(lv != ctrlLoSpinBox->value()) + { + ctrlLoSpinBox->blockSignals(true); + ctrlLoSpinBox->setValue(lv); + ctrlLoSpinBox->blockSignals(false); + } + } + + _ctrl = MusECore::midiCtrlTerms2Number(type, (ctrlHiSpinBox->value() << 8) + ctrlLoSpinBox->value()); + } + } +} + +void MidiAudioControl::learnChanged(bool v) +{ + _is_learning = v; + if(_is_learning) + MusEGlobal::audio->msgStartMidiLearn(); // Resets the learn values to -1. +} + +void MidiAudioControl::resetLearn() +{ + _is_learning = false; + learnPushButton->blockSignals(true); + learnPushButton->setChecked(false); + learnPushButton->blockSignals(false); + MusEGlobal::audio->msgStartMidiLearn(); // Resets the learn values to -1. +} + +void MidiAudioControl::portChanged(int idx) +{ + if(idx == -1) + return; + int port_num = portComboBox->itemData(idx).toInt(); + if(port_num < 0 || port_num >= MIDI_PORTS) + return; + + _port = port_num; + resetLearn(); +} + +void MidiAudioControl::chanChanged() +{ + _chan = channelSpinBox->value() - 1; + resetLearn(); +} + +void MidiAudioControl::updateCtrlBoxes() +{ + int idx = controlTypeComboBox->currentIndex(); + if(idx == -1) + return; + + if(idx == MusECore::MidiController::Program || idx == MusECore::MidiController::Pitch) + { + ctrlHiSpinBox->setEnabled(false); + ctrlLoSpinBox->setEnabled(false); + ctrlHiSpinBox->blockSignals(true); + ctrlLoSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(0); + ctrlLoSpinBox->setValue(0); + ctrlHiSpinBox->blockSignals(false); + ctrlLoSpinBox->blockSignals(false); + } + else if(idx == MusECore::MidiController::Controller7) + { + ctrlHiSpinBox->setEnabled(false); + ctrlLoSpinBox->setEnabled(true); + + ctrlHiSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(0); + ctrlHiSpinBox->blockSignals(false); + } + else + { + ctrlHiSpinBox->setEnabled(true); + ctrlLoSpinBox->setEnabled(true); + } +} + +void MidiAudioControl::ctrlTypeChanged(int idx) +{ + if(idx == -1) + return; + + updateCtrlBoxes(); + + _ctrl = (ctrlHiSpinBox->value() << 8) + ctrlLoSpinBox->value(); + _ctrl = MusECore::midiCtrlTerms2Number(idx, _ctrl); + + resetLearn(); +} + +void MidiAudioControl::ctrlHChanged() +{ + if(controlTypeComboBox->currentIndex() == -1) + return; + _ctrl = (ctrlHiSpinBox->value() << 8) + ctrlLoSpinBox->value(); + _ctrl = MusECore::midiCtrlTerms2Number(controlTypeComboBox->currentIndex(), _ctrl); + + resetLearn(); +} + +void MidiAudioControl::ctrlLChanged() +{ + if(controlTypeComboBox->currentIndex() == -1) + return; + _ctrl = (ctrlHiSpinBox->value() << 8) + ctrlLoSpinBox->value(); + _ctrl = MusECore::midiCtrlTerms2Number(controlTypeComboBox->currentIndex(), _ctrl); + + resetLearn(); +} + +void MidiAudioControl::configChanged() +{ + update(); +} + +void MidiAudioControl::update() +{ + portComboBox->blockSignals(true); + portComboBox->clear(); + + int item_idx = 0; + for (int i = 0; i < MIDI_PORTS; ++i) { + MusECore::MidiDevice* md = MusEGlobal::midiPorts[i].device(); + if(!md) // In the case of this combo box, don't bother listing empty ports. + continue; + //if(!(md->rwFlags() & 1 || md->isSynti()) && (i != outPort)) + if(!(md->rwFlags() & 2) && (i != _port)) // Only readable ports, or current one. + continue; + QString name; + name.sprintf("%d:%s", i+1, MusEGlobal::midiPorts[i].portname().toLatin1().constData()); + portComboBox->insertItem(item_idx, name, i); + if(_port == -1) + _port = i; // Initialize + if(i == _port) + portComboBox->setCurrentIndex(item_idx); + item_idx++; + } + portComboBox->blockSignals(false); + + channelSpinBox->blockSignals(true); + channelSpinBox->setValue(_chan + 1); + channelSpinBox->blockSignals(false); + + int type = MusECore::midiControllerType(_ctrl); + if(type < controlTypeComboBox->count()) + { + controlTypeComboBox->blockSignals(true); + controlTypeComboBox->setCurrentIndex(type); + controlTypeComboBox->blockSignals(false); + } + + int hv = (_ctrl >> 8) & 0xff; + int lv = _ctrl & 0xff; + if(type == MusECore::MidiController::Program || type == MusECore::MidiController::Pitch) + { + ctrlHiSpinBox->setEnabled(false); + ctrlLoSpinBox->setEnabled(false); + ctrlHiSpinBox->blockSignals(true); + ctrlLoSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(0); + ctrlLoSpinBox->setValue(0); + ctrlHiSpinBox->blockSignals(false); + ctrlLoSpinBox->blockSignals(false); + } + else if(type == MusECore::MidiController::Controller7) + { + ctrlHiSpinBox->setEnabled(false); + ctrlLoSpinBox->setEnabled(true); + + ctrlHiSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(0); + ctrlHiSpinBox->blockSignals(false); + + if(lv != ctrlLoSpinBox->value()) + { + ctrlLoSpinBox->blockSignals(true); + ctrlLoSpinBox->setValue(lv); + ctrlLoSpinBox->blockSignals(false); + } + } + else + { + ctrlHiSpinBox->setEnabled(true); + ctrlLoSpinBox->setEnabled(true); + if(hv != ctrlHiSpinBox->value()) + { + ctrlHiSpinBox->blockSignals(true); + ctrlHiSpinBox->setValue(hv); + ctrlHiSpinBox->blockSignals(false); + } + if(lv != ctrlLoSpinBox->value()) + { + ctrlLoSpinBox->blockSignals(true); + ctrlLoSpinBox->setValue(lv); + ctrlLoSpinBox->blockSignals(false); + } + } +} + +} diff -Nru muse-2.0~rc2/muse/widgets/midi_audio_control.h muse-2.0/muse/widgets/midi_audio_control.h --- muse-2.0~rc2/muse/widgets/midi_audio_control.h 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/midi_audio_control.h 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,60 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// midi_audio_control.h +// Copyright (C) 2012 by Tim E. Real (terminator356 at users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= +#ifndef MIDI_AUDIO_CONTROL_H +#define MIDI_AUDIO_CONTROL_H + +#include "ui_midi_audio_control_base.h" + +namespace MusEGui { + +class MidiAudioControl : public QDialog, public Ui::MidiAudioControlBase +{ + Q_OBJECT + +private: + int _port, _chan, _ctrl; + bool _is_learning; + void update(); + void resetLearn(); + void updateCtrlBoxes(); + +private slots: + void heartbeat(); + void learnChanged(bool); + void portChanged(int); + void chanChanged(); + void ctrlTypeChanged(int); + void ctrlHChanged(); + void ctrlLChanged(); + void configChanged(); + +public: + MidiAudioControl(int port = -1, int chan = 0, int ctrl = 0, QWidget* parent = 0); + int port() const { return _port; } + int chan() const { return _chan; } + int ctrl() const { return _ctrl; } +}; + +} + +#endif // MIDI_AUDIO_CONTROL_H diff -Nru muse-2.0~rc2/muse/widgets/midisyncimpl.cpp muse-2.0/muse/widgets/midisyncimpl.cpp --- muse-2.0~rc2/muse/widgets/midisyncimpl.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/midisyncimpl.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -28,6 +28,7 @@ #include #include #include +#include #include "app.h" #include "song.h" @@ -137,32 +138,12 @@ tree->addTopLevelItem(item); } -/* -//--------------------------------------------------------- -// MidiSyncLViewItem -// setDevice -//--------------------------------------------------------- - -void MidiSyncLViewItem::setDevice(MusECore::MidiDevice* d) -{ - _device = d; - if(_device) - _syncInfo.copyParams(_device->syncInfo()); -} -*/ - -//--------------------------------------------------------- -// MidiSyncLViewItem -// setPort -//--------------------------------------------------------- - void MidiSyncLViewItem::setPort(int port) { _port = port; if(_port < 0 || port > MIDI_PORTS) return; - //_syncInfo.copyParams(MusEGlobal::midiPorts[port].syncInfo()); copyFromSyncInfo(MusEGlobal::midiPorts[port].syncInfo()); } @@ -221,41 +202,6 @@ _dirty = false; applyButton->setEnabled(false); - //inHeartBeat = true; - - //for(int i = 0; i < MIDI_PORTS; ++i) - // tmpMidiSyncPorts[i] = midiSyncPorts[i]; - - //bool ext = MusEGlobal::extSyncFlag.value(); - //syncMode->setButton(int(ext)); - //syncChanged(ext); -// extSyncCheckbox->setChecked(MusEGlobal::extSyncFlag.value()); - -// dstDevId->setValue(txDeviceId); -// srcDevId->setValue(rxDeviceId); -// srcSyncPort->setValue(rxSyncPort + 1); -// dstSyncPort->setValue(txSyncPort + 1); - -// mtcSync->setChecked(genMTCSync); -// mcSync->setChecked(genMCSync); -// midiMachineControl->setChecked(genMMC); - -// acceptMTCCheckbox->setChecked(acceptMTC); - //acceptMTCCheckbox->setChecked(false); -// acceptMCCheckbox->setChecked(acceptMC); -// acceptMMCCheckbox->setChecked(acceptMMC); - -// mtcSyncType->setCurrentItem(MusEGlobal::mtcType); - -// mtcOffH->setValue(MusEGlobal::mtcOffset.h()); -// mtcOffM->setValue(MusEGlobal::mtcOffset.m()); -// mtcOffS->setValue(MusEGlobal::mtcOffset.s()); -// mtcOffF->setValue(MusEGlobal::mtcOffset.f()); -// mtcOffSf->setValue(MusEGlobal::mtcOffset.sf()); - - - - devicesListView->setAllColumnsShowFocus(true); QStringList columnnames; columnnames << tr("Port") @@ -284,9 +230,11 @@ setToolTips(devicesListView->headerItem()); devicesListView->setFocusPolicy(Qt::NoFocus); - //MSyncHeaderTip::add(devicesListView->header(), QString("Midi sync ports")); - -// updateSyncInfoLV(); + syncRecFilterPreset->addItem(tr("None"), MusECore::MidiSyncInfo::NONE); + syncRecFilterPreset->addItem(tr("Tiny"), MusECore::MidiSyncInfo::TINY); + syncRecFilterPreset->addItem(tr("Small"), MusECore::MidiSyncInfo::SMALL); + syncRecFilterPreset->addItem(tr("Large"), MusECore::MidiSyncInfo::LARGE); + syncRecFilterPreset->addItem(tr("Large with pre-detect"), MusECore::MidiSyncInfo::LARGE_WITH_PRE_DETECT); songChanged(-1); @@ -308,14 +256,14 @@ connect(mtcSyncType, SIGNAL(activated(int)), SLOT(syncChanged())); connect(useJackTransportCheckbox, SIGNAL(clicked()), SLOT(syncChanged())); connect(jackTransportMasterCheckbox, SIGNAL(clicked()), SLOT(syncChanged())); + connect(syncRecFilterPreset, SIGNAL(currentIndexChanged(int)), SLOT(syncChanged())); + connect(syncRecTempoValQuant, SIGNAL(valueChanged(double)), SLOT(syncChanged())); connect(&MusEGlobal::extSyncFlag, SIGNAL(valueChanged(bool)), SLOT(extSyncChanged(bool))); connect(syncDelaySpinBox, SIGNAL(valueChanged(int)), SLOT(syncChanged())); // Done in show(). //connect(MusEGlobal::song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); //connect(MusEGlobal::heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); - - //inHeartBeat = false; } MidiSyncConfig::~MidiSyncConfig() @@ -356,6 +304,17 @@ jackTransportMasterCheckbox->blockSignals(false); useJackTransportCheckbox->blockSignals(false); extSyncCheckbox->blockSignals(false); + + int fp_idx = syncRecFilterPreset->findData(MusEGlobal::syncRecFilterPreset); + if(fp_idx != -1) + { + syncRecFilterPreset->blockSignals(true); + syncRecFilterPreset->setCurrentIndex(fp_idx); + syncRecFilterPreset->blockSignals(false); + } + syncRecTempoValQuant->blockSignals(true); + syncRecTempoValQuant->setValue(MusEGlobal::syncRecTempoValQuant); + syncRecTempoValQuant->blockSignals(false); mtcSyncType->setCurrentIndex(MusEGlobal::mtcType); @@ -400,9 +359,6 @@ { if(!lvi->_curDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting current red icon\n"); - lvi->_curDet = true; lvi->_inDet = false; lvi->setIcon(DEVCOL_IN, QIcon( *record1_Icon)); @@ -411,9 +367,6 @@ else if(!lvi->_inDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting non-current green icon\n"); - lvi->_inDet = true; lvi->_curDet = false; lvi->setIcon(DEVCOL_IN, QIcon( *dotIcon)); @@ -423,9 +376,6 @@ { if(lvi->_curDet || lvi->_inDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting off icon\n"); - lvi->_curDet = false; lvi->_inDet = false; lvi->setIcon(DEVCOL_IN, QIcon( *dothIcon)); @@ -437,9 +387,6 @@ { if(!lvi->_tickDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting tick on icon\n"); - lvi->_tickDet = true; lvi->setIcon(DEVCOL_TICKIN, QIcon( *dotIcon)); } @@ -448,9 +395,6 @@ { if(lvi->_tickDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting tick off icon\n"); - lvi->_tickDet = false; lvi->setIcon(DEVCOL_TICKIN, QIcon( *dothIcon)); } @@ -461,9 +405,6 @@ { if(!lvi->_MRTDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting MRT on icon\n"); - lvi->_MRTDet = true; lvi->setIcon(DEVCOL_MRTIN, QIcon( *dotIcon)); } @@ -472,9 +413,6 @@ { if(lvi->_MRTDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting MRT off icon\n"); - lvi->_MRTDet = false; lvi->setIcon(DEVCOL_MRTIN, QIcon( *dothIcon)); } @@ -487,9 +425,6 @@ { if(!lvi->_MMCDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting MMC on icon\n"); - lvi->_MMCDet = true; lvi->setIcon(DEVCOL_MMCIN, QIcon( *dotIcon)); } @@ -521,9 +456,6 @@ { if(lvi->_MMCDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting MMC off icon\n"); - lvi->_MMCDet = false; lvi->setIcon(DEVCOL_MMCIN, QIcon( *dothIcon)); } @@ -535,9 +467,6 @@ { if(!lvi->_curMTCDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting current red icon\n"); - lvi->_curMTCDet = true; lvi->_MTCDet = false; lvi->setIcon(DEVCOL_MTCIN, QIcon( *record1_Icon)); @@ -546,9 +475,6 @@ else if(!lvi->_MTCDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting MTC on icon\n"); - lvi->_MTCDet = true; lvi->_curMTCDet = false; lvi->setIcon(DEVCOL_MTCIN, QIcon( *dotIcon)); @@ -581,9 +507,6 @@ { if(lvi->_curMTCDet || lvi->_MTCDet) { - // Added by Tim. p3.3.6 - //printf("MidiSyncConfig::heartBeat setting MTC off icon\n"); - lvi->_MTCDet = false; lvi->_curMTCDet = false; lvi->setIcon(DEVCOL_MTCIN, QIcon( *dothIcon)); @@ -610,13 +533,6 @@ void MidiSyncConfig::syncChanged() { setDirty(); - - //MusEGlobal::jackTransportMasterCheckbox->setEnabled(MusEGlobal::useJackTransport); - - //acceptMTCCheckbox->setEnabled(val); -// acceptMTCCheckbox->setEnabled(false); -// acceptMCCheckbox->setEnabled(val); -// acceptMMCCheckbox->setEnabled(val); } //--------------------------------------------------------- @@ -702,24 +618,14 @@ void MidiSyncConfig::apply() { -// txDeviceId = dstDevId->value(); -// rxDeviceId = srcDevId->value(); -// rxSyncPort = srcSyncPort->value() - 1; -// txSyncPort = dstSyncPort->value() - 1; - -// genMTCSync = mtcSync->isChecked(); -// genMCSync = mcSync->isChecked(); -// genMMC = midiMachineControl->isChecked(); + // Protect all structures. + if(MusEGlobal::audio && MusEGlobal::audio->isRunning()) + MusEGlobal::audio->msgIdle(true); MusEGlobal::syncSendFirstClockDelay = syncDelaySpinBox->value(); MusEGlobal::mtcType = mtcSyncType->currentIndex(); - //MusEGlobal::extSyncFlag.setValue(syncMode->id(syncMode->selected())); - //MusEGlobal::extSyncFlag.blockSignals(true); MusEGlobal::extSyncFlag.setValue(extSyncCheckbox->isChecked()); -// if(MusEGlobal::extSyncFlag.value()) -// MusEGlobal::song->setMasterFlag(false); - //MusEGlobal::extSyncFlag.blockSignals(false); MusEGlobal::useJackTransport.setValue(useJackTransportCheckbox->isChecked()); // if(MusEGlobal::useJackTransport) MusEGlobal::jackTransportMaster = jackTransportMasterCheckbox->isChecked(); @@ -729,33 +635,38 @@ if(MusEGlobal::audioDevice) MusEGlobal::audioDevice->setMaster(MusEGlobal::jackTransportMaster); + if(syncRecFilterPreset->currentIndex() != -1) + { + int fp_idx = syncRecFilterPreset->itemData(syncRecFilterPreset->currentIndex()).toInt(); + if(fp_idx >= 0 && fp_idx < MusECore::MidiSyncInfo::TYPE_END) + { + MusEGlobal::syncRecFilterPreset = MusECore::MidiSyncInfo::SyncRecFilterPresetType(fp_idx); + if(MusEGlobal::midiSeq) + MusEGlobal::midiSeq->setSyncRecFilterPreset(MusEGlobal::syncRecFilterPreset); + } + } + MusEGlobal::syncRecTempoValQuant = syncRecTempoValQuant->value(); + if(MusEGlobal::midiSeq) + MusEGlobal::midiSeq->setRecTempoValQuant(MusEGlobal::syncRecTempoValQuant); + MusEGlobal::mtcOffset.setH(mtcOffH->value()); MusEGlobal::mtcOffset.setM(mtcOffM->value()); MusEGlobal::mtcOffset.setS(mtcOffS->value()); MusEGlobal::mtcOffset.setF(mtcOffF->value()); MusEGlobal::mtcOffset.setSf(mtcOffSf->value()); -// acceptMC = acceptMCCheckbox->isChecked(); -// acceptMMC = acceptMMCCheckbox->isChecked(); -// acceptMTC = acceptMTCCheckbox->isChecked(); - - - //MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)devicesListView->firstChild(); - //while(lvi) for (int i = MIDI_PORTS-1; i >= 0; --i) { MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)devicesListView->topLevelItem(i); - //MusECore::MidiDevice* dev = lvi->device(); - // Does the device really exist? - //if(midiDevices.find(dev) != midiDevices.end()) - // dev->syncInfo().copyParams(lvi->syncInfo()); int port = lvi->port(); if(port >= 0 && port < MIDI_PORTS) - //MusEGlobal::midiPorts[port].syncInfo().copyParams(lvi->syncInfo()); lvi->copyToSyncInfo(MusEGlobal::midiPorts[port].syncInfo()); } + if(MusEGlobal::audio && MusEGlobal::audio->isRunning()) + MusEGlobal::audio->msgIdle(false); + //muse->changeConfig(true); // save settings _dirty = false; @@ -777,7 +688,6 @@ { MusECore::MidiPort* port = &MusEGlobal::midiPorts[i]; MusECore::MidiDevice* dev = port->device(); - // p3.3.31 // Don't show if it is a synthesizer device. // Hmm, some synths might support transport commands or even sync? // If anything, the DSSI or VST synths just might... @@ -791,9 +701,6 @@ s.setNum(i+1); MidiSyncLViewItem* lvi = new MidiSyncLViewItem(devicesListView); lvi->setPort(i); // setPort will copy parameters. - //MusECore::MidiSyncInfo& si = lvi->syncInfo(); - //si.copyParams(port->syncInfo()); - //lvi.copyFromSyncInfo(port->syncInfo()); MusECore::MidiSyncInfo& portsi = port->syncInfo(); lvi->setText(DEVCOL_NO, s); @@ -925,11 +832,6 @@ //lvi->setText(DEVCOL_MTCTYPE, "--"); } - //lvi->setText(DEVCOL_RID, QString().setNum(si.idIn()) ); - //lvi->setRenameEnabled(DEVCOL_RID, true); - //lvi->setIcon(DEVCOL_RCLK, QIcon( si.MCIn() ? *dotIcon : *dothIcon)); - //lvi->setIcon(DEVCOL_RMMC, QIcon( si.MMCIn() ? *dotIcon : *dothIcon)); - //lvi->setIcon(DEVCOL_RMTC, QIcon( si.MTCIn() ? *dotIcon : *dothIcon)); lvi->setText(DEVCOL_RID, QString().setNum(lvi->_idIn) ); lvi->setIcon(DEVCOL_RCLK, QIcon( lvi->_recMC ? *dotIcon : *dothIcon)); lvi->setIcon(DEVCOL_RMRT, QIcon( lvi->_recMRT ? *dotIcon : *dothIcon)); @@ -937,11 +839,6 @@ lvi->setIcon(DEVCOL_RMTC, QIcon( lvi->_recMTC ? *dotIcon : *dothIcon)); lvi->setIcon(DEVCOL_RREWSTART, QIcon( lvi->_recRewOnStart ? *dotIcon : *dothIcon)); - //lvi->setText(DEVCOL_TID, QString().setNum(si.idOut()) ); - //lvi->setRenameEnabled(DEVCOL_TID, true); - //lvi->setIcon(DEVCOL_TCLK, QIcon( si.MCOut() ? *dotIcon : *dothIcon)); - //lvi->setIcon(DEVCOL_TMMC, QIcon( si.MMCOut() ? *dotIcon : *dothIcon)); - //lvi->setIcon(DEVCOL_TMTC, QIcon( si.MTCOut() ? *dotIcon : *dothIcon)); lvi->setText(DEVCOL_TID, QString().setNum(lvi->_idOut) ); lvi->setIcon(DEVCOL_TCLK, QIcon(lvi->_sendMC ? *dotIcon : *dothIcon)); lvi->setIcon(DEVCOL_TMRT, QIcon(lvi->_sendMRT ? *dotIcon : *dothIcon)); @@ -988,38 +885,6 @@ devicesListView->header()->setResizeMode(DEVCOL_TMRT, QHeaderView::Fixed); devicesListView->header()->setResizeMode(DEVCOL_TMMC, QHeaderView::Fixed); - - /* - for(MusECore::iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) - { - MusECore::MidiDevice* dev = *id; - - //MusECore::MidiPort* port = &MusEGlobal::midiPorts[i]; - //MusECore::MidiDevice* dev = port->device(); - MidiSyncLViewItem* lvi = new MidiSyncLViewItem(devicesListView); - //lvi->setPort(i); - // setDevice will copy parameters. - lvi->setDevice(dev); - MusECore::MidiSyncInfo& si = lvi->syncInfo(); - //si.copyParams(dev->syncInfo()); - - lvi->setText(DEVCOL_NAME, dev->name()); - - lvi->setIcon(DEVCOL_IN, QIcon( si.MCSyncDetect() ? *dotIcon : *dothIcon)); - - lvi->setText(DEVCOL_RID, QString().setNum(si.idIn()) ); - lvi->setIcon(DEVCOL_RCLK, QIcon( si.MCIn() ? *dotIcon : *dothIcon)); - lvi->setIcon(DEVCOL_RMMC, QIcon( si.MMCIn() ? *dotIcon : *dothIcon)); - lvi->setIcon(DEVCOL_RMTC, QIcon( si.MTCIn() ? *dotIcon : *dothIcon)); - - lvi->setText(DEVCOL_TID, QString().setNum(si.idOut()) ); - lvi->setIcon(DEVCOL_TCLK, QIcon( si.MCOut() ? *dotIcon : *dothIcon)); - lvi->setIcon(DEVCOL_TMMC, QIcon( si.MMCOut() ? *dotIcon : *dothIcon)); - lvi->setIcon(DEVCOL_TMTC, QIcon( si.MTCOut() ? *dotIcon : *dothIcon)); - - devicesListView->insertItem(lvi); - } - */ } @@ -1027,7 +892,6 @@ // dlvClicked //--------------------------------------------------------- -//void MidiSyncConfig::dlvClicked(QListViewItem* item, const QPoint&, int col) void MidiSyncConfig::dlvClicked(QTreeWidgetItem* item, int col) { if (item == 0) @@ -1042,14 +906,6 @@ //if(midiDevices.find(dev) == midiDevices.end()) // return; - //int n; - //MusECore::MidiPort* port = &MusEGlobal::midiPorts[no]; - //MusECore::MidiDevice* dev = port->device(); - //int rwFlags = dev ? dev->rwFlags() : 0; - //int openFlags = dev ? dev->openFlags() : 0; - //MusECore::MidiSyncInfo& si = lvi->syncInfo(); - //MusECore::MidiSyncInfo& portsi = MusEGlobal::midiPorts[no].syncInfo(); - switch (col) { case DEVCOL_NO: @@ -1060,8 +916,6 @@ // If this is not the current midi sync in port, and sync in from this port is enabled, // and sync is in fact detected on this port, allow the user to force this port to now be the // current sync in port. - //if(no != MusEGlobal::curMidiSyncInPort && si.MCIn() && MusEGlobal::midiPorts[no].syncInfo().MCSyncDetect()) - //if(no != MusEGlobal::curMidiSyncInPort && lvi->_recMC && MusEGlobal::midiPorts[no].syncInfo().MCSyncDetect()) if(no != MusEGlobal::curMidiSyncInPort) { if(lvi->_recMC && MusEGlobal::midiPorts[no].syncInfo().MCSyncDetect()) @@ -1084,8 +938,6 @@ // If this is not the current midi sync in port, and sync in from this port is enabled, // and sync is in fact detected on this port, allow the user to force this port to now be the // current sync in port. - //if(no != MusEGlobal::curMidiSyncInPort && si.MTCIn() && MusEGlobal::midiPorts[no].syncInfo().MTCDetect()) - //if(no != MusEGlobal::curMidiSyncInPort && lvi->_recMTC && MusEGlobal::midiPorts[no].syncInfo().MTCDetect()) if(no != MusEGlobal::curMidiSyncInPort) { if(lvi->_recMTC && MusEGlobal::midiPorts[no].syncInfo().MTCDetect()) @@ -1105,8 +957,6 @@ case DEVCOL_RID: break; case DEVCOL_RCLK: - //si.setMCIn(si.MCIn() ? false : true); - //lvi->setIcon(DEVCOL_RCLK, QIcon( si.MCIn() ? *dotIcon : *dothIcon)); lvi->_recMC = (lvi->_recMC ? false : true); lvi->setIcon(DEVCOL_RCLK, QIcon( lvi->_recMC ? *dotIcon : *dothIcon)); setDirty(); @@ -1117,15 +967,11 @@ setDirty(); break; case DEVCOL_RMMC: - //si.setMMCIn(si.MMCIn() ? false : true); - //lvi->setIcon(DEVCOL_RMMC, QIcon( si.MMCIn() ? *dotIcon : *dothIcon)); lvi->_recMMC = (lvi->_recMMC ? false : true); lvi->setIcon(DEVCOL_RMMC, QIcon( lvi->_recMMC ? *dotIcon : *dothIcon)); setDirty(); break; case DEVCOL_RMTC: - //si.setMTCIn(si.MTCIn() ? false : true); - //lvi->setIcon(DEVCOL_RMTC, QIcon( si.MTCIn() ? *dotIcon : *dothIcon)); lvi->_recMTC = (lvi->_recMTC ? false : true); lvi->setIcon(DEVCOL_RMTC, QIcon( lvi->_recMTC ? *dotIcon : *dothIcon)); setDirty(); @@ -1138,8 +984,6 @@ case DEVCOL_TID: break; case DEVCOL_TCLK: - //si.setMCOut(si.MCOut() ? false : true); - //lvi->setIcon(DEVCOL_TCLK, QIcon( si.MCOut() ? *dotIcon : *dothIcon)); lvi->_sendMC = (lvi->_sendMC ? false : true); lvi->setIcon(DEVCOL_TCLK, QIcon( lvi->_sendMC ? *dotIcon : *dothIcon)); setDirty(); @@ -1150,15 +994,11 @@ setDirty(); break; case DEVCOL_TMMC: - //si.setMMCOut(si.MMCOut() ? false : true); - //lvi->setIcon(DEVCOL_TMMC, QIcon( si.MMCOut() ? *dotIcon : *dothIcon)); lvi->_sendMMC = (lvi->_sendMMC ? false : true); lvi->setIcon(DEVCOL_TMMC, QIcon( lvi->_sendMMC ? *dotIcon : *dothIcon)); setDirty(); break; case DEVCOL_TMTC: - //si.setMTCOut(si.MTCOut() ? false : true); - //lvi->setIcon(DEVCOL_TMTC, QIcon( si.MTCOut() ? *dotIcon : *dothIcon)); lvi->_sendMTC = (lvi->_sendMTC ? false : true); lvi->setIcon(DEVCOL_TMTC, QIcon( lvi->_sendMTC ? *dotIcon : *dothIcon)); setDirty(); @@ -1183,21 +1023,13 @@ MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item; - //if(col == DEVCOL_RID) - // lvi->startRename(DEVCOL_RID); - //else - //if(col == DEVCOL_TID) - // lvi->startRename(DEVCOL_TID); - bool ok = false; if(col == DEVCOL_RID) { - //int val = lvi->syncInfo().idIn(); int val = lvi->_idIn; int newval = QInputDialog::getInteger(this, "Muse: Sync info" , "Enter new id number (127 = all):", val, 0, 127, 1, &ok); if(ok) { - //lvi->syncInfo().setIdIn(newval); lvi->_idIn = newval; lvi->setText(DEVCOL_RID, QString().setNum(newval)); } @@ -1205,12 +1037,10 @@ else if(col == DEVCOL_TID) { - //int val = lvi->syncInfo().idOut(); int val = lvi->_idOut; int newval = QInputDialog::getInteger(this, "Muse: Sync info" , "Enter new id number (127 = global):", val, 0, 127, 1, &ok); if(ok) { - //lvi->syncInfo().setIdOut(newval); lvi->_idOut = newval; lvi->setText(DEVCOL_TID, QString().setNum(newval)); } @@ -1220,41 +1050,6 @@ setDirty(); } -/* -//--------------------------------------------------------- -// renameOk -//--------------------------------------------------------- -//void MidiSyncConfig::renameOk(QListViewItem* item, int col) -void MidiSyncConfig::renameOk(QListViewItem* item, int col, const QString & text) -{ - if(!item) - return; - - MidiSyncLViewItem* lvi = (MidiSyncLViewItem*)item; - QString t = text; - bool ok; - int id = text.toInt(&ok); - if(!ok) - { - lvi->setText(t); - return; - } - if(col == DEVCOL_RID) - { - //lvi->syncInfo().setIdIn(id); - lvi->_idIn = id; - setDirty(); - } - else - if(col == DEVCOL_TID) - { - //lvi->syncInfo().setIdOut(id); - lvi->_idOut = id; - setDirty(); - } -} -*/ - //--------------------------------------------------------- // MidiSyncConfig::setDirty //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/widgets/midisync.ui muse-2.0/muse/widgets/midisync.ui --- muse-2.0~rc2/muse/widgets/midisync.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/midisync.ui 2012-06-30 19:24:42.000000000 +0200 @@ -10,7 +10,7 @@ 0 0 655 - 419 + 445 @@ -337,6 +337,100 @@ + + + Averaging applied to recorded external tempo changes. + + + External midi clock can be very jittery. +Tempo is derived from it and recorded. +It is usually desirable to average it and + limit the number of recorded changes. + +Tiny: 2 section 4/4 = 8 stages. +1/8T note averaging, may produce jitter. + +Small: 3 section 12/8/4 = 24 stages. +1/4 note averaging, may still produce jitter. + +Medium: 3 section 28/12/8 = 48 stages. +1/2 note averaging. Less jitter. + +Large: 4 section 48/48/48/48 = 192 stages. +Use this if the song has only one tempo. +Very low quantization values can be used. + +Large pre-detect: 4 section 8/48/48/48 = 152 + stages + first stage large step pre-detector. +Use this if you expect sudden large tempo steps. + +None: Use only if high accuracy is needed for + audio alignment on playback. Caution: Records + thousands of tempo changes per minute. MusE + may slow and the song file will be large. + + + + + + + Tempo record averaging + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + + + + + + + + + + + + + + + bpm + + + 0.000000000000000 + + + 100.000000000000000 + + + 0.010000000000000 + + + 1.000000000000000 + + + + + + + Tempo record quantization + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + + + + + + Send start to first clock delay @@ -379,7 +473,7 @@ - + @@ -388,18 +482,18 @@ - - + + - Note: Sync delay and MTC sync currently not fully implemeted + Note: Sync delay and MTC sync currently not fully implemented - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter - false + false - + diff -Nru muse-2.0~rc2/muse/widgets/mtrackinfobase.ui muse-2.0/muse/widgets/mtrackinfobase.ui --- muse-2.0~rc2/muse/widgets/mtrackinfobase.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/mtrackinfobase.ui 2012-06-30 19:24:42.000000000 +0200 @@ -588,7 +588,7 @@ - Bank Select MSB. Double-click on/off. + Bank Select MSB. Ctrl-double-click on/off. false @@ -641,7 +641,7 @@ - Bank Select LSB. Double-click on/off. + Bank Select LSB. Ctrl-double-click on/off. false @@ -694,7 +694,7 @@ - Program. Double-click on/off. + Program. Ctrl-double-click on/off. false @@ -761,7 +761,7 @@ - Volume. Double-click on/off. + Volume. Ctrl-double-click on/off. false @@ -828,10 +828,10 @@ - Change stereo position. Double-click on/off. + Change stereo position. Ctrl-double-click on/off. - Change stereo position. Double-click on/off. + Change stereo position. Ctrl-double-click on/off. false diff -Nru muse-2.0~rc2/muse/widgets/mtrackinfo.cpp muse-2.0/muse/widgets/mtrackinfo.cpp --- muse-2.0~rc2/muse/widgets/mtrackinfo.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/mtrackinfo.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -104,18 +104,44 @@ //iChanDetectLabel->setPixmap(*darkgreendotIcon); iChanDetectLabel->setPixmap(*darkRedLedIcon); + recEchoButton->setFocusPolicy(Qt::NoFocus); recEchoButton->setIcon((selected && ((MusECore::MidiTrack*)selected)->recEcho()) ? QIcon(*midiThruOnIcon) : QIcon(*midiThruOffIcon)); recEchoButton->setIconSize(midiThruOnIcon->size()); //recEchoButton->setOffPixmap(midiThruOffIcon); //recEchoButton->setOnPixmap(midiThruOnIcon); + iRButton->setFocusPolicy(Qt::NoFocus); iRButton->setIcon(QIcon(*routesMidiInIcon)); iRButton->setIconSize(routesMidiInIcon->size()); //iRButton->setOffPixmap(routesMidiInIcon); + oRButton->setFocusPolicy(Qt::NoFocus); oRButton->setIcon(QIcon(*routesMidiOutIcon)); oRButton->setIconSize(routesMidiOutIcon->size()); //oRButton->setOffPixmap(routesMidiOutIcon); + + recordButton->setFocusPolicy(Qt::NoFocus); + progRecButton->setFocusPolicy(Qt::NoFocus); + volRecButton->setFocusPolicy(Qt::NoFocus); + panRecButton->setFocusPolicy(Qt::NoFocus); + iPatch->setFocusPolicy(Qt::NoFocus); + + iOutput->setFocusPolicy(Qt::NoFocus); + iOutputChannel->setFocusPolicy(Qt::StrongFocus); + iHBank->setFocusPolicy(Qt::StrongFocus); + iLBank->setFocusPolicy(Qt::StrongFocus); + iProgram->setFocusPolicy(Qt::StrongFocus); + iHBank->setFocusPolicy(Qt::StrongFocus); + iLBank->setFocusPolicy(Qt::StrongFocus); + iProgram->setFocusPolicy(Qt::StrongFocus); + iLautst->setFocusPolicy(Qt::StrongFocus); + iLautst->setFocusPolicy(Qt::StrongFocus); + iTransp->setFocusPolicy(Qt::StrongFocus); + iAnschl->setFocusPolicy(Qt::StrongFocus); + iVerz->setFocusPolicy(Qt::StrongFocus); + iLen->setFocusPolicy(Qt::StrongFocus); + iKompr->setFocusPolicy(Qt::StrongFocus); + iPan->setFocusPolicy(Qt::StrongFocus); // MusE-2: AlignCenter and WordBreak are set in the ui(3) file, but not supported by QLabel. Turn them on here. trackNameLabel->setAlignment(Qt::AlignCenter); @@ -180,18 +206,18 @@ connect(iHBank, SIGNAL(valueChanged(int)), SLOT(iProgHBankChanged())); connect(iLBank, SIGNAL(valueChanged(int)), SLOT(iProgLBankChanged())); connect(iProgram, SIGNAL(valueChanged(int)), SLOT(iProgramChanged())); - connect(iHBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); - connect(iLBank, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); - connect(iProgram, SIGNAL(doubleClicked()), SLOT(iProgramDoubleClicked())); + connect(iHBank, SIGNAL(ctrlDoubleClicked()), SLOT(iProgramDoubleClicked())); + connect(iLBank, SIGNAL(ctrlDoubleClicked()), SLOT(iProgramDoubleClicked())); + connect(iProgram, SIGNAL(ctrlDoubleClicked()), SLOT(iProgramDoubleClicked())); connect(iLautst, SIGNAL(valueChanged(int)), SLOT(iLautstChanged(int))); - connect(iLautst, SIGNAL(doubleClicked()), SLOT(iLautstDoubleClicked())); + connect(iLautst, SIGNAL(ctrlDoubleClicked()), SLOT(iLautstDoubleClicked())); connect(iTransp, SIGNAL(valueChanged(int)), SLOT(iTranspChanged(int))); connect(iAnschl, SIGNAL(valueChanged(int)), SLOT(iAnschlChanged(int))); connect(iVerz, SIGNAL(valueChanged(int)), SLOT(iVerzChanged(int))); connect(iLen, SIGNAL(valueChanged(int)), SLOT(iLenChanged(int))); connect(iKompr, SIGNAL(valueChanged(int)), SLOT(iKomprChanged(int))); connect(iPan, SIGNAL(valueChanged(int)), SLOT(iPanChanged(int))); - connect(iPan, SIGNAL(doubleClicked()), SLOT(iPanDoubleClicked())); + connect(iPan, SIGNAL(ctrlDoubleClicked()), SLOT(iPanDoubleClicked())); connect(iOutput, SIGNAL(activated(int)), SLOT(iOutputPortChanged(int))); ///connect(iInput, SIGNAL(textChanged(const QString&)), SLOT(iInputPortChanged(const QString&))); connect(recordButton, SIGNAL(clicked()), SLOT(recordClicked())); @@ -200,6 +226,38 @@ connect(panRecButton, SIGNAL(clicked()), SLOT(panRecClicked())); connect(recEchoButton, SIGNAL(toggled(bool)), SLOT(recEchoToggled(bool))); connect(iRButton, SIGNAL(pressed()), SLOT(inRoutesPressed())); + + connect(iOutputChannel, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iHBank, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iLBank, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iProgram, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iHBank, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iLBank, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iProgram, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iLautst, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iLautst, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iTransp, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iAnschl, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iVerz, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iLen, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iKompr, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(iPan, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + + connect(iOutputChannel, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iHBank, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iLBank, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iProgram, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iHBank, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iLBank, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iProgram, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iLautst, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iLautst, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iTransp, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iAnschl, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iVerz, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iLen, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iKompr, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(iPan, SIGNAL(escapePressed()), SIGNAL(escapePressed())); // TODO: Works OK, but disabled for now, until we figure out what to do about multiple out routes and display values... // Enabled (for Midi Port to Audio Input routing). p4.0.14 Tim. @@ -341,15 +399,9 @@ nprogram = mp->lastValidHWCtrlState(outChannel, MusECore::CTRL_PROGRAM); if(nprogram == MusECore::CTRL_VAL_UNKNOWN) { - //const char* n = ""; const QString n(tr("")); - //if(strcmp(iPatch->text().toLatin1().constData(), n) != 0) if(iPatch->text() != n) - { - //printf("Arranger::midiTrackInfoHeartBeat setting patch \n"); - iPatch->setText(n); - } } else { @@ -361,13 +413,8 @@ if(iPatch->text() != n) iPatch->setText(n); } - else - if(iPatch->text() != name) - { - //printf("Arranger::midiTrackInfoHeartBeat setting patch name\n"); - + else if(iPatch->text() != name) iPatch->setText(name); - } } } else diff -Nru muse-2.0~rc2/muse/widgets/mtrackinfo.h muse-2.0/muse/widgets/mtrackinfo.h --- muse-2.0~rc2/muse/widgets/mtrackinfo.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/mtrackinfo.h 2012-06-30 19:24:42.000000000 +0200 @@ -80,6 +80,10 @@ void configChanged(); void songChanged(int); + signals: + void returnPressed(); + void escapePressed(); + public: MidiTrackInfo(QWidget*, MusECore::Track* = 0); MusECore::Track* track() const { return selected; } diff -Nru muse-2.0~rc2/muse/widgets/mtscale.cpp muse-2.0/muse/widgets/mtscale.cpp --- muse-2.0~rc2/muse/widgets/mtscale.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/mtscale.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -20,7 +20,7 @@ // //========================================================= -#include +#include #include #include @@ -54,7 +54,7 @@ pos[1] = MusEGlobal::song->lpos(); pos[2] = MusEGlobal::song->rpos(); } - pos[3] = MAXINT; // do not show + pos[3] = INT_MAX; // do not show button = Qt::NoButton; setMouseTracking(true); connect(MusEGlobal::song, SIGNAL(posChanged(int, unsigned, bool)), SLOT(setPos(int, unsigned, bool))); @@ -87,9 +87,9 @@ void MTScale::setPos(int idx, unsigned val, bool) { - if (val == MAXINT) { + if (val == INT_MAX) { if (idx == 3) { - pos[3] = MAXINT; + pos[3] = INT_MAX; redraw(QRect(0, 0, width(), height())); } return; @@ -98,8 +98,8 @@ val = MusEGlobal::tempomap.tick2frame(val); if (val == pos[idx]) return; - //unsigned opos = mapx(pos[idx] == MAXINT ? val : pos[idx]); - int opos = mapx(pos[idx] == MAXINT ? val : pos[idx]); + //unsigned opos = mapx(pos[idx] == INT_MAX ? val : pos[idx]); + int opos = mapx(pos[idx] == INT_MAX ? val : pos[idx]); pos[idx] = val; if (!isVisible()) return; @@ -211,7 +211,7 @@ void MTScale::leaveEvent(QEvent*) { - emit timeChanged(MAXINT); + emit timeChanged(INT_MAX); } //--------------------------------------------------------- @@ -250,7 +250,7 @@ if (xp > x+w) break; int xe = r.x() + r.width(); - MusECore::iMarker mm = m; + MusECore::iMarker mm = m; ++mm; if (mm != marker->end()) { @@ -344,7 +344,7 @@ } } p.setPen(Qt::black); - if (pos[3] != MAXINT) { + if (pos[3] != INT_MAX) { int xp = mapx(pos[3]); if (xp >= x && xp < x+w) p.drawLine(xp, 0, xp, height()); diff -Nru muse-2.0~rc2/muse/widgets/mtscale_flo.cpp muse-2.0/muse/widgets/mtscale_flo.cpp --- muse-2.0~rc2/muse/widgets/mtscale_flo.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/mtscale_flo.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -20,7 +20,7 @@ // //========================================================= -#include +#include #include #include @@ -76,10 +76,10 @@ void MTScaleFlo::setPos(int idx, unsigned val, bool) { - if ((val == MAXINT) || (val == pos[idx])) + if ((val == INT_MAX) || (val == pos[idx])) return; - int opos = parent->tick_to_x(pos[idx] == MAXINT ? val : pos[idx]) + xoffset - xpos; + int opos = parent->tick_to_x(pos[idx] == INT_MAX ? val : pos[idx]) + xoffset - xpos; pos[idx] = val; diff -Nru muse-2.0~rc2/muse/widgets/musewidgetsplug.cpp muse-2.0/muse/widgets/musewidgetsplug.cpp --- muse-2.0~rc2/muse/widgets/musewidgetsplug.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/musewidgetsplug.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -168,6 +168,7 @@ true, // Split imported tracks into multiple parts. 1, // startMode QString(""), // start song path + false, // startSongLoadConfig 384, // gui division QRect(0, 0, 400, 300), // GeometryMain; QRect(0, 0, 200, 100), // GeometryTransport; @@ -211,13 +212,13 @@ QString("./"), // projectBaseFolder true, // projectStoreInFolder true, // useProjectSaveDialog - 64, // minControlProcessPeriod + 256, // minControlProcessPeriod false, // popupsDefaultStayOpen false, // leftMouseButtonCanDecrease - false, // rangeMarkerWithoutMMBCheckBox + false, // rangeMarkerWithoutMMBCheckBox true, // addHiddenTracks - true // unhideTracks - + true, // unhideTracks + true // smartFocus }; //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/widgets/noteinfo.cpp muse-2.0/muse/widgets/noteinfo.cpp --- muse-2.0~rc2/muse/widgets/noteinfo.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/noteinfo.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -30,13 +30,15 @@ #include "globals.h" ///#include "posedit.h" #include "pitchedit.h" +#include "icons.h" +#include "pixmap_button.h" namespace MusEGui { //--------------------------------------------------- // NoteInfo // ToolBar -// Start, L�nge, Note, Velo an, Velo aus, Kanal +// Start, Length, Note, Velo on, Velo off //--------------------------------------------------- //NoteInfo::NoteInfo(QMainWindow* parent) @@ -44,59 +46,62 @@ : QToolBar(tr("Note Info"), parent) { setObjectName("Note Info"); + _enabled = true; + _returnMode = false; deltaMode = false; - //QLabel* label = new QLabel(tr("Start"), this, "Start"); + deltaButton = new PixmapButton(deltaOnIcon, deltaOffIcon, 2); + deltaButton->setFocusPolicy(Qt::NoFocus); + deltaButton->setCheckable(true); + deltaButton->setToolTip(tr("delta/absolute mode")); + addWidget(deltaButton); + QLabel* label = new QLabel(tr("Start")); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label->setIndent(3); addWidget(label); - //selTime = new PosEdit(this, "Start"); - ///selTime = new PosEdit(0, "Start"); selTime = new Awl::PosEdit; + selTime->setFocusPolicy(Qt::StrongFocus); selTime->setObjectName("Start"); addWidget(selTime); - //label = new QLabel(tr("Len"), this, "Len"); label = new QLabel(tr("Len")); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label->setIndent(3); addWidget(label); - //selLen = new QSpinBox(0, 100000, 1, this); - selLen = new QSpinBox(); + selLen = new SpinBox(); + selLen->setFocusPolicy(Qt::StrongFocus); selLen->setRange(0, 100000); selLen->setSingleStep(1); addWidget(selLen); - //label = new QLabel(tr("Pitch"), this, "Pitch"); label = new QLabel(tr("Pitch")); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label->setIndent(3); addWidget(label); - //selPitch = new PitchEdit(this, "selPitch"); selPitch = new PitchEdit; + selPitch->setFocusPolicy(Qt::StrongFocus); + selPitch->setDeltaMode(deltaMode); addWidget(selPitch); - //label = new QLabel(tr("Velo On"), this, "Velocity On"); label = new QLabel(tr("Velo On")); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label->setIndent(3); addWidget(label); - //selVelOn = new QSpinBox(0, 127, 1, this); - selVelOn = new QSpinBox(); + selVelOn = new SpinBox(); + selVelOn->setFocusPolicy(Qt::StrongFocus); selVelOn->setRange(0, 127); selVelOn->setSingleStep(1); addWidget(selVelOn); - //label = new QLabel(tr("Velo Off"), this, "Velocity Off"); label = new QLabel(tr("Velo Off")); label->setAlignment(Qt::AlignRight|Qt::AlignVCenter); label->setIndent(3); addWidget(label); - //selVelOff = new QSpinBox(0, 127, 1, this); - selVelOff = new QSpinBox(); + selVelOff = new SpinBox(); + selVelOff->setFocusPolicy(Qt::StrongFocus); selVelOff->setRange(0, 127); selVelOff->setSingleStep(1); addWidget(selVelOff); @@ -106,17 +111,45 @@ connect(selVelOn, SIGNAL(valueChanged(int)), SLOT(velOnChanged(int))); connect(selVelOff, SIGNAL(valueChanged(int)), SLOT(velOffChanged(int))); connect(selTime, SIGNAL(valueChanged(const MusECore::Pos&)), SLOT(timeChanged(const MusECore::Pos&))); + + connect(selLen, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(selPitch, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(selVelOn, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(selVelOff, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(selTime, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + + connect(selLen, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(selPitch, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(selVelOn, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(selVelOff, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + connect(selTime, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + + connect(deltaButton, SIGNAL(clicked(bool)), SLOT(deltaModeClicked(bool))); } //--------------------------------------------------------- -// setDeltaMode +// setEnabled //--------------------------------------------------------- -void NoteInfo::setDeltaMode(bool val) +void NoteInfo::setEnabled(bool val) +{ + _enabled = val; + selLen->setEnabled(val); + selPitch->setEnabled(val); + selVelOn->setEnabled(val); + selVelOff->setEnabled(val); + selTime->setEnabled(val); +} + +//--------------------------------------------------------- +// set_mode +//--------------------------------------------------------- + +void NoteInfo::set_mode() { - deltaMode = val; - selPitch->setDeltaMode(val); - if (val) { + blockSignals(true); + selPitch->setDeltaMode(deltaMode); + if (deltaMode) { selLen->setRange(-100000, 100000); selVelOn->setRange(-127, 127); selVelOff->setRange(-127, 127); @@ -126,6 +159,34 @@ selVelOn->setRange(0, 127); selVelOff->setRange(0, 127); } + blockSignals(false); + } + +//--------------------------------------------------------- +// setReturnMode +//--------------------------------------------------------- + +void NoteInfo::setReturnMode(bool v) +{ + _returnMode = v; + selTime->setReturnMode(_returnMode); + selLen->setReturnMode(_returnMode); + selPitch->setReturnMode(_returnMode); + selVelOn->setReturnMode(_returnMode); + selVelOff->setReturnMode(_returnMode); +} + +//--------------------------------------------------------- +// setDeltaMode +//--------------------------------------------------------- + +void NoteInfo::setDeltaMode(bool val) + { + if(val == deltaMode) + return; + deltaMode = val; + deltaButton->setChecked(deltaMode); + set_mode(); } //--------------------------------------------------------- @@ -169,6 +230,19 @@ } //--------------------------------------------------------- +// setDeltaMode +//--------------------------------------------------------- + +void NoteInfo::deltaModeClicked(bool val) +{ + if(val == deltaMode) + return; + deltaMode = val; + set_mode(); + emit deltaModeChanged(deltaMode); +} + +//--------------------------------------------------------- // setValue //--------------------------------------------------------- @@ -203,8 +277,8 @@ int val5) { blockSignals(true); - if (selTime->pos().tick() != tick) - selTime->setValue(tick); + // PosEdit will take care of optimizations. It must check whether actual values dependent on tempo or sig changed... + selTime->setValue(tick); if (selLen->value() != val2) selLen->setValue(val2); if (selPitch->value() != val3) diff -Nru muse-2.0~rc2/muse/widgets/noteinfo.h muse-2.0/muse/widgets/noteinfo.h --- muse-2.0~rc2/muse/widgets/noteinfo.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/noteinfo.h 2012-06-30 19:24:42.000000000 +0200 @@ -26,12 +26,8 @@ namespace Awl { class PosEdit; - //class PitchEdit; }; -class QSpinBox; - -///class PosEdit; namespace MusECore { class Pos; } @@ -39,6 +35,9 @@ namespace MusEGui { class PitchEdit; +class SpinBox; +class PixmapButton; + //--------------------------------------------------------- // NoteInfo @@ -46,36 +45,45 @@ class NoteInfo : public QToolBar { Q_OBJECT - - ///PosEdit* selTime; + Awl::PosEdit* selTime; - QSpinBox* selLen; + SpinBox* selLen; PitchEdit* selPitch; - QSpinBox* selVelOn; - QSpinBox* selVelOff; + SpinBox* selVelOn; + SpinBox* selVelOff; + PixmapButton* deltaButton; + bool _returnMode; bool deltaMode; - + bool _enabled; + void set_mode(); + - public: enum ValType {VAL_TIME, VAL_LEN, VAL_VELON, VAL_VELOFF, VAL_PITCH }; - //NoteInfo(QMainWindow* parent); NoteInfo(QWidget* parent = 0); void setValues(unsigned, int, int, int, int); void setDeltaMode(bool); - + bool isEnabled() const { return _enabled; } + void setReturnMode(bool v); + bool returnMode() const { return _returnMode; } + private slots: void lenChanged(int); void velOnChanged(int); void velOffChanged(int); void pitchChanged(int); void timeChanged(const MusECore::Pos&); + void deltaModeClicked(bool); public slots: void setValue(ValType, int); + void setEnabled(bool); signals: void valueChanged(MusEGui::NoteInfo::ValType, int); + void returnPressed(); + void escapePressed(); + void deltaModeChanged(bool); }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/widgets/pastedialog.cpp muse-2.0/muse/widgets/pastedialog.cpp --- muse-2.0~rc2/muse/widgets/pastedialog.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/pastedialog.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -29,6 +29,12 @@ namespace MusEGui { +int PasteDialog::insert_method = 0; +int PasteDialog::number = 1; +int PasteDialog::raster = 384; +bool PasteDialog::all_in_one_track = 0; +bool PasteDialog::clone = 0; + PasteDialog::PasteDialog(QWidget* parent) : QDialog(parent) { @@ -42,8 +48,6 @@ connect(raster_spinbox, SIGNAL(valueChanged(int)), this, SLOT(raster_changed(int))); connect(n_spinbox, SIGNAL(valueChanged(int)), this, SLOT(number_changed(int))); - - pull_values(); } void PasteDialog::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/pastedialog.h muse-2.0/muse/widgets/pastedialog.h --- muse-2.0~rc2/muse/widgets/pastedialog.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/pastedialog.h 2012-06-30 19:24:43.000000000 +0200 @@ -49,13 +49,13 @@ public: PasteDialog(QWidget* parent = 0); - int insert_method; - int number; - int raster; - bool all_in_one_track; - bool clone; + static int insert_method; + static int number; + static int raster; + static bool all_in_one_track; + static bool clone; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/pasteeventsdialog.cpp muse-2.0/muse/widgets/pasteeventsdialog.cpp --- muse-2.0~rc2/muse/widgets/pasteeventsdialog.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/pasteeventsdialog.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -29,6 +29,13 @@ namespace MusEGui { +int PasteEventsDialog::number = 1; +int PasteEventsDialog::raster = 384; +bool PasteEventsDialog::always_new_part = 0; +bool PasteEventsDialog::never_new_part = 0; +unsigned PasteEventsDialog::max_distance = 3072; +bool PasteEventsDialog::into_single_part = 0; + PasteEventsDialog::PasteEventsDialog(QWidget* parent) : QDialog(parent) { @@ -41,8 +48,6 @@ connect(max_distance_spinbox, SIGNAL(valueChanged(int)), this, SLOT(max_distance_changed(int))); into_single_part_allowed=true; - - pull_values(); } void PasteEventsDialog::pull_values() diff -Nru muse-2.0~rc2/muse/widgets/pasteeventsdialog.h muse-2.0/muse/widgets/pasteeventsdialog.h --- muse-2.0~rc2/muse/widgets/pasteeventsdialog.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/pasteeventsdialog.h 2012-06-30 19:24:42.000000000 +0200 @@ -49,15 +49,15 @@ public: PasteEventsDialog(QWidget* parent = 0); - int number; - int raster; - bool always_new_part; - bool never_new_part; - unsigned max_distance; - bool into_single_part; + static int number; + static int raster; + static bool always_new_part; + static bool never_new_part; + static unsigned max_distance; + static bool into_single_part; bool into_single_part_allowed; - void read_configuration(MusECore::Xml& xml); + static void read_configuration(MusECore::Xml& xml); void write_configuration(int level, MusECore::Xml& xml); diff -Nru muse-2.0~rc2/muse/widgets/pitchedit.cpp muse-2.0/muse/widgets/pitchedit.cpp --- muse-2.0~rc2/muse/widgets/pitchedit.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/pitchedit.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -31,7 +31,7 @@ //--------------------------------------------------------- PitchEdit::PitchEdit(QWidget* parent) - : QSpinBox(parent) + : SpinBox(parent) { setMinimum(0); setMaximum(127); @@ -72,6 +72,9 @@ void PitchEdit::setDeltaMode(bool val) { + if(deltaMode == val) + return; + deltaMode = val; if (deltaMode) setRange(-127, 127); diff -Nru muse-2.0~rc2/muse/widgets/pitchedit.h muse-2.0/muse/widgets/pitchedit.h --- muse-2.0~rc2/muse/widgets/pitchedit.h 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/pitchedit.h 2012-06-30 19:24:43.000000000 +0200 @@ -23,7 +23,7 @@ #ifndef __PITCHEDIT_H__ #define __PITCHEDIT_H__ -#include +#include "spinbox.h" namespace MusEGui { @@ -31,7 +31,7 @@ // PitchEdit //--------------------------------------------------------- -class PitchEdit : public QSpinBox { +class PitchEdit : public SpinBox { Q_OBJECT bool deltaMode; diff -Nru muse-2.0~rc2/muse/widgets/pixmap_button.cpp muse-2.0/muse/widgets/pixmap_button.cpp --- muse-2.0~rc2/muse/widgets/pixmap_button.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/pixmap_button.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -147,8 +147,6 @@ void PixmapButton::mousePressEvent(QMouseEvent* e) { - //if(e->button() != Qt::LeftButton) - // return; if(_checkable) _checked = !_checked; update(); @@ -158,17 +156,20 @@ emit toggled(_checked); //e->setAccepted(true); // This makes menu not close when mouse is released. May be desireable with many small buttons... - QWidget::mousePressEvent(e); + QWidget::mousePressEvent(e); // Hm, need this so menus can close. } void PixmapButton::mouseReleaseEvent(QMouseEvent* e) { - //if(e->button() != Qt::LeftButton) - // return; emit clicked(_checked); //e->setAccepted(true); // This makes menu not close when mouse is released. May be desireable with many small buttons... - QWidget::mouseReleaseEvent(e); + QWidget::mouseReleaseEvent(e); // Hm, need this so menus can close. +} + +void PixmapButton::contextMenuEvent(QContextMenuEvent * e) +{ + e->accept(); } } // MusEGui \ Manca newline alla fine del file diff -Nru muse-2.0~rc2/muse/widgets/pixmap_button.h muse-2.0/muse/widgets/pixmap_button.h --- muse-2.0~rc2/muse/widgets/pixmap_button.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/pixmap_button.h 2012-06-30 19:24:42.000000000 +0200 @@ -58,6 +58,7 @@ virtual void paintEvent(QPaintEvent* ); virtual void mousePressEvent(QMouseEvent* ); virtual void mouseReleaseEvent(QMouseEvent* ); + void contextMenuEvent(QContextMenuEvent*); signals: void clicked(bool checked = false); diff -Nru muse-2.0~rc2/muse/widgets/projectcreateimpl.cpp muse-2.0/muse/widgets/projectcreateimpl.cpp --- muse-2.0~rc2/muse/widgets/projectcreateimpl.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/projectcreateimpl.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -76,7 +76,7 @@ //createFolderCheckbox->setChecked(MusEGlobal::config.projectStoreInFolder && is_new); // Suggest no folder if not new. - connect(templateCheckBox,SIGNAL(clicked()), this, SLOT(templateButtonChanged())); + connect(templateCheckBox,SIGNAL(toggled(bool)), this, SLOT(templateButtonChanged(bool))); //connect(templateCheckBox,SIGNAL(clicked()), this, SLOT(updateDirectoryPath())); connect(projDirToolButton,SIGNAL(clicked()), this, SLOT(browseProjDir())); connect(restorePathButton,SIGNAL(clicked()), this, SLOT(restorePath())); @@ -215,9 +215,10 @@ } } -void ProjectCreateImpl::templateButtonChanged() +void ProjectCreateImpl::templateButtonChanged(bool v) { - restorePathButton->setEnabled(templateCheckBox->isChecked() ? !overrideTemplDirPath.isEmpty() : !overrideDirPath.isEmpty()); + restorePathButton->setEnabled(v ? !overrideTemplDirPath.isEmpty() : !overrideDirPath.isEmpty()); + winStateCheckbox->setChecked(!v); updateDirectoryPath(); } @@ -231,12 +232,18 @@ updateDirectoryPath(); } -/* -bool ProjectCreateImpl::getProjectIsTemplate() const + +bool ProjectCreateImpl::getWriteTopwins() const { - return templateCheckBox->isChecked(); + return winStateCheckbox->isChecked(); } +void ProjectCreateImpl::setWriteTopwins(bool v) +{ + winStateCheckbox->setChecked(v); +} + +/* QString ProjectCreateImpl::getTemplatePath() const { return templDirPath; diff -Nru muse-2.0~rc2/muse/widgets/projectcreateimpl.h muse-2.0/muse/widgets/projectcreateimpl.h --- muse-2.0~rc2/muse/widgets/projectcreateimpl.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/projectcreateimpl.h 2012-06-30 19:24:42.000000000 +0200 @@ -42,7 +42,8 @@ explicit ProjectCreateImpl(QWidget *parent = 0); QString getProjectPath() const; QString getSongInfo() const; - //bool getProjectIsTemplate() const; + bool getWriteTopwins() const; + void setWriteTopwins(bool); //QString getTemplatePath() const; signals: @@ -54,7 +55,7 @@ void ok(); void createProjFolderChanged(); void browseProjDir(); - void templateButtonChanged(); + void templateButtonChanged(bool); void restorePath(); }; diff -Nru muse-2.0~rc2/muse/widgets/projectcreate.ui muse-2.0/muse/widgets/projectcreate.ui --- muse-2.0~rc2/muse/widgets/projectcreate.ui 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/projectcreate.ui 2012-06-30 19:24:43.000000000 +0200 @@ -7,197 +7,208 @@ 0 0 569 - 340 + 378 Create Project - + - + - - - - - Projects folder: - - - - - - - true - - - - - - - ... - - - - + + + Projects folder: + + + + + + + true + + - + + + ... + + + + + + + + + 6 + + + 0 + + + + + Project Name: + + + + + + + Project is a Template + + + + + Qt::Horizontal + + QSizePolicy::Minimum + + + + 60 + 20 + + + + + + + + Write window state + + + true + + + + + + + + + + + + Qt::Horizontal + + + + + + + + + Project song file type: + - - - - - Project Name: - - - - - - - - - - Project is a Template - - - - - - - Qt::Horizontal - - - QSizePolicy::Minimum - - - - 60 - 20 - - - - - - - - - - - - Project song file type: - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - - - - Project Path to song file: - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Create project folder (recommended for audio projects) - - - - - - - - - - - true - - - - - - - ... - - - - - - - ... - - - - - - - - - Song information: - - - - - - - - - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Project Path to song file: + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Create project folder (recommended for audio projects) + + + + + + + + + + + true + + + + + + + ... + + + + + + + ... + + + + + + + + + Song information: + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + - projectNameEdit templateCheckBox projectFileTypeCB createFolderCheckbox diff -Nru muse-2.0~rc2/muse/widgets/routepopup.cpp muse-2.0/muse/widgets/routepopup.cpp --- muse-2.0~rc2/muse/widgets/routepopup.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/routepopup.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -671,7 +671,7 @@ #ifdef _USE_CUSTOM_WIDGET_ACTIONS_ - PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + md->name(), + PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + (md ? md->name() : tr("")), redLedIcon, darkRedLedIcon,MIDI_CHANNELS, chanmask, pup); MusECore::Route srcRoute(i, 0); // Ignore the routing channels - our action holds the channels. //wa->setData(id++); @@ -1331,7 +1331,7 @@ #ifdef _USE_CUSTOM_WIDGET_ACTIONS_ - PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + md->name(), + PixmapButtonsWidgetAction* wa = new PixmapButtonsWidgetAction(QString::number(i + 1) + ":" + (md ? md->name() : tr("")), redLedIcon, darkRedLedIcon, MIDI_CHANNELS, chanmask, this); MusECore::Route srcRoute(i, 0); // Ignore the routing channels - our action holds the channels. //wa->setData(id++); diff -Nru muse-2.0~rc2/muse/widgets/scldraw.cpp muse-2.0/muse/widgets/scldraw.cpp --- muse-2.0~rc2/muse/widgets/scldraw.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/scldraw.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -636,7 +636,7 @@ //------------------------------------------------------------ QRect ScaleDraw::maxBoundingRect(QPainter *p) const { - int i, wl,h,wmax; + int i, wl; //,wmax; int a, ar, amin, amax; double arc; @@ -645,7 +645,6 @@ QFontMetrics fm = p->fontMetrics(); wl = maxLabelWidth(p, TRUE); - h = fm.height(); switch(d_orient) { @@ -722,7 +721,7 @@ r.setBottom(MusECore::qwtInt(d_yCenter - (d_radius + double(d_majLen + d_vpad)) * cos(arc)) + fm.height() ); - wmax = d_len + d_majLen + d_hpad + wl; + //wmax = d_len + d_majLen + d_hpad + wl; DELETETHIS r.setLeft(d_xorg - d_majLen - d_hpad - wl); r.setWidth(d_len + 2*(d_majLen + d_hpad + wl)); diff -Nru muse-2.0~rc2/muse/widgets/sigscale.cpp muse-2.0/muse/widgets/sigscale.cpp --- muse-2.0~rc2/muse/widgets/sigscale.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/sigscale.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -20,7 +20,7 @@ // //========================================================= -#include +#include #include #include @@ -120,7 +120,7 @@ void SigScale::leaveEvent(QEvent*) { -// emit timeChanged(MAXINT); +// emit timeChanged(INT_MAX); } //--------------------------------------------------------- diff -Nru muse-2.0~rc2/muse/widgets/sig_tempo_toolbar.cpp muse-2.0/muse/widgets/sig_tempo_toolbar.cpp --- muse-2.0~rc2/muse/widgets/sig_tempo_toolbar.cpp 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/sig_tempo_toolbar.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,126 @@ +//========================================================= +// MusE +// Linux Music Editor +// sig_tempo_toolbar.cpp +// (C) Copyright 2012 Florian Jung (flo93@users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + + +#include "sig_tempo_toolbar.h" +#include "tempolabel.h" +#include "awl/sigedit.h" +#include "song.h" + +#include +#include + + +namespace MusEGui +{ + TempoToolbarWidget::TempoToolbarWidget(QWidget* p) : QWidget(p) + { + tempo_edit=new MusEGui::TempoEdit(this); + tempo_edit->setToolTip(tr("tempo at current position")); + tempo_edit->setFocusPolicy(Qt::StrongFocus); + + label=new QLabel(tr("Tempo: "),this); + + layout = new QHBoxLayout(this); + layout->setContentsMargins(0,0,0,0); + layout->setSpacing(1); + layout->addWidget(label); + layout->addWidget(tempo_edit); + + connect(MusEGlobal::song, SIGNAL(songChanged(int)), this, SLOT(song_changed(int))); + connect(MusEGlobal::song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(pos_changed(int,unsigned,bool))); + + connect(tempo_edit, SIGNAL(tempoChanged(double)), MusEGlobal::song, SLOT(setTempo(double))); + connect(tempo_edit, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(tempo_edit, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + + song_changed(-1); + } + + void TempoToolbarWidget::pos_changed(int,unsigned,bool) + { + song_changed(SC_TEMPO); + } + + void TempoToolbarWidget::song_changed(int type) + { + if (type & SC_TEMPO) + { + int tempo = MusEGlobal::tempomap.tempo(MusEGlobal::song->cpos()); + tempo_edit->blockSignals(true); + tempo_edit->setValue(double(60000000.0/tempo)); + tempo_edit->blockSignals(false); + } + if (type & SC_MASTER) + { + tempo_edit->setEnabled(MusEGlobal::song->masterFlag()); + label->setEnabled(MusEGlobal::song->masterFlag()); + } + } + + SigToolbarWidget::SigToolbarWidget(QWidget* p) : QWidget(p) + { + sig_edit=new Awl::SigEdit(this); + sig_edit->setFocusPolicy(Qt::StrongFocus); + sig_edit->setValue(AL::TimeSignature(4, 4)); + sig_edit->setToolTip(tr("time signature at current position")); + + label=new QLabel(tr("Signature: "),this); + + layout = new QHBoxLayout(this); + layout->setContentsMargins(0,0,0,0); + layout->setSpacing(1); + layout->addWidget(label); + layout->addWidget(sig_edit); + + connect(MusEGlobal::song, SIGNAL(songChanged(int)), this, SLOT(song_changed(int))); + connect(MusEGlobal::song, SIGNAL(posChanged(int, unsigned, bool)), this, SLOT(pos_changed(int,unsigned,bool))); + + connect(sig_edit, SIGNAL(valueChanged(const AL::TimeSignature&)), MusEGlobal::song, SLOT(setSig(const AL::TimeSignature&))); + connect(sig_edit, SIGNAL(returnPressed()), SIGNAL(returnPressed())); + connect(sig_edit, SIGNAL(escapePressed()), SIGNAL(escapePressed())); + + song_changed(-1); + } + + void SigToolbarWidget::pos_changed(int,unsigned,bool) + { + song_changed(SC_SIG); + } + + void SigToolbarWidget::song_changed(int type) + { + if (type & SC_SIG) + { + int z, n; + AL::sigmap.timesig(MusEGlobal::song->cpos(), z, n); + sig_edit->blockSignals(true); + sig_edit->setValue(AL::TimeSignature(z, n)); + sig_edit->blockSignals(false); + } + if (type & SC_MASTER) + { + sig_edit->setEnabled(MusEGlobal::song->masterFlag()); + label->setEnabled(MusEGlobal::song->masterFlag()); + } + } +} diff -Nru muse-2.0~rc2/muse/widgets/sig_tempo_toolbar.h muse-2.0/muse/widgets/sig_tempo_toolbar.h --- muse-2.0~rc2/muse/widgets/sig_tempo_toolbar.h 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/sig_tempo_toolbar.h 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,83 @@ +//========================================================= +// MusE +// Linux Music Editor +// sig_tempo_toolbar.h +// (C) Copyright 2012 Florian Jung (flo93@users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#ifndef __SIG_TEMPO_TOOLBAR_H__ +#define __SIG_TEMPO_TOOLBAR_H__ + +#include + +namespace Awl +{ + class SigEdit; +} + +class QHBoxLayout; +class QLabel; + +namespace MusEGui +{ + class TempoEdit; + + class SigToolbarWidget : public QWidget + { + Q_OBJECT + + private: + QHBoxLayout* layout; + QLabel* label; + Awl::SigEdit* sig_edit; + + public: + SigToolbarWidget(QWidget* parent); + + signals: + void returnPressed(); + void escapePressed(); + + private slots: + void pos_changed(int,unsigned,bool); + void song_changed(int); + }; + + class TempoToolbarWidget : public QWidget + { + Q_OBJECT + + private: + QHBoxLayout* layout; + QLabel* label; + MusEGui::TempoEdit* tempo_edit; + + public: + TempoToolbarWidget(QWidget* parent); + + signals: + void returnPressed(); + void escapePressed(); + + private slots: + void pos_changed(int,unsigned,bool); + void song_changed(int); + }; +} + +#endif diff -Nru muse-2.0~rc2/muse/widgets/sliderbase.cpp muse-2.0/muse/widgets/sliderbase.cpp --- muse-2.0~rc2/muse/widgets/sliderbase.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/sliderbase.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -118,6 +118,7 @@ setValue(value()-inc); emit sliderMoved(value(), _id); + emit sliderMoved(value(), _id, (bool)(e->modifiers() & Qt::ShiftModifier)); } @@ -184,6 +185,7 @@ d_mouseOffset = 0; DoubleRange::incPages(d_direction); emit sliderMoved(value(), _id); + emit sliderMoved(value(), _id, (bool)(e->modifiers() & Qt::ShiftModifier)); d_tmrID = startTimer(MusECore::qwtMax(250, 2 * d_updTime)); break; @@ -394,6 +396,7 @@ } if (value() != prevValue()) emit sliderMoved(value(), _id); + emit sliderMoved(value(), _id, (bool)(e->modifiers() & Qt::ShiftModifier)); } } @@ -444,7 +447,10 @@ DoubleRange::incPages(d_direction); if (value() != prevValue()) + { emit sliderMoved(value(), _id); + emit sliderMoved(value(), _id, false); + } if (!d_timerTick) { @@ -456,7 +462,10 @@ DoubleRange::fitValue(value() + double(d_direction) * inc); if (value() != prevValue()) + { emit sliderMoved(value(), _id); + emit sliderMoved(value(), _id, false); + } if (!d_timerTick) { @@ -620,6 +629,7 @@ { DoubleRange::incPages(pages); emit sliderMoved(value(), _id); + emit sliderMoved(value(), _id, false); } @@ -722,7 +732,7 @@ // slider with the mouse. // //.u Syntax -//.f void SliderBase::sliderMoved(double value, int _id) +//.f void SliderBase::sliderMoved(double value, int _id [, bool shift]) // //.u Parameters //.p double value -- new value diff -Nru muse-2.0~rc2/muse/widgets/sliderbase.h muse-2.0/muse/widgets/sliderbase.h --- muse-2.0~rc2/muse/widgets/sliderbase.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/sliderbase.h 2012-06-30 19:24:43.000000000 +0200 @@ -86,6 +86,7 @@ void sliderPressed(int id); void sliderReleased(int id); void sliderMoved(double value, int id); + void sliderMoved(double value, int id, bool shift); void sliderRightClicked(const QPoint &p, int id); public: diff -Nru muse-2.0~rc2/muse/widgets/songpos_toolbar.cpp muse-2.0/muse/widgets/songpos_toolbar.cpp --- muse-2.0~rc2/muse/widgets/songpos_toolbar.cpp 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/songpos_toolbar.cpp 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,69 @@ +//========================================================= +// MusE +// Linux Music Editor +// songpos_toolbar.cpp +// (C) Copyright 2012 Florian Jung (flo93@users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + + +#include "songpos_toolbar.h" +#include "song.h" +#include +#include + +namespace MusEGui +{ + SongPosToolbarWidget::SongPosToolbarWidget(QWidget* p) + : MTScale(&_raster, p, -100 /* some random scale, will be overwritten immediately */) + { + _raster=0; + setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); + connect(MusEGlobal::song, SIGNAL(songChanged(int)), this, SLOT(song_changed(int))); + song_changed(0); + } + + void SongPosToolbarWidget::song_changed(int) + { + if (width()!=0) + setXMag(-(MusEGlobal::song->len()/width())); + } + + QSize SongPosToolbarWidget::sizeHint() const + { + return QSize(100, minimumSize().height()); + } + + void SongPosToolbarWidget::resizeEvent(QResizeEvent* ev) + { + song_changed(0); + MTScale::resizeEvent(ev); + } + void SongPosToolbarWidget::paintEvent(QPaintEvent* ev) + { + View::paintEvent(ev); + QPainter p; + p.begin(this); + p.setPen(Qt::darkGray); + p.drawRect(0, 0, width()-1, height()-1); + p.setPen(Qt::lightGray); + p.drawRect(1, 1, width()-1, height()-1); + p.end(); + } + + +} diff -Nru muse-2.0~rc2/muse/widgets/songpos_toolbar.h muse-2.0/muse/widgets/songpos_toolbar.h --- muse-2.0~rc2/muse/widgets/songpos_toolbar.h 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/muse/widgets/songpos_toolbar.h 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,51 @@ +//========================================================= +// MusE +// Linux Music Editor +// songpos_toolbar.h +// (C) Copyright 2012 Florian Jung (flo93@users.sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#ifndef __SONGPOS_TOOLBAR_H__ +#define __SONGPOS_TOOLBAR_H__ + +#include "mtscale.h" + +namespace MusEGui +{ + class SongPosToolbarWidget : public MTScale + { + Q_OBJECT + + private: + int _raster; + protected: + virtual void paintEvent(QPaintEvent* ev); + + public: + SongPosToolbarWidget(QWidget* parent); + + virtual QSize sizeHint() const; + virtual void resizeEvent(QResizeEvent*); + + private slots: + void song_changed(int); + + }; +} + +#endif diff -Nru muse-2.0~rc2/muse/widgets/spinbox.cpp muse-2.0/muse/widgets/spinbox.cpp --- muse-2.0~rc2/muse/widgets/spinbox.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/spinbox.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -22,10 +22,28 @@ #include #include +#include +#include #include "spinbox.h" namespace MusEGui { +void SpinBoxLineEdit::mouseDoubleClickEvent(QMouseEvent* e) +{ + QLineEdit::mouseDoubleClickEvent(e); + emit doubleClicked(); + if((e->buttons() & Qt::LeftButton) && (e->modifiers() & Qt::ControlModifier)) + emit ctrlDoubleClicked(); +} + +//void SpinBoxLineEdit::mousePressEvent(QMouseEvent* e) +//{ +// QLineEdit::mousePressEvent(e); + //selectAll(); +// if((e->buttons() & Qt::LeftButton) && (e->modifiers() & Qt::ControlModifier)) +// emit ctrlClicked(); +//} + //--------------------------------------------------------- // SpinBox //--------------------------------------------------------- @@ -33,85 +51,61 @@ SpinBox::SpinBox(QWidget* parent) : QSpinBox(parent) { - _clearFocus = true; + _returnMode = false; + SpinBoxLineEdit* le = new SpinBoxLineEdit(this); + setLineEdit(le); + setKeyboardTracking(false); + + connect(le, SIGNAL(doubleClicked()), this, SIGNAL(doubleClicked())); + connect(le, SIGNAL(ctrlDoubleClicked()), this, SIGNAL(ctrlDoubleClicked())); + //connect(le, SIGNAL(ctrlClicked()), this, SIGNAL(ctrlClicked())); } SpinBox::SpinBox(int minValue, int maxValue, int step, QWidget* parent) : QSpinBox(parent) { + _returnMode = false; + SpinBoxLineEdit* le = new SpinBoxLineEdit(this); + setLineEdit(le); setRange(minValue, maxValue); setSingleStep(step); - _clearFocus = true; -} - -bool SpinBox::eventFilter(QObject* o, QEvent* ev) -{ - // if (o != (QObject*)editor()) ddskrjo can't find editor() - // return QSpinBox::eventFilter(o,ev); - - bool retval = FALSE; - if(ev->type() == QEvent::KeyPress) - { - QKeyEvent* k = (QKeyEvent*)ev; - if(k->key() == Qt::Key_Up || k->key() == Qt::Key_Down) - { - // stepUp/stepDown will be called. Set this now. - _clearFocus = false; - } - else if (k->key() == Qt::Key_Enter || k->key() == Qt::Key_Return) - { - // With this line, two enter presses after an edit will clear focus. - // Without, just one enter press clears the focus. - //if(!editor()->isModified()) - { - clearFocus(); - return TRUE; - } - } - } - else - if(ev->type() == QEvent::MouseButtonDblClick) - { - emit doubleClicked(); - return TRUE; - } - - retval = QSpinBox::eventFilter(o, ev); - - return retval; -} + setKeyboardTracking(false); -void SpinBox::stepUp() -{ - QSpinBox::stepUp(); - if(_clearFocus) - clearFocus(); - else - _clearFocus = true; -} - -void SpinBox::stepDown() -{ - QSpinBox::stepDown(); - if(_clearFocus) - clearFocus(); - else - _clearFocus = true; + connect(le, SIGNAL(doubleClicked()), this, SIGNAL(doubleClicked())); + connect(le, SIGNAL(ctrlDoubleClicked()), this, SIGNAL(ctrlDoubleClicked())); + //connect(le, SIGNAL(ctrlClicked()), this, SIGNAL(ctrlClicked())); } void SpinBox::keyPressEvent(QKeyEvent* ev) { switch (ev->key()) { case Qt::Key_Return: - clearFocus(); - //emit returnPressed(); - // return; - break; + { + bool mod = lineEdit()->isModified(); + QSpinBox::keyPressEvent(ev); + if(_returnMode && !mod) // Force valueChanged if return mode set, even if not modified. + emit valueChanged(value()); + emit returnPressed(); + } + return; + break; + case Qt::Key_Escape: + emit escapePressed(); + return; + break; default: - break; + break; } QSpinBox::keyPressEvent(ev); } +void SpinBox::wheelEvent(QWheelEvent* e) +{ + QSpinBox::wheelEvent(e); + // Need this because Qt doesn't deselect the text if not focused. + if(!hasFocus() && lineEdit()) + lineEdit()->deselect(); +} + } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/widgets/spinbox.h muse-2.0/muse/widgets/spinbox.h --- muse-2.0~rc2/muse/widgets/spinbox.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/spinbox.h 2012-06-30 19:24:43.000000000 +0200 @@ -24,14 +24,43 @@ // Click up/down, or mousewheel, or hit enter with un-modified text (which means enter TWICE for modified text), // and the control will give up focus, thereby allowing you to use global shortcut keys afterwards. // Up/down keys still keep the focus. +// +// < Old. That was the SpinBox behaviour in MusE1 (Qt3). They are still desirable goals for MusE2 (Qt4). +// < Flaw: Calling clearFocus() means nothing has focus, not canvases, not even the active top level window. We want canvases to have it. +// < That requires (here in MusE2) setting top win focus proxies and using Application::focusChanged() to redirect focus to the +// < active window's proxy. +// < Very ugly. And with MDI, even more complicated to give focus back to current sub-window. Tried, was crash-prone. +// < Also, toolbars can be floated, so calling clearFocus() from a SpinBox on a floating toolbar means nothing has focus but the +// < toolbar itself is the active window, which requires setting a focus proxy on the toolbar so that Application::focusChanged() +// < can figure out who to give the focus to! +// < It seems we will have to use signals/slots instead of clearFocus()... +// < Flaw: Clearing focus when up/down clicked (when stepBy() is called), auto-repeat might not work because the control has lost focus. + #ifndef __SPINBOX_H__ #define __SPINBOX_H__ #include -#include +#include namespace MusEGui { +class SpinBoxLineEdit : public QLineEdit +{ + Q_OBJECT + + protected: + virtual void mouseDoubleClickEvent(QMouseEvent* e); + //virtual void mousePressEvent(QMouseEvent* e); + + signals: + void doubleClicked(); + void ctrlDoubleClicked(); + //void ctrlClicked(); + + public: + SpinBoxLineEdit(QWidget* parent = 0) : QLineEdit(parent) {}; +}; + //--------------------------------------------------------- // SpinBox //--------------------------------------------------------- @@ -39,22 +68,24 @@ class SpinBox : public QSpinBox { Q_OBJECT - bool _clearFocus; - + bool _returnMode; + protected: - bool eventFilter(QObject* obj, QEvent* ev); virtual void keyPressEvent(QKeyEvent*); + virtual void wheelEvent(QWheelEvent*); - public slots: - virtual void stepUp(); - virtual void stepDown(); - signals: void doubleClicked(); + void ctrlDoubleClicked(); + //void ctrlClicked(); + void returnPressed(); + void escapePressed(); public: SpinBox(QWidget* parent=0); SpinBox(int minValue, int maxValue, int step = 1, QWidget* parent=0); + void setReturnMode(bool v) { _returnMode = v; } + bool returnMode() const { return _returnMode; } }; } // namespace MusEGui diff -Nru muse-2.0~rc2/muse/widgets/tb1.cpp muse-2.0/muse/widgets/tb1.cpp --- muse-2.0~rc2/muse/widgets/tb1.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/tb1.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -21,7 +21,7 @@ //========================================================= #include -#include +#include #include #include @@ -69,6 +69,7 @@ solo = new QToolButton(); solo->setText(tr("Solo")); solo->setCheckable(true); + solo->setFocusPolicy(Qt::NoFocus); addWidget(solo); //--------------------------------------------------- @@ -80,12 +81,12 @@ label->setIndent(3); addWidget(label); pos = new PosLabel(0, "pos"); - pos->setFixedHeight(22); + ///pos->setFixedHeight(22); addWidget(pos); if (showPitch) { pitch = new PitchLabel(0); pitch->setEnabled(false); - pitch->setFixedHeight(22); + ///pitch->setFixedHeight(22); addWidget(pitch); } @@ -94,6 +95,7 @@ //--------------------------------------------------- raster = new LabelCombo(tr("Snap"), 0); + raster->setFocusPolicy(Qt::TabFocus); rlist = new QTableWidget(10, 3); rlist->verticalHeader()->setDefaultSectionSize(22); @@ -115,7 +117,7 @@ addWidget(raster); // FIXME: Not working right. - raster->setFixedHeight(38); + ///raster->setFixedHeight(38); connect(raster, SIGNAL(activated(int)), SLOT(_rasterChanged(int))); connect(solo, SIGNAL(toggled(bool)), SIGNAL(soloChanged(bool))); @@ -130,6 +132,7 @@ //void Toolbar1::_rasterChanged(int r, int c) { emit rasterChanged(rasterTable[rlist->currentRow() + rlist->currentColumn() * 10]); + //parentWidget()->setFocus(); //emit rasterChanged(rasterTable[r + c * 10]); } @@ -164,7 +167,7 @@ //printf("NOT visible\n"); return; } - if (val == MAXINT) + if (val == INT_MAX) pos->setEnabled(false); else { pos->setEnabled(true); diff -Nru muse-2.0~rc2/muse/widgets/tempolabel.cpp muse-2.0/muse/widgets/tempolabel.cpp --- muse-2.0~rc2/muse/widgets/tempolabel.cpp 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/tempolabel.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -80,7 +80,7 @@ //--------------------------------------------------------- TempoEdit::TempoEdit(QWidget* parent) - : QDoubleSpinBox(parent) + : DoubleSpinBox(parent) { curVal = -1.0; setSingleStep(1.0); diff -Nru muse-2.0~rc2/muse/widgets/tempolabel.h muse-2.0/muse/widgets/tempolabel.h --- muse-2.0~rc2/muse/widgets/tempolabel.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/tempolabel.h 2012-06-30 19:24:43.000000000 +0200 @@ -24,7 +24,7 @@ #define __TEMPOLABEL_H__ #include -#include +#include "doublespinbox.h" namespace MusEGui { @@ -54,7 +54,7 @@ // TempoEdit //--------------------------------------------------------- -class TempoEdit : public QDoubleSpinBox { +class TempoEdit : public DoubleSpinBox { Q_OBJECT double curVal; diff -Nru muse-2.0~rc2/muse/widgets/tracks_duplicate_base.ui muse-2.0/muse/widgets/tracks_duplicate_base.ui --- muse-2.0~rc2/muse/widgets/tracks_duplicate_base.ui 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/tracks_duplicate_base.ui 2012-06-30 19:24:43.000000000 +0200 @@ -6,7 +6,7 @@ 0 0 - 231 + 238 261 @@ -112,6 +112,9 @@ + + false + Copy effects rack plugins diff -Nru muse-2.0~rc2/muse/widgets/utils.cpp muse-2.0/muse/widgets/utils.cpp --- muse-2.0~rc2/muse/widgets/utils.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/widgets/utils.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -37,6 +37,8 @@ #include #include +#include "audio.h" +#include "audiodev.h" #include "part.h" #include "utils.h" #include "xml.h" @@ -49,12 +51,22 @@ double curTime() { - struct timeval t; - gettimeofday(&t, 0); - //printf("%ld %ld\n", t.tv_sec, t.tv_usec); // Note I observed values coming out of order! Causing some problems. - return (double)((double)t.tv_sec + (t.tv_usec / 1000000.0)); + // No audio device yet? Just get wall clock time. + if(!MusEGlobal::audioDevice) + { + struct timeval t; + gettimeofday(&t, 0); + //printf("%ld %ld\n", t.tv_sec, t.tv_usec); // Note I observed values coming out of order! Causing some problems. + return (double)((double)t.tv_sec + (t.tv_usec / 1000000.0)); + } + + // Ask the driver for the system time. + // May depend on selected clock source. + // With Jack, may be based upon wallclock time, the + // processor cycle counter or the HPET clock etc. + return MusEGlobal::audioDevice->systemTime(); + /* - // Changed by Tim. p4.0.23 struct timespec t; //clock_gettime(CLOCK_MONOTONIC, &t); //clock_gettime(CLOCK_MONOTONIC_RAW, &t); diff -Nru muse-2.0~rc2/muse/widgets/utils.h muse-2.0/muse/widgets/utils.h --- muse-2.0~rc2/muse/widgets/utils.h 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/muse/widgets/utils.h 2012-06-30 19:24:43.000000000 +0200 @@ -23,6 +23,9 @@ #ifndef __UTILS_H__ #define __UTILS_H__ +#define MAX(a,b) (((a)>(b))?(a):(b)) +#define MIN(a,b) (((a)<(b))?(a):(b)) + class QFrame; class QString; class QWidget; diff -Nru muse-2.0~rc2/muse/xml.cpp muse-2.0/muse/xml.cpp --- muse-2.0~rc2/muse/xml.cpp 2012-01-06 20:45:37.000000000 +0100 +++ muse-2.0/muse/xml.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -114,11 +114,9 @@ void Xml::token(int cc) { - //char buffer[512]; QByteArray buffer; int i = 0; - //for (; i < 511;) { for (; i < 9999999;) { // Stop at a reasonably large amount 10 million. if (c == ' ' || c == '\t' || c == cc || c == '\n' || c == EOF) break; @@ -136,7 +134,6 @@ void Xml::stoken() { - //char buffer[1024*4]; QByteArray buffer; int i = 0; @@ -144,7 +141,6 @@ ++i; next(); - //for (;i < 1024*4-1;) { for (;i < 10000000*4-1;) { // Stop at a reasonably large amount 10 million. if (c == '"') { buffer[i++] = c; @@ -216,8 +212,6 @@ Xml::Token Xml::parse() { - //char buffer[1024*1024]; // increase buffer -rj - //char* p; QByteArray buffer; int idx = 0; @@ -273,21 +267,17 @@ } if (c == '?') { next(); - //p = buffer; - //p = buffer.data(); idx = 0; for (;;) { if (c == '?' || c == EOF || c == '>') break; - //*p++ = c; buffer[idx++] = c; // TODO: check overflow next(); } - //*p = 0; buffer[idx] = 0; _s1 = QString(buffer); @@ -317,21 +307,17 @@ } goto again; } - //p = buffer; - //p = buffer.data(); idx = 0; for (;;) { if (c == '/' || c == ' ' || c == '\t' || c == '>' || c == '\n' || c == EOF) break; // TODO: check overflow - //*p++ = c; buffer[idx++] = c; next(); } - //*p = 0; buffer[idx] = 0; _s1 = QString(buffer); @@ -382,8 +368,6 @@ fprintf(stderr, "XML: level = 0\n"); goto error; } - //p = buffer; - //p = buffer.data(); idx = 0; for (;;) { if (c == EOF || c == '<') @@ -391,32 +375,24 @@ if (c == '&') { next(); if (c == '<') { // be tolerant with old muse files - - //*p++ = '&'; buffer[idx++] = '&'; continue; } - //char name[32]; - //char* dp = name; QByteArray name; int name_idx = 0; - //*dp++ = c; name[name_idx++] = c; - //for (; dp-name < 31;) { for (; name_idx < 9999999;) { // Stop at a reasonably large amount 10 million. next(); if (c == ';') break; - //*dp++ = c; name[name_idx++] = c; } - //*dp = 0; name[name_idx] = 0; if (strcmp(name, "lt") == 0) @@ -432,14 +408,12 @@ else c = '?'; } - - //*p++ = c; + buffer[idx++] = c; next(); } - //*p = 0; buffer[idx] = 0; _s1 = QString(buffer); diff -Nru muse-2.0~rc2/pch.txt muse-2.0/pch.txt --- muse-2.0~rc2/pch.txt 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/pch.txt 2012-06-30 19:24:43.000000000 +0200 @@ -32,6 +32,8 @@ WORKING_DIRECTORY ${PROJECT_BINARY_DIR} ) +# Disable precompilation of this header file for now since it is empty - Orcan 2012-05-20 +if(0) add_custom_command( OUTPUT ${PROJECT_BINARY_DIR}/all.h.pch COMMAND ${CMAKE_CXX_COMPILER} @@ -58,6 +60,7 @@ DEPENDS ${PROJECT_BINARY_DIR}/all-pic.h WORKING_DIRECTORY ${PROJECT_BINARY_DIR} ) +endif(0) set_source_files_properties( ${PROJECT_BINARY_DIR}/all.h diff -Nru muse-2.0~rc2/README muse-2.0/README --- muse-2.0~rc2/README 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/README 2012-06-30 19:24:42.000000000 +0200 @@ -28,7 +28,9 @@ http://qt.nokia.com/products/ MusE does _not_ compile with older versions - - gcc >= 4.x.x + - gcc >= 4.x.x or clang >= 2.9 + http://gcc.gnu.org/ + http://clang.llvm.org/ - libsndfile >= 1.0.1 http://www.mega-nerd.com/libsndfile/ @@ -37,7 +39,7 @@ http://www.mega-nerd.com/SRC/ - JACK >= 0.103 - http://jackit.sourceforge.net/download/ + http://jackaudio.org/ - libuuid e2fsprogs package http://e2fsprogs.sourceforge.net/ @@ -46,7 +48,7 @@ Optional: - fluidsynth >= 1.0.3 (formerly known as iiwusynth) from - http://savannah.nongnu.org/download/fluid + http://sourceforge.net/apps/trac/fluidsynth/ - liblo Lightweight OSC (Open Sound Control) http://liblo.sourceforge.net/ - DSSI Disposable Soft Synth Interface. http://dssi.sourceforge.net/ @@ -97,7 +99,8 @@ -------------- There are a few different ways to configure (notice the two dots): - Type "cmake -i .." to run in step-by-step 'Wizard' mode. + Type "cmake -i .." to run in step-by-step 'Wizard' mode, this is the RECOMMENDED way to + setup the build environment. Or type "cmake -L .." to see options, then compose "cmake " yourself. Some are: @@ -208,6 +211,9 @@ ============================= - not so many: only some usability quirks we're working on currently + - automation recording displays odd things in the arranger + while recording; the display is corrected once recording is + complete. ==================================================================== Let us know whether MusE works for you !!! diff -Nru muse-2.0~rc2/README.de muse-2.0/README.de --- muse-2.0~rc2/README.de 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/README.de 2012-06-30 19:24:42.000000000 +0200 @@ -11,7 +11,7 @@ ,-----------------------------------------------------------------. | HINWEIS | |-----------------------------------------------------------------| -| Viel Teile des Codes von MusE sind EXPERIMENTELL und können | +| Viele Teile des Codes von MusE sind EXPERIMENTELL und können | | zu Programmabstürzen und wer weiß was sonst noch allem | | führen. | | SIE BENUTZEN DIESE SOFTWARE AUF EIGENES RISIKO! | @@ -26,27 +26,39 @@ - qt 4.2.0 oder neuer ftp://ftp.trolltech.com/qt/source - MsE kompiliert nicht mit alter versionen + MsE kompiliert nicht mit älteren Versionen! + + - gcc >= 4.x.x oder clang >= 2.9 + http://gcc.gnu.org/ + http://clang.llvm.org/ - libsndfile >= 1.0.1 - http://www.mega-nerd.com/libsndfile/ + http://www.mega-nerd.com/libsndfile/ + + - libsamplerate + http://www.mega-nerd.com/SRC/ - JACK >= 0.103 - http://jackit.sourceforge.net/ - download: - http://jackit.sourceforge.net/download/ + http://jackaudio.org/ + + - libuuid + e2fsprogs Paket http://e2fsprogs.sourceforge.net/ + Einige Distros bieten das eventuell in einem anderen Paket an. - - fluidsynth-1.0.3 (die synti früher bekannt als "iiwusynth") von - http://savannah.nongnu.org/download/fluid + Optional: - - Linux Kernel mit rtc (RealTimeClock) Treiber (device /dev/rtc) - ("low latency patches" für minimales timing-jitter wären fein) + - fluidsynth >= 1.0.3 (formerly known as iiwusynth) from + http://sourceforge.net/apps/trac/fluidsynth/ - - ALSA von http://www.alsa-project.org/ - Version 0.9.x oder neuer + - liblo Lightweight OSC (Open Sound Control) http://liblo.sourceforge.net/ + - DSSI Disposable Soft Synth Interface. http://dssi.sourceforge.net/ + (Both recommended - DSSI alone will have no native GUIs, OSC alone does nothing, for now.) - - gcc >= 4.x.x + - dssi-vst Unterstützung für DSSI vst plugins http://www.breakfastquay.com/dssi-vst/ + - LASH Audio Session Handler http://lash.nongnu.org/ + Seit neuerem kann LADISH es auch emulieren http://ladish.org/ + - natürlich: eine Soundkarte und/oder irgendwelche Midi Geräte ============================= diff -Nru muse-2.0~rc2/share/CMakeLists.txt muse-2.0/share/CMakeLists.txt --- muse-2.0~rc2/share/CMakeLists.txt 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/CMakeLists.txt 2012-06-30 19:24:42.000000000 +0200 @@ -36,6 +36,8 @@ locale ) +install (FILES didyouknow.txt DESTINATION ${MusE_SHARE_DIR} ) + # We don't have a splash image for MusE2 yet. When we do, the # following line can be uncommented: -#install (FILES splash.png DESTINATION ${MusE_SHARE_DIR} ) +install (FILES splash.png DESTINATION ${MusE_SHARE_DIR} ) diff -Nru muse-2.0~rc2/share/didyouknow.txt muse-2.0/share/didyouknow.txt --- muse-2.0~rc2/share/didyouknow.txt 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/share/didyouknow.txt 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,4 @@ +To get started with MusE why don't you visit the tutorials at
http://muse-sequencer.org +MusE can add effects in realtime for audio tracks,
check the effect rack on the mixer strip +For routing and selection dialogs that allow multiple selections
use ctrl when clicking to keep the dialog open +What are you waiting for? Make music! :) diff -Nru muse-2.0~rc2/share/instruments/KORG microSTATION combinations.idf muse-2.0/share/instruments/KORG microSTATION combinations.idf --- muse-2.0~rc2/share/instruments/KORG microSTATION combinations.idf 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/share/instruments/KORG microSTATION combinations.idf 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,278 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru muse-2.0~rc2/share/instruments/KORG microSTATION.idf muse-2.0/share/instruments/KORG microSTATION.idf --- muse-2.0~rc2/share/instruments/KORG microSTATION.idf 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/share/instruments/KORG microSTATION.idf 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,666 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff -Nru muse-2.0~rc2/share/locale/muse_cs.ts muse-2.0/share/locale/muse_cs.ts --- muse-2.0~rc2/share/locale/muse_cs.ts 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/share/locale/muse_cs.ts 2012-06-30 19:24:42.000000000 +0200 @@ -0,0 +1,14683 @@ + + + + + @default + + + Add Midi Track + Vytvořit stopu MIDI + + + + Add Drum Track + Vytvořit stopu bicích + + + + Add Wave Track + Vytvořit stopu Wave + + + + Add Audio Output + Vytvořit výstup zvuku + + + + Add Audio Group + Vytvořit skupinu zvuku + + + + Add Audio Input + Vytvořit vstup zvuku + + + + Add Aux Send + Vytvořit Aux Send + + + + Add Synth + Přidat syntetizátor + + + + Select project directory + Vybrat projektový adresář + + + + Warning: No output devices! + Varování: Žádná výstupní zařízení! + + + + Open midi config... + Otevřít nastavení MIDI... + + + + Empty ports + Prázdné přípojky + + + + <none> + <Žádný> + + + + Route + Tok signálu + + + + channelMask="%1" + KanalMaske="%1" + + + + dest + Cíl + + + + name="%1"/ + Název="%1" + + + + Bad timing + Špatné načasování + + + + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + Kmitočet zdroje časování je %1hz, což je pod doporučeným minimem: 500hz! +To by u MIDI mohlo vést až ke slyšitelným problémům s časováním. +Podívejte se, prosím, na často kladené otázky na stránkách http://muse-sequencer.org na řešení. +Také se, prosím, podívejte na výstup konzole kvůli jakýmkoli dalším chybovým hláškám. + + + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages + + Kmitočet zdroje časování je %1hz, což je pod doporučeným minimem: 500hz! +To by u MIDI mohlo vést až ke slyšitelným problémům s časováním. +Podívejte se, prosím, na často kladené otázky na stránkách http://muse-sequencer.org na řešení. +Také se, prosím, podívejte na výstup konzole kvůli jakýmkoli dalším chybovým hláškám + + + + AboutBox + + + AboutBox + O programu + + + Version 2 pre-alpha + Verze 2 + + + (C) Copyright 1999-2010 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + (C) Autorské právo 1999-2010 Werner Schweer a další. +Podívejte se na stránky http://www.muse-sequencer.org na nové verze a +kvůli více informacím. + +Zveřejněno pod GNU Public License + + + + Version 2 + Verze 2 + + + + (C) Copyright 1999-2012 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + (C) Autorské právo 1999-2012 Werner Schweer a další. +Podívejte se na stránky http://www.muse-sequencer.org na nové verze a +kvůli více informacím. + +Zveřejněno pod GNU Public License + + + + &Keep On Rocking! + &Zůstávejte ve spojení! + + + + Alt+K + Alt+K + + + + AppearanceDialogBase + + + MusE: Appearance settings + MusE: Nastavení vzhledu + + + + Arranger + Aranžér + + + + Parts + Části + + + + show names + Ukázat názvy + + + + show events + Ukázat události + + + + show Cakewalk Style + Ukázat styl Cakewalk + + + + y-stretch + Pás y + + + + Events + Události + + + + note on + Nota zapnuta + + + + poly pressure + Vícenásobné stisknutí tlačítka + + + + controller + Ovladač + + + + aftertouch + Dodělávka po + + + + pitch bend + Ohyb výšky tónu + + + + program change + Změna programu + + + + special + Zvláštní + + + + Background picture + Obrázek pozadí + + + + add + Přidat + + + + remove + Odstranit + + + + clear + Smazat + + + + show snap grid + Ukázat magnetickou mřížku + + + + Colors + Barvy + + + + Items + Položky + + + + Palette + Paleta + + + + add to palette + Přidat do palety + + + + B + B + + + + S + S + + + + H + H + + + + V + V + + + + G + G + + + + R + L + + + + Color name: + Název barvy: + + + + Global opacity + Celková neprůhlednost + + + + Style/Fonts + Styl a písmo + + + + QT Theme + Podoba Qt + + + + Windows + Windows + + + + MusE + MusE + + + + Metal + Kov + + + + Norwegian Wood + Norské dřevo + + + + Platinum + Platina + + + + CDE + CDE + + + + Motif + Motif + + + + Motif Plus + Motif Plus + + + + May require restarting MusE for best results + Může vyžadovat opětovné spuštění MusE kvůli nejlepší m výsledkům + + + + Style Sheet: + Styl: + + + + + + + + + + + + ... + ... + + + + Fonts + Písma + + + + Family + Písmová rodina + + + + Size + Velikost + + + + Font 1 + Písmo 1 + + + + Font 2 + Písmo 2 + + + + Font 3 + Písmo 3 + + + + Font 0 + Písmo 0 + + + + + + + + + + Bold + Tučné + + + + + + + + + + Italic + Kurzíva + + + + Font 4 + Písmo 4 + + + + Font 5 + Písmo 5 + + + + Font 6 + Písmo 6 + + + + Apply + Použít + + + + Ok + OK + + + + Cancel + Zrušit + + + + ArrangerColumnsBase + + + Configure arranger columns + Nastavit sloupce aranžéru + + + + Columns: + Sloupce: + + + + Name: + Název: + + + + Controller type: + Typ ovladače: + + + + + Midi controller type + Typ ovladače MIDI + + + + Control7 + Ovladač 7 + + + + Control14 + Ovladač 14 + + + + RPN + RPN + + + + NRPN + NRPN + + + + RPN14 + RPN14 + + + + NRPN14 + NRPN14 + + + + Pitch + Výška tónu + + + + Program + Program + + + + H-Ctrl + H-Ctrl + + + + + Midi controller number high byte + Vysoké bajtové číslo ovladače MIDI + + + + L-Ctrl + L-Ctrl + + + + + Midi controller number low byte + Nízké bajtové číslo ovladače MIDI + + + + * + wild card + * + + + + affect CCs at + Ovlivnit CCs při + + + + begin of song + Začátek písně + + + + current position + Nynější poloha + + + + &Add + &Přidat + + + + &Delete + S&mazat + + + + Done + Hotovo + + + + Awl::MidiVolEntry + + + off + Vypnuto + + + + db + dB + + + + Awl::VolEntry + + + off + Vypnuto + + + + ClipListEditorBase + + + MusE: ClipList + MusE: Seznam ukázek + + + + Name + Název + + + + Refs + Odkazy + + + + Samplerate + Vzorkovací kmitočet + + + + Len + Délka + + + + Data + Data + + + + Clip Properties + Vlastnosti ukázek + + + + Pos: + Poloha: + + + + Len: + Délka: + + + + CommentBase + + + Form1 + Formulář 1 + + + + Track Comment + Poznámka ke stopě + + + + Track 1 + Stopa 1 + + + + ConfigMidiFileBase + + + MusE: Config Midi File Import/Export + MusE: Nastavení zavedení/vyvedení souboru MIDI + + + + Import: + Zavést: + + + + Split tracks into parts, or one single part + Rozdělit stopy na části, nebo jednu jedinou část + + + + Split tracks into &parts + Rozdělit stopy na čá&sti + + + + Alt+P + Alt+P + + + + Export: + Vyvést: + + + + 96 + 96 + + + + 192 + 192 + + + + 384 + 384 + + + + Enable extended smf format (currently not implemented) + Povolit rozšířený formát smf (v současnosti neprovedeno) + + + + Use &2-byte time signatures instead of standard 4 + Použít &2-bajtová taktová označení namísto obvyklých 4 + + + + Alt+2 + Alt+2 + + + + Copyright: + Autorské právo: + + + + Format: + Formát: + + + + Note: Format 0 uses the FIRST midi track's name/comment in the arranger + Poznámka: Formát 0 používá název/poznámku PRVNÍ stopy MIDI v aranžéru + + + + Division: + Rozdělení: + + + + Save space by replacing note-offs with &zero velocity note-ons + Ušetřit místo nahrazením vypnutí not zapnutím not o &nulové síle nárazu + + + + Alt+Z + Alt+Z + + + + 0 (single track) + 0 (jedna stopa) + + + + 1 (multiple tracks) + 1 (více stop) + + + + &OK + &OK + + + + &Cancel + Z&rušit + + + + CrescendoBase + + + MusE: Crescendo/Decrescendo + MusE: Crescendo/Decrescendo + + + + Range + Rozsah + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Values + Hodnoty + + + + Start velocity + Počáteční síla nárazu + + + + + % + % + + + + End velocity + Koncová síla nárazu + + + + Absolute + Absolutní + + + + Relative + Poměrná + + + + OK + OK + + + + Cancel + Zrušit + + + + DeicsOnzeGui + + + Save configuration + Uložit nastavení + + + + + + + + + + + + + Critical Error + Vážná chyba + + + + + + + + Cannot open file %1 + Nelze otevřít soubor %1 + + + + + + + + Parsing error for file %1 + Chyba při zpracování u souboru %1 + + + + + Load category dialog + Nahrát dialog skupiny + + + + Load set dialog + Nahrát dialog nastavení + + + + Save set dialog + Uložit dialog nastavení + + + + New category + Nová skupina + + + + + Delete category + Smazat skupinu + + + + Load category + Nahrát skupinu + + + + Save category + Uložit skupinu + + + + Load set + Nahrát nastavení + + + + Save set + Uložit nastavení + + + + Delete set + Smazat nastavení + + + + New subcategory + Nová podskupina + + + + + Delete subcategory + Smazat podskupinu + + + + Load subcategory + Nahrát podskupinu + + + + Save subcategory + Uložit podskupinu + + + + New preset + Nové přednastavení + + + + + Delete preset + Smazat přednastavení + + + + Load preset + Nahrát přednastavení + + + + Save preset + Uložit přednastavení + + + + No more category supported + Žádná další skupina není podporována + + + + You can not add more categories + Nelze přidat více skupin + + + + + + Do you really want to delete %1 ? + Opravdu chcete smazat %1? + + + + + + &Yes + &Ano + + + + + + &No + &Ne + + + + + No category selected + Nevybrána žádná skupina + + + + + You must first select a category. + Nejprve musíte vybrat skupinu. + + + + + + Replace or add + Nahradit nebo přidat + + + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + Předpokládá se, že %1 bude ovlivněn k vysoké bance číslo %2, ale na tomto místě už jedna je. +Opravdu to chcete nahradit nebo to přidat do dalšího volného místa? + + + + + + &Replace + &Nahradit + + + + + + &Add + &Přidat + + + + + + Download error + Chyba při stahování + + + + There is no more free category slot. + Není žádné další volné místo pro skupinu. + + + + Save category dialog + Uložit dialog skupiny + + + + No more subcategory supported + Žádná další podskupina není podporována + + + + You can not add more subcategories + Nelze přidat více podskupin + + + + + No subcategory selected + Nevybrána žádná podskupina + + + + + You must first select a subcategory. + Nejprve musíte vybrat podskupinu. + + + + Load subcategory dialog + Nahrát dialog podskupiny + + + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + Předpokládá se, že %1 bude ovlivněn k nízké bance číslo %2, ale na tomto místě už jedna je. +Opravdu to chcete nahradit nebo to přidat do dalšího volného místa? + + + + There is no more free subcategory slot. + Není žádné další volné místo pro podskupinu. + + + + Save subcategory dialog + Uložit dialog podskupiny + + + + No more preset supported + Žádné další přednastavení není podporováno + + + + You can not add more presets + Nelze přidat více přednastavení + + + + + + No preset selected + Nevybráno žádné přednastavení + + + + + + You must first select a preset. + Nejprve musíte vybrat přednastavení. + + + + Load preset dialog + Nahrát dialog přednastavení + + + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + Předpokládá se, že %1 bude ovlivněn k programu číslo %2, ale na tomto místě už jedna je. +Opravdu to chcete nahradit nebo to přidat do dalšího volného místa? + + + + There is no more free preset slot. + Není žádné další volné místo pro přednastavení. + + + + Save preset dialog + Uložit dialog přednastavení + + + + Browse set dialog + Procházet dialog nastavení + + + + Browse image dialog + Procházet dialog obrázku + + + + DeicsOnzeGuiBase + + + DeicsOnze + DeicsOnze + + + + &Preset + &Přednastavení + + + + Program numerous + Číslo programu + + + + INITVOICE + INITVOICE + + + + LBank + Nízká banka + + + + Subcategory + Podskupina + + + + + Bank numerous + Číslo banky + + + + + NONE + ŽÁDNÁ + + + + HBank + Vysoká banka + + + + Category + Skupina + + + + Prog + Program + + + + Preset + Přednastavení + + + + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + DeicsOnze v0.5.5 Autorské právo (c) 2004-2006 Nil Geisweiller. Zveřejněno pod GPL licencí. + + + + &Global + &Celkové + + + + Pitch Envelope + Obálka výšky tónu + + + + PL3 + PL3 + + + + PL2 + PL2 + + + + PL1 + PL1 + + + + PR1 + PR1 + + + + PR2 + PR2 + + + + PR3 + PR3 + + + + + + + + + + Pitch modulation depth + Hloubka modulace výšky tónu + + + + LFO + NKO + + + + LFO Sync + NKO Sync + + + + Pitch modulation sensitivity + Citlivost modulace výšky tónu + + + + Pitch Modulation Sensitivity + Citlivost modulace výšky tónu + + + + LFO Delay + Zpoždění NKO + + + + LFO delay + Zpoždění NKO + + + + LFO speed + Rychlost NKO + + + + Amplitude modulation depth + Hloubka modulace rozkmitu + + + + Amplitude modulation sensitivity + Citlivost modulace rozkmitu + + + + Amplitude Modulation Sensitivity + Citlivost modulace rozkmitu + + + + AMS + CMR + + + + LFO Waveform + Časový průběh vlny NKO + + + + + Pitch Modulation Depth + Hloubka modulace výšky tónu + + + + PMD + HMVT + + + + LFO Speed + Rychlost NKO + + + + AMD + HMR + + + + Speed + Rychlost + + + + Delay + Zpoždění + + + + PMS + CMVT + + + + + Modulation Matrix + Základ modulace + + + + <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> +<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> +<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> +<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> +<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + <b>Algoritmus 1</b> : <i>Op 1</i> modulováno podle <i>Op 2</i> modulováno podle <i>Op 3</i> modulováno podle <i>Op 4</i><br> +<b>Algoritmus 2</b> : <i>Op 1</i> modulováno podle <i>Op 2</i> modulováno podle jak <i>Op 3</i> tak <i>Op 4</i><br> +<b>Algoritmus 3</b> : <i>Op 1</i>modulováno podle jak <i>Op 4</i> tak <i>Op 2</i> modulováno podle <i>Op 3</i><br> +<b>Algoritmus 4</b> : <i>Op 1</i> modulováno podle jak <i>Op 2</i> tak <i>Op 3</i> modulováno podle <i>Op 4</i><br> +<b>Algoritmus 5</b> : (<i>Op 1</i> modulováno podley <i>Op 2</i>) přidat do (<i>Op 3</i> modulováno podle <i>Op 4</i>) <br> +<b>Algoritmus 6</b> : přidání tří <i>Op 1, 2, 3</i> vše modulováno podle <i>Op 4</i><br> +<b>Algoritmus 7</b> : přidání tří <i>Op 1, 2, 3</i> s <i>Op 3</i> modulováno podle <i>Op 4</i><br> +<b>Algoritmus 8</b> : přidání čtyř <i>Op 1, 2, 3, 4</i> + + + + Op4 Feedback + Zpětná vazba Op4 + + + + + Feedback level of the operator 4 + Úroveň zpětné vazby operátora 4 + + + + + + Transpose + Převedení + + + + Op &1 + Operátor &1 + + + + Scaling 1 + Změna velikosti 1 + + + + LS1 + ZVÚ + + + + RS1 + ZVR1 + + + + + + + + + + + Rate Scaling + Změna velikosti rychlosti + + + + + + + + + + + + + + + Attack Rate of the operator 1 + Rychlost náběhu operátora 1 + + + + + + + + + + + Level Scaling + Změna velikosti úrovně + + + + Amplitude Envelope 1 + Obálka rozkmitu 1 + + + + RR1 + RU1 + + + + D1R1 + R1Z1 + + + + D1L1 + Ú1Z1 + + + + D2R1 + R1Z2 + + + + + + + Release Rate + Rychlost uvolnění + + + + + + + 2° Decay Rate + 2° Rychlost zpoždění + + + + + + + 1° Decay Level + 1° Úroveň zpoždění + + + + + + + 1° Decay Rate + 1° Rychlost zpoždění + + + + + + + Attack Rate + Rychlost náběhu + + + + AR1 + RN1 + + + + Detune, OSCWave, EGShift 1 + Rozladění, OSCWave, Posun EG 1 + + + + DET1 + ROZ1 + + + + + + + + + + + + Detune + Rozladění + + + + + + + EG Shift + Posun EG + + + + + + + 96dB + 96 dB + + + + + + + 48dB + 48 dB + + + + + + + 24dB + 24 dB + + + + + + + 12dB + 12 dB + + + + + + + Wave form + Tvar vlny + + + + + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + Tvar vlny 1 = <i>sin(<b>t</b>)</i><br> +Tvar vlny 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Tvar vlny 3 = <i>if <b>t</b>&#060 pi pak sin(<b>t</b>) else 0</i><br> +Tvar vlny 4 = <i>if <b>t</b>&#060 pi pak sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Tvar vlny 5 = <i>if <b>t</b>&#060 pi pak sin(2*<b>t</b>) else 0</i><br> +Tvar vlny 6 = <i>if <b>t</b>&#060 pi pak sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Tvar vlny 7 = <i>if <b>t</b>&#060 pi pak abs(sin(2*<b>t</b>)) else 0</i><br> +Tvar vlny 8 = <i>if <b>t</b>&#060 pi pak sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + + + + Sensitivity 1 + Citlivost 1 + + + + KVS1 + CRK1 + + + + + + + Amplitude Modulation Enable + Povolení modulace rozkmitu + + + + AME1 + PMR1 + + + + + + + Keyboard Velocity Sensitivity + Citlivost síly úhozu do klávesnice + + + + + + + Key Velocity Sensitivity + Citlivost síly nárazu not + + + + EBS1 + CZEG1 + + + + + + + EG Bias Sensitivity + Citlivost zkreslení EG + + + + + + + Eg Bias Sensitivity + Citlivost zkreslení EG + + + + Frequency 1 + Kmitočet 1 + + + + Coarse 1 + Hrubý 1 + + + + + + + Coarse Ratio + Hrubý poměr + + + + Fine 1 + Jemný 1 + + + + + + + Fine Ratio + Jemný poměr + + + + Freq 1 + Kmit 1 + + + + + + + Fixed Frequency + Pevný kmitočet + + + + + + + Toggle Fix Frequency + Přepnout pevný kmitočet + + + + + + + FIX + PEV + + + + OUT 1 + VÝS 1 + + + + + + + Output Volume + Hlasitost výstupu + + + + + + + + + Volume + Hlasitost + + + + Op &2 + Operátor &2 + + + + Amplitude Envelope 2 + Obálka rozkmitu 2 + + + + D1R2 + R2Z1 + + + + D1L2 + Ú2Z1 + + + + D2R2 + R2Z2 + + + + RR2 + RU2 + + + + AR2 + RN2 + + + + Frequency 2 + Kmitočet 2 + + + + Coarse 2 + Hrubý 2 + + + + Fine 2 + Jemný 2 + + + + Freq 2 + Kmit 2 + + + + Scaling 2 + Změna velikosti 2 + + + + LS2 + ZVÚ2 + + + + RS2 + ZVR2 + + + + OUT 2 + VÝS 2 + + + + Detune, OSCWave, EGShift 2 + Rozladění, OSCWave, Posun EG 2 + + + + DET2 + ROZ2 + + + + Sensitivity 2 + Citlivost 2 + + + + EBS2 + CZEG2 + + + + KVS2 + CRK2 + + + + AME2 + PMR2 + + + + Op &3 + Operátor &3 + + + + Amplitude Envelope 3 + Obálka rozkmitu 3 + + + + D1R3 + R3Z1 + + + + D1L3 + Ú3Z1 + + + + D2R3 + R3Z2 + + + + RR3 + RU3 + + + + AR3 + RN3 + + + + Scaling 3 + Změna velikosti 3 + + + + LS3 + ZVÚ3 + + + + RS3 + ZVR3 + + + + OUT 3 + VÝS 3 + + + + Frequency 3 + Kmitočet 3 + + + + Coarse 3 + Hrubý 3 + + + + Fine 3 + Jemný 3 + + + + Freq 3 + Kmit 3 + + + + Detune, OSCWave, EGShift 3 + Rozladění, OSCWave, Posun EG 3 + + + + DET3 + ROZ3 + + + + Sensitivity 3 + Citlivost 3 + + + + EBS3 + CZEG3 + + + + KVS3 + CRK3 + + + + AME3 + PMR3 + + + + Op &4 + Operátor &4 + + + + amplitude Envelope 4 + Obálka rozkmitu 4 + + + + AR4 + RN4 + + + + D1R4 + R4Z1 + + + + D1L4 + Ú4Z1 + + + + D2R4 + R4Z2 + + + + RR4 + RU4 + + + + Frequency 4 + Kmitočet 4 + + + + Coarse 4 + Hrubý 4 + + + + Fine 4 + Jemný 4 + + + + Freq 4 + Kmit 4 + + + + Scaling 4 + Změna velikosti 4 + + + + LS4 + ZVÚ4 + + + + RS4 + ZVR4 + + + + OUT 4 + VÝS 4 + + + + Detune, OSCWave, EGShift 4 + Rozladění, OSCWave, Posun EG 4 + + + + DET4 + ROZ4 + + + + Sensitivity 4 + Citlivost 4 + + + + EBS4 + CZEG4 + + + + KVS4 + CRK4 + + + + AME4 + PMR4 + + + + &Func + &Funk + + + + Delay Pan Depth + Hloubka vyvážení zpoždění + + + + Delay Pan LFO Freq + Kmitočet NKO vyvážení zpoždění + + + + Delay Ch Send Level + Úroveň poslání zpoždění kanálu + + + + + + Channel Chorus + Sbor kanálu + + + + Delay Feedback + Zpětná vazba zpoždění + + + + Delay On/Off, Return Level + Zpoždění zapnuto/vypnuto, úroveň navrácení + + + + + + On + Zapnuto + + + + Delay Beat Ratio + Poměr úderu zpoždění + + + + Delay BPM + ÚZM zpoždění + + + + Foot Control + Ovládání stopy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pitch Bend Range + Rozsah výšky tónu + + + + + + + Pitch + Výška tónu + + + + + + + Amplitude + Rozkmit + + + + Modulation Wheel + Kolečko modulace + + + + Breath Control + Ovládání dechu + + + + + Pitch Bias + Zkreslení výšky tónu + + + + + Envelope Bias + Zkreslení obálky + + + + After Touch + Dodělávka po + + + + Phony Mode + Předstíraný režim + + + + POLY + POLY + + + + MONO + MONO + + + + Potamento + Portamento + + + + Portamento Mode + Režim portamento + + + + FINGER + PRST + + + + FULL + PLNÝ + + + + PT + ČP + + + + + Portamento Time + Čas portamenta + + + + C&horus + &Sbor + + + + Chorus Parameters + Parametry sboru + + + + + Channel send level + Úroveň poslání kanálu + + + + + On/Off and Return level + Zapnuto/Vypnuto a úroveň navrácení + + + + + Select LADSPA plugin + Vybrat přídavný modul LADSPA + + + + + Change plugin + Změnit přídavný modul + + + + &Reverb + &Ozvěna + + + + Reverb Parameters + Parametry ozvěny + + + + &Config + &Nastavit + + + + Font Size + Velikost písma + + + + Quality + Kvalita + + + + High + Vysoká + + + + Middle + Střední + + + + Low + Nízká + + + + Ultra low + Velice nízká + + + + Filter + Filtr + + + + Save Mode (into the song) + Uložit režim (do písně) + + + + Save only the used presets + Uložit pouze použitá přednastavení + + + + Save the entire set + Uložit celé nastavení + + + + Save the configuration + Uložit nastavení + + + + Configuration File + Soubor s nastavením + + + + Save... + Uložit... + + + + Load... + Nahrát... + + + + Save as default + Uložit jako výchozí + + + + Colors + Barvy + + + + Text + Text + + + + Background + Pozadí + + + + Edit Text + Upravit text + + + + Edit Background + Upravit pozadí + + + + + + Red + Červená + + + + + + Blue + Modrá + + + + + + Green + Zelená + + + + Set Path + Nastavit cestu + + + + Image in the background : + Obrázek na pozadí: + + + + + Browse... + Procházet... + + + + Load the set at the initialization : + Nahrát nastavení při zapnutí: + + + + Set Brightness, Detune, Attack and Release of the current channel to default + Nastavit jas, rozladění, náběh a uvolnění nynějšího kanálu na výchozí + + + + Res. Ctrl + Res. Ctrl + + + + Cut all notes off + Vyjmout všechny noty + + + + Panic! + Nouzové zastavení! + + + + Number of Voices + Počet hlasů + + + + Number of voices + Počet hlasů + + + + Enable + Povolit + + + + Channel + Kanál + + + + Vol + Hlasitost + + + + Channel Ctrl + Kanál Ctrl + + + + Release + Uvolnění + + + + Attack + Náběh + + + + Brightness + Jas + + + + Modulation + Modulace + + + + Pan + Vyvážení + + + + DelOverlapsBase + + + MusE: Delete Overlaps + MusE: Smazat překrytí + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + OK + OK + + + + Cancel + Zrušit + + + + DidYouKnow + + + Did you know? + Víte, že? + + + + Don't show on startup + Neukazovat při spuštění + + + + Next tip + Další rada + + + + Close + Zavřít + + + + DuplicateTracksBase + + + Duplicate tracks + Zdvojit stopy + + + + Number of copies + Počet kopií + + + + Copy all routes + Kopírovat všechny signálové toky + + + + Default routing + Výchozí signálový tok + + + + No routes + Žádné toky signálu + + + + Copy parts + Kopírovat části + + + + Copy standard controllers (vol, pan) + Kopírovat standardní ovladače (hlasitost, vyvážení) + + + + Copy effects rack plugins + Kopírovat přídavné moduly přihrádky efektů + + + + Copy plugin controllers + Kopírovat ovladače přídavných modulů + + + + Ok + OK + + + + Cancel + Zrušit + + + + EditCtrlBase + + + MusE: Edit Controller Event + MusE: Upravit událost ovladače + + + + Time Position + Časová poloha + + + + Available Controller: + Dostupný ovladač: + + + + Create New Controller + Vytvořit nový ovladač + + + + textLabel3 + Popis 3 + + + + Value + Hodnota + + + + Controller + Ovladač + + + + H-Bank + Vysoká banka + + + + L-Bank + Nízká banka + + + + Program + Program + + + + + off + Vypnuto + + + + pushButton4 + Tlačítko 4 + + + + &OK + &OK + + + + &Cancel + Z&rušit + + + + EditGainBase + + + MusE: Modify gain + MusE: Změnit zesílení + + + + Gain + Zesílení + + + + 200% + 200% + + + + 100% + 100% + + + + 0% + 0% + + + + &Reset + &Nastavit znovu + + + + Alt+R + Alt+R + + + + &Apply + &Použít + + + + Alt+A + Alt+A + + + + &Cancel + Z&rušit + + + + Alt+C + Alt+C + + + + EditInstrumentBase + + + MusE: Instrument Editor + MusE: Editor nástrojů + + + + Instrument Name: + Název nástroje: + + + + Selected instrument name. + Vybraný název nástroje. + + + + List of defined instruments. + Seznam s vymezenými nástroji. + + + + Pa&tches + &Záplaty + + + + List of groups and patches. + Seznam skupin a záplat. + + + + Group/Patch + Skupina/Záplata + + + + + Properties + Vlastnosti + + + + + + Name: + Název: + + + + + Group or patch name + Název skupiny nebo záplaty + + + + High Bank: + Vysoká banka: + + + + Patch high bank number + Záplatovat číslo vysoké banky + + + + Patch high bank number. --- means don't care. + Záplatovat číslo vysoké banky. --- znamená, nestarat se. + + + + --- + dont care + --- + + + + Low Bank: + Nízká banka: + + + + Patch low bank number + Záplatovat číslo nízké banky + + + + Patch low bank number. --- means don't care. + Záplatovat číslo nízké banky. --- znamená, nestarat se. + + + + --- + --- + + + + Program: + Program: + + + + + Patch program number + Záplatovat číslo programu + + + + Drum patch + Záplata bicích + + + + If set, the patch is available only for drum channels. + Je-li nastaveno, je záplata dostupná pouze pro kanály bicích. + + + + Drum + Bicí + + + + GM patch + Záplata GM + + + + If set, the patch is available in a 'GM' or 'NO' midi song type. + Je-li nastaveno, je záplata dostupná v typu písně MIDI 'GM' nebo 'NO'. + + + + GM + GM + + + + GS patch + Záplata GS + + + + If set, the patch is available in a 'GS' or 'NO' midi song type. + Je-li nastaveno, je záplata dostupná v typu písně MIDI 'GS' nebo 'NO'. + + + + GS + GS + + + + XG patch + Záplata XG + + + + If set, the patch is available in an 'XG' or 'NO' midi song type. + Je-li nastaveno, je záplata dostupná v typu písně MIDI 'XG' nebo 'NO'. + + + + XG + XG + + + + Delete group or patch + Smazat skupinu nebo záplatu + + + + + + &Delete + S&mazat + + + + + + Alt+D + Alt+D + + + + New patch + Nová záplata + + + + New &Patch + Nová &záplata + + + + Alt+P + Alt+P + + + + New group + Nová skupina + + + + New &Group + Nová &skupina + + + + Alt+G + Alt+G + + + + Contro&ller + &Ovladač + + + + Common: + Obecné: + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Toto je seznam často používaných ovladačů MIDI. +MusE ovšem zachází se všemi ovladači jako jsou "výška tónu" a "změny programů" jako s normálními ovladači. + + + + List of defined controllers + Seznam vymezených ovladačů + + + + List of defined controllers. + Seznam vymezených ovladačů. + + + + Name + Název + + + + Type + Typ + + + + + H-Ctrl + H-Ctrl + + + + + L-Ctrl + L-Ctrl + + + + Min + Nejméně + + + + Max + Nejvíce + + + + Def + Vymezení + + + + Midi controller name + Název ovladače MIDI + + + + Type: + Typ: + + + + + Midi controller type + Typ ovladače MIDI + + + + Control7 + Ovladač 7 + + + + Control14 + Ovladač 14 + + + + RPN + RPN + + + + NRPN + NRPN + + + + RPN14 + RPN14 + + + + NRPN14 + NRPN14 + + + + Pitch + Výška tónu + + + + Program + Program + + + + + Midi controller number high byte + Vysoké bajtové číslo ovladače MIDI + + + + Midi controller number low byte (* means drum controller) + Nízké bajtové číslo ovladače MIDI (* znamená ovladač bicích) + + + + Midi controller number low byte. +If low byte is * then the controller is a + 'drum controller'. For drum tracks and + GS/XG type songs and instruments. +Allows controllers for each instrument in + Muse's drum map. The low byte will be + replaced by the 'ANote' in the drum map. +Examples: The GS and XG instruments' + Drum controllers. + Nízké bajtové číslo ovladače MIDI. +Pokud je nízký bajt *, potom ovladač je +'ovladač bicích'. Pro stopy bicích a písně a nástroje typu +GS/XG. Povoluje ovladače pro každý nástroj v +rozložení bicích Muse. Nízký bajt bude v rozložení bicích +nahrazen 'Notou A'. Příklady: Nástroje GS a XG +Ovladače bících. + + + + * + wild card + * + + + + Range: + Rozsah: + + + + Min + Nejméně + + + + Minimum value. If negative, auto-translate. + Nejmenší hodnota. Pokud je záporná, automatická proměna. + + + + Minimum value. If the minimum value + is negative, the range will automatically + be translated to a positive range. + +Useful for controllers which should be + displayed with zero bias. For example, +'Pan': Minimum: -64 Maximum: 63 +True range: Min: 0 Max: 127 (bias = 64) +'CoarseTuning': Min: -24 Max: 23 +True range: Min: 40 Max: 87 (bias = 64) + +Bias is determined from controller type: +7-bit Controller7 / RPN: Bias = 64 +14-bit Controller14 / RPN14: Bias = 8192 + +Type 'Pitch' is the exception. It is biased + at zero, even with a negative minimum: +'Pitch': Min: -8192 Max: 8191 +True range: Min: -8192 Max: 8191 (bias 0) + Nejmenší hodnota. Pokud je nejmenší hodnota +záporná, bude rozsah automaticky proměněn na kladný. + +To je užitečné u ovladačů, které by měly být zobrazeny s +nulovým zkreslením. Například: +'Vyvážení': Minimum: -64 Maximum: 63 +Opravdový rozsah: Min: 0 Max: 127 (bias = 64) +'Hrubé ladění': Min: -24 Max: 23 +Opravdový rozsah: Min: 40 Max: 87 (bias = 64) + +Zkreslení je určeno z typu ovladače: +7-bit ovladač 7 / RPN: Zkreslení = 64 +14-bit ovladač 14 / RPN14: Zkreslení = 8192 + +Typ 'výška tónu' je výjimka. Je zkreslen na +nulu, i se záporným minimem: +'Výška tónu': Min: -8192 Max: 8191 +Opravdový rozsah: Min: -8192 Max: 8191 (zkreslení 0) + + + + Max + Nejvíce + + + + + Maximum value + Největší hodnota + + + + Default: + Výchozí: + + + + L-Bank + Nízká banka + + + + + + + + off + Vypnuto + + + + Progr. + Progr. + + + + ??? + ??? + + + + H-Bank + Vysoká banka + + + + Default value. Off: No default. + Výchozí hodnota. Vypnuto: Žádná výchozí. + + + + Default (initial) value. Off means no default. + +If a default value is chosen, the value will be sent + to the controller when the controller is added to + the song (in piano roll or event editor). When + the song is re-loaded, the value is sent again. +Otherwise the controller remains at its last value. +Controllers are also automatically added to a + song upon reception of a midi controller event. + +Caution! Watch out for controllers such as + 'Sustain' and 'ResetAllController' with default + values. You should probably turn 'off' their + default (in piano roll or drum edit, and + instrument editor). + + + + + off + dont care + Vypnuto + + + + Add common controller + Přidat obecný ovladač + + + + &Add + &Přidat + + + + Alt+A + Alt+A + + + + Delete controller + Smazat ovladač + + + + Create a new controller + Vytvořit nový ovladač + + + + New &Controller + Nový &ovladač + + + + Alt+C + Alt+C + + + + Null Param Hi: + Nulový parametr vysoký: + + + + Null parameter number High byte + Nulový parametr vysoký bajt + + + + + If set, these 'null' parameter numbers will + be sent after each RPN/NRPN event. +This prevents subsequent 'data' events + from corrupting the RPN/NRPN controller. +Typically, set to 127/127, or an unused + RPN/NRPN controller number. + Je-li nastaveno, budou tato čísla 'null' parametru + poslána po každé události RPN/NRPN. +Toto brání následným událostem 'data' + v poškození ovladače RPN/NRPN. +Typicky nastavit na 127/127, nebo nepoužívané + číslo ovladače RPN/NRPN. + + + + Lo: + Nízký: + + + + Null parameter number Low byte + Číslo nulového parametru nízký bajt + + + + S&ysEx + S&ysEx + + + + SysEx List: + Seznam SysEx: + + + + Hex Entry: + Záznam Hex: + + + + New SysE&x + Nový SysE&x + + + + Alt+X + Alt+X + + + + Tools + Nástroje + + + + &File + &Soubor + + + + &Help + &Nápověda + + + + &New + &Nový + + + + New + Nový + + + + Ctrl+N + Ctrl+N + + + + &Open... + &Otevřít... + + + + Open + Otevřít + + + + Ctrl+O + Ctrl+O + + + + &Save + &Uložit + + + + Save + Uložit + + + + Ctrl+S + Ctrl+S + + + + Save &As... + Uložit &jako... + + + + Save As + Uložit jako + + + + E&xit + &Ukončit + + + + Exit + Ukončit + + + + + new item + Nová položka + + + + + What's this? + Co je to? + + + + EditNoteDialogBase + + + MusE: Enter Note + MusE: Zadat notu + + + + OK + OK + + + + Cancel + Zrušit + + + + Length: + Délka: + + + + Time Position: + Časová poloha: + + + + Pitch: + Výška tónu: + + + + Velocity On: + Síla nárazu zapnuto: + + + + Velocity Off: + Síla nárazu vypnuto: + + + + EditSysexDialogBase + + + MusE: Enter SysEx + MusE: Zadat SysEx + + + + TimePosition: + Časová poloha: + + + + Comment: + Poznámka: + + + + OK + OK + + + + Cancel + Zrušit + + + + FLUIDGui + + + FLUID: open Soundfile + FLUID: Otevřít zvukové písmo + + + + FLUIDGuiBase + + + Form1 + Formulář 1 + + + + Soundfont + Zvukové písmo + + + + Load + Nahrát + + + + FLUIDSynthGuiBase + + + FLUID Synth + FLUID Synth + + + + Load + Nahrát + + + + Delete + Smazat + + + + Dump Info + Vyklopit informace + + + + ID + ID + + + + Fontname + Název písma + + + + Chnl + Kanál + + + + Soundfont + Zvukové písmo + + + + Drum Chnl + Kanál bicích + + + + + Level + Úroveň + + + + Width + Šířka + + + + Damping + Vyklopení + + + + Room Size + Velikost prostoru + + + + Reverb + Ozvěna + + + + CHANNEL SETUP + NASTAVENÍ KANÁLU + + + + Sine + Sinus + + + + Triangle + Trojúhelník + + + + Type + Typ + + + + Number + Počet + + + + Speed + Rychlost + + + + Depth + Hloubka + + + + Chorus + Sbor + + + + Gain + Zesílení + + + + LOADED SOUNDFONTS + NAHRANÁ ZVUKOVÁ PÍSMA + + + + FileDialogButtons + + + fdialogbuttons + TlačítkaProSouborovýDialog + + + + Global + Celkové + + + + User + Uživatel + + + + Project + Projekt + + + + read Midi Port +Configuration + Přečíst nastavení +přípojky MIDI + + + + write window +states + Zapisovat stavy +oken + + + + FluidSynthGui + + + Choose soundfont + Vybrat zvukové písmo + + + + GateTimeBase + + + MusE: Modify Note Length + MusE: Změnit délku noty + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Values + Hodnoty + + + + Rate: + Rychlost: + + + + Offset: + Posun: + + + + % + % + + + + lenNew = (lenOld * rate) + offset + lenNew = (lenOld * rychlost) + posun + + + + OK + OK + + + + Cancel + Zrušit + + + + GlobalSettingsDialogBase + + + MusE: Global Settings + MusE: Celková nastavení + + + + Application + Program + + + + Project directory + Projektový adresář + + + + Projects: + Projekty: + + + + + + ... + ... + + + + Views + Pohledy + + + + + + + + y-pos + Poloha y + + + + + + + show + Ukázat + + + + + + + + x-pos + Poloha x + + + + + + + height + Výška + + + + + + + width + Šířka + + + + Mixer A + Směšovač A + + + + Mixer B + Směšovač B + + + + Big Time + Velký ukazatel času + + + + Main Window + Hlavní okno + + + + Transport + Přesun + + + + + + + + set current values + Nastavit nynější hodnoty + + + + + + + + Cur + Nyní + + + + Start Muse + Spustit MusE + + + + Choose start song or template + Vybrat začáteční píseň nebo předlohu + + + + Reset to default + Nastavit znovu na výchozí + + + + Start song + Začáteční píseň + + + + start with last song + Začít s poslední písní + + + + start with template + Začít s předlohou + + + + start with song + Začít s určitou písní + + + + On Launch + Při spuštění + + + + show splash screen + Ukázat úvodní obrazovku + + + + show "Did you know?" dialog + Ukázat dialog Víte, že? + + + + Start template or song: + Spustit předlohu nebo píseň: + + + + Read MIDI Ports configuration from file, + or else automatically configure + Číst nastavení přípojek MIDI ze souboru, +nebo nastavit automaticky + + + + Read MIDI Ports configuration + Přečíst nastavení přípojek MIDI + + + + Audio + Zvuk + + + + Mixer + Směšovač + + + + + dB + dB + + + + min. Meter Value + min. Hodnoty regulátoru hladin + + + + min. Slider Val + Nejmenší hodnota posuvníku + + + + Try to use Jack Freewheel + Zkuste použít volnoběh Jack + + + + Speeds bounce operations + Urychlí operace odmíchání + + + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. + Použít volnoběh Jack, je-li to možné. +Tím se dramaticky zrychlí operace odmíchání. + + + + Enable denormal protection + Povolit ochranu denormál + + + + Enable output limiter + Povolit omezovač výstupu + + + + VST in-place + VST v místě + + + + Enable VST in-place processing (restart required) + Povolit zpracování VST v místě (je vyžadováno nové spuštění) + + + + Enable VST in-place processing. Turn this off if + VST Ladspa effect rack plugins do not work or + feedback loudly, even if they are supposed to + be in-place capable. Setting requires a restart. + Povolit zpracování VST v místě. Toto vypněte, pokud +přídavné moduly přihrádky efektů VST Ladspa nepracují +nebo vrací zpět nahlas, i když se předpokládá, že mají být +schopné v místě. Nastavení vyžaduje opětovné spuštění. + + + + Minimum control period + Nejmenší kontrolní perioda + + + + Minimum audio controller process period (samples). + + Nejmenší perioda procesu ovladače zvuku (vzorky). + + + + Minimum audio controller process period (samples). +Adjusts responsiveness of audio controls and + controller graphs. Set a low value for fast, smooth + control. If it causes performance problems, set a + higher value. + Nejmenší perioda procesu ovladače zvuku (vzorky). +Ovlivňuje dobu odpovědi od ovladačů zvuku +a grafů ovladačů. Nastavte nízkou hodnotu pro +rychlé, jemné ovládání. Pokud to způsobí potíže +s rychlostí, nastavte vyšší hodnotu. + + + + 1 + 1 + + + + 2 + 2 + + + + 4 + 4 + + + + 8 + 8 + + + + + 16 + 16 + + + + + 32 + 32 + + + + + 64 + 64 + + + + + 128 + 128 + + + + + 256 + 256 + + + + + 512 + 512 + + + + + + 1024 + 1024 + + + + + + 2048 + 2048 + + + + External Waveditor + Vnější editor Wave + + + + External Waveditor command + Příkaz pro vnější editor Wave + + + + Note: External editor opened from the internal editor. + Poznámka: Vnější editor otevřený z vnitřního editoru. + + + + Dummy Audio Driver (settings require restart) + Falešný ovladač zvuku (nastavení vyžaduje nové spuštění) + + + + Sample rate + Vzorkovací kmitočet + + + + Hz + Hz + + + + Period size (Frames per period): + Velikost periody (snímků za periodu): + + + + Shorter periods give better midi playback resolution. + Kratší periody dávají lepší rozlišení přehrávání MIDI. + + + + Midi + MIDI + + + + Ticks + Tiky + + + + RTC Resolution +(Ticks/Sec) + Rozlišení RTC (RealTimeClock) +(Tiky/Sekundy) + + + + 4096 + 4096 + + + + 8192 + 8192 + + + + 16384 + 16384 + + + + 32768 + 32768 + + + + Midi Resolution +(Ticks/Quarternote) + Rozlišení MIDI +(Tiky/Čtvrťová nota) + + + + + 48 + 48 + + + + + 96 + 96 + + + + + 192 + 192 + + + + + 384 + 384 + + + + + 768 + 768 + + + + + 1536 + 1536 + + + + + 3072 + 3072 + + + + + 6144 + 6114 + + + + + 12288 + 12288 + + + + Displayed Resolution +(Ticks/Quarternote) + Zobrazované rozlišení +(Tiky/Čtvrťová nota) + + + + GUI Behaviour + Chování rozhraní + + + + Behavior + Chování + + + + GUI Refresh Rate + Rychlost obnovování rozhraní + + + + /sec + /sek + + + + Use old-style stop shortcut: + Použít klávesovou zkratku pro zastavení ve starém stylu: + + + + Move single armed track with selection + Přesunout jednu odjištěnou stopu s výběrem + + + + Use project save dialog + Použít dialog pro uložení projektu + + + + Some popup menus stay open (else hold Ctrl) + Některé vyskakovací nabídky zůstanou otevřeny (držet Ctrl) + + + + Allows some popup menus to stay open. +Otherwise, hold Ctrl to keep them open. + Umožní, aby některé vyskakovací nabídky zůstanou otevřeny. +Je pro to, aby zůstaly otevřeny, potřeba podržet klávesu Ctrl. + + + + In some areas, the middle mouse button decreases +values, while the right button increases. Users without a +middle mouse button can select this option to make the +left button behave like the middle button in such areas. + V některých oblastech snižuje prostřední tlačítko myši +hodnoty, zatímco pravé tlačítko je zvyšuje. Uživatelé bez +prostředního tlačítka myši mohou tuto volbu vybrat, aby +se v takových oblastech chovalo stejně jako prostřední +tlačítko myši tlačítko levé. + + + + Use left mouse button for decreasing values + Použít levé tlačítko myši na zmenšení hodnot + + + + Shift + Right click sets left range marker + Shift + klepnutí pravým tlačítkem myši nastaví značku pro levý rozsah + + + + Allow adding hidden tracks in track list menu + Povolit přidání skrytých stop v nabídce seznamu stop + + + + Unhide tracks when adding hidden tracks + Zrušit skrytí stop při přidávání skrytých stop + + + + + Smart focus + Chytré zaměření + + + + After editing, controls will return + focus to their respective canvas + Po dokončení úprav vrátí ovladače +zaměření na jim příslušné plátno + + + + GUI Style + Styl rozhraní + + + + MDI-subwindowness and sharing menus + MDI-podokennost a sdílení nabídek + + + + Presets: + Přednastavení: + + + + traditional MusE SDI + Tradiční MusE SDI + + + + Cakewalk-like MDI + MDI na způsob Cakewalku + + + + Borland-/Mac-like MDI + MDI na způsob Borland/Mac + + + + &Apply + &Použít + + + + &Ok + &OK + + + + &Cancel + Z&rušit + + + + LegatoBase + + + MusE: Legato + MusE: Legato + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Settings + Nastavení + + + + ticks + tiky + + + + Minimum Length + Nejmenší délka + + + + Allow shortening notes + Dovolit zkracování not + + + + OK + OK + + + + Cancel + Zrušit + + + + MITTransposeBase + + + MusE: Midi Input Plugin: Transpose + MusE: Přídavný modul pro vstup MIDI: Převedení + + + + On + Zapnuto + + + + TriggerKey + Spouštěcí klávesa + + + + Transpose: + Převést: + + + + +0 + +0 + + + + MRConfigBase + + + MusE: Midi Input Plugin: Remote Control + MusE: Přídavný modul pro vstup MIDI: Vzdálené ovládání + + + + Activate + Zapnout + + + + On + Zapnuto + + + + Actions + Činnosti + + + + Stop + Zastavit + + + + Record + Nahrávat + + + + Goto Left Mark + Jít na levou značku + + + + Play + Přehrát + + + + Insert rest (step rec) + Vložit přestávku (step rec) + + + + MdiSettingsBase + + + Form + Formulář + + + + GroupBox + SkupinovýBox + + + + MDI subwin + Podokno MDI + + + + Shares menu when subwin + Sdílí nabídku, když je podokno + + + + Shares menu when free + Sdílí nabídku, když je okno volné + + + + MetronomeConfigBase + + + MusE: Metronome Config + MusE: Nastavení metronomu + + + + Metronome + Metronom + + + + Audio Beep + Vnitřní reproduktor počítače + + + + Choose outputs... + Vybrat výstupy... + + + + 50 + 50 + + + + % Audio volume + Hlasitost zvuku % + + + + MIDI Click + Klik MIDI + + + + Midi Channel + Kanál MIDI + + + + Measure Note + Nota MIDI na začátku taktu + + + + Measure Velocity + Síla nárazu noty MIDI na začátku taktu + + + + Beat Velocity + Síla nárazu na začátku taktu + + + + Beat Note + Nota na začátku doby + + + + Midi Port + Přípojka MIDI + + + + Precount + Předpočítat + + + + enable + Povolit + + + + Bars + Takty + + + + From Mastertrack + Z hlavní stopy + + + + / + / + + + + Signature + Taktové označení + + + + Prerecord + Přednahrát + + + + Preroll + Přetáčení vpřed + + + + Hint: Enable metronome in Transportpanel + Rada: Povolte metronom v panelu pro přesun + + + + &Apply + &Použít + + + + Alt+A + Alt+A + + + + &OK + &OK + + + + Alt+O + Alt+O + + + + &Cancel + Z&rušit + + + + Alt+C + Alt+C + + + + MidiAudioControlBase + + + Midi control + Ovládání MIDI + + + + Port: + Přípojka: + + + + Channel: + Kanál: + + + + Control type: + Typ ovládání: + + + + Control7 + Ovladač 7 + + + + Control14 + Ovladač 14 + + + + RPN + RPN + + + + NRPN + NRPN + + + + RPN14 + RPN 14 + + + + NRPN14 + NRPN 14 + + + + Pitch + Výška tónu + + + + Program + Program + + + + Hi: + Vysoký: + + + + Lo: + Nízký: + + + + Learn + Naučit se + + + + MidiFilterConfigBase + + + MusE: Midi Input Filter + MusE: Vstupní filtr MIDI + + + + Record Filter + Filtr nahrávání + + + + + Note On + Nota zapnuta + + + + + Poly Pressure + Vícenásobné stisknutí tlačítka + + + + + Controller + Ovladač + + + + + Program Change + Změna programu + + + + + After Touch + Dodělávka po + + + + + Pitch Bend + Ohyb výšky tónu + + + + + Sysex + Sysex + + + + Thru Filter + Thru filtr + + + + Controller Filter + Filtr ovladače + + + + Channel Filter + Filtr kanálu + + + + 14 + 14 + + + + 10 + 10 + + + + 6 + 6 + + + + 12 + 12 + + + + 4 + 4 + + + + 2 + 2 + + + + 9 + 9 + + + + 8 + 8 + + + + 3 + 3 + + + + 13 + 13 + + + + 15 + 15 + + + + 16 + 16 + + + + 7 + 7 + + + + 11 + 11 + + + + 5 + 5 + + + + 1 + 1 + + + + MidiInputTransformDialogBase + + + MusE: Midi Input Transformator + MusE: Měnič vstupu MIDI + + + + Filter + Filtr + + + + All + Vše + + + + + + + + Equal + Stejný + + + + + + + + Unequal + Nestejný + + + + Note + Poznámka + + + + + Poly Pressure + Vícenásobné stisknutí tlačítka + + + + + Control Change + Změna ovládání + + + + + Aftertouch + Dodělávka po + + + + + Pitch Bend + Ohyb výšky tónu + + + + + NRPN + NRPN + + + + + RPN + RPN + + + + + + Value 2 + Hodnota 2 + + + + + + + + Value 1 + Hodnota 1 + + + + + Event Type + Typ události + + + + + + + Ignore + Přehlížet + + + + + + + Higher + Vyšší + + + + + + + Lower + Nižší + + + + + + + Inside + Uvnitř + + + + + + + Outside + Vně + + + + + Channel + Kanál + + + + + Port + Přípojka + + + + Processing + Zpracování + + + + + + + + Keep + Zachovat + + + + + + + + Fix + Pevný + + + + + + + Plus + Plus + + + + + + + Minus + Minus + + + + + + + Multiply + Násobit + + + + + + + Divide + Dělit + + + + + + + Invert + Obrátit + + + + ScaleMap + Rozložení not + + + + Flip + Obrátit + + + + + + + Dyn + Dyn + + + + + + + Random + Náhodný + + + + Modules + Moduly + + + + 1 + 1 + + + + 2 + 2 + + + + 3 + 3 + + + + 4 + 4 + + + + enable modul 1 + Povolit modul 1 + + + + enable modul 2 + Povolit modul 2 + + + + enable modul 3 + Povolit modul 3 + + + + enable modul 4 + Povolit modul 4 + + + + Preset + Přednastavení + + + + Name: + Název: + + + + Comment: + Poznámka: + + + + Function + Funkce + + + + create new preset + Vytvořit nové přednastavení + + + + &New + &Nový + + + + delete preset + Smazat přednastavení + + + + &Delete + S&mazat + + + + &Dismiss + &Zahodit + + + + PresetList + Seznam přednastavení + + + + MidiSyncConfigBase + + + MusE: Midi Sync + MusE: Seřízení MIDI + + + + Apply + Použít + + + + Ok + OK + + + + Cancel + Zrušit + + + + MTC + MTC + + + + Type: + Typ: + + + + 24 + 24 + + + + 25 + 25 + + + + 30D + 30D + + + + 30N + 30N + + + + Offset: + Posun: + + + + hour + hodina + + + + h + h + + + + minute + Minuta + + + + m + min + + + + second + Sekunda + + + + s + s + + + + frame + Snímek + + + + f + sn + + + + subframe + Podsnímek + + + + Sync receiving and sending + Seřídit přijímání a posílání + + + + Send and receive Jack transport + Poslat a přijmout přesun JACK + + + + Send and receive Jack transport information, + including stop, start and position. + Poslat a přijmout informace o přesunu JACK, +včetně zastavení, spuštění a polohy. + + + + Use Jack transport + Použít přesun JACK + + + + Make MusE the Jack transport Timebase Master + Udělat MusE řízení času pro přesun JACK + + + + Make MusE the Jack transport Timebase Master. +Allows Jack to show time as + MusE Bars, Beats, and Ticks. +MusE will try to become master, but other + Jack clients can also take over later. +You can always click here again for Master. + Udělat MusE řízením času pro přesun JACK. +Dovolí JACKovi, aby ukazoval čas jako takty, doby, tiky MusE. +MusE se pokusí stát hlavním, ale jiní klienti JACK to mohou +později také převzít. Vždy můžete klepnout sem a nastavit MusE jako hlavní. + + + + Jack transport Timebase Master + Řízení času pro přesun JACK + + + + Control MusE timing by external midi clock or MTC sync + Ovládat časování MusE přes vnější hodiny MIDI nebo MTC sync + + + + When in slave mode, tempo is + controlled externally. +MusE can sync to midi clock, or MTC quarter frame sync. +Enabled inputs in the list will + be in effect (RMC, RMMC, RMTC). + V režimu Slave je tempo řízeno vnějškově. +MusE může seřídit k hodinám midi nebo MTC quarter frame sync. +zapnuté vstupy v seznamu budou mít +účinek (RMC, RMMC, RMTC). + + + + Slave to external sync + Spojit s vnějším sync + + + + Send start to first clock delay + Přestávka mezi posláním "začátku" až po poslání prvních hodin + + + + Allows 'slow sync' devices time + to synchronize to MusE. This value is the + delay from sending start to sending + the first clock. + Dá zařízením "slow sync" čas na seřízení +s MusE. Tato hodnota je přestávkou +mezi posláním "začátku" až po poslání prvních hodin. + + + + ms + ms + + + + Send sync delay + Přestávka pro poslání sync + + + + Note: Sync delay and MTC sync currently not fully implemented + Poznámka: Sync delay a MTC sync nejsou v současnosti zcela udělány + + + + MidiTrackInfoBase + + + MusE: TrackInfo + MusE: Informace o stopě + + + + output port + Výstupní přípojka + + + + output channel + Výstupní kanál + + + + all midi events are sent to this output channel + Všechny události MIDI jsou poslány do tohoto výstupního kanálu + + + + Out ch + Výstupní kanál + + + + input routing + Vstupní signálový tok + + + + input detect + Zjištění vstupu + + + + Input detect indicator. Detects all note on-off, controller, aftertouch, + program change, and pitchbend (but not sysex or realtime) events + on the selected channels, on the selected midi ports. + Údaj o zjištění vstupu. Zjistí události všechny noty zapnuto/vypnuto, ovladač, dodělávka po, + změna programu a ohyb výšky tónu (ale ne Sysex nebo skutečný čas)- + na vybraných kanálech na vybraných přípojkách MIDI. + + + + W + W + + + + Midi thru + MIDI thru + + + + Pass input events through ('thru') to output. + Vést vstupní události skrz ('thru') do výstupu. + + + + output routing + Výstupní signálový tok + + + + + + + + + + off + Vypnuto + + + + Transp. + Přesun + + + + Delay + Zpoždění + + + + + % + % + + + + Length + Délka + + + + Velocity + Síla nárazu + + + + Compr. + Kompr. + + + + Channel Info + Informace o kanálu + + + + Select instrument patch + Vybrat záplatu nástroje + + + + <unknown> + <neznámý> + + + + Rec: + Nahr.: + + + + Add all settings to song + Přidat všechna nastavení do písně + + + + All + Vše + + + + Bank Select MSB. Ctrl-double-click on/off. + Výběr banky MSB. Ctrl-dvojité klepnutí zapnuto/vypnuto. + + + + H-Bank + Vysoká banka + + + + Bank Select LSB. Ctrl-double-click on/off. + Výběr banky LSB. Ctrl-dvojité klepnutí zapnuto/vypnuto. + + + + L-Bank + Nízká banka + + + + Program. Ctrl-double-click on/off. + Program. Dvojité klepnutí pro zapnuto/vypnuto. + + + + Add bank + prog settings to song + Přidat banku + nastavení programu do písně + + + + Prog + Program + + + + Volume. Ctrl-double-click on/off. + Hlasitost. Dvojité klepnutí pro zapnuto/vypnuto. + + + + Add vol setting to song + Přidat nastavení hlasitosti do písně + + + + Vol + Hlasitost + + + + + Change stereo position. Ctrl-double-click on/off. + Změnit polohu sterea. Ctrl-dvojité klepnutí zapnuto/vypnuto. + + + + Add pan setting to song + Přidat nastavení vyvážení do písně + + + + Pan + Vyvážení + + + + MidiTransformDialogBase + + + MusE: Midi Transformator + MusE: Měnič MIDI + + + + &New + &Nový + + + + &Delete + S&mazat + + + + &Apply + &Použít + + + + &OK + &OK + + + + &Cancel + Z&rušit + + + + PresetList + Seznam přednastavení + + + + Processing + Zpracování + + + + + Event Type + Typ události + + + + + + + + Keep + Zachovat + + + + + + + Fix + Pevný + + + + + Note + Poznámka + + + + + Poly Pressure + Vícenásobné stisknutí tlačítka + + + + + Control Change + Změna ovládání + + + + + Aftertouch + Dodělávka po + + + + + Pitch Bend + Ohyb výšky tónu + + + + + NRPN + NRPN + + + + + RPN + RPN + + + + + + + Plus + Plus + + + + + + + Minus + Minus + + + + + + + Multiply + Násobit + + + + + + + Divide + Dělit + + + + + + Value 2 + Hodnota 2 + + + + + Invert + Obrátit + + + + ScaleMap + Rozložení not + + + + Flip + Obrátit + + + + + Dyn + Dyn + + + + + Random + Náhodný + + + + + + Value 1 + Hodnota 1 + + + + + Length + Délka + + + + Position + Poloha + + + + Filter + Filtr + + + + All + Vše + + + + + + + + Equal + Stejný + + + + + + + + Unequal + Nestejný + + + + + + + Ignore + Přehlížet + + + + + + + Higher + Vyšší + + + + + + + Lower + Nižší + + + + + + + Inside + Uvnitř + + + + + + + Outside + Vně + + + + Bar Range + Oblast taktu + + + + Preset + Přednastavení + + + + Name: + Název: + + + + Comment: + Poznámka: + + + + Range + Rozsah + + + + process all events + Zpracovat všechny události + + + + selected tracks + Vybrané stopy + + + + inside loop + Uvnitř smyčky + + + + Function + Funkce + + + + Select + Vybrat + + + + Quantize + Kvantizovat + + + + Delete + Smazat + + + + Transform + Proměnit + + + + Insert + Vložit + + + + Copy + Kopírovat + + + + Extract + Vytáhnout + + + + Quantize Value + Kvantizovat hodnotu + + + + MixdownFileDialogBase + + + MusE: Set Mixdown Wavefile + MusE: Nastavit finální namíchání souboru Wave + + + + &OK + &OK + + + + &Cancel + Z&rušit + + + + File Path + Cesta k souboru + + + + Channel + Kanál + + + + Stereo + Stereo + + + + Mono + Mono + + + + 5.1 + 5.1 + + + + wav,16 Bit + wav, 16 Bit + + + + wav, 24 Bit + wav, 24 Bit + + + + wav, 32 Bit (float) + wav, 32 Bit (float) + + + + Format + Formát + + + + MoveBase + + + MusE: Move Notes + MusE: Přesunout noty + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Value + Hodnota + + + + Move by + Přesunout podle + + + + ticks + tiky + + + + OK + OK + + + + Cancel + Zrušit + + + + MusECore::Song + + + Jack shutdown! + Vypnutí JACK! + + + + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + Jack zjistil potíže s rychlostí, které vedly k tomu, +že MusE bylo odděleno od Jack. +To se mohlo stát z různých důvodů: +- potíže s rychlostí ve vašem nastavení +- chyba v MusE nebo jiném připojeném programu +- náhodný zádrhel, který by se už nikdy neopakoval +- Jack byl vámi nebo někým jiným dobrovolně zastaven +- Jack spadl + +Pokud se potíže vyskytnou znovu, budeme velmi rádi, když si s vámi o tom +budeme moci promluvit v poštovním seznamu MusE. +(informace o tom, jak se člověk přidá k poštovním seznamu, se nacházejí na +domovských stránkách MusE, které jsou dosažitelné přes hlavní nabídku Nápověda) + +Pro pokračování, prosím, přezkoušejte stav Jacka, +zkuste Jack znovu spustit a klepněte na tlačítko "Spustit znovu". + + + + + Automation: + Automatizace: + + + + previous event + Předchozí událost + + + + next event + Další událost + + + + + set event + Nastavit událost + + + + + add event + Přidat událost + + + + + erase event + Vymazat událost + + + + erase range + Vymazat rozsah + + + + clear automation + Smazat automatizaci + + + + Midi control + Ovládání MIDI + + + + Assign + Přiřadit + + + + Clear + Smazat + + + + Clear all controller events? + Smazat všechny události ovladače? + + + + &Ok + &OK + + + + &Cancel + Z&rušit + + + + MusE: Tempo list + MusE: Seznam tempa + + + + External tempo changes were recorded. +Transfer them to master tempo list? + Byly nahrány vnější změny tempa. +Mají se převzít do hlavního seznamu tempa? + + + + MusE - external script failed + MusE: Vnější skript selhal + + + + MusE was unable to launch the script, error message: +%1 + MusE se skript nepodařilo spustit. Chybová zpráva: +%1 + + + + MusEGui::Appearance + + + Main application font, and default font for any + controls not defined here. + Hlavní písmo programu a výchozí písmo pro +všechny ovládací prvky, které tu nejsou stanoveny. + + + + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + Proužky směšovače a přihrádky s efekty. Informační panel +ke stopám MIDI. Zadávací pole pro panel ovládání MIDI. + + + + Transport controls. + Ovládání přesunu. + + + + Time scale upper, and time signature. +Controller graph and S/X buttons. + Časové měřítko nahoru a taktové označení. +Graf ovladače a tlačítka S/X. + + + + Time scale lower, and arranger part name overlay. + Časové měřítko dolů a aranžér: překrytí názvu části. + + + + Tempo scale, and markers. + Měřítko tempa a značky. + + + + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + Popisky u směšovače. Velikost písma bude automaticky +přizpůsobena nahoru zvolené velikosti. Zalomení řádků ale jen +u mezer. + + + + Maximum mixer label auto-font-sizing font size. + Největší velikost písma u automatické velikosti písma popisků směšovače. + + + + Global opacity (opposite of transparency). + Celková neprůhlednost (protějšek průhlednosti). + + + + Standard + Obvyklá + + + + Custom + Vlastní + + + + Keep Qt system style + Zachovat styl systému Qt + + + + MusE: load image + MusE: Nahrát obrázek + + + + Select style sheet + Vybrat styl + + + + Qt style sheets (*.qss) + Styly Qt (*.qss) + + + + MusEGui::Arranger + + + Enable Recording + Povolit nahrávání + + + + Mute/Off Indicator + Ztlumit/Ukazatel vypnuto + + + + Solo Indicator + Ukazatel "Solo" + + + + Track Type + Typ stopy + + + + Track Name + Název stopy + + + + Midi output channel number or audio channels + Číslo kanálu výstupu MIDI nebo zvukové kanály + + + + Midi output port or synth midi port + Přípojka výstupu MIDI nebo přípojka MIDI syntetizátoru + + + + Time Lock + Zámek času + + + + Automation parameter selection + Výběr parametru automatizace + + + + Notation clef + Notový klíč + + + + Enable recording. Click to toggle. + Zapnout nahrávání. Klepněte pro přepnutí. + + + + Mute indicator. Click to toggle. +Right-click to toggle track on/off. +Mute is designed for rapid, repeated action. +On/Off is not! + Ukazatel ztlumení. Klepněte pro přepnutí. +Klepnutí pravým tlačítkem myši pro přepnutí stopy na zapnuto/vypnuto. +Ztlumení je navrženo pro rychlou, opakovanou činnost. +Zapnuto/Vypnuto není! + + + + Solo indicator. Click to toggle. +Connected tracks are also 'phantom' soloed, + indicated by a dark square. + Ukazatel sóla. Klepněte pro přepnutí. +Připojené stopy jsou také domněle (phantom) zesólovány, +ukázáno tmavým čtverečkem. + + + + Track type. Right-click to change + midi and drum track types. + Typ stopy. Klepnutí pravým tlačítkem myši pro +změnu typů stopy MIDI a bicí. + + + + Track name. Double-click to edit. +Right-click for more options. + Typ stopy. Dvojité klepnutí tlačítkem myši pro úpravy. +Klepnutí pravým tlačítkem myši pro více voleb. + + + + Midi/drum track: Output channel number. +Audio track: Channels. +Mid/right-click to change. + Stopa MIDI/bicí. Číslo výstupního kanálu. +Zvuková stopa: Kanály. +Klepnutí středovým kolečkem/pravým tlačítkem +myši pro změnu. + + + + Midi/drum track: Output port. +Synth track: Assigned midi port. +Left-click to change. +Right-click to show GUI. + Stopa MIDI/bicí. Výstupní přípojka. +Syntezátorová stopa: Přiřazená přípojka MIDI. +Klepnutí levým tlačítkem myši pro změnu. +Klepnutí pravým tlačítkem myši pro ukázání rozhraní. + + + + Time lock + Zámek času + + + + Notation clef. Select this tracks notation clef. + Notový klíč. Vybere notový klíč této stopy. + + + + Arranger + Aranžér + + + + Cursor + Ukazovátko + + + + Off + Vypnuto + + + + Bar + Takt + + + + Snap + Magnet + + + + Len + Délka + + + + + song length - bars + délka písně - takty + + + + Type + Typ + + + + NO + Žádný + + + + GM + GM + + + + GS + GS + + + + XG + XG + + + + + midi song type + Typ písně MIDI + + + + Pitch + Výška tónu + + + + midi pitch + Změna výšky tónu MIDI + + + + global midi pitch shift + Celková změna výšky tónu MIDI + + + + Tempo + Tempo + + + + + midi tempo + Tempo MIDI + + + + N + N + + + + TrackInfo + Informace o stopě + + + + R + L + + + + M + M + + + + S + S + + + + C + C + + + + Track + Stopa + + + + Port + Přípojka + + + + Ch + K + + + + T + T + + + + Automation + Automatizace + + + + Clef + Klíč + + + + MusEGui::ArrangerView + + + MusE: Arranger + MusE: Aranžér + + + + C&ut + Vyj&mout + + + + &Copy + &Kopírovat + + + + Copy in range + Kopírovat v oblasti + + + + &Paste + &Vložit + + + + Paste (show dialog) + Vložit (ukázat dialog) + + + + Paste c&lone + Vložit k&lon + + + + Paste clone (show dialog) + Vložit klon (ukázat dialog) + + + + &Insert Empty Measure + Vložit prázdný &takt + + + + Delete Selected Tracks + Smazat vybrané stopy + + + + Duplicate Selected Tracks + Zdvojit vybrané stopy + + + + Shrink selected parts + Srazit vybrané části + + + + Expand selected parts + Roztáhnout vybrané části + + + + Clean selected parts + Uklidit vybrané části + + + + Add Track + Přidat stopu + + + + Select + Vybrat + + + + Select &All + Vybrat &vše + + + + &Deselect All + &Zrušit výběr všeho + + + + Invert &Selection + Obrátit &výběr + + + + &Inside Loop + &Uvnitř smyčky + + + + &Outside Loop + &Vně smyčky + + + + All &Parts on Track + Všechny čá&sti na stopě + + + + Score + Notový zápis + + + + all tracks in one staff + Všechny stopy v jedné osnově + + + + one staff per track + Jedna osnova na stopu + + + + New score window + Nové okno s notovým zápisem + + + + Pianoroll + Editor válečku + + + + Drums + Editor bicích + + + + + List + Editor seznamu + + + + Wave + Editor Wave + + + + Mastertrack + Hlavní stopa + + + + Graphic + Grafický editor + + + + Midi &Transform + &Proměnit MIDI + + + + Global Cut + Celkové vyjmutí + + + + Global Insert + Celkové vložení + + + + Global Split + Celkové rozdělení + + + + Global Cut - selected tracks + Celkové vyjmutí - vybrané stopy + + + + Global Insert - selected tracks + Celkové vložení - vybrané stopy + + + + Global Split - selected tracks + Celkové rozdělení - vybrané stopy + + + + &Edit + Ú&pravy + + + + &Structure + &Stavba + + + + Functions + Funkce + + + + &Quantize Notes + &Kvantizovat noty + + + + Change note &length + Změnit &délku noty + + + + Change note &velocity + Změnit &sílu nárazu noty + + + + Crescendo/Decrescendo + Crescendo/Decrescendo + + + + Transpose + Převedení + + + + Erase Events (Not Parts) + Smazat události (nikoli části) + + + + Move Events (Not Parts) + Přesunout události (nikoli části) + + + + Set Fixed Note Length + Nastavit pevnou délku noty + + + + Delete Overlapping Notes + Smazat překrývající se noty + + + + Legato + Legato + + + + Window &Config + &Nastavení okna + + + + Configure &custom columns + Nastavit v&lastní sloupce + + + + + New + Nový + + + + Changed Settings + Nastavení změněna + + + + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) + Naneštěstí nelze změněná nastavení sloupce aranžéru +použít, dokud MusE běží. Aby se změny použily, spusťte, +prosím, MusE znovu. Promiňte (pokoušíme se to opravit) + + + + MusEGui::AudioMixerApp + + + &Create + &Vytvořit + + + + &View + &Pohled + + + + Routing + Tok signálu + + + + Show Midi Tracks + Ukázat stopy MIDI + + + + Show Drum Tracks + Ukázat stopy bicích + + + + Show Wave Tracks + Ukázat stopy Wave + + + + Show Inputs + Ukázat vstupy + + + + Show Outputs + Ukázat výstupy + + + + Show Groups + Ukázat skupiny + + + + Show Auxs + Ukázat Aux + + + + Show Synthesizers + Ukázat syntetizátory + + + + MusEGui::AudioStrip + + + panorama + Vyvážení + + + + aux send level + Úroveň poslání Aux + + + + Pan + Vyvážení + + + + 1/2 channel + 1/2 kanály + + + + Pre + Před + + + + pre fader - post fader + Předprolínač - poprolínač + + + + dB + dB + + + + record + Nahrávat + + + + mute + Ztlumit + + + + record downmix + Nahrávat smíchání + + + + + solo mode + Režim sóla + + + + off + Vypnuto + + + + input routing + Vstupní signálový tok + + + + output routing + Výstupní signálový tok + + + + Off + Vypnuto + + + + Read + Číst + + + + Touch + Dotknout se + + + + Write + Zapsat + + + + automation type + Typ automatizace + + + + MusEGui::BigTime + + + format display + Zobrazení formátu + + + + bar + Takt + + + + beat + Doba + + + + + tick + Tik + + + + minute + Minuta + + + + second + Sekunda + + + + + frame + Snímek + + + + subframe + Podsnímek + + + + MusE: Bigtime + MusE: Velký ukazatel času + + + + MusEGui::ClipListEdit + + + MusE: Clip List Editor + MusE: Editor seznamu ukázek + + + + Window &Config + &Nastavení okna + + + + MusEGui::ComboQuant + + + + + Off + Vypnuto + + + + MusEGui::CtrlCanvas + + + Drawing hint: Hold Ctrl to affect only existing events + Rada ke kreslení: Podržte klávesu Ctrl pro ovlivnění pouze stávající události + + + + Use shift + pencil or line tool to draw new events + Použijte klávesu Shift + tužku nebo nástroj na čáry pro nakreslení nových událostí + + + + MusEGui::CtrlPanel + + + S + S + + + + select controller + Vybrat ovladač + + + + X + X + + + + remove panel + Zavřít pohled s ovladačem + + + + manual adjust + Ruční upravení + + + + ctrl-double-click on/off + Ctrl-dvojité klepnutí pro zapnuto/vypnuto + + + + off + Vypnuto + + + + + Velocity + Síla nárazu + + + + add new ... + Přidat nový ovladač... + + + + + Instrument-defined + Vymezeno nástrojově + + + + + Add ... + Přidat... + + + + Others + Jiné + + + + Edit instrument ... + Upravit nástroj... + + + + Common Controls + Obecné ovládání + + + + MusEGui::DrumEdit + + + + mute instrument + Ztlumit nástroj + + + + + sound name + Název zvuku + + + + + volume percent + Procento hlasitosti + + + + + quantisation + Kvantizace + + + + + this input note triggers the sound + Tato vstupní nota spustí zvuk + + + + + note length + Délka noty + + + + + this is the note which is played + Toto je nota, která se přehrává + + + + output channel (hold ctl to affect all rows) + Výstupní kanál (držet klávesu Ctrl pro ovlivnění všech řádků) + + + + output port (hold ctl to affect all rows) + Výstupní přípojka (držet klávesu Ctrl pro ovlivnění všech řádků) + + + + + shift + control key: draw velocity level 1 + Klávesy Shift + Ctrl: Kreslit úroveň síly nárazu (dynamiky) 1 + + + + + control key: draw velocity level 2 + Klávesa Ctrl: Kreslit úroveň síly nárazu (dynamiky) 2 + + + + + shift key: draw velocity level 3 + Klávesa Shift: Kreslit úroveň síly nárazu (dynamiky) 3 + + + + + draw velocity level 4 + Kreslit úroveň síly nárazu (dynamiky) 4 + + + + output channel (ctl: affect all rows) + Výstupní kanál (držet klávesu Ctrl pro ovlivnění všech řádků) + + + + output port (ctl: affect all rows) + Výstupní přípojka (držet klávesu Ctrl pro ovlivnění všech řádků) + + + + &File + &Soubor + + + + Load Map + Nahrát rozložení bicích + + + + Save Map + Uložit rozložení bicích + + + + Reset GM Map + Nastavit rozložení GM znovu + + + + &Edit + Ú&pravy + + + + Cut + Vyjmout + + + + Copy + Kopírovat + + + + Copy events in range + Kopírovat události v rozsahu + + + + Paste + Vložit + + + + Paste (with Dialog) + Vložit (s dialogem) + + + + Delete Events + Smazat události + + + + &Select + &Vybrat + + + + Select All + Vybrat vše + + + + Select None + Nevybrat nic + + + + Invert + Obrátit + + + + Inside Loop + Uvnitř smyčky + + + + Outside Loop + Vně smyčky + + + + Previous Part + Předchozí část + + + + Next Part + Další část + + + + Fu&nctions + &Funkce + + + + Re-order list + Přeuspořádat seznam + + + + Set Fixed Length + Nastavit pevnou délku + + + + Modify Velocity + Změnit sílu nárazu + + + + Crescendo/Decrescendo + Crescendo/Decrescendo + + + + Quantize + Kvantizovat + + + + Erase Event + Smazat událost + + + + Move Notes + Přesunout noty + + + + Delete Overlaps + Smazat překrytí + + + + &Plugins + &Přídavné moduly + + + + Window &Config + &Nastavení okna + + + + Drum tools + Nástroje pro bicí + + + + Load Drummap + Nahrát rozložení bicích + + + + Store Drummap + Uložit rozložení bicích + + + + Step Record + Nahrávat po taktu + + + + Midi Input + Vstup MIDI + + + + cursor tools + Nástroje ukazovátka + + + + Set step size for cursor edit + Nastavit délku kroku pro režim ukazovátka + + + + ctrl + Ctrl + + + + Add Controller View + Přidat pohled ovladače + + + + M + M + + + + Sound + Zvuk + + + + Vol + Hlasitost + + + + QNT + QNT + + + + E-Note + Nota E + + + + Len + Délka + + + + A-Note + Nota A + + + + Ch + K + + + + Port + Přípojka + + + + LV1 + LV1 + + + + LV2 + LV2 + + + + LV3 + LV3 + + + + LV4 + LV4 + + + + Muse: Load Drum Map + MusE: Nahrát rozložení bicích + + + + MusE: Store Drum Map + MusE: Uložit rozložení bicích + + + + Drum map + Rozložení bicích + + + + Reset the drum map with GM defaults? + Nastavit rozložení bicích znovu s výchozím GM? + + + + MusEGui::EditCAfterDialog + + + MusE: Enter Channel Aftertouch + MusE: Zadat dodělávku kanálu + + + + Time Position + Časová poloha + + + + Pressure + Tlak úhozu + + + + MusEGui::EditEventDialog + + + Ok + OK + + + + Cancel + Zrušit + + + + MusEGui::EditInstrument + + + + MusE: Create file failed + MusE: Vytvoření souboru se nezdařilo + + + + MusE: Write File failed + MusE: Zápis souboru se nezdařil + + + + + MusE: Save Instrument Definition + MusE: Uložit vymezení nástroje + + + + + Instrument Definition (*.idf) + Vymezení nástroje (*.idf) + + + + + MusE: Save instrument as + MusE: Uložit nástroj jako + + + + Enter a new unique instrument name: + Zadat nový jedinečný název nástroje: + + + + The user instrument '%1' already exists. This will overwrite its .idf instrument file. +Are you sure? + Uživatelský nástroj '%1' již existuje. Toto přepíše jeho .idf soubor s nástrojem. +Jste si jistý? + + + + MusE: Bad instrument name + MusE: Špatný název nástroje + + + + Please choose a unique instrument name. +(The name might be used by a hidden instrument.) + Vyberte, prosím, jedinečný název nástroje. +(Název může být použit skrytým nástrojem.) + + + + MusE: Bad patch name + MusE: Špatný název záplaty + + + + Please choose a unique patch name + Vyberte, prosím, jedinečný název pro záplatu + + + + MusE: Bad patchgroup name + MusE: Špatný název skupiny záplat + + + + Please choose a unique patchgroup name + Vyberte, prosím, jedinečný název pro skupinu záplat + + + + MusE: Bad controller name + MusE: Špatný název ovladače + + + + Please choose a unique controller name + Vyberte, prosím, jedinečný název pro ovladač + + + + + MusE: Cannot add common controller + MusE: Nelze přidat obecný ovladač + + + + A controller named '%1' already exists. + Ovladač s názvem '%1' již existuje. + + + + A controller number %1 already exists. + Číslo ovladače '%1' již existuje. + + + + + MusE + MusE + + + + + The current Instrument contains unsaved data +Save Current Instrument? + Nynější nástroj obsahuje neuložená data. +Uložit nynější nástroj? + + + + + &Save + &Uložit + + + + + &Nosave + &Neukládat + + + + &Abort + &Zrušit + + + + MusEGui::EditMetaDialog + + + MusE: Enter Meta Event + MusE: Zadání metaudálosti + + + + Time Position + Časová poloha + + + + Meta Type + Meta typ + + + + Enter Hex + Zadat Hex + + + + MusEGui::EditPAfterDialog + + + MusE: Enter Poly Aftertouch + MusE: Zadat vícedodělávku + + + + Time Position + Časová poloha + + + + Pitch + Výška tónu + + + + Pressure + Tlak úhozu + + + + MusEGui::EditToolBar + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Nástroj ukazovátka: +Tento nástroj umožňuje: + Vybrat části + Přesunout části + Kopírovat části + + + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Nástroj tužky": +Tento nástroj umožňuje: + Vytvořit nové části + Změnit délku jednotlivých částí + + + + select Delete Tool: +with the delete tool you can delete parts + Nástroj gumy": + Smazat části + + + + select Cut Tool: +with the cut tool you can split a part + Nástroj pro stříhání: +S tímto nástrojem se části rozdělují + + + + select Glue Tool: +with the glue tool you can glue two parts + Nástroj pro přilepení: +S tímto nástrojem se dvě jednotlivé části spojují v jednu + + + + select Score Tool: + + Nástroj pro notový zápis: + + + + select Quantize Tool: +insert display quantize event + Nástroj pro kvantizaci: +S tímto nástrojem se vkládají události kvantizace + + + + select Drawing Tool + Nástroj tužky na kreslení + + + + select Muting Tool: +click on part to mute/unmute + Nástroj pro ztlumení: +Klepněte na část pro zapnutí/vypnutí ztlumení + + + + Manipulate automation + Pracovat na automatizaci + + + + Cursor tool + Nástroj ukazovátka + + + + pointer + Ukazovátko + + + + pencil + Tužka + + + + eraser + Guma + + + + cutter + Střihadlo + + + + score + Notový zápis + + + + glue + Lepidlo + + + + quantize + Kvantizace + + + + draw + Tužka na kreslení + + + + mute parts + Ztlumit části + + + + edit automation + Upravit automatizaci + + + + cursor + Ukazovátko + + + + Edit Tools + Upravit nástroje + + + + MusEGui::EffectRack + + + effect rack + Přihrádka s efekty + + + + new + Nový + + + + change + Změnit + + + + move up + Posunout nahoru + + + + move down + Posunout dolů + + + + remove + Odstranit + + + + bypass + Obejít + + + + show gui + Ukázat uživatelské rozhraní + + + + show native gui + Ukázat původní rozhraní + + + + save preset + Uložit přednastavení + + + + MusE: Save Preset + MusE: Uložit přednastavení + + + + Replace effect + Nahradit efekt + + + + Do you really want to replace the effect %1? + Opravdu chcete nahradit efekt %1? + + + + MusEGui::GlobalSettingsConfig + + + MusE: Choose start template or song + MusE: Vybrat začáteční píseň nebo předlohu + + + + MusEGui::Header + + + Track Info Columns + Sloupce s informacemi o stopě + + + + MusEGui::LMaster + + + MusE: Mastertrack + MusE: Hlavní stopa + + + + &Edit + Ú&pravy + + + + Insert Tempo + Vložit tempo + + + + Insert Signature + Vložit taktové označení + + + + Insert Key + Vložit tóninu + + + + Edit Positon + Upravit polohu + + + + Edit Value + Upravit hodnotu + + + + Delete Event + Smazat událost + + + + Window &Config + &Nastavení okna + + + + Edit tools + Upravit nástroje + + + + Tempo + Tempo + + + + Timesig + Taktové označení + + + + Key + Tónina + + + + new tempo + Nové tempo + + + + new signature + Nové taktové označení + + + + new key + Nová tónina + + + + Meter + Metrum + + + + Time + Čas + + + + Type + Typ + + + + Value + Hodnota + + + + Reposition of the initial tempo and signature events is not allowed + Změna počátečního tempa a taktového označení není dovolena + + + + MusE: List Editor + MusE: Editor seznamu + + + + Input error, conversion not OK or value out of range + Chyba na vstupu. Převod není v pořádku, anebo je hodnota mimo rozsah + + + + Reposition of tempo and signature events to start position is not allowed! + Změna událostí tempa a taktového označení na počáteční polohu není dovolena! + + + + MusEGui::ListEdit + + + insert Note + Vložit notu + + + + insert SysEx + Vložit SysEx + + + + insert Ctrl + Vložit Ctrl + + + + insert Meta + Vložit Meta + + + + insert Channel Aftertouch + Vložit dodělávku kanálu + + + + insert Poly Aftertouch + Vložit více dodělávku kanálu + + + + &Edit + Ú&pravy + + + + Cut + Vyjmout + + + + Copy + Kopírovat + + + + Paste + Vložit + + + + Delete Events + Smazat události + + + + Window &Config + &Nastavení okna + + + + Insert tools + Vložit nástroje + + + + Tick + Tiky + + + + Bar + Takt + + + + Type + Typ + + + + Ch + K + + + + Val A + Hodnota A + + + + Val B + Hodnota B + + + + Val C + Hodnota C + + + + Len + Délka + + + + Comment + Poznámka + + + + MusEGui::MPConfig + + + + Default input connections + Výchozí vstupní spojení + + + + + Are you sure you want to apply to all existing midi tracks now? + Jste si jistý, že chcete použít na všechny existující stopy MIDI nyní? + + + + + Default output connections + Výchozí výstupní spojení + + + + + Setting will apply to new midi tracks. +Do you want to apply to all existing midi tracks now? + Nastavení se použije na nové stopy MIDI. +Chcete použít na všechny existující stopy MIDI nyní? + + + + MusE: bad device name + MusE: Špatný název zařízení + + + + please choose a unique device name + Vyberte, prosím, jedinečný název pro zařízení + + + + + in + Vstup + + + + + out + Výstup + + + + Show first aliases + Ukázat první přezdívku + + + + Show second aliases + Ukázat druhou přezdívku + + + + + Toggle all + Přepnout vše + + + + + Change all tracks now + Změnit všechny stopy nyní + + + + Create Jack device + Vytvořit zařízení Jack + + + + + Port Number + Číslo přípojky + + + + Enable gui + Povolit rozhraní + + + + Enable reading + Povolit čtení + + + + Enable writing + Povolit zápis + + + + Port instrument + Nástroj přípojky + + + + Midi device name. Click to edit (Jack) + Název zařízení MIDI. Klepnout pro úpravu (Jack) + + + + Connections from Jack Midi outputs + Spojení z výstupů MIDI Jack + + + + Connections to Jack Midi inputs + Spojení do výstupů MIDI Jack + + + + Auto-connect these channels to new midi tracks + Automaticky tyto kanály připojit do nových stop MIDI + + + + Auto-connect new midi tracks to these channels + Automaticky připojit nové stopy MIDI do těchto kanálů + + + + Auto-connect new midi tracks to this channel + Automaticky připojit nové stopy MIDI do tohoto kanálu + + + + Device state + Stav zařízení + + + + Enable gui for device + Povolit rozhraní pro zařízení + + + + Enable reading from device + Povolit čtení ze zařízení + + + + Enable writing to device + Povolit zápis na zařízení + + + + Name of the midi device associated with this port number. Click to edit Jack midi name. + Název zařízení MIDI spojeného s tímto číslem přípojky. Klepněte pro změnu názvu MIDI Jack. + + + + Instrument connected to port + Nástroj spojen s přípojkou + + + + Connections from Jack Midi output ports + Spojení z výstupních přípojek MIDI Jack + + + + Connections to Jack Midi input ports + Spojení k vstupním přípojkám MIDI Jack + + + + Auto-connect these channels, on this port, to new midi tracks. + Automaticky připojit tyto kanály, na této přípojce, do nových stop MIDI. + + + + Connect new midi tracks to these channels, on this port. + Připojit nové stopy MIDI do těchto kanálů, na této přípojce. + + + + Connect new midi tracks to this channel, on this port. + Připojit nové stopy MIDI do tohoto kanálu, na této přípojce. + + + + State: result of opening the device + Stav: Událost otevření zařízení + + + + Port + Přípojka + + + + GUI + Rozhraní + + + + I + I - Vstup + + + + O + O - Výstup + + + + Instrument + Nástroj + + + + Device Name + Název zařízení + + + + In routes + Tok vstupního signálu + + + + Out routes + Tok výstupního signálu + + + + Def in ch + Výchozí vstupní kanál + + + + Def out ch + Výchozí výstupní kanál + + + + State + Stav + + + + <unknown> + <neznámý> + + + + + <none> + <Žádný> + + + + MusEGui::MTScale + + + bar scale + Měřítko taktu + + + + MusEGui::MTScaleFlo + + + bar scale + Měřítko taktu + + + + MusEGui::MarkerView + + + MusE: Marker + MusE: Značka + + + + add marker + Přidat značku + + + + delete marker + Smazat značku + + + + &Edit + Ú&pravy + + + + Window &Config + &Nastavení okna + + + + edit tools + Nástroje pro úpravy + + + + Bar:Beat:Tick + Takt:Doba:Tik + + + + Hr:Mn:Sc:Fr:Sf + Hod:Min:Sek:Sn:SR + + + + Lock + Zámek + + + + Text + Text + + + + Marker Properties + Vlastnosti značky + + + + MusEGui::MasterEdit + + + MusE: Mastertrack + MusE: Hlavní stopa + + + + Window &Config + &Nastavení okna + + + + Enable master + Povolit hlavní + + + + Enable + Povolit + + + + Enable usage of master track + Povolit použití hlavní stopy + + + + Info + Informace + + + + Cursor + Ukazovátko + + + + time at cursor position + Čas na nynější značce polohy + + + + tempo at cursor position + Tempo na nynější značce polohy + + + + Off + Vypnuto + + + + Bar + Takt + + + + Snap + Magnet + + + + CurPos + NynPol + + + + tempo at current position + Čas na nynější značce polohy + + + + time signature at current position + Taktové označení na nynější značce polohy + + + + MusEGui::MidiInputTransformDialog + + + + New + Nový + + + + MusEGui::MidiStrip + + + + + off + Vypnuto + + + + + ctrl-double-click on/off + Ctrl-dvojité klepnutí pro zapnuto/vypnuto + + + + VariationSend + VariacePoslání + + + + Var + Var + + + + ReverbSend + OzvěnaPoslání + + + + Rev + Ozv + + + + ChorusSend + SborPoslání + + + + Cho + Sbo + + + + dB + dB + + + + Pan/Balance + Vyvážení/Pan + + + + Pan + Vyvážení + + + + record + Nahrávat + + + + mute + Ztlumit + + + + solo mode + Režim sóla + + + + input routing + Vstupní signálový tok + + + + output routing + Výstupní signálový tok + + + + MusEGui::MidiSyncConfig + + + + Port Number + Číslo přípojky + + + + + Name of the midi device associated with this port number + Název zařízení MIDI spojeného s tímto číslem přípojky + + + + Midi clock input detected + Zjištěn vstup hodin MIDI + + + + + Midi tick input detected + Zjištěn vstup tiku MIDI + + + + Midi real time input detected + Zjištěn vstup MIDI ve skutečném čase (RT) + + + + MMC input detected + Zjištěn vstup MMC + + + + MTC input detected + Zjištěn vstup MTC + + + + Detected SMPTE format + Zjištěn formát SMPTE + + + + Receive id number. 127 = Global. Double click to edit. + Přijmout číslo ID. 127 = Celkové. Dvojité klepnutí pro úpravy. + + + + Accept midi clock input + Přijmout vstup hodin MIDI + + + + Accept midi real time input + Přijmout vstup MIDI ve skutečném čase (RT) + + + + Accept MMC input + Přijmout vstup MMC + + + + Accept MTC input + Přijmout vstup MTC + + + + Receive start rewinds before playing + Přijmout začátek přetočí před přehráváním + + + + Transmit id number. 127 = Global. Double click to edit. + Odeslat číslo ID. 127 = Celkové. Dvojité klepnutí pro úpravy. + + + + Send midi clock output + Poslat výstup hodin MIDI + + + + Send midi realtime output + Poslat výstup MIDI ve skutečném čase (RT) + + + + + Send MMC output + Poslat výstup MMC + + + + + Send MTC output + Poslat výstup MTC + + + + Midi clock input detected. +Current port actually used is red. +Click to force a port to be used. + Zjištěn vstup hodin MIDI. +Nynější skutečně používaná přípojka je červená. +Klepněte pro vynucení přípojky, která se má používat. + + + + Midi realtime input detected, including + start/stop/continue, and song position. + Zjištěn vstup MIDI ve skutečném čase (RT), včetně +spustit/zastavit/pokračovat a polohy písně. + + + + MMC input detected, including stop/play/deferred play, and locate. + Zjištěn vstup MMC, včetně +zastavit/přehrát/odložené přehrávání a určit polohu. + + + + MTC input detected, including forward quarter-frame sync and full-frame locate. +Current port actually used is red. Click to force a port to be current. + Zjištěn vstup MTC, včetně seřízení dopředu-čtvrťový-snímek a +rozpoznání polohy celého-snímku. Nyní používaná přípojka je +červená. Klepněte pro vynucení jiné připojky. + + + + Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detects format of MTC quarter and full frame, and MMC locate. + Zjištěn formát SMPTE: 24fps, 25fps, 30fps drop snímek, nebo 30fps ne-drop +Zjišťuje formát MTC čtvrťového a celého snímku, a rozpoznání polohy MMC. + + + + Receive id number. 127 = global receive all, even if not global. + Přijmout číslo ID. 127 = celkové přijmout vše, i když není celkové. + + + + Accept midi clock input. Only one input is used for clock. +Auto-acquire: If two or more port realtime inputs are enabled, + the first clock detected is used, until clock is lost, + then another can take over. Best if each turns off its clock + at stop, so MusE can re-acquire the clock from another port. +Click on detect indicator to force another. + Přijmout vstup hodin MIDI. Pro hodiny se používá jen jeden vstup. +Automaticky použít: Pokud je povoleno více než jeden vstup ve skutečném +čase, použijí se první rozpoznané hodiny, dokud nejsou ztraceny. +Pak se převezmou jiné. Nejlepší je, když každý při zastavení své hodiny vypne, +takže MusE může používat hodiny z jiné přípojky. Klepněte na ukazatel +rozpoznání pro vynucení jiné. + + + + Accept midi realtime input, including + start/stop/continue, and song position. +Non-clock events (start,stop etc) are + accepted by ALL enabled ports. +This means you may have several master + devices connected, and muse will accept + input from them. + Přijmout vstupy ve skutečném čase MIDI, včetně +Spustit/Zastavit/Pokračovat a Poloha písně. +Ne-hodinové události (Spustit/Zastavit atd.) jsou +přijaty VŠEMY zapnutými přípojkami. +To znamená, že můžete mít připojeno více hlavních +zařízení, a MusE přijme jejich data. + + + + Accept MMC input, including stop/play/deferred play, and locate. + Přijmout vstup MMC včetně zastavit/přehrát/pozdržené přehrávání a poloha. + + + + Accept MTC input, including forward quarter-frame sync and full-frame locate. +See 'rc' column for more help. + Přijmout vstup MTC včetně seřízení dopředu-čtvrťový-snímek a +rozpoznání polohy celého-snímku. Podívejte se na sloupec "rc" +pro další nápovědu. + + + + When start is received, rewind before playing. +Note: It may be impossible to rewind fast + enough to synchronize with the external device. + Když je přijato spuštění, přetočí se před přehráváním zpět. +Poznámka: Může být nemožné provést přetočení zpět dostatečně +rychle tak, aby se zůstalo v seřízeném stavu s vnějším zařízením. + + + + Transmit id number. 127 = global transmit to all. + Odeslat číslo ID. 127 = celkové odeslat všem. + + + + Send midi clock output. If 'Slave to External Sync' is chosen, + muse can re-transmit clock to any other chosen ports. + Poslat výstup hodin MIDI. Když je vybráno "Spojit s vnějším sync", +může MusE signál hodin předat jakýmkoli dalším vybraným přípojkám. + + + + Send midi realtime output, including start/stop/continue, + and song position. If 'Slave to external sync' is chosen, + muse can re-transmit midi realtime input messages to any + other chosen ports. This means you may have several slave + devices connected, and muse can re-send realtime messages + to any or all of them. + Poslat výstup ve skutečném čase MIDI, včetně +Spustit/Zastavit/Pokračovat a Poloha písně. +Když je vybráno "Spojit s vnějším sync", může MusE +zprávy vstupu ve skutečném čase MIDI znovu předat +jakýmkoli dalším vybraným přípojkám. To znamená, +že můžete mít připojeno více "otrockých"zařízení +a MusE může zprávy ve skutečném čase předat/poslat +znovu jednomu nebo všem. + + + + Port + Přípojka + + + + Device Name + Název zařízení + + + + c + c + + + + k + k + + + + r + r + + + + m + m + + + + t + t + + + + type + Typ + + + + rid + rid + + + + rc + rc + + + + rr + rr + + + + rm + rm + + + + rt + rt + + + + rw + rw + + + + tid + tid + + + + tc + tc + + + + tr + tr + + + + tm + tm + + + + tt + tt + + + + MusE + MusE + + + + Settings have changed +Apply sync settings? + Nastavení se změnila. +Použít nastavení pro seřízení? + + + + &Apply + &Použít + + + + &No + &Ne + + + + &Abort + &Zrušit + + + + <none> + <Žádný> + + + + MusEGui::MidiTrackInfo + + + + <unknown> + <neznámý> + + + + MusEGui::MidiTransformerDialog + + + + New + Nový + + + + MusEGui::MixdownFileDialog + + + Wave Files (*.wav);;All Files (*) + Soubory Wave (*.wav);;Všechny soubory (*) + + + + MusEGui::MusE + + + + Failed to start audio! + Nepodařilo se spustit zvuk! + + + + Was not able to start audio, check if jack is running. + + Nepodařilo se spustit zvuk. Ověřte, že JACK běží. + + + + Timeout waiting for audio to run. Check if jack is running. + + Překročení času při čekání na zvuk. Ověřte, že JACK běží. + + + + Und&o + &Zpět + + + + Re&do + Z&novu + + + + undo last change to song + Vrátit poslední změnu na písni + + + + redo last undo + Udělat poslední vrácení o krok zpět + + + + Loop + Smyčka + + + + loop between left mark and right mark + Smyčka mezi levou značkou a pravou značkou + + + + Punchin + Začít nahrávání na levé značce + + + + record starts at left mark + Nahrávání začne na levé značce + + + + Punchout + Ukončit nahrávání na pravé značce + + + + record stops at right mark + Nahrávání skončí na pravé značce + + + + Start + Spustit + + + + rewind to start position + Skočit na začátek + + + + Rewind + O jeden takt zpět + + + + rewind current position + Skočit o jeden takt zpět + + + + Forward + O jeden takt vpřed + + + + move current position + Skočit o jeden takt vpřed + + + + Stop + Zastavit + + + + stop sequencer + Zastavit přehrávání + + + + Play + Přehrát + + + + start sequencer play + Spustit přehrávání + + + + Record + Nahrávat + + + + to record press record and then play + Pro nahrávání klepněte nejprve na tlačítko "Nahrávat" a potom na "Přehrávat" + + + + + Panic + Nouzové zastavení + + + + send note off to all midi channels + Poslat příkaz "Nota vypnuta" všem kanálům MIDI + + + + &New + &Nový + + + + + Create New Song + Vytvořit novou píseň + + + + &Open + &Otevřít píseň + + + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Klepněte na toto tlačítko pro otevření <em>Nové písně</em>.<br> Také můžete v nabídce Soubor vybrat příkaz <b>Nová píseň</b>. + + + + Open &Recent + Otevřít &poslední píseň + + + + + + &Save + &Uložit + + + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Klepněte na toto tlačítko pro uložení vámi právě upravované písně s automaticky položeným dotazem na název souboru. +Také můžete v nabídce Soubor vybrat příkaz Uložit. + + + + Save &As + Uložit &jako + + + + Import Midifile + Zavést soubor MIDI + + + + Export Midifile + Vyvést soubor MIDI + + + + Import Part + Zavést část + + + + + Import Wave File + Zavést soubor Wave + + + + Find unused wave files + Najít nepoužívané soubory Wave + + + + &Quit + &Ukončit + + + + Song Info + Informace o písni + + + + Transport Panel + Deska pro přesun + + + + Bigtime Window + Velký ukazatel času + + + + Mixer A + Směšovač A + + + + Mixer B + Směšovač B + + + + Cliplist + Seznam ukázek + + + + Marker View + Pohled se značkami + + + + Arranger View + Pohled s aranžérem + + + + Fullscreen + Celá obrazovka + + + + &Plugins + &Přídavné moduly + + + + Edit Instrument + Upravit nástroj + + + + Input Plugins + Vstupní přídavné moduly + + + + Transpose + Převedení + + + + Midi Input Transform + Proměnit vstup MIDI + + + + Midi Input Filter + Vstupní filtr MIDI + + + + Midi Remote Control + Vzdálené ovladání MIDI + + + + Rhythm Generator + Generátor rytmu + + + + Reset Instr. + Nastavit nástroj znovu + + + + Init Instr. + Zapnout nástroj + + + + Local Off + Místní vypnuto + + + + Bounce to Track + Odmíchat na stopu + + + + Bounce to File + Odmíchat do souboru + + + + Restart Audio + Spustit zvuk znovu + + + + Mixer Automation + Automatizace míchacího pultu + + + + Take Snapshot + Udělat snímek + + + + Clear Automation Data + Smazat data automatizace + + + + Cascade + Překrývat + + + + Tile + Uspořádat jedno vedle druhého + + + + In rows + V řádcích + + + + In columns + Ve sloupcích + + + + Global Settings + Celková nastavení + + + + Configure Shortcuts + Nastavit klávesové zkratky + + + + Follow Song + Sledovat píseň + + + + Don't Follow Song + Nesledovat píseň + + + + Follow Page + Sledovat píseň na stranách + + + + Follow Continuous + Sledovat píseň stále + + + + Metronome + Metronom + + + + Midi Sync + Midi Sync + + + + Midi File Import/Export + Zavedení/Vyvedení souboru MIDI + + + + Appearance Settings + Nastavení vzhledu + + + + Midi Ports / Soft Synth + Přípojky MIDI/Softwarové syntetizátory + + + + &Manual + &Příručka + + + + &MusE Homepage + Stránky &MusE + + + + &Report Bug... + &Nahlásit chybu... + + + + &About MusE + &O programu MusE + + + + Song Position + Poloha písně + + + + Tempo + Tempo + + + + Signature + Taktové označení + + + + File Buttons + Tlačítka pro soubor + + + + Undo/Redo + Zpět/Znovu + + + + Transport + Přesun + + + + &File + &Soubor + + + + &View + &Pohled + + + + &Midi + &MIDI + + + + &Audio + &Zvuk + + + + A&utomation + A&utomatizace + + + + &Windows + &Okna + + + + MusE Se&ttings + Nas&tavení MusE + + + + &Help + &Nápověda + + + + About &Qt + O &Qt + + + + Cannot read template + Nelze přečíst předlohu + + + + File open error + Chyba při otevírání souboru + + + + File read error + Chyba při čtení souboru + + + + Unknown File Format: %1 + Neznámý formát souboru: %1 + + + + + + MusE: Song: %1 + MusE: Píseň: %1 + + + + MusE: load project + MusE: Nahrát projekt + + + + MusE: load template + MusE: Nahrát předlohu + + + + MusE: Write File failed + MusE: Zápis souboru se nezdařil + + + + The current Project contains unsaved data +Save Current Project? + Nynější projekt obsahuje neuložená data. +Uložit nynější projekt? + + + + + S&kip + &Přeskočit + + + + &Cancel + Z&rušit + + + + MusE: Save As + MusE: Uložit jako + + + + + Nothing to edit + Není co upravovat + + + + + + + + MusE: Bounce to Track + MusE: Odmíchat na stopu + + + + No wave tracks found + Nebyly nalezeny žádné stopy Wave + + + + + No audio output tracks found + Nebyly nalezeny žádné zvukové výstupní stopy + + + + Select one audio output track, +and one target wave track + Vyberte jednu zvukovou výstupní stopu +a jednu cílovou stopu Wave + + + + Select one target wave track + Vyberte jednu cílovou stopu Wave + + + + Select one target wave track, +and one audio output track + Vyberte jednu cílovou stopu Wave +a jednu zvukovou výstupní stopu + + + + + MusE: Bounce to File + MusE: Odmíchat do souboru + + + + Select one audio output track + Vyberte jednu zvukovou výstupní stopu + + + + MusE: Bounce + MusE: Odmíchat + + + + set left/right marker for bounce range + Nastavit levou/pravou značku pro oblast odmíchání + + + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Nynější projekt obsahuje neuložená data. +Nahrání přepíše nynější projekt: +Uložit nynější projekt? + + + + + &Abort + &Zrušit + + + + This will clear all automation data on + all audio tracks! +Proceed? + Toto smaže všechna data automatizace +u všech zvukových stop! +Pokračovat? + + + + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? + Toto udělá v nynější poloze snímek +automatizace všech ovladačů na všech +zvukových stopách. +Pokračovat? + + + + MusE: Export Midi + MusE: Vyvést MIDI + + + + no help found at: + Nebyla nalezena žádná nápověda: + + + + MusE: Open Help + MusE: Otevřít nápovědu + + + + Unable to launch help + Nelze spustit nápovědu + + + + For some reason MusE has to launch the default +browser on your machine. + Z určitého důvodu musí MusE na vašem stroji +spustit výchozí prohlížeč. + + + + MusE: Import Midi + MusE: Zavést MIDI + + + + Add midi file to current project? + + Přidat soubor MIDI do nynějšího projektu? + + + + &Add to Project + &Přidat do projektu + + + + &Replace + &Nahradit + + + + reading midifile + + Čte se soubor MIDI + + + + +failed: + +Nepodařilo se: + + + + Import part is only valid for midi and wave tracks! + Zavedení části je platné pouze pro stopy MIDI a Wave! + + + + MusE: load part + MusE: Nahrát část + + + + No track selected for import + Pro zavedení nebyla vybrána žádná stopa + + + + %n part(s) out of %1 could not be imported. +Likely the selected track is the wrong type. + + Nepodařilo se zavést %n část z %1. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se zavést %n části z %1. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se zavést %n částí z %1. +Pravděpodobně má vybraná stopa nesprávný typ. + + + + + %n part(s) could not be imported. +Likely the selected track is the wrong type. + + Nepodařilo se zavést %n část. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se zavést %n části. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se zavést %n částí. +Pravděpodobně má vybraná stopa nesprávný typ. + + + + + to import an audio file you have first to selecta wave track + pro zavedení zvukového souboru nejprve musíte vybrat stopu Wave + + + + Import Wavefile + Zavést soubor Wave + + + + This wave file has a samplerate of %1, +as opposed to current setting %2. +Do you still want to import it? + Tento soubor Wave má vzorkovací kmitočet %1, +jako protiklad k nynějšímu nastavení %2. +Stále ještě jej chcete zavést? + + + + &Yes + &Ano + + + + &No + &Ne + + + + MusEGui::NoteInfo + + + Note Info + Informace o notě + + + + delta/absolute mode + Delta/Absolutní režim + + + + Start + Spustit + + + + Len + Délka + + + + Pitch + Výška tónu + + + + Velo On + Rychlost Zapnuto + + + + Velo Off + Rychlost Vypnuto + + + + MusEGui::PartCanvas + + + Cannot copy/move/clone to different Track-Type + Nelze kopírovat/přesunovat/klonovat na jiný typ stopy + + + + C&ut + Vyj&mout + + + + &Copy + &Kopírovat + + + + s&elect + &Vybrat + + + + clones + Klony + + + + rename + Přejmenovat + + + + color + Barva + + + + delete + Smazat + + + + split + Rozdělit + + + + glue + Lepidlo + + + + super glue (merge selection) + Vynikající lepidlo (sloučit výběr) + + + + de-clone + Zrušit klonování + + + + + + save part to disk + Uložit část na disk + + + + wave edit + Editor Wave + + + + file info + Informace o souboru + + + + MusE: save part + MusE: Uložit část + + + + Part name: %1 +Files: + Název části: %1 +Soubory: + + + + Remove selected + Odstranit vybrané + + + + %n part(s) out of %1 could not be pasted. +Likely the selected track is the wrong type. + + Nepodařilo se vložit %n část z %1. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se vložit %n části z %1. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se vložit %n částí z %1. +Pravděpodobně má vybraná stopa nesprávný typ. + + + + + %n part(s) could not be pasted. +Likely the selected track is the wrong type. + + Nepodařilo se vložit %n část. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se vložit %n části. +Pravděpodobně má vybraná stopa nesprávný typ. + Nepodařilo se vložit %n částí. +Pravděpodobně má vybraná stopa nesprávný typ. + + + + + Cannot paste: multiple tracks selected + Nelze vložit: vybráno více stop + + + + Cannot paste: no track selected + Nelze vložit: nevybrána žádná stopa + + + + Can only paste to midi/drum track + Vložení možné jen do stopy MIDI/Bicí + + + + Can only paste to wave track + Vložení možné jen do stopy Wave + + + + Can only paste to midi or wave track + Vložení možné jen do stopy MIDI nebo Wave + + + + Cannot paste: wrong data type + Nelze vložit: Nesprávný datový typ + + + + MusEGui::PasteDialog + + + %n quarter(s) + + %n čtvrťová nota + %n čtvrťové noty + %n čtvrťových not + + + + + %1 quarter + for floating-point arguments like 1.5 + %1 čtvrťová nota + + + + %1 quarters + for floating-point arguments like 1.5 + %1 čtvrťové noty + + + + MusEGui::PasteEventsDialog + + + %n quarter(s) + + %n čtvrťová nota@@ + %n čtvrťové noty + %n čtvrťových not + + + + + %1 quarter + for floating-point arguments like 1.5 + %1 čtvrťová nota + + + + %1 quarters + for floating-point arguments like 1.5 + %1 čtvrťové noty + + + + MusEGui::PianoRoll + + + &Edit + Ú&pravy + + + + C&ut + Vyj&mout + + + + &Copy + &Kopírovat + + + + Copy events in range + Kopírovat události v rozsahu + + + + &Paste + &Vložit + + + + Paste (with dialog) + Vložit (s dialogem) + + + + Delete &Events + Smazat &události + + + + &Select + &Vybrat + + + + Select &All + Vybrat &vše + + + + &Deselect All + &Zrušit výběr všeho + + + + Invert &Selection + Obrátit &výběr + + + + &Inside Loop + &Uvnitř smyčky + + + + &Outside Loop + &Vně smyčky + + + + &Previous Part + &Předchozí část + + + + &Next Part + &Další část + + + + Fu&nctions + &Funkce + + + + Quantize + Kvantizovat + + + + Modify Note Length + Změnit délku noty + + + + Modify Velocity + Změnit sílu nárazu + + + + Crescendo/Decrescendo + Crescendo/Decrescendo + + + + Transpose + Převedení + + + + Erase Events + Smazat události + + + + Move Notes + Přesunout noty + + + + Set Fixed Length + Nastavit pevnou délku + + + + Delete Overlaps + Smazat překrytí + + + + Legato + Legato + + + + &Plugins + &Přídavné moduly + + + + Window &Config + &Nastavení okna + + + + &Event Color + Barva &události + + + + &Blue + &Modrá + + + + &Pitch colors + Barvy pro &výšku tónu + + + + &Velocity colors + Barvy pro &sílu nárazu + + + + Pianoroll tools + Nástroje pro váleček + + + + Step Record + Nahrávat po taktu + + + + Midi Input + Vstup MIDI + + + + Play Events + Přehrát události + + + + ctrl + Ctrl + + + + Add Controller View + Přidat pohled ovladače + + + + MusEGui::PluginDialog + + + MusE: select plugin + MusE: Vybrat přídavný modul + + + + Type + Typ + + + + Lib + Lib + + + + Label + Štítek + + + + Name + Název + + + + AI + Al + + + + AO + AO + + + + CI + Cl + + + + CO + CO + + + + IP + IP + + + + id + ID + + + + Maker + Výrobce + + + + Copyright + Autorské právo + + + + Audio inputs + Vstupy zvuku + + + + Audio outputs + Výstupy zvuku + + + + Control inputs + Vstupy ovládání + + + + Control outputs + Výstupy ovládání + + + + In-place capable + Schopen v místě + + + + ID number + Číslo ID + + + + Ok + OK + + + + Cancel + Zrušit + + + + Show plugs: + Ukázat přídavné moduly: + + + + Mono and Stereo + Mono a stereo + + + + Stereo + Stereo + + + + Mono + Mono + + + + Show All + Ukázat vše + + + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + Vyberte, které typy přídavných modulů mají být v seznamu viditelné.<br>Uvědomte si, že použití přídavných modulů monona stopy stereo není problém, dva budou použity souběžně.<br>Dejte si pozor na to, že alternativa 'vše' zahrnuje přídavné moduly, které v přihrádce s efekty nemusí být užitečné. + + + + Search in 'Label' and 'Name': + Hledat ve 'Štítek' a 'Název': + + + + dssi synth + syntetizátor dssi + + + + dssi effect + efekt dssi + + + + ladspa + ladspa + + + + MusEGui::PluginGui + + + File Buttons + Tlačítka pro soubor + + + + Load Preset + Nahrát přednastavení + + + + Save Preset + Uložit přednastavení + + + + + bypass plugin + Přeskočit přídavný modul pro tok signálu + + + + MusE: load preset + MusE: Nahrát přednastavení + + + + Error reading preset. Might not be right type for this plugin + Chyba při čtení přednastavení. Nemusí to být správný typ pro tento přídavný modul + + + + MusE: save preset + MusE: Uložit přednastavení + + + + MusEGui::ProjectCreateImpl + + + Select directory + Vybrat adresář + + + + MusEGui::RoutePopupMenu + + + + + + + + + + Channel + Kanál + + + + + + + <none> + <Žádný> + + + + + + Soloing chain + Řetěz sóla + + + + + Audio returns + Zpáteční kanály zvuku + + + + Warning: No input devices! + Varování: Žádná vstupní zařízení! + + + + Open midi config... + Otevřít nastavení MIDI... + + + + Toggle all + Přepnout vše + + + + More... + Více... + + + + Audio sends + Zvuk posílá + + + + Midi port sends + Přípojka MIDI posílá + + + + MusEGui::ScoreCanvas + + + Treble + Houslový klíč + + + + Bass + Basový klíč + + + + Grand Staff + Oba klíče + + + + Remove staff + Odstranit osnovu + + + + Ambiguous part + Nejasná část + + + + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + Jsou dvě nebo tři možné části, ke kterým se dá nota přidat, ale žádná není vybrána. Vyberte, prosím, cílovou část klepnutím na jakoukoli notu k ní patřící, a zkuste to znovu, nebo přidejte novou notovou osnovu, která bude obsahovat jen cílovou část. + + + + No part + Žádná část + + + + There are no parts you could add the note to. + Nejsou tu žádné části, do kterých byste mohl přidat notu. + + + + MusEGui::ScoreEdit + + + Step recording tools + Nástroje pro nahrávání po taktu + + + + Step Record + Nahrávat po taktu + + + + Note settings + Nastavení noty + + + + Note length: + Délka noty: + + + + last + poslední + + + + + + Apply to new notes: + Použít na nové noty: + + + + + Apply to selected notes: + Použít na vybrané noty: + + + + Velocity: + Síla nárazu: + + + + Off-Velocity: + Síla nárazu vypnuto: + + + + Quantisation settings + Nastavení kvantizace + + + + Quantisation: + Kvantizace: + + + + Pixels per whole: + Pixelů na celou notu: + + + + &Edit + Ú&pravy + + + + C&ut + Vyj&mout + + + + &Copy + &Kopírovat + + + + Copy events in range + Kopírovat události v rozsahu + + + + &Paste + &Vložit + + + + Paste (with dialog) + Vložit (s dialogem) + + + + Delete &Events + Smazat &události + + + + &Select + &Vybrat + + + + Select &All + Vybrat &vše + + + + &Deselect All + &Zrušit výběr všeho + + + + Invert &Selection + Obrátit &výběr + + + + &Inside Loop + &Uvnitř smyčky + + + + &Outside Loop + &Vně smyčky + + + + Fu&nctions + &Funkce + + + + &Quantize + &Kvantizovat + + + + Change note &length + Změnit &délku noty + + + + Change note &velocity + Změnit &sílu nárazu noty + + + + Crescendo/Decrescendo + Crescendo/Decrescendo + + + + Transpose + Převedení + + + + Erase Events + Smazat události + + + + Move Notes + Přesunout noty + + + + Set Fixed Length + Nastavit pevnou délku + + + + Delete Overlaps + Smazat překrytí + + + + Legato + Legato + + + + Window &Config + &Nastavení okna + + + + Note head &colors + &Barvy pro hlavičky not + + + + &Black + Če&rná + + + + &Velocity + &Síla nárazu + + + + &Part + Čá&st + + + + Set up &preamble + Nastavit úv&od + + + + Display &key signature + Zobrazit &předznamenání + + + + Display &time signature + Zobrazit &taktové označení + + + + Set Score &name + Nastavit &název notového zápisu + + + + + Enter the new score title + Zadat nový název notového zápisu + + + + Error + Chyba + + + + Changing score title failed: +the selected title is not unique + Změna názvu notového zápisu se nezdařila: +zvolený název není jedinečný + + + + MusEGui::ScrollScale + + + next page + Další strana + + + + previous page + Předchozí strana + + + + current page number + Číslo nynější strany + + + + MusEGui::ShortcutCaptureDialog + + + Ok + OK + + + + Cancel + Zrušit + + + + Shortcut conflicts with %1 + Klávesová zkratka se střetává s %1 + + + + Undefined + Nestanoveno + + + + MusEGui::SigScale + + + signature scale + Měřítko taktového označení + + + + MusEGui::SigToolbarWidget + + + time signature at current position + Taktové označení na nynější značce polohy + + + + Signature: + Taktové označení: + + + + MusEGui::Strip + + + Remove track? + Odstranit stopu? + + + + MusEGui::TList + + + <none> + <Žádný> + + + + visible + Viditelný + + + + no clef + Žádný klíč + + + + Treble + Houslový klíč + + + + Bass + Basový klíč + + + + Grand + Oba klíče + + + + + off + Vypnuto + + + + <unknown> + <neznámý> + + + + MusE: bad trackname + MusE: Špatný název stopy + + + + please choose a unique track name + Vyberte, prosím, jedinečný název pro stopu + + + + Unused Devices + Nepoužívaná zařízení + + + + + Update drummap? + Obnovit rozložení bicích? + + + + Do you want to use same port for all instruments in the drummap? + Chcete pro všechny nástroje v rozložení bicích použít stejnou přípojku? + + + + + &Yes + &Ano + + + + + &No + &Ne + + + + + show gui + Ukázat uživatelské rozhraní + + + + + show native gui + Ukázat původní rozhraní + + + + Midi control + Ovládání MIDI + + + + Assign + Přiřadit + + + + Clear + Smazat + + + + Treble clef + Houslový klíč + + + + Bass clef + Basový klíč + + + + Grand Staff + Oba klíče + + + + Viewable automation + Viditelná automatizace + + + + Internal + Vnitřní + + + + Synth + Syntetizátor + + + + Delete Track + Smazat stopu + + + + Track Comment + Poznámka ke stopě + + + + Insert Track + Vložit stopu + + + + Midi + MIDI + + + + Drum + Bicí + + + + Do you want to use same port and channel for all instruments in the drummap? + Chcete pro všechny nástroje v rozložení bicích použít stejnou přípojku a týž kanál? + + + + MusEGui::TempoSig + + + Tempo/Sig + Tempo/Druh taktu + + + + MusEGui::TempoToolbarWidget + + + tempo at current position + Čas na nynější značce polohy + + + + Tempo: + Tempo: + + + + MusEGui::Toolbar1 + + + + + Off + Vypnuto + + + + Solo + Sólo + + + + Cursor + Ukazovátko + + + + Snap + Magnet + + + + MusEGui::TopWin + + + As subwindow + Jako podokno + + + + Shares tools and menu + Sdílí nástroje a nabídku + + + + Fullscreen + Celá obrazovka + + + + Undo/Redo tools + Nástroje Zpět/Znovu + + + + Panic + Nouzové zastavení + + + + Transport + Přesun + + + + Song Position + Poloha písně + + + + Tempo + Tempo + + + + Signature + Taktové označení + + + + Piano roll + Váleček + + + + List editor + Editor seznamu + + + + Drum editor + Editor bicích + + + + Master track editor + Editor hlavní stopy + + + + Master track list editor + Editor seznamu hlavní stopy + + + + Wave editor + Editor Wave + + + + Clip list + Seznam ukázek + + + + Marker view + Pohled se značkami + + + + Score editor + Editor notového zápisu + + + + Arranger + Aranžér + + + + <unknown toplevel type> + <Neznámý typ nejvyšší úrovně> + + + + MusEGui::TrackComment + + + MusE: Track Comment + MusE: Poznámka ke stopě + + + + Track Comment: + Poznámka ke stopě: + + + + MusEGui::Transport + + + Overdub + Přepsat + + + + + Replace + Nahradit + + + + Rec Mode + Režim nahrávání + + + + Normal + Normální + + + + Mix + Smíchat + + + + Cycle Rec + Nahrávat ve smyčce + + + + punchin + Začít nahrávání na levé značce + + + + loop + Smyčka + + + + punchout + Ukončit nahrávání na pravé značce + + + + + Punch In + Začít nahrávání na levé značce + + + + + Loop + Smyčka + + + + + Punch Out + Ukončit nahrávání na pravé značce + + + + Left Mark + Levá značka + + + + Right Mark + Pravá značka + + + + rewind to start + Přetočit zpět na začátek + + + + Click this button to rewind to start position + Klepněte na toto tlačítko pro návrat na začátek + + + + rewind + O jeden takt zpět + + + + Click this button to rewind + Klepněte na toto tlačítko pro skok o jeden takt zpět + + + + forward + O jeden takt vpřed + + + + Click this button to forward current play position + Klepněte na toto tlačítko pro skok o jeden takt vpřed + + + + stop + Zastavit + + + + Click this button to stop playback + Klepněte na toto tlačítko pro zastavení přehrávání + + + + play + Přehrát + + + + Click this button to start playback + Klepněte na toto tlačítko pro spuštění přehrávání + + + + record + Nahrávat + + + + Click this button to enable recording + Klepnout na toto tlačítko pro povolení režimu nahrávání + + + + AC + AC + + + + quantize during record + Kvantizovat během nahrávání + + + + Click + Klepnout + + + + metronom click on/off + Ťukání metronomu zapnuto/vypnuto + + + + Sync + Seřízení + + + + external sync on/off + Vnější seřízení zapnuto/vypnuto + + + + Jack + JACK + + + + Jack transport sync on/off + Seřízení přesunu JACK zapnuto/vypnuto + + + + Master + Hlavní + + + + use master track + Použít hlavní stopu + + + + MusEGui::VisibleTracks + + + + Show wave tracks + Ukázat stopy Wave + + + + + Show group tracks + Ukázat stopy skupin + + + + + Show aux tracks + Ukázat stopy Aux + + + + + Show input tracks + Ukázat vstupní stopy + + + + + Show output tracks + Ukázat výstupní stopy + + + + + Show midi tracks + Ukázat stopy MIDI + + + + + Show synth tracks + Ukázat stopy syntetizátorů + + + + Visible track types + Viditelné typy stop + + + + MusEGui::WaveEdit + + + &Edit + Ú&pravy + + + + Func&tions + &Funkce + + + + &Gain + &Zesílení + + + + Other + Jiné + + + + &Copy + &Kopírovat + + + + C&ut + Vyj&mout + + + + &Paste + &Vložit + + + + Edit in E&xternal Editor + Upravit ve &vnějším editoru + + + + Mute Selection + Ztlumit výběr + + + + Normalize Selection + Normalizovat výběr + + + + Fade In Selection + Postupné zesílení signálu ve výběru + + + + Fade Out Selection + Postupné zeslabení signálu ve výběru + + + + Reverse Selection + Obrátit výběr + + + + Select + Vybrat + + + + Select &All + Vybrat &vše + + + + &Deselect All + &Zrušit výběr všeho + + + + Window &Config + &Nastavení okna + + + + WaveEdit tools + Nástroje pro úpravy Wave + + + + Solo + Sólo + + + + Cursor + Ukazovátko + + + + MusEGui::WaveView + + + MusE - external editor failed + MusE: Vnější editor selhal + + + + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + MusE se nepodařilo spustit vnější editor. +Prověřte, zda je nastavení editoru v Celková +nastavení->Zvuk: Vnější editor Wave nastaven +na platný editor. + + + + MusE - file size changed + MusE: Velikost souboru změněna + + + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + Když provádíte úpravy ve vnějším editoru, neměli byste měnit +velikost souboru, protože tato se musí vejít do vybrané oblasti. + +Chybějící data jsou ztlumena + + + + OrganGuiBase + + + MusE: Organ + MusE: Varhany + + + + Drawbars + Táhla + + + + 16' + 16' + + + + 4' + 4' + + + + 2 2/3' + 2 2/3' + + + + 2' + 2' + + + + 5 1/3' + 5 1/3' + + + + 8' + 8' + + + + Envelope Hi + Obalová křivka vysoká + + + + + Release + Uvolnění + + + + + Sustain + Držení tónu + + + + + Decay + Pokles + + + + + Attack + Náběh + + + + + + + + + ms + ms + + + + + cB + cB + + + + Envelope Lo + Obalová křivka nízká + + + + O-1 + Osc-1 + + + + Oscillator + Oscilátor + + + + Brass + Žesťové nástroje + + + + Reed + Plátkové nástroje + + + + Flute + Flétna + + + + Velocity + Síla nárazu + + + + PasteDialogBase + + + MusE: Paste Parts + MusE: Vložit části + + + + Number and raster + Počet a rastr + + + + insert + Vložit + + + + times + krát + + + + raster + rastr + + + + ticks + tiky + + + + Move, Merge, Clone + Přesunout, sloučit, klonovat + + + + Move everything to the right + Přesunout vše napravo + + + + Move only affected parts to the right + Přesunout ovlivněné části napravo + + + + Put everything into a single track + Dát vše do jedné stopy + + + + Merge with existing parts + Sloučit se stávajícími částmi + + + + Insert as clones (where possible) + Vložit jako klony (tam, kde je to možné) + + + + OK + OK + + + + Cancel + Zrušit + + + + PasteEventsDialogBase + + + MusE: Paste Events + MusE: Vložit události + + + + Number and raster + Počet a rastr + + + + insert + Vložit + + + + times + krát + + + + raster + rastr + + + + + ticks + tiky + + + + Paste options + Volby pro vložení + + + + Always into existing parts + Vždy do stávajících částí + + + + Never into existing parts + Nikdy do stávajících částí + + + + Into existing parts if part has not +to be expanded by more than + Do stávajících částí, pokud část nemá +být rozšířena o víc jak + + + + Put everything into the (selected) part + Dát vše do (vybrané) části + + + + OK + OK + + + + Cancel + Zrušit + + + + ProjectCreate + + + Create Project + Vytvořit projekt + + + + Projects folder: + Složka s projektem: + + + + + + ... + ... + + + + Project Name: + Název projektu: + + + + Project is a Template + Projekt je předloha + + + + Write window state + Zapsat stav okna + + + + Project song file type: + Typ souboru s písní projektu: + + + + Project Path to song file: + Cesta projektu k souboru s písní: + + + + Create project folder (recommended for audio projects) + Vytvořit složku s projektem (doporučeno pro projekty se zvukem) + + + + Song information: + Informace o písni: + + + + QObject + + + + Error + Chyba + + + + + Please first select the range for crescendo with the loop markers. + Nejprve, prosím, zvolte rozsah crescenda se značkami pro smyčku. + + + + QWidget + + + + Cannot convert sysex string + Nelze převést řetězec sysex + + + + + Hex String too long (2048 bytes limit) + Šestnáctkový řetězec je příliš dlouhý (hranice je 2048 bytů) + + + + generic midi + Obecné MIDI + + + + new + Nový + + + + + None + Žádný + + + + create peakfile for + Vytvořit soubor s vrcholem hladiny pro + + + + No selection. Ignoring + Žádný výběr. Přehlíží se + + + + MusE: get file name + MusE: Předat název souboru + + + + The directory +%1 +does not exist. +Create it? + Adresář +%1 +neexistuje. +Vytvořit jej? + + + + MusE: create directory + MusE: Vytvořit adresář + + + + creating dir failed + Vytvoření adresáře se nezdařilo + + + + File +%1 +exists. Overwrite? + Soubor +%1 +existuje. Přepsat? + + + + MusE: write + MusE: Zapsat + + + + Open File +%1 +failed: %2 + Soubor +%1 +se nepodařilo otevřít: %2 + + + + MusE: Open File + MusE: Otevřít soubor + + + + QuantBase + + + MusE: Quantize + MusE: Kvantizovat + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Values + Hodnoty + + + + Strength: + Síla: + + + + % + % + + + + Threshold (ticks): + Práh (tiky): + + + + Quantize Len + Délka kvantizace + + + + Raster + Rastr + + + + Whole + Celá + + + + Half + Půlová + + + + 4th + Čtvrťová + + + + 4th Triplet + Triola čtvrťová + + + + 8th + Osminová + + + + 8th Triplet + Triola osminová + + + + 16th + Šestnáctinová + + + + 16th Triplet + Triola šestnáctinová + + + + 32th + Dvaatřicetinová + + + + 32th Triplet + Triola dvaatřicetinová + + + + Swing: + Swing: + + + + If the proposed change in tick or length is smaller than threshold, nothing is done. +If swing=0, this is normal +If swing is 33, you get a 2:1-rhythm. +If swing is -33, you get a 1:2-rhythm. + + Pokud je změna polohy nebo délky menší než práh, neudělá se nic. +Pokud je swing=0, bude se kvantizovat normálně +Pokud je swing 33, dostanete rytmus 2:1. +Pokud je -33, dostanete rytmus 1:2. + + + + + OK + OK + + + + Cancel + Zrušit + + + + RemoveBase + + + MusE: Erase Notes + MusE: Vymazat noty + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Thresholds + Prahy + + + + ticks + tiky + + + + Velocity + Síla nárazu + + + + Length + Délka + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pokud není zaškrtnuto nic, je odstraněno vše.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pokud je zaškrtnuta rychlost, jsou odstraněny pouze noty s prahem síly nárazu (dynamiky) &lt;.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Pokud je zaškrtnuto obojí, jsou odstraněny noty s prahem síly nárazu (dynamiky) &lt; NEBO noty s prahem délky &lt;.</p></body></html> + + + + OK + OK + + + + Cancel + Zrušit + + + + RouteDialogBase + + + MusE: Routing + MusE: Tok signálu + + + + Add Route + Přidat tok signálu + + + + Source: + Zdroj: + + + + Destination: + Cíl: + + + + connect source to destination + Spojit zdroj s cílem + + + + Connect + Spojit + + + + Current Routes + Nynější toky signálu + + + + Source + Zdroj + + + + Destination + Cíl + + + + remove selected route + Odstranit vybraný tok signálu + + + + Remove + Odstranit + + + + SS_PluginChooserBase + + + SimpleDrums - Ladspa Plugin Chooser + Jednoduché bubny - volič přídavného modulu LADSPA + + + + Name + Název + + + + Label + Štítek + + + + Inports + Vstupní přípojky + + + + Outports + Výstupní přípojky + + + + Creator + Tvůrce + + + + &Cancel + Z&rušit + + + + Alt+C + Alt+C + + + + &OK + &OK + + + + Alt+O + Alt+O + + + + SS_PluginFront + + + Clear and unload effect + Smazat a vyložit efekt + + + + Load effect + Nahrát efekt + + + + Toggle display of effect parameters + Přepnout zobrazení parametrů efektů + + + + Turn effect on/off + Zapnout/Vypnout efekt + + + + SetlenBase + + + MusE: Set Note Length + MusE: Nastavit délku noty + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Value + Hodnota + + + + New length + Nová délka + + + + ticks + tiky + + + + OK + OK + + + + Cancel + Zrušit + + + + ShortcutCaptureDialogBase + + + Enter shortcut sequence + Zadat klávesovou zkratku + + + + Press keys to enter shortcut sequence! + Tisknout klávesy pro zadání posloupnosti klávesové zkratky! + + + + Old shortcut: + Stará klávesová zkratka: + + + + + Undefined + Nestanoveno + + + + New shortcut: + Nová klávesová zkratka: + + + + OK + OK + + + + Cancel + Zrušit + + + + ShortcutConfigBase + + + Configure Keyboard Shortcuts + Nastavit klávesové zkratky + + + + Shortcut Category + Skupina klávesové zkratky + + + + Shortcut + Klávesová zkratka + + + + Description + Popis + + + + &Clear + &Smazat + + + + Alt+C + Alt+C + + + + &Define + &Vymezit + + + + Alt+D + Alt+D + + + + &Apply + &Použít + + + + Alt+A + Alt+A + + + + SimpleDrumsGuiBase + + + DrumSynth 0.1 + Syntetizátor bicích 0.1 + + + + SimpleSynthGui + + + &Load setup + &Nahrát nastavení + + + + &Save setup + &Uložit nastavení + + + + Load sample dialog + Dialog pro nahrání ukázky + + + + SongInfo + + + Song Information + Informace o písni + + + + Show on song load + Ukázat při nahrávání písně + + + + &Cancel + Z&rušit + + + + Alt+C + Alt+C + + + + &Ok + &OK + + + + Alt+O + Alt+O + + + + SynthConfigBase + + + Midi Port and Soft Synth Configuration + Nastavení přípojky MIDI a softwarového syntetizátoru + + + + Instances + Instance + + + + + Name + Název + + + + + Type + Typ + + + + Midi Port + Přípojka MIDI + + + + Remove Instance + Odstranit instanci + + + + Midi connections + Spojení MIDI + + + + Soft Synthesizer + Softwarový syntetizátor + + + + Add Instance + Přidat instanci + + + + list of available software synthesizers + Seznam dostupných softwarových syntetizátorů + + + + File + Soubor + + + + Inst + Inst + + + + Version + Verze + + + + Description + Popis + + + + TransposeBase + + + MusE: Transpose + MusE: Převést + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Value + Hodnota + + + + Halftone-steps + Kroky po půltónech + + + + OK + OK + + + + Cancel + Zrušit + + + + UnusedWaveFiles + + + Dialog + Dialog + + + + List of unused audio files in current project directory: + Seznam nepoužívaných zvukových souborů v adresáři s nynějším projektem: + + + + Current project + Nynější projekt + + + + All .med files +in current + directory + Všechny soubory .med +v adresáři s nynějším +projektem + + + + Move files to 'unused' subdir + Přesunout soubory do adresáře 'nepoužívané' + + + + Cancel + Zrušit + + + + VAMGui + + + MusE: Load VAM Presets + MusE: Nahrát přednastavení VAM + + + + + MusE: Save VAM Presets + MusE: Uložit přednastavení VAM + + + + VAMGuiBase + + + Virtual Analogue for MusE + Virtuální analog pro MusE + + + + LFO + NKO + + + + Freq + Kmit + + + + + + Waveform + Tvar vlny + + + + + + Sine + Sinus + + + + + + Pulse + Pravoúhelník + + + + + + Saw + Pila + + + + + + Triangle + Trojúhelník + + + + Filter + Filtr + + + + EnvMod + RežObál + + + + + + Attack + Náběh + + + + + + Decay + Pokles + + + + + + Sustain + Držení tónu + + + + + + Release + Uvolnění + + + + Cutoff + Filtr kmitočtu + + + + Resonance + Zvučnost + + + + Invert + Obrátit + + + + KeyTrack + KlíčStopa + + + + Presets + Přednastavení + + + + Set + Nastavit + + + + load preset list + Nahrát seznam přednastavení + + + + save preset list + Uložit seznam přednastavení + + + + save preset list to a new file + Uložit seznam přednastavení do nového souboru + + + + delete preset + Smazat přednastavení + + + + DCO 1 + DCO 1 + + + + + Pitch + Výška tónu + + + + + Detune + Rozladění + + + + + PWM + PWM + + + + + FM + FM + + + + + PW + PW + + + + DCO 2 + DCO 2 + + + + On + Zapnuto + + + + VAM 1.0beta3 +Virtual Analog for MusE +Released under GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) +Copyright(C) 2005 +Robert Jonsson +(rj@spamatica.se) + VAM 1.0beta3 +Virtual Analog pro MusE +Vydáno pod GPL. +Autorské právo (C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) +Autorské právo (C) 2005 +Robert Jonsson +(rj@spamatica.se) + + + + VelocityBase + + + MusE: Modify Velocity + MusE: Změnit sílu nárazu + + + + Range + Rozsah + + + + All Events + Všechny události + + + + Selected Events + Vybrané události + + + + Looped Events + Události uvnitř smyčky + + + + Selected Looped + Vybrané události uvnitř smyčky + + + + Values + Hodnoty + + + + Rate: + Rychlost: + + + + % + % + + + + Offset: + Posun: + + + + veloNew = (veloOld * rate) + offset + rychlostNová = (rychlostStará * rychlost) + posun + + + + OK + OK + + + + Cancel + Zrušit + + + + file_patterns + + + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) + + + + Midi (*.mid *.MID *.mid.gz *.mid.bz2) + Midi (*.mid *.MID *.mid.gz *.mid.bz2) + + + + Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2) + Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2) + + + + + + + + + + + + + + + All Files (*) + Všechny soubory (*) + + + + Midi (*.mid) + Midi (*.mid) + + + + Karaoke (*.kar) + Karaoke (*.kar) + + + + all known files (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) + Všechny známé soubory (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) + + + + med Files (*.med *.med.gz *.med.bz2) + Soubory med (*.med *.med.gz *.med.bz2) + + + + + + Uncompressed med Files (*.med) + Nestlačené soubory med (*.med) + + + + + + gzip compressed med Files (*.med.gz) + Soubory med stlačené gzip (*.med.gz) + + + + + + bzip2 compressed med Files (*.med.bz2) + Soubory med stlačené bzip2 (*.med.bz2) + + + + mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) + Soubory mid (*.mid *.midi *.kar *.MID *.MIDI *.KAR) + + + + (*.jpg *.gif *.png) + (*.jpg *.gif *.png) + + + + (*.jpg) + (*.jpg) + + + + (*.gif) + (*.gif) + + + + (*.png) + (*.png) + + + + part Files (*.mpt *.mpt.gz *.mpt.bz2) + Soubory part (*.mpt *.mpt.gz *.mpt.bz2) + + + + part Files (*.mpt) + Soubory part (*.mpt) + + + + gzip compressed part Files (*.mpt.gz) + Soubory part stlačené gzip (*.mpt.gz) + + + + bzip2 compressed part Files (*.mpt.bz2) + Soubory part stlačené bzip2 (*.mpt.bz2) + + + + Presets (*.pre *.pre.gz *.pre.bz2) + Přednastavení (*.pre *.pre.gz *.pre.bz2) + + + + Presets (*.pre) + Přednastavení (*.pre) + + + + gzip compressed presets (*.pre.gz) + Přednastavení stlačená gzip (*.pre.gz) + + + + bzip2 compressed presets (*.pre.bz2) + Přednastavení stlačená bzip2 (*.pre.bz2) + + + + Presets (*.map *.map.gz *.map.bz2) + Přednastavení (*.map *.map.gz *.map.bz2) + + + + Presets (*.map) + Přednastavení (*.map) + + + + gzip compressed presets (*.map.gz) + Přednastavení stlačená gzip (*.map.gz) + + + + bzip2 compressed presets (*.map.bz2) + Přednastavení stlačená bzip2 (*.map.bz2) + + + + Wave/Binary (*.wav *.ogg *.bin) + Wave/Binární (*.wav *.ogg *.bin) + + + + Wave (*.wav *.ogg) + Wave (*.wav *.ogg) + + + + Binary (*.bin) + Binární (*.bin) + + + + freeverb + + + FreeVerb + FreeVerb + + + + Room Size + Velikost prostoru + + + + Damping + Vyklopení + + + + Wet Level + Síla účinku + + + + Tap-Reverberator + Tap-Reverberator + + + + Decay [ms] + Doba poklesu [ms] + + + + + dB + dB + + + + Dry Level [dB] + Síla hlasitosti nezměněného signálu [dB] + + + + Wet Level [dB] + Síla hlasitosti změněného signálu [dB] + + + + Preset: + Přednastavení: + + + + AfterBurn + AfterBurn + + + + AfterBurn (Long) + AfterBurn (dlouhý) + + + + Ambience + Atmosféra + + + + Ambience (Thick) + Atmosféra (silná) + + + + Ambience (Thick) - HD + Atmosféra (silná) - HD + + + + Cathedral + Katedrála + + + + Cathedral - HD + Katedrála - HD + + + + Drum Chamber + Síň bicích + + + + Garage + Garáž + + + + Garage (Bright) + Garáž (jasná) + + + + Gymnasium + Sportovní hala + + + + Gymnasium (Bright) + Sportovní hala (jasná) + + + + Gymnasium (Bright) - HD + Sportovní hala (jasná) - HD + + + + Hall (Small) + Hala (malá) + + + + Hall (Medium) + Hala (střední) + + + + Hall (Large) + Hala (velká) + + + + Hall (Large) - HD + Hala (velká) - HD + + + + Plate (Small) + Deska (malá) + + + + Plate (Medium) + Deska (střední) + + + + Plate (Large) + Deska (velká) + + + + Plate (Large) - HD + Deska (velká) - HD + + + + Pulse Chamber + Síň rytmu + + + + Pulse Chamber (Reverse) + Síň rytmu (obrácená) + + + + Resonator (96 ms) + Rezonátor (96 ms) + + + + Resonator (152 ms) + Rezonátor (152 ms) + + + + Resonator (208 ms) + Rezonátor (208 ms) + + + + Room (Small) + Pokoj (malý) + + + + Room (Medium) + Pokoj (střední) + + + + Room (Large) + Pokoj (velký) + + + + Room (Large) - HD + Pokoj (velký) - HD + + + + Slap Chamber + Síň plácnutí + + + + Slap Chamber - HD + Síň plácnutí - HD + + + + Slap Chamber (Bright) + Síň plácnutí (jasná) + + + + Slap Chamber (Bright) HD + Síň plácnutí (jasná) HD + + + + Smooth Hall (Small) + Klidná hala (malá) + + + + Smooth Hall (Medium) + Klidná hala (střední) + + + + Smooth Hall (Large) + Klidná hala (velká) + + + + Smooth Hall (Large) - HD + Klidná hala (velká) - HD + + + + Vocal Plate + Hlasitá deska + + + + Vocal Plate - HD + Hlasitá deska - HD + + + + Warble Chamber + Síň cvrlikání + + + + Warehoouse + Skladiště + + + + Warehouse - HD + Skladiště - HD + + + + Comb Filters + Sdružené filtry + + + + Allpass Filters + Všeprůchozí filtry + + + + Bandpass Filters + Pásmové filtry + + + + Enhanced Stereo + Rozšířené stereo + + + + shortcuts + + + Transport: Start playback from current location + Přesun: Začít přehrávání od nynější polohy + + + + Transport: Toggle metronome + Přesun: Zapnout/Vypnout metronom + + + + Transport: Stop Playback + Přesun: Zastavit přehrávání + + + + Transport: Goto Start + Přesun: Jít na začátek + + + + Transport: Play, Stop, Rewind + Přesun: Přehrát, Zastavit, Přetočit + + + + Transport: Goto left marker + Přesun: Jít na levou značku + + + + Transport: Goto right marker + Přesun: Jít na pravou značku + + + + Transport: Toggle Loop section + Přesun: Přepnout smyčku + + + + Transport: Toggle Record + Přesun: Zapnout/Vypnout nahrávání + + + + Transport: Clear all rec enabled tracks + Přesun: Vrátit zpět všechny stopy označené pro nahrávání + + + + Toggle fullscreen + Přepnout režim na celou obrazovku + + + + Edit: Copy + Úpravy: Kopírovat + + + + Edit: Copy in range + Úpravy: Kopírovat v rozsahu + + + + Edit: Undo + Úpravy: Zpět + + + + Edit: Redo + Úpravy: Znovu + + + + Edit: Cut + Úpravy: Vyjmout + + + + Edit: Paste + Úpravy: Vložit + + + + Edit: Paste (with dialog) + Úpravy: Vložit (s dialogem) + + + + Edit: Delete + Úpravy: Smazat + + + + File: New project + Soubor: Nový projekt + + + + File: Open from disk + Soubor: Otevřít + + + + File: Save project + Soubor: Uložit projekt + + + + File: Open recent file + Soubor: Otevřít poslední soubor + + + + File: Save as + Soubor: Uložit jako + + + + File: Load template + Soubor: Nahrát předlohu + + + + File: Import midi file + Soubor: Zavést soubor MIDI + + + + File: Export midi file + Soubor: Vyvést soubor MIDI + + + + File: Import midi part + Soubor: Zavést MIDI part + + + + File: Import audio file + Soubor: Zavést zvukový soubor + + + + File: Quit MusE + Soubor: Ukončit MusE + + + + Edit: Select parts on track + Úpravy: Vybrat části na stopě + + + + Open pianoroll + Otevřít váleček + + + + Open drumeditor + Otevřít editor bicích + + + + Open listeditor + Otevřít editor seznamu + + + + Open waveeditor + Otevřít editor Wave + + + + Open graphical mastertrack editor + Otevřít obrazový editor hlavní stopy + + + + Open list mastertrack editor + Otevřít editor seznamu hlavní stopy + + + + Open midi transformer + Otevřít měnič MIDI + + + + Add midi track + Přidat stopu MIDI + + + + Add drum track + Přidat stopu bicích + + + + Add wave track + Přidat stopu Wave + + + + Add audio output + Přidat výstup zvuku + + + + Add audio group + Přidat skupinu zvuku + + + + Add audio input + Přidat vstup zvuku + + + + Add audio aux + Přidat aux zvuku + + + + Structure: Global cut + Stavba: Celkové vyjmutí + + + + Structure: Global insert + Stavba: Celkové vložení + + + + Structure: Global split + Stavba: Celkové rozdělení + + + + Structure: Cut events + Stavba: Vyjmout události + + + + View: Open mixer #1 window + Pohled: Otevřít okno se směšovačem 1 + + + + View: Open mixer #2 window + Pohled: Otevřít okno se směšovačem 2 + + + + View: Toggle transport window + Pohled: Přepnout okno pro přesun + + + + View: Toggle bigtime window + Pohled: Přepnout velký ukazatel času + + + + View: Open marker window + Pohled: Otevřít okno se značkou + + + + Settings: Follow song by page + Nastavení: Sledovat píseň na několika stranách + + + + Settings: Follow song off + Nastavení: Nesledovat píseň + + + + Settings: Follow song continuous + Nastavení: Sledovat píseň stále + + + + Settings: Global configuration + Nastavení: Celková nastavení + + + + Settings: Configure shortcuts + Nastavení: Nastavit klávesové zkratky + + + + Settings: Configure metronome + Nastavení: Nastavit metronom + + + + Settings: Midi sync configuration + Nastavení: Nastavení seřízení MIDI + + + + Settings: Midi file import/export configuration + Nastavení: Nastavení zavedení/vyvedení souboru MIDI + + + + Settings: Appearance settings + Nastavení: Nastavení vzhledu + + + + Settings: Midi ports / Soft Synth + Nastavení: Přípojky MIDI/Softwarové syntetizátory + + + + Settings: Audio subsystem configuration + Nastavení: Nastavení zvukového podsystému + + + + Midi: Edit midi instruments + Midi: Upravit nástroje MIDI + + + + Midi: Open midi input transform + Midi: Otevřít proměnu vstupu MIDI + + + + Midi: Open midi input filter + Midi: Otevřít filtr vstupu MIDI + + + + Midi: Midi input transpose + Midi: Převedení vstupu MIDI + + + + Midi: Midi remote control + Midi: Vzdálené ovladání MIDI + + + + Midi: Random rhythm generator + Midi: Generátor náhodného rytmu + + + + Midi: Reset midi + Midi: Nastavit MIDI znovu + + + + Midi: Init midi + Midi: Inicializovat MIDI + + + + Midi: Midi local off + Midi: Místní vypnuto + + + + Audio: Bounce audio to track + Zvuk: Odmíchat zvuk na stopu + + + + Audio: Bounce audio to file + Zvuk: Odmíchat zvuk do souboru + + + + Audio: Restart audio + Zvuk: Spustit zvuk znovu + + + + Automation: Mixer automation + Automatizace: Automatizace míchacího pultu + + + + Automation: Take mixer snapshot + Automatizace: Udělat snímek směšovače + + + + Automation: Clear mixer automation + Automatizace: Smazat automatizaci směšovače + + + + Help: Open Manual + Nápověda: Otevřít příručku + + + + Help: Toggle whatsthis mode + Nápověda: Přepnout režim "Co je to?" + + + + Edit: Edit selected part + Úpravy: Upravit vybranou část + + + + Edit: Select nearest part on track above + Úpravy: Vybrat nejbližší část na předchozí stopě + + + + Edit: Add nearest part on track above + Úpravy: Přidat nejbližší část do předchozí stopy + + + + Edit: Select nearest part on track below + Úpravy: Vybrat nejbližší část na další stopě + + + + Edit: Add nearest part on track below + Úpravy: Přidat nejbližší část do další stopy + + + + Edit: Insert empty measure + Úpravy: Vložit prázdný takt + + + + Edit: Paste as clones + Úpravy: Vložit jako klony + + + + Edit: Paste as clones (with dialog) + Úpravy: Vložit jako klony (s dialogem) + + + + Select track above + Vybrat předchozí stopu + + + + Select track below + Vybrat další stopu + + + + Midi: Transpose + Midi: Převést + + + + Edit: Select all + Úpravy: Vybrat vše + + + + Edit: Select none + Úpravy: Nevybrat nic + + + + Edit: Invert Selection + Úpravy: Obrátit výběr + + + + Edit: Select events/parts inside locators + Úpravy: Vybrat všechny události/části v oblasti + + + + Edit: Select events/parts outside locators + Úpravy: Vybrat všechny události/části vně oblasti + + + + Edit: Select previous part + Úpravy: Vybrat předchozí část + + + + Edit: Select next part + Úpravy: Vybrat další část + + + + Edit: Select nearest part/event to the left or move cursor + Úpravy: Vybrat nejbližší část/nejbližší událost nalevo anebo přesunout ukazovátko + + + + Edit: Add nearest part/event to the left to selection + Úpravy: Přidat nejbližší část/nejbližší událost nalevo do výběru + + + + Edit: Select nearest part/event to the right or move cursor + Úpravy: Vybrat nejbližší část/nejbližší událost napravo anebo přesunout ukazovátko + + + + Edit: Add nearest part/event to the right to selection + Úpravy: Přidat nejbližší část/nejbližší událost napravo do výběru + + + + Edit: Set locators to selection + Úpravy: Nastavit oblast z výběru + + + + Edit: Increase pitch + Úpravy: Zvýšit výšku tónu + + + + Edit: Decrease pitch + Úpravy: Snížit výšku tónu + + + + Edit: Increase event position + Úpravy: Zvýšit polohu události + + + + Edit: Decrease event position + Úpravy: Snížit polohu události + + + + View: Zoom in + Pohled: Přiblížit + + + + View: Zoom out + Pohled: Oddálit + + + + View: Goto Current Position + Pohled: Jít na nynější polohu + + + + + View: Scroll left + Pohled: Projíždět doleva + + + + Edit: Set Fixed Length on Midi Events + Úpravy: Nastavit pevnou délku pro události MIDI + + + + Quantize + Kvantizovat + + + + Modify Note Length + Změnit délku noty + + + + Modify Velocity + Změnit sílu nárazu + + + + Edit: Crescendo + Úpravy: Crescendo + + + + Edit: Thin Out + Úpravy: Prostřihávat + + + + Edit: Erase Event + Úpravy: Smazat událost + + + + Edit: Delete Overlaps + Úpravy: Smazat překrývající se noty + + + + Edit: Note Shift + Úpravy: Posunout noty + + + + Edit: Move Clock + Úpravy: Posunout hodiny + + + + Edit: Copy Measure + Úpravy: Kopírovat takt + + + + Edit: Erase Measure + Úpravy: Vymazat takt + + + + Edit: Delete Measure + Úpravy: Smazat takt + + + + Edit: Create Measure + Úpravy: Vytvořit takt + + + + Edit: Change Event Color + Úpravy: Změnit barvu události + + + + Tool: Pointer + Nástroj: Ukazatel + + + + Tool: Pencil + Nástroj: Tužka + + + + Tool: Eraser + Nástroj: Guma + + + + Tool: Line Draw + Nástroj: Čára + + + + Tool: Cursor + Nástroj: Ukazovátko + + + + Add note velocity 1 + Přidat notu se silou nárazu (dynamika) 1 + + + + Add note velocity 2 + Přidat notu se silou nárazu (dynamika) 2 + + + + Add note velocity 3 + Přidat notu se silou nárazu (dynamika) 3 + + + + Add note velocity 4 + Přidat notu se silou nárazu (dynamika) 4 + + + + Cursor step size: larger + Velikost kroku ukazovátka: větší + + + + Cursor step size: smaller + Velikost kroku ukazovátka: menší + + + + Instrument/Cursor up + Nástroj/Ukazovátko nahoru + + + + Instrument/Cursor down + Nástroj/Ukazovátko dolů + + + + Tool: Scissor + Nástroj: Nůžky + + + + Tool: Glue + Nástroj: Lepidlo + + + + Tool: Mute + Nástroj: Ztlumit + + + + Transport: Increase current position + Přesun: Zvýšit nynější polohu + + + + Transport: Decrease current position + Přesun: Snížit nynější polohu + + + + Transport: Increase current position, no snap + Přesun: Zvýšit nynější polohu, žádné zapadnutí + + + + Transport: Decrease current position, no snap + Přesun: Snížit nynější polohu, žádné zapadnutí + + + + Quantize: Set quantize to 1/1 note + Kvantizovat: Nastavit kvantizaci na celou notu + + + + Quantize: Set quantize to 1/2 note + Kvantizovat: Nastavit kvantizaci na půlovou notu + + + + Quantize: Set quantize to 1/4 note + Kvantizovat: Nastavit kvantizaci na čtvrťovou notu + + + + Quantize: Set quantize to 1/8 note + Kvantizovat: Nastavit kvantizaci na osminovou notu + + + + Quantize: Set quantize to 1/16 note + Kvantizovat: Nastavit kvantizaci na šestnáctinovou notu + + + + Quantize: Set quantize to 1/32 note + Kvantizovat: Nastavit kvantizaci na dvaatřicetinovou notu + + + + Quantize: Set quantize to 1/64 note + Kvantizovat: Nastavit kvantizaci na čtyřiašedesátinovou notu + + + + Quantize: Toggle triol quantization + Kvantizovat: Přepnout triolovou kvantizaci + + + + Quantize: Toggle punctuation quantization + Kvantizovat: Přepnout tečkovanou kvantizaci + + + + Quantize: Toggle punctuation quantization (2) + Kvantizovat: Přepnout tečkovanou kvantizaci (2) + + + + Edit: Insert at location + Úpravy: Vložit v poloze + + + + Edit: Increase length + Úpravy: Zvětšit délku + + + + Edit: Decrease length + Úpravy: Zmenšit délku + + + + Insert Note + Vložit notu + + + + Insert SysEx + Vložit SysEx + + + + Insert Ctrl + Vložit Ctrl + + + + Insert Meta + Vložit Meta + + + + Insert Channel Aftertouch + Vložit dodělávku kanálu + + + + Insert Key Aftertouch + Vložit dodělávku tóniny + + + + Insert Tempo + Vložit tempo + + + + Insert Signature + Vložit taktové označení + + + + Change Event Position + Změnit polohu události + + + + Edit Event Value + Upravit hodnotu události + + + + Insert Key + Vložit tóninu + + + + Goto Next Marker + Jít na další značku + + + + Goto Prev Marker + Jít na předchozí značku + + + diff -Nru muse-2.0~rc2/share/locale/muse_de.ts muse-2.0/share/locale/muse_de.ts --- muse-2.0~rc2/share/locale/muse_de.ts 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/locale/muse_de.ts 2012-06-30 19:24:42.000000000 +0200 @@ -4,222 +4,7 @@ @default - Click this button to enable recording - Auf diese Schaltfläche klicken um in den Modus "Aufnahme" zu gelangen - - - sets amount of quantization: -0 - no quantization -100 - full quantization - Quantisierungsstärke einstellen: -0 - keine Quantisierung -100 - volle Quantisierung - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - Werkzeug "Zeiger": -Dieses Werkzeug ermöglicht: - Parts auswählen - Parts verschieben - Parts kopieren - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Auf diese Schaltfläche klicken um ein <em>Neues Lied</em> zu öffnen.<br> Alternativ den Befehl <b>Neues Lied</b> des Menüs "Datei" auswählen. - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Auf diese Schaltfläche klicken um das gerade bearbeitete Lied zu sichern mit der automatischen Aufforderung einen Dateinamen anzugeben. -Alternativ das Lied mit dem Befehl "Sichern" im Menü "Datei" sichern. - - - Create New Song - Neues Lied erzeugen - - - Click this button to stop playback - Klicke auf diese Schaltfläche um die Wiedergabe zu stoppen - - - Click this button to start playback - Klicke auf diese Schaltfläche um die Wiedergabe zu starten - - - Click this button to rewind to start position - Klicke auf diese Schaltfläche um zur Startposition zurückzukehren - - - Click this button to rewind - Klicke auf diese Schaltfläche um einen Taktschlag rückwärts zu springen - - - Click this button to forward current play position - Klicke auf diese Schaltfläche um einen Taktschlag vorwärts zu springen - - - don't quantize notes above this tick limit - Keine Note länger als die Taktschlagdauer quantisieren - - - quantize also note len as default - Auch die Notenlänge als Standard quantisieren - - - loop between left mark and right mark - Schleife zwischen linkem und rechtem Marker erzeugen - - - record starts at left mark - Aufnahme am linken Marker beginnen - - - record stops at right mark - Aufnahme am rechten Marker beenden - - - rewind to start position - Zur Startposition springen - - - rewind current position - Einen Taktschlag rückwärts - - - move current position - Einen Taktschlag vorwärts - - - stop sequencer - Wiedergabe beenden - - - start sequencer play - Wiedergabe beginnen - - - to record press record and then play - Zur Aufnahme erst die Schaltfläche "Aufnahme" und dann "Wiedergabe" klicken - - - send note off to all midi channels - Panik - "Note aus" Befehl an alle Midikanäle senden - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - Werkzeug "Zeichenstift": -Dieses Werkzeug ermöglicht: - Neue Parts erzeugen - Die Länge einzelner Parts ändern - - - select Delete Tool: -with the delete tool you can delete parts - Werkzeug "Radierer": - mit diesem Werkzeug werden Parts gelöscht - - - select Cut Tool: -with the cut tool you can split a part - Werkzeug "Schnitt": - mit diesem Werkzeug werden Parts geteilt - - - select Glue Tool: -with the glue tool you can glue two parts - Werkzeug "Verbinder": - mit diesem Werkzeug werden zwei einzelne Parts zu einem verbunden - - - select Score Tool: - - Werkzeug "Notensatz": - - - select Quantize Tool: -insert display quantize event - Werkzeug "Quantisierung": - mit diesem Werkzeug werden quantisierte Ereignisse eingefügt - - - select Drawing Tool - Werkzeug "Zeichenstift" - - - select Muting Tool: -click on part to mute/unmute - Werkzeug "Stille": - Klicke auf einen Part um diesen still/laut zu schalten - - - Manipulate automation - Automatisierung manipulieren - - - Cursor tool - Zeiger-Werkzeug - - - pointer - Zeiger - - - pencil - Zeichenstift - - - cutter - Schnitt - - - score - Notensatz - - - glue - Verbinder - - - quantize - Quantisierung - - - draw - Zeichenstift - - - mute parts - Schalte Part still - - - edit automation - Automatisierung bearbeiten - - - cursor - Zeiger - - - Off - Aus - - - presets (*.pre *.pre.gz *.pre.bz2) - Vorlagen (*.pre *.pre.gz *.pre.bz2) - - - All Files (*) - Alle Dateien (*) - - - + Add Midi Track Midispur hinzufügen @@ -254,88 +39,32 @@ Aux Send hinzufügen - + Select project directory Projektverzeichnis auswählen - eraser - Radierer - - - MESS - MESS - - - DSSI - DSSI - - - FST - FST - - - + Add Synth Synthesizer hinzufügen - Bar - Takt - - - Jack - Jack - - - ALSA: - ALSA: - - - SYNTH: - SYNTH: - - - JACK: - JACK: - - - + Route Signalfluss - channel="%1" - Kanal="%1" - - dest Ziel - devtype="%1" - Gerätetyp="%1" - - - type="%1" - Typ="%1" - - name="%1"/ Name="%1" - source - Quelle - - - Velocity - Anschlag - - - + Warning: No output devices! Warnung: Keine Ausgangsgeräte! @@ -345,67 +74,49 @@ Öffne MIDI-Konfig... - + Empty ports Leere Ports - + <none> <kein> - + channelMask="%1" KanalMaske="%1" - dssi_synth - dssi_synth - - - ladspa_efx - ladspa_efx - - - channels="%1" - Kanäle="%1" - - - remch="%1" - remch="%1" - - - mport="%1"/ - mport="%1"/ - - - Show wave tracks - Zeige Wave-Spuren - - - Show group tracks - Zeige Gruppen-Spuren - - - Show aux tracks - Zeige Aux-Spuren - - - Show input tracks - Zeige Eingangs-Spuren - - - Show output tracks - Zeige Ausgangs-Spuren + + Bad timing + Schlechter Taktgeber - Show midi tracks - Zeige Midi-Spuren + + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + Die Frequenz des Taktgebers ist %1Hz; das ist unter dem empfohlenen Minimum von 500Hz! +Dies könnte zu hörbaren Timingproblemen für MIDI führen. +Bitte sehen sie in den FAQ unter http://muse-sequencer.org nach Lösungen. +Bitte überprüfen sie außerdem die Konsolenmeldungen auf weitere Fehlermeldungen. + - Show synth tracks - Zeige Synth-Spuren + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages + + Die Frequenz des Taktgebers ist %1Hz; das ist unter dem empfohlenen Minimum von 500Hz! +Dies könnte zu hörbaren Timingproblemen für MIDI führen. +Bitte sehen sie in den FAQ unter http://muse-sequencer.org nach Lösungen. +Bitte überprüfen sie außerdem die Konsolenmeldungen auf weitere Fehlermeldungen. + @@ -416,22 +127,34 @@ Projektinformation - Keep On Rocking! - Zurück zu MusE! + Version 2 pre-alpha + Version 2 pre-alpha + + + (C) Copyright 1999-2010 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + (C) Copyright 1999-2010 Werner Schweer und andere. +Siehe http://www.muse-sequencer.org für neue Versionen und +mehr Informationen. + +Veröffentlicht unter der GNU Public License - Version 2 pre-alpha - Version 2 pre-alpha + Version 2 + Version 2 - (C) Copyright 1999-2010 Werner Schweer and others. + (C) Copyright 1999-2012 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. Published under the GNU Public License - (C) Copyright 1999-2010 Werner Schweer und andere. + (C) Copyright 1999-2012 Werner Schweer und andere. Siehe http://www.muse-sequencer.org für neue Versionen und mehr Informationen. @@ -449,20 +172,9 @@ - Appearance - - MusE: load image - MusE: Bild laden - - - AppearanceDialogBase - MusE: Appearance Settings - MusE: Erscheinungsbild einstellen - - - + Apply Anwenden @@ -477,7 +189,7 @@ Abbrechen - + Arranger Arrangierer @@ -557,14 +269,6 @@ Hintergrundbild - bg - bg - - - select... - auswählen ... - - show snap grid Magnetisches Gitter anzeigen @@ -640,7 +344,12 @@ Motif Plus - + + May require restarting MusE for best results + Könnte einen Neustart von MusE erfordern für optimale Ergebnisse + + + Fonts Schriftarten @@ -720,7 +429,7 @@ Schriftart 5 - + Palette Palette @@ -775,7 +484,7 @@ löschen - + Style Sheet: Formatvorlage: @@ -786,17264 +495,11857 @@ - Arranger + ArrangerColumnsBase - Cursor - Position + + Configure arranger columns + Arranger-Spalten konfigurieren - Snap - Magnet + + Columns: + Spalten: - Len - Länge + + Name: + Name: - NO - Kein + + Controller type: + Controller-Typ: - TrackInfo - Spurinfo + + + Midi controller type + Typ des Midi-Controllers - Track - Spur + + Control7 + Controller7 - Type - Typ + + Control14 + Controller14 - midi song type - Midi Lied Typ + + RPN + RPN - Pitch - Tonhöhenänderung + + NRPN + NRPN - midi pitch - Midi Tonhöhenänderung + + RPN14 + RPN14 - global midi pitch shift - Globale Midi Tonhöhenänderung + + NRPN14 + NRPN14 - Tempo - Tempo + + Pitch + - midi tempo - Midi Tempo + + Program + Programm - O-Port - Ausgangsanschluss + + H-Ctrl + H-Ctrl - Arranger - Arrangierer + + + Midi controller number high byte + Midi Controllernummer höchstwertiges Byte - Off - Aus + + L-Ctrl + L-Ctrl - Bar - Takt + + + Midi controller number low byte + Midi Kontrollernummer niederwertigstes Byte - GM - GM + + * + wild card + * - GS - GS + + affect CCs at + beeinflusse CCs bei - XG - XG + + begin of song + Liedanfang - N - N + + current position + aktuelle Position - R - R + + &Add + &Hinzufügen - M - M + + &Delete + &Löschen - S - S + + Done + Fertig + + + Awl::MidiVolEntry - C - C + + off + aus - Ch - K + + db + dB + + + Awl::VolEntry - T - T + + off + aus + + + ClipListEditorBase - Enable Recording - Aufnahme einschalten + + MusE: ClipList + MusE: Klipp Liste - Solo Indicator - Anzeige "Solo" + + Name + Name - Track Type - Spurtyp + + Refs + Refs - Track Name - Spurname + + Samplerate + Sample-Rate - Time Lock - Sperre "Zeit" + + Len + Länge - Notation clef - Notenschlüssel + + Data + Daten - Enable recording. Click to toggle. - Aufnahme einschalten. Klicken zum umschalten. + + Clip Properties + Klippeigenschaften - Automation - Automatisierung + + Pos: + Pos: + + + + Len: + Länge: - ArrangerView + CommentBase - Undo/Redo tools - Rückgängig/Wiederho + + Form1 + Form1 - panic - Panik + + Track Comment + Spur Kommentar - C&ut - &Ausschneiden + + Track 1 + Spur 1 + + + ConfigMidiFileBase - &Copy - &Kopieren + + &OK + &Bestätigen - &Copy in range - Im Bereich kopieren + + &Cancel + &Abbrechen - &Paste - &Einfügen + + 0 (single track) + 0 (einzelne Spur) - Paste (show dialog) - Einfügen (Dialog zeigen) + + 1 (multiple tracks) + 1 (mehrere Spuren) - Paste c&lone - K&lon Einfügen + + Format: + Format: - Paste clone (show dialog) - Klon einfügen (Dialog zeigen) + + 96 + 96 - &Insert Empty Measure - Leeren &Takt einfügen + + 192 + 192 - Delete Selected Tracks - Ausgewählte Spuren löschen + + 384 + 384 - Shrink selected parts - Ausgewählte Parts schrumpfen + + Division: + Unterteilung: - Expand selected parts - Ausgewählte Parts erweitern + + Copyright: + Copyright: - Clean selected parts - Ausgewählte Parts säubern + + MusE: Config Midi File Import/Export + MusE: Konfiguriere MIDI-Datei Import/Export - Add Track - Spur hinzufügen + + Import: + Import: - Select - Auswählen + + Split tracks into &parts + Spuren in &Parts teilen - Select &All - Alles a&uswählen + + Alt+P + Alt+P - &Deselect All - Alles ab&wählen + + Split tracks into parts, or one single part + Spuren in Parts teilen, oder einzelnen Part erstellen - Invert &Selection - Auswa&hl umkehren + + Export: + Export: - &Inside Loop - Bereich &innerhalb der Schleife + + Enable extended smf format (currently not implemented) + Aktiviere erweitertes SMF-Format (momentan nicht implementiert) - &Outside Loop - Bereich außerhalb der Schlei&fe + + Use &2-byte time signatures instead of standard 4 + Benutze &2-byte-Zeitsignaturen statt standardmäßig 4-byte - All &Parts on Track - Alle &Parts der Spur + + Alt+2 + Alt+2 - Score - Partitur + + Note: Format 0 uses the FIRST midi track's name/comment in the arranger + #Hinweis: Format 0 nutzt den Namen/Kommentar der ERSTEN Midispur im Arranger - all parts in one staff - alle Parts in einem System + + Save space by replacing note-offs with &zero velocity note-ons + Platz sparen, indem Note-offs durch Note-ons mit Anschlagsdynamik &0 ersetzt werden - one staff per part - ein System pro Part + + Alt+Z + Alt+Z + + + CrescendoBase - New score window - Neues Partiturfenster + + MusE: Crescendo/Decrescendo + MusE: Crescendo/Decrescendo - Pianoroll - Pianorollen Editor + + Range + Bereich - Drums - Schlagzeug Editor + + Looped Events + Ereignisse innerhalb Schleife - List - Listen Editor + + Selected Looped + Ausgewählt und innerhalb der Schleife - Wave - Wave-Editor - - - Mastertrack - Masterspur + + Values + Werte - Graphic - Graphischer Editor + + Start velocity + Anfangsdynamik - Midi &Transform - Midi &transformieren + + + % + % - Global Cut - Globaler Schnitt + + End velocity + Enddynamik - Global Insert - Globales Einfügen + + Absolute + Absolut - Global Split - Globales Aufteilen + + Relative + Relativ - &Edit - &Bearbeiten + + OK + Bestätigen - &Structure - &Struktur + + Cancel + Abbrechen + + + DeicsOnzeGui - Functions - Funktionen + + Save configuration + Konfiguration speichern - &Quantize Notes - Noten quantisieren + + + + + + + + + + + Critical Error + Kritischer Fehler - Change note &length - Notenlänge verändern + + + + + + Cannot open file %1 + Kann Datei "%1" nicht öffnen - Change note &velocity - Anschlagsdynamik verändern + + + + + + Parsing error for file %1 + Fehler beim Parsen von Datei "%1" - Crescendo/Decrescendo - Crescendo/Decrescendo + + + Load category dialog + Kategorie laden - Transpose - Transponieren + + Load set dialog + Set laden - Erase Events (Not Parts) - Events (nicht Parts) löschen + + Save set dialog + Set speichern - Move Events (Not Parts) - Events (nicht Parts) verschieben + + New category + Neue Kategorie - Set Fixed Note Length - Feste Notenlänge setzen + + + Delete category + Kategorie löschen - Delete Overlapping Notes - Überlappende Noten entfernen + + Load category + Kategorie laden - Legato - Legato + + Save category + Kategorie speichern - Window &Config - Fensterkonfiguration + + Load set + Set laden - New - Neu + + Save set + Set speichern - - - AudioMixerApp - MusE: Mixer - MusE: Mischpult + + Delete set + Set löschen - &Create - &Erzeugen + + New subcategory + Neue Unterkategorie - &View - &Zeigen + + + Delete subcategory + Unterkategorie löschen - Routing - Signalfluss + + Load subcategory + Unterkategorie laden - - - AudioStrip - panorama - Panorama + + Save subcategory + Unterkategorie speichern - aux send level - Aux Send Pegel + + New preset + Neue Vorlage - off - Aus + + + Delete preset + Vorlade löschen - Pan - Balance + + Load preset + Vorlage laden - 1/2 channel - 1/2 Kanal + + Save preset + Vorlage speichern - Pre - Pre + + No more category supported + Keine weiteren Kategorien unterstützt - pre fader - post fader - Vor Regler - nach Regler + + You can not add more categories + Sie können keine weiteren Kategorien hinzufügen - dB - dB + + + + Do you really want to delete %1 ? + Möchten Sie wirklich %1 löschen? - record - Aufnahme + + + + &Yes + &Ja - mute - still + + + + &No + &Nein - record downmix - Aufnahme Abmischung + + + No category selected + Keine Kategorie ausgewählt - solo mode (monitor) - Solo Modus (Monitor) + + + You must first select a category. + Sie müssen zuerst eine Kategorie auswählen. - pre fader listening - Abhöre vor Regler + + + + Replace or add + Ersetzen oder Hinzufügen - iR - iR + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 soll mit der hbank-Nummer %2 beeinflusst werden, aber es gibt bereits eine auf diesem +Slot. Wollen Sie sie ersetzen oder in den nächsten freien Slot hinzufügen? - intput routing - Eingangs-Signalfluss + + + + &Replace + Erset&zen - oR - oR + + + + &Add + &Hinzufügen - output routing - Ausgangs-Signalfluss + + + + Download error + Download-Fehler - Off - Aus + + There is no more free category slot. + Es gibt keinen weiteren freien Kategorie-Slot. - Read - Lesen + + Save category dialog + Kategorie speichern - Touch - Antasten + + No more subcategory supported + Keine weiteren Unterkategorien unterstützt - Write - Schreiben + + You can not add more subcategories + Sie können keine weiteren Unterkateogien hinzufügen - automation type - Automationstyp + + + No subcategory selected + Keine Unterkategorie ausgewählt - Channel - Kanal + + + You must first select a subcategory. + Sie müssen erst eine Unterkategorie auswählen. - - - Awl::MidiVolEntry - - off - aus + + Load subcategory dialog + Unterkategorie-Laden-Dialog - - db - dB + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 soll mit der lbank-Nummer %2 beeinflusst werden, aber es gibt bereits eine auf diesem +Slot. Wollen Sie sie ersetzen oder in den nächsten freien Slot hinzufügen? - - - Awl::VolEntry - - off - aus + + There is no more free subcategory slot. + Es gibt keinen weiteren freien Unterkategorie-Slot. - - - BigTime - MusE: Bigtime - MusE: Zeitanzeige groß + + Save subcategory dialog + Unterkategorie-Speichern-Dialog - minute - Minute + + No more preset supported + Keine weiteren Voreinstellungen unterstützt - second - Sekunde + + You can not add more presets + Sie können keine weiteren Voreinstellungen hinzufügen - frame - Rahmen + + + + No preset selected + Keine Voreinstellung ausgewählt - subframe - Subrahmen + + + + You must first select a preset. + Sie müssen erst eine Voreinstellung auswählen. - - - ClipListEdit - Undo/Redo tools - Rückgängig/Wiederho + + Load preset dialog + Voreinstellung-Laden-Dialog - panic - Panik + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 soll mit der Programm-Nummer %2 beeinflusst werden, aber es gibt bereits eine auf diesem +Slot. Wollen Sie sie ersetzen oder in den nächsten freien Slot hinzufügen? - - - ClipListEditorBase - - MusE: ClipList - MusE: Klipp Liste + + There is no more free preset slot. + Es gibt keinen weiteren freien Voreinstellung-Slot. - - Name - Name + + Save preset dialog + Voreinstellung-Speichern-Dialog - - Refs - Refs + + Browse set dialog + Set-Suchen-Dialog - - Start - Start + + Browse image dialog + Bild-Suchen-Dialog + + + DeicsOnzeGuiBase - - Len - Länge + + DeicsOnze + DeicsOnze - - Data - Daten + + &Preset + &Vorlage - - Clip Properties - Klippeigenschaften + + Program numerous + Programmnummer - - Pos: - Pos: + + INITVOICE + INITVOICE - Len: - Länge: - - - - CommentBase - - - Form1 - Form1 + LBank + L-Bank - - Track Comment - Spur Kommentar + + Subcategory + Unterkategorie - - Track 1 - Spur 1 + + + Bank numerous + Banknummer - - - ConfigMidiFileBase - MusE: Config Midi File Export - MusE: Konfiguration Midi Datei exportieren + + + NONE + KEIN - - &OK - &Bestätigen + + HBank + H-Bank - - &Cancel - &Abbrechen + + Category + Kategorie - - 0 (single track) - 0 (einzelne Spur) + + Prog + Prog - 1 (multiple tracks) - 1 (mehrere Spuren) + Preset + Vorlage - - Format: - Format: + + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Veröffentlicht unter der GPL Lizenz. - - 96 - 96 + + &Global + &Global - - 192 - 192 + + Pitch Envelope + Tonhöhen-Hüllkurve - - 384 - 384 + + PL3 + PL3 - - Division: - Unterteilung: + + PL2 + PL2 - - Copyright: - Copyright: + + PL1 + PL1 - Enable extended smf format - Aktiviere erweitertes SMF Format + + PR1 + PR1 - - MusE: Config Midi File Import/Export - MusE: Konfiguriere MIDI-Datei Import/Export + + PR2 + PR2 - - Import: - Import: + + PR3 + PR3 - - Split tracks into &parts - Spuren in &Parts teilen + + + + + + + + Pitch modulation depth + Vibrato-Stärke - - Alt+P - Alt+P + + LFO + LFO - - Split tracks into parts, or one single part - Spuren in Parts teilen, oder einzelnen Part erstellen + + LFO Sync + LFO Sync - - Export: - Export: + + Pitch modulation sensitivity + Vibrato-Sensitivität - - Enable extended smf format (currently not implemented) - Aktiviere erweitertes SMF-Format (momentan nicht implementiert) + + Pitch Modulation Sensitivity + Vibrato-Sensitivität - - Use &2-byte time signatures instead of standard 4 - Benutze &2-byte-Zeitsignaturen statt standardmäßig 4-byte + + LFO Delay + LFO Verzögerung - - Alt+2 - Alt+2 + + LFO delay + LFO Verzögerung - - Note: Format 0 uses the FIRST midi track's name/comment in the arranger - #Hinweis: Format 0 nutzt den Namen/Kommentar der ERSTEN Midispur im Arranger + + LFO speed + LFO Geschwindigkeit - - Save space by replacing note-offs with &zero velocity note-ons - Platz sparen, indem Note-offs durch Note-ons mit Anschlagsdynamik &0 ersetzt werden - - - - Alt+Z - Alt+Z - - - - CrescendoBase - - - MusE: Crescendo/Decrescendo - MusE: Crescendo/Decrescendo - - - - Range - Bereich - - - - Looped Events - Ereignisse innerhalb Schleife + + Amplitude modulation depth + Tremolostärke - - Selected Looped - Ausgewählt und innerhalb der Schleife + + Amplitude modulation sensitivity + Tremolo-Sensitivität - Values - Werte + Amplitude Modulation Sensitivity + Tremolo-Sensitivität - - Start velocity - Anfangsdynamik + + AMS + AMS - - % - % + LFO Waveform + LFO Wellenform - - End velocity - Enddynamik + + + Pitch Modulation Depth + Vibrato-Stärke - - Absolute - Absolut + + PMD + PMD - Relative - Relativ + LFO Speed + LFO Geschwindigkeit - - OK - Bestätigen + + AMD + AMD - Cancel - Abbrechen - - - - CtrlPanel - - select controller - Kontroller wählen + Speed + Geschwindigkeit - remove panel - Kontrolleransicht schließen + + Delay + Verzögerung - Sel - Wählen + + PMS + PMS - x - Schließen + + + Modulation Matrix + Modulationsmatrix - Velocity - Velocity + + <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> +<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> +<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> +<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> +<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + <b>Algorithmus 1</b> : <i>Op 1</i> moduliert durch <i>Op 2</i> moduliert durch <i>Op 3</i> moduliert durch <i>Op 4</i><br> +<b>Algorithmus 2</b> : <i>Op 1</i> moduliert durch <i>Op 2</i> moduliert durch sowohl <i>Op 3</i> als auch <i>Op 4</i><br> +<b>Algorithmus 3</b> : <i>Op 1</i> moduliert durch sowohl<i>Op 4</i> als auch <i>Op 2</i> moduliert durch <i>Op 3</i><br> +<b>Algorithmus 4</b> : <i>Op 1</i> moduliert durch sowohl<i>Op 2</i> als auch <i>Op 3</i> moduliert durch <i>Op 4</i><br> +<b>Algorithmus 5</b> : (<i>Op 1</i> moduliert durch <i>Op 2</i>) addiert zu (<i>Op 3</i> moduliert durch <i>Op 4</i>) <br> +<b>Algorithmus 6</b> : Summe der drei <i>Op 1, 2, 3</i> alle moduliert durch <i>Op 4</i><br> +<b>Algorithmus 7</b> : Summe der drei <i>Op 1, 2, 3</i> mit <i>Op 3</i> moduliert durch <i>Op 4</i><br> +<b>Algorithmus 8</b> : Summe der vier <i>Op 1, 2, 3, 4</i> - add new ... - Neuen Kontroller hinzufügen ... + + Op4 Feedback + Op4 Rückspeisung - S - S + + + Feedback level of the operator 4 + Rückspeise ("Feedback")-level des Operators 4 - - - DeicsOnzeGui - - Save configuration - Konfiguration speichern + + + + Transpose + Transponieren - - - - - - - - - - - Critical Error - Kritischer Fehler + + Op &1 + Op &1 - - - - - - Cannot open file %1 - Kann Datei "%1" nicht öffnen + + Scaling 1 + Skalierung 1 - - - - - - Parsing error for file %1 - Fehler beim Parsen von Datei "%1" + + LS1 + LS1 - - - Load category dialog - Kategorie laden + + RS1 + RS1 - - Load set dialog - Set laden + + + + + + + + + Rate Scaling + Ratenskalierung - - Save set dialog - Set speichern + + + + + + + + + + + + + Attack Rate of the operator 1 + Attackrate des Operators 1 - - New category - Neue Kategorie + + + + + + + + + Level Scaling + Levelskalierung - - - Delete category - Kategorie löschen + + Amplitude Envelope 1 + Amplitudenhüllkurve 1 - - Load category - Kategorie laden + + RR1 + RR1 - - Save category - Kategorie speichern + + D1R1 + D1R1 - - Load set - Set laden + + D1L1 + D1L1 - - Save set - Set speichern + + D2R1 + D2R1 - - Delete set - Set löschen + + + + + Release Rate + Release Rate - - - New subcategory - Neue Unterkategorie - - - - - Delete subcategory - Unterkategorie löschen - - - - Load subcategory - Unterkategorie laden - - - - Save subcategory - Unterkategorie speichern - - - - New preset - Neue Vorlage - - - - - Delete preset - Vorlade löschen - - - - Load preset - Vorlage laden - - - - Save preset - Vorlage speichern - - - - No more category supported - Keine weiteren Kategorien unterstützt - - - - You can not add more categories - Sie können keine weiteren Kategorien hinzufügen - - - - - - Do you really want to delete %1 ? - Möchten Sie wirklich %1 löschen? - - - - - - &Yes - &Ja - - - - - - &No - &Nein - - - - - No category selected - Keine Kategorie ausgewählt - - - - - You must first select a category. - Sie müssen zuerst eine Kategorie auswählen. - - - - - - Replace or add - Ersetzen oder Hinzufügen - - - - %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? - %1 soll mit der hbank-Nummer %2 beeinflusst werden, aber es gibt bereits eine auf diesem -Slot. Wollen Sie sie ersetzen oder in den nächsten freien Slot hinzufügen? - - - - - - &Replace - Erset&zen - - - - - - &Add - &Hinzufügen - - - - - - Download error - Download-Fehler - - - - There is no more free category slot. - Es gibt keinen weiteren freien Kategorie-Slot. - - - - Save category dialog - Kategorie speichern - - - - No more subcategory supported - Keine weiteren Unterkategorien unterstützt - - - - You can not add more subcategories - Sie können keine weiteren Unterkateogien hinzufügen - - - - - No subcategory selected - Keine Unterkategorie ausgewählt - - - - - You must first select a subcategory. - Sie müssen erst eine Unterkategorie auswählen. - - - - Load subcategory dialog - Unterkategorie-Laden-Dialog - - - - %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? - %1 soll mit der lbank-Nummer %2 beeinflusst werden, aber es gibt bereits eine auf diesem -Slot. Wollen Sie sie ersetzen oder in den nächsten freien Slot hinzufügen? - - - - There is no more free subcategory slot. - Es gibt keinen weiteren freien Unterkategorie-Slot. - - - - Save subcategory dialog - Unterkategorie-Speichern-Dialog - - - - No more preset supported - Keine weiteren Voreinstellungen unterstützt - - - - You can not add more presets - Sie können keine weiteren Voreinstellungen hinzufügen - - - - - - No preset selected - Keine Voreinstellung ausgewählt - - - - - - You must first select a preset. - Sie müssen erst eine Voreinstellung auswählen. - - - - Load preset dialog - Voreinstellung-Laden-Dialog - - - - %1 is supposed to be affected to the prog number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? - %1 soll mit der Programm-Nummer %2 beeinflusst werden, aber es gibt bereits eine auf diesem -Slot. Wollen Sie sie ersetzen oder in den nächsten freien Slot hinzufügen? - - - - There is no more free preset slot. - Es gibt keinen weiteren freien Voreinstellung-Slot. - - - - Save preset dialog - Voreinstellung-Speichern-Dialog - - - - Browse set dialog - Set-Suchen-Dialog - - - - Browse image dialog - Bild-Suchen-Dialog - - - - DeicsOnzeGuiBase - - - DeicsOnze - DeicsOnze - - - - &Preset - &Vorlage - - - - Program numerous - Programmnummer - - - - INITVOICE - INITVOICE - - - - LBank - L-Bank - - - - Subcategory - Unterkategorie - - - - - Bank numerous - Banknummer - - - - - NONE - KEIN - - - - HBank - H-Bank - - - - Category - Kategorie - - - - Prog - Prog - - - - Preset - Vorlage - - - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Veröffentlicht unter der GPL Lizenz. - - - - &Global - &Global - - - - Pitch Envelope - Tonhöhen-Hüllkurve - - - - PL3 - PL3 - - - - PL2 - PL2 - - - - PL1 - PL1 - - - - PR1 - PR1 - - - - PR2 - PR2 - - - - PR3 - PR3 - - - - - - - - - - Pitch modulation depth - Vibrato-Stärke - - - - LFO - LFO - - - - LFO Sync - LFO Sync - - - - Pitch modulation sensitivity - Vibrato-Sensitivität - - - - Pitch Modulation Sensitivity - Vibrato-Sensitivität - - - - LFO Delay - LFO Verzögerung - - - - LFO delay - LFO Verzögerung - - - - LFO speed - LFO Geschwindigkeit - - - - Amplitude modulation depth - Tremolostärke - - - - Amplitude modulation sensitivity - Tremolo-Sensitivität - - - - Amplitude Modulation Sensitivity - Tremolo-Sensitivität - - - - AMS - AMS - - - - LFO Waveform - LFO Wellenform - - - - - Pitch Modulation Depth - Vibrato-Stärke - - - - PMD - PMD - - - - LFO Speed - LFO Geschwindigkeit - - - - AMD - AMD - - - - Speed - Geschwindigkeit - - - - Delay - Verzögerung - - - - PMS - PMS - - - - - Modulation Matrix - Modulationsmatrix - - - - <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> -<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> -<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> -<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> -<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> - <b>Algorithmus 1</b> : <i>Op 1</i> moduliert durch <i>Op 2</i> moduliert durch <i>Op 3</i> moduliert durch <i>Op 4</i><br> -<b>Algorithmus 2</b> : <i>Op 1</i> moduliert durch <i>Op 2</i> moduliert durch sowohl <i>Op 3</i> als auch <i>Op 4</i><br> -<b>Algorithmus 3</b> : <i>Op 1</i> moduliert durch sowohl<i>Op 4</i> als auch <i>Op 2</i> moduliert durch <i>Op 3</i><br> -<b>Algorithmus 4</b> : <i>Op 1</i> moduliert durch sowohl<i>Op 2</i> als auch <i>Op 3</i> moduliert durch <i>Op 4</i><br> -<b>Algorithmus 5</b> : (<i>Op 1</i> moduliert durch <i>Op 2</i>) addiert zu (<i>Op 3</i> moduliert durch <i>Op 4</i>) <br> -<b>Algorithmus 6</b> : Summe der drei <i>Op 1, 2, 3</i> alle moduliert durch <i>Op 4</i><br> -<b>Algorithmus 7</b> : Summe der drei <i>Op 1, 2, 3</i> mit <i>Op 3</i> moduliert durch <i>Op 4</i><br> -<b>Algorithmus 8</b> : Summe der vier <i>Op 1, 2, 3, 4</i> - - - - Op4 Feedback - Op4 Rückspeisung - - - - - Feedback level of the operator 4 - Rückspeise ("Feedback")-level des Operators 4 - - - - - - Transpose - Transponieren - - - - Op &1 - Op &1 - - - - Scaling 1 - Skalierung 1 - - - - LS1 - LS1 - - - - RS1 - RS1 - - - - - - - - - - - Rate Scaling - Ratenskalierung - - - - - - - - - - - - - - - Attack Rate of the operator 1 - Attackrate des Operators 1 - - - - - - - - - - - Level Scaling - Levelskalierung - - - - Amplitude Envelope 1 - Amplitudenhüllkurve 1 - - - - RR1 - RR1 - - - - D1R1 - D1R1 - - - - D1L1 - D1L1 - - - - D2R1 - D2R1 - - - - - - - Release Rate - Release Rate - - - - - - - 2° Decay Rate - 2° Decay Rate - - - - - - - 1° Decay Level - 1° Decay Level - - - - - - - 1° Decay Rate - 1° Decay Rate - - - - - - - Attack Rate - Attack Rate - - - - AR1 - AR1 - - - - Detune, OSCWave, EGShift 1 - Verstimmung, OSCWave, EGShift 1 - - - - DET1 - DET1 - - - - - - - - - - - - Detune - Verstimmung - - - - - - - EG Shift - EG Shift - - - - - - - 96dB - 96dB - - - - - - - 48dB - 48dB - - - - - - - 24dB - 24dB - - - - - - - 12dB - 12dB - - - - - - - Wave form - Wellenform - - - - - - - Wave form 1 = <i>sin(<b>t</b>)</i><br> -Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> -Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> -Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> -Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> -Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> - Wellenform 1 = <i>sin(<b>t</b>)</i><br> -Wellenform 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> -Wellenform 3 = <i>wenn <b>t</b>&#060 pi dann sin(<b>t</b>) sonst 0</i><br> -Wellenform 4 = <i>wenn <b>t</b>&#060 pi dann sin(<b>t</b>)*abs(sin(<b>t</b>)) sonst 0</i><br> -Wellenform 5 = <i>wenn <b>t</b>&#060 pi dann sin(2*<b>t</b>) sonst 0</i><br> -Wellenform 6 = <i>wenn <b>t</b>&#060 pi dann sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) sonst 0</i><br> -Wellenform 7 = <i>wenn <b>t</b>&#060 pi dann abs(sin(2*<b>t</b>)) sonst 0</i><br> -Wellenform 8 = <i>wenn <b>t</b>&#060 pi dann sin(2*<b>t</b>)*sin(2*<b>t</b>) sonst 0</i> - - - - Sensitivity 1 - Sensitivität 1 - - - - KVS1 - KVS1 - - - - - - - Amplitude Modulation Enable - Amplitudenmodulation aktivieren - - - - AME1 - AME1 - - - - - - - Keyboard Velocity Sensitivity - Keyboard Anschlagsdynamik-Sensitivität - - - - - - - Key Velocity Sensitivity - Noten-Anschlagsdynamik-Sensitivität - - - - EBS1 - EBS1 - - - - - - - EG Bias Sensitivity - EG Bias Sensitivität - - - - - - - Eg Bias Sensitivity - EG Bias Sensitivität - - - - Frequency 1 - Frequenz 1 - - - - Coarse 1 - Grob 1 - - - - - - - Coarse Ratio - Grob Verhältnis - - - - Fine 1 - Fein 1 - - - - - - - Fine Ratio - Fein Verhältnis - - - - Freq 1 - Freq 1 - - - - - - - Fixed Frequency - Feste Frequenz - - - - - - - Toggle Fix Frequency - "Feste Frequenz" umschalten - - - - - - - FIX - FIX - - - - OUT 1 - OUT1 - - - - - - - Output Volume - Ausgangslautstärke - - - - - - - - - Volume - Lautstärke - - - - Op &2 - Op &2 - - - - Amplitude Envelope 2 - Amplitudenhüllkurve 2 - - - - D1R2 - D1R2 - - - - D1L2 - D1L2 - - - - D2R2 - D2R2 - - - - RR2 - RR2 - - - - AR2 - AR2 - - - - Frequency 2 - Frequenz 2 - - - - Coarse 2 - Grob 2 - - - - Fine 2 - Fein 2 - - - - Freq 2 - Freq 2 - - - - Scaling 2 - Skalierung 2 - - - - LS2 - LS2 - - - - RS2 - RS2 - - - - OUT 2 - OUT 2 - - - - Detune, OSCWave, EGShift 2 - Verstimmung, OSCWave, EGShift 2 - - - - DET2 - DET2 - - - - Sensitivity 2 - Sensitivität 2 - - - - EBS2 - EBS2 - - - - KVS2 - KVS2 - - - - AME2 - AME2 - - - - Op &3 - Op &3 - - - - Amplitude Envelope 3 - Amplitudenhüllkurve 3 - - - - D1R3 - D1R3 - - - - D1L3 - D1L3 - - - - D2R3 - D2R3 - - - - RR3 - RR3 - - - - AR3 - AR3 - - - - Scaling 3 - Skalierung 3 - - - - LS3 - LS3 - - - - RS3 - RS3 - - - - OUT 3 - OUT 3 - - - - Frequency 3 - Frequenz 3 - - - - Coarse 3 - Grob 3 - - - - Fine 3 - Fein 3 - - - - Freq 3 - Freq 3 - - - - Detune, OSCWave, EGShift 3 - Verstimmung, OSCWave, EGShift 3 - - - - DET3 - DET3 - - - - Sensitivity 3 - Sensitivität 3 - - - - EBS3 - EBS3 - - - - KVS3 - KVS3 - - - - AME3 - AME3 - - - - Op &4 - Op &4 - - - - amplitude Envelope 4 - Amplitudenhüllkurve 4 - - - - AR4 - AR4 - - - - D1R4 - D1R4 - - - - D1L4 - D1L4 - - - - D2R4 - D2R4 - - - - RR4 - RR4 - - - - Frequency 4 - Frequenz 4 - - - - Coarse 4 - Grob 4 - - - - Fine 4 - Fein 4 - - - - Freq 4 - Freq 4 - - - - Scaling 4 - Skalierung 4 - - - - LS4 - LS4 - - - - RS4 - RS4 - - - - OUT 4 - OUT 4 - - - - Detune, OSCWave, EGShift 4 - Verstimmung, OSCWave, EGShift 4 - - - - DET4 - DET4 - - - - Sensitivity 4 - Sensitivität 4 - - - - EBS4 - EBS4 - - - - KVS4 - KVS4 - - - - AME4 - AME4 - - - - &Func - &Func - - - - Delay Pan Depth - - - - - Delay Pan LFO Freq - - - - - Delay Ch Send Level - - - - - - - Channel Chorus - Kanal-Chorus - - - - Delay Feedback - - - - - Delay On/Off, Return Level - - - - - - - On - An - - - - Delay Beat Ratio - - - - - Delay BPM - - - - - Foot Control - Fußschalter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pitch Bend Range - Pitchbend-Bereich - - - - - - - Pitch - Tonhöhe - - - - - - - Amplitude - Amplitude - - - - Modulation Wheel - Modulations-Rad - - - - Breath Control - Anblaskontrolle - - - - - Pitch Bias - Tonhöhen-Bias - - - - - Envelope Bias - Hüllkurven-Bias - - - - After Touch - Aftertouch - - - - Phony Mode - - - - - POLY - POLY - - - - MONO - MONO - - - - Potamento - Portamento - - - - Portamento Mode - Portamento-Modus - - - - FINGER - FINGER - - - - FULL - VOLL - - - - PT - PT - - - - - Portamento Time - Portamento-Dauer - - - - C&horus - C&horus - - - - Chorus Parameters - Chorus-Parameter - - - - - Channel send level - - - - - - On/Off and Return level - - - - - - Select LADSPA plugin - LADSPA-Plugin auswählen - - - - - Change plugin - Plugin ändern - - - - &Reverb - &Reverb - - - - Reverb Parameters - Nachhallparameter - - - - &Config - &Einstellen - - - - Font Size - Schriftgröße - - - - Quality - Qualität - - - - High - Hoch - - - - Middle - Mittel - - - - Low - Gering - - - - Ultra low - Sehr Gering - - - - Filter - Filter - - - - Save Mode (into the song) - Speichermodus (in das Lied) - - - - Save only the used presets - Nur die benutzten Vorlagen speichern - - - - Save the entire set - Das gesamte Set speichern - - - - Save the configuration - Die Konfiguration speichern - - - - Configuration File - Konfigurationsdatei - - - - Save... - Speichern... - - - - Load... - Laden... - - - - Save as default - Als Standard speichern - - - - Colors - Farben - - - - Text - Text - - - - Background - Hintergrund - - - - Edit Text - Text bearbeiten - - - - Edit Background - Hintergrund bearbeiten - - - - - - Red - Rot - - - - - - Blue - Blau - - - - - - Green - Grün - - - - Set Path - Pfad setzen - - - - Image in the background : - Hintergrundbild: - - - - - Browse... - Durchsuchen... - - - - Load the set at the initialization : - Das Set bei der Initialisierung laden: - - - - Set Brightness, Detune, Attack and Release of the current channel to default - Helligkeit, Verstimmung, Attack und Release des momentanen Kanals auf den Standard setzen - - - - Res. Ctrl - - - - - Cut all notes off - Alle Noten abschneiden - - - - Panic! - Panik! - - - - Number of Voices - Anzahl der Stimmen - - - - Number of voices - Anzahl der Stimmen - - - - Enable - Einschalten - - - - Channel - Kanal - - - - Vol - Vol - - - - Channel Ctrl - Kanal Ctrl - - - - Release - Release - - - - Attack - Attack - - - - Brightness - Helligkeit - - - - Modulation - Modulation - - - - Pan - Pan - - - - DelOverlapsBase - - - MusE: Delete Overlaps - MusE: Überlappungen entfernen - - - - Range - Bereich - - - - All Events - Alle Ereignisse - - - - Selected Events - Ausgewählte Ereignisse - - - - Looped Events - Ereignisse innerhalb Schleife - - - - Selected Looped - Ausgewählt und innerhalb der Schleife - - - - OK - Bestätigen - - - - Cancel - Abbrechen - - - - DidYouKnow - - - Did you know? - Wussten Sie? - - - - Don't show on startup - Nicht beim Starten zeigen - - - - Next tip - Nächster Tipp - - - - Close - Schließen - - - - DrumEdit - - Load Map - Schlagzeugbelegung laden - - - Save Map - Schlagzeugbelegung Sichern - - - &Edit - &Bearbeiten - - - Cut - Ausschneiden - - - Copy - Kopieren - - - Paste - Einfügen - - - Delete Events - Events entfernen - - - Select All - Alles auswählen - - - Select None - Auswahl aufheben - - - Invert - Auswahl umkehren - - - Inside Loop - Innerhalb Schleife - - - Outside Loop - Ausserhalb Schleife - - - &Select - &Auswählen - - - Step Record - Aufnahme taktschlagweise - - - Midi Input - Midi Eingang - - - Add Controller View - Kontrolleransicht hinzufügen - - - M - M - - - Sound - Klang - - - QNT - QNT - - - E-Note - E-Note - - - Len - Länge - - - A-Note - A-Note - - - Ch - K - - - Port - Port - - - LV1 - LV1 - - - LV2 - LV2 - - - LV3 - LV3 - - - LV4 - LV4 - - - &File - &Datei - - - Load Drummap - Schlagzeugbelegung laden - - - Store Drummap - Schlagzeugbelegung sichern - - - ctrl - steuern - - - drummaps - Schlagzeugbelegungen - - - Muse: Load Drum Map - MusE: Schlagzeugbelegung laden - - - MusE: Store Drum Map - MusE: Schlagzeugbelegung speichern - - - Set Fixed Length - Länge festlegen - - - &Functions - &Funktionen - - - Modify Velocity - Velocity ändern - - - mute instrument - Instrument still schalten - - - sound name - Klangname - - - quantisation - Quantisierung - - - this input note triggers the sound - Diese Eingangsnote löst den Klang aus - - - note length - Notenlänge - - - output port - Ausgangsanschluss - - - Crescendo/Decrescendo - Crescendo/Decrescendo - - - Quantize - Quantisieren - - - Erase Event - Ereignis löschen - - - Move Notes - Noten verschieben - - - Delete Overlaps - Überlappungen entfernen - - - &Plugins - &Plugins - - - Window &Config - Fenster&konfiguration - - - Drum tools - Schlagzeug-Werkzeuge - - - cursor tools - Cursor-Werkzeug - - - Set step size for cursor edit - Schrittweite für Cursor-Modus einstellen - - - panic - Panik - - - - DuplicateTracksBase - - - Duplicate tracks - Spuren duplizieren - - - - Number of copies - Anzahl der Kopien - - - - Copy all routes - Alle Routen kopieren - - - - Default routing - Standard-Routen - - - - No routes - Keine Routen - - - - Copy parts - Parts kopieren - - - - Copy standard controllers (vol, pan) - Standard-Controller (Vol,Pan) kopieren - - - - Copy effects rack plugins - Effekt-Rack-Plugins kopieren - - - - Copy plugin controllers - Plugin-Controller kopieren - - - - Ok - Bestätigen - - - - Cancel - Abbrechen - - - - EditCAfterDialog - - Time Position - Position - - - Pressure - Anschlagsdruck - - - MusE: Enter Channel Aftertouch - MusE: Kanal Aftertouch festlegen - - - - EditCtrl7DialogBase - - MusE: Enter Controller - MusE: Kontroller eingeben - - - Controller: - Kontroller: - - - Time Position: - Position: - - - Value: - Wert: - - - controller value - Kontroller Wert - - - OK - Bestätigen - - - Cancel - Abbrechen - - - - EditCtrlBase - - - MusE: Edit Controller Event - MusE: Kontroller Ereignis bearbeiten - - - - Time Position - Position - - - - Available Controller: - Verfügbare Kontroller: - - - - Create New Controller - Neuen Kontroller erstellen - - - - textLabel3 - Beschriftung3 - - - - Value - Wert - - - - Controller - Kontroller - - - - H-Bank - H-Bank - - - - L-Bank - L-Bank - - - - Program - Programm - - - - - off - aus - - - - pushButton4 - Schaltfläche4 - - - - &OK - &Bestätigen - - - - &Cancel - &Abbrechen - - - - EditEventDialog - - Ok - Bestätigen - - - Cancel - Abbrechen - - - - EditGainBase - - - MusE: Modify gain - MusE: Gain verändern - - - - Gain - Gain - - - - 200% - 200% - - - - 100% - 100% - - - - 0% - 0% - - - - &Reset - Zu&rücksetzen - - - - Alt+R - Alt+R - - - - &Apply - &Anwenden - - - - Alt+A - Alt+A - - - - &Cancel - &Abbrechen - - - - Alt+C - Alt+C - - - - EditInstrument - - MusE: Write File failed - MusE: Datei schreiben schlug fehl - - - MusE - MusE - - - &Nosave - Lied &nicht Sichern - - - &Abort - &Abbrechen - - - - EditInstrumentBase - - - MusE: Instrument Editor - MusE: Instrumenten Editor - - - Patches - Patches - - - Patch Name: - Patch Name: - - - - High Bank: - High Bank: - - - - Low Bank: - Low Bank: - - - - Program: - Programm: - - - d.c. - dont care - d.c. - - - d.c. - d.c. - - - Patch/Group - Patch/Gruppe - - - - - - &Delete - &Löschen - - - - - - Alt+D - Alt+D - - - &New Patch - &Neuer Patch - - - Alt+N - Alt+N - - - New Group - Neue Gruppe - - - - Drum - Schlagzeug - - - - GM - GM - - - - GS - GS - - - - XG - XG - - - Controller - Kontroller - - - Predefined Controller: - Vordefinierte Kontroller: - - - - This is a list of commonly used midi controllers. -Note that in MusE pitch and program changes are -handled like normal controllers. - Dies ist eine Liste häufig verwendeter Midi Kontroller. -MusE behandelt allerdings Kontroller wie "pitch" und "program changes" wie normale Kontroller. - - - - - Properties - Eigenschaften - - - Name - Name - - - Type - Typ - - - - Control7 - Kontroller7 - - - - Control14 - Kontroller14 - - - - RPN - RPN - - - - NRPN - NRPN - - - - Pitch - Tonhöhe - - - - Program - Programm - - - - - H-Ctrl - H-Ctrl - - - Midi Controller Number High Byte - Midi Kontrollernummer High Byte - - - - - L-Ctrl - L-Ctrl - - - Midi Controller Number Low Byte - Midi Kontrollernummer Low Byte - - - Range - Bereich - - - - Min - Min - - - - Max - Max - - - Default - Standard - - - - Name - Name - - - - Type - Typ - - - Min Val - Min Wert - - - Max Val - Max Wert - - - list of defined controllers - Liste von definierten Kontrollern - - - This is the MusE list of defined controllers. - Dies ist die MusE Liste von definierten Kontrollern. - - - SysEx - SysEx - - - Initialization - Initialisierung - - - Panic - Panik - - - - Hex Entry: - Hex Eintrag: - - - - &File - &Datei - - - - Tools - Werkzeuge - - - - New - Neu - - - - &New - &Neu - - - - Ctrl+N - Ctrl+N - - - - Open - Öffnen - - - - &Open... - &Öffnen ... - - - - Ctrl+O - Ctrl+O - - - - Save - Sichern - - - - &Save - &Sichern - - - - Ctrl+S - Ctrl+S - - - - Save As - Sichern Unter - - - - Save &As... - Sichern &Unter... - - - - Exit - Beenden - - - - E&xit - &Beenden - - - - Instrument Name: - Name des Instruments: - - - - Selected instrument name. - Name des ausgewählten Instruments. - - - - List of defined instruments. - Liste aller definierten Instrumente. - - - - Pa&tches - Pa&tches - - - - List of groups and patches. - Liste der Gruppen und Patches. - - - - Group/Patch - Gruppe/Patch - - - - - - Name: - Name: - - - - - Group or patch name - Gruppen- oder Patchname - - - - Patch high bank number - Hohe Banknummer für den Patch - - - - Patch high bank number. --- means don't care. - Hohe Banknummer für den Patch. --- i.d.R. uninteressant. - - - - --- - dont care - --- - - - - Patch low bank number - Niedrige Banknummer für den Patch - - - - Patch low bank number. --- means don't care. - Hohe Banknummer für den Patch. --- i.d.R. uninteressant. - - - - --- - --- - - - - - Patch program number - Programmnummer für den Patch - - - - Drum patch - Schlagzeug-Patch - - - - If set, the patch is available only for drum channels. - Wenn aktiviert, ist der Patch nur für Schlagzeugkanäle verfügbar. - - - - GM patch - GM Patch - - - - If set, the patch is available in a 'GM' or 'NO' midi song type. - Wenn aktiviert, ist der Patch nur in einem "GM" oder "NO" Songtypen verfügbar. - - - - GS patch - GS Patch - - - - If set, the patch is available in a 'GS' or 'NO' midi song type. - Wenn aktiviert, ist der Patch nur in einem "GS" oder "NO" Songtypen verfügbar. - - - - XG patch - XG Patch - - - - If set, the patch is available in an 'XG' or 'NO' midi song type. - Wenn aktiviert, ist der Patch nur in einem "XG" oder "NO" Songtypen verfügbar. - - - - Delete group or patch - Lösche Gruppe oder Patch - - - - New patch - Neuer Patch - - - - New &Patch - Neuer &Patch - - - - Alt+P - Alt+P - - - - New group - Neue Gruppe - - - - New &Group - Neue &Gruppe - - - - Alt+G - Alt+G - - - - Contro&ller - Contro&ller - - - - Common: - Gemeinsam: - - - - List of defined controllers - Liste von definierten Controllern - - - - List of defined controllers. - Liste von definierten Controllern. - - - - Min - Min - - - - Max - Max - - - - Def - Def - - - - Midi controller name - Name des Midi-Controllers - - - - Type: - Typ: - - - - - Midi controller type - Typ des Midi-Controllers - - - - RPN14 - RPN14 - - - - NRPN14 - NRPN14 - - - - - Midi controller number high byte - Midi Controllernummer höchstwertiges Byte - - - - Midi controller number low byte (* means drum controller) - Midi Controllernummer niederwertiges Byte (* bedeutet Schlagzeugcontroller) - - - - Midi controller number low byte. -If low byte is * then the controller is a - 'drum controller'. For drum tracks and - GS/XG type songs and instruments. -Allows controllers for each instrument in - Muse's drum map. The low byte will be - replaced by the 'ANote' in the drum map. -Examples: The GS and XG instruments' - Drum controllers. - Niederwertiges Byte der MIDI-Controller- -nummer. Wenn es "*" ist, ist der Controller -ein Schlagzeugcontroller. Für Schlagzeug- -spuren und GS/XG-Songs und -Instrumente. -Ermöglicht Controller für jedes Instrument -in der Schlagzeug-Liste. Das niederwertige -Byte wird durch die "ANote" der Liste ersetzt. -Beispiele: Die Schlagzeugcontroller der GS- -und XG-Instrumente. - - - - * - wild card - * - - - - Range: - Bereich: - - - - Minimum value. If negative, auto-translate. - Minimalwert. Wenn negativ, automatisch umsetzen. - - - - Minimum value. If the minimum value - is negative, the range will automatically - be translated to a positive range. - -Useful for controllers which should be - displayed with zero bias. For example, -'Pan': Minimum: -64 Maximum: 63 -True range: Min: 0 Max: 127 (bias = 64) -'CoarseTuning': Min: -24 Max: 23 -True range: Min: 40 Max: 87 (bias = 64) - -Bias is determined from controller type: -7-bit Controller7 / RPN: Bias = 64 -14-bit Controller14 / RPN14: Bias = 8192 - -Type 'Pitch' is the exception. It is biased - at zero, even with a negative minimum: -'Pitch': Min: -8192 Max: 8191 -True range: Min: -8192 Max: 8191 (bias 0) - Minimalwert. Wenn er negativ ist, wird -der Bereich automatisch in einen -positiven umgesetzt. - -Nützlich für Controller, die ohne Bias -dargestellt werden sollen. Bespielsweise -"Panorama": Minimum -64, Maximum 63. -Wirklicher Bereich: 0 bis 127 (Bias ist also 64) -"Grobes Stimmen": -24 bis 23 -In Wirklichkeit: 40 bis 87, Bias=64. - -Das Bias wird durch den Controller-Typen -bestimmt: -für 7-bittige Controller: Bias=64 -für 14-bittige Controller: Bias= 8192 - -Der Typ "Pitch" ist die Ausnahme: Er hat -kein Bias, obwohl er ein negatives Minimum -besitzt: Er geht von -8192 bis 8191 - - - - - Maximum value - Maximalwert - - - - Default: - Standard: - - - - L-Bank - L-Bank - - - - - - - - off - aus - - - - Progr. - Progr. - - - - ??? - ??? - - - - H-Bank - H-Bank - - - - Default value. Off: No default. - Standardwert. "Aus": Kein Standardwert. - - - - Default (initial) value. Off means no default. - -If a default value is chosen, the value will be sent - to the controller when the controller is added to - the song (in piano roll or event editor). When - the song is re-loaded, the value is sent again. -Otherwise the controller remains at its last value. -Controllers are also automatically added to a - song upon reception of a midi controller event. - -Caution! Watch out for controllers such as - 'Sustain' and 'ResetAllController' with default - values. You should probably turn 'off' their - default (in piano roll or drum edit, and - instrument editor). - Standard- (Initial-)Wert. Aus bedeutet "kein Standard". - -Wenn ein Standardwert ausgewählt ist, wird der Wert -zu dem Controller gesendet, wenn er zum Lied hinzu- -gefügt wird (in der Pianoroll oder dem Eventeditor). -Wenn das Lied neu geladen wird, wird der Wert erneut -gesendet. Ansonsten bleibt der Controller auf seinem -vorherigen Wert. Controller werden auch automatisch -zu einem Lied hinzugefügt, sobald ein solches MIDI- -Controller-Event empfangen wurde. - -Achtung! Passen Sie bei Controllern wie "Sustain" -und "ResetAllController" auf Standardwerte auf. -Sie sollten wahrscheinlich den Standardwert auf -"aus" setzen (in der Pianoroll oder dem Schlagzeug- -editor und dem Instrumenteneditor). - - - - off - dont care - aus - - - - Add common controller - Füge gemeinsamen Controller hinzu - - - - &Add - &Hinzufügen - - - - Alt+A - Alt+A - - - - Delete controller - Controller löschen - - - - Create a new controller - Neuen controller erstellen - - - - New &Controller - Neuer &Controller - - - - Alt+C - Alt+C - - - - Null Param Hi: - Null Param Hi: - - - - Null parameter number High byte - Null Parameternummer höchstwertiges Byte - - - - - If set, these 'null' parameter numbers will - be sent after each RPN/NRPN event. -This prevents subsequent 'data' events - from corrupting the RPN/NRPN controller. -Typically, set to 127/127, or an unused - RPN/NRPN controller number. - Wenn gesetzt, werden diese "null" Parameter- -nummern gesendet nach jedem RPN/NRPN- -Event. -Das verhindert, dass nachfolgende Datenevents -die RPN/NRPN-Controller zerstören. -Normalerweise auf 127/127 oder eine unbenutzte -RPN/NRPN-Controllernummer gesetzt. - - - - Lo: - Lo: - - - - Null parameter number Low byte - Null Parameternummer niederwertiges Byte - - - - S&ysEx - S&ysEx - - - - SysEx List: - SysEx-Liste: - - - - New SysE&x - Neuer SysE&x - - - - Alt+X - Alt+X - - - - &Help - &Hilfe - - - - - new item - neuer Eintrag - - - - - What's this? - Was ist das? - - - - EditMetaDialog - - Time Position - Position - - - Meta Type - Meta Typ - - - Enter Hex - Hex Eingabe - - - MusE: Enter Meta Event - MusE: Eingabe von Metaereignissen - - - - EditMetaDialogBase - - MusE: Enter Meta Event - MusE: Meta Ereignis eingeben - - - OK - Bestätigen - - - Cancel - Abbrechen - - - TextLabel1 - Beschriftung1 - - - Time Position: - Position: - - - Meta Type: - Meta Typ: - - - Enter Hex - Hex eingeben - - - - EditNoteDialogBase - - - MusE: Enter Note - MusE: Note eingeben - - - - OK - Bestätigen - - - - Cancel - Abbrechen - - - - Length: - Länge: - - - - Time Position: - Position: - - - - Pitch: - Tonhöhe: - - - - Velocity On: - Velocity An: - - - - Velocity Off: - Velocity Aus: - - - - EditPAfterDialog - - Time Position - Position - - - Pitch - Tonhöhe - - - Pressure - Anschlagsdruck - - - MusE: Enter Poly Aftertouch - MusE: Poly Aftertouch eingeben - - - - EditSysexDialogBase - - - MusE: Enter SysEx - MusE: SysEx eingeben - - - - TimePosition: - Position: - - - - Comment: - Kommentar: - - - - OK - Bestätigen - - - - Cancel - Abbrechen - - - - EditToolBar - - Edit Tools - Werkzeuge bearbeiten - - - - EffectRack - - effect rack - Effekteinschub - - - move up - Nach oben bewegen - - - move down - Nach unten bewegen - - - remove - entfernen - - - bypass - umleiten - - - show gui - GUI anzeigen - - - new - neu - - - change - ändern - - - - FLUIDGui - - - FLUID: open Soundfile - FLUID: Sounddatei öffnen - - - - FLUIDGuiBase - - - Form1 - Form1 - - - - Soundfont - Soundfont - - - - Load - Laden - - - - FLUIDSynthGuiBase - - - FLUID Synth - FLUID Synth - - - - Load - Laden - - - - Delete - Löschen - - - - Dump Info - - - - - ID - ID - - - - Fontname - Name - - - - Chnl - Kanal - - - - Soundfont - Soundfont - - - - Drum Chnl - Drumkanal - - - - - Level - Level - - - - Width - Breite - - - - Damping - Dämpfung - - - - Room Size - Raumgröße - - - - Reverb - Reverb - - - - CHANNEL SETUP - KANAL SETUP - - - - Sine - Sinus - - - - Triangle - Dreieck - - - - Type - Typ - - - - Number - Anzahl - - - - Speed - Geschwindigkeit - - - - Depth - Stärke - - - - Chorus - Chorus - - - - Gain - Verstärkung - - - - LOADED SOUNDFONTS - GELADENE SOUNDFONTS - - - - FileDialogButtons - - Form1 - Form1 - - - - Global - Global - - - - User - Benutzer - - - - Project - Projekt - - - - read Midi Port -Configuration - lese Midi-Port- -Konfiguration - - - Load: - Laden: - - - Songdata + -Cofiguration - Lieddaten + -Konfiguration - - - only -Songdata - Nur Lieddaten - - - - fdialogbuttons - fdialogbuttons - - - Songdata + -Configuration - Lieddaten + -Konfiguration - - - - FluidSynthGui - - - Choose soundfont - Soundfont auswählen - - - - FontSel - - Size: - Größe: - - - - GateTimeBase - - MusE: Modify Gate Time - MusE: Gate Zeit ändern - - - - Range - Bereich - - - - All Events - Alle Ereignisse - - - - Selected Events - Ausgewählte Ereignisse - - - - Looped Events - Ereignisse innerhalb Schleife - - - Selected & Looped - Ausgewählt & innerhalb der Schleife - - - - MusE: Modify Note Length - MusE: Notenlänge verändern - - - - Selected Looped - Ausgewählt und innerhalb der Schleife - - - - Values - Werte - - - - Rate: - Rate: - - - - Offset: - Zeitversatz: - - - - % - % - - - - lenNew = (lenOld * rate) + offset - lenNeu = (lenAlt * rate) + offset - - - - OK - Bestätigen - - - - Cancel - Abbrechen - - - - GlobalSettingsDialogBase - - - MusE: Global Settings - MusE: Globale Einstellungen - - - - Audio - Audio - - - - Mixer - Mischpult - - - - - dB - dB - - - - min. Meter Value - min. Pegelreglerwerte - - - min.Slider Val - min. Schiebereglerwerte - - - - Midi - Midi - - - - Ticks - Ticks - - - - - - 1024 - 1024 - - - - - - 2048 - 2048 - - - - 4096 - 4096 - - - 8172 - 8172 - - - - Displayed Resolution -(Ticks/Quarternote) - Angezeigte Auflösung -(Ticks/Viertelnote) - - - - - 48 - 48 - - - - - 96 - 96 - - - - - 192 - 192 - - - - - 384 - 384 - - - - - 768 - 768 - - - - - 1536 - 1536 - - - - - 3072 - 3072 - - - - - 6144 - 61144 - - - - - 12288 - 12288 - - - - RTC Resolution -(Ticks/Sec) - RTC (RealTimeClock) Auflösung -(Ticks/Sekunde) - - - GUI - GUI - - - - /sec - /sek - - - - GUI Refresh Rate - GUI Aktualisierungsrate - - - - Use project save dialog - Benutze Projekt-Speichern-Dialog - - - - Some popup menus stay open (else hold Ctrl) - Manche Popup-Menüs bleiben offen (ansonsten Strg halten) - - - - Allows some popup menus to stay open. -Otherwise, hold Ctrl to keep them open. - Erlaubt es, dass einige Popup-Menüs offen bleiben. -Ansonsten können Sie auch Strg drücken, um ein -solches Menü offen zu halten. - - - - In some areas, the middle mouse button decreases -values, while the right button increases. Users without a -middle mouse button can select this option to make the -left button behave like the middle button in such areas. - In manchen Bereichen vermindert die mittlere Maustaste -Werte, während die rechte erhöht. Benutzer ohne mittlere -Maustaste können diese Option nutzen, damit sich in solchen -Bereichen die linke Maustaste wie die mittlere verhält. - - - - Use left mouse button for decreasing values - Benutze linke Maustaste, um Werte zu erniedrigen - - - - Shift + Right click sets left range marker - Shift + Rechtsklick setzt den linken Bereichs-Marker - - - - Allow adding hidden tracks in track list menu - Erlaube es, verborgene Spurtypen hinzuzufügen in der Spurliste - - - - Unhide tracks when adding hidden tracks - Verborgene Spurentypen anzeigen, wenn ein solcher Typ hinzugefügt wird - - - - GUI Style - GUI-Stil - - - - MDI-subwindowness and sharing menus - Unterfenster und Menü-Teilen - - - - Presets: - Voreinstellungen: - - - - traditional MusE SDI - traditionelles MusE SDI - - - - Cakewalk-like MDI - Cakewalk-ähnliches MDI - - - - Borland-/Mac-like MDI - Borland-/Mac-ähnliches MDI - - - - &Apply - &Anwenden - - - - &Ok - &Bestätigen - - - - &Cancel - Abb&rechen - - - Help Browser: - Hilfe Browser: - - - - Application - Anwendung - - - - Start Muse - MusE starten - - - - start with last song - Mit letztem Lied starten - - - - start with song - Mit bestimmtem Lied starten - - - - start song: - Startlied: - - - - Views - Ansichten - - - - - - - - y-pos - y-pos - - - - - - - show - zeigen - - - - - - - - x-pos - x-pos - - - - - - - height - Höhe - - - - - - - width - Breite - - - - Big Time - Zeitanzeige groß - - - Arranger - Arrangierer - - - - Transport - Transport - - - - - - - - Cur - Jetzt - - - - - - - - set current values - Jetzige Werte übernehmen - - - - start with template: default.med - Mit Lied: default.med starten - - - - show splash screen - Begrüßungsbild anzeigen - - - - Mixer A - Mixer A - - - - Mixer B - Mixer B - - - - show "Did you know?" dialog - Zeige "Wussten Sie?"-Dialog - - - - Start song - Beim Starten geöffnetes Lied - - - - min. Slider Val - min. Schiebereglerwert - - - - Enable denormal protection - Denormal-Schutz aktivieren - - - - Enable output limiter - Aktiviere Ausgangs-Limiter - - - - External Waveditor - Externer Wave-Editor - - - - External Waveditor command - Befehl für externen Wave-Editor - - - - Note: External editor opened from the internal editor. - Hinweis: der externe Editor, der vom internen aus geöffnet wird. - - - - Dummy Audio Driver (settings require restart) - Dummy Audiotreiber (erfordert Neustart) - - - - Hz - Hz - - - - Period size (Frames per period): - Periodengröße (Frames pro Periode): - - - - - 16 - 16 - - - - Project directory - Projektverzeichnis - - - - Projects: - Projekte: - - - - ... - ... - - - - Main Window - Hauptfenster - - - - Try to use Jack Freewheel - Versuche, Jack-Freewheel zu nutzen - - - - Speeds bounce operations - Beschleunigt Abmisch-Operationen - - - - Use Jack Freewheel mode if possible. -This dramatically speeds bounce operations. - Benutzt Jack's Freewheel-Modus, wenn möglich. -Das beschleunigt Abmisch-Operationen dramatisch. - - - - VST in-place - VST in-place - - - - Enable VST in-place processing (restart required) - Aktiviere VST-in-place-verarbeitung (Neustart erforderlich) - - - - Enable VST in-place processing. Turn this off if - VST Ladspa effect rack plugins do not work or - feedback loudly, even if they are supposed to - be in-place capable. Setting requires a restart. - Aktiviere VST-in-place-verarbeitung: Schalten Sie das -aus, wenn VST Ladspa Effekt-Rack-Plugins nicht funktionieren -oder laut rückspeisten, selbst wenn sie in-place-fähig -sein sollten. Einstellung erfordert Neustart. - - - - Minimum control period - Minimale Kontroll-Periode - - - - Minimum audio controller process period (samples). - - Minimale Audiocontroller-Periode (Samples). - - - - Minimum audio controller process period (samples). -Adjusts responsiveness of audio controls and - controller graphs. Set a low value for fast, smooth - control. If it causes performance problems, set a - higher value. - Minimale Audiocontroller-Periode (Samples). -Beeinflusst die Reaktionszeit von Audiocontrols -und Controller-Graphen. Setzen Sie einen niedrigen -Wert für schnelle, weiche Kontrolle. Wenn das -Geschwindigkeitsprobleme verursacht, benutzen Sie -einen höheren Wert. - - - - 1 - 1 - - - - 2 - 2 - - - - 4 - 4 - - - - 8 - 8 - - - - - 32 - 32 - - - - - 64 - 64 - - - - - 128 - 128 - - - - - 256 - 256 - - - - - 512 - 512 - - - - Sample rate - Sampling-Rate - - - - Shorter periods give better midi playback resolution. - Kürzere Perioden führen zu einer besseren Midi-Abspiel-Auflösung. - - - - 8192 - 8192 - - - - 16384 - 16384 - - - - 32768 - 32768 - - - - Midi Resolution -(Ticks/Quarternote) - Midi Auflösung -(Ticks/Viertelnote) - - - Instruments Directory - Instrumentenverzeichnis - - - - GUI Behaviour - GUI-Verhalten - - - - Use old-style stop shortcut: - Benutze altes Stopp-Kürzel: - - - - Move single armed track with selection - Bewege "für Aufnahme scharfschalten" mit Auswahl - - - - On Launch - Beim Start - - - - Behavior - Verhalten - - - - LMaster - - new tempo - Neues Tempo - - - new signature - Neues Taktmaß - - - Meter - Taktposition - - - Time - Zeitposition - - - Type - Typ - - - Value - Wert - - - MusE: Mastertrack - MusE: Masterspur - - - Undo/Redo tools - Rückgängig/Wiederho - - - Tempo - Tempo - - - Timesig - Taktmaß - - - panic - Panik - - - - LegatoBase - - - MusE: Legato - MusE: Legato - - - - Range - Bereich - - - - All Events - Alle Ereignisse - - - - Selected Events - Ausgewählte Ereignisse - - - - Looped Events - Ereignisse innerhalb Schleife - - - - Selected Looped - Ausgewählt und innerhalb der Schleife - - - - Settings - Einstellungen - - - - ticks - Ticks - - - - Minimum Length - Minimallänge - - - - Allow shortening notes - Erlaube, Noten zu verkürzen - - - - OK - Bestätigen - - - - Cancel - Abbrechen - - - - ListEdit - - &Edit - B&earbeiten - - - Cut - Ausschneiden - - - Copy - Kopieren - - - Paste - Einfügen - - - List Tools - Werkzeuge "Liste" - - - Insert Tools - Werkzeuge "Einfügen" - - - Delete Events - Ereignisse löschen - - - Insert Note - Note einfügen - - - insert Note - Note einfügen - - - Insert SysEx - SysEx einfügen - - - insert SysEx - SysEx einfügen - - - Insert Ctrl - Ctrl einfügen - - - insert Ctrl - ctrl einfügen - - - Insert Meta - Meta einfügen - - - insert Meta - Meta einfügen - - - Insert Channel Aftertouch - Channel Aftertouch einfügen - - - insert Channel Aftertouch - Channel Aftertouch einfügen - - - Insert Key Aftertouch - Key Aftertouch einfügen - - - insert Poly Aftertouch - Poly Aftertouch einfügen - - - Undo/Redo tools - Rückgängig/Wiederho - - - panic - Panik - - - Tick - Tick - - - Bar - Takt - - - Typ - Typ - - - Ch - K - - - Val A - Wert A - - - Val B - Wert B - - - Val C - Wert C - - - Len - Länge - - - Comment - Kommentar - - - Type - Typ - - - - MITTransposeBase - - - MusE: Midi Input Plugin: Transpose - MusE: Midi Eingang PlugIn: Transponieren - - - - On - An - - - - TriggerKey - Auslösertaste - - - - Transpose: - Transponieren: - - - - +0 - +0 - - - - MPConfig - - none - kein - - - Port - Anschluss - - - GUI - GUI - - - Instrument - Instrument - - - Device Name - Gerätename - - - State - Status - - - unknown - unbekannt - - - I - E - - - O - A - - - Port Number - Anschlussnummer - - - Instrument connected to port - Instrument mit Anschluss verbunden - - - State: result of opening the device - Status: Ergebnis des Geräteanschlusses - - - <none> - <kein> - - - - MRConfigBase - - - MusE: Midi Input Plugin: Remote Control - MusE: Midi Eingang PlugIn: Fernbedienung - - - - Activate - Einschalten - - - - On - An - - - - Actions - Funktionen - - - - Stop - Stopp - - - - Record - Aufnahme - - - - Goto Left Mark - Zum linken Marker bewegen - - - - Play - Wiedergabe - - - - Insert rest (step rec) - Pause einfügen (StepRec) - - - - MTScale - - bar scale - Taktposition - - - - MarkerView - - Undo/Redo tools - Rückgängig/Wiederho - - - panic - Panik - - - Bar:Beat:Tick - Takt:Schlag:Tick - - - Hr:Mn:Sc:Fr:Sf - Std:Min:Sek:R:SR - - - Lock - Sperre - - - Text - Text - - - Marker Properties - Marker Eigenschaften - - - MusE: Marker - MusE: Marker - - - add marker - Marker hinzufügen - - - Add Marker - Marker hinzufügen - - - delete marker - Marker löschen - - - Delete Marker - Marker löschen - - - &File - &Datei - - - &Edit - &Bearbeiten - - - edit tools - Werkzeuge "Bearbeitung" - - - - MasterEdit - - Cursor - Positionsmarker - - - Snap - Magnet - - - time at cursor position - Zeit an aktuellem Positionsmarker - - - Undo/Redo tools - Rückgängig/Wiederho - - - panic - Panik - - - tempo at cursor position - Tempo an aktuellem Positionsmarker - - - CurPos - AktPos - - - tempo at current position - Tempo an aktuellem Positionsmarker - - - time signature at current position - Taktmaß an aktuellem Positionsmarker - - - MusE: Mastertrack - MusE: Masterspur - - - edit tools - Werkzeuge "Bearbeitung" - - - EnableMaster - Master aktivieren - - - Info - Info - - - Off - Aus - - - - Enable - Einschalten - - - Enable usage of master track - Verwendung der Masterspur einschalten - - - - MdiSettingsBase - - - Form - - - - - GroupBox - - - - - MDI subwin - MDI-Unterfenster - - - - Shares menu when subwin - Teilt das Menü, wenn Unterfenster - - - - Shares menu when free - Teilt das Menü, wenn freies Fenster - - - - MetronomeConfigBase - - - MusE: Metronome Config - MusE: Metronom Konfiguration - - - - Metronome - Metronom - - - - Audio Beep - Interner PC Lautsprecher - - - - MIDI Click - MIDI Klick - - - - Midi Channel - Midi Kanal - - - - Measure Note - Midi Note Taktbeginn - - - - Measure Velocity - Midi Note Taktschlag - - - - Beat Velocity - Taktbeginn Anschlagstärke - - - - Beat Note - Taktschlag Anschlagstärke - - - - Midi Port - Midi Anschluss - - - - Precount - Einzählen - - - - enable - einschalten - - - - Bars - Takte - - - - From Mastertrack - Von der Masterspur - - - - / - / - - - - Signature - Taktmaß - - - - Prerecord - Aufnahme ab Einzählen - - - - Preroll - Vorlauf - - - - &Apply - &Anwenden - - - - &OK - &Bestätigen - - - - &Cancel - Abb&rechen - - - - Choose outputs... - Wähle Ausgänge... - - - - 50 - 50 - - - - % Audio volume - % Audiolautstärke - - - - Hint: Enable metronome in Transportpanel - Hinweis: Aktivieren Sie das Metronom im Transportpanel - - - - Alt+A - Alt+A - - - - Alt+O - Alt+O - - - - Alt+C - Alt+C - - - - MidiController - - Velocity - Velocity - - - - MidiControllerEditDialogBase - - Type - Typ - - - Properties - Eigenschaften - - - Type - Typ - - - &New - Neu - - - &Delete - &Löschen - - - &OK - &Bestätigen - - - &Cancel - Abb&rechen - - - MusE: Define Midi Controller - MusE: Midi Kontroller definieren - - - &Add - &Hinzufügen - - - Alt+A - Alt+A - - - create new entry - Neuen Eintrag erzeugen - - - pressing the New button you create a new entry -in the MusE list of defined controllers - Durch Klicken der Schaltfläche "Neu" einen neuen Eintrag erzeugen -in der MusE Liste "Definierte Kontroller" - - - delete selected entry - Ausgewählten Eintrag löschen - - - Predefined Controller: - Vordefinierte Kontroller: - - - Name - Name - - - H-Ctrl - H-Ctrl - - - L-Ctrl - L-Ctrl - - - Min Val - Min Wert - - - Max Val - Max Wert - - - list of defined controllers - Liste definierter Kontroller - - - This is the MusE list of defined controllers. - Dies ist die MusE Liste definierter Kontroller. - - - Managed Controller for Port - Verwendeter Kontroller für Anschluss - - - Channel - Kanal - - - This is a list of commonly used midi controllers. -Note that in MusE pitch and program changes are -handled like normal controllers. - Dies ist eine Liste oft standardisierter Midi Kontroller. -Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller behandelt werden. - - - Name - Name - - - Min Value - Min Wert - - - Max Value - Max Wert - - - Control7 - Kontroller7 - - - Control14 - Kontroller14 - - - RPN - RPN - - - NRPN - NRPN - - - Pitch - Tonhöhe - - - Program - Programm - - - Midi Controller Number High Byte - Midi Kontrollernummer höchstwertiges Byte - - - Midi Controller Number Low Byte - Midi Kontrollernummer niederwertigstes Byte - - - Range - Bereich - - - - MidiFilterConfigBase - - - MusE: Midi Input Filter - MusE: Midi Eingangsfilter - - - - Record Filter - Aufnahme Filter - - - - - Note On - Note an - - - - - Poly Pressure - Poly Anschlagsdruck - - - - - Controller - Kontroller - - - - - Program Change - Programmwechsel - - - - - After Touch - Aftertouch - - - - - Pitch Bend - Pitch bend - - - - - Sysex - Sysex - - - - Thru Filter - Thru Filter - - - - Controller Filter - Kontroller Filter - - - - Channel Filter - Kanal Filter - - - - 14 - 14 - - - - 10 - 10 - - - - 6 - 6 - - - - 12 - 12 - - - - 4 - 4 - - - - 2 - 2 - - - - 9 - 9 - - - - 8 - 8 - - - - 3 - 3 - - - - 13 - 13 - - - - 15 - 15 - - - - 16 - 16 - - - - 7 - 7 - - - - 11 - 11 - - - - 5 - 5 - - - - 1 - 1 - - - - MidiInputTransformDialog - - New - Neu - - - - MidiInputTransformDialogBase - - - MusE: Midi Input Transformator - MusE: Midi Eingang Transformator - - - - Filter - Filter - - - - All - alle - - - - - - - - Equal - gleich - - - - - - - - Unequal - ungleich - - - - Note - Note - - - - - Poly Pressure - Poly Anschlagsdruck - - - - - Control Change - Kontrollerwechsel - - - - - Aftertouch - Aftertouch - - - - - Pitch Bend - Pitch bend - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - Value 2 - Wert 2 - - - - - - - - Value 1 - Wert 1 - - - - - Event Type - Ereignistyp - - - - - - - Ignore - ignorieren - - - - - - - Higher - größer - - - - - - - Lower - kleiner - - - - - - - Inside - innerhalb - - - - - - - Outside - außerhalb - - - - - Channel - Kanal - - - - - Port - Anschluss - - - - Processing - Bearbeitung - - - - - - - - Keep - behalten - - - - - - - - Fix - fest - - - - - - - Plus - plus - - - - - - - Minus - minus - - - - - - - Multiply - multiplizieren - - - - - - - Divide - dividieren - - - - - - - Invert - invertieren - - - - ScaleMap - Notenbelegung - - - - Flip - umdrehen - - - - - - - Dyn - Dyn - - - - - - - Random - zufällig - - - - Modules - Module - - - - 1 - 1 - - - - 2 - 2 - - - - 3 - 3 - - - - 4 - 4 - - - - enable modul 1 - Modul 1 einschalten - - - - enable modul 2 - Modul 2 einschalten - - - - enable modul 3 - Modul 3 einschalten - - - - enable modul 4 - Modul 4 einschalten - - - - Preset - Vorlage - - - - Name: - Name: - - - - Comment: - Kommentar: - - - - Function - Funktion - - - - &New - &Neu - - - - create new preset - Neue Vorlage erzeugen - - - - &Delete - &Löschen - - - - delete preset - Vorlage löschen - - - - &Dismiss - &Verwerfen - - - - PresetList - Liste Vorlagen - - - - MidiPortRouteBase - - MusE: Midi Port Routing - MusE: Midi Anschluss Signalfluss - - - Port 2 - Anschluss 2 - - - Output - Ausgang - - - Input - Eingang - - - - MidiStrip - - VariationSend - VariationSend - - - Var - Var - - - ReverbSend - ReverbSend - - - Rev - Rev - - - ChorusSend - ChorusSend - - - Cho - Cho - - - off - aus - - - dB - dB - - - Pan/Balance - Pan/Balance - - - Pan - Pan - - - record - Aufnahme - - - mute - still - - - pre fader listening - Vor Regler abhören - - - Route - Signalfluss - - - set routing - Signalfluss einstellen - - - Off - aus - - - Read - lesen - - - Touch - berühren - - - Write - schreiben - - - automation type - Automatisationstyp - - - iR - iR - - - oR - oR - - - output routing - Ausgangs-Signalfluss - - - - MidiSyncConfig - - Port Number - Anschlussnummer - - - Name of the midi device associated with this port number - Name des Midi Gerätes an dieser Anschlussnummer - - - Device Name - Gerätename - - - m - min - - - MusE - MusE - - - &Apply - &Anwenden - - - &No - &Nein - - - &Abort - &Abbrechen - - - <none> - <kein> - - - - MidiSyncConfigBase - - - MusE: Midi Sync - MusE: Midi Sync - - - - Apply - Anwenden - - - - Ok - Bestätigen - - - - Cancel - Abbrechen - - - - hour - Stunde - - - - h - Std - - - - minute - Minute - - - - m - min - - - - second - Sekunde - - - - s - Sek - - - - frame - Rahmen - - - - f - R - - - - subframe - Subrahmen - - - - 24 - 24 - - - - 25 - 25 - - - - 30D - 30D - - - - 30N - 30N - - - Id: - Id: - - - device id - Geräte id - - - Port: - Anschluss: - - - midi port - Midi Anschluss - - - Sync Source - Sync Quelle - - - accept MTC - MTC erlauben - - - accept Midi Clock - Midi Clock erlauben - - - accept MMC - MMC erlauben - - - Sync Gen - Sync Gen - - - Midi Time Code (MTC) - Midi Time Code (MTC) - - - Midi Clock - Midi Clock - - - Midi Machine Control (MMC) - Midi Machine Control (MMC) - - - Sync Mode - Sync Modus - - - Master - Master - - - Slave - Sklave - - - all - alle - - - - MTC - MTC - - - - Type: - Typ: - - - - Offset: - Zeitversatz: - - - - Sync receiving and sending - Synchronisiere Empfangen und Senden - - - - Send and receive Jack transport - Sende und empfange Jack Transport - - - - Send and receive Jack transport information, - including stop, start and position. - Sende und empfange Jack Transport Information, einschließlich Stopp, Start und Position. - - - - Use Jack transport - Benutze Jack-Transport - - - - Make MusE the Jack transport Timebase Master - Mache MusE zum Jack-Transport Timebase-Master - - - - Make MusE the Jack transport Timebase Master. -Allows Jack to show time as - MusE Bars, Beats, and Ticks. -MusE will try to become master, but other - Jack clients can also take over later. -You can always click here again for Master. - Mache MusE zum Jack-Transport Timebase-Master -Erlaubt es Jack, die Zeit als MusE-Takte, -Schäge und Ticks zu zeigen. -MusE wird versuchen, Master zu werden, aber -andere Jack-Clients können später übernehmen. -Sie können immer hier klicken, um Master wieder zu aktivieren. - - - - Jack transport Timebase Master - Jack Transport Timebase Master - - - - Control MusE timing by external midi clock or MTC sync - Steuere MusE-Timing via externe Midi-Clock oder MTC sync - - - - When in slave mode, tempo is - controlled externally. -MusE can sync to midi clock, or MTC quarter frame sync. -Enabled inputs in the list will - be in effect (RMC, RMMC, RMTC). - Wenn im Slave-Modus, ist das Tempo -extern gesteuert. -MusE kann zur Midi-Clock oder MTC quarter frame sync synchronisieren. -Aktivierte Eingänge in der Liste werden -Effekt haben (RMC, RMMC, RMTC). - - - - Slave to external sync - Binde an externe sync - - - - Send start to first clock delay - Pause zwischen dem Senden von "Start" bis zum ersten Clock - - - - Allows 'slow sync' devices time - to synchronize to MusE. This value is the - delay from sending start to sending - the first clock. - Gibt "Slow-Sync"-Geräten Zeit, um sich mit -MusE zu synchronisieren. Dieser Wert ist -die Pause zwischen dem Senden von "Start" -bis zum Senden des ersten Clocks. - - - - ms - ms - - - - Send sync delay - Pause für das Senden von Sync - - - - Note: Sync delay and MTC sync currently not fully implemeted - Hinweis: Sync delay und MTC sync sind momentan nicht komplett implementiert - - - - MidiTrackInfoBase - - - MusE: TrackInfo - MusE: Spurinfo - - - - output channel - Ausgangskanal - - - all midi events are send to this output channel - Alle Midi Ereignisse werden an diesen Ausgangskanal gesandt - - - Track Info - Spurinfo - - - - - % - % - - - Track Name - Spur Name - - - - output port - Ausgangsanschluss - - - iR - iR - - - - - - - - - - off - aus - - - change stereo position - Stereoposition tauschen - - - OCh. - AusgKan. - - - ??? - ??? - - - select instrument patch - Instrumentenpatch auswählen - - - - Transp. - Transp. - - - Volume - Volume - - - - Channel Info - Kanalinfo - - - - Rec: - Rec: - - - - Prog - Prog - - - - Vol - Vol - - - - Pan - Pan - - - - Delay - Delay - - - - H-Bank - H-Bank - - - - Compr. - Kompr. - - - - L-Bank - L-Bank - - - Progr. - Progr. - - - - Velocity - Velocity - - - - Length - Länge - - - input ports - Eingangsanschlüsse - - - IChan. - EingKan. - - - input channels - Eingangsknäle - - - Events from all configured channels are -recorded to this track. -You can specify more than one channel for -recording: - 1 2 3 record from channel 1 2 and 3 - 1-3 same - 1-3 5 record from channel 1 2 3 and 5 - Ereignisse von allen gewählten Kanälen -werden auf dieser Spur aufgenommen. -Zur Aufnahme können mehrere Kanäle gewählt werden: - 1 2 3 Aufnahme von den Kanälen 1 2 und 3 - 1-3 Aufnahme von den Kanälen 1 2 und 3 - 1-3 5 Aufnahme von den Kanälen 1 2 3 und 5 - - - - record: - aufnehmen: - - - Rec - Aufnahme - - - add settings to song - Einstellungen zum Lied hinzufügen - - - Bank Select LSB - Bank Wahl LSB - - - Bank Select MSB - Bank Wahl MSB - - - - all midi events are sent to this output channel - alle MIDI-Events werden zu diesem Ausgangskanal gesendet - - - - Out ch - Aus.Kanal - - - - input routing - Eingangs-Signalfluss - - - - output routing - Ausgangs-Signalfluss - - - oR - oR - - - - input detect - Eingangserkennung - - - - Input detect indicator. Detects all note on-off, controller, aftertouch, - program change, and pitchbend (but not sysex or realtime) events - on the selected channels, on the selected midi ports. - Eingangserkennungs-Anzeige. Erkennt alle Note an/aus, Controller, Aftertouch, - Programmänderung und Pitchbend (aber nicht Sysex oder Echtzeit)- - Ereignisse auf den ausgewählten Kanälen auf den gewählten MIDI-Ports. - - - - W - W - - - - Midi thru - MIDI thru - - - - Pass input events through ('thru') to output. - Schleife Eingangsevents durch zum Ausgang. - - - - Select instrument patch - Instrumentenpatch auswählen - - - - <unknown> - <unbekannt> - - - - Add all settings to song - Alle Einstellungen zum Lied hinzufügen - - - - All - alle - - - - Bank Select MSB. Double-click on/off. - LSB für Bankauswahl. Doppelklick für an/aus. - - - - Bank Select LSB. Double-click on/off. - MSG für Bankauswahl. Doppelklick für an/aus. - - - - Program. Double-click on/off. - Programm. Doppelklick für an/aus. - - - - Add bank + prog settings to song - Füge Bank und Prog Einstellungen zum Lied hinzu - - - - Volume. Double-click on/off. - Volume. Doppelklick für an/aus. - - - - Add vol setting to song - Füge Lautstärke Einstellungen zum Lied hinzu - - - - - Change stereo position. Double-click on/off. - Ändere Stereo-Position. Doppelklick für an/aus. - - - - Add pan setting to song - Füge Pan-Einstellung zum Song hinzu - - - - MidiTransformDialogBase - - - MusE: Midi Transformator - MusE: Midi Transformator - - - - &New - &Neu - - - - &Delete - &Löschen - - - - &Apply - &Anwenden - - - - &OK - &Bestätigen - - - - &Cancel - Abb&rechen - - - - PresetList - Vorlagenliste - - - - Processing - Bearbeitung - - - - - Event Type - Ereignistyp - - - - - - - - Keep - behalten - - - - - - - Fix - fest - - - - - Note - Note - - - - - Poly Pressure - Poly Andruckstärke - - - - - Control Change - Kontrollerwechsel - - - - - Aftertouch - Aftertouch - - - - - Pitch Bend - Pitch bend - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - - Plus - plus - - - - - - - Minus - minus - - - - - - - Multiply - multiplizieren - - - - - - - Divide - dividieren - - - - - - Value 2 - Wert 2 - - - - - Invert - umkehren - - - - ScaleMap - Notenbelegung - - - - Flip - umdrehen - - - - - Dyn - Dyn - - - - - Random - zufällig - - - - - - Value 1 - Wert 1 - - - - - Length - Länge - - - - Position - Zeitposition - - - - Filter - Filter - - - - All - alle - - - - - - - - Equal - gleich - - - - - - - - Unequal - ungleich - - - - - - - Ignore - ignorieren - - - - - - - Higher - größer - - - - - - - Lower - kleiner - - - - - - - Inside - innerhalb - - - - - - - Outside - außerhalb - - - - Bar Range - Taktbereich - - - - Preset - Vorlage - - - - Name: - Name: - - - - Comment: - Kommentar: - - - - Range - Bereich - - - - process all events - Alle Ereignisse verarbeiten - - - - selected tracks - Ausgewählte Spuren - - - - inside loop - Innerhalb der Schleife - - - - Function - Funktion - - - - Select - Auswählen - - - - Quantize - Quantisieren - - - - Delete - Löschen - - - - Transform - Transformieren - - - - Insert - Einfügen - - - - Copy - Kopieren - - - - Extract - Entnehmen - - - - Quantize Value - Wert quantisieren - - - - MidiTransformerDialog - - New - Neu - - - - MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Wave Dateien (*.wav);;Alle Dateien (*) - - - - MixdownFileDialogBase - - - MusE: Set Mixdown Wavefile - MusE: Wave Datei Abmischung einstellen - - - - &OK - &Bestätigen - - - - &Cancel - Abb&rechen - - - - File Path - Dateipfad - - - - Channel - Kanal - - - - Stereo - Stereo - - - - Mono - Mono - - - - 5.1 - 5.1 - - - - wav,16 Bit - wav, 16 Bit - - - - wav, 24 Bit - wav, 24 Bit - - - - wav, 32 Bit (float) - wav, 32 Bit (float) - - - - Format - Format - - - - Mixer - - Port - Port - - - - MoveBase - - - MusE: Move Notes - MusE: Verschiebe Noten - - - - Range - Bereich - - - - All Events - Alle Ereignisse - - - - Selected Events - Ausgewählte Ereignisse - - - - Looped Events - Ereignisse innerhalb Schleife - - - - Selected Looped - Ausgewählt und innerhalb der Schleife - - - - Value - Wert - - - - Move by - Bewege um - - - - ticks - Ticks - - - - OK - Bestätigen - - - - Cancel - Abbrechen - - - - MusE - - &File - Lied&datei - - - Open &Recent - &Letztes Lied öffnen - - - Save &As - Lied &sichern als - - - Config &Printer - Druckerkonfiguration - - - Import Midifile - Mididatei importieren - - - Export Midifile - Mididatei exportieren - - - Import Wave File - Wavedatei importieren - - - &Quit - &Beenden - - - &Edit - B&earbeiten - - - C&ut - &Ausschneiden - - - &Copy - &Kopieren - - - &Paste - Ei&nfügen - - - Delete Track - Spur löschen - - - Add Track - Spur hinzufügen - - - Select &All - Alles a&uswählen - - - &Deselect All - Alles ab&wählen - - - Invert &Selection - Auswa&hl umkehren - - - &Inside Loop - Bereich &innerhalb der Schleife - - - &Outside Loop - Bereich außerhalb der Schlei&fe - - - All &Parts on Track - Alle &Parts der Spur - - - Select - Auswählen - - - Drums - Schlagzeug Editor - - - List - Listen Editor - - - Graphic - Graphischer Editor - - - Mastertrack - Masterspur - - - Midi &Transform - Midi &transformieren - - - Modify Gate Time - Gate Zeit ändern - - - Modify Velocity - Velocity ändern - - - Crescendo - Crescendo - - - Transpose - Transponieren - - - Thin Out - Daten ausdünnen - - - Erase Event - Ereignis löschen - - - Note Shift - Notenhöhe ändern - - - Copy Measure - Takt kopieren - - - Erase Measure - Takt löschen - - - Delete Measure - Takt entfernen - - - Create Measure - Takt erzeugen - - - Mix Track - Spur mischen - - - Midi - Midi - - - &Structure - &Struktur - - - Global Cut - Globaler Schnitt - - - Global Insert - Globales Einfügen - - - Global Split - Globales Aufteilen - - - Copy Range - Bereich kopieren - - - Cut Events - Ereignisse ausschneiden - - - Transport Panel - Transportkonsole - - - Bigtime Window - Zeitanzeige groß - - - Don't Follow Song - Fenster folgt nicht dem Lied - - - Follow Page - Fenster folgt dem Lied seitenweise - - - Follow Continuous - Fenster folgt dem Lied ständig - - - Global Settings - Globale Einstellungen + + + + + + 2° Decay Rate + 2° Decay Rate - - Follow Song - Folge dem Lied + + + + + + 1° Decay Level + 1° Decay Level - - Metronome - Metronom + + + + + + 1° Decay Rate + 1° Decay Rate - Midi Sync - Midi Sync + + + + + Attack Rate + Attack Rate - Appearance Settings - Erscheinungsbild einstellen + + AR1 + AR1 - Midi Input Transform - Midi Eingang transformieren + + Detune, OSCWave, EGShift 1 + Verstimmung, OSCWave, EGShift 1 - Midi Input Filter - Midi Eingangsfilter + + DET1 + DET1 - Midi Remote Control - Midi Fernbedienung + + + + + + + + + + Detune + Verstimmung - Random Rhythm Generator - Zufälliger Rhythmusgenerator + + + + + EG Shift + EG Shift - &Midi - &Midi + + + + + 96dB + 96dB - Mixer - Mischpult + + + + + 48dB + 48dB - Input Plugins - Eingangs-PlugIns + + + + + 24dB + 24dB - Reset Instr. - Rücksetzen Instr. + + + + + 12dB + 12dB - Init Instr. - Initialisieren Instr. + + + + + Wave form + Wellenform - Local Off - Lokal off + + + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + Wellenform 1 = <i>sin(<b>t</b>)</i><br> +Wellenform 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wellenform 3 = <i>wenn <b>t</b>&#060 pi dann sin(<b>t</b>) sonst 0</i><br> +Wellenform 4 = <i>wenn <b>t</b>&#060 pi dann sin(<b>t</b>)*abs(sin(<b>t</b>)) sonst 0</i><br> +Wellenform 5 = <i>wenn <b>t</b>&#060 pi dann sin(2*<b>t</b>) sonst 0</i><br> +Wellenform 6 = <i>wenn <b>t</b>&#060 pi dann sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) sonst 0</i><br> +Wellenform 7 = <i>wenn <b>t</b>&#060 pi dann abs(sin(2*<b>t</b>)) sonst 0</i><br> +Wellenform 8 = <i>wenn <b>t</b>&#060 pi dann sin(2*<b>t</b>)*sin(2*<b>t</b>) sonst 0</i> - &Audio - &Audio + + Sensitivity 1 + Sensitivität 1 - Bounce to Track - Auf Spur abmischen + + KVS1 + KVS1 - Bounce to File - In Datei abmischen + + + + + Amplitude Modulation Enable + Amplitudenmodulation aktivieren - &Help - &Hilfe + + AME1 + AME1 - Browser - Browser + + + + + Keyboard Velocity Sensitivity + Keyboard Anschlagsdynamik-Sensitivität - About&Qt - Über &Qt + + + + + Key Velocity Sensitivity + Noten-Anschlagsdynamik-Sensitivität - MusE: load project - Muse: Projekt laden + + EBS1 + EBS1 - The current Project contains unsaved data -Save Current Project? - Das aktuelle Projekt enthält ungesicherte Daten -Aktuelles Projekt sichern? + + + + + EG Bias Sensitivity + EG Bias Sensitivität - &Save - Lied &sichern + + + + + Eg Bias Sensitivity + EG Bias Sensitivität - &Nosave - Lied &nicht Sichern + + Frequency 1 + Frequenz 1 - &Abort - &Abbrechen + + Coarse 1 + Grob 1 - MusE: Save As - MusE: Lied sichern als + + + + + Coarse Ratio + Grob Verhältnis - Nothing to edit - Es gibt Nichts zu editieren + + Fine 1 + Fein 1 - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Das aktuelle Projekt enthält ungesicherte Daten -Neues Lied laden überschreibt das aktuelle Projekt: -Aktuelles Projekt sichern? + + + + + Fine Ratio + Fein Verhältnis - &Overwrite - &Überschreiben + + Freq 1 + Freq 1 - no help found at: - Hilfe wurde nicht gefunden: + + + + + Fixed Frequency + Feste Frequenz - MusE: Open Help - MusE: Hilfe öffnen + + + + + Toggle Fix Frequency + "Feste Frequenz" umschalten - UndoRedo - Zurück Wiederholen + + + + + FIX + FIX - undo - Rücksetzen + + OUT 1 + OUT1 - Und&o - &Rücksetzen + + + + + Output Volume + Ausgangslautstärke - redo - Wiederholen + + + + + + + Volume + Lautstärke - Re&do - &Wiederholen + + Op &2 + Op &2 - undo last change to song - Letzte Änderung am Lied rücksetzen + + Amplitude Envelope 2 + Amplitudenhüllkurve 2 - redo last undo - Letztes Rücksetzen wiederholen + + D1R2 + D1R2 - Transport - Transport + + D1L2 + D1L2 - loop - Schleife erzeugen + + D2R2 + D2R2 - Loop - Schleife + + RR2 + RR2 - punchin - Aufnahme am linken Marker beginnen + + AR2 + AR2 - Punchin - Aufnahme am linken Marker beginnen + + Frequency 2 + Frequenz 2 - punchout - Aufnahme am rechten Marker beenden + + Coarse 2 + Grob 2 - Punchout - Aufnahme am rechten Marker beenden + + Fine 2 + Fein 2 - start - Start + + Freq 2 + Freq 2 - Start - Start + + Scaling 2 + Skalierung 2 - rewind - Einen Taktschlag rückwärts + + LS2 + LS2 - Rewind - Einen Taktschlag rückwärts + + RS2 + RS2 - forward - Einen Taktschlag vorwärts + + OUT 2 + OUT 2 - Forward - Einen Taktschlag vorwärts + + Detune, OSCWave, EGShift 2 + Verstimmung, OSCWave, EGShift 2 - stop - Stopp + + DET2 + DET2 - Stop - Stopp + + Sensitivity 2 + Sensitivität 2 - play - Wiedergabe + + EBS2 + EBS2 - Play - Wiedergabe + + KVS2 + KVS2 - record - Aufnahme + + AME2 + AME2 - Record - Aufnahme + + Op &3 + Op &3 - panic - Panik + + Amplitude Envelope 3 + Amplitudenhüllkurve 3 - Panic - Panik + + D1R3 + D1R3 - new - Neues Lied + + D1L3 + D1L3 - &New - &Neues Lied + + D2R3 + D2R3 - open - Öffnen + + RR3 + RR3 - &Open - Lied &öffnen + + AR3 + AR3 - save - Lied sichern + + Scaling 3 + Skalierung 3 - pianoroll - Pianorollen Editor + + LS3 + LS3 - Pianoroll - Pianorollen Editor + + RS3 + RS3 - marker - Marker + + OUT 3 + OUT 3 - Marker - Marker + + Frequency 3 + Frequenz 3 - File Buttons - Schaltflächen + + Coarse 3 + Grob 3 - Unknown File Format - Unbekanntes Dateiformat + + Fine 3 + Fein 3 - MusE: Write File failed - MusE: Datei schreiben schlug fehl + + Freq 3 + Freq 3 - MusE: Song: - MusE: Lied: + + Detune, OSCWave, EGShift 3 + Verstimmung, OSCWave, EGShift 3 - MusE: Copy Range - MusE: Bereich kopieren + + DET3 + DET3 - not implemented - Nicht umgesetzt + + Sensitivity 3 + Sensitivität 3 - MusE: Cut Events - MusE: Ereignisse ausschneiden + + EBS3 + EBS3 - MusE: Bounce to Track - MusE: Auf Spur abmischen + + KVS3 + KVS3 - more than one target track selected - Mehr als eine Zielspur ausgewählt + + AME3 + AME3 - wrong target track type, -select wave track as target - Falscher Zielspurtyp, -Wave Spur als Zielspur auswählen + + Op &4 + Op &4 - no target track selected - Keine Zielspur ausgewählt + + amplitude Envelope 4 + Amplitudenhüllkurve 4 - to import a audio file you have first to selecta wave track - Um eine Audiodatei zu importieren zuerst eine Wave Spur auswählen + + AR4 + AR4 - Delete Selected Tracks - Ausgewählte Spuren löschen + + D1R4 + D1R4 - View - Ansicht + + D1L4 + D1L4 - Edit Instrument - Instrument bearbeiten + + D2R4 + D2R4 - Restart Audio - Audio erneut starten + + RR4 + RR4 - Automation - Automatisierung + + Frequency 4 + Frequenz 4 - Mixer Automation - Mischpult Automatisierung + + Coarse 4 + Grob 4 - Take Snapshot - Schnappschuss aufnehmen + + Fine 4 + Fein 4 - Clear Automation Data - Automatisierungsdaten löschen + + Freq 4 + Freq 4 - Settings - Einstellungen + + Scaling 4 + Skalierung 4 - Configure Shortcuts - Tastenkürzel einstellen + + LS4 + LS4 - Midi File Export - Midi Datei exportieren + + RS4 + RS4 - Midi Ports / Soft Synth - Midi Anschlüsse / Software Synthesizer + + OUT 4 + OUT 4 - &Manual - &Handbuch + + Detune, OSCWave, EGShift 4 + Verstimmung, OSCWave, EGShift 4 - &MusE Homepage - &MusE Webseite + + DET4 + DET4 - &Report Bug... - &Fehler melden ... + + Sensitivity 4 + Sensitivität 4 - &About MusE - &Über MusE + + EBS4 + EBS4 - What's &This? - Was ist &das? + + KVS4 + KVS4 - Cannot read template - Vorlage nicht lesbar + + AME4 + AME4 - File open error - Fehler beim Datei öffnen + + &Func + &Func - File read error - Fehler beim Datei lesen + + Delay Pan Depth + - MusE: load template - Muse: Vorlage laden + + Delay Pan LFO Freq + - MusE: Bounce - MusE: Abmischen + + Delay Ch Send Level + - set left/right marker for bounce range - Linken/rechten Marker für Abmischbereich einstellen + + + + Channel Chorus + Kanal-Chorus - MusE: Bounce to File - MusE: In Datei abmischen + + Delay Feedback + - no output track found - Keine Ausgangsspur gefunden + + Delay On/Off, Return Level + - MusE: Export Midi - MusE: Midi exportieren + + + + On + An - MusE: Import Midi - MusE: Midi importieren + + Delay Beat Ratio + - Add midi file to current project? - - Mididatei zu aktuellem Lied hinzufügen? + + Delay BPM + - &Add to Project - Zu Lied hin&zufügen + + Foot Control + Fußschalter - &Replace - Erset&zen + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pitch Bend Range + Pitchbend-Bereich - reading midifile - - Lese Mididatei + + + + + Pitch + Tonhöhe - -failed: - schlug fehl: + + + + + Amplitude + Amplitude - &View - &Zeigen + + Modulation Wheel + Modulations-Rad - New - Neu + + Breath Control + Anblaskontrolle - &Yes - &Ja + + + Pitch Bias + Tonhöhen-Bias - &No - &Nein + + + Envelope Bias + Hüllkurven-Bias - - - MusEApp::MusE - Failed to start audio! - Audio konnte nicht gestartet werden! + + After Touch + Aftertouch - Was not able to start audio, check if jack is running. - - Audio konnte nicht gestartet werden, überprüfen Sie, ob Jack läuft. + + Phony Mode + - Timeout waiting for audio to run. Check if jack is running. - - Timeout beim Warten auf Audio. Überprüfen Sie, ob Jack läuft. + + POLY + POLY - Und&o - &Rückgängig + + MONO + MONO - Re&do - &Wiederholen + + Potamento + Portamento - undo last change to song - Letzte Änderung am Lied rücksetzen + + Portamento Mode + Portamento-Modus - redo last undo - Letztes Rücksetzen wiederholen + + FINGER + FINGER - Loop - Schleife + + FULL + VOLL - Punchin - Aufnahme am linken Marker beginnen + + PT + PT - Punchout - Aufnahme am rechten Marker beenden + + + Portamento Time + Portamento-Dauer - Start - Start + + C&horus + C&horus - Rewind - Einen Taktschlag rückwärts + + Chorus Parameters + Chorus-Parameter - Forward - Einen Taktschlag vorwärts + + + Channel send level + - Stop - Stopp + + + On/Off and Return level + - Play - Wiedergabe + + + Select LADSPA plugin + LADSPA-Plugin auswählen - Record - Aufnahme + + + Change plugin + Plugin ändern - Panic - Panik + + &Reverb + &Reverb - &New - &Neu + + Reverb Parameters + Nachhallparameter - &Open - Lied &öffnen + + &Config + &Einstellen - Open &Recent - &Letztes Lied öffnen + + Font Size + Schriftgröße - &Save - &Speichern + + Quality + Qualität - Save &As - Lied &speichern als + + High + Hoch - Import Midifile - Mididatei importieren + + Middle + Mittel - Export Midifile - Mididatei exportieren + + Low + Gering - Import Part - Part importieren + + Ultra low + Sehr Gering - Import Wave File - Wavedatei importieren + + Filter + Filter - Find unused wave files - Finde ungenutzte Wave-Dateien + + Save Mode (into the song) + Speichermodus (in das Lied) - &Quit - &Beenden + + Save only the used presets + Nur die benutzten Vorlagen speichern - Song Info - Liedinfo + + Save the entire set + Das gesamte Set speichern - Transport Panel - Transportkonsole + + Save the configuration + Die Konfiguration speichern - Bigtime Window - Zeitanzeige groß + + Configuration File + Konfigurationsdatei - Mixer A - Mixer A + + Save... + Speichern... - Mixer B - Mixer B + + Load... + Laden... - Cliplist - Cliplist + + Save as default + Als Standard speichern - Marker View - Marker-Fenster + + Colors + Farben - Arranger View - Arranger-Fenster + + Text + Text - Fullscreen - Vollbild + + Background + Hintergrund - &Plugins - &Plugins + + Edit Text + Text bearbeiten - Edit Instrument - Instrument bearbeiten + + Edit Background + Hintergrund bearbeiten - Input Plugins - Eingangs-PlugIns + + + + Red + Rot - Transpose - Transponieren + + + + Blue + Blau - Midi Input Transform - Midi Eingang transformieren + + + + Green + Grün - Midi Input Filter - Midi Eingangsfilter + + Set Path + Pfad setzen - Midi Remote Control - Midi Fernbedienung + + Image in the background : + Hintergrundbild: - Rhythm Generator - Rhythmusgenerator + + + Browse... + Durchsuchen... - Reset Instr. - Rücksetzen Instr. + + Load the set at the initialization : + Das Set bei der Initialisierung laden: - Init Instr. - Initialisieren Instr. + + Set Brightness, Detune, Attack and Release of the current channel to default + Helligkeit, Verstimmung, Attack und Release des momentanen Kanals auf den Standard setzen - Local Off - Lokal off + + Res. Ctrl + - Bounce to Track - Auf Spur abmischen + + Cut all notes off + Alle Noten abschneiden - Bounce to File - In Datei abmischen + + Panic! + Panik! - Restart Audio - Audio erneut starten + + Number of Voices + Anzahl der Stimmen - Mixer Automation - Mischpult Automatisierung + + Number of voices + Anzahl der Stimmen - Take Snapshot - Schnappschuss aufnehmen + + Enable + Einschalten - Clear Automation Data - Automatisierungsdaten löschen + + Channel + Kanal - Cascade - Staffeln + + Vol + Vol - Tile - Kacheln + + Channel Ctrl + Kanal Ctrl - In rows - In Reihen + + Release + Release - In columns - In Spalten + + Attack + Attack - Global Settings - Globale Einstellungen + + Brightness + Helligkeit - Configure Shortcuts - Tastenkürzel einstellen + + Modulation + Modulation - Follow Song - Folge dem Lied + + Pan + Pan + + + DelOverlapsBase - Don't Follow Song - Folge dem Lied nicht + + MusE: Delete Overlaps + MusE: Überlappungen entfernen - Follow Page - Folge dem Lied seitenweise + + Range + Bereich - Follow Continuous - Folge dem Lied ständig + + All Events + Alle Ereignisse - Metronome - Metronom + + Selected Events + Ausgewählte Ereignisse - Midi Sync - Midi Sync + + Looped Events + Ereignisse innerhalb Schleife - Midi File Import/Export - Midi-Datei Import/Export + + Selected Looped + Ausgewählt und innerhalb der Schleife - Appearance Settings - Erscheinungsbild einstellen + + OK + Bestätigen - Midi Ports / Soft Synth - Midi Anschlüsse / Software Synthesizer + + Cancel + Abbrechen + + + DidYouKnow - &Manual - &Handbuch + + Did you know? + Wussten Sie? - &MusE Homepage - &MusE Webseite + + Don't show on startup + Nicht beim Starten zeigen - &Report Bug... - &Fehler melden ... + + Next tip + Nächster Tipp - &About MusE - &Über MusE + + Close + Schließen + + + DuplicateTracksBase - File Buttons - Datei-Knöpfe + + Duplicate tracks + Spuren duplizieren - Undo/Redo - Undo/Redo + + Number of copies + Anzahl der Kopien - Transport - Transport + + Copy all routes + Alle Routen kopieren - &File - &Datei + + Default routing + Standard-Routen - &View - &Zeigen + + No routes + Keine Routen - &Midi - &Midi + + Copy parts + Parts kopieren - &Audio - &Audio + + Copy standard controllers (vol, pan) + Standard-Controller (Vol,Pan) kopieren - A&utomation - A&utomation + + Copy effects rack plugins + Effekt-Rack-Plugins kopieren - &Windows - F&enster + + Copy plugin controllers + Plugin-Controller kopieren - MusE Se&ttings - MusE Ei&nstellungen + + Ok + Bestätigen - &Help - &Hilfe + + Cancel + Abbrechen + + + EditCtrlBase - Cannot read template - Vorlage nicht lesbar + + MusE: Edit Controller Event + MusE: Kontroller Ereignis bearbeiten - File open error - Fehler beim Datei öffnen + + Time Position + Position - File read error - Fehler beim Datei lesen + + Available Controller: + Verfügbare Kontroller: - Unknown File Format: - Unbekanntes Dateiformat: + + Create New Controller + Neuen Kontroller erstellen - MusE: Song: - MusE: Lied: + + textLabel3 + Beschriftung3 - MusE: load project - Muse: Projekt laden + + Value + Wert - MusE: load template - Muse: Vorlage laden + + Controller + Kontroller - MusE: Write File failed - MusE: Datei schreiben schlug fehl + + H-Bank + H-Bank - The current Project contains unsaved data -Save Current Project? - Das aktuelle Projekt enthält ungesicherte Daten -Aktuelles Projekt sichern? + + L-Bank + L-Bank - &Cancel - &Abbrechen + + Program + Programm - MusE: Save As - MusE: Lied speichern als + + + off + aus - Nothing to edit - Es gibt Nichts zu editieren + + pushButton4 + Schaltfläche4 - MusE: Bounce to Track - MusE: Auf Spur abmischen + + &OK + &Bestätigen - No wave tracks found - Keine Wave-Tracks gefunden + + &Cancel + &Abbrechen + + + EditGainBase - No audio output tracks found - Keine Audio-Tracks gefunden + + MusE: Modify gain + MusE: Gain verändern - MusE: Bounce to File - MusE: In Datei abmischen + + Gain + Gain - MusE: Bounce - MusE: Abmischen + + 200% + 200% - set left/right marker for bounce range - Linken/rechten Marker für Abmischbereich einstellen + + 100% + 100% - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Das aktuelle Projekt enthält ungesicherte Daten -Neues Lied laden überschreibt das aktuelle Projekt: -Aktuelles Projekt sichern? + + 0% + 0% - &Abort - &Abbrechen + + &Reset + Zu&rücksetzen - MusE: Export Midi - MusE: Midi exportieren + + Alt+R + Alt+R - no help found at: - Hilfe wurde nicht gefunden: + + &Apply + &Anwenden - MusE: Open Help - MusE: Hilfe öffnen + + Alt+A + Alt+A - MusE: Import Midi - MusE: Midi importieren + + &Cancel + &Abbrechen - Add midi file to current project? - - Mididatei zu aktuellem Lied hinzufügen? + + Alt+C + Alt+C + + + EditInstrumentBase - &Add to Project - Zu Lied hin&zufügen + + MusE: Instrument Editor + MusE: Instrumenten Editor - &Replace - Erset&zen + + High Bank: + High Bank: - reading midifile - - Lese Mididatei + + Low Bank: + Low Bank: - -failed: - schlug fehl: + + Program: + Programm: - out of - von + + + + &Delete + &Löschen - parts - Parts + + + + Alt+D + Alt+D - part - Part + + Drum + Schlagzeug - &Yes - &Ja + + GM + GM - &No - &Nein + + GS + GS - - - MusEArranger::Arranger - Enable Recording - Aufnahme einschalten + + XG + XG - Solo Indicator - Anzeige "Solo" + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Dies ist eine Liste häufig verwendeter Midi Kontroller. +MusE behandelt allerdings Kontroller wie "pitch" und "program changes" wie normale Kontroller. - Track Type - Spurtyp + + + Properties + Eigenschaften - Time Lock - Sperre "Zeit" + + Control7 + Kontroller7 - Notation clef - Notenschlüssel + + Control14 + Kontroller14 - Enable recording. Click to toggle. - Aufnahme einschalten. Klicken zum umschalten. + + RPN + RPN - Arranger - Arrangierer + + NRPN + NRPN - Snap - Magnet + + Pitch + Tonhöhe - Len - Länge + + Program + Programm - Type - Typ + + + H-Ctrl + H-Ctrl - NO - Kein + + + L-Ctrl + L-Ctrl - GM - GM + + Min + Min - GS - GS + + Max + Max - XG - XG + + Name + Name - midi song type - Midi Lied Typ + + Type + Typ - midi pitch - Midi Tonhöhenänderung + + Hex Entry: + Hex Eintrag: - global midi pitch shift - Globale Midi Tonhöhenänderung + + &File + &Datei - Tempo - Tempo + + Tools + Werkzeuge - midi tempo - Midi Tempo + + New + Neu - N - N + + &New + &Neu - TrackInfo - Spurinfo + + Ctrl+N + Ctrl+N - R - R + + Open + Öffnen - M - M + + &Open... + &Öffnen ... - S - S + + Ctrl+O + Ctrl+O - C - C + + Save + Sichern - Track - Spur + + &Save + &Sichern - Ch - K + + Ctrl+S + Ctrl+S - T - T + + Save As + Sichern Unter - Automation - Automatisierung + + Save &As... + Sichern &Unter... - - - MusEArranger::ArrangerView - MusE: Arranger - MusE: Arrangierer + + Exit + Beenden - Undo/Redo tools - Undo/Redo tools + + E&xit + &Beenden - panic - Panik + + Instrument Name: + Name des Instruments: - C&ut - &Ausschneiden + + Selected instrument name. + Name des ausgewählten Instruments. - &Copy - &Kopieren + + List of defined instruments. + Liste aller definierten Instrumente. - &Copy in range - Im Bereich kopieren + + Pa&tches + Pa&tches - Copy in range - Im Bereich kopieren + + List of groups and patches. + Liste der Gruppen und Patches. - &Paste - &Einfügen + + Group/Patch + Gruppe/Patch - Paste (show dialog) - Einfügen (Dialog zeigen) + + + + Name: + Name: - Paste c&lone - K&lon Einfügen + + + Group or patch name + Gruppen- oder Patchname - Paste clone (show dialog) - Klon einfügen (Dialog zeigen) + + Patch high bank number + Hohe Banknummer für den Patch - &Insert Empty Measure - Leeren &Takt einfügen + + Patch high bank number. --- means don't care. + Hohe Banknummer für den Patch. --- i.d.R. uninteressant. - Delete Selected Tracks - Ausgewählte Spuren löschen + + --- + dont care + --- - Shrink selected parts - Ausgewählte Parts schrumpfen + + Patch low bank number + Niedrige Banknummer für den Patch - Expand selected parts - Ausgewählte Parts erweitern + + Patch low bank number. --- means don't care. + Hohe Banknummer für den Patch. --- i.d.R. uninteressant. - Clean selected parts - Ausgewählte Parts säubern + + --- + --- - Add Track - Spur hinzufügen + + + Patch program number + Programmnummer für den Patch - Select - Auswählen + + Drum patch + Schlagzeug-Patch - Select &All - Alles a&uswählen + + If set, the patch is available only for drum channels. + Wenn aktiviert, ist der Patch nur für Schlagzeugkanäle verfügbar. - &Deselect All - Alles ab&wählen + + GM patch + GM Patch - Invert &Selection - Auswa&hl umkehren + + If set, the patch is available in a 'GM' or 'NO' midi song type. + Wenn aktiviert, ist der Patch nur in einem "GM" oder "NO" Songtypen verfügbar. - &Inside Loop - Bereich &innerhalb der Schleife + + GS patch + GS Patch - &Outside Loop - Bereich außerhalb der Schlei&fe + + If set, the patch is available in a 'GS' or 'NO' midi song type. + Wenn aktiviert, ist der Patch nur in einem "GS" oder "NO" Songtypen verfügbar. - All &Parts on Track - Alle &Parts der Spur + + XG patch + XG Patch - Score - Partitur + + If set, the patch is available in an 'XG' or 'NO' midi song type. + Wenn aktiviert, ist der Patch nur in einem "XG" oder "NO" Songtypen verfügbar. - all parts in one staff - alle Parts in ein System + + Delete group or patch + Lösche Gruppe oder Patch - one staff per part - ein System pro Part + + New patch + Neuer Patch - New score window - Neues Partiturfenster + + New &Patch + Neuer &Patch - Pianoroll - Pianorollen Editor + + Alt+P + Alt+P - Drums - Schlagzeug Editor + + New group + Neue Gruppe - List - Listen Editor + + New &Group + Neue &Gruppe - Wave - Wave-Editor + + Alt+G + Alt+G - Mastertrack - Masterspur + + Contro&ller + Contro&ller - Graphic - Graphischer Editor + + Common: + Gemeinsam: - Midi &Transform - Midi &transformieren + + List of defined controllers + Liste von definierten Controllern - Global Cut - Globaler Schnitt + + List of defined controllers. + Liste von definierten Controllern. - Global Insert - Globales Einfügen + + Min + Min - Global Split - Globales Aufteilen + + Max + Max - &Edit - &Bearbeiten + + Def + Def - &Structure - &Struktur + + Midi controller name + Name des Midi-Controllers - Functions - Funktionen + + Type: + Typ: - &Quantize Notes - Noten &quantisieren + + + Midi controller type + Typ des Midi-Controllers - Change note &length - Noten&länge verändern + + RPN14 + RPN14 - Change note &velocity - &Anschlagsdynamik verändern + + NRPN14 + NRPN14 - Crescendo/Decrescendo - Crescendo/Decrescendo + + + Midi controller number high byte + Midi Controllernummer höchstwertiges Byte - Transpose - Transponieren + + Midi controller number low byte (* means drum controller) + Midi Controllernummer niederwertiges Byte (* bedeutet Schlagzeugcontroller) - Erase Events (Not Parts) - Events (nicht Parts) löschen + + Midi controller number low byte. +If low byte is * then the controller is a + 'drum controller'. For drum tracks and + GS/XG type songs and instruments. +Allows controllers for each instrument in + Muse's drum map. The low byte will be + replaced by the 'ANote' in the drum map. +Examples: The GS and XG instruments' + Drum controllers. + Niederwertiges Byte der MIDI-Controller- +nummer. Wenn es "*" ist, ist der Controller +ein Schlagzeugcontroller. Für Schlagzeug- +spuren und GS/XG-Songs und -Instrumente. +Ermöglicht Controller für jedes Instrument +in der Schlagzeug-Liste. Das niederwertige +Byte wird durch die "ANote" der Liste ersetzt. +Beispiele: Die Schlagzeugcontroller der GS- +und XG-Instrumente. - Move Events (Not Parts) - Events (nicht Parts) verschieben + + * + wild card + * - Set Fixed Note Length - Feste Notenlänge setzen + + Range: + Bereich: - Delete Overlapping Notes - Überlappende Noten entfernen + + Minimum value. If negative, auto-translate. + Minimalwert. Wenn negativ, automatisch umsetzen. - Legato - Legato + + Minimum value. If the minimum value + is negative, the range will automatically + be translated to a positive range. + +Useful for controllers which should be + displayed with zero bias. For example, +'Pan': Minimum: -64 Maximum: 63 +True range: Min: 0 Max: 127 (bias = 64) +'CoarseTuning': Min: -24 Max: 23 +True range: Min: 40 Max: 87 (bias = 64) + +Bias is determined from controller type: +7-bit Controller7 / RPN: Bias = 64 +14-bit Controller14 / RPN14: Bias = 8192 + +Type 'Pitch' is the exception. It is biased + at zero, even with a negative minimum: +'Pitch': Min: -8192 Max: 8191 +True range: Min: -8192 Max: 8191 (bias 0) + Minimalwert. Wenn er negativ ist, wird +der Bereich automatisch in einen +positiven umgesetzt. + +Nützlich für Controller, die ohne Bias +dargestellt werden sollen. Bespielsweise +"Panorama": Minimum -64, Maximum 63. +Wirklicher Bereich: 0 bis 127 (Bias ist also 64) +"Grobes Stimmen": -24 bis 23 +In Wirklichkeit: 40 bis 87, Bias=64. + +Das Bias wird durch den Controller-Typen +bestimmt: +für 7-bittige Controller: Bias=64 +für 14-bittige Controller: Bias= 8192 + +Der Typ "Pitch" ist die Ausnahme: Er hat +kein Bias, obwohl er ein negatives Minimum +besitzt: Er geht von -8192 bis 8191 - Window &Config - Fenster&konfiguration + + + Maximum value + Maximalwert - New - Neu + + Default: + Standard: - - - MusEArranger::PartCanvas - Cannot copy/move/clone to different Track-Type - Kopieren/verschieben/klonen auf anderen Spurtyp nicht möglich + + L-Bank + L-Bank - C&ut - &Ausschneiden + + + + + + off + aus - &Copy - &Kopieren + + Progr. + Progr. - s&elect - &wähle + + ??? + ??? - clones - Klone + + H-Bank + H-Bank - rename - Umbenennen + + Default value. Off: No default. + Standardwert. "Aus": Kein Standardwert. - color - Farbe + + Default (initial) value. Off means no default. + +If a default value is chosen, the value will be sent + to the controller when the controller is added to + the song (in piano roll or event editor). When + the song is re-loaded, the value is sent again. +Otherwise the controller remains at its last value. +Controllers are also automatically added to a + song upon reception of a midi controller event. + +Caution! Watch out for controllers such as + 'Sustain' and 'ResetAllController' with default + values. You should probably turn 'off' their + default (in piano roll or drum edit, and + instrument editor). + Standard- (Initial-)Wert. Aus bedeutet "kein Standard". + +Wenn ein Standardwert ausgewählt ist, wird der Wert +zu dem Controller gesendet, wenn er zum Lied hinzu- +gefügt wird (in der Pianoroll oder dem Eventeditor). +Wenn das Lied neu geladen wird, wird der Wert erneut +gesendet. Ansonsten bleibt der Controller auf seinem +vorherigen Wert. Controller werden auch automatisch +zu einem Lied hinzugefügt, sobald ein solches MIDI- +Controller-Event empfangen wurde. + +Achtung! Passen Sie bei Controllern wie "Sustain" +und "ResetAllController" auf Standardwerte auf. +Sie sollten wahrscheinlich den Standardwert auf +"aus" setzen (in der Pianoroll oder dem Schlagzeug- +editor und dem Instrumenteneditor). - delete - Löschen + + off + dont care + aus - split - Schnitt + + Add common controller + Füge gemeinsamen Controller hinzu - glue - Verbinder + + &Add + &Hinzufügen - de-clone - Entklonen + + Alt+A + Alt+A - save part to disk - Speichere Part auf Festplatte + + Delete controller + Controller löschen - wave edit - Wave Editor + + Create a new controller + Neuen controller erstellen - file info - Dateiinfo + + New &Controller + Neuer &Controller - MusE: save part - MusE: Speichere Part + + Alt+C + Alt+C - Part name - Partname + + Null Param Hi: + Null Param Hi: - Files - Dateien + + Null parameter number High byte + Null Parameternummer höchstwertiges Byte - out of - von + + + If set, these 'null' parameter numbers will + be sent after each RPN/NRPN event. +This prevents subsequent 'data' events + from corrupting the RPN/NRPN controller. +Typically, set to 127/127, or an unused + RPN/NRPN controller number. + Wenn gesetzt, werden diese "null" Parameter- +nummern gesendet nach jedem RPN/NRPN- +Event. +Das verhindert, dass nachfolgende Datenevents +die RPN/NRPN-Controller zerstören. +Normalerweise auf 127/127 oder eine unbenutzte +RPN/NRPN-Controllernummer gesetzt. - parts - Parts + + Lo: + Lo: - part - igitt - Part + + Null parameter number Low byte + Null Parameternummer niederwertiges Byte - could not be pasted. -Likely the selected track is the wrong type. - konnte nicht eingefügt werden. -Wahrscheinlich hat dir ausgewählte Spur den falschen Typ. + + S&ysEx + S&ysEx - Cannot paste: multiple tracks selected - Einfügen nicht möglich: mehrere Spuren ausgewählt + + SysEx List: + SysEx-Liste: - Cannot paste: no track selected - Einfügen nicht möglich: keine Spur ausgewählt + + New SysE&x + Neuer SysE&x - Can only paste to midi/drum track - Einfügen möglich nur in Midi/Drum Spur + + Alt+X + Alt+X - Can only paste to wave track - Einfügen möglich nur in Wave Spur + + &Help + &Hilfe - Can only paste to midi or wave track - Einfügen möglich nur in Midi oder Wave Spur + + + new item + neuer Eintrag - Cannot paste: wrong data type - Einfügen nicht möglich: falscher Datentyp + + + What's this? + Was ist das? - MusEArranger::TList - - <none> - <kein> - - - no clef - kein Notenschlüssel - + EditNoteDialogBase - Treble - Violinschlüssel + + MusE: Enter Note + MusE: Note eingeben - Bass - Bassschlüssel + + OK + Bestätigen - Grand - Beide Schlüssel + + Cancel + Abbrechen - MusE: bad trackname - MusE: ungeeigneter Spurname + + Length: + Länge: - please choose a unique track name - Bitte eindeutigen Spurnamen wählen + + Time Position: + Position: - Update drummap? - Drumbelegung aktualisieren? + + Pitch: + Tonhöhe: - Do you want to use same port for all instruments in the drummap? - Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss verwenden? + + Velocity On: + Velocity An: - &Yes - &Ja + + Velocity Off: + Velocity Aus: + + + EditSysexDialogBase - &No - &Nein + + MusE: Enter SysEx + MusE: SysEx eingeben - show gui - GUI anzeigen + + TimePosition: + Position: - show native gui - Native GUI anzeigen + + Comment: + Kommentar: - Treble clef - Violinschlüssel + + OK + Bestätigen - Bass clef - Bassschlüssel + + Cancel + Abbrechen + + + FLUIDGui - Grand Staff - Beide Schlüssel + + FLUID: open Soundfile + FLUID: Sounddatei öffnen + + + FLUIDGuiBase - Viewable automation - Sichtbare Automatisierung + + Form1 + Form1 - Delete Track - Spur löschen + + Soundfont + Soundfont - Track Comment - Spur Kommentar + + Load + Laden + + + FLUIDSynthGuiBase - Insert Track - Spur einfügen + + FLUID Synth + FLUID Synth - Midi - Midi + + Load + Laden - Drum - Schlagzeug + + Delete + Löschen - Do you want to use same port and channel for all instruments in the drummap? - Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss und Kanal verwenden? + + Dump Info + - - - MusECore - Warning: No output devices! - Warnung: Keine Ausgangsgeräte! + + ID + ID - Open midi config... - Öffne MIDI-Konfig... + + Fontname + Name - Empty ports - Leere Ports + + Chnl + Kanal - - - MusECore::Song - - Jack shutdown! - Jack heruntergefahren! + + Soundfont + Soundfont - - Jack has detected a performance problem which has lead to -MusE being disconnected. -This could happen due to a number of reasons: -- a performance issue with your particular setup. -- a bug in MusE (or possibly in another connected software). -- a random hiccup which might never occur again. -- jack was voluntary stopped by you or someone else -- jack crashed -If there is a persisting problem you are much welcome to discuss it -on the MusE mailinglist. -(there is information about joining the mailinglist on the MusE - homepage which is available through the help menu) - -To proceed check the status of Jack and try to restart it and then . -click on the Restart button. - Jack hat ein Geschwindigkeitsproblem festgestellt, welches -dazu geführt hat, dass MusE von Jack getrennt wurde. -Dies kann aus verschiedenen Gründen passieren: -- ein Geschwindigkeitsproblem in Ihrer Einrichtung -- ein Fehler in MusE oder einer anderen verbundenen Software -- ein zufälliges Verschlucken, das nie wieder passieren könnte -- Jack wurde absichtlich gestoppt -- Jack ist abgestürzt - -Wenn das Problem erneut auftritt, sind Sie sehr willkommen, in der -MusE Mailingliste eine Frage zu stellen. -(Informationen darüber, wie man der Mailingliste beitritt finden sich -auf der MusE-Homepage, die über das Hilfe-Menü erreichbar ist) - -Zum Fortsetzen überprüfen Sie bitten den Zustand von Jack, -versuchen, Jack neu zu starten und klicken dann auf den "Neustart"- -Knopf. + + Drum Chnl + Drumkanal - - - Automation: - Automatisierung: + + + Level + Level - - previous event - vorheriges Ereignis + + Width + Breite - - next event - nächstes Ereignis + + Damping + Dämpfung - - - set event - setze Ereignis + + Room Size + Raumgröße - - - add event - füge Ereignis hinzu + + Reverb + Reverb - - - erase event - lösche Ereignis + + CHANNEL SETUP + KANAL SETUP - - erase range - Lösche Bereich + + Sine + Sinus - - clear automation - Lösche Automatisierung + + Triangle + Dreieck - - Clear all controller events? - Alle Controller-Ereignisse löschen? + + Type + Typ - - &Ok - &Bestätigen + + Number + Anzahl - - &Cancel - &Abbrechen + + Speed + Geschwindigkeit - - MusE - external script failed - MusE - externes Skript fehlgeschlagen + + Depth + Stärke - - MusE was unable to launch the script, error message: -%1 - MusE konnte das Skript nicht starten, Fehlermeldung: -%1 - - - - MusEDialog::PasteDialog - - %n quarter(s) - - %n Viertelnote - %n Viertelnoten - + + Chorus + Chorus - quarter - Viertelnote + + Gain + Verstärkung - quarters - Viertelnoten + + LOADED SOUNDFONTS + GELADENE SOUNDFONTS - MusEDialog::PasteEventsDialog - - %n quarter(s) - - %n Viertelnote - %n Viertelnoten - - + FileDialogButtons - quarter - Viertelnote + + Global + Global - quarters - Viertelnoten + + User + Benutzer - - - MusEGui - Select project directory - Projektverzeichnis auswählen + + Project + Projekt - - - MusEGui::Appearance - - Main application font, and default font for any - controls not defined here. - Hauptschriftart, und Standard für alles, was -hier nicht definiert ist. + + read Midi Port +Configuration + lese Midi-Port- +Konfiguration - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. - Für kleine Bedienelemente, wie Mixer-Strips. -Auch die kleinen Timescale-Nummern, Arranger-Partnamen -und der Effekteinschub. + + write window +states + schreibe +Fenster - Midi track info panel. Transport controls. - MIDI Spurinfo. Transportkontrollen. + + fdialogbuttons + fdialogbuttons + + + FluidSynthGui - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. - Controller-Graph und S/X Knöpfe. Große Zahlen für -Zeit- und Tempo-Skala und Taktsignaturen. + + Choose soundfont + Soundfont auswählen + + + GateTimeBase - Time scale markers. - Zeitskala-Marker. + + Range + Bereich - List editor: meta event edit dialog multi-line edit box. - Listeneditor: Metaevent-Bearbeitungsdialog-Box. + + All Events + Alle Ereignisse - Mixer label font. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - Mixerschriftart. Automatisches Vergrößern bis zur gewählten -Größe. Zeilenumbruch aber nur mit Leerzeichen. + + Selected Events + Ausgewählte Ereignisse - - Mixer strips and effects racks. Midi track info panel. -Midi control panel entry box. - Mixer-Strips und Effekteinschübe. Midispur-Info-Panel. -MIDI-Control-Panel Eintrag Box. + + Looped Events + Ereignisse innerhalb Schleife - - Transport controls. - Transport-Bedienelemente. + + MusE: Modify Note Length + MusE: Notenlänge verändern - - Time scale upper, and time signature. -Controller graph and S/X buttons. - Zeitskala oben und Taktsignatur. -Controllergraph und S/X-Knöpfe. + + Selected Looped + Ausgewählt und innerhalb der Schleife - - Time scale lower, and arranger part name overlay. - Zeitskala unten und Arranger: Partnamen-Overlay. + + Values + Werte - - Tempo scale, and markers. - Temposkala und Marker. + + Rate: + Rate: - - Mixer labels. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - Mixer-Beschriftungen. Schriftgröße wird automatisch -nach oben zur gewählten Größe hin angepasst. -Zeilenumbruch aber nur bei Leerzeichen. + + Offset: + Zeitversatz: - - Maximum mixer label auto-font-sizing font size. - Maximale Mixer-Schriftgröße. + + % + % - - Global opacity (opposite of transparency). - Globale Durchsichtigkeit. + + lenNew = (lenOld * rate) + offset + lenNeu = (lenAlt * rate) + offset - - Standard - Standard + + OK + Bestätigen - - Custom - Benutzerdefiniert + + Cancel + Abbrechen + + + GlobalSettingsDialogBase - - MusE: load image - MusE: Bild laden + + MusE: Global Settings + MusE: Globale Einstellungen - - Select style sheet - Formatvorlage auswählen + + Audio + Audio - - Qt style sheets (*.qss) - QT-Formatvorlagen (*.qss) + + Mixer + Mischpult - - - MusEGui::Arranger - - Enable Recording - Aufnahme einschalten + + + dB + dB - - Mute/Off Indicator - Mute/Off Anzeige + + min. Meter Value + min. Pegelreglerwerte - - Solo Indicator - Solo-Anzeige + + Midi + Midi + + + + Ticks + Ticks - - Track Type - Spurtyp + + + + 1024 + 1024 - - Track Name - Spurname + + + + 2048 + 2048 - - Midi output channel number or audio channels - Midi-Ausgangskanalnummer oder Audiokanäle + + 4096 + 4096 - - Midi output port or synth midi port - Midi-Ausgangsport oder Synth-Midi-Port + + Displayed Resolution +(Ticks/Quarternote) + Angezeigte Auflösung +(Ticks/Viertelnote) - - Time Lock - Sperre "Zeit" + + + 48 + 48 - - Automation parameter selection - Automatisierungsparameterauswahl + + + 96 + 96 - - Notation clef - Notenschlüssel + + + 192 + 192 - - Enable recording. Click to toggle. - Aufnahme einschalten. Klicken zum umschalten. + + + 384 + 384 - - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - Mute-Anzeige. Klicken zum umschalten. -Rechtsklick um Track an/aus umzuschalten. -"Mute" ist für schnelles, wiederholtes Umschalten. -An/aus nicht! + + + 768 + 768 - - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - Solo-Anzeige. Klicken zum umschalten. -Verbundene Spuren sind auch "Phantom-"Solo-geschalten, -angezeigt durch ein dunkles Quadrat. + + + 1536 + 1536 - - Track type. Right-click to change - midi and drum track types. - Spurtyp. Rechtsklick, um Midi und -Schlagzeug Spurtypen umzuschalten. + + + 3072 + 3072 - - Track name. Double-click to edit. -Right-click for more options. - Spurname. Doppelklick zum bearbeiten. -Rechtsklick für mehr Optionen. + + + 6144 + 61144 - - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - Midi-/Schlagzeugspur: Ausgangskanalnummer. -Audiospur: Kanäle. -Mittel/Rechtsklick zum Ändern. + + + 12288 + 12288 - - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - Midi/Schlagzeugspur: Ausgangsport. -Synth-Spur: Zugewiesener MIDI-Port. -Linksklick zum ändern. -Rechtsklick, um die GUI zu zeigen. + + RTC Resolution +(Ticks/Sec) + RTC (RealTimeClock) Auflösung +(Ticks/Sekunde) - - Time lock - Zeitsperre + + /sec + /sek - - Notation clef. Select this tracks notation clef. - Notenschlüssel. Wählt den Schlüssel dieser Spur aus. + + GUI Refresh Rate + GUI Aktualisierungsrate - - Arranger - Arrangierer + + Use project save dialog + Benutze Projekt-Speichern-Dialog - - Cursor - Zeiger + + Some popup menus stay open (else hold Ctrl) + Manche Popup-Menüs bleiben offen (ansonsten Strg halten) - - Off - Aus + + Allows some popup menus to stay open. +Otherwise, hold Ctrl to keep them open. + Erlaubt es, dass einige Popup-Menüs offen bleiben. +Ansonsten können Sie auch Strg drücken, um ein +solches Menü offen zu halten. - - Bar - Takt + + In some areas, the middle mouse button decreases +values, while the right button increases. Users without a +middle mouse button can select this option to make the +left button behave like the middle button in such areas. + In manchen Bereichen vermindert die mittlere Maustaste +Werte, während die rechte erhöht. Benutzer ohne mittlere +Maustaste können diese Option nutzen, damit sich in solchen +Bereichen die linke Maustaste wie die mittlere verhält. - - Snap - Magnet + + Use left mouse button for decreasing values + Benutze linke Maustaste, um Werte zu erniedrigen - - Len - Länge + + Shift + Right click sets left range marker + Shift + Rechtsklick setzt den linken Bereichs-Marker - - - song length - bars - Liedlänge - Takte + + Allow adding hidden tracks in track list menu + Erlaube es, verborgene Spurtypen hinzuzufügen in der Spurliste - - Type - Typ + + Unhide tracks when adding hidden tracks + Verborgene Spurentypen anzeigen, wenn ein solcher Typ hinzugefügt wird - - NO - Kein + + + Smart focus + Intelligenter Fokus - - GM - GM + + After editing, controls will return + focus to their respective canvas + Nach dem Editieren werden GUI-Elemente +den Fokus zur jeweilgen Canvas zurückgeben - - GS - GS + + GUI Style + GUI-Stil - - XG - XG + + MDI-subwindowness and sharing menus + Unterfenster und Menü-Teilen - - - midi song type - Midi Lied Typ + + Presets: + Voreinstellungen: - - Pitch - Tonhöhe + + traditional MusE SDI + traditionelles MusE SDI - midi pitch - Midi Tonhöhenänderung + Cakewalk-like MDI + Cakewalk-ähnliches MDI - - global midi pitch shift - Globale Midi Tonhöhenänderung + + Borland-/Mac-like MDI + Borland-/Mac-ähnliches MDI - - Tempo - Tempo + + &Apply + &Anwenden - - - midi tempo - Midi Tempo + + &Ok + &Bestätigen - N - N + &Cancel + Abb&rechen - - TrackInfo - Spurinfo + + Application + Anwendung - - R - R + + Start Muse + MusE starten - - M - M + + start with last song + Mit letztem Lied starten - - S - S + + start with song + Mit bestimmtem Lied starten - - C - C + + Views + Ansichten - - Track - Spur + + + + + + y-pos + y-pos - - Port - Port + + + + + show + zeigen - - Ch - K + + + + + + x-pos + x-pos - - T - T + + + + + height + Höhe - - Automation - Automatisierung + + + + + width + Breite - - Clef - Schlüssel + + Big Time + Zeitanzeige groß - - - MusEGui::ArrangerView - - MusE: Arranger - MusE: Arrangierer + + Transport + Transport - - Undo/Redo tools - Rückgängig/Wiederholen-Werkzeuge + + + + + + Cur + Jetzt - - panic - Panik + + + + + + set current values + Jetzige Werte übernehmen - - transport - Transport + + show splash screen + Begrüßungsbild anzeigen - - C&ut - &Ausschneiden + + Mixer A + Mixer A - - &Copy - &Kopieren + + Mixer B + Mixer B - - Copy in range - Im Bereich kopieren + + show "Did you know?" dialog + Zeige "Wussten Sie?"-Dialog - - &Paste - &Einfügen + + Start song + Beim Starten geöffnetes Lied - - Paste (show dialog) - Einfügen (Dialog zeigen) + + min. Slider Val + min. Schiebereglerwert - - Paste c&lone - K&lon Einfügen + + Enable denormal protection + Denormal-Schutz aktivieren - - Paste clone (show dialog) - Klon einfügen (Dialog zeigen) + + Enable output limiter + Aktiviere Ausgangs-Limiter - - &Insert Empty Measure - Leeren &Takt einfügen + + External Waveditor + Externer Wave-Editor - - Delete Selected Tracks - Ausgewählte Spuren löschen + + External Waveditor command + Befehl für externen Wave-Editor - - Duplicate Selected Tracks - Ausgewählte Spuren duplizieren + + Note: External editor opened from the internal editor. + Hinweis: der externe Editor, der vom internen aus geöffnet wird. - - Shrink selected parts - Ausgewählte Parts schrumpfen + + Dummy Audio Driver (settings require restart) + Dummy Audiotreiber (erfordert Neustart) - - Expand selected parts - Ausgewählte Parts erweitern + + Hz + Hz - - Clean selected parts - Ausgewählte Parts säubern + + Period size (Frames per period): + Periodengröße (Frames pro Periode): - - Add Track - Spur hinzufügen + + + 16 + 16 - - Select - Auswählen + + Project directory + Projektverzeichnis - - Select &All - Alles a&uswählen + + Projects: + Projekte: - - &Deselect All - Alles ab&wählen + + + + ... + ... - - Invert &Selection - Auswa&hl umkehren + + Main Window + Hauptfenster - - &Inside Loop - Bereich &innerhalb der Schleife + + Choose start song or template + Wählen Sie ein Lied oder eine Vorlage für den Start - - &Outside Loop - Bereich außerhalb der Schlei&fe + + Reset to default + Auf Standardwerte zurücksetzen - - All &Parts on Track - Alle &Parts der Spur + + start with template + mit Vorlage starten - - Score - Partitur + + Start template or song: + Mit Vorlage oder Lied starten: - - all tracks in one staff - alle Spuren in ein System + + Read MIDI Ports configuration from file, + or else automatically configure + Lese MIDI-Port-Konfiguration von der Datei, +oder konfiguriere sonst automatisch - - one staff per track - ein System pro Spur + + Read MIDI Ports configuration + Lese MIDI-Port-Konfiguration - - New score window - Neues Partiturfenster + + Try to use Jack Freewheel + Versuche, Jack-Freewheel zu nutzen - - Pianoroll - Pianorollen Editor + + Speeds bounce operations + Beschleunigt Abmisch-Operationen - - Drums - Schlagzeug Editor + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. + Benutzt Jack's Freewheel-Modus, wenn möglich. +Das beschleunigt Abmisch-Operationen dramatisch. - - - List - Listen Editor + + VST in-place + VST in-place - - Wave - Wave-Editor + + Enable VST in-place processing (restart required) + Aktiviere VST-in-place-verarbeitung (Neustart erforderlich) - - Mastertrack - Masterspur + + Enable VST in-place processing. Turn this off if + VST Ladspa effect rack plugins do not work or + feedback loudly, even if they are supposed to + be in-place capable. Setting requires a restart. + Aktiviere VST-in-place-verarbeitung: Schalten Sie das +aus, wenn VST Ladspa Effekt-Rack-Plugins nicht funktionieren +oder laut rückspeisten, selbst wenn sie in-place-fähig +sein sollten. Einstellung erfordert Neustart. - - Graphic - Graphischer Editor + + Minimum control period + Minimale Kontroll-Periode - - Midi &Transform - Midi &transformieren + + Minimum audio controller process period (samples). + + Minimale Audiocontroller-Periode (Samples). - Global Cut - Globaler Schnitt + Minimum audio controller process period (samples). +Adjusts responsiveness of audio controls and + controller graphs. Set a low value for fast, smooth + control. If it causes performance problems, set a + higher value. + Minimale Audiocontroller-Periode (Samples). +Beeinflusst die Reaktionszeit von Audiocontrols +und Controller-Graphen. Setzen Sie einen niedrigen +Wert für schnelle, weiche Kontrolle. Wenn das +Geschwindigkeitsprobleme verursacht, benutzen Sie +einen höheren Wert. - - Global Insert - Globales Einfügen + + 1 + 1 - - Global Split - Globales Aufteilen + + 2 + 2 - - Global Cut - selected tracks - Globaler Schnitt - markierte Spuren + + 4 + 4 - - Global Insert - selected tracks - Globales Einfügen - markierte Spuren + + 8 + 8 - - Global Split - selected tracks - Globales Aufteilen - markierte Spuren + + + 32 + 32 - - &Edit - &Bearbeiten + + + 64 + 64 - - &Structure - &Struktur + + + 128 + 128 - - Functions - Funktionen + + + 256 + 256 - - &Quantize Notes - Noten &quantisieren + + + 512 + 512 - - Change note &length - Noten&länge verändern + + Sample rate + Sampling-Rate - - Change note &velocity - &Anschlagsdynamik verändern + + Shorter periods give better midi playback resolution. + Kürzere Perioden führen zu einer besseren Midi-Abspiel-Auflösung. - - Crescendo/Decrescendo - Crescendo/Decrescendo + + 8192 + 8192 - - Transpose - Transponieren + + 16384 + 16384 - - Erase Events (Not Parts) - Events (nicht Parts) löschen + + 32768 + 32768 - - Move Events (Not Parts) - Events (nicht Parts) verschieben + + Midi Resolution +(Ticks/Quarternote) + Midi Auflösung +(Ticks/Viertelnote) - - Set Fixed Note Length - Feste Notenlänge setzen + + GUI Behaviour + GUI-Verhalten - - Delete Overlapping Notes - Überlappende Noten entfernen + + Use old-style stop shortcut: + Benutze altes Stopp-Kürzel: - - Legato - Legato + + Move single armed track with selection + Bewege "für Aufnahme scharfschalten" mit Auswahl - - Window &Config - Fenster&konfiguration + + On Launch + Beim Start - - - New - Neu + + Behavior + Verhalten - MusEGui::AudioMixerApp + LegatoBase - - &Create - &Erzeugen + + MusE: Legato + MusE: Legato - - &View - &Zeigen + + Range + Bereich - - Routing - Signalfluss + + All Events + Alle Ereignisse - - Show Midi Tracks - Zeige Midi-Spuren + + Selected Events + Ausgewählte Ereignisse - - Show Drum Tracks - Zeige Schlagzeug-Spuren + + Looped Events + Ereignisse innerhalb Schleife - - Show Wave Tracks - Zeige Wave-Spuren + + Selected Looped + Ausgewählt und innerhalb der Schleife - - Show Inputs - Zeige Eingänge + + Settings + Einstellungen - - Show Outputs - Zeige Ausgänge + + ticks + Ticks - - Show Groups - Zeige Gruppen + + Minimum Length + Minimallänge - - Show Auxs - Zeige Aux + + Allow shortening notes + Erlaube, Noten zu verkürzen - - Show Synthesizers - Zeige Synthesizer + + OK + Bestätigen + + + + Cancel + Abbrechen - MusEGui::AudioStrip + MITTransposeBase - - panorama - Panorama + + MusE: Midi Input Plugin: Transpose + MusE: Midi Eingang PlugIn: Transponieren - - aux send level - Aux Send Pegel + + On + An - - Pan - Pan + + TriggerKey + Auslösertaste - - 1/2 channel - 1/2 Kanäle + + Transpose: + Transponieren: - - Pre - Pre + + +0 + +0 + + + MRConfigBase - - pre fader - post fader - Vor Regler - nach Regler + + MusE: Midi Input Plugin: Remote Control + MusE: Midi Eingang PlugIn: Fernbedienung - - dB - dB + + Activate + Einschalten - - record - Aufnahme + + On + An - - mute - stumm + + Actions + Funktionen - - record downmix - Abmischung aufnehmen + + Stop + Stopp - - - solo mode - Solo Modus + + Record + Aufnahme - - off - Aus + + Goto Left Mark + Zum linken Marker bewegen - iR - iR + + Play + Wiedergabe - input routing - Eingangs-Signalfluss + Insert rest (step rec) + Pause einfügen (StepRec) + + + MdiSettingsBase - oR - oR + + Form + - output routing - Ausgangs-Signalfluss + GroupBox + - - Off - Aus + + MDI subwin + MDI-Unterfenster - - Read - Lesen + + Shares menu when subwin + Teilt das Menü, wenn Unterfenster - - Touch - Berühren + + Shares menu when free + Teilt das Menü, wenn freies Fenster + + + MetronomeConfigBase - - Write - Schreiben + + MusE: Metronome Config + MusE: Metronom Konfiguration - - automation type - Automatisierungstyp + + Metronome + Metronom - - - MusEGui::BigTime - - format display - Formatanzeige + + Audio Beep + Interner PC Lautsprecher - - bar - Takt + + MIDI Click + MIDI Klick - - beat - Schlag + + Midi Channel + Midi Kanal - - - tick - Tick + + Measure Note + Midi Note Taktbeginn - - minute - Minute + + Measure Velocity + Midi Note Taktschlag - - second - Sekunde + + Beat Velocity + Taktbeginn Anschlagstärke - - - frame - Frame + + Beat Note + Taktschlag Anschlagstärke - - subframe - Subframe + + Midi Port + Midi Anschluss - - MusE: Bigtime - MusE: Große Zeitanzeige + + Precount + Einzählen - - - MusEGui::ClipListEdit - - MusE: Clip List Editor - MusE: Clip-Listen-Editor + + enable + einschalten - - Undo/Redo tools - Rückgängig/Wiederholen-Werkzeuge + + Bars + Takte - - panic - Panik + + From Mastertrack + Von der Masterspur - - transport - Transport + + / + / - - Window &Config - Fenster&konfiguration + + Signature + Taktmaß - - - MusEGui::ComboQuant - - - - Off - Aus + + Prerecord + Aufnahme ab Einzählen - - - MusEGui::CtrlCanvas - - Drawing hint: Hold Ctrl to affect only existing events - Hinweis: Halten Sie STRG, um nur existierende Events zu beeinflussen + + Preroll + Vorlauf - - Use shift + pencil or line tool to draw new events - Benutzen Sie SHIFT+Stift- oder Linienwerkzeug, um neue Events zu zeichnen + + &Apply + &Anwenden - - - MusEGui::CtrlPanel - - S - S + + &OK + &Bestätigen - - select controller - Controller wählen + + &Cancel + Abb&rechen - - X - X + + Choose outputs... + Wähle Ausgänge... - - remove panel - Kontrolleransicht schließen + + 50 + 50 - - manual adjust - Manuelles Einstellen + + % Audio volume + % Audiolautstärke - - double click on/off - Doppelklick an/aus + + Hint: Enable metronome in Transportpanel + Hinweis: Aktivieren Sie das Metronom im Transportpanel - - off - aus + + Alt+A + Alt+A - - - Velocity - Anschlagsdynamik + + Alt+O + Alt+O - - add new ... - Neuen Kontroller hinzufügen ... + + Alt+C + Alt+C + + + MidiAudioControlBase - - - Instrument-defined - Instrumenten-definiert + + Midi control + MIDI-Steuerung - - - Add ... - Hinzufügen ... + + Port: + Port: - - Others - Andere + + Channel: + Channel: - - Edit instrument ... - Instrument bearbeiten ... + + Control type: + Controller-Typ: - - Common Controls - Gemeinsame Controller + + Control7 + Controller7 - - - MusEGui::DrumEdit - - - mute instrument - Instrument stummschalten + + Control14 + Controller14 - - - sound name - Klangname + + RPN + RPN - - - volume percent - Lautstärke Prozent + + NRPN + NRPN - - - quantisation - Quantisierung + + RPN14 + RPN14 - - - this input note triggers the sound - Diese Eingangsnote löst den Klang aus + + NRPN14 + NRPN14 - - - note length - Notenlänge + + Pitch + Pitch-Bend - - - this is the note which is played - Das ist die Note, die gespielt wird + + Program + Programm - - output channel (hold ctl to affect all rows) - Ausgangskanal (halten Sie CTRL, um alle Reihen zu beeinflussen) + + Hi: + - - output port (hold ctl to affect all rows) - Ausgangsport (halten Sie CTRL, um alle Reihen zu beeinflussen) + + Lo: + - - - shift + control key: draw velocity level 1 - Shift + Ctrl: Zeichne Dynamiklevel 1 + + Learn + Lernen + + + MidiFilterConfigBase - - - control key: draw velocity level 2 - Ctrl: Zeichne Dynamiklevel 2 + + MusE: Midi Input Filter + MusE: Midi Eingangsfilter - - - shift key: draw velocity level 3 - Shift: Zeichne Dynamiklevel 3 + + Record Filter + Aufnahme Filter - - - draw velocity level 4 - Zeichne Dynamiklevel 4 + + + Note On + Note an - - output channel (ctl: affect all rows) - Ausgangskanal (CTRL, um alle Reihen zu beeinflussen) + + + Poly Pressure + Poly Anschlagsdruck - - output port (ctl: affect all rows) - Ausgangskanal (CTRL, um alle Reihen zu beeinflussen) + + + Controller + Kontroller - - &File - &Datei + + + Program Change + Programmwechsel - - Load Map - Schlagzeugbelegung laden + + + After Touch + Aftertouch - - Save Map - Schlagzeugbelegung Sichern + + + Pitch Bend + Pitch bend - - Reset GM Map - Auf GM-Belegung zurücksetzen + + + Sysex + Sysex - - &Edit - B&earbeiten + + Thru Filter + Thru Filter - - Cut - Ausschneiden + + Controller Filter + Kontroller Filter - - Copy - Kopieren + + Channel Filter + Kanal Filter - - Copy events in range - Kopiere Events im Bereich + + 14 + 14 - - Paste - Einfügen + + 10 + 10 - - Paste (with Dialog) - Einfügen (Dialog zeigen) + + 6 + 6 - - Delete Events - Events entfernen + + 12 + 12 - - &Select - &Auswählen + + 4 + 4 - - Select All - Alles auswählen + + 2 + 2 - - Select None - Nichts auswählen + + 9 + 9 - - Invert - Auswahl umkehren + + 8 + 8 - - Inside Loop - Innerhalb der Schleife + + 3 + 3 - - Outside Loop - Ausserhalb der Schleife + + 13 + 13 - - Previous Part - Vorheriger Part + + 15 + 15 - - Next Part - Nächster Part + + 16 + 16 - - Fu&nctions - Fu&nktionen + + 7 + 7 - - Re-order list - Liste neu sortieren + + 11 + 11 - - Set Fixed Length - Länge festlegen + + 5 + 5 - - Modify Velocity - Velocity ändern + + 1 + 1 + + + MidiInputTransformDialogBase - - Crescendo/Decrescendo - Crescendo/Decrescendo + + MusE: Midi Input Transformator + MusE: Midi Eingang Transformator - - Quantize - Quantisieren + + Filter + Filter - - Erase Event - Events löschen + + All + alle - - Move Notes - Noten verschieben + + + + + + Equal + gleich - - Delete Overlaps - Überlappungen entfernen + + + + + + Unequal + ungleich - - &Plugins - &Plugins + + Note + Note - - Window &Config - Fenster&konfiguration + + + Poly Pressure + Poly Anschlagsdruck - - Drum tools - Schlagzeug-Werkzeuge + + + Control Change + Kontrollerwechsel - - Load Drummap - Schlagzeugbelegung laden + + + Aftertouch + Aftertouch - - Store Drummap - Schlagzeugbelegung sichern + + + Pitch Bend + Pitch bend - - Step Record - Aufnahme taktschlagweise + + + NRPN + NRPN - - Midi Input - Midi Eingang + + + RPN + RPN - - cursor tools - Cursor-Werkzeug + + + + Value 2 + Wert 2 - - Set step size for cursor edit - Schrittweite für Cursor-Modus einstellen + + + + + + Value 1 + Wert 1 - - panic - Panik + + + Event Type + Ereignistyp - - transport - Transport + + + + + Ignore + ignorieren - - ctrl - ctrl + + + + + Higher + größer - - Add Controller View - Controlleransicht hinzufügen + + + + + Lower + kleiner - - M - M + + + + + Inside + innerhalb - - Sound - Klang + + + + + Outside + außerhalb - - Vol - Vol + + + Channel + Kanal - - QNT - QNT + + + Port + Anschluss - - E-Note - E-Note + + Processing + Bearbeitung - - Len - Länge + + + + + + Keep + behalten - - A-Note - A-Note + + + + + + Fix + fest - - Ch - K + + + + + Plus + plus - - Port - Port + + + + + Minus + minus - - LV1 - LV1 + + + + + Multiply + multiplizieren - - LV2 - LV2 + + + + + Divide + dividieren - - LV3 - LV3 + + + + + Invert + invertieren - - LV4 - LV4 + + ScaleMap + Notenbelegung - - Muse: Load Drum Map - MusE: Schlagzeugbelegung laden + + Flip + umdrehen - - MusE: Store Drum Map - MusE: Schlagzeugbelegung speichern + + + + + Dyn + Dyn - - Drum map - Schlagzeugbelegung + + + + + Random + zufällig - - Reset the drum map with GM defaults? - Die Schlagzeugbelegung auf die GM-Standardwerte zurücksetzen? + + Modules + Module - - - MusEGui::EditCAfterDialog - - MusE: Enter Channel Aftertouch - MusE: Channel Aftertouch festlegen + + 1 + 1 - - Time Position - Position + + 2 + 2 - - Pressure - Anschlagsdruck + + 3 + 3 - - - MusEGui::EditEventDialog - - Ok - Bestätigen + + 4 + 4 - - Cancel - Abbrechen + + enable modul 1 + Modul 1 einschalten - - - MusEGui::EditInstrument - - - MusE: Create file failed - MusE: Erzeugen der Datei schlug fehl + + enable modul 2 + Modul 2 einschalten - - MusE: Write File failed - MusE: Datei schreiben schlug fehl + + enable modul 3 + Modul 3 einschalten - MusE: - MusE: + + enable modul 4 + Modul 4 einschalten - The user instrument directory -%1 -does not exist yet. Create it now? - - Das Benutzerinstrumentenverzeichnis -%1 -existiert nicht. Jetzt erzeugen? + + Preset + Vorlage - (You can change the user instruments directory at Settings->Global Settings->Midi) - (Sie können das Benutzer-Instrumentenversuchnis unter Einstellungen -> Globale Einstellungen -> Midi ändern) + + Name: + Name: - Unable to create user instrument directory '%1' - Konnte das Benutzer-Instrumentenverzeichnis "%1" nicht anlegen + + Comment: + Kommentar: - - - MusE: Save Instrument Definition - MusE: Instrumentendefinition speichern + + Function + Funktion - - - Instrument Definition (*.idf) - Instrumentendefinition (*.idf) + + &New + &Neu - - - MusE: Save instrument as - MusE: Instrument speichern unter + + create new preset + Neue Vorlage erzeugen - - Enter a new unique instrument name: - Geben Sie einen neuen einzigartigen Instrumentennamen ein: + + &Delete + &Löschen - - The user instrument '%1' already exists. This will overwrite its .idf instrument file. -Are you sure? - Das Benutzerinstrument "%1" existiert bereits. Dies wird seine .idf Instrumentendatei überschreiben. -Sind Sie sicher? + + delete preset + Vorlage löschen - - MusE: Bad instrument name - MusE: Ungeeigneter Instrumentenname + + &Dismiss + &Verwerfen - - Please choose a unique instrument name. -(The name might be used by a hidden instrument.) - Bitte wählen Sie einen einzigartigen Instrumentennamen. -(Der Name darf von einem versteckten Instrument benutzt werden.) + + PresetList + Liste Vorlagen + + + MidiSyncConfigBase - - MusE: Bad patch name - MusE: Ungeeigneter Patch-Name + + MusE: Midi Sync + MusE: Midi Sync - - Please choose a unique patch name - Bitte eindeutigen Patchnamen wählen + + Apply + Anwenden - - MusE: Bad patchgroup name - MusE: Ungeeigneter Patchgruppen-Name + + Ok + Bestätigen - - Please choose a unique patchgroup name - Bitte eindeutigen Patchgruppennamen wählen + + Cancel + Abbrechen - - MusE: Bad controller name - MusE: Ungeeigneter Controllername + + hour + Stunde - - Please choose a unique controller name - Bitte eindeutigen Controllernamen wählen + + h + Std - - - MusE: Cannot add common controller - MusE: Kann gemeinsamen Controller nicht hinzufügen + + minute + Minute - - A controller named '%1' already exists. - Ein Controller namens "%1" existiert bereits. + + m + min - - A controller number %1 already exists. - Die Controllernummer %1 existiert bereits. + + second + Sekunde - - - MusE - MusE + + s + Sek - - - The current Instrument contains unsaved data -Save Current Instrument? - Das momentane Instrument enthält ungespeicherte Daten. -Instrument speichern? + + frame + Rahmen - - - &Save - &Speichern + + f + R - - - &Nosave - &Nicht speichern + + subframe + Subrahmen - - &Abort - &Abbrechen + + 24 + 24 - - - MusEGui::EditMetaDialog - - MusE: Enter Meta Event - MusE: Meta-Event eingeben + + 25 + 25 - - Time Position - Position + + 30D + 30D - - Meta Type - Meta Typ + + 30N + 30N - - Enter Hex - Hex eingeben + + MTC + MTC - - - MusEGui::EditPAfterDialog - - MusE: Enter Poly Aftertouch - MusE: Poly Aftertouch eingeben + + Type: + Typ: - - Time Position - Position + + Offset: + Zeitversatz: - - Pitch - Tonhöhe + + Sync receiving and sending + Synchronisiere Empfangen und Senden - - Pressure - Anschlagsdruck + + Send and receive Jack transport + Sende und empfange Jack Transport - - - MusEGui::EditToolBar - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - Werkzeug "Zeiger": -Dieses Werkzeug kann: - Parts auswählen - Parts verschieben - Parts kopieren + + Send and receive Jack transport information, + including stop, start and position. + Sende und empfange Jack Transport Information, einschließlich Stopp, Start und Position. - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - Werkzeug "Zeichenstift": -Dieses Werkzeug kann: - Neue Parts erzeugen - Die Länge einzelner Parts ändern + + Use Jack transport + Benutze Jack-Transport - - select Delete Tool: -with the delete tool you can delete parts - Werkzeug "Radierer": - mit diesem Werkzeug werden Parts gelöscht + + Make MusE the Jack transport Timebase Master + Mache MusE zum Jack-Transport Timebase-Master - - select Cut Tool: -with the cut tool you can split a part - Werkzeug "Schnitt": - mit diesem Werkzeug werden Parts geteilt + + Make MusE the Jack transport Timebase Master. +Allows Jack to show time as + MusE Bars, Beats, and Ticks. +MusE will try to become master, but other + Jack clients can also take over later. +You can always click here again for Master. + Mache MusE zum Jack-Transport Timebase-Master +Erlaubt es Jack, die Zeit als MusE-Takte, +Schäge und Ticks zu zeigen. +MusE wird versuchen, Master zu werden, aber +andere Jack-Clients können später übernehmen. +Sie können immer hier klicken, um Master wieder zu aktivieren. - - select Glue Tool: -with the glue tool you can glue two parts - Werkzeug "Verbinder": - mit diesem Werkzeug werden zwei einzelne Parts zu einem verbunden + + Jack transport Timebase Master + Jack Transport Timebase Master - - select Score Tool: - - Werkzeug "Notensatz": + + Control MusE timing by external midi clock or MTC sync + Steuere MusE-Timing via externe Midi-Clock oder MTC sync - - select Quantize Tool: -insert display quantize event - Werkzeug "Quantisierung": - mit diesem Werkzeug werden quantisierte Ereignisse eingefügt + + When in slave mode, tempo is + controlled externally. +MusE can sync to midi clock, or MTC quarter frame sync. +Enabled inputs in the list will + be in effect (RMC, RMMC, RMTC). + Wenn im Slave-Modus, ist das Tempo +extern gesteuert. +MusE kann zur Midi-Clock oder MTC quarter frame sync synchronisieren. +Aktivierte Eingänge in der Liste werden +Effekt haben (RMC, RMMC, RMTC). - - select Drawing Tool - Werkzeug "Zeichenstift" + + Slave to external sync + Binde an externe sync - - select Muting Tool: -click on part to mute/unmute - Werkzeug "Stille": - Klicken Sie auf einen Part um diesen stumm bzw. laut zu schalten + + Send start to first clock delay + Pause zwischen dem Senden von "Start" bis zum ersten Clock - - Manipulate automation - Automatisierung manipulieren + + Allows 'slow sync' devices time + to synchronize to MusE. This value is the + delay from sending start to sending + the first clock. + Gibt "Slow-Sync"-Geräten Zeit, um sich mit +MusE zu synchronisieren. Dieser Wert ist +die Pause zwischen dem Senden von "Start" +bis zum Senden des ersten Clocks. - - Cursor tool - Zeiger-Werkzeug + + ms + ms - - pointer - Zeiger + + Send sync delay + Pause für das Senden von Sync - - pencil - Zeichenstift + + Note: Sync delay and MTC sync currently not fully implemented + Hinweis: Sync delay und MTC sync sind momentan nicht komplett implementiert + + + MidiTrackInfoBase - - eraser - Radierer + + MusE: TrackInfo + MusE: Spurinfo - - cutter - Schnitt + + output channel + Ausgangskanal - - score - Notensatz + + + % + % - - glue - Verbinder + + output port + Ausgangsanschluss - - quantize - Quantisierung + + + + + + + + off + aus - - draw - Zeichenstift + + Transp. + Transp. - - mute parts - Schalte Parts stumm + + Channel Info + Kanalinfo + + + + Rec: + Rec: - - edit automation - Automatisierung bearbeiten + + Prog + Prog - - cursor - Zeiger + + Vol + Vol - - Edit Tools - Werkzeuge bearbeiten + + Pan + Pan - - - MusEGui::EffectRack - - effect rack - Effekteinschub + + Delay + Delay - - new - Neu + + Bank Select MSB. Ctrl-double-click on/off. + Bank MSB. Ctrl+Doppelklick für an/aus. - - change - ändern + + H-Bank + H-Bank - - move up - Nach oben bewegen + + Compr. + Kompr. - - move down - Nach unten bewegen + + Bank Select LSB. Ctrl-double-click on/off. + Bank LSB. Ctrl+Doppelklick für an/aus. - - remove - entfernen + + L-Bank + L-Bank - - bypass - übergehen + + Velocity + Velocity - - show gui - GUI anzeigen + + Length + Länge - - show native gui - Native GUI anzeigen + + all midi events are sent to this output channel + alle MIDI-Events werden zu diesem Ausgangskanal gesendet - - save preset - Preset speichern + + Out ch + Aus.Kanal - - MusE: Save Preset - MusE: Preset speichern + + input routing + Eingangs-Signalfluss - - Replace effect - Effekt ersetzen + + output routing + Ausgangs-Signalfluss - - Do you really want to replace the effect %1? - Möchten Sie wirklich den Effekt %1 ersetzen? + + input detect + Eingangserkennung - - - MusEGui::GlobalSettingsConfig - Selects instruments directory - Wählt Instrumentenverzeichnis aus + + Input detect indicator. Detects all note on-off, controller, aftertouch, + program change, and pitchbend (but not sysex or realtime) events + on the selected channels, on the selected midi ports. + Eingangserkennungs-Anzeige. Erkennt alle Note an/aus, Controller, Aftertouch, + Programmänderung und Pitchbend (aber nicht Sysex oder Echtzeit)- + Ereignisse auf den ausgewählten Kanälen auf den gewählten MIDI-Ports. - - - MusEGui::Header - - Track Info Columns - Spur-Info Spalten + + W + W - - - MusEGui::LMaster - - MusE: Mastertrack - MusE: Masterspur + + Midi thru + MIDI thru - - &Edit - &Bearbeiten + + Pass input events through ('thru') to output. + Schleife Eingangsevents durch zum Ausgang. - - Insert Tempo - Tempo einfügen + + Select instrument patch + Instrumentenpatch auswählen - - Insert Signature - Taktmaß einfügen + + <unknown> + <unbekannt> - - Insert Key - Tonart einfügen + + Add all settings to song + Alle Einstellungen zum Lied hinzufügen - - Edit Positon - Position bearbeiten + + All + alle - - Edit Value - Wert bearbeiten + + Program. Ctrl-double-click on/off. + Programm. Ctrl+Doppelklick für an/aus. - - Delete Event - Event löschen + + Volume. Ctrl-double-click on/off. + Lautstärke. Ctrl+Doppelklick für an/aus. + - Window &Config - Fenster&konfiguration + Change stereo position. Ctrl-double-click on/off. + Stereo-Position. Ctrl+Doppelklick für an/aus. - - Undo/Redo tools - Rückgängig/Wiederholen-Werkzeuge + + Add bank + prog settings to song + Füge Bank und Prog Einstellungen zum Lied hinzu - - Edit tools - + + Add vol setting to song + Füge Lautstärke Einstellungen zum Lied hinzu - - Tempo - Tempo + + Add pan setting to song + Füge Pan-Einstellung zum Song hinzu + + + MidiTransformDialogBase - - Timesig - Taktmaß + + MusE: Midi Transformator + MusE: Midi Transformator - - Key - Tonart + + &New + &Neu - - new tempo - Neues Tempo + + &Delete + &Löschen - - new signature - Neues Taktmaß + + &Apply + &Anwenden - - new key - Neue Tonart + + &OK + &Bestätigen - - panic - Panik + + &Cancel + Abb&rechen - - transport - Transport + + PresetList + Vorlagenliste - - Meter - Taktposition + + Processing + Bearbeitung - - Time - Zeit + + + Event Type + Ereignistyp - - Type - Typ + + + + + + Keep + behalten - - Value - Wert + + + + + Fix + fest - - Reposition of the initial tempo and signature events is not allowed - Das Verschieben der initialen Tempo- und Taktmaß-Events ist nicht erlaubt + + + Note + Note - - MusE: List Editor - MusE: Listeneditor + + + Poly Pressure + Poly Andruckstärke - - Input error, conversion not OK or value out of range - Eingabefehler, Umwandlung nicht in Ordnung oder Wert außerhalb des zulässigen Bereichs + + + Control Change + Kontrollerwechsel - - Reposition of tempo and signature events to start position is not allowed! - Das Verschieben von Tempo- und Taktmaß-Events an die Startposition ist nicht erlaubt! + + + Aftertouch + Aftertouch - - - MusEGui::ListEdit - - insert Note - Note einfügen + + + Pitch Bend + Pitch bend - - insert SysEx - SysEx einfügen + + + NRPN + NRPN - - insert Ctrl - Ctrl einfügen + + + RPN + RPN - - insert Meta - Meta einfügen + + + + + Plus + plus - - insert Channel Aftertouch - Channel Aftertouch einfügen + + + + + Minus + minus - - insert Poly Aftertouch - Poly Aftertouch einfügen + + + + + Multiply + multiplizieren - - &Edit - B&earbeiten + + + + + Divide + dividieren - - Cut - Ausschneiden + + + + Value 2 + Wert 2 - - Copy - Kopieren + + + Invert + umkehren - - Paste - Einfügen + + ScaleMap + Notenbelegung - - Delete Events - Events löschen + + Flip + umdrehen - - Window &Config - Fenster&konfiguration + + + Dyn + Dyn - - Undo/Redo tools - Rückgängig/Wiederholen-Werkzeuge + + + Random + zufällig - - Insert tools - Werkzeuge "Einfügen" + + + + Value 1 + Wert 1 - - panic - Panik + + + Length + Länge - - transport - Transport + + Position + Zeitposition - - Tick - Tick + + Filter + Filter - - Bar - Takt + + All + alle - - Type - Typ + + + + + + Equal + gleich - - Ch - K + + + + + + Unequal + ungleich - - Val A - Wert A + + + + + Ignore + ignorieren - - Val B - Wert B + + + + + Higher + größer - - Val C - Wert C + + + + + Lower + kleiner - - Len - Länge + + + + + Inside + innerhalb - - Comment - Kommentar + + + + + Outside + außerhalb - - - MusEGui::MPConfig - - - Default input connections - Standard-Eingangsverbindungen + + Bar Range + Taktbereich - - - Are you sure you want to apply to all existing midi tracks now? - Sind Sie sicher, dass Sie das auf alle existierenden MIDI-Spuren anwenden wollen? + + Preset + Vorlage - - - Default output connections - Standard-Ausgangsverbindungen + + Name: + Name: - - - Setting will apply to new midi tracks. -Do you want to apply to all existing midi tracks now? - Die Einstellung wird auf neue MIDI-Spuren angewendet werden. -Möchten Sie sie jetzt auf alle existierende MIDI-Spuren anwenden? + + Comment: + Kommentar: + + + + Range + Bereich - - MusE: bad device name - MusE: ungeeigneter Gerätename + + process all events + Alle Ereignisse verarbeiten - - please choose a unique device name - Bitte wählen Sie einen einzigartigen Gerätenamen + + selected tracks + Ausgewählte Spuren - - - in - ein + + inside loop + Innerhalb der Schleife - - - out - aus + + Function + Funktion - - Show first aliases - Zeige erste Aliase + + Select + Auswählen - - Show second aliases - Zeige zweite Aliase + + Quantize + Quantisieren - - - Toggle all - Alle umschalten + + Delete + Löschen - - - Change all tracks now - Alle Spuren jetzt ändern + + Transform + Transformieren - Create - Erstellen + + Insert + Einfügen - device - Gerät + + Copy + Kopieren - - Create Jack device - Jack-Gerät erstellen + + Extract + Entnehmen - - - Port Number - Anschlussnummer + + Quantize Value + Wert quantisieren + + + MixdownFileDialogBase - - Enable gui - GUI aktivieren + + MusE: Set Mixdown Wavefile + MusE: Wave Datei Abmischung einstellen - - Enable reading - Lesen aktivieren + + &OK + &Bestätigen - - Enable writing - Schreiben aktivieren + + &Cancel + Abb&rechen - - Port instrument - Anschluss-Instrument + + File Path + Dateipfad - - Midi device name. Click to edit (Jack) - Midigerätename. Klicken zum bearbeiten (Jack) + + Channel + Kanal - - Connections from Jack Midi outputs - Verbindungen von Jack Midi Ausgängen + + Stereo + Stereo - - Connections to Jack Midi inputs - Verbindungen zu Jack Midi Eingängen + + Mono + Mono - - Auto-connect these channels to new midi tracks - Verbinde diese Kanäle automatisch mit neuen Midispuren + + 5.1 + 5.1 - - Auto-connect new midi tracks to these channels - Verbinde neue Midispuren automatisch mit diesen Kanälen + + wav,16 Bit + wav, 16 Bit - - Auto-connect new midi tracks to this channel - Verbinde neue Midispuren automatisch mit diesem Kanal + + wav, 24 Bit + wav, 24 Bit - - Device state - Gerätestatus + + wav, 32 Bit (float) + wav, 32 Bit (float) - - Enable gui for device - GUI für Gerät aktivieren + + Format + Format + + + MoveBase - - Enable reading from device - Lesen vom Gerät aktivieren + + MusE: Move Notes + MusE: Verschiebe Noten - - Enable writing to device - Schreiben zum Gerät aktivieren + + Range + Bereich - - Name of the midi device associated with this port number. Click to edit Jack midi name. - Name des MIDI-Gerätes, welches mit dieser Anschlussnummer verknüpft ist. Klicken Sie, um den Jack Midi Namen zu ändern. + + All Events + Alle Ereignisse - - Instrument connected to port - Instrument mit Anschluss verbunden + + Selected Events + Ausgewählte Ereignisse - - Connections from Jack Midi output ports - Verbindungen von Jack Midi Ausgangsports + + Looped Events + Ereignisse innerhalb Schleife - - Connections to Jack Midi input ports - Verbindungen zu Jack Midi Eingangsports + + Selected Looped + Ausgewählt und innerhalb der Schleife - - Auto-connect these channels, on this port, to new midi tracks. - Verbinde diese Kanäle auf diesem Port automatisch mit neuen MIDI-Spuren. + + Value + Wert - - Connect new midi tracks to these channels, on this port. - Verbinde neue MIDI-Spuren mit diesen Kanälen auf diesem Port. + + Move by + Bewege um - - Connect new midi tracks to this channel, on this port. - Verbinde neue MIDI-Spuren mit diesem Kanal auf diesem Port. + + ticks + Ticks - - State: result of opening the device - Status: Ergebnis vom Öffnen des Gerätes + + OK + Bestätigen - - Port - Anschluss + + Cancel + Abbrechen + + + MusECore::Song - - GUI - GUI + + Jack shutdown! + Jack heruntergefahren! - I - E + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + Jack hat ein Geschwindigkeitsproblem festgestellt, welches +dazu geführt hat, dass MusE von Jack getrennt wurde. +Dies kann aus verschiedenen Gründen passieren: +- ein Geschwindigkeitsproblem in Ihrer Einrichtung +- ein Fehler in MusE oder einer anderen verbundenen Software +- ein zufälliges Verschlucken, das nie wieder passieren könnte +- Jack wurde absichtlich gestoppt +- Jack ist abgestürzt + +Wenn das Problem erneut auftritt, sind Sie sehr willkommen, in der +MusE Mailingliste eine Frage zu stellen. +(Informationen darüber, wie man der Mailingliste beitritt finden sich +auf der MusE-Homepage, die über das Hilfe-Menü erreichbar ist) + +Zum Fortsetzen überprüfen Sie bitten den Zustand von Jack, +versuchen, Jack neu zu starten und klicken dann auf den "Neustart"- +Knopf. + + + + + Automation: + Automatisierung: - - O - A + + previous event + vorheriges Ereignis - - Instrument - Instrument + + next event + nächstes Ereignis - - Device Name - Gerätename + + + set event + setze Ereignis - - In routes - Eingangssignalfluss + + + add event + füge Ereignis hinzu - - Out routes - Ausgangssignalfluss + + + erase event + lösche Ereignis - - Def in ch - Standard Ein-Kanal + + erase range + lösche Bereich - - Def out ch - Standard Aus-Kanal + + clear automation + lösche Automatisierung - - State - Status + + Midi control + MIDI-Steuerung - - <unknown> - <unbekannt> + + Assign + Zuweisen - - - <none> - <kein> + + Clear + Löschen - - - MusEGui::MTScale - - bar scale - Taktskala + + Clear all controller events? + Alle Controller-Ereignisse löschen? - - - MusEGui::MTScaleFlo - - bar scale - Taktskala + + &Ok + &Bestätigen - - - MusEGui::MarkerView - - MusE: Marker - MusE: Marker + + &Cancel + &Abbrechen - - add marker - Marker hinzufügen + + MusE: Tempo list + MusE: Tempo-Liste - - delete marker - Marker löschen + + External tempo changes were recorded. +Transfer them to master tempo list? + Es wurden externe Tempoänderungen aufgezeichnet. +Sollen sie in die Master-Tempoliste übernommen werden? - - &Edit - B&earbeiten + + MusE - external script failed + MusE - externes Skript fehlgeschlagen - - Window &Config - Fenster&konfiguration + + MusE was unable to launch the script, error message: +%1 + MusE konnte das Skript nicht starten, Fehlermeldung: +%1 + + + MusEGui::Appearance - - Undo/Redo tools - Rückgängig/Wiederholen-Werkzeuge + + Main application font, and default font for any + controls not defined here. + Hauptschriftart, und Standard für alles, was +hier nicht definiert ist. - - edit tools - Werkzeuge "Bearbeiten" + + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + Mixer-Strips und Effekteinschübe. Midispur-Info-Panel. +MIDI-Control-Panel Eintrag Box. - - panic - Panik + + Transport controls. + Transport-Bedienelemente. - - transport - Transport + + Time scale upper, and time signature. +Controller graph and S/X buttons. + Zeitskala oben und Taktsignatur. +Controllergraph und S/X-Knöpfe. - - Bar:Beat:Tick - Takt:Schlag:Tick + + Time scale lower, and arranger part name overlay. + Zeitskala unten und Arranger: Partnamen-Overlay. - Hr:Mn:Sc:Fr:Sf - Std:Min:Sek:Fr:SFr + Tempo scale, and markers. + Temposkala und Marker. - Lock - Sperre + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + Mixer-Beschriftungen. Schriftgröße wird automatisch +nach oben zur gewählten Größe hin angepasst. +Zeilenumbruch aber nur bei Leerzeichen. - Text - Text + Maximum mixer label auto-font-sizing font size. + Maximale Mixer-Schriftgröße. - - Marker Properties - Marker Eigenschaften + + Global opacity (opposite of transparency). + Globale Durchsichtigkeit. - - - MusEGui::MasterEdit - - MusE: Mastertrack - MusE: Masterspur + + Standard + Standard - - Window &Config - Fenster&konfiguration + + Custom + Benutzerdefiniert - - Undo/Redo tools - Rückgängig/Wiederholen-Werkzeuge + + Keep Qt system style + Beim Qt-Systemstil belassen - - panic - Panik + + MusE: load image + MusE: Bild laden - - transport - Transport + + Select style sheet + Formatvorlage auswählen - - Enable master - Master einschalten + + Qt style sheets (*.qss) + QT-Formatvorlagen (*.qss) + + + MusEGui::Arranger - - Enable - Einschalten + + Enable Recording + Aufnahme einschalten - Enable usage of master track - Verwendung der Masterspur einschalten + Mute/Off Indicator + Mute/Off Anzeige - - Info - Info + + Solo Indicator + Solo-Anzeige - - Cursor - Positionsmarker + + Track Type + Spurtyp - - time at cursor position - Zeit an aktuellem Positionsmarker + + Track Name + Spurname - - tempo at cursor position - Tempo an aktuellem Positionsmarker + + Midi output channel number or audio channels + Midi-Ausgangskanalnummer oder Audiokanäle - - Off - Aus + + Midi output port or synth midi port + Midi-Ausgangsport oder Synth-Midi-Port - - Bar - Takt + + Time Lock + Sperre "Zeit" - - Snap - Magnet + + Automation parameter selection + Automatisierungsparameterauswahl - - CurPos - AktPos + + Notation clef + Notenschlüssel - - tempo at current position - Tempo an aktuellem Positionsmarker + + Enable recording. Click to toggle. + Aufnahme einschalten. Klicken zum umschalten. - time signature at current position - Taktmaß an aktuellem Positionsmarker - - - - MusEGui::MidiInputTransformDialog - - - - New - Neu + Mute indicator. Click to toggle. +Right-click to toggle track on/off. +Mute is designed for rapid, repeated action. +On/Off is not! + Mute-Anzeige. Klicken zum umschalten. +Rechtsklick um Track an/aus umzuschalten. +"Mute" ist für schnelles, wiederholtes Umschalten. +An/aus nicht! - - - MusEGui::MidiStrip - - - - off - aus + + Solo indicator. Click to toggle. +Connected tracks are also 'phantom' soloed, + indicated by a dark square. + Solo-Anzeige. Klicken zum umschalten. +Verbundene Spuren sind auch "Phantom-"Solo-geschalten, +angezeigt durch ein dunkles Quadrat. - - - double click on/off - Doppelklick an/aus + + Track type. Right-click to change + midi and drum track types. + Spurtyp. Rechtsklick, um Midi und +Schlagzeug Spurtypen umzuschalten. - - VariationSend - VariationSend + + Track name. Double-click to edit. +Right-click for more options. + Spurname. Doppelklick zum bearbeiten. +Rechtsklick für mehr Optionen. - - Var - Var + + Midi/drum track: Output channel number. +Audio track: Channels. +Mid/right-click to change. + Midi-/Schlagzeugspur: Ausgangskanalnummer. +Audiospur: Kanäle. +Mittel/Rechtsklick zum Ändern. - ReverbSend - ReverbSend + Midi/drum track: Output port. +Synth track: Assigned midi port. +Left-click to change. +Right-click to show GUI. + Midi/Schlagzeugspur: Ausgangsport. +Synth-Spur: Zugewiesener MIDI-Port. +Linksklick zum ändern. +Rechtsklick, um die GUI zu zeigen. - - Rev - Rev + + Time lock + Zeitsperre - ChorusSend - ChorusSend + Notation clef. Select this tracks notation clef. + Notenschlüssel. Wählt den Schlüssel dieser Spur aus. - - Cho - Cho + + Arranger + Arrangierer - - dB - dB + + Cursor + Zeiger - - Pan/Balance - Pan/Balance + + Off + Aus - Pan - Pan + Bar + Takt - - record - Aufnahme + + Snap + Magnet - - mute - Stumm + + Len + Länge - - solo mode - Solo Modus + + + song length - bars + Liedlänge - Takte - iR - iR + + Type + Typ - - input routing - Eingangs-Signalfluss + + NO + Kein - oR - oR + + GM + GM - - output routing - Ausgangs-Signalfluss + + GS + GS - - - MusEGui::MidiSyncConfig - - - Port Number - Portnummer + + XG + XG - - - Name of the midi device associated with this port number - Name des Midi Gerätes an dieser Portnummer + + + midi song type + Midi Lied Typ - - Midi clock input detected - Midi-Uhr Eingang erkannt + + Pitch + Tonhöhe - - - Midi tick input detected - Midi-Tick Eingang erkannt + + midi pitch + Midi Tonhöhenänderung - - Midi real time input detected - Midi Echtzeiteingang erkannt + + global midi pitch shift + Globale Midi Tonhöhenänderung - - MMC input detected - MMC Eingang erkannt + + Tempo + Tempo + - MTC input detected - MTC Eingang erkannt + midi tempo + Midi Tempo - - Detected SMPTE format - SMPTE-Format erkannt + + N + N - - Receive id number. 127 = Global. Double click to edit. - + + TrackInfo + Spurinfo - - Accept midi clock input - Akzeptiere Midi-Uhr-Eingang + + R + R - Accept midi real time input - Akzeptiere Midi-Echtzeit-Eingang + M + M - Accept MMC input - Akzeptiere MMC-Eingang + S + S - Accept MTC input - Akzeptiere MTC-Eingang + C + C - Receive start rewinds before playing - Das Empfangen von "Start" spult vor dem Abspielen zurück + Track + Spur - Transmit id number. 127 = Global. Double click to edit. - + Port + Port - Send midi clock output - + Ch + K - Send midi realtime output - + T + T - - Send MMC output - + Automation + Automatisierung - - - Send MTC output - + + Clef + Schlüssel + + + MusEGui::ArrangerView - - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - Midi-Uhr-Eingang erkannt. -Der momentan verwendete Anschluss ist rot. -Klicken Sie, um einen anderen Anschluss zu erzwingen. + + MusE: Arranger + MusE: Arrangierer - - Midi realtime input detected, including - start/stop/continue, and song position. - Midi-Echtzeit-Eingang erkannt, einschließlich -Start/Stopp/Fortsetzen und Liedposition. + + C&ut + &Ausschneiden - MMC input detected, including stop/play/deferred play, and locate. - MMC-Eingang erkannt, einschließlich Stopp/Play/Verzögertes Play und Position. + &Copy + &Kopieren - - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - MTC-Eingang erkannt, einschließlich Vorwärts-Viertel-Frame-Synchronisation und -Voll-Frame-Positionserkennung. Der momentan verwendete Anschluss ist rot. -Klicken Sie, um einen anderen Anschluss zu erzwingen. + + Copy in range + Im Bereich kopieren - - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - + + &Paste + &Einfügen - - Receive id number. 127 = global receive all, even if not global. - + + Paste (show dialog) + Einfügen (Dialog zeigen) - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. - Midi-Uhr-Eingang akzeptieren. Nur ein Eingang wird für die -Uhr benutzt. Auto-Benutzen: Wenn mehr als ein Echtzeiteingang -aktiviert ist, wird die erste erkannte Uhr genutzt, bis sie verloren -geht. Dann übernimmt eine andere. Es ist am besten, wenn jeder -seine Uhr beim Stopp ausschaltet, damit MusE die Uhr von einem -anderen Anschluss benutzen kann. Klicken Sie auf den Erkennungs- -Indikator, um eine andere zu erzwingen. + Paste c&lone + K&lon Einfügen - - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. - Akzeptiere MIDI-Echtzeit-Eingänge, einschließlich -Start/Stopp/Fortsetzen und Liedposition. -Nicht-Uhr-Ereignisse (Start/Stopp etc.) werden von -ALLEN aktivierten Anschlüssen angenommen. -Das bedeutet, dass Sie mehrere Master-Geräte -verbinden können, und MusE wird deren Daten -annehmen. + + Paste clone (show dialog) + Klon einfügen (Dialog zeigen) - - Accept MMC input, including stop/play/deferred play, and locate. - Akzeptiere MMC-Eingang, einschließlich Stopp/Play/Verzögertes Play und Position. + + &Insert Empty Measure + Leeren &Takt einfügen - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - MTC-Eingang erkannt, einschließlich Vorwärts-Viertel-Frame-Synchronisation und -Voll-Frame-Positionserkennung. Siehe die "rc"-Spalte für mehr Hilfe. + Delete Selected Tracks + Ausgewählte Spuren löschen + + + + Duplicate Selected Tracks + Ausgewählte Spuren duplizieren - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - Wenn Start empfangen wird, wird vor dem Abspielen -zurückgespult. -Hinweis: Es könnte unmöglich sein, schnell genug -zurückzuspulen, um mit dem externen Gerät synchron -zu bleiben. + Shrink selected parts + Ausgewählte Parts schrumpfen - - Transmit id number. 127 = global transmit to all. - + + Expand selected parts + Ausgewählte Parts erweitern - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - Sende Midi-Uhr-Ausgang. Wenn "Binde an Externe Sync" gewählt ist, -kann MusE das Uhr-Signal an andere ausgewählte Anschlüsse -weiterleiten. + Clean selected parts + Ausgewählte Parts säubern + + + + Add Track + Spur hinzufügen - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - Sende Midi-Echtzeit Ausgang, einschließlich Start/Stopp/ -Fortsetzen und Liedposition. Wenn "Binde an externe Sync." -aktiviert ist, kann MusE Midi Echtzeit-Eingangsnachrichten an -andere ausgewählte Anschlüsse weiterleiten. Das bedeutet, -dass Sie mehrere "Sklaven"-Geräte verbinden können, und MusE -Echtzeitnachrichten an einige oder alle weiterleiten kann. + Select + Auswählen - - Port - Anschluss + + Select &All + Alles a&uswählen - Device Name - Gerätename + &Deselect All + Alles ab&wählen - c - c + Invert &Selection + Auswa&hl umkehren - k - k + &Inside Loop + Bereich &innerhalb der Schleife - r - r + &Outside Loop + Bereich außerhalb der Schlei&fe - m - m + All &Parts on Track + Alle &Parts der Spur - - t - t + + Score + Partitur - - type - Typ + + all tracks in one staff + alle Spuren in ein System - rid - rid + one staff per track + ein System pro Spur - - rc - rc + + New score window + Neues Partiturfenster - rr - rr + Pianoroll + Pianorollen Editor - rm - rm + Drums + Schlagzeug Editor - rt - rt + + List + Listen Editor - - rw - rw + + Wave + Wave-Editor - - tid - tid + + Mastertrack + Masterspur - - tc - tc + + Graphic + Graphischer Editor - - tr - tr + + Midi &Transform + Midi &transformieren + + + + Global Cut + Globaler Schnitt - tm - tm + Global Insert + Globales Einfügen - tt - tt + Global Split + Globales Aufteilen - - MusE - MusE + + Global Cut - selected tracks + Globaler Schnitt - markierte Spuren - Settings have changed -Apply sync settings? - Einstellungen wurden geändert. -Sync-Einstellungen anwenden? + Global Insert - selected tracks + Globales Einfügen - markierte Spuren - - &Apply - &Anwenden + + Global Split - selected tracks + Globales Aufteilen - markierte Spuren - - &No - &Nein + + &Edit + &Bearbeiten - - &Abort - A&bbrechen + + &Structure + &Struktur - - <none> - <kein> + + Functions + Funktionen - - - MusEGui::MidiTrackInfo - - - <unknown> - <unbekannt> + + &Quantize Notes + Noten &quantisieren - - - MusEGui::MidiTransformerDialog - - - New - Neu + + Change note &length + Noten&länge verändern - - - MusEGui::MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Wave Dateien (*.wav);;Alle Dateien (*) + + Change note &velocity + &Anschlagsdynamik verändern - - - MusEGui::MusE - - - Failed to start audio! - Audio konnte nicht gestartet werden! + + Crescendo/Decrescendo + Crescendo/Decrescendo - - Was not able to start audio, check if jack is running. - - Audio konnte nicht gestartet werden, überprüfen Sie, ob Jack läuft. + + Transpose + Transponieren - - Timeout waiting for audio to run. Check if jack is running. - - Timeout beim Warten auf Audio. Überprüfen Sie, ob Jack läuft. + + Erase Events (Not Parts) + Events (nicht Parts) löschen - - Und&o - &Rückgängig + + Move Events (Not Parts) + Events (nicht Parts) verschieben - - Re&do - &Wiederholen + + Set Fixed Note Length + Feste Notenlänge setzen - - undo last change to song - Letzte Änderung am Lied rückgängig machen + + Delete Overlapping Notes + Überlappende Noten entfernen - redo last undo - Letztes Rückgängigmachen wiederholen + Legato + Legato - Loop - Schleife + Window &Config + Fenster&konfiguration - - loop between left mark and right mark - Schleife zwischen linkem und rechtem Marker + + Configure &custom columns + Benutzerdefinierte &Spalten konfigurieren - - Punchin - Aufnahme am linken Marker beginnen + + + New + Neu - - record starts at left mark - Aufnahme am linken Marker beginnen + + Changed Settings + Einstellungen verändert - - Punchout - Aufnahme am rechten Marker beenden + + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) + Leider können die veränderten Arranger-Spalten nicht +übernommen werden, während MusE noch läuft. +Um Sie zu übernehmen, starten Sie MusE bitte neu. +(Entschuldigung, wir arbeiten daran) + + + MusEGui::AudioMixerApp - - record stops at right mark - Aufnahme am rechten Marker beenden + + &Create + &Erzeugen - - Start - Start + + &View + &Zeigen - - rewind to start position - Zur Startposition springen + + Routing + Signalfluss - - Rewind - Einen Taktschlag rückwärts + + Show Midi Tracks + Zeige Midi-Spuren - - rewind current position - Einen Taktschlag rückwärts + + Show Drum Tracks + Zeige Schlagzeug-Spuren - - Forward - Einen Taktschlag vorwärts + + Show Wave Tracks + Zeige Wave-Spuren - - move current position - Einen Taktschlag vorwärts + + Show Inputs + Zeige Eingänge - - Stop - Stopp + + Show Outputs + Zeige Ausgänge - - stop sequencer - Wiedergabe beenden + + Show Groups + Zeige Gruppen - - Play - Wiedergabe + + Show Auxs + Zeige Aux - - start sequencer play - Wiedergabe beginnen + + Show Synthesizers + Zeige Synthesizer + + + MusEGui::AudioStrip - - Record - Aufnahme + + panorama + Panorama - to record press record and then play - Zur Aufnahme erst die Schaltfläche "Aufnahme" und dann "Wiedergabe" klicken + aux send level + Aux Send Pegel - - - Panic - Panik + + Pan + Pan - - send note off to all midi channels - Panik - "Note aus" Befehl an alle Midikanäle senden + + 1/2 channel + 1/2 Kanäle - - &New - &Neu + + Pre + Pre - - Create New Song - Neues Lied erzeugen + pre fader - post fader + Vor Regler - nach Regler - - &Open - Lied &öffnen + + dB + dB - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Auf diese Schaltfläche klicken um ein <em>Neues Lied</em> zu öffnen.<br> Alternativ den Befehl <b>Neues Lied</b> des Menüs "Datei" auswählen. + + record + Aufnahme - - Open &Recent - &Letztes Lied öffnen + + mute + stumm + + + + record downmix + Abmischung aufnehmen - - - &Save - &Speichern + + solo mode + Solo Modus - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Auf diese Schaltfläche klicken um das gerade bearbeitete Lied zu sichern mit der automatischen Aufforderung einen Dateinamen anzugeben. -Alternativ das Lied mit dem Befehl "Sichern" im Menü "Datei" sichern. + + off + Aus - - Save &As - Speichern &unter + + input routing + Eingangs-Signalfluss - - Import Midifile - Mididatei importieren + + output routing + Ausgangs-Signalfluss - - Export Midifile - Mididatei exportieren + + Off + Aus - Import Part - Part importieren + Read + Lesen - - - Import Wave File - Wavedatei importieren + + Touch + Berühren - Find unused wave files - Finde ungenutzte Wave-Dateien + Write + Schreiben - - &Quit - &Beenden + + automation type + Automatisierungstyp + + + MusEGui::BigTime - - Song Info - Liedinfo + + format display + Formatanzeige - - Transport Panel - Transportkonsole + + bar + Takt - - Bigtime Window - Große Zeitanzeige + + beat + Schlag - - Mixer A - Mixer A + + + tick + Tick - - Mixer B - Mixer B + + minute + Minute - - Cliplist - Cliplist + + second + Sekunde - - Marker View - Marker-Fenster + + + frame + Frame - - Arranger View - Arranger-Fenster + + subframe + Subframe - - Fullscreen - Vollbild + + MusE: Bigtime + MusE: Große Zeitanzeige + + + MusEGui::ClipListEdit - - &Plugins - &Plugins + + MusE: Clip List Editor + MusE: Clip-Listen-Editor - - Edit Instrument - Instrument bearbeiten + + Window &Config + Fenster&konfiguration + + + MusEGui::ComboQuant + - Input Plugins - Eingangs-PlugIns - - - - Transpose - Transponieren + + Off + Aus + + + MusEGui::CtrlCanvas - - Midi Input Transform - Midi Eingang transformieren + + Drawing hint: Hold Ctrl to affect only existing events + Hinweis: Halten Sie STRG, um nur existierende Events zu beeinflussen - - Midi Input Filter - Midi Eingangsfilter + + Use shift + pencil or line tool to draw new events + Benutzen Sie SHIFT+Stift- oder Linienwerkzeug, um neue Events zu zeichnen + + + MusEGui::CtrlPanel - - Midi Remote Control - Midi Fernbedienung + + S + S - - Rhythm Generator - Rhythmusgenerator + + select controller + Controller wählen - - Reset Instr. - Instr. zurücksetzen + + X + X - - Init Instr. - Instr. initialisieren + + remove panel + Kontrolleransicht schließen - - Local Off - Lokal aus + + manual adjust + Manuelles Einstellen - - Bounce to Track - Auf Spur abmischen + + ctrl-double-click on/off + Ctrl+Doppelklick für an/aus - Bounce to File - In Datei abmischen + off + aus - - Restart Audio - Audio erneut starten + + + Velocity + Anschlagsdynamik - - Mixer Automation - Mischpult Automatisierung + + add new ... + Neuen Kontroller hinzufügen ... - - Take Snapshot - Schnappschuss aufnehmen + + + Instrument-defined + Instrumenten-definiert - - Clear Automation Data - Automatisierungsdaten löschen + + + Add ... + Hinzufügen ... - - Cascade - Staffeln + + Others + Andere - - Tile - Kacheln + + Edit instrument ... + Instrument bearbeiten ... - - In rows - In Reihen + + Common Controls + Gemeinsame Controller + + + MusEGui::DrumEdit - - In columns - In Spalten + + + mute instrument + Instrument stummschalten - - Global Settings - Globale Einstellungen + + + sound name + Klangname - - Configure Shortcuts - Tastenkürzel einstellen + + + volume percent + Lautstärke Prozent - - Follow Song - Folge dem Lied + + + quantisation + Quantisierung - - Don't Follow Song - Folge dem Lied nicht + + + this input note triggers the sound + Diese Eingangsnote löst den Klang aus - - Follow Page - Folge dem Lied seitenweise + + + note length + Notenlänge - - Follow Continuous - Folge dem Lied ständig + + + this is the note which is played + Das ist die Note, die gespielt wird - - Metronome - Metronom + + output channel (hold ctl to affect all rows) + Ausgangskanal (halten Sie CTRL, um alle Reihen zu beeinflussen) - Midi Sync - Midi Sync + output port (hold ctl to affect all rows) + Ausgangsport (halten Sie CTRL, um alle Reihen zu beeinflussen) - Midi File Import/Export - Midi-Datei Import/Export + + shift + control key: draw velocity level 1 + Shift + Ctrl: Zeichne Dynamiklevel 1 - - Appearance Settings - Erscheinungsbild einstellen + + + control key: draw velocity level 2 + Ctrl: Zeichne Dynamiklevel 2 - - Midi Ports / Soft Synth - Midi Anschlüsse / Software Synthesizer + + + shift key: draw velocity level 3 + Shift: Zeichne Dynamiklevel 3 - - &Manual - &Handbuch + + + draw velocity level 4 + Zeichne Dynamiklevel 4 - - &MusE Homepage - &MusE Webseite + + output channel (ctl: affect all rows) + Ausgangskanal (CTRL, um alle Reihen zu beeinflussen) - &Report Bug... - &Fehler melden ... + output port (ctl: affect all rows) + Ausgangskanal (CTRL, um alle Reihen zu beeinflussen) - - &About MusE - &Über MusE + + &File + &Datei - - File Buttons - Datei-Knöpfe + + Load Map + Schlagzeugbelegung laden - - Undo/Redo - Rückgängig/Wiederholen + + Save Map + Schlagzeugbelegung Sichern - - Transport - Transport + + Reset GM Map + Auf GM-Belegung zurücksetzen - - &File - &Datei + + &Edit + B&earbeiten - - &View - &Zeigen + + Cut + Ausschneiden - - &Midi - &Midi + + Copy + Kopieren - - &Audio - &Audio + + Copy events in range + Kopiere Events im Bereich - - A&utomation - A&utomatisierung + + Paste + Einfügen - - &Windows - F&enster + + Paste (with Dialog) + Einfügen (Dialog zeigen) - - MusE Se&ttings - MusE Ei&nstellungen + + Delete Events + Events entfernen - - &Help - &Hilfe + + &Select + &Auswählen - - Cannot read template - Vorlage nicht lesbar + + Select All + Alles auswählen - - File open error - Fehler beim Datei öffnen + + Select None + Nichts auswählen - - File read error - Fehler beim Datei lesen + + Invert + Auswahl umkehren - - Unknown File Format: %1 - Unbekanntes Dateiformat: %1 + + Inside Loop + Innerhalb der Schleife - - - - MusE: Song: %1 - MusE: Lied: %1 + + Outside Loop + Ausserhalb der Schleife - - MusE: load project - Muse: Projekt laden + + Previous Part + Vorheriger Part - - MusE: load template - Muse: Vorlage laden + + Next Part + Nächster Part - - MusE: Write File failed - MusE: Datei schreiben schlug fehl + + Fu&nctions + Fu&nktionen - - The current Project contains unsaved data -Save Current Project? - Das aktuelle Projekt enthält ungesicherte Daten -Aktuelles Projekt sichern? + + Re-order list + Liste neu sortieren - - S&kip - &Überspringen - - - - &Cancel - &Abbrechen + Set Fixed Length + Länge festlegen - - MusE: Save As - MusE: Speichern unter + + Modify Velocity + Velocity ändern - - - Nothing to edit - Es gibt nichts zu editieren + + Crescendo/Decrescendo + Crescendo/Decrescendo - - - - - - MusE: Bounce to Track - MusE: Auf Spur abmischen + + Quantize + Quantisieren - - No wave tracks found - Keine Wave-Tracks gefunden + + Erase Event + Events löschen - - - No audio output tracks found - Keine Audio-Tracks gefunden + + Move Notes + Noten verschieben - - Select one audio output track, -and one target wave track - Wählen Sie eine Audio-Ausgangsspur -und eine Ziel-Wave-Spur + + Delete Overlaps + Überlappungen entfernen - - Select one target wave track - Wählen Sie eine Ziel-Wave-Spur + + &Plugins + &Plugins - - Select one target wave track, -and one audio output track - Wählen Sie eine Ziel-Wave-Spur -und eine Audio-Ausgangs-Spur + + Window &Config + Fenster&konfiguration - - - MusE: Bounce to File - MusE: In Datei abmischen + + Drum tools + Schlagzeug-Werkzeuge - - Select one audio output track - Wählen Sie eine Audio-Ausgangs-Spur + + Load Drummap + Schlagzeugbelegung laden - - MusE: Bounce - MusE: Abmischen + + Store Drummap + Schlagzeugbelegung sichern - - set left/right marker for bounce range - Linken/rechten Marker für Abmischbereich einstellen + + Step Record + Aufnahme taktschlagweise - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Das aktuelle Projekt enthält ungesicherte Daten -Neues Lied laden überschreibt das aktuelle Projekt: -Aktuelles Projekt sichern? + + Midi Input + Midi Eingang - - - &Abort - &Abbrechen + + cursor tools + Cursor-Werkzeug - - MusE: Export Midi - MusE: Midi exportieren + + Set step size for cursor edit + Schrittweite für Cursor-Modus einstellen - - no help found at: - Hilfe wurde nicht gefunden: + + ctrl + ctrl - - MusE: Open Help - MusE: Hilfe öffnen + + Add Controller View + Controlleransicht hinzufügen - - Unable to launch help - Konnte Hilfe nicht starten + + M + M - For some reason MusE has to launch the default -browser on your machine. - Aus irgendeinem Grund muss MusE den Standardbrowser auf Ihrem System starten. + Sound + Klang - - MusE: Import Midi - MusE: Midi importieren + + Vol + Vol - - Add midi file to current project? - - Mididatei zu aktuellem Lied hinzufügen? + + QNT + QNT - &Add to Project - Zu Lied hin&zufügen + E-Note + E-Note - &Replace - Erset&zen + Len + Länge - - reading midifile - - Lese Mididatei - + + A-Note + A-Note - - -failed: - -schlug fehl: + + Ch + K - - Import part is only valid for midi and wave tracks! - Part importieren ist nur möglich für MIDI und WAVE-Spuren! + + Port + Port - - MusE: load part - MusE: Part laden + + LV1 + LV1 - - No track selected for import - Keine Spur ist für den Import ausgewählt - - - - %n part(s) out of %1 could not be imported. -Likely the selected track is the wrong type. - - %n Part von insgesamt %1 konnte nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - %n Parts von insgesamt %1 konnten nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - + + LV2 + LV2 - + - %n part(s) could not be imported. -Likely the selected track is the wrong type. - - %n Part konnte nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - %n Parts konnten nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - + LV3 + LV3 - - to import an audio file you have first to selecta wave track - um eine Audio-Datei zu importieren müssen Sie erst ein Wave-Spur auswählen + + LV4 + LV4 - - Import Wavefile - Wavedatei importieren + + Muse: Load Drum Map + MusE: Schlagzeugbelegung laden - - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? - Diese Wavedatei hat eine samplerate von %1, -im Gegensatz zur momentanen Einstellung %2. -Möchten Sie sie dennoch importieren? + + MusE: Store Drum Map + MusE: Schlagzeugbelegung speichern - - &Yes - &Ja + + Drum map + Schlagzeugbelegung - - &No - &Nein + + Reset the drum map with GM defaults? + Die Schlagzeugbelegung auf die GM-Standardwerte zurücksetzen? - MusEGui::NoteInfo - - - Note Info - Noteninformation - + MusEGui::EditCAfterDialog - - Start - Start + + MusE: Enter Channel Aftertouch + MusE: Channel Aftertouch festlegen - - Len - Länge + + Time Position + Position - - Pitch - Tonhöhe + + Pressure + Anschlagsdruck + + + MusEGui::EditEventDialog - - Velo On - Velo an + + Ok + Bestätigen - - Velo Off - Velo aus + + Cancel + Abbrechen - MusEGui::PartCanvas + MusEGui::EditInstrument - - Cannot copy/move/clone to different Track-Type - Kopieren/verschieben/klonen auf anderen Spurtyp nicht möglich + + + MusE: Create file failed + MusE: Erzeugen der Datei schlug fehl - - C&ut - &Ausschneiden + + MusE: Write File failed + MusE: Datei schreiben schlug fehl - - &Copy - &Kopieren + + + MusE: Save Instrument Definition + MusE: Instrumentendefinition speichern - - s&elect - &wähle + + + Instrument Definition (*.idf) + Instrumentendefinition (*.idf) - - clones - Klone + + + MusE: Save instrument as + MusE: Instrument speichern unter - - rename - Umbenennen + + Enter a new unique instrument name: + Geben Sie einen neuen einzigartigen Instrumentennamen ein: - - color - Farbe + + The user instrument '%1' already exists. This will overwrite its .idf instrument file. +Are you sure? + Das Benutzerinstrument "%1" existiert bereits. Dies wird seine .idf Instrumentendatei überschreiben. +Sind Sie sicher? - - delete - löschen + + MusE: Bad instrument name + MusE: Ungeeigneter Instrumentenname + + + + Please choose a unique instrument name. +(The name might be used by a hidden instrument.) + Bitte wählen Sie einen einzigartigen Instrumentennamen. +(Der Name darf von einem versteckten Instrument benutzt werden.) + + + + MusE: Bad patch name + MusE: Ungeeigneter Patch-Name - - split - Schnitt + + Please choose a unique patch name + Bitte eindeutigen Patchnamen wählen - - glue - Verbinder + + MusE: Bad patchgroup name + MusE: Ungeeigneter Patchgruppen-Name - - super glue (merge selection) - Super-Kleber (Auswahl vereinigen) + + Please choose a unique patchgroup name + Bitte eindeutigen Patchgruppennamen wählen - - de-clone - Entklonen + + MusE: Bad controller name + MusE: Ungeeigneter Controllername - - - - save part to disk - Speichere Part auf Festplatte + + Please choose a unique controller name + Bitte eindeutigen Controllernamen wählen - - wave edit - Wave Editor + + + MusE: Cannot add common controller + MusE: Kann gemeinsamen Controller nicht hinzufügen - - file info - Dateiinfo + + A controller named '%1' already exists. + Ein Controller namens "%1" existiert bereits. - - MusE: save part - MusE: Speichere Part + + A controller number %1 already exists. + Die Controllernummer %1 existiert bereits. - - Part name: %1 -Files: - Part Name: %1 -Dateien: + + + MusE + MusE - - - %n part(s) out of %1 could not be pasted. -Likely the selected track is the wrong type. - - %n Part von insgesamt %1 konnte nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - %n Parts von insgesamt %1 konnten nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - + + + + The current Instrument contains unsaved data +Save Current Instrument? + Das momentane Instrument enthält ungespeicherte Daten. +Instrument speichern? - - - %n part(s) could not be pasted. -Likely the selected track is the wrong type. - - %n Part konnte nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - %n Parts konnten nicht eingefügt werden. -Wahrscheinlich hat die ausgewählte Spur den falschen Typ. - + + + + &Save + &Speichern - - Cannot paste: multiple tracks selected - Einfügen nicht möglich: mehrere Spuren ausgewählt + + + &Nosave + &Nicht speichern - - Cannot paste: no track selected - Einfügen nicht möglich: keine Spur ausgewählt + + &Abort + &Abbrechen + + + MusEGui::EditMetaDialog - - Can only paste to midi/drum track - Einfügen möglich nur in Midi/Drum Spur + + MusE: Enter Meta Event + MusE: Meta-Event eingeben - - Can only paste to wave track - Einfügen möglich nur in Wave Spur + + Time Position + Position - - Can only paste to midi or wave track - Einfügen möglich nur in Midi oder Wave Spur + + Meta Type + Meta Typ - - Cannot paste: wrong data type - Einfügen nicht möglich: falscher Datentyp + + Enter Hex + Hex eingeben - MusEGui::PasteDialog - - - %n quarter(s) - - %n Viertelnote - %n Viertelnoten - + MusEGui::EditPAfterDialog + + + MusE: Enter Poly Aftertouch + MusE: Poly Aftertouch eingeben - - %1 quarter - for floating-point arguments like 1.5 - %1 Viertelnote + + Time Position + Position + + + + Pitch + Tonhöhe - %1 quarters - for floating-point arguments like 1.5 - %1 Viertelnoten + Pressure + Anschlagsdruck - MusEGui::PasteEventsDialog - - - %n quarter(s) - - %n Viertelnote - %n Viertelnoten - + MusEGui::EditToolBar + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Werkzeug "Zeiger": +Dieses Werkzeug kann: + Parts auswählen + Parts verschieben + Parts kopieren - - %1 quarter - for floating-point arguments like 1.5 - %1 Viertelnote + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Werkzeug "Zeichenstift": +Dieses Werkzeug kann: + Neue Parts erzeugen + Die Länge einzelner Parts ändern + + + + select Delete Tool: +with the delete tool you can delete parts + Werkzeug "Radierer": + mit diesem Werkzeug werden Parts gelöscht - %1 quarters - for floating-point arguments like 1.5 - %1 Viertelnoten + select Cut Tool: +with the cut tool you can split a part + Werkzeug "Schnitt": + mit diesem Werkzeug werden Parts geteilt - - - MusEGui::PianoRoll - - &Edit - &Bearbeiten + + select Glue Tool: +with the glue tool you can glue two parts + Werkzeug "Verbinder": + mit diesem Werkzeug werden zwei einzelne Parts zu einem verbunden - - C&ut - &Ausschneiden + + select Score Tool: + + Werkzeug "Notensatz": - - &Copy - &Kopieren + + select Quantize Tool: +insert display quantize event + Werkzeug "Quantisierung": + mit diesem Werkzeug werden quantisierte Ereignisse eingefügt - - Copy events in range - Kopiere Events im Bereich + + select Drawing Tool + Werkzeug "Zeichenstift" - - &Paste - &Einfügen + + select Muting Tool: +click on part to mute/unmute + Werkzeug "Stille": + Klicken Sie auf einen Part um diesen stumm bzw. laut zu schalten - &Paste (with dialog) - Einfügen (Dialog zeigen) + + Manipulate automation + Automatisierung manipulieren - - Paste (with dialog) - Einfügen (Dialog zeigen) + + Cursor tool + Zeiger-Werkzeug + + + + pointer + Zeiger - - Delete &Events - &Events löschen + + pencil + Zeichenstift - - &Select - &Auswählen + + eraser + Radierer - - Select &All - Alles a&uswählen + + cutter + Schnitt - - &Deselect All - Alles ab&wählen + + score + Notensatz - - Invert &Selection - Auswa&hl umkehren + + glue + Verbinder - - &Inside Loop - Bereich &innerhalb der Schleife + + quantize + Quantisierung - - &Outside Loop - Bereich außerhalb der Schlei&fe + + draw + Zeichenstift - - &Previous Part - Vorheriger &Part + + mute parts + Schalte Parts stumm - - &Next Part - &Nächster Part + + edit automation + Automatisierung bearbeiten - - Fu&nctions - &Funktionen + + cursor + Zeiger - - Quantize - Quantisieren + + Edit Tools + Werkzeuge bearbeiten + + + MusEGui::EffectRack - - Modify Note Length - Notenlänge verändern + + effect rack + Effekteinschub - - Modify Velocity - Anschlagsdynamik ändern + + new + Neu - - Crescendo/Decrescendo - Crescendo/Decrescendo + + change + ändern - - Transpose - Transponieren + + move up + Nach oben bewegen - - Erase Events - Events löschen + + move down + Nach unten bewegen - - Move Notes - Noten verschieben + + remove + entfernen - - Set Fixed Length - Länge festlegen + + bypass + übergehen - - Delete Overlaps - Überlappungen entfernen + + show gui + GUI anzeigen - - Legato - Legato + + show native gui + Native GUI anzeigen - - &Plugins - &Plugins + + save preset + Preset speichern - - Window &Config - Fenster&konfiguration + + MusE: Save Preset + MusE: Preset speichern - - &Event Color - &Eventfarbe + + Replace effect + Effekt ersetzen - - &Blue - &Blau + + Do you really want to replace the effect %1? + Möchten Sie wirklich den Effekt %1 ersetzen? + + + MusEGui::GlobalSettingsConfig - - &Pitch colors - Farme nach &Tonhöhe + + MusE: Choose start template or song + MusE: Lied oder eine Vorlage für den Start wählen + + + MusEGui::Header - - &Velocity colors - Farbe nach &Anschlagsdynamik + + Track Info Columns + Spur-Info Spalten + + + MusEGui::LMaster - - Pianoroll tools - Werkzeug "Pianorollen Editor" + + MusE: Mastertrack + MusE: Masterspur - - Step Record - Aufnahme taktschlagweise + + &Edit + &Bearbeiten - - Midi Input - Midi Eingang + + Insert Tempo + Tempo einfügen - - Play Events - Ereignisse abspielen + + Insert Signature + Taktmaß einfügen - - panic - Panik + + Insert Key + Tonart einfügen - - transport - Transport + + Edit Positon + Position bearbeiten - - ctrl - Ctrl + + Edit Value + Wert bearbeiten - - Add Controller View - Controlleransicht hinzufügen + + Delete Event + Event löschen - - - MusEGui::PluginDialog - - MusE: select plugin - MusE: PlugIn wählen + + Window &Config + Fenster&konfiguration - - Lib - Lib + + Edit tools + - - Label - Beschriftung + + Tempo + Tempo - Name - Name + Timesig + Taktmaß - AI - Al + Key + Tonart - AO - AO + new tempo + Neues Tempo - CI - Cl + new signature + Neues Taktmaß - CO - CO + new key + Neue Tonart - - IP - IP + + Meter + Taktposition - id - id + Time + Zeit - Maker - Erzeuger + Type + Typ - Copyright - Copyright + Value + Wert - - Ok - Bestätigen + + Reposition of the initial tempo and signature events is not allowed + Das Verschieben der initialen Tempo- und Taktmaß-Events ist nicht erlaubt - - Cancel - Abbrechen + + MusE: List Editor + MusE: Listeneditor - - Mono and Stereo - Mono und Stereo + + Input error, conversion not OK or value out of range + Eingabefehler, Umwandlung nicht in Ordnung oder Wert außerhalb des zulässigen Bereichs - - Stereo - Stereo + + Reposition of tempo and signature events to start position is not allowed! + Das Verschieben von Tempo- und Taktmaß-Events an die Startposition ist nicht erlaubt! + + + MusEGui::ListEdit - - Mono - Mono + + insert Note + Note einfügen - - Show All - Zeige alle + + insert SysEx + SysEx einfügen - - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - Wählen Sie aus, welche Plugintypen in der Liste sichtbar sein sollen.<br>Das Benutzen von Mono-Plugins auf Stereospuren ist kein Problem, zwei werden parallel benutzt werden.<br>Beachten Sie, dass die "alle"-Alternative Plugings enthält, die wahrscheinlich nicht von MusE benutzt werden können. + + insert Ctrl + Ctrl einfügen - - Search in 'Label' and 'Name': - Suche in "Beschriftung" und "Name": + + insert Meta + Meta einfügen - - - MusEGui::PluginGui - - File Buttons - Datei-Knöpfe + + insert Channel Aftertouch + Channel Aftertouch einfügen - - Load Preset - Vorlage laden + + insert Poly Aftertouch + Poly Aftertouch einfügen - - Save Preset - Speicher Preset + + &Edit + B&earbeiten - - - bypass plugin - Signalfluss PlugIn überspringen + + Cut + Ausschneiden - - MusE: load preset - MusE: Vorlage laden + + Copy + Kopieren - - Error reading preset. Might not be right type for this plugin - Fehler beim Lesen der Vorlage. Könnte der falsche Typ für dieses Plugin sein + + Paste + Einfügen - - MusE: save preset - MusE: Vorlage sichern + + Delete Events + Events löschen - - - MusEGui::ProjectCreateImpl - - Select directory - Verzeichnis auswählen + + Window &Config + Fenster&konfiguration - - - MusEGui::RoutePopupMenu - - - - - - - - - Channel - Kanal + + Insert tools + Werkzeuge "Einfügen" - - - - Soloing chain - Solo-Kette + + Tick + Tick - - - Audio returns - Audio-Rückkanäle + + Bar + Takt - - Warning: No input devices! - Warnung: Keine Eingangsgeräte! + + Type + Typ - - Open midi config... - Öffne MIDI-Konfig... + + Ch + K - - - <none> - <kein> + + Val A + Wert A - - Toggle all - Alles umwählen + + Val B + Wert B - - More... - Mehr... + + Val C + Wert C - - Audio sends - Audio-Sender + + Len + Länge - - Midi port sends - Midiport-Sender + + Comment + Kommentar - MusEGui::ScoreCanvas + MusEGui::MPConfig - - Treble - Violinschlüssel + + + Default input connections + Standard-Eingangsverbindungen - - Bass - Bassschlüssel + + + Are you sure you want to apply to all existing midi tracks now? + Sind Sie sicher, dass Sie das auf alle existierenden MIDI-Spuren anwenden wollen? - - Grand Staff - Beide Schlüssel + + + Default output connections + Standard-Ausgangsverbindungen - - Remove staff - Notenzeile entfernen + + + Setting will apply to new midi tracks. +Do you want to apply to all existing midi tracks now? + Die Einstellung wird auf neue MIDI-Spuren angewendet werden. +Möchten Sie sie jetzt auf alle existierende MIDI-Spuren anwenden? - - Ambiguous part - Unklarer Part + + MusE: bad device name + MusE: ungeeigneter Gerätename - - There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. - Es gibt zwei oder mehr mögliche Parts, zu denen man die Note hinzufügen könnte, aber keiner ist der ausgewählte. Bitte wählen Sie den Ziel-Part aus, indem Sie auf eine beliebige Note, die zu ihm gehört, klicken, und versuchen Sie es erneut, oder fügen Sie eine neue Notenzeile hinzu, die nur den Zielpart enthält. + + please choose a unique device name + Bitte wählen Sie einen einzigartigen Gerätenamen - - No part - Kein Part + + + in + ein - - There are no parts you could add the note to. - Es gibt keine Parts, zu denen man die Note hinzufügen könnte. + + + out + aus - - - MusEGui::ScoreEdit - - Undo/Redo tools - Rückgängig/Wiederholen-Werkzeuge + + Show first aliases + Zeige erste Aliase - - Step recording tools - "Taktschlagweise Aufnahme"-Werkzeuge + + Show second aliases + Zeige zweite Aliase - - Step Record - Aufnahme taktschlagweise + + + Toggle all + Alle umschalten - - panic - Panik + + + Change all tracks now + Alle Spuren jetzt ändern - - transport - Transport + + Create Jack device + Jack-Gerät erstellen - - Note settings - Noteneinstellungen + + + Port Number + Anschlussnummer - - Note length: - Notenlänge: + + Enable gui + GUI aktivieren - - last - letzte + + Enable reading + Lesen aktivieren - - - Apply to new notes: - Für neue Noten: + Enable writing + Schreiben aktivieren - - - Apply to selected notes: - Für markierte Noten: + + Port instrument + Anschluss-Instrument - - Velocity: - Dynamik: + + Midi device name. Click to edit (Jack) + Midigerätename. Klicken zum bearbeiten (Jack) - - Off-Velocity: - Loslassdynamik: + + Connections from Jack Midi outputs + Verbindungen von Jack Midi Ausgängen - - Quantisation settings - Quantisierungseinstellungen + + Connections to Jack Midi inputs + Verbindungen zu Jack Midi Eingängen - - Quantisation: - Quantisierung: + + Auto-connect these channels to new midi tracks + Verbinde diese Kanäle automatisch mit neuen Midispuren - - Pixels per whole: - Pixel pro ganze Note: + + Auto-connect new midi tracks to these channels + Verbinde neue Midispuren automatisch mit diesen Kanälen - - &Edit - &Bearbeiten + + Auto-connect new midi tracks to this channel + Verbinde neue Midispuren automatisch mit diesem Kanal - - C&ut - &Ausschneiden + + Device state + Gerätestatus - - &Copy - &Kopieren + + Enable gui for device + GUI für Gerät aktivieren - - Copy events in range - Kopiere Events im Bereich + + Enable reading from device + Lesen vom Gerät aktivieren - - &Paste - &Einfügen + + Enable writing to device + Schreiben zum Gerät aktivieren - - Paste (with dialog) - Einfügen (Dialog zeigen) + + Name of the midi device associated with this port number. Click to edit Jack midi name. + Name des MIDI-Gerätes, welches mit dieser Anschlussnummer verknüpft ist. Klicken Sie, um den Jack Midi Namen zu ändern. - - Delete &Events - &Events löschen + + Instrument connected to port + Instrument mit Anschluss verbunden - - &Select - &Auswählen + + Connections from Jack Midi output ports + Verbindungen von Jack Midi Ausgangsports - Select &All - Alles a&uswählen + Connections to Jack Midi input ports + Verbindungen zu Jack Midi Eingangsports - - &Deselect All - Alles ab&wählen + + Auto-connect these channels, on this port, to new midi tracks. + Verbinde diese Kanäle auf diesem Port automatisch mit neuen MIDI-Spuren. - Invert &Selection - Auswa&hl umkehren - - - - &Inside Loop - Bereich &innerhalb der Schleife + Connect new midi tracks to these channels, on this port. + Verbinde neue MIDI-Spuren mit diesen Kanälen auf diesem Port. - - &Outside Loop - Bereich außerhalb der Schlei&fe + + Connect new midi tracks to this channel, on this port. + Verbinde neue MIDI-Spuren mit diesem Kanal auf diesem Port. - - Fu&nctions - Fu&nktionen + + State: result of opening the device + Status: Ergebnis vom Öffnen des Gerätes - - &Quantize - &Quantisieren + + Port + Anschluss - Change note &length - Noten&länge verändern + GUI + GUI - Change note &velocity - &Anschlagsdynamik verändern + I + E - Crescendo/Decrescendo - Crescendo/Decrescendo + O + A - Transpose - Transponieren + Instrument + Instrument - Erase Events - Events löschen + Device Name + Gerätename - Move Notes - Noten verschieben + In routes + Eingangssignalfluss - Set Fixed Length - Feste Notenlänge setzen + Out routes + Ausgangssignalfluss - Delete Overlaps - Überlappungen entfernen + Def in ch + Standard Ein-Kanal - Legato - Legato + Def out ch + Standard Aus-Kanal - - Window &Config - Fenster&konfiguration + + State + Status - - Note head &colors - Notenkopf-&Farben + + <unknown> + <unbekannt> - - &Black - &Schwarz + + + <none> + <kein> + + + MusEGui::MTScale - - &Velocity - Je nach &Dynamik + + bar scale + Taktskala + + + MusEGui::MTScaleFlo - - &Part - Je nach &Part + + bar scale + Taktskala + + + MusEGui::MarkerView - - Set up &preamble - &Preambel einstellen + + MusE: Marker + MusE: Marker - - Display &key signature - &Vorzeichen anzeigen + + add marker + Marker hinzufügen - - Display &time signature - &Takt anzeigen + + delete marker + Marker löschen - - Set Score &name - Partitur&name setzen + + &Edit + B&earbeiten - - - Enter the new score title - Geben Sie den neuen Titel ein + + Window &Config + Fenster&konfiguration - - Error - Fehler + + edit tools + Werkzeuge "Bearbeiten" - - Changing score title failed: -the selected title is not unique - Das Ändern des Titels ist fehl- -geschlagen: Der eingegebene -Titel ist nicht einzigartig + + Bar:Beat:Tick + Takt:Schlag:Tick - - - MusEGui::ScrollScale - - next page - Nächste Seite + + Hr:Mn:Sc:Fr:Sf + Std:Min:Sek:Fr:SFr - previous page - Vorherige Seite + Lock + Sperre - current page number - Aktuelle Seitennummer + Text + Text + + + + Marker Properties + Marker Eigenschaften - MusEGui::ShortcutCaptureDialog + MusEGui::MasterEdit - - Ok - Bestätigen + + MusE: Mastertrack + MusE: Masterspur - - Cancel - Abbrechen + + Window &Config + Fenster&konfiguration - - Shortcut conflicts with %1 - Tastenkürzel überschneidet sich mit %1 + + Enable master + Master einschalten - - Undefined - Unbestimmt + + Enable + Einschalten - - - MusEGui::SigScale - - signature scale - Taktmaß-Skala + + Enable usage of master track + Verwendung der Masterspur einschalten - - - MusEGui::Strip - - Remove track? - Spur entfernen? + + Info + Info - - - MusEGui::TList - - <none> - <kein> + + Cursor + Positionsmarker - - visible - sichtbar + + time at cursor position + Zeit an aktuellem Positionsmarker - - no clef - kein Notenschlüssel + + tempo at cursor position + Tempo an aktuellem Positionsmarker - - Treble - Violinschlüssel + + Off + Aus - - Bass - Bassschlüssel + + Bar + Takt - Grand - Beide Schlüssel + Snap + Magnet - - MusE: bad trackname - MusE: ungeeigneter Spurname + + CurPos + AktPos - - please choose a unique track name - Bitte eindeutigen Spurnamen wählen + + tempo at current position + Tempo an aktuellem Positionsmarker - - - Update drummap? - Drumbelegung aktualisieren? + + time signature at current position + Taktmaß an aktuellem Positionsmarker + + + MusEGui::MidiInputTransformDialog - - Do you want to use same port for all instruments in the drummap? - Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss verwenden? + + + New + Neu + + + MusEGui::MidiStrip - - - &Yes - &Ja + + + + off + aus - - - &No - &Nein + + + ctrl-double-click on/off + Ctrl+Doppelklick für an/aus - - - show gui - GUI anzeigen + + VariationSend + VariationSend - - - show native gui - Native GUI anzeigen + + Var + Var - - Treble clef - Violinschlüssel + + ReverbSend + ReverbSend - - Bass clef - Bassschlüssel + + Rev + Rev - Grand Staff - Beide Schlüssel + ChorusSend + ChorusSend - - Viewable automation - Sichtbare Automatisierung + + Cho + Cho - - Delete Track - Spur löschen + + dB + dB - - Track Comment - Spur Kommentar + + Pan/Balance + Pan/Balance - - Insert Track - Spur einfügen + + Pan + Pan - - Midi - Midi + + record + Aufnahme - - Drum - Schlagzeug + + mute + Stumm - - Do you want to use same port and channel for all instruments in the drummap? - Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss und Kanal verwenden? + + solo mode + Solo Modus - - Unused Devices - Ungenutzte Geräte + + input routing + Eingangs-Signalfluss - - - MusEGui::TempoSig - - Tempo/Sig - Tempo/Taktmaß + + output routing + Ausgangs-Signalfluss - MusEGui::Toolbar1 + MusEGui::MidiSyncConfig - - - - Off - Aus + + + Port Number + Portnummer - - Solo - Solo + + + Name of the midi device associated with this port number + Name des Midi Gerätes an dieser Portnummer - - Cursor - Cursor + + Midi clock input detected + Midi-Uhr Eingang erkannt - - Snap - Magnet + + + Midi tick input detected + Midi-Tick Eingang erkannt - - - MusEGui::TopWin - - As subwindow - Als Unterfenster + + Midi real time input detected + Midi Echtzeiteingang erkannt - - Shares tools and menu - Teilt sich Toolbar und Menü + + MMC input detected + MMC Eingang erkannt - - Fullscreen - Vollbild + + MTC input detected + MTC Eingang erkannt - - Piano roll - Pianoroll + + Detected SMPTE format + SMPTE-Format erkannt - List editor - Listeneditor + Receive id number. 127 = Global. Double click to edit. + - Drum editor - Schlagzeugeditor + Accept midi clock input + Akzeptiere Midi-Uhr-Eingang - Master track editor - Masterspur-Editor + Accept midi real time input + Akzeptiere Midi-Echtzeit-Eingang - Master track list editor - Masterspur-Listeneditor + Accept MMC input + Akzeptiere MMC-Eingang - Wave editor - Wave-Editor + Accept MTC input + Akzeptiere MTC-Eingang - Clip list - Cliplist + Receive start rewinds before playing + Das Empfangen von "Start" spult vor dem Abspielen zurück - Marker view - Marker-Fenster + Transmit id number. 127 = Global. Double click to edit. + - Score editor - Partitureditor + Send midi clock output + - Arranger - Arrangierer + Send midi realtime output + - <unknown toplevel type> - <unbekannter Fenstertyp> + + Send MMC output + - - - MusEGui::TrackComment - - MusE: Track Comment - MusE: Spur-Kommentar + + + Send MTC output + - - Track Comment: - Spur-Kommentar: + + Midi clock input detected. +Current port actually used is red. +Click to force a port to be used. + Midi-Uhr-Eingang erkannt. +Der momentan verwendete Anschluss ist rot. +Klicken Sie, um einen anderen Anschluss zu erzwingen. - - - MusEGui::Transport - - Overdub - Überschreiben + + Midi realtime input detected, including + start/stop/continue, and song position. + Midi-Echtzeit-Eingang erkannt, einschließlich +Start/Stopp/Fortsetzen und Liedposition. - - Replace - Ersetzen + MMC input detected, including stop/play/deferred play, and locate. + MMC-Eingang erkannt, einschließlich Stopp/Play/Verzögertes Play und Position. - - Rec Mode - Modus "Aufnahme" + + MTC input detected, including forward quarter-frame sync and full-frame locate. +Current port actually used is red. Click to force a port to be current. + MTC-Eingang erkannt, einschließlich Vorwärts-Viertel-Frame-Synchronisation und +Voll-Frame-Positionserkennung. Der momentan verwendete Anschluss ist rot. +Klicken Sie, um einen anderen Anschluss zu erzwingen. - - Normal - Normal + + Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detects format of MTC quarter and full frame, and MMC locate. + + + + + Receive id number. 127 = global receive all, even if not global. + - Mix - Mischen + Accept midi clock input. Only one input is used for clock. +Auto-acquire: If two or more port realtime inputs are enabled, + the first clock detected is used, until clock is lost, + then another can take over. Best if each turns off its clock + at stop, so MusE can re-acquire the clock from another port. +Click on detect indicator to force another. + Midi-Uhr-Eingang akzeptieren. Nur ein Eingang wird für die +Uhr benutzt. Auto-Benutzen: Wenn mehr als ein Echtzeiteingang +aktiviert ist, wird die erste erkannte Uhr genutzt, bis sie verloren +geht. Dann übernimmt eine andere. Es ist am besten, wenn jeder +seine Uhr beim Stopp ausschaltet, damit MusE die Uhr von einem +anderen Anschluss benutzen kann. Klicken Sie auf den Erkennungs- +Indikator, um eine andere zu erzwingen. - Cycle Rec - Aufnahme in Schleife + Accept midi realtime input, including + start/stop/continue, and song position. +Non-clock events (start,stop etc) are + accepted by ALL enabled ports. +This means you may have several master + devices connected, and muse will accept + input from them. + Akzeptiere MIDI-Echtzeit-Eingänge, einschließlich +Start/Stopp/Fortsetzen und Liedposition. +Nicht-Uhr-Ereignisse (Start/Stopp etc.) werden von +ALLEN aktivierten Anschlüssen angenommen. +Das bedeutet, dass Sie mehrere Master-Geräte +verbinden können, und MusE wird deren Daten +annehmen. - - punchin - Aufnahme am linken Marker beginnen + + Accept MMC input, including stop/play/deferred play, and locate. + Akzeptiere MMC-Eingang, einschließlich Stopp/Play/Verzögertes Play und Position. - loop - Schleife + Accept MTC input, including forward quarter-frame sync and full-frame locate. +See 'rc' column for more help. + MTC-Eingang erkannt, einschließlich Vorwärts-Viertel-Frame-Synchronisation und +Voll-Frame-Positionserkennung. Siehe die "rc"-Spalte für mehr Hilfe. - - punchout - Aufnahme am rechten Marker beenden + + When start is received, rewind before playing. +Note: It may be impossible to rewind fast + enough to synchronize with the external device. + Wenn Start empfangen wird, wird vor dem Abspielen +zurückgespult. +Hinweis: Es könnte unmöglich sein, schnell genug +zurückzuspulen, um mit dem externen Gerät synchron +zu bleiben. - - Punch In - Aufnahme am linken Marker beginnen + Transmit id number. 127 = global transmit to all. + - - - Loop - Schleife + + Send midi clock output. If 'Slave to External Sync' is chosen, + muse can re-transmit clock to any other chosen ports. + Sende Midi-Uhr-Ausgang. Wenn "Binde an Externe Sync" gewählt ist, +kann MusE das Uhr-Signal an andere ausgewählte Anschlüsse +weiterleiten. - - - Punch Out - Aufnahme am rechten Marker beenden + + Send midi realtime output, including start/stop/continue, + and song position. If 'Slave to external sync' is chosen, + muse can re-transmit midi realtime input messages to any + other chosen ports. This means you may have several slave + devices connected, and muse can re-send realtime messages + to any or all of them. + Sende Midi-Echtzeit Ausgang, einschließlich Start/Stopp/ +Fortsetzen und Liedposition. Wenn "Binde an externe Sync." +aktiviert ist, kann MusE Midi Echtzeit-Eingangsnachrichten an +andere ausgewählte Anschlüsse weiterleiten. Das bedeutet, +dass Sie mehrere "Sklaven"-Geräte verbinden können, und MusE +Echtzeitnachrichten an einige oder alle weiterleiten kann. - - Left Mark - Linker Marker + + Port + Anschluss - - Right Mark - Rechter Marker + + Device Name + Gerätename + + + + c + c + + + + k + k + + + + r + r + + + + m + m + + + + t + t - - rewind to start - Zum Start zurück + + type + Typ - Click this button to rewind to start position - Klicken Sie auf diese Schaltfläche, um zur Startposition zurückzukehren + rid + rid - - rewind - Einen Taktschlag rückwärts + + rc + rc - - Click this button to rewind - Klicken Sie auf diese Schaltfläche, um einen Taktschlag rückwärts zu springen + + rr + rr - - forward - Einen Taktschlag vorwärts + + rm + rm - - Click this button to forward current play position - Klicken Sie auf diese Schaltfläche, um einen Taktschlag vorwärts zu springen + + rt + rt - - stop - Stopp + + rw + rw - - Click this button to stop playback - Klicken Sie auf diese Schaltfläche, um die Wiedergabe zu stoppen + + tid + tid - - play - Wiedergabe + + tc + tc - Click this button to start playback - Klicken Sie auf diese Schaltfläche, um die Wiedergabe zu starten + tr + tr - - record - Aufnahme + + tm + tm - Click this button to enable recording - Klicken Sie auf diese Schaltfläche, um in den Modus "Aufnahme" zu gelangen + tt + tt - - AC - AC + + MusE + MusE - - quantize during record - Während Aufnahme quantisieren + + Settings have changed +Apply sync settings? + Einstellungen wurden geändert. +Sync-Einstellungen anwenden? - Click - Klick + &Apply + &Anwenden - metronom click on/off - Metronom Klick an/aus - - - - Sync - Sync + &No + &Nein - external sync on/off - Externer Sync an/aus + &Abort + A&bbrechen - - Jack - Jack + + <none> + <kein> + + + MusEGui::MidiTrackInfo - - Jack transport sync on/off - Jack-Transport-Synchronisation an/aus + + + <unknown> + <unbekannt> + + + MusEGui::MidiTransformerDialog - - Master - Master + + + New + Neu + + + MusEGui::MixdownFileDialog - - use master track - Masterspur einschalten + + Wave Files (*.wav);;All Files (*) + Wave Dateien (*.wav);;Alle Dateien (*) - MusEGui::VisibleTracks + MusEGui::MusE - - - Show wave tracks - Zeige Wave-Spuren + + + Failed to start audio! + Audio konnte nicht gestartet werden! - - - Show group tracks - Zeige Gruppen-Spuren + + Was not able to start audio, check if jack is running. + + Audio konnte nicht gestartet werden, überprüfen Sie, ob Jack läuft. - - - Show aux tracks - Zeige Aux-Spuren + + Timeout waiting for audio to run. Check if jack is running. + + Timeout beim Warten auf Audio. Überprüfen Sie, ob Jack läuft. - - - Show input tracks - Zeige Eingangs-Spuren + + Und&o + &Rückgängig - - - Show output tracks - Zeige Ausgangs-Spuren + + Re&do + &Wiederholen - - - Show midi tracks - Zeige Midi-Spuren + + undo last change to song + Letzte Änderung am Lied rückgängig machen - - - Show synth tracks - Zeige Synth-Spuren + + redo last undo + Letztes Rückgängigmachen wiederholen - - Visible track types - Sichtbare Spurtypen + + Loop + Schleife - - - MusEGui::WaveEdit - - &Edit - &Bearbeiten + + loop between left mark and right mark + Schleife zwischen linkem und rechtem Marker - - Func&tions - &Funktionen + + Punchin + Aufnahme am linken Marker beginnen - - &Gain - &Verstärkung + + record starts at left mark + Aufnahme am linken Marker beginnen - 200% - 200% + + Punchout + Aufnahme am rechten Marker beenden - 150% - 150% + + record stops at right mark + Aufnahme am rechten Marker beenden - 75% - 75% + + Start + Start - 50% - 50% + + rewind to start position + Zur Startposition springen - 25% - 25% + + Rewind + Einen Taktschlag rückwärts - - Other - Andere + + rewind current position + Einen Taktschlag rückwärts - - &Copy - &Kopieren + + Forward + Einen Taktschlag vorwärts - - C&ut - &Ausschneiden + + move current position + Einen Taktschlag vorwärts - &Paste - &Einfügen + Stop + Stopp - - Edit in E&xternal Editor - In e&xternem Editor bearbeiten + + stop sequencer + Wiedergabe beenden - - Mute Selection - Auswahl stummschalten + + Play + Wiedergabe - - Normalize Selection - Auswahl normalisieren + + start sequencer play + Wiedergabe beginnen - - Fade In Selection - Auswahl einblenden + + Record + Aufnahme - - Fade Out Selection - Auswahl ausblenden + + to record press record and then play + Zur Aufnahme erst die Schaltfläche "Aufnahme" und dann "Wiedergabe" klicken - Reverse Selection - Auswahl umkehren + + Panic + Panik - - Select - Auswählen + + send note off to all midi channels + Panik - "Note aus" Befehl an alle Midikanäle senden - - Select &All - Alles a&uswählen + + &New + &Neu - - &Deselect All - Alles ab&wählen + + + Create New Song + Neues Lied erzeugen - - Window &Config - Fenster&konfiguration + + &Open + Lied &öffnen - - Wave edit tools - Werkzeuge "Wave-Edit" + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Auf diese Schaltfläche klicken um ein <em>Neues Lied</em> zu öffnen.<br> Alternativ den Befehl <b>Neues Lied</b> des Menüs "Datei" auswählen. - - transport - Transport + + Open &Recent + &Letztes Lied öffnen - - WaveEdit tools - Werkzeuge "Wave-Edit" + + + + &Save + &Speichern - - Solo - Solo + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Auf diese Schaltfläche klicken um das gerade bearbeitete Lied zu sichern mit der automatischen Aufforderung einen Dateinamen anzugeben. +Alternativ das Lied mit dem Befehl "Sichern" im Menü "Datei" sichern. - - Cursor - Cursor + + Save &As + Speichern &unter - - - MusEGui::WaveView - - MusE - external editor failed - MusE - externer Editor fehlgeschlagen + + Import Midifile + Mididatei importieren - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. - MusE konnte den externen Editor nicht starten. -Überprüfen Sie, ob die Editor-Einstellung in: -Globale Einstellungen -> Audio:Externer Waveeditor -stimmt. + Export Midifile + Mididatei exportieren - - MusE - file size changed - MusE - Dateigröße geändert + + Import Part + Part importieren - - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted - Wenn Sie im externen Editor editieren, sollten Sie die Dateigröße -nicht verändern, weil die es in den ausgewählten Bereich passen muss. - -Fehlende Daten werden stummgeschaltet + + + Import Wave File + Wavedatei importieren - - - MusEMixer::AudioMixerApp - &Create - &Erzeugen + + Find unused wave files + Finde ungenutzte Wave-Dateien - &View - &Zeigen + + &Quit + &Beenden - Routing - Signalfluss + + Song Info + Liedinfo - Show Midi Tracks - Zeige Midi-Spuren + + Transport Panel + Transportkonsole - Show Drum Tracks - Zeige Schlagzeug-Spuren + + Bigtime Window + Große Zeitanzeige - Show Wave Tracks - Zeige Wave-Spuren + + Mixer A + Mixer A - Show Inputs - Zeige Eingänge + + Mixer B + Mixer B - Show Outputs - Zeige Ausgänge + + Cliplist + Cliplist - Show Groups - Zeige Gruppen + + Marker View + Marker-Fenster - Show Auxs - Zeige Aux + + Arranger View + Arranger-Fenster - Show Synthesizers - Zeige Synthesizer + + Fullscreen + Vollbild - - - MusEMixer::AudioStrip - panorama - Panorama + + &Plugins + &Plugins - aux send level - Aux Send Pegel + + Edit Instrument + Instrument bearbeiten - Pan - Pan + + Input Plugins + Eingangs-PlugIns - 1/2 channel - 1/2 Kanäle + + Transpose + Transponieren - Pre - Pre + + Midi Input Transform + Midi Eingang transformieren - pre fader - post fader - Vor Regler - nach Regler + + Midi Input Filter + Midi Eingangsfilter - dB - dB + + Midi Remote Control + Midi Fernbedienung - record - Aufnahme + + Rhythm Generator + Rhythmusgenerator - mute - stumm + + Reset Instr. + Instrument zurücksetzen - record downmix - Abmischung aufnehmen + + Init Instr. + Instrument initialisieren - solo mode - Solo Modus + + Local Off + Lokal aus - off - Aus + + Bounce to Track + Auf Spur abmischen - iR - iR + + Bounce to File + In Datei abmischen - input routing - Eingangs-Signalfluss + + Restart Audio + Audio erneut starten - oR - oR + + Mixer Automation + Mischpult Automatisierung - output routing - Ausgangs-Signalfluss + + Take Snapshot + Schnappschuss aufnehmen - Off - Aus + + Clear Automation Data + Automatisierungsdaten löschen - Read - Lesen + + Cascade + Staffeln - Touch - Berühren + + Tile + Kacheln - Write - Schreiben + + In rows + In Reihen - automation type - Automatisationstyp + + In columns + In Spalten - - - MusEMixer::EffectRack - effect rack - Effekteinschub + + Global Settings + Globale Einstellungen - new - neu + + Configure Shortcuts + Tastenkürzel einstellen - change - ändern + + Follow Song + Folge dem Lied - move up - Nach oben bewegen + + Don't Follow Song + Folge dem Lied nicht - move down - Nach unten bewegen + + Follow Page + Folge dem Lied seitenweise - remove - entfernen + + Follow Continuous + Folge dem Lied ständig - bypass - übergehen + + Metronome + Metronom - show gui - GUI anzeigen + + Midi Sync + Midi Sync - show native gui - Native GUI anzeigen + + Midi File Import/Export + Midi-Datei Import/Export - save preset - Preset speichern + + Appearance Settings + Erscheinungsbild einstellen - MusE: Save Preset - MusE: Preset speichern + + Midi Ports / Soft Synth + Midi Anschlüsse / Software Synthesizer - Replace effect - Effekt ersetzen + + &Manual + &Handbuch - Do you really want to replace the effect %1? - Möchten Sie wirklich den Effekt %1 ersetzen? + + &MusE Homepage + &MusE Webseite - - - MusEMixer::MidiStrip - VariationSend - VariationSend + + &Report Bug... + &Fehler melden ... - Var - Var + + &About MusE + &Über MusE - ReverbSend - ReverbSend + + Song Position + Song-Position - Rev - Rev + + Tempo + Tempo - ChorusSend - ChorusSend + + Signature + Taktmaß - Cho - Cho + + File Buttons + Datei-Knöpfe - dB - dB + + Undo/Redo + Rückgängig/Wiederholen - Pan/Balance - Pan/Balance + + Transport + Transport - record - Aufnahme + + &File + &Datei - mute - still + + &View + &Zeigen - solo mode - Solo Modus + + &Midi + &Midi - iR - iR + + &Audio + &Audio - input routing - Eingangs-Signalfluss + + A&utomation + A&utomatisierung - oR - oR + + &Windows + F&enster - output routing - Ausgangs-Signalfluss + + MusE Se&ttings + MusE Ei&nstellungen - - - MusEWidget::BigTime - minute - Minute + + &Help + &Hilfe - second - Sekunde + + About &Qt + Über &Qt - frame - Rahmen + + Cannot read template + Vorlage nicht lesbar - subframe - Subrahmen + + File open error + Fehler beim Datei öffnen - MusE: Bigtime - MusE: Zeitanzeige groß + + File read error + Fehler beim Datei lesen - - - MusEWidget::EditToolBar - Edit Tools - Werkzeuge bearbeiten + + Unknown File Format: %1 + Unbekanntes Dateiformat: %1 - - - MusEWidget::MidiSyncConfig - Port Number - Anschlussnummer + + + + MusE: Song: %1 + MusE: Lied: %1 - Name of the midi device associated with this port number - Name des Midi Gerätes an dieser Anschlussnummer + + MusE: load project + Muse: Projekt laden - Device Name - Gerätename + + MusE: load template + Muse: Vorlage laden - m - min + + MusE: Write File failed + MusE: Datei schreiben schlug fehl - MusE - MusE + + The current Project contains unsaved data +Save Current Project? + Das aktuelle Projekt enthält ungesicherte Daten +Aktuelles Projekt sichern? - &Apply - &Anwenden + + + S&kip + &Überspringen - &No - &Nein + + &Cancel + &Abbrechen - &Abort - &Abbrechen + + MusE: Save As + MusE: Speichern unter - <none> - <kein> + + + Nothing to edit + Es gibt nichts zu editieren - - - MusEWidget::MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Wave Dateien (*.wav);;Alle Dateien (*) + + + + + + MusE: Bounce to Track + MusE: Auf Spur abmischen - - - MusEWidget::NoteInfo - Note Info - Noteninformation + + No wave tracks found + Keine Wave-Tracks gefunden - Start - Start + + + No audio output tracks found + Keine Audio-Tracks gefunden - Len - Länge + + Select one audio output track, +and one target wave track + Wählen Sie eine Audio-Ausgangsspur +und eine Ziel-Wave-Spur - Velo On - Velo an + + Select one target wave track + Wählen Sie eine Ziel-Wave-Spur - Velo Off - Velo aus + + Select one target wave track, +and one audio output track + Wählen Sie eine Ziel-Wave-Spur +und eine Audio-Ausgangs-Spur - - - MusEWidget::RoutePopupMenu - Channel - Kanal + + + MusE: Bounce to File + MusE: In Datei abmischen - <none> - <kein> + + Select one audio output track + Wählen Sie eine Audio-Ausgangs-Spur - - - MusEWidget::ScrollScale - next page - Nächste Seite + + MusE: Bounce + MusE: Abmischen - previous page - Vorherige Seite + + set left/right marker for bounce range + Linken/rechten Marker für Abmischbereich einstellen - current page number - Aktuelle Seitennummer + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Das aktuelle Projekt enthält ungesicherte Daten +Neues Lied laden überschreibt das aktuelle Projekt: +Aktuelles Projekt sichern? - - - MusEWidget::ShortcutCaptureDialog - Ok - Bestätigen + + + &Abort + &Abbrechen - Cancel - Abbrechen + + This will clear all automation data on + all audio tracks! +Proceed? + Dies wird alle Automatisierungsdaten +von allen Audiospuren löschen! +Fortsetzen? - Undefined - unbestimmt + + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? + Dies nimmt an der momentanen Position +einen Automatisierungs-Schnappschuss +aller Controller von allen Audiospuren auf. +Fortsetzen? - - - MusEWidget::SigScale - signature scale - Skala Taktmaß + + MusE: Export Midi + MusE: Midi exportieren - - - MusEWidget::Toolbar1 - Solo - Solo + + no help found at: + Hilfe wurde nicht gefunden: - Snap - Magnet + + MusE: Open Help + MusE: Hilfe öffnen - - - MusEWidget::TrackComment - MusE: Track Comment - MusE: Spur Kommentar + + Unable to launch help + Konnte Hilfe nicht starten - Track Comment: - Spur Kommentar: + + For some reason MusE has to launch the default +browser on your machine. + Aus irgendeinem Grund muss MusE den Standardbrowser auf Ihrem System starten. - - - MusEWidget::VisibleTracks - Visible track types - Sichtbare Spurtypen + + MusE: Import Midi + MusE: Midi importieren - - - NoteInfo - Start - Start + + Add midi file to current project? + + Mididatei zu aktuellem Lied hinzufügen? - Len - Länge + + &Add to Project + Zu Lied hin&zufügen - Pitch - Tonhöhe + + &Replace + Erset&zen - Velo On - Velo an + + reading midifile + + Lese Mididatei + - Velo Off - Velo aus + + +failed: + +schlug fehl: - Note Info - Noteninformation + + Import part is only valid for midi and wave tracks! + Part importieren ist nur möglich für MIDI und WAVE-Spuren! - - - OrganGuiBase - - MusE: Organ - MusE: Orgel + + MusE: load part + MusE: Part laden - Drawbars - Register + No track selected for import + Keine Spur ist für den Import ausgewählt + + + + %n part(s) out of %1 could not be imported. +Likely the selected track is the wrong type. + + %n Part von insgesamt %1 konnte nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + %n Parts von insgesamt %1 konnten nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + + + + + %n part(s) could not be imported. +Likely the selected track is the wrong type. + + %n Part konnte nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + %n Parts konnten nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + - - 16' - 16' + + to import an audio file you have first to selecta wave track + um eine Audio-Datei zu importieren müssen Sie erst ein Wave-Spur auswählen - - 4' - 4' + + Import Wavefile + Wavedatei importieren - - 2 2/3' - 2 2/3' + + This wave file has a samplerate of %1, +as opposed to current setting %2. +Do you still want to import it? + Diese Wavedatei hat eine samplerate von %1, +im Gegensatz zur momentanen Einstellung %2. +Möchten Sie sie dennoch importieren? - - 2' - 2' + + &Yes + &Ja - - 5 1/3' - 5 1/3' + + &No + &Nein + + + + MusEGui::NoteInfo + + + Note Info + Noteninformation - 8' - 8' + delta/absolute mode + Delta-/Absolutmodus - - Envelope Hi - Hüllkurve Hoch + + Start + Start - - - Release - Release + + Len + Länge - - - Sustain - Sustain + + Pitch + Tonhöhe - - - Decay - Decay + + Velo On + Velo an - - - Attack - Attack + + Velo Off + Velo aus + + + MusEGui::PartCanvas - - - - - - - ms - ms + + Cannot copy/move/clone to different Track-Type + Kopieren/verschieben/klonen auf anderen Spurtyp nicht möglich - - - cB - cB + + C&ut + &Ausschneiden - - Envelope Lo - Hüllkurve Niedrig + + &Copy + &Kopieren - - O-1 - O-1 + + s&elect + &wähle - - Oscillator - Oszillator + + clones + Klone - - Brass - Blech + + rename + Umbenennen - - Reed - Holz + + color + Farbe - - Flute - Flöte + + delete + löschen - - Velocity - Dynamik + + split + Schnitt - - - PageSettings - Track Name - Spur Name + + glue + Verbinder - - - PartCanvas - C&ut - &Ausschneiden + + super glue (merge selection) + Super-Kleber (Auswahl vereinigen) - &Copy - &Kopieren + + de-clone + Entklonen - rename - Umbenennen + + + + save part to disk + Speichere Part auf Festplatte - delete - Löschen + + wave edit + Wave Editor - split - Schnitt + + file info + Dateiinfo - glue - Verbinder + + MusE: save part + MusE: Speichere Part - pianoroll - Pianorollen Editor + + Part name: %1 +Files: + Part Name: %1 +Dateien: - list - Listen Editor + + Remove selected + Löschen - - drums - Schlagzeug Editor + + + %n part(s) out of %1 could not be pasted. +Likely the selected track is the wrong type. + + %n Part von insgesamt %1 konnte nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + %n Parts von insgesamt %1 konnten nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + - - Cannot copy/move/clone to different Track-Type - Kopieren/verschieben/klonen auf anderen Spurtyp nicht möglich + + + %n part(s) could not be pasted. +Likely the selected track is the wrong type. + + %n Part konnte nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + %n Parts konnten nicht eingefügt werden. +Wahrscheinlich hat die ausgewählte Spur den falschen Typ. + - color - Farbe + + Cannot paste: multiple tracks selected + Einfügen nicht möglich: mehrere Spuren ausgewählt - de-clone - Entklonen + + Cannot paste: no track selected + Einfügen nicht möglich: keine Spur ausgewählt - wave edit - Wave Editor + + Can only paste to midi/drum track + Einfügen möglich nur in Midi/Drum Spur - Cannot paste: multiple tracks selected - Einfügen nicht möglich: mehrere Spuren ausgewählt + + Can only paste to wave track + Einfügen möglich nur in Wave Spur - Cannot paste: no track selected - Einfügen nicht möglich: keine Spur ausgewählt + + Can only paste to midi or wave track + Einfügen möglich nur in Midi oder Wave Spur + Cannot paste: wrong data type - Einfügen nicht möglich: falscher Datentyp + Einfügen nicht möglich: falscher Datentyp + + + + MusEGui::PasteDialog + + + %n quarter(s) + + %n Viertelnote + %n Viertelnoten + - Can only paste to midi/drum track - Einfügen möglich nur in Midi/Drum Spur + + %1 quarter + for floating-point arguments like 1.5 + %1 Viertelnote - Can only paste to wave track - Einfügen möglich nur in Wave Spur + + %1 quarters + for floating-point arguments like 1.5 + %1 Viertelnoten - PasteDialog + MusEGui::PasteEventsDialog + %n quarter(s) - + %n Viertelnote %n Viertelnoten - quarter - Viertelnote + + %1 quarter + for floating-point arguments like 1.5 + %1 Viertelnote - quarters - Viertelnoten + + %1 quarters + for floating-point arguments like 1.5 + %1 Viertelnoten - PasteDialogBase + MusEGui::PianoRoll - - MusE: Paste Parts - MusE: Parts einfügen + + &Edit + &Bearbeiten - - Number and raster - Anzahl und Raster + + C&ut + &Ausschneiden - - insert - füge + + &Copy + &Kopieren - - times - mal ein + + Copy events in range + Kopiere Events im Bereich - - raster - Raster + + &Paste + &Einfügen - - ticks - Ticks + + Paste (with dialog) + Einfügen (Dialog zeigen) - - Move, Merge, Clone - Verschieben, Vereinigen, Klonen + + Delete &Events + &Events löschen - - Move everything to the right - Alles nach rechts verschieben + + &Select + &Auswählen - - Move only affected parts to the right - Nur betroffene Parts nach -rechts verschieben + + Select &All + Alles a&uswählen - - Put everything into a single track - Alles in einzelne Spur einfügen + + &Deselect All + Alles ab&wählen - - Merge with existing parts - Mit existierenden Parts vereinigen + + Invert &Selection + Auswa&hl umkehren - - Insert as clones (where possible) - Als Klone einfügen (wenn möglich) + + &Inside Loop + Bereich &innerhalb der Schleife - - OK - Bestätigen + + &Outside Loop + Bereich außerhalb der Schlei&fe - - Cancel - Abbrechen + + &Previous Part + Vorheriger &Part - - - PasteEventsDialogBase - - MusE: Paste Events - MusE: Events einfügen + + &Next Part + &Nächster Part - - Number and raster - Anzahl und Raster + + Fu&nctions + &Funktionen - - insert - füge + + Quantize + Quantisieren - - times - mal ein + + Modify Note Length + Notenlänge verändern - - raster - Raster + + Modify Velocity + Anschlagsdynamik ändern - - - ticks - Ticks + + Crescendo/Decrescendo + Crescendo/Decrescendo - - Paste options - Optionen fürs Einfügen + + Transpose + Transponieren - - Always into existing parts - Immer in existierende Parts + + Erase Events + Events löschen - - Never into existing parts - Nie in existierende Parts + + Move Notes + Noten verschieben - - Into existing parts if part has not -to be expanded by more than - In existierende Parts, wenn der Part -erweitert werden muss um nicht mehr als + + Set Fixed Length + Länge festlegen - - Put everything into the (selected) part - Alles in den (ausgewählten) Part einfügen + + Delete Overlaps + Überlappungen entfernen - - OK - Bestätigen + + Legato + Legato + + + + &Plugins + &Plugins + + + + Window &Config + Fenster&konfiguration + + + + &Event Color + &Eventfarbe - - Cancel - Abbrechen + + &Blue + &Blau - - - PatchBay - MusE: ALSA MIDI Patch Bay - MusE: ALSA Midi Verbindungsübersicht + + &Pitch colors + Farbe nach &Tonhöhe - - - PatchBayBase - ALSA Patch Bay - ALSA Verbindungsübersicht + + &Velocity colors + Farbe nach &Anschlagsdynamik - - - PianoRoll - &Edit - &Bearbeiten + + Pianoroll tools + Werkzeug "Pianorollen Editor" - Cut - Ausschneiden + + Step Record + Aufnahme taktschlagweise - Copy - Kopieren + + Midi Input + Midi Eingang - Paste - Einfügen + + Play Events + Ereignisse abspielen - Delete Events - Ereignisse löschen + + ctrl + Ctrl - Select All - Alle auswählen + + Add Controller View + Controlleransicht hinzufügen + + + MusEGui::PluginDialog - Select None - Nichts auswählen + + MusE: select plugin + MusE: PlugIn wählen - Invert - Auswahl umkehren + + Type + Typ - Inside Loop - Auswahl innerhalb Schleife + + Lib + Lib - Outside Loop - Auswahl außerhalb Schleife + + Label + Beschriftung - &Select - &Auswählen + + Name + Name - blue - Farbe blau + + AI + Al - pitch colors - Farbe nach Tonhöhe + + AO + AO - velocity colors - Farbe nach Anschlagsstärke + + CI + Cl - &Config - &Einstellen + + CO + CO - event color - Ereignisfarbe + + IP + IP - &Functions - &Funktionen + + id + id - Over Quantize - Überquantisieren + + Maker + Erzeuger - Note On Quantize - Wert "Note an" quantisieren + + Copyright + Copyright - Note On/Off Quantize - Wert "Note an/aus" quantisieren + + Audio inputs + Audio-Eingänge - Iterative Quantize - Iteratives quantisieren + + Audio outputs + Audio-Ausgänge - Pianoroll Tools - Werkzeug "Pianorollen Editor" + + Control inputs + Steuerungs-Eingänge - Step Record - Aufnahme taktschlagweise + + Control outputs + Steuerungs-Ausgänge - Midi Input - Midi Eingang + + In-place capable + In-Place-fähig - Play Events - Ereignisse abspielen + + ID number + ID-Nummer - Add Controller View - Kontrolleransicht hinzufügen + + Ok + Bestätigen - Config Quant... - Quantisierung einstellen ... + + Cancel + Abbrechen - Modify Gate Time - Gate Zeit ändern + + Show plugs: + Zeige Plugins: - Modify Velocity - Velocity ändern + + Mono and Stereo + Mono und Stereo - Crescendo - Crescendo + + Stereo + Stereo - Transpose - Transponieren + + Mono + Mono - Thin Out - Ausdünnen + + Show All + Zeige alle - Erase Event - Ereignis löschen + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + Wählen Sie aus, welche Plugintypen in der Liste sichtbar sein sollen.<br>Es ist kein Problem, Mono-Plugins auf Stereospuren zu verwenden; dann werden zwei parallel verwendet.<br>Beachten Sie, dass die "Alle"-Alternative Plugings beinhaltet, die nicht in einem Effekteinschub nützlich sein könnten. - Note Shift - Note verschieben + + dssi synth + DSSI-Synth - Move Clock - Zeitposition verschieben + + dssi effect + DSSI-Effekt - Copy Measure - Taktmaß kopieren + + ladspa + LADSPA - Erase Measure - Taktmaß löschen + + Search in 'Label' and 'Name': + Suche in "Beschriftung" und "Name": + + + MusEGui::PluginGui - Delete Measure - Taktmaß löschen + + File Buttons + Datei-Knöpfe - Create Measure - Taktmaß erzeugen + + Load Preset + Vorlage laden - ctrl - Ktrl + + Save Preset + Speicher Preset - C&ut - &Ausschneiden + + + bypass plugin + Signalfluss PlugIn überspringen - &Copy - &Kopieren + + MusE: load preset + MusE: Vorlage laden - Select &All - Alles a&uswählen + + Error reading preset. Might not be right type for this plugin + Fehler beim Lesen der Vorlage. Könnte der falsche Typ für dieses Plugin sein - &Deselect All - Alles ab&wählen + + MusE: save preset + MusE: Vorlage sichern + + + MusEGui::ProjectCreateImpl - Invert &Selection - Auswa&hl umkehren + + Select directory + Verzeichnis auswählen + + + MusEGui::RoutePopupMenu - &Inside Loop - Bereich &innerhalb der Schleife + + + + + + + + + Channel + Kanal - &Outside Loop - Bereich außerhalb der Schlei&fe + + + + Soloing chain + Solo-Kette - Quantize - Quantisieren + + + Audio returns + Audio-Rückkanäle - Crescendo/Decrescendo - Crescendo/Decrescendo + + Warning: No input devices! + Warnung: Keine Eingangsgeräte! - Move Notes - Noten verschieben + + Open midi config... + Öffne MIDI-Konfig... - Set Fixed Length - Länge festlegen + + + + + <none> + <kein> - Delete Overlaps - Überlappungen entfernen + + Toggle all + Alles umwählen - Legato - Legato + + More... + Mehr... - &Plugins - &Plugins + + Audio sends + Audio-Sender - panic - Panik + + Midi port sends + Midiport-Sender - PluginDialog - - Ok - Bestätigen - + MusEGui::ScoreCanvas - Cancel - Abbrechen + + Treble + Violinschlüssel - MusE: select plugin - MusE: PlugIn wählen + + Bass + Bassschlüssel - Lib - Lib + + Grand Staff + Beide Schlüssel - Label - Beschriftung + + Remove staff + Notenzeile entfernen - Name - Name + + Ambiguous part + Unklarer Part - AI - Al + + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + Es gibt zwei oder mehr mögliche Parts, zu denen man die Note hinzufügen könnte, aber keiner ist der ausgewählte. Bitte wählen Sie den Ziel-Part aus, indem Sie auf eine beliebige Note, die zu ihm gehört, klicken, und versuchen Sie es erneut, oder fügen Sie eine neue Notenzeile hinzu, die nur den Zielpart enthält. - AO - AO + + No part + Kein Part - CI - Cl + + There are no parts you could add the note to. + Es gibt keine Parts, zu denen man die Note hinzufügen könnte. + + + MusEGui::ScoreEdit - CO - CO + + Step recording tools + "Taktschlagweise Aufnahme"-Werkzeuge - IP - IP + + Step Record + Aufnahme taktschlagweise - id - id + + Note settings + Noteneinstellungen - Maker - Erzeuger + + Note length: + Notenlänge: - Copyright - Copyright + + last + letzte - Select which types of plugins should be visible in the list,<br>beware that 'all' includes plugins that probably are not usable by MusE. - Typen in Liste dargestellter PlugIns auswählen, "all" beinhaltet auch in MusE womöglich nicht nutzbare PlugIns. + + + + Apply to new notes: + Für neue Noten: - Stereo and Mono - Stereo und Mono + + + Apply to selected notes: + Für markierte Noten: - Stereo - Stereo + + Velocity: + Dynamik: - Mono - Mono + + Off-Velocity: + Loslassdynamik: - All - alle + + Quantisation settings + Quantisierungseinstellungen - - - PluginGui - bypass plugin - Signalfluss PlugIn umleiten + + Quantisation: + Quantisierung: - MusE: load preset - MusE: Vorlage laden + + Pixels per whole: + Pixel pro ganze Note: - MusE: save preset - MusE: Vorlage sichern + + &Edit + &Bearbeiten - File Buttons - Schaltfläche Datei + + C&ut + &Ausschneiden - Save Preset - Speicher Preset + + &Copy + &Kopieren - - - ProjectCreate - - Create Project - Projekt erzeugen + + Copy events in range + Kopiere Events im Bereich - - Projects folder: - Projektverzeichnis: + + &Paste + &Einfügen - - - - ... - ...... + + Paste (with dialog) + Einfügen (Dialog zeigen) - - Project Name: - Projekt-Name: + + Delete &Events + &Events löschen - - Project is a Template - Projekt ist eine Vorlage + + &Select + &Auswählen - - Project song file type: - Projekt-Lieddatei-Typ: + + Select &All + Alles a&uswählen - - Project Path to song file: - Projektpfad zur Lieddatei: + + &Deselect All + Alles ab&wählen - - Create project folder (recommended for audio projects) - Erzeuge Projektverzeichnis (empfohlen für Audioprojekte) + + Invert &Selection + Auswa&hl umkehren - Browse - Durchsuchen + + &Inside Loop + Bereich &innerhalb der Schleife - - Song information: - Lied-Information: + + &Outside Loop + Bereich außerhalb der Schlei&fe - - - QHeader - Port Number - Anschlussnummer + + Fu&nctions + Fu&nktionen - enable gui for device - GUI für Gerät einschalten + + &Quantize + &Quantisieren - Instrument connected to port - Instrument mit Anschluss verbunden + + Change note &length + Noten&länge verändern - State: result of opening the device - Status: Ergebnis des Geräteanschlusses + + Change note &velocity + &Anschlagsdynamik verändern - mute instrument - Instrument still schalten + + Crescendo/Decrescendo + Crescendo/Decrescendo - sound name - Klangname + + Transpose + Transponieren - quantisation -currently not used - Quantisierung -gegenwärtig nicht benutzt + + Erase Events + Events löschen - this input note triggers the sound - Diese Eingangsnote löst den Klang aus + + Move Notes + Noten verschieben - note length - Notenlänge + + Set Fixed Length + Feste Notenlänge setzen - this note is send for the sound - Diese Note wird für den Klang verwendet + + Delete Overlaps + Überlappungen entfernen - output channel -currently not used - Ausgangskanal -gegenwärtig nicht benutzt + + Legato + Legato - output port -currently not used - Ausgangsanschluss -gegenwärtig nicht benutzt + + Window &Config + Fenster&konfiguration - velocity level 1 - Velocity Pegel 1 + + Note head &colors + Notenkopf-&Farben - velocity level 2 - Velocity Pegel 2 + + &Black + &Schwarz - velocity level 3 - Velocity Pegel 3 + + &Velocity + Je nach &Dynamik - velocity level 4 - Velocity Pegel 4 + + &Part + Je nach &Part - quantisation - Quantisierung + + Set up &preamble + &Preambel einstellen - output channel - Ausgangskanal + + Display &key signature + &Vorzeichen anzeigen - output port - Ausgangsanschluss + + Display &time signature + &Takt anzeigen - Enable Recording - Aufnahme einschalten + + Set Score &name + Partitur&name setzen - Mute Indicator - Anzeige "Stille" + + + Enter the new score title + Geben Sie den neuen Titel ein - Solo Indicator - Anzeige "Solo" + + Error + Fehler - Track Type - Spurtyp + + Changing score title failed: +the selected title is not unique + Das Ändern des Titels ist fehl- +geschlagen: Der eingegebene +Titel ist nicht einzigartig + + + MusEGui::ScrollScale - Track Name - Spurname + + next page + Nächste Seite - Output Channel Number - Ausgangskanalnummer + + previous page + Vorherige Seite - Output Port - Ausgangsanschluss + + current page number + Aktuelle Seitennummer + + + MusEGui::ShortcutCaptureDialog - Time Lock - Sperre "Zeit" + + Ok + Bestätigen - Solo/Pre Fader Listening - Solo/Vor Regler Abhöre + + Cancel + Abbrechen - Name of the midi device associated with this port number - Name des Midi Gerätes an dieser Anschlussnummer + + Shortcut conflicts with %1 + Tastenkürzel überschneidet sich mit %1 - enables reading from device - Auslesen vom Gerät ermöglichen + + Undefined + Unbestimmt + + + MusEGui::SigScale - enables writing to device - Schreiben zum Gerät ermöglichen + + signature scale + Taktmaß-Skala - QObject + MusEGui::SigToolbarWidget - Other - Andere + + time signature at current position + Taktmaß bei aktueller Position - - - Error - Fehler + + Signature: + Taktmaß: + + + MusEGui::Strip - - - Please first select the range for crescendo with the loop markers. - Bitte wählen Sie erst den Bereich für das Crescendo mit den Bereichsmarkern aus. + + Remove track? + Spur entfernen? - QWidget + MusEGui::TList - - - Cannot convert sysex string - Sysex Kette nicht umwandelbar + + <none> + <kein> - - - Hex String too long (2048 bytes limit) - Hex Kette ist zu lang (Grenze 2048 Bytes) + + visible + sichtbar - - new - Neu + + no clef + kein Notenschlüssel - - create peakfile for - Pegelspitzendatei erzeugen für + + Treble + Violinschlüssel - - MusE: get file name - MusE: Dateinamen übermitteln + + Bass + Bassschlüssel - the directory - - Das Verzeichnis + + Grand + Beide Schlüssel - -does not exist -create? - Es besteht nicht -Erzeugen? + + + off + aus - &Create - &Erzeugen + + <unknown> + <unbekannt> - Cancel - Abbrechen + + MusE: bad trackname + MusE: ungeeigneter Spurname - The directory -%1 -does not exist. -Create it? - Das Verzeichnis -%1 -existiert nicht. -Erzeugen? - - - - MusE: create directory - MusE: Verzeichnis erzeugen + please choose a unique track name + Bitte eindeutigen Spurnamen wählen - - creating dir failed - Verzeichnis erzeugen schlug fehl + + + Update drummap? + Drumbelegung aktualisieren? - - File -%1 -exists. Overwrite? - Die Datei -%1 -existiert. Überschreiben? + + Do you want to use same port for all instruments in the drummap? + Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss verwenden? - - Open File -%1 -failed: %2 - Die Datei "%1" konnte nicht geöffnet werden: %2 + + + &Yes + &Ja - File - - Datei + + + &No + &Nein - -exists - besteht + + + show gui + GUI anzeigen - - MusE: write - MusE: schreiben + + + show native gui + Native GUI anzeigen - Overwrite - Überschreiben + + Midi control + MIDI-Steuerung - Quit - Beenden + + Assign + Zuweisen - Open File - - Datei öffnen + + Clear + Löschen - -failed: - schlug fehl: + + Treble clef + Violinschlüssel - - MusE: Open File - MusE: Datei öffnen + + Bass clef + Bassschlüssel - - - None - Kein + + Grand Staff + Beide Schlüssel - - generic midi - General Midi + + Viewable automation + Sichtbare Automatisierung - - No selection. Ignoring - Keine Auswahl. Ignoriert + + Internal + Intern - - - QuantBase - - MusE: Quantize - MusE: Quantisieren + + Synth + Synth - - Range - Bereich + + Delete Track + Spur löschen - - All Events - Alle Ereignisse + + Track Comment + Spur Kommentar - - Selected Events - Ausgewählte Ereignisse + + Insert Track + Spur einfügen - - Looped Events - Ereignisse innerhalb Schleife + + Midi + Midi - - Selected Looped - Ausgewählt und innerhalb der Schleife + + Drum + Schlagzeug - - Values - Werte + + Do you want to use same port and channel for all instruments in the drummap? + Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss und Kanal verwenden? - - Strength: - Stärke: + + Unused Devices + Ungenutzte Geräte + + + MusEGui::TempoSig - - % - % + + Tempo/Sig + Tempo/Taktmaß + + + MusEGui::TempoToolbarWidget - - Threshold (ticks): - Schwellwert (Ticks): + + tempo at current position + Tempo bei aktueller Position - - Quantize Len - Länge quantisieren + + Tempo: + Tempo: + + + MusEGui::Toolbar1 - - Raster - Raster + + + + Off + Aus - - Whole - Ganze + + Solo + Solo - - Half - Halbe + + Cursor + Cursor - - 4th - Viertel + + Snap + Magnet + + + MusEGui::TopWin - - 4th Triplet - Triolenviertel + + As subwindow + Als Unterfenster - - 8th - Achtel + + Shares tools and menu + Teilt sich Toolbar und Menü - - 8th Triplet - Triolenachtel + + Fullscreen + Vollbild - - 16th - Sechzehntel + + Undo/Redo tools + Rückgängig/Wiederholen-Werkzeuge - - 16th Triplet - Triolensechzehntel + + Panic + Panik - - 32th - 32tel + + Transport + Transport - 32th Triplet - Triolen-32tel + Song Position + Song-Position - - Swing: - Swing: - - - - If the proposed change in tick or length is smaller than threshold, nothing is done. -If swing=0, this is normal -If swing is 33, you get a 2:1-rhythm. -If swing is -33, you get a 1:2-rhythm. - - Wenn die Änderung der Position oder der Länge kleiner als Schwelle ist, wird nichts getan. -Wenn Swing=0, wird normal quantisiert. -Wenn Swing=33, erhalten Sie einen 2:1-Rhythmus. -Wenn Swing=-33, erhalten Sie einen 1:2-Rhythmus. + + Tempo + Tempo - - OK - Bestätigen + + Signature + Taktmaß - - Cancel - Abbrechen + + Piano roll + Pianoroll - - - QuantConfig - Config Quantize - Quantisierung einstellen + + List editor + Listeneditor - Strength - Stärke + + Drum editor + Schlagzeugeditor - Don´t Quantize - Nicht quantisieren + + Master track editor + Masterspur-Editor - Quant Len - Länge quantisieren + + Master track list editor + Masterspur-Listeneditor - MusE: Config Quantize - MusE: Quantisierung einstellen + + Wave editor + Wave-Editor - - - RemoveBase - - MusE: Erase Notes - MusE: Noten löschen + + Clip list + Cliplist - - Range - Bereich + + Marker view + Marker-Fenster - - All Events - Alle Ereignisse + + Score editor + Partitureditor - - Selected Events - Ausgewählte Ereignisse + + Arranger + Arrangierer - - Looped Events - Ereignisse innerhalb Schleife + + <unknown toplevel type> + <unbekannter Fenstertyp> + + + MusEGui::TrackComment - - Selected Looped - Ausgewählt und innerhalb der Schleife + + MusE: Track Comment + MusE: Spur-Kommentar - - Thresholds - Schwellenwerte + + Track Comment: + Spur-Kommentar: + + + MusEGui::Transport - - ticks - Ticks + + Overdub + Überschreiben - - Velocity - Dynamik + + + Replace + Ersetzen - - Length - Länge + + Rec Mode + Modus "Aufnahme" - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wenn nichts ausgewählt ist, wird alles gelöscht.</p> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wenn "Dynamik" ausgewählt ist, werden nur Noten mit Dynamik &lt; Schwelle gelöscht.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wenn beide ausgewählt sind, werden Noten mit Dynamik &lt; Schwelle ODER Länge &lt; Schwelle gelöscht.</p></body></html> + + Normal + Normal - - OK - Bestätigen + + Mix + Mischen - - Cancel - Abbrechen + + Cycle Rec + Aufnahme in Schleife - - - RhythmBase - MusE: Random Rhythm Generator - MusE: Rhythmus Zufallsgenerator + + punchin + Aufnahme am linken Marker beginnen - Instrument Properties - Instrumenteigenschaften + + loop + Schleife - counts/bar - Schläge/Takt + + punchout + Aufnahme am rechten Marker beenden - steps/count - Schritte/Schlag + + + Punch In + Aufnahme am linken Marker beginnen - # bars - # Takte + + + Loop + Schleife - test - testen + + + Punch Out + Aufnahme am rechten Marker beenden - contrib - beitragen + + Left Mark + Linker Marker - randomize - zufällig anordnen + + Right Mark + Rechter Marker - Group 1 - Gruppe 1 + + rewind to start + Zum Start zurück - Group 2 - Gruppe 2 + + Click this button to rewind to start position + Klicken Sie auf diese Schaltfläche, um zur Startposition zurückzukehren - Group 3 - Gruppe 3 + + rewind + Einen Taktschlag rückwärts - Group 4 - Gruppe 4 + + Click this button to rewind + Klicken Sie auf diese Schaltfläche, um einen Taktschlag rückwärts zu springen - Group 5 - Gruppe 5 + + forward + Einen Taktschlag vorwärts - listen - vorhören + + Click this button to forward current play position + Klicken Sie auf diese Schaltfläche, um einen Taktschlag vorwärts zu springen - Instrument - Instrument + + stop + Stopp - Group - Gruppe + + Click this button to stop playback + Klicken Sie auf diese Schaltfläche, um die Wiedergabe zu stoppen - &New - &Neu + + play + Wiedergabe - create new entry - Neuen Eintrag erzeugen + + Click this button to start playback + Klicken Sie auf diese Schaltfläche, um die Wiedergabe zu starten - pressing the New button you create a new entry -in the MusE list of defined controllers - Schaltfläche "Neu" klicken um einen neuen Eintrag -in der MusE Liste definierter Kontroller zu erzeugen + + record + Aufnahme - &Delete - &Löschen + + Click this button to enable recording + Klicken Sie auf diese Schaltfläche, um in den Modus "Aufnahme" zu gelangen - delete selected entry - Ausgewählten Eintrag löschen + + AC + AC - Up - Nach oben + + quantize during record + Während Aufnahme quantisieren - Down - Nach unten + + Click + Klick - Instrument - Instrument + + metronom click on/off + Metronom Klick an/aus - steps/count - Schritte/Schlag + + Sync + Sync - list of defined controllers - Liste definierter Kontroller + + external sync on/off + Externer Sync an/aus - This is the MusE list of defined controllers. - Dies ist die MusE Liste definierter Kontroller. + + Jack + Jack - &File - &Datei + + Jack transport sync on/off + Jack-Transport-Synchronisation an/aus - &Edit - &Bearbeiten + + Master + Master - &Help - &Hilfe + + use master track + Masterspur einschalten + + + MusEGui::VisibleTracks - Tools - Werkzeuge + + + Show wave tracks + Zeige Wave-Spuren - New - Neu + + + Show group tracks + Zeige Gruppen-Spuren - Open - Öffnen + + + Show aux tracks + Zeige Aux-Spuren - &Open... - &Öffnen ... + + + Show input tracks + Zeige Eingangs-Spuren - Save - Sichern + + + Show output tracks + Zeige Ausgangs-Spuren - &Save - &Sichern + + + Show midi tracks + Zeige Midi-Spuren - Save As - Sichern als + + + Show synth tracks + Zeige Synth-Spuren - Save &As... - S&ichern als ... + + Visible track types + Sichtbare Spurtypen + + + MusEGui::WaveEdit - Print - Drucken + + &Edit + &Bearbeiten - &Print... - &Drucken ... + + Func&tions + &Funktionen - Exit - Beenden + + &Gain + &Verstärkung - E&xit - Bee&nden + + Other + Andere - Undo - Rckgängig + + &Copy + &Kopieren - &Undo - &Rückgängig + + C&ut + &Ausschneiden - Redo - Wiederherstellen + + &Paste + &Einfügen - &Redo - &Wiederherstellen + + Edit in E&xternal Editor + In e&xternem Editor bearbeiten - Cut - Ausschneiden + + Mute Selection + Auswahl stummschalten - &Cut - A&usschneiden + + Normalize Selection + Auswahl normalisieren - Copy - Kopieren + + Fade In Selection + Auswahl einblenden - C&opy - Ko&pieren + + Fade Out Selection + Auswahl ausblenden - Paste - Einfügen + + Reverse Selection + Auswahl umkehren - &Paste - Ein&fügen + + Select + Auswählen - Find - Suchen + + Select &All + Alles a&uswählen - &Find... - &Suchen ... + + &Deselect All + Alles ab&wählen - Contents - Inhalte + + Window &Config + Fenster&konfiguration - &Contents... - &Inhalte ... + + WaveEdit tools + Werkzeuge "Wave-Edit" - Index - Verzeichnis + + Solo + Solo - &Index... - &Verzeichnis ... + + Cursor + Cursor + + + MusEGui::WaveView - About - Über + + MusE - external editor failed + MusE - externer Editor fehlgeschlagen - &About... - &Über ... + + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + MusE konnte den externen Editor nicht starten. +Überprüfen Sie, ob die Editor-Einstellung in: +Globale Einstellungen -> Audio:Externer Waveeditor +stimmt. - <b>Notice!</b><br> -Random Rhythm Generator is not enabled yet! - Merke! -Rhythmus Zufallsgenerator noch nicht eingeführt! + + MusE - file size changed + MusE - Dateigröße geändert - Ctrl+N - Strg+N + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + Wenn Sie im externen Editor editieren, sollten Sie die Dateigröße +nicht verändern, weil die es in den ausgewählten Bereich passen muss. + +Fehlende Daten werden stummgeschaltet + + + OrganGuiBase - Ctrl+O - Strg+O + + MusE: Organ + MusE: Orgel - Ctrl+S - Strg+S + + Drawbars + Register - Ctrl+P - Strg+P + + 16' + 16' - Ctrl+Z - Strg+Z + + 4' + 4' - Ctrl+Y - Strg+Y + + 2 2/3' + 2 2/3' - Ctrl+X - Strg+X + + 2' + 2' - Ctrl+C - Strg+C + + 5 1/3' + 5 1/3' - Ctrl+V - Strg+V + + 8' + 8' - Ctrl+F - Strg+F + + Envelope Hi + Hüllkurve Hoch - - - RhythmGenerator - Form3 - Form3 + + + Release + Release - Instrument Settings: - Instrument Einstellungen + + + Sustain + Sustain - Instrument - Instrument + + + Decay + Decay - add - Zufgen + + + Attack + Attack - delete - Entfernen + + + + + + + ms + ms - steps/count - Schritte/Schlag + + + cB + cB - # bars - # Takte + + Envelope Lo + Hüllkurve Niedrig - Group - Gruppe + + O-1 + O-1 - Group 1 - Gruppe 1 + + Oscillator + Oszillator - Group 2 - Gruppe 2 + + Brass + Blech - Group 3 - Gruppe 3 + + Reed + Holz - Group 4 - Gruppe 4 + + Flute + Flöte - Group 5 - Gruppe 5 + + Velocity + Dynamik + + + PasteDialogBase - contrib - beitragen + + MusE: Paste Parts + MusE: Parts einfügen - listen - vorhören + + Number and raster + Anzahl und Raster - Save - Sichern + + insert + füge - - Rhythmusgenerator + + times + mal ein - - - RouteDialogBase - - MusE: Routing - MusE: Signalfluss + + raster + Raster - - Add Route - Signalfluss hinzufügen + + ticks + Ticks - - Source: - Quelle: + + Move, Merge, Clone + Verschieben, Vereinigen, Klonen - - Destination: - Ziel: + + Move everything to the right + Alles nach rechts verschieben - - Connect - Verbinden + + Move only affected parts to the right + Nur betroffene Parts nach +rechts verschieben - - connect source to destination - Quelle mit Ziel verbinden + + Put everything into a single track + Alles in einzelne Spur einfügen - - Current Routes - Aktueller Signalfluss + + Merge with existing parts + Mit existierenden Parts vereinigen - Source - Quelle - - - - Destination - Ziel + Insert as clones (where possible) + Als Klone einfügen (wenn möglich) - - Remove - Entfernen + + OK + Bestätigen - - remove selected route - Ausgewählten Signalfluss entfernen + + Cancel + Abbrechen - RoutePopupMenu + PasteEventsDialogBase - Channel - Kanal + + MusE: Paste Events + MusE: Events einfügen - <none> - <kein> + + Number and raster + Anzahl und Raster - - - SS_PluginChooserBase - - SimpleDrums - Ladspa Plugin Chooser - SimpleDrums - Ladspa Plugin Wähler + + insert + füge + + + + times + mal ein - Name - Name + raster + Raster - - Label - Beschriftung + + + ticks + Ticks - - Inports - Eingangsports + + Paste options + Optionen fürs Einfügen - - Outports - Ausgangsports + + Always into existing parts + Immer in existierende Parts - - Creator - Ersteller + + Never into existing parts + Nie in existierende Parts - - &Cancel - &Abbrechen + + Into existing parts if part has not +to be expanded by more than + In existierende Parts, wenn der Part +erweitert werden muss um nicht mehr als - - Alt+C - Alt+C + + Put everything into the (selected) part + Alles in den (ausgewählten) Part einfügen - - &OK - &Bestätigen + + OK + Bestätigen - - Alt+O - Alt+O + + Cancel + Abbrechen - SS_PluginFront - - - Clear and unload effect - Lösche und entlade den Effekt - - - - Load effect - Lade Effekt - + ProjectCreate - - Toggle display of effect parameters - Schalte Anzeige von Effektparametern um + + Create Project + Projekt erzeugen - - Turn effect on/off - Schalte Effekt an/aus + + Projects folder: + Projektverzeichnis: - - - ScoreCanvas - Treble - Violinschlüssel + + + + ... + ...... - Bass - Bassschlüssel + + Project Name: + Projekt-Name: - Grand Staff - Beide Schlüssel + + Project is a Template + Projekt ist eine Vorlage - - - ScoreEdit - Undo/Redo tools - Rückgängig/Wiederho + + Write window state + Fenster schreiben - Step Record - Aufnahme taktschlagweise + + Project song file type: + Projekt-Lieddatei-Typ: - panic - Panik + + Project Path to song file: + Projektpfad zur Lieddatei: - C&ut - &Ausschneiden + + Create project folder (recommended for audio projects) + Erzeuge Projektverzeichnis (empfohlen für Audioprojekte) - &Copy - &Kopieren + + Song information: + Lied-Information: + + + QObject - &Select - &Auswählen + + + Error + Fehler - Select &All - Alles a&uswählen + + + Please first select the range for crescendo with the loop markers. + Bitte wählen Sie erst den Bereich für das Crescendo mit den Bereichsmarkern aus. + + + QWidget - &Deselect All - Alles ab&wählen + + + Cannot convert sysex string + Sysex Kette nicht umwandelbar - Invert &Selection - Auswa&hl umkehren + + + Hex String too long (2048 bytes limit) + Hex Kette ist zu lang (Grenze 2048 Bytes) - &Inside Loop - Bereich &innerhalb der Schleife + + new + Neu - &Outside Loop - Bereich außerhalb der Schlei&fe + + create peakfile for + Pegelspitzendatei erzeugen für - Change note &length - Notenlänge verändern + + MusE: get file name + MusE: Dateinamen übermitteln - Change note &velocity - Anschlagsdynamik verändern + + The directory +%1 +does not exist. +Create it? + Das Verzeichnis +%1 +existiert nicht. +Erzeugen? - Crescendo/Decrescendo - Crescendo/Decrescendo + + MusE: create directory + MusE: Verzeichnis erzeugen - Transpose - Transponieren + + creating dir failed + Verzeichnis erzeugen schlug fehl - Move Notes - Noten verschieben + + File +%1 +exists. Overwrite? + Die Datei +%1 +existiert. Überschreiben? - Set Fixed Length - Länge festlegen + + Open File +%1 +failed: %2 + Die Datei "%1" konnte nicht geöffnet werden: %2 - Delete Overlaps - Überlappungen entfernen + + MusE: write + MusE: schreiben - Legato - Legato + + MusE: Open File + MusE: Datei öffnen - - - ScrollScale - next page - Nächste Seite + + + None + Kein - previous page - Vorherige Seite + + generic midi + General Midi - current page number - Aktuelle Seitennummer + + No selection. Ignoring + Keine Auswahl. Ignoriert - SetlenBase + QuantBase - - MusE: Set Note Length - MusE: Feste Notenlänge setzen + + MusE: Quantize + MusE: Quantisieren @@ -18072,564 +12374,615 @@ - Value - Wert + Values + Werte - - New length - Neue Länge + + Strength: + Stärke: - ticks - Ticks - - - - OK - Bestätigen + % + % - Cancel - Abbrechen - - - - ShortcutCaptureDialog - - Ok - Bestätigen - - - Cancel - Abbrechen - - - Undefined - unbestimmt - - - - ShortcutCaptureDialogBase - - - Enter shortcut sequence - Folge von Tastenkürzeln eingeben + Threshold (ticks): + Schwellwert (Ticks): - - Press keys to enter shortcut sequence! - Tasten drücken um Folge von Tastenkürzeln einzugeben! + + Quantize Len + Länge quantisieren - - Old shortcut: - Altes Tastenkürzel: + + Raster + Raster - - - Undefined - unbestimmt + + Whole + Ganze - - New shortcut: - Neues Tastenkürzel: + + Half + Halbe - - OK - Bestätigen + + 4th + Viertel - - Cancel - Abbrechen + + 4th Triplet + Triolenviertel - - - ShortcutConfigBase - - Configure Keyboard Shortcuts - Tastenkürzel einstellen + + 8th + Achtel - - Shortcut Category - Kategorie Tastenkürzel + + 8th Triplet + Triolenachtel - - Description - Beschreibung + + 16th + Sechzehntel - - Shortcut - Tastenkürzel + + 16th Triplet + Triolensechzehntel - - &Clear - &Löschen + + 32th + 32tel - - Alt+C - Alt+C + + 32th Triplet + Triolen-32tel - - &Define - &Bestimmen + + Swing: + Swing: - - Alt+D - Alt+D + + If the proposed change in tick or length is smaller than threshold, nothing is done. +If swing=0, this is normal +If swing is 33, you get a 2:1-rhythm. +If swing is -33, you get a 1:2-rhythm. + + Wenn die Änderung der Position oder der Länge kleiner als Schwelle ist, wird nichts getan. +Wenn Swing=0, wird normal quantisiert. +Wenn Swing=33, erhalten Sie einen 2:1-Rhythmus. +Wenn Swing=-33, erhalten Sie einen 1:2-Rhythmus. - - &Apply - &Anwenden + + OK + Bestätigen - - Alt+A - Alt+A + + Cancel + Abbrechen - SigScale + RemoveBase - signature scale - Skala Taktmaß + + MusE: Erase Notes + MusE: Noten löschen - - - SimpleDrumsGuiBase - - DrumSynth 0.1 - DrumSynth 0.1 + + Range + Bereich - - - SimpleSynthGui - - &Load setup - Setup &laden + + All Events + Alle Ereignisse - - &Save setup - Setup &speichern + + Selected Events + Ausgewählte Ereignisse - - Load sample dialog - Sample-Laden-Dialog + + Looped Events + Ereignisse innerhalb Schleife - - - Song - &Ok - &Bestätigen + + Selected Looped + Ausgewählt und innerhalb der Schleife - - - SongInfo - - Song Information - Lied-Information + + Thresholds + Schwellenwerte - - Show on song load - Zeige beim Laden + + ticks + Ticks - - &Cancel - &Abbrechen + + Velocity + Dynamik - - Alt+C - Alt+C + + Length + Länge + + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wenn nichts ausgewählt ist, wird alles gelöscht.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wenn "Dynamik" ausgewählt ist, werden nur Noten mit Dynamik &lt; Schwelle gelöscht.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Wenn beide ausgewählt sind, werden Noten mit Dynamik &lt; Schwelle ODER Länge &lt; Schwelle gelöscht.</p></body></html> - - &Ok - &Bestätigen + + OK + Bestätigen - - Alt+O - Alt+O + + Cancel + Abbrechen - SynthConfigBase + RhythmGenerator - MusE: Synth Configuration - MusE: Synth Einstellung + + Rhythmusgenerator + + + RouteDialogBase - - Soft Synthesizer - Software-Synthesizer + + MusE: Routing + MusE: Signalfluss - - File - Datei + + Add Route + Signalfluss hinzufügen - - Instances - Instanzen + + Source: + Quelle: - - - Name - Name + + Destination: + Ziel: - - list of available software synthesizers - Liste verfügbarer Software-Synthesizer + + Connect + Verbinden - - Add Instance - Instanz hinzufügen + + connect source to destination + Quelle mit Ziel verbinden - - Remove Instance - Instanz entfernen + + Current Routes + Aktueller Signalfluss - - Midi Port - Midi Anschluss + + Source + Quelle - - Midi Port and Soft Synth Configuration - MIDI-Port- und SoftSynth-Konfiguration + + Destination + Ziel - - - Type - Typ + + Remove + Entfernen - - Midi connections - Midi Verbindungen + + remove selected route + Ausgewählten Signalfluss entfernen + + + SS_PluginChooserBase - - Inst - Inst + + SimpleDrums - Ladspa Plugin Chooser + SimpleDrums - Ladspa Plugin Wähler - - Version - Version + + Name + Name - Description - Beschreibung - - - - TList - - Midi - Midi + Label + Beschriftung - Drum - Drum + + Inports + Eingangsports - Delete Track - Spur löschen + + Outports + Ausgangsports - Track Comment - Spur Kommentar + + Creator + Ersteller - Show Gui - Zeige GUI + + &Cancel + &Abbrechen - Add Midi Track - Midi Spur hinzufügen + + Alt+C + Alt+C - Add Drum Track - Drum Spur hinzufügen + + &OK + &Bestätigen - Add Wave Track - Wave Spur hinzufügen + + Alt+O + Alt+O + + + SS_PluginFront - MusE: bad trackname - MusE: ungeeigneter Spurname + + Clear and unload effect + Lösche und entlade den Effekt - please choose a unique track name - Bitte eindeutigen Spurnamen wählen + + Load effect + Lade Effekt - show gui - GUI anzeigen + + Toggle display of effect parameters + Schalte Anzeige von Effektparametern um - Add Output - Ausgang hinzufügen + + Turn effect on/off + Schalte Effekt an/aus + + + SetlenBase - Add Group - Gruppe hinzufügen + + MusE: Set Note Length + MusE: Feste Notenlänge setzen - Add Input - Eingang hinzufügen + + Range + Bereich - Add Aux Send - Aux Send hinzufügen + + All Events + Alle Ereignisse - Update drummap? - Drumbelegung aktualisieren? + + Selected Events + Ausgewählte Ereignisse - Do you want to use same port for all instruments in the drummap? - Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss verwenden? + + Looped Events + Ereignisse innerhalb Schleife - &Yes - &Ja + + Selected Looped + Ausgewählt und innerhalb der Schleife - &No - &Nein + + Value + Wert - Do you want to use same port and channel for all instruments in the drummap? - Möchten Sie für alle Instrumente der Drumbelegung den selben Anschluss und Kanal verwenden? + + New length + Neue Länge - <none> - <kein> + + ticks + Ticks - - - TempoSig - Tempo/Sig - Tempo/Taktmaß + + OK + Bestätigen - - - TimeCanvas - Add Controller View - Kontrolleransicht hinzufügen + + Cancel + Abbrechen - Toolbar1 + ShortcutCaptureDialogBase - Solo - Solo + + Enter shortcut sequence + Folge von Tastenkürzeln eingeben - Snap - Magnet + + Press keys to enter shortcut sequence! + Tasten drücken um Folge von Tastenkürzeln einzugeben! - Quantize - Quantisieren + + Old shortcut: + Altes Tastenkürzel: - To - Zu + + + Undefined + unbestimmt - All Events - Alle Ereignisse + + New shortcut: + Neues Tastenkürzel: - Looped Ev. - Ereignisse innerhalb Schleife. + + OK + Bestätigen - Selected Ev. - Ausgewählte Ereignisse. + + Cancel + Abbrechen + + + ShortcutConfigBase - Looped+Sel. - Innerhalb Schleife + augewählt. + + Configure Keyboard Shortcuts + Tastenkürzel einstellen - Cursor - Positionsmarker + + Shortcut Category + Kategorie Tastenkürzel - - - TopWin - Fullscreen - Vollbild + + Description + Beschreibung - Arranger - Arrangierer + + Shortcut + Tastenkürzel - - - TrackComment - MusE: Track Comment - MusE: Spur Kommentar + + &Clear + &Löschen - Track Comment: - Spur Kommentar: + + Alt+C + Alt+C - - - Transport - Punch In - Aufnahme am linken Marker beginnen + + &Define + &Bestimmen - Loop - Schleife + + Alt+D + Alt+D - Punch Out - Aufnahme am rechten Marker beenden + + &Apply + &Anwenden - Left Mark - Linker Marker + + Alt+A + Alt+A + + + SimpleDrumsGuiBase - Right Mark - Rechter Marker + + DrumSynth 0.1 + DrumSynth 0.1 + + + SimpleSynthGui - Overdub - Überschreiben + + &Load setup + Setup &laden - Replace - Ersetzen + + &Save setup + Setup &speichern - Rec Mode - Modus "Aufnahme" + + Load sample dialog + Sample-Laden-Dialog + + + SongInfo - Normal - Normal + + Song Information + Lied-Information - Mix - Mischen + + Show on song load + Zeige beim Laden - Cycle Rec - Aufnahme in Schleife + + &Cancel + &Abbrechen - punchin - Aufnahme am linken Marker geginnen + + Alt+C + Alt+C - loop - Schleife + + &Ok + &Bestätigen - punchout - Aufnahme am rechten Marker beenden + + Alt+O + Alt+O + + + SynthConfigBase - rewind to start - Zum Start zurück + + Soft Synthesizer + Software-Synthesizer - rewind - Einen Taktschlag rückwärts + + File + Datei - forward - Einen Taktschlag vorwärts + + Instances + Instanzen - stop - Stopp + + + Name + Name - play - Wiedergabe + + list of available software synthesizers + Liste verfügbarer Software-Synthesizer - record - Aufnahme + + Add Instance + Instanz hinzufügen - AC - AC + + Remove Instance + Instanz entfernen - quantize during record - Während Aufnahme quantisieren + + Midi Port + Midi Anschluss - Click - Klick + + Midi Port and Soft Synth Configuration + MIDI-Port- und SoftSynth-Konfiguration - metronom click on/off - Metronom Klick an/aus + + + Type + Typ - Sync - Sync + + Midi connections + Midi Verbindungen - external sync on/off - Externer Sync an/aus + + Inst + Inst - Master - Master + + Version + Version - use master track - Masterspur einschalten + + Description + Beschreibung @@ -18686,49 +13039,6 @@ - TransposeDialogBase - - MusE: Midi Transpose - MusE: Midi transponieren - - - Value - Wert - - - halftones - Halbtonschritte - - - Time - Zeit - - - all - alle - - - between markers - Zwischen Markern - - - Parts - Parts - - - all in selected tracks - Alles in ausgewählter Spur - - - OK - Bestätigen - - - Cancel - Abbrechen - - - UnusedWaveFiles @@ -19014,10 +13324,6 @@ Ereignisse innerhalb Schleife - Selected & Looped - Ausgewählt & innerhalb Schleife - - Values Werte @@ -19059,118 +13365,9 @@ - WTScale - - bar scale - Taktskala - - - - WaveEdit - - Normalize - Normalisieren - - - weTools - Werkzeug "we" - - - Solo - Solo - - - Cursor - Positionsmarker - - - &File - &Datei - - - Functions - Funktionen - - - 200% - 200% - - - 150% - 150% - - - 75% - 75% - - - 50% - 50% - - - 25% - 25% - - - &Copy - &Kopieren - - - C&ut - &Ausschneiden - - - Select - Auswählen - - - Select &All - Alles a&uswählen - - - &Deselect All - Alles ab&wählen - - - - WaveTrackInfoBase - - MusE: TrackInfo - MusE: Spurinfo - - - Track Info - Spurinfo - - - Track Name - Spurname - - - Output Route: - Ausgangssignalfluss: - - - Input Route: - Eingangssignalfluss: - - - Ports: - Anschlüsse: - - - Mono - Mono - - - Stereo - Stereo - - - file_patterns - + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) @@ -19186,13 +13383,13 @@ - + - + - + @@ -19201,7 +13398,7 @@ Alle Dateien (*) - + Midi (*.mid) Midi (*.mid) @@ -19267,7 +13464,7 @@ (*.png) - + part Files (*.mpt *.mpt.gz *.mpt.bz2) Part-Dateien (*.mpt *.mpt.gz *.mpt.bz2) @@ -19287,7 +13484,7 @@ Mit bzip2 komprimierte Part-Dateien (*.mpt.bz2) - + Presets (*.pre *.pre.gz *.pre.bz2) Voreinstellungen (*.pre *.pre.gz *.pre.bz2) @@ -19375,20 +13572,20 @@ Abschwellzeit [ms] - - + + dB dB - + Dry Level [dB] Lautstärke des unmodifizierten Signals (Dry Level) [dB] - + Wet Level [dB] Lautstärke des modifizierten diff -Nru muse-2.0~rc2/share/locale/muse_en.ts muse-2.0/share/locale/muse_en.ts --- muse-2.0~rc2/share/locale/muse_en.ts 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/locale/muse_en.ts 2012-06-30 19:24:42.000000000 +0200 @@ -4,85 +4,104 @@ @default - + Add Midi Track - + Add Drum Track - + Add Wave Track - + Add Audio Output - + Add Audio Group - + Add Audio Input - + Add Aux Send - + Add Synth - + + Select project directory + + + + Route - + dest - + name="%1"/ - + Warning: No output devices! - + Open midi config... - + Empty ports - + <none> - + channelMask="%1" + + + Bad timing + + + + + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + + AboutBox @@ -93,12 +112,12 @@ - Version 2 pre-alpha + Version 2 - (C) Copyright 1999-2010 Werner Schweer and others. + (C) Copyright 1999-2012 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -329,112 +348,244 @@ - + + May require restarting MusE for best results + + + + Style Sheet: - - - - - - - - + + + + + + + + ... - + Fonts - + Family - + Size - + Font 1 - + Font 2 - + Font 3 - + Font 0 - - - + + + Bold - - - + + + Italic - + Font 4 - + Font 5 - + Font 6 - + Apply - + Ok - + Cancel + ArrangerColumnsBase + + + Configure arranger columns + + + + + Columns: + + + + + Name: + + + + + Controller type: + + + + + + Midi controller type + + + + + Control7 + + + + + Control14 + + + + + RPN + + + + + NRPN + + + + + RPN14 + + + + + NRPN14 + + + + + Pitch + + + + + Program + + + + + H-Ctrl + + + + + + Midi controller number high byte + + + + + L-Ctrl + + + + + + Midi controller number low byte + + + + + * + wild card + + + + + affect CCs at + + + + + begin of song + + + + + current position + + + + + &Add + + + + + &Delete + + + + + Done + + + + Awl::MidiVolEntry @@ -474,7 +625,7 @@ - Start + Samplerate @@ -2442,22 +2593,80 @@ - + Don't show on startup - + Next tip - + Close + DuplicateTracksBase + + + Duplicate tracks + + + + + Number of copies + + + + + Copy all routes + + + + + Default routing + + + + + No routes + + + + + Copy parts + + + + + Copy standard controllers (vol, pan) + + + + + Copy effects rack plugins + + + + + Copy plugin controllers + + + + + Ok + + + + + Cancel + + + + EditCtrlBase @@ -3498,14 +3707,14 @@ - Songdata + + read Midi Port Configuration - - only -Songdata + + write window +states @@ -3603,214 +3812,237 @@ - + Projects: - + + + ... - + Views - - - - - + + + + + y-pos - - - - + + + + show - - - - - + + + + + x-pos - - - - + + + + height - - - - + + + + width - + Mixer A - + Mixer B - + Big Time - + Main Window - + Transport - - - - - - set current values - - - - Cur + set current values - - Start Muse + + + + + + Cur - - start song: + + Start Muse - + Start song - + start with last song - - start with template: default.med + + Choose start song or template + + + + + Reset to default + + + + + start with template - + start with song - + On Launch - + show splash screen - + show "Did you know?" dialog - + + Start template or song: + + + + + Read MIDI Ports configuration from file, + or else automatically configure + + + + + Read MIDI Ports configuration + + + + Audio - + Mixer - - + + dB - + min. Meter Value - + min. Slider Val - + Try to use Jack Freewheel - + Speeds bounce operations - + Use Jack Freewheel mode if possible. This dramatically speeds bounce operations. - + Enable denormal protection - + Enable output limiter - + VST in-place - + Enable VST in-place processing (restart required) - + Enable VST in-place processing. Turn this off if VST Ladspa effect rack plugins do not work or feedback loudly, even if they are supposed to @@ -3818,18 +4050,18 @@ - + Minimum control period - + Minimum audio controller process period (samples). - + Minimum audio controller process period (samples). Adjusts responsiveness of audio controls and controller graphs. Set a low value for fast, smooth @@ -3838,265 +4070,265 @@ - - 1 - - - - 2 + 1 - 4 + 2 - 8 + 4 - - 16 + 8 - 32 + 16 - 64 + 32 - 128 + 64 - 256 + 128 - 512 + 256 - - 1024 + 512 + 1024 + + + + + + 2048 - + External Waveditor - + External Waveditor command - + Note: External editor opened from the internal editor. - + Dummy Audio Driver (settings require restart) - + Sample rate - + Hz - + Period size (Frames per period): - + Shorter periods give better midi playback resolution. - + Midi - + Ticks - + RTC Resolution (Ticks/Sec) - + 4096 - + 8192 - + 16384 - + 32768 - + Midi Resolution (Ticks/Quarternote) - - - 48 - - - - 96 + 48 - 192 + 96 - 384 + 192 - 768 + 384 - 1536 + 768 - 3072 + 1536 - 6144 + 3072 + 6144 + + + + + 12288 - + Displayed Resolution (Ticks/Quarternote) - + GUI Behaviour - + Behavior - + GUI Refresh Rate - + /sec - + Use old-style stop shortcut: - + Move single armed track with selection - + Use project save dialog - + Some popup menus stay open (else hold Ctrl) - + Allows some popup menus to stay open. Otherwise, hold Ctrl to keep them open. - + In some areas, the middle mouse button decreases values, while the right button increases. Users without a middle mouse button can select this option to make the @@ -4104,67 +4336,79 @@ - + Use left mouse button for decreasing values - + Shift + Right click sets left range marker - + Allow adding hidden tracks in track list menu - + Unhide tracks when adding hidden tracks - + + + Smart focus + + + + + After editing, controls will return + focus to their respective canvas + + + + GUI Style - + MDI-subwindowness and sharing menus - + Presets: - + traditional MusE SDI - + Cakewalk-like MDI - + Borland-/Mac-like MDI - + &Apply - + &Ok - + &Cancel @@ -4480,33 +4724,111 @@ - MidiFilterConfigBase + MidiAudioControlBase - - MusE: Midi Input Filter + + Midi control - - Record Filter + + Port: - - - Note On + + Channel: - - - Poly Pressure + + Control type: - - - Controller + + Control7 + + + + + Control14 + + + + + RPN + + + + + NRPN + + + + + RPN14 + + + + + NRPN14 + + + + + Pitch + + + + + Program + + + + + Hi: + + + + + Lo: + + + + + Learn + + + + + MidiFilterConfigBase + + + MusE: Midi Input Filter + + + + + Record Filter + + + + + + Note On + + + + + + Poly Pressure + + + + + + Controller @@ -5151,7 +5473,7 @@ - Note: Sync delay and MTC sync currently not fully implemeted + Note: Sync delay and MTC sync currently not fully implemented @@ -5188,182 +5510,172 @@ - - iR - - - - + output routing - - oR - - - - + input detect - + Input detect indicator. Detects all note on-off, controller, aftertouch, program change, and pitchbend (but not sysex or realtime) events on the selected channels, on the selected midi ports. - + W - + Midi thru - + Pass input events through ('thru') to output. - - - - - - - + + + + + + + off - + Transp. - + Delay - - + + % - + Length - + Velocity - + Compr. - + Channel Info - + Select instrument patch - + <unknown> - + Rec: - + Add all settings to song - + All - - Bank Select MSB. Double-click on/off. + + Bank Select MSB. Ctrl-double-click on/off. - - H-Bank + + Bank Select LSB. Ctrl-double-click on/off. - - Bank Select LSB. Double-click on/off. + + Program. Ctrl-double-click on/off. - - L-Bank + + Volume. Ctrl-double-click on/off. - - Program. Double-click on/off. + + + Change stereo position. Ctrl-double-click on/off. - - Add bank + prog settings to song + + H-Bank - - Prog + + L-Bank - - Volume. Double-click on/off. + + Add bank + prog settings to song - - Add vol setting to song + + Prog - - Vol + + Add vol setting to song - - - Change stereo position. Double-click on/off. + + Vol - + Add pan setting to song - + Pan @@ -5838,12 +6150,12 @@ MusECore::Song - + Jack shutdown! - + Jack has detected a performance problem which has lead to MusE being disconnected. This could happen due to a number of reasons: @@ -5862,71 +6174,97 @@ - - + + Automation: - + previous event - + next event - - + + set event - - + + add event - - + + erase event - + erase range - + clear automation - + + Midi control + + + + + Assign + + + + + Clear + + + + Clear all controller events? - + &Ok - + &Cancel - + + MusE: Tempo list + + + + + External tempo changes were recorded. +Transfer them to master tempo list? + + + + MusE - external script failed - + MusE was unable to launch the script, error message: %1 @@ -5969,86 +6307,83 @@ - MusEGui - - - Select project directory - - - - MusEGui::Appearance - + Main application font, and default font for any controls not defined here. - + Mixer strips and effects racks. Midi track info panel. Midi control panel entry box. - + Transport controls. - + Time scale upper, and time signature. Controller graph and S/X buttons. - + Time scale lower, and arranger part name overlay. - + Tempo scale, and markers. - + Mixer labels. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. - + Maximum mixer label auto-font-sizing font size. - + Global opacity (opposite of transparency). - + Standard - + Custom - + + Keep Qt system style + + + + MusE: load image - + Select style sheet - + Qt style sheets (*.qss) @@ -6056,62 +6391,62 @@ MusEGui::Arranger - + Enable Recording - + Mute/Off Indicator - + Solo Indicator - + Track Type - + Track Name - + Midi output channel number or audio channels - + Midi output port or synth midi port - + Time Lock - + Automation parameter selection - + Notation clef - + Enable recording. Click to toggle. - + Mute indicator. Click to toggle. Right-click to toggle track on/off. Mute is designed for rapid, repeated action. @@ -6119,33 +6454,33 @@ - + Solo indicator. Click to toggle. Connected tracks are also 'phantom' soloed, indicated by a dark square. - + Track type. Right-click to change midi and drum track types. - + Track name. Double-click to edit. Right-click for more options. - + Midi/drum track: Output channel number. Audio track: Channels. Mid/right-click to change. - + Midi/drum track: Output port. Synth track: Assigned midi port. Left-click to change. @@ -6153,165 +6488,165 @@ - + Time lock - + Notation clef. Select this tracks notation clef. - + Arranger - + Cursor - + Off - + Bar - + Snap - + Len - - + + song length - bars - + Type - + NO - + GM - + GS - + XG - - + + midi song type - + Pitch - + midi pitch - + global midi pitch shift - + Tempo - - + + midi tempo - + N - + TrackInfo - + R - + M - + S - + C - + Track - + Port - + Ch - + T - + Automation - + Clef @@ -6319,342 +6654,350 @@ MusEGui::ArrangerView - + MusE: Arranger - - Undo/Redo tools - - - - - panic - - - - - transport - - - - + C&ut - + &Copy - + Copy in range - + &Paste - + Paste (show dialog) - + Paste c&lone - + Paste clone (show dialog) - + &Insert Empty Measure - + Delete Selected Tracks - + + Duplicate Selected Tracks + + + + Shrink selected parts - + Expand selected parts - + Clean selected parts - + Add Track - + Select - + Select &All - + &Deselect All - + Invert &Selection - + &Inside Loop - + &Outside Loop - + All &Parts on Track - + Score - + all tracks in one staff - + one staff per track - + New score window - + Pianoroll - + Drums - - + + List - + Wave - + Mastertrack - + Graphic - + Midi &Transform - + Global Cut - + Global Insert - + Global Split - + Global Cut - selected tracks - + Global Insert - selected tracks - + Global Split - selected tracks - + &Edit - + &Structure - + Functions - + &Quantize Notes - + Change note &length - + Change note &velocity - + Crescendo/Decrescendo - + Transpose - + Erase Events (Not Parts) - + Move Events (Not Parts) - + Set Fixed Note Length - + Delete Overlapping Notes - + Legato - + Window &Config - - + + Configure &custom columns + + + + + New + + + Changed Settings + + + + + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) + + MusEGui::AudioMixerApp - + &Create - + &View - + Routing - + Show Midi Tracks - + Show Drum Tracks - + Show Wave Tracks - + Show Inputs - + Show Outputs - + Show Groups - + Show Auxs - + Show Synthesizers @@ -6662,108 +7005,98 @@ MusEGui::AudioStrip - + panorama - + aux send level - + Pan - + 1/2 channel - + Pre - + pre fader - post fader - + dB - + record - + mute - + record downmix - - + + solo mode - + off - - iR - - - - + input routing - - oR - - - - + output routing - + Off - + Read - + Touch - + Write - + automation type @@ -6771,49 +7104,49 @@ MusEGui::BigTime - + format display - + bar - + beat - - + + tick - + minute - + second - - + + frame - + subframe - + MusE: Bigtime @@ -6821,27 +7154,12 @@ MusEGui::ClipListEdit - + MusE: Clip List Editor - - Undo/Redo tools - - - - - panic - - - - - transport - - - - + Window &Config @@ -6857,77 +7175,90 @@ + MusEGui::CtrlCanvas + + + Drawing hint: Hold Ctrl to affect only existing events + + + + + Use shift + pencil or line tool to draw new events + + + + MusEGui::CtrlPanel - + S - + select controller - + X - + remove panel - + manual adjust - - double click on/off + + ctrl-double-click on/off - + off - - + + Velocity - + add new ... - - + + Instrument-defined + - Add ... - + Others - + Edit instrument ... - + Common Controls @@ -6935,378 +7266,368 @@ MusEGui::DrumEdit - - + + mute instrument - - + + sound name - - + + volume percent - - + + quantisation - - + + this input note triggers the sound - - + + note length - - + + this is the note which is played - + output channel (hold ctl to affect all rows) - + output port (hold ctl to affect all rows) - - + + shift + control key: draw velocity level 1 - - + + control key: draw velocity level 2 - - + + shift key: draw velocity level 3 - - + + draw velocity level 4 - + output channel (ctl: affect all rows) - + output port (ctl: affect all rows) - + &File - + Load Map - + Save Map - + Reset GM Map - + &Edit - + Cut - + Copy - + Copy events in range - + Paste - + Paste (with Dialog) - + Delete Events - + &Select - + Select All - + Select None - + Invert - + Inside Loop - + Outside Loop - + Previous Part - + Next Part - + Fu&nctions - + Re-order list - + Set Fixed Length - + Modify Velocity - + Crescendo/Decrescendo - + Quantize - + Erase Event - + Move Notes - + Delete Overlaps - + &Plugins - + Window &Config - + Drum tools - + Load Drummap - + Store Drummap - + Step Record - + Midi Input - + cursor tools - + Set step size for cursor edit - - panic - - - - - transport - - - - + ctrl - + Add Controller View - + M - + Sound - + Vol - + QNT - + E-Note - + Len - + A-Note - + Ch - + Port - + LV1 - + LV2 - + LV3 - + LV4 - + Muse: Load Drum Map - + MusE: Store Drum Map - + Drum map - + Reset the drum map with GM defaults? @@ -7314,17 +7635,17 @@ MusEGui::EditCAfterDialog - + MusE: Enter Channel Aftertouch - + Time Position - + Pressure @@ -7332,12 +7653,12 @@ MusEGui::EditEventDialog - + Ok - + Cancel @@ -7345,129 +7666,129 @@ MusEGui::EditInstrument - - + + MusE: Create file failed - + MusE: Write File failed - - + + MusE: Save Instrument Definition - - + + Instrument Definition (*.idf) - - + + MusE: Save instrument as - + Enter a new unique instrument name: - + The user instrument '%1' already exists. This will overwrite its .idf instrument file. Are you sure? - + MusE: Bad instrument name - + Please choose a unique instrument name. (The name might be used by a hidden instrument.) - + MusE: Bad patch name - + Please choose a unique patch name - + MusE: Bad patchgroup name - + Please choose a unique patchgroup name - + MusE: Bad controller name - + Please choose a unique controller name - - + + MusE: Cannot add common controller - + A controller named '%1' already exists. - + A controller number %1 already exists. - - + + MusE - - + + The current Instrument contains unsaved data Save Current Instrument? - - + + &Save - - + + &Nosave - + &Abort @@ -7475,22 +7796,22 @@ MusEGui::EditMetaDialog - + MusE: Enter Meta Event - + Time Position - + Meta Type - + Enter Hex @@ -7498,22 +7819,22 @@ MusEGui::EditPAfterDialog - + MusE: Enter Poly Aftertouch - + Time Position - + Pitch - + Pressure @@ -7652,75 +7973,83 @@ MusEGui::EffectRack - + effect rack - + new - + change - + move up - + move down - + remove - + bypass - + show gui - + show native gui - + save preset - + MusE: Save Preset - + Replace effect - + Do you really want to replace the effect %1? + MusEGui::GlobalSettingsConfig + + + MusE: Choose start template or song + + + + MusEGui::Header - + Track Info Columns @@ -7728,137 +8057,122 @@ MusEGui::LMaster - + MusE: Mastertrack - + &Edit - + Insert Tempo - + Insert Signature - + Insert Key - + Edit Positon - + Edit Value - + Delete Event - + Window &Config - - Undo/Redo tools - - - - + Edit tools - + Tempo - + Timesig - + Key - + new tempo - + new signature - + new key - - panic - - - - - transport - - - - + Meter - + Time - + Type - + Value - + Reposition of the initial tempo and signature events is not allowed - + MusE: List Editor - + Input error, conversion not OK or value out of range - + Reposition of tempo and signature events to start position is not allowed! @@ -7866,127 +8180,112 @@ MusEGui::ListEdit - + insert Note - + insert SysEx - + insert Ctrl - + insert Meta - + insert Channel Aftertouch - + insert Poly Aftertouch - + &Edit - + Cut - + Copy - + Paste - + Delete Events - + Window &Config - - Undo/Redo tools - - - - + Insert tools - - panic - - - - - transport - - - - + Tick - + Bar - + Type - + Ch - + Val A - + Val B - + Val C - + Len - + Comment @@ -7995,257 +8294,257 @@ MusEGui::MPConfig - + Default input connections - + Are you sure you want to apply to all existing midi tracks now? - - + + Default output connections - - + + Setting will apply to new midi tracks. Do you want to apply to all existing midi tracks now? - + MusE: bad device name - + please choose a unique device name - - + + in - - + + out - + Show first aliases - + Show second aliases - - + + Toggle all - - + + Change all tracks now - + Create Jack device - - + + Port Number - + Enable gui - + Enable reading - + Enable writing - + Port instrument - + Midi device name. Click to edit (Jack) - + Connections from Jack Midi outputs - + Connections to Jack Midi inputs - + Auto-connect these channels to new midi tracks - + Auto-connect new midi tracks to these channels - + Auto-connect new midi tracks to this channel - + Device state - + Enable gui for device - + Enable reading from device - + Enable writing to device - + Name of the midi device associated with this port number. Click to edit Jack midi name. - + Instrument connected to port - + Connections from Jack Midi output ports - + Connections to Jack Midi input ports - + Auto-connect these channels, on this port, to new midi tracks. - + Connect new midi tracks to these channels, on this port. - + Connect new midi tracks to this channel, on this port. - + State: result of opening the device - + Port - + GUI - + I - + O - + Instrument - + Device Name - + In routes - + Out routes - + Def in ch - + Def out ch - + State - + <unknown> - - + + <none> @@ -8269,72 +8568,57 @@ MusEGui::MarkerView - + MusE: Marker - + add marker - + delete marker - + &Edit - + Window &Config - - Undo/Redo tools - - - - + edit tools - - panic - - - - - transport - - - - + Bar:Beat:Tick - + Hr:Mn:Sc:Fr:Sf - + Lock - + Text - + Marker Properties @@ -8342,92 +8626,77 @@ MusEGui::MasterEdit - + MusE: Mastertrack - + Window &Config - - Undo/Redo tools - - - - - panic - - - - - transport - - - - + Enable master - + Enable - + Enable usage of master track - + Info - + Cursor - + time at cursor position - + tempo at cursor position - + Off - + Bar - + Snap - + CurPos - + tempo at current position - + time signature at current position @@ -8445,94 +8714,84 @@ MusEGui::MidiStrip - - + + off - - double click on/off + + ctrl-double-click on/off - + VariationSend - + Var - + ReverbSend - + Rev - + ChorusSend - + Cho - + dB - + Pan/Balance - + Pan - + record - + mute - + solo mode - - iR - - - - + input routing - - oR - - - - + output routing @@ -8864,8 +9123,8 @@ MusEGui::MidiTrackInfo - - + + <unknown> @@ -8873,8 +9132,8 @@ MusEGui::MidiTransformerDialog - - + + New @@ -8890,644 +9149,679 @@ MusEGui::MusE - - + + Failed to start audio! - + Was not able to start audio, check if jack is running. - + Timeout waiting for audio to run. Check if jack is running. - + Und&o - + Re&do - + undo last change to song - + redo last undo - + Loop - + loop between left mark and right mark - + Punchin - + record starts at left mark - + Punchout - + record stops at right mark - + Start - + rewind to start position - + Rewind - + rewind current position - + Forward - + move current position - + Stop - + stop sequencer - + Play - + start sequencer play - + Record - + to record press record and then play - - + + Panic - + send note off to all midi channels - + &New - - + + Create New Song - + &Open - - + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - + Open &Recent - - - + + + &Save - - + + Click this button to save the song you are editing. You will be prompted for a file name. You can also select the Save command from the File menu. - + Save &As - + Import Midifile - + Export Midifile - + Import Part - - + + Import Wave File - + Find unused wave files - + &Quit - + Song Info - + Transport Panel - + Bigtime Window - + Mixer A - + Mixer B - + Cliplist - + Marker View - + Arranger View - + Fullscreen - + &Plugins - + Edit Instrument - + Input Plugins - + Transpose - + Midi Input Transform - + Midi Input Filter - + Midi Remote Control - + Rhythm Generator - + Reset Instr. - + Init Instr. - + Local Off - + Bounce to Track - + Bounce to File - + Restart Audio - + Mixer Automation - + Take Snapshot - + Clear Automation Data - + Cascade - + Tile - + In rows - + In columns - + Global Settings - + Configure Shortcuts - + Follow Song - + Don't Follow Song - + Follow Page - + Follow Continuous - + Metronome - + Midi Sync - + Midi File Import/Export - + Appearance Settings - + Midi Ports / Soft Synth - + &Manual - + &MusE Homepage - + &Report Bug... - + &About MusE - + + Song Position + + + + + Tempo + + + + + Signature + + + + File Buttons - + Undo/Redo - + Transport - + &File - + &View - + &Midi - + &Audio - + A&utomation - + &Windows - + MusE Se&ttings - + &Help - + + About &Qt + + + + Cannot read template - + File open error - + File read error - + Unknown File Format: %1 - - - + + + MusE: Song: %1 - + MusE: load project - + MusE: load template - + MusE: Write File failed - + The current Project contains unsaved data Save Current Project? - - + + S&kip - + &Cancel - + MusE: Save As - - + + Nothing to edit - - - - - + + + + + MusE: Bounce to Track - + No wave tracks found - - + + No audio output tracks found - + Select one audio output track, and one target wave track - + Select one target wave track - + Select one target wave track, and one audio output track - - + + MusE: Bounce to File - + Select one audio output track - + MusE: Bounce - + set left/right marker for bounce range - + The current Project contains unsaved data Load overwrites current Project: Save Current Project? - - + + &Abort - + + This will clear all automation data on + all audio tracks! +Proceed? + + + + + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? + + + + MusE: Export Midi @@ -9542,66 +9836,66 @@ - + Unable to launch help - + For some reason MusE has to launch the default browser on your machine. - + MusE: Import Midi - + Add midi file to current project? - + &Add to Project - + &Replace - + reading midifile - + failed: - + Import part is only valid for midi and wave tracks! - + MusE: load part - + No track selected for import - + %n part(s) out of %1 could not be imported. Likely the selected track is the wrong type. @@ -9612,7 +9906,7 @@ - + %n part(s) could not be imported. Likely the selected track is the wrong type. @@ -9623,29 +9917,29 @@ - + to import an audio file you have first to selecta wave track - + Import Wavefile - + This wave file has a samplerate of %1, as opposed to current setting %2. Do you still want to import it? - + &Yes - + &No @@ -9653,32 +9947,37 @@ MusEGui::NoteInfo - + Note Info - + + delta/absolute mode + + + + Start - + Len - + Pitch - + Velo On - + Velo Off @@ -9686,90 +9985,100 @@ MusEGui::PartCanvas - + Cannot copy/move/clone to different Track-Type - + C&ut - + &Copy - + s&elect - + clones - + rename - + color - + delete - + split - + glue - + + super glue (merge selection) + + + + de-clone - - - + + + save part to disk - + wave edit - + file info - + MusE: save part - + Part name: %1 Files: + + + Remove selected + + - + %n part(s) out of %1 could not be pasted. Likely the selected track is the wrong type. @@ -9780,7 +10089,7 @@ - + %n part(s) could not be pasted. Likely the selected track is the wrong type. @@ -9791,32 +10100,32 @@ - + Cannot paste: multiple tracks selected - + Cannot paste: no track selected - + Can only paste to midi/drum track - + Can only paste to wave track - + Can only paste to midi or wave track - + Cannot paste: wrong data type @@ -9824,7 +10133,7 @@ MusEGui::PasteDialog - + %n quarter(s) %n quarter @@ -9832,13 +10141,13 @@ - + %1 quarter for floating-point arguments like 1.5 - + %1 quarters for floating-point arguments like 1.5 @@ -9847,7 +10156,7 @@ MusEGui::PasteEventsDialog - + %n quarter(s) %n quarter @@ -9855,13 +10164,13 @@ - + %1 quarter for floating-point arguments like 1.5 - + %1 quarters for floating-point arguments like 1.5 @@ -9870,202 +10179,192 @@ MusEGui::PianoRoll - + &Edit - + C&ut - + &Copy - + Copy events in range - + &Paste - + Paste (with dialog) - + Delete &Events - + &Select - + Select &All - + &Deselect All - + Invert &Selection - + &Inside Loop - + &Outside Loop - + &Previous Part - + &Next Part - + Fu&nctions - + Quantize - + Modify Note Length - + Modify Velocity - + Crescendo/Decrescendo - + Transpose - + Erase Events - + Move Notes - + Set Fixed Length - + Delete Overlaps - + Legato - + &Plugins - + Window &Config - + &Event Color - + &Blue - + &Pitch colors - + &Velocity colors - + Pianoroll tools - + Step Record - + Midi Input - + Play Events - - panic - - - - - transport - - - - + ctrl - + Add Controller View @@ -10073,102 +10372,157 @@ MusEGui::PluginDialog - + MusE: select plugin - + + Type + + + + Lib - + Label - + Name - + AI - + AO - + CI - + CO - + IP - + id - + Maker - + Copyright - + + Audio inputs + + + + + Audio outputs + + + + + Control inputs + + + + + Control outputs + + + + + In-place capable + + + + + ID number + + + + Ok - + Cancel - + + Show plugs: + + + + Mono and Stereo - + Stereo - + Mono - + Show All - - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + + + + + dssi synth - + + dssi effect + + + + + ladspa + + + + Search in 'Label' and 'Name': @@ -10176,38 +10530,38 @@ MusEGui::PluginGui - + File Buttons - + Load Preset - + Save Preset - - + + bypass plugin - + MusE: load preset - + Error reading preset. Might not be right type for this plugin - + MusE: save preset @@ -10258,6 +10612,8 @@ + + <none> @@ -10287,42 +10643,42 @@ MusEGui::ScoreCanvas - + Treble - + Bass - + Grand Staff - + Remove staff - + Ambiguous part - + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. - + No part - + There are no parts you could add the note to. @@ -10330,261 +10686,246 @@ MusEGui::ScoreEdit - - Undo/Redo tools - - - - + Step recording tools - + Step Record - - panic - - - - - transport - - - - + Note settings - + Note length: - + last - - - + + + Apply to new notes: - - + + Apply to selected notes: - + Velocity: - + Off-Velocity: - + Quantisation settings - + Quantisation: - + Pixels per whole: - + &Edit - + C&ut - + &Copy - + Copy events in range - + &Paste - + Paste (with dialog) - + Delete &Events - + &Select - + Select &All - + &Deselect All - + Invert &Selection - + &Inside Loop - + &Outside Loop - + Fu&nctions - + &Quantize - + Change note &length - + Change note &velocity - + Crescendo/Decrescendo - + Transpose - + Erase Events - + Move Notes - + Set Fixed Length - + Delete Overlaps - + Legato - + Window &Config - + Note head &colors - + &Black - + &Velocity - + &Part - + Set up &preamble - + Display &key signature - + Display &time signature - + Set Score &name - - + + Enter the new score title - + Error - + Changing score title failed: the selected title is not unique @@ -10640,9 +10981,22 @@ + MusEGui::SigToolbarWidget + + + time signature at current position + + + + + Signature: + + + + MusEGui::Strip - + Remove track? @@ -10650,132 +11004,168 @@ MusEGui::TList - + <none> - + visible - + no clef - + Treble - + Bass - + Grand - + + + off + + + + + <unknown> + + + + MusE: bad trackname - + please choose a unique track name - + Unused Devices - - + + Update drummap? - + Do you want to use same port for all instruments in the drummap? - - + + &Yes - - + + &No - - + + show gui - - + + show native gui - + + Midi control + + + + + Assign + + + + + Clear + + + + Treble clef - + Bass clef - + Grand Staff - + Viewable automation - + + Internal + + + + + Synth + + + + Delete Track - + Track Comment - + Insert Track - + Midi - + Drum - + Do you want to use same port and channel for all instruments in the drummap? @@ -10783,12 +11173,25 @@ MusEGui::TempoSig - + Tempo/Sig + MusEGui::TempoToolbarWidget + + + tempo at current position + + + + + Tempo: + + + + MusEGui::Toolbar1 @@ -10803,12 +11206,12 @@ - + Cursor - + Snap @@ -10816,72 +11219,102 @@ MusEGui::TopWin - + As subwindow - + Shares tools and menu - + Fullscreen - + + Undo/Redo tools + + + + + Panic + + + + + Transport + + + + + Song Position + + + + + Tempo + + + + + Signature + + + + Piano roll - + List editor - + Drum editor - + Master track editor - + Master track list editor - + Wave editor - + Clip list - + Marker view - + Score editor - + Arranger - + <unknown toplevel type> @@ -10902,186 +11335,186 @@ MusEGui::Transport - + Overdub - - + + Replace - + Rec Mode - + Normal - + Mix - + Cycle Rec - + punchin - + loop - + punchout - - + + Punch In - - + + Loop - - + + Punch Out - + Left Mark - + Right Mark - + rewind to start - + Click this button to rewind to start position - + rewind - + Click this button to rewind - + forward - + Click this button to forward current play position - + stop - + Click this button to stop playback - + play - + Click this button to start playback - + record - + Click this button to enable recording - + AC - + quantize during record - + Click - + metronom click on/off - + Sync - + external sync on/off - + Jack - + Jack transport sync on/off - + Master - + use master track @@ -11224,27 +11657,17 @@ - - Wave edit tools - - - - - transport - - - - + WaveEdit tools - + Solo - + Cursor @@ -11252,12 +11675,12 @@ MusEGui::WaveView - + MusE - external editor failed - + MusE was unable to launch the external editor check if the editor setting in: Global Settings->Audio:External Waveditor @@ -11265,12 +11688,12 @@ - + MusE - file size changed - + When editing in external editor - you should not change the filesize since it must fit the selected region. @@ -11570,44 +11993,49 @@ - + Projects folder: - - - + + + ... - + Project Name: - + Project is a Template - + + Write window state + + + + Project song file type: - + Project Path to song file: - + Create project folder (recommended for audio projects) - + Song information: @@ -11615,14 +12043,14 @@ QObject - - + + Error - - + + Please first select the range for crescendo with the loop markers. @@ -11630,40 +12058,40 @@ QWidget - - + + Cannot convert sysex string - - + + Hex String too long (2048 bytes limit) - + generic midi - + new - - + + None - + create peakfile for - + No selection. Ignoring @@ -11691,26 +12119,26 @@ - + File %1 exists. Overwrite? - + Open File %1 failed: %2 - + MusE: write - + MusE: Open File @@ -12716,174 +13144,174 @@ file_patterns - + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) - + Midi (*.mid *.MID *.mid.gz *.mid.bz2) - + Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2) - - - - - - - - - - - - + + + + + + + + + + + + All Files (*) - + Midi (*.mid) - + Karaoke (*.kar) - + all known files (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) - + med Files (*.med *.med.gz *.med.bz2) - - - + + + Uncompressed med Files (*.med) - - - + + + gzip compressed med Files (*.med.gz) - - - + + + bzip2 compressed med Files (*.med.bz2) - + mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - + (*.jpg *.gif *.png) - + (*.jpg) - + (*.gif) - + (*.png) - + part Files (*.mpt *.mpt.gz *.mpt.bz2) - + part Files (*.mpt) - + gzip compressed part Files (*.mpt.gz) - + bzip2 compressed part Files (*.mpt.bz2) - + Presets (*.pre *.pre.gz *.pre.bz2) - + Presets (*.pre) - + gzip compressed presets (*.pre.gz) - + bzip2 compressed presets (*.pre.bz2) - + Presets (*.map *.map.gz *.map.bz2) - + Presets (*.map) - + gzip compressed presets (*.map.gz) - + bzip2 compressed presets (*.map.bz2) - + Wave/Binary (*.wav *.ogg *.bin) - + Wave (*.wav *.ogg) - + Binary (*.bin) @@ -12921,258 +13349,258 @@ - - + + dB - + Dry Level [dB] - + Wet Level [dB] - + Preset: - + AfterBurn - + AfterBurn (Long) - + Ambience - + Ambience (Thick) - + Ambience (Thick) - HD - + Cathedral - + Cathedral - HD - + Drum Chamber - + Garage - + Garage (Bright) - + Gymnasium - + Gymnasium (Bright) - + Gymnasium (Bright) - HD - + Hall (Small) - + Hall (Medium) - + Hall (Large) - + Hall (Large) - HD - + Plate (Small) - + Plate (Medium) - + Plate (Large) - + Plate (Large) - HD - + Pulse Chamber - + Pulse Chamber (Reverse) - + Resonator (96 ms) - + Resonator (152 ms) - + Resonator (208 ms) - + Room (Small) - + Room (Medium) - + Room (Large) - + Room (Large) - HD - + Slap Chamber - + Slap Chamber - HD - + Slap Chamber (Bright) - + Slap Chamber (Bright) HD - + Smooth Hall (Small) - + Smooth Hall (Medium) - + Smooth Hall (Large) - + Smooth Hall (Large) - HD - + Vocal Plate - + Vocal Plate - HD - + Warble Chamber - + Warehoouse - + Warehouse - HD - + Comb Filters - + Allpass Filters - + Bandpass Filters - + Enhanced Stereo diff -Nru muse-2.0~rc2/share/locale/muse_es.ts muse-2.0/share/locale/muse_es.ts --- muse-2.0~rc2/share/locale/muse_es.ts 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/locale/muse_es.ts 2012-06-30 19:24:42.000000000 +0200 @@ -4,211 +4,7 @@ @default - Click this button to enable recording - Pulsa este botón para habilitar la captura - - - sets amount of quantization: -0 - no quantization -100 - full quantization - selecciona el porcentaje de cuantizado: -0 - sin cuantizar -100 - sobrecuantizado - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - selecciona la Herramienta de Puntero: -con la herramienta de puntero puedes: - seleccionar partes - mover partes - copiar partes - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Pulsa este botón para abrir una <em>nueva canción</em>Puedes usar también el comando <b>Abrir</b> del me de archivo - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Pulsa este botón para guardar la canción que está editando. Se te preguntará por un nombre de archivo. -Puedes seleccionar también el comando Guardar del men de Archivo - - - Create New Song - Crea una nueva canción - - - Click this button to stop playback - Pulsa este botón para detener la reproducción - - - Click this button to start playback - Pulsa este botón para iniciar la reproducción - - - Click this button to rewind to start position - Pulsa este botón para regresar al principio - - - Click this button to rewind - Pulsa este botón para ir hacia atrás - - - Click this button to forward current play position - Pulsa este botón para adelantar la posición de reproducción - - - don't quantize notes above this tick limit - no cuantices notas por encima de este límite de resolución - - - quantize also note len as default - cuantiza también la longitud de la nota al valor por defecto - - - loop between left mark and right mark - hace un bucle entre las marcas de izquierda y derecha - - - record starts at left mark - la captura comienza en la marca izquierda - - - record stops at right mark - la captura termina en la merca derecha - - - rewind to start position - retrocede a la posición de inicio - - - rewind current position - retrasa la posición actual - - - move current position - mueve la posición actual - - - stop sequencer - para el secuenciador - - - start sequencer play - inicia el secuenciador - - - to record press record and then play - para grabar pulsa grabar y después reproducir - - - send note off to all midi channels - envia un apagado de nota (note off) a todos los canales midi - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - selecciona la Herramienta de Lápiz: -con la herramienta de lápiz puedes: - crear nuevas partes - modificar la longitud de las partes - - - select Delete Tool: -with the delete tool you can delete parts - selecciona la Herramienta de Borrado: -con la herramienta de borrado puedes borrar partes - - - select Cut Tool: -with the cut tool you can split a part - selecciona la Herramienta de Corte: -con la herramienta de core puedes partir una parte - - - select Glue Tool: -with the glue tool you can glue two parts - selecciona la Herramienta de Pegado: -con la herramienta de pegado puedes unir dos partes - - - select Score Tool: - - selecciona la Herramienta de Partitura: - - - - select Quantize Tool: -insert display quantize event - selecciona la Herramianta de Cuantización: -inserta un evento de cuantización de visualización - - - select Drawing Tool - selecciona la Herramienta de Dibujo - - - select Muting Tool: -click on part to mute/unmute - selecciona la Herramienta de Silenciar: -haz click en una parte para silenciar/des-silenciar - - - pointer - puntero - - - pencil - lápiz - - - rubber - goma - - - cutter - cortador - - - score - partitura - - - glue - pegamento - - - quantize - cuantizador - - - draw - dibujar - - - mute parts - silenciar partes - - - Off - Apagar - - - presets (*.pre *.pre.gz *.pre.bz2) - preselecciones (*.pre *.pre.gz *.pre.bz2) - - - All Files (*) - Todos los archivos (*) - - - + Add Midi Track Agregar pista MIDI @@ -248,7 +44,12 @@ Agregar sintetizador - + + Select project directory + + + + Route Ruta @@ -263,11 +64,7 @@ nombre="%1"/ - Velocity - Velocidad - - - + Warning: No output devices! Atencion: No hay salidas disponibles @@ -277,20 +74,34 @@ Configurar MIDI... - + Empty ports Puertos no asignados - + <none> <ninguno> - + channelMask="%1" channelMask="%1" + + + Bad timing + + + + + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + + AboutBox @@ -300,22 +111,36 @@ - Version 2 pre-alpha - MusE 2.0 pre-alfa + MusE 2.0 pre-alfa - (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. Published under the GNU Public License - (C) Derechos de autor 1999-2010 Werner Schweer y otros. + (C) Derechos de autor 1999-2010 Werner Schweer y otros. Ver http://www.muse-sequencer.org por nuevas versiones y mas información. + + Version 2 + + + + + (C) Copyright 1999-2012 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + (C) Derechos de autor 1999-2010 Werner Schweer y otros. +Ver http://www.muse-sequencer.org por nuevas versiones +y mas información. {1999-2012 ?} + + &Keep On Rocking! Volver a la sesión @@ -327,40 +152,9 @@ - Appearance - - MusE: load image - MusE: carga imagen - - - handle of transport window - gestor de la ventana de transporte - - - track activity in arranger - actividad de tramos en el arreglador - - - bigtime font color - color de fuente bigtime - - - bigtime background color - color de fondo de bigtime - - - waveedit background color - color de fondo de edición de onda - - - AppearanceDialogBase - MusE: Appearance Settings - MusE: Configuración de apariencia - - - + Apply Aplicar @@ -375,7 +169,7 @@ Cancelar - + Arranger Arreglador @@ -385,10 +179,6 @@ Regiones - show frames - mostrar frames - - show names mostrar nombres @@ -454,14 +244,6 @@ Imagen de fondo - bg - fondo - - - select... - selecciona... - - show snap grid muestra la rejilla de captura @@ -477,22 +259,6 @@ Objetos - selected - seleccionado - - - current: - actual: - - - change... - cambia... - - - dynamic colors for track activity in arranger - colores dinámicos para actividad en el arreglador - - Style/Fonts Estilo/Tipografía @@ -543,7 +309,12 @@ Motif Plus - + + May require restarting MusE for best results + + + + Fonts Tipografía @@ -613,7 +384,7 @@ ... - + Color name: Nombre de color @@ -623,7 +394,7 @@ Opacidad global - + Font 4 Tipografía 4 @@ -633,7 +404,7 @@ Tipografía 5 - + Palette Paleta @@ -693,7 +464,7 @@ Limpiar - + Style Sheet: Hoja de estilo @@ -704,16863 +475,11812 @@ - Arranger + ArrangerColumnsBase - Cursor - Cursor + + Configure arranger columns + - Snap - Snap + + Columns: + - Len - Longitud + + Name: + Nombre: - NO - No + + Controller type: + - TrackInfo - Información de pista + + + Midi controller type + Tipo de controlador MIDI - Track - Pista + + Control7 + Control7 - Type - Tipo + + Control14 + Control14 - midi song type - tipo de canción midi + + RPN + RPN - Pitch - Tono + + NRPN + NRPN - midi pitch - tono midi + + RPN14 + RPN14 - global midi pitch shift - desplazamiento de tono midi + + NRPN14 + NRPN14 - Tempo - Tempo + + Pitch + - midi tempo - tempo midi + + Program + Programa - O-Port - Port de Salida + + H-Ctrl + Control-H - Arranger - Arreglador + + + Midi controller number high byte + Controlar número alto del byte MIDI - Off - apagado - - - Bar - compás - - - GM - GM + + L-Ctrl + Control-L - GS - GS + + + Midi controller number low byte + - XG - XG + + * + wild card + * - N - N + + affect CCs at + - R - R + + begin of song + - A - A + + current position + - M - M + + &Add + &Agregar - S - S + + &Delete + &Borrar - C - C + + Done + + + + Awl::MidiVolEntry - Ch - Ch + + off + apagado - T - T + + db + dB + + + Awl::VolEntry - Master - Maestro + + off + Apagar + + + ClipListEditorBase - Group A - Grupo A + + MusE: ClipList + MusE: Lista de archivos de audio - Group B - Grupo B + + Name + Nombre - Group C - Grupo C + + Refs + Referencias - Group D - Grupo D + + Samplerate + - Enable Recording - Habilita captura + + Len + Duración - Solo Indicator - Indicador de solo + + Data + Datos - Track Type - Tipo de pista + + Clip Properties + Propiedades del Clip - Time Lock - Bloqueo de tiempo + + Pos: + Posición: - Port - Puerto + + Len: + Duración: - ArrangerView - - panic - pánico - - - C&ut - C&ortar - + CommentBase - &Copy - &Copiar + + Form1 + Form1 - &Paste - &Pegar + + Track Comment + Comentario de la pista - Add Track - Agregar Pista + + Track 1 + Pista 1 + + + ConfigMidiFileBase - Select - Seleccionar + + &OK + &OK - Select &All - Seleccion&ar Todo + + &Cancel + &Cancelar - &Deselect All - &Deseleccionar Todo + + 0 (single track) + 0 (una sola pista) - Invert &Selection - Invertir &Selección + + 1 (multiple tracks) + 1 (Pistas multiples) - &Inside Loop - &Interior de bucle + + Format: + Formato: - &Outside Loop - &Exterior de Bucle + + 96 + 96 - All &Parts on Track - Todas las &Partes de la pista + + 192 + 192 - Score - Partitura + + 384 + 384 - Pianoroll - Pianola + + Division: + División: - Drums - Percusión + + Copyright: + Derecho de autor - List - Lista + + MusE: Config Midi File Import/Export + MusE: Configuración de la importacion/exportación MIDI - Wave - Audio + + Import: + Importado - Mastertrack - Pista Maestra + + Split tracks into &parts + Dividir en pistas y regiones - Graphic - Gráfico + + Alt+P + Alt+P - Midi &Transform - &Transformación MIDI + + Split tracks into parts, or one single part + Dividir en pistas y regiones o una sola región. - Global Cut - Corte global + + Export: + Exportado: - Global Insert - Inserción Global + + Enable extended smf format (currently not implemented) + Habilitar formato extendido smf (no implementado) - Global Split - Partición Global + + Use &2-byte time signatures instead of standard 4 + Compás de 2 bytes - &Edit - &Editar + + Alt+2 + Alt+2 - &Structure - E&structura + + Note: Format 0 uses the FIRST midi track's name/comment in the arranger + Nota: Formato 0 utiliza el nombre de la primera pista midi como comentario en el arreglista - Functions - Funciones + + Save space by replacing note-offs with &zero velocity note-ons + Ahorro de espacio por la sustitución de "note-off" con cero y la velocidad de "note-on" - Transpose - Transponer + + Alt+Z + Alt+Z - AudioConfBase - - MusE: Audio Configuration - MusE: Configuración de Audio - - - &Apply - &Aplicar - - - &OK - C&orrecto - + CrescendoBase - &Cancel - &Cancelar + + MusE: Crescendo/Decrescendo + MusE: Crescendo/Decrescendo - Audio Parameters - Parámetros de Audio + + Range + Rango - 32 - 32 + + Looped Events + Eventos en bucle - 64 - 64 + + Selected Looped + Seleccionar bucles - 128 - 128 + + Values + Valores - 256 - 256 + + Start velocity + Velocidad al inicio - 512 - 512 + + + % + % - 1024 - 1024 + + End velocity + Velocidad al final - 2048 - 2048 + + Absolute + Absoluto - 4096 - 4096 + + Relative + Relativo - Frame Size: - Tamaño de ventana: + + OK + Aceptar - Delay: - Retardo: + + Cancel + Cancelar + + + DeicsOnzeGui - Sample Rate: - Velocidad de muestreo: + + Save configuration + Guardar configuración - 44100 - 44100 + + + + + + + + + + + Critical Error + Error critico - 48000 - 48000 + + + + + + Cannot open file %1 + No se puede abrir el archivo %1 - 96000 - 96000 + + + + + + Parsing error for file %1 + Error de análisis del archivo %1 - Audio Driver - Controlador de Audio + + + Load category dialog + Cargar diálogo de la categoría - Use Alsa - Usa Alsa + + Load set dialog + Cargar grupo de diálogos - Use JACK - Usa Jack + + Save set dialog + Guardar grupo de diálogos - No Audio - Sin Audio + + New category + Nueva categoria - Status: - Estado: + + + Delete category + Borrar categoria - TextLabel6 - EtiquetadeTexto16 + + Load category + Cargar categoria - - - AudioMixerApp - 1/2 channel - Canales 1/2 + + Save category + Guardar categoria - pre fader - post fader - pre fader - port fader + + Load set + Cargar grupo - record - grabar + + Save set + Guardar grupo - mute - silencio + + Delete set + Borrar grupo - pre fader listening - monitorizar pre fader + + New subcategory + Nueva subcategoria - record downmix - downmix de captura + + + Delete subcategory + Borrar sub categoria - off - apagado + + Load subcategory + Crgar subcategoria - output routing - ruteado de entrada + + Save subcategory + Guardar subcategoria - &Config - &Configuración + + New preset + Nuevo preseteo - Add Input Strip - Agregar canal de entrada + + + Delete preset + Borrar preseteo - S - S + + Load preset + Cargar preseteo - Pre - Pre + + Save preset + Guardar preseteo - dB - dB + + No more category supported + No se soportan mas categorías - MusE: Audio Mixer - MusE: Mezclador de audio + + You can not add more categories + No se pueden agregar mas categorias - Inputs - Entradas + + + + Do you really want to delete %1 ? + ¿Seguro desea borrar %1 ? - Synthi - Entrada de sintetizador + + + + &Yes + &Si - Tracks - Pistas + + + + &No + &No - Groups - Grupos + + + No category selected + No hay categoria seleccionada - Master - Maestro + + + You must first select a category. + Primero debe seleccionar una categoria - Group A - Grupo A + + + + Replace or add + Reemplazar o agregar - Group B - Grupo B + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 Se supone que es el número de banco superior afectado %2, pero ya hay uno en esta ranura. + ¿Quiere reemplazarlo o añadir una ranura libre después? - Group C - Grupo C + + + + &Replace + &Reemplazar - Group D - Grupo D + + + + &Add + &Agregar - &Create - &Crear + + + + Download error + Error de descarga - - - AudioStrip - off - apagado + + There is no more free category slot. + No hay mas lugar para categorías. - Pan - Bal + + Save category dialog + Guardar dialogo de categoria - S - S + + No more subcategory supported + No se soportan mas sub categorías - 1/2 channel - Canales 1/2 + + You can not add more subcategories + No se pueden agregar mas sub categorias - Pre - Pre + + + No subcategory selected + No hay subcategoria seleccionada - pre fader - post fader - pre fader - port fader + + + You must first select a subcategory. + Primero debe seleccionar una sub categoria - dB - dB + + Load subcategory dialog + Cargar dialogo de subcategoria - record - grabar + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 Se supone que es el número de banco inferior afectado %2, pero ya hay uno en esta ranura. + ¿Quiere reemplazarlo o añadir una ranura libre después? - mute - silencio + + There is no more free subcategory slot. + No hay mas lugar para sub categorías. - record downmix - downmix de captura + + Save subcategory dialog + Guardar dialogo de subcategoria - pre fader listening - monitorizar pre fader + + No more preset supported + No se soportan mas preseteos - output routing - ruteado de entrada + + You can not add more presets + No se pueden agregar mas preseteos - Channel - Canal + + + + No preset selected + No hay preseteos seleccionados - - - Awl::MidiVolEntry - - off - apagado + + + + You must first select a preset. + Primero selecciones un preseteo. - - db - dB + + Load preset dialog + Cargar dialogo de preseteo - - - Awl::VolEntry - - off - Apagar + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 Se supone que es afectada el número del programa %2,pero ya hay uno en esta ranura. + ¿Quieres reemplazarlo o añadir una ranura libre después? - - - BigTime - MusE: Bigtime - MusE: Big Time + + There is no more free preset slot. + No hay mas lugar para preseteos. - minute - minuto + + Save preset dialog + Guardar dialogo de preseteo - second - segundo + + Browse set dialog + Buscar ajustes de diálogo - frame - frame - - - subframe - sub-frame + + Browse image dialog + Buscar imagen de dialogo - ClipListEdit + DeicsOnzeGuiBase - MusE: Clip List Editor - MusE: Editor de lista de clips + + DeicsOnze + DeicsOnze - panic - pánico + + &Preset + &Preseteos - - - ClipListEditorBase - - MusE: ClipList - MusE: Lista de archivos de audio + + Program numerous + Numero de programa - - Name - Nombre + + INITVOICE + InitVoice - - Refs - Referencias + + LBank + Banco inferior - - Start - Inicio + + Subcategory + Subcategoria - Len - Duración + + Bank numerous + Numero de banco - - Data - Datos + + + NONE + Ninguno - - Clip Properties - Propiedades del Clip + + HBank + Banco superior - - Pos: - Posición: + + Category + Categoria - - Len: - Duración: + + Prog + Programa - - - CommentBase - - Form1 - Form1 + + Preset + Preselección - - Track Comment - Comentario de la pista + + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + DeicsOnze v0.5.5 Derechos Reservados(c) 2004-2006 Nil Geisweiller. Publicado bajo licencia GPL. - - Track 1 - Pista 1 + + &Global + &Global - - - ConfigMidiFileBase - - &OK - &OK + + Pitch Envelope + Envolvente de afinación - - &Cancel - &Cancelar + + PL3 + PL3 - - 0 (single track) - 0 (una sola pista) + + PL2 + PL2 - - 1 (multiple tracks) - 1 (Pistas multiples) + + PL1 + PL1 - - Format: - Formato: + + PR1 + PR1 - - 96 - 96 + + PR2 + PR2 - - 192 - 192 + + PR3 + PR3 - - 384 - 384 + + + + + + + + Pitch modulation depth + Profundidad de modulación de tono - - Division: - División: + + LFO + LFO - - Copyright: - Derecho de autor + + LFO Sync + LFO Sync - Enable extended smf format - Habilita el formato extendido de smf + + Pitch modulation sensitivity + Pitch modulation sensitivity - - MusE: Config Midi File Import/Export - MusE: Configuración de la importacion/exportación MIDI + + Pitch Modulation Sensitivity + Pitch Modulation Sensitivity - - Import: - Importado + + LFO Delay + LFO Delay - - Split tracks into &parts - Dividir en pistas y regiones + + LFO delay + LFO delay - - Alt+P - Alt+P + + LFO speed + LFO speed - - Split tracks into parts, or one single part - Dividir en pistas y regiones o una sola región. + + Amplitude modulation depth + Amplitude modulation depth - - Export: - Exportado: + + Amplitude modulation sensitivity + Amplitude modulation sensitivity - - Enable extended smf format (currently not implemented) - Habilitar formato extendido smf (no implementado) + + Amplitude Modulation Sensitivity + Amplitude Modulation Sensitivity - - Use &2-byte time signatures instead of standard 4 - Compás de 2 bytes + + AMS + AMS - - Alt+2 - Alt+2 + + LFO Waveform + LFO Waveform - - Note: Format 0 uses the FIRST midi track's name/comment in the arranger - Nota: Formato 0 utiliza el nombre de la primera pista midi como comentario en el arreglista + + + Pitch Modulation Depth + Pitch Modulation Depth - - Save space by replacing note-offs with &zero velocity note-ons - Ahorro de espacio por la sustitución de "note-off" con cero y la velocidad de "note-on" + + PMD + PMD - - Alt+Z - Alt+Z + + LFO Speed + LFO Speed - - - CrescendoBase - - MusE: Crescendo/Decrescendo - MusE: Crescendo/Decrescendo + + AMD + AMD - - Range - Rango + + Speed + Velocidad - - Looped Events - Eventos en bucle - - - - Selected Looped - Seleccionar bucles + + Delay + Delay - Values - Valores - - - - Start velocity - Velocidad al inicio - - - - - % - % - - - - End velocity - Velocidad al final - - - - Absolute - Absoluto - - - - Relative - Relativo - - - - OK - Aceptar + PMS + PMS - Cancel - Cancelar - - - - CtrlPanel - - select controller - selecciona controlador - - - remove panel - quitar panel - - - other ... - otro ... - - - Sel - Sel + + Modulation Matrix + Modulation Matrix - x - x + + <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> +<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> +<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> +<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> +<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> +<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> +<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> +<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> +<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> - Velocity - Velocidad + + Op4 Feedback + Op4 Feedback - Pitch - Tono + + + Feedback level of the operator 4 + Feedback level of the operator 4 - S - S + + + + Transpose + Transponer - off - apagado + + Op &1 + Op &1 - - - DeicsOnzeGui - - Save configuration - Guardar configuración + + Scaling 1 + Scaling 1 - - - - - - - - - - - Critical Error - Error critico + + LS1 + LS1 - - - - - - Cannot open file %1 - No se puede abrir el archivo %1 + + RS1 + RS1 - - - - - - Parsing error for file %1 - Error de análisis del archivo %1 + + + + + + + + + Rate Scaling + Rate Scaling - - - Load category dialog - Cargar diálogo de la categoría + + + + + + + + + + + + + Attack Rate of the operator 1 + Attack Rate of the operator 1 - - Load set dialog - Cargar grupo de diálogos + + + + + + + + + Level Scaling + Level Scaling - - Save set dialog - Guardar grupo de diálogos + + Amplitude Envelope 1 + Amplitude Envelope 1 - - New category - Nueva categoria + + RR1 + RR1 - - - Delete category - Borrar categoria + + D1R1 + D1R1 - - Load category - Cargar categoria + + D1L1 + D1L1 - - Save category - Guardar categoria + + D2R1 + D2R1 - Load set - Cargar grupo - - - - Save set - Guardar grupo + + + + Release Rate + Release Rate - - - Delete set - Borrar grupo + + + + + + 2° Decay Rate + 2° Decay Rate - - - New subcategory - Nueva subcategoria + + + + + + 1° Decay Level + 1° Decay Level - - - - Delete subcategory - Borrar sub categoria + + + + + + 1° Decay Rate + 1° Decay Rate - - Load subcategory - Crgar subcategoria - - - - Save subcategory - Guardar subcategoria - - - - New preset - Nuevo preseteo - - - - - Delete preset - Borrar preseteo - - - - Load preset - Cargar preseteo - - - - Save preset - Guardar preseteo - - - - No more category supported - No se soportan mas categorías - - - - You can not add more categories - No se pueden agregar mas categorias - - - - - - Do you really want to delete %1 ? - ¿Seguro desea borrar %1 ? - - - - - - &Yes - &Si - - - - - - &No - &No - - - - - No category selected - No hay categoria seleccionada - - - - - You must first select a category. - Primero debe seleccionar una categoria - - - - - - Replace or add - Reemplazar o agregar - - - - %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? - %1 Se supone que es el número de banco superior afectado %2, pero ya hay uno en esta ranura. - ¿Quiere reemplazarlo o añadir una ranura libre después? - - - - - - &Replace - &Reemplazar - - - - - - &Add - &Agregar - - - - - - Download error - Error de descarga - - - - There is no more free category slot. - No hay mas lugar para categorías. - - - - Save category dialog - Guardar dialogo de categoria - - - - No more subcategory supported - No se soportan mas sub categorías - - - - You can not add more subcategories - No se pueden agregar mas sub categorias - - - - - No subcategory selected - No hay subcategoria seleccionada - - - - - You must first select a subcategory. - Primero debe seleccionar una sub categoria - - - - Load subcategory dialog - Cargar dialogo de subcategoria - - - - %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? - %1 Se supone que es el número de banco inferior afectado %2, pero ya hay uno en esta ranura. - ¿Quiere reemplazarlo o añadir una ranura libre después? - - - - There is no more free subcategory slot. - No hay mas lugar para sub categorías. - - - - Save subcategory dialog - Guardar dialogo de subcategoria - - - - No more preset supported - No se soportan mas preseteos - - - - You can not add more presets - No se pueden agregar mas preseteos - - - - - - No preset selected - No hay preseteos seleccionados - - - - - - You must first select a preset. - Primero selecciones un preseteo. - - - - Load preset dialog - Cargar dialogo de preseteo - - - - %1 is supposed to be affected to the prog number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? - %1 Se supone que es afectada el número del programa %2,pero ya hay uno en esta ranura. - ¿Quieres reemplazarlo o añadir una ranura libre después? - - - - There is no more free preset slot. - No hay mas lugar para preseteos. - - - - Save preset dialog - Guardar dialogo de preseteo - - - - Browse set dialog - Buscar ajustes de diálogo - - - - Browse image dialog - Buscar imagen de dialogo - - - - DeicsOnzeGuiBase - - - DeicsOnze - DeicsOnze - - - - &Preset - &Preseteos - - - - Program numerous - Numero de programa - - - - INITVOICE - InitVoice - - - - LBank - Banco inferior - - - - Subcategory - Subcategoria - - - - - Bank numerous - Numero de banco - - - - - NONE - Ninguno - - - - HBank - Banco superior - - - - Category - Categoria - - - - Prog - Programa - - - - Preset - Preselección - - - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - DeicsOnze v0.5.5 Derechos Reservados(c) 2004-2006 Nil Geisweiller. Publicado bajo licencia GPL. - - - - &Global - &Global - - - - Pitch Envelope - Envolvente de afinación - - - - PL3 - PL3 - - - - PL2 - PL2 - - - - PL1 - PL1 - - - - PR1 - PR1 - - - - PR2 - PR2 - - - - PR3 - PR3 - - - - - - - - - - Pitch modulation depth - Profundidad de modulación de tono - - - - LFO - LFO - - - - LFO Sync - LFO Sync - - - - Pitch modulation sensitivity - Pitch modulation sensitivity - - - - Pitch Modulation Sensitivity - Pitch Modulation Sensitivity - - - - LFO Delay - LFO Delay - - - - LFO delay - LFO delay - - - - LFO speed - LFO speed - - - - Amplitude modulation depth - Amplitude modulation depth - - - - Amplitude modulation sensitivity - Amplitude modulation sensitivity - - - - Amplitude Modulation Sensitivity - Amplitude Modulation Sensitivity - - - - AMS - AMS - - - - LFO Waveform - LFO Waveform - - - - - Pitch Modulation Depth - Pitch Modulation Depth - - - - PMD - PMD - - - - LFO Speed - LFO Speed - - - - AMD - AMD - - - - Speed - Velocidad - - - - Delay - Delay - - - - PMS - PMS - - - - - Modulation Matrix - Modulation Matrix - - - - <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> -<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> -<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> -<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> -<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> - <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> -<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> -<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> -<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> -<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> - - - - Op4 Feedback - Op4 Feedback - - - - - Feedback level of the operator 4 - Feedback level of the operator 4 - - - - - - Transpose - Transponer - - - - Op &1 - Op &1 - - - - Scaling 1 - Scaling 1 - - - - LS1 - LS1 - - - - RS1 - RS1 - - - - - - - - - - - Rate Scaling - Rate Scaling - - - - - - - - - - - - - - - Attack Rate of the operator 1 - Attack Rate of the operator 1 - - - - - - - - - - - Level Scaling - Level Scaling - - - - Amplitude Envelope 1 - Amplitude Envelope 1 - - - - RR1 - RR1 - - - - D1R1 - D1R1 - - - - D1L1 - D1L1 - - - - D2R1 - D2R1 - - - - - - - Release Rate - Release Rate - - - - - - - 2° Decay Rate - 2° Decay Rate - - - - - - - 1° Decay Level - 1° Decay Level - - - - - - - 1° Decay Rate - 1° Decay Rate - - - - - - - Attack Rate - Attack Rate - - - - AR1 - AR1 - - - - Detune, OSCWave, EGShift 1 - Detune, OSCWave, EGShift 1 - - - - DET1 - DET1 - - - - - - - - - - - - Detune - Detune - - - - - - - EG Shift - EG Shift - - - - - - - 96dB - 96dB - - - - - - - 48dB - 48dB - - - - - - - 24dB - 24dB - - - - - - - 12dB - 12dB - - - - - - - Wave form - Wave form - - - - - - - Wave form 1 = <i>sin(<b>t</b>)</i><br> -Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> -Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> -Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> -Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> -Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> - Wave form 1 = <i>sin(<b>t</b>)</i><br> -Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> -Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> -Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> -Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> -Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> - - - - Sensitivity 1 - Sensitivity 1 - - - - KVS1 - KVS1 - - - - - - - Amplitude Modulation Enable - Amplitude Modulation Enable - - - - AME1 - AME1 - - - - - - - Keyboard Velocity Sensitivity - Keyboard Velocity Sensitivity - - - - - - - Key Velocity Sensitivity - Key Velocity Sensitivity - - - - EBS1 - EBS1 - - - - - - - EG Bias Sensitivity - EG Bias Sensitivity - - - - - - - Eg Bias Sensitivity - Eg Bias Sensitivity - - - - Frequency 1 - Frequency 1 - - - - Coarse 1 - Coarse 1 - - - - - - - Coarse Ratio - Coarse Ratio - - - - Fine 1 - Fine 1 - - - - - - - Fine Ratio - Fine Ratio - - - - Freq 1 - Freq 1 - - - - - - - Fixed Frequency - Fixed Frequency - - - - - - - Toggle Fix Frequency - Toggle Fix Frequency - - - - - - - FIX - FIX - - - - OUT 1 - OUT 1 - - - - - - - Output Volume - Output Volume - - - - - - - - - Volume - Volume - - - - Op &2 - Op &2 - - - - Amplitude Envelope 2 - Amplitude Envelope 2 - - - - D1R2 - D1R2 - - - - D1L2 - D1L2 - - - - D2R2 - D2R2 - - - - RR2 - RR2 - - - - AR2 - AR2 - - - - Frequency 2 - Frequency 2 - - - - Coarse 2 - Coarse 2 - - - - Fine 2 - Fine 2 - - - - Freq 2 - Freq 2 - - - - Scaling 2 - Scaling 2 - - - - LS2 - LS2 - - - - RS2 - RS2 - - - - OUT 2 - OUT 2 - - - - Detune, OSCWave, EGShift 2 - Detune, OSCWave, EGShift 2 - - - - DET2 - DET2 - - - - Sensitivity 2 - Sensitivity 2 - - - - EBS2 - EBS2 - - - - KVS2 - KVS2 - - - - AME2 - AME2 - - - - Op &3 - Op &3 - - - - Amplitude Envelope 3 - Amplitude Envelope 3 - - - - D1R3 - D1R3 - - - - D1L3 - D1L3 - - - - D2R3 - D2R3 - - - - RR3 - RR3 - - - - AR3 - AR3 - - - - Scaling 3 - Scaling 3 - - - - LS3 - LS3 - - - - RS3 - RS3 - - - - OUT 3 - OUT 3 - - - - Frequency 3 - Frequency 3 - - - - Coarse 3 - Coarse 3 - - - - Fine 3 - Fine 3 - - - - Freq 3 - Freq 3 - - - - Detune, OSCWave, EGShift 3 - Detune, OSCWave, EGShift 3 - - - - DET3 - DET3 - - - - Sensitivity 3 - Sensitivity 3 - - - - EBS3 - EBS3 - - - - KVS3 - KVS3 - - - - AME3 - AME3 - - - - Op &4 - Op &4 - - - - amplitude Envelope 4 - amplitude Envelope 4 - - - - AR4 - AR4 - - - - D1R4 - D1R4 - - - - D1L4 - D1L4 - - - - D2R4 - D2R4 - - - - RR4 - RR4 - - - - Frequency 4 - Frequency 4 - - - - Coarse 4 - Coarse 4 - - - - Fine 4 - Fine 4 - - - - Freq 4 - Freq 4 - - - - Scaling 4 - Scaling 4 - - - - LS4 - LS4 - - - - RS4 - RS4 - - - - OUT 4 - OUT 4 - - - - Detune, OSCWave, EGShift 4 - Detune, OSCWave, EGShift 4 - - - - DET4 - DET4 - - - - Sensitivity 4 - Sensitivity 4 - - - - EBS4 - EBS4 - - - - KVS4 - KVS4 - - - - AME4 - AME4 - - - - &Func - &Func - - - - Delay Pan Depth - Delay Pan Depth - - - - Delay Pan LFO Freq - Delay Pan LFO Freq - - - - Delay Ch Send Level - Delay Ch Send Level - - - - - - Channel Chorus - Channel Chorus - - - - Delay Feedback - Delay Feedback - - - - Delay On/Off, Return Level - Delay On/Off, Return Level - - - - - - On - On - - - - Delay Beat Ratio - Delay Beat Ratio - - - - Delay BPM - Delay BPM - - - - Foot Control - Foot Control - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pitch Bend Range - Pitch Bend Range - - - - - - - Pitch - Pitch - - - - - - - Amplitude - Amplitude - - - - Modulation Wheel - Modulation Wheel - - - - Breath Control - Breath Control - - - - - Pitch Bias - Pitch Bias - - - - - Envelope Bias - Envelope Bias - - - - After Touch - After Touch - - - - Phony Mode - Phony Mode - - - - POLY - POLY - - - - MONO - MONO - - - - Potamento - Portamento - - - - Portamento Mode - Portamento Mode - - - - FINGER - FINGER - - - - FULL - FULL - - - - PT - PT - - - - - Portamento Time - Portamento Time - - - - C&horus - C&horus - - - - Chorus Parameters - Chorus Parameters - - - - - Channel send level - Channel send level - - - - - On/Off and Return level - On/Off and Return level - - - - - Select LADSPA plugin - Select LADSPA plugin - - - - - Change plugin - Cambiar efecto - - - - &Reverb - &Reverb - - - - Reverb Parameters - - - - - &Config - &Configuración - - - - Font Size - Tamaño de fuente - - - - Quality - Calidad - - - - High - Alta - - - - Middle - Media - - - - Low - Baja - - - - Ultra low - Muy baja - - - - Filter - Filtro - - - - Save Mode (into the song) - Guardar modo (en la sesión) - - - - Save only the used presets - Guardar solo el preseteo - - - - Save the entire set - Guardar todas las configuraciones - - - - Save the configuration - Guardar configuración - - - - Configuration File - Archivo de configuración - - - - Save... - Guardar... - - - - Load... - Abrir... - - - - Save as default - Guardar por defecto - - - - Colors - Colores - - - - Text - Texto - - - - Background - Fondo - - - - Edit Text - Editar texro - - - - Edit Background - Editar fondo - - - - - - Red - Rojo - - - - - - Blue - Azúl - - - - - - Green - Verde - - - - Set Path - Ajustes de la ruta - - - - Image in the background : - Imagen de fondo: - - - - - Browse... - Buscar... - - - - Load the set at the initialization : - Cargar al iniciar - - - - Set Brightness, Detune, Attack and Release of the current channel to default - Ajustes de Brightness, Detune, Attack y Release del canal actual por defecto - - - - Res. Ctrl - Reestablecer - - - - Cut all notes off - Apaga todas las notas - - - - Panic! - Pánico! - - - - Number of Voices - Número de voces - - - - Number of voices - Número de voces - - - - Enable - Habilitado - - - - Channel - Canal - - - - Vol - Volumen - - - - Channel Ctrl - Controlador de canal - - - - Release - Release - - - - Attack - Ataque - - - - Brightness - Brillo - - - - Modulation - Modulación - - - - Pan - Panorámica - - - - DelOverlapsBase - - - MusE: Delete Overlaps - MusE: Borrar superpuestos - - - - Range - Rango - - - - All Events - Todos los eventos - - - - Selected Events - Eventos seleccionados - - - - Looped Events - Bucle de eventos - - - - Selected Looped - Selecionar bucle - - - - OK - Aceptar - - - - Cancel - Cancelar - - - - DidYouKnow - - - Did you know? - ¿Sabia usted que? - - - - Don't show on startup - No volver a mostrar - - - - Next tip - Siguiente sugerencia - - - - Close - Cerrar - - - - DrumEdit - - Load Map - Carga Mapa - - - Save Map - Guarda Mapa - - - &Edit - &Editar - - - Cut - Cortar - - - Copy - Copiar - - - Paste - Pegar - - - Delete Events - Borrar Eventos - - - Select All - Seleccionar todo - - - Select None - Deseleccionar - - - Invert - Invertir - - - Inside Loop - Bucle interior - - - Outside Loop - Bucle exterior - - - &Select - &Seleccionar - - - Step Record - Parar captura - - - Midi Input - Entrada MIDI - - - Add Controller View - Agregar Controlador - - - M - M - - - Sound - Sonido - - - QNT - QNT - - - E-Note - Nota-E - - - Len - Longitud - - - A-Note - Nota-A - - - Ch - Ch - - - Port - Puerto - - - LV1 - VL1 - - - LV2 - VL2 - - - LV3 - VL3 - - - LV4 - VL4 - - - &File - &Fichero - - - Load Drummap - Cargar mapa de percusión - - - Store Drummap - Guardar mapa de percusión - - - ctrl - control - - - drummaps - mapas de percusión - - - Muse: Load Drum Map - MusE: Cargar mapa de percusión - - - MusE: Store Drum Map - MusE: Guardar mapa de percusión - - - &Functions - &Funciones - - - mute instrument - silenciar instrumento - - - sound name - nombre del sonido - - - quantisation - cuantización - - - this input note triggers the sound - ensta nota de entrada dispara el sonido - - - note length - longitud de nota - - - output port - puerto de salida - - - Quantize - Cuantizar - - - panic - pánico - - - - EditCAfterDialog - - Time Position - Posición de tiempo - - - Pressure - Presión - - - MusE: Enter Channel Aftertouch - MusE: Introduce el AfterTouch del canal - - - - EditCtrl14Dialog - - Time Position - Posición de tiempo - - - Controller-H - Controlador-H - - - Controller-L - Controlador-L - - - Value - Valor - - - MusE: Enter Controller14 Event - MusE: Introduce el evento del controlador 14 - - - - EditCtrl7Dialog - - Time Position - Posición de tiempo - - - Controller - Controlador - - - Value - Valor - - - MusE: Enter Controller Event - MusE: Introduce el evento del controlador - - - - EditCtrl7DialogBase - - MusE: Enter Controller - MusE: Introduce controlador - - - Controller: - Controlador: - - - Time Position: - Posición de tiempo: - - - Value: - Valor: - - - controller value - valor del controlador - - - OK - Aceptar - - - Cancel - Cancelar - - - - EditCtrlBase - - - MusE: Edit Controller Event - MusE:-Editar eventos de control - - - - Time Position - Posición de tiempo - - - - Available Controller: - Control disponible - - - - Create New Controller - Crear nuevo control - - - - textLabel3 - textLabel3 - - - - Value - Valor - - - - Controller - Controlador - - - - H-Bank - Banco-H - - - - L-Bank - Banco-L - - - - Program - Programa - - - - - off - apagado - - - - pushButton4 - pushButton4 - - - - &OK - &Aceptar - - - - &Cancel - &Cancelar - - - - EditEventDialog - - Ok - Aceptar - - - Cancel - Cancelar - - - - EditGainBase - - - MusE: Modify gain - MusE:-Modificar ganancia - - - - Gain - Ganancia - - - - 200% - 200% - - - - 100% - 100% - - - - 0% - 0% - - - - &Reset - &Resetear - - - - Alt+R - Alt+R - - - - &Apply - &Aplicar - - - - Alt+A - Alt+A - - - - &Cancel - &Cancelar - - - - Alt+C - Alt+C - - - - EditInstrument - - MusE: Write File failed - MusE: La captura del archivo ha fallado - - - MusE - MusE - - - &Save - &Guardar - - - &Nosave - &No Guardar - - - &Abort - &Abortar - - - - EditInstrumentBase - - - MusE: Instrument Editor - MusE: Editro de Instrumento - - - - High Bank: - Banco superior: - - - - Low Bank: - Banco inferior: - - - - Program: - Programa: - - - - - - &Delete - &Borrar - - - - - - Alt+D - Alt+D - - - - Drum - Percusión - - - - GM - GM - - - - GS - GS - - - - XG - XG - - - Controller - Controlador - - - - This is a list of commonly used midi controllers. -Note that in MusE pitch and program changes are -handled like normal controllers. - Lista de controladores MIDI de uso común -Tenga en cuenta que en Muse cambios de tono -y el programa se manejan como los controladores normales. - - - - - Properties - Propiedades - - - Name - Nombre - - - Type - Tipo - - - - Control7 - Control7 - - - - Control14 - Control14 - - - - RPN - RPN - - - - NRPN - NRPN - - - - Pitch - Tono - - - - Program - Programa - - - - - H-Ctrl - Control-H - - - - - L-Ctrl - Control-L - - - - Min - Minimo - - - - Max - Máximo - - - - Name - Nombre - - - - Type - Tipo - - - SysEx - Sistema Exclusivo - - - - Hex Entry: - Hexadecimal: - - - - &File - Archivo - - - - Tools - Herramientas - - - - New - Nuevo - - - - &New - &Nuevo - - - - Ctrl+N - Ctrl+N - - - - Open - Abrir - - - - &Open... - &Abrir... - - - - Ctrl+O - Ctrl+O - - - - Save - Guardar - - - - &Save - &Guardar - - - - Ctrl+S - Ctrl+S - - - - Save As - Guardar como - - - - Save &As... - Guardar &Como... - - - - Exit - Salir - - - - E&xit - &Salir - - - - Instrument Name: - Nombre de instrumento: - - - - Selected instrument name. - Seleccionar nombre de instrumento - - - - List of defined instruments. - Lista de instrumentos definidos - - - - Pa&tches - Grupos - - - - List of groups and patches. - Lista de grupos - - - - Group/Patch - Grupos - - - - - - Name: - Nombre: - - - - - Group or patch name - Nombre de grupo o sección - - - - Patch high bank number - Número de grupo de banco superior - - - - Patch high bank number. --- means don't care. - Número de grupo de banco superior. - - - - --- - dont care - no importa - - - - Patch low bank number - Número de grupo de banco inferior - - - - Patch low bank number. --- means don't care. - Número de grupo de banco inferior. - - - - --- - - - - - - Patch program number - Número de parte de programa - - - - Drum patch - Parte de percusiòn - - - - If set, the patch is available only for drum channels. - Si se establece, el grupo estará disponible únicamente para los canales de percusión. - - - - GM patch - Grupo GM - - - - If set, the patch is available in a 'GM' or 'NO' midi song type. - Si se establece, estará disponible el grupo "GM" para la sesión. - - - - GS patch - Grupo GS - - - - If set, the patch is available in a 'GS' or 'NO' midi song type. - Si se establece, estará disponible el grupo "GS" para la sesión. - - - - XG patch - Grupo XG - - - - If set, the patch is available in an 'XG' or 'NO' midi song type. - Si se establece, estará disponible el grupo "XG" para la sesión. - - - - Delete group or patch - Borrar grupo - - - - New patch - Nueva grupo - - - - New &Patch - Nueva gru&po - - - - Alt+P - Alt+P - - - - New group - Nuevo grupo - - - - New &Group - Nuevo &Grupo - - - - Alt+G - Alt+G - - - - Contro&ller - Contro&lador - - - - Common: - Comunes: - - - - List of defined controllers - Lista de controladores definidos - - - - List of defined controllers. - Lista de controladores definidos. - - - - Min - Mínimo - - - - Max - Máximo - - - - Def - Def - - - - Midi controller name - Nombre de controlador MIDI - - - - Type: - Tipo: - - - - - Midi controller type - Tipo de controlador MIDI - - - - RPN14 - RPN14 - - - - NRPN14 - NRPN14 - - - - - Midi controller number high byte - Controlar número alto del byte MIDI - - - - Midi controller number low byte (* means drum controller) - Controlador MIDI byte bajo (* significa que controla la percusión) - - - - Midi controller number low byte. -If low byte is * then the controller is a - 'drum controller'. For drum tracks and - GS/XG type songs and instruments. -Allows controllers for each instrument in - Muse's drum map. The low byte will be - replaced by the 'ANote' in the drum map. -Examples: The GS and XG instruments' - Drum controllers. - Controlador MIDI byte bajo. - Byte bajo es * el controlador - regulador de percusión,-para las pistas de batería e - instrumentos GS / XG. - - - - * - wild card - * - - - - Range: - Rango: - - - - Minimum value. If negative, auto-translate. - Valor mínimo. Si es negativo,se traduce automaticamente. - - - - Minimum value. If the minimum value - is negative, the range will automatically - be translated to a positive range. - -Useful for controllers which should be - displayed with zero bias. For example, -'Pan': Minimum: -64 Maximum: 63 -True range: Min: 0 Max: 127 (bias = 64) -'CoarseTuning': Min: -24 Max: 23 -True range: Min: 40 Max: 87 (bias = 64) - -Bias is determined from controller type: -7-bit Controller7 / RPN: Bias = 64 -14-bit Controller14 / RPN14: Bias = 8192 - -Type 'Pitch' is the exception. It is biased - at zero, even with a negative minimum: -'Pitch': Min: -8192 Max: 8191 -True range: Min: -8192 Max: 8191 (bias 0) - Valor mínimo. Si el valor mínimo - es negativo, el rango automáticamente - se traduce en un rango positivo. - -El valor es determinado por el tipo de controlador -7-bit Controller7 / RPN: Bias = 64 -14-bit Controller14 / RPN14: Bias = 8192 - -'Pitch' es la excepción. Está fijada - a cero, incluso con un mínimo negativo -'Pitch': Min: -8192 Max: 8191 -True range: Min: -8192 Max: 8191 (bias 0) - - - - - Maximum value - Valor máximo - - - - Default: - Por defecto: - - - - L-Bank - Banco-L - - - - - - - - off - apagado - - - - Progr. - Programa - - - - ??? - ??? - - - - H-Bank - Banco-H - - - - Default value. Off: No default. - El valor por defecto. Apagado: No hay valor por defecto. - - - - Default (initial) value. Off means no default. - -If a default value is chosen, the value will be sent - to the controller when the controller is added to - the song (in piano roll or event editor). When - the song is re-loaded, the value is sent again. -Otherwise the controller remains at its last value. -Controllers are also automatically added to a - song upon reception of a midi controller event. - -Caution! Watch out for controllers such as - 'Sustain' and 'ResetAllController' with default - values. You should probably turn 'off' their - default (in piano roll or drum edit, and - instrument editor). - Valor por defecto (inicial) . Apagado, no tiene valor predeterminado. - -Si se elije un valor por defecto , el valor será enviado - cuando el controlador se añada en la sesión - (en el editor de matríz o editor de lista). cuando - si la sesión se vuelve a cargar, el valor se vuelve a enviar. -De lo contrario el controlador permanece en su último valor. -Los controladores también se añaden automáticamente a una - sesión a la recepción de un evento de controlador midi. - - - - off - dont care - apagado - - - - Add common controller - Agregar controlador común - - - - &Add - &Agregar - - - - Alt+A - Alt+A - - - - Delete controller - Borrar controlador - - - - Create a new controller - Crear un nuevo controlador - - - - New &Controller - Nuevo - - - - Alt+C - Alt+C - - - - Null Param Hi: - Byte alto no válido: - - - - Null parameter number High byte - El número de byte alto no es válido. - - - - - If set, these 'null' parameter numbers will - be sent after each RPN/NRPN event. -This prevents subsequent 'data' events - from corrupting the RPN/NRPN controller. -Typically, set to 127/127, or an unused - RPN/NRPN controller number. - Si se establece, 'nulo' el número de parámetro - será enviados después de cada evento RPN / NRPN. -Esto evita que los acontecimientos posteriores de "datos" - corrompan el controlador RPN / NRPN. -Por lo general, establezca a 127/127, o usar el - número de controlador RPN / NRPN. - - - - Lo: - Inferior: - - - - Null parameter number Low byte - El parametro inferior es nulo - - - - S&ysEx - S&ysEx - - - - SysEx List: - Lista se Sistema exclusivo (SysEx) - - - - New SysE&x - Nuevo SysE&x - - - - Alt+X - Alt+X - - - - &Help - A&yuda - - - - - new item - Nuevo ítem - - - - - What's this? - ¿Que es esto? - - - - EditMetaDialog - - Time Position - Posición de tiempo - - - Meta Type - Tipo de Meta - - - Enter Hex - Introduzca en Hexadecimal - - - MusE: Enter Meta Event - MusE: Introduzca evento Meta - - - - EditMetaDialogBase - - MusE: Enter Meta Event - MusE: Introduzca evento Meta - - - OK - Aceptar - - - Cancel - Cancelar - - - TextLabel1 - EtiquetaTexto1 - - - Time Position: - Posición de tiempo - - - Meta Type: - Tipo de Meta: - - - Enter Hex - Escribe Hexadecimal - - - - EditNoteDialogBase - - - MusE: Enter Note - MusE: Escribe Nota - - - - OK - Aceptar - - - - Cancel - Cancelar - - - - Length: - Duración: - - - - Time Position: - Posición de tiempo: - - - - Pitch: - Tono: - - - - Velocity On: - Velocidad On: - - - - Velocity Off: - Velocidad Off: - - - - EditPAfterDialog - - Time Position - Posición de tiempo - - - Pitch - Tono - - - Pressure - Presión - - - MusE: Enter Poly Aftertouch - Muse: Escribe el aftertouch polifónico - - - - EditPitchDialog - - Time Position - Posición de tiempo - - - Pitch - Tono - - - MusE: Enter Pitch Shift - MusE: Introduce el deplazamiento de tono - - - - EditSysexDialogBase - - - MusE: Enter SysEx - MusE: Introducir sistema exclusivo - - - - TimePosition: - Posición de tiempo: - - - - Comment: - Comentario: - - - - OK - Aceptar - - - - Cancel - Cancelar - - - - EditToolBar - - Edit Tools - Editar herramientas - - - - EffectRack - - effect rack - rack de efectos - - - move up - subir - - - move down - bajar - - - remove - quitar - - - bypass - saltar - - - show gui - mostrar gui - - - new - nuevo - - - change - cambiar - - - - FLUIDGui - - - FLUID: open Soundfile - FLUID: Archivo de sonido abierto - - - - FLUIDGuiBase - - - Form1 - Formulario1 - - - - Soundfont - Fuente de sonido - - - - Load - Cargar - - - - FLUIDSynthGuiBase - - - FLUID Synth - Fluid Synth - - - - Load - Cargar - - - - Delete - Borrar - - - - Dump Info - Volcar información - - - - ID - ID - - - - Fontname - Nombre de fuente - - - - Chnl - Canal - - - - Soundfont - Fuente de sonido - - - - Drum Chnl - Canal de percusión - - - - - Level - Nivel - - - - Width - Anchura - - - - Damping - Amortiguamiento - - - - Room Size - Tamaño sala - - - - Reverb - Reverberación - - - - CHANNEL SETUP - CONFIGURACIÓN DE CANAL - - - - Sine - Seno - - - - Triangle - Triángulo - - - - Type - Tipo - - - - Number - Número - - - - Speed - Velocidad - - - - Depth - Profundidad - - - - Chorus - Coro ;-) - - - - Gain - Ganancia - - - - LOADED SOUNDFONTS - SOUNDFONTS CARGADOS - - - - FileDialogButtons - - Form1 - Formulario1 - - - - Global - Global - - - - User - Usuario - - - - Project - Sesión - - - - only -Songdata - Solo -Datos de sesión - - - - fdialogbuttons - Dialogo de botones - - - - Songdata + -Configuration - Datos de sesión + -Configuración - - - - FluidSynthGui - - - Choose soundfont - Elegir soundfont - - - - FontSel - - Size: - Tamaño: - - - - GateTimeBase - - MusE: Modify Gate Time - MusE: Modifica el timpo de puerta - - - - Range - Rango - - - - All Events - Todos los eventos - - - - Selected Events - Eventos seleccionados - - - - Looped Events - Eventos en bucle - - - Selected & Looped - Seleccionados y en bucle - - - - MusE: Modify Note Length - MusE: Cambiar duración de notas - - - - Selected Looped - Seleccionar bucles - - - - Values - Valores - - - - Rate: - Velocidad: - - - - Offset: - Desplazamiento: - - - - % - % - - - - lenNew = (lenOld * rate) + offset - lenNew = (lenOld * rate) + offset - - - - OK - Aceptar - - - - Cancel - Cancelar - - - - GlobalSettingsDialogBase - - - MusE: Global Settings - MusE: Configuración global globales - - - - Audio - Audio - - - - Mixer - Mezclador - - - - - dB - dB - - - - min. Meter Value - Valor mínimo del vúmetro - - - min.Slider Val - valor mínimo del desplazador - - - - Midi - MIDI - - - - Ticks - Tics - - - - - - 1024 - 1024 - - - - - - 2048 - 2048 - - - - 4096 - 4096 - - - 8172 - 8172 - - - - Displayed Resolution -(Ticks/Quarternote) - Resolución mostrada -(tics/negra) - - - - - 48 - 48 - - - - - 96 - 96 - - - - - 192 - 192 - - - - - 384 - 384 - - - - - 768 - 768 - - - - - 1536 - 1536 - - - - - 3072 - 3072 - - - - - 6144 - 6144 - - - - - 12288 - 12288 - - - - RTC Resolution -(Ticks/Sec) - Resolución del reloj -(Tics/segundo) - - - GUI - GUI - - - - /sec - /seg - - - - GUI Refresh Rate - Velocidad de refresco de la interfáz - - - - GUI Behaviour - - - - - Use project save dialog - Usar diálogo de guardado - - - - Some popup menus stay open (else hold Ctrl) - Menús emergentes (si no mantenga presionado Ctrl) - - - - Allows some popup menus to stay open. -Otherwise, hold Ctrl to keep them open. - Permite tener abiertos algunos menús emengentes. -De lo contrario, mantenga la tecla Ctrl para mantenerlos abiertos. - - - - In some areas, the middle mouse button decreases -values, while the right button increases. Users without a -middle mouse button can select this option to make the -left button behave like the middle button in such areas. - En algunas zonas, el botón central del ratón disminuye el -valor, mientras que el botón derecho lo aumenta. Los usuarios -sin un botón central del ratón, puede seleccionar esta opción -para hacer que el botón de la izquierda se comporte como -el botón del medio. - - - - Use left mouse button for decreasing values - Botón izquierdo del ratón reduce el valor - - - - Shift + Right click sets left range marker - Ctrl + clic derecho establece marcador de la izquierda. - - - - Allow adding hidden tracks in track list menu - - - - - Unhide tracks when adding hidden tracks - - - - - GUI Style - - - - - MDI-subwindowness and sharing menus - MDI Sub ventanas y posición de menús - - - - Presets: - Preseteos: - - - - traditional MusE SDI - Comportamiento tradicional de MusE - - - - Cakewalk-like MDI - Comportamiento similar a Cakewalk - - - - Borland-/Mac-like MDI - Comportamiento similar a Borland/Mac - - - - &Apply - &Aplicar - - - - &Ok - Ac&eptar - - - - &Cancel - &Cancelar - - - Help Browser: - Navegador de ayuda: - - - - Application - Aplicación - - - - Start Muse - Inicio de MusE - - - - start with last song - Abrir la última sesión - - - - start with song - Abrir la sesión - - - - start song: - Iniciar sesión: - - - - Views - Vistas - - - - - - - - y-pos - pos. Y - - - - - - - show - Ver - - - - - - - - x-pos - Pos. X - - - - - - - height - Ancho - - - - - - - width - Altura - - - - Big Time - Ventana de tiempo - - - Arranger - Arreglador - - - - Transport - Transporte - - - - - - - - Cur - Actual - - - - - - - - set current values - Establecer valores actuales - - - - start with template: default.med - Abrir la plantilla: default.med - - - - show splash screen - Mostrar pantalla de inicio - - - - Mixer A - Mezcaldora A - - - - Mixer B - Mezcladora B - - - - show "Did you know?" dialog - Ver dialogo ¿Sabia usted que? - - - - Start song - Iniciar Sesión - - - - min. Slider Val - Valor mínimo del potensiómetro - - - - Enable denormal protection - Habilitar proteccion - - - - Enable output limiter - Habilitar limitación de salida - - - - External Waveditor - Editor de audio externo - - - - External Waveditor command - Editor de audio externo (comando) - - - - Note: External editor opened from the internal editor. - Note: El editor externo se abre desde adentro - - - - Dummy Audio Driver (settings require restart) - Controlador de audio en vacío (El cambio requiere reinicio) - - - - Hz - Hz - - - - Period size (Frames per period): - Tamaño del período (Cuadros por período) - - - - - 16 - 16 - - - - Project directory - - - - - Projects: - - - - - ... - ... - - - - Main Window - Ventana principal - - - - Try to use Jack Freewheel - Habilitar Jack para juego libre - - - - Speeds bounce operations - Velocidad de las operaciones de rebote - - - - Use Jack Freewheel mode if possible. -This dramatically speeds bounce operations. - Usar juego libre para Jack si es posible -Reduce dramaticamente el tiempo de rebote. - - - - VST in-place - VST emplazado - - - - Enable VST in-place processing (restart required) - Activar VST en el prosesamiento (Requiere reiniciar) - - - - Enable VST in-place processing. Turn this off if - VST Ladspa effect rack plugins do not work or - feedback loudly, even if they are supposed to - be in-place capable. Setting requires a restart. - Activar VST en el procesamiento. Desactive esta opción si - Rack de efectos Ladspa VST no está instalado (Requiere reiniciar) - - - - Minimum control period - Periodo mínimo de control - - - - Minimum audio controller process period (samples). - - Período mínimo del control de proceso de audio (muestras) - - - - Minimum audio controller process period (samples). -Adjusts responsiveness of audio controls and - controller graphs. Set a low value for fast, smooth - control. If it causes performance problems, set a - higher value. - Período mínimo del control de proceso de audio (muestras) -Ajusta la sensibilidad de los controles de audio y - gráficos de control. Establecer un valor bajo para un control rápido - y suave. - Si le causa problemas de rendimiento, establezca un - valor mayor. - - - - 1 - 1 - - - - 2 - 2 - - - - 4 - 4 - - - - 8 - 8 - - - - - 32 - 32 - - - - - 64 - 64 - - - - - 128 - 128 - - - - - 256 - 256 - - - - - 512 - 512 - - - - Sample rate - Frecuencia de muestreo - - - - Shorter periods give better midi playback resolution. - Períodos más cortos dan una mejor resolución de la reproducción midi. - - - - 8192 - 5 1/3' {8192?} - - - - 16384 - 5 1/3' {16384?} - - - - 32768 - 5 1/3' {32768?} - - - - Midi Resolution -(Ticks/Quarternote) - Resolución MIDI -(Tics/Negra) - - - Instruments Directory - Carpeta de instrumentos - - - - Use old-style stop shortcut: - Atajo antiguo para detener - - - - Move single armed track with selection - Armar la pista con la selección (Grabar) - - - - On Launch - Lanzar al inicio - - - - Behavior - Comportamiento - - - - IIWUGuiBase - - Form1 - Formulario1 - - - Soundfont - Fuente de sonido - - - Load - Cargar - - - - IIWUSynthGuiBase - - IIWU Synth - Sintetizador IIWU - - - Gain - Ganancia - - - Room Size - Tamaño sala - - - Damping - Amortiguamiento - - - Level - Nivel - - - Width - Anchura - - - Speed - Velocidad - - - Depth - Profundidad - - - Number - Número - - - Type - Tipo - - - Sine - Seno - - - Triangle - Triángulo - - - Reverb - Reverberación - - - Chorus - Coro ;-) - - - Pop - Pop 8-? - - - Push - Empuje - - - ... - ... - - - show iiwusynth controls - mostrar controles del sintetizador iiwu - - - Load - Cargar - - - Save - Guardar - - - - LMaster - - new tempo - nuevo tempo - - - new signature - nuevo compás - - - Meter - Metrónomo - - - Time - Tiempo - - - Type - Tipo - - - Value - Valor - - - MusE: Mastertrack - MusE: Pista maestra - - - Tempo - Tempo - - - Timesig - compás - - - &Edit - &Editar - - - panic - pánico - - - - LegatoBase - - - MusE: Legato - MusE: Legato - - - - Range - Rango - - - - All Events - Todos los eventos - - - - Selected Events - Eventos seleccionados - - - - Looped Events - Eventos del bucle - - - - Selected Looped - Bucle seleccionado - - - - Settings - Configuración - - - - ticks - Tics - - - - Minimum Length - Duración minima: - - - - Allow shortening notes - Permitir notas cortas - - - - OK - Aceptar - - - - Cancel - Cancelar - - - - ListEdit - - &Edit - &Editar - - - Cut - Cortar - - - Copy - Copiar - - - Paste - Pegar - - - List Tools - Lista de herramientas - - - Insert Tools - Insertar herramientas - - - Delete Events - Borrar eventos - - - Insert Note - Insertar nota - - - insert Note - insertar Nota - - - Insert SysEx - Insertar sistema exclusivo - - - insert SysEx - insertar sistema exclusivo - - - Insert Ctrl - Insertar controlador - - - insert Ctrl - insertar controlador - - - Insert Meta - Insertar Meta - - - insert Meta - insertar Meta - - - Insert Pitch - Insertar Tono - - - insert Pitch - insertar Tono - - - Insert Channel Aftertouch - Insertar AfterTouch de canal - - - insert Channel Aftertouch - insertar AfterTouch de canal - - - Insert Key Aftertouch - Insertar AfterTouch de tecla - - - insert Poly Aftertouch - insertar AfterTouch Polifónico - - - panic - pánico - - - Tick - Tick - - - Bar - Compás - - - Typ - Tip - - - Ch - Cn - - - Val A - Val A - - - Val B - Val B - - - Val C - Val C - - - Len - Lon - - - Comment - Comentario - - - Type - Tipo - - - - MITTransposeBase - - - MusE: Midi Input Plugin: Transpose - MusE: Plugin de entrada MIDI : Transposición - - - - On - Encendido - - - - TriggerKey - Tecla de salto - - - - Transpose: - Trasponer: - - - - +0 - +0 - - - - MPConfig - - none - ninguno - - - other raw ... - otro crudo (raw) ... - - - MusE: Midi Port Table - MusE: Tabla de puertos MIDI - - - Port - Puerto - - - GUI - GUI - - - Rec - Grabar - - - Instrument - Instrumento - - - Device Name - Nombre de dispositivo - - - State - Estado - - - unknown - desconocido - - - Port Number - Número de puerto - - - Instrument connected to port - Instrumento conectado al puerto - - - State: result of opening the device - Estado: resultado de abrir el puerto - - - - MRConfigBase - - - MusE: Midi Input Plugin: Remote Control - MusE: Pluginde entrada MIDI : Control remoto - - - - Activate - Activar - - - - On - Encendido - - - - Actions - Acciones - - - - Stop - Parar - - - - Record - Grabar - - - - Goto Left Mark - Ir a marca izquierda - - - - Play - Reproducir - - - - Insert rest (step rec) - Insertar el resto - - - - MTScale - - bar scale - escala de compases - - - - MTScaleFlo - - bar scale - escala de compases - - - - MarkerView - - panic - pánico - - - Bar:Beat:Tick - Barra:Golpe:Tick - - - Hr:Mn:Sc:Fr:Sf - Hr:Mn:Sg:Fr:Sf - - - Lock - Bloquear - - - Text - Texto - - - Marker Properties - Propiedades del marcador - - - MusE: Marker - MusE: Marcador - - - add marker - Agregar marcador - - - Add Marker - Agregar marcador - - - delete marker - borrar marcador - - - Delete Marker - Borrar Marcador - - - &File - &Archivo - - - &Edit - &Editar - - - edit tools - editar herramientas - - - - MasterEdit - - Cursor - Cursor - - - Snap - Snap - - - time at cursor position - tiempo en la posición del cursor - - - panic - pánico - - - tempo at cursor position - tempo en la posición del cursor - - - CurPos - Posición del cursor - - - tempo at current position - tempo en la posición actual - - - time signature at current position - compás en la posición actual - - - Master - Maestro - - - MusE: Mastertrack - Muse: Pista Maestra - - - edit tools - editar herramientas - - - EnableMaster - Habilitar maestro - - - use master track - usar pista maestra - - - Info - Info - - - Off - Apagado - - - - MdiSettingsBase - - - Form - Forma - - - - GroupBox - Grupos - - - - MDI subwin - MDI sub ventana - - - - Shares menu when subwin - Acciones de menú cuando es sub ventana - - - - Shares menu when free - Acciones de menú cuando es ventana libre - - - - MetronomeConfigBase - - - MusE: Metronome Config - MusE: Configuración del metrónomo - - - - Metronome - Metrónomo - - - - Audio Beep - Bip de audio - - - - MIDI Click - Clic MIDI - - - - Midi Channel - Canal MIDI - - - - Measure Note - Nota de compás - - - - Measure Velocity - Velocidad de compás - - - - Beat Velocity - Velocidad de barra - - - - Beat Note - Nota de barra - - - - Midi Port - Puerto MIDI - - - - Precount - Cuenta atrás - - - - enable - habilitada - - - - Bars - Compases - - - - From Mastertrack - desde la pista Mestra - - - - / - / - - - - Signature - Compás - - - - Prerecord - Pre-captura - - - - Preroll - Pre-escucha - - - - &Apply - &Aplicar - - - - &OK - Ac&eptar - - - - &Cancel - &Cancelar - - - - Choose outputs... - Seleccionar salidas... - - - - 50 - 50 - - - - % Audio volume - % De volúmen de audio - - - - Hint: Enable metronome in Transportpanel - Habilitar metrónomo en el panel de transporte - - - - Alt+A - Alt+A - - - - Alt+O - Alt+O - - - - Alt+C - Alt+C - - - - MidiController - - Velocity - Velocidad - - - - MidiControllerEditDialog - - MusE: save midi controller list - MusE: guardar lista de controladores MIDI - - - MusE: load midi controller list - MusE: Cargar lista de controladores MIDI - - - - MidiControllerEditDialogBase - - MusE: Define Midi Controller - MusE: Define controlador MIDI - - - replace controller set - reemplazar conjunto de controladores - - - merge controller set - unir conjunto de controladores - - - save controller set as - guardar conjunto de controladores como - - - Name - Nombre - - - Type - Tipo - - - H-Ctrl - Control-H - - - L-Ctrl - Control-L - - - Min Val - Valor mínimo - - - Max Val - Valor mínimo - - - list of defined controllers - lista de controladores definidos - - - This is the MusE list of defined controllers. - Esta es la lista de controladores definidos por MusE. - - - Channel - Canal - - - Properties - Propiedades - - - Name - Nombre - - - Max Value - Valor mínimo - - - Range - Rango - - - Min Value - Valor mínimo - - - Control7 - Control7 :-? - - - Control14 - Control14 - - - RPN - RPN - - - NRPN - NRPN - - - XG-SysEx - Sys-Ex-XG - - - SysEx - Sistema Exclusivo - - - Type - Tipo - - - &New - &Nuevo - - - create new entry - crear entrada nueva - - - pressing the New button you create a new entry -in the MusE list of defined controllers - pulsando el botón se creará una nueva -clase de controladores en la lista de MusE. - - - &Delete - &Borrar - - - delete selected entry - borra la clase seleccionada - - - &OK - &Aceptar - - - &Cancel - &Cancelar - - - Pitch - Tono - - - - MidiFileConfig - - Enable extended smf format - Habilita el formato extendido de smf - - - Division - División - - - Copyright - Copyright - - - Config exported Midi Files - Configurar archivos MIDI exportados - - - MusE: Config exported Midi Files - MusE: configurar archivos MIDi exportados - - - - MidiFilterConfigBase - - - MusE: Midi Input Filter - MusE: Filtro de entrada MIDI - - - - Record Filter - Filtro de captura - - - - - Note On - Nota on - - - - - Poly Pressure - Presión polifónica - - - - - Controller - Controlador - - - - - Program Change - Cambio de programa - - - - - After Touch - After Touch - - - - - Pitch Bend - Rueda de afinación - - - - - Sysex - Sistema exclusivo - - - - Thru Filter - Filtro Thru - - - - Controller Filter - Filtrar controlador - - - - Channel Filter - Filtro de canal - - - - 14 - 14 - - - - 10 - 10 - - - - 6 - 6 - - - - 12 - 12 - - - - 4 - 4 - - - - 2 - 2 - - - - 9 - 9 - - - - 8 - 8 - - - - 3 - 3 - - - - 13 - 13 - - - - 15 - 15 - - - - 16 - 16 - - - - 7 - 7 - - - - 11 - 11 - - - - 5 - 5 - - - - 1 - 1 - - - - MidiInputTransformDialog - - New - Nueva - - - - MidiInputTransformDialogBase - - - MusE: Midi Input Transformator - MusE: Transformador de entrada MIDI - - - - Filter - Filtro - - - - All - Todo - - - - - - - - Equal - Igual - - - - - - - - Unequal - Diferente - - - - Note - Nota - - - - - Poly Pressure - Presión polifóica - - - - - Control Change - Cambio de control - - - - - Aftertouch - AfterTouch - - - - - Pitch Bend - Rueda de modulación - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - Value 2 - Valor 2 - - - - - - - - Value 1 - Valor 1 - - - - - Event Type - Tipo de Evento - - - - - - - Ignore - Ignorar - - - - - - - Higher - Mayor - - - - - - - Lower - Menor - - - - - - - Inside - Entre - - - - - - - Outside - Fuera - - - - - Channel - Canal - - - - - Port - Puerto - - - - Processing - Procesando - - - - - - - - Keep - Mantener - - - - - - - - Fix - Arreglar - - - - - - - Plus - Más - - - - - - - Minus - Menos - - - - - - - Multiply - Multiplicar - - - - - - - Divide - Dividir - - - - - - - Invert - Invertir - - - - ScaleMap - Mapa de escalado - - - - Flip - cambiar - - - - - - - Dyn - Dinámico - - - - - - - Random - Aleatorio - - - - Modules - Módulos - - - - 1 - 1 - - - - 2 - 2 - - - - 3 - 3 - - - - 4 - 4 - - - - enable modul 1 - habilitar módulo 1 - - - - enable modul 2 - habilitar módulo 2 - - - - enable modul 3 - habilitar módulo 3 - - - - enable modul 4 - habilitar módulo 4 - - - - Preset - Preselección - - - - Name: - Nombre: - - - - Comment: - Comentario: - - - - Function - Función - - - - &New - &Nueva - - - - create new preset - crea nueva preselección - - - - &Delete - &Borrar - - - - delete preset - borra la preselección - - - - &Dismiss - &Ocultar - - - - PresetList - Lista de Preselecciones - - - - MidiPortRouteBase - - Input - Entrada - - - - MidiRawDeviceDialogBase - - MusE: raw midi device configuration - NusE: Configuración de dispositivo MIDI directo - - - Name - Nombre - - - Device - Dispositivo - - - Type - Tipo - - - Virt. Ports - Puertos virtuales - - - Speed - Velocidad - - - Handshaking - Control de flujo - - - Device Properties - Propiedades del dispositivo - - - Virt.Ports - Ports Virtuales - - - Raw Device - Dispositivo directo - - - Serial Port - Puerto série - - - Pipe - Tuberia - - - Device Path - Dirección del dispositivo - - - 9600 - 9600 - - - 19200 - 19200 - - - 38400 - 38400 - - - None - Ninguno - - - RTS/CTS - RTS/CTS - - - Xon/Xoff - Xon/Xoff - - - &New - &Nuevo - - - &Delete - &Borrar - - - &OK - &Aceptar - - - &Cancel - &Cancelar - - - - MidiStrip - - Var - Var - - - Rev - Rev - - - Cho - Cho - - - off - apagado - - - dB - dB - - - Pan - Bal - - - record - grabar - - - mute - silencio - - - pre fader listening - monitorizar pre fader - - - output routing - ruteado de entrada - - - - MidiSyncConfig - - Port Number - Número de puerto - - - Name of the midi device associated with this port number - Nombre del dispositivo MIDI asociado con este número de puerto - - - Port - Puerto - - - Device Name - Nombre de dispositivo - - - m - m - - - MusE - MusE - - - &Apply - &Aplicar - - - &Abort - &Abortar - - - - MidiSyncConfigBase - - - MusE: Midi Sync - MusE: Sincronización MIDI - - - - Apply - Aplicar - - - - Ok - Aceptar - - - - Cancel - Cancelar - - - - hour - hora - - - - h - h - - - - minute - minuto - - - - m - m - - - - second - segundo - - - - s - s - - - - frame - frame - - - - f - f - - - - subframe - sub-frame - - - - 24 - 24 - - - - 25 - 25 - - - - 30D - 30D - - - - 30N - 30N - - - Id: - Id: - - - device id - id de dispositivo - - - Port: - Puerto: - - - midi port - puerto MIDI - - - Sync Source - Fuente de Sincronización - - - accept MTC - aceptar MTC - - - accept Midi Clock - aceptar MIDI clock - - - accept MMC - aceptar MMC - - - Sync Gen - Generar Sync - - - Midi Time Code (MTC) - Código de Tiempo Midi (MTC) - - - Midi Clock - Reloj Midi - - - Midi Machine Control (MMC) - Control de máquina MIDI (MMC) - - - Sync Mode - Modo de sincronización - - - Master - Maestro - - - Slave - Esclavo - - - all - todo - - - - MTC - MTC - - - - Type: - Tipo: - - - - Offset: - Desplazamiento: - - - - Sync receiving and sending - Sincronizar la recepción y envío - - - - Send and receive Jack transport - Recepción y envío del transporte de Jack - - - - Send and receive Jack transport information, - including stop, start and position. - Información de la recepción y envío del transporte de Jack, incluye detener, iniciar y posición. - - - - Use Jack transport - Usar transporte de Jack - - - - Make MusE the Jack transport Timebase Master - Hacer de MusE el transporte de base de tiempo principal para Jack - - - - Make MusE the Jack transport Timebase Master. -Allows Jack to show time as - MusE Bars, Beats, and Ticks. -MusE will try to become master, but other - Jack clients can also take over later. -You can always click here again for Master. - Hacer de MusE el transporte de base de tiempo principal para Jack -Permite a Jack para mostrar el tiempo como - Compases de MusE , pulso, e inserciones. -MusE tratará de convertirse en maestro, pero otros - clientes de Jack también pueden hacerlo más adelante. -Siempre puede hacer clic aquí de nuevo para definir como maestro. - - - - Jack transport Timebase Master - Usar Jack como transporte maestro - - - - Control MusE timing by external midi clock or MTC sync - Control de tiempo de MusE por el reloj MIDI externo o sincronización MTC - - - - When in slave mode, tempo is - controlled externally. -MusE can sync to midi clock, or MTC quarter frame sync. -Enabled inputs in the list will - be in effect (RMC, RMMC, RMTC). - Cuando está en modo esclavo, el tempo es - controlado externamente. -Muse se sincroniza con el reloj midi, o sincronización MTC -Entradas habilitadas en la lista - que rigen (RMC, RMMC, CRFM). - - - - Slave to external sync - Esclavo de sincronía externa - - - - Send start to first clock delay - Retraso del envío de empezar el primer reloj. - - - - Allows 'slow sync' devices time - to synchronize to MusE. This value is the - delay from sending start to sending - the first clock. - Permite "sincronización lenta" para dispositivos - sincronizar con Muse. Este valor es el - retraso del envío de empezar el primer reloj. - - - - ms - ms - - - - Send sync delay - Enviar retraso de sincronización - - - - Note: Sync delay and MTC sync currently not fully implemeted - - - - - MidiTrackInfoBase - - - MusE: TrackInfo - MusE: Información de pista - - - - output channel - canal de salida - - - all midi events are send to this output channel - todos los eventos MIDI se envian a éste canal de salida - - - Track Info - Información de Pista - - - - - % - % - - - Track Name - Nombre de Pista - - - - output port - puerto de salida - - - - iR - ER - - - - - - - - - - off - apagado - - - change stereo position - cambiar posición estereofónica - - - OCh. - OCh. - - - MidiThru - Midi Thru - - - ??? - ??? - - - select instrument patch - selecciona el grupo de instrumento - - - - Transp. - Transporte - - - Volume - Volumen - - - - Channel Info - Información de Canal - - - - Rec: - Grabar - - - - Prog - Programa - - - - Vol - Volumen - - - - Pan - Panorama - - - - Delay - Retardo - - - - H-Bank - Banco-superior - - - - Compr. - Compresión - - - - L-Bank - Banco-inferior - - - Progr. - Progr. - - - - Velocity - Velocidad - - - - Length - Duración - - - input ports - puertos de entrada - - - IChan. - Canal de entrada - - - input channels - Canales de entrada - - - Events from all configured channels are -recorded to this track. -You can specify more than one channel for -recording: - 1 2 3 record from channel 1 2 and 3 - 1-3 same - 1-3 5 record from channel 1 2 3 and 5 - Los eventos de todos los canales configurados -se graban en esta pista. -Puedes especificar más de un canal para grabar: - 1 2 3 Graba desde los canales 1, 2 y 3 - 1-3 Lo mismo - 1-3 5 Graba desde los canales 1, 2, 3 y 5 - - - Rec - Grabar - - - - all midi events are sent to this output channel - Todos los eventos MIDI se envían a este canal de salida - - - - Out ch - Canal de salida - - - - input routing - Ruteo de entrada - - - Inputs - Entradas - - - - output routing - ruteado de entrada - - - - oR - SR - - - - input detect - Detectar entrada - - - - Input detect indicator. Detects all note on-off, controller, aftertouch, - program change, and pitchbend (but not sysex or realtime) events - on the selected channels, on the selected midi ports. - Indicador de entrada. Detecta todas las notas de encendido y apagado, eventos , - de control, aftertouch, cambio de programa, y pitchbend en los - canales seleccionados, en los puertos MIDI seleccionados. - (No detecta envios SysEx o tiempo real) - - - - W - W - - - - Midi thru - MIDI thru - - - - Pass input events through ('thru') to output. - Pasar los eventos de entrada a la salida (Thru). - - - - Select instrument patch - Seleccione el instrumento - - - - <unknown> - <desconocido> - - - - Add all settings to song - Agregar todos los ajustes a la sesión - - - - All - Todo - - - - Bank Select MSB. Double-click on/off. - Banco superior. Doble clic enciende/apaga - - - - Bank Select LSB. Double-click on/off. - Banco inferior. Doble clic enciende/apaga - - - - Program. Double-click on/off. - Programa. Doble clic enciende/apaga - - - - Add bank + prog settings to song - Agregar ajustes de banco y programa a la sesión - - - - Volume. Double-click on/off. - Volumen. Doble click Enciende/Apaga - - - - Add vol setting to song - Agregar ajustes de volumen a la sesión - - - - - Change stereo position. Double-click on/off. - Cambiar la panorámica del estéreo. Doble clic enciende/apaga - - - - Add pan setting to song - Agregar ajuste de panorámica a la sesión - - - - MidiTransformDialogBase - - - MusE: Midi Transformator - MusE: Transformador MIDI - - - - &New - &Nueva - - - - &Delete - &Borrar - - - - &Apply - &Aplicar - - - - &OK - Ac&eptar - - - - &Cancel - &Cancelar - - - - PresetList - Lista de preselecciones - - - - Processing - Procesando - - - - - Event Type - Tipo de evento - - - - - - - - Keep - Mantener - - - - - - - Fix - Arreglar - - - - - Note - Nota - - - - - Poly Pressure - Presión polifónica - - - - - Control Change - Cambio de control - - - - - Aftertouch - AfterTouch - - - - - Pitch Bend - Rueda de modulación - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - - Plus - Más - - - - - - - Minus - Menos - - - - - - - Multiply - Multiplicar - - - - - - - Divide - Dividir - - - - - - Value 2 - Valor 2 - - - - - Invert - Invertir - - - - ScaleMap - Escalado de mapa - - - - Flip - Cambiar - - - - - Dyn - Dyn - - - - - Random - Aleatorio - - - - - - Value 1 - Valor 1 - - - - - Length - Duración - - - - Position - Posición - - - - Filter - Filtro + + + + + Attack Rate + Attack Rate - - All - Todo + + AR1 + AR1 - - - - - - Equal - Igual + + Detune, OSCWave, EGShift 1 + Detune, OSCWave, EGShift 1 - - - - - - Unequal - Diferente + + DET1 + DET1 - - - - - Ignore - Ignora + + + + + + + + + + Detune + Detune - - - - - Higher - Mayor + + + + + EG Shift + EG Shift - - - - - Lower - Menor + + + + + 96dB + 96dB - - - - - Inside - Entre + + + + + 48dB + 48dB - - - - - Outside - Fuera + + + + + 24dB + 24dB - - Bar Range - Rango de compases + + + + + 12dB + 12dB - - Preset - Preselección + + + + + Wave form + Wave form - - Name: - Nombre: + + + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> - - Comment: - Comentario: + + Sensitivity 1 + Sensitivity 1 - - Range - Rango + + KVS1 + KVS1 - - process all events - procesar todos los eventos + + + + + Amplitude Modulation Enable + Amplitude Modulation Enable - - selected tracks - seleccionar pistas + + AME1 + AME1 - inside loop - dentro de bucle + + + + Keyboard Velocity Sensitivity + Keyboard Velocity Sensitivity - - Function - Función + + + + + Key Velocity Sensitivity + Key Velocity Sensitivity - - Select - Seleccionar + + EBS1 + EBS1 - - Quantize - Cuantizar + + + + + EG Bias Sensitivity + EG Bias Sensitivity - - Delete - Borrar + + + + + Eg Bias Sensitivity + Eg Bias Sensitivity - - Transform - Transformar + + Frequency 1 + Frequency 1 - - Insert - Insertar + + Coarse 1 + Coarse 1 - - Copy - Copiar + + + + + Coarse Ratio + Coarse Ratio - - Extract - Extraer + + Fine 1 + Fine 1 - - Quantize Value - Cuantizar valor + + + + + Fine Ratio + Fine Ratio - - - MidiTransformerDialog - New - Nueva + + Freq 1 + Freq 1 - - - MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Archivos de onda (*.wav);;Todos los archivos(*) + + + + + Fixed Frequency + Fixed Frequency - - - MixdownFileDialogBase - - MusE: Set Mixdown Wavefile - MusE: Selecciona el archivo de Masterización + + + + + Toggle Fix Frequency + Toggle Fix Frequency - - &OK - &Aceptar + + + + + FIX + FIX - - &Cancel - &Cancelar + + OUT 1 + OUT 1 - File Path - Directorio del archivo + + + + Output Volume + Output Volume - - Channel - Canal + + + + + + + Volume + Volume - - Stereo - Estéreo + + Op &2 + Op &2 - - Mono - Mono + + Amplitude Envelope 2 + Amplitude Envelope 2 - - 5.1 - 5.1 + + D1R2 + D1R2 - - wav,16 Bit - wav, 16 bits + + D1L2 + D1L2 - - wav, 24 Bit - wav, 24 bits + + D2R2 + D2R2 - - wav, 32 Bit (float) - wav, 32 bits + + RR2 + RR2 - - Format - Formato + + AR2 + AR2 - - - Mixer - Mute - Silencio + + Frequency 2 + Frequency 2 - MusE: Midi Mixer - MusE: MExclador MIDI + + Coarse 2 + Coarse 2 - Rev - Rev + + Fine 2 + Fine 2 - Cho - Cho + + Freq 2 + Freq 2 - Var - Var + + Scaling 2 + Scaling 2 - Pan - Bal + + LS2 + LS2 - Master - Maestro + + RS2 + RS2 - Port - Puerto + + OUT 2 + OUT 2 - - - MoveBase - - MusE: Move Notes - MusE: mover notas + + Detune, OSCWave, EGShift 2 + Detune, OSCWave, EGShift 2 - - Range - Rango + + DET2 + DET2 - - All Events - Todos los eventos + + Sensitivity 2 + Sensitivity 2 - - Selected Events - Eventos seleccionados + + EBS2 + EBS2 - - Looped Events - Eventos del bucle + + KVS2 + KVS2 - - Selected Looped - Bucle seleccionado + + AME2 + AME2 - - Value - Valor + + Op &3 + Op &3 - - Move by - Mover + + Amplitude Envelope 3 + Amplitude Envelope 3 - - ticks - Tics + + D1R3 + D1R3 - - OK - Aceptar + + D1L3 + D1L3 - Cancel - Cancelar + D2R3 + D2R3 - - - MusE - &File - &Archivo + + RR3 + RR3 - Open &Recent - Abrir &Recientes + + AR3 + AR3 - Save &As - Guardar c&omo + + Scaling 3 + Scaling 3 - Config &Printer - Configurar &Impresión + + LS3 + LS3 - Import Midifile - Importar archivo MIDI + + RS3 + RS3 - Export Midifile - Exportar archivo MIDI + + OUT 3 + OUT 3 - Import Wave File - Importar archivo de audio + + Frequency 3 + Frequency 3 - &Quit - &Salir + + Coarse 3 + Coarse 3 - &Edit - &Editar + + Fine 3 + Fine 3 - C&ut - C&ortar + + Freq 3 + Freq 3 - &Copy - &Copiar + + Detune, OSCWave, EGShift 3 + Detune, OSCWave, EGShift 3 - &Paste - &Pegar + + DET3 + DET3 - Delete Track - Borrar pista + + Sensitivity 3 + Sensitivity 3 - Add Track - Agregar Pista + + EBS3 + EBS3 - Select &All - Seleccion&ar Todo + + KVS3 + KVS3 - &Deselect All - &Deseleccionar Todo + + AME3 + AME3 - Invert &Selection - Invertir &Selección + + Op &4 + Op &4 - &Inside Loop - &Interior de bucle + + amplitude Envelope 4 + amplitude Envelope 4 - &Outside Loop - &Exterior de Bucle + + AR4 + AR4 - All &Parts on Track - Todas las &Partes de la pista + + D1R4 + D1R4 - Select - Seleccionar + + D1L4 + D1L4 - Drums - Percusión + + D2R4 + D2R4 - List - Lista + + RR4 + RR4 - Graphic - Gráfico + + Frequency 4 + Frequency 4 - Mastertrack - Pista Maestra + + Coarse 4 + Coarse 4 - Midi &Transform - &Transformación MIDI + + Fine 4 + Fine 4 - Modify Gate Time - Modificar el tiempo de puerta + + Freq 4 + Freq 4 - Modify Velocity - Modificar Velocidad + + Scaling 4 + Scaling 4 - Crescendo - Crescendo + + LS4 + LS4 - Transpose - Transponer + + RS4 + RS4 - Thin Out - Adelgazar? (Thin Out) + + OUT 4 + OUT 4 - Erase Event - Borrar Evento + + Detune, OSCWave, EGShift 4 + Detune, OSCWave, EGShift 4 - Note Shift - Desplazamiento de nota + + DET4 + DET4 - Move Clock - Mover reloj + + Sensitivity 4 + Sensitivity 4 - Copy Measure - Copiar compás + + EBS4 + EBS4 - Erase Measure - Vaciar compás + + KVS4 + KVS4 - Delete Measure - Borrar compás + + AME4 + AME4 - Create Measure - Crear compás + + &Func + &Func - Mix Track - Mezclar pista + + Delay Pan Depth + Delay Pan Depth - Midi - MIDI + + Delay Pan LFO Freq + Delay Pan LFO Freq - &Structure - E&structura + + Delay Ch Send Level + Delay Ch Send Level - Global Cut - Corte global + + + + Channel Chorus + Channel Chorus - Global Insert - Inserción Global + + Delay Feedback + Delay Feedback - Global Split - Partición Global + + Delay On/Off, Return Level + Delay On/Off, Return Level - Copy Range - Copiar Rango + + + + On + On - Cut Events - Cortar eventos + + Delay Beat Ratio + Delay Beat Ratio - &Display - &Mostrar + + Delay BPM + Delay BPM - Transport Panel - Panel de transporte + + Foot Control + Foot Control - Bigtime window - ventana BigTime + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pitch Bend Range + Pitch Bend Range - Don't Follow Song - no sigas la canción + + + + + Pitch + Pitch - Follow Page - sigue la página + + + + + Amplitude + Amplitude - Follow Continuous - sigue contínuamente + + Modulation Wheel + Modulation Wheel - &Config - &Configuración + + Breath Control + Breath Control - Global Settings - Selecciones Globales + + + Pitch Bias + Pitch Bias - Follow Song - seguir canción + + + Envelope Bias + Envelope Bias - Metronome - Metrónomo + + After Touch + After Touch - Midi Sync - Sincronización MIDI + + Phony Mode + Phony Mode - Midi File Config - Configuración de archivos MIDI + + POLY + POLY - Appearance Settings - Selecciones de apariencia + + MONO + MONO - Soft Synthesizer - Sintetizador virtual + + Potamento + Portamento - Midi Ports - Puertos MIDI + + Portamento Mode + Portamento Mode - Audio System - Sistema de Audio + + FINGER + FINGER - Save Configuration - Guardar configuración + + FULL + FULL - Midi Input Transform - Transformación de entrada MIDI + + PT + PT - Midi Input Filter - Filtrado de entrada MIDI + + + Portamento Time + Portamento Time - Midi Remote Control - Control remoto MIDI + + C&horus + C&horus - Random Rhythm Generator - generador aleatorio de ritmos + + Chorus Parameters + Chorus Parameters - &Midi - &MIDI + + + Channel send level + Channel send level - Mixer - Mezclador + + + On/Off and Return level + On/Off and Return level - Define Controller - Define Controlador + + + Select LADSPA plugin + Select LADSPA plugin - Input Plugins - Plugins e entrada + + + Change plugin + Cambiar efecto - Reset Instr. - Reinicializa Instrumento + + &Reverb + &Reverb - Init Instr. - Inicializa Instruemnto + + Reverb Parameters + - local off - apagado local + + &Config + &Configuración - &Audio - &Audio + + Font Size + Tamaño de fuente - Audio - Audio + + Quality + Calidad - Cliplist - Lista de Clips + + High + Alta - Bounce to Track - Rebotar a pista + + Middle + Media - Bounce to File - Rebotar a Archivo + + Low + Baja - Bounce - Rebotar + + Ultra low + Muy baja - &Help - A&yuda + + Filter + Filtro - Browser - Navegador + + Save Mode (into the song) + Guardar modo (en la sesión) - &About - &Acerca de + + Save only the used presets + Guardar solo el preseteo - About&Qt - Acerca de &Qt + + Save the entire set + Guardar todas las configuraciones - What's &This - Que es esto + + Save the configuration + Guardar configuración - MusE: load project - MusE: Carga proyecto + + Configuration File + Archivo de configuración - The current Project contains unsaved data -Save Current Project? - El proyecto actual contiene datos no guardados -Guardamos el proyecto actual? + + Save... + Guardar... - &Save - &Guardar + + Load... + Abrir... - &Nosave - &No Guardar + + Save as default + Guardar por defecto - &Abort - &Abortar + + Colors + Colores - MusE: Save As - MusE: Guardar como + + Text + Texto - MusE: Import Midi - MusE: Importar MIDI + + Background + Fondo - MusE: Export Midi - MusE: Exportar MIDI + + Edit Text + Editar texro - Nothing to edit - Nada para editar + + Edit Background + Editar fondo - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - El proyecto actual contine datos no guardados -Cargar sobreescribe el proyecto actual: -Guardar el proyecto actual? + + + + Red + Rojo - &Overwrite - S&obre escribir + + + + Blue + Azúl - no help found at: - no se ha encontrado ayuda en: + + + + Green + Verde - MusE: Open Help - MusE: Abre ayuda + + Set Path + Ajustes de la ruta - to import a audio file you have first to selecta audio track - para importar un archivo de audio tienes que tener seleccionada una pista de audio + + Image in the background : + Imagen de fondo: - UndoRedo - Deshacer/Rehacer + + + Browse... + Buscar... - undo - deshacer + + Load the set at the initialization : + Cargar al iniciar - Und&o - &Deshacer + + Set Brightness, Detune, Attack and Release of the current channel to default + Ajustes de Brightness, Detune, Attack y Release del canal actual por defecto - redo - rehacer + + Res. Ctrl + Reestablecer - Re&do - &Rehacer + + Cut all notes off + Apaga todas las notas - undo last change to song - deshace el ltimo cambio en la canción + + Panic! + Pánico! - redo last undo - rehace el ltimo deshacer + + Number of Voices + Número de voces - Transport - Transporte + + Number of voices + Número de voces - loop - bucle + + Enable + Habilitado - Loop - Bucle + + Channel + Canal - punchin - pinchar + + Vol + Volumen - Punchin - Pinchar + + Channel Ctrl + Controlador de canal - punchout - fin pinchado + + Release + Release - Punchout - Fin pinchado + + Attack + Ataque - start - empezar + + Brightness + Brillo - Start - Empezar + + Modulation + Modulación - rewind - retroceder + + Pan + Panorámica + + + DelOverlapsBase - Rewind - Retroceder + + MusE: Delete Overlaps + MusE: Borrar superpuestos - forward - avanzar + + Range + Rango - Forward - Avanzar + + All Events + Todos los eventos - stop - parar + + Selected Events + Eventos seleccionados - Stop - Parar + + Looped Events + Bucle de eventos - play - reproducir + + Selected Looped + Selecionar bucle - Play - Reproducir + + OK + Aceptar - record - grabar + + Cancel + Cancelar + + + DidYouKnow - Record - Grabar + + Did you know? + ¿Sabia usted que? - panic - pánico + + Don't show on startup + No volver a mostrar - Panic - Pánico + + Next tip + Siguiente sugerencia - new - nuevo + + Close + Cerrar + + + DuplicateTracksBase - &New - &Nuevo + + Duplicate tracks + - open - abrir + + Number of copies + - &Open - &Abrir + + Copy all routes + - save - guardar + + Default routing + - pianoroll - pianola + + No routes + - Pianoroll - Pianola + + Copy parts + - score - partitura + + Copy standard controllers (vol, pan) + - Score - Partitura + + Copy effects rack plugins + - marker - marcador + + Copy plugin controllers + - Marker - Marcador + + Ok + Aceptar - File Buttons - Botones de Archivo + + Cancel + Cancelar + + + EditCtrlBase - Unknown File Format - Formato de archivo desconocido + + MusE: Edit Controller Event + MusE:-Editar eventos de control - none - ninguno + + Time Position + Posición de tiempo - MusE: Write File failed - MusE: La captura del archivo ha fallado + + Available Controller: + Control disponible - MusE: About - Muse: Acerca de + + Create New Controller + Crear nuevo control - MusE: Song: - MusE: Canción: + + textLabel3 + textLabel3 - reading midifile - - leyendo archivo midi - + + Value + Valor - -failed - -falló + + Controller + Controlador - MusE: Copy Range - MusE: Copiar Rango + + H-Bank + Banco-H - not implemented - no implementado + + L-Bank + Banco-L - MusE: Cut Events - MusE: Cortar Eventos + + Program + Programa - MusE: Bounce to Track - MusE: Rebotar a la pista + + + off + apagado - more than one target track selected - más de una pista de destino seleccionada + + pushButton4 + pushButton4 - wrong target track type, -select wave track as target - tipo de pista errónea, -selecciona una pista de audio como destino + + &OK + &Aceptar - no target track selected - no hay pista de destino seleccionada + + &Cancel + &Cancelar + + + EditGainBase - -failed: - -falló + + MusE: Modify gain + MusE:-Modificar ganancia - Wave - Audio + + Gain + Ganancia - &Cancel - &Cancelar + + 200% + 200% - - - MusEApp::MusE - Und&o - &Deshacer + + 100% + 100% - Re&do - &Rehacer + + 0% + 0% - undo last change to song - deshace el ltimo cambio en la canción + + &Reset + &Resetear - redo last undo - rehace el ltimo deshacer + + Alt+R + Alt+R - Loop - Bucle + + &Apply + &Aplicar - Punchin - Pinchar + + Alt+A + Alt+A - Punchout - Fin pinchado + + &Cancel + &Cancelar - Rewind - Retroceder + + Alt+C + Alt+C + + + EditInstrumentBase - Forward - Avanzar + + MusE: Instrument Editor + MusE: Editro de Instrumento - Stop - Parar + + High Bank: + Banco superior: - Play - Reproducir + + Low Bank: + Banco inferior: - Record - Grabar + + Program: + Programa: - Panic - Pánico + + + + &Delete + &Borrar - &Open - &Abrir + + + + Alt+D + Alt+D - Open &Recent - Abrir &Recientes + + Drum + Percusión - &Save - &Guardar + + GM + GM - Save &As - Guardar c&omo + + GS + GS - Import Midifile - Importar archivo MIDI + + XG + XG - Export Midifile - Exportar archivo MIDI + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Lista de controladores MIDI de uso común +Tenga en cuenta que en Muse cambios de tono +y el programa se manejan como los controladores normales. - Import Wave File - Importar archivo de audio + + + Properties + Propiedades - &Quit - &Salir + + Control7 + Control7 - Transport Panel - Panel de transporte + + Control14 + Control14 - Cliplist - Lista de Clips + + RPN + RPN - Input Plugins - Plugins e entrada + + NRPN + NRPN - Transpose - Transponer + + Pitch + Tono - Midi Input Transform - Transformación de entrada MIDI + + Program + Programa - Midi Input Filter - Filtrado de entrada MIDI + + + H-Ctrl + Control-H - Midi Remote Control - Control remoto MIDI + + + L-Ctrl + Control-L - Reset Instr. - Reinicializa Instrumento + + Min + Minimo - Init Instr. - Inicializa Instruemnto + + Max + Máximo - Bounce to Track - Rebotar a pista + + Name + Nombre - Bounce to File - Rebotar a Archivo + + Type + Tipo - Global Settings - Selecciones Globales + + Hex Entry: + Hexadecimal: - Follow Song - seguir canción + + &File + Archivo - Don't Follow Song - no sigas la canción + + Tools + Herramientas - Follow Page - sigue la página + + New + Nuevo - Follow Continuous - sigue contínuamente + + &New + &Nuevo - Metronome - Metrónomo + + Ctrl+N + Ctrl+N - Midi Sync - Sincronización MIDI + + Open + Abrir - Appearance Settings - Selecciones de apariencia + + &Open... + &Abrir... - Transport - Transporte + + Ctrl+O + Ctrl+O - &Midi - &MIDI + + Save + Guardar - &Audio - &Audio + + &Save + &Guardar - &Help - A&yuda + + Ctrl+S + Ctrl+S - MusE: Song: - MusE: Canción: + + Save As + Guardar como - MusE: load project - MusE: Carga proyecto + + Save &As... + Guardar &Como... - MusE: Write File failed - MusE: La captura del archivo ha fallado + + Exit + Salir - The current Project contains unsaved data -Save Current Project? - El proyecto actual contiene datos no guardados -Guardamos el proyecto actual? + + E&xit + &Salir - &Cancel - &Cancelar + + Instrument Name: + Nombre de instrumento: - MusE: Save As - MusE: Guardar como + + Selected instrument name. + Seleccionar nombre de instrumento - Nothing to edit - Nada para editar + + List of defined instruments. + Lista de instrumentos definidos - MusE: Bounce to Track - MusE: Rebotar a la pista + + Pa&tches + Grupos - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - El proyecto actual contine datos no guardados -Cargar sobreescribe el proyecto actual: -Guardar el proyecto actual? + + List of groups and patches. + Lista de grupos - &Abort - &Abortar + + Group/Patch + Grupos - MusE: Export Midi - MusE: Exportar MIDI + + + + Name: + Nombre: - no help found at: - no se ha encontrado ayuda en: + + + Group or patch name + Nombre de grupo o sección - MusE: Open Help - MusE: Abre ayuda + + Patch high bank number + Número de grupo de banco superior - MusE: Import Midi - MusE: Importar MIDI + + Patch high bank number. --- means don't care. + Número de grupo de banco superior. - reading midifile - - leyendo archivo midi - + + --- + dont care + no importa - -failed: - -falló + + Patch low bank number + Número de grupo de banco inferior - - - MusEArranger::Arranger - Enable Recording - Habilita captura + + Patch low bank number. --- means don't care. + Número de grupo de banco inferior. - Solo Indicator - Indicador de solo + + --- + - Track Type - Tipo de pista + + + Patch program number + Número de parte de programa - Time Lock - Bloqueo de tiempo + + Drum patch + Parte de percusiòn - Arranger - Arreglador + + If set, the patch is available only for drum channels. + Si se establece, el grupo estará disponible únicamente para los canales de percusión. - Cursor - Cursor + + GM patch + Grupo GM - Snap - Snap + + If set, the patch is available in a 'GM' or 'NO' midi song type. + Si se establece, estará disponible el grupo "GM" para la sesión. - Type - Tipo + + GS patch + Grupo GS - NO - No + + If set, the patch is available in a 'GS' or 'NO' midi song type. + Si se establece, estará disponible el grupo "GS" para la sesión. - GM - GM + + XG patch + Grupo XG - GS - GS + + If set, the patch is available in an 'XG' or 'NO' midi song type. + Si se establece, estará disponible el grupo "XG" para la sesión. - XG - XG + + Delete group or patch + Borrar grupo - midi song type - tipo de canción midi + + New patch + Nueva grupo - Pitch - Tono + + New &Patch + Nueva gru&po - midi pitch - tono midi + + Alt+P + Alt+P - global midi pitch shift - desplazamiento de tono midi + + New group + Nuevo grupo - Tempo - Tempo + + New &Group + Nuevo &Grupo - midi tempo - tempo midi + + Alt+G + Alt+G - N - N + + Contro&ller + Contro&lador - TrackInfo - Información de pista + + Common: + Comunes: - R - R + + List of defined controllers + Lista de controladores definidos - M - M + + List of defined controllers. + Lista de controladores definidos. - S - S + + Min + Mínimo - C - C + + Max + Máximo - Track - Pista + + Def + Def - Port - Puerto + + Midi controller name + Nombre de controlador MIDI - T - T + + Type: + Tipo: - - - MusEArranger::ArrangerView - panic - pánico + + + Midi controller type + Tipo de controlador MIDI - C&ut - C&ortar + + RPN14 + RPN14 - &Copy - &Copiar + + NRPN14 + NRPN14 - &Paste - &Pegar + + + Midi controller number high byte + Controlar número alto del byte MIDI - Add Track - Agregar Pista + + Midi controller number low byte (* means drum controller) + Controlador MIDI byte bajo (* significa que controla la percusión) - Select - Seleccionar + + Midi controller number low byte. +If low byte is * then the controller is a + 'drum controller'. For drum tracks and + GS/XG type songs and instruments. +Allows controllers for each instrument in + Muse's drum map. The low byte will be + replaced by the 'ANote' in the drum map. +Examples: The GS and XG instruments' + Drum controllers. + Controlador MIDI byte bajo. + Byte bajo es * el controlador + regulador de percusión,-para las pistas de batería e + instrumentos GS / XG. - Select &All - Seleccion&ar Todo + + * + wild card + * - &Deselect All - &Deseleccionar Todo + + Range: + Rango: - Invert &Selection - Invertir &Selección + + Minimum value. If negative, auto-translate. + Valor mínimo. Si es negativo,se traduce automaticamente. - &Inside Loop - &Interior de bucle + + Minimum value. If the minimum value + is negative, the range will automatically + be translated to a positive range. + +Useful for controllers which should be + displayed with zero bias. For example, +'Pan': Minimum: -64 Maximum: 63 +True range: Min: 0 Max: 127 (bias = 64) +'CoarseTuning': Min: -24 Max: 23 +True range: Min: 40 Max: 87 (bias = 64) + +Bias is determined from controller type: +7-bit Controller7 / RPN: Bias = 64 +14-bit Controller14 / RPN14: Bias = 8192 + +Type 'Pitch' is the exception. It is biased + at zero, even with a negative minimum: +'Pitch': Min: -8192 Max: 8191 +True range: Min: -8192 Max: 8191 (bias 0) + Valor mínimo. Si el valor mínimo + es negativo, el rango automáticamente + se traduce en un rango positivo. + +El valor es determinado por el tipo de controlador +7-bit Controller7 / RPN: Bias = 64 +14-bit Controller14 / RPN14: Bias = 8192 + +'Pitch' es la excepción. Está fijada + a cero, incluso con un mínimo negativo +'Pitch': Min: -8192 Max: 8191 +True range: Min: -8192 Max: 8191 (bias 0) - &Outside Loop - &Exterior de Bucle + + + Maximum value + Valor máximo - All &Parts on Track - Todas las &Partes de la pista + + Default: + Por defecto: - Score - Partitura + + L-Bank + Banco-L - Pianoroll - Pianola + + + + + + off + apagado - Drums - Percusión + + Progr. + Programa - List - Lista + + ??? + ??? - Wave - Audio + + H-Bank + Banco-H - Mastertrack - Pista Maestra + + Default value. Off: No default. + El valor por defecto. Apagado: No hay valor por defecto. - Graphic - Gráfico + + Default (initial) value. Off means no default. + +If a default value is chosen, the value will be sent + to the controller when the controller is added to + the song (in piano roll or event editor). When + the song is re-loaded, the value is sent again. +Otherwise the controller remains at its last value. +Controllers are also automatically added to a + song upon reception of a midi controller event. + +Caution! Watch out for controllers such as + 'Sustain' and 'ResetAllController' with default + values. You should probably turn 'off' their + default (in piano roll or drum edit, and + instrument editor). + Valor por defecto (inicial) . Apagado, no tiene valor predeterminado. + +Si se elije un valor por defecto , el valor será enviado + cuando el controlador se añada en la sesión + (en el editor de matríz o editor de lista). cuando + si la sesión se vuelve a cargar, el valor se vuelve a enviar. +De lo contrario el controlador permanece en su último valor. +Los controladores también se añaden automáticamente a una + sesión a la recepción de un evento de controlador midi. - Midi &Transform - &Transformación MIDI + + off + dont care + apagado - Global Cut - Corte global + + Add common controller + Agregar controlador común - Global Insert - Inserción Global + + &Add + &Agregar - Global Split - Partición Global + + Alt+A + Alt+A - &Edit - &Editar + + Delete controller + Borrar controlador - &Structure - E&structura + + Create a new controller + Crear un nuevo controlador - Functions - Funciones + + New &Controller + Nuevo - Transpose - Transponer + + Alt+C + Alt+C - - - MusEArranger::PartCanvas - Cannot copy/move/clone to different Track-Type - No puedo copiar/mover/clonar a un tipo diferente de pista + + Null Param Hi: + Byte alto no válido: - C&ut - C&ortar + + Null parameter number High byte + El número de byte alto no es válido. - &Copy - &Copiar + + + If set, these 'null' parameter numbers will + be sent after each RPN/NRPN event. +This prevents subsequent 'data' events + from corrupting the RPN/NRPN controller. +Typically, set to 127/127, or an unused + RPN/NRPN controller number. + Si se establece, 'nulo' el número de parámetro + será enviados después de cada evento RPN / NRPN. +Esto evita que los acontecimientos posteriores de "datos" + corrompan el controlador RPN / NRPN. +Por lo general, establezca a 127/127, o usar el + número de controlador RPN / NRPN. - rename - renombrar + + Lo: + Inferior: - color - color + + Null parameter number Low byte + El parametro inferior es nulo - delete - borrar + + S&ysEx + S&ysEx - split - partir + + SysEx List: + Lista se Sistema exclusivo (SysEx) - de-clone - des-clonar + + New SysE&x + Nuevo SysE&x - wave edit - editar onda + + Alt+X + Alt+X - Cannot paste: multiple tracks selected - No puedo pegar: mtilpes pistas seleccionadas + + &Help + A&yuda - Cannot paste: no track selected - No puedo pegar: No hay pista seleccionada + + + new item + Nuevo ítem - Cannot paste: wrong data type - No puedo pegar: Tipo de datos equivocado + + + What's this? + ¿Que es esto? - MusEArranger::TList - - show gui - mostrar gui - - - Delete Track - Borrar pista - + EditNoteDialogBase - Midi - MIDI + + MusE: Enter Note + MusE: Escribe Nota - Drum - Percusión + + OK + Aceptar - - - MusECore::Song - - Jack shutdown! - Detener Jack + + Cancel + Cancelar - - Jack has detected a performance problem which has lead to -MusE being disconnected. -This could happen due to a number of reasons: -- a performance issue with your particular setup. -- a bug in MusE (or possibly in another connected software). -- a random hiccup which might never occur again. -- jack was voluntary stopped by you or someone else -- jack crashed -If there is a persisting problem you are much welcome to discuss it -on the MusE mailinglist. -(there is information about joining the mailinglist on the MusE - homepage which is available through the help menu) - -To proceed check the status of Jack and try to restart it and then . -click on the Restart button. - Jack ha detectado un problema de rendimiento y MusE lo ha -desconectado -Esto podría suceder debido a varias razones: -- Un problema de rendimiento con su configuración particular. -- Un fallo en Muse u otro software de conexión. ---Un error al azar que tal vez nunca vuelva a ocurrir. -- Jack fue detenido por usted u otra persona -- Jack se estrelló -Si el problema persiste estaremos dispuesto a analizarlo -La lista de correos de MusE ee encuentra disponible a través -del menú de ayuda. - -Para comprobar el estado de Jack y reiniciar el servidor. -haga clic en el botón Reiniciar. + + Length: + Duración: - - - Automation: - Automatización + + Time Position: + Posición de tiempo: - - previous event - evento anterior + + Pitch: + Tono: - - next event - evento siguiente + + Velocity On: + Velocidad On: - - - set event - + + Velocity Off: + Velocidad Off: + + + EditSysexDialogBase - - - add event - agregar evento + + MusE: Enter SysEx + MusE: Introducir sistema exclusivo - - - erase event - borrar evento + + TimePosition: + Posición de tiempo: - - erase range - borrar rango + + Comment: + Comentario: - - clear automation - limpiar automatizacion + + OK + Aceptar - - Clear all controller events? - Limpiar todos los eventos de control + + Cancel + Cancelar + + + FLUIDGui - - &Ok - Ac&eptar + + FLUID: open Soundfile + FLUID: Archivo de sonido abierto + + + FLUIDGuiBase - - &Cancel - &Cancelar + + Form1 + Formulario1 - - MusE - external script failed - MusE - fallo de orden externa + + Soundfont + Fuente de sonido - - MusE was unable to launch the script, error message: -%1 - + + Load + Cargar - MusEGui + FLUIDSynthGuiBase - - Select project directory - + + FLUID Synth + Fluid Synth - - - MusEGui::Appearance - - Main application font, and default font for any - controls not defined here. - Fuente principal de la aplicación y la fuente por -defecto para los controles no estan definidas. + + Load + Cargar - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. - Para los controles pequeños, como: bandas de mezclador. -escala de tiempo, superposición de nombre en la región, -y rack de efectos. + + Delete + Borrar - Midi track info panel. Transport controls. - Panel de información de la pista MIDI - Control del transporte + + Dump Info + Volcar información - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. - Controlador de gráficos y botones S / X. Una gran cantidad -de eventos de tempo y el tempo de la escala y compás. + + ID + ID - Time scale markers. - Marcas de la escala de tiempo + + Fontname + Nombre de fuente - List editor: meta event edit dialog multi-line edit box. - Editor de la lista: Editar meta evento de diálogo multi-línea + + Chnl + Canal - Mixer label font. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - Fuente de la etiqueta del mezclador. Auto dimensionado del tamaño de la fuente elegida. -La separación de palabras, pero sólo con espacios. + + Soundfont + Fuente de sonido - - Mixer strips and effects racks. Midi track info panel. -Midi control panel entry box. - + + Drum Chnl + Canal de percusión - - Transport controls. - + + + Level + Nivel - - Time scale upper, and time signature. -Controller graph and S/X buttons. - + + Width + Anchura - - Time scale lower, and arranger part name overlay. - + + Damping + Amortiguamiento - - Tempo scale, and markers. - + + Room Size + Tamaño sala - - Mixer labels. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - + + Reverb + Reverberación - - Maximum mixer label auto-font-sizing font size. - Tamaño máximo de la fuente para etiqueta del mezclador. + + CHANNEL SETUP + CONFIGURACIÓN DE CANAL - - Global opacity (opposite of transparency). - Opacidad global + + Sine + Seno - - Standard - Estandar + + Triangle + Triángulo - - Custom - Personalizado + + Type + Tipo - - MusE: load image - MusE: carga imagen + + Number + Número - - Select style sheet - Seleccionar hoja de estilo + + Speed + Velocidad - - Qt style sheets (*.qss) - Hoja de estilo QT (*.qss) + + Depth + Profundidad + + + + Chorus + Coro ;-) + + + + Gain + Ganancia + + + + LOADED SOUNDFONTS + SOUNDFONTS CARGADOS - MusEGui::Arranger + FileDialogButtons - - Enable Recording - Habilita captura + + Global + Global - - Mute/Off Indicator - Indicador de Desconexion/Apagado + + User + Usuario - - Solo Indicator - Indicador de solo + + Project + Sesión - - Track Type - Tipo de pista + + read Midi Port +Configuration + - - Track Name - Nombre de pista + + write window +states + - - Midi output channel number or audio channels - Numero de canal de salida MIDI o canales de audio + + fdialogbuttons + Dialogo de botones + + + FluidSynthGui - - Midi output port or synth midi port - Puerto de salida MIDI o puerto de sintetizador + + Choose soundfont + Elegir soundfont + + + + GateTimeBase + + + Range + Rango - - Time Lock - Bloqueo de tiempo + + All Events + Todos los eventos - - Automation parameter selection - Seleccion de parametros de automatizacion + + Selected Events + Eventos seleccionados - - Notation clef - Clave de la notación + + Looped Events + Eventos en bucle - - Enable recording. Click to toggle. - Habilitar captura: Clic en el botón. + + MusE: Modify Note Length + MusE: Cambiar duración de notas + + + + Selected Looped + Seleccionar bucles - - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - Indicador de silenciado: click para silenciar -Clic con el boton derecho del ratón -para Apagar/Encender + + Values + Valores - - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - Indicador de Solo, clic en el botón. -Pistas "fantasmas" en solo, - seran indicadas por un cuadrado negro. + + Rate: + Velocidad: - - Track type. Right-click to change - midi and drum track types. - Tipo de pista: Clic derecho alterna entre tipo MIDI/Percusión + + Offset: + Desplazamiento: - - Track name. Double-click to edit. -Right-click for more options. - Nombre de pista: Doble clic para editar -Click derecho para mas opciones. + + % + % - - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - Pista MIDI/Percusión: Numero de canal de salida -Pista de audio: Canales. -Clic con el botón del medio -o el derecho para cambiar. + + lenNew = (lenOld * rate) + offset + lenNew = (lenOld * rate) + offset - - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - Pista de MIDI/Percusión: Puerto de salida. -Pista de sintetizador: Asigna el puerto MIDI -Clic de ratón para cambiar -Clic derecho para ver la interfaz + + OK + Aceptar - - Time lock - Bloqueo de tiempo + + Cancel + Cancelar + + + GlobalSettingsDialogBase - - Notation clef. Select this tracks notation clef. - Clave de la notación. Seleccione esta clave de la notación de las pistas. + + MusE: Global Settings + MusE: Configuración global globales - - Arranger - Arreglador + + Audio + Audio - - Cursor - Cursor + + Mixer + Mezclador - - Off - Apagado + + + dB + dB - - Bar - Compás + + min. Meter Value + Valor mínimo del vúmetro - - Snap - Snap + + Midi + MIDI - - Len - Len + + Ticks + Tics - - - song length - bars - Duración de compás + + + + 1024 + 1024 - - Type - Tipo + + + + 2048 + 2048 - - NO - No + + 4096 + 4096 - - GM - GM + + Displayed Resolution +(Ticks/Quarternote) + Resolución mostrada +(tics/negra) - - GS - GS + + + 48 + 48 - - XG - XG + + + 96 + 96 - - - midi song type - tipo de canción midi + + + 192 + 192 - - Pitch - Tono + + + 384 + 384 - - midi pitch - tono midi + + + 768 + 768 - - global midi pitch shift - desplazamiento de tono midi + + + 1536 + 1536 - - Tempo - Tempo + + + 3072 + 3072 - - - midi tempo - tempo midi + + + 6144 + 6144 - - N - N + + + 12288 + 12288 - - TrackInfo - Información de pista + + RTC Resolution +(Ticks/Sec) + Resolución del reloj +(Tics/segundo) - - R - R + + /sec + /seg - - M - M + + GUI Refresh Rate + Velocidad de refresco de la interfáz - - S - S + + GUI Behaviour + - - C - C + + Use project save dialog + Usar diálogo de guardado - - Track - Pista + + Some popup menus stay open (else hold Ctrl) + Menús emergentes (si no mantenga presionado Ctrl) - - Port - Puerto + + Allows some popup menus to stay open. +Otherwise, hold Ctrl to keep them open. + Permite tener abiertos algunos menús emengentes. +De lo contrario, mantenga la tecla Ctrl para mantenerlos abiertos. - - Ch - + + In some areas, the middle mouse button decreases +values, while the right button increases. Users without a +middle mouse button can select this option to make the +left button behave like the middle button in such areas. + En algunas zonas, el botón central del ratón disminuye el +valor, mientras que el botón derecho lo aumenta. Los usuarios +sin un botón central del ratón, puede seleccionar esta opción +para hacer que el botón de la izquierda se comporte como +el botón del medio. - - T - T + + Use left mouse button for decreasing values + Botón izquierdo del ratón reduce el valor - - Automation - Automatizacion + + Shift + Right click sets left range marker + Ctrl + clic derecho establece marcador de la izquierda. - - Clef - Clave + + Allow adding hidden tracks in track list menu + - - - MusEGui::ArrangerView - - MusE: Arranger - Ordenar + + Unhide tracks when adding hidden tracks + - - Undo/Redo tools - Herramientas de Deshacer/Rehacer + + + Smart focus + - - panic - pánico + + After editing, controls will return + focus to their respective canvas + - - transport - transporte + + GUI Style + - - C&ut - C&ortar + + MDI-subwindowness and sharing menus + MDI Sub ventanas y posición de menús - - &Copy - &Copiar + + Presets: + Preseteos: - - Copy in range - Copiar interior del rango + + traditional MusE SDI + Comportamiento tradicional de MusE - - &Paste - &Pegar + + Cakewalk-like MDI + Comportamiento similar a Cakewalk - - Paste (show dialog) - Pegar (ver dialogo) + + Borland-/Mac-like MDI + Comportamiento similar a Borland/Mac - - Paste c&lone - Pegar c&lon + + &Apply + &Aplicar - - Paste clone (show dialog) - Pergar clon (ver dialogo) + + &Ok + Ac&eptar - - &Insert Empty Measure - &Insertar compás vacío + + &Cancel + &Cancelar - - Delete Selected Tracks - Borrar pistas seleccionadas + + Application + Aplicación - - Shrink selected parts - Encojer regiones seleccionadas + + Start Muse + Inicio de MusE - - Expand selected parts - Expander regiones seleccionadas + + start with last song + Abrir la última sesión - - Clean selected parts - Limpiar regiones seleccionadas + + start with song + Abrir la sesión - - Add Track - Agregar pista + + Views + Vistas - - Select - Seleccionar + + + + + + y-pos + pos. Y - - Select &All - Seleccion&ar todo + + + + + show + Ver - - &Deselect All - &Deseleccionar todo + + + + + + x-pos + Pos. X - - Invert &Selection - Invertir &selección + + + + + height + Ancho - - &Inside Loop - &Interior del bucle + + + + + width + Altura - - &Outside Loop - &Exterior del bucle + + Big Time + Ventana de tiempo - - All &Parts on Track - Todas las regiones de la &pista + + Transport + Transporte - - Score - Editor de partitura + + + + + + Cur + Actual - all parts in one staff - Todas las regiones en un solo pentagrama + + + + + + set current values + Establecer valores actuales - one staff per part - Un pentagrama por región. + + show splash screen + Mostrar pantalla de inicio - - all tracks in one staff - + + Mixer A + Mezcaldora A - - one staff per track - + + Mixer B + Mezcladora B - - New score window - Nueva ventana de partitura + + show "Did you know?" dialog + Ver dialogo ¿Sabia usted que? - - Pianoroll - Editor de matriz + + Start song + Iniciar Sesión - - Drums - Editor de percusión + + min. Slider Val + Valor mínimo del potensiómetro - - - List - Editor de lista + + Enable denormal protection + Habilitar proteccion - - Wave - Editor de audio + + Enable output limiter + Habilitar limitación de salida - - Mastertrack - Pista maestra. + + External Waveditor + Editor de audio externo - - Graphic - Editor gráfico + + External Waveditor command + Editor de audio externo (comando) - - Midi &Transform - &Transformación MIDI + + Note: External editor opened from the internal editor. + Note: El editor externo se abre desde adentro - - Global Cut - Corte global + + Dummy Audio Driver (settings require restart) + Controlador de audio en vacío (El cambio requiere reinicio) - - Global Insert - Inserción global + + Hz + Hz - - Global Split - División global + + Period size (Frames per period): + Tamaño del período (Cuadros por período) - - Global Cut - selected tracks - + + + 16 + 16 - - Global Insert - selected tracks + + Project directory - - Global Split - selected tracks + + Projects: - - &Edit - &Editar + + + + ... + ... - - &Structure - E&structura + + Main Window + Ventana principal - - Functions - Funciones + + Choose start song or template + - - &Quantize Notes - Cuantizado de notas + + Reset to default + - - Change note &length - Cambiar duración de notas + + start with template + - - Change note &velocity - Cambiar velocidad de notas + + Start template or song: + - - Crescendo/Decrescendo - Crescendo/Decrescendo + + Read MIDI Ports configuration from file, + or else automatically configure + - - Transpose - Transponer + + Read MIDI Ports configuration + - - Erase Events (Not Parts) - Borrar eventos (no regiones) + + Try to use Jack Freewheel + Habilitar Jack para juego libre - - Move Events (Not Parts) - Mover eventos (no regiones) + + Speeds bounce operations + Velocidad de las operaciones de rebote - - Set Fixed Note Length - Igualar duración de notas + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. + Usar juego libre para Jack si es posible +Reduce dramaticamente el tiempo de rebote. - - Delete Overlapping Notes - Borrar notas superpuestas + + VST in-place + VST emplazado - - Legato - Legato + + Enable VST in-place processing (restart required) + Activar VST en el prosesamiento (Requiere reiniciar) - - Window &Config - Comportamiento de ventana + + Enable VST in-place processing. Turn this off if + VST Ladspa effect rack plugins do not work or + feedback loudly, even if they are supposed to + be in-place capable. Setting requires a restart. + Activar VST en el procesamiento. Desactive esta opción si + Rack de efectos Ladspa VST no está instalado (Requiere reiniciar) - - - New - Nuevo + + Minimum control period + Periodo mínimo de control - - - MusEGui::AudioMixerApp - - &Create - &Crear + + Minimum audio controller process period (samples). + + Período mínimo del control de proceso de audio (muestras) - &View - &Ver + Minimum audio controller process period (samples). +Adjusts responsiveness of audio controls and + controller graphs. Set a low value for fast, smooth + control. If it causes performance problems, set a + higher value. + Período mínimo del control de proceso de audio (muestras) +Ajusta la sensibilidad de los controles de audio y + gráficos de control. Establecer un valor bajo para un control rápido + y suave. + Si le causa problemas de rendimiento, establezca un + valor mayor. - - Routing - Ruteado + + 1 + 1 - - Show Midi Tracks - Ver pistas MIDI + + 2 + 2 - - Show Drum Tracks - Ver pistas de percision + + 4 + 4 - - Show Wave Tracks - Ver pistas de audio + + 8 + 8 - - Show Inputs - Ver entradas de audio + + + 32 + 32 - - Show Outputs - Ver salidas de audio + + + 64 + 64 - - Show Groups - Ver grupos de audio + + + 128 + 128 - - Show Auxs - Ver envios auxiliares + + + 256 + 256 - - Show Synthesizers - Ver sintetizadores + + + 512 + 512 - - - MusEGui::AudioStrip - - panorama - panorama + + Sample rate + Frecuencia de muestreo - - aux send level - volumen de envio auxiliar + + Shorter periods give better midi playback resolution. + Períodos más cortos dan una mejor resolución de la reproducción midi. - - Pan - Paneo + + 8192 + 5 1/3' {8192?} - - 1/2 channel - Canales 1/2 + + 16384 + 5 1/3' {16384?} - - Pre - Pre + + 32768 + 5 1/3' {32768?} - - pre fader - post fader - pre fader - port fader + + Midi Resolution +(Ticks/Quarternote) + Resolución MIDI +(Tics/Negra) + + + + Use old-style stop shortcut: + Atajo antiguo para detener + + + + Move single armed track with selection + Armar la pista con la selección (Grabar) - - dB - dB + + On Launch + Lanzar al inicio - - record - grabar + + Behavior + Comportamiento + + + LegatoBase - - mute - silencio + + MusE: Legato + MusE: Legato - - record downmix - downmix de captura + + Range + Rango - - - solo mode - Modo solo + + All Events + Todos los eventos - off - apagado - - - - iR - ER + Selected Events + Eventos seleccionados - - input routing - Ruteado de entrada + + Looped Events + Eventos del bucle - - oR - SR + + Selected Looped + Bucle seleccionado - - output routing - ruteado de salida + + Settings + Configuración - - Off - Apagado + + ticks + Tics - - Read - Lectura + + Minimum Length + Duración minima: - - Touch - Tocar + + Allow shortening notes + Permitir notas cortas - - Write - Escritura + + OK + Aceptar - - automation type - Tipo de automatizacion + + Cancel + Cancelar - MusEGui::BigTime - - - format display - Formato de vista - + MITTransposeBase - - bar - compaa + + MusE: Midi Input Plugin: Transpose + MusE: Plugin de entrada MIDI : Transposición - - beat - Pulso + + On + Encendido - - - tick - Tic + + TriggerKey + Tecla de salto - - minute - minuto + + Transpose: + Trasponer: - - second - segundo + + +0 + +0 + + + MRConfigBase - - - frame - frame + + MusE: Midi Input Plugin: Remote Control + MusE: Pluginde entrada MIDI : Control remoto - - subframe - sub-frame + + Activate + Activar - - MusE: Bigtime - MusE: Big Time + + On + Encendido - - - MusEGui::ClipListEdit - - MusE: Clip List Editor - MusE: Editor de lista de archivos de audio + + Actions + Acciones - - Undo/Redo tools - Herramientas Deshacer/Rehacer + + Stop + Parar - - panic - pánico + + Record + Grabar - - transport - Transporte + + Goto Left Mark + Ir a marca izquierda - - Window &Config - Comportamiento de ventana + + Play + Reproducir - - - MusEGui::ComboQuant - - - - Off - Apagado + + Insert rest (step rec) + Insertar el resto - MusEGui::CtrlPanel + MdiSettingsBase - - S - S + + Form + Forma - - select controller - Seleccionar controlador + + GroupBox + Grupos - - X - X + + MDI subwin + MDI sub ventana - - remove panel - Quitar el panel + + Shares menu when subwin + Acciones de menú cuando es sub ventana - - manual adjust - Ajuste manual + + Shares menu when free + Acciones de menú cuando es ventana libre + + + MetronomeConfigBase - - double click on/off - doble click encendido/apagado + + MusE: Metronome Config + MusE: Configuración del metrónomo - - off - apagado + + Metronome + Metrónomo - - - Velocity - Velocidad + + Audio Beep + Bip de audio - - add new ... - Agregar nuevo... + + MIDI Click + Clic MIDI - - - Instrument-defined - Definición de instrumento + + Midi Channel + Canal MIDI - - - Add ... - Agregar... + + Measure Note + Nota de compás - - Others - Otros + + Measure Velocity + Velocidad de compás - - Edit instrument ... - Editar instrumento... + + Beat Velocity + Velocidad de barra - - Common Controls - Controles comunes + + Beat Note + Nota de barra - - - MusEGui::DrumEdit - - - mute instrument - silenciar instrumento + + Midi Port + Puerto MIDI - - - sound name - nombre del sonido + + Precount + Cuenta atrás - - - volume percent - Porcentaje de volumen + + enable + habilitada - - - quantisation - cuantización + + Bars + Compases - - - this input note triggers the sound - ensta nota de entrada dispara el sonido + + From Mastertrack + desde la pista Mestra - - - note length - Duración de nota + + / + / - - - this is the note which is played - Esta es la nota que se toca + + Signature + Compás - - output channel (hold ctl to affect all rows) - canal de salida (mantener presionado Ctrl a afectar a todas las pistas) + + Prerecord + Pre-captura - - output port (hold ctl to affect all rows) - Puerto de salida (Mantener presionado CTRL a afecta todas las pistas) + + Preroll + Pre-escucha - - - shift + control key: draw velocity level 1 - Shift + CTRL: Dibuja la velocidad 1 + + &Apply + &Aplicar - - - control key: draw velocity level 2 - CTRL: Dibuja la velocidad 2 + + &OK + Ac&eptar - - - shift key: draw velocity level 3 - Shift: Dibuja la velocidad 3 + + &Cancel + &Cancelar - - - draw velocity level 4 - Dibuja la velocidad 4 + + Choose outputs... + Seleccionar salidas... - - output channel (ctl: affect all rows) - Canal de salida. (CTRL afecta todas las pistas) + + 50 + 50 - - output port (ctl: affect all rows) - Puerto de salida (CTRL afecta todas las pistas) + + % Audio volume + % De volúmen de audio - - &File - Archivo + + Hint: Enable metronome in Transportpanel + Habilitar metrónomo en el panel de transporte - - Load Map - Cargar Mapa + + Alt+A + Alt+A - - Save Map - Guarda Mapa + + Alt+O + Alt+O - - Reset GM Map - Resetear mapa GM + + Alt+C + Alt+C + + + MidiAudioControlBase - - &Edit - &Editar + + Midi control + - - Cut - Cortar + + Port: + - - Copy - Copiar + + Channel: + - - Copy events in range - Copiar eventos del rango + + Control type: + - - Paste - Pegar + + Control7 + Control7 - - Paste (with Dialog) - Pegar (con dialogo) + + Control14 + Control14 - - Delete Events - Borrar eventos + + RPN + RPN - - &Select - &Seleccionar + + NRPN + NRPN - - Select All - Seleccionar todo + + RPN14 + RPN14 - - Select None - No seleccionar nada + + NRPN14 + NRPN14 - - Invert - Invertir + + Pitch + - - Inside Loop - Interior del bucle + + Program + Programa - - Outside Loop - Exterior del bucle + + Hi: + - - Previous Part - Región anterior + + Lo: + - - Next Part - Región siguiente + + Learn + + + + + MidiFilterConfigBase + + + MusE: Midi Input Filter + MusE: Filtro de entrada MIDI - - Fu&nctions - Funciones + + Record Filter + Filtro de captura - - Re-order list - Reordenar la lista + + + Note On + Nota on - - Set Fixed Length - Fijar duración + + + Poly Pressure + Presión polifónica - - Modify Velocity - Modificar la velocidad. + + + Controller + Controlador - - Crescendo/Decrescendo - Crescendo/Decrescendo + + + Program Change + Cambio de programa - - Quantize - Cuantizar + + + After Touch + After Touch - - Erase Event - Borrar evento + + + Pitch Bend + Rueda de afinación - - Move Notes - Mover notas + + + Sysex + Sistema exclusivo - - Delete Overlaps - Eliminar superpuestos + + Thru Filter + Filtro Thru - - &Plugins - Efectos + + Controller Filter + Filtrar controlador - - Window &Config - + + Channel Filter + Filtro de canal - - Drum tools - Herramientas de percusión + + 14 + 14 - - Load Drummap - Cargar mapa de percusión + + 10 + 10 - - Store Drummap - Guardar mapa de percusión + + 6 + 6 - - Step Record - Grabación por pasos + + 12 + 12 - - Midi Input - Entrada MIDI + + 4 + 4 - - cursor tools - Herramientas de cursor + + 2 + 2 - - Set step size for cursor edit - Establecer el tamaño del paso para modificar el cursor + + 9 + 9 - - panic - pánico + + 8 + 8 - - transport - Transporte + + 3 + 3 - - ctrl - control + + 13 + 13 - - Add Controller View - Agregar vista de controlador + + 15 + 15 - - M - M + + 16 + 16 - - Sound - Sonido + + 7 + 7 - - Vol - Volumen + + 11 + 11 - - QNT - QNT + + 5 + 5 - - E-Note - Nota-E + + 1 + 1 + + + MidiInputTransformDialogBase - - Len - Duraciòn + + MusE: Midi Input Transformator + MusE: Transformador de entrada MIDI - - A-Note - Nota-A + + Filter + Filtro - - Ch - Canal + + All + Todo - - Port - Puerto + + + + + + Equal + Igual - - LV1 - VL1 + + + + + + Unequal + Diferente - - LV2 - VL2 + + Note + Nota - - LV3 - VL3 + + + Poly Pressure + Presión polifóica - - LV4 - VL4 + + + Control Change + Cambio de control - - Muse: Load Drum Map - MusE: Cargar mapa de percusión + + + Aftertouch + AfterTouch - - MusE: Store Drum Map - MusE: Guardar mapa de percusión + + + Pitch Bend + Rueda de modulación - - Drum map - Mapa de percusiòn + + + NRPN + NRPN - - Reset the drum map with GM defaults? - ¿Resetear en mapa de percusión con el banco GM? + + + RPN + RPN - - - MusEGui::EditCAfterDialog - - MusE: Enter Channel Aftertouch - MusE: Introduzca el AfterTouch del canal + + + + Value 2 + Valor 2 - - Time Position - Posición de tiempo + + + + + + Value 1 + Valor 1 - - Pressure - Presión + + + Event Type + Tipo de Evento - - - MusEGui::EditEventDialog - - Ok - Aceptar + + + + + Ignore + Ignorar - - Cancel - Cancelar + + + + + Higher + Mayor - - - MusEGui::EditInstrument - - - MusE: Create file failed - MusE: Fallo la creacion del archivo + + + + + Lower + Menor - - MusE: Write File failed - MusE: La captura del archivo ha fallado + + + + + Inside + Entre - MusE: - MusE: + + + + + Outside + Fuera - The user instrument directory -%1 -does not exist yet. Create it now? - - El instrumento no existe en la carpeta -%1 -¿Desea crearlo ahora? - + + + Channel + Canal - (You can change the user instruments directory at Settings->Global Settings->Midi) - (Usted puede cambiar la carpeta del instrumento desde Ajustes->Configuración global->MIDI) + + + Port + Puerto - Unable to create user instrument directory '%1' - No es posible crear el instrumento en la carpeta '%1' + + Processing + Procesando - - - MusE: Save Instrument Definition - MusE: Guardar definicion de instrumento + + + + + + Keep + Mantener - - - Instrument Definition (*.idf) - Definicion de instrumento (*.idf) + + + + + + Fix + Arreglar - - - MusE: Save instrument as - MusE: Guardar instrumento como + + + + + Plus + Más - - Enter a new unique instrument name: - Ingrese un nuevo nombre unico de instrumento + + + + + Minus + Menos - - The user instrument '%1' already exists. This will overwrite its .idf instrument file. -Are you sure? - + + + + + Multiply + Multiplicar - - MusE: Bad instrument name - MusE: Nombre de instrumento invalido + + + + + Divide + Dividir - - Please choose a unique instrument name. -(The name might be used by a hidden instrument.) - Selecciones un nombre único al instrumento -(El nombre puede estar siendo utilizado por un instrumento oculto.) + + + + + Invert + Invertir - - MusE: Bad patch name - MusE: Nombre de programa invalido + + ScaleMap + Mapa de escalado - - Please choose a unique patch name - Por favor elija nombre unico de programa + + Flip + cambiar - - MusE: Bad patchgroup name - MusE: Nombre de grupo erroneo. + + + + + Dyn + Dinámico - - Please choose a unique patchgroup name - Seleccione un nombre único al grupo + + + + + Random + Aleatorio - - MusE: Bad controller name - MusE: Nombre del controlador no válido. + + Modules + Módulos - - Please choose a unique controller name - El nombre del controlador ya existe + + 1 + 1 - - - MusE: Cannot add common controller - MusE: No se puede agregar un controlador comun. + + 2 + 2 - - A controller named '%1' already exists. - El nombre de controlador '%1' ya existe. + + 3 + 3 - - A controller number %1 already exists. - El número de controlador %1 ya existe. + + 4 + 4 - - - MusE - MusE + + enable modul 1 + habilitar módulo 1 - - - The current Instrument contains unsaved data -Save Current Instrument? - El instrumento actual contiene datos sin guardar. -¿Desea guardarlos ahora? + + enable modul 2 + habilitar módulo 2 - - - &Save - &Guardar + + enable modul 3 + habilitar módulo 3 - - - &Nosave - &No Guardar + + enable modul 4 + habilitar módulo 4 - - &Abort - &Abortar + + Preset + Preselección - - - MusEGui::EditMetaDialog - - MusE: Enter Meta Event - MusE: Introduzca evento Meta + + Name: + Nombre: - - Time Position - Posición de tiempo + + Comment: + Comentario: - - Meta Type - Tipo de Meta + + Function + Función - - Enter Hex - Ingrese Hex + + &New + &Nueva + + + + create new preset + crea nueva preselección - - - MusEGui::EditPAfterDialog - - MusE: Enter Poly Aftertouch - Muse: Escribe el aftertouch polifónico + + &Delete + &Borrar - - Time Position - Posición de tiempo + + delete preset + borra la preselección - - Pitch - Tono + + &Dismiss + &Ocultar - - Pressure - Presión + + PresetList + Lista de Preselecciones - MusEGui::EditToolBar - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - Selecciona la herramienta Puntero: -con la herramienta de puntero puede: - seleccionar regiones - mover regiones - copiar regiones. - + MidiSyncConfigBase - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - Selecciona la Herramienta de Lápiz: -con la herramienta de Lápiz puede: - crear nuevas regiones - modificar la duración de las regiones. + + MusE: Midi Sync + MusE: Sincronización MIDI - - select Delete Tool: -with the delete tool you can delete parts - selecciona la Herramienta de Borrar: -con la herramienta de Borrar puedes borrar regiones. + + Apply + Aplicar - - select Cut Tool: -with the cut tool you can split a part - selecciona la Herramienta de Corte: -con la herramienta de Corte puede dividir una región + + Ok + Aceptar - - select Glue Tool: -with the glue tool you can glue two parts - selecciona la Herramienta de Unir: -con la herramienta de Unir puedes unir dos regiones. + + Cancel + Cancelar - - select Score Tool: - - selecciona la Herramienta de Partitura: - + + hour + hora - - select Quantize Tool: -insert display quantize event - selecciona la Herramianta de Cuantización: -inserta un evento de cuantización de visualización + + h + h - - select Drawing Tool - selecciona la Herramienta de Dibujo + + minute + minuto - - select Muting Tool: -click on part to mute/unmute - selecciona la Herramienta de Silenciar: -haz click en una región para silenciar/des-silenciar + + m + m - - Manipulate automation - Manipular automatización + + second + segundo - - Cursor tool - Herramientas de cursor + + s + s - - pointer - puntero + + frame + frame - - pencil - lápiz + + f + f - - eraser - Borrador + + subframe + sub-frame - - cutter - cortador + + 24 + 24 - - score - partitura + + 25 + 25 - - glue - Pegador + + 30D + 30D - - quantize - cuantizador + + 30N + 30N - - draw - dibujar + + MTC + MTC - - mute parts - silenciar regiones + + Type: + Tipo: - - edit automation - Editar automatización + + Offset: + Desplazamiento: - - cursor - Cursor + + Sync receiving and sending + Sincronizar la recepción y envío - Edit Tools - Editar herramientas - - - - MusEGui::EffectRack - - - effect rack - rack de efectos + Send and receive Jack transport + Recepción y envío del transporte de Jack - - new - nuevo + + Send and receive Jack transport information, + including stop, start and position. + Información de la recepción y envío del transporte de Jack, incluye detener, iniciar y posición. - - change - cambiar + + Use Jack transport + Usar transporte de Jack - - move up - subir + + Make MusE the Jack transport Timebase Master + Hacer de MusE el transporte de base de tiempo principal para Jack - - move down - bajar + + Make MusE the Jack transport Timebase Master. +Allows Jack to show time as + MusE Bars, Beats, and Ticks. +MusE will try to become master, but other + Jack clients can also take over later. +You can always click here again for Master. + Hacer de MusE el transporte de base de tiempo principal para Jack +Permite a Jack para mostrar el tiempo como + Compases de MusE , pulso, e inserciones. +MusE tratará de convertirse en maestro, pero otros + clientes de Jack también pueden hacerlo más adelante. +Siempre puede hacer clic aquí de nuevo para definir como maestro. - - remove - quitar + + Jack transport Timebase Master + Usar Jack como transporte maestro - - bypass - saltar + + Control MusE timing by external midi clock or MTC sync + Control de tiempo de MusE por el reloj MIDI externo o sincronización MTC - - show gui - mostrar gui + + When in slave mode, tempo is + controlled externally. +MusE can sync to midi clock, or MTC quarter frame sync. +Enabled inputs in the list will + be in effect (RMC, RMMC, RMTC). + Cuando está en modo esclavo, el tempo es + controlado externamente. +Muse se sincroniza con el reloj midi, o sincronización MTC +Entradas habilitadas en la lista + que rigen (RMC, RMMC, CRFM). - - show native gui - Ver interfaz nativa + + Slave to external sync + Esclavo de sincronía externa - - save preset - Guardar preseteo + + Send start to first clock delay + Retraso del envío de empezar el primer reloj. - - MusE: Save Preset - MusE: Guardar preseteo + + Allows 'slow sync' devices time + to synchronize to MusE. This value is the + delay from sending start to sending + the first clock. + Permite "sincronización lenta" para dispositivos + sincronizar con Muse. Este valor es el + retraso del envío de empezar el primer reloj. - - Replace effect - Reemplazar efecto + + ms + ms - - Do you really want to replace the effect %1? - ¿Desea reemplazar el efecto %1? + + Send sync delay + Enviar retraso de sincronización - - - MusEGui::GlobalSettingsConfig - Selects instruments directory - Seleccionar carpeta de instrumentos + + Note: Sync delay and MTC sync currently not fully implemented + - MusEGui::Header + MidiTrackInfoBase - - Track Info Columns - Colunna de informaciòn de pistas + + MusE: TrackInfo + MusE: Información de pista - - - MusEGui::LMaster - - MusE: Mastertrack - MusE: pista maestra + + output channel + canal de salida - - &Edit - &Editar + + + % + % - - Insert Tempo - Insertar tiempo + + output port + puerto de salida - - Insert Signature - Insertar signatura + + + + + + + + off + apagado - - Insert Key - Insertar clave + + Transp. + Transporte - - Edit Positon - Editar posición + + Channel Info + Información de Canal - - Edit Value - Editar valor + + Rec: + Grabar - - Delete Event - Borrar evento + + Bank Select MSB. Ctrl-double-click on/off. + - - Window &Config - &Configuraciòn de la ventana + + Bank Select LSB. Ctrl-double-click on/off. + - - Undo/Redo tools - Herramientas de Deshacer/rehacer + + Program. Ctrl-double-click on/off. + - - Edit tools - Editar herramientas + + Prog + Programa - - Tempo - Timpo + + Volume. Ctrl-double-click on/off. + - - Timesig - compás + + Vol + Volumen - - Key - Clave + + + Change stereo position. Ctrl-double-click on/off. + - - new tempo - nuevo tempo + + Pan + Panorama - - new signature - nuevo compás + + Delay + Retardo - - new key - Nueva clave + + H-Bank + Banco-superior - - panic - Pánico + + Compr. + Compresión - - transport - Transporte + + L-Bank + Banco-inferior - - Meter - Metrónomo + + Velocity + Velocidad - - Time - Tiempo + + Length + Duración - - Type - Tipo + + all midi events are sent to this output channel + Todos los eventos MIDI se envían a este canal de salida - - Value - Valor + + Out ch + Canal de salida - - Reposition of the initial tempo and signature events is not allowed - Reposición del tempo inicial y la firma de eventos, no está permitido + + input routing + Ruteo de entrada - - MusE: List Editor - MusE: Editor de lista + + output routing + ruteado de entrada - - Input error, conversion not OK or value out of range - Error de entrada,la conversión no escorrecta o valor está fuera de rango. + + input detect + Detectar entrada - - Reposition of tempo and signature events to start position is not allowed! - Reposición de los eventos de tempo y la firma a la posición inicial no está permitida! + + Input detect indicator. Detects all note on-off, controller, aftertouch, + program change, and pitchbend (but not sysex or realtime) events + on the selected channels, on the selected midi ports. + Indicador de entrada. Detecta todas las notas de encendido y apagado, eventos , + de control, aftertouch, cambio de programa, y pitchbend en los + canales seleccionados, en los puertos MIDI seleccionados. + (No detecta envios SysEx o tiempo real) - - - MusEGui::ListEdit - - insert Note - insertar Nota + + W + W - - insert SysEx - insertar sistema exclusivo + + Midi thru + MIDI thru - - insert Ctrl - insertar controlador + + Pass input events through ('thru') to output. + Pasar los eventos de entrada a la salida (Thru). - - insert Meta - insertar Meta + + Select instrument patch + Seleccione el instrumento - - insert Channel Aftertouch - insertar AfterTouch de canal + + <unknown> + <desconocido> + + + + Add all settings to song + Agregar todos los ajustes a la sesión + + + + All + Todo + + + + Add bank + prog settings to song + Agregar ajustes de banco y programa a la sesión - - insert Poly Aftertouch - insertar AfterTouch Polifónico + + Add vol setting to song + Agregar ajustes de volumen a la sesión - - &Edit - &Editar + + Add pan setting to song + Agregar ajuste de panorámica a la sesión + + + MidiTransformDialogBase - - Cut - Cortar + + MusE: Midi Transformator + MusE: Transformador MIDI - - Copy - Copiar + + &New + &Nueva - - Paste - Pegar + + &Delete + &Borrar - - Delete Events - Borrar eventos + + &Apply + &Aplicar - Window &Config - &Configuraciòn de la ventana + &OK + Ac&eptar - - Undo/Redo tools - Herramientas de Deshacer/Rehacer + + &Cancel + &Cancelar - - Insert tools - Insertar herramientas + + PresetList + Lista de preselecciones - - panic - pánico + + Processing + Procesando - - transport - Transporte + + + Event Type + Tipo de evento - - Tick - Tic + + + + + + Keep + Mantener - - Bar - Compàz + + + + + Fix + Arreglar - - Type - Tipo + + + Note + Nota - - Ch - + + + Poly Pressure + Presión polifónica - - Val A - Val A + + + Control Change + Cambio de control - - Val B - Val B + + + Aftertouch + AfterTouch - - Val C - Val C + + + Pitch Bend + Rueda de modulación - - Len - + + + NRPN + NRPN - - Comment - Comentario + + + RPN + RPN - - - MusEGui::MPConfig - - - Default input connections - Conexión de entrada predeterminada + + + + + Plus + Más - - - Are you sure you want to apply to all existing midi tracks now? - ¿Seguro que desea aplicar a todas las pistas MIDI existentes? + + + + + Minus + Menos - - - Default output connections - Conexión de salida predeterminada + + + + + Multiply + Multiplicar - - - Setting will apply to new midi tracks. -Do you want to apply to all existing midi tracks now? - El sjuste se aplicará a las nuevas pistas MIDI. -¿Usted desea aplicar a todas las pistas MIDI existentes? + + + + + Divide + Dividir - - MusE: bad device name - MusE: Nombre del dispositivo incorrecto + + + + Value 2 + Valor 2 - - please choose a unique device name - El nombre del dispositivo ya existe + + + Invert + Invertir - - - in - Entrada + + ScaleMap + Escalado de mapa - - - out - Salida + + Flip + Cambiar - - Show first aliases - Mostrar primero los álias + + + Dyn + Dyn - - Show second aliases - Mostrsr después los álias + + + Random + Aleatorio - - - Toggle all - Cambiar todos + + + + Value 1 + Valor 1 - - - Change all tracks now - Cambiar todas las pistas ahora + + + Length + Duración - - Create Jack device - Crear conexión Jack + + Position + Posición - - - Port Number - Número de puerto + + Filter + Filtro - - Enable gui - Habilitar visualización + + All + Todo - - Enable reading - Habilitar lectura + + + + + + Equal + Igual - - Enable writing - Habilitar escritura + + + + + + Unequal + Diferente - - Port instrument - Puerto de instrumento + + + + + Ignore + Ignora - - Midi device name. Click to edit (Jack) - Nombre del dispositivo MIDI, Clic para editar (Jack) + + + + + Higher + Mayor - - Connections from Jack Midi outputs - Conexiones de salidas MIDI de Jack + + + + + Lower + Menor - - Connections to Jack Midi inputs - Conexiones de entrada MIDI de Jack + + + + + Inside + Entre - - Auto-connect these channels to new midi tracks - Conectar automaticamente a estos canales las nuevas pistas midi + + + + + Outside + Fuera - - Auto-connect new midi tracks to these channels - Conectar nuevas pistas MIDI a estos canales + + Bar Range + Rango de compases - - Auto-connect new midi tracks to this channel - Autoconectar las nuevas pistas MIDI a este canal + + Preset + Preselección - - Device state - Estado del dispositivo + + Name: + Nombre: - Enable gui for device - Habilitar visualización para el dispositivo + Comment: + Comentario: - - Enable reading from device - Habilitar la lectura desde el dispositivo + + Range + Rango - - Enable writing to device - Habilitar la escritura en el dispositivo + + process all events + procesar todos los eventos - - Name of the midi device associated with this port number. Click to edit Jack midi name. - Nombre del dispositivo MIDI asociado con este puerto. Haga clic para cambiar el nombre del dispositivo MIDI de Jack. + + selected tracks + seleccionar pistas - - Instrument connected to port - Instrumento conectado al puerto + + inside loop + dentro de bucle - - Connections from Jack Midi output ports - Conexiones de los puertos de salida MIDI de Jack + + Function + Función - - Connections to Jack Midi input ports - Conexiones de los puertos de entrada MIDI de Jack + + Select + Seleccionar - - Auto-connect these channels, on this port, to new midi tracks. - Conexión automática de estos canales, en este puerto, a las nuevas pistas MIDI. + + Quantize + Cuantizar - - Connect new midi tracks to these channels, on this port. - Conecte las nuevas pistas MIDI a estos canales, en este puerto. + + Delete + Borrar - - Connect new midi tracks to this channel, on this port. - Conecte las nuevas pistas MIDI a este canal, en este puerto. + + Transform + Transformar - - State: result of opening the device - Estado: resultado de abrir el puerto + + Insert + Insertar - - Port - Puerto + + Copy + Copiar - - GUI - GUI + + Extract + Extraer - - I - + + Quantize Value + Cuantizar valor + + + MixdownFileDialogBase - - O - + + MusE: Set Mixdown Wavefile + MusE: Selecciona el archivo de Masterización - - Instrument - Instrumento + + &OK + &Aceptar - - Device Name - Nombre de dispositivo + + &Cancel + &Cancelar - - In routes - Rutas de entrada + + File Path + Directorio del archivo - - Out routes - Rutas de salida + + Channel + Canal - - Def in ch - Definir canales de entrada + + Stereo + Estéreo - - Def out ch - Definir canales de salida + + Mono + Mono - - State - Estado + + 5.1 + 5.1 - - <unknown> - <desconocido> + + wav,16 Bit + wav, 16 bits - - - <none> - <ningúno> + + wav, 24 Bit + wav, 24 bits - - - MusEGui::MTScale - - bar scale - escala de compases + + wav, 32 Bit (float) + wav, 32 bits - - - MusEGui::MTScaleFlo - - bar scale - escala de compases + + Format + Formato - MusEGui::MarkerView + MoveBase - - MusE: Marker - MusE: Marcador + + MusE: Move Notes + MusE: mover notas - - add marker - Agregar marcador + + Range + Rango - - - delete marker - borrar marcador + + + All Events + Todos los eventos - - &Edit - &Editar + + Selected Events + Eventos seleccionados - - Window &Config - &Comportamiento de ventana + + Looped Events + Eventos del bucle - Undo/Redo tools - Herramientas de Deshacer/Rehacer + Selected Looped + Bucle seleccionado - - edit tools - editar herramientas + + Value + Valor - - panic - pánico + + Move by + Mover - - transport - Transporte + + ticks + Tics - - Bar:Beat:Tick - Compás:Golpe:Tic + + OK + Aceptar - - Hr:Mn:Sc:Fr:Sf - Hr:Mn:Sg:Fr:Sf + + Cancel + Cancelar + + + MusECore::Song - - Lock - Bloquear + + Jack shutdown! + Detener Jack - Text - Texto + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + Jack ha detectado un problema de rendimiento y MusE lo ha +desconectado +Esto podría suceder debido a varias razones: +- Un problema de rendimiento con su configuración particular. +- Un fallo en Muse u otro software de conexión. +--Un error al azar que tal vez nunca vuelva a ocurrir. +- Jack fue detenido por usted u otra persona +- Jack se estrelló +Si el problema persiste estaremos dispuesto a analizarlo +La lista de correos de MusE ee encuentra disponible a través +del menú de ayuda. + +Para comprobar el estado de Jack y reiniciar el servidor. +haga clic en el botón Reiniciar. - - Marker Properties - Propiedades del marcador + + + Automation: + Automatización - - - MusEGui::MasterEdit - - MusE: Mastertrack - MusE: Pista maestra + + previous event + evento anterior - - Window &Config - &Configuraciones de la ventana + + next event + evento siguiente - - Undo/Redo tools - Herramientas de Deshacer/Rehacer + + + set event + - - panic - pánico + + + add event + agregar evento - - transport - Transporte + + + erase event + borrar evento - - Enable master - Habilitar maestro + + erase range + borrar rango - Enable - Habilitado - - - - Enable usage of master track - Habilitar el uso de la pista maestra + clear automation + limpiar automatizacion - - Info - Info + + Midi control + - Cursor - Cursor + Assign + - - time at cursor position - tiempo en la posición del cursor + + Clear + - - tempo at cursor position - tempo en la posición del cursor + + Clear all controller events? + Limpiar todos los eventos de control - - Off - Apagado + + &Ok + Ac&eptar - Bar - Compás + &Cancel + &Cancelar - - Snap - Snap + + MusE: Tempo list + - - CurPos - Posición del cursor + + External tempo changes were recorded. +Transfer them to master tempo list? + - - tempo at current position - tempo en la posición actual + + MusE - external script failed + MusE - fallo de orden externa - time signature at current position - compás en la posición actual - - - - MusEGui::MidiInputTransformDialog - - - - New - Nuevo + MusE was unable to launch the script, error message: +%1 + - MusEGui::MidiStrip - - - - - off - apagado - - - - - double click on/off - Docle click Enciende/Apaga - - - - VariationSend - Variación del envío - + MusEGui::Appearance - - Var - Var + + Main application font, and default font for any + controls not defined here. + Fuente principal de la aplicación y la fuente por +defecto para los controles no estan definidas. - ReverbSend - Envio de reverberancia + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + - - Rev - Rev + + Transport controls. + - ChorusSend - Envio de corolizador + Time scale upper, and time signature. +Controller graph and S/X buttons. + - - Cho - Cho + + Time scale lower, and arranger part name overlay. + - - dB - dB + + Tempo scale, and markers. + - - Pan/Balance - Panorama/Balance + + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + - - Pan - Panorama + + Maximum mixer label auto-font-sizing font size. + Tamaño máximo de la fuente para etiqueta del mezclador. - - record - grabar + + Global opacity (opposite of transparency). + Opacidad global - - mute - silencio + + Standard + Estandar - - solo mode - modo solo + + Custom + Personalizado - - iR - ER + + Keep Qt system style + - - input routing - Ruteado de entrada + + MusE: load image + MusE: carga imagen - - oR - SR + + Select style sheet + Seleccionar hoja de estilo - - output routing - ruteado de entrada + + Qt style sheets (*.qss) + Hoja de estilo QT (*.qss) - MusEGui::MidiSyncConfig + MusEGui::Arranger - - - Port Number - Número de puerto + + Enable Recording + Habilita captura - - - Name of the midi device associated with this port number - Nombre del dispositivo MIDI asociado con este número de puerto + + Mute/Off Indicator + Indicador de Desconexion/Apagado - - Midi clock input detected - Midi clock input detectado + + Solo Indicator + Indicador de solo - - Midi tick input detected - Midi tick input detectado + Track Type + Tipo de pista - - Midi real time input detected - Midi real time input detectado + + Track Name + Nombre de pista - MMC input detected - MMC input detectado + Midi output channel number or audio channels + Numero de canal de salida MIDI o canales de audio - MTC input detected - MTC input detectado + Midi output port or synth midi port + Puerto de salida MIDI o puerto de sintetizador - Detected SMPTE format - Formato SMPTE detectado + Time Lock + Bloqueo de tiempo - Receive id number. 127 = Global. Double click to edit. - Recibido id number, 127 = global, Doble clic para editar + Automation parameter selection + Seleccion de parametros de automatizacion - Accept midi clock input - MIDI clock input aceptado + Notation clef + Clave de la notación - - Accept midi real time input - MIDI real time input aceptado + + Enable recording. Click to toggle. + Habilitar captura: Clic en el botón. - Accept MMC input - MMC input aceptado + Mute indicator. Click to toggle. +Right-click to toggle track on/off. +Mute is designed for rapid, repeated action. +On/Off is not! + Indicador de silenciado: click para silenciar +Clic con el boton derecho del ratón +para Apagar/Encender - Accept MTC input - MTC input aceptado + Solo indicator. Click to toggle. +Connected tracks are also 'phantom' soloed, + indicated by a dark square. + Indicador de Solo, clic en el botón. +Pistas "fantasmas" en solo, + seran indicadas por un cuadrado negro. - Receive start rewinds before playing - Iniciando rebobinado antes de reproducir + Track type. Right-click to change + midi and drum track types. + Tipo de pista: Clic derecho alterna entre tipo MIDI/Percusión - Transmit id number. 127 = Global. Double click to edit. - Transmitiendo id number 127 = global, Doble clic para editar + Track name. Double-click to edit. +Right-click for more options. + Nombre de pista: Doble clic para editar +Click derecho para mas opciones. - Send midi clock output - Enviar MIDI clock output + Midi/drum track: Output channel number. +Audio track: Channels. +Mid/right-click to change. + Pista MIDI/Percusión: Numero de canal de salida +Pista de audio: Canales. +Clic con el botón del medio +o el derecho para cambiar. - Send midi realtime output - Enviar MIDI realtime output + Midi/drum track: Output port. +Synth track: Assigned midi port. +Left-click to change. +Right-click to show GUI. + Pista de MIDI/Percusión: Puerto de salida. +Pista de sintetizador: Asigna el puerto MIDI +Clic de ratón para cambiar +Clic derecho para ver la interfaz - - Send MMC output - Enviar MMC output + Time lock + Bloqueo de tiempo - - - Send MTC output - Enviar MTC output + + Notation clef. Select this tracks notation clef. + Clave de la notación. Seleccione esta clave de la notación de las pistas. - - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - Entrada de MIDI clock input detectado. -El puerto utilizado es de color rojo. -Haga clic para obligar a un puerto a utilizarlo. + + Arranger + Arreglador - Midi realtime input detected, including - start/stop/continue, and song position. - MIDI realtime input detectado, incluye - Reproducir, Detener, Continuar y Posición -en la canción. + Cursor + Cursor - - MMC input detected, including stop/play/deferred play, and locate. - MMC input detectado, incluye - Reproducir, Detener, Continuar y Posición -en la canción. + + Off + Apagado - - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - De entrada MTC detectadas, así como avanzar de cuartos de la sincronía y localizar fotograma completo. -El puerto actual utilizado es de color rojo. Haga clic para obligar a un puerto a actualizar. + + Bar + Compás - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - Formato SMPTE detectado: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detecta el formato de cuarto de MTC y de fotograma completo, y localiza MMC. + Snap + Snap - - Receive id number. 127 = global receive all, even if not global. - Recibe número de identificación. 127 = Globales reciben de todo, incluso si no es global. + + Len + Len + - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. - Aceptar la entrada del reloj MIDI. Sólo una entrada se utiliza para el reloj. -Auto-adquisición: Si dos o más entradas en tiempo real del puerto están habilitadas, - el reloj detecta por primera vez se utiliza, hasta que el reloj se ha perdido, - luego otro se haga cargo. Mejor si cada uno se apaga el reloj - en la parada, por lo que Muse puede volver a adquirir el reloj de otro puerto. -Haga clic en la detección de indicadores de forzar a otro. - - - - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. - Acepta la entrada de MIDI en tiempo real, incluyendo - iniciar / detener / continuar, y posición de la canción. -los eventos (start, stop, etc) son - aceptado por todos los puertos habilitados. -Esto significa que usted puede tener varios maestros - con los dispositivos conectados, y MusE aceptará la voluntad de - éstos. + song length - bars + Duración de compás - Accept MMC input, including stop/play/deferred play, and locate. - Aceptar la entrada de MMC, incluida la parada / reproducción / reproducción diferida, y localización. + Type + Tipo - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - Aceptar la entrada del MTC, incluso delante de cuartos de la sincronía y localizar de fotograma completo. -Ver columna "rc" para obtener más ayuda. - - - - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - Aceptar la entrada de MIDI en tiempo real, incluyendo - recibir al inicio, rebobinar antes de reproducir. -Nota: Puede ser imposible para un rebobinado rápido - lo suficiente como para sincronizar con el dispositivo externo. + NO + No - - Transmit id number. 127 = global transmit to all. - Transmitir id number. 127 = global transmitir a todos. + + GM + GM - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - Enviar la salida de reloj MIDI. al 'Esclavo de sincronización externa " que elija, - MusE puede volver a transmitir el reloj a cualquier otro puerto elegido. + GS + GS + + + + XG + XG - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - Enviar salida MIDI en tiempo real, incluyendo el arranque / parada / continuación, - y de posición de canción. al 'Esclavo de sincronización externa "que se elija, - MusE puede volver a transmitir mensajes MIDI de entrada en tiempo real a cualquier - otros puertos elegidos. Esto significa que usted puede tener varios esclavos - los dispositivos conectados, y MusE puede volver a enviar mensajes en tiempo real - a cualquiera o todos ellos. + + midi song type + tipo de canción midi - - Port - Puerto + + Pitch + Tono - - Device Name - Nombre de dispositivo + + midi pitch + tono midi - c - c + global midi pitch shift + desplazamiento de tono midi - - k - k + + Tempo + Tempo + - r - r + midi tempo + tempo midi - - m - m + + N + N - - t - t + + TrackInfo + Información de pista - - type - Tipo + + R + R - rid - rid + M + M - rc - rc + S + S - rr - rr + C + C - rm - rm + Track + Pista - rt - rt + Port + Puerto - rw - rw + Ch + - tid - tid + T + T - tc - tc + Automation + Automatizacion - tr - tr + Clef + Clave + + + MusEGui::ArrangerView - - tm - tm + + MusE: Arranger + Ordenar - - tt - tt + + C&ut + C&ortar - - MusE - MusE + + &Copy + &Copiar - Settings have changed -Apply sync settings? - La configuración ha cambiado -¿Desea aplicar la nueva configuración de sincronización? + Copy in range + Copiar interior del rango - - &Apply - &Aplicar + + &Paste + &Pegar - - &No - Ca&ncelar + + Paste (show dialog) + Pegar (ver dialogo) - - &Abort - &Abortar + + Paste c&lone + Pegar c&lon - - <none> - <ninguno> + + Paste clone (show dialog) + Pergar clon (ver dialogo) - - - MusEGui::MidiTrackInfo - - - <unknown> - <desconocido> + + &Insert Empty Measure + &Insertar compás vacío - - - MusEGui::MidiTransformerDialog - - - New - Nuevo + + Delete Selected Tracks + Borrar pistas seleccionadas - - - MusEGui::MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Archivos de onda (*.wav);;Todos los archivos(*) + + Duplicate Selected Tracks + - - - MusEGui::MusE - - - Failed to start audio! - Fallo al iniciar el audio + + Shrink selected parts + Encojer regiones seleccionadas - - Was not able to start audio, check if jack is running. - - No se puede iniciar el audio, verifique el estado de Jack + + Expand selected parts + Expander regiones seleccionadas - - Timeout waiting for audio to run. Check if jack is running. - - Sa agotó el tiempo de espera. -Comprobar si Jack está en ejecución + + Clean selected parts + Limpiar regiones seleccionadas - - Und&o - Deshacer + + Add Track + Agregar pista - Re&do - &Rehacer + Select + Seleccionar - undo last change to song - deshace el ltimo cambio en la canción + Select &All + Seleccion&ar todo - redo last undo - rehace el ltimo deshacer - - - - Loop - Bucle + &Deselect All + &Deseleccionar todo - - loop between left mark and right mark - hace un bucle entre las marcas de izquierda y derecha + + Invert &Selection + Invertir &selección - - Punchin - Pinchar + + &Inside Loop + &Interior del bucle - - record starts at left mark - la captura comienza en la marca izquierda + + &Outside Loop + &Exterior del bucle - - Punchout - Fin pinchado + + All &Parts on Track + Todas las regiones de la &pista - record stops at right mark - la captura termina en la merca derecha + Score + Editor de partitura - - Start - Iniciar + + all tracks in one staff + - - rewind to start position - retrocede a la posición de inicio + + one staff per track + - - Rewind - Retroceder + + New score window + Nueva ventana de partitura - - rewind current position - retrasa la posición actual + + Pianoroll + Editor de matriz - - Forward - Avanzar + + Drums + Editor de percusión - - move current position - mueve la posición actual + + + List + Editor de lista - - Stop - Parar + + Wave + Editor de audio - - stop sequencer - para el secuenciador + + Mastertrack + Pista maestra. - - Play - Reproducir + + Graphic + Editor gráfico - start sequencer play - inicia el secuenciador + Midi &Transform + &Transformación MIDI - - Record - Grabar + + Global Cut + Corte global - - to record press record and then play - para grabar pulsa grabar y después reproducir + + Global Insert + Inserción global - - - Panic - Pánico + + Global Split + División global - - send note off to all midi channels - envia un apagado de nota (note off) a todos los canales midi + + Global Cut - selected tracks + - - &New - &Nueva sesión + + Global Insert - selected tracks + - - Create New Song - Crea una nueva canción + Global Split - selected tracks + - - &Open - &Abrir sesión + + &Edit + &Editar - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Pulsa este botón para abrir una <em>nueva canción</em>Puedes usar también el comando <b>Abrir</b> del me de archivo. + + &Structure + E&structura - - Open &Recent - Abrir &Recientes + + Functions + Funciones - - - - &Save - &Guardar + + &Quantize Notes + Cuantizado de notas - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Pulsa este botón para guardar la canción que está editando. Se te preguntará por un nombre de archivo. -Puedes seleccionar también el comando Guardar del men de Archivo. + + Change note &length + Cambiar duración de notas - - Save &As - Guardar c&omo + + Change note &velocity + Cambiar velocidad de notas - - Import Midifile - Importar archivo MIDI + + Crescendo/Decrescendo + Crescendo/Decrescendo - Export Midifile - Exportar archivo MIDI + Transpose + Transponer - Import Part - Importar región. + Erase Events (Not Parts) + Borrar eventos (no regiones) - - - Import Wave File - Importar archivo de audio + + Move Events (Not Parts) + Mover eventos (no regiones) - Find unused wave files - Buscar archivos de audio sin uso + Set Fixed Note Length + Igualar duración de notas - - &Quit - &Salir + + Delete Overlapping Notes + Borrar notas superpuestas - - Song Info - Comentarios de la sesión + + Legato + Legato - - Transport Panel - Panel de transporte + + Window &Config + Comportamiento de ventana - - Bigtime Window - Ventana de reloj + + Configure &custom columns + - - Mixer A - Mezcladora A + + + New + Nuevo - - Mixer B - Mezcladora B + + Changed Settings + - - Cliplist - Lista de archivos de audio + + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) + + + + MusEGui::AudioMixerApp - - Marker View - Editor de marcadores + + &Create + &Crear - - Arranger View - Ordenar vistas + + &View + &Ver - - Fullscreen - Pantalla completa + + Routing + Ruteado - - &Plugins - Efectos + + Show Midi Tracks + Ver pistas MIDI - Edit Instrument - Editar instrumento + Show Drum Tracks + Ver pistas de percision - Input Plugins - Efectos de entrada + Show Wave Tracks + Ver pistas de audio - - Transpose - Transponer + + Show Inputs + Ver entradas de audio - Midi Input Transform - Transformación de entrada MIDI + Show Outputs + Ver salidas de audio - Midi Input Filter - Filtrado de entrada MIDI + Show Groups + Ver grupos de audio - Midi Remote Control - Control remoto MIDI + Show Auxs + Ver envios auxiliares + + + + Show Synthesizers + Ver sintetizadores + + + MusEGui::AudioStrip - - Rhythm Generator - Generador de ritmo + + panorama + panorama - Reset Instr. - Resetear instrumento + aux send level + volumen de envio auxiliar - - Init Instr. - Inicializar instruemnto + + Pan + Paneo - - Local Off - Apagado local + + 1/2 channel + Canales 1/2 - - Bounce to Track - Rebotar a pista + + Pre + Pre - Bounce to File - Rebotar a Archivo + pre fader - post fader + pre fader - port fader - - Restart Audio - Reiniciar audio + + dB + dB - - Mixer Automation - Mezcla de automatización + + record + grabar - - Take Snapshot - Obtener instantanea + + mute + silencio - - Clear Automation Data - Limpiar datos de automatización + + record downmix + downmix de captura - - Cascade - Cascada + + + solo mode + Modo solo - - Tile - Titulo + + off + apagado - - In rows - Filas + + input routing + Ruteado de entrada - - In columns - Columnas + + output routing + ruteado de salida - - Global Settings - Configuración global + + Off + Apagado - Configure Shortcuts - Configurar atajos + Read + Lectura - Follow Song - Seguir canción + Touch + Tocar - Don't Follow Song - No seguir canción + Write + Escritura - - Follow Page - Seguir la página + + automation type + Tipo de automatizacion + + + MusEGui::BigTime - - Follow Continuous - Seguir contínuamente + + format display + Formato de vista - - Metronome - Metrónomo + + bar + compaa - Midi Sync - Sincronización MIDI + beat + Pulso - Midi File Import/Export - Importar/Exportar archivo MIDI + + tick + Tic - - Appearance Settings - Opciones de apariencia + + minute + minuto - Midi Ports / Soft Synth - Puertos MIDI / Sintetizadores + second + segundo + - &Manual - &Manual + frame + frame - - &MusE Homepage - Página del proyecto &MusE + + subframe + sub-frame - - &Report Bug... - &Reportar un fallo + + MusE: Bigtime + MusE: Big Time + + + MusEGui::ClipListEdit - - &About MusE - &Acerca de MusE + + MusE: Clip List Editor + MusE: Editor de lista de archivos de audio - - File Buttons - Columna de botones + + Window &Config + Comportamiento de ventana + + + MusEGui::ComboQuant - - Undo/Redo - Deshacer/Rehacer + + + + Off + Apagado + + + MusEGui::CtrlCanvas - - Transport - Transporte + + Drawing hint: Hold Ctrl to affect only existing events + - - &File - Sesión + + Use shift + pencil or line tool to draw new events + + + + MusEGui::CtrlPanel - - &View - &Ver + + S + S - - &Midi - &MIDI + + select controller + Seleccionar controlador - - &Audio - &Audio + + X + X - - A&utomation - A&utomatización + + remove panel + Quitar el panel - &Windows - Ventanas + manual adjust + Ajuste manual - - MusE Se&ttings - Configuraciones + + ctrl-double-click on/off + - - &Help - A&yuda + + off + apagado - - Cannot read template - No se puede leer la plantilla + + + Velocity + Velocidad - - File open error - Error al abrir el archivo + + add new ... + Agregar nuevo... + + + + + Instrument-defined + Definición de instrumento + + + + + Add ... + Agregar... - - File read error - Error al leer el archivo + + Others + Otros - - Unknown File Format: %1 - Formato de archivo desconocido: %1 + + Edit instrument ... + Editar instrumento... - - - - MusE: Song: %1 - Sesión de MusE: %1 + + Common Controls + Controles comunes + + + MusEGui::DrumEdit - - MusE: load project - MusE: Carga sesión + + + mute instrument + silenciar instrumento - - MusE: load template - MusE: cargar plantilla + + + sound name + nombre del sonido - - MusE: Write File failed - MusE: La captura del archivo ha fallado + + + volume percent + Porcentaje de volumen - - The current Project contains unsaved data -Save Current Project? - La sesión actual contiene datos sin guardar -Guardar la sesión actual? + + + quantisation + cuantización - - - S&kip - Ignorar + + + this input note triggers the sound + ensta nota de entrada dispara el sonido - - &Cancel - &Cancelar + + + note length + Duración de nota - - MusE: Save As - MusE: Guardar como + + + this is the note which is played + Esta es la nota que se toca - - - Nothing to edit - Nada para editar + + output channel (hold ctl to affect all rows) + canal de salida (mantener presionado Ctrl a afectar a todas las pistas) - - - - - - MusE: Bounce to Track - MusE: Rebotar a la pista + + output port (hold ctl to affect all rows) + Puerto de salida (Mantener presionado CTRL a afecta todas las pistas) - - No wave tracks found - No existe el archivo de audio + + + shift + control key: draw velocity level 1 + Shift + CTRL: Dibuja la velocidad 1 - - - No audio output tracks found - No hay salidas de audio + + + control key: draw velocity level 2 + CTRL: Dibuja la velocidad 2 - - Select one audio output track, -and one target wave track - Seleccione una salida de salida de audio, -y una pista de audio. + + + shift key: draw velocity level 3 + Shift: Dibuja la velocidad 3 - - Select one target wave track - Seleccione una pista de audio de destino + + + draw velocity level 4 + Dibuja la velocidad 4 - - Select one target wave track, -and one audio output track - Selecciones una pista de audio, -y una salida de audio. + + output channel (ctl: affect all rows) + Canal de salida. (CTRL afecta todas las pistas) - - - MusE: Bounce to File - Rebotar a archivo + + output port (ctl: affect all rows) + Puerto de salida (CTRL afecta todas las pistas) - - Select one audio output track - Seleccionar salida de audio + + &File + Archivo - - MusE: Bounce - MusE: Rebotar + + Load Map + Cargar Mapa - set left/right marker for bounce range - Fije marcadores derecho e izquierdo para el rango de rebote. + Save Map + Guarda Mapa - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - El proyecto actual contine datos no guardados -Cargar sobreescribe el proyecto actual: -Guardar el proyecto actual? + + Reset GM Map + Resetear mapa GM - - - &Abort - &Abortar + + &Edit + &Editar - - MusE: Export Midi - MusE: Exportar MIDI + + Cut + Cortar - - no help found at: - no se ha encontrado ayuda en: + + Copy + Copiar - - MusE: Open Help - MusE: Abre ayuda + + Copy events in range + Copiar eventos del rango - - Unable to launch help - No es posible enlazar la ayuda. + + Paste + Pegar - For some reason MusE has to launch the default -browser on your machine. - Por alguna razón, MusE tiene que lanzar -el navegador por defecto + Paste (with Dialog) + Pegar (con dialogo) - - MusE: Import Midi - MusE: Importar MIDI + + Delete Events + Borrar eventos - - Add midi file to current project? - - ¿Agregar archivo MIDI a la sesión? + + &Select + &Seleccionar - - &Add to Project - Agregar a la sesión + + Select All + Seleccionar todo - &Replace - &Reemplazar + Select None + No seleccionar nada - - reading midifile - - leyendo archivo midi - + + Invert + Invertir - -failed: - -falló: + Inside Loop + Interior del bucle - - Import part is only valid for midi and wave tracks! - Importar regiones es solo para pistas MIDI o de audio + + Outside Loop + Exterior del bucle - - MusE: load part - MusE: Cargar región. + + Previous Part + Región anterior - - No track selected for import - No hay pistas seleccionadas para la importaciòn + + Next Part + Región siguiente + + + + Fu&nctions + Funciones + + + + Re-order list + Reordenar la lista - - - %n part(s) out of %1 could not be imported. -Likely the selected track is the wrong type. - - %n Región(es) fuera de %1 no puede ser importada. -Probablemente la pista seleccionada es del tipo incorrecto. - - + + + Set Fixed Length + Fijar duración - + - %n part(s) could not be imported. -Likely the selected track is the wrong type. - - %n Región(es) no puede ser importada. -Probablemente la pista seleccionada es del tipo incorrecto. - - + Modify Velocity + Modificar la velocidad. - - to import an audio file you have first to selecta wave track - Para importar un archivo de audio seleccione la pista de audio + + Crescendo/Decrescendo + Crescendo/Decrescendo - - Import Wavefile - Importar archivo de audio + + Quantize + Cuantizar - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? - Este archivo tiene una frecuencia de muestreo de %1, -El valor actual de la sesión es %2. -¿Desea importarlo de todos modos? + Erase Event + Borrar evento - - &Yes - Aceptar + + Move Notes + Mover notas - - &No - Ca&ncelar + + Delete Overlaps + Eliminar superpuestos - - - MusEGui::NoteInfo - - Note Info - Información de nota + + &Plugins + Efectos - - Start - Iniciar + + Window &Config + - - Len - Duración + + Drum tools + Herramientas de percusión - - Pitch - Tono + + Load Drummap + Cargar mapa de percusión - - Velo On - Velocidad On + + Store Drummap + Guardar mapa de percusión - Velo Off - Velocidad Off + Step Record + Grabación por pasos - - - MusEGui::PartCanvas - - Cannot copy/move/clone to different Track-Type - No se puede copiar/mover/clonar a un tipo diferente de pista + + Midi Input + Entrada MIDI - - C&ut - C&ortar + + cursor tools + Herramientas de cursor - - &Copy - &Copiar + + Set step size for cursor edit + Establecer el tamaño del paso para modificar el cursor - - s&elect - S&eleccionar + + ctrl + control - - clones - Clonar + + Add Controller View + Agregar vista de controlador - - rename - renombrar + + M + M - - color - color + + Sound + Sonido - - delete - borrar + + Vol + Volumen - - split - partir + + QNT + QNT - - glue - Unir + + E-Note + Nota-E - - de-clone - des-clonar + + Len + Duraciòn - - - - save part to disk - Guardar región en el disco. + + A-Note + Nota-A - - wave edit - editar onda + + Ch + Canal - - file info - Información de archivo + + Port + Puerto - - MusE: save part - MusE: Guardar región. + + LV1 + VL1 - - Part name: %1 -Files: - Nombre de región: %1 -Archivos: + + LV2 + VL2 - - - %n part(s) out of %1 could not be pasted. -Likely the selected track is the wrong type. - - %n Región(es) fuera de %1 no pueden ser pegadas. -Probablemente la pista seleccionada es del tipo incorrecto. - - + + + LV3 + VL3 - + - %n part(s) could not be pasted. -Likely the selected track is the wrong type. - - %n Región(es) no puede ser pegada. -Probablemente la pista seleccionada es del tipo incorrecto. - - + LV4 + VL4 - - Cannot paste: multiple tracks selected - No puedo pegar: mtilpes pistas seleccionadas + + Muse: Load Drum Map + MusE: Cargar mapa de percusión - - Cannot paste: no track selected - No puedo pegar: No hay pista seleccionada + + MusE: Store Drum Map + MusE: Guardar mapa de percusión - - Can only paste to midi/drum track - Solo se puede insertar pistas MIDI/Percusión + + Drum map + Mapa de percusiòn - - Can only paste to wave track - Solo se pueden insertar pistas de audio + + Reset the drum map with GM defaults? + ¿Resetear en mapa de percusión con el banco GM? + + + + MusEGui::EditCAfterDialog + + + MusE: Enter Channel Aftertouch + MusE: Introduzca el AfterTouch del canal - - Can only paste to midi or wave track - Solo se pueden insertar pistas de MIDI o audio + + Time Position + Posición de tiempo - - Cannot paste: wrong data type - No válido: Tipo de datos equivocado + + Pressure + Presión - MusEGui::PasteDialog - - - %n quarter(s) - - %n Negra(s) - - - + MusEGui::EditEventDialog - - %1 quarter - for floating-point arguments like 1.5 - %1 Negra + + Ok + Aceptar - %1 quarters - for floating-point arguments like 1.5 - %1 Negras + Cancel + Cancelar - MusEGui::PasteEventsDialog - - - %n quarter(s) - - %n Negra(s) - - + MusEGui::EditInstrument + + + + MusE: Create file failed + MusE: Fallo la creacion del archivo - - %1 quarter - for floating-point arguments like 1.5 - %1 Negra + + MusE: Write File failed + MusE: La captura del archivo ha fallado - - %1 quarters - for floating-point arguments like 1.5 - %1 Negras + + + MusE: Save Instrument Definition + MusE: Guardar definicion de instrumento - - - MusEGui::PianoRoll - - &Edit - &Editar + + + Instrument Definition (*.idf) + Definicion de instrumento (*.idf) - - C&ut - C&ortar + + + MusE: Save instrument as + MusE: Guardar instrumento como - - &Copy - &Copiar + + Enter a new unique instrument name: + Ingrese un nuevo nombre unico de instrumento - - Copy events in range - Copiar eventos del rango + + The user instrument '%1' already exists. This will overwrite its .idf instrument file. +Are you sure? + - - &Paste - &Pegar + + MusE: Bad instrument name + MusE: Nombre de instrumento invalido - - Paste (with dialog) - Pegar (con dialogo) + + Please choose a unique instrument name. +(The name might be used by a hidden instrument.) + Selecciones un nombre único al instrumento +(El nombre puede estar siendo utilizado por un instrumento oculto.) - - Delete &Events - Borrar eventos + + MusE: Bad patch name + MusE: Nombre de programa invalido - - &Select - &Seleccionar + + Please choose a unique patch name + Por favor elija nombre unico de programa - - Select &All - Seleccion&ar todo + + MusE: Bad patchgroup name + MusE: Nombre de grupo erroneo. - - &Deselect All - &Deseleccionar todo + + Please choose a unique patchgroup name + Seleccione un nombre único al grupo - - Invert &Selection - Invertir &selección + + MusE: Bad controller name + MusE: Nombre del controlador no válido. - - &Inside Loop - &Interior del bucle + + Please choose a unique controller name + El nombre del controlador ya existe - - &Outside Loop - &Exterior del bucle + + + MusE: Cannot add common controller + MusE: No se puede agregar un controlador comun. - - &Previous Part - Región previa + + A controller named '%1' already exists. + El nombre de controlador '%1' ya existe. + + + + A controller number %1 already exists. + El número de controlador %1 ya existe. + - &Next Part - Siguiente región + MusE + MusE - - Fu&nctions - Fu&nciones + + + The current Instrument contains unsaved data +Save Current Instrument? + El instrumento actual contiene datos sin guardar. +¿Desea guardarlos ahora? - - Quantize - Cuantizar + + + &Save + &Guardar - - Modify Note Length - Modificar duraciòn de la nota + + + &Nosave + &No Guardar - - Modify Velocity - Modificar la velocidad. + + &Abort + &Abortar + + + MusEGui::EditMetaDialog - - Crescendo/Decrescendo - Crescendo/Decrescendo + + MusE: Enter Meta Event + MusE: Introduzca evento Meta - - Transpose - Transponer + + Time Position + Posición de tiempo - Erase Events - Borrar eventos + Meta Type + Tipo de Meta - - Move Notes - Mover notas + + Enter Hex + Ingrese Hex + + + MusEGui::EditPAfterDialog - - Set Fixed Length - Fijar ajustes de duración + + MusE: Enter Poly Aftertouch + Muse: Escribe el aftertouch polifónico - - Delete Overlaps - Borrar superpuestos + + Time Position + Posición de tiempo - - Legato - Legato + + Pitch + Tono + + + + Pressure + Presión + + + + MusEGui::EditToolBar + + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Selecciona la herramienta Puntero: +con la herramienta de puntero puede: + seleccionar regiones + mover regiones + copiar regiones. - &Plugins - Efectos + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Selecciona la Herramienta de Lápiz: +con la herramienta de Lápiz puede: + crear nuevas regiones + modificar la duración de las regiones. - - Window &Config - &Configuraciòn de ventanas + + select Delete Tool: +with the delete tool you can delete parts + selecciona la Herramienta de Borrar: +con la herramienta de Borrar puedes borrar regiones. - &Event Color - Color de eventos + select Cut Tool: +with the cut tool you can split a part + selecciona la Herramienta de Corte: +con la herramienta de Corte puede dividir una región - - &Blue - Azul + + select Glue Tool: +with the glue tool you can glue two parts + selecciona la Herramienta de Unir: +con la herramienta de Unir puedes unir dos regiones. - - &Pitch colors - Color por afinación + + select Score Tool: + + selecciona la Herramienta de Partitura: + - - &Velocity colors - Color por velocidad + + select Quantize Tool: +insert display quantize event + selecciona la Herramianta de Cuantización: +inserta un evento de cuantización de visualización - - Pianoroll tools - Herramientas del editor de matríz + + select Drawing Tool + selecciona la Herramienta de Dibujo - - Step Record - Grabación por pasos + + select Muting Tool: +click on part to mute/unmute + selecciona la Herramienta de Silenciar: +haz click en una región para silenciar/des-silenciar - - Midi Input - Entrada MIDI + + Manipulate automation + Manipular automatización - - Play Events - Reproducir eventos + + Cursor tool + Herramientas de cursor - - panic - pánico + + pointer + puntero - - transport - Transportar + + pencil + lápiz - - ctrl - control + + eraser + Borrador - - Add Controller View - Agregar visor de controladores + + cutter + cortador - - - MusEGui::PluginDialog - - MusE: select plugin - MusE: Selecciona el plugin + + score + partitura - - Lib - Lib + + glue + Pegador - Label - Etiqueta + quantize + cuantizador - Name - Nombre + draw + dibujar - AI - AI + mute parts + silenciar regiones - AO - AO + edit automation + Editar automatización - CI - CI + cursor + Cursor - - CO - CO + + Edit Tools + Editar herramientas + + + + MusEGui::EffectRack + + + effect rack + rack de efectos - - IP - IP + + new + nuevo - id - id + change + cambiar - Maker - Fabricante + move up + subir - Copyright - Copyright + move down + bajar - - Ok - Aceptar + + remove + quitar - - Cancel - Cancelar + + bypass + saltar - - Mono and Stereo - Mono y estereo + + show gui + mostrar gui - - Stereo - Estéreo + + show native gui + Ver interfaz nativa - - Mono - Mono + + save preset + Guardar preseteo - - Show All - Ver todo + + MusE: Save Preset + MusE: Guardar preseteo - - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - Los tipos de efectos seleccionados deben ser visibles en la lista. Tenga en cuenta que el uso de Efectos <br> mono en pistas estéreo no es un problema, los dos canales serán utilizados en paralelo. <br> Tenga cuidado de que no "todos" los efectos son utilizables por Muse. + + Replace effect + Reemplazar efecto - - Search in 'Label' and 'Name': - Buscar en nombre y etiqueta + + Do you really want to replace the effect %1? + ¿Desea reemplazar el efecto %1? - MusEGui::PluginGui - - - File Buttons - Botón de archivos - + MusEGui::GlobalSettingsConfig - - Load Preset - Cargar plantilla + + MusE: Choose start template or song + + + + MusEGui::Header - - Save Preset - Guardar plantilla + + Track Info Columns + Colunna de informaciòn de pistas + + + MusEGui::LMaster - - - bypass plugin - saltar plugin + + MusE: Mastertrack + MusE: pista maestra - - MusE: load preset - MusE: Cargar plantilla + + &Edit + &Editar - - Error reading preset. Might not be right type for this plugin - Preseteo dañado o no corresponde al efecto + + Insert Tempo + Insertar tiempo - - MusE: save preset - MusE: Guardar plantilla + + Insert Signature + Insertar signatura - - - MusEGui::ProjectCreateImpl - - Select directory - + + Insert Key + Insertar clave - - - MusEGui::RoutePopupMenu - - - - - - - - - Channel - Canal + + Edit Positon + Editar posición - - - - Soloing chain - Cadena de solos + + Edit Value + Editar valor - - - Audio returns - Retornos de audio + + Delete Event + Borrar evento - - Warning: No input devices! - Atención: no hay entradas + + Window &Config + &Configuraciòn de la ventana - - Open midi config... - Abrir la configuraciòn MIDI + + Edit tools + Editar herramientas - - - <none> - <ningúno> + + Tempo + Timpo - - Toggle all - Cambiar todos + + Timesig + compás - - More... - Mas... + + Key + Clave - - Audio sends - Envios de audio + + new tempo + nuevo tempo - - Midi port sends - Puertos de envio MIDI + + new signature + nuevo compás - - - MusEGui::ScoreCanvas - - Treble - Agudos + + new key + Nueva clave - - Bass - Bajos + + Meter + Metrónomo - - Grand Staff - Doble + + Time + Tiempo - - Remove staff - Remover partitura + + Type + Tipo - - Ambiguous part - Parte ambígua + + Value + Valor - - There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. - Hay dos o más partes posibles que podría añadir la nota, pero ninguno coincide con la parte seleccionada. Por favor, seleccione la parte de destino haciendo clic en cualquier nota que le pertenecen y vuelva a intentarlo, evite agregar una nota nueva que existe la parte destino. + + Reposition of the initial tempo and signature events is not allowed + Reposición del tempo inicial y la firma de eventos, no está permitido - - No part - No hay partitura + + MusE: List Editor + MusE: Editor de lista - - There are no parts you could add the note to. - No hay piezas en las que se pueda añadir la nota. + + Input error, conversion not OK or value out of range + Error de entrada,la conversión no escorrecta o valor está fuera de rango. + + + + Reposition of tempo and signature events to start position is not allowed! + Reposición de los eventos de tempo y la firma a la posición inicial no está permitida! - MusEGui::ScoreEdit + MusEGui::ListEdit - - Undo/Redo tools - Herramientas Deshacer/Rehacer + + insert Note + insertar Nota - - Step recording tools - Herramienta de grabación por pasos + + insert SysEx + insertar sistema exclusivo - - Step Record - Grabación por pasos + + insert Ctrl + insertar controlador + + + + insert Meta + insertar Meta + + + + insert Channel Aftertouch + insertar AfterTouch de canal + + + + insert Poly Aftertouch + insertar AfterTouch Polifónico - panic - Pánico + &Edit + &Editar + + + + Cut + Cortar - transport - Transporte + Copy + Copiar + + + + Paste + Pegar - Note settings - Propiedades de la nota + Delete Events + Borrar eventos - - Note length: - Duración de nota: + + Window &Config + &Configuraciòn de la ventana - - last - Pasado + + Insert tools + Insertar herramientas - - - - Apply to new notes: - Se aplica a nuevas notas + + Tick + Tic - - - Apply to selected notes: - Aplicar a las notas seleccionadas + + Bar + Compàz - - Velocity: - Velocidad: + + Type + Tipo - - Off-Velocity: - Off-Velocity: + + Ch + - - Quantisation settings - Ajustes del cuantizado + + Val A + Val A - - Quantisation: - Cuantizado: + + Val B + Val B - - Pixels per whole: - Pixeles por entero: + + Val C + Val C - - &Edit - &Editar + + Len + - - C&ut - C&ortar + + Comment + Comentario + + + MusEGui::MPConfig - - &Copy - &Copiar + + + Default input connections + Conexión de entrada predeterminada - - Copy events in range - Copiar eventos del rango + + + Are you sure you want to apply to all existing midi tracks now? + ¿Seguro que desea aplicar a todas las pistas MIDI existentes? - - &Paste - &Pegar + + + Default output connections + Conexión de salida predeterminada - - Paste (with dialog) - Pegar (con diálogo) + + + Setting will apply to new midi tracks. +Do you want to apply to all existing midi tracks now? + El sjuste se aplicará a las nuevas pistas MIDI. +¿Usted desea aplicar a todas las pistas MIDI existentes? - - Delete &Events - Borrar &eventos + + MusE: bad device name + MusE: Nombre del dispositivo incorrecto - - &Select - &Seleccionar + + please choose a unique device name + El nombre del dispositivo ya existe - - Select &All - Seleccion&ar todo + + + in + Entrada - - &Deselect All - &Deseleccionar todo + + + out + Salida - - Invert &Selection - Invertir &selección + + Show first aliases + Mostrar primero los álias - &Inside Loop - &Interior de bucle + Show second aliases + Mostrsr después los álias - - &Outside Loop - &Exterior del bucle + + + Toggle all + Cambiar todos - - Fu&nctions - Fu&nciones + + + Change all tracks now + Cambiar todas las pistas ahora - - &Quantize - Cuantizar + + Create Jack device + Crear conexión Jack - - Change note &length - Cambiar duración de notas + + + Port Number + Número de puerto - - Change note &velocity - Cambiar velocidad de las notas + + Enable gui + Habilitar visualización - Crescendo/Decrescendo - Crescendo/Decrescendo + Enable reading + Habilitar lectura - Transpose - Transponer + Enable writing + Habilitar escritura - Erase Events - Borrar eventos + Port instrument + Puerto de instrumento - Move Notes - Mover notas + Midi device name. Click to edit (Jack) + Nombre del dispositivo MIDI, Clic para editar (Jack) - Set Fixed Length - Cambiar duración de notas + Connections from Jack Midi outputs + Conexiones de salidas MIDI de Jack - Delete Overlaps - Borrar notas duplicadas + Connections to Jack Midi inputs + Conexiones de entrada MIDI de Jack - Legato - Legato + Auto-connect these channels to new midi tracks + Conectar automaticamente a estos canales las nuevas pistas midi - - Window &Config - Comportamiento de ventana + + Auto-connect new midi tracks to these channels + Conectar nuevas pistas MIDI a estos canales - Note head &colors - Color de las notas + Auto-connect new midi tracks to this channel + Autoconectar las nuevas pistas MIDI a este canal - &Black - Negro - - - - &Velocity - Velocidad + Device state + Estado del dispositivo - - &Part - Región + + Enable gui for device + Habilitar visualización para el dispositivo - - Set up &preamble - Establecer encabezado + + Enable reading from device + Habilitar la lectura desde el dispositivo - - Display &key signature - Ver armadura de clave + + Enable writing to device + Habilitar la escritura en el dispositivo - - Display &time signature - Ver signatura de tiempo + + Name of the midi device associated with this port number. Click to edit Jack midi name. + Nombre del dispositivo MIDI asociado con este puerto. Haga clic para cambiar el nombre del dispositivo MIDI de Jack. - - Set Score &name - Ajuste de nombre del pentagrama + + Instrument connected to port + Instrumento conectado al puerto - - - Enter the new score title - Ingrese el título de la nueva partitura + + Connections from Jack Midi output ports + Conexiones de los puertos de salida MIDI de Jack - - Error - Error + + Connections to Jack Midi input ports + Conexiones de los puertos de entrada MIDI de Jack - - Changing score title failed: -the selected title is not unique - Error al cambiar el título a la partitura: -El título seleccionado ya existe. + + Auto-connect these channels, on this port, to new midi tracks. + Conexión automática de estos canales, en este puerto, a las nuevas pistas MIDI. - - - MusEGui::ScrollScale - - next page - página siguiente + + Connect new midi tracks to these channels, on this port. + Conecte las nuevas pistas MIDI a estos canales, en este puerto. - - previous page - página anterior + + Connect new midi tracks to this channel, on this port. + Conecte las nuevas pistas MIDI a este canal, en este puerto. - - current page number - nuúmero de página actual + + State: result of opening the device + Estado: resultado de abrir el puerto - - - MusEGui::ShortcutCaptureDialog - - Ok - Aceptar + + Port + Puerto - Cancel - Cancelar - - - - Shortcut conflicts with %1 - Conflicto en el atajo con - - - - Undefined - Sin definir - - - - MusEGui::SigScale - - - signature scale - Armadura de la escala - - - - MusEGui::Strip - - - Remove track? - - - - - MusEGui::TList - - - <none> - <ningúno> + GUI + GUI - - visible - + + I + - - no clef - No hay clave + + O + - - Treble - Agudo + + Instrument + Instrumento - - Bass - Bajo + + Device Name + Nombre de dispositivo - - Grand - Doble + + In routes + Rutas de entrada - - MusE: bad trackname - MusE: Nombre de pista erroneo + + Out routes + Rutas de salida - please choose a unique track name - Error: El nombre de pista ya existe + Def in ch + Definir canales de entrada - - Unused Devices - + + Def out ch + Definir canales de salida - - - Update drummap? - ¿Actualizár mapa de percusión? + + State + Estado - - Do you want to use same port for all instruments in the drummap? - ¿Desea utilizar el mismo puerto para todos los instrumentos en el mapa de percusión? + + <unknown> + <desconocido> - - - &Yes - Aceptar + + + <none> + <ningúno> + + + MusEGui::MTScale - - - &No - Cancelar + + bar scale + escala de compases + + + MusEGui::MTScaleFlo - - - show gui - Ver interfáz + + bar scale + escala de compases + + + MusEGui::MarkerView - - - show native gui - Ver interfáz nativa + + MusE: Marker + MusE: Marcador - - Treble clef - Partitura de agudos + + add marker + Agregar marcador - - Bass clef - Partitura de Bajos + + delete marker + borrar marcador - - Grand Staff - Partitura doble + + &Edit + &Editar - - Viewable automation - Automatización visible + + Window &Config + &Comportamiento de ventana - - Delete Track - Borrar pista + + edit tools + editar herramientas - - Track Comment - Comentario de la pista + + Bar:Beat:Tick + Compás:Golpe:Tic - - Insert Track - Insertar pista + + Hr:Mn:Sc:Fr:Sf + Hr:Mn:Sg:Fr:Sf - - Midi - MIDI + + Lock + Bloquear - Drum - Percusión + Text + Texto - - Do you want to use same port and channel for all instruments in the drummap? - ¿Desea utilizar el mismo puerto y canal para todos los instrumentos del mapa de percusión? + + Marker Properties + Propiedades del marcador - MusEGui::TempoSig + MusEGui::MasterEdit - - Tempo/Sig - tempo/firma + + MusE: Mastertrack + MusE: Pista maestra - - - MusEGui::Toolbar1 - - - - Off - Apagado + + Window &Config + &Configuraciones de la ventana - - Solo - Solo + + Enable master + Habilitar maestro - - Cursor - Cursor + + Enable + Habilitado - - Snap - Chasquido + + Enable usage of master track + Habilitar el uso de la pista maestra - - - MusEGui::TopWin - - As subwindow - Como sub ventana + + Info + Info - - Shares tools and menu - Herramientas y menús + + Cursor + Cursor - - Fullscreen - Pantalla completa + + time at cursor position + tiempo en la posición del cursor - - Piano roll - Editor de matríz + + tempo at cursor position + tempo en la posición del cursor - - List editor - Editor de lista + + Off + Apagado - - Drum editor - Editro de percusión + + Bar + Compás - - Master track editor - Editor de pista maestra + + Snap + Snap - - Master track list editor - Editor de lista de pista maestra + + CurPos + Posición del cursor - - Wave editor - Editro de audio + + tempo at current position + tempo en la posición actual - Clip list - Lista de audios + time signature at current position + compás en la posición actual + + + MusEGui::MidiInputTransformDialog - - Marker view - Ver marcadores + + + New + Nuevo + + + MusEGui::MidiStrip - - Score editor - Editor de partituras + + + + off + apagado - - Arranger - Arreglador + + + ctrl-double-click on/off + - - <unknown toplevel type> - <Tipo de nivel superior desconocido> + + VariationSend + Variación del envío - - - MusEGui::TrackComment - - MusE: Track Comment - MusE: Comentario de la pista + + Var + Var - - Track Comment: - Comentario de la pista: + + ReverbSend + Envio de reverberancia - - - MusEGui::Transport - - Overdub - Agregar + + Rev + Rev - - Replace - Reemplazar + ChorusSend + Envio de corolizador - - Rec Mode - Modo de captura + + Cho + Cho - - Normal - Normal + + dB + dB - - Mix - Mezcla + + Pan/Balance + Panorama/Balance - - Cycle Rec - Ciclar captura + + Pan + Panorama - - punchin - pinchar + + record + grabar - - loop - bucle + + mute + silencio - - punchout - fin pinchado + + solo mode + modo solo - - - Punch In - Pinchar + + input routing + Ruteado de entrada - - - Loop - Bucle + + output routing + ruteado de entrada + + + MusEGui::MidiSyncConfig - - - Punch Out - Fin pinchado + + + Port Number + Número de puerto - - Left Mark - Marca izquierda + + + Name of the midi device associated with this port number + Nombre del dispositivo MIDI asociado con este número de puerto - - Right Mark - Marca derecha + + Midi clock input detected + Midi clock input detectado - - rewind to start - retroceder al inicio + + + Midi tick input detected + Midi tick input detectado + + + + Midi real time input detected + Midi real time input detectado - Click this button to rewind to start position - Pulsa este botón para regresar al principio + MMC input detected + MMC input detectado - - rewind - retroceder + + MTC input detected + MTC input detectado - - Click this button to rewind - Pulsa este botón para ir hacia atrás + + Detected SMPTE format + Formato SMPTE detectado - - forward - avanzar + + Receive id number. 127 = Global. Double click to edit. + Recibido id number, 127 = global, Doble clic para editar - - Click this button to forward current play position - Pulsa este botón para adelantar la posición de reproducción + + Accept midi clock input + MIDI clock input aceptado - - stop - parar + + Accept midi real time input + MIDI real time input aceptado - - Click this button to stop playback - Pulsa este botón para detener la reproducción + + Accept MMC input + MMC input aceptado - - play - reproducir + + Accept MTC input + MTC input aceptado - Click this button to start playback - Pulsa este botón para iniciar la reproducción + Receive start rewinds before playing + Iniciando rebobinado antes de reproducir - - record - grabar + + Transmit id number. 127 = Global. Double click to edit. + Transmitiendo id number 127 = global, Doble clic para editar - Click this button to enable recording - Pulsa este botón para habilitar la captura + Send midi clock output + Enviar MIDI clock output - - AC - AC + + Send midi realtime output + Enviar MIDI realtime output - - quantize during record - cuantizar durante la captura + + + Send MMC output + Enviar MMC output - - Click - Click + + + Send MTC output + Enviar MTC output - - metronom click on/off - Click del metrónomo encendido/apagado + + Midi clock input detected. +Current port actually used is red. +Click to force a port to be used. + Entrada de MIDI clock input detectado. +El puerto utilizado es de color rojo. +Haga clic para obligar a un puerto a utilizarlo. - Sync - Sinconización + Midi realtime input detected, including + start/stop/continue, and song position. + MIDI realtime input detectado, incluye + Reproducir, Detener, Continuar y Posición +en la canción. - - external sync on/off - Sincronización externa encedida/apagada + + MMC input detected, including stop/play/deferred play, and locate. + MMC input detectado, incluye + Reproducir, Detener, Continuar y Posición +en la canción. - Jack - Jack + MTC input detected, including forward quarter-frame sync and full-frame locate. +Current port actually used is red. Click to force a port to be current. + De entrada MTC detectadas, así como avanzar de cuartos de la sincronía y localizar fotograma completo. +El puerto actual utilizado es de color rojo. Haga clic para obligar a un puerto a actualizar. - - Jack transport sync on/off - Sincronizar a Jack Encendido/Apagado + + Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detects format of MTC quarter and full frame, and MMC locate. + Formato SMPTE detectado: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detecta el formato de cuarto de MTC y de fotograma completo, y localiza MMC. - - Master - Maestro + + Receive id number. 127 = global receive all, even if not global. + Recibe número de identificación. 127 = Globales reciben de todo, incluso si no es global. - - use master track - usar pista maestra + + Accept midi clock input. Only one input is used for clock. +Auto-acquire: If two or more port realtime inputs are enabled, + the first clock detected is used, until clock is lost, + then another can take over. Best if each turns off its clock + at stop, so MusE can re-acquire the clock from another port. +Click on detect indicator to force another. + Aceptar la entrada del reloj MIDI. Sólo una entrada se utiliza para el reloj. +Auto-adquisición: Si dos o más entradas en tiempo real del puerto están habilitadas, + el reloj detecta por primera vez se utiliza, hasta que el reloj se ha perdido, + luego otro se haga cargo. Mejor si cada uno se apaga el reloj + en la parada, por lo que Muse puede volver a adquirir el reloj de otro puerto. +Haga clic en la detección de indicadores de forzar a otro. - - - MusEGui::VisibleTracks - - - Show wave tracks - Ver pistas de audio + + Accept midi realtime input, including + start/stop/continue, and song position. +Non-clock events (start,stop etc) are + accepted by ALL enabled ports. +This means you may have several master + devices connected, and muse will accept + input from them. + Acepta la entrada de MIDI en tiempo real, incluyendo + iniciar / detener / continuar, y posición de la canción. +los eventos (start, stop, etc) son + aceptado por todos los puertos habilitados. +Esto significa que usted puede tener varios maestros + con los dispositivos conectados, y MusE aceptará la voluntad de + éstos. - - - Show group tracks - Ver grupos + + Accept MMC input, including stop/play/deferred play, and locate. + Aceptar la entrada de MMC, incluida la parada / reproducción / reproducción diferida, y localización. - - - Show aux tracks - Ver envios auxiliares + + Accept MTC input, including forward quarter-frame sync and full-frame locate. +See 'rc' column for more help. + Aceptar la entrada del MTC, incluso delante de cuartos de la sincronía y localizar de fotograma completo. +Ver columna "rc" para obtener más ayuda. - - - Show input tracks - Ver entradas de audio + + When start is received, rewind before playing. +Note: It may be impossible to rewind fast + enough to synchronize with the external device. + Aceptar la entrada de MIDI en tiempo real, incluyendo + recibir al inicio, rebobinar antes de reproducir. +Nota: Puede ser imposible para un rebobinado rápido + lo suficiente como para sincronizar con el dispositivo externo. - - - Show output tracks - Ver salidas de audio + + Transmit id number. 127 = global transmit to all. + Transmitir id number. 127 = global transmitir a todos. - - - Show midi tracks - Ver pistas MIDI + + Send midi clock output. If 'Slave to External Sync' is chosen, + muse can re-transmit clock to any other chosen ports. + Enviar la salida de reloj MIDI. al 'Esclavo de sincronización externa " que elija, + MusE puede volver a transmitir el reloj a cualquier otro puerto elegido. - - - Show synth tracks - Ver Sintetizadores + + Send midi realtime output, including start/stop/continue, + and song position. If 'Slave to external sync' is chosen, + muse can re-transmit midi realtime input messages to any + other chosen ports. This means you may have several slave + devices connected, and muse can re-send realtime messages + to any or all of them. + Enviar salida MIDI en tiempo real, incluyendo el arranque / parada / continuación, + y de posición de canción. al 'Esclavo de sincronización externa "que se elija, + MusE puede volver a transmitir mensajes MIDI de entrada en tiempo real a cualquier + otros puertos elegidos. Esto significa que usted puede tener varios esclavos + los dispositivos conectados, y MusE puede volver a enviar mensajes en tiempo real + a cualquiera o todos ellos. - - Visible track types - Ver tipo de pistas + + Port + Puerto - - - MusEGui::WaveEdit - - &Edit - &Editar + + Device Name + Nombre de dispositivo - - Func&tions - Funciones + + c + c - - &Gain - &Ganancia + + k + k - 200% - 5 1/3' {200%?} + + r + r - 150% - 5 1/3' {150%?} + + m + m - 75% - 5 1/3' {75%?} + + t + t - 50% - 5 1/3' {50%?} + + type + Tipo - 25% - 5 1/3' {25%?} + + rid + rid - - Other - Otros + + rc + rc - - &Copy - &Copiar + + rr + rr - - C&ut - Cortar + + rm + rm - - &Paste - &Pegar + + rt + rt - - Edit in E&xternal Editor - Abrir con editor externo + + rw + rw - - Mute Selection - Silenciar selección + + tid + tid - - Normalize Selection - Normalizar selección + + tc + tc - - Fade In Selection - Aparecer progresivamente + + tr + tr - - Fade Out Selection - Desvanecer progresivamente + + tm + tm - - Reverse Selection - Invertir selección + + tt + tt - - Select - Seleccionar + + MusE + MusE - - Select &All - Seleccion&ar todo + + Settings have changed +Apply sync settings? + La configuración ha cambiado +¿Desea aplicar la nueva configuración de sincronización? - - &Deselect All - &Deseleccionar todo + + &Apply + &Aplicar - - Window &Config - &Comportamiento de ventana + + &No + Ca&ncelar - - Wave edit tools - Herramientas de edición de audio + + &Abort + &Abortar - - transport - Transporte + + <none> + <ninguno> + + + MusEGui::MidiTrackInfo - - WaveEdit tools - Herramientas de edición de audio + + + <unknown> + <desconocido> + + + MusEGui::MidiTransformerDialog - - Solo - Solo + + + New + Nuevo + + + MusEGui::MixdownFileDialog - - Cursor - Cursor + + Wave Files (*.wav);;All Files (*) + Archivos de onda (*.wav);;Todos los archivos(*) - MusEGui::WaveView + MusEGui::MusE - - MusE - external editor failed - MusE: Falla del editor de audio externo + + + Failed to start audio! + Fallo al iniciar el audio + + + + Was not able to start audio, check if jack is running. + + No se puede iniciar el audio, verifique el estado de Jack - - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. - Muse no pudo lanzar el editor externo -Compruebe esta configuraciòn en: -Configuración global-> Audio: Editor de audio externo -que el comando del editor sea válido. + + Timeout waiting for audio to run. Check if jack is running. + + Sa agotó el tiempo de espera. +Comprobar si Jack está en ejecución - - MusE - file size changed - MusE: Cambió el tamaño del archivo + + Und&o + Deshacer - - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted - Al editar en el editor externo no se debe cambiar el tamaño del archivo -ya que debe ajustarse a la región seleccionada. - -Los datos faltantes se silenciarán. + + Re&do + &Rehacer - - - MusEMixer::AudioMixerApp - &Create - &Crear + + undo last change to song + deshace el ltimo cambio en la canción - - - MusEMixer::AudioStrip - 1/2 channel - Canales 1/2 + + redo last undo + rehace el ltimo deshacer - Pre - Pre + + Loop + Bucle - pre fader - post fader - pre fader - port fader + + loop between left mark and right mark + hace un bucle entre las marcas de izquierda y derecha - dB - dB + + Punchin + Pinchar - record - grabar + + record starts at left mark + la captura comienza en la marca izquierda - mute - silencio + + Punchout + Fin pinchado - record downmix - downmix de captura + + record stops at right mark + la captura termina en la merca derecha - off - apagado + + Start + Iniciar - output routing - ruteado de entrada + + rewind to start position + retrocede a la posición de inicio - - - MusEMixer::EffectRack - effect rack - rack de efectos + + Rewind + Retroceder - new - nuevo + + rewind current position + retrasa la posición actual - change - cambiar + + Forward + Avanzar - move up - subir + + move current position + mueve la posición actual - move down - bajar + + Stop + Parar - remove - quitar + + stop sequencer + para el secuenciador - bypass - saltar + + Play + Reproducir - show gui - mostrar gui + + start sequencer play + inicia el secuenciador - - - MusEMixer::MidiStrip - off - apagado + + Record + Grabar - Var - Var + + to record press record and then play + para grabar pulsa grabar y después reproducir - Rev - Rev + + + Panic + Pánico - Cho - Cho + + send note off to all midi channels + envia un apagado de nota (note off) a todos los canales midi - dB - dB + + &New + &Nueva sesión - record - grabar + + + Create New Song + Crea una nueva canción - mute - silencio + + &Open + &Abrir sesión - output routing - ruteado de entrada + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Pulsa este botón para abrir una <em>nueva canción</em>Puedes usar también el comando <b>Abrir</b> del me de archivo. - - - MusEWidget::BigTime - minute - minuto + + Open &Recent + Abrir &Recientes - second - segundo + + + + &Save + &Guardar - frame - frame + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Pulsa este botón para guardar la canción que está editando. Se te preguntará por un nombre de archivo. +Puedes seleccionar también el comando Guardar del men de Archivo. - subframe - sub-frame + + Save &As + Guardar c&omo - MusE: Bigtime - MusE: Big Time + + Import Midifile + Importar archivo MIDI - - - MusEWidget::EditToolBar - Edit Tools - Editar herramientas + + Export Midifile + Exportar archivo MIDI - - - MusEWidget::MTScale - bar scale - escala de compases + + Import Part + Importar región. - - - MusEWidget::MTScaleFlo - bar scale - escala de compases + + + Import Wave File + Importar archivo de audio - - - MusEWidget::MidiSyncConfig - Port Number - Número de puerto + + Find unused wave files + Buscar archivos de audio sin uso - Name of the midi device associated with this port number - Nombre del dispositivo MIDI asociado con este número de puerto + + &Quit + &Salir - Port - Puerto + + Song Info + Comentarios de la sesión - Device Name - Nombre de dispositivo + + Transport Panel + Panel de transporte - m - m + + Bigtime Window + Ventana de reloj - MusE - MusE + + Mixer A + Mezcladora A - &Apply - &Aplicar + + Mixer B + Mezcladora B - &Abort - &Abortar + + Cliplist + Lista de archivos de audio - - - MusEWidget::MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Archivos de onda (*.wav);;Todos los archivos(*) + + Marker View + Editor de marcadores - - - MusEWidget::NoteInfo - Note Info - Información de nota + + Arranger View + Ordenar vistas - Pitch - Tono + + Fullscreen + Pantalla completa - Velo On - Velocidad On + + &Plugins + Efectos - Velo Off - Velocidad Off + + Edit Instrument + Editar instrumento - - - MusEWidget::RoutePopupMenu - Channel - Canal + + Input Plugins + Efectos de entrada - - - MusEWidget::ScrollScale - next page - página siguiente + + Transpose + Transponer - previous page - página anterior + + Midi Input Transform + Transformación de entrada MIDI - current page number - nuúmero de página actual + + Midi Input Filter + Filtrado de entrada MIDI - - - MusEWidget::ShortcutCaptureDialog - Ok - Aceptar + + Midi Remote Control + Control remoto MIDI - Cancel - Cancelar + + Rhythm Generator + Generador de ritmo - - - MusEWidget::SigScale - signature scale - Armadura de la escala + + Reset Instr. + Resetear instrumento - - - MusEWidget::Toolbar1 - Solo - Solo + + Init Instr. + Inicializar instruemnto - Cursor - Cursor + + Local Off + Apagado local - Snap - Snap + + Bounce to Track + Rebotar a pista - - - MusEWidget::TrackComment - MusE: Track Comment - MusE: Comentario de la pista + + Bounce to File + Rebotar a Archivo - Track Comment: - Comentario de la pista: + + Restart Audio + Reiniciar audio - - - MusEWidget::WTScale - bar scale - escala de compases + + Mixer Automation + Mezcla de automatización - - - NoteInfo - Start - Inicio + + Take Snapshot + Obtener instantanea - Len - Longitud + + Clear Automation Data + Limpiar datos de automatización - Pitch - Tono + + Cascade + Cascada - Velo On - Velocidad On + + Tile + Titulo - Velo Off - Velocidad Off + + In rows + Filas - Note Info - Información de nota + + In columns + Columnas - - - OrganGuiBase - - MusE: Organ - MusE: órgano + + Global Settings + Configuración global - Presets - Preselecciones + + Configure Shortcuts + Configurar atajos - Set - Pon + + Follow Song + Seguir canción - load preset list - cargar lista de preselecciones + + Don't Follow Song + No seguir canción - save preset list - guardar lista de preselecciones + + Follow Page + Seguir la página - - O-1 - 0-1 + + Follow Continuous + Seguir contínuamente - - Oscillator - Oscillator + + Metronome + Metrónomo - - Brass - Brass + + Midi Sync + Sincronización MIDI - - Reed - Reed + + Midi File Import/Export + Importar/Exportar archivo MIDI - - Flute - Flute + + Appearance Settings + Opciones de apariencia - - Drawbars - Drawbars + + Midi Ports / Soft Synth + Puertos MIDI / Sintetizadores - - 16' - 16' + + &Manual + &Manual - - 4' - 4' + + &MusE Homepage + Página del proyecto &MusE - - 2 2/3' - 2 2/3' + + &Report Bug... + &Reportar un fallo - - 2' - 2' + + &About MusE + &Acerca de MusE - - 8' - 8' + + Song Position + - - 5 1/3' - 5 1/3' + + Tempo + - - Envelope Lo - Envelope Lo + + Signature + Compás - Attack(ms) - Ataque (ms) + + File Buttons + Columna de botones - Decay(ms) - Decaimiento (ms) + + Undo/Redo + Deshacer/Rehacer - Sustain(%) - Sostenido (%) + + Transport + Transporte - Release(ms) - Relajación (ms) + + &File + Sesión - - Envelope Hi - Envelope Hi + + &View + &Ver - - - Release - Release + + &Midi + &MIDI - - - Sustain - Sustain + + &Audio + &Audio - - - Decay - Decay + + A&utomation + A&utomatización - - - Attack - Attack + + &Windows + Ventanas - - - - - - - ms - ms + + MusE Se&ttings + Configuraciones - - - cB - cB + + &Help + A&yuda - - Velocity - Velocity + + About &Qt + - - - PageSettings - Paper Size - Tamaño del papel + + Cannot read template + No se puede leer la plantilla - user - usuario + + File open error + Error al abrir el archivo - Margins - másgenes + + File read error + Error al leer el archivo - Header - Cabecera + + Unknown File Format: %1 + Formato de archivo desconocido: %1 - Title - Tódulo + + + + MusE: Song: %1 + Sesión de MusE: %1 - Author - Autor + + MusE: load project + MusE: Carga sesión - Fonts - Tipos + + MusE: load template + MusE: cargar plantilla - Page No. - Página n + + MusE: Write File failed + MusE: La captura del archivo ha fallado - Measure No - Compás n + + The current Project contains unsaved data +Save Current Project? + La sesión actual contiene datos sin guardar +Guardar la sesión actual? - Track Name - Nombre de Pista + + + S&kip + Ignorar - Lyrics - Letra + + &Cancel + &Cancelar - Layout - Disposición + + MusE: Save As + MusE: Guardar como - Scale - Escala + + + Nothing to edit + Nada para editar - Flags - Señalizadores + + + + + + MusE: Bounce to Track + MusE: Rebotar a la pista - show page no. - muestra el número de página + + No wave tracks found + No existe el archivo de audio - show measure no. - muestra el número de compás + + + No audio output tracks found + No hay salidas de audio - show track name - muestra el nombre de la pista + + Select one audio output track, +and one target wave track + Seleccione una salida de salida de audio, +y una pista de audio. - Ok - Aceptar + + Select one target wave track + Seleccione una pista de audio de destino - Apply - Aplicar + + Select one target wave track, +and one audio output track + Selecciones una pista de audio, +y una salida de audio. - Cancel - Cancelar + + + MusE: Bounce to File + Rebotar a archivo - left Margin - Margen izquierdo + + Select one audio output track + Seleccionar salida de audio - top Margin - Margen Superior + + MusE: Bounce + MusE: Rebotar - right Margin - Margen derecho + + set left/right marker for bounce range + Fije marcadores derecho e izquierdo para el rango de rebote. - bottom Margin - Margen inferior + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + El proyecto actual contine datos no guardados +Cargar sobreescribe el proyecto actual: +Guardar el proyecto actual? - Bars across the Page - Barras a travéz de la página + + + &Abort + &Abortar - - - PartCanvas - C&ut - C&ortar + + This will clear all automation data on + all audio tracks! +Proceed? + - &Copy - &Copiar + + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? + - rename - renombrar + + MusE: Export Midi + MusE: Exportar MIDI - delete - borrar + + no help found at: + no se ha encontrado ayuda en: - split - partir + + MusE: Open Help + MusE: Abre ayuda - glue - pegar + + Unable to launch help + No es posible enlazar la ayuda. - pianoroll - pianola + + For some reason MusE has to launch the default +browser on your machine. + Por alguna razón, MusE tiene que lanzar +el navegador por defecto - score - partitura + + MusE: Import Midi + MusE: Importar MIDI - list - lista + + Add midi file to current project? + + ¿Agregar archivo MIDI a la sesión? - drums - percusión + + &Add to Project + Agregar a la sesión - Cannot copy/move/clone to different Track-Type - No puedo copiar/mover/clonar a un tipo diferente de pista + + &Replace + &Reemplazar - color - color + + reading midifile + + leyendo archivo midi + - de-clone - des-clonar + + +failed: + +falló: - wave edit - editar onda + + Import part is only valid for midi and wave tracks! + Importar regiones es solo para pistas MIDI o de audio - Cannot paste: multiple tracks selected - No puedo pegar: mtilpes pistas seleccionadas + + MusE: load part + MusE: Cargar región. - Cannot paste: no track selected - No puedo pegar: No hay pista seleccionada + + No track selected for import + No hay pistas seleccionadas para la importaciòn + + + + %n part(s) out of %1 could not be imported. +Likely the selected track is the wrong type. + + %n Región(es) fuera de %1 no puede ser importada. +Probablemente la pista seleccionada es del tipo incorrecto. + + + + + + %n part(s) could not be imported. +Likely the selected track is the wrong type. + + %n Región(es) no puede ser importada. +Probablemente la pista seleccionada es del tipo incorrecto. + + - Cannot paste midi parts to wave track - No puedo pegar MIDI en una pista de audio + + to import an audio file you have first to selecta wave track + Para importar un archivo de audio seleccione la pista de audio - Cannot paste wave parts to midi track - No puedo pegar audio en una pista MIDI + + Import Wavefile + Importar archivo de audio - Cannot paste: wrong data type - No puedo pegar: Tipo de datos equivocado + + This wave file has a samplerate of %1, +as opposed to current setting %2. +Do you still want to import it? + Este archivo tiene una frecuencia de muestreo de %1, +El valor actual de la sesión es %2. +¿Desea importarlo de todos modos? - - - PasteDialogBase - - MusE: Paste Parts - MusE: Pegar regiones. + + &Yes + Aceptar - - Number and raster - Cantidad y alineado + + &No + Ca&ncelar + + + MusEGui::NoteInfo - - insert - Insertar + + Note Info + Información de nota - - times - -Tiempos + + delta/absolute mode + - - raster - Trama + + Start + Iniciar - - ticks - Tics + + Len + Duración - - Move, Merge, Clone - Mover, Mezclar, Clonar + + Pitch + Tono - - Move everything to the right - Mover todo a la derecha. + + Velo On + Velocidad On - - Move only affected parts to the right - Mover sólo las regiones afectadas a la derecha. + + Velo Off + Velocidad Off + + + MusEGui::PartCanvas - - Put everything into a single track - Poner todo en una sola pista. + + Cannot copy/move/clone to different Track-Type + No se puede copiar/mover/clonar a un tipo diferente de pista - - Merge with existing parts - Mezclar con las regiones existentes. + + C&ut + C&ortar - - Insert as clones (where possible) - Insertar como clones (si es posible) + + &Copy + &Copiar - - OK - Aceptar + + s&elect + S&eleccionar - - Cancel - Cancelar + + clones + Clonar - - - PasteEventsDialogBase - - MusE: Paste Events - MusE: Pegar eventos + + rename + renombrar - - Number and raster - Cantidad y alineado + + color + color - insert - Insertar + delete + borrar - - times - -Tiempos + + split + partir - - raster - Alineado + + glue + Unir - - - ticks - -Tics + + super glue (merge selection) + - - Paste options - Opciones del pegado + + de-clone + des-clonar - - Always into existing parts - Siempre en las regiones existentes. + + + + save part to disk + Guardar región en el disco. - - Never into existing parts - Nunca en las regiones existentes. + + wave edit + editar onda - - Into existing parts if part has not -to be expanded by more than - En las regiones existentes si mas de -una región no tiene que ser ampliada . + + file info + Información de archivo - - Put everything into the (selected) part - Poner todo lo seleccionado en una región. + + MusE: save part + MusE: Guardar región. - - OK - Aceptar + + Part name: %1 +Files: + Nombre de región: %1 +Archivos: - - Cancel - Cancelar + + Remove selected + - - - PatchBay - - MusE: ALSA MIDI Patch Bay - MusE: Panel de ruteado MIDI de ALSA + + + %n part(s) out of %1 could not be pasted. +Likely the selected track is the wrong type. + + %n Región(es) fuera de %1 no pueden ser pegadas. +Probablemente la pista seleccionada es del tipo incorrecto. + + - - - PatchBayBase - - ALSA Patch Bay - Panel de ruteado de ALSA + + + %n part(s) could not be pasted. +Likely the selected track is the wrong type. + + %n Región(es) no puede ser pegada. +Probablemente la pista seleccionada es del tipo incorrecto. + + - - - PianoRoll - &Edit - &Editar + + Cannot paste: multiple tracks selected + No puedo pegar: mtilpes pistas seleccionadas - Cut - Cortar + + Cannot paste: no track selected + No puedo pegar: No hay pista seleccionada - Copy - Copiar + + Can only paste to midi/drum track + Solo se puede insertar pistas MIDI/Percusión - Paste - Pegar + + Can only paste to wave track + Solo se pueden insertar pistas de audio - Delete Events - Borrar eventos + + Can only paste to midi or wave track + Solo se pueden insertar pistas de MIDI o audio - Select All - Seleccionar Todo + + Cannot paste: wrong data type + No válido: Tipo de datos equivocado - - Select None - De-seleccionar todo + + + MusEGui::PasteDialog + + + %n quarter(s) + + %n Negra(s) + + - Invert - Invertir + + %1 quarter + for floating-point arguments like 1.5 + %1 Negra - Inside Loop - Dentro del bucle + + %1 quarters + for floating-point arguments like 1.5 + %1 Negras - - Outside Loop - Fuera del bucle + + + MusEGui::PasteEventsDialog + + + %n quarter(s) + + %n Negra(s) + + - &Select - &Seleccionar + + %1 quarter + for floating-point arguments like 1.5 + %1 Negra - blue - azul + + %1 quarters + for floating-point arguments like 1.5 + %1 Negras + + + MusEGui::PianoRoll - pitch colors - colores de tono + + &Edit + &Editar - velocity colors - colores de velocidad + + C&ut + C&ortar - &Config - &Configurar + + &Copy + &Copiar - event color - color de eventos + + Copy events in range + Copiar eventos del rango - &Functions - &Funciones + + &Paste + &Pegar - Over Quantize - Sobre cuantizar + + Paste (with dialog) + Pegar (con dialogo) - Note On Quantize - Cuantizar inicio de nota + + Delete &Events + Borrar eventos - Note On/Off Quantize - Cuantizar inicio y final de nota + + &Select + &Seleccionar - Iterative Quantize - Cuantización iterativa + + Select &All + Seleccion&ar todo - Pianoroll Tools - Herramientas de pianola + + &Deselect All + &Deseleccionar todo - Step Record - captura por pasos + + Invert &Selection + Invertir &selección - Midi Input - Entrada MIDI + + &Inside Loop + &Interior del bucle - Play Events - Reproducir eventos + + &Outside Loop + &Exterior del bucle - Add Controller View - Añade vista de controladores + + &Previous Part + Región previa - Config Quant... - Configura cuantización... + + &Next Part + Siguiente región - Modify Gate Time - Modifica el tiempo de puerta + + Fu&nctions + Fu&nciones - Modify Velocity - Modifica la velocidad + + Quantize + Cuantizar - Crescendo - Crescendo + + Modify Note Length + Modificar duraciòn de la nota - Transpose - Transponer + + Modify Velocity + Modificar la velocidad. - Thin Out - Adelgazar + + Crescendo/Decrescendo + Crescendo/Decrescendo - Erase Event - Borrar evento + + Transpose + Transponer - Note Shift - Desplazar nota + + Erase Events + Borrar eventos - Move Clock - Mover reloj + + Move Notes + Mover notas - Copy Measure - Copiar compás + + Set Fixed Length + Fijar ajustes de duración - Erase Measure - Vaciar compás + + Delete Overlaps + Borrar superpuestos - Delete Measure - Borrar compás + + Legato + Legato - Create Measure - Crear compás + + &Plugins + Efectos - ctrl - control + + Window &Config + &Configuraciòn de ventanas - C&ut - C&ortar + + &Event Color + Color de eventos - &Copy - &Copiar + + &Blue + Azul - &Paste - &Pegar + + &Pitch colors + Color por afinación - Select &All - Seleccion&ar Todo + + &Velocity colors + Color por velocidad - &Deselect All - &Deseleccionar Todo + + Pianoroll tools + Herramientas del editor de matríz - Invert &Selection - Invertir &Selección + + Step Record + Grabación por pasos - &Inside Loop - &Interior de bucle + + Midi Input + Entrada MIDI - &Outside Loop - &Exterior de Bucle + + Play Events + Reproducir eventos - Quantize - Cuantizar + + ctrl + control - panic - pánico + + Add Controller View + Agregar visor de controladores - PluginDialog - - Ok - Aceptar - + MusEGui::PluginDialog - Cancel - Cancelar + + MusE: select plugin + MusE: Selecciona el plugin - MusE: select plugin - MusE: Selecciona el plugin + + Type + Tipo + Lib - Lib + Lib + Label - Etiqueta + Etiqueta + Name - Nombre + Nombre + AI - AI + AI + AO - AO + AO + CI - CI + CI + CO - CO + CO + IP - IP + IP + id - id + id + Maker - Fabricante + Fabricante + Copyright - Copyright + Copyright - Stereo - Estéreo + + Audio inputs + - Mono - Mono + + Audio outputs + - - - PluginGui - bypass plugin - saltar plugin + + Control inputs + - MusE: load preset - MusE: Cargar plantilla + + Control outputs + - MusE: save preset - MusE: Guardar plantilla + + In-place capable + - File Buttons - Archivar botones + + ID number + - Load Preset - Cargar plantilla + + Ok + Aceptar - Save Preset - Guardar plantilla + + Cancel + Cancelar + + + + Show plugs: + - - - PrinterConfig - MusE: Config Printer - MusE: Configuración de impresora + + Mono and Stereo + Mono y estereo - Print to file - Imprimir en archivo + + Stereo + Estéreo - Print Command - Comando de impresión + + Mono + Mono - Preview Command - Comando de previsualización + + Show All + Ver todo - OK - Aceptar + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + - Cancel - Cancelar + + dssi synth + + + + + dssi effect + + + + + ladspa + + + + + Search in 'Label' and 'Name': + Buscar en nombre y etiqueta - ProjectCreate + MusEGui::PluginGui - - Create Project - Crear sesión + + File Buttons + Botón de archivos - - Projects folder: - + + Load Preset + Cargar plantilla - - - - ... - ... + + Save Preset + Guardar plantilla - - Project Name: - Nombre del la sesión: + + + bypass plugin + saltar plugin - - Project is a Template - + + MusE: load preset + MusE: Cargar plantilla - - Project song file type: + + Error reading preset. Might not be right type for this plugin + Preseteo dañado o no corresponde al efecto + + + + MusE: save preset + MusE: Guardar plantilla + + + + MusEGui::ProjectCreateImpl + + + Select directory + + + MusEGui::RoutePopupMenu - - Project Path to song file: - Ruta de la sesión: + + + + + + + + + Channel + Canal - - Create project folder (recommended for audio projects) - Crear carpeta para la sesión (recomendado para sesiones de audio) + + + + Soloing chain + Cadena de solos - Browse - Buscar + + + Audio returns + Retornos de audio - - Song information: - Información de la sesión + + Warning: No input devices! + Atención: no hay entradas - - - QHeader - Port Number - Número de puerto + + Open midi config... + Abrir la configuraciòn MIDI - enable gui for device - habilitar gui para dispositivo + + + + + <none> + <ningúno> - enables recording from the device - habilita la captura para el dispositivo + + Toggle all + Cambiar todos - Instrument connected to port - Instrumento conectado al puerto + + More... + Mas... - State: result of opening the device - Estado: resultado de abrir el puerto + + Audio sends + Envios de audio - mute instrument - silenciar instrumento + + Midi port sends + Puertos de envio MIDI + + + MusEGui::ScoreCanvas - sound name - nombre del sonido + + Treble + Agudos - quantisation -currently not used - cuantización -actualmente sin usar + + Bass + Bajos - this input note triggers the sound - ensta nota de entrada dispara el sonido + + Grand Staff + Doble - note length - longitud de nota + + Remove staff + Remover partitura - this note is send for the sound - esta nota se envia al sonido + + Ambiguous part + Parte ambígua - output channel -currently not used - canal de salida -actualmente sin uso + + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + Hay dos o más partes posibles que podría añadir la nota, pero ninguno coincide con la parte seleccionada. Por favor, seleccione la parte de destino haciendo clic en cualquier nota que le pertenecen y vuelva a intentarlo, evite agregar una nota nueva que existe la parte destino. - output port -currently not used - puerto de salida -actualmente sin uso + + No part + No hay partitura - velocity level 1 - nivel de velocidad 1 + + There are no parts you could add the note to. + No hay piezas en las que se pueda añadir la nota. + + + MusEGui::ScoreEdit - velocity level 2 - nivel de velocidad 2 + + Step recording tools + Herramienta de grabación por pasos - velocity level 3 - nivel de velocidad 3 + + Step Record + Grabación por pasos - velocity level 4 - nivel de velocidad 4 + + Note settings + Propiedades de la nota - quantisation - cuantización + + Note length: + Duración de nota: - output channel - canal de salida + + last + Pasado - output port - puerto de salida + + + + Apply to new notes: + Se aplica a nuevas notas - Enable Recording - Habilita captura + + + Apply to selected notes: + Aplicar a las notas seleccionadas - Track Activity - Actividad de pista + + Velocity: + Velocidad: - Mute Indicator - Indicador de silencio + + Off-Velocity: + Off-Velocity: - Solo Indicator - Indicador de solo + + Quantisation settings + Ajustes del cuantizado - Track Type - Tipo de pista + + Quantisation: + Cuantizado: - Track Name - Nombre de pista + + Pixels per whole: + Pixeles por entero: - Output Channel Number - Número de canal de salida + + &Edit + &Editar - Output Port - Puerto de salida + + C&ut + C&ortar - Time Lock - Bloqueo de tiempo + + &Copy + &Copiar - Solo/Pre Fader Listening - Escucha de sólo/pre-fader + + Copy events in range + Copiar eventos del rango - Name of the midi device associated with this port number - Nombre del dispositivo MIDI asociado con este número de puerto + + &Paste + &Pegar - - - QObject - Other - Otro + + Paste (with dialog) + Pegar (con diálogo) - - - Error - Error + + Delete &Events + Borrar &eventos - - - Please first select the range for crescendo with the loop markers. - Por favor, seleccione el rango de crescendo con los marcadores de bucle. + + &Select + &Seleccionar - - - QWidget - Cannot transform non empty track - No puedo transformar una pista que no está vacia + + Select &All + Seleccion&ar todo - Velocity - Velocidad + + &Deselect All + &Deseleccionar todo - - - Cannot convert sysex string - No se puede convertir el paquete de sistema exclusivo + + Invert &Selection + Invertir &selección - - - Hex String too long (2048 bytes limit) - Cadena hexadecimal demasiado larga (límite de 2048 bytes) + + &Inside Loop + &Interior de bucle - - generic midi - MIDI genérico + + &Outside Loop + &Exterior del bucle - - new - Nueva sesión + + Fu&nctions + Fu&nciones - - create peakfile for - Crear archivo de picos + + &Quantize + Cuantizar - - MusE: get file name - MusE: Obtener el nombre de archivo + + Change note &length + Cambiar duración de notas - the directory - - el directorio - + + Change note &velocity + Cambiar velocidad de las notas - -does not exist -create? - -no existe - Lo creo ? + + Crescendo/Decrescendo + Crescendo/Decrescendo - &Create - &Crear + + Transpose + Transponer - Cancel - Cancelar + + Erase Events + Borrar eventos - The directory -%1 -does not exist. -Create it? - La carpeta -%1 -no existe. -¿Desea crearla? + Move Notes + Mover notas - - MusE: create directory - MusE: Crear carpeta + + Set Fixed Length + Cambiar duración de notas - creating dir failed - falló la creación de carpeta + Delete Overlaps + Borrar notas duplicadas - - File -%1 -exists. Overwrite? - El archivo -%1 -ya existe. ¿Desea sobreescribirlo? + + Legato + Legato - - Open File -%1 -failed: %2 - Abrir archivo -%1 -falló: %2 + + Window &Config + Comportamiento de ventana - File - - El archivo - + + Note head &colors + Color de las notas - -exists - -existe + + &Black + Negro - - MusE: write - MusE: Escribir + + &Velocity + Velocidad - Overwrite - Sobre escribe + + &Part + Región - Quit - Salir + + Set up &preamble + Establecer encabezado - Open File - - Abrir archivo + + Display &key signature + Ver armadura de clave - -failed: - -falló + + Display &time signature + Ver signatura de tiempo - - MusE: Open File - MusE: Abrir archivo + + Set Score &name + Ajuste de nombre del pentagrama - - - None - Ningúno + + + Enter the new score title + Ingrese el título de la nueva partitura - Master - Maestro + + Error + Error - Input - Entrada + + Changing score title failed: +the selected title is not unique + Error al cambiar el título a la partitura: +El título seleccionado ya existe. + + + MusEGui::ScrollScale - Group %c - Grupo %c + + next page + página siguiente - Unknown - Desconocido + + previous page + página anterior - - No selection. Ignoring - No hay nada seleccionado! + + current page number + nuúmero de página actual - QuantBase + MusEGui::ShortcutCaptureDialog - - MusE: Quantize - MusE: Cuantizár + + Ok + Aceptar - - Range - Rango + + Cancel + Cancelar - - All Events - Todos los eventos + + Shortcut conflicts with %1 + Conflicto en el atajo con - - Selected Events - Eventos seleccionados + + Undefined + Sin definir + + + MusEGui::SigScale - - Looped Events - Eventos del bucle + + signature scale + Armadura de la escala + + + MusEGui::SigToolbarWidget - - Selected Looped - Seleccionar bucle + + time signature at current position + compás en la posición actual - - Values - Valores + + Signature: + + + + MusEGui::Strip - - Strength: - Porcentaje: + + Remove track? + + + + MusEGui::TList - - % - % + + <none> + <ningúno> - - Threshold (ticks): - Umbrál (Tics): + + visible + - - Quantize Len - Cuantizar duración + + no clef + No hay clave - - Raster - Raster + + Treble + Agudo - - Whole - Totalidad + + Bass + Bajo - - Half - Mitad + + Grand + Doble - - 4th - 4th + + + off + - - 4th Triplet - 4th Triplet + + <unknown> + <desconocido> - - 8th - Octavos + + MusE: bad trackname + MusE: Nombre de pista erroneo - - 8th Triplet - Octavos con puntillo + + please choose a unique track name + Error: El nombre de pista ya existe - - 16th - 16th + + Unused Devices + - - 16th Triplet - 16th Triplet + + + Update drummap? + ¿Actualizár mapa de percusión? - - 32th - 32th + + Do you want to use same port for all instruments in the drummap? + ¿Desea utilizar el mismo puerto para todos los instrumentos en el mapa de percusión? - - 32th Triplet - 32th Triplet + + + &Yes + Aceptar - - Swing: - Oscilación: + + + &No + Cancelar - - If the proposed change in tick or length is smaller than threshold, nothing is done. -If swing=0, this is normal -If swing is 33, you get a 2:1-rhythm. -If swing is -33, you get a 1:2-rhythm. - - Si en el cambio propuesto la duración es menor que el umbral, no se hace nada. -Si la oscilación es = 0, esto es normal -Si la oscilación es de 33, se obtiene un ritmo 2:1. -Si la oscilación es de -33, se obtiene un ritmo1:2. + + + show gui + Ver interfáz - - OK - Aceptar + + + show native gui + Ver interfáz nativa - - Cancel - Cancelar + + Midi control + - - - QuantConfig - Config Quantize - Configurar Cuantización + + Assign + - Strength - Fuerza + + Clear + - Don´t Quantize - No cuantizes + + Treble clef + Partitura de agudos - Quant Len - Cuantizar la longitud + + Bass clef + Partitura de Bajos - MusE: Config Quantize - MusE: Configurar Cuantización + + Grand Staff + Partitura doble - - - QuantDialog - Display Quantize - Mostrar la cuantización + + Viewable automation + Automatización visible - Position - Posición + + Internal + - Note Quantize - Cuantizar Nota + + Synth + - Rest Quantize - Cuantizar el resto + + Delete Track + Borrar pista - Ok - Aceptar + + Track Comment + Comentario de la pista - Cancel - Cancelar + + Insert Track + Insertar pista - - - RemoveBase - - MusE: Erase Notes - MusE: Borrar notas + + Midi + MIDI - - Range - Rango + + Drum + Percusión - - All Events - Todos los eventos + + Do you want to use same port and channel for all instruments in the drummap? + ¿Desea utilizar el mismo puerto y canal para todos los instrumentos del mapa de percusión? + + + MusEGui::TempoSig - - Selected Events - Eventos seleccionados + + Tempo/Sig + tempo/firma + + + MusEGui::TempoToolbarWidget - - Looped Events - Eventos del bucle + + tempo at current position + tempo en la posición actual - - Selected Looped - Bucle seleccionado + + Tempo: + + + + MusEGui::Toolbar1 - - Thresholds - Umbrales + + + + Off + Apagado - - ticks - -Tics + + Solo + Solo - - Velocity - Velocidad + + Cursor + Cursor - - Length - Duración + + Snap + Chasquido + + + MusEGui::TopWin - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - + + As subwindow + Como sub ventana - - OK - Aceptar + + Shares tools and menu + Herramientas y menús - - Cancel - Cancelar + + Fullscreen + Pantalla completa - - - RhythmBase - MusE: Random Rhythm Generator - MusE: Generador de rítmo aleatorio + + Undo/Redo tools + - Instrument Properties - Propiedades del instrumento + + Panic + Pánico - counts/bar - cuentar por barra + + Transport + Transporte - steps/count - pasos por cuenta + + Song Position + - # bars - n barras + + Tempo + - test - probar + + Signature + Compás - contrib - contribuir + + Piano roll + Editor de matríz - randomize - aleartorizar + + List editor + Editor de lista - Group 1 - Grupo 1 + + Drum editor + Editro de percusión - Group 2 - Grupo 2 + + Master track editor + Editor de pista maestra - Group 3 - Grupo 3 + + Master track list editor + Editor de lista de pista maestra - Group 4 - Grupo 4 + + Wave editor + Editro de audio - Group 5 - Grupo 5 + + Clip list + Lista de audios - listen - escuchar + + Marker view + Ver marcadores - Instrument - Instrumento + + Score editor + Editor de partituras - Group - Grupo + + Arranger + Arreglador - &New - &Nuevo + + <unknown toplevel type> + <Tipo de nivel superior desconocido> + + + MusEGui::TrackComment - create new entry - crear nueva entrada + + MusE: Track Comment + MusE: Comentario de la pista - pressing the New button you create a new entry -in the MusE list of defined controllers - pulsando el botón Nuevo creas una entrada nueva -en la lista de controles definidos por MusE + + Track Comment: + Comentario de la pista: + + + MusEGui::Transport - &Delete - &Borrar + + Overdub + Agregar - delete selected entry - borra la entrada seleccionada + + + Replace + Reemplazar - Up - Arriba + + Rec Mode + Modo de captura - Down - Abajo + + Normal + Normal - Instrument - Instrumento + + Mix + Mezcla - steps/count - pasos por cuenta + + Cycle Rec + Ciclar captura - list of defined controllers - Lista de controladores definidos + + punchin + pinchar - This is the MusE list of defined controllers. - Esta es la lista de controladores definidos en MusE. + + loop + bucle - &File - &Archivo + + punchout + fin pinchado - &Edit - &Editar + + + Punch In + Pinchar - &Help - A&yuda + + + Loop + Bucle - Tools - Herramientas + + + Punch Out + Fin pinchado - New - Nuevo + + Left Mark + Marca izquierda - Open - Abrir + + Right Mark + Marca derecha - &Open... - &Abrir... + + rewind to start + retroceder al inicio - Save - Guardar + + Click this button to rewind to start position + Pulsa este botón para regresar al principio - &Save - &Guardar + + rewind + retroceder - Save As - Guardar como + + Click this button to rewind + Pulsa este botón para ir hacia atrás - Save &As... - Guardar &Como... + + forward + avanzar - Print - Imprimir + + Click this button to forward current play position + Pulsa este botón para adelantar la posición de reproducción - &Print... - &Imprimir... + + stop + parar - Exit - Salir + + Click this button to stop playback + Pulsa este botón para detener la reproducción - E&xit - &Salir + + play + reproducir - Undo - Deshacer + + Click this button to start playback + Pulsa este botón para iniciar la reproducción - &Undo - &Deshacer + + record + grabar - Redo - Rehacer + + Click this button to enable recording + Pulsa este botón para habilitar la captura - &Redo - &Rehacer + + AC + AC - Cut - Cortar + + quantize during record + cuantizar durante la captura - &Cut - &Cortar + + Click + Click - Copy - Copiar + + metronom click on/off + Click del metrónomo encendido/apagado - C&opy - C&opiar + + Sync + Sinconización - Paste - Pegar + + external sync on/off + Sincronización externa encedida/apagada - &Paste - &Pegar + + Jack + Jack - Find - Buscar + + Jack transport sync on/off + Sincronizar a Jack Encendido/Apagado - &Find... - &Buscar... + + Master + Maestro - Contents - Contenidos + + use master track + usar pista maestra + + + MusEGui::VisibleTracks - &Contents... - &Contenidos... + + + Show wave tracks + Ver pistas de audio - Index - índice + + + Show group tracks + Ver grupos - &Index... - &Indice... + + + Show aux tracks + Ver envios auxiliares - About - Acerca de + + + Show input tracks + Ver entradas de audio - &About... - &Acerca de ... + + + Show output tracks + Ver salidas de audio - - - RhythmGenerator - Form3 - Formulario3 + + + Show midi tracks + Ver pistas MIDI - Instrument Settings: - Configuración de instrumento: + + + Show synth tracks + Ver Sintetizadores - Instrument - Instrumento + + Visible track types + Ver tipo de pistas + + + MusEGui::WaveEdit - Hi-Hat - Charli + + &Edit + &Editar - add - Agregar + + Func&tions + Funciones - delete - borrar + + &Gain + &Ganancia - steps/count - pasos/cuenta + + Other + Otros - count/bar - cuentas/compás + + &Copy + &Copiar - # bars - n compases + + C&ut + Cortar - Group Settings: - Configuración de grupo: + + &Paste + &Pegar - Group - Grupo + + Edit in E&xternal Editor + Abrir con editor externo - Group 1 - Grupo 1 + + Mute Selection + Silenciar selección - Group 2 - Grupo 2 + + Normalize Selection + Normalizar selección - Group 3 - Grupo 3 + + Fade In Selection + Aparecer progresivamente - Group 4 - Grupo 4 + + Fade Out Selection + Desvanecer progresivamente - Group 5 - Grupo 5 + + Reverse Selection + Invertir selección - contrib - contrib + + Select + Seleccionar - listen - escuchar + + Select &All + Seleccion&ar todo - Randomize - aleatorizar + + &Deselect All + &Deseleccionar todo - Rhythm Style: - Estilo de ritmo: + + Window &Config + &Comportamiento de ventana - Clear - Límpio + + WaveEdit tools + Herramientas de edición de audio - Open... - Abrir... + + Solo + Solo - Save - Guardar + + Cursor + Cursor + + + MusEGui::WaveView - Save as... - Guardar como... + + MusE - external editor failed + MusE: Falla del editor de audio externo - Generate - Generar + + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + Muse no pudo lanzar el editor externo +Compruebe esta configuraciòn en: +Configuración global-> Audio: Editor de audio externo +que el comando del editor sea válido. - Close - Cerrar + + MusE - file size changed + MusE: Cambió el tamaño del archivo - - + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + Al editar en el editor externo no se debe cambiar el tamaño del archivo +ya que debe ajustarse a la región seleccionada. + +Los datos faltantes se silenciarán. - RouteDialogBase - - - MusE: Routing - Muse: Ruteado - + OrganGuiBase - - Add Route - Agregar ruta + + MusE: Organ + MusE: órgano - - Source: - Fuente: + + O-1 + 0-1 - - Destination: - Destino: + + Oscillator + Oscillator - - Connect - Conectar + + Brass + Brass - - connect source to destination - Conectar fuente a destino + + Reed + Reed - Current Routes - Rutas actuales + Flute + Flute - - Source - Fuente + + Drawbars + Drawbars - - Destination - Destino + + 16' + 16' - - Remove - Eliminar + + 4' + 4' - - remove selected route - Eliminar ruta seleccionada + + 2 2/3' + 2 2/3' - - - RoutePopupMenu - Channel - Canal + + 2' + 2' - - - SS_PluginChooserBase - - SimpleDrums - Ladspa Plugin Chooser - SimpleDrums - Selector de Efecto Ladspa + + 8' + 8' - - Name - Nombre + + 5 1/3' + 5 1/3' - - Label - Etiqueta + + Envelope Lo + Envelope Lo - - Inports - Puerto de entrada + + Envelope Hi + Envelope Hi + + + + + Release + Release - - Outports - Puerto de salida + + + Sustain + Sustain - - Creator - Creador + + + Decay + Decay - - &Cancel - &Cancelar + + + Attack + Attack - - Alt+C - Alt+C + + + + + + + ms + ms - - &OK - Aceptar + + + cB + cB - - Alt+O - Alt+O + + Velocity + Velocity - SS_PluginFront + PasteDialogBase - - Clear and unload effect - Limpiar y descargar efecto + + MusE: Paste Parts + MusE: Pegar regiones. - - Load effect - Cargar efecto + + Number and raster + Cantidad y alineado - - Toggle display of effect parameters - Vista de los parámetros de efecto + + insert + Insertar - - Turn effect on/off - Encender/Apagar efecto + + times + -Tiempos - - - Score - &Config - &Configuración + + raster + Trama - Page Settings - Configuración de página + + ticks + Tics - Staff Settings - Configuración de pentagrama + + Move, Merge, Clone + Mover, Mezclar, Clonar - Background Pixmap - imagen de fondo + + Move everything to the right + Mover todo a la derecha. - Palettes - Paletas + + Move only affected parts to the right + Mover sólo las regiones afectadas a la derecha. - Dynamics - Dinámicos + + Put everything into a single track + Poner todo en una sola pista. - Print - Imprimir + + Merge with existing parts + Mezclar con las regiones existentes. - Preview Print - Previsualizar la impresión + + Insert as clones (where possible) + Insertar como clones (si es posible) - Lyrics - Letra + + OK + Aceptar - enter lyrics - escribe la letra + + Cancel + Cancelar + + + PasteEventsDialogBase - Text - Texto + + MusE: Paste Events + MusE: Pegar eventos - enter text - escribe el texto + + Number and raster + Cantidad y alineado - C7m - C7m + + insert + Insertar - enter chord symbol - escribe el símbolo del acorde + + times + -Tiempos - to previous voice - al timbre anterior + + raster + Alineado - to next voice - al timbre siguiente + + + ticks + -Tics - flip stem direction - intercambia la dirección de la armadura + + Paste options + Opciones del pegado - move marked notes to previous voice or to upper stave in a split system - mueve las notas marcadas al timbre anterior o a la parte superior en sistemas partidos + + Always into existing parts + Siempre en las regiones existentes. - move marked notes to next voice or to lower stave in a split system - mueve las notas marcadas al timbre siguiente o a la parte inferior en sistemas partidos + + Never into existing parts + Nunca en las regiones existentes. - flip stem direction of selected notes - intercambia la dirección de la armadura de las notas seleccionadas + + Into existing parts if part has not +to be expanded by more than + En las regiones existentes si mas de +una región no tiene que ser ampliada . - StaffSettings - Configuración de pentagrama + + Put everything into the (selected) part + Poner todo lo seleccionado en una región. - MusE: config wallpaper - MusE: Configurar imagen de fondo + + OK + Aceptar - Score - Partitura + + Cancel + Cancelar - ScoreConfig - - Staff Settings: - Configuración de Pentagrama: - - - Track List - Lista de pistas - + ProjectCreate - Key/Clef - Clave + + Create Project + Crear sesión - Raster - Raster + + Projects folder: + - Note Quantize - Cuantización de nota + + + + ... + ... - Rest Quantize - Restaurar cuantización + + Project Name: + Nombre del la sesión: - Mode - Modo + + Project is a Template + - Split System - Sistema partido + + Write window state + - Splitpoint - punto de separación + + Project song file type: + - Ok - Aceptar + + Project Path to song file: + Ruta de la sesión: - Apply - Aplicar + + Create project folder (recommended for audio projects) + Crear carpeta para la sesión (recomendado para sesiones de audio) - Cancel - Cancelar + + Song information: + Información de la sesión + + + QObject - Upper Staff - Pentagrama superior + + + Error + Error - Lower Staff - Pentagrama inferior + + + Please first select the range for crescendo with the loop markers. + Por favor, seleccione el rango de crescendo con los marcadores de bucle. - ScoreEdit + QWidget - panic - pánico + + + Cannot convert sysex string + No se puede convertir el paquete de sistema exclusivo - &Edit - &Editar + + + Hex String too long (2048 bytes limit) + Cadena hexadecimal demasiado larga (límite de 2048 bytes) - C&ut - C&ortar + + generic midi + MIDI genérico - &Copy - &Copiar + + new + Nueva sesión - &Paste - &Pegar + + create peakfile for + Crear archivo de picos - &Select - &Seleccionar + + MusE: get file name + MusE: Obtener el nombre de archivo - Select &All - Seleccion&ar Todo + + The directory +%1 +does not exist. +Create it? + La carpeta +%1 +no existe. +¿Desea crearla? - &Deselect All - &Deseleccionar Todo + + MusE: create directory + MusE: Crear carpeta - Invert &Selection - Invertir &Selección + + creating dir failed + falló la creación de carpeta - &Inside Loop - &Interior de bucle + + File +%1 +exists. Overwrite? + El archivo +%1 +ya existe. ¿Desea sobreescribirlo? - &Outside Loop - &Exterior de Bucle + + Open File +%1 +failed: %2 + Abrir archivo +%1 +falló: %2 - Transpose - Transponer + + MusE: write + MusE: Escribir - - - ScrollScale - next page - página siguiente + + MusE: Open File + MusE: Abrir archivo - previous page - página anterior + + + None + Ningúno - current page number - nuúmero de página actual + + No selection. Ignoring + No hay nada seleccionado! - SetlenBase + QuantBase - - MusE: Set Note Length - MusE: Cambiar duración de notas + + MusE: Quantize + MusE: Cuantizár @@ -17580,7 +12300,7 @@ Looped Events - Eventos en bucle + Eventos del bucle @@ -17589,528 +12309,609 @@ - Value - Valor + Values + Valores - - New length - Nueva duración + + Strength: + Porcentaje: - ticks - -Tics + % + % - - OK - Aceptar + + Threshold (ticks): + Umbrál (Tics): - - Cancel - Cancelar + + Quantize Len + Cuantizar duración - - - ShortcutCaptureDialog - Ok - Aceptar + + Raster + Raster - Cancel - Cancelar + + Whole + Totalidad - - - ShortcutCaptureDialogBase - - Enter shortcut sequence - Ingresar atajo + + Half + Mitad - - Press keys to enter shortcut sequence! - Ingrese la secuencia de teclas + + 4th + 4th - - Old shortcut: - Atajo anterior + + 4th Triplet + 4th Triplet - - - Undefined - Sin definir + + 8th + Octavos - - New shortcut: - Nuevo atajo + + 8th Triplet + Octavos con puntillo - - OK - Aceptar + + 16th + 16th - - Cancel - Cancelar + + 16th Triplet + 16th Triplet - - - ShortcutConfigBase - - Configure Keyboard Shortcuts - Configurar atajos de teclado + + 32th + 32th - - Shortcut Category - Categoría de accesos rápidos + + 32th Triplet + 32th Triplet - - Description - Descripción + + Swing: + Oscilación: - - Shortcut - Acceso rápido + + If the proposed change in tick or length is smaller than threshold, nothing is done. +If swing=0, this is normal +If swing is 33, you get a 2:1-rhythm. +If swing is -33, you get a 1:2-rhythm. + + Si en el cambio propuesto la duración es menor que el umbral, no se hace nada. +Si la oscilación es = 0, esto es normal +Si la oscilación es de 33, se obtiene un ritmo 2:1. +Si la oscilación es de -33, se obtiene un ritmo1:2. - - &Clear - Limpiar + + OK + Aceptar - - Alt+C - Alt+C + + Cancel + Cancelar + + + RemoveBase - - &Define - &Definir + + MusE: Erase Notes + MusE: Borrar notas - - Alt+D - Alt+D + + Range + Rango - - &Apply - &Aplicar + + All Events + Todos los eventos - - Alt+A - Alt+A + + Selected Events + Eventos seleccionados - - - SigScale - signature scale - Armadura de la escala + + Looped Events + Eventos del bucle - - - SimpleDrumsGuiBase - - DrumSynth 0.1 - DrumSynth 0.1 + + Selected Looped + Bucle seleccionado - - - SimpleSynthGui - - &Load setup - Cargar configuración + + Thresholds + Umbrales - - &Save setup - Guardar configuración + + ticks + -Tics - - Load sample dialog - Cargar diálogo de muestra + + Velocity + Velocidad - - - Song - &Ok - Ac&eptar + + Length + Duración - &Cancel - &Cancelar + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> + + + + + OK + Aceptar + + + + Cancel + Cancelar - SongInfo - - - Song Information - Información de la sesión + RhythmGenerator + + + + + + RouteDialogBase - - Show on song load - Mostrar al cargar la sesión + + MusE: Routing + Muse: Ruteado - - &Cancel - &Cancelar + + Add Route + Agregar ruta - - Alt+C - Alt+C + + Source: + Fuente: - - &Ok - Aceptar + + Destination: + Destino: - - Alt+O - Alt+O + + Connect + Conectar - - - StkGuiBase - MyDialog2 - MiDialogo2 + + connect source to destination + Conectar fuente a destino - Voices - Voces + + Current Routes + Rutas actuales - Edit - Editar + + Source + Fuente - - - SynthConfigBase - MusE: Synth Configuration - MusE: Configuración del Sintetizador virtual + + Destination + Destino - - Soft Synthesizer - Sintetizador Virtual + + Remove + Eliminar - - File - Archivo + + remove selected route + Eliminar ruta seleccionada + + + SS_PluginChooserBase - - Instances - Copias + + SimpleDrums - Ladspa Plugin Chooser + SimpleDrums - Selector de Efecto Ladspa - - + Name Nombre - - list of available software synthesizers - lista de sintetizadores de software dispoibles + + Label + Etiqueta - - Add Instance - Agregar copia + + Inports + Puerto de entrada - Alsa Port - Puerto ALSA + + Outports + Puerto de salida - - Remove Instance - Quitar copia + + Creator + Creador - - Midi Port - Puerto MIDI + + &Cancel + &Cancelar - - Midi Port and Soft Synth Configuration - + + Alt+C + Alt+C - - - Type - Tipo + + &OK + Aceptar - - Midi connections - Conexiones de MIDI + + Alt+O + Alt+O + + + SS_PluginFront - - Inst - Instrumento + + Clear and unload effect + Limpiar y descargar efecto - - Version - Versión + + Load effect + Cargar efecto - - Description - Descripción + + Toggle display of effect parameters + Vista de los parámetros de efecto + + + + Turn effect on/off + Encender/Apagar efecto - TList + SetlenBase - Midi - MIDI + + MusE: Set Note Length + MusE: Cambiar duración de notas - Drum - Percusión + + Range + Rango - Wave - Audio + + All Events + Todos los eventos - Delete Track - Borrar pista + + Selected Events + Eventos seleccionados - Track Comment - Comentario de pista + + Looped Events + Eventos en bucle - Show Gui - Mostrar GUI + + Selected Looped + Seleccionar bucle - Add Midi Track - Agregar pista MIDI + + Value + Valor - Add Drum Track - Agregar pista de percusión + + New length + Nueva duración - Add Wave Track - Agregar pista de audio + + ticks + -Tics - show gui - mostrar gui + + OK + Aceptar - - - TempoSig - Tempo/Sig - tempo/firma + + Cancel + Cancelar - Toolbar1 + ShortcutCaptureDialogBase - Solo - Solo + + Enter shortcut sequence + Ingresar atajo - Snap - Snap + + Press keys to enter shortcut sequence! + Ingrese la secuencia de teclas - Quantize - Cuantizar + + Old shortcut: + Atajo anterior - To - A + + + Undefined + Sin definir - All Events - Todos los eventos + + New shortcut: + Nuevo atajo - Looped Ev. - Eventos del bucle + + OK + Aceptar + + + + Cancel + Cancelar + + + ShortcutConfigBase - Selected Ev. - Eventos seleccionados + + Configure Keyboard Shortcuts + Configurar atajos de teclado - Looped+Sel. - Bucle + Selección + + Shortcut Category + Categoría de accesos rápidos - Cursor - Cursor + + Description + Descripción - - - TopWin - Arranger - Arreglador + + Shortcut + Acceso rápido - - - TrackComment - MusE: Track Comment - MusE: Comentario de la pista + + &Clear + Limpiar - Track Comment: - Comentario de la pista: + + Alt+C + Alt+C - - - Transport - Punch In - Pinchar + + &Define + &Definir - Loop - Bucle + + Alt+D + Alt+D - Punch Out - Fin pinchado + + &Apply + &Aplicar - Left Mark - Marca izquierda + + Alt+A + Alt+A + + + SimpleDrumsGuiBase - Right Mark - Marca derecha + + DrumSynth 0.1 + DrumSynth 0.1 + + + SimpleSynthGui - Overdub - Agregar + + &Load setup + Cargar configuración - Replace - Reemplazar + + &Save setup + Guardar configuración - Rec Mode - Modo de captura + + Load sample dialog + Cargar diálogo de muestra + + + SongInfo - Normal - Normal + + Song Information + Información de la sesión - Mix - Mezcla + + Show on song load + Mostrar al cargar la sesión - Cycle Rec - Ciclar captura + + &Cancel + &Cancelar - punchin - pinchar + + Alt+C + Alt+C - loop - bucle + + &Ok + Aceptar - punchout - fin pinchado + + Alt+O + Alt+O + + + SynthConfigBase - rewind to start - retroceder al inicio + + Soft Synthesizer + Sintetizador Virtual - rewind - retroceder + + File + Archivo - forward - avanzar + + Instances + Copias - stop - parar + + + Name + Nombre - play - reproducir + + list of available software synthesizers + lista de sintetizadores de software dispoibles - record - grabar + + Add Instance + Agregar copia - AC - AC + + Remove Instance + Quitar copia - quantize during record - cuantizar durante la captura + + Midi Port + Puerto MIDI - Click - Click + + Midi Port and Soft Synth Configuration + - metronom click on/off - Click del metrónomo encendido/apagado + + + Type + Tipo - Sync - Sinconización + + Midi connections + Conexiones de MIDI - external sync on/off - Sincronización externa encedida/apagada + + Inst + Instrumento - Master - Maestro + + Version + Versión - use master track - usar pista maestra + + Description + Descripción @@ -18167,49 +12968,6 @@ - TransposeDialogBase - - MusE: Midi Transpose - MusE: Transposición MIDI - - - Value - Valor - - - halftones - semitonos - - - Time - Tiempo - - - all - todo - - - between markers - entre marcadores - - - Parts - Partes - - - all in selected tracks - todo en las pistas seleccionadas - - - OK - Aceptar - - - Cancel - Cancelar - - - UnusedWaveFiles @@ -18445,20 +13203,6 @@ Encendido - VAM 1.0beta2 -Virtual Analog for MusE -Released under GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) - VAM 1.0beta2 -Virtual Analog for MusE -Released under GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) - - VAM 1.0beta3 Virtual Analog for MusE @@ -18508,10 +13252,6 @@ Eventos del bucle - Selected & Looped - Seleccionados y bucle - - Values Valores @@ -18553,126 +13293,9 @@ - WTScale - - bar scale - escala de compases - - - - WaveEdit - - Normalize - Normalizar - - - weTools - Herramientas de Audio - - - Solo - Solo - - - Cursor - Cursor - - - &File - &Archivo - - - Functions - Funciones - - - &Edit - &Editar - - - 200% - 5 1/3' {200%?} - - - 150% - 5 1/3' {150%?} - - - 75% - 5 1/3' {75%?} - - - 50% - 5 1/3' {50%?} - - - 25% - 5 1/3' {25%?} - - - &Copy - &Copiar - - - C&ut - C&ortar - - - &Paste - &Pegar - - - Select - Seleccionar - - - Select &All - Seleccion&ar Todo - - - &Deselect All - &Deseleccionar Todo - - - - WaveTrackInfoBase - - MusE: TrackInfo - MusE: Información de pista - - - Track Info - Información de pista - - - Track Name - Nombre de pista - - - Output Route: - Ruta de salida: - - - Input Route: - Ruta de netrada: - - - Ports: - Puertos: - - - Mono - Mono - - - Stereo - Estéreo - - - file_patterns - + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) @@ -18688,13 +13311,13 @@ - + - + - + @@ -18703,7 +13326,7 @@ Todos los archivos (*) - + Midi (*.mid) @@ -18769,7 +13392,7 @@ - + part Files (*.mpt *.mpt.gz *.mpt.bz2) @@ -18789,7 +13412,7 @@ - + Presets (*.pre *.pre.gz *.pre.bz2) @@ -18877,18 +13500,18 @@ Decay [ms] - - + + dB dB - + Dry Level [dB] Dry Level [dB] - + Wet Level [dB] Wet Level [dB] diff -Nru muse-2.0~rc2/share/locale/muse_fr.ts muse-2.0/share/locale/muse_fr.ts --- muse-2.0~rc2/share/locale/muse_fr.ts 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/locale/muse_fr.ts 2012-06-30 19:24:42.000000000 +0200 @@ -4,229 +4,7 @@ @default - Click this button to enable recording - Cliquez sur ce bouton pour activer -l'enregistrement - - - sets amount of quantization: -0 - no quantization -100 - full quantization - Définit le niveau de quantisation: -0 - pas de quantisation -100 - quantisation complète - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - Choisir l'Outil de Pointage: -avec l'outil de pointage vous pouvez: - choisir des pièces - déplacer des pièces - copier des pièces - - - Click this button to open a <em>new -song</em>.<br>You can also select the <b>Open -command</b> from the File menu. - Cliquez sur ce bouton pour ouvrir une <em>nouvelle -chanson</em>.<br>Vous pouvez aussi sélectionner la -<b>commande Ouvrir</b> � partir du menu Fichier. - - - Click this button to save the song you are editing. You will -be prompted for a file name. -You can also select the Save command from the File menu. - Cliquez sur ce bouton pour sauvegarder la chanson que vous -éditez. Le nom de sauvegarde vous sera demandé. -Vous pouvez aussi choisir la commande Enregistrer dans le menu Fichier. - - - Create New Song - Créer une nouvelle chanson - - - Click this button to stop playback - Cliquez sur ce bouton pour arréter la -lecture - - - Click this button to start playback - Cliquez sur ce bouton pour démarrer la -lecture - - - Click this button to rewind to start position - Cliquez sur ce bouton pour revenir � la position de -départ - - - Click this button to rewind - Cliquez sur ce bouton pour revenir en -arrière - - - Click this button to forward current play position - Cliquez sur ce bouton pour avancer dans la -lecture - - - don't quantize notes above this tick limit - Ne pas quantiser les notes sur cette limite (en -tick) - - - quantize also note len as default - quantiser aussi la longueur de note par -défault - - - loop between left mark and right mark - Boucler entre les marqueurs gauche et droit - - - record starts at left mark - l'enregistrement démarre au marqueur -gauche - - - record stops at right mark - l'enregistrement s'arrète au marqueur -droit - - - rewind to start position - revenir � la position de départ - - - rewind current position - revenir � la position en cours - - - move current position - déplacer la position en cours - - - stop sequencer - arréter le séquenceur - - - start sequencer play - démarrer la lecture du séquenceur - - - to record press record and then play - pour enregistrer, presser Enregistrement (Record) puis -Lecture (Play) - - - send note off to all midi channels - envoyer ordre de relachement de note � tous les canaux -midi - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - Choisir l'Outil Crayon -avec le crayon vous pouvez: - créer de nouvelles pièces - modifier la longueur des pièces - - - select Delete Tool: -with the delete tool you can delete parts - choisir l'Outil Gomme: -avec la gomme vous pouvez effacer les pièces - - - select Cut Tool: -with the cut tool you can split a part - Choisir l'Outil Ciseaux -avec les ciseaux vous pouver couper une pièce - - - select Glue Tool: -with the glue tool you can glue two parts - Choisir l'Outil Colle: -avec la colle vous pouvez coller deux pièces ensemble - - - select Score Tool: - - Choisir l'Outil Partition - - - select Quantize Tool: -insert display quantize event - Choisir l'Outil Quantisation: -pour voir les marques de quantisation - - - select Drawing Tool - Choisir l'Outil de Dessin - - - select Muting Tool: -click on part to mute/unmute - Choisir l'Outil Silence: -cliquez sur une pièces pour la rendre muette ou pas. - - - pointer - pointeur - - - pencil - crayon - - - rubber - gomme - - - cutter - ciseaux - - - score - partition - - - glue - colle - - - quantize - quantisation - - - draw - dessin - - - mute parts - silence - - - Off - Arrêt - - - presets (*.pre *.pre.gz *.pre.bz2) - réglages (presets: *.pre *.pre.gz -*.pre.bz2) - - - All Files (*) - Tous les Fichiers (*) - - - + Add Midi Track Ajouter une Piste Midi @@ -266,11 +44,12 @@ - Bar - Mesure + + Select project directory + - + Route @@ -285,11 +64,7 @@ - Velocity - Vélocité - - - + Warning: No output devices! @@ -299,20 +74,34 @@ - + Empty ports - + <none> - + channelMask="%1" + + + Bad timing + + + + + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + + AboutBox @@ -323,12 +112,12 @@ - Version 2 pre-alpha + Version 2 - (C) Copyright 1999-2010 Werner Schweer and others. + (C) Copyright 1999-2012 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -347,41 +136,9 @@ - Appearance - - MusE: load image - MusE: charger une image - - - handle of transport window - poignée de la fenêtre Transport - - - track activity in arranger - Activité des pistes dans l'Arrangeur - - - bigtime font color - Couleur de la police dans le GrandChrono - - - bigtime background color - Couleur de fond du GrandChrono - - - waveedit background color - Couleur du fond de l'éditeur -d'échantillon - - - AppearanceDialogBase - MusE: Appearance Settings - MusE: réglages de l'apparence - - - + Apply Appliquer @@ -396,7 +153,7 @@ Annuler - + Arranger Arrangeur @@ -406,10 +163,6 @@ Pièces - show frames - montrer les séparations - - show names montrer les noms @@ -475,14 +228,6 @@ image de fond - bg - fond - - - select... - choisissez... - - show snap grid voir la grille de positionnement @@ -498,23 +243,6 @@ Objets - selected - sélectionné - - - current: - en cours: - - - change... - changer... - - - dynamic colors for track activity in arranger - Choix auto des couleurs pour l'activité des pistes -dans l'Arrangeur - - Style/Fonts Styles/Polices @@ -565,7 +293,12 @@ Motif Plus - + + May require restarting MusE for best results + + + + Fonts Polices @@ -645,7 +378,7 @@ Couleurs - + clear @@ -715,7 +448,7 @@ - + Style Sheet: @@ -726,11004 +459,6025 @@ - Arranger + ArrangerColumnsBase - Cursor - Curseur + + Configure arranger columns + - Snap - Aligne + + Columns: + - Len - Long + + Name: + Nom: - Type - Type + + Controller type: + - NO - NON + + + Midi controller type + - midi song type - type de fichier midi + + Control7 + Control7 - Pitch - Hauteur + + Control14 + Control8 - midi pitch - hauteur midi + + RPN + RPN - global midi pitch shift - transposition midi globale + + NRPN + NRPN - Tempo - Tempo + + RPN14 + - midi tempo - tempo midi + + NRPN14 + - TrackInfo - InfoPiste - - - Track - Piste - - - O-Port - O-Port + + Pitch + Hauteur - Arranger - Arrangeur + + Program + - Off - Arrêt + + H-Ctrl + H-Ctrl - Bar - Mesure + + + Midi controller number high byte + - GM - GM + + L-Ctrl + L-Ctrl - GS - GS + + + Midi controller number low byte + - XG - XG + + * + wild card + - N - N + + affect CCs at + - R - R + + begin of song + - A - A + + current position + - M - M + + &Add + - S - S + + &Delete + - C - C + + Done + + + + Awl::MidiVolEntry - Ch - Ch + + off + off - T - T + + db + + + + Awl::VolEntry - Enable Recording - Activer l'Enregistrement + + off + off + + + ClipListEditorBase - Solo Indicator - Indicateur de Solo + + MusE: ClipList + MusE: Liste de Clips - Track Type - Type de Piste + + Name + Nom - Time Lock - Vérouillage d'Horloge + + Refs + Réfs - Port - Port + + Samplerate + - - - ArrangerView - panic - panique! + + Len + Long - C&ut - Co&uper + + Data + Donnée - &Copy - &Copier + + Clip Properties + Propriétés du Clip - Add Track - Ajouter Piste + + Pos: + Pos: - Select - Sélectionner + + Len: + Long: + + + CommentBase - Select &All - Selectionner &Tout + + Form1 + Forme1 - &Deselect All - &Dé-selectionner tout + + Track Comment + Commentaire pour la Piste - Invert &Selection - Inverser la &Sélection + + Track 1 + Piste 1 + + + ConfigMidiFileBase - &Inside Loop - A l'&intérieur de la Boucle + + MusE: Config Midi File Import/Export + - &Outside Loop - A l'e&xtérieur de la Boucle + + Import: + - All &Parts on Track - Tous les &bouts de la Piste + + Split tracks into &parts + - Score - Partition + + Alt+P + - Pianoroll - Rouleau-Piano + + Split tracks into parts, or one single part + - Drums - Batterie + + Export: + - List - Liste + + 96 + 96 - Wave - Forme d'Onde + + 192 + 192 - Mastertrack - PistePrincipale + + 384 + 384 - Graphic - Graphique + + Enable extended smf format (currently not implemented) + - Midi &Transform - &Transformation MIDI + + Use &2-byte time signatures instead of standard 4 + - Global Cut - Couper tout + + Alt+2 + - Global Insert - Insérer tout + + Copyright: + - Global Split - Diviser Tout + + Format: + - &Structure - &Structure + + Note: Format 0 uses the FIRST midi track's name/comment in the arranger + - Functions - Fonctions + + Division: + - Transpose - Transposition + + Save space by replacing note-offs with &zero velocity note-ons + - New - Nouveau + + Alt+Z + - - - AudioConfBase - MusE: Audio Configuration - MusE: Configuration Audio + + 0 (single track) + - &Apply - &Appliquer + + 1 (multiple tracks) + + &OK - &OK + + &Cancel - A&nnuler + &Annuler + + + CrescendoBase - Audio Parameters - Paramètres Audio + + MusE: Crescendo/Decrescendo + - 32 - 32 + + Range + - 64 - 64 + + Looped Events + Evènements bouclés - 128 - 128 + + Selected Looped + - 256 - 256 + + Values + Valeurs - 512 - 512 + + Start velocity + - 1024 - 1024 + + + % + - 2048 - 2048 + + End velocity + - 4096 - 4096 + + Absolute + - Frame Size: - Longueur des trames: + + Relative + - Delay: - Délai: + + OK + OK - Sample Rate: - Fréquence d'échantillonage: + + Cancel + Annuler + + + DeicsOnzeGui - 44100 - 44100 + + Save configuration + - 48000 - 48000 + + + + + + + + + + + Critical Error + - 96000 - 96000 + + + + + + Cannot open file %1 + - Audio Driver - Pilote Audio + + + + + + Parsing error for file %1 + - Use Alsa - Alsa + + + Load category dialog + - Use JACK - JACK + + Load set dialog + - No Audio - Pas d'audio + + Save set dialog + - Status: - Etat: + + New category + - TextLabel6 - TextLabel6 + + + Delete category + - - - AudioMixerApp - 1/2 channel - 1/2 canal + + Load category + - pre fader - post fader - pre fader - post fader + + Save category + - record - enregistrement + + Load set + - mute - silence + + Save set + - pre fader listening - écoute pre fader + + Delete set + - record downmix - enregistrer mixdown + + New subcategory + - off - arrêt + + + Delete subcategory + - output routing - chemin de sortie (routing) + + Load subcategory + - &Config - &Configuration + + Save subcategory + - Add Input Strip - Ajouter une Bande d'Entrée + + New preset + - S - S + + + Delete preset + - Pre - Pre + + Load preset + - dB - dB + + Save preset + - MusE: Audio Mixer - MusE: Mixeur Audio + + No more category supported + - Inputs - Entrées + + You can not add more categories + - Synthi - Synth + + + + Do you really want to delete %1 ? + - Tracks - Pistes + + + + &Yes + - &Create - &Créer + + + + &No + - - - AudioStrip - Pan - Pan + + + No category selected + - 1/2 channel - 1/2 canal + + + You must first select a category. + - Pre - Pre + + + + Replace or add + - pre fader - post fader - pre fader - post fader + + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + - dB - dB + + + + &Replace + - mute - silence + + + + &Add + - record downmix - enregistrer mixdown + + + + Download error + - output routing - chemin de sortie (routing) + + There is no more free category slot. + - Channel - Canal + + Save category dialog + - - - Awl::MidiVolEntry - - off + + No more subcategory supported - db + You can not add more subcategories - - - Awl::VolEntry - - off + + + No subcategory selected - - - BigTime - - MusE: Bigtime - MusE: GrandChrono - - minute - minute + + + You must first select a subcategory. + - second - second + + Load subcategory dialog + - frame - trame (frame) + + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + - subframe - trame fine (subframe) + + There is no more free subcategory slot. + - - - ClipListEdit - MusE: Clip List Editor - MusE: Editeur de la Liste de Clips + + Save subcategory dialog + - panic - panique! + + No more preset supported + - - - ClipListEditorBase - - MusE: ClipList - MusE: Liste de Clips + + You can not add more presets + - - Name - Nom + + + + No preset selected + - - Refs - Réfs + + + + You must first select a preset. + - - Start - Départ + + Load preset dialog + - - Len - Long + + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + - - Data - Donnée + + There is no more free preset slot. + - - Clip Properties - Propriétés du Clip + + Save preset dialog + - - Pos: - Pos: + + Browse set dialog + - - Len: - Long: + + Browse image dialog + - CommentBase + DeicsOnzeGuiBase - - Form1 - Forme1 + + DeicsOnze + - - Track Comment - Commentaire pour la Piste + + &Preset + - - Track 1 - Piste 1 + + Program numerous + - - - ConfigMidiFileBase - - MusE: Config Midi File Import/Export + + INITVOICE - - Import: + + LBank - - Split tracks into &parts + + Subcategory - - Alt+P + + + Bank numerous - - Split tracks into parts, or one single part + + + NONE - - Export: + + HBank - - 96 - 96 + + Category + - - 192 - 192 + + Prog + - 384 - 384 + Preset + - - Enable extended smf format (currently not implemented) + + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - - Use &2-byte time signatures instead of standard 4 + + &Global - - Alt+2 + + Pitch Envelope - - Copyright: + + PL3 - - Format: + + PL2 - - Note: Format 0 uses the FIRST midi track's name/comment in the arranger + + PL1 - - Division: + + PR1 - - Save space by replacing note-offs with &zero velocity note-ons + + PR2 - - Alt+Z + + PR3 - - 0 (single track) + + + + + + + + Pitch modulation depth - - 1 (multiple tracks) + + LFO + LFO + + + + LFO Sync - - &OK + + Pitch modulation sensitivity - - &Cancel + + Pitch Modulation Sensitivity - - - CrescendoBase - - MusE: Crescendo/Decrescendo + + LFO Delay - - Range + + LFO delay - - Looped Events - Evènements bouclés + + LFO speed + - - Selected Looped + + Amplitude modulation depth + + + + + Amplitude modulation sensitivity - Values - Valeurs + Amplitude Modulation Sensitivity + - - Start velocity + + AMS - - % + LFO Waveform - - End velocity + + + Pitch Modulation Depth - - Absolute + + PMD - Relative + LFO Speed - - OK - OK + + AMD + - Cancel - Annuler + Speed + Vitesse - - - CtrlPanel - select controller - Choisissez le contrôle + + Delay + Délai - remove panel - enlever le panneau + + PMS + - other ... - autres... + + + Modulation Matrix + - Sel - Sél + + <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> +<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> +<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> +<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> +<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + - x - x + + Op4 Feedback + - Velocity - Vélocité + + + Feedback level of the operator 4 + - Pitch - Hauteur + + + + Transpose + Transposition - S - S + + Op &1 + - - - DeicsOnzeGui - - Save configuration + + Scaling 1 - - - - - - - - - - - Critical Error + + LS1 - - - - - - Cannot open file %1 + + RS1 - - - - - - Parsing error for file %1 + + + + + + + + + Rate Scaling - - - Load category dialog + + + + + + + + + + + + + Attack Rate of the operator 1 - - Load set dialog + + + + + + + + + Level Scaling - - Save set dialog + + Amplitude Envelope 1 - - New category + + RR1 - - - Delete category + + D1R1 - - Load category + + D1L1 - - Save category + + D2R1 - Load set + + + + Release Rate - - - Save set + + + + + + 2° Decay Rate - - - Delete set + + + + + + 1° Decay Level - - - New subcategory + + + + + + 1° Decay Rate - - - Delete subcategory + + + + + Attack Rate - - Load subcategory + + AR1 - - Save subcategory + + Detune, OSCWave, EGShift 1 - - New preset + + DET1 - - - Delete preset - + + + + + + + + + + Detune + Désaccordage - - Load preset + + + + + EG Shift - - Save preset + + + + + 96dB - - No more category supported + + + + + 48dB - - You can not add more categories + + + + + 24dB - - - - Do you really want to delete %1 ? + + + + + 12dB - - - - &Yes + + + + + Wave form - - - - &No + + + + + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> - - - No category selected + + Sensitivity 1 - - - You must first select a category. + + KVS1 - - - - Replace or add + + + + + Amplitude Modulation Enable - - %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? + + AME1 - - - - &Replace + + + + + Keyboard Velocity Sensitivity - - - - &Add + + + + + Key Velocity Sensitivity - - - - Download error + + EBS1 - - There is no more free category slot. + + + + + EG Bias Sensitivity - - Save category dialog + + + + + Eg Bias Sensitivity - - No more subcategory supported + + Frequency 1 - - You can not add more subcategories + + Coarse 1 - - - No subcategory selected + + + + + Coarse Ratio - - - You must first select a subcategory. + + Fine 1 - - Load subcategory dialog + + + + + Fine Ratio - - %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? + + Freq 1 - - There is no more free subcategory slot. + + + + + Fixed Frequency - - Save subcategory dialog + + + + + Toggle Fix Frequency - - No more preset supported + + + + + FIX - - You can not add more presets + + OUT 1 - - - - No preset selected + + + + + Output Volume - - - - You must first select a preset. - + + + + + + + Volume + Volume - - Load preset dialog + + Op &2 - - %1 is supposed to be affected to the prog number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? + + Amplitude Envelope 2 - - There is no more free preset slot. + + D1R2 - - Save preset dialog + + D1L2 - - Browse set dialog + + D2R2 - - Browse image dialog + + RR2 - - - DeicsOnzeGuiBase - - DeicsOnze + + AR2 - - &Preset + + Frequency 2 - - Program numerous + + Coarse 2 - - INITVOICE + + Fine 2 - - LBank + + Freq 2 - - Subcategory + + Scaling 2 - - - Bank numerous + + LS2 - - NONE + RS2 - - HBank + + OUT 2 - - Category + + Detune, OSCWave, EGShift 2 - - Prog + + DET2 - - Preset + + Sensitivity 2 - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + + EBS2 - - &Global + + KVS2 - - Pitch Envelope + + AME2 - - PL3 + + Op &3 - - PL2 + + Amplitude Envelope 3 - - PL1 + + D1R3 - PR1 + D1L3 - PR2 + D2R3 - PR3 + RR3 - - - - - - - - Pitch modulation depth + + AR3 - - LFO - LFO - - - - LFO Sync + + Scaling 3 - - Pitch modulation sensitivity + + LS3 - Pitch Modulation Sensitivity + RS3 - - LFO Delay + + OUT 3 - - LFO delay + + Frequency 3 - - LFO speed + + Coarse 3 - - Amplitude modulation depth + + Fine 3 - - Amplitude modulation sensitivity + + Freq 3 - - Amplitude Modulation Sensitivity + + Detune, OSCWave, EGShift 3 - - AMS + + DET3 - - LFO Waveform + + Sensitivity 3 - - - Pitch Modulation Depth + + EBS3 - - PMD + + KVS3 - - LFO Speed + + AME3 - - AMD + + Op &4 - - Speed - Vitesse + + amplitude Envelope 4 + - - Delay - Délai + + AR4 + - PMS + D1R4 - - Modulation Matrix + D1L4 - - <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> -<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> -<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> -<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> -<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + + D2R4 - - Op4 Feedback + + RR4 - - - Feedback level of the operator 4 + + Frequency 4 - - - - Transpose - Transposition + + Coarse 4 + - - Op &1 + + Fine 4 - - Scaling 1 + + Freq 4 - - LS1 + + Scaling 4 - - RS1 + + LS4 - - - - - - - - - Rate Scaling + + RS4 - - - - - - - - - - - - - Attack Rate of the operator 1 + + OUT 4 - - - - - - - - Level Scaling + Detune, OSCWave, EGShift 4 - - Amplitude Envelope 1 + + DET4 - - RR1 + + Sensitivity 4 - - D1R1 + + EBS4 - D1L1 + KVS4 - D2R1 + AME4 - - - - - Release Rate - - - - - - - - 2° Decay Rate - - - - - - - - 1° Decay Level - - - - - - - - 1° Decay Rate + + &Func - - - - - Attack Rate + + Delay Pan Depth - - AR1 + + Delay Pan LFO Freq - - Detune, OSCWave, EGShift 1 + + Delay Ch Send Level - - DET1 + + + + Channel Chorus - - - - - - - - - - Detune - Désaccordage - - - - - - - EG Shift + + Delay Feedback - - - - - 96dB + + Delay On/Off, Return Level - - - - - 48dB - + + + + On + On - - - - - 24dB + + Delay Beat Ratio - - - - - 12dB + + Delay BPM - - - - - Wave form + + Foot Control - - - - - Wave form 1 = <i>sin(<b>t</b>)</i><br> -Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> -Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> -Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> -Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> -Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Pitch Bend Range - - Sensitivity 1 - + + + + + Pitch + Hauteur - - KVS1 + + + + + Amplitude - - - - - Amplitude Modulation Enable + + Modulation Wheel - - AME1 + + Breath Control - - - - - Keyboard Velocity Sensitivity + + + Pitch Bias - - - - - Key Velocity Sensitivity + + + Envelope Bias - - EBS1 + + After Touch + Pression (After Touch) + + + + Phony Mode - - - - - EG Bias Sensitivity + + POLY - - - - - Eg Bias Sensitivity + + MONO - - Frequency 1 + + Potamento - Coarse 1 + Portamento Mode - - - - - Coarse Ratio + + FINGER - - Fine 1 + + FULL - - - - - Fine Ratio + + PT - - Freq 1 + + + Portamento Time - - - - - Fixed Frequency + + C&horus - - - - - Toggle Fix Frequency + + Chorus Parameters - - - - - FIX + + + Channel send level - - OUT 1 + + + On/Off and Return level - - - - - Output Volume + + + Select LADSPA plugin - - - - - - - Volume - Volume + + + Change plugin + - - Op &2 + + &Reverb - - Amplitude Envelope 2 + + Reverb Parameters - - D1R2 - + + &Config + &Configuration - - D1L2 + + Font Size - - D2R2 + + Quality - - RR2 + + High - - AR2 + + Middle - - Frequency 2 + + Low - - Coarse 2 + + Ultra low - - Fine 2 - + + Filter + Filtre - - Freq 2 + + Save Mode (into the song) - - Scaling 2 + + Save only the used presets - - LS2 + + Save the entire set - - RS2 + + Save the configuration - - OUT 2 + + Configuration File - - Detune, OSCWave, EGShift 2 + + Save... - - DET2 + + Load... - - Sensitivity 2 + + Save as default - - EBS2 + + Colors + couleurs + + + + Text + Texte + + + + Background - - KVS2 + + Edit Text - - AME2 + + Edit Background - - Op &3 + + + + Red - - Amplitude Envelope 3 + + + + Blue - - D1R3 + + + + Green - - D1L3 + + Set Path - - D2R3 + + Image in the background : - - RR3 + + + Browse... - - AR3 + + Load the set at the initialization : - - Scaling 3 + + Set Brightness, Detune, Attack and Release of the current channel to default - - LS3 + + Res. Ctrl - - RS3 + + Cut all notes off - - OUT 3 + + Panic! - - Frequency 3 + + Number of Voices - - Coarse 3 + + Number of voices - - Fine 3 + + Enable - Freq 3 - + Channel + Canal - - Detune, OSCWave, EGShift 3 + + Vol - - DET3 + + Channel Ctrl - - Sensitivity 3 - + + Release + Relachement - - EBS3 - + + Attack + Attaque - - KVS3 + + Brightness - - AME3 + + Modulation - - Op &4 + + Pan + Pan + + + + DelOverlapsBase + + + MusE: Delete Overlaps - amplitude Envelope 4 + Range - - AR4 - + + All Events + Tous les Evènements - - D1R4 - + + Selected Events + Evènements choisis - - D1L4 - + + Looped Events + Evènements bouclés - - D2R4 + + Selected Looped + + OK + OK + + - RR4 - + Cancel + Annuler + + + DidYouKnow - - Frequency 4 + + Did you know? - - Coarse 4 + + Don't show on startup - - Fine 4 + + Next tip - - Freq 4 - + + Close + Fermer + + + DuplicateTracksBase - - Scaling 4 + + Duplicate tracks - LS4 + Number of copies - - RS4 + + Copy all routes - - OUT 4 + + Default routing - - Detune, OSCWave, EGShift 4 + + No routes - - DET4 + + Copy parts - - Sensitivity 4 + + Copy standard controllers (vol, pan) - - EBS4 + + Copy effects rack plugins - - KVS4 + + Copy plugin controllers - - AME4 - + + Ok + Ok - - &Func - + + Cancel + Annuler + + + EditCtrlBase - - Delay Pan Depth + + MusE: Edit Controller Event - - Delay Pan LFO Freq + + Time Position - - Delay Ch Send Level + + Available Controller: - - - - Channel Chorus + + Create New Controller - - Delay Feedback + + textLabel3 - - Delay On/Off, Return Level - + + Value + Valeur - - - - On - On + + Controller + Contrôle - - Delay Beat Ratio - + + H-Bank + H-Bank - - Delay BPM - + + L-Bank + L-Bank - - Foot Control + + Program - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pitch Bend Range - + + off + off - - - - - Pitch - Hauteur + + pushButton4 + - - - - - Amplitude + + &OK - - Modulation Wheel - + + &Cancel + &Annuler + + + EditGainBase - - Breath Control + + MusE: Modify gain - - - Pitch Bias - + + Gain + Gain - - - Envelope Bias - + + 200% + 5 1/3' {200%?} - - After Touch - Pression (After Touch) + + 100% + 5 1/3' {100%?} - - Phony Mode - + + 0% + 5 1/3' {0%?} - - POLY + + &Reset - - MONO + + Alt+R - - Potamento - + + &Apply + &Appliquer - - Portamento Mode + + Alt+A - - FINGER - + + &Cancel + &Annuler - - FULL + + Alt+C + + + EditInstrumentBase - - PT + + MusE: Instrument Editor - - - Portamento Time + + Instrument Name: - - C&horus + + Selected instrument name. - - Chorus Parameters + + List of defined instruments. - - - Channel send level + + Pa&tches - - - On/Off and Return level + + List of groups and patches. - - - Select LADSPA plugin + + Group/Patch - - - Change plugin - + + + Properties + Propriétés - - &Reverb - + + + + Name: + Nom: - - Reverb Parameters + + + Group or patch name - - &Config - &Configuration + + High Bank: + - Font Size + Patch high bank number - - Quality + + Patch high bank number. --- means don't care. - - High + + --- + dont care - - Middle + + Low Bank: - - Low + + Patch low bank number - - Ultra low + + Patch low bank number. --- means don't care. - - Filter - Filtre + + --- + - - Save Mode (into the song) + + Program: - - Save only the used presets + + + Patch program number - - Save the entire set + + Drum patch - - Save the configuration + + If set, the patch is available only for drum channels. - - Configuration File - + + Drum + Batterie - - Save... + + GM patch - - Load... + + If set, the patch is available in a 'GM' or 'NO' midi song type. - - Save as default - + + GM + GM - Colors - couleurs - - - - Text - Texte - - - - Background + GS patch - - Edit Text + + If set, the patch is available in a 'GS' or 'NO' midi song type. - - Edit Background - + + GS + GS - - - - Red + + XG patch - - - - Blue + + If set, the patch is available in an 'XG' or 'NO' midi song type. - - - - Green - + + XG + XG - - Set Path + + Delete group or patch - - Image in the background : + + + + &Delete - - - Browse... + + + + Alt+D - - Load the set at the initialization : + + New patch - - Set Brightness, Detune, Attack and Release of the current channel to default + + New &Patch - Res. Ctrl + Alt+P - - Cut all notes off + + New group - Panic! + New &Group - - Number of Voices + + Alt+G - - Number of voices + + Contro&ller - - Enable + + Common: - - Channel - Canal + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + - - Vol + + List of defined controllers - - Channel Ctrl + + List of defined controllers. - - Release - Relachement + + Name + Nom - - Attack - Attaque + + Type + Type - - Brightness - + + + H-Ctrl + H-Ctrl - - Modulation - + + + L-Ctrl + L-Ctrl - - Pan - Pan + + Min + - - - DelOverlapsBase - - MusE: Delete Overlaps + + Max - - Range + + Def - - All Events - Tous les Evènements + + Midi controller name + - - Selected Events - Evènements choisis + + Type: + Type: - Looped Events - Evènements bouclés + + Midi controller type + - - Selected Looped - + + Control7 + Control7 - - OK - OK + + Control14 + Control8 - - Cancel - Annuler + + RPN + RPN - - - DidYouKnow - - Did you know? - + + NRPN + NRPN - - Don't show on startup + + RPN14 - - Next tip + + NRPN14 - - Close - Fermer + + Pitch + Hauteur - - - DrumEdit - Load Map - Charger set de batterie + + Program + - Save Map - Enregistrer set de batterie + + + Midi controller number high byte + - &Edit - &Editer + + Midi controller number low byte (* means drum controller) + - Cut - Couper + + Midi controller number low byte. +If low byte is * then the controller is a + 'drum controller'. For drum tracks and + GS/XG type songs and instruments. +Allows controllers for each instrument in + Muse's drum map. The low byte will be + replaced by the 'ANote' in the drum map. +Examples: The GS and XG instruments' + Drum controllers. + - Copy - Copier + + * + wild card + - Paste - Coller + + Range: + - Delete Events - Effacer + + Min + - Select All - Tout sélectionner - + + Minimum value. If negative, auto-translate. + + - Select None - Dé-sélectionner + + Minimum value. If the minimum value + is negative, the range will automatically + be translated to a positive range. + +Useful for controllers which should be + displayed with zero bias. For example, +'Pan': Minimum: -64 Maximum: 63 +True range: Min: 0 Max: 127 (bias = 64) +'CoarseTuning': Min: -24 Max: 23 +True range: Min: 40 Max: 87 (bias = 64) + +Bias is determined from controller type: +7-bit Controller7 / RPN: Bias = 64 +14-bit Controller14 / RPN14: Bias = 8192 + +Type 'Pitch' is the exception. It is biased + at zero, even with a negative minimum: +'Pitch': Min: -8192 Max: 8191 +True range: Min: -8192 Max: 8191 (bias 0) + - Invert - Inverser + + Max + - Inside Loop - Dans la boucle + + + Maximum value + - Outside Loop - Hors de la boucle + + Default: + - &Select - &Sélectionner + + L-Bank + L-Bank - Step Record - Enregistrement pas-�-pas + + + + + + off + off - Midi Input - Entrée Midi + + Progr. + Progr. - Add Controller View - Ajouter une Vue des contrôles + + ??? + ??? - M - M + + H-Bank + H-Bank - Sound - Son + + Default value. Off: No default. + - QNT - QNT + + Default (initial) value. Off means no default. + +If a default value is chosen, the value will be sent + to the controller when the controller is added to + the song (in piano roll or event editor). When + the song is re-loaded, the value is sent again. +Otherwise the controller remains at its last value. +Controllers are also automatically added to a + song upon reception of a midi controller event. + +Caution! Watch out for controllers such as + 'Sustain' and 'ResetAllController' with default + values. You should probably turn 'off' their + default (in piano roll or drum edit, and + instrument editor). + - E-Note - E-Note + + off + dont care + off - Len - Long + + Add common controller + - A-Note - A-Note + + &Add + - Ch - Ch + + Alt+A + - Port - Port + + Delete controller + - LV1 - LV1 + + Create a new controller + - LV2 - LV2 + + New &Controller + - LV3 - LV3 + + Alt+C + - LV4 - LV4 + + Null Param Hi: + - &File - &Fichier + + Null parameter number High byte + - Load Drummap - Charger Set de Batterie + + + If set, these 'null' parameter numbers will + be sent after each RPN/NRPN event. +This prevents subsequent 'data' events + from corrupting the RPN/NRPN controller. +Typically, set to 127/127, or an unused + RPN/NRPN controller number. + - Store Drummap - Enregistrer Set de Batterie + + Lo: + - ctrl - ctrl + + Null parameter number Low byte + - drummaps - Sets de Batterie + + S&ysEx + - Muse: Load Drum Map - MusE: Charger Set de Batterie + + SysEx List: + - MusE: Store Drum Map - MusE: Enregistrer Set de Batterie + + Hex Entry: + - mute instrument - Rendre muet l'instrument + + New SysE&x + - sound name - Nom du son + + Alt+X + - quantisation - quantisation + + Tools + Outils - this input note triggers the sound - cette note en entrée déclenche le son + + &File + &Fichier - note length - longueur de note + + &Help + &Aide - &Functions - &Fonctions + + &New + &Nouveau - Modify Velocity - Modifier la vélocité + + New + Nouveau - panic - panique! + + Ctrl+N + - - - EditCAfterDialog - Time Position - Position temporelle + + &Open... + &Ouvrir... - Pressure - Pression + + Open + Ouvrir - MusE: Enter Channel Aftertouch - MusE: Entrez le Canal de Pression -(AfterTouch) + + Ctrl+O + - - - EditCtrl14Dialog - Time Position - Position temporelle + + &Save + - Controller-H - Contrôle H + + Save + - Controller-L - Contrôle L + + Ctrl+S + - Value - Valeur + + Save &As... + Sauvegarder &sous... - MusE: Enter Controller14 Event - MusE: Entrer l'évènement Contrôle 14 + + Save As + Sauvegarder sous - - - EditCtrl7Dialog - Time Position - Position temporelle + + E&xit + &Quitter - Controller - Contrôle + + Exit + Quitter - Value - Valeur + + + new item + - MusE: Enter Controller Event - MusE: Entrez l'Evénement Contrôle + + + What's this? + - EditCtrl7DialogBase - - MusE: Enter Controller - Muse: Entrez le Contrôle - + EditNoteDialogBase - Controller: - Contrôle: + + MusE: Enter Note + Mus2: Entrer la Note - Time Position: - Position temporelle: + + OK + OK - Value: - Valeur: + + Cancel + Annuler - controller value - Valeur du Contrôle + + Length: + Longueur: - OK - OK - - - Cancel - Annuler - - - - EditCtrlBase - - - MusE: Edit Controller Event - - - - - Time Position - + + Time Position: + Position temporelle: - Available Controller: - + Pitch: + Hauteur - Create New Controller - - - - - textLabel3 - + Velocity On: + Vélocité On: - Value - Valeur + Velocity Off: + Vélocité Off: + + + EditSysexDialogBase - - Controller - Contrôle + + MusE: Enter SysEx + MusE: Entrer le Sysex - - H-Bank - H-Bank + + TimePosition: + Position temporelle - - L-Bank - L-Bank + + Comment: + Commentaire: - - Program - + + OK + OK - - off - - - - - pushButton4 - - - - - &OK - + Cancel + Annuler + + + FLUIDGui - - &Cancel + + FLUID: open Soundfile - EditEventDialog + FLUIDGuiBase - Ok - Ok + + Form1 + Form1 - Cancel - Annuler + + Soundfont + Set de Sons + + + + Load + Charger - EditGainBase + FLUIDSynthGuiBase - - MusE: Modify gain - + + FLUID Synth + FLUID Synth - + Gain Gain - - 200% - 5 1/3' {200%?} + + Room Size + Dimension de la chambre - - 100% - 5 1/3' {100%?} + + Damping + Atténuation - - 0% - 5 1/3' {0%?} + + + Level + Niveau - - &Reset - + + Width + Largeur - - Alt+R - + + Speed + Vitesse - - &Apply - &Appliquer + + Depth + Profondeur - - Alt+A - + + Number + Nombre - - &Cancel - + + Type + Type - - Alt+C - + + Sine + Sinusoide - - - EditInstrument - MusE: Write File failed - MusE: échec de l'enregistrement + + Triangle + Triangle - MusE - MusE + + Reverb + Réverb - &Nosave - &Pas d'enregistrement + + Chorus + Chorus - &Abort - &Annuler + + Load + charger - - - EditInstrumentBase - - MusE: Instrument Editor + + Delete + Effacer + + + + Dump Info - - Instrument Name: + + ID - - Selected instrument name. + + Fontname - - List of defined instruments. + + Chnl - - Pa&tches + + Soundfont + Set de Sons + + + + Drum Chnl - - List of groups and patches. + + CHANNEL SETUP - - Group/Patch + + LOADED SOUNDFONTS + + + FileDialogButtons - - - Properties - Propriétés + + Global + Global - - - - Name: - Nom: + + User + Utilisateur - - - Group or patch name - + + Project + Projet - - High Bank: + + read Midi Port +Configuration - - Patch high bank number + + write window +states - - Patch high bank number. --- means don't care. + + fdialogbuttons + + + FluidSynthGui - - --- - dont care + + Choose soundfont + + + GateTimeBase - - Low Bank: - + + Range + Entre - Patch low bank number - + All Events + Tous les Evènements - - Patch low bank number. --- means don't care. - + + Selected Events + Evènements choisis - - --- - + + Looped Events + Evènements bouclés - - Program: + + MusE: Modify Note Length - - - Patch program number + + Selected Looped - - Drum patch - + + Values + Valeurs - - If set, the patch is available only for drum channels. - + + Rate: + Vitesse: - - Drum - Batterie + + Offset: + Décalage: - GM patch - + % + % - - If set, the patch is available in a 'GM' or 'NO' midi song type. + + lenNew = (lenOld * rate) + offset - - GM - GM + + OK + OK - - GS patch - + + Cancel + Annuler + + + GlobalSettingsDialogBase - - If set, the patch is available in a 'GS' or 'NO' midi song type. - + + MusE: Global Settings + MusE: Paramètres - - GS - GS + + Audio + Audio - - XG patch - + + Mixer + Mixeur - - If set, the patch is available in an 'XG' or 'NO' midi song type. - + + + dB + dB - - XG - XG + + min. Meter Value + Métrage mini - - Delete group or patch - + + Midi + Midi - - - - &Delete - + + Ticks + Tics - - - - Alt+D - + + + + 1024 + 1024 - - New patch - + + + + 2048 + 2048 - - New &Patch - + + 4096 + 4096 - - Alt+P - + + Displayed Resolution +(Ticks/Quarternote) + Résolution affichée +(Tics par 1/4 de note) - - New group - + + + 48 + 48 - - New &Group - + + + 96 + 96 - - Alt+G - + + + 192 + 192 - - Contro&ller - + + + 384 + 384 - - Common: - + + + 768 + 768 - - This is a list of commonly used midi controllers. -Note that in MusE pitch and program changes are -handled like normal controllers. - + + + 1536 + 1536 - - List of defined controllers - + + + 3072 + 3072 - - List of defined controllers. - + + + 6144 + 6144 - - Name - Nom + + + 12288 + 12288 - - Type - Type + + RTC Resolution +(Ticks/Sec) + Résolution RTC +(Tics par sec.) - - - H-Ctrl - H-Ctrl + + /sec + /sec - - - L-Ctrl - L-Ctrl + + GUI Refresh Rate + Vitesse de rafraîchissement de +l'interface - - Min + + Use project save dialog - - Max + + Some popup menus stay open (else hold Ctrl) - - Def - - - - - Midi controller name + + Allows some popup menus to stay open. +Otherwise, hold Ctrl to keep them open. - Type: - Type: + In some areas, the middle mouse button decreases +values, while the right button increases. Users without a +middle mouse button can select this option to make the +left button behave like the middle button in such areas. + - - - Midi controller type + + Use left mouse button for decreasing values - - Control7 - Control7 + + Shift + Right click sets left range marker + - - Control14 - Control8 + + Allow adding hidden tracks in track list menu + - - RPN - RPN + + Unhide tracks when adding hidden tracks + - - NRPN - NRPN + + + Smart focus + - - RPN14 + + After editing, controls will return + focus to their respective canvas - - NRPN14 + + GUI Style - - Pitch - Hauteur + + MDI-subwindowness and sharing menus + - - Program + + Presets: - - - Midi controller number high byte + + traditional MusE SDI - - Midi controller number low byte (* means drum controller) + + Cakewalk-like MDI - - Midi controller number low byte. -If low byte is * then the controller is a - 'drum controller'. For drum tracks and - GS/XG type songs and instruments. -Allows controllers for each instrument in - Muse's drum map. The low byte will be - replaced by the 'ANote' in the drum map. -Examples: The GS and XG instruments' - Drum controllers. + + Borland-/Mac-like MDI - - * - wild card - + + &Apply + &Appliquer - - Range: - + + &Ok + &Ok - - Min - + + &Cancel + &Annuler - - Minimum value. If negative, auto-translate. + + Application - - Minimum value. If the minimum value - is negative, the range will automatically - be translated to a positive range. - -Useful for controllers which should be - displayed with zero bias. For example, -'Pan': Minimum: -64 Maximum: 63 -True range: Min: 0 Max: 127 (bias = 64) -'CoarseTuning': Min: -24 Max: 23 -True range: Min: 40 Max: 87 (bias = 64) - -Bias is determined from controller type: -7-bit Controller7 / RPN: Bias = 64 -14-bit Controller14 / RPN14: Bias = 8192 - -Type 'Pitch' is the exception. It is biased - at zero, even with a negative minimum: -'Pitch': Min: -8192 Max: 8191 -True range: Min: -8192 Max: 8191 (bias 0) + + Views + - Max + + + + y-pos - - - Maximum value + + + + + show - - Default: + + + + + + x-pos - - L-Bank - L-Bank + + + + + height + - - - - - - off + + + + + width - - Progr. - Progr. + + Mixer A + - - ??? - ??? + + Mixer B + - - H-Bank - H-Bank + + Big Time + - - Default value. Off: No default. - + + Transport + Transport - - Default (initial) value. Off means no default. - -If a default value is chosen, the value will be sent - to the controller when the controller is added to - the song (in piano roll or event editor). When - the song is re-loaded, the value is sent again. -Otherwise the controller remains at its last value. -Controllers are also automatically added to a - song upon reception of a midi controller event. - -Caution! Watch out for controllers such as - 'Sustain' and 'ResetAllController' with default - values. You should probably turn 'off' their - default (in piano roll or drum edit, and - instrument editor). + + + + + + set current values - - off - dont care + + + + + + Cur - - Add common controller + + Start Muse - - &Add + + show splash screen - - Alt+A + + show "Did you know?" dialog - - Delete controller + + Start song - - Create a new controller + + start with last song - - New &Controller + + start with song - - Alt+C + + min. Slider Val - - Null Param Hi: + + Enable denormal protection - Null parameter number High byte + Enable output limiter - - - If set, these 'null' parameter numbers will - be sent after each RPN/NRPN event. -This prevents subsequent 'data' events - from corrupting the RPN/NRPN controller. -Typically, set to 127/127, or an unused - RPN/NRPN controller number. + + External Waveditor - - Lo: + + External Waveditor command - - Null parameter number Low byte + + Note: External editor opened from the internal editor. - - S&ysEx + + Dummy Audio Driver (settings require restart) - - SysEx List: + + Hz - - Hex Entry: + + Period size (Frames per period): - - New SysE&x + + + 16 + 16 + + + + Project directory - - Alt+X + + Projects: - - Tools - Outils + + + + ... + ... - - &File - &Fichier + + Main Window + - - &Help - &Aide + + Choose start song or template + - - &New - &Nouveau + + Reset to default + - - New - Nouveau + + start with template + - - Ctrl+N + + Start template or song: - - &Open... - &Ouvrir... + + Read MIDI Ports configuration from file, + or else automatically configure + - - Open - Ouvrir + + Read MIDI Ports configuration + - - Ctrl+O + + Try to use Jack Freewheel - - &Save + + Speeds bounce operations - Save + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. - - Ctrl+S + + VST in-place - - Save &As... - Sauvegarder &sous... + + Enable VST in-place processing (restart required) + - Save As - Sauvegarder sous + Enable VST in-place processing. Turn this off if + VST Ladspa effect rack plugins do not work or + feedback loudly, even if they are supposed to + be in-place capable. Setting requires a restart. + - - E&xit - &Quitter + + Minimum control period + - - Exit - Quitter + + Minimum audio controller process period (samples). + + - - - new item + + Minimum audio controller process period (samples). +Adjusts responsiveness of audio controls and + controller graphs. Set a low value for fast, smooth + control. If it causes performance problems, set a + higher value. - - - What's this? - + + 1 + 1 - - - EditMetaDialog - Time Position - Position temporelle + + 2 + 2 - Meta Type - Meta Type + + 4 + 4 - Enter Hex - Entrez en Hexa + + 8 + 8 - MusE: Enter Meta Event - MusE: Entrer un Evènement en Hexa + + + 32 + 32 - - - EditMetaDialogBase - MusE: Enter Meta Event - MusE: Entrer un Méta Evènement + + + 64 + 64 - OK - OK + + + 128 + 128 - Cancel - Annuler + + + 256 + 256 - TextLabel1 - TextLabel1 + + + 512 + 512 - Time Position: - Position temporelle + + Sample rate + - Meta Type: - Meta Type + + Shorter periods give better midi playback resolution. + - Enter Hex - Entrée Hexa + + 8192 + 5 1/3' {8192?} - - - EditNoteDialogBase - - MusE: Enter Note - Mus2: Entrer la Note + + 16384 + 5 1/3' {16384?} - - OK - OK + + 32768 + 5 1/3' {32768?} - - Cancel - Annuler + + Midi Resolution +(Ticks/Quarternote) + - - Length: - Longueur: + + GUI Behaviour + - - Time Position: - Position temporelle: + + Use old-style stop shortcut: + - - Pitch: - Hauteur + + Move single armed track with selection + - - Velocity On: - Vélocité On: + + On Launch + - - Velocity Off: - Vélocité Off: + + Behavior + - EditPAfterDialog + LegatoBase - Time Position - Position temporelle + + MusE: Legato + - Pitch - Hauteur + + Range + - Pressure - Pression + + All Events + Tous les Evènements - MusE: Enter Poly Aftertouch - Muse: Entrer la Pression polyphonique - - - - EditPitchDialog + + Selected Events + Evènements choisis + - Time Position - Editer la Position temporelle + + Looped Events + Evènements bouclés - Pitch - Hauteur + + Selected Looped + - MusE: Enter Pitch Shift - MusE: Entrez le décalage de Hauteur + + Settings + - - - EditSysexDialogBase - - MusE: Enter SysEx - MusE: Entrer le Sysex + + ticks + - - TimePosition: - Position temporelle + + Minimum Length + - - Comment: - Commentaire: + + Allow shortening notes + - + OK - OK + OK - + Cancel - Annuler + Annuler - EditToolBar + MITTransposeBase - Edit Tools - Outils d'Edition + + MusE: Midi Input Plugin: Transpose + MusE: Plugin d'Entrée Midi: +Transposition - - - EffectRack - effect rack - rack d'effets + + On + On - move up - Déplacer vers le haut + + TriggerKey + Note de Déclenchement - move down - Déplacer vers le bas + + Transpose: + Transposition: - remove - enlever + + +0 + +0 + + + MRConfigBase - bypass - direct + + MusE: Midi Input Plugin: Remote Control + MusE: Plugin d'Entrée Midi: Contrôle +Distant - show gui - montrer l'interface + + Activate + Activer - new - nouveau + + On + On - change - changement + + Actions + Actions - - - FLUIDGui - - FLUID: open Soundfile - + + Stop + Stop - - - FLUIDGuiBase - - Form1 - Form1 + + Record + Enregistre - - Soundfont - Set de Sons + + Goto Left Mark + Aller � la Marque Gauche - - Load - Charger + + Play + Jouer + + + + Insert rest (step rec) + - FLUIDSynthGuiBase + MdiSettingsBase - - FLUID Synth - FLUID Synth + + Form + - - Gain - Gain + + GroupBox + - - Room Size - Dimension de la chambre + + MDI subwin + - - Damping - Atténuation + + Shares menu when subwin + - - - Level - Niveau + + Shares menu when free + + + + MetronomeConfigBase - - Width - Largeur + + MusE: Metronome Config + MusE: Configuration du Métronome - - Speed - Vitesse + + Metronome + Métronome - - Depth - Profondeur + + Audio Beep + Bip audio - - Number - Nombre + + MIDI Click + Clic MIDI - - Type - Type + + Midi Channel + Canal Midi - - Sine - Sinusoide + + Measure Note + Note Mesure - - Triangle - Triangle + + Measure Velocity + Vélocité de la Mesure - - Reverb - Réverb + + Beat Velocity + Résolution (Beat) de la Vélocité - - Chorus - Chorus + + Beat Note + Note de Résolution (Beat) - Pop - Pop + + Midi Port + Port MIDI - Push - Pousser + + Precount + Pré-compte - ... - ... + + enable + activer - show fluidsynth controls - Montrer les contrôles de fluidsynth + + Bars + Mesures - - Load - charger + + From Mastertrack + de la Piste Principale - Save - Enregistrer + + / + / - - Delete - Effacer + + Signature + Signature - - Dump Info - + + Prerecord + Pré-enregistrement - - ID - + + Preroll + PreRoll - - Fontname - + + &Apply + &Appliquer - - Chnl - + + &OK + &Ok - - Soundfont - Set de Sons + + &Cancel + &Annuler - - Drum Chnl + + Choose outputs... - - CHANNEL SETUP - + + 50 + 5 1/3' {50?} - - LOADED SOUNDFONTS + + % Audio volume - - - FileDialogButtons - Form1 - Form1 + + Hint: Enable metronome in Transportpanel + - - Global - Global + + Alt+A + - - User - Utilisateur + + Alt+O + - - Project - Projet + + Alt+C + + + + MidiAudioControlBase - - fdialogbuttons + + Midi control - - Songdata + -Configuration + + Port: - - only -Songdata + + Channel: - - - FluidSynthGui - - Choose soundfont + + Control type: - - - FontSel - Size: - Taille: + + Control7 + Control7 - - - GateTimeBase - MusE: Modify Gate Time - MusE: modifier le temps de fermeture (Gate -Time) + + Control14 + Control8 - - Range - Entre + + RPN + RPN - - All Events - Tous les Evènements + + NRPN + NRPN - - Selected Events - Evènements choisis + + RPN14 + - - Looped Events - Evènements bouclés + + NRPN14 + - Selected & Looped - Boucle & sélectionnée + + Pitch + Hauteur - - MusE: Modify Note Length + + Program - - Selected Looped + + Hi: - - Values - Valeurs + + Lo: + - - Rate: - Vitesse: + + Learn + + + + MidiFilterConfigBase - - Offset: - Décalage: + + MusE: Midi Input Filter + MusE: Filtre Entrée Midi - - % - % + + Record Filter + Filtre d'Enregistrement - - lenNew = (lenOld * rate) + offset - + + + Note On + Note On - - OK - OK + + + Poly Pressure + Pression Poly - - Cancel - Annuler + + + Controller + Contrôle - - - GlobalSettingsDialogBase - - MusE: Global Settings - MusE: Paramètres + + + Program Change + Changement de son (Program Change) - - Audio - Audio + + + After Touch + Pression (After Touch) - - Mixer - Mixeur + + + Pitch Bend + Molette de modulation - Hauteur - - - dB - dB + + + Sysex + SysEx - - min. Meter Value - Métrage mini + + Thru Filter + Filtre Thru - min.Slider Val - Val. mini du Curseur + + Controller Filter + Filtre de contrôle - - Midi - Midi + + Channel Filter + Filtre Canal - - Ticks - Tics + + 14 + 14 - - - - 1024 - 1024 + + 10 + 10 - - - - 2048 - 2048 + + 6 + 6 - - 4096 - 4096 + + 12 + 12 - 8172 - 8172 + + 4 + 4 - - Displayed Resolution -(Ticks/Quarternote) - Résolution affichée -(Tics par 1/4 de note) + + 2 + 2 - - - 48 - 48 + + 9 + 9 - - - 96 - 96 - - - - - 192 - 192 - - - - - 384 - 384 - - - - - 768 - 768 + + 8 + 8 - - - 1536 - 1536 + + 3 + 3 - - - 3072 - 3072 + + 13 + 13 - - - 6144 - 6144 + + 15 + 15 - - - 12288 - 12288 + + 16 + 16 - - RTC Resolution -(Ticks/Sec) - Résolution RTC -(Tics par sec.) + + 7 + 7 - GUI - GUI + + 11 + 11 - - /sec - /sec + + 5 + 5 - - GUI Refresh Rate - Vitesse de rafraîchissement de -l'interface + + 1 + 1 + + + MidiInputTransformDialogBase - - Use project save dialog - + + MusE: Midi Input Transformator + MusE: Transformateur d'Entrée Midi - - Some popup menus stay open (else hold Ctrl) - + + Filter + Filtre - Allows some popup menus to stay open. -Otherwise, hold Ctrl to keep them open. - - - - - In some areas, the middle mouse button decreases -values, while the right button increases. Users without a -middle mouse button can select this option to make the -left button behave like the middle button in such areas. - - - - - Use left mouse button for decreasing values - - - - - Shift + Right click sets left range marker - - - - - Allow adding hidden tracks in track list menu - - - - - Unhide tracks when adding hidden tracks - + All + Tous - - GUI Style - + + + + + + Equal + Egal - - MDI-subwindowness and sharing menus - + + + + + + Unequal + Différent de - - Presets: - + + Note + Note - - traditional MusE SDI - + + + Poly Pressure + Pression Poly - - Cakewalk-like MDI - + + + Control Change + Contrôle de Changement - - Borland-/Mac-like MDI - + + + Aftertouch + Pression - - &Apply - &Appliquer + + + Pitch Bend + Molette de modulation - - &Ok - &Ok + + + NRPN + NRPN - - &Cancel - &Annuler + + + RPN + RPN - Help Browser: - Navigateur pour l'aide: + + + + Value 2 + Valeur 2 - - Application - + + + + + + Value 1 + Valeur 1 - - Views - + + + Event Type + Type d'Evènements - - - - - - y-pos - + + + + + Ignore + Ignore - - - - - show - + + + + + Higher + Plus Haut - - - - - - x-pos - + + + + + Lower + Plus Bas - - - - - height - - - - - - - - width - - - - - Mixer A - - - - - Mixer B - - - - - Big Time - - - - Arranger - Arrangeur - - - - Transport - Transport - - - - - - - - set current values - - - - - - - - - Cur - - - - - Start Muse - - - - - show splash screen - - - - - show "Did you know?" dialog - - - - - start song: - - - - - Start song - - - - - start with last song - - - - - start with template: default.med - - - - - start with song - - - - - min. Slider Val - - - - - Enable denormal protection - - - - - Enable output limiter - - - - - External Waveditor - - - - - External Waveditor command - - - - - Note: External editor opened from the internal editor. - - - - - Dummy Audio Driver (settings require restart) - - - - - Hz - - - - - Period size (Frames per period): - - - - - - 16 - 16 - - - - Project directory - - - - - Projects: - - - - - ... - ... - - - - Main Window - - - - - Try to use Jack Freewheel - - - - - Speeds bounce operations - - - - - Use Jack Freewheel mode if possible. -This dramatically speeds bounce operations. - - - - - VST in-place - - - - - Enable VST in-place processing (restart required) - - - - - Enable VST in-place processing. Turn this off if - VST Ladspa effect rack plugins do not work or - feedback loudly, even if they are supposed to - be in-place capable. Setting requires a restart. - - - - - Minimum control period - - - - - Minimum audio controller process period (samples). - - - - - - Minimum audio controller process period (samples). -Adjusts responsiveness of audio controls and - controller graphs. Set a low value for fast, smooth - control. If it causes performance problems, set a - higher value. - - - - - 1 - 1 - - - - 2 - 2 - - - - 4 - 4 - - - - 8 - 8 - - - - - 32 - 32 - - - - - 64 - 64 - - - - - 128 - 128 - - - - - 256 - 256 - - - - - 512 - 512 - - - - Sample rate - - - - - Shorter periods give better midi playback resolution. - - - - - 8192 - 5 1/3' {8192?} - - - - 16384 - 5 1/3' {16384?} - - - - 32768 - 5 1/3' {32768?} - - - - Midi Resolution -(Ticks/Quarternote) - - - - - GUI Behaviour - - - - - Use old-style stop shortcut: - - - - - Move single armed track with selection - - - - - On Launch - - - - - Behavior - - - - - LMaster - - new tempo - nouveau tempo - - - new signature - nouvelle signature - - - Meter - Métrage - - - Time - Temps - - - Type - Type - - - Value - Valeur - - - MusE: Mastertrack - MusE: Piste principale - - - Tempo - Tempo - - - Timesig - Signature Temporelle - - - panic - panique! - - - - LegatoBase - - - MusE: Legato - - - - - Range - - - - - All Events - Tous les Evènements - - - - Selected Events - Evènements choisis - - - - Looped Events - Evènements bouclés - - - - Selected Looped - - - - - Settings - - - - - ticks - - - - - Minimum Length - - - - - Allow shortening notes - - - - - OK - OK - - - - Cancel - Annuler - - - - ListEdit - - &Edit - &Edition - - - Cut - Couper - - - Copy - Copier - - - Paste - Coller - - - Delete Events - Effacer évènements - - - List Tools - Outils de Liste - - - Insert Tools - Outils d'Insertion - - - Insert Note - Insérer Note - - - insert Note - insére une note - - - Insert SysEx - Insérer SysEx - - - insert SysEx - insère une commande midi SysEx - - - Insert Ctrl - Insérer Ctrl - - - insert Ctrl - insére un caractère de Contrôle - - - Insert Meta - Insérer Meta - - - insert Meta - insére une balise Meta - - - Insert Pitch - Insérer Hauteur - - - insert Pitch - insére un changement de tonalité - - - Insert Channel Aftertouch - Insérer Canal de Pression - - - insert Channel Aftertouch - insére un canal de Pression (AfterTouch) - - - Insert Key Aftertouch - Insérer une note de Pression - - - insert Poly Aftertouch - insère une Pression (AfterTouch) -polyphonique - - - panic - panique! - - - Tick - Tic - - - Bar - Mesure - - - Typ - Typ - - - Ch - Can - - - Val A - Val A - - - Val B - Val B - - - Val C - Val C - - - Len - Lon - - - Comment - Commentaire - - - Type - Type - - - - MITTransposeBase - - - MusE: Midi Input Plugin: Transpose - MusE: Plugin d'Entrée Midi: -Transposition - - - - On - On - - - - TriggerKey - Note de Déclenchement - - - - Transpose: - Transposition: - - - - +0 - +0 - - - - MPConfig - - none - aucun - - - other raw ... - autre brut (raw)... - - - MusE: Midi Port Table - MusE: Table des ports Midi - - - Port - Port - - - GUI - GUI - - - Rec - Enr - - - Instrument - Instrument - - - Device Name - Nom du Périphérique - - - State - Etat - - - unknown - inconnu - - - Port Number - Numéro de port - - - Instrument connected to port - Instrument connecté au port - - - State: result of opening the device - Etat: résultat de l'ouverture du port - - - - MRConfigBase - - - MusE: Midi Input Plugin: Remote Control - MusE: Plugin d'Entrée Midi: Contrôle -Distant - - - - Activate - Activer - - - - On - On - - - - Actions - Actions - - - - Stop - Stop - - - - Record - Enregistre - - - - Goto Left Mark - Aller � la Marque Gauche - - - - Play - Jouer - - - - Insert rest (step rec) - - - - - MTScale - - bar scale - Echelle de la mesure - - - - MarkerView - - panic - panique! - - - Bar:Beat:Tick - Mesure:Résolution(Beat):Tic - - - Hr:Mn:Sc:Fr:Sf - Hr:Mn:Sc:Fr:Sf - - - Lock - Verrouillage - - - Text - Texte - - - Marker Properties - Propriétés du Marqueur - - - MusE: Marker - MusE: Marqueur - - - add marker - Ajouter marqueur - - - Add Marker - Ajoute un marqueur - - - delete marker - Effacer Marqueur - - - Delete Marker - Efface le marqueur - - - &File - &Fichier - - - &Edit - &Edition - - - edit tools - outils d'édition - - - - MasterEdit - - Cursor - Curseur - - - Snap - Aligne - - - time at cursor position - Temps à la position du curseur - - - panic - panique! - - - tempo at cursor position - Temps � la position du curseur - - - CurPos - PosCur - - - tempo at current position - tempo � la position en cours - - - time signature at current position - Signature temporelle à la position en cours - - - MusE: Mastertrack - MusE: PistePrincipale - - - edit tools - outils d'édition - - - EnableMaster - ActiverMaître - - - use master track - Utiliser la piste principale - - - Info - Info - - - Off - Off - - - - MdiSettingsBase - - - Form - - - - - GroupBox - - - - - MDI subwin - - - - - Shares menu when subwin - - - - - Shares menu when free - - - - - MetronomeConfigBase - - - MusE: Metronome Config - MusE: Configuration du Métronome - - - - Metronome - Métronome - - - - Audio Beep - Bip audio - - - - MIDI Click - Clic MIDI - - - - Midi Channel - Canal Midi - - - - Measure Note - Note Mesure - - - - Measure Velocity - Vélocité de la Mesure - - - - Beat Velocity - Résolution (Beat) de la Vélocité - - - - Beat Note - Note de Résolution (Beat) - - - - Midi Port - Port MIDI - - - - Precount - Pré-compte - - - - enable - activer - - - - Bars - Mesures - - - - From Mastertrack - de la Piste Principale - - - - / - / - - - - Signature - Signature - - - - Prerecord - Pré-enregistrement - - - - Preroll - PreRoll - - - - &Apply - &Appliquer - - - - &OK - &Ok - - - - &Cancel - &Annuler - - - - Choose outputs... - - - - - 50 - 5 1/3' {50?} - - - - % Audio volume - - - - - Hint: Enable metronome in Transportpanel - - - - - Alt+A - - - - - Alt+O - - - - - Alt+C - - - - - MidiControllerEditDialog - - MusE: save midi controller list - MusE: enregistrer la liste des contrôles -midi - - - MusE: load midi controller list - MusE: charger une liste de contrôles midi - - - - MidiControllerEditDialogBase - - MusE: Define Midi Controller - MusE: Définir un Contrôle Midi - - - replace controller set - remplacer le groupe de contrôles - - - merge controller set - ajouter le groupe de contrôles - - - save controller set as - Enregistrer le groupe de contrôles sous - - - Name - Nom - - - Type - Type - - - H-Ctrl - H-Ctrl - - - L-Ctrl - L-Ctrl - - - Min Val - Val Min - - - Max Val - Val Max - - - list of defined controllers - list des contrôles définis - - - This is the MusE list of defined controllers. - C'est la liste des contrôles qui ont été -définis. - - - Channel - Canal - - - Properties - Propriétés - - - Name - Nom - - - Max Value - Valeur Max - - - Pitch - Hauteur - - - Min Value - Valeur Mini - - - Control7 - Control7 - - - Control14 - Control8 - - - RPN - RPN - - - NRPN - NRPN - - - XG-SysEx - XG-SysEx - - - SysEx - SysEx - - - Type - Type - - - &New - &Nouveau - - - create new entry - Crée une nouvelle entrée - - - pressing the New button you create a new entry -in the MusE list of defined controllers - Crée une nouvelle entrée dans la liste des -contrôles - - - &Delete - &Effacer - - - delete selected entry - efface l'entrée sélectionnée - - - &OK - &Ok - - - &Cancel - &Annuler - - - - MidiFileConfig - - Enable extended smf format - Activer la prise en charge du format smf -étendu - - - Division - Division - - - Copyright - Copyright - - - Config exported Midi Files - Configuration de l'export en fichier -Midi - - - MusE: Config exported Midi Files - MusE: Configurer l'export en fichier -Midi - - - - MidiFilterConfigBase - - - MusE: Midi Input Filter - MusE: Filtre Entrée Midi - - - - Record Filter - Filtre d'Enregistrement - - - - - Note On - Note On - - - - - Poly Pressure - Pression Poly - - - - - Controller - Contrôle - - - - - Program Change - Changement de son (Program Change) - - - - - After Touch - Pression (After Touch) - - - - - Pitch Bend - Molette de modulation - Hauteur - - - - - Sysex - SysEx - - - - Thru Filter - Filtre Thru - - - - Controller Filter - Filtre de contrôle - - - - Channel Filter - Filtre Canal - - - - 14 - 14 - - - - 10 - 10 - - - - 6 - 6 - - - - 12 - 12 - - - - 4 - 4 - - - - 2 - 2 - - - - 9 - 9 - - - - 8 - 8 - - - - 3 - 3 - - - - 13 - 13 - - - - 15 - 15 - - - - 16 - 16 - - - - 7 - 7 - - - - 11 - 11 - - - - 5 - 5 - - - - 1 - 1 - - - - MidiInputTransformDialog - - New - Nouveau - - - - MidiInputTransformDialogBase - - - MusE: Midi Input Transformator - MusE: Transformateur d'Entrée Midi - - - - Filter - Filtre - - - - All - Tous - - - - - - - - Equal - Egal - - - - - - - - Unequal - Différent de - - - - Note - Note - - - - - Poly Pressure - Pression Poly - - - - - Control Change - Contrôle de Changement - - - - - Aftertouch - Pression - - - - - Pitch Bend - Molette de modulation - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - Value 2 - Valeur 2 - - - - - - - - Value 1 - Valeur 1 - - - - - Event Type - Type d'Evènements - - - - - - - Ignore - Ignore - - - - - - - Higher - Plus Haut - - - - - - - Lower - Plus Bas - - - - - - - Inside - A l'intérieur - - - - - - - Outside - Al'extérieur - - - - - Channel - Canal - - - - - Port - Port - - - - Processing - Travail - - - - - - - - Keep - Garder - - - - - - - - Fix - Fixer - - - - - - - Plus - Plus - - - - - - - Minus - Moins - - - - - - - Multiply - Multiplier - - - - - - - Divide - Diviser - - - - - - - Invert - Inverser - - - - ScaleMap - Echelle - - - - Flip - Retourner - - - - - - - Dyn - Dyn - - - - - - - Random - Aléatoire - - - - Modules - Modules - - - - 1 - 1 - - - - 2 - 2 - - - - 3 - 3 - - - - 4 - 4 - - - - enable modul 1 - Activer module 1 - - - - enable modul 2 - Activer module 2 - - - - enable modul 3 - Activer module 3 - - - - enable modul 4 - Activer module 4 - - - - Preset - Réglages enregistrés - - - - Name: - Nom: - - - - Comment: - Commentaires: - - - - Function - Fonction - - - - &New - &Nouveau - - - - create new preset - Crée un nouveau réglage - - - - &Delete - &Efface - - - - delete preset - efface un réglage - - - - &Dismiss - &Rejeter - - - - PresetList - Liste de Réglages - - - - MidiRawDeviceDialogBase - - MusE: raw midi device configuration - MusE: configuration des périphériques Midi - - - Name - Nom - - - Device - Périphérique - - - Type - Type - - - Virt. Ports - Ports virtuels - - - Speed - Vitesse - - - Handshaking - Méthode (handshaking) - - - Device Properties - Propriétés du périphérique - - - Virt.Ports - Ports virtuels - - - Raw Device - Périphérique pur (raw) - - - Serial Port - Port série - - - Pipe - Tuyau (Pipe) - - - Device Path - Chemin du périphérique - - - 9600 - 9600 - - - 19200 - 19200 - - - 38400 - 38400 - - - RTS/CTS - RTS/CTS - - - Xon/Xoff - Xon/Xoff - - - &New - &Nouveau - - - &Delete - &Effacer - - - &OK - &OK - - - &Cancel - &Annuler - - - - MidiStrip - - Var - Var - - - Rev - Rev - - - Cho - Cho - - - dB - dB - - - Pan - Pan - - - mute - silence - - - output routing - chemin de sortie (routing) - - - - MidiSyncConfig - - Port Number - Numéro de port - - - Port - Port - - - Device Name - Nom du Périphérique - - - m - m - - - MusE - MusE - - - &Apply - &Appliquer - - - &Abort - &Annuler - - - - MidiSyncConfigBase - - - MusE: Midi Sync - MusE: Synchro Midi - - - - Apply - Appliquer - - - - Ok - Ok - - - - Cancel - Annuler - - - - hour - heure - - - - h - h - - - - minute - minute - - - - m - m - - - - second - second - - - - s - s - - - - frame - trame (frame) - - - - f - f - - - - subframe - trame fine (subframe) - - - - 24 - 24 - - - - 25 - 25 - - - - 30D - 30D - - - - 30N - 30N - - - Id: - Id: - - - device id - Id. du périphérique - - - Port: - Port: - - - midi port - port midi - - - Sync Source - Source de la synchro - - - accept MTC - accepter MTC - - - accept Midi Clock - accepter Horloge Midi - - - accept MMC - accepter MMC - - - Sync Gen - Générer Synchro - - - Midi Time Code (MTC) - Code Temporel Midi (MTC) - - - Midi Clock - Horloge Midi - - - Midi Machine Control (MMC) - Contrôle Machine MIDI (MMC) - - - Sync Mode - Mode de synchro - - - Slave - Esclave - - - all - tous - - - - MTC - MTC - - - - Type: - Type: - - - - Offset: - Décalage: - - - - Sync receiving and sending - - - - - Send and receive Jack transport - - - - - Send and receive Jack transport information, - including stop, start and position. - - - - - Use Jack transport - - - - - Make MusE the Jack transport Timebase Master - - - - - Make MusE the Jack transport Timebase Master. -Allows Jack to show time as - MusE Bars, Beats, and Ticks. -MusE will try to become master, but other - Jack clients can also take over later. -You can always click here again for Master. - - - - - Jack transport Timebase Master - - - - - Control MusE timing by external midi clock or MTC sync - - - - - When in slave mode, tempo is - controlled externally. -MusE can sync to midi clock, or MTC quarter frame sync. -Enabled inputs in the list will - be in effect (RMC, RMMC, RMTC). - - - - - Slave to external sync - - - - - Send start to first clock delay - - - - - Allows 'slow sync' devices time - to synchronize to MusE. This value is the - delay from sending start to sending - the first clock. - - - - - ms - - - - - Send sync delay - - - - - Note: Sync delay and MTC sync currently not fully implemeted - - - - - MidiTrackInfoBase - - - MusE: TrackInfo - MusE: InfoPiste - - - - output channel - canal de sortie - - - all midi events are send to this output channel - tous les évènements midi seront envoyés vers cette -sortie - - - Track Info - Info Piste - - - - - % - % - - - Track Name - Nom de Piste - - - - output port - port de sortie (Output Ch.) - - - - iR - - - - - - - - - - - off - off - - - change stereo position - changer la position stéréo - - - OCh. - OCh. - - - MidiThru - MidiThru - - - ??? - ??? - - - select instrument patch - choisissez le groupe d'instruments - - - - Transp. - Transp. - - - Volume - Volume - - - - Channel Info - Info canal - - - - Rec: - - - - - Prog - - - - - Vol - - - - - Pan - Pan - - - - Delay - Délai - - - - H-Bank - H-Bank - - - - Compr. - Compr. - - - - L-Bank - L-Bank - - - Progr. - Progr. - - - - Velocity - Vélocité - - - - Length - Longueur - - - input ports - ports d'entrée (Input Ch.) - - - IChan. - IChan: - - - input channels - canaux d'entrée - - - Events from all configured channels are -recorded to this track. -You can specify more than one channel for -recording: - 1 2 3 record from channel 1 2 and 3 - 1-3 same - 1-3 5 record from channel 1 2 3 and 5 - Les évènements de tous les canaux -configurés sont enregistrés sur cette piste. -Vous pouvez spécifier plus d'un canal -pour l'enregistrement: - 1 2 3 enregistre depuis les canaux 1, 2 et 3 - 1-3 idem - 1-3 5 enregistre depuis les canaux 1, 2, 3 et -5 - - - - all midi events are sent to this output channel - - - - - Out ch - - - - - input routing - - - - Inputs - Entrées - - - - output routing - chemin de sortie (routing) - - - - oR - - - - - input detect - - - - - Input detect indicator. Detects all note on-off, controller, aftertouch, - program change, and pitchbend (but not sysex or realtime) events - on the selected channels, on the selected midi ports. - - - - - W - - - - - Midi thru - - - - - Pass input events through ('thru') to output. - - - - - Select instrument patch - - - - - <unknown> - - - - - Add all settings to song - - - - - All - Tous - - - - Bank Select MSB. Double-click on/off. - - - - - Bank Select LSB. Double-click on/off. - - - - - Program. Double-click on/off. - - - - - Add bank + prog settings to song - - - - - Volume. Double-click on/off. - - - - - Add vol setting to song - - - - - - Change stereo position. Double-click on/off. - - - - - Add pan setting to song - - - - - MidiTransformDialogBase - - - MusE: Midi Transformator - MusE: Transformateur Midi - - - - &New - &Nouveau - - - - &Delete - &Effacer - - - - &Apply - &Appliquer - - - - &OK - &Ok - - - - &Cancel - &Annuler - - - - PresetList - ListRéglages - - - - Processing - Transformations - - - - - Event Type - Type d'évènements - - - - - - - - Keep - Garder - - - - - - - Fix - Fixer - - - - - Note - Note - - - - - Poly Pressure - Pression Poly - - - - - Control Change - Changement de Contrôle - - - - - Aftertouch - Pression - - - - - Pitch Bend - Molette de modulation - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - - Plus - Addition - - - - - - - Minus - Soustraction - - - - - - - Multiply - Multiplication - - - - - - - Divide - Division - - - - - - Value 2 - Valeur 2 - - - - - Invert - Inverser - - - - ScaleMap - Echelle - - - - Flip - Retourner - - - - - Dyn - Dyn - - - - - Random - Aléatoire - - - - - - Value 1 - Valeur 1 - - - - - Length - Longueur - - - - Position - Position - - - - Filter - Filtre - - - - All - Tous - - - - - - - - Equal - Egal - - - - - - - - Unequal - Différent - - - - - - - Ignore - Ignore - - - - - - - Higher - Plus haut - - - - - - - Lower - Plus bas - - - - - - - Inside - A l'intérieur - - - - - - - Outside - A l'extérieur - - - - Bar Range - Type de mesure - - - - Preset - Réglages - - - - Name: - Nom: - - - - Comment: - Commentaire: - - - - Range - Type - - - - process all events - Transformer tous les évènements - - - - selected tracks - pistes sélectionnées - - - - inside loop - dans la boucle - - - - Function - fonction - - - - Select - Sélectionner - - - - Quantize - Quantiser - - - - Delete - Effacer - - - - Transform - Transformer - - - - Insert - Insérer - - - - Copy - Copier - - - - Extract - Extraire - - - - Quantize Value - Valeur de Quantisation - - - - MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Fichiers Wave (*.wav);;Tous les Fichiers (*) - - - - MixdownFileDialogBase - - - MusE: Set Mixdown Wavefile - MusE: Fichier wav pour mixage - - - - &OK - &OK - - - - &Cancel - &Annuler - - - - File Path - Chemin d'accés - - - - Channel - Canal - - - - Stereo - Stéréo - - - - Mono - Mono - - - - 5.1 - 5.1 - - - - wav,16 Bit - wav,16 Bit - - - - wav, 24 Bit - wav, 24 Bit - - - - wav, 32 Bit (float) - wav, 32 Bit (flottant) - - - - Format - Format - - - - Mixer - - Mute - Muet - - - MusE: Midi Mixer - MusE: Mixeur Midi - - - Rev - Rev - - - Cho - Cho - - - Var - Var - - - Pan - Pan - - - Port - Port - - - - MoveBase - - - MusE: Move Notes - - - - - Range - - - - - All Events - Tous les Evènements - - - - Selected Events - Evènements choisis - - - - Looped Events - Evènements bouclés - - - - Selected Looped - - - - - Value - Valeur - - - - Move by - - - - - ticks - - - - - OK - OK - - - - Cancel - Annuler - - - - MusE - - &File - &Fichier - - - Open &Recent - Ouvrir &Récent - - - Save &As - Enregistrer &Sous - - - Config &Printer - Configuration Im&primante - - - Import Midifile - Importer fichier MIDI - - - Export Midifile - Exporter fichier MIDI - - - Import Wave File - Importer fichier WAV - - - &Quit - &Quitter - - - &Edit - &Edition - - - C&ut - Co&uper - - - &Copy - &Copier - - - &Paste - Co&ller - - - Delete Track - Effacer Piste - - - Add Track - Ajouter Piste - - - Select &All - Selectionner &Tout - - - &Deselect All - &Dé-selectionner tout - - - Invert &Selection - Inverser la &Sélection - - - &Inside Loop - A l'&intérieur de la Boucle - - - &Outside Loop - A l'e&xtérieur de la Boucle - - - All &Parts on Track - Tous les &bouts de la Piste - - - Select - Sélectionner - - - Drums - Batterie - - - List - Liste - - - Graphic - Graphique - - - Mastertrack - PistePrincipale - - - Midi &Transform - &Transformation MIDI - - - Modify Gate Time - Modifier la Durée du Pont (Gate Time) - - - Modify Velocity - Modifier la vélocité - - - Crescendo - Crescendo - - - Transpose - Transposition - - - Thin Out - Sortie fine - - - Erase Event - Effacer évènements - - - Note Shift - Décalage de note - - - Move Clock - Décalage horloge - - - Copy Measure - Copier la mesure - - - Erase Measure - Effacer la mesure - - - Delete Measure - Supprimer la mesure - - - Create Measure - Créer une mesure - - - Mix Track - Mixeur Piste - - - Midi - MIDI - - - &Structure - &Structure - - - Global Cut - Couper tout - - - Global Insert - Insérer tout - - - Global Split - Diviser Tout - - - Copy Range - Limites de Copie - - - Cut Events - Couper Evènements - - - &Display - &Affichage - - - Transport Panel - Panneau de Contrôle - - - Bigtime Window - Fenêtre GrandeHorloge - - - Don't Follow Song - Ne pas suivre la chanson - - - Follow Page - Défilement par page - - - Follow Continuous - Défilement fin - - - &Config - &Configuration - - - Global Settings - Paramètres Généraux - - - Follow Song - suivre la chanson - - - Metronome - Métronome - - - Midi Sync - Synchro MIDI - - - Midi File Config - Paramètres du fichier MIDI - - - Appearance Settings - Apparence - - - Soft Synthesizer - Synthétiseur virtuel - - - Midi Ports - Ports MIDI - - - Audio System - System Audio - - - Save Configuration - Sauvegarder la Configuration - - - Midi Input Transform - Transformations Entrée MIDI - - - Midi Input Filter - Filtres pour l'Entrée MIDI - - - Midi Remote Control - Contrôle MIDI à distance - - - Random Rhythm Generator - Générateur aléatoire de rythmes - - - &Midi - &MIDI - - - Mixer - Mixeur - - - Define Controller - Définir contrôles - - - Input Plugins - Plugins d'Entrée - - - Reset Instr. - Ré-initialisation des Instruments - - - Init Instr. - Init. Instr. - - - Local Off - Local Off - - - &Audio - &Audio - - - Cliplist - ListClip - - - Bounce to Track - Rebondir (bounce) sur la piste - - - Bounce to File - Rebondir (bounce) sur Fichier - - - Bounce - Rebondir (bounce) - - - &Help - &Aide - - - Browser - Navigateur - - - &About - &A propos - - - About&Qt - A propos de &Qt - - - What's &This - Qu'est-ce que c'es&t - - - MusE: load project - Muse: charger Projet - - - The current Project contains unsaved data -Save Current Project? - Le Projet en cours contient des données -non encore sauvegardées. Enregistrer? - - - &Save - &Enregistrer - - - &Nosave - &Pas d'enregistrement - - - &Abort - &Annuler - - - MusE: Save As - MusE: enregistrer sous - - - MusE: Import Midi - MusE: importer fichier MIDI - - - MusE: Export Midi - MusE: exporter fichier MIDI - - - Nothing to edit - Rien � éditer - - - New - Nouveau - - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Le Projet en cours contient des données non -sauvegardées. Voulez-vous l'enregistrer -avant d'en ouvrir un autre? - - - &Overwrite - Ec&raser - - - no help found at: - Pas d'aide trouvée ici: - - - MusE: Open Help - MusE: Ouvrir l'Aide - - - to import a audio file you have first to selecta audio -track - Pour importer un fichier AUDIO, sélectionner d'abord -une piste AUDIO - - - UndoRedo - AnnulerRefaire - - - undo - annuler - - - Und&o - &Annuler - - - redo - Refaire - - - Re&do - Re&faire - - - undo last change to song - Annuler le dernier changement sur la chanson - - - redo last undo - Refaire ce qui a été annulé en dernier - - - Transport - Transport - - - loop - boucle - - - Loop - Boucle - - - punchin - Punch-In - - - Punchin - Punch-In - - - punchout - Punch-Out - - - Punchout - Punch-Out - - - start - démarrer - - - Start - Démarrer - - - rewind - rembobiner - - - Rewind - Rembobiner - - - forward - avance - - - Forward - Avance - - - stop - stop - - - Stop - Stop - - - play - jouer - - - Play - Jouer - - - record - enregistrer - - - Record - Enregistrer - - - panic - panique! - - - Panic - Panique! - - - new - nouveau - - - &New - &Nouveau - - - open - ouvrir - - - &Open - &Ouvrir - - - save - enregistrer - - - pianoroll - rouleau Piano - - - Pianoroll - Rouleau-Piano - - - score - partition - - - Score - Partition - - - marker - marqueur - - - Marker - Marker - - - File Buttons - Boutons Fichiers - - - Unknown File Format - Format de fichier inconnu - - - none - aucun - - - MusE: Write File failed - MusE: échec de l'enregistrement - - - MusE: About - MusE: A propos - - - MusE: Song: - MusE: chanson - - - reading midifile - - lecture du fichier MIDI - - - - -failed - -Echec - - - MusE: Copy Range - MusE: limites de la copie - - - not implemented - Non-implémenté (désolé) - - - MusE: Cut Events - MusE: Couper Evènements - - - MusE: Bounce to Track - MusE: Rebondir sur la piste (bounce) - - - more than one target track selected - vous avez sélectionné plus d'une piste en -destination - - - wrong target track type, -select wave track as target - mauvais type de piste en destination, -choisissez une piste AUDIO en destination - - - no target track selected - vous n'avez pas sélectionné de piste de -destination - - - Wave - Forme d'Onde - - - -failed: - -échec: - - - - MusEApp::MusE - - Und&o - &Annuler - - - Re&do - Re&faire - - - undo last change to song - Annuler le dernier changement sur la chanson - - - redo last undo - Refaire ce qui a été annulé en dernier - - - Loop - Boucle - - - Punchin - Punch-In - - - Punchout - Punch-Out - - - Rewind - Rembobiner - - - Forward - Avance - - - Stop - Stop - - - Play - Jouer - - - Panic - Panique! - - - &New - &Nouveau - - - &Open - &Ouvrir - - - Open &Recent - Ouvrir &Récent - - - Save &As - Enregistrer &Sous - - - Import Midifile - Importer fichier MIDI - - - Export Midifile - Exporter fichier MIDI - - - Import Wave File - Importer fichier WAV - - - &Quit - &Quitter - - - Transport Panel - Panneau de Contrôle - - - Bigtime Window - Fenêtre GrandeHorloge - - - Cliplist - ListClip - - - Input Plugins - Plugins d'Entrée - - - Transpose - Transposition - - - Midi Input Transform - Transformations Entrée MIDI - - - Midi Input Filter - Filtres pour l'Entrée MIDI - - - Midi Remote Control - Contrôle MIDI à distance - - - Reset Instr. - Ré-initialisation des Instruments - - - Init Instr. - Init. Instr. - - - Local Off - Local Off - - - Bounce to Track - Rebondir (bounce) sur la piste - - - Bounce to File - Rebondir (bounce) sur Fichier - - - Global Settings - Paramètres Généraux - - - Follow Song - suivre la chanson - - - Don't Follow Song - Ne pas suivre la chanson - - - Follow Page - Défilement par page - - - Follow Continuous - Défilement fin - - - Metronome - Métronome - - - Midi Sync - Synchro MIDI - - - Appearance Settings - Apparence - - - Transport - Transport - - - &File - &Fichier - - - &Midi - &MIDI - - - &Audio - &Audio - - - &Help - &Aide - - - MusE: Song: - MusE: chanson - - - MusE: load project - Muse: charger Projet - - - MusE: Write File failed - MusE: échec de l'enregistrement - - - The current Project contains unsaved data -Save Current Project? - Le Projet en cours contient des données -non encore sauvegardées. Enregistrer? - - - MusE: Save As - MusE: enregistrer sous - - - Nothing to edit - Rien � éditer - - - MusE: Bounce to Track - MusE: Rebondir sur la piste (bounce) - - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Le Projet en cours contient des données non -sauvegardées. Voulez-vous l'enregistrer -avant d'en ouvrir un autre? - - - &Abort - &Annuler - - - MusE: Export Midi - MusE: exporter fichier MIDI - - - no help found at: - Pas d'aide trouvée ici: - - - MusE: Open Help - MusE: Ouvrir l'Aide - - - MusE: Import Midi - MusE: importer fichier MIDI - - - reading midifile - - lecture du fichier MIDI - - - - -failed: - -échec: - - - - MusEArranger::Arranger - - Enable Recording - Activer l'Enregistrement - - - Solo Indicator - Indicateur de Solo - - - Track Type - Type de Piste - - - Time Lock - Vérouillage d'Horloge - - - Arranger - Arrangeur - - - Cursor - Curseur - - - Snap - Aligne - - - Type - Type - - - NO - NON - - - GM - GM - - - GS - GS - - - XG - XG - - - midi song type - type de fichier midi - - - Pitch - Hauteur - - - midi pitch - hauteur midi - - - global midi pitch shift - transposition midi globale - - - Tempo - Tempo - - - midi tempo - tempo midi - - - N - N - - - TrackInfo - InfoPiste - - - R - R - - - M - M - - - S - S - - - C - C - - - Track - Piste - - - Port - Port - - - T - T - - - - MusEArranger::ArrangerView - - panic - panique! - - - C&ut - Co&uper - - - &Copy - &Copier - - - Add Track - Ajouter Piste - - - Select - Sélectionner - - - Select &All - Selectionner &Tout - - - &Deselect All - &Dé-selectionner tout - - - Invert &Selection - Inverser la &Sélection - - - &Inside Loop - A l'&intérieur de la Boucle - - - &Outside Loop - A l'e&xtérieur de la Boucle - - - All &Parts on Track - Tous les &bouts de la Piste - - - Score - Partition - - - Pianoroll - Rouleau-Piano - - - Drums - Batterie - - - List - Liste - - - Wave - Forme d'Onde - - - Mastertrack - PistePrincipale - - - Graphic - Graphique - - - Midi &Transform - &Transformation MIDI - - - Global Cut - Couper tout - - - Global Insert - Insérer tout - - - Global Split - Diviser Tout - - - &Structure - &Structure - - - Functions - Fonctions - - - Transpose - Transposition - - - New - Nouveau - - - - MusEArranger::PartCanvas - - Cannot copy/move/clone to different Track-Type - Ne peut copier/déplacer vers une type de Piste -différent - - - C&ut - Co&uper - - - &Copy - &Copier - - - rename - renommer - - - color - couleur - - - delete - effacer - - - split - séparer - - - de-clone - annuler-clônage - - - wave edit - édition wav - - - Cannot paste: multiple tracks selected - Ne peut coller: plusieurs pistes -sélectionnées - - - Cannot paste: no track selected - Ne peut coller: pas de piste choisie - - - Cannot paste: wrong data type - Ne peut coller: mauvais type de donnée - - - - MusEArranger::TList - - show gui - montrer l'interface - - - Drum - Batterie - - - - MusECore::Song - - - Jack shutdown! - - - - - Jack has detected a performance problem which has lead to -MusE being disconnected. -This could happen due to a number of reasons: -- a performance issue with your particular setup. -- a bug in MusE (or possibly in another connected software). -- a random hiccup which might never occur again. -- jack was voluntary stopped by you or someone else -- jack crashed -If there is a persisting problem you are much welcome to discuss it -on the MusE mailinglist. -(there is information about joining the mailinglist on the MusE - homepage which is available through the help menu) - -To proceed check the status of Jack and try to restart it and then . -click on the Restart button. - - - - - - Automation: - - - - - previous event - - - - - next event - - - - - - set event - - - - - - add event - - - - - - erase event - - - - - erase range - - - - - clear automation - - - - - Clear all controller events? - - - - - &Ok - &Ok - - - - &Cancel - - - - - MusE - external script failed - - - - - MusE was unable to launch the script, error message: -%1 - - - - - MusEGui - - - Select project directory - - - - - MusEGui::Appearance - - - Main application font, and default font for any - controls not defined here. - - - - - Mixer strips and effects racks. Midi track info panel. -Midi control panel entry box. - - - - - Transport controls. - - - - - Time scale upper, and time signature. -Controller graph and S/X buttons. - - - - - Time scale lower, and arranger part name overlay. - - - - - Tempo scale, and markers. - - - - - Mixer labels. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - - - - - Maximum mixer label auto-font-sizing font size. - - - - - Global opacity (opposite of transparency). - - - - - Standard - - - - - Custom - - - - - MusE: load image - MusE: charger une image - - - - Select style sheet - - - - - Qt style sheets (*.qss) - - - - - MusEGui::Arranger - - - Enable Recording - Activer l'Enregistrement - - - - Mute/Off Indicator - - - - - Solo Indicator - Indicateur de Solo - - - - Track Type - Type de Piste - - - - Track Name - - - - - Midi output channel number or audio channels - - - - - Midi output port or synth midi port - - - - - Time Lock - Vérouillage d'Horloge - - - - Automation parameter selection - - - - - Notation clef - - - - - Enable recording. Click to toggle. - - - - - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - - - - - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - - - - - Track type. Right-click to change - midi and drum track types. - - - - - Track name. Double-click to edit. -Right-click for more options. - - - - - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - - - - - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - - - - - Time lock - - - - - Notation clef. Select this tracks notation clef. - - - - - Arranger - Arrangeur - - - - Cursor - Curseur - - - - Off - - - - - Bar - Mesure - - - - Snap - Aligne - - - - Len - - - - - - song length - bars - - - - - Type - Type - - - - NO - NON - - - - GM - GM - - - - GS - GS - - - - XG - XG - - - - - midi song type - type de fichier midi - - - - Pitch - Hauteur - - - - midi pitch - hauteur midi - - - - global midi pitch shift - transposition midi globale - - - - Tempo - Tempo - - - - - midi tempo - tempo midi - - - - N - N - - - - TrackInfo - InfoPiste - - - - R - R - - - - M - M - - - - S - S - - - - C - C - - - - Track - Piste - - - - Port - Port - - - - Ch - - - - - T - T - - - - Automation - - - - - Clef - - - - - MusEGui::ArrangerView - - - MusE: Arranger - - - - - Undo/Redo tools - - - - - panic - panique! - - - - transport - - - - - C&ut - Co&uper - - - - &Copy - &Copier - - - - Copy in range - - - - - &Paste - - - - - Paste (show dialog) - - - - - Paste c&lone - - - - - Paste clone (show dialog) - - - - - &Insert Empty Measure - - - - - Delete Selected Tracks - - - - - Shrink selected parts - - - - - Expand selected parts - - - - - Clean selected parts - - - - - Add Track - Ajouter Piste - - - - Select - Sélectionner - - - - Select &All - Selectionner &Tout - - - - &Deselect All - &Dé-selectionner tout - - - - Invert &Selection - Inverser la &Sélection - - - - &Inside Loop - A l'&intérieur de la Boucle - - - - &Outside Loop - A l'e&xtérieur de la Boucle - - - - All &Parts on Track - Tous les &bouts de la Piste - - - - Score - Partition - - - - all tracks in one staff - - - - - one staff per track - - - - - New score window - - - - - Pianoroll - Rouleau-Piano - - - - Drums - Batterie - - - - - List - Liste - - - - Wave - Forme d'Onde - - - - Mastertrack - PistePrincipale - - - - Graphic - Graphique - - - - Midi &Transform - &Transformation MIDI - - - - Global Cut - Couper tout - - - - Global Insert - Insérer tout - - - - Global Split - Diviser Tout - - - - Global Cut - selected tracks - - - - - Global Insert - selected tracks - - - - - Global Split - selected tracks - - - - - &Edit - - - - - &Structure - &Structure - - - - Functions - Fonctions - - - - &Quantize Notes - - - - - Change note &length - - - - - Change note &velocity - - - - - Crescendo/Decrescendo - - - - - Transpose - Transposition - - - - Erase Events (Not Parts) - - - - - Move Events (Not Parts) - - - - - Set Fixed Note Length - - - - - Delete Overlapping Notes - - - - - Legato - - - - - Window &Config - - - - - - New - Nouveau - - - - MusEGui::AudioMixerApp - - - &Create - &Créer - - - - &View - - - - - Routing - - - - - Show Midi Tracks - - - - - Show Drum Tracks - - - - - Show Wave Tracks - - - - - Show Inputs - - - - - Show Outputs - - - - - Show Groups - - - - - Show Auxs - - - - - Show Synthesizers - - - - - MusEGui::AudioStrip - - - panorama - - - - - aux send level - - - - - Pan - Pan - - - - 1/2 channel - 1/2 canal - - - - Pre - Pre - - - - pre fader - post fader - pre fader - post fader - - - - dB - dB - - - - record - - - - - mute - silence - - - - record downmix - enregistrer mixdown - - - - - solo mode - - - - - off - - - - - iR - - - - - input routing - - - - - oR - - - - - output routing - chemin de sortie (routing) - - - - Off - - - - - Read - - - - - Touch - - - - - Write - - - - - automation type - - - - - MusEGui::BigTime - - - format display - - - - - bar - - - - - beat - - - - - - tick - - - - - minute - minute - - - - second - second - - - - - frame - trame (frame) - - - - subframe - trame fine (subframe) - - - - MusE: Bigtime - MusE: GrandChrono - - - - MusEGui::ClipListEdit - - - MusE: Clip List Editor - MusE: Editeur de la Liste de Clips - - - - Undo/Redo tools - - - - - panic - panique! - - - - transport - - - - - Window &Config - - - - - MusEGui::ComboQuant - - - - - Off - - - - - MusEGui::CtrlPanel - - - S - S - - - - select controller - Choisissez le contrôle - - - - X - - - - - remove panel - enlever le panneau - - - - manual adjust - - - - - double click on/off - - - - - off - - - - - - Velocity - Vélocité - - - - add new ... - - - - - - Instrument-defined - - - - - - Add ... - - - - - Others - - - - - Edit instrument ... - - - - - Common Controls - - - - - MusEGui::DrumEdit - - - - mute instrument - Rendre muet l'instrument - - - - - sound name - Nom du son - - - - - volume percent - - - - - - quantisation - quantisation - - - - - this input note triggers the sound - cette note en entrée déclenche le son - - - - - note length - longueur de note - - - - - this is the note which is played - - - - - output channel (hold ctl to affect all rows) - - - - - output port (hold ctl to affect all rows) - - - - - - shift + control key: draw velocity level 1 - - - - - - control key: draw velocity level 2 - - - - - - shift key: draw velocity level 3 - - - - - - draw velocity level 4 - - - - - output channel (ctl: affect all rows) - - - - - output port (ctl: affect all rows) - - - - - &File - &Fichier - - - - Load Map - Charger set de batterie - - - - Save Map - Enregistrer set de batterie - - - - Reset GM Map - - - - - &Edit - - - - - Cut - Couper - - - - Copy - Copier - - - - Copy events in range - - - - - Paste - Coller - - - - Paste (with Dialog) - - - - - Delete Events - - - - - &Select - &Sélectionner - - - - Select All - - - - - Select None - Dé-sélectionner - - - - Invert - Inverser - - - - Inside Loop - - - - - Outside Loop - - - - - Previous Part - - - - - Next Part - - - - - Fu&nctions - - - - - Re-order list - - - - - Set Fixed Length - - - - - Modify Velocity - Modifier la vélocité - - - - Crescendo/Decrescendo - + + + + + Inside + A l'intérieur - - Quantize - + + + + + Outside + Al'extérieur - - Erase Event - + + + Channel + Canal - - Move Notes - + + + Port + Port - - Delete Overlaps - + + Processing + Travail - - &Plugins - + + + + + + Keep + Garder - - Window &Config - + + + + + + Fix + Fixer - - Drum tools - + + + + + Plus + Plus - - Load Drummap - Charger Set de Batterie + + + + + Minus + Moins - - Store Drummap - Enregistrer Set de Batterie + + + + + Multiply + Multiplier - - Step Record - + + + + + Divide + Diviser - - Midi Input - + + + + + Invert + Inverser - - cursor tools - + + ScaleMap + Echelle - Set step size for cursor edit - + Flip + Retourner - - panic - panique! + + + + + Dyn + Dyn - - transport - + + + + + Random + Aléatoire - - ctrl - ctrl + + Modules + Modules - - Add Controller View - + + 1 + 1 - - M - M + + 2 + 2 - - Sound - Son + + 3 + 3 - - Vol - + + 4 + 4 - - QNT - QNT + + enable modul 1 + Activer module 1 - - E-Note - E-Note + + enable modul 2 + Activer module 2 - - Len - + + enable modul 3 + Activer module 3 - - A-Note - A-Note + + enable modul 4 + Activer module 4 - - Ch - + + Preset + Réglages enregistrés - - Port - Port + + Name: + Nom: - - LV1 - LV1 + + Comment: + Commentaires: - - LV2 - LV2 + + Function + Fonction - - LV3 - LV3 + + &New + &Nouveau - - LV4 - LV4 + + create new preset + Crée un nouveau réglage - - Muse: Load Drum Map - MusE: Charger Set de Batterie + + &Delete + &Efface - - MusE: Store Drum Map - MusE: Enregistrer Set de Batterie + + delete preset + efface un réglage - - Drum map - + + &Dismiss + &Rejeter - - Reset the drum map with GM defaults? - + + PresetList + Liste de Réglages - MusEGui::EditCAfterDialog - - - MusE: Enter Channel Aftertouch - MusE: Entrez le Canal de Pression -(AfterTouch) - + MidiSyncConfigBase - - Time Position - + + MusE: Midi Sync + MusE: Synchro Midi - - Pressure - Pression + + Apply + Appliquer - - - MusEGui::EditEventDialog - + Ok - Ok + Ok - + Cancel - Annuler + Annuler - - - MusEGui::EditInstrument - - - MusE: Create file failed - + + hour + heure - - MusE: Write File failed - MusE: échec de l'enregistrement + + h + h - - - MusE: Save Instrument Definition - + + minute + minute - - - Instrument Definition (*.idf) - + + m + m - - - MusE: Save instrument as - + + second + second - - Enter a new unique instrument name: - + + s + s - - The user instrument '%1' already exists. This will overwrite its .idf instrument file. -Are you sure? - + + frame + trame (frame) - - MusE: Bad instrument name - + + f + f - - Please choose a unique instrument name. -(The name might be used by a hidden instrument.) - + + subframe + trame fine (subframe) - - MusE: Bad patch name - + + 24 + 24 - - Please choose a unique patch name - + + 25 + 25 - - MusE: Bad patchgroup name - + + 30D + 30D - - Please choose a unique patchgroup name - + + 30N + 30N - - MusE: Bad controller name - + + MTC + MTC - - Please choose a unique controller name - + + Type: + Type: - - - MusE: Cannot add common controller - + + Offset: + Décalage: - - A controller named '%1' already exists. + + Sync receiving and sending - - A controller number %1 already exists. + + Send and receive Jack transport - - - MusE - MusE + + Send and receive Jack transport information, + including stop, start and position. + - - - The current Instrument contains unsaved data -Save Current Instrument? + + Use Jack transport - - - &Save + + Make MusE the Jack transport Timebase Master - - - &Nosave - &Pas d'enregistrement + + Make MusE the Jack transport Timebase Master. +Allows Jack to show time as + MusE Bars, Beats, and Ticks. +MusE will try to become master, but other + Jack clients can also take over later. +You can always click here again for Master. + - - &Abort - &Annuler + + Jack transport Timebase Master + - - - MusEGui::EditMetaDialog - - MusE: Enter Meta Event + + Control MusE timing by external midi clock or MTC sync - - Time Position + + When in slave mode, tempo is + controlled externally. +MusE can sync to midi clock, or MTC quarter frame sync. +Enabled inputs in the list will + be in effect (RMC, RMMC, RMTC). - - Meta Type - Meta Type + + Slave to external sync + - Enter Hex + Send start to first clock delay - - - MusEGui::EditPAfterDialog - - MusE: Enter Poly Aftertouch - Muse: Entrer la Pression polyphonique + + Allows 'slow sync' devices time + to synchronize to MusE. This value is the + delay from sending start to sending + the first clock. + - - Time Position + + ms - - Pitch - Hauteur + + Send sync delay + - - Pressure - Pression + + Note: Sync delay and MTC sync currently not fully implemented + - MusEGui::EditToolBar + MidiTrackInfoBase - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - Choisir l'Outil de Pointage: -avec l'outil de pointage vous pouvez: - choisir des pièces - déplacer des pièces - copier des pièces + + MusE: TrackInfo + MusE: InfoPiste - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - Choisir l'Outil Crayon -avec le crayon vous pouvez: - créer de nouvelles pièces - modifier la longueur des pièces + + output channel + canal de sortie - - select Delete Tool: -with the delete tool you can delete parts - choisir l'Outil Gomme: -avec la gomme vous pouvez effacer les pièces + + + % + % - - select Cut Tool: -with the cut tool you can split a part - Choisir l'Outil Ciseaux -avec les ciseaux vous pouver couper une pièce + + output port + port de sortie (Output Ch.) + + + + + + + + + + off + off - - select Glue Tool: -with the glue tool you can glue two parts - Choisir l'Outil Colle: -avec la colle vous pouvez coller deux pièces ensemble + + Transp. + Transp. - - select Score Tool: - - Choisir l'Outil Partition + + Channel Info + Info canal - - select Quantize Tool: -insert display quantize event - Choisir l'Outil Quantisation: -pour voir les marques de quantisation + + Rec: + - - select Drawing Tool - Choisir l'Outil de Dessin + + Bank Select MSB. Ctrl-double-click on/off. + - - select Muting Tool: -click on part to mute/unmute - Choisir l'Outil Silence: -cliquez sur une pièces pour la rendre muette ou pas. + + Bank Select LSB. Ctrl-double-click on/off. + - - Manipulate automation + + Program. Ctrl-double-click on/off. - - Cursor tool + + Prog - - pointer - pointeur + + Volume. Ctrl-double-click on/off. + - - pencil - crayon + + Vol + - - eraser + + + Change stereo position. Ctrl-double-click on/off. - - cutter - ciseaux + + Pan + Pan - - score - partition + + Delay + Délai - - glue - + + H-Bank + H-Bank - - quantize - quantisation + + Compr. + Compr. - - draw - dessin + + L-Bank + L-Bank - - mute parts - silence + + Velocity + Vélocité - - edit automation - + + Length + Longueur - - cursor + + all midi events are sent to this output channel - - Edit Tools - Outils d'Edition + + Out ch + - - - MusEGui::EffectRack - - effect rack - rack d'effets + + input routing + - - new - nouveau + + output routing + chemin de sortie (routing) - - change - changement + + input detect + - - move up - Déplacer vers le haut + + Input detect indicator. Detects all note on-off, controller, aftertouch, + program change, and pitchbend (but not sysex or realtime) events + on the selected channels, on the selected midi ports. + - - move down - Déplacer vers le bas + + W + - - remove - enlever + + Midi thru + - - bypass - direct + + Pass input events through ('thru') to output. + - - show gui - montrer l'interface + + Select instrument patch + - - show native gui + + <unknown> - - save preset + + Add all settings to song - - MusE: Save Preset - + + All + Tous - - Replace effect + + Add bank + prog settings to song - - Do you really want to replace the effect %1? + + Add vol setting to song - - - MusEGui::Header - - Track Info Columns + + Add pan setting to song - MusEGui::LMaster + MidiTransformDialogBase - - MusE: Mastertrack - + + MusE: Midi Transformator + MusE: Transformateur Midi + + + + &New + &Nouveau + + + + &Delete + &Effacer + + + + &Apply + &Appliquer + + + + &OK + &Ok - &Edit - + &Cancel + &Annuler - - Insert Tempo - + + PresetList + ListRéglages - - Insert Signature - + + Processing + Transformations - - Insert Key - + + + Event Type + Type d'évènements + + + + + + + + Keep + Garder + + + + + + + Fix + Fixer - - Edit Positon - + + + Note + Note - - Edit Value - + + + Poly Pressure + Pression Poly - - Delete Event - + + + Control Change + Changement de Contrôle - - Window &Config - + + + Aftertouch + Pression - - Undo/Redo tools - + + + Pitch Bend + Molette de modulation - - Edit tools - + + + NRPN + NRPN - - Tempo - Tempo + + + RPN + RPN - - Timesig - Signature Temporelle + + + + + Plus + Addition - - Key - + + + + + Minus + Soustraction - - new tempo - nouveau tempo + + + + + Multiply + Multiplication - - new signature - nouvelle signature + + + + + Divide + Division - - new key - + + + + Value 2 + Valeur 2 - - panic - panique! + + + Invert + Inverser - - transport - + + ScaleMap + Echelle - - Meter - Métrage + + Flip + Retourner - - Time - Temps + + + Dyn + Dyn - - Type - Type + + + Random + Aléatoire - - Value - Valeur + + + + Value 1 + Valeur 1 - - Reposition of the initial tempo and signature events is not allowed - + + + Length + Longueur - - MusE: List Editor - + + Position + Position - - Input error, conversion not OK or value out of range - + + Filter + Filtre - Reposition of tempo and signature events to start position is not allowed! - + All + Tous - - - MusEGui::ListEdit - - insert Note - insére une note + + + + + + Equal + Egal - - insert SysEx - insère une commande midi SysEx + + + + + + Unequal + Différent - - insert Ctrl - insére un caractère de Contrôle + + + + + Ignore + Ignore - - insert Meta - insére une balise Meta + + + + + Higher + Plus haut - - insert Channel Aftertouch - insére un canal de Pression (AfterTouch) + + + + + Lower + Plus bas - - insert Poly Aftertouch - insère une Pression (AfterTouch) -polyphonique + + + + + Inside + A l'intérieur - - &Edit - + + + + + Outside + A l'extérieur - - Cut - Couper + + Bar Range + Type de mesure - - Copy - Copier + + Preset + Réglages - - Paste - Coller + + Name: + Nom: - - Delete Events - + + Comment: + Commentaire: - - Window &Config - + + Range + Type + + + + process all events + Transformer tous les évènements - Undo/Redo tools - + selected tracks + pistes sélectionnées - - Insert tools - + + inside loop + dans la boucle - - panic - panique! + + Function + fonction - - transport - + + Select + Sélectionner - - Tick - Tic + + Quantize + Quantiser - - Bar - Mesure + + Delete + Effacer - - Type - Type + + Transform + Transformer - - Ch - + + Insert + Insérer - - Val A - Val A + + Copy + Copier - - Val B - Val B + + Extract + Extraire - - Val C - Val C + + Quantize Value + Valeur de Quantisation + + + MixdownFileDialogBase - - Len - + + MusE: Set Mixdown Wavefile + MusE: Fichier wav pour mixage - - Comment - Commentaire + + &OK + &OK - - - MusEGui::MPConfig - - - Default input connections - + + &Cancel + &Annuler - - - Are you sure you want to apply to all existing midi tracks now? - + + File Path + Chemin d'accés - - - Default output connections - + + Channel + Canal - - - Setting will apply to new midi tracks. -Do you want to apply to all existing midi tracks now? - + + Stereo + Stéréo - - MusE: bad device name - + + Mono + Mono - - please choose a unique device name - + + 5.1 + 5.1 - - - in - + + wav,16 Bit + wav,16 Bit - - - out - + + wav, 24 Bit + wav, 24 Bit - - Show first aliases - + + wav, 32 Bit (float) + wav, 32 Bit (flottant) - - Show second aliases - + + Format + Format + + + MoveBase - - - Toggle all + + MusE: Move Notes - - - Change all tracks now + + Range - - Create Jack device - + + All Events + Tous les Evènements - - - Port Number - Numéro de port + + Selected Events + Evènements choisis - - Enable gui - + + Looped Events + Evènements bouclés - - Enable reading + + Selected Looped - - Enable writing - + + Value + Valeur - - Port instrument + + Move by - - Midi device name. Click to edit (Jack) + + ticks - - Connections from Jack Midi outputs - + + OK + OK - - Connections to Jack Midi inputs + + Cancel + Annuler + + + + MusECore::Song + + + Jack shutdown! - Auto-connect these channels to new midi tracks + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. - - Auto-connect new midi tracks to these channels + + + Automation: - - Auto-connect new midi tracks to this channel + + previous event - - Device state + + next event - - Enable gui for device + + + set event - - Enable reading from device + + + add event - - Enable writing to device + + + erase event - - Name of the midi device associated with this port number. Click to edit Jack midi name. + + erase range - - Instrument connected to port - Instrument connecté au port + + clear automation + - - Connections from Jack Midi output ports + + Midi control - Connections to Jack Midi input ports + Assign - - Auto-connect these channels, on this port, to new midi tracks. + + Clear - - Connect new midi tracks to these channels, on this port. + + Clear all controller events? - - Connect new midi tracks to this channel, on this port. - + + &Ok + &Ok - - State: result of opening the device - Etat: résultat de l'ouverture du port + + &Cancel + &Annuler - - Port - Port + + MusE: Tempo list + - GUI - GUI + External tempo changes were recorded. +Transfer them to master tempo list? + - - I + + MusE - external script failed - O + MusE was unable to launch the script, error message: +%1 + + + MusEGui::Appearance - - Instrument - Instrument + + Main application font, and default font for any + controls not defined here. + - Device Name - Nom du Périphérique + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + - In routes + Transport controls. - Out routes + Time scale upper, and time signature. +Controller graph and S/X buttons. - Def in ch + Time scale lower, and arranger part name overlay. - Def out ch + Tempo scale, and markers. - State - Etat + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + - - <unknown> + + Maximum mixer label auto-font-sizing font size. - - - <none> + + Global opacity (opposite of transparency). - - - MusEGui::MTScale - - bar scale + + Standard - - - MusEGui::MTScaleFlo - - bar scale + + Custom - - - MusEGui::MarkerView - - MusE: Marker - MusE: Marqueur + + Keep Qt system style + - - add marker - Ajouter marqueur + + MusE: load image + MusE: charger une image - - delete marker - Effacer Marqueur + + Select style sheet + - - &Edit + + Qt style sheets (*.qss) + + + MusEGui::Arranger - - Window &Config - + + Enable Recording + Activer l'Enregistrement - - Undo/Redo tools + + Mute/Off Indicator - - edit tools - outils d'édition + + Solo Indicator + Indicateur de Solo - - panic - panique! + + Track Type + Type de Piste - - transport + + Track Name - - Bar:Beat:Tick - Mesure:Résolution(Beat):Tic + + Midi output channel number or audio channels + - Hr:Mn:Sc:Fr:Sf - Hr:Mn:Sc:Fr:Sf + Midi output port or synth midi port + - Lock - Verrouillage + Time Lock + Vérouillage d'Horloge - Text - Texte + Automation parameter selection + + + + + Notation clef + - Marker Properties - Propriétés du Marqueur + Enable recording. Click to toggle. + - - - MusEGui::MasterEdit - - MusE: Mastertrack + + Mute indicator. Click to toggle. +Right-click to toggle track on/off. +Mute is designed for rapid, repeated action. +On/Off is not! - - Window &Config + + Solo indicator. Click to toggle. +Connected tracks are also 'phantom' soloed, + indicated by a dark square. - - Undo/Redo tools + + Track type. Right-click to change + midi and drum track types. - - panic - panique! + + Track name. Double-click to edit. +Right-click for more options. + - - transport + + Midi/drum track: Output channel number. +Audio track: Channels. +Mid/right-click to change. - - Enable master + + Midi/drum track: Output port. +Synth track: Assigned midi port. +Left-click to change. +Right-click to show GUI. - - Enable + + Time lock - Enable usage of master track + Notation clef. Select this tracks notation clef. - - Info - Info + + Arranger + Arrangeur - + Cursor Curseur - - time at cursor position - Temps à la position du curseur - - - - tempo at cursor position - Temps � la position du curseur - - - + Off @@ -11738,5320 +6492,5767 @@ Aligne - - CurPos - PosCur + + Len + Long + + + + + song length - bars + - tempo at current position - tempo � la position en cours + Type + Type - time signature at current position - Signature temporelle à la position en cours + NO + NON + + + + GM + GM + + + + GS + GS + + + + XG + XG - - - MusEGui::MidiInputTransformDialog - - New - Nouveau + + midi song type + type de fichier midi - - - MusEGui::MidiStrip - - - - off - + + Pitch + Hauteur - - - double click on/off - + + midi pitch + hauteur midi - - VariationSend - + + global midi pitch shift + transposition midi globale - - Var - Var + + Tempo + Tempo + - ReverbSend - + midi tempo + tempo midi - - Rev - Rev + + N + N - - ChorusSend - + + TrackInfo + InfoPiste - - Cho - Cho + + R + R - - dB - dB + + M + M - - Pan/Balance - + + S + S - - Pan - Pan + + C + C - - record - + + Track + Piste - - mute - silence + + Port + Port - - solo mode + + Ch - - iR - + + T + T - - input routing + + Automation - - oR + + Clef - - - output routing - chemin de sortie (routing) - - MusEGui::MidiSyncConfig - - - - Port Number - Numéro de port - + MusEGui::ArrangerView - - - Name of the midi device associated with this port number + + MusE: Arranger - - Midi clock input detected - + + C&ut + Co&uper - - Midi tick input detected - + &Copy + &Copier - - Midi real time input detected + + Copy in range - MMC input detected + &Paste - MTC input detected + Paste (show dialog) - Detected SMPTE format + Paste c&lone - Receive id number. 127 = Global. Double click to edit. + Paste clone (show dialog) - Accept midi clock input + &Insert Empty Measure - Accept midi real time input + Delete Selected Tracks - Accept MMC input + Duplicate Selected Tracks - - Accept MTC input + + Shrink selected parts - Receive start rewinds before playing + Expand selected parts - Transmit id number. 127 = Global. Double click to edit. + Clean selected parts - - Send midi clock output - + + Add Track + Ajouter Piste - - Send midi realtime output - + + Select + Sélectionner - - - Send MMC output - + + Select &All + Selectionner &Tout - - - Send MTC output - + + &Deselect All + &Dé-selectionner tout - - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - + + Invert &Selection + Inverser la &Sélection - - Midi realtime input detected, including - start/stop/continue, and song position. - + + &Inside Loop + A l'&intérieur de la Boucle - MMC input detected, including stop/play/deferred play, and locate. - + &Outside Loop + A l'e&xtérieur de la Boucle - - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - + + All &Parts on Track + Tous les &bouts de la Piste - - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - + + Score + Partition - - Receive id number. 127 = global receive all, even if not global. + + all tracks in one staff - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. + one staff per track - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. + New score window - - Accept MMC input, including stop/play/deferred play, and locate. - + + Pianoroll + Rouleau-Piano - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - + Drums + Batterie - - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - + + + List + Liste - - Transmit id number. 127 = global transmit to all. - + + Wave + Forme d'Onde - - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - + + Mastertrack + PistePrincipale - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - + Graphic + Graphique - - Port - Port + + Midi &Transform + &Transformation MIDI - - Device Name - Nom du Périphérique + + Global Cut + Couper tout - c - + Global Insert + Insérer tout - k - + Global Split + Diviser Tout - - r + + Global Cut - selected tracks - m - m + Global Insert - selected tracks + - t + Global Split - selected tracks - - type + + &Edit - - rid - + + &Structure + &Structure - - rc - + + Functions + Fonctions - rr + &Quantize Notes - rm + Change note &length - rt + Change note &velocity - rw + Crescendo/Decrescendo - tid - + Transpose + Transposition - tc + Erase Events (Not Parts) - tr + Move Events (Not Parts) - tm + Set Fixed Note Length - tt + Delete Overlapping Notes - - MusE - MusE - - - Settings have changed -Apply sync settings? + Legato - - &Apply - &Appliquer + + Window &Config + - - &No + + Configure &custom columns - - &Abort - &Annuler + + + New + Nouveau - - <none> + + Changed Settings - - - MusEGui::MidiTrackInfo - - - <unknown> + + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) - MusEGui::MidiTransformerDialog - - - - New - Nouveau - - - - MusEGui::MixdownFileDialog + MusEGui::AudioMixerApp - - Wave Files (*.wav);;All Files (*) - Fichiers Wave (*.wav);;Tous les Fichiers (*) + + &Create + &Créer - - - MusEGui::MusE - - - Failed to start audio! + + &View - - Was not able to start audio, check if jack is running. - + + Routing - - Timeout waiting for audio to run. Check if jack is running. - + + Show Midi Tracks - - Und&o - &Annuler - - - - Re&do - Re&faire - - - - undo last change to song - Annuler le dernier changement sur la chanson - - - redo last undo - Refaire ce qui a été annulé en dernier - - - - Loop - Boucle - - - - loop between left mark and right mark - Boucler entre les marqueurs gauche et droit + Show Drum Tracks + - - Punchin - Punch-In + + Show Wave Tracks + - - record starts at left mark - l'enregistrement démarre au marqueur -gauche + + Show Inputs + - - Punchout - Punch-Out + + Show Outputs + - - record stops at right mark - l'enregistrement s'arrète au marqueur -droit + + Show Groups + - - Start + + Show Auxs - - rewind to start position - revenir � la position de départ + + Show Synthesizers + + + + MusEGui::AudioStrip - - Rewind - Rembobiner + + panorama + - rewind current position - revenir � la position en cours + aux send level + - - Forward - Avance + + Pan + Pan - - move current position - déplacer la position en cours + + 1/2 channel + 1/2 canal - - Stop - Stop + + Pre + Pre - - stop sequencer - arréter le séquenceur + + pre fader - post fader + pre fader - post fader - - Play - Jouer + + dB + dB - - start sequencer play - démarrer la lecture du séquenceur + + record + - - Record - + + mute + silence - - to record press record and then play - pour enregistrer, presser Enregistrement (Record) puis -Lecture (Play) + + record downmix + enregistrer mixdown + - - Panic - Panique! + solo mode + - - send note off to all midi channels - envoyer ordre de relachement de note � tous les canaux -midi + + off + off - - &New - &Nouveau + + input routing + - - - Create New Song - Créer une nouvelle chanson + + output routing + chemin de sortie (routing) - - &Open - &Ouvrir + + Off + - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + + Read - - Open &Recent - Ouvrir &Récent + + Touch + - - - - &Save + + Write - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. + + automation type + + + MusEGui::BigTime - - Save &As - Enregistrer &Sous + + format display + - - Import Midifile - Importer fichier MIDI + + bar + - Export Midifile - Exporter fichier MIDI + beat + - Import Part + + tick - - - Import Wave File - Importer fichier WAV + + minute + minute - Find unused wave files - + second + second - - &Quit - &Quitter + + + frame + trame (frame) - - Song Info - + + subframe + trame fine (subframe) - - Transport Panel - Panneau de Contrôle + + MusE: Bigtime + MusE: GrandChrono + + + MusEGui::ClipListEdit - - Bigtime Window - Fenêtre GrandeHorloge + + MusE: Clip List Editor + MusE: Editeur de la Liste de Clips - - Mixer A + + Window &Config + + + MusEGui::ComboQuant - - Mixer B + + + + Off + + + MusEGui::CtrlCanvas - - Cliplist - ListClip + + Drawing hint: Hold Ctrl to affect only existing events + - - Marker View + + Use shift + pencil or line tool to draw new events + + + MusEGui::CtrlPanel - - Arranger View - + + S + S - - Fullscreen + + select controller + Choisissez le contrôle + + + + X - - &Plugins + + remove panel + enlever le panneau + + + + manual adjust - - Edit Instrument + + ctrl-double-click on/off - Input Plugins - Plugins d'Entrée + off + off - - Transpose - Transposition + + + Velocity + Vélocité - - Midi Input Transform - Transformations Entrée MIDI + + add new ... + - - Midi Input Filter - Filtres pour l'Entrée MIDI + + + Instrument-defined + - - Midi Remote Control - Contrôle MIDI à distance + + + Add ... + - - Rhythm Generator + + Others - - Reset Instr. - Ré-initialisation des Instruments + + Edit instrument ... + - - Init Instr. - Init. Instr. + + Common Controls + + + + MusEGui::DrumEdit - - Local Off - Local Off + + + mute instrument + Rendre muet l'instrument - - Bounce to Track - Rebondir (bounce) sur la piste + + + sound name + Nom du son - - Bounce to File - Rebondir (bounce) sur Fichier + + + volume percent + - - Restart Audio - + + + quantisation + quantisation - - Mixer Automation - + + + this input note triggers the sound + cette note en entrée déclenche le son - - Take Snapshot - + + + note length + longueur de note - - Clear Automation Data + + + this is the note which is played - - Cascade + + output channel (hold ctl to affect all rows) - Tile + output port (hold ctl to affect all rows) - In rows + + shift + control key: draw velocity level 1 - - In columns + + + control key: draw velocity level 2 - - Global Settings - Paramètres Généraux + + + shift key: draw velocity level 3 + - - Configure Shortcuts + + + draw velocity level 4 - - Follow Song - suivre la chanson + + output channel (ctl: affect all rows) + - Don't Follow Song - Ne pas suivre la chanson - - - - Follow Page - Défilement par page + output port (ctl: affect all rows) + - - Follow Continuous - Défilement fin + + &File + &Fichier - - Metronome - Métronome + + Load Map + Charger set de batterie - Midi Sync - Synchro MIDI + Save Map + Enregistrer set de batterie - Midi File Import/Export + Reset GM Map - - Appearance Settings - Apparence - - - - Midi Ports / Soft Synth + + &Edit - - &Manual - + + Cut + Couper - &MusE Homepage - + Copy + Copier - &Report Bug... + Copy events in range - &About MusE - + Paste + Coller - - File Buttons + + Paste (with Dialog) - - Undo/Redo + + Delete Events - - Transport - Transport - - - - &File - &Fichier + + &Select + &Sélectionner - - &View + + Select All - - &Midi - &MIDI - - - - &Audio - &Audio + + Select None + Dé-sélectionner - - A&utomation - + + Invert + Inverser - - &Windows + + Inside Loop - - MusE Se&ttings + + Outside Loop - - &Help - &Aide - - - - Cannot read template + + Previous Part - - File open error + + Next Part - - File read error + + Fu&nctions - - Unknown File Format: %1 + + Re-order list - - - - MusE: Song: %1 + + Set Fixed Length - - MusE: load project - Muse: charger Projet + + Modify Velocity + Modifier la vélocité - - MusE: load template + + Crescendo/Decrescendo - - MusE: Write File failed - MusE: échec de l'enregistrement - - - - The current Project contains unsaved data -Save Current Project? - Le Projet en cours contient des données -non encore sauvegardées. Enregistrer? + + Quantize + Quantiser - - - S&kip + + Erase Event - - &Cancel + + Move Notes - - MusE: Save As - MusE: enregistrer sous - - - - - Nothing to edit - Rien � éditer - - - - - - - - MusE: Bounce to Track - MusE: Rebondir sur la piste (bounce) + + Delete Overlaps + - - No wave tracks found + + &Plugins - - - No audio output tracks found + + Window &Config - - Select one audio output track, -and one target wave track + + Drum tools - - Select one target wave track - + + Load Drummap + Charger Set de Batterie - - Select one target wave track, -and one audio output track - + + Store Drummap + Enregistrer Set de Batterie - - - MusE: Bounce to File + + Step Record - - Select one audio output track + + Midi Input - - MusE: Bounce + + cursor tools - - set left/right marker for bounce range + + Set step size for cursor edit - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Le Projet en cours contient des données non -sauvegardées. Voulez-vous l'enregistrer -avant d'en ouvrir un autre? - - - - - &Abort - &Annuler + + ctrl + ctrl - - MusE: Export Midi - MusE: exporter fichier MIDI + + Add Controller View + - - no help found at: - Pas d'aide trouvée ici: + + M + M - - MusE: Open Help - MusE: Ouvrir l'Aide + + Sound + Son - - Unable to launch help + + Vol - For some reason MusE has to launch the default -browser on your machine. - + QNT + QNT - - MusE: Import Midi - MusE: importer fichier MIDI + + E-Note + E-Note - - Add midi file to current project? - - + + Len + Long - &Add to Project - + A-Note + A-Note - &Replace + Ch - - reading midifile - - lecture du fichier MIDI - - - - - -failed: - -échec: + + Port + Port - - Import part is only valid for midi and wave tracks! - + + LV1 + LV1 - - MusE: load part - + + LV2 + LV2 - - No track selected for import - - - - - %n part(s) out of %1 could not be imported. -Likely the selected track is the wrong type. - - - - - - %n part(s) could not be imported. -Likely the selected track is the wrong type. - - - + LV3 + LV3 - - to import an audio file you have first to selecta wave track - + + LV4 + LV4 - - Import Wavefile - + + Muse: Load Drum Map + MusE: Charger Set de Batterie - - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? - + + MusE: Store Drum Map + MusE: Enregistrer Set de Batterie - - &Yes + + Drum map - - &No + + Reset the drum map with GM defaults? - MusEGui::NoteInfo - - - Note Info - Info Note - + MusEGui::EditCAfterDialog - - Start - + + MusE: Enter Channel Aftertouch + MusE: Entrez le Canal de Pression +(AfterTouch) - - Len + + Time Position - - Pitch - Hauteur + + Pressure + Pression + + + MusEGui::EditEventDialog - - Velo On - Vélo on + + Ok + Ok - - Velo Off - Vélo off + + Cancel + Annuler - MusEGui::PartCanvas - - - Cannot copy/move/clone to different Track-Type - Ne peut copier/déplacer vers une type de Piste -différent - + MusEGui::EditInstrument - - C&ut - Co&uper + + + MusE: Create file failed + - - &Copy - &Copier + + MusE: Write File failed + MusE: échec de l'enregistrement - - s&elect + + + MusE: Save Instrument Definition - - clones + + + Instrument Definition (*.idf) - - rename - renommer - - - - color - couleur + + + MusE: Save instrument as + - - delete - effacer + + Enter a new unique instrument name: + - - split - séparer + + The user instrument '%1' already exists. This will overwrite its .idf instrument file. +Are you sure? + - - glue + + MusE: Bad instrument name - - de-clone - annuler-clônage + + Please choose a unique instrument name. +(The name might be used by a hidden instrument.) + - - - - save part to disk + + MusE: Bad patch name - - wave edit - édition wav + + Please choose a unique patch name + - - file info + + MusE: Bad patchgroup name - - MusE: save part + + Please choose a unique patchgroup name - - Part name: %1 -Files: + + MusE: Bad controller name - - - %n part(s) out of %1 could not be pasted. -Likely the selected track is the wrong type. - - - - - + - %n part(s) could not be pasted. -Likely the selected track is the wrong type. - - - + Please choose a unique controller name + - - Cannot paste: multiple tracks selected - Ne peut coller: plusieurs pistes -sélectionnées + + + MusE: Cannot add common controller + - - Cannot paste: no track selected - Ne peut coller: pas de piste choisie + + A controller named '%1' already exists. + - - Can only paste to midi/drum track + + A controller number %1 already exists. - - Can only paste to wave track + + + MusE + MusE + + + + + The current Instrument contains unsaved data +Save Current Instrument? - - Can only paste to midi or wave track + + + &Save - - Cannot paste: wrong data type - Ne peut coller: mauvais type de donnée + + + &Nosave + &Pas d'enregistrement + + + + &Abort + &Annuler - MusEGui::PasteDialog - - - %n quarter(s) - - - - + MusEGui::EditMetaDialog - - %1 quarter - for floating-point arguments like 1.5 + + MusE: Enter Meta Event - %1 quarters - for floating-point arguments like 1.5 + Time Position + + + + + Meta Type + Meta Type + + + + Enter Hex - MusEGui::PasteEventsDialog - - - %n quarter(s) - - - + MusEGui::EditPAfterDialog + + + MusE: Enter Poly Aftertouch + Muse: Entrer la Pression polyphonique - - %1 quarter - for floating-point arguments like 1.5 + + Time Position + + Pitch + Hauteur + + - %1 quarters - for floating-point arguments like 1.5 - + Pressure + Pression - MusEGui::PianoRoll + MusEGui::EditToolBar - - &Edit - + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Choisir l'Outil de Pointage: +avec l'outil de pointage vous pouvez: + choisir des pièces + déplacer des pièces + copier des pièces - - C&ut - Co&uper + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Choisir l'Outil Crayon +avec le crayon vous pouvez: + créer de nouvelles pièces + modifier la longueur des pièces - &Copy - &Copier + select Delete Tool: +with the delete tool you can delete parts + choisir l'Outil Gomme: +avec la gomme vous pouvez effacer les pièces - - Copy events in range - + + select Cut Tool: +with the cut tool you can split a part + Choisir l'Outil Ciseaux +avec les ciseaux vous pouver couper une pièce - - &Paste + + select Glue Tool: +with the glue tool you can glue two parts + Choisir l'Outil Colle: +avec la colle vous pouvez coller deux pièces ensemble + + + + select Score Tool: + + Choisir l'Outil Partition + + + + select Quantize Tool: +insert display quantize event + Choisir l'Outil Quantisation: +pour voir les marques de quantisation + + + + select Drawing Tool + Choisir l'Outil de Dessin + + + + select Muting Tool: +click on part to mute/unmute + Choisir l'Outil Silence: +cliquez sur une pièces pour la rendre muette ou pas. + + + + Manipulate automation - - Paste (with dialog) + + Cursor tool - - Delete &Events + + pointer + pointeur + + + + pencil + crayon + + + + eraser - - &Select - &Sélectionner + + cutter + ciseaux - - Select &All - Selectionner &Tout + + score + partition - - &Deselect All - &Dé-selectionner tout + + glue + - - Invert &Selection - Inverser la &Sélection + + quantize + quantisation - - &Inside Loop - A l'&intérieur de la Boucle + + draw + dessin - - &Outside Loop - A l'e&xtérieur de la Boucle + + mute parts + silence - - &Previous Part + + edit automation - - &Next Part + + cursor - - Fu&nctions - + + Edit Tools + Outils d'Edition + + + MusEGui::EffectRack - - Quantize - + + effect rack + rack d'effets - - Modify Note Length - + + new + nouveau - - Modify Velocity - Modifier la vélocité + + change + changement - - Crescendo/Decrescendo - + + move up + Déplacer vers le haut - - Transpose - Transposition + + move down + Déplacer vers le bas - - Erase Events - + + remove + enlever - - Move Notes - + + bypass + direct - - Set Fixed Length - + + show gui + montrer l'interface - - Delete Overlaps + + show native gui - - Legato + + save preset - - &Plugins + + MusE: Save Preset - - Window &Config + + Replace effect - - &Event Color + + Do you really want to replace the effect %1? + + + MusEGui::GlobalSettingsConfig - - &Blue + + MusE: Choose start template or song + + + MusEGui::Header - - &Pitch colors + + Track Info Columns + + + MusEGui::LMaster - - &Velocity colors + + MusE: Mastertrack - - Pianoroll tools + + &Edit - - Step Record + + Insert Tempo - - Midi Input + + Insert Signature - - Play Events - Jouer Evènements + + Insert Key + - - panic - panique! + + Edit Positon + - - transport + + Edit Value - - ctrl - ctrl + + Delete Event + - - Add Controller View + + Window &Config - - - MusEGui::PluginDialog - - MusE: select plugin - MusE: choisir plugin + + Edit tools + - - Lib - Lib + + Tempo + Tempo - Label - Label + Timesig + Signature Temporelle - Name - Nom + Key + - AI - AI + new tempo + nouveau tempo - AO - AO + new signature + nouvelle signature - CI - CI + new key + - - CO - CO + + Meter + Métrage - IP - IP + Time + Temps - id - id + Type + Type - Maker - Fabrique + Value + Valeur - - Copyright - Copyright + + Reposition of the initial tempo and signature events is not allowed + - - Ok - Ok + + MusE: List Editor + - - Cancel - Annuler + + Input error, conversion not OK or value out of range + - - Mono and Stereo + + Reposition of tempo and signature events to start position is not allowed! + + + MusEGui::ListEdit - - Stereo - Stéréo + + insert Note + insére une note - - Mono - Mono + + insert SysEx + insère une commande midi SysEx - - Show All - + + insert Ctrl + insére un caractère de Contrôle - - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - + + insert Meta + insére une balise Meta - - Search in 'Label' and 'Name': - + + insert Channel Aftertouch + insére un canal de Pression (AfterTouch) - - - MusEGui::PluginGui - - File Buttons + + insert Poly Aftertouch + insère une Pression (AfterTouch) +polyphonique + + + + &Edit - - Load Preset - Charger réglages + + Cut + Couper + + + + Copy + Copier - Save Preset - Enregistrer réglages + Paste + Coller - - bypass plugin - Plugin de Direct (bypass) - - - - MusE: load preset - MusE: charger réglages + Delete Events + - - Error reading preset. Might not be right type for this plugin + + Window &Config - - MusE: save preset - MusE: enregistrer réglages + + Insert tools + - - - MusEGui::ProjectCreateImpl - - Select directory - + + Tick + Tic - - - MusEGui::RoutePopupMenu - - - - - - - - - Channel - Canal + + Bar + Mesure - - - - Soloing chain - + + Type + Type - - - Audio returns + + Ch - - Warning: No input devices! - + + Val A + Val A - - Open midi config... - + + Val B + Val B - - - <none> - + + Val C + Val C - - Toggle all - + + Len + Long - - More... - + + Comment + Commentaire + + + MusEGui::MPConfig - - Audio sends + + + Default input connections - - Midi port sends + + + Are you sure you want to apply to all existing midi tracks now? - - - MusEGui::ScoreCanvas - - Treble + + + Default output connections - - Bass + + + Setting will apply to new midi tracks. +Do you want to apply to all existing midi tracks now? - - Grand Staff + + MusE: bad device name - - Remove staff + + please choose a unique device name - - Ambiguous part + + + in - - There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + + + out - - No part + + Show first aliases - - There are no parts you could add the note to. + + Show second aliases - - - MusEGui::ScoreEdit - - Undo/Redo tools + + + Toggle all - - Step recording tools + + + Change all tracks now - - Step Record + + Create Jack device - - panic - panique! + + + Port Number + Numéro de port - - transport + + Enable gui - - Note settings + + Enable reading - - Note length: + + Enable writing - - last + + Port instrument - - - Apply to new notes: + Midi device name. Click to edit (Jack) - - - Apply to selected notes: + + Connections from Jack Midi outputs - - Velocity: + + Connections to Jack Midi inputs - - Off-Velocity: + + Auto-connect these channels to new midi tracks - - Quantisation settings + + Auto-connect new midi tracks to these channels - Quantisation: + Auto-connect new midi tracks to this channel - - Pixels per whole: + + Device state - - &Edit + + Enable gui for device - - C&ut - Co&uper - - - - &Copy - &Copier + + Enable reading from device + - - Copy events in range + + Enable writing to device - - &Paste + + Name of the midi device associated with this port number. Click to edit Jack midi name. - - Paste (with dialog) - + + Instrument connected to port + Instrument connecté au port - - Delete &Events + + Connections from Jack Midi output ports - - &Select - &Sélectionner + + Connections to Jack Midi input ports + - Select &All - Selectionner &Tout + Auto-connect these channels, on this port, to new midi tracks. + - &Deselect All - &Dé-selectionner tout + Connect new midi tracks to these channels, on this port. + - - Invert &Selection - Inverser la &Sélection + + Connect new midi tracks to this channel, on this port. + - - &Inside Loop - A l'&intérieur de la Boucle + + State: result of opening the device + Etat: résultat de l'ouverture du port - - &Outside Loop - A l'e&xtérieur de la Boucle + + Port + Port - - Fu&nctions - + + GUI + GUI - - &Quantize + + I - Change note &length + O - Change note &velocity - + Instrument + Instrument - Crescendo/Decrescendo - + Device Name + Nom du Périphérique - Transpose - Transposition + In routes + - Erase Events + Out routes - Move Notes + Def in ch - Set Fixed Length + Def out ch - Delete Overlaps + State + Etat + + + + <unknown> - - Legato + + + <none> + + + MusEGui::MTScale - - Window &Config + + bar scale + + + MusEGui::MTScaleFlo - - Note head &colors + + bar scale + + + MusEGui::MarkerView + + + MusE: Marker + MusE: Marqueur + - &Black - + add marker + Ajouter marqueur - - &Velocity - + + delete marker + Effacer Marqueur - - &Part + + &Edit - - Set up &preamble + + Window &Config - - Display &key signature - + + edit tools + outils d'édition + + + + Bar:Beat:Tick + Mesure:Résolution(Beat):Tic - Display &time signature - + Hr:Mn:Sc:Fr:Sf + Hr:Mn:Sc:Fr:Sf - - Set Score &name - + + Lock + Verrouillage - - Enter the new score title + Text + Texte + + + + Marker Properties + Propriétés du Marqueur + + + + MusEGui::MasterEdit + + + MusE: Mastertrack - Error + Window &Config - - Changing score title failed: -the selected title is not unique + + Enable master - - - MusEGui::ScrollScale - - next page - page suivante + + Enable + - previous page - page précédente + Enable usage of master track + - - current page number - numéro de page courante + + Info + Info - - - MusEGui::ShortcutCaptureDialog - - Ok - Ok + + Cursor + Curseur - - Cancel - Annuler + + time at cursor position + Temps à la position du curseur - - Shortcut conflicts with %1 + + tempo at cursor position + Temps � la position du curseur + + + + Off + + Bar + Mesure + + + + Snap + Aligne + + - Undefined - + CurPos + PosCur - - - MusEGui::SigScale - - signature scale - Echelle de la signature + + tempo at current position + tempo � la position en cours + + + + time signature at current position + Signature temporelle à la position en cours - MusEGui::Strip + MusEGui::MidiInputTransformDialog - - Remove track? - + + + New + Nouveau - MusEGui::TList + MusEGui::MidiStrip - - <none> - + + + + off + off - - visible + + + ctrl-double-click on/off - - no clef + + VariationSend - - Treble - + + Var + Var - - Bass + + ReverbSend - - Grand - + + Rev + Rev - - MusE: bad trackname + + ChorusSend - - please choose a unique track name + + Cho + Cho + + + + dB + dB + + + + Pan/Balance - - Unused Devices - + + Pan + Pan - - - Update drummap? + + record - - Do you want to use same port for all instruments in the drummap? - + + mute + silence - - - &Yes + + solo mode - - - &No + + input routing - - - show gui - montrer l'interface + + output routing + chemin de sortie (routing) + + + MusEGui::MidiSyncConfig - - - show native gui - + + + Port Number + Numéro de port - - Treble clef + + + Name of the midi device associated with this port number - - Bass clef + + Midi clock input detected - Grand Staff + + Midi tick input detected - - Viewable automation + + Midi real time input detected - - Delete Track + + MMC input detected - Track Comment + MTC input detected - - Insert Track + + Detected SMPTE format - - Midi + + Receive id number. 127 = Global. Double click to edit. - Drum - Batterie - - - - Do you want to use same port and channel for all instruments in the drummap? + Accept midi clock input - - - MusEGui::TempoSig - - - Tempo/Sig - Tempo/Sig - - - - MusEGui::Toolbar1 - - - Off + Accept midi real time input - - Solo - Solo - - - - Cursor - Curseur - - - - Snap - Aligne - - - - MusEGui::TopWin - - - As subwindow + + Accept MMC input - - Shares tools and menu + + Accept MTC input - - Fullscreen + + Receive start rewinds before playing - - Piano roll + + Transmit id number. 127 = Global. Double click to edit. - List editor + Send midi clock output - Drum editor + Send midi realtime output - Master track editor + + Send MMC output - - Master track list editor + + + Send MTC output - - Wave editor + + Midi clock input detected. +Current port actually used is red. +Click to force a port to be used. - - Clip list + + Midi realtime input detected, including + start/stop/continue, and song position. - Marker view + MMC input detected, including stop/play/deferred play, and locate. - - Score editor + + MTC input detected, including forward quarter-frame sync and full-frame locate. +Current port actually used is red. Click to force a port to be current. - - Arranger - Arrangeur + + Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detects format of MTC quarter and full frame, and MMC locate. + - - <unknown toplevel type> + + Receive id number. 127 = global receive all, even if not global. - - - MusEGui::TrackComment - - MusE: Track Comment - Muse: Commentaire de Piste + + Accept midi clock input. Only one input is used for clock. +Auto-acquire: If two or more port realtime inputs are enabled, + the first clock detected is used, until clock is lost, + then another can take over. Best if each turns off its clock + at stop, so MusE can re-acquire the clock from another port. +Click on detect indicator to force another. + - Track Comment: - Commentaire de Piste: + Accept midi realtime input, including + start/stop/continue, and song position. +Non-clock events (start,stop etc) are + accepted by ALL enabled ports. +This means you may have several master + devices connected, and muse will accept + input from them. + - - - MusEGui::Transport - - Overdub - Sur-enregistrement (Overdub) + + Accept MMC input, including stop/play/deferred play, and locate. + - - Replace - Remplace + Accept MTC input, including forward quarter-frame sync and full-frame locate. +See 'rc' column for more help. + - - Rec Mode - Mode Enregistrement + + When start is received, rewind before playing. +Note: It may be impossible to rewind fast + enough to synchronize with the external device. + - - Normal - Normal + + Transmit id number. 127 = global transmit to all. + - Mix - Mix + Send midi clock output. If 'Slave to External Sync' is chosen, + muse can re-transmit clock to any other chosen ports. + - - Cycle Rec - Enr. Cycle + + Send midi realtime output, including start/stop/continue, + and song position. If 'Slave to external sync' is chosen, + muse can re-transmit midi realtime input messages to any + other chosen ports. This means you may have several slave + devices connected, and muse can re-send realtime messages + to any or all of them. + - - punchin - Punch-In + + Port + Port - loop - boucle - - - - punchout - Punch-Out + Device Name + Nom du Périphérique - - - Punch In - Punch-In + + c + - - - - Loop - Boucle + + + k + - - - Punch Out - Punch-Out + + r + - - Left Mark - Marque Gauche + + m + m - - Right Mark - Marque Droite + + t + - - rewind to start - rembobine au départ + + type + - Click this button to rewind to start position - Cliquez sur ce bouton pour revenir � la position de -départ + rid + - - rewind - rembobiner + + rc + - - Click this button to rewind - Cliquez sur ce bouton pour revenir en -arrière + + rr + - - forward - avance + + rm + - - Click this button to forward current play position - Cliquez sur ce bouton pour avancer dans la -lecture + + rt + - - stop - stop + + rw + - - Click this button to stop playback - Cliquez sur ce bouton pour arréter la -lecture + + tid + - - play - jouer + + tc + - Click this button to start playback - Cliquez sur ce bouton pour démarrer la -lecture + tr + - - record + + tm - Click this button to enable recording - Cliquez sur ce bouton pour activer -l'enregistrement + tt + - - AC - AC + + MusE + MusE - - quantize during record - quantise pendant l'enregistrement + + Settings have changed +Apply sync settings? + - Click - Clic + &Apply + &Appliquer - metronom click on/off - clic du métronome oui/non - - - - Sync - Synchro + &No + - external sync on/off - synchro externe oui/non + &Abort + &Annuler - - Jack + + <none> + + + MusEGui::MidiTrackInfo - - Jack transport sync on/off + + + <unknown> + + + MusEGui::MidiTransformerDialog - - Master - + + + New + Nouveau + + + MusEGui::MixdownFileDialog - - use master track - Utiliser la piste principale + + Wave Files (*.wav);;All Files (*) + Fichiers Wave (*.wav);;Tous les Fichiers (*) - MusEGui::VisibleTracks + MusEGui::MusE - - - Show wave tracks + + + Failed to start audio! - - - Show group tracks + + Was not able to start audio, check if jack is running. + - - - Show aux tracks + + Timeout waiting for audio to run. Check if jack is running. + - - - Show input tracks - + + Und&o + &Annuler - - - Show output tracks - + + Re&do + Re&faire - - - Show midi tracks - + + undo last change to song + Annuler le dernier changement sur la chanson - - - Show synth tracks - + + redo last undo + Refaire ce qui a été annulé en dernier - - Visible track types - + + Loop + Boucle - - - MusEGui::WaveEdit - - &Edit - + + loop between left mark and right mark + Boucler entre les marqueurs gauche et droit - - Func&tions - + + Punchin + Punch-In - - &Gain - + + record starts at left mark + l'enregistrement démarre au marqueur +gauche - 200% - 5 1/3' {200%?} + + Punchout + Punch-Out + + + + record stops at right mark + l'enregistrement s'arrète au marqueur +droit - 150% - 5 1/3' {150%?} + + Start + - 75% - 5 1/3' {75%?} + + rewind to start position + revenir � la position de départ - 50% - 5 1/3' {50%?} + + Rewind + Rembobiner - 25% - 5 1/3' {25%?} + + rewind current position + revenir � la position en cours - - Other - + + Forward + Avance - - &Copy - &Copier + + move current position + déplacer la position en cours - C&ut - Co&uper + Stop + Stop - - &Paste - + + stop sequencer + arréter le séquenceur - Edit in E&xternal Editor - + Play + Jouer - - Mute Selection - + + start sequencer play + démarrer la lecture du séquenceur - - Normalize Selection - + + Record + Enregistre - - Fade In Selection - + + to record press record and then play + pour enregistrer, presser Enregistrement (Record) puis +Lecture (Play) - Fade Out Selection - + + Panic + Panique! - - Reverse Selection - + + send note off to all midi channels + envoyer ordre de relachement de note � tous les canaux +midi - - Select - Sélectionner + + &New + &Nouveau - - Select &All - Selectionner &Tout + + + Create New Song + Créer une nouvelle chanson - - &Deselect All - &Dé-selectionner tout + + &Open + &Ouvrir - - Window &Config + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - - Wave edit tools - + + Open &Recent + Ouvrir &Récent - - transport + + + + &Save - - WaveEdit tools + + + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. - - Solo - Solo + + Save &As + Enregistrer &Sous - - Cursor - Curseur + + Import Midifile + Importer fichier MIDI - - - MusEGui::WaveView - - MusE - external editor failed - + + Export Midifile + Exporter fichier MIDI - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. + Import Part - - MusE - file size changed - + + + Import Wave File + Importer fichier WAV - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted + Find unused wave files - - - MusEMixer::AudioMixerApp - - &Create - &Créer - - - - MusEMixer::AudioStrip - Pan - Pan + + &Quit + &Quitter - 1/2 channel - 1/2 canal + + Song Info + - Pre - Pre + + Transport Panel + Panneau de Contrôle - pre fader - post fader - pre fader - post fader + + Bigtime Window + Fenêtre GrandeHorloge - dB - dB + + Mixer A + - mute - silence + + Mixer B + - record downmix - enregistrer mixdown + + Cliplist + ListClip - output routing - chemin de sortie (routing) + + Marker View + - - - MusEMixer::EffectRack - effect rack - rack d'effets + + Arranger View + - new - nouveau + + Fullscreen + - change - changement + + &Plugins + - move up - Déplacer vers le haut + + Edit Instrument + - move down - Déplacer vers le bas + + Input Plugins + Plugins d'Entrée - remove - enlever + + Transpose + Transposition - bypass - direct + + Midi Input Transform + Transformations Entrée MIDI - show gui - montrer l'interface + + Midi Input Filter + Filtres pour l'Entrée MIDI - - - MusEMixer::MidiStrip - Var - Var + + Midi Remote Control + Contrôle MIDI à distance - Rev - Rev + + Rhythm Generator + - Cho - Cho + + Reset Instr. + Ré-initialisation des Instruments - dB - dB + + Init Instr. + Init. Instr. - Pan - Pan + + Local Off + Local Off - mute - silence + + Bounce to Track + Rebondir (bounce) sur la piste - output routing - chemin de sortie (routing) + + Bounce to File + Rebondir (bounce) sur Fichier - - - MusEWidget::BigTime - minute - minute + + Restart Audio + - second - second + + Mixer Automation + - frame - trame (frame) + + Take Snapshot + - subframe - trame fine (subframe) + + Clear Automation Data + - MusE: Bigtime - MusE: GrandChrono + + Cascade + - - - MusEWidget::EditToolBar - Edit Tools - Outils d'Edition + + Tile + - - - MusEWidget::MidiSyncConfig - Port Number - Numéro de port + + In rows + - Port - Port + + In columns + - Device Name - Nom du Périphérique + + Global Settings + Paramètres Généraux - m - m + + Configure Shortcuts + - MusE - MusE + + Follow Song + suivre la chanson - &Apply - &Appliquer + + Don't Follow Song + Ne pas suivre la chanson - &Abort - &Annuler + + Follow Page + Défilement par page - - - MusEWidget::MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Fichiers Wave (*.wav);;Tous les Fichiers (*) + + Follow Continuous + Défilement fin - - - MusEWidget::NoteInfo - Note Info - Info Note + + Metronome + Métronome - Pitch - Hauteur + + Midi Sync + Synchro MIDI - Velo On - Vélo on + + Midi File Import/Export + - Velo Off - Vélo off + + Appearance Settings + Apparence - - - MusEWidget::RoutePopupMenu - Channel - Canal + + Midi Ports / Soft Synth + - - - MusEWidget::ScrollScale - next page - page suivante + + &Manual + - previous page - page précédente + + &MusE Homepage + - current page number - numéro de page courante + + &Report Bug... + - - - MusEWidget::ShortcutCaptureDialog - Ok - Ok + + &About MusE + - Cancel - Annuler + + Song Position + - - - MusEWidget::SigScale - signature scale - Echelle de la signature + + Tempo + Tempo - - - MusEWidget::Toolbar1 - Solo - Solo + + Signature + Signature - Cursor - Curseur + + File Buttons + - Snap - Aligne + + Undo/Redo + - - - MusEWidget::TrackComment - MusE: Track Comment - Muse: Commentaire de Piste + + Transport + Transport - Track Comment: - Commentaire de Piste: + + &File + &Fichier - - - NoteInfo - Start - Début + + &View + - Len - Long + + &Midi + &MIDI - Pitch - Hauteur + + &Audio + &Audio - Velo On - Vélo on + + A&utomation + - Velo Off - Vélo off + + &Windows + - Note Info - Info Note + + MusE Se&ttings + - - - OrganGuiBase - - MusE: Organ - MusE: Orgue + + &Help + &Aide - Presets - Presets + + About &Qt + - Set - Set + + Cannot read template + - load preset list - charger la liste des presets + + File open error + - save preset list - enregistrer la liste des presets + + File read error + - - O-1 - O-1 + + Unknown File Format: %1 + - - Oscillator - Oscillateur + + + + MusE: Song: %1 + - - Brass - Cuivres + + MusE: load project + Muse: charger Projet - - Reed - Roseau + + MusE: load template + - - Flute - Flûte + + MusE: Write File failed + MusE: échec de l'enregistrement - - Drawbars - Grands Tuyaux + + The current Project contains unsaved data +Save Current Project? + Le Projet en cours contient des données +non encore sauvegardées. Enregistrer? - - 16' - 16' + + + S&kip + - - 4' - 4' + + &Cancel + &Annuler - - 2 2/3' - 2 2/3' + + MusE: Save As + MusE: enregistrer sous - - 2' - 2' + + + Nothing to edit + Rien � éditer - - 8' - 8' + + + + + + MusE: Bounce to Track + MusE: Rebondir sur la piste (bounce) - - 5 1/3' - 5 1/3' + + No wave tracks found + - - Envelope Lo - Enveloppe basse (Lo) + + + No audio output tracks found + - Attack(ms) - Attaque (en ms) + + Select one audio output track, +and one target wave track + - Decay(ms) - Affaiblissement (ms) + + Select one target wave track + - Sustain(%) - Tenue (%) + + Select one target wave track, +and one audio output track + - Release(ms) - Relachement (ms) + + + MusE: Bounce to File + - - Envelope Hi - Enveloppe Haute (Hi) + + Select one audio output track + - - - Release - Relachement + + MusE: Bounce + - - - Sustain - Tenue + + set left/right marker for bounce range + - - - Decay - Affaiblissement + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Le Projet en cours contient des données non +sauvegardées. Voulez-vous l'enregistrer +avant d'en ouvrir un autre? - - - Attack - Attaque + + + &Abort + &Annuler - - - - - - - ms + + This will clear all automation data on + all audio tracks! +Proceed? - - - cB + + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? - - Velocity - Vélocité + + MusE: Export Midi + MusE: exporter fichier MIDI - - - PageSettings - Paper Size - Dimension de la feuille + + no help found at: + Pas d'aide trouvée ici: - user - utilisateur + + MusE: Open Help + MusE: Ouvrir l'Aide - Margins - Marges + + Unable to launch help + - Header - En-Tête + + For some reason MusE has to launch the default +browser on your machine. + - Title - Titre + + MusE: Import Midi + MusE: importer fichier MIDI - Author - Auteur + + Add midi file to current project? + + - Fonts - Polices + + &Add to Project + - Page No. - N° de page + + &Replace + - Measure No - N° de mesure + + reading midifile + + lecture du fichier MIDI + - Track Name - Nom de la Piste + + +failed: + +échec: - Lyrics - Paroles + + Import part is only valid for midi and wave tracks! + - Layout - Disposition + + MusE: load part + - Scale - Echelle + + No track selected for import + + + + + %n part(s) out of %1 could not be imported. +Likely the selected track is the wrong type. + + + + + + + %n part(s) could not be imported. +Likely the selected track is the wrong type. + + + - Flags - Drapeaux + + to import an audio file you have first to selecta wave track + - show page no. - Montrer la page N° + + Import Wavefile + - show measure no. - Montrer la mesure N° + + This wave file has a samplerate of %1, +as opposed to current setting %2. +Do you still want to import it? + - show track name - Montrer le nom des Pistes + + &Yes + - Ok - Ok + + &No + + + + MusEGui::NoteInfo - Apply - Appliquer + + Note Info + Info Note - Cancel - Annuler + + delta/absolute mode + - left Margin - Marge de gauche + + Start + - top Margin - Marge du haut + + Len + Long - right Margin - Marge de droite + + Pitch + Hauteur - bottom Margin - Marge du bas + + Velo On + Vélo on - Bars across the Page - Mesures par Page + + Velo Off + Vélo off - PartCanvas + MusEGui::PartCanvas + Cannot copy/move/clone to different Track-Type - Ne peut copier/déplacer vers une type de Piste + Ne peut copier/déplacer vers une type de Piste différent + C&ut - Co&uper + Co&uper + &Copy - &Copier + &Copier + + s&elect + + + + + clones + + + + rename - renommer + renommer + color - couleur + couleur + delete - effacer + effacer + split - séparer + séparer + glue - coller + + + + + super glue (merge selection) + + de-clone - annuler-clônage + annuler-clônage - pianoroll - rouleau-piano + + + + save part to disk + - score - partition + + wave edit + édition wav + + + + file info + - list - liste + + MusE: save part + - drums - batterie + + Part name: %1 +Files: + - wave edit - édition wav + + Remove selected + + + + + %n part(s) out of %1 could not be pasted. +Likely the selected track is the wrong type. + + + + + + + %n part(s) could not be pasted. +Likely the selected track is the wrong type. + + + + Cannot paste: multiple tracks selected - Ne peut coller: plusieurs pistes + Ne peut coller: plusieurs pistes sélectionnées + Cannot paste: no track selected - Ne peut coller: pas de piste choisie + Ne peut coller: pas de piste choisie + + + + Can only paste to midi/drum track + + + + + Can only paste to wave track + + + + + Can only paste to midi or wave track + - Cannot paste midi parts to wave track - Ne peut coller des bouts MIDI sur des pistes -AUDIO + + Cannot paste: wrong data type + Ne peut coller: mauvais type de donnée + + + + MusEGui::PasteDialog + + + %n quarter(s) + + + - Cannot paste wave parts to midi track - Ne peut copier des bouts AUDIO sur des pistes -MIDI + + %1 quarter + for floating-point arguments like 1.5 + - Cannot paste: wrong data type - Ne peut coller: mauvais type de donnée + + %1 quarters + for floating-point arguments like 1.5 + - PasteDialogBase - - - MusE: Paste Parts - + MusEGui::PasteEventsDialog + + + %n quarter(s) + + + - - Number and raster + + %1 quarter + for floating-point arguments like 1.5 - - insert + + %1 quarters + for floating-point arguments like 1.5 + + + MusEGui::PianoRoll - - times + + &Edit - - raster - + + C&ut + Co&uper - - ticks - + + &Copy + &Copier - - Move, Merge, Clone + + Copy events in range - - Move everything to the right + + &Paste - - Move only affected parts to the right + + Paste (with dialog) - - Put everything into a single track + + Delete &Events - - Merge with existing parts - + + &Select + &Sélectionner - - Insert as clones (where possible) - + + Select &All + Selectionner &Tout - - OK - OK + + &Deselect All + &Dé-selectionner tout - - Cancel - Annuler + + Invert &Selection + Inverser la &Sélection - - - PasteEventsDialogBase - - MusE: Paste Events - + + &Inside Loop + A l'&intérieur de la Boucle - - Number and raster - + + &Outside Loop + A l'e&xtérieur de la Boucle - - insert + + &Previous Part - - times + + &Next Part - - raster + + Fu&nctions - - - ticks - + + Quantize + Quantiser - - Paste options + + Modify Note Length - - Always into existing parts - + + Modify Velocity + Modifier la vélocité - - Never into existing parts + + Crescendo/Decrescendo - - Into existing parts if part has not -to be expanded by more than - + + Transpose + Transposition - - Put everything into the (selected) part + + Erase Events - - OK - OK - - - - Cancel - Annuler + + Move Notes + - - - PatchBay - MusE: ALSA MIDI Patch Bay - MusE: Baie de Patches MIDI ALSA + + Set Fixed Length + - - - PatchBayBase - ALSA Patch Bay - Baie de Patches ALSA + + Delete Overlaps + - - - PianoRoll - &Edit - &Edition + + Legato + - Cut - Couper + + &Plugins + - Copy - Copier + + Window &Config + - Paste - Coller + + &Event Color + - Delete Events - Effacer Evènements + + &Blue + - Select All - Sélectionner tout + + &Pitch colors + - Select None - Dé-sélectionner + + &Velocity colors + - Invert - Inverser + + Pianoroll tools + - Inside Loop - Dans la Boucle + + Step Record + - Outside Loop - Hors de la Boucle + + Midi Input + - &Select - &Sélectionner + + Play Events + Jouer Evènements - blue - bleu + + ctrl + ctrl - pitch colors - couleurs pour la hauteur + + Add Controller View + + + + MusEGui::PluginDialog - velocity colors - couleurs pour la vélocité + + MusE: select plugin + MusE: choisir plugin - &Config - &Configuration + + Type + Type - event color - couleur pour les évènements + + Lib + Lib - &Functions - &Fonctions + + Label + Label - Over Quantize - Plus de Quantisation + + Name + Nom - Note On Quantize - Quantisation Appui de Note + + AI + AI - Note On/Off Quantize - Quantisation Appui/Relachement de Note + + AO + AO - Iterative Quantize - Quantisation itérative + + CI + CI - Config Quant... - Config. Quant... + + CO + CO - Modify Gate Time - Modifier temps de fermeture (gate time) + + IP + IP - Modify Velocity - Modifier la vélocité + + id + id - Crescendo - Crescendo + + Maker + Fabrique - Transpose - Transposition + + Copyright + Copyright - Thin Out - Sortie fine + + Audio inputs + - Erase Event - Effacer Evènements + + Audio outputs + - Note Shift - Décalage de Note + + Control inputs + - Move Clock - Décalage temporel + + Control outputs + - Copy Measure - Copier mesure + + In-place capable + - Erase Measure - Effacer mesure + + ID number + - Delete Measure - Supprimer mesure + + Ok + Ok - Create Measure - Créer mesure + + Cancel + Annuler - Pianoroll Tools - Outils de piano-roll + + Show plugs: + - Step Record - Enregistrement pas-a-pas + + Mono and Stereo + - Midi Input - Entrée MIDI + + Stereo + Stéréo - Play Events - Jouer Evènements + + Mono + Mono - Add Controller View - Ajouter une vue de contrôles + + Show All + - ctrl - ctrl + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + - C&ut - Co&uper + + dssi synth + - &Copy - &Copier + + dssi effect + - Select &All - Selectionner &Tout + + ladspa + - &Deselect All - &Dé-selectionner tout + + Search in 'Label' and 'Name': + + + + MusEGui::PluginGui - Invert &Selection - Inverser la &Sélection + + File Buttons + - &Inside Loop - A l'&intérieur de la Boucle + + Load Preset + Charger réglages - &Outside Loop - A l'e&xtérieur de la Boucle + + Save Preset + Enregistrer réglages - panic - panique! + + + bypass plugin + Plugin de Direct (bypass) - - - PluginDialog - Ok - Ok + + MusE: load preset + MusE: charger réglages - Cancel - Annuler + + Error reading preset. Might not be right type for this plugin + - MusE: select plugin - MusE: choisir plugin + + MusE: save preset + MusE: enregistrer réglages + + + MusEGui::ProjectCreateImpl - Lib - Lib + + Select directory + + + + MusEGui::RoutePopupMenu - Label - Label + + + + + + + + + Channel + Canal - Name - Nom + + + + Soloing chain + - AI - AI + + + Audio returns + - AO - AO + + Warning: No input devices! + - CI - CI + + Open midi config... + - CO - CO + + + + + <none> + - IP - IP + + Toggle all + - id - id + + More... + - Maker - Fabrique + + Audio sends + - Copyright - Copyright + + Midi port sends + + + + MusEGui::ScoreCanvas - Stereo - Stéréo + + Treble + - Mono - Mono + + Bass + - - - PluginGui - bypass plugin - Plugin de Direct (bypass) + + Grand Staff + - MusE: load preset - MusE: charger réglages + + Remove staff + - MusE: save preset - MusE: enregistrer réglages + + Ambiguous part + - File Buttons - Boutons Fichier + + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + - Load Preset - Charger réglages + + No part + - Save Preset - Enregistrer réglages + + There are no parts you could add the note to. + - PrinterConfig + MusEGui::ScoreEdit - MusE: Config Printer - MusE: configuration de l'imprimante + + Step recording tools + - Print to file - Enregistrer dans un fichier + + Step Record + - Print Command - Commande d'impression + + Note settings + - Preview Command - Commande de Visualisation + + Note length: + - OK - OK + + last + - Cancel - Annuler + + + + Apply to new notes: + - - - ProjectCreate - - Create Project + + + Apply to selected notes: - - Projects folder: + + Velocity: - - - - ... - ... + + Off-Velocity: + - - Project Name: + + Quantisation settings - - Project is a Template + + Quantisation: - - Project song file type: + + Pixels per whole: - - Project Path to song file: + + &Edit - - Create project folder (recommended for audio projects) - + + C&ut + Co&uper - - Song information: - + + &Copy + &Copier - - - QHeader - Port Number - Numéro de port + + Copy events in range + - enable gui for device - Activer interface utilisateur pour ce -périphérique + + &Paste + - enables recording from the device - active enregistrement � partir du -périphérique + + Paste (with dialog) + - Instrument connected to port - Instrument connecté au port + + Delete &Events + - State: result of opening the device - Etat: résultat de l'ouverture du port + + &Select + &Sélectionner - mute instrument - Rendre muet l'instrument + + Select &All + Selectionner &Tout - sound name - Nom du son + + &Deselect All + &Dé-selectionner tout - quantisation -currently not used - quantisation -non-utilisé actuellement + + Invert &Selection + Inverser la &Sélection - this input note triggers the sound - cette note en entrée déclenche le son + + &Inside Loop + A l'&intérieur de la Boucle - note length - longueur de note + + &Outside Loop + A l'e&xtérieur de la Boucle - this note is send for the sound - Cette note est envoyée pour le son + + Fu&nctions + - output channel -currently not used - canal de sortie -actuellement non utilisé + + &Quantize + - output port -currently not used - port de sortie -actuellement non utilisé + + Change note &length + - velocity level 1 - vélocité niveau 1 + + Change note &velocity + - velocity level 2 - vélocité niveau 2 + + Crescendo/Decrescendo + - velocity level 3 - vélocité niveau 3 + + Transpose + Transposition - velocity level 4 - vélocité niveau 4 + + Erase Events + - quantisation - quantisation + + Move Notes + - output channel - canal de sortie + + Set Fixed Length + - output port - port de sortie + + Delete Overlaps + - Enable Recording - Activer l'Enregistrement + + Legato + - Track Activity - Activité des Pistes + + Window &Config + - Mute Indicator - Indicateur de Silence + + Note head &colors + - Solo Indicator - Indicateur de Solo + + &Black + - Track Type - Type de Piste + + &Velocity + - Track Name - Nom de la Piste + + &Part + - Output Channel Number - Numéro de Canal de Sortie + + Set up &preamble + - Output Port - Port de Sortie + + Display &key signature + - Time Lock - Vérouillage d'Horloge + + Display &time signature + - Solo/Pre Fader Listening - Ecoute Solo/Pre Fader + + Set Score &name + - Name of the midi device associated with this port -number - Nom du périphérique midi associé avec ce numéro de -port + + + Enter the new score title + - - - QObject - - + Error - - - Please first select the range for crescendo with the loop markers. + + Changing score title failed: +the selected title is not unique - QWidget - - Cannot transform non empty track - Ne peut transformer une piste non vide - - - Velocity - Vélocité - - - - - Cannot convert sysex string - Ne peut convertir le code sysex - + MusEGui::ScrollScale - - - Hex String too long (2048 bytes limit) - Code Hexa tro long (limite: 2048 octets) + + next page + page suivante - - generic midi - MIDI générique + + previous page + page précédente - - new - nouveau + + current page number + numéro de page courante + + + MusEGui::ShortcutCaptureDialog - - create peakfile for - créer fichier de crêtes pour + + Ok + Ok - - MusE: get file name - MusE: avoir le nom du fichier + + Cancel + Annuler - the directory - - le répertoire - + + Shortcut conflicts with %1 + - -does not exist -create? - n'existe pas. -Le créer? + + Undefined + + + + MusEGui::SigScale - &Create - &Créer + + signature scale + Echelle de la signature + + + MusEGui::SigToolbarWidget - Cancel - Annuler + + time signature at current position + Signature temporelle à la position en cours - - The directory -%1 -does not exist. -Create it? + + Signature: + + + MusEGui::Strip - - MusE: create directory - MusE: créer un répertoire - - - - creating dir failed - échec de la création du répertoire - - - - File -%1 -exists. Overwrite? + + Remove track? + + + MusEGui::TList - - Open File -%1 -failed: %2 + + <none> - File - - Fichier - + + visible + - -exists - -existe + + no clef + - - MusE: write - MusE: écriture + + Treble + - Overwrite - Ecrasement + + Bass + - Quit - Quitter + + Grand + - Open File - - Ouvrir Fichier - + + + off + off - -failed: - -échec: + + <unknown> + - - MusE: Open File - MusE: Ouvrir un Fichier + + MusE: bad trackname + - - - None + + please choose a unique track name - Input - Entrée + + Unused Devices + - Unknown - Inconnu + + + Update drummap? + - - No selection. Ignoring + + Do you want to use same port for all instruments in the drummap? - - - QuantBase - - MusE: Quantize + + + &Yes - - Range + + + &No - - All Events - Tous les Evènements + + + show gui + montrer l'interface - - Selected Events - Evènements choisis + + + show native gui + - - Looped Events - Evènements bouclés + + Midi control + - - Selected Looped + + Assign - - Values - Valeurs + + Clear + - - Strength: + + Treble clef - - % - % + + Bass clef + - - Threshold (ticks): + + Grand Staff - - Quantize Len + + Viewable automation - - Raster - Trame + + Internal + - - Whole + + Synth - - Half + + Delete Track - - 4th - + + Track Comment + Commentaire pour la Piste - - 4th Triplet + + Insert Track - - 8th - + + Midi + Midi - - 8th Triplet - + + Drum + Batterie - - 16th + + Do you want to use same port and channel for all instruments in the drummap? + + + MusEGui::TempoSig - - 16th Triplet - + + Tempo/Sig + Tempo/Sig + + + MusEGui::TempoToolbarWidget - - 32th - + + tempo at current position + tempo � la position en cours - - 32th Triplet + + Tempo: + + + MusEGui::Toolbar1 - - Swing: + + + + Off - - If the proposed change in tick or length is smaller than threshold, nothing is done. -If swing=0, this is normal -If swing is 33, you get a 2:1-rhythm. -If swing is -33, you get a 1:2-rhythm. - - + + Solo + Solo - - OK - OK + + Cursor + Curseur - - Cancel - Annuler + + Snap + Aligne - QuantConfig + MusEGui::TopWin - Config Quantize - Configuration de la Quantisation + + As subwindow + - Strength - Force + + Shares tools and menu + - Don´t Quantize - Ne pas quantiser + + Fullscreen + - Quant Len - Lon Quant + + Undo/Redo tools + - MusE: Config Quantize - MusE: Configuration de la Quantisation + + Panic + Panique! - - - QuantDialog - Display Quantize - Afficher Quantisation + + Transport + Transport - Position - Position + + Song Position + - Note Quantize - Quantisation de Note + + Tempo + Tempo - Rest Quantize - Quantisation des Silences + + Signature + Signature - Ok - Ok + + Piano roll + - Cancel - Annuler + + List editor + - - - RemoveBase - - MusE: Erase Notes + + Drum editor - - Range + + Master track editor - - All Events - Tous les Evènements + + Master track list editor + - - Selected Events - Evènements choisis + + Wave editor + - - Looped Events - Evènements bouclés + + Clip list + - - Selected Looped + + Marker view - - Thresholds + + Score editor - - ticks + + Arranger + Arrangeur + + + + <unknown toplevel type> + + + MusEGui::TrackComment - - Velocity - Vélocité + + MusE: Track Comment + Muse: Commentaire de Piste - - Length - Longueur + + Track Comment: + Commentaire de Piste: + + + MusEGui::Transport - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - + + Overdub + Sur-enregistrement (Overdub) + + + + + Replace + Remplace - - OK - OK + + Rec Mode + Mode Enregistrement - - Cancel - Annuler + + Normal + Normal - - - RhythmBase - MusE: Random Rhythm Generator - MusE: Générateur Aléatoire de Rythmes + + Mix + Mix - Instrument Properties - Propriétés des Instruments + + Cycle Rec + Enr. Cycle - counts/bar - battements/mesure + + punchin + Punch-In - steps/count - divisions/battements + + loop + boucle - # bars - # mesure + + punchout + Punch-Out - test - test + + + Punch In + Punch-In - contrib - contrib + + + Loop + Boucle - randomize - aléatoire + + + Punch Out + Punch-Out - Group 1 - Groupe 1 + + Left Mark + Marque Gauche - Group 2 - Groupe 2 + + Right Mark + Marque Droite - Group 3 - Groupe 3 + + rewind to start + rembobine au départ - Group 4 - Groupe 4 + + Click this button to rewind to start position + Cliquez sur ce bouton pour revenir � la position de +départ - Group 5 - Groupe 5 + + rewind + rembobiner - listen - écoute + + Click this button to rewind + Cliquez sur ce bouton pour revenir en +arrière - Instrument - Instrument + + forward + avance - &New - &Nouveau + + Click this button to forward current play position + Cliquez sur ce bouton pour avancer dans la +lecture - create new entry - créer une nouvelle entrée + + stop + stop - pressing the New button you create a new entry -in the MusE list of defined controllers - en appuyant sur Nouveau vous créez une nouvelle entrée -dans la liste des contrôles + + Click this button to stop playback + Cliquez sur ce bouton pour arréter la +lecture - &Delete - &Effacer + + play + jouer - delete selected entry - efface l'entrée sélectionnée + + Click this button to start playback + Cliquez sur ce bouton pour démarrer la +lecture - Up - Haut + + record + - Down - Bas + + Click this button to enable recording + Cliquez sur ce bouton pour activer +l'enregistrement - Instrument - Instrument + + AC + AC - steps/count - divisions/battement + + quantize during record + quantise pendant l'enregistrement - list of defined controllers - liste des contrôles définis + + Click + Clic - This is the MusE list of defined controllers. - Ceci est la liste des contrôles qui ont été -définis. + + metronom click on/off + clic du métronome oui/non - &File - &Fichier + + Sync + Synchro - &Edit - &Edition + + external sync on/off + synchro externe oui/non - &Help - &Aide + + Jack + - Tools - Outils + + Jack transport sync on/off + - New - Nouveau + + Master + - Open - Ouvrir + + use master track + Utiliser la piste principale + + + MusEGui::VisibleTracks - &Open... - &Ouvrir... + + + Show wave tracks + - Save - Sauvegarder + + + Show group tracks + - &Save - &Sauvegarder + + + Show aux tracks + - Save As - Sauvegarder sous + + + Show input tracks + - Save &As... - Sauvegarder &sous... + + + Show output tracks + - Print - Imprimer + + + Show midi tracks + - &Print... - Im&primer... + + + Show synth tracks + - Exit - Quitter + + Visible track types + + + + MusEGui::WaveEdit - E&xit - &Quitter + + &Edit + - Undo - Annuler + + Func&tions + - &Undo - &Annuler + + &Gain + - Redo - Refaire + + Other + - &Redo - &Refaire + + &Copy + &Copier - Cut - Couper + + C&ut + Co&uper - &Cut - Co&uper + + &Paste + - Copy - Copier + + Edit in E&xternal Editor + - C&opy - &Copier + + Mute Selection + - Paste - Coller + + Normalize Selection + - &Paste - C&oller + + Fade In Selection + + + + + Fade Out Selection + - Find - Rechercher + + Reverse Selection + - &Find... - &Rechercher... + + Select + Sélectionner - Contents - Contenus + + Select &All + Selectionner &Tout - &Contents... - Co&ntenus... + + &Deselect All + &Dé-selectionner tout - Index - Index + + Window &Config + - &Index... - &Index... + + WaveEdit tools + - About - A propos + + Solo + Solo - &About... - &A propos... + + Cursor + Curseur - RhythmGenerator + MusEGui::WaveView + + + MusE - external editor failed + + - Form3 - Form3 + + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + - Instrument Settings: - Réglages des Instruments: + + MusE - file size changed + - Instrument - Instrument + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + OrganGuiBase - Hi-Hat - Charley (Hi-Hat) + + MusE: Organ + MusE: Orgue - add - ajouter + + O-1 + O-1 - delete - effacer + + Oscillator + Oscillateur - steps/count - battements/division + + Brass + Cuivres - count/bar - divisions/mesure + + Reed + Roseau - # bars - # mesures + + Flute + Flûte - Group Settings: - Réglages des Groupes: + + Drawbars + Grands Tuyaux - Group 1 - Groupe 1 + + 16' + 16' - Group 2 - Groupe 2 + + 4' + 4' - Group 3 - Groupe 3 + + 2 2/3' + 2 2/3' - Group 4 - Groupe 4 + + 2' + 2' - Group 5 - Groupe 5 + + 8' + 8' - contrib - contrib + + 5 1/3' + 5 1/3' - listen - écoute + + Envelope Lo + Enveloppe basse (Lo) - Randomize - Aléatoire + + Envelope Hi + Enveloppe Haute (Hi) - Rhythm Style: - Style de Rythme: + + + Release + Relachement - Clear - Effacer + + + Sustain + Tenue - Open... - Ouvrir... + + + Decay + Affaiblissement - Save - Sauvegarder + + + Attack + Attaque - Save as... - Sauvegarder sous... + + + + + + + ms + - Generate - Générer + + + cB + - Close - Fermer + + Velocity + Vélocité - RouteDialogBase + PasteDialogBase - - MusE: Routing + + MusE: Paste Parts - Add Route + Number and raster - - Source: + + insert - - Destination: + + times - - connect source to destination + + raster - - Connect + + ticks - - Current Routes + + Move, Merge, Clone - - Source + + Move everything to the right - - Destination + + Move only affected parts to the right - remove selected route + Put everything into a single track - - Remove + + Merge with existing parts - - - RoutePopupMenu - Channel - Canal + + Insert as clones (where possible) + + + + + OK + OK + + + + Cancel + Annuler - SS_PluginChooserBase + PasteEventsDialogBase - - SimpleDrums - Ladspa Plugin Chooser + + MusE: Paste Events - - Name - Nom + + Number and raster + - - Label - Label + + insert + - - Inports + + times - - Outports + + raster - - Creator + + + ticks - - &Cancel + + Paste options - - Alt+C + + Always into existing parts - - &OK + + Never into existing parts - - Alt+O + + Into existing parts if part has not +to be expanded by more than + + + + + Put everything into the (selected) part + + + OK + OK + + + + Cancel + Annuler + - SS_PluginFront + ProjectCreate - - Clear and unload effect + + Create Project - - Load effect + + Projects folder: - - Toggle display of effect parameters - + + + + ... + ... - - Turn effect on/off + + Project Name: - - - Score - Dynamics - Dynamiques + + Project is a Template + - &Config - &Configuration + + Write window state + - Page Settings - Paramètres de la Page + + Project song file type: + - Staff Settings - Paramètre de la portée + + Project Path to song file: + - Background Pixmap - image de fond + + Create project folder (recommended for audio projects) + - Palettes - Palettes + + Song information: + + + + QObject - Print - Imprimer + + + Error + - Preview Print - Aperçu avant Impression + + + Please first select the range for crescendo with the loop markers. + + + + QWidget - Lyrics - Paroles + + + Cannot convert sysex string + Ne peut convertir le code sysex - enter lyrics - entrer des paroles + + + Hex String too long (2048 bytes limit) + Code Hexa tro long (limite: 2048 octets) - Text - Texte + + generic midi + MIDI générique - enter text - entrer un texte + + new + nouveau - C7m - Do-7 + + create peakfile for + créer fichier de crêtes pour - enter chord symbol - entrer la notation d'un accord + + MusE: get file name + MusE: avoir le nom du fichier - to previous voice - � la voie précédante + + The directory +%1 +does not exist. +Create it? + - to next voice - � la voie suivante + + MusE: create directory + MusE: créer un répertoire - flip stem direction - changer la direction de la queue + + creating dir failed + échec de la création du répertoire - move marked notes to previous voice or to upper stave in a -split system - déplacer les notes marquées � la voie précédante ou � -la portée du dessus d'un système double + + File +%1 +exists. Overwrite? + - move marked notes to next voice or to lower stave in a split -system - déplacer les notes marquées � la voie suivante ou � la -portée basse d'un système double + + Open File +%1 +failed: %2 + - flip stem direction of selected notes - changer la direction de la queue des notes -sélectionnées + + MusE: write + MusE: écriture - StaffSettings - Paramètres de la portée + + MusE: Open File + MusE: Ouvrir un Fichier - MusE: config wallpaper - MusE: Configuration du papier de fond + + + None + - Score - Partition + + No selection. Ignoring + - ScoreConfig - - Staff Settings: - Paramètres de Portée: - + QuantBase - Track List - Liste Piste + + MusE: Quantize + - Key/Clef - Clef + + Range + - Raster - Trame + + All Events + Tous les Evènements - Note Quantize - Quantisation de Note + + Selected Events + Evènements choisis - Rest Quantize - Quantisation de Silence + + Looped Events + Evènements bouclés - Mode - Mode + + Selected Looped + - Split System - Portée Double + + Values + Valeurs - Splitpoint - Point de Séparation + + Strength: + - Ok - Ok + + % + % - Apply - Appliquer + + Threshold (ticks): + - Cancel - Annuler + + Quantize Len + - Upper Staff - Portée Supérieure + + Raster + Trame - Lower Staff - Portée Inférieure + + Whole + - - - ScoreEdit - panic - panique! + + Half + - C&ut - Co&uper + + 4th + - &Copy - &Copier + + 4th Triplet + - &Select - &Sélectionner + + 8th + - Select &All - Selectionner &Tout + + 8th Triplet + - &Deselect All - &Dé-selectionner tout + + 16th + - Invert &Selection - Inverser la &Sélection + + 16th Triplet + - &Inside Loop - A l'&intérieur de la Boucle + + 32th + - &Outside Loop - A l'e&xtérieur de la Boucle + + 32th Triplet + - Transpose - Transposition + + Swing: + - - - ScrollScale - next page - page suivante + + If the proposed change in tick or length is smaller than threshold, nothing is done. +If swing=0, this is normal +If swing is 33, you get a 2:1-rhythm. +If swing is -33, you get a 1:2-rhythm. + + - previous page - page précédente + + OK + OK - current page number - numéro de page courante + + Cancel + Annuler - SetlenBase + RemoveBase - - MusE: Set Note Length + + MusE: Erase Notes @@ -17081,189 +12282,140 @@ - Value - Valeur - - - - New length + Thresholds - + ticks - - OK - OK - - - Cancel - Annuler - - - - ShortcutCaptureDialog - - Ok - Ok - - - Cancel - Annuler - - - - ShortcutCaptureDialogBase - - - Enter shortcut sequence - - - - - Press keys to enter shortcut sequence! - - - - - Old shortcut: - + Velocity + Vélocité - - - Undefined - + + Length + Longueur - - New shortcut: + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - + OK OK - + Cancel Annuler - ShortcutConfigBase + RouteDialogBase - - Configure Keyboard Shortcuts + + MusE: Routing - - Shortcut Category + + Add Route - - Description + + Source: - - - Shortcut + + + Destination: - - &Clear + + connect source to destination - Alt+C + Connect - &Define + Current Routes - - Alt+D + + Source - - &Apply - &Appliquer - - - - Alt+A + + Destination - - - SigScale - signature scale - Echelle de la signature + + remove selected route + - - - SimpleDrumsGuiBase - - DrumSynth 0.1 + + Remove - SimpleSynthGui + SS_PluginChooserBase - - &Load setup + + SimpleDrums - Ladspa Plugin Chooser - - &Save setup - + + Name + Nom - - Load sample dialog - + + Label + Label - - - Song - &Ok - &Ok + + Inports + - - - SongInfo - - Song Information + + Outports - - Show on song load + + Creator - + &Cancel - + &Annuler @@ -17272,8 +12424,8 @@ - &Ok - &Ok + &OK + @@ -17282,320 +12434,311 @@ - StkGuiBase + SS_PluginFront + + + Clear and unload effect + + - MyDialog2 - MonDialogue2 + + Load effect + - Voices - Voies + + Toggle display of effect parameters + - Edit - Editer + + Turn effect on/off + - SynthConfigBase + SetlenBase - MusE: Synth Configuration - MusE: Configuration Synth Virtuel + + MusE: Set Note Length + - - Soft Synthesizer - Synthétiseur Virtuel + + Range + - - File - Fichier + + All Events + Tous les Evènements - - Instances - Exemplaires + + Selected Events + Evènements choisis - - Name - Nom - - - - list of available software synthesizers - liste des synthétiseurs virtuels -disponibles - - - - Add Instance - Ajouter un Exemplaire - - - Alsa Port - Port Alsa - - - - Remove Instance - Retirer un Exemplaire - - - - Midi Port - Port MIDI + Looped Events + Evènements bouclés - - Midi Port and Soft Synth Configuration + + Selected Looped - - - Type - Type + + Value + Valeur - - Midi connections + + New length - - Inst + + ticks - - Version - + + OK + OK - - Description - + + Cancel + Annuler - TList - - Delete Track - Effacer la Piste - - - Track Comment - Commentaire de Piste - - - Midi - Midi - - - Drum - Batterie - + ShortcutCaptureDialogBase - Wave - Forme d'Onde + + Enter shortcut sequence + - Show Gui - Montrer la Gui + + Press keys to enter shortcut sequence! + - Add Midi Track - Ajouter une Piste Midi + + Old shortcut: + - Add Drum Track - Ajouter une Piste de Batterie + + + Undefined + - Add Wave Track - Ajouter une Piste Audio + + New shortcut: + - show gui - montrer l'interface + + OK + OK - - - TempoSig - Tempo/Sig - Tempo/Sig + + Cancel + Annuler - Toolbar1 - - Solo - Solo - - - Snap - Aligne - - - Quantize - Quantisation - - - To - A - - - All Events - Tous les Evènements - + ShortcutConfigBase - Looped Ev. - Ev. Bouclés + + Configure Keyboard Shortcuts + - Selected Ev. - Ev. Choisis + + Shortcut Category + - Looped+Sel. - Bouclés+Sél. + + Description + - Cursor - Curseur + + Shortcut + - - - TopWin - Arranger - Arrangeur + + &Clear + - - - TrackComment - MusE: Track Comment - Muse: Commentaire de Piste + + Alt+C + - Track Comment: - Commentaire de Piste: + + &Define + - - - Transport - Punch In - Punch-In + + Alt+D + - Loop - Boucle + + &Apply + &Appliquer - Punch Out - Punch-Out + + Alt+A + + + + SimpleDrumsGuiBase - Left Mark - Marque Gauche + + DrumSynth 0.1 + + + + SimpleSynthGui - Right Mark - Marque Droite + + &Load setup + - Overdub - Sur-enregistrement (Overdub) + + &Save setup + - Replace - Remplace + + Load sample dialog + + + + SongInfo - Rec Mode - Mode Enregistrement + + Song Information + - Normal - Normal + + Show on song load + - Mix - Mix + + &Cancel + &Annuler - Cycle Rec - Enr. Cycle + + Alt+C + - punchin - Punch-In + + &Ok + &Ok - loop - boucle + + Alt+O + + + + SynthConfigBase - punchout - Punch-Out + + Soft Synthesizer + Synthétiseur Virtuel - rewind to start - rembobine au départ + + File + Fichier - rewind - rembobiner + + Instances + Exemplaires - forward - avance + + + Name + Nom - stop - stop + + list of available software synthesizers + liste des synthétiseurs virtuels +disponibles - play - jouer + + Add Instance + Ajouter un Exemplaire - record - enregistrement + + Remove Instance + Retirer un Exemplaire - AC - AC + + Midi Port + Port MIDI - quantize during record - quantise pendant l'enregistrement + + Midi Port and Soft Synth Configuration + - Click - Clic + + + Type + Type - metronom click on/off - clic du métronome oui/non + + Midi connections + - Sync - Synchro + + Inst + - external sync on/off - synchro externe oui/non + + Version + - use master track - Utiliser la piste principale + + Description + @@ -17652,49 +12795,6 @@ - TransposeDialogBase - - MusE: Midi Transpose - MusE: Transposition Midi - - - Value - Valeur - - - halftones - demi-tons - - - Time - Temps - - - all - tous - - - between markers - entre les marqueurs - - - Parts - Pièces - - - all in selected tracks - tous dans les pistes sélectionnées - - - OK - OK - - - Cancel - Annuler - - - UnusedWaveFiles @@ -17930,20 +13030,6 @@ On - VAM 1.0beta2 -Virtual Analog for MusE -Released under GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) - VAM 1.0beta2 -Virtual Analog pour MusE -License GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) - - VAM 1.0beta3 Virtual Analog for MusE @@ -17985,10 +13071,6 @@ Evènements bouclés - Selected & Looped - Bouclés & Sélectionnés - - Values Valeurs @@ -18030,118 +13112,9 @@ - WTScale - - bar scale - échelle de la mesure - - - - WaveEdit - - Normalize - Normaliser - - - weTools - weTools - - - Solo - Solo - - - Cursor - Curseur - - - &File - &Fichier - - - Functions - Fonctions - - - 200% - 5 1/3' {200%?} - - - 150% - 5 1/3' {150%?} - - - 75% - 5 1/3' {75%?} - - - 50% - 5 1/3' {50%?} - - - 25% - 5 1/3' {25%?} - - - &Copy - &Copier - - - C&ut - Co&uper - - - Select - Sélectionner - - - Select &All - Selectionner &Tout - - - &Deselect All - &Dé-selectionner tout - - - - WaveTrackInfoBase - - MusE: TrackInfo - MusE: InfoPiste - - - Track Info - Info Piste - - - Track Name - Nom de Piste - - - Output Route: - Chemin de Sortie: - - - Input Route: - Chemin d'Entrée: - - - Ports: - Ports: - - - Mono - Mono - - - Stereo - Stéréo - - - file_patterns - + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) @@ -18157,13 +13130,13 @@ - + - + - + @@ -18172,7 +13145,7 @@ Tous les Fichiers (*) - + Midi (*.mid) @@ -18238,7 +13211,7 @@ - + part Files (*.mpt *.mpt.gz *.mpt.bz2) @@ -18258,7 +13231,7 @@ - + Presets (*.pre *.pre.gz *.pre.bz2) @@ -18346,18 +13319,18 @@ - - + + dB dB - + Dry Level [dB] - + Wet Level [dB] @@ -19178,7 +14151,7 @@ Quantize - + Quantiser diff -Nru muse-2.0~rc2/share/locale/muse_pl.ts muse-2.0/share/locale/muse_pl.ts --- muse-2.0~rc2/share/locale/muse_pl.ts 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/locale/muse_pl.ts 2012-06-30 19:24:42.000000000 +0200 @@ -4,203 +4,7 @@ @default - Click this button to enable recording - Naciśnij ten przycisk, aby pozwolić na nagrywanie - - - sets amount of quantization: -0 - no quantization -100 - full quantization - stopień kwantyzacji: -0 - bez kwantyzacji -100 - pełna kwantyzacja - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - Kliknij na strzałkę. -Strzałką możesz zaznaczać, przesuwać i kopiować klocki - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Otwórz nowy utwór. Można też wybrać <b>Otwórz</b> z menu Plik. - - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Zapisz edytowany utwór. Trzeba podać nazwę pliku. -Można też wybrać "Zapisz" z menu plik, lub "Ctrl-S". - - - - Create New Song - Twórz nowy utwór. Można też nacisnąć skrót "Ctrl-N". - - - Click this button to stop playback - Zatrzymaj odtwarzanie. - - - Click this button to start playback - Rozpocznij odtwarzanie. - - - Click this button to rewind to start position - Przewiń do początku. - - - Click this button to rewind - Przewijaj do tyłu. - - - Click this button to forward current play position - Przewijaj do przodu. - - - don't quantize notes above this tick limit - Nie kwantyzuj nut poniżej tego poziomu. - - - quantize also note len as default - Kwantyzuj długości nut tak samo jak domyślnie. - - - loop between left mark and right mark - Zapętl pomiędzy lokatorami - - - record starts at left mark - Nagrywaj od lewego lokatora. - - - record stops at right mark - Nagrywaj od prawego lokatora. - - - rewind to start position - Przewiń do początku. - - - rewind current position - Przewijaj kursor do tyłu. - - - move current position - Przewijaj kursor do przodu. - - - stop sequencer - Zatrzymaj sekwencer. - - - start sequencer play - Uruchom odtwarzanie sekwencera. - - - to record press record and then play - Aby nagrywać najpierw naciśnij nagrywanie, potem odtwarzanie. - - - send note off to all midi channels - Zatrzymaj komunikaty midi na wszystkich kanałach! - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - Kliknij na ołówek. -Ołówkiem możesz tworzyć klocki oraz zmieniać ich długość. - - - select Delete Tool: -with the delete tool you can delete parts - Kliknij na Gumkę. -Gumką można kasować klocki. - - - select Cut Tool: -with the cut tool you can split a part - Kliknij na Nożyczki. -Nożyczkami można ciąć klocki. - - - select Glue Tool: -with the glue tool you can glue two parts - Kliknij na Klej. -Klejem możesz sklejać dwa klocki - - - select Score Tool: - - Wybierz Podgląd Nutowy. - - - select Quantize Tool: -insert display quantize event - Ustaw Kwantyzator -(ustawia kwantyzację wstawiania komunikatów midi). - - - select Drawing Tool - wybierz Wykres - - - select Muting Tool: -click on part to mute/unmute - Kliknij na Wyłącz. -Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. - - - pointer - Strzałka - - - pencil - Ołówek - - - cutter - Nożyczki - - - score - Pogląd nutowy - - - glue - Klej - - - quantize - Kwantyzator - - - draw - Wykres - - - mute parts - Wyłącz klocki z odtwarzania - - - Off - Wył. - - - presets (*.pre *.pre.gz *.pre.bz2) - ustawienia (*.pre *.pre.gz *.pre.bz2) - - - All Files (*) - Wszystkie Pliki (*) - - - + Add Midi Track Dodaj Ślad Midi @@ -235,16 +39,17 @@ Dodaj Wysyłkę Audio - eraser - Gumka + + Select project directory + - + Add Synth - + Route Połącznie @@ -259,7 +64,7 @@ - + Warning: No output devices! @@ -269,20 +74,34 @@ - + Empty ports - + <none> - + channelMask="%1" + + + Bad timing + + + + + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + + AboutBox @@ -292,34 +111,13 @@ O Programie - Keep On Rocking! - Trzymajmy tak dalej! - - - Version 0.7.0 - -(C) Copyright 1999-2004 Werner Schweer and others. -See http://lmuse.sourceforge.net for new versions and -more information. - -Published under the GNU Public License - Wersja Programu 0.7.0 -(C) Prawa Autorskie 1999-2004 Werner Schweer i inni. -Wejdź na http://lmuse.sourceforge.net aby ściągnąć nową wersję i aby uzyskać informację. -Spolszczył: Piotr Sawicki, pelle@plusnet.pl - -Opublikowane na zasadzie licencji GNU Public License - - - - - Version 2 pre-alpha + Version 2 - (C) Copyright 1999-2010 Werner Schweer and others. + (C) Copyright 1999-2012 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -338,20 +136,9 @@ - Appearance - - MusE: load image - Muza: Załaduj obrazek. - - - AppearanceDialogBase - MusE: Appearance Settings - MuzA: Wygląd aplikacji. - - - + Apply Zastosuj @@ -366,7 +153,7 @@ Anuluj - + Arranger Główne Okno @@ -446,14 +233,6 @@ Obrazek w tle - bg - tło - - - select... - wybierz... - - show snap grid pokaż siatkę przyciągania @@ -529,7 +308,12 @@ Motif Plus - + + May require restarting MusE for best results + + + + Fonts Czcionki @@ -609,7 +393,7 @@ Czcionka 5 - + Palette Paleta kolorów @@ -664,7 +448,7 @@ - + Style Sheet: @@ -675,347 +459,130 @@ - Arranger - - Cursor - Kursor - + ArrangerColumnsBase - Snap - Przyciąganie elementów + + Configure arranger columns + - Len - Długość utworu w taktach + + Columns: + - NO - Brak + + Name: + Nazwa: - TrackInfo - Info o śladzie + + Controller type: + - Track - Ślad + + + Midi controller type + - Type - Typ + + Control7 + Kontroler7 - midi song type - Utwór Midi + + Control14 + Kontroler14 - Pitch - Glob. Transpozycja + + RPN + RPN - midi pitch - transpozycja midi + + NRPN + NRPN - global midi pitch shift - globalna transpozycja midi + + RPN14 + - Tempo - Tempo + + NRPN14 + - midi tempo - Tempo Midi + + Pitch + Transpozycja - O-Port - Wyjście + + Program + Program - Arranger - Główne Okno + + H-Ctrl + H-Ctrl - Off - Wył. + + + Midi controller number high byte + - Bar - do kreski taktowej + + L-Ctrl + L-Ctrl - GM - GM + + + Midi controller number low byte + - GS - GS - - - XG - XG - - - N - 100% - - - R - N - - - M - W - - - S - S - - - C - T - - - Ch - K - - - T - B - - - Enable Recording - Udostępnij nagrywanie - - - Solo Indicator - Solo Wzkaźnik - - - Track Type - Typ śladu - - - Time Lock - Zablokuj Ślad - - - Automation - Au&tomatyka - - - - ArrangerView - - panic - Zatrzymaj wszystkie komunikaty midi! - - - &Copy - &Kopiuj - - - &Paste - &Wklej - - - Delete Selected Tracks - Skasuj Zaznaczone Ślady - - - Add Track - Dodaj Ślad - - - Select &All - Zaznacz &wszystko - - - &Deselect All - &Odznacz wszystko - - - Invert &Selection - Odwróć &zaznaczenie - - - &Inside Loop - &Pomiędzy lokatorami. - - - &Outside Loop - &Poza obrębem lokatorów - - - All &Parts on Track - Wszystkie &klocki na śladzie - - - Pianoroll - Pianoroll - - - Drums - Edytor Perkusji - - - List - Edytor Lista - - - Mastertrack - Ślad Tempo/Metrum - - - Graphic - Edytor Graficzny Tempo/Metrum - - - Midi &Transform - &Przekształcanie Midi - - - Global Cut - Globalne Wycięcie - - - Global Insert - Globalne Wstawienie - - - Global Split - Globalne Podzielenie - - - &Structure - &Globalne - - - Functions - Opcje - - - Transpose - Transponuj - - - New - Nowy - - - - AudioMixerApp - - MusE: Mixer - MuzA: Mikser - - - &Create - &Dodaj - - - &View - &Przeglądaj - - - Routing - Konfiguracja połączeń - - - - AudioStrip - - panorama - Panorama - - - aux send level - Poziom syngału na wysyłce - - - off - Wył. - - - Pan - Pan - - - 1/2 channel - kanał m/s - - - Pre - Przed - - - pre fader - post fader - przed/ za tłumikiem - - - dB - dB - - - record - nagranie - - - mute - wycisz - - - record downmix - zgraj miks - - - solo mode (monitor) - Solo (Monitor) - - - pre fader listening - odsłuch przed tłumikiem - - - iR - Wej. - - - intput routing - połączenie wejścia - - - oR - Wyj. - - - output routing - połączenie Wyjścia + + * + wild card + - Off - Wył. + + affect CCs at + - Read - Czytaj + + begin of song + - Touch - Dotknij + + current position + - Write - Zapisz + + &Add + &Dodaj - automation type - typ automatyki + + &Delete + &Kasuj - Channel - Kanał + + Done + @@ -1040,36 +607,6 @@ - BigTime - - MusE: Bigtime - MuzA: Duży zegar - - - minute - minuta - - - second - sekunda - - - frame - ramka - - - subframe - subramka - - - - ClipListEdit - - panic - Zatrzymaj wszystkie komunikaty midi! - - - ClipListEditorBase @@ -1088,8 +625,8 @@ - Start - Start + Samplerate + @@ -1138,10 +675,6 @@ ConfigMidiFileBase - MusE: Config Midi File Export - MuzA: Konfiguracja exportu plików midi - - &OK &Akceptuj @@ -1192,10 +725,6 @@ Prawa autorskie: - Enable extended smf format - Aktuwuj rozszerzony format smf (standard midi file) - - MusE: Config Midi File Import/Export @@ -1321,37 +850,6 @@ - CtrlPanel - - select controller - Wybierz kontroler - - - remove panel - Usuń panel - - - Sel - Wyb. - - - x - x - - - Velocity - Predkość uderzenia (velocity) - - - add new ... - dodaj nowe ... - - - S - S - - - DeicsOnzeGui @@ -2694,7 +2192,7 @@ Pitch - + Transpozycja @@ -3041,7 +2539,7 @@ Pan - + Panorama @@ -3095,7 +2593,7 @@ - + Don't show on startup @@ -3111,232 +2609,61 @@ - DrumEdit + DuplicateTracksBase - Load Map - Załaduj zestaw + + Duplicate tracks + - Save Map - Zapisz zestaw + + Number of copies + - &Edit - &Edytuj - - - Cut - Wytnij - - - Copy - Kopiuj - - - Paste - Wklej - - - Delete Events - Kasuj Elementy - - - Select All - Zaznacz wszystko - - - Select None - Bez zaznaczenia - - - Invert - Odwróć zaznaczenie - - - Inside Loop - Pomiędzy lokatorami - - - Outside Loop - Poza obrębem lokatorów - - - &Select - &Zaznacz - - - Step Record - Nagrywanie po jednej nucie - - - Midi Input - Podgląd Midi - - - Add Controller View - Pokaż widok kontrolerów - - - M - Wycisz - - - Sound - Brzmienie - - - QNT - Kwant. - - - E-Note - U-Wys - - - Len - Dług. - - - A-Note - W-Wys - - - Ch - Kanał - - - Port - Urz. Midi - - - LV1 - PV1 - - - LV2 - PV2 - - - LV3 - PV3 - - - LV4 - PV4 - - - &File - &Plik - - - Load Drummap - Załaduj zestaw perkusyjny - - - Store Drummap - Zapisz zestaw perkusyjny - - - ctrl - ctrl - - - drummaps - Zestawy perkusyjne - - - Muse: Load Drum Map - MuzA: Załaduj zestaw perkusyjny - - - MusE: Store Drum Map - MuzA: Zapisz zestaw perkusyjny - - - Set Fixed Length - Ustaw stałą długość nut - - - &Functions - &Opcje - - - Modify Velocity - Zmień Velocity - - - mute instrument - wyłącz instrument - - - sound name - nazwa brzmienia - - - quantisation - kwantyzacja - - - this input note triggers the sound - ta wysokość uruchamia brzmienie - - - note length - długość dźwięku - - - output port - port wyjściowy - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - EditCAfterDialog - - Time Position - Pozycja: - - - Pressure - Nacisk + + Copy all routes + - MusE: Enter Channel Aftertouch - MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) + + Default routing + - - - EditCtrl7DialogBase - MusE: Enter Controller - MuzA: Podaj kontroler + + No routes + - Controller: - Kontroler: + + Copy parts + - Time Position: - Pozycja: + + Copy standard controllers (vol, pan) + - Value: - Wartość: + + Copy effects rack plugins + - controller value - Wartość dla kontrolera + + Copy plugin controllers + - OK - Akceptuj + + Ok + Akceptuj + Cancel - Anuluj + Anuluj @@ -3414,17 +2741,6 @@ - EditEventDialog - - Ok - Akceptuj - - - Cancel - Anuluj - - - EditGainBase @@ -3483,29 +2799,6 @@ - EditInstrument - - MusE: Write File failed - MuzA: Zapis pliku nie powiódł się - - - MusE - MuzA - - - &Save - &Zapisz - - - &Nosave - &Nie zapisuj - - - &Abort - &Anuluj - - - EditInstrumentBase @@ -3513,14 +2806,6 @@ MuzA: Edytor Instrumentów - Patches - Patche - - - Patch Name: - Patch Nazwa - - High Bank: Górny Bank: @@ -3536,20 +2821,6 @@ Program: - d.c. - dont care - brak, -nie ważne - - - d.c. - nie ważne - - - Patch/Group - Patch/Grupa - - @@ -3564,18 +2835,6 @@ Alt+D - &New Patch - &Nowy Patch - - - Alt+N - Alt+N - - - New Group - Nowa Grupa - - Drum Perkusja @@ -3596,14 +2855,6 @@ XG - Controller - Kontroler - - - Predefined Controller: - Predefiniowany kontroler: - - This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are @@ -3618,14 +2869,6 @@ Właściwości - Name - Nazwa - - - Type - Typ - - Control7 Kontroler7 @@ -3662,24 +2905,12 @@ H-Ctrl - Midi Controller Number High Byte - Numer midi kontrolera High Byte - - L-Ctrl L-Ctrl - Midi Controller Number Low Byte - Numer midi kontrolera Low Byte - - - Range - Zakres - - Min Min. @@ -3690,10 +2921,6 @@ Max - Default - Domyślny - - Name nazwa @@ -3704,34 +2931,6 @@ Typ - Min Val - Min. Wart. - - - Max Val - Max Wart. - - - list of defined controllers - Lista zdefiniowanych kontrolerów - - - This is the MusE list of defined controllers. - To jest lista MuzA zdefiniowanych midi kontrolerów. - - - SysEx - SysEx - - - Initialization - Inicjalizacja - - - Panic - Zatrzymaj wszystkie komunikaty midi! - - Hex Entry: Wartość Heks. @@ -4265,81 +3464,31 @@ - EditMetaDialog + EditNoteDialogBase - Time Position - Pozycja: + + MusE: Enter Note + MuzA: Wstaw Nutę - Meta Type - Meta Typ + + OK + Akceptuj - Enter Hex - Wstaw Heks. + + Cancel + Anuluj - MusE: Enter Meta Event - MuzA: Wstaw Zdarzenie Meta (nacisk po uderzeniu + + Length: + Długość: - - - EditMetaDialogBase - MusE: Enter Meta Event - MuzA: Wstaw Meta Zdarzenie - - - OK - Akceptuj - - - Cancel - Anuluj - - - TextLabel1 - Etykieta - - - Time Position: - Pozycja: - - - Meta Type: - Meta Typ: - - - Enter Hex - Wstaw Heks. - - - - EditNoteDialogBase - - - MusE: Enter Note - MuzA: Wstaw Nutę - - - - OK - Akceptuj - - - - Cancel - Anuluj - - - - Length: - Długość: - - - - Time Position: - Pozycja: + + Time Position: + Pozycja: @@ -4358,25 +3507,6 @@ - EditPAfterDialog - - Time Position - Pozycja: - - - Pitch - Wysokość dźwięku - - - Pressure - Nacisk - - - MusE: Enter Poly Aftertouch - MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - - EditSysexDialogBase @@ -4405,48 +3535,6 @@ - EditToolBar - - Edit Tools - Narzędzia Edycyjne - - - - EffectRack - - effect rack - skrzynia efektów - - - move up - przesuń w górę - - - move down - przesuń w dół - - - remove - usuń - - - bypass - omiń (bypass) - - - show gui - pokaż interfejs użytkownika - - - new - nowy - - - change - zmień - - - FLUIDGui @@ -4599,10 +3687,6 @@ FileDialogButtons - Form1 - Form1 - - Global Globalnie @@ -4618,30 +3702,20 @@ Katalog projektu - Load: - Ładuj: - - - Songdata + -Cofiguration - Plik typu utwór + -konfiguracja - - - - only -Songdata - Tylko pliki typu utwór + + read Midi Port +Configuration + - - fdialogbuttons + + write window +states - - Songdata + -Configuration + + fdialogbuttons @@ -4654,19 +3728,8 @@ - FontSel - - Size: - Rozmiar: - - - GateTimeBase - MusE: Modify Gate Time - MuzA: modyfikuj Gate Time - - Range Zakres @@ -4687,10 +3750,6 @@ Pomiędzy lokatorami - Selected & Looped - Zaznaczone & Pomiędzy lokatorami - - MusE: Modify Note Length @@ -4744,7 +3803,7 @@ MuzA: Globalne Ustawienia - + Audio Audio @@ -4765,10 +3824,6 @@ min. wartość miernika sygnału - min.Slider Val - dolna granica przesunięcia tłumika - - Midi Midi @@ -4798,10 +3853,6 @@ 4096 - 8172 - 8172 - - Displayed Resolution (Ticks/Quarternote) @@ -4871,10 +3922,6 @@ (Tykanie/Sekunda) - GUI - Interfejs Użytkownika - - /sec /sek. @@ -4919,7 +3966,7 @@ - + Allow adding hidden tracks in track list menu @@ -4929,7 +3976,19 @@ - + + + Smart focus + + + + + After editing, controls will return + focus to their respective canvas + + + + GUI Style @@ -4959,7 +4018,7 @@ - + &Apply &Zastosuj @@ -4974,21 +4033,17 @@ A&nuluj - Help Browser: - Przeglądarka pomocy: - - - + Application Zastosowanie - + Start Muse Uruchamianie MuzA - + start with last song Otwórz ostatnio otwierany utwór @@ -4998,12 +4053,7 @@ Ładuj przy uruchamianiu utwór - - start song: - Ładuj utwór: - - - + Views Widoki @@ -5055,10 +4105,6 @@ Duży Zegar - Arranger - Główne Okno - - Transport Panel transportu @@ -5082,17 +4128,12 @@ Ustaw aktualną wartość - - start with template: default.med - Załaduj utwór szablon: default.med - - - + show splash screen Pokaż okno o programie przy starcie - + Mixer A @@ -5102,7 +4143,7 @@ - + show "Did you know?" dialog @@ -5112,7 +4153,7 @@ - + min. Slider Val @@ -5163,27 +4204,60 @@ 16 - + Project directory - + Projects: + + ... ... - + Main Window - + + Choose start song or template + + + + + Reset to default + + + + + start with template + + + + + Start template or song: + + + + + Read MIDI Ports configuration from file, + or else automatically configure + + + + + Read MIDI Ports configuration + + + + Try to use Jack Freewheel @@ -5333,60 +4407,17 @@ - + On Launch - + Behavior - LMaster - - new tempo - nowe tempo - - - new signature - nowe metrum - - - Meter - Miernik - - - Time - Pozycja - - - Type - Typ - - - Value - Wartość - - - MusE: Mastertrack - MuzA: Ślad Tempo/Metrum - - - Tempo - Tempo - - - Timesig - Metrum - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - LegatoBase @@ -5450,243 +4481,69 @@ - ListEdit + MITTransposeBase - &Edit - E&dytuj + + MusE: Midi Input Plugin: Transpose + MuzA: Wtyczka Wejścia Midi: Transponuj - Cut - Wytnij + + On + Włącz. - Copy - Kopiuj + + TriggerKey + Klawisz uruchamiający - Paste - Wklej + + Transpose: + Transponuj: - List Tools - Lista Narzędzi + + +0 + + + + MRConfigBase - Insert Tools - Wstaw Narzędzia + + MusE: Midi Input Plugin: Remote Control + MuzA: Wtyczka Wejścia Midi: Zdalne Sterowanie - Delete Events - Kasuj Elementy + + Activate + Aktywuj - Insert Note - Wstaw nutę + + On + Wł. - insert Note - Wstaw nutę + + Actions + Funkcje - Insert SysEx - wstaw SysEx + + Stop + Stop - insert SysEx - wstaw SysEx + + Record + Nagrywanie - Insert Ctrl - Wstaw kontroler - - - insert Ctrl - wstaw - - - Insert Meta - Wstaw Meta - - - insert Meta - Wstaw Meta - - - Insert Channel Aftertouch - Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - - insert Channel Aftertouch - Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - - Insert Key Aftertouch - Wstaw pojedynczą zmiane nacisku pod uderzeniu - - - insert Poly Aftertouch - Wstaw zmianę średniego nacisku pod uderzeniu (Poly Aftertouch) - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - Tick - Takt (impuls sygnału czasu) - - - Bar - Takt - - - Typ - Typ - - - Ch - Kan - - - Val A - Wart. A - - - Val B - Wart. B - - - Val C - Wart. C - - - Len - Dług. - - - Comment - Opis - - - Type - Typ - - - - MITTransposeBase - - - MusE: Midi Input Plugin: Transpose - MuzA: Wtyczka Wejścia Midi: Transponuj - - - - On - Włącz. - - - - TriggerKey - Klawisz uruchamiający - - - - Transpose: - Transponuj: - - - - +0 - - - - - MPConfig - - none - brak - - - Port - Numer - - - GUI - Interfejs użytkownika - - - Instrument - Typ portu midi - - - Device Name - Nazwa Urządzenia - - - State - Status - - - unknown - nieznane - - - I - Wej. - - - O - Wyj. - - - Port Number - Numer portu - - - Instrument connected to port - Instrument połączony do portu - - - State: result of opening the device - Status: rezultat otworzenia urządzenia - - - - MRConfigBase - - - MusE: Midi Input Plugin: Remote Control - MuzA: Wtyczka Wejścia Midi: Zdalne Sterowanie - - - - Activate - Aktywuj - - - - On - Wł. - - - - Actions - Funkcje - - - - Stop - Stop - - - - Record - Nagrywanie - - - - Goto Left Mark - Idź do lewego lokatora + + Goto Left Mark + Idź do lewego lokatora @@ -5700,135 +4557,6 @@ - MTScale - - bar scale - Oś taktów - - - - MarkerView - - panic - Zatrzymaj wszystkie komunikaty midi! - - - Bar:Beat:Tick - Takt:Puls:Takt - - - Hr:Mn:Sc:Fr:Sf - Godz.:Min.:Sek.:Kl.:SKl - - - Lock - Zablokuj - - - Text - Tekst - - - Marker Properties - Właściwości znacznika - - - MusE: Marker - MuzA: Znacznik - - - add marker - Dodaj znacznik - - - Add Marker - Dodaj znacznik - - - delete marker - Kasuj znacznik - - - Delete Marker - Kasuj znacznik - - - &File - &Plik - - - &Edit - &Edycja - - - edit tools - Narzędzia Edycyjne - - - - MasterEdit - - Cursor - Poz. kursora - - - Snap - Przyciąganie - - - time at cursor position - Wstaw metrum w aktualnej pozycji kursora - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - tempo at cursor position - Wstaw tempo w aktualnej pozycji kursora - - - CurPos - Akt. Poz. Kursora: - - - tempo at current position - Wstaw tempo w aktualnej pozycji kursora - - - time signature at current position - Wstaw tempo w aktualnej pozycji kursora - - - MusE: Mastertrack - MuzA: Ślad Tempo/Metrum - - - edit tools - Narzędzia Edycyjne - - - EnableMaster - Aktywuj Ślad Tempo/Metrum - - - Info - Info - - - Off - Wył. - - - Enable - Włącz - - - Enable usage of master track - Aktywuj Ślad Tempo/Metrum - - - MdiSettingsBase @@ -6000,161 +4728,81 @@ - MidiController + MidiAudioControlBase - Velocity - Głośność + + Midi control + - - - MidiControllerEditDialogBase - Type - Typ + + Port: + - Properties - Właściwości + + Channel: + - Type - Typ - - - &New - Neu - - - &Delete - &Kasuj - - - &OK - &AkceptujOK - - - &Cancel - &Anuluj - - - MusE: Define Midi Controller - MuzA: Zdefiniuj Midi Kontroler - - - &Add - &Dodaj - - - Alt+A - Alt+A - - - create new entry - Stwórz nowy wpis - - - pressing the New button you create a new entry -in the MusE list of defined controllers - Naciśnij Nowy żeby utworzyć nowy wpis do listy zdefiniowanych kontrolerów MuzA - - - delete selected entry - kasuj zaznaczone elementy - - - Predefined Controller: - Predefiniowany kontroler: - - - Name - nazwa - - - H-Ctrl - H-Ctrl - - - L-Ctrl - L-Ctrl - - - Min Val - Min. Wart. - - - Max Val - Max Wart. - - - list of defined controllers - Lista zdefiniowanych kontrolerów - - - This is the MusE list of defined controllers. - To jest lista MuzA zdefiniowanych midi kontrolerów. - - - Managed Controller for Port - Obsługiwane kontrolery dla portu - - - Channel - Kanał - - - This is a list of commonly used midi controllers. -Note that in MusE pitch and program changes are -handled like normal controllers. - To jest lista najczęściej używanych kontorlerów midi. -Zauważ, że "pitch" i "zmiana programu (program change)" są traktowane w MuzA jako zwykłe kontrolery. - - - Name - Nazwa - - - Min Value - Min. Wart. - - - Max Value - Max Wart. + + Control type: + + Control7 - Kontroler7 + Kontroler7 + Control14 - Kontroler14 + Kontroler14 + RPN - RPN + RPN + NRPN - NRPN + NRPN + + + + RPN14 + + + + + NRPN14 + + Pitch - Transpozycja + Transpozycja + Program - Program + Program - Midi Controller Number High Byte - Numer midi kontrolera High Byte + + Hi: + - Midi Controller Number Low Byte - Numer midi kontrolera Low Byte + + Lo: + - Range - Zakres + + Learn + @@ -6308,13 +4956,6 @@ - MidiInputTransformDialog - - New - Nowy - - - MidiInputTransformDialogBase @@ -6650,155 +5291,6 @@ - MidiPortRouteBase - - MusE: Midi Port Routing - MuzA: Połączenia Portów Midi - - - Port 2 - Port 2 - - - Output - Wyjście - - - Input - Wejście - - - - MidiStrip - - VariationSend - VariationSend - - - Var - Var - - - ReverbSend - Wysyłka Pogłosu - - - Rev - Pogł. - - - ChorusSend - Wysyłka Chorusa - - - Cho - Chorus - - - off - Wył. - - - dB - dB - - - Pan/Balance - Pan/Równowaga - - - Pan - Pan - - - record - nagranie - - - mute - wycisz - - - pre fader listening - odsłuch przed tłumikiem - - - Route - Połącznie - - - set routing - Ustaw połączenie - - - Off - Wył. - - - Read - Czytaj - - - Touch - Dotknij - - - Write - Zapisz - - - automation type - typ automatyki - - - iR - Wej. - - - oR - Wyj. - - - output routing - połączenie Wyjścia - - - - MidiSyncConfig - - Port Number - Numer portu - - - Name of the midi device associated with this port number - Nazwa urządzenia midi skojarzona z tym numerem portu - - - Device Name - Nazwa Urządzenia - - - m - min. - - - MusE - MuzA - - - &Apply - &Zastosuj - - - &No - &Nie - - - &Abort - &Anuluj - - - MidiSyncConfigBase @@ -6886,70 +5378,6 @@ 30N - Id: - numer: - - - device id - numer urządzenia - - - Port: - Port Midi - - - midi port - port midi - - - Sync Source - Źródło synchronizacji - - - accept MTC - akceptuj MTC - - - accept Midi Clock - akceptuj Zegar Midi - - - accept MMC - akceptuj MMC - - - Sync Gen - Generowanie synchronizacji - - - Midi Time Code (MTC) - Midi Time Code (MTC) - - - Midi Clock - Zegar Midi - - - Midi Machine Control (MMC) - Midi Machine Control (MMC) - - - Sync Mode - Rodzaj synchronizacji - - - Master - Urz. Nadrzędne (master) - - - Slave - Urz. Podporządkowane (slave) - - - all - wszystkie - - MTC MTC @@ -7049,7 +5477,7 @@ - Note: Sync delay and MTC sync currently not fully implemeted + Note: Sync delay and MTC sync currently not fully implemented @@ -7066,35 +5494,18 @@ kanał wyjściowy - all midi events are send to this output channel - wszystkie komunikaty midi są przekierowane do tego kanału - - - Track Info - Info o śladzie - - - + % % - Track Name - Nazwa Śladu - - - + output port port wyjściowy - - iR - Wej. - - - + @@ -7105,31 +5516,11 @@ Wył. - change stereo position - zmień panoramę - - - OCh. - Kanał Wyjść - - - ??? - ??? - - - select instrument patch - wybierz ustawienie instrumentu - - Transp. Transpozycja - Volume - Głośność - - Channel Info Info o kanale @@ -7140,17 +5531,43 @@ - - Prog + + Bank Select MSB. Ctrl-double-click on/off. - + + Bank Select LSB. Ctrl-double-click on/off. + + + + + Program. Ctrl-double-click on/off. + + + + + Prog + + + + + Volume. Ctrl-double-click on/off. + + + + Vol - + + + Change stereo position. Ctrl-double-click on/off. + + + + Pan Panorama @@ -7175,10 +5592,6 @@ L-Bank - Progr. - Nr programu - - Velocity Prędk. uderz. (vel) @@ -7189,53 +5602,7 @@ Długość - input ports - porty wejściowe - - - IChan. - Kanał Wejśc - - - input channels - kanały wejść. - - - Events from all configured channels are -recorded to this track. -You can specify more than one channel for -recording: - 1 2 3 record from channel 1 2 and 3 - 1-3 same - 1-3 5 record from channel 1 2 3 and 5 - Elementy ze wszystkich kanałów dą nagrywane na ten ślad -Możesz określić więcej niż jeden ślad do nagrywania: -1 2 3 nagrywaj z kanału 1 2 i 3 -1-3 tak samo -1-3-5 nagrywaj z kanału 1 2 3 i 5 - - - record: - Nagraj: - - - Rec - Ustawienie - - - add settings to song - naciśnij w trakcie nagrywania aby zapisać na śladzie - - - Bank Select LSB - Wybierz Bank LSB - - - Bank Select MSB - Wybierz Bank MSB - - - + all midi events are sent to this output channel @@ -7250,17 +5617,12 @@ - + output routing połączenie Wyjścia - - oR - Wyj. - - - + input detect @@ -7272,7 +5634,7 @@ - + W @@ -7287,7 +5649,7 @@ - + Select instrument patch @@ -7307,43 +5669,17 @@ Wszystko - - Bank Select MSB. Double-click on/off. - - - - - Bank Select LSB. Double-click on/off. - - - - - Program. Double-click on/off. - - - - + Add bank + prog settings to song - - Volume. Double-click on/off. - - - - + Add vol setting to song - - - Change stereo position. Double-click on/off. - - - - + Add pan setting to song @@ -7695,20 +6031,6 @@ - MidiTransformerDialog - - New - Nowy - - - - MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Pliki Wave (*.wav);;Wszystkie Pliki (*) - - - MixdownFileDialogBase @@ -7772,13 +6094,6 @@ - Mixer - - Port - Port - - - MoveBase @@ -7837,8878 +6152,5952 @@ - MusE + MusECore::Song - &File - &Plik + + Jack shutdown! + - Open &Recent - Otwórz O&statnie + + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + - Save &As - Zapisz &Jako + + + Automation: + - Config &Printer - Druckerkonfiguration + + previous event + - Import Midifile - &Import Pliku Midi + + next event + - Export Midifile - &Export do pliku midi + + + set event + - Import Wave File - Import Pliku &Wave + + + add event + - &Quit - &Zakończ + + + erase event + - &Edit - &Edycja + + erase range + - C&ut - W&ytnij + + clear automation + - &Copy - &Kopiuj + + Midi control + - &Paste - &Wklej + + Assign + - Delete Track - Spur Lschen + + Clear + - Add Track - Dodaj Ślad + + Clear all controller events? + - Select &All - Zaznacz &wszystko + + &Ok + &Akceptuj - &Deselect All - &Odznacz wszystko + + &Cancel + - Invert &Selection - Odwróć &zaznaczenie + + MusE: Tempo list + - &Inside Loop - &Pomiędzy lokatorami. + + External tempo changes were recorded. +Transfer them to master tempo list? + - &Outside Loop - &Poza obrębem lokatorów + + MusE - external script failed + - All &Parts on Track - Wszystkie &klocki na śladzie + + MusE was unable to launch the script, error message: +%1 + + + + MusEGui::Appearance - Select - Zaznacz + + Main application font, and default font for any + controls not defined here. + - Drums - Edytor Perkusji + + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + - List - Edytor Lista + + Transport controls. + - Graphic - Edytor Graficzny Tempo/Metrum + + Time scale upper, and time signature. +Controller graph and S/X buttons. + - Mastertrack - Ślad Tempo/Metrum + + Time scale lower, and arranger part name overlay. + - Midi &Transform - &Przekształcanie Midi + + Tempo scale, and markers. + - Modify Gate Time - Modyfikuj Gate Time + + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + - Modify Velocity - Modifikuj predkość uderzenia (velocity) + + Maximum mixer label auto-font-sizing font size. + - Crescendo - Crescendo + + Global opacity (opposite of transparency). + - Transpose - Transponuj + + Standard + - Thin Out - Decresendo + + Custom + - Erase Event - Skasuj Element + + Keep Qt system style + - Note Shift - Przesunięcie Dźwięku + + MusE: load image + Muza: Załaduj obrazek. - Move Clock - Przesuń licznik + + Select style sheet + - Copy Measure - Kopiuj Takt + + Qt style sheets (*.qss) + + + + MusEGui::Arranger - Erase Measure - Skasuj Takt + + Enable Recording + Udostępnij nagrywanie - Delete Measure - Skasuj Takt + + Mute/Off Indicator + - Create Measure - Twórz Takt + + Solo Indicator + Solo Wzkaźnik - Mix Track - Zmiksuj Ślad + + Track Type + Typ śladu - Midi - Midi + + Track Name + - &Structure - &Globalne + + Midi output channel number or audio channels + - Global Cut - Globalne Wycięcie + + Midi output port or synth midi port + - Global Insert - Globalne Wstawienie + + Time Lock + Zablokuj Ślad - Global Split - Globalne Podzielenie + + Automation parameter selection + - Copy Range - Kopiuj Zakres + + Notation clef + - Cut Events - Wytnij Elementy + + Enable recording. Click to toggle. + - Transport Panel - Panel transportu + + Mute indicator. Click to toggle. +Right-click to toggle track on/off. +Mute is designed for rapid, repeated action. +On/Off is not! + - Bigtime Window - Duży Zegar + + Solo indicator. Click to toggle. +Connected tracks are also 'phantom' soloed, + indicated by a dark square. + - Don't Follow Song - nie podążaj za utworem + + Track type. Right-click to change + midi and drum track types. + - Follow Page - kursor się przesuwa + + Track name. Double-click to edit. +Right-click for more options. + - Follow Continuous - takty się przesuwają (kursor stoi) + + Midi/drum track: Output channel number. +Audio track: Channels. +Mid/right-click to change. + - Global Settings - Globalne Ustawienia + + Midi/drum track: Output port. +Synth track: Assigned midi port. +Left-click to change. +Right-click to show GUI. + - Follow Song - podążanie kursora za utworem + + Time lock + - Metronome - Metronom + + Notation clef. Select this tracks notation clef. + - Midi Sync - Synchronizacja Midi + + Arranger + Główne Okno - Appearance Settings - Ustawienia wyglądu + + Cursor + - Midi Input Transform - Przekształcanie Wejścia Midi + + Off + Wył. - Midi Input Filter - Filtr Wejścia Midi + + Bar + - Midi Remote Control - Zdalne Sterowanie Midi + + Snap + - Random Rhythm Generator - Losowy generator rytmu + + Len + Długość - &Midi - &Midi + + + song length - bars + - Mixer - Mikser + + Type + Typ - Input Plugins - Wtyczki wejścia + + NO + Brak - Reset Instr. - Reset Instr. + + GM + GM - Init Instr. - Inicjalizacja Instr. + + GS + GS - Local Off - Local Off + + XG + XG - &Audio - &Audio + + + midi song type + Utwór Midi - Bounce to Track - -Zgrywanie śladu (bounce) + + Pitch + Transpozycja - Bounce to File - Zgrywanie do Pliku (bounce) + + midi pitch + transpozycja midi - &Help - P&omoc + + global midi pitch shift + globalna transpozycja midi - Browser - Browser + + Tempo + Tempo - About&Qt - Informacje o &Qt + + + midi tempo + Tempo Midi - MusE: load project - MuzA: ładuj utwór + + N + 100% - The current Project contains unsaved data -Save Current Project? - Otwarty utwór zawiera niezapisane dane -Zapisać otwarty utwór? + + TrackInfo + Info o śladzie - &Save - &Zapisz + + R + R - &Nosave - &Nie zapisuj + + M + - &Abort - &Anuluj + + S + S - MusE: Save As - MuzA: Zapisz Jako + + C + T - Nothing to edit - Nie ma nic do edytowania + + Track + Ślad - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Otwarty utwór zawiera niezapisane dane. -Załadowanie nadpisze otwarty utwór: -Zapisać otwarty utwór? + + Port + Port - &Overwrite - &Nadpisz + + Ch + - no help found at: - nie znalezniono pomocy + + T + B - MusE: Open Help - MuzA: Otwórz Pomoc + + Automation + Au&tomatyka - UndoRedo - CofnijPonów + + Clef + + + + MusEGui::ArrangerView - undo - cofnij + + MusE: Arranger + - Und&o - Co&fnij + + C&ut + - redo - cofnij + + &Copy + &Kopiuj - Re&do - Co&fnij + + Copy in range + - undo last change to song - cofnij ostatnią zmianę w utworze + + &Paste + &Wklej - redo last undo - ponów ostanie cofnij + + Paste (show dialog) + - Transport - Panel transportu + + Paste c&lone + - loop - pętla + + Paste clone (show dialog) + - Loop - Pętla + + &Insert Empty Measure + - punchin - włącz wcinki (punch In) + + Delete Selected Tracks + Skasuj Zaznaczone Ślady - Punchin - Włącz wcinki (punch In) + + Duplicate Selected Tracks + - punchout - wył. wcinki (punch out)punchout + + Shrink selected parts + - Punchout - Wył. wcinki (punch out) + + Expand selected parts + - start - Początek + + Clean selected parts + - Start - Początek + + Add Track + Dodaj Ślad - rewind - Przewiń do tyłu + + Select + Wybierz - Rewind - Przewiń do tyłu + + Select &All + Zaznacz &wszystko - forward - Przewiń do przodu + + &Deselect All + &Odznacz wszystko - Forward - Przewiń do przodu + + Invert &Selection + Odwróć &zaznaczenie - stop - Stop + + &Inside Loop + &Pomiędzy lokatorami. - Stop - Stop + + &Outside Loop + &Poza obrębem lokatorów - play - Odtwarzaj + + All &Parts on Track + Wszystkie &klocki na śladzie - Play - Odtwarzanie + + Score + - record - Nagrywaj + + all tracks in one staff + - Record - Nagrywanie + + one staff per track + - panic - Zatrzymaj wszystkie komunikaty midi! + + New score window + - Panic - Zatrzymaj wszystkie komunikaty midi! + + Pianoroll + Pianoroll - new - nowy + + Drums + Edytor Perkusji - &New - &Nowy + + + List + Edytor Lista - open - otwórz + + Wave + - &Open - &Otwórz + + Mastertrack + Ślad Tempo/Metrum - save - Zapisz + + Graphic + Edytor Graficzny Tempo/Metrum - pianoroll - Pianoroll + + Midi &Transform + &Przekształcanie Midi - Pianoroll - Pianoroll + + Global Cut + Globalne Wycięcie - marker - znacznik + + Global Insert + Globalne Wstawienie - Marker - Edytor Znaczników + + Global Split + Globalne Podzielenie - File Buttons - Przyciski Menu Plik + + Global Cut - selected tracks + - Unknown File Format - Nieznany Format Pliku + + Global Insert - selected tracks + - MusE: Write File failed - MuzA: Zapis pliku nie powiódł się + + Global Split - selected tracks + - MusE: Song: - MuzA: Utwór + + &Edit + - MusE: Copy Range - Kopiuj Zakres + + &Structure + &Globalne - not implemented - jeszcze nie wprowadzone + + Functions + Opcje - MusE: Cut Events - MuzA: Wytnij Elementy + + &Quantize Notes + - MusE: Bounce to Track - MuzA: Zgrywanie (bounce) do Śladu + + Change note &length + - more than one target track selected - więcej niż jeden docelowy ślad jest zaznaczony + + Change note &velocity + - wrong target track type, -select wave track as target - zły typ śladu docelowego -zaznacz ślad audio jako docelowy + + Crescendo/Decrescendo + - no target track selected - nie zaznaczono żadnego śladu + + Transpose + Transponuj - to import a audio file you have first to selecta wave track - aby zaimpotować plik audio, najpierw zaznacz ślad audio + + Erase Events (Not Parts) + - Delete Selected Tracks - Skasuj Zaznaczone Ślady + + Move Events (Not Parts) + - View - &Widok + + Set Fixed Note Length + - Edit Instrument - Edytuj Instrument + + Delete Overlapping Notes + - Restart Audio - Zrestartuj Audio + + Legato + - Automation - Au&tomatyka + + Window &Config + - Mixer Automation - Automatyka Miksera + + Configure &custom columns + - Take Snapshot - Zrób zrzut ekranu + + + New + Nowy - Clear Automation Data - Wyczyść automatykę + + Changed Settings + - Settings - &Ustawienia + + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) + + + + MusEGui::AudioMixerApp - Configure Shortcuts - Konfiguracja skrótów + + &Create + - Midi File Export - Export do pliku midi + + &View + &Przeglądaj - Midi Ports / Soft Synth - Porty Midi i Syntezatory Softowe + + Routing + Konfiguracja połączeń - &Manual - &Instrukcja Obłsugi + + Show Midi Tracks + - &MusE Homepage - strona domowa &MuzA + + Show Drum Tracks + - &Report Bug... - &Zgłoś Błąd... + + Show Wave Tracks + - &About MusE - &Informacje o programie + + Show Inputs + - What's &This? - Co &To? + + Show Outputs + - Cannot read template - Nie można odczytać pliku szablonu + + Show Groups + - File open error - Błąd odczytu pliku + + Show Auxs + - File read error - błąd odczytu pliku + + Show Synthesizers + + + + MusEGui::AudioStrip - MusE: load template - MuzA: ładuj szablon + + panorama + Panorama - MusE: Bounce - MuzA: Zgrywanie (bounce) + + aux send level + Poziom syngału na wysyłce - set left/right marker for bounce range - ustaw lokatory do zgrania (bounce) danego zakresu + + Pan + Panorama - MusE: Bounce to File - MuzA: Zgrywanie (bounce) do Pliku + + 1/2 channel + kanał m/s - no output track found - nie znaleziono śladu wyjściowego + + Pre + Przed - MusE: Export Midi - MuzA: Exportuj Midi + + pre fader - post fader + przed/ za tłumikiem - MusE: Import Midi - MuzA: Importuj Midi + + dB + dB - Add midi file to current project? - - Dodać plik midi do otwartego utworu? + + record + - &Add to Project - &Dodaj do utworu + + mute + wycisz - &Replace - &Zastąp + + record downmix + zgraj miks - reading midifile - - czytanie pliku midi + + + solo mode + - -failed: - nie powiodło się + + off + - &View - &Przeglądaj + + input routing + - New - Nowy + + output routing + połączenie Wyjścia - &Yes - &Tak + + Off + Wył. - &No - &Nie + + Read + Czytaj - - - MusEApp::MusE - Und&o - Co&fnij + + Touch + Dotknij - Re&do - Co&fnij + + Write + Zapisz - undo last change to song - cofnij ostatnią zmianę w utworze + + automation type + typ automatyki + + + MusEGui::BigTime - redo last undo - ponów ostanie cofnij + + format display + - Loop - Pętla + + bar + - Punchin - Włącz wcinki (punch In) + + beat + - Punchout - Wył. wcinki (punch out) + + + tick + - Rewind - Przewiń do tyłu + + minute + minuta - Forward - Przewiń do przodu + + second + sekunda - Stop - Stop + + + frame + ramka - Play - Odtwarzanie + + subframe + subramka - Record - Nagrywanie + + MusE: Bigtime + MuzA: Duży zegar + + + MusEGui::ClipListEdit - Panic - Zatrzymaj wszystkie komunikaty midi! + + MusE: Clip List Editor + - &Open - &Otwórz + + Window &Config + + + + MusEGui::ComboQuant - Open &Recent - Otwórz O&statnie + + + + Off + Wył. + + + MusEGui::CtrlCanvas - &Save - &Zapisz + + Drawing hint: Hold Ctrl to affect only existing events + - Save &As - Zapisz &Jako + + Use shift + pencil or line tool to draw new events + + + + MusEGui::CtrlPanel - Import Midifile - &Import Pliku Midi + + S + S - Export Midifile - &Export do pliku midi + + select controller + Wybierz kontroler - Import Wave File - Import Pliku &Wave + + X + - &Quit - &Zakończ + + remove panel + Usuń panel - Transport Panel - Panel transportu + + manual adjust + - Bigtime Window - Duży Zegar + + ctrl-double-click on/off + - Edit Instrument - Edytuj Instrument + + off + - Input Plugins - Wtyczki wejścia + + + Velocity + Prędk. uderz. (vel) - Transpose - Transponuj + + add new ... + dodaj nowe ... - Midi Input Transform - Przekształcanie Wejścia Midi + + + Instrument-defined + - Midi Input Filter - Filtr Wejścia Midi + + + Add ... + - Midi Remote Control - Zdalne Sterowanie Midi + + Others + - Reset Instr. - Reset Instr. + + Edit instrument ... + - Init Instr. - Inicjalizacja Instr. + + Common Controls + + + + MusEGui::DrumEdit - Local Off - Local Off + + + mute instrument + wyłącz instrument - Bounce to Track - -Zgrywanie śladu (bounce) + + + sound name + nazwa brzmienia - Bounce to File - Zgrywanie do Pliku (bounce) + + + volume percent + - Restart Audio - Zrestartuj Audio + + + quantisation + kwantyzacja - Mixer Automation - Automatyka Miksera + + + this input note triggers the sound + ta wysokość uruchamia brzmienie - Take Snapshot - Zrób zrzut ekranu + + + note length + długość dźwięku - Clear Automation Data - Wyczyść automatykę + + + this is the note which is played + - Global Settings - Globalne Ustawienia + + output channel (hold ctl to affect all rows) + - Configure Shortcuts - Konfiguracja skrótów + + output port (hold ctl to affect all rows) + - Follow Song - podążanie kursora za utworem + + + shift + control key: draw velocity level 1 + - Don't Follow Song - nie podążaj za utworem + + + control key: draw velocity level 2 + - Follow Page - kursor się przesuwa + + + shift key: draw velocity level 3 + - Follow Continuous - takty się przesuwają (kursor stoi) + + + draw velocity level 4 + - Metronome - Metronom + + output channel (ctl: affect all rows) + - Midi Sync - Synchronizacja Midi + + output port (ctl: affect all rows) + - Appearance Settings - Ustawienia wyglądu + + &File + &Plik - Midi Ports / Soft Synth - Porty Midi i Syntezatory Softowe + + Load Map + Załaduj zestaw - &Manual - &Instrukcja Obłsugi + + Save Map + Zapisz zestaw - &MusE Homepage - strona domowa &MuzA + + Reset GM Map + - &Report Bug... - &Zgłoś Błąd... + + &Edit + - &About MusE - &Informacje o programie + + Cut + Wytnij - File Buttons - Przyciski Menu Plik + + Copy + Kopiuj - Transport - Panel transportu + + Copy events in range + - &File - &Plik + + Paste + Wklej - &View - &Przeglądaj + + Paste (with Dialog) + - &Midi - &Midi + + Delete Events + Kasuj Elementy - &Audio - &Audio + + &Select + &Zaznacz - &Help - P&omoc + + Select All + Zaznacz wszystko - Cannot read template - Nie można odczytać pliku szablonu + + Select None + Bez zaznaczenia - File open error - Błąd odczytu pliku + + Invert + Odwróć - File read error - błąd odczytu pliku + + Inside Loop + - MusE: Song: - MuzA: Utwór + + Outside Loop + Poza obrębem lokatorów - MusE: load project - MuzA: ładuj utwór + + Previous Part + - MusE: load template - MuzA: ładuj szablon + + Next Part + - MusE: Write File failed - MuzA: Zapis pliku nie powiódł się + + Fu&nctions + - The current Project contains unsaved data -Save Current Project? - Otwarty utwór zawiera niezapisane dane -Zapisać otwarty utwór? + + Re-order list + - MusE: Save As - MuzA: Zapisz Jako + + Set Fixed Length + Ustaw stałą długość nut - Nothing to edit - Nie ma nic do edytowania + + Modify Velocity + - MusE: Bounce to Track - MuzA: Zgrywanie (bounce) do Śladu + + Crescendo/Decrescendo + - MusE: Bounce to File - MuzA: Zgrywanie (bounce) do Pliku + + Quantize + Kwantyzuj - MusE: Bounce - MuzA: Zgrywanie (bounce) + + Erase Event + - set left/right marker for bounce range - ustaw lokatory do zgrania (bounce) danego zakresu + + Move Notes + - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Otwarty utwór zawiera niezapisane dane. -Załadowanie nadpisze otwarty utwór: -Zapisać otwarty utwór? + + Delete Overlaps + - &Abort - &Anuluj + + &Plugins + - MusE: Export Midi - MuzA: Exportuj Midi + + Window &Config + - no help found at: - nie znalezniono pomocy + + Drum tools + - MusE: Open Help - MuzA: Otwórz Pomoc + + Load Drummap + Załaduj zestaw perkusyjny - MusE: Import Midi - MuzA: Importuj Midi + + Store Drummap + Zapisz zestaw perkusyjny - Add midi file to current project? - - Dodać plik midi do otwartego utworu? + + Step Record + - &Add to Project - &Dodaj do utworu + + Midi Input + - &Replace - &Zastąp + + cursor tools + - reading midifile - - czytanie pliku midi + + Set step size for cursor edit + - &Yes - &Tak + + ctrl + - &No - &Nie + + Add Controller View + - - - MusEArranger::Arranger - Enable Recording - Udostępnij nagrywanie + + M + - Solo Indicator - Solo Wzkaźnik + + Sound + Brzmienie - Track Type - Typ śladu + + Vol + - Time Lock - Zablokuj Ślad + + QNT + Kwant. - Arranger - Główne Okno + + E-Note + U-Wys - Type - Typ + + Len + Długość - NO - Brak + + A-Note + W-Wys - GM - GM + + Ch + - GS - GS + + Port + Port - XG - XG + + LV1 + PV1 - midi song type - Utwór Midi + + LV2 + PV2 - midi pitch - transpozycja midi + + LV3 + PV3 - global midi pitch shift - globalna transpozycja midi + + LV4 + PV4 - Tempo - Tempo + + Muse: Load Drum Map + MuzA: Załaduj zestaw perkusyjny - midi tempo - Tempo Midi + + MusE: Store Drum Map + MuzA: Zapisz zestaw perkusyjny - N - 100% + + Drum map + - TrackInfo - Info o śladzie + + Reset the drum map with GM defaults? + + + + MusEGui::EditCAfterDialog - S - S + + MusE: Enter Channel Aftertouch + MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - C - T + + Time Position + Pozycja: - Track - Ślad + + Pressure + Nacisk + + + MusEGui::EditEventDialog - T - B + + Ok + Akceptuj - Automation - Au&tomatyka + + Cancel + Anuluj - MusEArranger::ArrangerView + MusEGui::EditInstrument - panic - Zatrzymaj wszystkie komunikaty midi! + + + MusE: Create file failed + - &Copy - &Kopiuj + + MusE: Write File failed + MuzA: Zapis pliku nie powiódł się - &Paste - &Wklej + + + MusE: Save Instrument Definition + - Delete Selected Tracks - Skasuj Zaznaczone Ślady + + + Instrument Definition (*.idf) + - Add Track - Dodaj Ślad + + + MusE: Save instrument as + - Select &All - Zaznacz &wszystko + + Enter a new unique instrument name: + - &Deselect All - &Odznacz wszystko + + The user instrument '%1' already exists. This will overwrite its .idf instrument file. +Are you sure? + - Invert &Selection - Odwróć &zaznaczenie + + MusE: Bad instrument name + - &Inside Loop - &Pomiędzy lokatorami. + + Please choose a unique instrument name. +(The name might be used by a hidden instrument.) + - &Outside Loop - &Poza obrębem lokatorów - - - All &Parts on Track - Wszystkie &klocki na śladzie - - - Pianoroll - Pianoroll - - - Drums - Edytor Perkusji - - - List - Edytor Lista - - - Mastertrack - Ślad Tempo/Metrum - - - Graphic - Edytor Graficzny Tempo/Metrum - - - Midi &Transform - &Przekształcanie Midi - - - Global Cut - Globalne Wycięcie - - - Global Insert - Globalne Wstawienie - - - Global Split - Globalne Podzielenie - - - &Structure - &Globalne - - - Functions - Opcje - - - Transpose - Transponuj - - - New - Nowy - - - - MusEArranger::PartCanvas - - Cannot copy/move/clone to different Track-Type - Nie można skopiować/przenieść/sklonować do innego typu śladu - - - &Copy - &Kopiuj - - - rename - zmień nazwę - - - color - kolor - - - split - podziel - - - de-clone - sklonuj - - - wave edit - edycja audio - - - Cannot paste: multiple tracks selected - Nie można wkleić: zaznaczono kilka śladów - - - Cannot paste: no track selected - Nie można wkleić: nie zaznaczono żadnych śladów - - - Can only paste to midi/drum track - Można tylko wkleić do śladu midi, lub perkusji - - - Can only paste to wave track - Można wkleić tylko do śladu audio - - - Cannot paste: wrong data type - Nie można wkleić: nieprawidłowy typ danych - - - - MusEArranger::TList - - MusE: bad trackname - MuzA: zła nazwa śladu - - - please choose a unique track name - proszę wybrać niepowtarzalną nazwę dla śladu - - - Update drummap? - Zaktualizować zestaw perkusyjny? - - - Do you want to use same port for all instruments in the drummap? - Czy chcesz używać jednego portu midi dla wszystkich instrumentów w zestawie perkusyjnym? - - - &Yes - &Tak - - - &No - &Nie - - - show gui - pokaż interfejs użytkownika - - - Midi - Midi - - - Drum - Perkusja - - - Do you want to use same port and channel for all instruments in the drummap? - Czy chcesz używać jednego portu i jednego kanału dla wszystkich instrumentów w zestawie perkusyjnym? - - - - MusECore::Song - - - Jack shutdown! - - - - - Jack has detected a performance problem which has lead to -MusE being disconnected. -This could happen due to a number of reasons: -- a performance issue with your particular setup. -- a bug in MusE (or possibly in another connected software). -- a random hiccup which might never occur again. -- jack was voluntary stopped by you or someone else -- jack crashed -If there is a persisting problem you are much welcome to discuss it -on the MusE mailinglist. -(there is information about joining the mailinglist on the MusE - homepage which is available through the help menu) - -To proceed check the status of Jack and try to restart it and then . -click on the Restart button. - - - - - - Automation: - - - - - previous event - - - - - next event - - - - - - set event - - - - - - add event - - - - - - erase event - - - - - erase range - - - - - clear automation - - - - - Clear all controller events? - - - - - &Ok - &Akceptuj - - - - &Cancel - - - - - MusE - external script failed - - - - - MusE was unable to launch the script, error message: -%1 - - - - - MusEGui - - - Select project directory - - - - - MusEGui::Appearance - - - Main application font, and default font for any - controls not defined here. - - - - - Mixer strips and effects racks. Midi track info panel. -Midi control panel entry box. - - - - - Transport controls. - - - - - Time scale upper, and time signature. -Controller graph and S/X buttons. - - - - - Time scale lower, and arranger part name overlay. - - - - - Tempo scale, and markers. - - - - - Mixer labels. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - - - - - Maximum mixer label auto-font-sizing font size. - - - - - Global opacity (opposite of transparency). - - - - - Standard - - - - - Custom - - - - - MusE: load image - Muza: Załaduj obrazek. - - - - Select style sheet - - - - - Qt style sheets (*.qss) - - - - - MusEGui::Arranger - - - Enable Recording - Udostępnij nagrywanie - - - - Mute/Off Indicator - - - - - Solo Indicator - Solo Wzkaźnik - - - - Track Type - Typ śladu - - - - Track Name - - - - - Midi output channel number or audio channels - - - - - Midi output port or synth midi port - - - - - Time Lock - Zablokuj Ślad - - - - Automation parameter selection - - - - - Notation clef - - - - - Enable recording. Click to toggle. - - - - - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - - - - - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - - - - - Track type. Right-click to change - midi and drum track types. - - - - - Track name. Double-click to edit. -Right-click for more options. - - - - - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - - - - - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - - - - - Time lock - - - - - Notation clef. Select this tracks notation clef. - - - - - Arranger - Główne Okno - - - - Cursor - - - - - Off - Wył. - - - - Bar - - - - - Snap - - - - - Len - - - - - - song length - bars - - - - - Type - Typ - - - - NO - Brak - - - - GM - GM - - - - GS - GS - - - - XG - XG - - - - - midi song type - Utwór Midi - - - - Pitch - - - - - midi pitch - transpozycja midi - - - - global midi pitch shift - globalna transpozycja midi - - - - Tempo - Tempo - - - - - midi tempo - Tempo Midi - - - - N - 100% - - - - TrackInfo - Info o śladzie - - - - R - - - - - M - - - - - S - S - - - - C - T - - - - Track - Ślad - - - - Port - - - - - Ch - - - - - T - B - - - - Automation - Au&tomatyka - - - - Clef - - - - - MusEGui::ArrangerView - - - MusE: Arranger - - - - - Undo/Redo tools - - - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - - - - - C&ut - - - - - &Copy - &Kopiuj - - - - Copy in range - - - - - &Paste - &Wklej - - - - Paste (show dialog) - - - - - Paste c&lone - - - - - Paste clone (show dialog) - - - - - &Insert Empty Measure - - - - - Delete Selected Tracks - Skasuj Zaznaczone Ślady - - - - Shrink selected parts - - - - - Expand selected parts - - - - - Clean selected parts - - - - - Add Track - Dodaj Ślad - - - - Select - - - - - Select &All - Zaznacz &wszystko - - - - &Deselect All - &Odznacz wszystko - - - - Invert &Selection - Odwróć &zaznaczenie - - - - &Inside Loop - &Pomiędzy lokatorami. - - - - &Outside Loop - &Poza obrębem lokatorów - - - - All &Parts on Track - Wszystkie &klocki na śladzie - - - - Score - - - - - all tracks in one staff - - - - - one staff per track - - - - - New score window - - - - - Pianoroll - Pianoroll - - - - Drums - Edytor Perkusji - - - - - List - Edytor Lista - - - - Wave - - - - - Mastertrack - Ślad Tempo/Metrum - - - - Graphic - Edytor Graficzny Tempo/Metrum - - - - Midi &Transform - &Przekształcanie Midi - - - - Global Cut - Globalne Wycięcie - - - - Global Insert - Globalne Wstawienie - - - - Global Split - Globalne Podzielenie - - - - Global Cut - selected tracks - - - - - Global Insert - selected tracks - - - - - Global Split - selected tracks - - - - - &Edit - - - - - &Structure - &Globalne - - - - Functions - Opcje - - - - &Quantize Notes - - - - - Change note &length - - - - - Change note &velocity - - - - - Crescendo/Decrescendo - - - - - Transpose - Transponuj - - - - Erase Events (Not Parts) - - - - - Move Events (Not Parts) - - - - - Set Fixed Note Length - - - - - Delete Overlapping Notes - - - - - Legato - - - - - Window &Config - - - - - - New - Nowy - - - - MusEGui::AudioMixerApp - - - &Create - - - - - &View - &Przeglądaj - - - - Routing - Konfiguracja połączeń - - - - Show Midi Tracks - - - - - Show Drum Tracks - - - - - Show Wave Tracks - - - - - Show Inputs - - - - - Show Outputs - - - - - Show Groups - - - - - Show Auxs - - - - - Show Synthesizers - - - - - MusEGui::AudioStrip - - - panorama - Panorama - - - - aux send level - Poziom syngału na wysyłce - - - - Pan - - - - - 1/2 channel - kanał m/s - - - - Pre - Przed - - - - pre fader - post fader - przed/ za tłumikiem - - - - dB - dB - - - - record - - - - - mute - wycisz - - - - record downmix - zgraj miks - - - - - solo mode - - - - - off - - - - - iR - Wej. - - - - input routing - - - - - oR - Wyj. - - - - output routing - połączenie Wyjścia - - - - Off - Wył. - - - - Read - Czytaj - - - - Touch - Dotknij - - - - Write - Zapisz - - - - automation type - typ automatyki - - - - MusEGui::BigTime - - - format display - - - - - bar - - - - - beat - - - - - - tick - - - - - minute - minuta - - - - second - sekunda - - - - - frame - ramka - - - - subframe - subramka - - - - MusE: Bigtime - MuzA: Duży zegar - - - - MusEGui::ClipListEdit - - - MusE: Clip List Editor - - - - - Undo/Redo tools - - - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - - - - - Window &Config - - - - - MusEGui::ComboQuant - - - - - Off - Wył. - - - - MusEGui::CtrlPanel - - - S - S - - - - select controller - Wybierz kontroler - - - - X - - - - - remove panel - Usuń panel - - - - manual adjust - - - - - double click on/off - - - - - off - - - - - - Velocity - - - - - add new ... - dodaj nowe ... - - - - - Instrument-defined - - - - - - Add ... - - - - - Others - - - - - Edit instrument ... - - - - - Common Controls - - - - - MusEGui::DrumEdit - - - - mute instrument - wyłącz instrument - - - - - sound name - nazwa brzmienia - - - - - volume percent - - - - - - quantisation - kwantyzacja - - - - - this input note triggers the sound - ta wysokość uruchamia brzmienie - - - - - note length - długość dźwięku - - - - - this is the note which is played - - - - - output channel (hold ctl to affect all rows) - - - - - output port (hold ctl to affect all rows) - - - - - - shift + control key: draw velocity level 1 - - - - - - control key: draw velocity level 2 - - - - - - shift key: draw velocity level 3 - - - - - - draw velocity level 4 - - - - - output channel (ctl: affect all rows) - - - - - output port (ctl: affect all rows) - - - - - &File - &Plik - - - - Load Map - Załaduj zestaw - - - - Save Map - Zapisz zestaw - - - - Reset GM Map - - - - - &Edit - - - - - Cut - Wytnij - - - - Copy - Kopiuj - - - - Copy events in range - - - - - Paste - Wklej - - - - Paste (with Dialog) - - - - - Delete Events - Kasuj Elementy - - - - &Select - &Zaznacz - - - - Select All - Zaznacz wszystko - - - - Select None - Bez zaznaczenia - - - - Invert - - - - - Inside Loop - - - - - Outside Loop - Poza obrębem lokatorów - - - - Previous Part - - - - - Next Part - - - - - Fu&nctions - - - - - Re-order list - - - - - Set Fixed Length - Ustaw stałą długość nut - - - - Modify Velocity - - - - - Crescendo/Decrescendo - - - - - Quantize - - - - - Erase Event - - - - - Move Notes - - - - - Delete Overlaps - - - - - &Plugins - - - - - Window &Config - - - - - Drum tools - - - - - Load Drummap - Załaduj zestaw perkusyjny - - - - Store Drummap - Zapisz zestaw perkusyjny - - - - Step Record - - - - - Midi Input - - - - - cursor tools - - - - - Set step size for cursor edit - - - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - - - - - ctrl - - - - - Add Controller View - - - - - M - - - - - Sound - Brzmienie - - - - Vol - - - - - QNT - Kwant. - - - - E-Note - U-Wys - - - - Len - - - - - A-Note - W-Wys - - - - Ch - - - - - Port - - - - - LV1 - PV1 - - - - LV2 - PV2 - - - - LV3 - PV3 - - - - LV4 - PV4 - - - - Muse: Load Drum Map - MuzA: Załaduj zestaw perkusyjny - - - - MusE: Store Drum Map - MuzA: Zapisz zestaw perkusyjny - - - - Drum map - - - - - Reset the drum map with GM defaults? - - - - - MusEGui::EditCAfterDialog - - - MusE: Enter Channel Aftertouch - MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - - - Time Position - Pozycja: - - - - Pressure - Nacisk - - - - MusEGui::EditEventDialog - - - Ok - Akceptuj - - - - Cancel - Anuluj - - - - MusEGui::EditInstrument - - - - MusE: Create file failed - - - - - MusE: Write File failed - MuzA: Zapis pliku nie powiódł się - - - - - MusE: Save Instrument Definition - - - - - - Instrument Definition (*.idf) - - - - - - MusE: Save instrument as - - - - - Enter a new unique instrument name: - - - - - The user instrument '%1' already exists. This will overwrite its .idf instrument file. -Are you sure? - - - - - MusE: Bad instrument name - - - - - Please choose a unique instrument name. -(The name might be used by a hidden instrument.) - - - - - MusE: Bad patch name - - - - - Please choose a unique patch name - - - - - MusE: Bad patchgroup name - - - - - Please choose a unique patchgroup name - - - - - MusE: Bad controller name - - - - - Please choose a unique controller name - - - - - - MusE: Cannot add common controller - - - - - A controller named '%1' already exists. - - - - - A controller number %1 already exists. - - - - - - MusE - MuzA - - - - - The current Instrument contains unsaved data -Save Current Instrument? - - - - - - &Save - &Zapisz - - - - - &Nosave - &Nie zapisuj - - - - &Abort - &Anuluj - - - - MusEGui::EditMetaDialog - - - MusE: Enter Meta Event - - - - - Time Position - Pozycja: - - - - Meta Type - Meta Typ - - - - Enter Hex - Wstaw Heks. - - - - MusEGui::EditPAfterDialog - - - MusE: Enter Poly Aftertouch - MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - - - Time Position - Pozycja: - - - - Pitch - - - - - Pressure - Nacisk - - - - MusEGui::EditToolBar - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - Kliknij na strzałkę. -Strzałką możesz zaznaczać, przesuwać i kopiować klocki - - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - Kliknij na ołówek. -Ołówkiem możesz tworzyć klocki oraz zmieniać ich długość. - - - - select Delete Tool: -with the delete tool you can delete parts - Kliknij na Gumkę. -Gumką można kasować klocki. - - - - select Cut Tool: -with the cut tool you can split a part - Kliknij na Nożyczki. -Nożyczkami można ciąć klocki. - - - - select Glue Tool: -with the glue tool you can glue two parts - Kliknij na Klej. -Klejem możesz sklejać dwa klocki - - - - select Score Tool: - - Wybierz Podgląd Nutowy. - - - - select Quantize Tool: -insert display quantize event - Ustaw Kwantyzator -(ustawia kwantyzację wstawiania komunikatów midi). - - - - select Drawing Tool - wybierz Wykres - - - - select Muting Tool: -click on part to mute/unmute - Kliknij na Wyłącz. -Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. - - - - Manipulate automation - - - - - Cursor tool - - - - - pointer - Strzałka - - - - pencil - Ołówek - - - - eraser - Gumka - - - - cutter - Nożyczki - - - - score - Pogląd nutowy - - - - glue - - - - - quantize - Kwantyzator - - - - draw - Wykres - - - - mute parts - Wyłącz klocki z odtwarzania - - - - edit automation - - - - - cursor - - - - - Edit Tools - Narzędzia Edycyjne - - - - MusEGui::EffectRack - - - effect rack - skrzynia efektów - - - - new - nowy - - - - change - zmień - - - - move up - przesuń w górę - - - - move down - przesuń w dół - - - - remove - usuń - - - - bypass - omiń (bypass) - - - - show gui - pokaż interfejs użytkownika - - - - show native gui - - - - - save preset - - - - - MusE: Save Preset - - - - - Replace effect - - - - - Do you really want to replace the effect %1? - - - - - MusEGui::Header - - - Track Info Columns - - - - - MusEGui::LMaster - - - MusE: Mastertrack - MuzA: Ślad Tempo/Metrum - - - - &Edit - - - - - Insert Tempo - - - - - Insert Signature - - - - - Insert Key - - - - - Edit Positon - - - - - Edit Value - - - - - Delete Event - - - - - Window &Config - - - - - Undo/Redo tools - - - - - Edit tools - - - - - Tempo - Tempo - - - - Timesig - Metrum - - - - Key - - - - - new tempo - nowe tempo - - - - new signature - nowe metrum - - - - new key - - - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - - - - - Meter - Miernik - - - - Time - - - - - Type - Typ - - - - Value - Wartość - - - - Reposition of the initial tempo and signature events is not allowed - - - - - MusE: List Editor - - - - - Input error, conversion not OK or value out of range - - - - - Reposition of tempo and signature events to start position is not allowed! - - - - - MusEGui::ListEdit - - - insert Note - Wstaw nutę - - - - insert SysEx - wstaw SysEx - - - - insert Ctrl - wstaw - - - - insert Meta - Wstaw Meta - - - - insert Channel Aftertouch - Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - - - insert Poly Aftertouch - Wstaw zmianę średniego nacisku pod uderzeniu (Poly Aftertouch) - - - - &Edit - - - - - Cut - Wytnij - - - - Copy - Kopiuj - - - - Paste - Wklej - - - - Delete Events - Kasuj Elementy - - - - Window &Config - - - - - Undo/Redo tools - - - - - Insert tools - - - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - - - - - Tick - Takt (impuls sygnału czasu) - - - - Bar - - - - - Type - Typ - - - - Ch - - - - - Val A - Wart. A - - - - Val B - Wart. B - - - - Val C - Wart. C - - - - Len - - - - - Comment - Opis - - - - MusEGui::MPConfig - - - - Default input connections - - - - - - Are you sure you want to apply to all existing midi tracks now? - - - - - - Default output connections - - - - - - Setting will apply to new midi tracks. -Do you want to apply to all existing midi tracks now? - - - - - MusE: bad device name - - - - - please choose a unique device name - - - - - - in - - - - - - out - - - - - Show first aliases - - - - - Show second aliases - - - - - - Toggle all - - - - - - Change all tracks now - - - - - Create Jack device - - - - - - Port Number - Numer portu - - - - Enable gui - - - - - Enable reading - - - - - Enable writing - - - - - Port instrument - - - - - Midi device name. Click to edit (Jack) - - - - - Connections from Jack Midi outputs - - - - - Connections to Jack Midi inputs - - - - - Auto-connect these channels to new midi tracks - - - - - Auto-connect new midi tracks to these channels - - - - - Auto-connect new midi tracks to this channel - - - - - Device state - - - - - Enable gui for device - - - - - Enable reading from device - - - - - Enable writing to device - - - - - Name of the midi device associated with this port number. Click to edit Jack midi name. - - - - - Instrument connected to port - Instrument połączony do portu - - - - Connections from Jack Midi output ports - - - - - Connections to Jack Midi input ports - - - - - Auto-connect these channels, on this port, to new midi tracks. - - - - - Connect new midi tracks to these channels, on this port. - - - - - Connect new midi tracks to this channel, on this port. - - - - - State: result of opening the device - Status: rezultat otworzenia urządzenia - - - - Port - - - - - GUI - - - - - I - Wej. - - - - O - Wyj. - - - - Instrument - - - - - Device Name - Nazwa Urządzenia - - - - In routes - - - - - Out routes - - - - - Def in ch - - - - - Def out ch - - - - - State - Status - - - - <unknown> - - - - - - <none> - - - - - MusEGui::MTScale - - - bar scale - - - - - MusEGui::MTScaleFlo - - - bar scale - - - - - MusEGui::MarkerView - - - MusE: Marker - MuzA: Znacznik - - - - add marker - Dodaj znacznik - - - - delete marker - Kasuj znacznik - - - - &Edit - - - - - Window &Config - - - - - Undo/Redo tools - - - - - edit tools - Narzędzia Edycyjne - - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - - - - - Bar:Beat:Tick - Takt:Puls:Takt - - - - Hr:Mn:Sc:Fr:Sf - Godz.:Min.:Sek.:Kl.:SKl - - - - Lock - Zablokuj - - - - Text - Tekst - - - - Marker Properties - Właściwości znacznika - - - - MusEGui::MasterEdit - - - MusE: Mastertrack - MuzA: Ślad Tempo/Metrum - - - - Window &Config - - - - - Undo/Redo tools - - - - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - - - - - Enable master - - - - - Enable - Włącz - - - - Enable usage of master track - Aktywuj Ślad Tempo/Metrum - - - - Info - Info - - - - Cursor - - - - - time at cursor position - Wstaw metrum w aktualnej pozycji kursora - - - - tempo at cursor position - Wstaw tempo w aktualnej pozycji kursora - - - - Off - Wył. - - - - Bar - - - - - Snap - - - - - CurPos - Akt. Poz. Kursora: - - - - tempo at current position - Wstaw tempo w aktualnej pozycji kursora - - - - time signature at current position - Wstaw tempo w aktualnej pozycji kursora - - - - MusEGui::MidiInputTransformDialog - - - - New - Nowy - - - - MusEGui::MidiStrip - - - - - off - - - - - - double click on/off - - - - - VariationSend - VariationSend - - - - Var - Var - - - - ReverbSend - Wysyłka Pogłosu - - - - Rev - Pogł. - - - - ChorusSend - Wysyłka Chorusa - - - - Cho - Chorus - - - - dB - dB - - - - Pan/Balance - Pan/Równowaga - - - - Pan - - - - - record - - - - - mute - wycisz - - - - solo mode - - - - - iR - Wej. - - - - input routing - - - - - oR - Wyj. - - - - output routing - połączenie Wyjścia - - - - MusEGui::MidiSyncConfig - - - - Port Number - Numer portu - - - - - Name of the midi device associated with this port number - Nazwa urządzenia midi skojarzona z tym numerem portu - - - - Midi clock input detected - - - - - - Midi tick input detected - - - - - Midi real time input detected - - - - - MMC input detected - - - - - MTC input detected - - - - - Detected SMPTE format - - - - - Receive id number. 127 = Global. Double click to edit. - - - - - Accept midi clock input - - - - - Accept midi real time input - - - - - Accept MMC input - - - - - Accept MTC input - - - - - Receive start rewinds before playing - - - - - Transmit id number. 127 = Global. Double click to edit. - - - - - Send midi clock output - - - - - Send midi realtime output - - - - - - Send MMC output - - - - - - Send MTC output - - - - - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - - - - - Midi realtime input detected, including - start/stop/continue, and song position. - - - - - MMC input detected, including stop/play/deferred play, and locate. - - - - - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - - - - - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - - - - - Receive id number. 127 = global receive all, even if not global. - - - - - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. - - - - - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. - - - - - Accept MMC input, including stop/play/deferred play, and locate. - - - - - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - - - - - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - - - - - Transmit id number. 127 = global transmit to all. - - - - - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - - - - - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - - - - - Port - - - - - Device Name - Nazwa Urządzenia - - - - c - - - - - k - - - - - r - - - - - m - min. - - - - t - - - - - type - - - - - rid - - - - - rc - - - - - rr - - - - - rm - - - - - rt - - - - - rw - - - - - tid - - - - - tc - - - - - tr - - - - - tm - - - - - tt - - - - - MusE - MuzA - - - - Settings have changed -Apply sync settings? - - - - - &Apply - &Zastosuj - - - - &No - &Nie - - - - &Abort - &Anuluj - - - - <none> - - - - - MusEGui::MidiTrackInfo - - - - <unknown> - - - - - MusEGui::MidiTransformerDialog - - - - New - Nowy - - - - MusEGui::MixdownFileDialog - - - Wave Files (*.wav);;All Files (*) - Pliki Wave (*.wav);;Wszystkie Pliki (*) - - - - MusEGui::MusE - - - - Failed to start audio! - - - - - Was not able to start audio, check if jack is running. - - - - - - Timeout waiting for audio to run. Check if jack is running. - - - - - - Und&o - Co&fnij - - - - Re&do - Co&fnij - - - - undo last change to song - cofnij ostatnią zmianę w utworze - - - - redo last undo - ponów ostanie cofnij - - - - Loop - Pętla - - - - loop between left mark and right mark - Zapętl pomiędzy lokatorami - - - - Punchin - Włącz wcinki (punch In) - - - - record starts at left mark - Nagrywaj od lewego lokatora. - - - - Punchout - Wył. wcinki (punch out) - - - - record stops at right mark - Nagrywaj od prawego lokatora. - - - - Start - - - - - rewind to start position - Przewiń do początku. - - - - Rewind - Przewiń do tyłu - - - - rewind current position - Przewijaj kursor do tyłu. - - - - Forward - Przewiń do przodu - - - - move current position - Przewijaj kursor do przodu. - - - - Stop - Stop - - - - stop sequencer - Zatrzymaj sekwencer. - - - - Play - Odtwarzanie - - - - start sequencer play - Uruchom odtwarzanie sekwencera. - - - - Record - Nagrywanie - - - - to record press record and then play - Aby nagrywać najpierw naciśnij nagrywanie, potem odtwarzanie. - - - - - Panic - Zatrzymaj wszystkie komunikaty midi! - - - - send note off to all midi channels - Zatrzymaj komunikaty midi na wszystkich kanałach! - - - - &New - - - - - - Create New Song - Twórz nowy utwór. Można też nacisnąć skrót "Ctrl-N". - - - - &Open - &Otwórz - - - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Otwórz nowy utwór. Można też wybrać <b>Otwórz</b> z menu Plik. - - - - - Open &Recent - Otwórz O&statnie - - - - - - &Save - &Zapisz - - - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Zapisz edytowany utwór. Trzeba podać nazwę pliku. -Można też wybrać "Zapisz" z menu plik, lub "Ctrl-S". - - - - - Save &As - Zapisz &Jako - - - - Import Midifile - &Import Pliku Midi - - - - Export Midifile - &Export do pliku midi - - - - Import Part - - - - - - Import Wave File - Import Pliku &Wave - - - - Find unused wave files - - - - - &Quit - &Zakończ - - - - Song Info - - - - - Transport Panel - Panel transportu - - - - Bigtime Window - Duży Zegar - - - - Mixer A - - - - - Mixer B - - - - - Cliplist - - - - - Marker View - - - - - Arranger View - - - - - Fullscreen - - - - - &Plugins - - - - - Edit Instrument - Edytuj Instrument - - - - Input Plugins - Wtyczki wejścia - - - - Transpose - Transponuj - - - - Midi Input Transform - Przekształcanie Wejścia Midi - - - - Midi Input Filter - Filtr Wejścia Midi - - - - Midi Remote Control - Zdalne Sterowanie Midi - - - - Rhythm Generator - - - - - Reset Instr. - Reset Instr. - - - - Init Instr. - Inicjalizacja Instr. - - - - Local Off - Local Off - - - - Bounce to Track - -Zgrywanie śladu (bounce) - - - - Bounce to File - Zgrywanie do Pliku (bounce) - - - - Restart Audio - Zrestartuj Audio - - - - Mixer Automation - Automatyka Miksera - - - - Take Snapshot - Zrób zrzut ekranu - - - - Clear Automation Data - Wyczyść automatykę - - - - Cascade - - - - - Tile - - - - - In rows - - - - - In columns - - - - - Global Settings - Globalne Ustawienia - - - - Configure Shortcuts - Konfiguracja skrótów - - - - Follow Song - podążanie kursora za utworem - - - - Don't Follow Song - nie podążaj za utworem - - - - Follow Page - kursor się przesuwa - - - - Follow Continuous - takty się przesuwają (kursor stoi) - - - - Metronome - Metronom - - - - Midi Sync - Synchronizacja Midi + + MusE: Bad patch name + - Midi File Import/Export + Please choose a unique patch name - - Appearance Settings - Ustawienia wyglądu - - - - Midi Ports / Soft Synth - Porty Midi i Syntezatory Softowe - - - - &Manual - &Instrukcja Obłsugi - - - - &MusE Homepage - strona domowa &MuzA + + MusE: Bad patchgroup name + - &Report Bug... - &Zgłoś Błąd... + Please choose a unique patchgroup name + - - &About MusE - &Informacje o programie + + MusE: Bad controller name + - - File Buttons - Przyciski Menu Plik + + Please choose a unique controller name + - - Undo/Redo + + + MusE: Cannot add common controller - - Transport - Panel transportu + + A controller named '%1' already exists. + - - &File - &Plik + + A controller number %1 already exists. + - - &View - &Przeglądaj + + + MusE + MuzA - - &Midi - &Midi + + + The current Instrument contains unsaved data +Save Current Instrument? + - - &Audio - &Audio + + + &Save + &Zapisz - - A&utomation - + + + &Nosave + &Nie zapisuj - - &Windows - + + &Abort + &Anuluj + + + MusEGui::EditMetaDialog - - MusE Se&ttings + + MusE: Enter Meta Event - - &Help - P&omoc + + Time Position + Pozycja: - - Cannot read template - Nie można odczytać pliku szablonu + + Meta Type + Meta Typ - - File open error - Błąd odczytu pliku + + Enter Hex + Wstaw Heks. + + + MusEGui::EditPAfterDialog - - File read error - błąd odczytu pliku + + MusE: Enter Poly Aftertouch + MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - Unknown File Format: %1 - + + Time Position + Pozycja: - - - - MusE: Song: %1 - + + Pitch + Transpozycja - - MusE: load project - MuzA: ładuj utwór + + Pressure + Nacisk + + + MusEGui::EditToolBar - - MusE: load template - MuzA: ładuj szablon + + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + Kliknij na strzałkę. +Strzałką możesz zaznaczać, przesuwać i kopiować klocki - - MusE: Write File failed - MuzA: Zapis pliku nie powiódł się + + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + Kliknij na ołówek. +Ołówkiem możesz tworzyć klocki oraz zmieniać ich długość. - - The current Project contains unsaved data -Save Current Project? - Otwarty utwór zawiera niezapisane dane -Zapisać otwarty utwór? + + select Delete Tool: +with the delete tool you can delete parts + Kliknij na Gumkę. +Gumką można kasować klocki. - - S&kip - - - - - &Cancel - - - - - MusE: Save As - MuzA: Zapisz Jako + select Cut Tool: +with the cut tool you can split a part + Kliknij na Nożyczki. +Nożyczkami można ciąć klocki. - - - Nothing to edit - Nie ma nic do edytowania + + select Glue Tool: +with the glue tool you can glue two parts + Kliknij na Klej. +Klejem możesz sklejać dwa klocki - - - - - - MusE: Bounce to Track - MuzA: Zgrywanie (bounce) do Śladu + + select Score Tool: + + Wybierz Podgląd Nutowy. - - No wave tracks found - + + select Quantize Tool: +insert display quantize event + Ustaw Kwantyzator +(ustawia kwantyzację wstawiania komunikatów midi). - - - No audio output tracks found - + + select Drawing Tool + wybierz Wykres - - Select one audio output track, -and one target wave track - + + select Muting Tool: +click on part to mute/unmute + Kliknij na Wyłącz. +Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. - - Select one target wave track + + Manipulate automation - - Select one target wave track, -and one audio output track + + Cursor tool - - - MusE: Bounce to File - MuzA: Zgrywanie (bounce) do Pliku + + pointer + Strzałka - Select one audio output track - + pencil + Ołówek - - MusE: Bounce - MuzA: Zgrywanie (bounce) + + eraser + Gumka - set left/right marker for bounce range - ustaw lokatory do zgrania (bounce) danego zakresu + cutter + Nożyczki - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Otwarty utwór zawiera niezapisane dane. -Załadowanie nadpisze otwarty utwór: -Zapisać otwarty utwór? + + score + Pogląd nutowy - - - &Abort - &Anuluj + + glue + - - MusE: Export Midi - MuzA: Exportuj Midi + + quantize + Kwantyzator - - no help found at: - nie znalezniono pomocy + + draw + Wykres - - MusE: Open Help - MuzA: Otwórz Pomoc + + mute parts + Wyłącz klocki z odtwarzania - - Unable to launch help + + edit automation - For some reason MusE has to launch the default -browser on your machine. + cursor - - MusE: Import Midi - MuzA: Importuj Midi + + Edit Tools + Narzędzia Edycyjne + + + MusEGui::EffectRack - - Add midi file to current project? - - Dodać plik midi do otwartego utworu? + + effect rack + skrzynia efektów - - &Add to Project - &Dodaj do utworu + + new + nowy - &Replace - &Zastąp + change + zmień - - reading midifile - - czytanie pliku midi + + move up + przesuń w górę - - -failed: - + + move down + przesuń w dół - - Import part is only valid for midi and wave tracks! - + + remove + usuń - - MusE: load part - + + bypass + omiń (bypass) - - No track selected for import - - - - - %n part(s) out of %1 could not be imported. -Likely the selected track is the wrong type. - - - - - - %n part(s) could not be imported. -Likely the selected track is the wrong type. - - - + show gui + pokaż interfejs użytkownika - - to import an audio file you have first to selecta wave track + + show native gui - - Import Wavefile + + save preset - - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? + + MusE: Save Preset - - &Yes - &Tak + + Replace effect + - &No - &Nie + Do you really want to replace the effect %1? + - MusEGui::NoteInfo + MusEGui::GlobalSettingsConfig - - Note Info - Info o dźwięku + + MusE: Choose start template or song + + + + MusEGui::Header - - Start + + Track Info Columns + + + MusEGui::LMaster + + + MusE: Mastertrack + MuzA: Ślad Tempo/Metrum + - Len + &Edit - - Pitch + + Insert Tempo - - Velo On - Prędk. uderz. + + Insert Signature + - - Velo Off - Prędk. puszcz. + + Insert Key + - - - MusEGui::PartCanvas - - Cannot copy/move/clone to different Track-Type - Nie można skopiować/przenieść/sklonować do innego typu śladu + + Edit Positon + - - C&ut + + Edit Value - - &Copy - &Kopiuj + + Delete Event + - - s&elect + + Window &Config - - clones + + Edit tools - - rename - zmień nazwę + + Tempo + Tempo - - color - kolor + + Timesig + Metrum - - delete + + Key - - split - podziel + + new tempo + nowe tempo - - glue + + new signature + nowe metrum + + + + new key - - de-clone - sklonuj + + Meter + Miernik - - - - save part to disk + + Time - - wave edit - edycja audio + + Type + Typ - - file info + + Value + Wartość + + + + Reposition of the initial tempo and signature events is not allowed - - MusE: save part + + MusE: List Editor - - Part name: %1 -Files: + + Input error, conversion not OK or value out of range - - - %n part(s) out of %1 could not be pasted. -Likely the selected track is the wrong type. - - - + + + Reposition of tempo and signature events to start position is not allowed! + + + + + MusEGui::ListEdit + + + insert Note + Wstaw nutę - + - %n part(s) could not be pasted. -Likely the selected track is the wrong type. - - - + insert SysEx + wstaw SysEx - - Cannot paste: multiple tracks selected - Nie można wkleić: zaznaczono kilka śladów + + insert Ctrl + wstaw - - Cannot paste: no track selected - Nie można wkleić: nie zaznaczono żadnych śladów + + insert Meta + Wstaw Meta - - Can only paste to midi/drum track - Można tylko wkleić do śladu midi, lub perkusji + + insert Channel Aftertouch + Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) - - Can only paste to wave track - Można wkleić tylko do śladu audio + + insert Poly Aftertouch + Wstaw zmianę średniego nacisku pod uderzeniu (Poly Aftertouch) - - Can only paste to midi or wave track + + &Edit - - Cannot paste: wrong data type - Nie można wkleić: nieprawidłowy typ danych + + Cut + Wytnij - - - MusEGui::PasteDialog - - - %n quarter(s) - - - + + + Copy + Kopiuj - - %1 quarter - for floating-point arguments like 1.5 - + + Paste + Wklej - - %1 quarters - for floating-point arguments like 1.5 - + + Delete Events + Kasuj Elementy - - - MusEGui::PasteEventsDialog - - - %n quarter(s) - - - + + + Window &Config + - %1 quarter - for floating-point arguments like 1.5 + Insert tools - - %1 quarters - for floating-point arguments like 1.5 - + + Tick + Takt (impuls sygnału czasu) - - - MusEGui::PianoRoll - - &Edit + + Bar - - C&ut + + Type + Typ + + + + Ch - - &Copy - &Kopiuj + + Val A + Wart. A - - Copy events in range - + + Val B + Wart. B - - &Paste - &Wklej + + Val C + Wart. C - - Paste (with dialog) - + + Len + Długość - - Delete &Events - + + Comment + Opis + + + MusEGui::MPConfig - - &Select - &Zaznacz + + + Default input connections + - - Select &All - Zaznacz &wszystko + + + Are you sure you want to apply to all existing midi tracks now? + - - &Deselect All - &Odznacz wszystko + + + Default output connections + - - Invert &Selection - Odwróć &zaznaczenie + + + Setting will apply to new midi tracks. +Do you want to apply to all existing midi tracks now? + - - &Inside Loop - &Pomiędzy lokatorami. + + MusE: bad device name + - - &Outside Loop - &Poza obrębem lokatorów + + please choose a unique device name + - - &Previous Part + + + in - - &Next Part + + + out - - Fu&nctions + + Show first aliases - - Quantize + + Show second aliases - - Modify Note Length + + + Toggle all - - Modify Velocity + + + Change all tracks now - - Crescendo/Decrescendo + + Create Jack device - - Transpose - Transponuj + + + Port Number + Numer portu - - Erase Events + + Enable gui - - Move Notes + + Enable reading - - Set Fixed Length - Ustaw stałą długość nut + + Enable writing + - - Delete Overlaps + + Port instrument - - Legato + + Midi device name. Click to edit (Jack) - - &Plugins + + Connections from Jack Midi outputs - - Window &Config + + Connections to Jack Midi inputs - - &Event Color + + Auto-connect these channels to new midi tracks - - &Blue + + Auto-connect new midi tracks to these channels + + + + + Auto-connect new midi tracks to this channel - - &Pitch colors + + Device state - - &Velocity colors + + Enable gui for device - - Pianoroll tools + + Enable reading from device - - Step Record + + Enable writing to device - - Midi Input + + Name of the midi device associated with this port number. Click to edit Jack midi name. - - Play Events - Podgląd midi + + Instrument connected to port + Instrument połączony do portu - - panic - Zatrzymaj wszystkie komunikaty midi! + + Connections from Jack Midi output ports + - - transport + + Connections to Jack Midi input ports - - ctrl + + Auto-connect these channels, on this port, to new midi tracks. - Add Controller View + Connect new midi tracks to these channels, on this port. - - - MusEGui::PluginDialog - - MusE: select plugin - MuzA: wybierz wtyczkę + + Connect new midi tracks to this channel, on this port. + - - Lib - Bibl. + + State: result of opening the device + Status: rezultat otworzenia urządzenia - - Label - Etykieta + + Port + Port - Name - Nazwa + GUI + - AI - AI + I + Wej. - AO - AO + O + Wyj. - CI - CI + Instrument + - CO - CO + Device Name + Nazwa Urządzenia - IP - IP + In routes + - id - numer + Out routes + - Maker - Znacznik + Def in ch + - Copyright - Prawa autorskie - - - - Ok - Akceptuj - - - - Cancel - Anuluj - - - - Mono and Stereo + Def out ch - - Stereo - Stereo + + State + Status - - Mono - Mono + + <unknown> + - - Show All + + + <none> + + + MusEGui::MTScale - - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + + bar scale + + + MusEGui::MTScaleFlo - - Search in 'Label' and 'Name': + + bar scale - MusEGui::PluginGui + MusEGui::MarkerView - - File Buttons - Przyciski Menu Plik + + MusE: Marker + MuzA: Znacznik - Load Preset - Załaduj Ustawienie - - - - Save Preset - Zapisz ustawienie + add marker + Dodaj znacznik - - bypass plugin - omiń wtyczkę (bypass) + delete marker + Kasuj znacznik - - MusE: load preset - MuzA: załaduj ustawienie + + &Edit + - - Error reading preset. Might not be right type for this plugin + + Window &Config - - MusE: save preset - MuzA: zapisz ustawienie + + edit tools + Narzędzia Edycyjne - - - MusEGui::ProjectCreateImpl - - Select directory - + + Bar:Beat:Tick + Takt:Puls:Takt - - - MusEGui::RoutePopupMenu - - - - - - - - - Channel - + + Hr:Mn:Sc:Fr:Sf + Godz.:Min.:Sek.:Kl.:SKl - - - - Soloing chain - + + Lock + Zablokuj - - - Audio returns - + + Text + Tekst - - Warning: No input devices! - + + Marker Properties + Właściwości znacznika + + + + MusEGui::MasterEdit + + + MusE: Mastertrack + MuzA: Ślad Tempo/Metrum - Open midi config... + Window &Config - - - <none> + + Enable master - - Toggle all - + + Enable + Włącz - - More... - + + Enable usage of master track + Aktywuj Ślad Tempo/Metrum - - Audio sends - + + Info + Info - - Midi port sends + + Cursor - - - MusEGui::ScoreCanvas - - Treble - + + time at cursor position + Wstaw metrum w aktualnej pozycji kursora - - Bass - + + tempo at cursor position + Wstaw tempo w aktualnej pozycji kursora - - Grand Staff - + + Off + Wył. - - Remove staff + + Bar - - Ambiguous part + + Snap - - There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. - + + CurPos + Akt. Poz. Kursora: - - No part - + + tempo at current position + Wstaw tempo w aktualnej pozycji kursora - - There are no parts you could add the note to. - + + time signature at current position + Wstaw tempo w aktualnej pozycji kursora - MusEGui::ScoreEdit + MusEGui::MidiInputTransformDialog - - Undo/Redo tools - + + + New + Nowy + + + MusEGui::MidiStrip - - Step recording tools + + + + off - - Step Record + + + ctrl-double-click on/off - - panic - Zatrzymaj wszystkie komunikaty midi! - - - - transport - + + VariationSend + VariationSend - - Note settings - + + Var + Var - - Note length: - + + ReverbSend + Wysyłka Pogłosu - - last - + + Rev + Pogł. - - - Apply to new notes: - + ChorusSend + Wysyłka Chorusa - - - Apply to selected notes: - + + Cho + Chorus - - Velocity: - + + dB + dB - - Off-Velocity: - + + Pan/Balance + Pan/Równowaga - - Quantisation settings - + + Pan + Panorama - - Quantisation: + + record - - Pixels per whole: - + + mute + wycisz - &Edit + solo mode - - C&ut + + input routing - - &Copy - &Kopiuj + + output routing + połączenie Wyjścia + + + MusEGui::MidiSyncConfig - - Copy events in range - + + + Port Number + Numer portu - - &Paste - &Wklej + + + Name of the midi device associated with this port number + Nazwa urządzenia midi skojarzona z tym numerem portu - - Paste (with dialog) + + Midi clock input detected - - Delete &Events + + + Midi tick input detected - - &Select - &Zaznacz + + Midi real time input detected + - - Select &All - Zaznacz &wszystko + + MMC input detected + - - &Deselect All - &Odznacz wszystko + + MTC input detected + - - Invert &Selection - Odwróć &zaznaczenie + + Detected SMPTE format + - - &Inside Loop - &Pomiędzy lokatorami. + + Receive id number. 127 = Global. Double click to edit. + - - &Outside Loop - &Poza obrębem lokatorów + + Accept midi clock input + - - Fu&nctions + + Accept midi real time input - - &Quantize + + Accept MMC input - Change note &length + Accept MTC input - Change note &velocity + Receive start rewinds before playing - Crescendo/Decrescendo + Transmit id number. 127 = Global. Double click to edit. - Transpose - Transponuj + Send midi clock output + - Erase Events + Send midi realtime output - Move Notes + + Send MMC output - - Set Fixed Length - Ustaw stałą długość nut + + + Send MTC output + - - Delete Overlaps + + Midi clock input detected. +Current port actually used is red. +Click to force a port to be used. + + + + + Midi realtime input detected, including + start/stop/continue, and song position. - Legato + MMC input detected, including stop/play/deferred play, and locate. - - Window &Config + + MTC input detected, including forward quarter-frame sync and full-frame locate. +Current port actually used is red. Click to force a port to be current. - Note head &colors + Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detects format of MTC quarter and full frame, and MMC locate. - &Black + Receive id number. 127 = global receive all, even if not global. - &Velocity + Accept midi clock input. Only one input is used for clock. +Auto-acquire: If two or more port realtime inputs are enabled, + the first clock detected is used, until clock is lost, + then another can take over. Best if each turns off its clock + at stop, so MusE can re-acquire the clock from another port. +Click on detect indicator to force another. - - &Part + + Accept midi realtime input, including + start/stop/continue, and song position. +Non-clock events (start,stop etc) are + accepted by ALL enabled ports. +This means you may have several master + devices connected, and muse will accept + input from them. - - Set up &preamble + + Accept MMC input, including stop/play/deferred play, and locate. - Display &key signature + Accept MTC input, including forward quarter-frame sync and full-frame locate. +See 'rc' column for more help. - - Display &time signature + + When start is received, rewind before playing. +Note: It may be impossible to rewind fast + enough to synchronize with the external device. - - Set Score &name + + Transmit id number. 127 = global transmit to all. - - Enter the new score title + Send midi clock output. If 'Slave to External Sync' is chosen, + muse can re-transmit clock to any other chosen ports. - - Error + + Send midi realtime output, including start/stop/continue, + and song position. If 'Slave to external sync' is chosen, + muse can re-transmit midi realtime input messages to any + other chosen ports. This means you may have several slave + devices connected, and muse can re-send realtime messages + to any or all of them. - - Changing score title failed: -the selected title is not unique - + + Port + Port - - - MusEGui::ScrollScale - - next page - następna strona + + Device Name + Nazwa Urządzenia - previous page - poprzednia strona + c + - current page number - aktualny numer strony + k + - - - MusEGui::ShortcutCaptureDialog - - Ok - Akceptuj + + r + - Cancel - Anuluj + m + min. - - Shortcut conflicts with %1 + + t - - Undefined - Niezdefiniowany + + type + - - - MusEGui::SigScale - - signature scale - oś metrum + + rid + - - - MusEGui::Strip - - Remove track? + + rc - - - MusEGui::TList - - <none> + + rr - - visible + + rm - - no clef + + rt - - Treble + + rw - - Bass + + tid - - Grand + + tc - - MusE: bad trackname - MuzA: zła nazwa śladu + + tr + - please choose a unique track name - proszę wybrać niepowtarzalną nazwę dla śladu + tm + - - Unused Devices + + tt - - - Update drummap? - Zaktualizować zestaw perkusyjny? + + MusE + MuzA - - Do you want to use same port for all instruments in the drummap? - Czy chcesz używać jednego portu midi dla wszystkich instrumentów w zestawie perkusyjnym? + + Settings have changed +Apply sync settings? + - - - &Yes - &Tak + + &Apply + &Zastosuj - - + &No &Nie - - - show gui - pokaż interfejs użytkownika - - - - - show native gui - + + &Abort + &Anuluj - - Treble clef + + <none> + + + MusEGui::MidiTrackInfo - - Bass clef + + + <unknown> + + + MusEGui::MidiTransformerDialog - - Grand Staff - + + + New + Nowy + + + MusEGui::MixdownFileDialog - - Viewable automation - + + Wave Files (*.wav);;All Files (*) + Pliki Wave (*.wav);;Wszystkie Pliki (*) + + + MusEGui::MusE - - Delete Track + + + Failed to start audio! - - Track Comment + + Was not able to start audio, check if jack is running. + - - Insert Track + + Timeout waiting for audio to run. Check if jack is running. + - - Midi - Midi - - - - Drum - Perkusja - - - - Do you want to use same port and channel for all instruments in the drummap? - Czy chcesz używać jednego portu i jednego kanału dla wszystkich instrumentów w zestawie perkusyjnym? - - - - MusEGui::TempoSig - - - Tempo/Sig - Tempo/Metrum - - - - MusEGui::Toolbar1 - - - - - Off - Wył. + + Und&o + Co&fnij - - Solo - Solo + + Re&do + Co&fnij - - Cursor - + + undo last change to song + cofnij ostatnią zmianę w utworze - - Snap - + + redo last undo + ponów ostanie cofnij - - - MusEGui::TopWin - - As subwindow - + + Loop + Pętla - - Shares tools and menu - + + loop between left mark and right mark + Zapętl pomiędzy lokatorami - Fullscreen - + Punchin + Włącz wcinki (punch In) - - Piano roll - + + record starts at left mark + Nagrywaj od lewego lokatora. - - List editor - + + Punchout + Wył. wcinki (punch out) - - Drum editor - + + record stops at right mark + Nagrywaj od prawego lokatora. - - Master track editor + + Start - - Master track list editor - + + rewind to start position + Przewiń do początku. - - Wave editor - + + Rewind + Przewiń do tyłu - - Clip list - + + rewind current position + Przewijaj kursor do tyłu. - - Marker view - + + Forward + Przewiń do przodu - - Score editor - + + move current position + Przewijaj kursor do przodu. - - Arranger - Główne Okno + + Stop + Stop - - <unknown toplevel type> - + + stop sequencer + Zatrzymaj sekwencer. - - - MusEGui::TrackComment - - MusE: Track Comment - MuzA: Opis Śladu + + Play + Odtwarzanie - - Track Comment: - Opis Śladu + + start sequencer play + Uruchom odtwarzanie sekwencera. - - - MusEGui::Transport - - Overdub - Dogrywanie + + Record + Nagrywanie - - - Replace - Zastępowania + + to record press record and then play + Aby nagrywać najpierw naciśnij nagrywanie, potem odtwarzanie. - - Rec Mode - Typ Nagrywania + + + Panic + Zatrzymaj wszystkie komunikaty midi! - - Normal - Normalny + + send note off to all midi channels + Zatrzymaj komunikaty midi na wszystkich kanałach! - - Mix - Miks + + &New + &Nowy - - Cycle Rec - Zapętl nagrywanie + + + Create New Song + Twórz nowy utwór. Można też nacisnąć skrót "Ctrl-N". - - punchin - włącz wcinki (punch In) + + &Open + &Otwórz - - loop - pętla + + + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Otwórz nowy utwór. Można też wybrać <b>Otwórz</b> z menu Plik. + - punchout - wył. wcinki (punch out)punchout + Open &Recent + Otwórz O&statnie - - - Punch In - Włącz wcinki (punch In) + + + + &Save + &Zapisz - + - Loop - Pętla + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Zapisz edytowany utwór. Trzeba podać nazwę pliku. +Można też wybrać "Zapisz" z menu plik, lub "Ctrl-S". + - - - Punch Out - Wył. wcinki (punch out) + + Save &As + Zapisz &Jako - - Left Mark - Lewy Lokator + + Import Midifile + &Import Pliku Midi - - Right Mark - Prawy Lokator + + Export Midifile + &Export do pliku midi - - rewind to start - przewiń do początku + + Import Part + + + + + + Import Wave File + Import Pliku &Wave - Click this button to rewind to start position - Przewiń do początku. + Find unused wave files + - rewind + &Quit + &Zakończ + + + + Song Info + + Transport Panel + Panel transportu + + - Click this button to rewind - Przewijaj do tyłu. + Bigtime Window + Duży Zegar - forward + Mixer A - Click this button to forward current play position - Przewijaj do przodu. + Mixer B + - stop + Cliplist - Click this button to stop playback - Zatrzymaj odtwarzanie. + Marker View + - play + Arranger View - - Click this button to start playback - Rozpocznij odtwarzanie. + + Fullscreen + - - record + + &Plugins - Click this button to enable recording - Naciśnij ten przycisk, aby pozwolić na nagrywanie - - - - AC - Aut. Kw. + Edit Instrument + Edytuj Instrument - - quantize during record - kwantyzuj podczas nagrywania + + Input Plugins + Wtyczki wejścia - Click - Metronom + Transpose + Transponuj - - metronom click on/off - włącz/wyłącz metronom + + Midi Input Transform + Przekształcanie Wejścia Midi - - Sync - Synch. + + Midi Input Filter + Filtr Wejścia Midi - - external sync on/off - synchronizowanie do zewn. urz. + + Midi Remote Control + Zdalne Sterowanie Midi - Jack + Rhythm Generator - - Jack transport sync on/off - + + Reset Instr. + Reset Instr. - - Master - + + Init Instr. + Inicjalizacja Instr. - - use master track - Używaj śladu tempo/metrum + + Local Off + Local Off - - - MusEGui::VisibleTracks - - - Show wave tracks - + + Bounce to Track + +Zgrywanie śladu (bounce) - - - Show group tracks - + + Bounce to File + Zgrywanie do Pliku (bounce) - - - Show aux tracks - + + Restart Audio + Zrestartuj Audio - - - Show input tracks - + + Mixer Automation + Automatyka Miksera - - - Show output tracks - + + Take Snapshot + Zrób zrzut ekranu - - - Show midi tracks - + + Clear Automation Data + Wyczyść automatykę - - - Show synth tracks + + Cascade - - Visible track types + + Tile - - - MusEGui::WaveEdit - - &Edit + + In rows - - Func&tions + + In columns - - &Gain - + + Global Settings + Globalne Ustawienia - 200% - 200% + + Configure Shortcuts + Konfiguracja skrótów - 150% - 150% + + Follow Song + podążanie kursora za utworem - 75% - 75% + + Don't Follow Song + nie podążaj za utworem - 50% - 50% + + Follow Page + kursor się przesuwa - 25% - 25% + + Follow Continuous + takty się przesuwają (kursor stoi) - - Other - + + Metronome + Metronom - - &Copy - &Kopiuj + + Midi Sync + Synchronizacja Midi - - C&ut + + Midi File Import/Export - - &Paste - &Wklej - - - - Edit in E&xternal Editor - + + Appearance Settings + Ustawienia wyglądu - - Mute Selection - + + Midi Ports / Soft Synth + Porty Midi i Syntezatory Softowe - - Normalize Selection - + + &Manual + &Instrukcja Obłsugi - - Fade In Selection - + + &MusE Homepage + strona domowa &MuzA - - Fade Out Selection - + + &Report Bug... + &Zgłoś Błąd... - - Reverse Selection - + + &About MusE + &Informacje o programie - - Select + + Song Position - - Select &All - Zaznacz &wszystko + + Tempo + Tempo - - &Deselect All - &Odznacz wszystko + + Signature + Metrum - Window &Config - + File Buttons + Przyciski Menu Plik - - Wave edit tools + + Undo/Redo - - transport - + + Transport + Panel transportu - - WaveEdit tools - + + &File + &Plik - - Solo - Solo + + &View + &Przeglądaj - - Cursor - + + &Midi + &Midi - - - MusEGui::WaveView - - - MusE - external editor failed - + + + &Audio + &Audio - - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. + + A&utomation - MusE - file size changed + &Windows - - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted + + MusE Se&ttings - - - MusEMixer::AudioMixerApp - &View - &Przeglądaj + + &Help + P&omoc - Routing - Konfiguracja połączeń + + About &Qt + - - - MusEMixer::AudioStrip - panorama - Panorama + + Cannot read template + Nie można odczytać pliku szablonu - aux send level - Poziom syngału na wysyłce + + File open error + Błąd odczytu pliku - 1/2 channel - kanał m/s + + File read error + błąd odczytu pliku - Pre - Przed + + Unknown File Format: %1 + - pre fader - post fader - przed/ za tłumikiem + + + + MusE: Song: %1 + - dB - dB + + MusE: load project + MuzA: ładuj utwór - mute - wycisz + + MusE: load template + MuzA: ładuj szablon - record downmix - zgraj miks + + MusE: Write File failed + MuzA: Zapis pliku nie powiódł się - iR - Wej. + + The current Project contains unsaved data +Save Current Project? + Otwarty utwór zawiera niezapisane dane +Zapisać otwarty utwór? - oR - Wyj. + + + S&kip + - output routing - połączenie Wyjścia + + &Cancel + - Off - Wył. + + MusE: Save As + MuzA: Zapisz Jako - Read - Czytaj + + + Nothing to edit + Nie ma nic do edytowania - Touch - Dotknij + + + + + + MusE: Bounce to Track + MuzA: Zgrywanie (bounce) do Śladu - Write - Zapisz + + No wave tracks found + - automation type - typ automatyki + + + No audio output tracks found + - - - MusEMixer::EffectRack - effect rack - skrzynia efektów + + Select one audio output track, +and one target wave track + - new - nowy + + Select one target wave track + - change - zmień + + Select one target wave track, +and one audio output track + - move up - przesuń w górę + + + MusE: Bounce to File + MuzA: Zgrywanie (bounce) do Pliku - move down - przesuń w dół + + Select one audio output track + - remove - usuń + + MusE: Bounce + MuzA: Zgrywanie (bounce) - bypass - omiń (bypass) + + set left/right marker for bounce range + ustaw lokatory do zgrania (bounce) danego zakresu - show gui - pokaż interfejs użytkownika + + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Otwarty utwór zawiera niezapisane dane. +Załadowanie nadpisze otwarty utwór: +Zapisać otwarty utwór? - - - MusEMixer::MidiStrip - VariationSend - VariationSend + + + &Abort + &Anuluj - Var - Var + + This will clear all automation data on + all audio tracks! +Proceed? + - ReverbSend - Wysyłka Pogłosu + + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? + - Rev - Pogł. + + MusE: Export Midi + MuzA: Exportuj Midi - ChorusSend - Wysyłka Chorusa + + no help found at: + nie znalezniono pomocy - Cho - Chorus + + MusE: Open Help + MuzA: Otwórz Pomoc - dB - dB + + Unable to launch help + - Pan/Balance - Pan/Równowaga + + For some reason MusE has to launch the default +browser on your machine. + - mute - wycisz + + MusE: Import Midi + MuzA: Importuj Midi - iR - Wej. + + Add midi file to current project? + + Dodać plik midi do otwartego utworu? - oR - Wyj. + + &Add to Project + &Dodaj do utworu - output routing - połączenie Wyjścia + + &Replace + &Zastąp - - - MusEWidget::BigTime - minute - minuta + + reading midifile + + czytanie pliku midi - second - sekunda + + +failed: + - frame - ramka + + Import part is only valid for midi and wave tracks! + - subframe - subramka + + MusE: load part + - MusE: Bigtime - MuzA: Duży zegar + + No track selected for import + - - - MusEWidget::EditToolBar - - Edit Tools - Narzędzia Edycyjne + + + %n part(s) out of %1 could not be imported. +Likely the selected track is the wrong type. + + + + + + + %n part(s) could not be imported. +Likely the selected track is the wrong type. + + + - - - MusEWidget::MidiSyncConfig - Port Number - Numer portu + + to import an audio file you have first to selecta wave track + - Name of the midi device associated with this port number - Nazwa urządzenia midi skojarzona z tym numerem portu + + Import Wavefile + - Device Name - Nazwa Urządzenia + + This wave file has a samplerate of %1, +as opposed to current setting %2. +Do you still want to import it? + - m - min. + + &Yes + &Tak - MusE - MuzA + + &No + &Nie + + + MusEGui::NoteInfo - &Apply - &Zastosuj + + Note Info + Info o dźwięku - &No - &Nie + + delta/absolute mode + - &Abort - &Anuluj + + Start + - - - MusEWidget::MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Pliki Wave (*.wav);;Wszystkie Pliki (*) + + Len + Długość - - - MusEWidget::NoteInfo - Note Info - Info o dźwięku + + Pitch + Transpozycja + Velo On - Prędk. uderz. + Prędk. uderz. + Velo Off - Prędk. puszcz. + Prędk. puszcz. - MusEWidget::ScrollScale - - next page - następna strona - + MusEGui::PartCanvas - previous page - poprzednia strona + + Cannot copy/move/clone to different Track-Type + Nie można skopiować/przenieść/sklonować do innego typu śladu - current page number - aktualny numer strony + + C&ut + - - - MusEWidget::ShortcutCaptureDialog - Ok - Akceptuj + + &Copy + &Kopiuj - Cancel - Anuluj + + s&elect + - Undefined - Niezdefiniowany + + clones + - - - MusEWidget::SigScale - signature scale - oś metrum + + rename + zmień nazwę - - - MusEWidget::Toolbar1 - Solo - Solo + + color + kolor - - - MusEWidget::TrackComment - MusE: Track Comment - MuzA: Opis Śladu + + delete + - Track Comment: - Opis Śladu + + split + podziel - - - NoteInfo - Start - Pozycja + + glue + - Len - Długość + + super glue (merge selection) + - Pitch - Wysokość dźwięku + + de-clone + sklonuj - Velo On - Prędk. uderz. + + + + save part to disk + - Velo Off - Prędk. puszcz. + + wave edit + edycja audio - Note Info - Info o dźwięku + + file info + - - - OrganGuiBase - - MusE: Organ + + MusE: save part - Drawbars + Part name: %1 +Files: - - 16' - 16' + + Remove selected + - - - 4' - 4' + + + %n part(s) out of %1 could not be pasted. +Likely the selected track is the wrong type. + + + - - - 2 2/3' - 2 2/3' + + + %n part(s) could not be pasted. +Likely the selected track is the wrong type. + + + - - 2' - 2' + + Cannot paste: multiple tracks selected + Nie można wkleić: zaznaczono kilka śladów - - 5 1/3' - 5 1/3' + + Cannot paste: no track selected + Nie można wkleić: nie zaznaczono żadnych śladów - - 8' - 8' + + Can only paste to midi/drum track + Można tylko wkleić do śladu midi, lub perkusji - - Envelope Hi - + + Can only paste to wave track + Można wkleić tylko do śladu audio - - - Release + + Can only paste to midi or wave track - - - Sustain - + + Cannot paste: wrong data type + Nie można wkleić: nieprawidłowy typ danych - - - - Decay - + + + MusEGui::PasteDialog + + + %n quarter(s) + + + - - - Attack + + %1 quarter + for floating-point arguments like 1.5 - - - - - - - ms + + %1 quarters + for floating-point arguments like 1.5 - - - - cB - + + + MusEGui::PasteEventsDialog + + + %n quarter(s) + + + - - Envelope Lo + + %1 quarter + for floating-point arguments like 1.5 - - O-1 + + %1 quarters + for floating-point arguments like 1.5 + + + MusEGui::PianoRoll - - Oscillator + + &Edit - - Brass + + C&ut - - Reed - + + &Copy + &Kopiuj - - Flute + + Copy events in range - - Velocity - + + &Paste + &Wklej - - - PageSettings - Track Name - Spur Name + + Paste (with dialog) + - - - PartCanvas - C&ut - &Wytnij + + Delete &Events + - &Copy - &Kopiuj + + &Select + &Zaznacz - rename - zmień nazwę + + Select &All + Zaznacz &wszystko - delete - kasuj + + &Deselect All + &Odznacz wszystko - split - podziel + + Invert &Selection + Odwróć &zaznaczenie - glue - sklej + + &Inside Loop + &Pomiędzy lokatorami. - pianoroll - pianoroll + + &Outside Loop + &Poza obrębem lokatorów - list - edytor lista + + &Previous Part + - drums - edytor perkusja + + &Next Part + - Cannot copy/move/clone to different Track-Type - Nie można skopiować/przenieść/sklonować do innego typu śladu + + Fu&nctions + - color - kolor + + Quantize + Kwantyzuj - de-clone - sklonuj + + Modify Note Length + - wave edit - edycja audio + + Modify Velocity + - Cannot paste: multiple tracks selected - Nie można wkleić: zaznaczono kilka śladów + + Crescendo/Decrescendo + - Cannot paste: no track selected - Nie można wkleić: nie zaznaczono żadnych śladów + + Transpose + Transponuj - Cannot paste: wrong data type - Nie można wkleić: nieprawidłowy typ danych + + Erase Events + - Can only paste to midi/drum track - Można tylko wkleić do śladu midi, lub perkusji + + Move Notes + - Can only paste to wave track - Można wkleić tylko do śladu audio + + Set Fixed Length + Ustaw stałą długość nut - - - PasteDialogBase - - MusE: Paste Parts + + Delete Overlaps - - Number and raster + + Legato - - insert + + &Plugins - - times + + Window &Config - - raster + + &Event Color - - ticks + + &Blue - - Move, Merge, Clone + + &Pitch colors - - Move everything to the right + + &Velocity colors - - Move only affected parts to the right + + Pianoroll tools - - Put everything into a single track + + Step Record - Merge with existing parts + Midi Input - - Insert as clones (where possible) - + + Play Events + Podgląd midi - - OK - Akceptuj + + ctrl + - - Cancel - Anuluj + + Add Controller View + - PasteEventsDialogBase - - - MusE: Paste Events - - + MusEGui::PluginDialog - - Number and raster - + + MusE: select plugin + MuzA: wybierz wtyczkę - - insert - + + Type + Typ - - times - + + Lib + Bibl. - - raster - + + Label + Etykieta - - - ticks - + + Name + Nazwa - - Paste options - + + AI + AI - - Always into existing parts - + + AO + AO - - Never into existing parts - + + CI + CI - - Into existing parts if part has not -to be expanded by more than - + + CO + CO - - Put everything into the (selected) part - + + IP + IP - - OK - Akceptuj + + id + numer - - Cancel - Anuluj + + Maker + Znacznik - - - PatchBay - MusE: ALSA MIDI Patch Bay - MuzA: krosownica ALSA MIDI + + Copyright + Prawa autorskie - - - PatchBayBase - ALSA Patch Bay - krosownica ALSA + + Audio inputs + - - - PianoRoll - &Edit - &Edycja + + Audio outputs + - Cut - Wytnij + + Control inputs + - Copy - Kopiuj + + Control outputs + - Paste - Wklej + + In-place capable + - Delete Events - Kasuj Elementy + + ID number + - Select All - Zaznacz wszystko + + Ok + Akceptuj - Select None - Bez zaznaczenia + + Cancel + Anuluj - Invert - Odwróć zaznaczenie + + Show plugs: + - Inside Loop - Pomiędzy lokatorami. + + Mono and Stereo + - Outside Loop - Poza obrębem lokatorów + + Stereo + Stereo - &Select - &Zaznacz + + Mono + Mono - blue - niebieski + + Show All + - pitch colors - kolory wysokości dźwięków + + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + - velocity colors - kolory predkości uderzenia (velocity) + + dssi synth + - &Config - &Konfiguracja + + dssi effect + - event color - kolor elementu + + ladspa + - &Functions - &Opcje + + Search in 'Label' and 'Name': + + + + MusEGui::PluginGui - Over Quantize - Inteligentna kwantyzacja do najbliższej dozw. poz. (w tym samym kierunku) + + File Buttons + Przyciski Menu Plik - Note On Quantize - Kwantyzacja do najbl. dozwolonej pozycji + + Load Preset + Załaduj Ustawienie - Note On/Off Quantize - Kwantyzacja pocz i końca dźwięku + + Save Preset + Zapisz ustawienie - Iterative Quantize - Przesuwana Kwantyzacja + + + bypass plugin + omiń wtyczkę (bypass) - Pianoroll Tools - Narzędzia Pianoroll + + MusE: load preset + MuzA: załaduj ustawienie - Step Record - Nagrywanie krok po kroku + + Error reading preset. Might not be right type for this plugin + - Midi Input - Wejście Midi + + MusE: save preset + MuzA: zapisz ustawienie + + + MusEGui::ProjectCreateImpl - Play Events - Podgląd midi + + Select directory + + + + MusEGui::RoutePopupMenu - Add Controller View - Dodaj wykres kontorolera + + + + + + + + + Channel + - Config Quant... - Konfiguruj kwantyzację + + + + Soloing chain + - Modify Gate Time - Modyfikuj czas bramki + + + Audio returns + - Modify Velocity - Modyfikuj predkość uderzenia (velocity) + + Warning: No input devices! + - Crescendo - Crescendo + + Open midi config... + - Transpose - Transponuj + + + + + <none> + - Thin Out - Decresendo + + Toggle all + - Erase Event - Skasuj element + + More... + - Note Shift - Przesuń dźwięk + + Audio sends + - Move Clock - Przesuń zegar + + Midi port sends + + + + MusEGui::ScoreCanvas - Copy Measure - Kopiuj takt + + Treble + - Erase Measure - Wyczyść takt + + Bass + - Delete Measure - Kasuj takt + + Grand Staff + - Create Measure - Stwórz takt + + Remove staff + - ctrl - kontr. + + Ambiguous part + - &Copy - &Kopiuj + + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + - &Paste - &Wklej + + No part + - Select &All - Zaznacz &wszystko + + There are no parts you could add the note to. + + + + MusEGui::ScoreEdit - &Deselect All - &Odznacz wszystko + + Step recording tools + - Invert &Selection - Odwróć &zaznaczenie + + Step Record + - &Inside Loop - &Pomiędzy lokatorami. + + Note settings + - &Outside Loop - &Poza obrębem lokatorów + + Note length: + - Set Fixed Length - Ustaw stałą długość nut + + last + - panic - Zatrzymaj wszystkie komunikaty midi! + + + + Apply to new notes: + - - - PluginDialog - Ok - Akceptuj + + + Apply to selected notes: + - Cancel - Anuluj + + Velocity: + - MusE: select plugin - MuzA: wybierz wtyczkę + + Off-Velocity: + - Lib - Bibl. + + Quantisation settings + - Label - Etykieta + + Quantisation: + - Name - Nazwa + + Pixels per whole: + - AI - AI + + &Edit + - AO - AO + + C&ut + - CI - CI + + &Copy + &Kopiuj - CO - CO + + Copy events in range + - IP - IP + + &Paste + &Wklej - id - numer + + Paste (with dialog) + - Maker - Znacznik + + Delete &Events + - Copyright - Prawa autorskie + + &Select + &Zaznacz - Select which types of plugins should be visible in the list,<br>beware that 'all' includes plugins that probably are not usable by MusE. - Wybierz, które wtyczki mają być widoczne na liście, zwróć uwagę, że nie wszysktie mogą być używane przez MuzA. + + Select &All + Zaznacz &wszystko - Stereo and Mono - Stereo i Mono + + &Deselect All + &Odznacz wszystko - Stereo - Stereo + + Invert &Selection + Odwróć &zaznaczenie - Mono - Mono + + &Inside Loop + &Pomiędzy lokatorami. - All - Wszystko + + &Outside Loop + &Poza obrębem lokatorów - - - PluginGui - bypass plugin - omiń wtyczkę (bypass) + + Fu&nctions + - MusE: load preset - MuzA: załaduj ustawienie + + &Quantize + - MusE: save preset - MuzA: zapisz ustawienie + + Change note &length + - File Buttons - Przyciski Menu Plik + + Change note &velocity + - Load Preset - Załaduj Ustawienie + + Crescendo/Decrescendo + - Save Preset - Zapisz ustawienie + + Transpose + Transponuj - - - ProjectCreate - - Create Project + + Erase Events - - Projects folder: + + Move Notes - - - - ... - ... + + Set Fixed Length + Ustaw stałą długość nut - - Project Name: + + Delete Overlaps - - Project is a Template + + Legato - - Project song file type: + + Window &Config - - Project Path to song file: + + Note head &colors - - Create project folder (recommended for audio projects) + + &Black - - Song information: + + &Velocity - - - QHeader - - Port Number - Numer portu - - - enable gui for device - Udostępnij interfejs dla urządzenia - - Instrument connected to port - Instrument połączony do portu + + &Part + - State: result of opening the device - Status: rezultat otworzenia urządzenia + + Set up &preamble + - mute instrument - wyłącz instrument + + Display &key signature + - sound name - nazwa brzmienia + + Display &time signature + - quantisation -currently not used - kwantyzacja nie jest aktualnie używana + + Set Score &name + - this input note triggers the sound - ta wysokość uruchamia brzmienie + + + Enter the new score title + - note length - długość dźwięku + + Error + - this note is send for the sound - ta wysokość jest wysłana do brzmienia + + Changing score title failed: +the selected title is not unique + + + + MusEGui::ScrollScale - output channel -currently not used - kanał wyjściowy jest aktualnie nie używany + + next page + następna strona - output port -currently not used - port wyjściowy jest aktualnie nie używany + + previous page + poprzednia strona - velocity level 1 - poziom predkości uderzenia (velocity) 1 + + current page number + aktualny numer strony + + + MusEGui::ShortcutCaptureDialog - velocity level 2 - poziom predkości uderzenia (velocity) 2 + + Ok + Akceptuj - velocity level 3 - poziom predkości uderzenia (velocity) 3 + + Cancel + Anuluj - velocity level 4 - poziom predkości uderzenia (velocity) 4 + + Shortcut conflicts with %1 + - quantisation - kwantyzacja + + Undefined + Niezdefiniowany + + + MusEGui::SigScale - output channel - kanał wyjściowy + + signature scale + oś metrum + + + MusEGui::SigToolbarWidget - output port - port wyjściowy + + time signature at current position + Wstaw tempo w aktualnej pozycji kursora - Enable Recording - Udostępnij nagrywanie + + Signature: + + + + MusEGui::Strip - Mute Indicator - Wyłącz wzkaźnik + + Remove track? + + + + MusEGui::TList - Solo Indicator - Solo Wzkaźnik + + <none> + - Track Type - Typ śladu + + visible + - Track Name - Nazwa śladu + + no clef + - Output Channel Number - Numer kanału wyjściowego + + Treble + - Output Port - Port wyjsciowy + + Bass + - Time Lock - Zablokuj Ślad + + Grand + - Solo/Pre Fader Listening - Solo/ Odsłuch przed tłumikiem + + + off + - Name of the midi device associated with this port number - Nazwa urządzenia midi skojarzona z tym numerem portu + + <unknown> + - enables reading from device - Pozwala na odczyt z urządzenia + + MusE: bad trackname + MuzA: zła nazwa śladu - enables writing to device - Pozwala na zapis do urządzenia + + please choose a unique track name + proszę wybrać niepowtarzalną nazwę dla śladu - - - QObject - - - Error + + Unused Devices - - - Please first select the range for crescendo with the loop markers. - + + + Update drummap? + Zaktualizować zestaw perkusyjny? - - - QWidget - - - Cannot convert sysex string - Nie można przekonwertować łańcucha sysex + + Do you want to use same port for all instruments in the drummap? + Czy chcesz używać jednego portu midi dla wszystkich instrumentów w zestawie perkusyjnym? - - - Hex String too long (2048 bytes limit) - Łańcuch Hex za długi (limit 2048 bajtów) + + + &Yes + &Tak - - new - nowy + + + &No + &Nie - - create peakfile for - stwórz plik szczytu dla + + + show gui + pokaż interfejs użytkownika - - MusE: get file name - MuzA: weź nazwę pliku + + + show native gui + - the directory - - katalog + + Midi control + - -does not exist -create? - nie istnieje -utworzyć? + + Assign + - &Create - &Twórz + + Clear + - Cancel - Anuluj + + Treble clef + - The directory -%1 -does not exist. -Create it? + Bass clef - - MusE: create directory - MuzA: utwórz katalog - - - creating dir failed - tworzenie katalogu nie powiodło się - - - - File -%1 -exists. Overwrite? + Grand Staff - - Open File -%1 -failed: %2 + + Viewable automation - File - - Plik + + Internal + - -exists - istnieje + + Synth + - - MusE: write - MuzA: zapis: + + Delete Track + - Overwrite - Nadpisz + + Track Comment + Opis śladu - Quit - Wyjdź + + Insert Track + - Open File - - Otwórz plik + + Midi + Midi - -failed: - nie udane + + Drum + Perkusja - - MusE: Open File - MuzA: Otwórz plik + + Do you want to use same port and channel for all instruments in the drummap? + Czy chcesz używać jednego portu i jednego kanału dla wszystkich instrumentów w zestawie perkusyjnym? + + + MusEGui::TempoSig - - - None - Brak + + Tempo/Sig + Tempo/Metrum + + + MusEGui::TempoToolbarWidget - - generic midi - generyczne midi + + tempo at current position + Wstaw tempo w aktualnej pozycji kursora - - No selection. Ignoring + + Tempo: - QuantBase + MusEGui::Toolbar1 - - MusE: Quantize - + + + + Off + Wył. - - Range - Zakres + + Solo + Solo - - All Events - Wszytkie Elementy + + Cursor + - - Selected Events - Zaznaczone Elementy + + Snap + + + + MusEGui::TopWin - - Looped Events - Pomiędzy lokatorami + + As subwindow + - - Selected Looped + + Shares tools and menu - - Values - Wartość + + Fullscreen + - - Strength: + + Undo/Redo tools - - % - % + + Panic + Zatrzymaj wszystkie komunikaty midi! - - Threshold (ticks): - + + Transport + Panel transportu - - Quantize Len + + Song Position - - Raster - + + Tempo + Tempo - - Whole - + + Signature + Metrum - - Half + + Piano roll - - 4th + + List editor - - 4th Triplet + + Drum editor - - 8th + + Master track editor - - 8th Triplet + + Master track list editor - - 16th + + Wave editor - - 16th Triplet + + Clip list - - 32th + + Marker view - - 32th Triplet + + Score editor - - Swing: - + + Arranger + Główne Okno - - If the proposed change in tick or length is smaller than threshold, nothing is done. -If swing=0, this is normal -If swing is 33, you get a 2:1-rhythm. -If swing is -33, you get a 1:2-rhythm. - + + <unknown toplevel type> + + + MusEGui::TrackComment - - OK - Akceptuj + + MusE: Track Comment + MuzA: Opis Śladu - - Cancel - Anuluj + + Track Comment: + Opis Śladu - QuantConfig + MusEGui::Transport + + + Overdub + Dogrywanie + - Config Quantize - Konfiguruj Kwantyzację + + + Replace + Zastępowania - Strength - Siła + + Rec Mode + Typ Nagrywania - Don´t Quantize - Nie kwantyzuj + + Normal + Normalny - Quant Len - Wartość kwantyzacji + + Mix + Miks - MusE: Config Quantize - MuzA: Konfiguracja kwantyzacji + + Cycle Rec + Zapętl nagrywanie - - - RemoveBase - - MusE: Erase Notes - + + punchin + włącz wcinki (punch In) - - Range - Zakres + + loop + pętla - - All Events - Wszytkie Elementy + + punchout + wył. wcinki (punch out)punchout - - Selected Events - Zaznaczone Elementy + + + Punch In + Włącz wcinki (punch In) - - Looped Events - Pomiędzy lokatorami + + + Loop + Pętla - - Selected Looped - + + + Punch Out + Wył. wcinki (punch out) - - Thresholds - + + Left Mark + Lewy Lokator - - ticks - + + Right Mark + Prawy Lokator - - Velocity - + + rewind to start + przewiń do początku - - Length - + + Click this button to rewind to start position + Przewiń do początku. - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> + + rewind - - OK - Akceptuj + + Click this button to rewind + Przewijaj do tyłu. - - Cancel - Anuluj + + forward + - - - RhythmBase - MusE: Random Rhythm Generator - MuzA: Generator Losowego Rytmu + + Click this button to forward current play position + Przewijaj do przodu. - Instrument Properties - Właściwości Instrumentu + + stop + - counts/bar - ilość taktów + + Click this button to stop playback + Zatrzymaj odtwarzanie. - steps/count - ilość kroków + + play + - # bars - # takty + + Click this button to start playback + Rozpocznij odtwarzanie. - test - test + + record + - contrib - contrib + + Click this button to enable recording + Naciśnij ten przycisk, aby pozwolić na nagrywanie - randomize - ustaw w przypadkowej kolejności + + AC + Aut. Kw. - Group 1 - Grupa 1 + + quantize during record + kwantyzuj podczas nagrywania - Group 2 - Grupa 2 + + Click + Metronom - Group 3 - Grupa 3 + + metronom click on/off + włącz/wyłącz metronom - Group 4 - Grupa 4 + + Sync + Synch. - Group 5 - Grupa 5 + + external sync on/off + synchronizowanie do zewn. urz. - listen - słuchaj + + Jack + - Instrument - Instrument + + Jack transport sync on/off + - Group - Grupa + + Master + - &New - &Nowy + + use master track + Używaj śladu tempo/metrum + + + MusEGui::VisibleTracks - create new entry - stwórz nowy wpis + + + Show wave tracks + - pressing the New button you create a new entry -in the MusE list of defined controllers - naciśnij przycisk Nowy aby utworzyć wpis na lisćie zdefiniowanych kontrolerów + + + Show group tracks + - &Delete - &Kasuj + + + Show aux tracks + - delete selected entry - kasuj zaznaczone elementy + + + Show input tracks + - Up - W góre + + + Show output tracks + - Down - W dół + + + Show midi tracks + - Instrument - Instrument + + + Show synth tracks + - steps/count - kroki/liczy + + Visible track types + + + + MusEGui::WaveEdit - list of defined controllers - Lista zdefiniowanych kontrolerów + + &Edit + - This is the MusE list of defined controllers. - To jest lista MuzA zdefiniowanych midi kontrolerów. + + Func&tions + - &File - &Plik + + &Gain + - &Edit - &Edytuj + + Other + - &Help - P&omoc + + &Copy + &Kopiuj - Tools - Narzędzia + + C&ut + - New - Nowy + + &Paste + &Wklej - Open - Otwórz + + Edit in E&xternal Editor + - &Open... - &Otwórz... + + Mute Selection + - Save - Zapisz + + Normalize Selection + - &Save - &Zapisz + + Fade In Selection + - Save As - Zapisz jako + + Fade Out Selection + - Save &As... - Zapisz &Jako... + + Reverse Selection + - Print - Drukuj + + Select + Wybierz - &Print... - &Drukuj + + Select &All + Zaznacz &wszystko - Exit - Zakończ + + &Deselect All + &Odznacz wszystko - E&xit - &Zakończ + + Window &Config + - Undo - Cofnij + + WaveEdit tools + - &Undo - &Cofnij + + Solo + Solo - Redo - Ponów + + Cursor + + + + MusEGui::WaveView - &Redo - &Ponów + + MusE - external editor failed + - Cut - Wytnij + + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + - &Cut - &Wytnij + + MusE - file size changed + - Copy - Kopiuj + + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + + + + OrganGuiBase - C&opy - &Kopiuj + + MusE: Organ + - Paste - Wklej + + Drawbars + - &Paste - &Wklej + + 16' + 16' - Find - Szukaj + + 4' + 4' - &Find... - &Szukaj + + 2 2/3' + 2 2/3' - Contents - Spis treści + + 2' + 2' - &Contents... - &Spis treści + + 5 1/3' + 5 1/3' - Index - Indeks + + 8' + 8' - &Index... - &Indeks + + Envelope Hi + - About - O programie + + + Release + - &About... - &O programie + + + Sustain + - <b>Notice!</b><br> -Random Rhythm Generator is not enabled yet! - <b>Zauważ!</b><br> -Losowy Generator Rytmu jeszcze nie jest udostępniony! + + + Decay + - Ctrl+N - Ctrl+N + + + Attack + - Ctrl+O - Ctrl+O + + + + + + + ms + - Ctrl+S - Ctrl+S + + + cB + - Ctrl+P - Ctrl+P + + Envelope Lo + - Ctrl+Z - Ctrl+Z + + O-1 + - Ctrl+Y - Ctrl+Y + + Oscillator + - Ctrl+X - Ctrl+X + + Brass + - Ctrl+C - Ctrl+C + + Reed + - Ctrl+V - Ctrl+V + + Flute + - Ctrl+F - Ctrl+F + + Velocity + Prędk. uderz. (vel) - RhythmGenerator + PasteDialogBase - Form3 - Form3 + + MusE: Paste Parts + - Instrument Settings: - Instrument Einstellungen + + Number and raster + - add - Zufgen + + insert + - delete - Entfernen + + times + - steps/count - ilość kroków + + raster + - # bars - # takty + + ticks + - Group - Gruppe + + Move, Merge, Clone + - Group 1 - Grupa 1 + + Move everything to the right + - Group 2 - Grupa 2 + + Move only affected parts to the right + - Group 3 - Grupa 3 + + Put everything into a single track + - Group 4 - Grupa 4 + + Merge with existing parts + - Group 5 - Grupa 5 + + Insert as clones (where possible) + - contrib - contrib + + OK + Akceptuj - listen - słuchaj + + Cancel + Anuluj + + + PasteEventsDialogBase - Save - Zapisz + + MusE: Paste Events + - - + + Number and raster + - - - RouteDialogBase - - MusE: Routing - MuzA: Konfiguracja połączeń + + insert + - - Add Route - Dodaj połączenie + + times + - - Source: - Źródło: + + raster + - - Destination: - Odbiornik: + + + ticks + - - Connect - Połącz + + Paste options + - - connect source to destination - połącz źródło do odbiornika + + Always into existing parts + - Current Routes - Aktualne połączenia + Never into existing parts + - - Source - Źródło + + Into existing parts if part has not +to be expanded by more than + - - Destination - Odbiornik + + Put everything into the (selected) part + - - Remove - Usuń + + OK + Akceptuj - - remove selected route - Usuń wybrane połączenie + + Cancel + Anuluj - SS_PluginChooserBase + ProjectCreate - - SimpleDrums - Ladspa Plugin Chooser + + Create Project - - Name - Nazwa + + Projects folder: + - - Label - Etykieta + + + + ... + ... - - Inports + + Project Name: - - Outports + + Project is a Template - - Creator + + Write window state - - &Cancel + + Project song file type: - - Alt+C - Alt+C + + Project Path to song file: + - - &OK + + Create project folder (recommended for audio projects) - - Alt+O + + Song information: - SS_PluginFront - - - Clear and unload effect - - - - - Load effect - - + QObject - - Toggle display of effect parameters + + + Error - - Turn effect on/off + + + Please first select the range for crescendo with the loop markers. - ScoreEdit + QWidget - panic - Zatrzymaj wszystkie komunikaty midi! + + + Cannot convert sysex string + Nie można przekonwertować łańcucha sysex - &Copy - &Kopiuj + + + Hex String too long (2048 bytes limit) + Łańcuch Hex za długi (limit 2048 bajtów) - &Paste - &Wklej + + new + nowy - &Select - &Zaznacz + + create peakfile for + stwórz plik szczytu dla + + + + MusE: get file name + MuzA: weź nazwę pliku - Select &All - Zaznacz &wszystko + + The directory +%1 +does not exist. +Create it? + - &Deselect All - &Odznacz wszystko + + MusE: create directory + MuzA: utwórz katalog - Invert &Selection - Odwróć &zaznaczenie + + creating dir failed + tworzenie katalogu nie powiodło się - &Inside Loop - &Pomiędzy lokatorami. + + File +%1 +exists. Overwrite? + - &Outside Loop - &Poza obrębem lokatorów + + Open File +%1 +failed: %2 + - Transpose - Transponuj + + MusE: write + MuzA: zapis: - Set Fixed Length - Ustaw stałą długość nut + + MusE: Open File + MuzA: Otwórz plik - - - ScrollScale - next page - następna strona + + + None + Brak - previous page - poprzednia strona + + generic midi + generyczne midi - current page number - aktualny numer strony + + No selection. Ignoring + - SetlenBase + QuantBase - - MusE: Set Note Length + + MusE: Quantize @@ -16738,549 +12127,606 @@ - Value + Values Wartość - - New length + + Strength: - ticks - - - - - OK - Akceptuj + % + % - Cancel - Anuluj - - - - ShortcutCaptureDialog - - Ok - Akceptuj + Threshold (ticks): + - Cancel - Anuluj + + Quantize Len + - Undefined - Niezdefiniowany + + Raster + - - - ShortcutCaptureDialogBase - - Enter shortcut sequence - Wprowadź skrót - kominację klawiszy + + Whole + - - Press keys to enter shortcut sequence! - Naciśnij kombinację klawiszy by wprowadzić skrót! + + Half + - - Old shortcut: - Stary skrót + + 4th + - - - Undefined - Niezdefiniowany + + 4th Triplet + - - New shortcut: - Nowy skrót + + 8th + - - OK - Akceptuj + + 8th Triplet + - - Cancel - Anuluj + + 16th + - - - ShortcutConfigBase - - Configure Keyboard Shortcuts - Konfiguruj Skróty Klawiaturowe + + 16th Triplet + - - Shortcut Category - Kategoria Skrótu + + 32th + - - Description - Opis + + 32th Triplet + - - Shortcut - Skrót + + Swing: + - - &Clear - &Wyczyść + + If the proposed change in tick or length is smaller than threshold, nothing is done. +If swing=0, this is normal +If swing is 33, you get a 2:1-rhythm. +If swing is -33, you get a 1:2-rhythm. + + - - Alt+C - Alt+C + + OK + Akceptuj - - &Define - &Zdefiniuj + + Cancel + Anuluj + + + RemoveBase - - Alt+D - Alt+D + + MusE: Erase Notes + - - &Apply - &Zastosuj + + Range + Zakres - - Alt+A - Alt+A + + All Events + Wszytkie Elementy - - - SigScale - signature scale - oś metrum + + Selected Events + Zaznaczone Elementy - - - SimpleDrumsGuiBase - - DrumSynth 0.1 - + + Looped Events + Pomiędzy lokatorami - - - SimpleSynthGui - - &Load setup + + Selected Looped - - &Save setup + + Thresholds - - Load sample dialog + + ticks - - - Song - - &Ok - &Akceptuj - - - - SongInfo - - Song Information - + + Velocity + Prędk. uderz. (vel) - - Show on song load + + Length - - &Cancel + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - - Alt+C - Alt+C + + OK + Akceptuj - - &Ok - &Akceptuj + + Cancel + Anuluj + + + RhythmGenerator - - Alt+O - + + - SynthConfigBase + RouteDialogBase - MusE: Synth Configuration - MuzA: Konfiguracja Syntezatora Softowego + + MusE: Routing + MuzA: Konfiguracja połączeń - - Soft Synthesizer - Syntezator Softowy + + Add Route + Dodaj połączenie - - File - Plik + + Source: + Źródło: - - Instances - Urządzenia + + Destination: + Odbiornik: - - - Name - Nazwa + + Connect + Połącz - - list of available software synthesizers - lista wszystkich dostępnych syntezatorów softowych + + connect source to destination + połącz źródło do odbiornika - - Add Instance - Dodaj urządzenie + + Current Routes + Aktualne połączenia - - Remove Instance - Usuń urządzenie + + Source + Źródło - - Midi Port - Port Midi + + Destination + Odbiornik - - Midi Port and Soft Synth Configuration - + + Remove + Usuń - - - Type - Typ + + remove selected route + Usuń wybrane połączenie + + + SS_PluginChooserBase - - Midi connections - Połączenia midi + + SimpleDrums - Ladspa Plugin Chooser + - - Inst - Instr. + + Name + Nazwa - - Version - Wersja + + Label + Etykieta - Description - Opis + Inports + - - - TList - Midi - Midi + + Outports + - Drum - Perkusja + + Creator + - Delete Track - Kasuj Ślad + + &Cancel + - Track Comment - Opis Śladu + + Alt+C + Alt+C - Show Gui - Pokaż interfejs użytkownika + + &OK + &Akceptuj - Add Midi Track - Dodaj ślad midi + + Alt+O + + + + SS_PluginFront - Add Drum Track - Dodaj ślad perkusyjny + + Clear and unload effect + - Add Wave Track - Dodaj ślad audio + + Load effect + - MusE: bad trackname - MuzA: zła nazwa śladu + + Toggle display of effect parameters + - please choose a unique track name - proszę wybrać niepowtarzalną nazwę dla śladu + + Turn effect on/off + + + + SetlenBase - show gui - pokaż interfejs użytkownika + + MusE: Set Note Length + - Add Output - Dodaj wyjście audio + + Range + Zakres - Add Group - Dodaj szynę audio + + All Events + Wszytkie Elementy - Add Input - Dodaj wejście audio + + Selected Events + Zaznaczone Elementy - Add Aux Send - Dodaj wysyłkę na efekty + + Looped Events + Pomiędzy lokatorami - Update drummap? - Zaktualizować zestaw perkusyjny? + + Selected Looped + - Do you want to use same port for all instruments in the drummap? - Czy chcesz używać jednego portu midi dla wszystkich instrumentów w zestawie perkusyjnym? + + Value + Wartość - &Yes - &Tak + + New length + - &No - &Nie + + ticks + - Do you want to use same port and channel for all instruments in the drummap? - Czy chcesz używać jednego portu i jednego kanału dla wszystkich instrumentów w zestawie perkusyjnym? + + OK + Akceptuj - - - TempoSig - Tempo/Sig - Tempo/Metrum + + Cancel + Anuluj - Toolbar1 + ShortcutCaptureDialogBase - Solo - Solo + + Enter shortcut sequence + Wprowadź skrót - kominację klawiszy - Snap - Przyciąganie + + Press keys to enter shortcut sequence! + Naciśnij kombinację klawiszy by wprowadzić skrót! - Quantize - Kwantyzacja + + Old shortcut: + Stary skrót + + + + + Undefined + Niezdefiniowany - To - Zakres + + New shortcut: + Nowy skrót - All Events - Wszytkie Elementy + + OK + Akceptuj - Looped Ev. - Pomiędzy lokatorami + + Cancel + Anuluj + + + ShortcutConfigBase - Selected Ev. - Zaznaczone Elementy + + Configure Keyboard Shortcuts + Konfiguruj Skróty Klawiaturowe - Looped+Sel. - Zaznaczone + Pomiędzy lokatorami + + Shortcut Category + Kategoria Skrótu - Cursor - Kursor + + Description + Opis - - - TopWin - Arranger - Główne Okno + + Shortcut + Skrót - - - TrackComment - MusE: Track Comment - MuzA: Opis Śladu + + &Clear + &Wyczyść - Track Comment: - Opis Śladu + + Alt+C + Alt+C - - - Transport - Punch In - Włącz wcinki (punch In) + + &Define + &Zdefiniuj - Loop - Pętla + + Alt+D + Alt+D - Punch Out - Wył. wcinki (punch out) + + &Apply + &Zastosuj - Left Mark - Lewy Lokator + + Alt+A + Alt+A + + + SimpleDrumsGuiBase - Right Mark - Prawy Lokator + + DrumSynth 0.1 + + + + SimpleSynthGui - Overdub - Dogrywanie + + &Load setup + - Replace - Zastępowania + + &Save setup + - Rec Mode - Typ Nagrywania + + Load sample dialog + + + + SongInfo - Normal - Normalny + + Song Information + - Mix - Miks + + Show on song load + - Cycle Rec - Zapętl nagrywanie + + &Cancel + - punchin - włącz wcinki (punch In) + + Alt+C + Alt+C - loop - pętla + + &Ok + &Akceptuj - punchout - wył. wcinki (punch out)punchout + + Alt+O + + + + SynthConfigBase - rewind to start - przewiń do początku + + Soft Synthesizer + Syntezator Softowy - rewind - przewijaj do tyłu + + File + Plik - forward - przewijaj do przodu + + Instances + Urządzenia - stop - stop + + + Name + Nazwa - play - odtwarzanie + + list of available software synthesizers + lista wszystkich dostępnych syntezatorów softowych - record - nagrywanie + + Add Instance + Dodaj urządzenie - AC - Aut. Kw. + + Remove Instance + Usuń urządzenie - quantize during record - kwantyzuj podczas nagrywania + + Midi Port + Port Midi - Click - Metronom + + Midi Port and Soft Synth Configuration + - metronom click on/off - włącz/wyłącz metronom + + + Type + Typ - Sync - Synch. + + Midi connections + Połączenia midi - external sync on/off - synchronizowanie do zewn. urz. + + Inst + Instr. - Master - Ślad Tempo/Metrum + + Version + Wersja - use master track - Używaj śladu tempo/metrum + + Description + Opis @@ -17337,49 +12783,6 @@ - TransposeDialogBase - - MusE: Midi Transpose - MuzA: Transponuj Midi - - - Value - Wartość - - - halftones - Półtony - - - Time - Zakres - - - all - Wszystko - - - between markers - Pomiędzy znacznikami - - - Parts - Klocki - - - all in selected tracks - Wszystko na zaznaczonych śladach - - - OK - Akceptuj - - - Cancel - Anuluj - - - UnusedWaveFiles @@ -17531,7 +12934,7 @@ Invert - + Odwróć @@ -17577,7 +12980,7 @@ Pitch - + Transpozycja @@ -17655,10 +13058,6 @@ Pomiędzy lokatorami - Selected & Looped - Zaznaczone & Pomiędzy lokatorami - - Values Wartość @@ -17700,114 +13099,9 @@ - WTScale - - bar scale - oś taktów - - - - WaveEdit - - Normalize - Normalizuj - - - weTools - Narzędzia audio - - - Solo - Solo - - - Cursor - Kursor - - - &File - &Plik - - - Functions - Opcje - - - 200% - 200% - - - 150% - 150% - - - 75% - 75% - - - 50% - 50% - - - 25% - 25% - - - &Copy - &Kopiuj - - - &Paste - &Wklej - - - Select &All - Zaznacz &wszystko - - - &Deselect All - &Odznacz wszystko - - - - WaveTrackInfoBase - - MusE: TrackInfo - MuzA: Info o śladzie - - - Track Info - Info o śladzie - - - Track Name - Nazwa Śladu - - - Output Route: - połączenie Wyjścia - - - Input Route: - połączenie wejścia - - - Ports: - Porty - - - Mono - Mono - - - Stereo - Stereo - - - file_patterns - + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) @@ -17823,13 +13117,13 @@ - + - + - + @@ -17838,7 +13132,7 @@ Wszystkie Pliki (*) - + Midi (*.mid) @@ -17904,7 +13198,7 @@ - + part Files (*.mpt *.mpt.gz *.mpt.bz2) @@ -17924,7 +13218,7 @@ - + Presets (*.pre *.pre.gz *.pre.bz2) @@ -18012,18 +13306,18 @@ - - + + dB dB - + Dry Level [dB] - + Wet Level [dB] @@ -18844,7 +14138,7 @@ Quantize - + Kwantyzuj diff -Nru muse-2.0~rc2/share/locale/muse_ru.ts muse-2.0/share/locale/muse_ru.ts --- muse-2.0~rc2/share/locale/muse_ru.ts 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/locale/muse_ru.ts 2012-06-30 19:24:42.000000000 +0200 @@ -4,20007 +4,10139 @@ @default - Click this button to enable recording - Щелкните по этой кнопке для активизации режима записи - - - sets amount of quantization: -0 - no quantization -100 - full quantization - устанавливает объём квантования: -0 - без квантования -100 - полное квантование - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - выбрать инструмент "Указатель": -при помощи указателя можно: - выделять партии(new line) - перемещать партии(new line) - копировать партии - - - Click this button to stop playback - Щелкните по этой кнопке для остановки воспроизведения - - - Click this button to start playback - Щелкните по этой кнопке, чтобы начать воспроизведение - - - Click this button to rewind to start position - Щелкните по этой кнопке для перемещения к началу - - - Click this button to rewind - Щелкните по этой кнопке для перемотки назад - - - Click this button to forward current play position - Щелкните по этой кнопке для перемещения вперёд - - - don't quantize notes above this tick limit - не квантовать ноты выше этого предела тиков - - - quantize also note len as default - также квантовать длительность нот по умолчанию - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Щелкните по этой кнопке для открытия другого проекта. Вы также можете выбрать пункт Открыть в меню "Файл". - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Щелкните по этой кнопке для сохранения проекта. Будет предложено ввести имя файла. -Вы также можете выбрать пункт "Сохранить" в меню "Файл". - - - Create New Song - Создать новый проект - - - loop between left mark and right mark - цикл между левым и правым маркерами - - - record starts at left mark - запись начинается с левого маркера - - - record stops at right mark - запись останавливается на правом маркере - - - rewind to start position - перемотать к начальной позиции - - - rewind current position - перемотать к текущей позиции - - - move current position - переместить текущую позицию - - - stop sequencer - остановить секвенсер - - - start sequencer play - начать воспроизведение в секвенсере - - - to record press record and then play - чтобы начать запись нажмите "запись", а затем "воспроизвести" - - - send note off to all midi channels - послать сообщение "note off" на все midi-каналы - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - выбрать инструмент "Карандаш": -с помощью инструмента "Карандаш" вы можете: - создавать новые партии - изменять длину партий - - - select Delete Tool: -with the delete tool you can delete parts - выбрать инструмент "Ластик": -с помощью инструмента "Ластик" вы можете удалять партии - - - select Cut Tool: -with the cut tool you can split a part - выбрать инструмент "Ножницы":(new line) -с помощью инструмента "Ножницы" вы можете разрезать партию - - - select Glue Tool: -with the glue tool you can glue two parts - выбрать инструмент "Клей": -с помощью инструмента "Клей" вы можете соединить две партии - - - select Score Tool: - - выбрать редактор партитур: - - - - select Quantize Tool: -insert display quantize event - выбрать инструмент "Квантование": -вставить отображение квантуемых событий - - - select Drawing Tool - выбрать инструмент "Рисование" - - - select Muting Tool: -click on part to mute/unmute - выбрать инструмент "Не проигрывать партию (Заглушить)": -Щелкните по партии, чтобы "Проигрывать" или "Не проигрывать" ее - - - pointer - указатель - - - pencil - карандаш - - - cutter - ножницы - - - score - партитура - - - glue - клей - - - quantize - квантовать - - - draw - рисовать - - - mute parts - заглушить партии - - - Off - Выкл - - - presets (*.pre *.pre.gz *.pre.bz2) - пресеты (*.pre *.pre.gz *.pre.bz2) - - - All Files (*) - Все файлы (*) - - - Add Midi Track - Добавить Midi Трек + Добавить Midi Трек - Add Drum Track - Добавить трек с ударными + Добавить трек ударных - Add Wave Track - Добавить wave-трек + Добавить Wave-трек - Add Audio Output - Добавить аудиовыход + Добавить аудиовыход - Add Audio Group - Добавить аудиогруппу + Добавить аудиогруппу - Add Audio Input - Добавить аудиовход + Добавить аудиовход - Add Aux Send - Добавить Aux посыл - - - eraser - ластик + Добавить Aux посыл - MESS - MESS - - - DSSI - DSSI - - - FST - FST + Select project directory + Выбрать папку проекта - Add Synth Добавить синтезатор - Bar - Такт - - - Jack - Jack - - - ALSA: - ALSA: - - - SYNTH: - SYNTH: - - - JACK: - JACK: - - - Route Маршрут - channel="%1" - канал="%1" - - - dest - dest - - - devtype="%1" - типУстр="%1" + назн - type="%1" - тип="%1" - - - name="%1"/ имя="%1"/ - source - источник - - - Velocity - Скорость нажатия - - - Warning: No output devices! - + Предупреждение: Нет устройства выхода! - Open midi config... - + Открыть midi конфиг... - Empty ports - + Свободные порты - <none> <ничего> - channelMask="%1" МаскаКанала="%1" - dssi_synth - dssi_synth - - - ladspa_efx - ladspa_efx - - - channels="%1" - каналы="%1" - - - remch="%1" - remch="%1" + Bad timing + - mport="%1"/ - mport="%1"/ + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + AboutBox - AboutBox - Об окне - - - Keep On Rocking! - Рок навсегда! - - - Version 0.7.2pre3 - -(C) Copyright 1999-2005 Werner Schweer and others. -See http://www.muse-sequencer.org for new versions and -more information. - -Published under the GNU Public License - Версия 0.7.2pre3 - -(C) Copyright 1999-2005 Werner Schweer и другие. -Новые версии и дополнительную информацию смотрите на сайте http://www.muse-sequencer.org - -Опубликовано на условиях GNU Public License + Дополнительная информация - Version 2 pre-alpha - Версия 2 пре-альфа + Версия 2.0~rc2 (svn revision: 0) - (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. Published under the GNU Public License - (C) Copyright 1999-2010 Werner Schweer и другие. -На http://www.muse-sequencer.org смотри новые версии и + (C) Copyright 1999-2010 Werner Schweer и другие. +На http://www.muse-sequencer.org смотрите новые версии и дополнительную информацию. Опубликовано на условиях GNU Public License - &Keep On Rocking! &Продолжим рок! - Alt+K Alt+K - - - Appearance - - MusE: load image - MusE: загрузить изображение - - - Main application font, and default font for any - controls not defined here. - Главный шрифт приложения, и шрифт по умолчанию -для всех средств управления, здесь не определены. - - - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. - Для небольших средств контроля, типа линеек микшера. -Также для маленьких цифр на линейке времени, названий партий в компоновщике и рэка эффектов. - - - Midi track info panel. Transport controls. - Инфо-панель Midi-трека. Управление транспортом. - - - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. - Диаграмма контроллера и S/X кнопки. Большие цифры для -линеек времени и темпа, а также для тактового размера. - - - Time scale markers. - Маркеры на линейке времени. - - - List editor: meta event edit dialog multi-line edit box. - Редактор списка: редактирование мета-события многострочное окно редактирования. - - - Mixer label font. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - Шрифт метки микшера. Автоматическое изменение размера шрифта до выбранного размера. -Переносы только по пробелам. - - Maximum mixer label auto-font-sizing font size. - Максимальный размер автоматически изменяющегося шрифта метки микшера. - - - <none> - <ничего> - - - Select style sheet - Выберите таблицу стилей + Version 2 + - Qt style sheets (*.qss) - Таблицы стилей Qt (*.qss) + (C) Copyright 1999-2012 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + (C) Copyright 1999-2010 Werner Schweer и другие. +На http://www.muse-sequencer.org смотрите новые версии и +дополнительную информацию. + +Опубликовано на условиях GNU Public License {1999-2012 ?} AppearanceDialogBase - MusE: Appearance Settings - MusE: Настройки вида - - - Apply Применить - Ok Ok - Cancel Отмена - Arranger Компоновщик - MusE: Appearance settings - + MusE: Настройки внешнего вида - Parts Партии - show names показывать названия - show events показывать события - show Cakewalk Style показывать в стиле Cakewalk - y-stretch - + сжатие по вертикали - Events События - note on нажатие ноты - poly pressure полифоническое нажатие - controller контроллер - aftertouch посленажатие - pitch bend - изменение высоты тона + глиссандо - program change смена программы - special - специальная + специальные - Background picture Фоновое изображение - bg - фон - - - select... - выбрать... - - - show snap grid показывать сетку привязки - Colors Цвета - Items Разделы - Color name: - + Название цвета: - Global opacity - + Общая непрозрачность - Style/Fonts Стиль/Шрифты - QT Theme Тема QT - Windows Окна - MusE MusE - Metal Металл - Norwegian Wood Норвежское дерево - Platinum Платина - CDE КДЕ - Motif Motif - Motif Plus Motif Plus - Fonts Шрифты - Family Семейство - Size Размер - Font 1 Шрифт 1 - Font 2 Шрифт 2 - Font 3 Шрифт 3 - Font 0 Шрифт 0 - - - - - - - Bold Жирный - - - - - - - Italic Курсив - - - - - - - - - ... ... - Font 4 Шрифт 4 - Font 5 Шрифт 5 - Palette Палитра - add - добавить + добавить - remove - удалить + удалить - add to palette Добавить в палитру - B B - S S - H H - V V - G G - R R - clear очистить - Style Sheet: Таблица Стилей: - Font 6 Шрифт 6 + + May require restarting MusE for best results + + - Arranger + ArrangerColumnsBase - Arranger - Компоновщик + Configure arranger columns + - Cursor - Курсор + Columns: + - Off - Выкл + Name: + Имя: - Bar - Такт + Controller type: + - Snap - Привязка + Midi controller type + Тип midi-контроллера - Len - Дл + Control7 + Контрл7 - Type - Тип - - - NO - НЕТ + Control14 + Контрл14 - GM - GM + RPN + RPN - GS - GS + NRPN + NRPN - XG - XG + RPN14 + RPN14 - midi song type - тип midi-проекта + NRPN14 + NRPN14 Pitch - Высота тона - - - midi pitch - midi высотность + Высота тона - global midi pitch shift - общий сдвиг midi-высотности + Program + Программа - Tempo - Темп + H-Ctrl + H-Ктрл - midi tempo - midi-темп + Midi controller number high byte + Старший байт midi-контроллера - N - N + L-Ctrl + L-Ктрл - TrackInfo - ТрекИнфо + Midi controller number low byte + - R - R + * + wild card + * + +универсальный шаблон - M - M + affect CCs at + - S - S + begin of song + - C - Т + current position + - Track - Трек + &Add + &Добавить - O-Port - Вых. порт + &Delete + - Ch - Кан + Done + + + + Awl::MidiVolEntry - T - Т + off + выкл - Enable Recording - Разрешить запись + db + дб + + + Awl::VolEntry - Mute/Off Indicator - Индикатор глушения вкл/выкл + off + выкл + + + ClipListEditorBase - Solo Indicator - Индикатор соло + MusE: ClipList + MusE: Список Клипов - Track Type - Тип трека + Name + Имя - Track Name - Имя трека + Refs + Ссыл (Refs) - Midi output channel number or audio channels - Номер выходного Midi-канала или аудио каналов + Len + Дл - Midi output port or synth midi port - Выходной midi-порт или midi-порт синтезатора + Data + Данные - Time Lock - Изменение времени заблокировано + Clip Properties + Свойства Клипа - Enable recording. Click to toggle. - Разрешить запись. Щелкните для переключения. + Pos: + Поз: - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - Индикатор заглушки. Щелкните для переключения. -Щелчок правой кнопкой мыши включает/выключает трек. -Заглушка предназначена для быстрых, повторяющихся действий. -А Вкл/Выкл нет! + Len: + Дл: - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - Индикатор Соло. Щелкните для переключения. -Все треки, связанные с этим треком тоже перейдут режим "фантомного" соло, -Они будут обозначены темными квадратами. + Samplerate + + + + CommentBase - Track type. Right-click to change - midi and drum track types. - Тип трека. Щелкните правой кнопкой мыши чтобы -изменить тип трека (midi-трек или трек ударных). + Form1 + Форма1 - Track name. Double-click to edit. -Right-click for more options. - Название трека. Редактирование - двойной щелчок. -Большее количество опций - правый щелчок мыши. + Track Comment + Комментарий к треку - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - Трек Midi/Ударных: номер канала выхода. -Аудио трек: Каналы. -Чтобы изменить, щелкните Средней/Правой кнопкой мыши. + Track 1 + Трек 1 + + + ConfigMidiFileBase - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - Трек Midi/Ударных: Порт выхода. -Трек синтезатора: Назначенный midi-порт. -Щелчок левой кнопкой - изменить. -Щелчок правой кнопкой - показать ГИП. + &OK + &ОК - Time lock - Изменение времени заблокировано + &Cancel + &Отмена - song length - bars - длина проекта - в тактах + 0 (single track) + 0 (один трек) - Port - Порт + 1 (multiple tracks) + 1 (несколько треков) - Automation - Автоматизация + Format: + Формат: - <unknown> - <неизвестно> + 96 + 96 - - - ArrangerView - panic - паника + 192 + 192 - transport - транспорт + 384 + 384 - C&ut - &Вырезать + Division: + Разрешение (тиков на четверть): - &Copy - С&копировать + Copyright: + Copyright: - &Paste - &Вставить + MusE: Config Midi File Import/Export + MusE: Настроить Импорт/Экспорт Midi-файла - Paste c&lone - Вставить к&лон + Import: + Импорт: - &Insert Empty Measure - &Вставить пустой такт + Split tracks into &parts + Разделить треки на &партии - Delete Selected Tracks - Удалить выделенные треки + Alt+P + Alt+P - Add Track - Добавить трек + Split tracks into parts, or one single part + Разделить треки на партии, или все в одну партию - Select - Выделить + Export: + Экспорт: - &Deselect All - &Убрать выделение + Enable extended smf format (currently not implemented) + Разрешить расширенный smf формат (в настоящее время не осуществлено) - &Inside Loop - &Внутри цикла + Use &2-byte time signatures instead of standard 4 + Использовать &2-байтные размеры в такте вместо стандартных 4 - &Outside Loop - &Вне цикла + Alt+2 + Alt+2 - All &Parts on Track - Все &партии в треке + Note: Format 0 uses the FIRST midi track's name/comment in the arranger + Примеч: Формат 0 использует имя/коментарий ПЕРВОГО midi трека в компоновщике - Pianoroll - Пианоролл + Save space by replacing note-offs with &zero velocity note-ons + Сохранить место, заменяя note-offs на &note-ons с нулевой скоростью нажатия - Drums - Ударные + Alt+Z + Alt+Z + + + CrescendoBase - List - Список + MusE: Crescendo/Decrescendo + MusE: Крещендо/Диминуэндо - Wave - Wave + Range + Диапазон - Mastertrack - Мастер-трек + Looped Events + События в цикле - Graphic - Графика + Selected Looped + Выбранные в цикле - Midi &Transform - &Преобразовать MIDI-сообщения + Values + Значения - Global Cut - Глобальное вырезание + Start velocity + Начальная скор. нажатия - Global Insert - Глобальная вставка + % + % - Global Split - Глобальное разделение + End velocity + Конечная скор. нажатия - &Edit - &Правка + Absolute + Абсолютная - &Structure - &Структура + Relative + Относительная - Transpose - Транспонировать + OK + OK - New - Новый + Cancel + Отмена - AudioMixerApp + DeicsOnzeGui - MusE: Mixer - MusE: Микшер + Delete preset + Удалить пресет - &Create - &Добавить + Do you really want to delete %1 ? + Вы действительно хотите удалить %1 ? - &View - &Вид + &Yes + &Да - Routing - Маршрутизация + &No + &Нет - Show Midi Tracks - Показать Midi-треки + Save configuration + Сохранить конфигурацию - Show Drum Tracks - Показать треки ударных + Critical Error + Критическая ошибка - Show Wave Tracks - Показать Wave-треки + Cannot open file %1 + Не могу открыть файл %1 - Show Inputs - Показать входы + Parsing error for file %1 + Синтаксическая ошибка в файле %1 - Show Outputs - Показать выходы + Load category dialog + Загрузить диалог категорий - Show Groups - Показать группы + Load set dialog + Загрузить диалог настройки - Show Auxs - Показать Auxs + Save set dialog + Сохранить диалог настройки - Show Synthesizers - Показать синтезаторы + New category + Новая категория - - - AudioStrip - panorama - панорама + Delete category + Удалить категорию - aux send level - уровень aux посыла + Load category + Загрузить категорию - off - выкл + Save category + Сохранить категорию - Pan - Пан + Load set + Загрузить установку - 1/2 channel - стерео-моно + Save set + Сохранить установку - Pre - Пре + Delete set + Удалить установку - pre fader - post fader - пре федер - пост федер + New subcategory + Новая подкатегория - dB - Дб + Delete subcategory + Удалить подкатегорию - record - записать + Load subcategory + Загрузить подкатегорию - mute - заглушить + Save subcategory + Сохранить подкатегорию - record downmix - записать downmix + New preset + Новый пресет - solo mode (monitor) - режим соло (монитор) + Load preset + Загрузить пресет - pre fader listening - прослушивание пре федера + Save preset + Сохранить пресет - iR - вх + No more category supported + Большее количество категорий не поддерживается - intput routing - маршрут входа + You can not add more categories + Вы не можете больше добавлять категории - oR - вых + No category selected + Категория не выбрана - output routing - маршрут выхода + You must first select a category. + Сначала нужно выбрать категорию. - Off - Откл + Replace or add + Заменить или добавить - Read - Читать + %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 должен изменить номер H-банка %2, но этот слот уже занят. +Хотите заменить его или добавить в следующий слот ? - Touch - По касанию + &Replace + &Заменить - Write - Записывать + &Add + &Добавить - automation type - тип автоматизации + Download error + Ошибка загрузки - Channel - Канал + There is no more free category slot. + Больше нет свободных слотов для категорий. - solo mode - режим соло + Save category dialog + Сохранить диалог категории - input routing - маршрут входа + No more subcategory supported + Большее количество подкатегорий не поддерживается - - - Awl::MidiVolEntry - - off - выкл + You can not add more subcategories + Нельзя добавить больше подкатегорий - - db - дб + No subcategory selected + Подкатегория не выбрана - - - Awl::VolEntry - - off - выкл + You must first select a subcategory. + Сначала нужно выбратьподкатегорию. - - - BigTime - MusE: Bigtime - MusE: Хронометр + Load subcategory dialog + Загрузить диалог подкатегории - format display - формат дисплея + %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 должен повлиять на номер L-банка %2, но этот слот уже занят. +Хотите заменить его или добавить в следующий слот ? - bar - такт + There is no more free subcategory slot. + Больше нет свободных слотов для подкатегорий. - beat - доля + Save subcategory dialog + Сохранть диалог подкатегории - tick - тик + No more preset supported + Большее количество пресетов не поддерживается - minute - минут(а) + You can not add more presets + Вы не можете больше добавлять пресеты - second - секунд(а) + No preset selected + Пресет не выбран - frame - фреймов + You must first select a preset. + Сначала выберите пресет. - subframe - субфреймов + Load preset dialog + Загрузить диалог пресета - - - ClipListEdit - MusE: Clip List Editor - MusE: Редактор списка фрагментов + %1 is supposed to be affected to the prog number %2, but there is already one on this slot. + Do you want to replace it or to add it in the next free slot ? + %1 должен повлиять на номер программы %2, но этот слот уже занят. +Хотите заменить её или добавить в следующий слот ? - panic - паника + There is no more free preset slot. + Больше нет свободных слотов для пресета. + + + Save preset dialog + Сохранить диалог пресета - transport - транспорт + Browse set dialog + Просмотр диалога установки + + + Browse image dialog + Просмотр диалога изображения - ClipListEditorBase + DeicsOnzeGuiBase - - MusE: ClipList - MusE: Список фрагментов + DeicsOnze + DeicsOnze - - Name - Имя + Subcategory + Подкатегория - - Refs - Рефс (Refs) + NONE + НИЧЕГО - - Start - Начало + Category + Категория - - Len - Дл + Preset + Пресет - - Data - Данные + Bank numerous + Несколько банков - - Clip Properties - Свойства фрагмента + Prog + Прогр - - Pos: - Поз: + Program numerous + Несколько программ - - Len: - Дл: + &Global + &Глобальный - - - CommentBase - - Form1 - Форма1 + Coarse Ratio + Грубая пропорция - - Track Comment - Комментарий к треку + POLY + ПОЛИ - - Track 1 - Трек 1 + MONO + МОНО - - - ConfigMidiFileBase - MusE: Config Midi File Export - Настроить экспорт midi-файла + Pitch Bend Range + Диапозон изменения высоты тона - - &OK - &ОК + LFO + LFO - - &Cancel - &Отмена + PMS + PMS - - 0 (single track) - 0 (один трек) + PMD + PMD - - 1 (multiple tracks) - 1 (несколько треков) + AMD + AMD - - Format: - Формат: + Speed + Скорость - - 96 - 96 + Delay + Задержка - - 192 - 192 + AMS + AMS - - 384 - 384 + LFO Waveform + Форма волны LFO - - Division: - Деление(Division): + LFO Sync + Синхр. LFO - - Copyright: - Copyright: + Amplitude Modulation Sensitivity + Чувствительность Амплитудной Модуляции - Enable extended smf format - Разрешить расширенный формат SMF + Pitch Modulation Sensitivity + Чувствительность Частотной Модуляции - - MusE: Config Midi File Import/Export - MusE: Настроить Импорт/Экспорт Midi-файла + Pitch Modulation Depth + Глубина Частотной Модуляции - - Import: - Импорт: + LFO Speed + Скорость LFO - - Split tracks into &parts - Разделить треки на &партии + LFO Delay + Задержка LFO - - Alt+P - Alt+P + Transpose + Транспонировать - - Split tracks into parts, or one single part - Разделить треки на партии, или одну партию + Modulation Matrix + Матрица модуляции - - Export: - Экспорт: + Volume + Громкость - - Enable extended smf format (currently not implemented) - Разрешить расширенный smf формат (в настоящее время не осуществлено) + Detune + Расстройка - - Use &2-byte time signatures instead of standard 4 - Использовать &2-байтные размеры в такте вместо стандартных 4 + &Preset + - - Alt+2 - Alt+2 + INITVOICE + - - Note: Format 0 uses the FIRST midi track's name/comment in the arranger + LBank - - Save space by replacing note-offs with &zero velocity note-ons - Сохранить место, заменяя note-offs на &note-ons с нулевой скоростью нажатия + HBank + - - Alt+Z - Alt+Z + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + - - - CrescendoBase - - MusE: Crescendo/Decrescendo + Pitch Envelope - - Range - Диапазон + PL3 + - - Looped Events + PL2 - - Selected Looped + PL1 - - Values - Значения + PR1 + - - Start velocity + PR2 - - - % + PR3 - - End velocity + Pitch modulation depth - - Absolute + Pitch modulation sensitivity - - Relative + LFO delay - - OK + LFO speed - - Cancel - Отмена + Amplitude modulation depth + - - - CtrlPanel - Sel - Выбр + Amplitude modulation sensitivity + - select controller - выбрать контроллер + <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> +<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> +<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> +<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> +<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> +<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + - x - x + Op4 Feedback + - remove panel - удалить панель + Feedback level of the operator 4 + - Velocity - Скорость нажатия + Op &1 + - add new ... - Добавить новый... + Scaling 1 + - S - S + LS1 + - X - X + RS1 + - manual adjust - настройка вручную + Rate Scaling + - double click on/off - двойной щелчок вкл/выкл + Attack Rate of the operator 1 + - off - выкл + Level Scaling + - - - DeicsOnzeGui - - - Delete preset - Удалить пресет + Amplitude Envelope 1 + - - - - Do you really want to delete %1 ? - Вы действительно хотите удалить %1 ? + RR1 + - - - - &Yes - &Да + D1R1 + - - - - &No - &Нет + D1L1 + - - Save configuration - Сохранить конфигурацию + D2R1 + - - - - - - - - - - - Critical Error - Критическая ошибка + Release Rate + - - - - - - - Cannot open file %1 - Не могу открыть файл %1 + + 2° Decay Rate + - - - - - - - Parsing error for file %1 - Синтаксическая ошибка в файле %1 + + 1° Decay Level + - - - - Load category dialog - Загрузить диалог категорий + + 1° Decay Rate + - - Load set dialog + Attack Rate - - Save set dialog + AR1 - - New category + Detune, OSCWave, EGShift 1 - - - Delete category + DET1 - - Load category + EG Shift - - Save category + 96dB - - Load set + 48dB - - Save set + 24dB - - Delete set + 12dB - - New subcategory + Wave form - - - Delete subcategory + Wave form 1 = <i>sin(<b>t</b>)</i><br> +Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> +Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> +Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> +Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> +Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> +Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> - - Load subcategory + Sensitivity 1 - - Save subcategory + KVS1 - - New preset - Новый пресет + Amplitude Modulation Enable + - - Load preset + AME1 - - Save preset + Keyboard Velocity Sensitivity - - No more category supported + Key Velocity Sensitivity - - You can not add more categories + EBS1 - - - No category selected + EG Bias Sensitivity - - - You must first select a category. + Eg Bias Sensitivity - - - - Replace or add + Frequency 1 - - %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? + Coarse 1 - - - - &Replace - &Заменить + Fine 1 + - - - - &Add - &Добавить + Fine Ratio + - - - - Download error + Freq 1 - - There is no more free category slot. + Fixed Frequency - - Save category dialog + Toggle Fix Frequency - - No more subcategory supported + FIX - - You can not add more subcategories + OUT 1 - - - No subcategory selected + Output Volume - - - You must first select a subcategory. + Op &2 - - Load subcategory dialog + Amplitude Envelope 2 - - %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? + D1R2 - - There is no more free subcategory slot. + D1L2 - - Save subcategory dialog + D2R2 - - No more preset supported + RR2 - - You can not add more presets + AR2 - - - - No preset selected + Frequency 2 - - - - You must first select a preset. + Coarse 2 - - Load preset dialog + Fine 2 - - %1 is supposed to be affected to the prog number %2, but there is already one on this slot. - Do you want to replace it or to add it in the next free slot ? + Freq 2 - - There is no more free preset slot. + Scaling 2 - - Save preset dialog + LS2 - - Browse set dialog + RS2 - - Browse image dialog + OUT 2 - - - DeicsOnzeGuiBase - - DeicsOnze - DeicsOnze + Detune, OSCWave, EGShift 2 + - &Presets - &Пресеты + DET2 + - Load - Загрузить + Sensitivity 2 + - Save - Сохранить + EBS2 + - Preset Name - Имя пресета + KVS2 + - INIT VOICE - Начальный голос(INIT VOICE) + AME2 + - - Subcategory - Подкатегория + Op &3 + - - - NONE - НИЧЕГО + Amplitude Envelope 3 + - - Category - Категория + D1R3 + - Delete - Удалить + D1L3 + - - Preset - Пресет + D2R3 + - New - Новый + RR3 + - Bank - Банк + AR3 + - - - Bank numerous - Несколько банков + Scaling 3 + - - Prog - Прогр + LS3 + - - Program numerous - Несколько программ + RS3 + - DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller under GPL licence - DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller на условиях GPL licence + OUT 3 + - - &Global - &Глобальный + Frequency 3 + - Master Volume - Общая Громкость + Coarse 3 + - Master volume - Общая громкость - + Fine 3 + + - feedback - обратная связь + Freq 3 + - - - - - Coarse Ratio - Грубая пропорция + Detune, OSCWave, EGShift 3 + - Feedback of Op 4 - Обратная связь от Op 4 + DET3 + - Function - Функция + Sensitivity 3 + - - POLY - ПОЛИ + EBS3 + - - MONO - МОНО + KVS3 + - PBR - PBR + AME3 + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pitch Bend Range - Диапозон изменения высоты тона + Op &4 + - - LFO - LFO + amplitude Envelope 4 + - - PMS - PMS + AR4 + - - PMD - PMD + D1R4 + - - AMD - AMD + D1L4 + - - Speed - Скорость + D2R4 + - - Delay - Задержка + RR4 + - - AMS - AMS + Frequency 4 + - Saw Up - Пилообразный + Coarse 4 + - Square - Прямоугольный + Fine 4 + - Triangl - Треугольный + Freq 4 + - S/Hold - S/Hold + Scaling 4 + - - LFO Waveform - Форма волны LFO + LS4 + - - LFO Sync - Синхр. LFO + RS4 + - - Amplitude Modulation Sensitivity - Чувствительность Амплитудной Модуляции + OUT 4 + - - Pitch Modulation Sensitivity - Чувствительность Частотной Модуляции + Detune, OSCWave, EGShift 4 + - - - Pitch Modulation Depth - Глубина Частотной Модуляции + DET4 + - - LFO Speed - Скорость LFO + Sensitivity 4 + - - LFO Delay - Задержка LFO + EBS4 + - Transpose and Global Detune - Транспозиция и Общая Расстройка + KVS4 + - - - - Transpose - Транспонировать + AME4 + - Global Detune - Общая расстройка + &Func + - Algorithm 1 - Алгоритм 1 + Delay Pan Depth + - Algorithm 2 - Алгоритм 2 + Delay Pan LFO Freq + - Algorithm 3 - Алгоритм 3 + Delay Ch Send Level + - Algorithm 4 - Алгоритм 4 + Channel Chorus + - Algorithm 5 - Алгоритм 5 + Delay Feedback + - Algorithm 6 - Алгоритм 6 + Delay On/Off, Return Level + - Algorithm 7 - Алгоритм 7 + On + Вкл - Algorithm 8 - Алгоритм 8 + Delay Beat Ratio + - - - Modulation Matrix - Матрица модуляции + Delay BPM + - - - - - - - Volume - Громкость + Foot Control + - - - - - - - - - - Detune - Расстройка + Pitch + Высота тона - - &Preset + Amplitude - - INITVOICE + Modulation Wheel - - LBank + Breath Control - - HBank + Pitch Bias - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + Envelope Bias - - Pitch Envelope - + After Touch + Посленажатие - - PL3 + Phony Mode - - PL2 + Potamento - - PL1 + Portamento Mode - - PR1 + FINGER - - PR2 + FULL - - PR3 + PT - - - - - - - - Pitch modulation depth + Portamento Time - - Pitch modulation sensitivity + C&horus - - LFO delay + Chorus Parameters - - LFO speed + Channel send level - - Amplitude modulation depth + On/Off and Return level - - Amplitude modulation sensitivity + Select LADSPA plugin - - <b>Algorithm 1</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 2</b> : <i>Op 1</i> modulated by <i>Op 2</i> modulated by both <i>Op 3</i> and <i>Op 4</i><br> -<b>Algorithm 3</b> : <i>Op 1</i> modulated by both <i>Op 4</i> and <i>Op 2</i> modulated by <i>Op 3</i><br> -<b>Algorithm 4</b> : <i>Op 1</i> modulated by both <i>Op 2</i> and <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 5</b> : (<i>Op 1</i> modulated by <i>Op 2</i>) add to (<i>Op 3</i> modulated by <i>Op 4</i>) <br> -<b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> -<b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> -<b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> + Change plugin - - Op4 Feedback + &Reverb - - - Feedback level of the operator 4 + Reverb Parameters - - Op &1 - + &Config + &Настроить - - Scaling 1 + Font Size - - LS1 + Quality - - RS1 + High - - - - - - - - - Rate Scaling + Middle - - - - - - - - - - - - - Attack Rate of the operator 1 + Low - - - - - - - - - Level Scaling + Ultra low - - Amplitude Envelope 1 - + Filter + Фильтр - - RR1 + Save Mode (into the song) - - D1R1 + Save only the used presets - - D1L1 + Save the entire set - - D2R1 + Save the configuration - - - - - Release Rate + Configuration File - - - - - - 2° Decay Rate + + Save... - - - - - - 1° Decay Level + + Load... - - - - - - 1° Decay Rate + + Save as default - - - - - Attack Rate - + Colors + Цвета - - AR1 - + Text + Текст - - Detune, OSCWave, EGShift 1 + Background - - DET1 + Edit Text - - - - - EG Shift + Edit Background - - - - - 96dB + Red - - - - - 48dB + Blue - - - - - 24dB + Green - - - - - 12dB + Set Path - - - - - Wave form + Image in the background : - - - - - Wave form 1 = <i>sin(<b>t</b>)</i><br> -Wave form 2 = <i>sin(<b>t</b>)*abs(sin(<b>t</b>))</i><br> -Wave form 3 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>) else 0</i><br> -Wave form 4 = <i>if <b>t</b>&#060 pi then sin(<b>t</b>)*abs(sin(<b>t</b>)) else 0</i><br> -Wave form 5 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>) else 0</i><br> -Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> -Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> + Browse... - - Sensitivity 1 + Load the set at the initialization : - - KVS1 - - - - - - - - Amplitude Modulation Enable + Set Brightness, Detune, Attack and Release of the current channel to default - - AME1 + Res. Ctrl - - - - - Keyboard Velocity Sensitivity + Cut all notes off - - - - - Key Velocity Sensitivity + Panic! - - EBS1 + Number of Voices - - - - - EG Bias Sensitivity + Number of voices - - - - - Eg Bias Sensitivity - + Enable + Разрешить - - Frequency 1 - + Channel + Канал - - Coarse 1 - + Vol + Громк - - Fine 1 + Channel Ctrl - - - - - Fine Ratio - + Release + Послезвучие - - Freq 1 - + Attack + Атака - - - - - Fixed Frequency + Brightness - - - - - Toggle Fix Frequency + Modulation - - - - - FIX - + Pan + Пан + + + DelOverlapsBase - - OUT 1 - + MusE: Delete Overlaps + Удалить Наложения - - - - - Output Volume - + Range + Диапазон - - Op &2 - + All Events + Все События - - Amplitude Envelope 2 - + Selected Events + Выбранные события - - D1R2 - + Looped Events + События в Цикле - - D1L2 - + Selected Looped + Выбранные в Цикле - - D2R2 - + OK + OK - - RR2 - + Cancel + Отмена + + + DidYouKnow - - AR2 - + Did you know? + Знаете ли вы? - - Frequency 2 - + Don't show on startup + Не показывать при старте программы - - Coarse 2 - + Next tip + Следующий совет - - Fine 2 - + Close + Закрыть + + + DuplicateTracksBase - - Freq 2 + Duplicate tracks - - Scaling 2 + Number of copies - - LS2 + Copy all routes - - RS2 + Default routing - - OUT 2 + No routes - - Detune, OSCWave, EGShift 2 + Copy parts - - DET2 + Copy standard controllers (vol, pan) - - Sensitivity 2 + Copy effects rack plugins - - EBS2 + Copy plugin controllers - - KVS2 + Ok - - AME2 - + Cancel + Отмена + + + EditCtrlBase - - Op &3 - + MusE: Edit Controller Event + MusE: Редактировать контроллер - - Amplitude Envelope 3 - + Time Position + Позиция по времени - - D1R3 - + Available Controller: + Доступные контроллеры: - - D1L3 - + Create New Controller + Создать новый контроллер - - D2R3 - + textLabel3 + текстМетка3 - - RR3 - + Value + Значение - - AR3 - + Controller + Контроллер - - Scaling 3 - + H-Bank + H-банк - - LS3 - + L-Bank + L-банк - - RS3 - + Program + Программа - - OUT 3 - + off + выкл - - Frequency 3 - + pushButton4 + кнопка нажатия4 - - Coarse 3 - + &OK + &ОК - - Fine 3 - + &Cancel + О&тмена + + + EditGainBase - - Freq 3 - + MusE: Modify gain + MusE: Изменить усиление - - Detune, OSCWave, EGShift 3 - + Gain + Усиление - - DET3 - + 200% + 200% - - Sensitivity 3 - + 100% + 100% - - EBS3 - + 0% + 0% - - KVS3 - + &Reset + &Сброс - - AME3 - + Alt+R + Alt+R - - Op &4 - + &Apply + &Применить - - amplitude Envelope 4 - + Alt+A + Alt+A - - AR4 - + &Cancel + &Отмена - - D1R4 - + Alt+C + Alt+C + + + EditInstrumentBase - - D1L4 - + MusE: Instrument Editor + Редактор инструментов - - D2R4 - + High Bank: + H-банк: - - RR4 - + Low Bank: + L-банк: - - Frequency 4 - + Program: + Программа: - - Coarse 4 - + &Delete + &Удалить - - Fine 4 - + Alt+D + Alt+D - - Freq 4 - + Drum + Ударные - - Scaling 4 - + GM + GM - - LS4 - + GS + GS - - RS4 - + XG + XG - - OUT 4 - + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + Это список общеупотребительных midi-контроллеров. +Обратите внимание, что изменение программ и звуковысотности в MusE, +такое же, как и управление обычными контроллерами. + - - Detune, OSCWave, EGShift 4 - + Properties + Свойства - - DET4 - + Control7 + Контрл7 - - Sensitivity 4 - + Control14 + Контрл14 - - EBS4 - + RPN + RPN - - KVS4 - + NRPN + NRPN - - AME4 - + Pitch + Высота тона - - &Func - + Program + Программа - - Delay Pan Depth - + H-Ctrl + H-Ктрл - - Delay Pan LFO Freq - + L-Ctrl + L-Ктрл - - Delay Ch Send Level - + Min + Мин - - - - Channel Chorus - + Max + Макс - - Delay Feedback - + Name + Имя - - Delay On/Off, Return Level - + Type + Тип - - - - On - Вкл + Hex Entry: + Шестнадцатиричный Ввод: - - Delay Beat Ratio - + &File + &Файл - - Delay BPM - + Tools + Инструменты - - Foot Control - + New + Новый - - - - - Pitch - Высота тона + &New + &Новый - - - - - Amplitude - + Ctrl+N + Ctrl+N - - Modulation Wheel - + Open + Открыть - - Breath Control - + &Open... + &Открыть... - - - Pitch Bias - + Ctrl+O + Ctrl+O - - - Envelope Bias - + Save + Сохранить - - After Touch - Посленажатие + &Save + &Сохранить - - Phony Mode - + Ctrl+S + Ctrl+S - - Potamento - + Save As + Сохранить как - - Portamento Mode - + Save &As... + Сохранить &как... - - FINGER - + Exit + Выйти - - FULL - + E&xit + В&ыйти - - PT - + Instrument Name: + Имя Инструмента: - - - Portamento Time - + Selected instrument name. + Имя выбранного инструмента. - - C&horus - + List of defined instruments. + Список назначенных инструментов. - - Chorus Parameters - + Pa&tches + Па&тчи - - - Channel send level - + List of groups and patches. + Список групп и патчей. - - - On/Off and Return level - + Group/Patch + Группа/Патч - - - Select LADSPA plugin - + Name: + Имя: - - - Change plugin - + Group or patch name + Группа или имя патча - - &Reverb - + Patch high bank number + Номер H-банка патча - - Reverb Parameters - + Patch high bank number. --- means don't care. + Номер H-банка патча. --- не важно какой. - - &Config - &Настроить + --- + dont care + --- + +не важно - - Font Size - + Patch low bank number + Номер L-банка патча - - Quality - + Patch low bank number. --- means don't care. + Номер L-банка патча. --- не важно какой. - - High - + --- + --- - - Middle - + Patch program number + Програмный номер патча - - Low - + Drum patch + Патч ударных - - Ultra low - + If set, the patch is available only for drum channels. + Если установлено, то этот патч может использоваться только в каналах ударных. - - Filter - Фильтр + GM patch + GM патч - - Save Mode (into the song) - + If set, the patch is available in a 'GM' or 'NO' midi song type. + Если установлено, то этот патч может использоваться только в типах midi-проектов "GM" или "NO". - - Save only the used presets - + GS patch + GS патч - - Save the entire set - + If set, the patch is available in a 'GS' or 'NO' midi song type. + Если установлено, то этот патч может использоваться только в типах midi-проектов "GS" или "NO". - - Save the configuration - + XG patch + XG патч - - Configuration File - + If set, the patch is available in an 'XG' or 'NO' midi song type. + Если установлено, то этот патч может использоваться только в типах midi-проектов "XG" или "NO". - - Save... - + Delete group or patch + Удалить группу или патч - - Load... - + New patch + Новый патч - - Save as default - + New &Patch + Новый &Патч - - Colors - Цвета + Alt+P + Alt+P - - Text - Текст + New group + Новая группа - - Background - + New &Group + Новая &Группа - - Edit Text - + Alt+G + Alt+G - - Edit Background - + Contro&ller + Контро&ллер - - - - Red - + Common: + Обычный: - - - - Blue - + List of defined controllers + Список назначенных контроллеров - - - - Green - - - - - Set Path - - - - - Image in the background : - - - - - - Browse... - - - - - Load the set at the initialization : - - - - - Set Brightness, Detune, Attack and Release of the current channel to default - - - - - Res. Ctrl - - - - - Cut all notes off - - - - - Panic! - - - - - Number of Voices - - - - - Number of voices - - - - - Enable - Разрешить - - - - Channel - Канал - - - - Vol - Громк - - - - Channel Ctrl - - - - - Release - Послезвучие - - - - Attack - Атака - - - - Brightness - - - - - Modulation - - - - - Pan - Пан - - - - DelOverlapsBase - - - MusE: Delete Overlaps - - - - - Range - Диапазон - - - - All Events - - - - - Selected Events - - - - - Looped Events - - - - - Selected Looped - - - - - OK - - - - - Cancel - Отмена - - - - DidYouKnow - - - Did you know? - Знаете ли вы? - - - - Don't show on startup - Не показывать при старте программы - - - - Next tip - Следующий совет - - - - Close - Закрыть - - - - DrumEdit - - &File - &Файл - - - Load Map - Загрузить карту - - - Save Map - Сохранить карту - - - &Edit - &Правка - - - Cut - Вырезать - - - Copy - Копировать - - - Paste - Вставить - - - Delete Events - Удалить события - - - Select All - Выделить всё - - - Select None - Убрать выделение - - - Invert - Инвертировать - - - Inside Loop - Внутри цикла - - - Outside Loop - Вне цикла - - - &Select - &Выделение - - - Load Drummap - Загрузить драм-карту - - - Store Drummap - Сохранить драм-карту - - - Step Record - Пошаговая запись - - - Midi Input - MIDI-вход - - - ctrl - ctrl - - - Add Controller View - Показать контроллеры - - - M - M - - - Sound - Звук - - - QNT - КВНТ - - - E-Note - E-Нота - - - Len - Дл - - - A-Note - A-Нота - - - Ch - Кан - - - Port - Порт - - - LV1 - LV1 - - - LV2 - LV2 - - - LV3 - LV3 - - - LV4 - LV4 - - - drummaps - драм-карты - - - Muse: Load Drum Map - Muse: Загрузить драм-карту - - - MusE: Store Drum Map - Muse: Сохранить драм-карту - - - Set Fixed Length - Установить фикс. длительность - - - &Functions - &Функции - - - Modify Velocity - Изменить скорость нажатия - - - mute instrument - заглушить инструмент - - - sound name - название звука - - - volume percent - громкость в процентах - - - quantisation - квантование - - - this input note triggers the sound - эта входящая нота включает звук - - - note length - длина ноты - - - this is the note which is played - это нота, которая воспроизводится - - - output channel (hold ctl to affect all rows) - канал выхода (удерживайте ctrl, чтобы воздействовать на все ряды) - - - output port - порт выхода - - - shift + control key: draw velocity level 1 - клавиши shift+control: рисовать уровень 1 скорости нажатия - - - control key: draw velocity level 2 - Клавиша control: рисовать уровень 2 скорости нажатия - - - shift key: draw velocity level 3 - Клавиша shift: рисовать уровень 3 скорости нажатия - - - draw velocity level 4 - рисовать уровень 4 скорости нажатия - - - output channel (ctl: affect all rows) - канал выхода (ctrl: действует на все ряды) - - - Reset GM Map - Настроить карту GM по умолчанию - - - Previous Part - Предыдущая партия - - - Next Part - Следующая партия - - - Quantize - Квантовать - - - Erase Event - Удалить событие - - - Delete Overlaps - Удалить наложения - - - &Plugins - &Плагины - - - Drum tools - Инструменты ударных - - - panic - паника - - - transport - транспорт - - - Vol - Громк - - - Drum map - Карта ударных - - - Reset the drum map with GM defaults? - Сброс карты ударных на GM по умолчанию? - - - - EditCAfterDialog - - MusE: Enter Channel Aftertouch - MusE: Ввести Channel Aftertouch - - - Time Position - Позиция по времени - - - Pressure - Давление - - - - EditCtrl7DialogBase - - MusE: Enter Controller - MusE: Ввести контроллер - - - Controller: - Контроллер: - - - Time Position: - Позиция по времени: - - - Value: - Значение: - - - controller value - значение контроллера - - - OK - ОК - - - Cancel - Отмена - - - - EditCtrlBase - - - MusE: Edit Controller Event - MusE: Редактировать контроллер - - - - Time Position - Позиция по времени - - - - Available Controller: - Доступный контроллер: - - - - Create New Controller - Создать новый контроллер - - - - textLabel3 - текстМетка3? - - - - Value - Значение - - - - Controller - Контроллер - - - - H-Bank - H-банк - - - - L-Bank - L-банк - - - - Program - Программа - - - - - off - выкл - - - - pushButton4 - кнопка для нажатия4? - - - - &OK - &ОК - - - - &Cancel - О&тмена - - - - EditEventDialog - - Ok - ОК - - - Cancel - Отмена - - - - EditGainBase - - - MusE: Modify gain - MusE: изменить усиление - - - - Gain - Усиление - - - - 200% - 200% - - - - 100% - 100% - - - - 0% - 0% - - - - &Reset - &Сброс - - - - Alt+R - Alt+R - - - - &Apply - &Применить - - - - Alt+A - Alt+A - - - - &Cancel - &Отмена - - - - Alt+C - Alt+C - - - - EditInstrument - - MusE: Create file failed - MusE: Не удалось создать файл - - - MusE: Write File failed - MusE: Не удалось записать файл - - - MusE: - MusE: - - - The user instrument directory - - Пользовательский инструментальный каталог - - - -does not exist yet. Create it now? - - не существует. Создать? - - - (You can override with the environment variable MUSEINSTRUMENTS) - (Вы можете переписать с переменной окружения MUSEINSTRUMENTS) - - - Unable to create user instrument directory - - Невозможно создать пользовательский инструментальный каталог - - - MusE: Save Instrument Definition - MusE: Сохранить Определение Инструмента - - - Instrument Definition (*.idf) - Определение инструмента (*.idf) - - - MusE: Save instrument as - MusE: Сохранить инструмент как - - - Enter a new unique instrument name: - Введите неповторяющееся имя инструмента: - - - The user instrument: - - Инструмент пользователя: - - - -already exists. This will overwrite its .idf instrument file. -Are you sure? - уже существует. Нажатие на кнопку "ОК" -перепишет .idf файл инструмента. -Вы уверены? - - - MusE: Bad instrument name - MusE: Неверное имя инструмента - - - Please choose a unique instrument name. -(The name might be used by a hidden instrument.) - Пожалуйста, выберите неповторяющееся имя для инструмента. -(Имя может использоваться в скрытых инструментах) - - - MusE: Bad patch name - MusE: Неверное имя патча - - - Please choose a unique patch name - Пожалуйста, выберите неповторяющееся имя патча - - - MusE: Bad patchgroup name - MusE: Неверное имя группы - - - Please choose a unique patchgroup name - Пожалуйста, выберите неповторяющееся имя группы - - - MusE: Bad controller name - MusE: Неверное имя контроллера - - - Please choose a unique controller name - Пожалуйста, выберите неповторяющееся имя для контроллера - - - MusE: Cannot add common controller - MusE: Невозможно добавить обычный контроллер - - - A controller named - Контроллер названый - - - already exists. - уже существует. - - - A controller number - Номер контроллера - - - MusE - MusE - - - The current Instrument contains unsaved data -Save Current Instrument? - Текущий Инструмент содержит несохраненные данные -Сохранить этот Инструмент? - - - &Save - &Сохранить - - - &Nosave - &Не сохранять - - - &Abort - &Отмена - - - - EditInstrumentBase - - - MusE: Instrument Editor - Редактор инструментов - - - Patches - Патчи - - - Patch Name: - Название патча - - - - High Bank: - H-банк: - - - - Low Bank: - L-банк: - - - - Program: - Программа: - - - d.c. - dont care - не важно - - - d.c. - не важно - - - Patch/Group - Патч/Группа - - - - - - &Delete - &Удалить - - - - - - Alt+D - Alt+D - - - &New Patch - &Новый Патч - - - Alt+N - Alt+N - - - New Group - Новая Группа - - - - Drum - Ударные - - - - GM - GM - - - - GS - GS - - - - XG - XG - - - Controller - Контроллер - - - Predefined Controller: - Предустановленный контроллер: - - - - This is a list of commonly used midi controllers. -Note that in MusE pitch and program changes are -handled like normal controllers. - Это список общеупотребительных midi-контроллеров. -Обратите внимание, что управление звуковысотностью(pitch) и изменением программ(program change) в MusE, -такое же, как и управление обычными контроллерами. - - - - - - Properties - Свойства - - - Name - Имя - - - Type - Тип - - - - Control7 - Контрл7 - - - - Control14 - Контрл14 - - - - RPN - RPN - - - - NRPN - NRPN - - - - Pitch - Высота тона - - - - Program - Программа - - - - - H-Ctrl - H-Ктрл - - - Midi Controller Number High Byte - Старший байт midi-контроллера - - - - - L-Ctrl - L-Ктрл - - - Midi Controller Number Low Byte - Младший байт midi-контроллера - - - Range - Диапазон - - - - Min - Миним - - - - Max - Макс - - - Default - По умолчанию - - - - Name - Имя - - - - Type - Тип - - - Min Val - Мин Знач - - - Max Val - Макс Знач - - - list of defined controllers - список назначенных контроллеров - - - This is the MusE list of defined controllers. - Это список назначенных контроллеров для MusE - - - SysEx - SysEx - - - Initialization - Инициализация - - - Panic - Паника - - - - Hex Entry: - Шестнадцатиричный Ввод: - - - - &File - &Файл - - - - Tools - Инструменты - - - - New - Новый - - - - &New - &Новый - - - - Ctrl+N - Ctrl+N - - - - Open - Открыть - - - - &Open... - &Открыть... - - - - Ctrl+O - Ctrl+O - - - - Save - Сохранить - - - - &Save - &Сохранить - - - - Ctrl+S - Ctrl+S - - - - Save As - Сохранить как - - - - Save &As... - Сохранить &как... - - - - Exit - Выйти - - - - E&xit - В&ыйти - - - - Instrument Name: - Имя Инструмента: - - - - Selected instrument name. - Имя выбранного инструмента. - - - - List of defined instruments. - Список назначенных инструментов. - - - - Pa&tches - Па&тчи - - - - List of groups and patches. - Список групп и патчей. - - - - Group/Patch - Группа/Патч - - - - - - Name: - Имя: - - - - - Group or patch name - Группа или имя патча - - - - Patch high bank number - Номер H-банка патча - - - - Patch high bank number. --- means don't care. - Номер H-банка патча. --- не важно какой. - - - - --- - dont care - --- - -всё равно - - - - Patch low bank number - Номер L-банка патча - - - - Patch low bank number. --- means don't care. - Номер L-банка патча. --- не важно какой. - - - - --- - --- - - - - - Patch program number - Програмный номер патча - - - - Drum patch - Патч ударных - - - - If set, the patch is available only for drum channels. - Если установлено, то этот патч может использоваться только в каналах ударных. - - - - GM patch - GM патч - - - - If set, the patch is available in a 'GM' or 'NO' midi song type. - Если установлено, то этот патч может использоваться только в типах midi-проектов "GM" или "НЕТ". - - - - GS patch - GS патч - - - - If set, the patch is available in a 'GS' or 'NO' midi song type. - Если установлено, то этот патч может использоваться только в типах midi-проектов "GS" или "НЕТ". - - - - XG patch - XG патч - - - - If set, the patch is available in an 'XG' or 'NO' midi song type. - Если установлено, то этот патч может использоваться только в типах midi-проектов "XG" или "НЕТ". - - - - Delete group or patch - Удалить группу или патч - - - - New patch - Новый патч - - - - New &Patch - Новый &Патч - - - - Alt+P - Alt+P - - - - New group - Новая группа - - - - New &Group - Новая &Группа - - - - Alt+G - Alt+G - - - - Contro&ller - Контро&ллер - - - - Common: - Обычный: - - - - List of defined controllers - Список назначенных контроллеров - - - - List of defined controllers. - Список назначенных контроллеров. - - - - Min - Мин - - - - Max - Макс - - - - Def - Def - - - - Midi controller name - Имя midi-контроллера - - - - Type: - Тип: - - - - - Midi controller type - Тип midi-контроллера - - - - RPN14 - RPN14 - - - - NRPN14 - NRPN14 - - - - - Midi controller number high byte - Старший байт midi-контроллера - - - - Midi controller number low byte (* means drum controller) - Младший байт midi-контроллера (* означает контроллер ударных) - - - - Midi controller number low byte. -If low byte is * then the controller is a - 'drum controller'. For drum tracks and - GS/XG type songs and instruments. -Allows controllers for each instrument in - Muse's drum map. The low byte will be - replaced by the 'ANote' in the drum map. -Examples: The GS and XG instruments' - Drum controllers. - Младший байт midi-контроллера. -Если младший байт "*", тогда контроллер является -"контроллером ударных". Для треков ударных и -GS/XG типов проектов и инструментов. -Разрешает контроллеры для каждого инструмента в -карте ударных MusE. Младший байт будет -заменен "ANote" в карте ударных. -Примеры: Контроллеры ударных для GS и XG -инструментов. - - - - * - wild card - * - -универсальный шаблон - - - - Range: - Диапазон: - - - - Minimum value. If negative, auto-translate. - Минимальное значение. Если отрицательное, то авто-перевод. - - - - Minimum value. If the minimum value - is negative, the range will automatically - be translated to a positive range. - -Useful for controllers which should be - displayed with zero bias. For example, -'Pan': Minimum: -64 Maximum: 63 -True range: Min: 0 Max: 127 (bias = 64) -'CoarseTuning': Min: -24 Max: 23 -True range: Min: 40 Max: 87 (bias = 64) - -Bias is determined from controller type: -7-bit Controller7 / RPN: Bias = 64 -14-bit Controller14 / RPN14: Bias = 8192 - -Type 'Pitch' is the exception. It is biased - at zero, even with a negative minimum: -'Pitch': Min: -8192 Max: 8191 -True range: Min: -8192 Max: 8191 (bias 0) - Минимальное значение. Если минимальное -значение отрицательное, то диапазон -автоматически переводится в положительный. - -Полезно для контроллеров отображаемых -с нулевым смещением. Например, "Пан": -Минимум: -64 Максимум: 63 Реальный диапазон: -Мин: 0 Макс: 127 (смещение = 64) -"Грубая настройка": Мин: -24 Макс: 23 -Реальный диапазон: Мин: 40 Макс: 87 (смещение = 64) - -Контроллер "Высота тона" является исключением. -Его смещение равно нулю, даже при отрицательных -значениях. "Высота тона" Мин: -8192 Макс: 8191 -Реальный диапазон: Мин: -8192 Макс:8191 (смещение = 0) - - - - - Maximum value - Максимальное значение - - - - Default: - По умолчанию: - - - - L-Bank - L-банк - - - - - - - - off - выкл - - - - Progr. - Прогр. - - - - ??? - ??? - - - - H-Bank - H-банк - - - - Default value. Off: No default. - Значение по умолчанию. Выкл: Нет значения по умолчанию. - - - - Default (initial) value. Off means no default. - -If a default value is chosen, the value will be sent - to the controller when the controller is added to - the song (in piano roll or event editor). When - the song is re-loaded, the value is sent again. -Otherwise the controller remains at its last value. -Controllers are also automatically added to a - song upon reception of a midi controller event. - -Caution! Watch out for controllers such as - 'Sustain' and 'ResetAllController' with default - values. You should probably turn 'off' their - default (in piano roll or drum edit, and - instrument editor). - Значение по умолчанию (начальное). Выкл означает, -что значения по умолчанию нет. - -Если выбрано "по умолчанию", то значение будет -послано контроллеру, когда он будет добавлен в проект -(в пианоролле или редакторе списка). При перезагрузке -проекта значение будет послано снова. Или же будет -применено последнее значение контроллера. Контроллеры -также автоматически добавляются в проект при получении -midi-сообщений о контроллерах. - -Внимание! Будте осторожны с такими контроллерами как -"Sustain" и "ResetAllController". Вероятнее всего, что вы назначите -"выкл" для этих контроллеров (в пианоролле, редакторе ударных -или редакторе инструментов). - - - - off - dont care - выкл - - - - Add common controller - Добавить обычный контроллер - - - - &Add - &Добавить - - - - Alt+A - Alt+A - - - - Delete controller - Удалить контроллер - - - - Create a new controller - Добавить новый контроллер - - - - New &Controller - Новый &Контроллер - - - - Alt+C - Alt+C - - - - Null Param Hi: - Нулевой Парам Ст: - - - - Null parameter number High byte - Старший байт нулевого параметра - - - - - If set, these 'null' parameter numbers will - be sent after each RPN/NRPN event. -This prevents subsequent 'data' events - from corrupting the RPN/NRPN controller. -Typically, set to 127/127, or an unused - RPN/NRPN controller number. - Если установлено, то это значение "нулевого" -параметра будет послано после каждого -события RPN/NRPN. Это предотвращает искажение -"данных" последующих событий контроллером RPN/NRPN. -Обычно, устанавливается 127/127, или "не использовать". - - - - Lo: - Мл: - - - - Null parameter number Low byte - Младший байт нулевого параметра - - - - S&ysEx - S&ysEx - - - - SysEx List: - Список SysEx: - - - - New SysE&x - Новый SysE&x - - - - Alt+X - Alt+X - - - - &Help - &Помощь - - - - - new item - новый пункт - - - - - What's this? - Что это? - - - - EditMetaDialog - - MusE: Enter Meta Event - MusE: Ввести метасобытие - - - Time Position - Позиция по времени - - - Meta Type - Метатип - - - Enter Hex - Ввести Hex - - - - EditMetaDialogBase - - MusE: Enter Meta Event - MusE: Ввести метасобытие - - - OK - ОК - - - Cancel - Отмена - - - TextLabel1 - ТекстоваяМетка1 - - - Time Position: - Позиция по времени: - - - Meta Type: - Метатип: - - - Enter Hex - Ввести Hex - - - - EditNoteDialogBase - - - MusE: Enter Note - MusE: Ввести ноту - - - - OK - ОК - - - - Cancel - Отмена - - - - Length: - Длина: - - - - Time Position: - Позиция по времени: - - - - Pitch: - Высота тона: - - - - Velocity On: - Скорость наж: - - - - Velocity Off: - Скорость снятия: - - - - EditPAfterDialog - - MusE: Enter Poly Aftertouch - MusE: Ввести полиф. посленажатие - - - Time Position - Позиция по времени - - - Pitch - Высота тона - - - Pressure - Давление - - - - EditSysexDialogBase - - - MusE: Enter SysEx - MusE: Ввести SysEx - - - - TimePosition: - Время: - - - - Comment: - Комментарий: - - - - OK - ОК - - - - Cancel - Отмена - - - - EditToolBar - - Edit Tools - Инструменты редактирования - - - - EffectRack - - effect rack - рэк эффектов - - - move up - сдвинуть выше - - - move down - сдвинуть ниже - - - remove - удалить - - - bypass - обойти - - - show gui - показать ГИП - - - new - новый - - - change - изменить - - - Replace effect - Заменить эффект - - - Do you really want to replace the effect %1? - Вы действительно хотите заменить эффект %1? - - - &Yes - &Да - - - &No - &Нет - - - show native gui - показать ГИП - - - save preset - сохранить пресет - - - MusE: Save Preset - MusE: Сохранить Пресет - - - - FLUIDGui - - - FLUID: open Soundfile - FLUID: открыть звуковой файл - - - - FLUIDGuiBase - - - Form1 - Форма1 - - - - Soundfont - Soundfont - - - - Load - Загрузить - - - - FLUIDSynthGuiBase - - - FLUID Synth - FLUID Synth - - - - Gain - Усиление - - - - - Level - Уровень - - - - Width - Ширина - - - - Damping - Демпфирование - - - - Room Size - Размер помещения - - - - Reverb - Реверб - - - - Delete - Удалить - - - - Load - Загрузить - - - - Sine - Синусоида - - - - Triangle - Треугольная - - - - Type - Тип - - - - Number - Число - - - - Speed - Скорость - - - - Depth - Глубина - - - - Chorus - Хорус - - - - CHANNEL SETUP - НАСТРОЙКА КАНАЛА - - - - ID - ID - - - - Fontname - Назв. SF-банка - - - - Chnl - Канал - - - - Soundfont - Банк - - - - LOADED SOUNDFONTS - ЗАГРУЖЕННЫЕ БАНКИ - - - - Dump Info - Дамп Инфо - - - - Drum Chnl - Канал ударных - - - - FileDialogButtons - - Form1 - Форма1 - - - - Global - Общий - - - - User - Пользователь - - - - - Project - Проект - - - Load: - Загрузить: - - - Songdata + -Cofiguration - Данные проекта+ -Конфигурация - - - - only -Songdata - Только -Данные проекта - - - - fdialogbuttons - КнопкиДиалогаФайлов - - - - Songdata + -Configuration - ДанныеПроекта+ -Конфигурация - - - - FluidSynthGui - - - Choose soundfont - Выберите soundfont - - - - FontSel - - Size: - Размер: - - - - GateTimeBase - - MusE: Modify Gate Time - MusE: Изменить время звучания - - - - Range - Диапазон - - - - All Events - Все события - - - - Selected Events - Выбранные события - - - - Looped Events - События в цикле - - - Selected & Looped - Выбранные и в цикле - - - - MusE: Modify Note Length - - - - - Selected Looped - - - - - Values - Значения - - - - Rate: - Величина: - - - - Offset: - Смещение: - - - - % - % - - - - lenNew = (lenOld * rate) + offset - - - - - OK - ОК - - - - Cancel - Отмена - - - - GlobalSettingsDialogBase - - - MusE: Global Settings - MusE: Общие настройки - - - - Use project save dialog - - - - - Some popup menus stay open (else hold Ctrl) - - - - - Allows some popup menus to stay open. -Otherwise, hold Ctrl to keep them open. - - - - - In some areas, the middle mouse button decreases -values, while the right button increases. Users without a -middle mouse button can select this option to make the -left button behave like the middle button in such areas. - - - - - Use left mouse button for decreasing values - - - - - Shift + Right click sets left range marker - - - - - Allow adding hidden tracks in track list menu - - - - - Unhide tracks when adding hidden tracks - - - - - GUI Style - - - - - MDI-subwindowness and sharing menus - - - - - Presets: - - - - - traditional MusE SDI - - - - - Cakewalk-like MDI - - - - - Borland-/Mac-like MDI - - - - - &Apply - &Применить - - - - &Ok - &ОК - - - - &Cancel - &Отмена - - - - Audio - Аудио - - - - Mixer - Микшер - - - - - dB - Дб - - - - min. Meter Value - мин. значение индикатора - - - min.Slider Val - мин. значение ползунка - - - - Midi - Midi - - - - Ticks - Тактовые импульсы (тики) - - - - - - 1024 - 1024 - - - - - - 2048 - 2048 - - - - 4096 - 4096 - - - 8172 - 8172 - - - - Displayed Resolution -(Ticks/Quarternote) - Отображаемое разрешение -(Тиков/на четверть) - - - - - 48 - 48 - - - - - 96 - 96 - - - - - 192 - 192 - - - - - 384 - 384 - - - - - 768 - 768 - - - - - 1536 - 1536 - - - - - 3072 - 3072 - - - - - 6144 - 6144 - - - - - 12288 - 12288 - - - - RTC Resolution -(Ticks/Sec) - RTC-разрешение -(тиков/в сек) - - - GUI - ГИП - - - Help Browser: - В чём читать справку: - - - - GUI Refresh Rate - Частота обновления ГИП - - - - /sec - /сек - - - - Application - Приложение - - - - Start Muse - Запустить Muse - - - - start with last song - запустить с последним проектом - - - - start with song - запустить с проектом - - - - start song: - запустить проект: - - - - Views - Виды - - - - - - - - y-pos - y-поз. - - - - - - - show - показать - - - - - - - - x-pos - x-поз. - - - - - - - height - высота - - - - - - - width - ширина - - - - Big Time - Хронометр - - - Arranger - Компоновщик - - - - Transport - Транспорт - - - - - - - - Cur - Тек - - - - - - - - set current values - установить текущее значение - - - - start with template: default.med - начать с шаблона: default.med - - - - show splash screen - показывать заставку - - - - External Waveditor - Внешний аудиоредактор - - - - External Waveditor command - Команда вызова внешнего аудиоредактора - - - - Mixer A - Микшер А - - - - Mixer B - Микшер В - - - - show "Did you know?" dialog - показывать окно "Знаете ли вы?" - - - - Start song - Запустить проект - - - - min. Slider Val - мин. значение слайдера - - - Use Jack freewheel mode if possible. -(Speeds up bounce operations). - Использовать Jack freewheel mode, если возможно. -(Ускоряет операции сведения). - - - - Enable denormal protection - Разрешить защиту от нарушений режима - - - - Enable output limiter - Разрешить ограничитель выхода - - - Enable in-place processing for VST plugins. -(Requires restart.) - Разрешить быструю обработку для VST-плагинов. -(Требуется перезагрузка.) - - - Turn this off if VST Ladspa effect rack plugins do not work or feedback loudly, even if they are supposed to be in-place capable. - Отключите, если VST Ladspa-плагины в рэке эффектов не работают или слишком громко звучат, даже если они, предположительно, могут быть быстро обработаны. - - - - Note: External editor opened from the internal editor. - Примечание: Внешний редактор открывается из внутреннего редактора. - - - - Dummy Audio Driver (settings require restart) - Фиктивный Аудио Драйвер (требует перезагрузки) - - - Preferred sample rate - Предпочитаемый sample rate (скорость измерения аудиосэмплов) - - - Actual rate used depends on limitations of - timer used. If a high rate timer is available, - short periods can be used with high sample rates. -Period affects midi playback resolution. -Shorter periods are desirable. - Реальный sample rate зависит от ограничений таймера, -который используется. Если используется таймер с -высоким sample rate, то могут применяться более короткие -периоды (отсчеты). Периоды (отсчеты) влияют на midi-воспроизведение. -Желательны более короткие периоды. - - - - Hz - Гц - - - Actual rate used now (dummy or not): - Реальный "sample rate" (фиктивный или нет): - - - --- - --- - - - - Period size (Frames per period): - Размер периода (Фреймов на период): - - - - - 16 - 16 - - - - Project directory - - - - - Projects: - - - - - ... - ... - - - - Main Window - - - - - Try to use Jack Freewheel - - - - - Speeds bounce operations - - - - - Use Jack Freewheel mode if possible. -This dramatically speeds bounce operations. - - - - - VST in-place - - - - - Enable VST in-place processing (restart required) - - - - - Enable VST in-place processing. Turn this off if - VST Ladspa effect rack plugins do not work or - feedback loudly, even if they are supposed to - be in-place capable. Setting requires a restart. - - - - - Minimum control period - - - - - Minimum audio controller process period (samples). - - - - - - Minimum audio controller process period (samples). -Adjusts responsiveness of audio controls and - controller graphs. Set a low value for fast, smooth - control. If it causes performance problems, set a - higher value. - - - - - 1 - 1 - - - - 2 - 2 - - - - 4 - 4 - - - - 8 - 8 - - - - - 32 - 32 - - - - - 64 - 64 - - - - - 128 - 128 - - - - - 256 - 256 - - - - - 512 - 512 - - - - Sample rate - - - - - Shorter periods give better midi playback resolution. - - - - - 8192 - 8192 - - - - 16384 - 16384 - - - - 32768 - 32768 - - - - Midi Resolution -(Ticks/Quarternote) - Midi-Разрешение -(Тиков/На четвертную ноту) - - - - GUI Behaviour - - - - - Use old-style stop shortcut: - Использовать старую "горячую клавишу" для остановки: - - - - Move single armed track with selection - Назначать "для записи" выбранный трек - - - - On Launch - - - - - Behavior - - - - - LMaster - - MusE: Mastertrack - MusE: Мастер-трек - - - Tempo - Темп - - - Timesig - Размер - - - new tempo - новый темп - - - new signature - новый размер - - - Meter - Индикатор - - - Time - Время - - - Type - Тип - - - Value - Значение - - - &Edit - &Правка - - - Insert Tempo - Вставить темп - - - Insert Signature - Вставить размер - - - Edit Positon - Изменить позицию - - - Edit Value - Изменить значение - - - Delete Event - Удалить событие - - - panic - паника - - - transport - транспорт - - - Reposition of the initial tempo and signature events is not allowed - Изменение начального темпа и размера запрещено - - - MusE: List Editor - MusE: Редактор списка событий - - - Input error, conversion not OK or value out of range - Ошибка ввода, неверная конверсия или значение вне диапазона - - - Reposition of tempo and signature events to start position is not allowed! - Изменение темпа и размера запрещено - - - Master tools - Основные инструменты - - - Edit tools - Инструменты редактирования - - - - LegatoBase - - - MusE: Legato - - - - - Range - Диапазон - - - - All Events - - - - - Selected Events - - - - - Looped Events - - - - - Selected Looped - - - - - Settings - Настройки - - - - ticks - - - - - Minimum Length - - - - - Allow shortening notes - - - - - OK - - - - - Cancel - Отмена - - - - ListEdit - - Insert Note - Вставить ноту - - - insert Note - вставить Ноту - - - Insert SysEx - Вставить SysEx - - - insert SysEx - вставить SysEx - - - Insert Ctrl - Вставить кнтрл - - - insert Ctrl - Вставить кнтрл - - - Insert Meta - Вставить Meta - - - insert Meta - вставить Meta - - - Insert Channel Aftertouch - Вставить Channel Aftertouch - - - insert Channel Aftertouch - вставить Channel Aftertouch - - - Insert Key Aftertouch - Вставить Key Aftertouch - - - insert Poly Aftertouch - вставить Poly Aftertouch - - - &Edit - &Правка - - - Cut - Вырезать - - - Copy - Скопировать - - - Paste - Вставить - - - Delete Events - Удалить события - - - List Tools - Показать список инструментов - - - Insert Tools - Вставить инструменты - - - Tick - Тик - - - Bar - Такт - - - Typ - Тип - - - Ch - Кан - - - Val A - Знач. А - - - Val B - Знач. B - - - Val C - Знач. С - - - Len - Дл - - - Comment - Комментарий - - - List tools - Инструменты редактора списка - - - Insert tools - Инструменты для вставки - - - panic - паника - - - transport - транспорт - - - Type - Тип - - - - MITTransposeBase - - - MusE: Midi Input Plugin: Transpose - MusE: Midi-плагин на входе: Транспонирование - - - - On - Вкл - - - - TriggerKey - Кнопка запуска - - - - Transpose: - Транспонировать: - - - - +0 - +0 - - - - MPConfig - - none - ничего - - - Port - Порт - - - GUI - ГИП - - - Instrument - Инструмент - - - Device Name - Имя устройства - - - State - Состояние - - - unknown - неизвестно - - - I - Вх - - - O - Вых - - - MusE: bad device name - MusE: неверное имя устройства - - - please choose a unique device name - пожалуйста выберите неповторяющееся имя для устройства - - - in - в - - - out - вне (из) - - - Show first aliases - Показать первые псевдонимы - - - Show second aliases - Показать вторые псевдонимы - - - Create - Создать - - - device - устройство - - - Port Number - Номер порта - - - Enable gui - Разрешить ГИП - - - Enable reading - Разрешить чтение - - - Enable writing - Разрешить запись - - - Port instrument - Инструмент, назначенный на порт - - - Midi device name. Click to edit (Jack) - Имя midi-устройства. Щелкните для редактирования (Jack) - - - Connections from Jack Midi outputs - Соединения от midi-выходов Jack - - - Connections to Jack Midi inputs - Соединения к midi-входам Jack - - - Connect these to new midi tracks - Подсоединить к новым midi-трекам - - - Connect new midi tracks to this (first listed only) - Подсоединять новые midi-треки сюда (только к первому в списке) - - - Device state - Состояние устройства - - - Enable gui for device - Разрешить ГИП для устройства - - - Enable reading from device - Разрешить чтение с устройства - - - Enable writing to device - Разрешить запись на устройство - - - Name of the midi device associated with this port number. Click to edit Jack midi name. - Имя midi-устройства связано с номером порта "Jack". Щелкните, чтобы редактировать его. - - - Instrument connected to port - Инструмент, подсоединённый к порту - - - Connections from Jack Midi output ports - Соединения от выходных midi-портов Jack - - - Connections to Jack Midi input ports - Соединения с входными midi-портами Jack - - - Connect these channels, on this port, to new midi tracks. -Example: - 1 2 3 channel 1 2 and 3 - 1-3 same - 1-3 5 channel 1 2 3 and 5 - all all channels - none no channels - Соединить каналы этого порта с новыми midi-треками. -Пример: -1 2 3 каналы 1 2 и 3 -1-3 то же самое -1-3 5 каналы 1 2 3 и 5 -все все каналы -ничего нет каналов - - - Connect new midi tracks to these channels, on this port. -See default in channels. -NOTE: Currently only one output port and channel supported (first found) - Соединить новые midi-треки с этими каналами данного порта. -См. вх. каналы по умолчанию -Примечание: Пока поддерживается только один порт и канал -(первый найденный) - - - State: result of opening the device - Состояние: результат открытия устройства - - - In routes - Маршруты входа - - - Out routes - Маршруты выхода - - - Def in ch - вх кан по ум - - - Def out ch - вых кан по ум - - - <unknown> - <неизвестно> - - - <none> - <ничего> - - - - MRConfigBase - - - MusE: Midi Input Plugin: Remote Control - MusE: Входной MIDI-плагин: Дистанц. управление - - - - Activate - Активировать - - - - On - Вкл - - - - Actions - Действия - - - - Stop - Остановить - - - - Record - Записать - - - - Goto Left Mark - Перейти к левому маркеру - - - - Play - Воспроизвести - - - - Insert rest (step rec) - - - - - MTScale - - bar scale - шкала тактов - - - - MarkerView - - MusE: Marker - MusE: Маркер - - - add marker - добавить маркер - - - Add Marker - Добавить Маркер - - - delete marker - удалить маркер - - - Delete Marker - Удалить Маркер - - - &File - &Файл - - - &Edit - &Правка - - - panic - паника - - - transport - транспорт - - - Bar:Beat:Tick - Такт:Доля:Тик - - - Hr:Mn:Sc:Fr:Sf - Чс:Мин:Сек:Фрм:Субфрм - - - Lock - Закрыть - - - Text - Текст - - - Marker Properties - Свойства маркера - - - marker-tools - инструменты маркера - - - edit tools - инструменты редактирования - - - - MasterEdit - - MusE: Mastertrack - MusE: Мастер-трек - - - edit tools - инструменты редактирования - - - EnableMaster - Разрешить(Мастер) - - - Info - Инфо - - - Cursor - Курсор - - - Off - выкл - - - Snap - Привязка - - - time at cursor position - время в позиции курсора - - - panic - паника - - - transport - транспорт - - - tempo at cursor position - темп в позиции курсора - - - CurPos - КурсПоз - - - tempo at current position - темп в текущей позиции - - - time signature at current position - размер в текущей позиции - - - Enable - Разрешить - - - Enable usage of master track - Разрешить использование мастер-трека - - - Master tools - Основные инструменты - - - Enable master - Разрешить мастер(а) - - - - MdiSettingsBase - - - Form - - - - - GroupBox - - - - - MDI subwin - - - - - Shares menu when subwin - - - - - Shares menu when free - - - - - MetronomeConfigBase - - - MusE: Metronome Config - MusE: Настройка метронома - - - - Metronome - Метроном - - - - Audio Beep - Звуковой сигнал - - - - MIDI Click - MIDI-щелчок - - - - Midi Channel - MIDI-канал - - - - Measure Note - Нота на первую долю такта - - - - Measure Velocity - Громкость первой доли такта - - - - Beat Velocity - Громкость слабых долей такта - - - - Beat Note - Нота на слабые доли такта - - - - Midi Port - MIDI-порт - - - - Precount - Предварительный отсчет - - - - enable - разрешить - - - - Bars - Такт(ов) - - - - From Mastertrack - Из Мастер-трека - - - - / - / - - - - Signature - Размер - - - - Prerecord - Предзапись - - - - Preroll - Предвоспроизведение - - - - &Apply - &Применить - - - - &OK - &ОК - - - - &Cancel - &Отмена - - - - Choose outputs... - Выбрать выходы... - - - - 50 - 50 - - - - % Audio volume - % Громкость аудио - - - - Hint: Enable metronome in Transportpanel - Подсказка: Активируйте метроном на Транспортной панели - - - - Alt+A - Alt+A - - - - Alt+O - Alt+O - - - - Alt+C - Alt+C - - - - MidiController - - Velocity - Скорость нажатия ноты - - - - MidiControllerEditDialogBase - - MusE: Define Midi Controller - MusE: Назначить MIDI-контроллер - - - Name - Имя - - - Type - Тип - - - H-Ctrl - H-Ctrl - - - L-Ctrl - L-Ctrl - - - Min Val - Мин знач - - - Max Val - Макс знач - - - list of defined controllers - Список назначенных контроллеров - - - This is the MusE list of defined controllers. - Это список назначенных в MusE контроллеров. - - - Properties - Свойства - - - Name - Имя - - - Max Value - Макс значение - - - Min Value - Мин значение - - - Control7 - Контрл7 - - - Control14 - Контрл14 - - - RPN - RPN - - - NRPN - NRPN - - - Type - Тип - - - create new entry - Создать новую запись - - - pressing the New button you create a new entry -in the MusE list of defined controllers - По нажатию кнопки "Новая" создаётся новая -запись в список назначенных в MusE контроллеров - - - &Delete - &Удалить - - - delete selected entry - Удалить выделенную запись - - - &OK - &OK - - - &Cancel - &Отмена - - - &Add - &Добавить - - - Alt+A - Alt+A - - - Predefined Controller: - Уже назначенный контроллер: - - - Managed Controller for Port - Настроенный контроллер для порта - - - Channel - Канал - - - This is a list of commonly used midi controllers. -Note that in MusE pitch and program changes are -handled like normal controllers. - Это список общеупотребительных midi-контроллеров. -Обратите внимание, что управление высотой тона(pitch) и изменением программ(program change) в MusE, -такое же, как и управление обычными контроллерами. - - - RPN14 - RPN14 - - - NRPN14 - NRPN14 - - - Pitch - Высота тона - - - Program - Программа - - - Midi Controller Number High Byte - Значение Старшего Байта Midi-контроллера - - - Midi Controller Number Low Byte - Значение Младшего Байта Midi-контроллера - - - Range - Диапазон - - - - MidiFilterConfigBase - - - MusE: Midi Input Filter - MusE: Фильтр входящих Midi-событий - - - - Record Filter - Фильтр записи - - - - - Note On - Нажатие ноты - - - - - Poly Pressure - Полифоническое давление - - - - - Controller - Контроллер - - - - - Program Change - Смена программы - - - - - After Touch - Посленажатие - - - - - Pitch Bend - Изменение высоты тона - - - - - Sysex - SysEx - - - - Thru Filter - Фильтр сквозного канала - - - - Controller Filter - Фильтр контроллеров - - - - Channel Filter - Фильтр каналов - - - - 14 - 14 - - - - 10 - 10 - - - - 6 - 6 - - - - 12 - 12 - - - - 4 - 4 - - - - 2 - 2 - - - - 9 - 9 - - - - 8 - 8 - - - - 3 - 3 - - - - 13 - 13 - - - - 15 - 15 - - - - 16 - 16 - - - - 7 - 7 - - - - 11 - 11 - - - - 5 - 5 - - - - 1 - 1 - - - - MidiInputTransformDialog - - New - Новый - - - - MidiInputTransformDialogBase - - - MusE: Midi Input Transformator - MusE: Преобразователь входящих MIDI-сообщений - - - - Filter - Фильтр - - - - All - Все - - - - - - - - Equal - Равно - - - - - - - - Unequal - Не равно - - - - Note - Нота - - - - - Poly Pressure - Полифоническое давление - - - - - Control Change - Смена контроллера - - - - - Aftertouch - Посленажатие - - - - - Pitch Bend - Изменение высоты тона - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - Value 2 - Значение 2 - - - - - - - - Value 1 - Значение 1 - - - - - Event Type - Тип события - - - - - - - Ignore - Игнорировать - - - - - - - Higher - Выше - - - - - - - Lower - Ниже - - - - - - - Inside - Внутри - - - - - - - Outside - Вне - - - - - Channel - Канал - - - - - Port - Порт - - - - Processing - Обработка - - - - - - - - Keep - Сохранить - - - - - - - - Fix - Исправить - - - - - - - Plus - Плюс - - - - - - - Minus - Минус - - - - - - - Multiply - Умножить - - - - - - - Divide - Разделить - - - - - - - Invert - Инвертировать - - - - ScaleMap - Шкала - - - - Flip - Обратить - - - - - - - Dyn - Дин - - - - - - - Random - Случайно - - - - Modules - Модули - - - - 1 - 1 - - - - 2 - 2 - - - - 3 - 3 - - - - 4 - 4 - - - - enable modul 1 - разрешить модуль 1 - - - - enable modul 2 - разрешить модуль 2 - - - - enable modul 3 - разрешить модуль 3 - - - - enable modul 4 - разрешить модуль 4 - - - - Preset - Пресет - - - - Name: - Имя: - - - - Comment: - Комментарий: - - - - Function - Функция - - - - &New - &Новый - - - - create new preset - создать новый пресет - - - - &Delete - &Удалить - - - - delete preset - удалить пресет - - - - &Dismiss - &Отклонить - - - - PresetList - Список пресетов - - - - MidiPortRouteBase - - MusE: Midi Port Routing - MusE: маршруты MIDI-портов - - - Port 2 - Порт 2 - - - Output - Выход - - - Input - Вход - - - - MidiStrip - - VariationSend - Вариационный посыл - - - Var - Вар - - - ReverbSend - Посыл Реверберации - - - Rev - Ревер - - - ChorusSend - Посыл Хоруса - - - Cho - Хорус - - - off - выкл - - - dB - Дб - - - Pan/Balance - Пан/Баланс - - - Pan - Пан - - - record - запись - - - mute - заглушить - - - pre fader listening - прослушивание пре федера - - - Route - Маршрут - - - set routing - настроить маршрут - - - Off - Выкл - - - Read - Читать - - - Touch - По касанию - - - Write - Писать - - - automation type - тип автоматизации - - - double click on/off - двойной щелчок вкл/выкл - - - solo mode - режим соло - - - iR - вх - - - input routing - маршрут входа - - - oR - вых - - - output routing - маршрут выхода - - - - MidiSyncConfig - - Port Number - Номер порта - - - Name of the midi device associated with this port number - Имя MIDI-устройства, ассоциированного с номером этого порта - - - Midi clock input detected - Обнаружен вход midi-clock - - - Midi tick input detected - Обнаружен вход midi-тика - - - Midi real time input detected - Обнаружен midi-вход реального времени - - - MMC input detected - Обнаружен вход MMC - - - MTC input detected - Обнаружен вход MTC - - - Detected SMPTE format - Обнаруженые SMPTE форматы - - - Receive id number. 127 = Global. Double click to edit. - Получить id номер. 127 = Глобально. Двойной щелчок для редактирования. - - - Accept midi clock input - Принять вход Midi-clock - - - Accept midi real time input - Принять midi-вход реального времени - - - Accept MMC input - Принять вход MMC - - - Accept MTC input - Принять вход MTC - - - Receive start rewinds before playing - Получить перед воспроизведением сообщение о начале перемотки - - - Transmit id number. 127 = Global. Double click to edit. - Передать номер id. 127 = Общий. Двойной щелчок для редактирования. - - - Send midi clock output - Послать выход midi-clock - - - Send midi realtime output - Послать midi-выход реального времени - - - Send MMC output - Послать выход MMC - - - Send MTC output - Послать выход MTC - - - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - Обнаружен вход midi-clock. -Фактически используемый -текущий порт - красный. -Щелкните, чтобы принудительно -использовать порт. - - - Midi realtime input detected, including - start/stop/continue, and song position. - Обнаружен midi-вход реального времени, -с "старт/стоп/продолжить" и позицией проекта. - - - MMC input detected, including stop/play/deferred play, and locate. - Обнаружен MMC-вход c "старт/стоп/отложенное воспроизведение" - и локацией. - - - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - Обнаружен MTC-вход, с четверть-фреймовой -синхронизацией и полно-фреймовой локацией. -Фактически используемый -текущий порт - красный. -Щелкните, чтобы принудительно -сделать порт текущим. - - - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - Обнаруженые форматы SMPTE: 24fps, 25fps, 30fps с пропущенным -фреймом, или 30fps без пропущенного фрейма -Обнаруживает MTC-формат четверть и полно-фреймовый, и MMC локацию. - - - Receive id number. 127 = global receive all, even if not global. - Получить номер id. 127 =глобальный получает все, даже если не глобальный. - - - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. - Принять вход midi-clock. Только один вход используется для "clock". -Авто-получение: если разрешены два или более входов реального времени на порт, то будут использован первый обнаруженный "clock", пока он не будет потерян, затем будет использован другой. Самое лучшее, если каждый отключит свой "clock" во время остановки, чтобы MusE снова получил "clock" с другого порта. Щелкните по индикатору обнаружения, чтобы сделать по другому. - - - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. - Принять midi-вход реального времени -с "старт/стоп/продолжить" и позицией проекта. -События "Non-clock" (старт, стоп, и т. п.) принимаются -ВСЕМИ разрешенными портами. Это означает, что вы -можете иметь несколько подсоединенных мастер-устройств, -и MusE примет вход от них. - - - Accept MMC input, including stop/play/deferred play, and locate. - Принять вход MMC, с "стоп/старт/отложенным воспроизведением" и локацией. - - - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - Принять вход MTC, с четверть-фреймовой -синхронизацией и полно-фреймовой локацией. -См. колонку "rc" для получения помощи. - - - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - Когда сообщение "старт" получено, перемотать перед -воспроизведением. Примечание: может быть -так, что перемотка окажется недостаточно быстрой -для синхронизации с внешним устройством. - - - Transmit id number. 127 = global transmit to all. - Передавать номер id. 127 =общая передача для всех. - - - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - Посылать выход midi-clock. Если выбрано "Slave to External Sync", -то MusE может снова передать "clock" на любой другой выбранный порт. - - - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - Послать midi-выход реального времени, с "старт/стоп/продолжить" -и позицией проекта. Если выбрано "Slave to External Sync", -то MusE может снова передать сообщения с midi-входа реального -времени на любой другой выбранный порт. Это значит, что вы можете -иметь несколько присоединенных ведомых устройств, и MusE может снова послать сообщения реального времени на любое из них или на все. - - - Port - Порт - - - Device Name - Имя устройства - - - c - c - - - k - k - - - r - r - - - m - m - - - t - t - - - type - тип - - - rid - rid - - - rc - rc - - - rr - rr - - - rm - rm - - - rt - rt - - - rw - rw - - - tid - tid - - - tc - tc - - - tr - tr - - - tm - tm - - - tt - tt - - - MusE - MusE - - - Settings have changed -Apply sync settings? - Настройки изменились -Применить настройки синхронизации? - - - &Apply - &Применить - - - &No - &Нет - - - &Abort - &Отмена - - - <none> - <ничего> - - - - MidiSyncConfigBase - - - MusE: Midi Sync - MusE: MIDI-синхр. - - - Sync Mode - Режим синхр. - - - Master - Мастер - - - Slave - Подчиненный - - - Sync Source - Источник синхр. - - - accept MTC - принять MTC - - - accept Midi Clock - принять MIDI Clock - - - accept MMC - принять MMC - - - Id: - Id: - - - device id - id устройства - - - Port: - Порт: - - - all - все - - - midi port - midi-порт - - - Sync Gen - Генератор синхроимпульсов - - - Midi Time Code (MTC) - Midi Time Code (MTC) - - - Midi Clock - MIDI Время - - - Midi Machine Control (MMC) - Midi Machine Control (MMC) - - - - Apply - Применить - - - - Ok - ОК - - - - Cancel - Отмена - - - - MTC - MТC - - - - Type: - Тип: - - - - 24 - 24 - - - - 25 - 25 - - - - 30D - 30D - - - - 30N - 30N - - - - Offset: - Смещение: - - - - hour - часов - - - - h - ч - - - - minute - минут(а) - - - - m - м - - - - second - секунд(а) - - - - s - с - - - - frame - фреймов - - - - f - ф - - - - subframe - субфреймов - - - - Sync receiving and sending - Получение и отправление синхронизации - - - - Send and receive Jack transport - Отсылать и получать транспорт "Jack" - - - - Send and receive Jack transport information, - including stop, start and position. - Отсылать и получать информацию с транспорта -"Jack", стоп, старт, и позицию. - - - - Use Jack transport - Использовать транспорт "Jack" - - - - Make MusE the Jack transport Timebase Master - Сделать MusE Мастером Базы времени для транспорта "Jack" - - - - Make MusE the Jack transport Timebase Master. -Allows Jack to show time as - MusE Bars, Beats, and Ticks. -MusE will try to become master, but other - Jack clients can also take over later. -You can always click here again for Master. - Сделать MusE Мастером Базы времени для транспорта "Jack" -Позволяет "Jack" показывать время как в "MusE", -то есть Такты, Доли и Тики. MusE будет пытаться стать Мастером, -но другие клиенты могут позже взять верх. Вы должны каждый раз -щелкнуть здесь, чтобы MusE снова стал Мастером. - - - - Jack transport Timebase Master - Мастер Базы времени транспорта "Jack" - - - - Control MusE timing by external midi clock or MTC sync - Контролировать Muse через внешний midi-clock или MTC синхр - - - - When in slave mode, tempo is - controlled externally. -MusE can sync to midi clock, or MTC quarter frame sync. -Enabled inputs in the list will - be in effect (RMC, RMMC, RMTC). - В режиме ведомого темп контролируется -извне. MusE может синхр. с midi-clock, или с -четверть-фреймовой синхр. MTC. Разрешенные -входы в списке будут задействованы. (RMC, RMMC, RMTC). - - - - Slave to external sync - Ведомый для внешней синхронизации - - - - Send start to first clock delay - Посылать "старт" первой задержке "clock" - - - - Allows 'slow sync' devices time - to synchronize to MusE. This value is the - delay from sending start to sending - the first clock. - Позволяет "медленно синхр." устройствам -синхронизироваться с MusE. Это значение -является задержкой от посылки старта до -посылки первого "clock". - - - - ms - мс - - - - Send sync delay - Посылать синхр. задержку - - - - Note: Sync delay and MTC sync currently not fully implemeted - - - - - MidiTrackInfo - - <unknown> - <неизвестно> - - - - MidiTrackInfoBase - - - MusE: TrackInfo - MusE: ТрекИнфо - - - - output channel - канал выхода - - - all midi events are send to this output channel - все midi-события посылаются в этот канал выхода - - - Track Info - Трек Инфо - - - - - % - % - - - Track Name - Имя трека - - - - output port - порт выхода - - - - iR - вх - - - - - - - - - - off - выкл - - - change stereo position - изменить стереопозицию - - - OCh. - Вых.канал - - - ??? - ??? - - - select instrument patch - выбрать патч инструмента - - - - Transp. - Трансп. - - - Volume - Громкость - - - - Channel Info - Инфо о канале - - - - Rec: - - - - - Prog - - - - - Vol - Громк - - - - Pan - Пан - - - - Delay - Задержка - - - - H-Bank - H-банк - - - - Compr. - Компр. - - - - L-Bank - L-банк - - - Progr. - Прогр. - - - - Velocity - Скорость нажатия - - - - Length - Длина - - - input ports - порты входа - - - IChan. - Вх.канал - - - input channels - каналы входа - - - Events from all configured channels are -recorded to this track. -You can specify more than one channel for -recording: - 1 2 3 record from channel 1 2 and 3 - 1-3 same - 1-3 5 record from channel 1 2 3 and 5 - События со всех настроенных каналов -записываются в этот трек. -Вы можете указать несколько каналов для -записи: - 1 2 3 записывать с каналов 1, 2 и 3 - 1-3 то же самое - 1-3 5 записывать с каналов 1, 2, 3 и 5 - - - record: - Записать: - - - Rec - Зап - - - add settings to song - добавить настройки к проекту - - - Bank Select LSB - Выбор Банка LSB - - - Bank Select MSB - Выбор Банка MSB - - - - all midi events are sent to this output channel - все midi-события посланы на этот канал выхода - - - - Out ch - Вых кан - - - - input routing - маршрут входа - - - Inputs - Входы - - - - output routing - маршрут выхода - - - - oR - вых - - - - input detect - активность входа - - - - Input detect indicator. Detects all note on-off, controller, aftertouch, - program change, and pitchbend (but not sysex or realtime) events - on the selected channels, on the selected midi ports. - Индикатор активности входа. Обнаруживает ноты, контроллеры, смену программы, и изменение высоты тона (но не sysex или realtime) на -выделенных каналах выделенных midi-портов. - - - - W - W - - - - Midi thru - Сквозной midi-канал - - - - Pass input events through ('thru') to output. - Пропускать входные события через сквозной канал на выход. - - - - Select instrument patch - Выбрать патч инструмента - - - - <unknown> - <неизвестно> - - - Record: - Записать: - - - - Add all settings to song - Добавить все настройки к проекту - - - - All - Все - - - - Bank Select MSB. Double-click on/off. - Банк Выбрать MSB. Двойной щелчок вкл/выкл. - - - - Bank Select LSB. Double-click on/off. - Банк Выбрать LSB. Двойной щелчок вкл/выкл. - - - - Program. Double-click on/off. - Программа. Двойной щелчок вкл/выкл. - - - - Add bank + prog settings to song - Добавить банк и программу в проект - - - Prog. - Прог. - - - - Volume. Double-click on/off. - Громкость. Двойной щелчок вкл/выкл. - - - - Add vol setting to song - Добавить настройки громк. в проект - - - Vol. - Громк. - - - - - Change stereo position. Double-click on/off. - Изменить стерео позицию. Двойной щелчок вкл/выкл. - - - - Add pan setting to song - Добавить настройки панорамы к проекту - - - - MidiTransformDialogBase - - - MusE: Midi Transformator - MusE: Преобразователь MIDI-сообщений - - - - &New - &Новая - - - - &Delete - У&далить - - - - &Apply - &Применить - - - - &OK - &ОК - - - - &Cancel - &Отмена - - - - PresetList - Список пресетов - - - - Processing - Обработка - - - - - Event Type - Тип события - - - - - - - - Keep - Сохранить - - - - - - - Fix - Исправить - - - - - Note - Нота - - - - - Poly Pressure - Полифоническое нажатие - - - - - Control Change - Смена контроллера - - - - - Aftertouch - Посленажатие - - - - - Pitch Bend - Смена высоты тона - - - - - NRPN - NRPN - - - - - RPN - RPN - - - - - - - Plus - Плюс - - - - - - - Minus - Минус - - - - - - - Multiply - Умножить - - - - - - - Divide - Разделить - - - - - - Value 2 - Значение 2 - - - - - Invert - Инвертировать - - - - ScaleMap - Шкала - - - - Flip - Обратить - - - - - Dyn - Дин - - - - - Random - Случайно - - - - - - Value 1 - Значение 1 - - - - - Length - Длина - - - - Position - Позиция - - - - Filter - Фильтр - - - - All - Все - - - - - - - - Equal - Равные - - - - - - - - Unequal - Не равные - - - - - - - Ignore - Игнорировать - - - - - - - Higher - Выше - - - - - - - Lower - Ниже - - - - - - - Inside - Внутри - - - - - - - Outside - Вне - - - - Bar Range - Диапазон тактов - - - - Preset - Пресет - - - - Name: - Имя: - - - - Comment: - Комментарий: - - - - Range - Диапазон - - - - process all events - обработать все события - - - - selected tracks - выделенные треки - - - - inside loop - Внутри цикла - - - - Function - Функция - - - - Select - Выделить - - - - Quantize - Квантовать - - - - Delete - Удалить - - - - Transform - Преобразовать - - - - Insert - Вставить - - - - Copy - Скопировать - - - - Extract - Извлечь - - - - Quantize Value - Значение квантования - - - - MidiTransformerDialog - - New - Новый - - - - MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Файлы Wave (*.wav);;Все файлы (*) - - - - MixdownFileDialogBase - - - MusE: Set Mixdown Wavefile - MusE: Настроить параметры Wave-файла - - - - &OK - &OK - - - - &Cancel - О&тменить - - - - File Path - Путь к файлу - - - - Channel - Канал - - - - Stereo - Стерео - - - - Mono - Моно - - - - 5.1 - 5.1 - - - - wav,16 Bit - wav, 16 бит - - - - wav, 24 Bit - wav, 24 бита - - - - wav, 32 Bit (float) - wav, 32 бита (float) - - - - Format - Формат - - - - MoveBase - - - MusE: Move Notes - - - - - Range - Диапазон - - - - All Events - - - - - Selected Events - - - - - Looped Events - - - - - Selected Looped - - - - - Value - Значение - - - - Move by - - - - - ticks - - - - - OK - - - - - Cancel - Отмена - - - - MusE - - Import Wave File - Импортировать WAV-файл - - - UndoRedo - Отменить/Повторить - - - undo - отменить действие - - - Und&o - &Отменить действие - - - redo - повторить - - - Re&do - &Повторить - - - undo last change to song - отменить последнее изменение в проекте - - - redo last undo - повторить последнюю отмену - - - Transport - Транспорт - - - loop - цикл - - - Loop - Цикл - - - punchin - начало врезки - - - Punchin - Начало врезки - - - punchout - конец врезки - - - Punchout - Конец врезки - - - start - к началу - - - Start - К началу - - - rewind - перемотать назад - - - Rewind - Перемотать назад - - - forward - перемотать вперёд - - - Forward - Перемотать вперёд - - - stop - остановить - - - Stop - Остановить - - - play - воспроизвести - - - Play - Воспроизвести - - - record - записать - - - Record - Записать - - - panic - паника - - - Panic - Паника - - - new - новый - - - &New - &Новый - - - open - открыть - - - &Open - &Открыть - - - save - сохранить - - - &Save - &Сохранить - - - pianoroll - пианорол - - - Pianoroll - Пианоролл - - - File Buttons - Файловые кнопки - - - &File - &Файл - - - Open &Recent - Открыть &Недавние - - - Save &As - Сохранить &Как - - - Import Midifile - Импортировать MIDI-файл - - - Export Midifile - Экспортировать MIDI-файл - - - &Quit - Вы&йти - - - &Edit - &Правка - - - C&ut - &Вырезать - - - &Copy - С&копировать - - - &Paste - &Вставить - - - Add Track - Добавить трек - - - Select &All - Выделить &всё - - - &Deselect All - &Убрать выделение - - - Invert &Selection - Обратить в&ыделение - - - &Inside Loop - &Внутри цикла - - - &Outside Loop - &Вне цикла - - - All &Parts on Track - Все &партии в треке - - - Select - Выделить - - - Drums - Ударные - - - List - Список - - - Graphic - Графика - - - Mastertrack - Мастер-трек - - - Midi &Transform - &Преобразовать MIDI-сообщения - - - Modify Gate Time - Изменить время звучания - - - Modify Velocity - Изменить скорость нажима - - - Crescendo - Крещендо - - - Transpose - Транспонировать - - - Thin Out - Удалить дубли - - - Erase Event - Удалить событие - - - Note Shift - Сдвиг ноты - - - Move Clock - Передвинуть время - - - Copy Measure - Скопировать такт - - - Erase Measure - Стереть такт - - - Delete Measure - Удалить такт - - - Create Measure - Создать такт - - - Mix Track - Микшировать трек - - - Midi - Midi - - - &Structure - &Структура - - - Global Cut - Глобальное вырезание - - - Global Insert - Глобальная вставка - - - Global Split - Глобальное разделение - - - Copy Range - Скопировать диапазон - - - Cut Events - Вырезать события - - - Transport Panel - Панель транспорта - - - Bigtime Window - Окно хронометра - - - Don't Follow Song - не следовать за проектом - - - Follow Page - следовать постранично - - - Follow Continuous - следовать плавно - - - Global Settings - Общие настройки - - - Follow Song - следовать за проектом - - - Metronome - Метроном - - - Midi Sync - MIDI-синхр - - - Appearance Settings - Настройки вида - - - Midi Input Transform - Преобразование входящих MIDI-сообщений - - - Midi Input Filter - Фильтр входящих MIDI-событий - - - Midi Remote Control - Дистанционное управление MIDI - - - &Midi - &MIDI - - - Mixer - Микшер - - - Input Plugins - Плагины на входе - - - Reset Instr. - Перезагрузить Инстр. - - - Init Instr. - Запустить Инстр. - - - Local Off - откл. локальное управление - - - &Audio - &Аудио - - - Bounce to Track - Свести в трек - - - Bounce to File - Свести в файл - - - &Help - &Помощь - - - About&Qt - О &Qt - - - Unknown File Format - Неизвестный формат файла - - - MusE: load project - MusE: Открыть проект - - - MusE: Write File failed - MusE: Попытка записать файл не удалась - - - The current Project contains unsaved data -Save Current Project? - Текущий проект содержит не сохранённые данные. -Сохранить текущий проект? - - - &Abort - &Отмена - - - MusE: Save As - MusE: Сохранить как - - - MusE: Song: - MusE: Проект: - - - MusE: Import Midi - MusE: Импорт MIDI - - - MusE: Export Midi - MusE:Экспорт MIDI - - - reading midifile - - читается MIDI-файл - - - - - Nothing to edit - Нечего редактировать - - - MusE: Copy Range - MusE: Скопировать диапазон - - - not implemented - не реализовано - - - MusE: Cut Events - MusE: Вырезать события - - - MusE: Bounce to Track - MusE: Сведение в Трек - - - more than one target track selected - выбрано больше одного трека - - - wrong target track type, -select wave track as target - неверный тип трека, -выберите звуковой трек - - - no target track selected - трек не выбран - - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Текущий проект содержит не сохранённые данные. -Загрузка нового проекта приведёт к перезаписи данных текущего проекта. -Сохранить текущий проект? - - - no help found at: - справка не найдена в: - - - MusE: Open Help - MusE: Открыть справку - - - Midi Ports / Soft Synth - MIDI-порты / Прогр. синтезаторы - - - to import a audio file you have first to selecta wave track - чтобы импортировать аудио-файл, вы должны сначала выделить звуковой трек - - - Delete Selected Tracks - Удалить выделенные треки - - - View - Вид - - - Restart Audio - Перезапустить аудио - - - Automation - Автоматизация - - - Mixer Automation - Автоматизация микшера - - - Take Snapshot - Сделать снимок - - - Clear Automation Data - Удалить Данные Автоматизации - - - Settings - Настройки - - - Configure Shortcuts - Настроить горячие клавиши - - - Midi File Export - Экспорт Midi Файла - - - &Manual - &Руководство - - - &MusE Homepage - &Домашняя страница MusE - - - &Report Bug... - &Сообщить об ошибке... - - - &About MusE - &О программе MusE - - - What's &This? - Что &Это - - - Cannot read template - Не могу прочитать шаблон - - - File open error - Ошибка при открытии файла - - - File read error - Ошибка прочтения файла - - - MusE: load template - MusE: открыть шаблон - - - MusE: Bounce - MusE: Свести - - - set left/right marker for bounce range - настройте левый/правый маркеры для установки диапазона сведения - - - MusE: Bounce to File - MusE: Свести в файл - - - no output track found - выходной трек не найден - - - Add midi file to current project? - - Добавить midi файл в текущий проект? - - - - &Add to Project - &Добавить в Проект - - - &Replace - &Заменить - - - -failed: - -не удалось: - - - Import Part - Импортировать Партию - - - Marker View - Маркеры - - - &Skip - Не сохранять - - - Import part is only valid for midi tracks! - Импорт партии действителен только для midi треков! - - - MusE: load part - MusE: открыть партию - - - No track selected for import - Не выбран трек для импорта - - - Failed to start audio! - Не могу воспроизводить аудио! - - - Was not able to start audio, check if jack is running. - - Не могу воспроизводить аудио, проверте работает ли "Jack". - - - - Timeout waiting for audio to run. Check if jack is running. - - Ожидание запуска аудио. Проверте, работает ли "Jack". - - - - &Insert - &Вставить - - - Paste c&lone - Вставить к&лон - - - Paste to &track - Вставить в &трек - - - Paste clone to trac&k - Вставить клон в &трек - - - &Insert Empty Measure - &Вставить пустой такт - - - Wave - Wave - - - Song Info - Проект инфо - - - Mixer A - Микшер А - - - Mixer B - Микшер В - - - Cliplist - Список фрагментов - - - &Plugins - &Плагины - - - Edit Instrument - Редактировать Инструмент - - - Rhythm Generator - Генератор Ритма - - - Midi File Import/Export - Импорт/Экспорт midi-файла - - - &View - &Вид - - - Unknown File Format: - Несзвестный формат файла: - - - New - Новый - - - No wave tracks found - wave-треки не найдены - - - No audio output tracks found - Выходные аудио треки не найдены - - - Select one audio output track, -and one target wave track - Выберите один трек аудио выхода -и один wave-трек, как цель - - - Select one target wave track - Выделите один wave-трек, как цель (трек назначения) - - - Select one target wave track, -and one audio output track - Выберите один wave-трек, как цель, -(трек назначения) и один трек аудио выхода - - - Select one audio output track - Выделите один трек аудио выхода - - - Import part is only valid for midi and wave tracks! - Импортирование партий допустимо только для midi и wave треков! - - - out of - за - - - parts - партии - - - part - партия - - - could not be imported. -Likely the track is the wrong type. - не может быть импортирована -Возможно неверный тип трека. - - - to import an audio file you have first to selecta wave track - чтобы импортировать аудио файл, вы должны сначала выделить wave-трек - - - Import Wavefile - Импортировать wave-файл - - - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? - Samplerate этого wave-файла %1, -в то время как текущий Samplerate %2. -Хотите ли вы импортировать его? - - - &Yes - &Да - - - &No - &Нет - - - - MusEApp::MusE - - Failed to start audio! - Не могу воспроизводить аудио! - - - Was not able to start audio, check if jack is running. - - Не могу воспроизводить аудио, проверте работает ли "Jack". - - - - Timeout waiting for audio to run. Check if jack is running. - - Ожидание запуска аудио. Проверте, работает ли "Jack". - - - - Und&o - &Отменить действие - - - Re&do - &Повторить - - - undo last change to song - отменить последнее изменение в проекте - - - redo last undo - повторить последнюю отмену - - - Loop - Цикл - - - Punchin - Начало врезки - - - Punchout - Конец врезки - - - Rewind - Перемотать назад - - - Forward - Перемотать вперёд - - - Stop - Остановить - - - Play - Воспроизвести - - - Record - Записать - - - Panic - Паника - - - &Open - &Открыть - - - Open &Recent - Открыть &Недавние - - - &Save - &Сохранить - - - Save &As - Сохранить &Как - - - Import Midifile - Импортировать MIDI-файл - - - Export Midifile - Экспортировать MIDI-файл - - - Import Part - Импортировать Партию - - - Import Wave File - Импортировать WAV-файл - - - &Quit - Вы&йти - - - Song Info - Проект инфо - - - Transport Panel - Панель транспорта - - - Bigtime Window - Окно хронометра - - - Mixer A - Микшер А - - - Mixer B - Микшер В - - - Cliplist - Список фрагментов - - - Marker View - Маркеры - - - &Plugins - &Плагины - - - Edit Instrument - Редактировать Инструмент - - - Input Plugins - Плагины на входе - - - Transpose - Транспонировать - - - Midi Input Transform - Преобразование входящих MIDI-сообщений - - - Midi Input Filter - Фильтр входящих MIDI-событий - - - Midi Remote Control - Дистанционное управление MIDI - - - Rhythm Generator - Генератор Ритма - - - Reset Instr. - Перезагрузить Инстр. - - - Init Instr. - Запустить Инстр. - - - Local Off - откл. локальное управление - - - Bounce to Track - Свести в трек - - - Bounce to File - Свести в файл - - - Restart Audio - Перезапустить аудио - - - Mixer Automation - Автоматизация микшера - - - Take Snapshot - Сделать снимок - - - Clear Automation Data - Удалить Данные Автоматизации - - - Global Settings - Общие настройки - - - Configure Shortcuts - Настроить горячие клавиши - - - Follow Song - следовать за проектом - - - Don't Follow Song - не следовать за проектом - - - Follow Page - следовать постранично - - - Follow Continuous - следовать плавно - - - Metronome - Метроном - - - Midi Sync - MIDI-синхр - - - Midi File Import/Export - Импорт/Экспорт midi-файла - - - Appearance Settings - Настройки вида - - - Midi Ports / Soft Synth - MIDI-порты / Прогр. синтезаторы - - - &Manual - &Руководство - - - &MusE Homepage - &Домашняя страница MusE - - - &Report Bug... - &Сообщить об ошибке... - - - &About MusE - &О программе MusE - - - File Buttons - Файловые кнопки - - - Transport - Транспорт - - - &File - &Файл - - - &View - &Вид - - - &Midi - &MIDI - - - &Audio - &Аудио - - - Cannot read template - Не могу прочитать шаблон - - - File open error - Ошибка при открытии файла - - - File read error - Ошибка прочтения файла - - - Unknown File Format: - Несзвестный формат файла: - - - MusE: Song: - MusE: Проект: - - - MusE: load project - MusE: Открыть проект - - - MusE: load template - MusE: открыть шаблон - - - The current Project contains unsaved data -Save Current Project? - Текущий проект содержит не сохранённые данные. -Сохранить текущий проект? - - - MusE: Save As - MusE: Сохранить как - - - Nothing to edit - Нечего редактировать - - - MusE: Bounce to Track - MusE: Сведение в Трек - - - No wave tracks found - wave-треки не найдены - - - No audio output tracks found - Выходные аудио треки не найдены - - - Select one audio output track, -and one target wave track - Выберите один трек аудио выхода -и один wave-трек, как цель - - - Select one target wave track - Выделите один wave-трек, как цель (трек назначения) - - - Select one target wave track, -and one audio output track - Выберите один wave-трек, как цель, -(трек назначения) и один трек аудио выхода - - - MusE: Bounce to File - MusE: Свести в файл - - - Select one audio output track - Выделите один трек аудио выхода - - - MusE: Bounce - MusE: Свести - - - set left/right marker for bounce range - настройте левый/правый маркеры для установки диапазона сведения - - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Текущий проект содержит не сохранённые данные. -Загрузка нового проекта приведёт к перезаписи данных текущего проекта. -Сохранить текущий проект? - - - &Abort - &Отмена - - - MusE: Export Midi - MusE:Экспорт MIDI - - - no help found at: - справка не найдена в: - - - MusE: Open Help - MusE: Открыть справку - - - MusE: Import Midi - MusE: Импорт MIDI - - - Add midi file to current project? - - Добавить midi файл в текущий проект? - - - - &Add to Project - &Добавить в Проект - - - &Replace - &Заменить - - - reading midifile - - читается MIDI-файл - - - - - -failed: - -не удалось: - - - Import part is only valid for midi and wave tracks! - Импортирование партий допустимо только для midi и wave треков! - - - MusE: load part - MusE: открыть партию - - - No track selected for import - Не выбран трек для импорта - - - parts - партии - - - could not be imported. -Likely the track is the wrong type. - не может быть импортирована -Возможно неверный тип трека. - - - to import an audio file you have first to selecta wave track - чтобы импортировать аудио файл, вы должны сначала выделить wave-трек - - - Import Wavefile - Импортировать wave-файл - - - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? - Samplerate этого wave-файла %1, -в то время как текущий Samplerate %2. -Хотите ли вы импортировать его? - - - &Yes - &Да - - - &No - &Нет - - - - MusEArranger::Arranger - - Enable Recording - Разрешить запись - - - Mute/Off Indicator - Индикатор глушения вкл/выкл - - - Solo Indicator - Индикатор соло - - - Track Type - Тип трека - - - Track Name - Имя трека - - - Midi output channel number or audio channels - Номер выходного Midi-канала или аудио каналов - - - Midi output port or synth midi port - Выходной midi-порт или midi-порт синтезатора - - - Time Lock - Изменение времени заблокировано - - - Enable recording. Click to toggle. - Разрешить запись. Щелкните для переключения. - - - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - Индикатор заглушки. Щелкните для переключения. -Щелчок правой кнопкой мыши включает/выключает трек. -Заглушка предназначена для быстрых, повторяющихся действий. -А Вкл/Выкл нет! - - - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - Индикатор Соло. Щелкните для переключения. -Все треки, связанные с этим треком тоже перейдут режим "фантомного" соло, -Они будут обозначены темными квадратами. - - - Track type. Right-click to change - midi and drum track types. - Тип трека. Щелкните правой кнопкой мыши чтобы -изменить тип трека (midi-трек или трек ударных). - - - Track name. Double-click to edit. -Right-click for more options. - Название трека. Редактирование - двойной щелчок. -Большее количество опций - правый щелчок мыши. - - - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - Трек Midi/Ударных: номер канала выхода. -Аудио трек: Каналы. -Чтобы изменить, щелкните Средней/Правой кнопкой мыши. - - - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - Трек Midi/Ударных: Порт выхода. -Трек синтезатора: Назначенный midi-порт. -Щелчок левой кнопкой - изменить. -Щелчок правой кнопкой - показать ГИП. - - - Time lock - Изменение времени заблокировано - - - Arranger - Компоновщик - - - Cursor - Курсор - - - Snap - Привязка - - - Len - Дл - - - song length - bars - длина проекта - в тактах - - - Type - Тип - - - NO - НЕТ - - - GM - GM - - - GS - GS - - - XG - XG - - - midi song type - тип midi-проекта - - - Pitch - Высота тона - - - midi pitch - midi высотность - - - global midi pitch shift - общий сдвиг midi-высотности - - - Tempo - Темп - - - midi tempo - midi-темп - - - N - N - - - TrackInfo - ТрекИнфо - - - R - R - - - M - M - - - S - S - - - C - Т - - - Track - Трек - - - Port - Порт - - - Ch - Кан - - - T - Т - - - Automation - Автоматизация - - - - MusEArranger::ArrangerView - - panic - паника - - - transport - транспорт - - - C&ut - &Вырезать - - - &Copy - С&копировать - - - &Paste - &Вставить - - - Paste c&lone - Вставить к&лон - - - &Insert Empty Measure - &Вставить пустой такт - - - Delete Selected Tracks - Удалить выделенные треки - - - Add Track - Добавить трек - - - Select - Выделить - - - &Deselect All - &Убрать выделение - - - &Inside Loop - &Внутри цикла - - - &Outside Loop - &Вне цикла - - - All &Parts on Track - Все &партии в треке - - - Pianoroll - Пианоролл - - - Drums - Ударные - - - List - Список - - - Wave - Wave - - - Mastertrack - Мастер-трек - - - Graphic - Графика - - - Midi &Transform - &Преобразовать MIDI-сообщения - - - Global Cut - Глобальное вырезание - - - Global Insert - Глобальная вставка - - - Global Split - Глобальное разделение - - - &Edit - &Правка - - - &Structure - &Структура - - - Transpose - Транспонировать - - - New - Новый - - - - MusEArranger::PartCanvas - - Cannot copy/move/clone to different Track-Type - Невозможно копировать/перемещать/клонировать данные в другие типы дорожек - - - C&ut - &Вырезать - - - &Copy - С&копировать - - - s&elect - В&ыбрать - - - clones - клоны - - - rename - Переименовать - - - color - цвет - - - delete - удалить - - - split - разделить - - - de-clone - деклонировать - - - wave edit - Редактор семплов - - - file info - файл-инфо - - - MusE: save part - MusE: сохранить партию - - - Part name - Имя партии - - - Files - Файлы - - - parts - партии - - - could not be pasted. -Likely the selected track is the wrong type. - не может быть вставлена. -Возможно выбранный трек не того типа. - - - Cannot paste: multiple tracks selected - Вставка невозможна: выделено несколько треков - - - Cannot paste: no track selected - Вставка невозможна: не выделено ни одного трека - - - Can only paste to midi/drum track - Можно вставить только в midi/drum трек - - - Can only paste to wave track - Можно вставить только в звуковой трек - - - Can only paste to midi or wave track - Можно вставить только в midi или wave треки - - - Cannot paste: wrong data type - Вставка невозможна: неверный тип данных + List of defined controllers. + Список назначенных контроллеров. - - - MusEArranger::TList - <none> - <ничего> + Min + Мин - MusE: bad trackname - MusE: неверное имя трека + Max + Макс - please choose a unique track name - Выберите неповторяющееся имя для трека + Def + Назн - Update drummap? - Обновить карту ударных? + Midi controller name + Имя midi-контроллера - Do you want to use same port for all instruments in the drummap? - Вы хотите использовать один и тот же порт для всех инструментов в списке ударных? + Type: + Тип: - &Yes - &Да + Midi controller type + Тип midi-контроллера - &No - &Нет + RPN14 + RPN14 - show gui - показать ГИП + NRPN14 + NRPN14 - show native gui - показать ГИП + Midi controller number high byte + Старший байт midi-контроллера - Delete Track - Удалить трек + Midi controller number low byte (* means drum controller) + Младший байт midi-контроллера (* означает контроллер ударных) - Track Comment - Комментарий к треку + Midi controller number low byte. +If low byte is * then the controller is a + 'drum controller'. For drum tracks and + GS/XG type songs and instruments. +Allows controllers for each instrument in + Muse's drum map. The low byte will be + replaced by the 'ANote' in the drum map. +Examples: The GS and XG instruments' + Drum controllers. + Младший байт midi-контроллера. +Если младший байт - *, тогда контроллер является +"контроллером ударных". Для треков ударных и +GS/XG типов проектов и инструментов. +Разрешает контроллеры для каждого инструмента в +карте ударных MusE. Младший байт будет +заменен "ANote" в карте ударных. +Примеры: Контроллеры ударных для GS и XG +инструментов. - Drum - Ударные + * + wild card + * + +универсальный шаблон - Do you want to use same port and channel for all instruments in the drummap? - Вы хотите использовать один и тот же порт и канал для всех инструментов в списке ударных? + Range: + Диапазон: - - - MusECore::Song - - Jack shutdown! - Jack прекратил работу! + Minimum value. If negative, auto-translate. + Минимальное значение. Если отрицательное, то авто-перевод. - - Jack has detected a performance problem which has lead to -MusE being disconnected. -This could happen due to a number of reasons: -- a performance issue with your particular setup. -- a bug in MusE (or possibly in another connected software). -- a random hiccup which might never occur again. -- jack was voluntary stopped by you or someone else -- jack crashed -If there is a persisting problem you are much welcome to discuss it -on the MusE mailinglist. -(there is information about joining the mailinglist on the MusE - homepage which is available through the help menu) + Minimum value. If the minimum value + is negative, the range will automatically + be translated to a positive range. -To proceed check the status of Jack and try to restart it and then . -click on the Restart button. - Проблемы в работе "Jack", привели к его рассоединению с "MusE". -Это могло произойти по разным причинам: --проблемы в работе, вызванные особенностью ваших настроек. --баг в "MusE" (или, возможно, в других подсоединенных программах). --случайное выключение, которое больше никогда не повторится. --"Jack" остановлен вами или кем-нибудь еще. --"Jack" рухнул -Если это постоянная проблема мы приглашаем вас обсудить её -в почтовой рассылке "MusE". -(в меню "Помощь" есть информация о том, как присоединиться -к почтовой рассылке "MusE") +Useful for controllers which should be + displayed with zero bias. For example, +'Pan': Minimum: -64 Maximum: 63 +True range: Min: 0 Max: 127 (bias = 64) +'CoarseTuning': Min: -24 Max: 23 +True range: Min: 40 Max: 87 (bias = 64) -Чтобы продолжить работу, проверте состояние "Jack", постарайтесь -перезапустить его, а затем щелкните по кнопке "Перезапустить". +Bias is determined from controller type: +7-bit Controller7 / RPN: Bias = 64 +14-bit Controller14 / RPN14: Bias = 8192 - - - - - - Automation: - - - - - previous event - предыдущее событие - - - - next event - следующее событие - - - - - set event - настроить событие - - - - - add event - добавить событие - - - - - erase event - стереть событие - - - - erase range - стереть диапазон - - - - clear automation - Очистить автоматизацию - - - - Clear all controller events? - Очистить все события контроллеров? - - - - &Ok - &ОК - - - - &Cancel - - - - - MusE - external script failed - MusE - ошибка запуска внешнего скрипта - - - - MusE was unable to launch the script, error message: -%1 - - - - - MusEGui - - - Select project directory - - - - - MusEGui::Appearance - - - Main application font, and default font for any - controls not defined here. - Главный шрифт приложения, и шрифт по умолчанию -для всех средств управления, здесь не определены. - - - For small controls like mixer strips. -Also timescale small numbers, arranger part name overlay, - and effects rack. - Для небольших средств контроля, типа линеек микшера. -Также для маленьких цифр на линейке времени, названий партий в компоновщике и рэка эффектов. - - - Midi track info panel. Transport controls. - Инфо-панель Midi-трека. Управление транспортом. - - - Controller graph and S/X buttons. Large numbers for time - and tempo scale, and time signature. - Диаграмма контроллера и S/X кнопки. Большие цифры для -линеек времени и темпа, а также для тактового размера. +Type 'Pitch' is the exception. It is biased + at zero, even with a negative minimum: +'Pitch': Min: -8192 Max: 8191 +True range: Min: -8192 Max: 8191 (bias 0) + Минимальное значение. Если минимальное +значение отрицательное, то диапазон +автоматически переводится в положительный. + +Полезно для контроллеров отображаемых +с нулевым смещением. Например, "Пан": +Минимум: -64 Максимум: 63 Реальный диапазон: +Мин: 0 Макс: 127 (смещение = 64) +"Грубая настройка": Мин: -24 Макс: 23 +Реальный диапазон: Мин: 40 Макс: 87 (смещение = 64) + +Контроллер "Высота тона" является исключением. +Его смещение равно нулю, даже при отрицательных +значениях. "Высота тона" Мин: -8192 Макс: 8191 +Реальный диапазон: Мин: -8192 Макс:8191 (смещение = 0) - Time scale markers. - Маркеры на линейке времени. + Maximum value + Максимальное значение - List editor: meta event edit dialog multi-line edit box. - Редактор списка: редактирование мета-события многострочное окно редактирования. + Default: + По умолчанию: - Mixer label font. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - Шрифт метки микшера. Автоматическое изменение размера шрифта до выбранного размера. -Переносы только по пробелам. + L-Bank + L-банк - - Mixer strips and effects racks. Midi track info panel. -Midi control panel entry box. - + off + выкл - - Transport controls. - + Progr. + Прогр. - - Time scale upper, and time signature. -Controller graph and S/X buttons. - + ??? + ??? - - Time scale lower, and arranger part name overlay. - + H-Bank + H-банк - - Tempo scale, and markers. - + Default value. Off: No default. + Значение по умолчанию. Выкл: Нет значения по умолчанию. - - Mixer labels. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - + Default (initial) value. Off means no default. + +If a default value is chosen, the value will be sent + to the controller when the controller is added to + the song (in piano roll or event editor). When + the song is re-loaded, the value is sent again. +Otherwise the controller remains at its last value. +Controllers are also automatically added to a + song upon reception of a midi controller event. + +Caution! Watch out for controllers such as + 'Sustain' and 'ResetAllController' with default + values. You should probably turn 'off' their + default (in piano roll or drum edit, and + instrument editor). + Значение по умолчанию (начальное). Выкл означает, +что значения по умолчанию нет. + +Если выбрано "по умолчанию", то значение будет +послано контроллеру, когда он будет добавлен в проект +(в пианоролле или редакторе списка). При перезагрузке +проекта значение будет послано снова. Или же будет +применено последнее значение контроллера. Контроллеры +также автоматически добавляются в проект при получении +midi-сообщений о контроллерах. + +Внимание! Будте осторожны с такими контроллерами как +"Sustain" и "ResetAllController". Вероятнее всего, что вы назначите +"выкл" для этих контроллеров (в пианоролле, редакторе ударных +или редакторе инструментов). - - Maximum mixer label auto-font-sizing font size. - Максимальный размер автоматически изменяющегося шрифта метки микшера. + off + dont care + выкл - - Global opacity (opposite of transparency). - + Add common controller + Добавить обычный контроллер - - Standard - + &Add + &Добавить - - Custom - + Alt+A + Alt+A - - MusE: load image - MusE: загрузить изображение + Delete controller + Удалить контроллер - - Select style sheet - Выберите таблицу стилей + Create a new controller + Добавить новый контроллер - - Qt style sheets (*.qss) - Таблицы стилей Qt (*.qss) + New &Controller + Новый &Контроллер - - - MusEGui::Arranger - - Enable Recording - Разрешить запись + Alt+C + Alt+C - - Mute/Off Indicator - Индикатор глушения вкл/выкл + Null Param Hi: + Нулевой Парам Ст: - - Solo Indicator - Индикатор соло + Null parameter number High byte + Нулевой параметр значения Старшего байта - - Track Type - Тип трека + If set, these 'null' parameter numbers will + be sent after each RPN/NRPN event. +This prevents subsequent 'data' events + from corrupting the RPN/NRPN controller. +Typically, set to 127/127, or an unused + RPN/NRPN controller number. + Если установлено, то это значение "нулевого" +параметра будет послано после каждого +события RPN/NRPN. Это предотвращает искажение +"данных" последующих событий контроллером RPN/NRPN. +Обычно, устанавливается 127/127, или "не использовать". - - Track Name - Имя трека + Lo: + Мл: - - Midi output channel number or audio channels - Номер выходного Midi-канала или аудио каналов + Null parameter number Low byte + Нулевой параметр Младшего байта - - Midi output port or synth midi port - Выходной midi-порт или midi-порт синтезатора + S&ysEx + S&ysEx - - Time Lock - Изменение времени заблокировано + SysEx List: + Список SysEx: - - Automation parameter selection - + New SysE&x + Новый SysE&x - - Notation clef - + Alt+X + Alt+X - - Enable recording. Click to toggle. - Разрешить запись. Щелкните для переключения. + &Help + &Помощь - - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - Индикатор заглушки. Щелкните для переключения. -Щелчок правой кнопкой мыши включает/выключает трек. -Заглушка предназначена для быстрых, повторяющихся действий. -А Вкл/Выкл нет! + new item + новый пункт - - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - Индикатор Соло. Щелкните для переключения. -Все треки, связанные с этим треком тоже перейдут режим "фантомного" соло, -Они будут обозначены темными квадратами. + What's this? + Что это? + + + EditNoteDialogBase - - Track type. Right-click to change - midi and drum track types. - Тип трека. Щелкните правой кнопкой мыши чтобы -изменить тип трека (midi-трек или трек ударных). + MusE: Enter Note + MusE: Ввести ноту - - Track name. Double-click to edit. -Right-click for more options. - Название трека. Редактирование - двойной щелчок. -Большее количество опций - правый щелчок мыши. + OK + ОК - - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - Трек Midi/Ударных: номер канала выхода. -Аудио трек: Каналы. -Чтобы изменить, щелкните Средней/Правой кнопкой мыши. + Cancel + Отмена - - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - Трек Midi/Ударных: Порт выхода. -Трек синтезатора: Назначенный midi-порт. -Щелчок левой кнопкой - изменить. -Щелчок правой кнопкой - показать ГИП. + Length: + Длина: - - Time lock - Изменение времени заблокировано + Time Position: + Позиция по времени: - - Notation clef. Select this tracks notation clef. - + Pitch: + Высота тона: - - Arranger - Компоновщик + Velocity On: + Скорость наж: - - Cursor - Курсор + Velocity Off: + Скорость снятия: + + + EditSysexDialogBase - - Off - + MusE: Enter SysEx + MusE: Ввести SysEx - - Bar - Такт + TimePosition: + Время: - - Snap - Привязка + Comment: + Комментарий: - - Len - Дл + OK + ОК - - - song length - bars - длина проекта - в тактах + Cancel + Отмена + + + FLUIDGui - - Type - Тип + FLUID: open Soundfile + FLUID: открыть звуковой файл + + + FLUIDGuiBase - - NO - НЕТ + Form1 + Форма1 - - GM - GM + Soundfont + Soundfont - - GS - GS + Load + Загрузить + + + FLUIDSynthGuiBase - - XG - XG + FLUID Synth + Синтезатор FLUID - - - midi song type - тип midi-проекта + Gain + Усиление - - Pitch - Высота тона + Level + Уровень - - midi pitch - midi высотность + Width + Ширина - - global midi pitch shift - общий сдвиг midi-высотности + Damping + Демпфирование - - Tempo - Темп + Room Size + Размер помещения - - - midi tempo - midi-темп + Reverb + Реверб - - N - N + Delete + Удалить - - TrackInfo - ТрекИнфо + Load + Загрузить - - R - R + Sine + Синусоида - - M - M + Triangle + Треугольная - - S - S + Type + Тип - - C - Т + Number + Число - - Track - Трек + Speed + Скорость - - Port - Порт + Depth + Глубина - - Ch - Кан + Chorus + Хорус - - T - Т + CHANNEL SETUP + НАСТРОЙКА КАНАЛА - - Automation - Автоматизация + ID + ID - - Clef - + Fontname + Назв. SF-банка - - - MusEGui::ArrangerView - - MusE: Arranger - + Chnl + Канал - - Undo/Redo tools - + Soundfont + Банк - - panic - паника + LOADED SOUNDFONTS + ЗАГРУЖЕННЫЕ БАНКИ - - transport - транспорт + Dump Info + Дамп Инфо - - C&ut - &Вырезать + Drum Chnl + Канал ударных + + + FileDialogButtons - - &Copy - С&копировать + Global + Общий - - Copy in range - + User + Пользователь + - - &Paste - &Вставить + Project + Проект - - Paste (show dialog) - + read Midi Port +Configuration + читать конфигурацию +midi порта - - Paste c&lone - Вставить к&лон + fdialogbuttons + КнопкиДиалогаФайлов - - Paste clone (show dialog) + write window +states + + + FluidSynthGui - - &Insert Empty Measure - &Вставить пустой такт - - - - Delete Selected Tracks - Удалить выделенные треки + Choose soundfont + Выберите soundfont + + + GateTimeBase - - Shrink selected parts - + Range + Диапазон - - Expand selected parts - + All Events + Все события - - Clean selected parts - + Selected Events + Выбранные события - - Add Track - Добавить трек + Looped Events + События в цикле - - Select - Выделить + MusE: Modify Note Length + MusE: Изменить длину ноты - - Select &All - + Selected Looped + Выбранные в цикле - - &Deselect All - &Убрать выделение + Values + Значения - - Invert &Selection - + Rate: + Скорость: - - &Inside Loop - &Внутри цикла + Offset: + Смещение: - - &Outside Loop - &Вне цикла + % + % - - All &Parts on Track - Все &партии в треке + lenNew = (lenOld * rate) + offset + Нов.дл = (Ст.дл * скор.) + смещ - - Score - + OK + ОК - - all tracks in one staff - + Cancel + Отмена + + + GlobalSettingsDialogBase - - one staff per track - + MusE: Global Settings + MusE: Общие настройки - - New score window - + Use project save dialog + Использ. диалог сохр. проекта - - Pianoroll - Пианоролл + Some popup menus stay open (else hold Ctrl) + Некоторые всплыв. меню останутся открытыми (или удерживайте Ctrl) - - Drums - Ударные + Allows some popup menus to stay open. +Otherwise, hold Ctrl to keep them open. + Разрешает некоторым всплыв. меню оставаться +открытыми. Или удерживайте Ctrl. - - - List - Список + In some areas, the middle mouse button decreases +values, while the right button increases. Users without a +middle mouse button can select this option to make the +left button behave like the middle button in such areas. + В некоторых местах средняя кнопка мыши уменьшает +значение, а правая увеличивает. Пользователи без +средней кнопки могут выбрать эту опцию, чтобы левая +кнопка мыши в таких местах вела себя как правая. - - Wave - Wave + Use left mouse button for decreasing values + Используйте левую кнопку мыши для уменьшения - - Mastertrack - Мастер-трек + Shift + Right click sets left range marker + Shift + щелчок пр. кнопкой - устанавливает левый маркер - - Graphic - Графика + Allow adding hidden tracks in track list menu + Разрешает добавление скрытых треков в меню списка треков - - Midi &Transform - &Преобразовать MIDI-сообщения + Unhide tracks when adding hidden tracks + Показывать треки, когда добавляются скрытые - - Global Cut - Глобальное вырезание + GUI Style + Стиль ГИП - - Global Insert - Глобальная вставка + MDI-subwindowness and sharing menus + Общие меню и подменю MDI - - Global Split - Глобальное разделение + Presets: + Пресеты: - - Global Cut - selected tracks - + traditional MusE SDI + традиционное MusE SDI - - Global Insert - selected tracks - + Cakewalk-like MDI + MDI в стиле Cakewalk - - Global Split - selected tracks - + Borland-/Mac-like MDI + MDI в стиле Borland-/Mac - - &Edit - &Правка + &Apply + &Применить - - &Structure - &Структура + &Ok + &ОК - - Functions - + &Cancel + &Отмена - - &Quantize Notes - + Audio + Аудио - - Change note &length - + Mixer + Микшер - - Change note &velocity - + dB + Дб - - Crescendo/Decrescendo - + min. Meter Value + мин. знач. индикатора - - Transpose - Транспонировать + Midi + Midi - - Erase Events (Not Parts) - + Ticks + Тики - - Move Events (Not Parts) - + 1024 + 1024 - - Set Fixed Note Length - + 2048 + 2048 - - Delete Overlapping Notes - + 4096 + 4096 - - Legato - + Displayed Resolution +(Ticks/Quarternote) + Отображаемое разрешение +(Тиков/на четверть) - - Window &Config - + 48 + 48 - - - New - Новый + 96 + 96 - - - MusEGui::AudioMixerApp - - &Create - + 192 + 192 - - &View - &Вид + 384 + 384 - - Routing - Маршрутизация + 768 + 768 - - Show Midi Tracks - Показать Midi-треки + 1536 + 1536 - - Show Drum Tracks - Показать треки ударных + 3072 + 3072 - - Show Wave Tracks - Показать Wave-треки + 6144 + 6144 - - Show Inputs - Показать входы + 12288 + 12288 - - Show Outputs - Показать выходы + RTC Resolution +(Ticks/Sec) + RTC-разрешение +(тиков/в сек) - - Show Groups - Показать группы + GUI Refresh Rate + Частота обновления ГИП - - Show Auxs - Показать Auxs + /sec + /сек - - Show Synthesizers - Показать синтезаторы + Application + Приложение - - - MusEGui::AudioStrip - - panorama - панорама + Start Muse + Запустить Muse - - aux send level - уровень aux посыла + start with last song + запустить с последним проектом - - Pan - Пан + start with song + запустить с проектом - - 1/2 channel - стерео-моно + Views + Виды - - Pre - Пре + y-pos + y-поз. - - pre fader - post fader - пре федер - пост федер + show + показать - - dB - + x-pos + x-поз. - - record - + height + высота - - mute - заглушить + width + ширина - - record downmix - записать downmix + Big Time + Хронометр - - - solo mode - режим соло + Transport + Транспорт - - off - выкл + Cur + Тек - - iR - вх + set current values + установить текущее значение - - input routing - маршрут входа + show splash screen + показывать заставку - - oR - вых + External Waveditor + Внешний аудиоредактор - - output routing - маршрут выхода + External Waveditor command + Команда вызова внешнего аудиоредактора - - Off - + Mixer A + Микшер А - - Read - Читать + Mixer B + Микшер В - - Touch - По касанию + show "Did you know?" dialog + показывать окно "Знаете ли вы?" - - Write - + Start song + Запустить проект - - automation type - тип автоматизации + min. Slider Val + мин. значение слайдера - - - MusEGui::BigTime - - format display - формат дисплея + Enable denormal protection + Разрешить защиту от нарушений режима - - bar - такт + Enable output limiter + Разрешить лимитер выхода - - beat - доля + Note: External editor opened from the internal editor. + Примечание: Внешний редактор открывается из внутреннего редактора. - - - tick - тик + Dummy Audio Driver (settings require restart) + Фиктивный Аудио Драйвер (требует перезагрузки) - - minute - минут(а) + Hz + Гц - - second - секунд(а) + Period size (Frames per period): + Размер периода (Фреймов на период): - - - frame - фреймов + 16 + 16 - - subframe - субфреймов + Project directory + Папка проекта - - MusE: Bigtime - MusE: Хронометр + Projects: + Проекты: - - - MusEGui::ClipListEdit - - MusE: Clip List Editor - MusE: Редактор списка фрагментов + ... + ... - - Undo/Redo tools - + Main Window + Главное окно - - panic - паника + Try to use Jack Freewheel + Попробуйте использавать режим "Jack Freewheel" - - transport - транспорт + Speeds bounce operations + Ускоряет операции сведения - - Window &Config - + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. + Используйте режим Jack freewheel, если возможно. +Значительно ускоряет операции сведения. - - - MusEGui::ComboQuant - - - - Off - + VST in-place + Быстрая обработка для VST-плагинов - - - MusEGui::CtrlPanel - - S - S + Enable VST in-place processing (restart required) + Разрешить быструю обработку для VST-плагинов. (Требуется перезагрузка) + - - select controller - выбрать контроллер + Enable VST in-place processing. Turn this off if + VST Ladspa effect rack plugins do not work or + feedback loudly, even if they are supposed to + be in-place capable. Setting requires a restart. + Возможность быстрой обработки VST. Отключите, +если плагины эффектов рэка "VST Ladspa" не +работают, или звучат очень громко, хотя и не +должны. Требуется перезагрузка. - - X - X + Minimum control period + Минимальный контрольный период - - remove panel - удалить панель + Minimum audio controller process period (samples). + + Минимальный период аудио обработки (сэмпл). + - - manual adjust - настройка вручную + Minimum audio controller process period (samples). +Adjusts responsiveness of audio controls and + controller graphs. Set a low value for fast, smooth + control. If it causes performance problems, set a + higher value. + Минимальный период аудио обработки (сэмпл). +Отрегулируйте чувствительность кнопок и линеек. +Установите, сначала, небольшие значения. При +возникновении проблем - увеличьте. - - double click on/off - двойной щелчок вкл/выкл + 1 + 1 - - off - выкл + 2 + 2 - - - Velocity - + 4 + 4 - - add new ... - Добавить новый... + 8 + 8 - - - Instrument-defined - + 32 + 32 - - - Add ... - + 64 + 64 - - Others - + 128 + 128 - - Edit instrument ... - + 256 + 256 - - Common Controls - + 512 + 512 - - - MusEGui::DrumEdit - - - mute instrument - заглушить инструмент + Sample rate + - - - sound name - название звука + Shorter periods give better midi playback resolution. + Меньшие периоды дают лучшее разрешение проигрывания midi. - - - volume percent - громкость в процентах + 8192 + 8192 - - - quantisation - квантование + 16384 + 16384 - - - this input note triggers the sound - + 32768 + 32768 - - - note length - длина ноты + Midi Resolution +(Ticks/Quarternote) + Midi-Разрешение +(Тиков/На четверть) - - - this is the note which is played - это нота, которая воспроизводится + GUI Behaviour + Поведение ГИП - - output channel (hold ctl to affect all rows) - канал выхода (удерживайте ctrl, чтобы воздействовать на все ряды) + Use old-style stop shortcut: + Использовать старую "горячую клавишу" для остановки: - - output port (hold ctl to affect all rows) - + Move single armed track with selection + Назначать "для записи" выбранный трек - - - shift + control key: draw velocity level 1 - клавиши shift+control: рисовать уровень 1 скорости нажатия + On Launch + При запуске - - - control key: draw velocity level 2 - Клавиша control: рисовать уровень 2 скорости нажатия + Behavior + Поведение - - - shift key: draw velocity level 3 - Клавиша shift: рисовать уровень 3 скорости нажатия + Choose start song or template + - - - draw velocity level 4 - рисовать уровень 4 скорости нажатия + Reset to default + - - output channel (ctl: affect all rows) - канал выхода (ctrl: действует на все ряды) + start with template + - - output port (ctl: affect all rows) + Start template or song: - - &File - &Файл + Read MIDI Ports configuration from file, + or else automatically configure + - - Load Map - Загрузить карту + Read MIDI Ports configuration + - - Save Map - Сохранить карту + Smart focus + - - Reset GM Map - Настроить карту GM по умолчанию + After editing, controls will return + focus to their respective canvas + + + + LegatoBase - - &Edit - &Правка + MusE: Legato + MusE: Легато - - Cut - Вырезать + Range + Диапазон - - Copy - + All Events + Все события - - Copy events in range - + Selected Events + Выбранные события - - Paste - Вставить + Looped Events + События в цикле - - Paste (with Dialog) - + Selected Looped + Выбранные ы цикле - - Delete Events - Удалить события + Settings + Настройки - - &Select - + ticks + тик(и) - - Select All - Выделить всё + Minimum Length + Минимальная Длина - - Select None - Убрать выделение + Allow shortening notes + Разрешить сокращение нот - - Invert - Инвертировать + OK + OK - - Inside Loop - Внутри цикла + Cancel + Отмена + + + MITTransposeBase - - Outside Loop - Вне цикла + MusE: Midi Input Plugin: Transpose + MusE: Midi-плагин на входе: Транспонирование - - Previous Part - Предыдущая партия + On + Вкл - - Next Part - Следующая партия + TriggerKey + Кнопка запуска - - Fu&nctions - + Transpose: + Транспонировать: - - Re-order list - + +0 + +0 + + + MRConfigBase - - Set Fixed Length - + MusE: Midi Input Plugin: Remote Control + MusE: Входной MIDI-плагин: Дистанц. управление - - Modify Velocity - + Activate + Активировать - - Crescendo/Decrescendo - + On + Вкл - - Quantize - Квантовать + Actions + Действия - - Erase Event - Удалить событие + Stop + Остановить - - Move Notes - + Record + Записать - - Delete Overlaps - Удалить наложения + Goto Left Mark + Перейти к левому маркеру - - &Plugins - &Плагины + Play + Воспроизвести - - Window &Config - + Insert rest (step rec) + Вставить паузу (пошаг. зап) + + + MdiSettingsBase - - Drum tools - Инструменты ударных + Form + Form - - Load Drummap - Загрузить драм-карту + GroupBox + Окно Группы - - Store Drummap - Сохранить драм-карту + MDI subwin + MDI под-окно - - Step Record - Пошаговая запись + Shares menu when subwin + Общее меню в под-окне - - Midi Input - MIDI-вход + Shares menu when free + Общее меню всегда + + + MetronomeConfigBase - - cursor tools - + MusE: Metronome Config + MusE: Настройка метронома - - Set step size for cursor edit - + Metronome + Метроном - - panic - паника + Audio Beep + Аудио щелчок - - transport - транспорт + MIDI Click + MIDI щелчок - - ctrl - + Midi Channel + MIDI-канал - - Add Controller View - + Measure Note + Нота на первую долю такта - - M - M + Measure Velocity + Громкость первой доли такта - - Sound - Звук + Beat Velocity + Громкость слабых долей такта - - Vol - Громк + Beat Note + Нота на слабые доли такта - - QNT - КВНТ + Midi Port + MIDI-порт - - E-Note - E-Нота + Precount + Предварительный отсчет - - Len - Дл + enable + разрешить - - A-Note - A-Нота + Bars + Такт(ов) - - Ch - Кан + From Mastertrack + Из Мастер-трека - - Port - Порт + / + / - - LV1 - LV1 + Signature + Размер - - LV2 - LV2 + Prerecord + Предзапись - - LV3 - LV3 + Preroll + Предвоспроизведение - - LV4 - LV4 + &Apply + &Применить - - Muse: Load Drum Map - Muse: Загрузить драм-карту + &OK + &ОК - - MusE: Store Drum Map - Muse: Сохранить драм-карту + &Cancel + &Отмена - - Drum map - Карта ударных + Choose outputs... + Выбрать выходы... - - Reset the drum map with GM defaults? - Сброс карты ударных на GM по умолчанию? + 50 + 50 - - - MusEGui::EditCAfterDialog - - MusE: Enter Channel Aftertouch - MusE: Ввести Channel Aftertouch + % Audio volume + % Громкость аудио - - Time Position - Позиция по времени + Hint: Enable metronome in Transportpanel + Подсказка: Активируйте метроном на Транспортной панели - - Pressure - Давление + Alt+A + Alt+A - - - MusEGui::EditEventDialog - - Ok - + Alt+O + Alt+O - - Cancel - Отмена + Alt+C + Alt+C - MusEGui::EditInstrument + MidiAudioControlBase - - - MusE: Create file failed - MusE: Не удалось создать файл - - - - MusE: Write File failed + Midi control - MusE: - MusE: + Port: + - - - MusE: Save Instrument Definition - MusE: Сохранить Определение Инструмента + Channel: + - - - Instrument Definition (*.idf) - Определение инструмента (*.idf) + Control type: + - - - MusE: Save instrument as - MusE: Сохранить инструмент как + Control7 + Контрл7 - - Enter a new unique instrument name: - Введите неповторяющееся имя инструмента: + Control14 + Контрл14 - - The user instrument '%1' already exists. This will overwrite its .idf instrument file. -Are you sure? - + RPN + RPN - - MusE: Bad instrument name - MusE: Неверное имя инструмента + NRPN + NRPN - - Please choose a unique instrument name. -(The name might be used by a hidden instrument.) - Пожалуйста, выберите неповторяющееся имя для инструмента. -(Имя может использоваться в скрытых инструментах) + RPN14 + RPN14 - - MusE: Bad patch name - MusE: Неверное имя патча + NRPN14 + NRPN14 - - Please choose a unique patch name - Пожалуйста, выберите неповторяющееся имя патча + Pitch + Высота тона - - MusE: Bad patchgroup name - MusE: Неверное имя группы + Program + Программа - - Please choose a unique patchgroup name - Пожалуйста, выберите неповторяющееся имя группы + Hi: + - - MusE: Bad controller name - MusE: Неверное имя контроллера + Lo: + - - Please choose a unique controller name - Пожалуйста, выберите неповторяющееся имя для контроллера + Learn + + + + MidiFilterConfigBase - - - MusE: Cannot add common controller - MusE: Невозможно добавить обычный контроллер + MusE: Midi Input Filter + MusE: Фильтр входящих Midi-событий - - A controller named '%1' already exists. - + Record Filter + Фильтр записи - - A controller number %1 already exists. - + Note On + Нажатие ноты - - - MusE - MusE + Poly Pressure + Полифоническое давление - - - The current Instrument contains unsaved data -Save Current Instrument? - Текущий Инструмент содержит несохраненные данные -Сохранить этот Инструмент? + Controller + Контроллер - - - &Save - &Сохранить + Program Change + Смена программы - - - &Nosave - &Не сохранять + After Touch + Посленажатие - - &Abort - &Отмена + Pitch Bend + Изменение высоты тона - - - MusEGui::EditMetaDialog - - MusE: Enter Meta Event - MusE: Ввести метасобытие + Sysex + SysEx - - Time Position - Позиция по времени + Thru Filter + Фильтр сквозного канала - - Meta Type - Метатип + Controller Filter + Фильтр контроллеров - - Enter Hex - Ввести Hex + Channel Filter + Фильтр каналов - - - MusEGui::EditPAfterDialog - - MusE: Enter Poly Aftertouch - MusE: Ввести полиф. посленажатие + 14 + 14 - - Time Position - Позиция по времени + 10 + 10 - - Pitch - Высота тона + 6 + 6 - - Pressure - Давление + 12 + 12 - - - MusEGui::EditToolBar - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - выбрать инструмент "Указатель": -при помощи указателя можно: - выделять партии(new line) - перемещать партии(new line) - копировать партии + + 4 + 4 - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - выбрать инструмент "Карандаш": -с помощью инструмента "Карандаш" вы можете: - создавать новые партии - изменять длину партий + 2 + 2 - - select Delete Tool: -with the delete tool you can delete parts - выбрать инструмент "Ластик": -с помощью инструмента "Ластик" вы можете удалять партии + 9 + 9 - - select Cut Tool: -with the cut tool you can split a part - выбрать инструмент "Ножницы":(new line) -с помощью инструмента "Ножницы" вы можете разрезать партию + 8 + 8 - - select Glue Tool: -with the glue tool you can glue two parts - выбрать инструмент "Клей": -с помощью инструмента "Клей" вы можете соединить две партии + 3 + 3 - - select Score Tool: - - выбрать редактор партитур: - + 13 + 13 - - select Quantize Tool: -insert display quantize event - выбрать инструмент "Квантование": -вставить отображение квантуемых событий + 15 + 15 - - select Drawing Tool - выбрать инструмент "Рисование" + 16 + 16 - - select Muting Tool: -click on part to mute/unmute - выбрать инструмент "Не проигрывать партию (Заглушить)": -Щелкните по партии, чтобы "Проигрывать" или "Не проигрывать" ее + 7 + 7 - - Manipulate automation - + 11 + 11 - - Cursor tool - + 5 + 5 - - pointer - указатель + 1 + 1 + + + MidiInputTransformDialogBase - - pencil - карандаш + MusE: Midi Input Transformator + MusE: Преобразователь входящих MIDI-событий - - eraser - ластик + Filter + Фильтр - - cutter - ножницы + All + Все - - score - партитура + Equal + Равно - - glue - + Unequal + Не равно - - quantize - квантовать + Note + Нота - - draw - рисовать + Poly Pressure + Полифоническое давление - - mute parts - заглушить партии + Control Change + Смена контроллера - - edit automation - + Aftertouch + Посленажатие - - cursor - + Pitch Bend + Изменение высоты тона - - Edit Tools - Инструменты редактирования + NRPN + NRPN - - - MusEGui::EffectRack - - effect rack - рэк эффектов + RPN + RPN - - new - новый + Value 2 + Значение 2 - - change - изменить + Value 1 + Значение 1 - - move up - сдвинуть выше + Event Type + Тип события - - move down - сдвинуть ниже + Ignore + Игнорировать - - remove - удалить + Higher + Выше - - bypass - обойти + Lower + Ниже - - show gui - показать ГИП + Inside + Внутри - - show native gui - показать ГИП + Outside + Вне - - save preset - сохранить пресет + Channel + Канал - - MusE: Save Preset - MusE: Сохранить Пресет + Port + Порт - - Replace effect - Заменить эффект + Processing + Обработка - - Do you really want to replace the effect %1? - Вы действительно хотите заменить эффект %1? + Keep + Сохранить - - - MusEGui::Header - - Track Info Columns - + Fix + Исправить - - - MusEGui::LMaster - - MusE: Mastertrack - MusE: Мастер-трек + Plus + Плюс - - &Edit - &Правка + Minus + Минус - - Insert Tempo - Вставить темп + Multiply + Умножить - - Insert Signature - Вставить размер + Divide + Разделить - - Insert Key - + Invert + Инвертировать - - Edit Positon - Изменить позицию + ScaleMap + Шкала - - Edit Value - Изменить значение + Flip + Обратить - - Delete Event - Удалить событие + Dyn + Дин - - Window &Config - + Random + Случайно - - Undo/Redo tools - + Modules + Модули - - Edit tools - Инструменты редактирования + 1 + 1 - - Tempo - Темп + 2 + 2 - - Timesig - Размер + 3 + 3 - - Key - + 4 + 4 - - new tempo - новый темп + enable modul 1 + разрешить модуль 1 - - new signature - новый размер + enable modul 2 + разрешить модуль 2 - - new key - + enable modul 3 + разрешить модуль 3 - - panic - паника + enable modul 4 + разрешить модуль 4 - - transport - транспорт + Preset + Пресет - - Meter - Индикатор + Name: + Имя: - - Time - Время + Comment: + Комментарий: - - Type - Тип + Function + Функция - - Value - Значение + &New + &Новый - - Reposition of the initial tempo and signature events is not allowed - Изменение начального темпа и размера запрещено + create new preset + создать новый пресет - - MusE: List Editor - MusE: Редактор списка событий + &Delete + &Удалить - - Input error, conversion not OK or value out of range - Ошибка ввода, неверная конверсия или значение вне диапазона + delete preset + удалить пресет - - Reposition of tempo and signature events to start position is not allowed! - Изменение темпа и размера запрещено + &Dismiss + &Отклонить - - - MusEGui::ListEdit - - insert Note - вставить Ноту + PresetList + Список пресетов + + + MidiSyncConfigBase - - insert SysEx - вставить SysEx + MusE: Midi Sync + MusE: Midi-синхронизация - - insert Ctrl - Вставить кнтрл + Apply + Применить - - insert Meta - вставить Meta + Ok + ОК - - insert Channel Aftertouch - вставить Channel Aftertouch + Cancel + Отмена - - insert Poly Aftertouch - вставить Poly Aftertouch + MTC + MТC - - &Edit - &Правка + Type: + Тип: - - Cut - Вырезать + 24 + 24 - - Copy - + 25 + 25 - - Paste - Вставить + 30D + 30D - - Delete Events - Удалить события + 30N + 30N - - Window &Config - + Offset: + Смещение: - - Undo/Redo tools - + hour + часов - - Insert tools - Инструменты для вставки + h + ч - - panic - паника + minute + минут(а) - - transport - транспорт + m + м - - Tick - Тик + second + секунд(а) - - Bar - Такт + s + с - - Type - Тип + frame + фреймов - - Ch - Кан + f + ф - - Val A - Знач. А + subframe + субфреймов - - Val B - Знач. B + Sync receiving and sending + Получение и отправление синхронизации - - Val C - Знач. С + Send and receive Jack transport + Отсылать и получать транспорт "Jack" - - Len - Дл + Send and receive Jack transport information, + including stop, start and position. + Отсылать и получать информацию с транспорта +"Jack", стоп, старт, и позицию. - - Comment - Комментарий + Use Jack transport + Использовать транспорт "Jack" - - - MusEGui::MPConfig - - - Default input connections - + Make MusE the Jack transport Timebase Master + Сделать MusE Мастером Базы времени для транспорта "Jack" - - - Are you sure you want to apply to all existing midi tracks now? - + Make MusE the Jack transport Timebase Master. +Allows Jack to show time as + MusE Bars, Beats, and Ticks. +MusE will try to become master, but other + Jack clients can also take over later. +You can always click here again for Master. + Сделать MusE Мастером Базы времени для транспорта "Jack" +Позволяет "Jack" показывать время как в "MusE", +то есть Такты, Доли и Тики. MusE будет пытаться стать Мастером, +но другие клиенты могут позже взять верх. Вы должны каждый раз +щелкнуть здесь, чтобы MusE снова стал Мастером. - - - Default output connections - + Jack transport Timebase Master + Мастер Базы времени транспорта "Jack" - - - Setting will apply to new midi tracks. -Do you want to apply to all existing midi tracks now? - + Control MusE timing by external midi clock or MTC sync + Контролировать Muse через внешний midi-clock или MTC синхр - - MusE: bad device name - MusE: неверное имя устройства + When in slave mode, tempo is + controlled externally. +MusE can sync to midi clock, or MTC quarter frame sync. +Enabled inputs in the list will + be in effect (RMC, RMMC, RMTC). + В режиме ведомого темп контролируется +извне. MusE может синхр. с midi-clock, или с +четверть-фреймовой синхр. MTC. Разрешенные +входы в списке будут задействованы. (RMC, RMMC, RMTC). - - please choose a unique device name - пожалуйста выберите неповторяющееся имя для устройства + Slave to external sync + Ведомый для внешней синхронизации - - - in - в + Send start to first clock delay + Посылать "старт" первой задержке "clock" - - - out - вне (из) + Allows 'slow sync' devices time + to synchronize to MusE. This value is the + delay from sending start to sending + the first clock. + Позволяет "медленно синхр." устройствам +синхронизироваться с MusE. Это значение +является задержкой от посылки старта до +посылки первого "clock". - - Show first aliases - Показать первые псевдонимы + ms + мс - - Show second aliases - Показать вторые псевдонимы + Send sync delay + Посылать синхр. задержку - - - Toggle all + Note: Sync delay and MTC sync currently not fully implemented + + + MidiTrackInfoBase - - - Change all tracks now - + MusE: TrackInfo + MusE: Трек Инфо - Create - Создать + output channel + канал выхода - device - устройство + % + % - - Create Jack device - + output port + порт выхода - - - Port Number - Номер порта + off + выкл - - Enable gui - Разрешить ГИП + Transp. + Трансп. - - Enable reading - Разрешить чтение + Channel Info + Канал-инфо - - Enable writing - Разрешить запись + Rec: + Зап: - - Port instrument - Инструмент, назначенный на порт + Prog + Прог - - Midi device name. Click to edit (Jack) - Имя midi-устройства. Щелкните для редактирования (Jack) + Vol + Громк - - Connections from Jack Midi outputs - Соединения от midi-выходов Jack + Pan + Пан - - Connections to Jack Midi inputs - Соединения к midi-входам Jack + Delay + Задержка - - Auto-connect these channels to new midi tracks - + H-Bank + H-банк - - Auto-connect new midi tracks to these channels - + Compr. + Компр. - - Auto-connect new midi tracks to this channel - + L-Bank + L-банк - - Device state - Состояние устройства + Velocity + Скорость нажатия - - Enable gui for device - Разрешить ГИП для устройства + Length + Длина - - Enable reading from device - Разрешить чтение с устройства + all midi events are sent to this output channel + все midi-события посланы на этот канал выхода - - Enable writing to device - Разрешить запись на устройство + Out ch + Вых кан - - Name of the midi device associated with this port number. Click to edit Jack midi name. - Имя midi-устройства связано с номером порта "Jack". Щелкните, чтобы редактировать его. + input routing + маршрут входа - - Instrument connected to port - Инструмент, подсоединённый к порту + output routing + маршрут выхода - - Connections from Jack Midi output ports - Соединения от выходных midi-портов Jack + input detect + активность входа - - Connections to Jack Midi input ports - Соединения с входными midi-портами Jack + Input detect indicator. Detects all note on-off, controller, aftertouch, + program change, and pitchbend (but not sysex or realtime) events + on the selected channels, on the selected midi ports. + Индикатор активности входа. Обнаруживает ноты, контроллеры, смену программы, и изменение высоты тона (но не sysex или realtime) на +выбранных каналах выбранных midi-портов. - - Auto-connect these channels, on this port, to new midi tracks. - + W + W - - Connect new midi tracks to these channels, on this port. - + Midi thru + Сквозной midi-канал - - Connect new midi tracks to this channel, on this port. - + Pass input events through ('thru') to output. + Пропускать входные события через сквозной канал на выход. - - State: result of opening the device - Состояние: результат открытия устройства + Select instrument patch + Выбрать патч инструмента - - Port - Порт + <unknown> + <неизвестно> - - GUI - ГИП + Add all settings to song + Добавить все настройки в проект - - I - Вх + All + Все - - O - Вых + Add bank + prog settings to song + Добавить банк и программу в проект - - Instrument - Инструмент + Add vol setting to song + Добавить настройки громк. в проект - - Device Name - Имя устройства + Add pan setting to song + Добавить настройки панорамы в проект - - In routes - Маршруты входа + Bank Select MSB. Ctrl-double-click on/off. + - - Out routes - Маршруты выхода + Bank Select LSB. Ctrl-double-click on/off. + - - Def in ch - вх кан по ум + Program. Ctrl-double-click on/off. + - - Def out ch - вых кан по ум + Volume. Ctrl-double-click on/off. + - - State - Состояние + Change stereo position. Ctrl-double-click on/off. + + + + MidiTransformDialogBase - - <unknown> - <неизвестно> + MusE: Midi Transformator + MusE: Преобразователь MIDI-сообщений - - - <none> - <ничего> + &New + &Новая - - - MusEGui::MTScale - - bar scale - + &Delete + У&далить + + + &Apply + &Применить + + + &OK + &ОК - - - MusEGui::MTScaleFlo - - bar scale - + &Cancel + &Отмена - - - MusEGui::MarkerView - - MusE: Marker - MusE: Маркер + PresetList + Список пресетов - - add marker - добавить маркер + Processing + Обработка - - delete marker - удалить маркер + Event Type + Тип события - - &Edit - &Правка + Keep + Сохранить - - Window &Config - + Fix + Исправить - - Undo/Redo tools - + Note + Нота - - edit tools - инструменты редактирования + Poly Pressure + Полифоническое нажатие - - panic - паника + Control Change + Смена контроллера - - transport - транспорт + Aftertouch + Посленажатие - - Bar:Beat:Tick - Такт:Доля:Тик + Pitch Bend + Смена высоты тона - - Hr:Mn:Sc:Fr:Sf - Чс:Мин:Сек:Фрм:Субфрм + NRPN + NRPN - - Lock - Закрыть + RPN + RPN - - Text - Текст + Plus + Плюс - - Marker Properties - Свойства маркера + Minus + Минус - - - MusEGui::MasterEdit - - MusE: Mastertrack - MusE: Мастер-трек + Multiply + Умножить - - Window &Config - + Divide + Разделить - - Undo/Redo tools - + Value 2 + Значение 2 - - panic - паника + Invert + Инвертировать - - transport - транспорт + ScaleMap + Шкала - - Enable master - Разрешить мастер(а) + Flip + Обратить - - Enable - Разрешить + Dyn + Дин - - Enable usage of master track - Разрешить использование мастер-трека + Random + Случайно - - Info - Инфо + Value 1 + Значение 1 - - Cursor - Курсор + Length + Длина - - time at cursor position - время в позиции курсора + Position + Позиция - - tempo at cursor position - темп в позиции курсора + Filter + Фильтр - - Off - + All + Все - - Bar - Такт + Equal + Равные - - Snap - Привязка + Unequal + Не равные - - CurPos - КурсПоз + Ignore + Игнорировать - - tempo at current position - темп в текущей позиции + Higher + Выше - - time signature at current position - размер в текущей позиции + Lower + Ниже - - - MusEGui::MidiInputTransformDialog - - - New - Новый + Inside + Внутри - - - MusEGui::MidiStrip - - - - off - выкл + Outside + Вне - - - double click on/off - двойной щелчок вкл/выкл + Bar Range + Диапазон тактов - - VariationSend - Вариационный посыл + Preset + Пресет - - Var - Вар + Name: + Имя: - - ReverbSend - Посыл Реверберации + Comment: + Комментарий: - - Rev - Ревер + Range + Диапазон - - ChorusSend - Посыл Хоруса + process all events + обработать все события - - Cho - Хорус + selected tracks + выделенные треки - - dB - + inside loop + Внутри цикла - - Pan/Balance - Пан/Баланс + Function + Функция - - Pan - Пан + Select + Выделить - - record - + Quantize + Квантовать - - mute - заглушить + Delete + Удалить - - solo mode - режим соло + Transform + Преобразовать - - iR - вх + Insert + Вставить - - input routing - маршрут входа + Copy + Скопировать - - oR - вых + Extract + Извлечь - - output routing - маршрут выхода + Quantize Value + Значение квантования - MusEGui::MidiSyncConfig + MixdownFileDialogBase - - - Port Number - Номер порта + MusE: Set Mixdown Wavefile + MusE: Настроить параметры Wave-файла - - - Name of the midi device associated with this port number - Имя MIDI-устройства, ассоциированного с номером этого порта + &OK + &OK - - Midi clock input detected - Обнаружен вход midi-clock + &Cancel + О&тменить - - - Midi tick input detected - Обнаружен вход midi-тика + File Path + Путь к файлу - - Midi real time input detected - Обнаружен midi-вход реального времени + Channel + Канал - - MMC input detected - Обнаружен вход MMC + Stereo + Стерео - - MTC input detected - Обнаружен вход MTC + Mono + Моно - - Detected SMPTE format - Обнаруженые SMPTE форматы + 5.1 + 5.1 - - Receive id number. 127 = Global. Double click to edit. - Получить id номер. 127 = Глобально. Двойной щелчок для редактирования. + wav,16 Bit + wav, 16 бит - - Accept midi clock input - Принять вход Midi-clock + wav, 24 Bit + wav, 24 бита - - Accept midi real time input - Принять midi-вход реального времени + wav, 32 Bit (float) + wav, 32 бита (float) - - Accept MMC input - Принять вход MMC + Format + Формат + + + MoveBase - - Accept MTC input - Принять вход MTC + MusE: Move Notes + MusE: Сдвинуть ноты - - Receive start rewinds before playing - Получить перед воспроизведением сообщение о начале перемотки + Range + Диапазон - - Transmit id number. 127 = Global. Double click to edit. - Передать номер id. 127 = Общий. Двойной щелчок для редактирования. + All Events + Все события - - Send midi clock output - Послать выход midi-clock + Selected Events + Выбранные события - - Send midi realtime output - Послать midi-выход реального времени + Looped Events + События в цикле - - - Send MMC output - Послать выход MMC + Selected Looped + Выбранные в цикле - - - Send MTC output - Послать выход MTC + Value + Значение - - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - Обнаружен вход midi-clock. -Фактически используемый -текущий порт - красный. -Щелкните, чтобы принудительно -использовать порт. + Move by + Сдвинуть на - - Midi realtime input detected, including - start/stop/continue, and song position. - Обнаружен midi-вход реального времени, -с "старт/стоп/продолжить" и позицией проекта. + ticks + тик(а, ов) - - MMC input detected, including stop/play/deferred play, and locate. - Обнаружен MMC-вход c "старт/стоп/отложенное воспроизведение" - и локацией. + OK + OK - - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - Обнаружен MTC-вход, с четверть-фреймовой -синхронизацией и полно-фреймовой локацией. -Фактически используемый -текущий порт - красный. -Щелкните, чтобы принудительно -сделать порт текущим. + Cancel + Отмена + + + MusECore::Song - - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - Обнаруженые форматы SMPTE: 24fps, 25fps, 30fps с пропущенным -фреймом, или 30fps без пропущенного фрейма -Обнаруживает MTC-формат четверть и полно-фреймовый, и MMC локацию. + Jack shutdown! + Jack прекратил работу! - - Receive id number. 127 = global receive all, even if not global. - Получить номер id. 127 =глобальный получает все, даже если не глобальный. + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + Проблемы в работе "Jack", привели к его рассоединению с "MusE". +Это могло произойти по разным причинам: +-проблемы в работе, вызванные особенностью ваших настроек. +-баг в "MusE" (или, возможно, в других подсоединенных программах). +-случайное выключение, которое больше никогда не повторится. +-"Jack" остановлен вами или кем-нибудь еще. +-"Jack" рухнул +Если это постоянная проблема мы приглашаем вас обсудить её +в почтовой рассылке "MusE". +(в меню "Помощь" есть информация о том, как присоединиться +к почтовой рассылке "MusE") + +Чтобы продолжить работу, проверте состояние "Jack", постарайтесь +перезапустить его, а затем щелкните по кнопке "Перезапустить". + + - - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. - Принять вход midi-clock. Только один вход используется для "clock". -Авто-получение: если разрешены два или более входов реального времени на порт, то будут использован первый обнаруженный "clock", пока он не будет потерян, затем будет использован другой. Самое лучшее, если каждый отключит свой "clock" во время остановки, чтобы MusE снова получил "clock" с другого порта. Щелкните по индикатору обнаружения, чтобы сделать по другому. + Automation: + Автоматизация: - - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. - Принять midi-вход реального времени -с "старт/стоп/продолжить" и позицией проекта. -События "Non-clock" (старт, стоп, и т. п.) принимаются -ВСЕМИ разрешенными портами. Это означает, что вы -можете иметь несколько подсоединенных мастер-устройств, -и MusE примет вход от них. + previous event + предыдущее событие - - Accept MMC input, including stop/play/deferred play, and locate. - Принять вход MMC, с "стоп/старт/отложенным воспроизведением" и локацией. + next event + следующее событие - - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - Принять вход MTC, с четверть-фреймовой -синхронизацией и полно-фреймовой локацией. -См. колонку "rc" для получения помощи. + set event + настроить событие - - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - Когда сообщение "старт" получено, перемотать перед -воспроизведением. Примечание: может быть -так, что перемотка окажется недостаточно быстрой -для синхронизации с внешним устройством. + add event + добавить событие - - Transmit id number. 127 = global transmit to all. - Передавать номер id. 127 =общая передача для всех. + erase event + стереть событие - - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - Посылать выход midi-clock. Если выбрано "Slave to External Sync", -то MusE может снова передать "clock" на любой другой выбранный порт. + erase range + стереть диапазон - - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - Послать midi-выход реального времени, с "старт/стоп/продолжить" -и позицией проекта. Если выбрано "Slave to External Sync", -то MusE может снова передать сообщения с midi-входа реального -времени на любой другой выбранный порт. Это значит, что вы можете -иметь несколько присоединенных ведомых устройств, и MusE может снова послать сообщения реального времени на любое из них или на все. + clear automation + очистить автоматизацию - - Port - Порт + Clear all controller events? + Очистить все события контроллеров? - - Device Name - Имя устройства + &Ok + &ОК - - c - c + &Cancel + &Отмена - - k - k + MusE - external script failed + MusE - ошибка запуска внешнего скрипта - - r - r + MusE was unable to launch the script, error message: +%1 + MusE не смог запустить скрипт, ошибка: +%1 - - m + Midi control - - t - t + Assign + - - type - тип + Clear + - - rid - rid + MusE: Tempo list + - - rc - rc + External tempo changes were recorded. +Transfer them to master tempo list? + + + + MusEGui::Appearance - - rr - rr + Main application font, and default font for any + controls not defined here. + Главный шрифт приложения, и шрифт по умолчанию +для кнопок управления, назначаются не здесь. - - rm - rm + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + Линейки микшера и рэки эффектов. Инфо-панель Midi-трека. +Окно ввода контрольной панели Midi. - - rt - rt + Transport controls. + Контроль транспорта. - - rw - rw + Time scale upper, and time signature. +Controller graph and S/X buttons. + Шкала времени вверху и тактовый размер. +Графы контроллеров и кнопки S/X. - - tid - tid + Time scale lower, and arranger part name overlay. + Шкала времени внизу и название партии. - - tc - tc + Tempo scale, and markers. + Шкала темпа и маркеры. - - tr - tr + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + Надписи в микшере. Авто-размер шрифта до выбр. +размера. Разрыв слов - только пробелом. - - tm - tm + Maximum mixer label auto-font-sizing font size. + Максимальный размер авто-шрифта для надписей в микшере. - - tt - tt + Global opacity (opposite of transparency). + Общая непрозрачность (в противоположность прозрачности). - - MusE - MusE + Standard + Стандартный - - Settings have changed -Apply sync settings? - Настройки изменились -Применить настройки синхронизации? + Custom + По выбору - - &Apply - &Применить + MusE: load image + MusE: загрузить изображение - - &No - &Нет + Select style sheet + Выберите стиль - - &Abort - &Отмена + Qt style sheets (*.qss) + Таблицы стилей Qt (*.qss) - - <none> - <ничего> + Keep Qt system style + - MusEGui::MidiTrackInfo + MusEGui::Arranger - - - <unknown> - <неизвестно> + Enable Recording + Разрешить запись - - - MusEGui::MidiTransformerDialog - - - New - Новый + Mute/Off Indicator + Без звука - - - MusEGui::MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Файлы Wave (*.wav);;Все файлы (*) + Solo Indicator + Соло - - - MusEGui::MusE - - - Failed to start audio! - Не могу воспроизводить аудио! + Track Type + Тип трека - - Was not able to start audio, check if jack is running. - - Не могу воспроизводить аудио, проверте работает ли "Jack". - + Track Name + Имя трека - - Timeout waiting for audio to run. Check if jack is running. - - Ожидание запуска аудио. Проверте, работает ли "Jack". - + Midi output channel number or audio channels + Номер выходного Midi-канала или аудио каналов - - Und&o - &Отменить действие + Midi output port or synth midi port + Выходной midi-порт или midi-порт синтезатора - - Re&do - &Повторить + Time Lock + Блокировка времени - - undo last change to song - отменить последнее изменение в проекте + Automation parameter selection + Выбор параметра автоматизации - - redo last undo - повторить последнюю отмену + Notation clef + Ключ нотации - - Loop - Цикл + Enable recording. Click to toggle. + Разрешить запись. Щелкните для переключения. - - loop between left mark and right mark - цикл между левым и правым маркерами + Mute indicator. Click to toggle. +Right-click to toggle track on/off. +Mute is designed for rapid, repeated action. +On/Off is not! + Индикатор "Без звука". Щелкните для переключения. +Щелчок правой кнопкой мыши включает/выключает трек. +Индикатор "Без звука" предназначен для быстрых, повторных +действий. А Вкл/Выкл нет! - - Punchin - Начало врезки + Solo indicator. Click to toggle. +Connected tracks are also 'phantom' soloed, + indicated by a dark square. + Индикатор Соло. Щелкните для переключения. +Все треки, связанные с этим треком тоже перейдут режим "фантомного" соло, +Они будут обозначены темными квадратами. - - record starts at left mark - запись начинается с левого маркера + Track type. Right-click to change + midi and drum track types. + Тип трека. Щелкните правой кнопкой мыши чтобы +изменить тип трека (midi-трек или трек ударных). - - Punchout - Конец врезки + Track name. Double-click to edit. +Right-click for more options. + Имя трека. Редактирование - двойной щелчок. +Большее количество опций - правый щелчок мыши. - - record stops at right mark - запись останавливается на правом маркере + Midi/drum track: Output channel number. +Audio track: Channels. +Mid/right-click to change. + Трек Midi/Ударных: номер канала выхода. +Аудио трек: Каналы. +Чтобы изменить, щелкните Средней/Правой кнопкой мыши. - - Start - + Midi/drum track: Output port. +Synth track: Assigned midi port. +Left-click to change. +Right-click to show GUI. + Трек Midi/Ударных: Порт выхода. +Трек синтезатора: Назначенный midi-порт. +Щелчок левой кнопкой - изменить. +Щелчок правой кнопкой - показать ГИП. - - rewind to start position - перемотать к начальной позиции + Time lock + Блокировка времени - - Rewind - Перемотать назад + Notation clef. Select this tracks notation clef. + Ключ нотации. Выберите ключ для этого трека. - - rewind current position - перемотать к текущей позиции + Arranger + Компоновщик - - Forward - Перемотать вперёд + Cursor + Курсор - - move current position - переместить текущую позицию + Off + Выкл - - Stop - Остановить + Bar + Такт - - stop sequencer - остановить секвенсер + Snap + Привязка - - Play - Воспроизвести + Len + Дл - - start sequencer play - начать воспроизведение в секвенсере + song length - bars + длина проекта - в тактах - - Record - Записать + Type + Тип - - to record press record and then play - чтобы начать запись нажмите "запись", а затем "воспроизвести" + NO + NO + + + GM + GM - - - Panic - Паника + GS + GS - - send note off to all midi channels - послать сообщение "note off" на все midi-каналы + XG + XG - - &New - + midi song type + тип midi-проекта - - - Create New Song - Создать новый проект + Pitch + Высота тона - - &Open - &Открыть + midi pitch + midi высотность - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Щелкните по этой кнопке для открытия другого проекта. Вы также можете выбрать пункт Открыть в меню "Файл". + global midi pitch shift + общий сдвиг midi-высотности - - Open &Recent - Открыть &Недавние + Tempo + Темп - - - - &Save - &Сохранить + midi tempo + midi-темп - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Щелкните по этой кнопке для сохранения проекта. Будет предложено ввести имя файла. -Вы также можете выбрать пункт "Сохранить" в меню "Файл". + N + N - - Save &As - Сохранить &Как + TrackInfo + ТрекИнфо - - Import Midifile - Импортировать MIDI-файл + R + R - - Export Midifile - Экспортировать MIDI-файл + M + M - - Import Part - Импортировать Партию + S + S - - - Import Wave File - Импортировать WAV-файл + C + Т - - Find unused wave files - + Track + Трек - - &Quit - Вы&йти + Port + Порт - - Song Info - Проект инфо + Ch + Кан - - Transport Panel - Панель транспорта + T + Т - - Bigtime Window - Окно хронометра + Automation + Автоматизация - - Mixer A - Микшер А + Clef + Ключ + + + MusEGui::ArrangerView - - Mixer B - Микшер В + MusE: Arranger + MusE: Компоновщик - - Cliplist - Список фрагментов + C&ut + &Вырезать - - Marker View - Маркеры + &Copy + С&копировать - - Arranger View - + Copy in range + Копировать диапазон - - Fullscreen - + &Paste + &Вставить - - &Plugins - &Плагины + Paste (show dialog) + Вставить (показать диалог) - - Edit Instrument - Редактировать Инструмент + Paste c&lone + Вставить к&лон - - Input Plugins - Плагины на входе + Paste clone (show dialog) + Вставить клон (показать диалог) - - Transpose - Транспонировать + &Insert Empty Measure + &Вставить пустой такт - - Midi Input Transform - Преобразование входящих MIDI-сообщений + Delete Selected Tracks + Удалить выделенные треки - - Midi Input Filter - Фильтр входящих MIDI-событий + Duplicate Selected Tracks + Дублировать выбранные треки - - Midi Remote Control - Дистанционное управление MIDI + Shrink selected parts + Сжать выбранные партии - - Rhythm Generator - Генератор Ритма + Expand selected parts + Расширить выбранные партии - - Reset Instr. - Перезагрузить Инстр. + Clean selected parts + Очистить выбранные партии - - Init Instr. - Запустить Инстр. + Add Track + Добавить трек - - Local Off - откл. локальное управление + Select + Выделить - - Bounce to Track - Свести в трек + Select &All + Выделить &Всё - - Bounce to File - Свести в файл + &Deselect All + &Снять выделение - - Restart Audio - Перезапустить аудио + Invert &Selection + Инвертировать &Выделенное - - Mixer Automation - Автоматизация микшера + &Inside Loop + &Внутри цикла - - Take Snapshot - Сделать снимок + &Outside Loop + &Вне цикла - - Clear Automation Data - Удалить Данные Автоматизации + All &Parts on Track + Все &Партии в Треке - - Cascade - + Score + Партитура - - Tile - + all tracks in one staff + все треки на один стан - - In rows - + one staff per track + один трек на стан - - In columns - + New score window + Окно новой партитуры - - Global Settings - Общие настройки + Pianoroll + Пианоролл - - Configure Shortcuts - Настроить горячие клавиши + Drums + Ударные - - Follow Song - следовать за проектом + List + Список - - Don't Follow Song - не следовать за проектом + Wave + Wave - - Follow Page - следовать постранично + Mastertrack + Мастер-трек - - Follow Continuous - следовать плавно + Graphic + График - - Metronome - Метроном + Midi &Transform + &Трансформация MIDI - - Midi Sync - MIDI-синхр + Global Cut + Общая вырезка - - Midi File Import/Export - Импорт/Экспорт midi-файла + Global Insert + Общая вставка - - Appearance Settings - Настройки вида + Global Split + Общее разделение - - Midi Ports / Soft Synth - MIDI-порты / Прогр. синтезаторы + Global Cut - selected tracks + Общая вырезка - выбр. треки - - &Manual - &Руководство + Global Insert - selected tracks + Общая вставка - выбр. треки - - &MusE Homepage - &Домашняя страница MusE + Global Split - selected tracks + Общее разделение - выбр. треки - - &Report Bug... - &Сообщить об ошибке... + &Edit + &Правка - - &About MusE - &О программе MusE + &Structure + &Структура - - File Buttons - Файловые кнопки + Functions + Функции - - Undo/Redo - + &Quantize Notes + &Квантовать ноты - - Transport - Транспорт + Change note &length + Изменить длину &ноты - - &File - &Файл + Change note &velocity + Изменить скорость нажатия &ноты - - &View - &Вид + Crescendo/Decrescendo + Крещендо/Диминуэндо - - &Midi - &MIDI + Transpose + Транспонировать - - &Audio - &Аудио + Erase Events (Not Parts) + Удалить события (не партии) - - A&utomation - + Move Events (Not Parts) + Передвинуть события (не партии) - - &Windows - + Set Fixed Note Length + Установить фикс. длину ноты - - MusE Se&ttings - + Delete Overlapping Notes + Удалить наложения - - &Help - + Legato + Легато - - Cannot read template - Не могу прочитать шаблон + Window &Config + &Конфигурация окна - - File open error - Ошибка при открытии файла + New + Новый - - File read error - Ошибка прочтения файла + Configure &custom columns + - - Unknown File Format: %1 + Changed Settings - - - - MusE: Song: %1 + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) + + + MusEGui::AudioMixerApp - - MusE: load project - MusE: Открыть проект + &Create + &Создать - - MusE: load template - MusE: открыть шаблон + &View + &Вид - - MusE: Write File failed - + Routing + Маршрутизация - - The current Project contains unsaved data -Save Current Project? - Текущий проект содержит не сохранённые данные. -Сохранить текущий проект? + Show Midi Tracks + Показать Midi-треки - - - S&kip - + Show Drum Tracks + Показать треки ударных - - &Cancel - + Show Wave Tracks + Показать Wave-треки - - MusE: Save As - MusE: Сохранить как + Show Inputs + Показать входы - - - Nothing to edit - Нечего редактировать + Show Outputs + Показать выходы - - - - - - MusE: Bounce to Track - MusE: Сведение в Трек + Show Groups + Показать Группы - - No wave tracks found - wave-треки не найдены + Show Auxs + Показать Auxs - - - No audio output tracks found - Выходные аудио треки не найдены + Show Synthesizers + Показать синтезаторы + + + MusEGui::AudioStrip - - Select one audio output track, -and one target wave track - Выберите один трек аудио выхода -и один wave-трек, как цель + panorama + панорама - - Select one target wave track - Выделите один wave-трек, как цель (трек назначения) + aux send level + уровень aux посыла - - Select one target wave track, -and one audio output track - Выберите один wave-трек, как цель, -(трек назначения) и один трек аудио выхода + Pan + Пан - - - MusE: Bounce to File - MusE: Свести в файл + 1/2 channel + стерео-моно - - Select one audio output track - Выделите один трек аудио выхода + Pre + Пре - - MusE: Bounce - MusE: Свести + pre fader - post fader + пре федер - пост федер - - set left/right marker for bounce range - настройте левый/правый маркеры для установки диапазона сведения + dB + дБ - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Текущий проект содержит не сохранённые данные. -Загрузка нового проекта приведёт к перезаписи данных текущего проекта. -Сохранить текущий проект? + record + запись - - - &Abort - &Отмена + mute + без звука - - MusE: Export Midi - MusE:Экспорт MIDI + record downmix + записать микс - - no help found at: - справка не найдена в: + solo mode + соло - - MusE: Open Help - MusE: Открыть справку + off + выкл - - Unable to launch help - + input routing + маршрут входа + + + output routing + маршрут выхода - - For some reason MusE has to launch the default -browser on your machine. - + Off + Выкл - - MusE: Import Midi - MusE: Импорт MIDI + Read + Читать - - Add midi file to current project? - - Добавить midi файл в текущий проект? - + Touch + По касанию - - &Add to Project - &Добавить в Проект + Write + Писать - - &Replace - &Заменить + automation type + тип автоматизации + + + MusEGui::BigTime - - reading midifile - - читается MIDI-файл - - + format display + формат дисплея - - -failed: - -не удалось: + bar + такт - - Import part is only valid for midi and wave tracks! - Импортирование партий допустимо только для midi и wave треков! + beat + доля - - MusE: load part - MusE: открыть партию + tick + тик - - No track selected for import - Не выбран трек для импорта + minute + минут(а) - - - %n part(s) out of %1 could not be imported. -Likely the selected track is the wrong type. - - - + + second + секунд(а) - - - %n part(s) could not be imported. -Likely the selected track is the wrong type. - - - + + frame + фреймов - - to import an audio file you have first to selecta wave track - чтобы импортировать аудио файл, вы должны сначала выделить wave-трек + subframe + субфреймов - - Import Wavefile - Импортировать wave-файл + MusE: Bigtime + MusE: Хронометр + + + MusEGui::ClipListEdit - - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? - Samplerate этого wave-файла %1, -в то время как текущий Samplerate %2. -Хотите ли вы импортировать его? + MusE: Clip List Editor + MusE: Редактор списка клипов - - &Yes - &Да + Window &Config + Конфигурация &окна + + + MusEGui::ComboQuant - - &No - &Нет + Off + Выкл - MusEGui::NoteInfo + MusEGui::CtrlCanvas - - Note Info - Информация о ноте + Drawing hint: Hold Ctrl to affect only existing events + Совет: Удерживайте Ctrl, чтобы править только существующие события - - Start - + Use shift + pencil or line tool to draw new events + Используйте shift + карандаш или линию, чтобы рисовать новые события + + + MusEGui::CtrlPanel - - Len - Дл + S + S - - Pitch - Высота тона + select controller + выбрать контроллер - - Velo On - Скор. наж + X + X - - Velo Off - Скор. снятия + remove panel + удалить панель - - - MusEGui::PartCanvas - - Cannot copy/move/clone to different Track-Type - Невозможно копировать/перемещать/клонировать данные в другие типы дорожек + manual adjust + настройка вручную - - C&ut - &Вырезать + off + выкл - - &Copy - С&копировать + Velocity + Скорость нажатия - - s&elect - В&ыбрать + add new ... + Добавить новый... - - clones - клоны + Instrument-defined + Определенный инструментом - - rename - Переименовать + Add ... + Добавить... - - color - цвет + Others + Другие - - delete - удалить + Edit instrument ... + Редактировать инструмент... - - split - разделить + Common Controls + Обычные кнопки - - glue + ctrl-double-click on/off + + + MusEGui::DrumEdit - - de-clone - деклонировать + mute instrument + заглушить инструмент - - - - save part to disk - + sound name + название звука - - wave edit - Редактор семплов + volume percent + громкость в процентах - - file info - файл-инфо + quantisation + квантование - - MusE: save part - MusE: сохранить партию + this input note triggers the sound + эта входящая нота включает звук - - Part name: %1 -Files: - - - - - %n part(s) out of %1 could not be pasted. -Likely the selected track is the wrong type. - - - + note length + длина ноты - - - %n part(s) could not be pasted. -Likely the selected track is the wrong type. - - - + + this is the note which is played + нота, которая воспроизводится - - Cannot paste: multiple tracks selected - Вставка невозможна: выделено несколько треков + output channel (hold ctl to affect all rows) + канал выхода (удерживайте ctrl, чтобы воздействовать на все ряды) - - Cannot paste: no track selected - Вставка невозможна: не выделено ни одного трека + output port (hold ctl to affect all rows) + порт выхода (удерживайте ctrl, чтобы воздействовать на все ряды) - - Can only paste to midi/drum track - Можно вставить только в midi/drum трек + shift + control key: draw velocity level 1 + клавиши shift+control: рисовать уровень 1 скорости нажатия - - Can only paste to wave track - Можно вставить только в звуковой трек + control key: draw velocity level 2 + Клавиша control: рисовать уровень 2 скорости нажатия - - Can only paste to midi or wave track - Можно вставить только в midi или wave треки + shift key: draw velocity level 3 + Клавиша shift: рисовать уровень 3 скорости нажатия - - Cannot paste: wrong data type - Вставка невозможна: неверный тип данных + draw velocity level 4 + рисовать уровень 4 скорости нажатия - - - MusEGui::PasteDialog - - - %n quarter(s) - - - + + output channel (ctl: affect all rows) + канал выхода (ctrl: действует на все ряды) - - %1 quarter - for floating-point arguments like 1.5 - + output port (ctl: affect all rows) + порт выхода (ctrl: действует на все ряды) - - %1 quarters - for floating-point arguments like 1.5 - + &File + &Файл - - - MusEGui::PasteEventsDialog - - - %n quarter(s) - - - + + Load Map + Загрузить карту - - %1 quarter - for floating-point arguments like 1.5 - + Save Map + Сохранить карту - - %1 quarters - for floating-point arguments like 1.5 - + Reset GM Map + Настроить карту GM по умолчанию - - - MusEGui::PianoRoll - &Edit - &Правка + &Правка - - C&ut - &Вырезать + Cut + Вырезать - - &Copy - С&копировать + Copy + Копировать - Copy events in range - + Копировать события в диапазоне - - &Paste - &Вставить + Paste + Вставить - - Paste (with dialog) - + Paste (with Dialog) + Вставить (с диалогом) - - Delete &Events - Удалить &События + Delete Events + Удалить события - &Select - + &Выделить - - Select &All - + Select All + Выделить всё - - &Deselect All - &Убрать выделение + Select None + Снять выделение - - Invert &Selection - + Invert + Инвертировать - - &Inside Loop - &Внутри цикла + Inside Loop + Внутри цикла - - &Outside Loop - &Вне цикла + Outside Loop + Вне цикла - - &Previous Part - &Предыдущая партия + Previous Part + Предыдущая партия - - &Next Part - &Следующая партия + Next Part + Следующая партия - Fu&nctions - + &Функции - - Quantize - Квантовать + Re-order list + Изменить порядок списка - - Modify Note Length - + Set Fixed Length + Установит Фиксир. Длину - Modify Velocity - + Изменить Скорость наж - Crescendo/Decrescendo - + Крещендо/Диминуэндо - - Transpose - Транспонировать + Quantize + Квантовать - - Erase Events - + Erase Event + Удалить событие - Move Notes - - - - - Set Fixed Length - + Передвинуть ноты - Delete Overlaps - Удалить наложения - - - - Legato - - - - - &Plugins - &Плагины - - - - Window &Config - + Удалить наложения - - &Event Color - &Цвет события + &Plugins + &Плагины - - &Blue - &Синий + Window &Config + Конфигурация &окна - - &Pitch colors - &Цвета высоты тона + Drum tools + Инструменты ударных - - &Velocity colors - &Цвета скорости нажатия + Load Drummap + Загрузить карту ударных - - Pianoroll tools - Инструменты пианоролла + Store Drummap + Сохранить карту ударных - Step Record - Пошаговая запись + Пошаговая запись - Midi Input - MIDI-вход - - - - Play Events - Воспроизвести события + MIDI-вход - - panic - паника + cursor tools + инструменты курсора - - transport - транспорт + Set step size for cursor edit + Установить размер шага для курсора - ctrl - + ctrl - Add Controller View - + Добавить панель - - - MusEGui::PluginDialog - - MusE: select plugin - MusE: выбрать плагин + M + M - - Lib - Библ. + Sound + Звук - - Label - Метка + Vol + Громк - - Name - Имя + QNT + КВНТ - - AI - AI + E-Note + E-Нота - - AO - AO + Len + Дл - - CI - CI + A-Note + A-Нота - - CO - CP + Ch + Кан - - IP - IP + Port + Порт - - id - id + LV1 + УР1 - - Maker - Создатель + LV2 + УР2 - - Copyright - Copyright + LV3 + УР3 - - Ok - + LV4 + УР4 - - Cancel - Отмена + Muse: Load Drum Map + Muse: Загрузить карту ударных - - Mono and Stereo - Моно и Стерео + MusE: Store Drum Map + Muse: Сохранить карту ударных - - Stereo - Стерео + Drum map + Карта ударных - - Mono - Моно + Reset the drum map with GM defaults? + Сбросить карту ударных на GM? + + + MusEGui::EditCAfterDialog - - Show All - Показать Все + MusE: Enter Channel Aftertouch + MusE: Ввести Channel Aftertouch - - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - Выберите типы плагинов, которые будут видны в списке.<br>Обратите внимание, что можно использовать моно плагины в стерео треках, два будут использованы параллельно.<br>Также будте осторожны с плагинами категории "все" альтернативные, возможно их нельзя использовать в MusE. + Time Position + Позиция по времени - - Search in 'Label' and 'Name': - Искать по "Меткам" и "Именам": + Pressure + Давление - MusEGui::PluginGui - - - File Buttons - Файловые кнопки - + MusEGui::EditEventDialog - - Load Preset - Загрузить пресет + Ok + Ok - - Save Preset - Сохранить пресет + Cancel + Отмена + + + MusEGui::EditInstrument - - - bypass plugin - обойти плагин + MusE: Create file failed + MusE: Не удалось создать файл - - MusE: load preset - MusE: загрузить пресет + MusE: Write File failed + MusE: Не удалось записать файл - - Error reading preset. Might not be right type for this plugin - Ошибка прочтения пресета. Возможно неверный тип для этого плагина + MusE: Save Instrument Definition + MusE: Сохранить Определение Инструмента - - MusE: save preset - MusE: сохранить пресет + Instrument Definition (*.idf) + Определение инструмента (*.idf) - - - MusEGui::ProjectCreateImpl - - Select directory - + MusE: Save instrument as + MusE: Сохранить инструмент как - - - MusEGui::RoutePopupMenu - - - - - - - - - Channel - Канал + Enter a new unique instrument name: + Введите неповторяющееся имя инструмента: - - - - Soloing chain - + The user instrument '%1' already exists. This will overwrite its .idf instrument file. +Are you sure? + Инструмент пользователя '%1' уже существует. Файл инструмента .idf будет +переписан. Вы уверены? - - - Audio returns - + MusE: Bad instrument name + MusE: Неверное имя инструмента - - Warning: No input devices! - + Please choose a unique instrument name. +(The name might be used by a hidden instrument.) + Пожалуйста, выберите неповторяющееся имя для инструмента. +(Имя может использоваться в скрытых инструментах) - - Open midi config... - + MusE: Bad patch name + MusE: Неверное имя патча - - - <none> - <ничего> + Please choose a unique patch name + Пожалуйста, выберите неповторяющееся имя патча - - Toggle all - + MusE: Bad patchgroup name + MusE: Неверное имя группы - - More... - + Please choose a unique patchgroup name + Пожалуйста, выберите неповторяющееся имя группы - - Audio sends - + MusE: Bad controller name + MusE: Неверное имя контроллера - - Midi port sends - + Please choose a unique controller name + Пожалуйста, выберите неповторяющееся имя для контроллера - - - MusEGui::ScoreCanvas - - Treble - + MusE: Cannot add common controller + MusE: Невозможно добавить обычный контроллер - - Bass - + A controller named '%1' already exists. + Контроллер '%1' уже существует. - - Grand Staff - + A controller number %1 already exists. + Контроллер номер '%1' уже существует. - - Remove staff - + MusE + MusE - - Ambiguous part - + The current Instrument contains unsaved data +Save Current Instrument? + Текущий Инструмент содержит несохраненные данные +Сохранить Инструмент? - - There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. - + &Save + &Сохранить - - No part - + &Nosave + &Не сохранять - - There are no parts you could add the note to. - + &Abort + &Отмена - MusEGui::ScoreEdit + MusEGui::EditMetaDialog - - Undo/Redo tools - + MusE: Enter Meta Event + MusE: Ввести метасобытие - - Step recording tools - + Time Position + Позиция по времени - - Step Record - Пошаговая запись + Meta Type + Метатип - - panic - паника + Enter Hex + Ввести Hex + + + MusEGui::EditPAfterDialog - - transport - транспорт + MusE: Enter Poly Aftertouch + MusE: Ввести полиф. посленажатие - - Note settings - + Time Position + Позиция по времени - - Note length: - + Pitch + Высота тона - - last - + Pressure + Давление + + + MusEGui::EditToolBar - - - - Apply to new notes: - + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + выбрать инструмент "Указатель": +при помощи Указателя можно: + выделять партии + перемещать партии + копировать партии - - - Apply to selected notes: - + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + выбрать инструмент "Карандаш": +инструментом Карандаш вы можете: + создавать новые партии + изменять длину партий - - Velocity: - + select Delete Tool: +with the delete tool you can delete parts + выбрать инструмент "Ластик": +инструментом "Ластик" вы можете удалять партии - - Off-Velocity: - + select Cut Tool: +with the cut tool you can split a part + выбрать инструмент "Ножницы": +инструментом Ножницы вы можете резать партию - - Quantisation settings - + select Glue Tool: +with the glue tool you can glue two parts + выбрать инструмент "Клей": +инструментом Клей вы можете соединять партии - - Quantisation: - + select Score Tool: + + выбрать инструмент партитуры: + + - - Pixels per whole: - + select Quantize Tool: +insert display quantize event + выбрать инструмент "Квантование": +квантует отображаемые события - - &Edit - &Правка + select Drawing Tool + выбрать инструмент "Рисование" - - C&ut - &Вырезать + select Muting Tool: +click on part to mute/unmute + выбрать инструмент "Без звука": +Щелкните по партии, чтоб переключать "Без зв./Звук" - - &Copy - С&копировать + Manipulate automation + Управлять автоматизацией - - Copy events in range - + Cursor tool + Инструмент Курсор - - &Paste - &Вставить + pointer + указатель - - Paste (with dialog) - + pencil + карандаш - - Delete &Events - Удалить &События + eraser + ластик - - &Select - + cutter + ножницы - - Select &All - + score + партитура - - &Deselect All - &Убрать выделение + glue + клей - - Invert &Selection - + quantize + квантовать - - &Inside Loop - &Внутри цикла + draw + рисовать - - &Outside Loop - &Вне цикла + mute parts + заглушить партию - - Fu&nctions - + edit automation + править автоматизацию - - &Quantize - + cursor + курсор - - Change note &length - + Edit Tools + Инструменты правки + + + MusEGui::EffectRack - - Change note &velocity - + effect rack + рэк эффектов - - Crescendo/Decrescendo - + new + новый - - Transpose - Транспонировать + change + изменить - - Erase Events - + move up + передвинуть выше - - Move Notes - + move down + передвинуть ниже - - Set Fixed Length - + remove + удалить - - Delete Overlaps - Удалить наложения + bypass + обойти - - Legato - + show gui + показать ГИП - - Window &Config - + show native gui + показать родной ГИП - - Note head &colors - + save preset + сохранить пресет - - &Black - + MusE: Save Preset + MusE: Сохранить Пресет - - &Velocity - + Replace effect + Заменить эффект - - &Part - + Do you really want to replace the effect %1? + Вы действительно хотите заменить эффект %1? + + + MusEGui::GlobalSettingsConfig - - Set up &preamble + MusE: Choose start template or song + + + MusEGui::Header - - Display &key signature - + Track Info Columns + Трек-инфо + + + MusEGui::LMaster - - Display &time signature - + MusE: Mastertrack + MusE: Мастер-трек - - Set Score &name - + &Edit + &Правка - - - Enter the new score title - + Insert Tempo + Вставить темп - - Error - + Insert Signature + Вставить размер - - Changing score title failed: -the selected title is not unique - + Insert Key + Вставить ключ - - - MusEGui::ScrollScale - - next page - след страница + Edit Positon + Изменить позицию - - previous page - пред страница + Edit Value + Изменить значение - - current page number - номер текущей страницы + Delete Event + Удалить событие - - - MusEGui::ShortcutCaptureDialog - - Ok - + Window &Config + Кофигурация &окна - - Cancel - Отмена + Edit tools + Инструменты правки - - Shortcut conflicts with %1 - + Tempo + Темп - - Undefined - Не назначено + Timesig + Размер - - - MusEGui::SigScale - - signature scale - шкала ключей + Key + Ключ - - - MusEGui::Strip - - Remove track? - + new tempo + новый темп - - - MusEGui::TList - - <none> - <ничего> + new signature + новый размер - - visible - + new key + новый ключ - - no clef - + Meter + Индикатор - - Treble - + Time + Время - - Bass - + Type + Тип - - Grand - + Value + Значение - - MusE: bad trackname - MusE: неверное имя трека + Reposition of the initial tempo and signature events is not allowed + Изменение начального темпа и размера запрещено - - please choose a unique track name - Выберите неповторяющееся имя для трека + MusE: List Editor + MusE: Редактор списка - - Unused Devices - + Input error, conversion not OK or value out of range + Ошибка ввода, неверная конверсия или значение вне диапазона - - - Update drummap? - Обновить карту ударных? + Reposition of tempo and signature events to start position is not allowed! + Изменение темпа и размера запрещено! + + + MusEGui::ListEdit - - Do you want to use same port for all instruments in the drummap? - Вы хотите использовать один и тот же порт для всех инструментов в списке ударных? + insert Note + вставить Ноту - - - &Yes - &Да + insert SysEx + вставить SysEx - - - &No - &Нет + insert Ctrl + Вставить кнтрл - - - show gui - показать ГИП + insert Meta + вставить Meta - - - show native gui - показать ГИП + insert Channel Aftertouch + вставить Channel посленажатие - - Treble clef - + insert Poly Aftertouch + вставить Полиф. Посленаж - - Bass clef - + &Edit + &Правка - - Grand Staff - + Cut + Вырезать - - Viewable automation - + Copy + Копировать - - Delete Track - Удалить трек + Paste + Вставить - - Track Comment - Комментарий к треку + Delete Events + Удалить события - - Insert Track - + Window &Config + Конфигурация &окна - - Midi - + Insert tools + Инструменты вставки - - Drum - Ударные + Tick + Тик - - Do you want to use same port and channel for all instruments in the drummap? - Вы хотите использовать один и тот же порт и канал для всех инструментов в списке ударных? + Bar + Такт - - - MusEGui::TempoSig - - Tempo/Sig - Темп/Знаки альтерации + Type + Тип - - - MusEGui::Toolbar1 - - - - Off - + Ch + Кан - - Solo - Соло + Val A + Знач. А - - Cursor - Курсор + Val B + Знач. B - - Snap - Привязка + Val C + Знач. С - - - MusEGui::TopWin - - As subwindow - + Len + Дл - - Shares tools and menu - + Comment + Комментарий + + + MusEGui::MPConfig - - Fullscreen - + Default input connections + Вх. соединения по умолч - - Piano roll - + Are you sure you want to apply to all existing midi tracks now? + Уверены, что хотите применить ко всем существующим midi трекам? - - List editor - + Default output connections + Вых. соединения по умолч - - Drum editor - + Setting will apply to new midi tracks. +Do you want to apply to all existing midi tracks now? + Настройка будет применена к новым midi трекам. +Хотите применить её ко всем уже существующим midi трекам? - - Master track editor - + MusE: bad device name + MusE: неверное имя устройства - - Master track list editor - + please choose a unique device name + пожалуйста, выберите неповторяющееся имя для устройства - - Wave editor - + in + в - - Clip list - + out + вне (из) - - Marker view - + Show first aliases + Показать первые псевдонимы - - Score editor - + Show second aliases + Показать вторые псевдонимы - - Arranger - Компоновщик + Toggle all + Переключить все - - <unknown toplevel type> - + Change all tracks now + Изменить все треки - - - MusEGui::TrackComment - - MusE: Track Comment - MusE: Комментарий к треку + Create Jack device + Создать Jack-устройство - - Track Comment: - Комментарий к треку: + Port Number + Номер порта - - - MusEGui::Transport - - Overdub - Наложить + Enable gui + Разрешить ГИП - - - Replace - Заменить + Enable reading + Разрешить чтение - - Rec Mode - Режим записи + Enable writing + Разрешить запись - - Normal - Норм. + Port instrument + Инструмент - - Mix - Смешать + Midi device name. Click to edit (Jack) + Имя устройства midi. Щелкните для правки (Jack) - - Cycle Rec - Циклич. запись + Connections from Jack Midi outputs + Соединения с midi-выходами Jack - - punchin - + Connections to Jack Midi inputs + Соединения с midi-входами Jack - - loop - цикл + Auto-connect these channels to new midi tracks + Авто-соединение этих каналов с новыми midi-треками - - punchout - + Auto-connect new midi tracks to these channels + Авто-соединение новых midi-треков с этими каналами - - - Punch In - Начало врезки + Auto-connect new midi tracks to this channel + Авто-соединение новых midi-треков с этим каналом - - - Loop - Цикл + Device state + Состояние устройства - - - Punch Out - Конец врезки + Enable gui for device + Разрешить ГИП для устройства - - Left Mark - Левый маркер + Enable reading from device + Разрешить чтение с устройства - - Right Mark - Правый маркер + Enable writing to device + Разрешить запись на устройство - - rewind to start - перемотать к началу + Name of the midi device associated with this port number. Click to edit Jack midi name. + Имя midi-устройства связано с этим номером порта "Jack". Щелкните для правки. - - Click this button to rewind to start position - Щелкните по этой кнопке для перемещения к началу + Instrument connected to port + Инструмент - - rewind - перемотать назад + Connections from Jack Midi output ports + Соединения с выходными midi-портами Jack - - Click this button to rewind - Щелкните по этой кнопке для перемотки назад + Connections to Jack Midi input ports + Соединения с входными midi-портами Jack - - forward - перемотать вперёд + Auto-connect these channels, on this port, to new midi tracks. + Авто-соединение этих каналов, этого порта с новыми midi треками. - - Click this button to forward current play position - Щелкните по этой кнопке для перемещения вперёд + Connect new midi tracks to these channels, on this port. + Соединять новые midi треки с этими каналами, этого порта. - - stop - остановить + Connect new midi tracks to this channel, on this port. + Соединять новые midi треки с этим каналом, этого порта. - - Click this button to stop playback - Щелкните по этой кнопке для остановки воспроизведения + State: result of opening the device + Состояние: результат открытия устройства - - play - воспроизвести + Port + Порт - - Click this button to start playback - Щелкните по этой кнопке, чтобы начать воспроизведение + GUI + ГИП - - record - + I + Вх - - Click this button to enable recording - Щелкните по этой кнопке для активизации режима записи + O + Вых - - AC - AC + Instrument + Инструмент - - quantize during record - квантовать при записи + Device Name + Имя устройства - - Click - Метр. + In routes + Вх. маршруты - - metronom click on/off - Метроном вкл/выкл + Out routes + Вых. маршруты - - Sync - Синхр. + Def in ch + вх кан по ум - - external sync on/off - Вкл/выкл внешн. синхр. + Def out ch + вых кан по ум - - Jack - Jack + State + Состояние - - Jack transport sync on/off - Синхр. транспорта "Jack" вкл/выкл + <unknown> + <неизвестно> - - Master - Мастер + <none> + <ничего> + + + MusEGui::MTScale - - use master track - использовать мастер-трек + bar scale + шкала тактов - MusEGui::VisibleTracks + MusEGui::MTScaleFlo - - - Show wave tracks - + bar scale + шкала тактов + + + MusEGui::MarkerView - - - Show group tracks - + MusE: Marker + MusE: Маркер - - - Show aux tracks - + add marker + добавить маркер - - - Show input tracks - + delete marker + удалить маркер - - - Show output tracks - + &Edit + &Правка - - - Show midi tracks - + Window &Config + Конфигурация &окна - - - Show synth tracks - + edit tools + инструменты правки - - Visible track types - + Bar:Beat:Tick + Такт:Доля:Тик - - - MusEGui::WaveEdit - - &Edit - &Правка + Hr:Mn:Sc:Fr:Sf + Чс:Мин:Сек:Фрм:Субфрм - - Func&tions - Фу&нкции + Lock + Закрыть - - &Gain - &Усиление + Text + Текст - 200% - 200% + Marker Properties + Свойства маркера + + + MusEGui::MasterEdit - 150% - 150% + MusE: Mastertrack + MusE: Мастер-трек - 75% - 75% + Window &Config + Конфигурация &окна - 50% - 50% + Enable master + Разрешить мастер(а) - 25% - 25% + Enable + Разрешить - - Other - Другой + Enable usage of master track + Разрешить использование мастер-трека - - &Copy - С&копировать + Info + Инфо - - C&ut - &Вырезать + Cursor + Курсор - - &Paste - &Вставить + time at cursor position + время в позиции курсора - - Edit in E&xternal Editor - Редактировать во &внешнем редакторе + tempo at cursor position + темп в позиции курсора - - Mute Selection - Заглушить выделенное + Off + Выкл - - Normalize Selection - Нормализовать выделенное + Bar + Такт - - Fade In Selection - Нарастание звука в выделенном + Snap + Привязка - - Fade Out Selection - Затихание звука в выделенном + CurPos + КурсПоз - - Reverse Selection - Перевернуть выделенное + tempo at current position + темп в текущей позиции - - Select - Выделить + time signature at current position + размер в текущей позиции + + + MusEGui::MidiInputTransformDialog - - Select &All - + New + Новый + + + MusEGui::MidiStrip - - &Deselect All - &Убрать выделение + off + выкл - - Window &Config - + VariationSend + Вариационный посыл - - Wave edit tools - Инструменты редактирования Wave + Var + Вар - - transport - транспорт + ReverbSend + Посыл Реверберации - - WaveEdit tools - + Rev + Ревер - - Solo - Соло + ChorusSend + Посыл Хоруса - - Cursor - Курсор + Cho + Хорус - - - MusEGui::WaveView - - MusE - external editor failed - MusE - ошибка запуска внешнего редактора + dB + дБ - - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. - "MusE" не может запустить внешний редактор. -Проверте, действительно ли в: -Общие настройки->Аудио:Внешний редактор -выбран правильный редактор. + Pan/Balance + Пан/Баланс - - MusE - file size changed - MusE - размер файла изменился + Pan + Пан - - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted - При редактировании во внешнем редакторе - не изменяйте размер файла -так как он должен соответствовать выбранной области. - -Утерянные данные заглушены + record + запись - - - MusEMixer::AudioMixerApp - &View - &Вид + mute + без звука - Routing - Маршрутизация + solo mode + соло - Show Midi Tracks - Показать Midi-треки + input routing + маршрут входа - Show Drum Tracks - Показать треки ударных + output routing + маршрут выхода - Show Wave Tracks - Показать Wave-треки + ctrl-double-click on/off + + + + MusEGui::MidiSyncConfig - Show Inputs - Показать входы + Port Number + Номер порта - Show Outputs - Показать выходы + Name of the midi device associated with this port number + Имя MIDI-устройства, ассоциированного с номером этого порта - Show Groups - Показать группы + Midi clock input detected + Обнаружен вход midi-clock - Show Auxs - Показать Auxs + Midi tick input detected + Обнаружен вход midi-тика - Show Synthesizers - Показать синтезаторы + Midi real time input detected + Обнаружен midi-вход реального времени - - - MusEMixer::AudioStrip - panorama - панорама + MMC input detected + Обнаружен вход MMC - aux send level - уровень aux посыла + MTC input detected + Обнаружен вход MTC - Pan - Пан + Detected SMPTE format + Обнаруженые SMPTE форматы - 1/2 channel - стерео-моно + Receive id number. 127 = Global. Double click to edit. + Получить id номер. 127 = Общий. Двойной щелчок - правка. - Pre - Пре + Accept midi clock input + Принять вход Midi-clock - pre fader - post fader - пре федер - пост федер + Accept midi real time input + Принять midi-вход реального времени - mute - заглушить + Accept MMC input + Принять вход MMC - record downmix - записать downmix + Accept MTC input + Принять вход MTC - solo mode - режим соло + Receive start rewinds before playing + Получить перед воспроизведением сообщение о начале перемотки - off - выкл + Transmit id number. 127 = Global. Double click to edit. + Передать номер id. 127 = Общий. Двойной щелчок - правка. - iR - вх + Send midi clock output + Послать выход midi-clock - input routing - маршрут входа + Send midi realtime output + Послать midi-выход реального времени - oR - вых + Send MMC output + Послать выход MMC - output routing - маршрут выхода + Send MTC output + Послать выход MTC - Read - Читать + Midi clock input detected. +Current port actually used is red. +Click to force a port to be used. + Обнаружен вход midi-clock. +Фактически используемый +текущий порт - красный. +Щелкните, чтобы принудительно +использовать порт. - Touch - По касанию + Midi realtime input detected, including + start/stop/continue, and song position. + Обнаружен midi-вход реального времени, +с "старт/стоп/продолжить" и позицией проекта. - automation type - тип автоматизации + MMC input detected, including stop/play/deferred play, and locate. + Обнаружен MMC-вход c "старт/стоп/отложенное воспроизведение" + и локацией. - - - MusEMixer::EffectRack - effect rack - рэк эффектов + MTC input detected, including forward quarter-frame sync and full-frame locate. +Current port actually used is red. Click to force a port to be current. + Обнаружен MTC-вход, с четверть-фреймовой +синхронизацией и полно-фреймовой локацией. +Фактически используемый +текущий порт - красный. +Щелкните, чтобы принудительно +сделать порт текущим. - new - новый + Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detects format of MTC quarter and full frame, and MMC locate. + Обнаруженые форматы SMPTE: 24fps, 25fps, 30fps с пропущенным +фреймом, или 30fps без пропущенного фрейма +Обнаруживает MTC-формат четверть и полно-фреймовый, и MMC локацию. - change - изменить + Receive id number. 127 = global receive all, even if not global. + Получить номер id. 127 =общий получает все, даже если не общий. - move up - сдвинуть выше + Accept midi clock input. Only one input is used for clock. +Auto-acquire: If two or more port realtime inputs are enabled, + the first clock detected is used, until clock is lost, + then another can take over. Best if each turns off its clock + at stop, so MusE can re-acquire the clock from another port. +Click on detect indicator to force another. + Принять вход midi-clock. Только один вход используется для "clock". +Авто-получение: если разрешены два или более входов реального времени на порт, то будут использован первый обнаруженный "clock", пока он не будет потерян, затем будет использован другой. Самое лучшее, если каждый отключит свой "clock" во время остановки, чтобы MusE снова получил "clock" с другого порта. Щелкните по индикатору обнаружения, чтобы сделать по другому. - move down - сдвинуть ниже + Accept midi realtime input, including + start/stop/continue, and song position. +Non-clock events (start,stop etc) are + accepted by ALL enabled ports. +This means you may have several master + devices connected, and muse will accept + input from them. + Принять midi-вход реального времени +с "старт/стоп/продолжить" и позицией проекта. +События "Non-clock" (старт, стоп, и т. п.) принимаются +ВСЕМИ разрешенными портами. Это означает, что вы +можете иметь несколько подсоединенных мастер-устройств, +и MusE примет вход от них. - remove - удалить + Accept MMC input, including stop/play/deferred play, and locate. + Принять вход MMC, с "стоп/старт/отложенным воспроизведением" и локацией. - bypass - обойти + Accept MTC input, including forward quarter-frame sync and full-frame locate. +See 'rc' column for more help. + Принять вход MTC, с четверть-фреймовой +синхронизацией и полно-фреймовой локацией. +См. колонку "rc" для получения помощи. - show gui - показать ГИП + When start is received, rewind before playing. +Note: It may be impossible to rewind fast + enough to synchronize with the external device. + Когда сообщение "старт" получено, перемотать перед +воспроизведением. Примечание: может быть +так, что перемотка окажется недостаточно быстрой +для синхронизации с внешним устройством. - show native gui - показать ГИП + Transmit id number. 127 = global transmit to all. + Передавать номер id. 127 = общая передача для всех. - save preset - сохранить пресет + Send midi clock output. If 'Slave to External Sync' is chosen, + muse can re-transmit clock to any other chosen ports. + Посылать выход midi-clock. Если выбрано "Slave to External Sync", +то MusE может снова передать "clock" на любой другой выбранный порт. - MusE: Save Preset - MusE: Сохранить Пресет + Send midi realtime output, including start/stop/continue, + and song position. If 'Slave to external sync' is chosen, + muse can re-transmit midi realtime input messages to any + other chosen ports. This means you may have several slave + devices connected, and muse can re-send realtime messages + to any or all of them. + Послать midi-выход реального времени, с "старт/стоп/продолжить" +и позицией проекта. Если выбрано "Slave to External Sync", +то MusE может снова передать сообщения с midi-входа реального +времени на любой другой выбранный порт. Это значит, что вы можете +иметь несколько присоединенных ведомых устройств, и MusE может снова послать сообщения реального времени на любое из них или на все. - Replace effect - Заменить эффект + Port + Порт - Do you really want to replace the effect %1? - Вы действительно хотите заменить эффект %1? + Device Name + Имя устройства - - - MusEMixer::MidiStrip - off - выкл + c + c - double click on/off - двойной щелчок вкл/выкл + k + k - VariationSend - Вариационный посыл + r + r - Var - Вар + m + m - ReverbSend - Посыл Реверберации + t + t - Rev - Ревер + type + тип - ChorusSend - Посыл Хоруса + rid + rid - Cho - Хорус + rc + rc - Pan/Balance - Пан/Баланс + rr + rr - Pan - Пан + rm + rm - mute - заглушить + rt + rt - solo mode - режим соло + rw + rw - iR - вх + tid + tid - input routing - маршрут входа + tc + tc - oR - вых + tr + tr - output routing - маршрут выхода + tm + tm - - - MusEWidget::BigTime - format display - формат дисплея + tt + tt - bar - такт + MusE + MusE - beat - доля + Settings have changed +Apply sync settings? + Настройки изменились +Применить настройки синхронизации? - tick - тик + &Apply + &Применить - minute - минут(а) + &No + &Нет - second - секунд(а) + &Abort + &Отмена - frame - фреймов + <none> + <ничего> + + + MusEGui::MidiTrackInfo - subframe - субфреймов + <unknown> + <неизвестно> + + + MusEGui::MidiTransformerDialog - MusE: Bigtime - MusE: Хронометр + New + Новый - MusEWidget::EditToolBar + MusEGui::MixdownFileDialog - Edit Tools - Инструменты редактирования + Wave Files (*.wav);;All Files (*) + Файлы Wave (*.wav);;Все файлы (*) - MusEWidget::MidiSyncConfig + MusEGui::MusE - Port Number - Номер порта + Failed to start audio! + Не могу воспроизвести аудио! - Name of the midi device associated with this port number - Имя MIDI-устройства, ассоциированного с номером этого порта + Was not able to start audio, check if jack is running. + + Не могу воспроизвести аудио, проверьте работает ли "Jack". + - Midi clock input detected - Обнаружен вход midi-clock + Timeout waiting for audio to run. Check if jack is running. + + Ожидание запуска аудио. Проверьте, работает ли "Jack". + - Midi tick input detected - Обнаружен вход midi-тика + Und&o + &Отменить - Midi real time input detected - Обнаружен midi-вход реального времени + Re&do + &Повторить - MMC input detected - Обнаружен вход MMC + undo last change to song + отменить последнее изменение в проекте - MTC input detected - Обнаружен вход MTC + redo last undo + повторить последнюю отмену - Detected SMPTE format - Обнаруженые SMPTE форматы + Loop + Цикл - Receive id number. 127 = Global. Double click to edit. - Получить id номер. 127 = Глобально. Двойной щелчок для редактирования. + loop between left mark and right mark + цикл между левым и правым маркерами - Accept midi clock input - Принять вход Midi-clock + Punchin + Начало врезки - Accept midi real time input - Принять midi-вход реального времени + record starts at left mark + запись начинается с левого маркера - Accept MMC input - Принять вход MMC + Punchout + Конец врезки - Accept MTC input - Принять вход MTC + record stops at right mark + запись останавливается на правом маркере - Receive start rewinds before playing - Получить перед воспроизведением сообщение о начале перемотки + Start + К началу - Transmit id number. 127 = Global. Double click to edit. - Передать номер id. 127 = Общий. Двойной щелчок для редактирования. + rewind to start position + перемотать к начальной позиции - Send midi clock output - Послать выход midi-clock + Rewind + Перемотать назад - Send midi realtime output - Послать midi-выход реального времени + rewind current position + перемотать к текущей позиции - Send MMC output - Послать выход MMC + Forward + Перемотать вперёд - Send MTC output - Послать выход MTC + move current position + переместить текущую позицию - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - Обнаружен вход midi-clock. -Фактически используемый -текущий порт - красный. -Щелкните, чтобы принудительно -использовать порт. + Stop + Остановить - Midi realtime input detected, including - start/stop/continue, and song position. - Обнаружен midi-вход реального времени, -с "старт/стоп/продолжить" и позицией проекта. + stop sequencer + остановить секвенсер - MMC input detected, including stop/play/deferred play, and locate. - Обнаружен MMC-вход c "старт/стоп/отложенное воспроизведение" - и локацией. + Play + Воспроизвести - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - Обнаружен MTC-вход, с четверть-фреймовой -синхронизацией и полно-фреймовой локацией. -Фактически используемый -текущий порт - красный. -Щелкните, чтобы принудительно -сделать порт текущим. + start sequencer play + начать воспроизведение в секвенсере - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - Обнаруженые форматы SMPTE: 24fps, 25fps, 30fps с пропущенным -фреймом, или 30fps без пропущенного фрейма -Обнаруживает MTC-формат четверть и полно-фреймовый, и MMC локацию. + Record + Записать + + + to record press record and then play + чтобы начать запись нажмите "запись", а затем "воспроизвести" + + + Panic + Паника + + + send note off to all midi channels + посылает сообщение "note off" на все midi-каналы + + + &New + &Новый - Receive id number. 127 = global receive all, even if not global. - Получить номер id. 127 =глобальный получает все, даже если не глобальный. + Create New Song + Создать Новый Проект - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. - Принять вход midi-clock. Только один вход используется для "clock". -Авто-получение: если разрешены два или более входов реального времени на порт, то будут использован первый обнаруженный "clock", пока он не будет потерян, затем будет использован другой. Самое лучшее, если каждый отключит свой "clock" во время остановки, чтобы MusE снова получил "clock" с другого порта. Щелкните по индикатору обнаружения, чтобы сделать по другому. + &Open + &Открыть - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. - Принять midi-вход реального времени -с "старт/стоп/продолжить" и позицией проекта. -События "Non-clock" (старт, стоп, и т. п.) принимаются -ВСЕМИ разрешенными портами. Это означает, что вы -можете иметь несколько подсоединенных мастер-устройств, -и MusE примет вход от них. + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Щелкните по этой кнопке для открытия другого проекта. Вы также можете выбрать пункт Открыть в меню "Файл". - Accept MMC input, including stop/play/deferred play, and locate. - Принять вход MMC, с "стоп/старт/отложенным воспроизведением" и локацией. + Open &Recent + Открыть &Недавние - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - Принять вход MTC, с четверть-фреймовой -синхронизацией и полно-фреймовой локацией. -См. колонку "rc" для получения помощи. + &Save + &Сохранить - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - Когда сообщение "старт" получено, перемотать перед -воспроизведением. Примечание: может быть -так, что перемотка окажется недостаточно быстрой -для синхронизации с внешним устройством. + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Щелкните по этой кнопке для сохранения проекта. Будет предложено ввести имя файла. +Вы также можете выбрать пункт "Сохранить" в меню "Файл". - Transmit id number. 127 = global transmit to all. - Передавать номер id. 127 =общая передача для всех. + Save &As + Сохранить &Как - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - Посылать выход midi-clock. Если выбрано "Slave to External Sync", -то MusE может снова передать "clock" на любой другой выбранный порт. + Import Midifile + Импортировать MIDI-файл - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - Послать midi-выход реального времени, с "старт/стоп/продолжить" -и позицией проекта. Если выбрано "Slave to External Sync", -то MusE может снова передать сообщения с midi-входа реального -времени на любой другой выбранный порт. Это значит, что вы можете -иметь несколько присоединенных ведомых устройств, и MusE может снова послать сообщения реального времени на любое из них или на все. + Export Midifile + Экспортировать MIDI-файл - Port - Порт + Import Part + Импортировать Партию - Device Name - Имя устройства + Import Wave File + Импортировать Wave-файл - c - c + Find unused wave files + Найти не используемые wave-файлы - k - k + &Quit + Вы&йти - r - r + Song Info + Информация о Проекте - t - t + Transport Panel + Панель транспорта - type - тип + Bigtime Window + Окно хронометра - rid - rid + Mixer A + Микшер А - rc - rc + Mixer B + Микшер В - rr - rr + Cliplist + Список клипов - rm - rm + Marker View + Маркеры - rt - rt + Arranger View + Показывать Компоновщик - rw - rw + Fullscreen + Во весь экран - tid - tid + &Plugins + &Плагины - tc - tc + Edit Instrument + Редактировать Инструмент - tr - tr + Input Plugins + Плагины на входе - tm - tm + Transpose + Транспонировать - tt - tt + Midi Input Transform + Преобразовать входящие Midi-события - MusE - MusE + Midi Input Filter + Фильтр входящих Midi-событий - Settings have changed -Apply sync settings? - Настройки изменились -Применить настройки синхронизации? + Midi Remote Control + Дистанционное управление Midi - &Apply - &Применить + Rhythm Generator + Генератор Ритма - &No - &Нет + Reset Instr. + Перезагрузить Инстр. - &Abort - &Отмена + Init Instr. + Запустить Инстр. - <none> - <ничего> + Local Off + откл. локальное управление - - - MusEWidget::MidiTrackInfo - <unknown> - <неизвестно> + Bounce to Track + Свести в трек - - - MusEWidget::MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Файлы Wave (*.wav);;Все файлы (*) + Bounce to File + Свести в файл - - - MusEWidget::NoteInfo - Note Info - Информация о ноте + Restart Audio + Перезапустить аудио - Len - Дл + Mixer Automation + Автоматизация микшера - Pitch - Высота тона + Take Snapshot + Сделать снимок - Velo On - Скор. наж + Clear Automation Data + Удалить Данные Автоматизации - Velo Off - Скор. снятия + Cascade + Каскадом - - - MusEWidget::RoutePopupMenu - Channel - Канал + Tile + Черепицей - <none> - <ничего> + In rows + В ряд - - - MusEWidget::ScrollScale - next page - след страница + In columns + Колонками - previous page - пред страница + Global Settings + Общие настройки - current page number - номер текущей страницы + Configure Shortcuts + Настроить горячие клавиши - - - MusEWidget::ShortcutCaptureDialog - Cancel - Отмена + Follow Song + Следовать за проектом - Shortcut conflicts with - "Горячая клавиша" конфликтует с + Don't Follow Song + не следовать за проектом - Undefined - Не назначено + Follow Page + следовать постранично - - - MusEWidget::SigScale - signature scale - шкала ключей + Follow Continuous + следовать непрерывно - - - MusEWidget::Toolbar1 - Solo - Соло + Metronome + Метроном - Cursor - Курсор + Midi Sync + Midi-Cинхр - Snap - Привязка + Midi File Import/Export + Импорт/Экспорт midi-файла - - - MusEWidget::TrackComment - MusE: Track Comment - MusE: Комментарий к треку + Appearance Settings + Настройки внешнего вида - Track Comment: - Комментарий к треку: + Midi Ports / Soft Synth + MIDI-порты/Прогр. синтезаторы - - - NewPreset - New preset - Новый пресет + &Manual + &Руководство - Preset Name - Имя пресета + &MusE Homepage + &Домашняя страница MusE - INIT VOICE - НАЧАЛЬНЫЙ ГОЛОС + &Report Bug... + &Сообщить об ошибке... - Subcategory - Субкатегория + &About MusE + &О программе MusE - NONE - НИЧЕГО + File Buttons + Файловые кнопки - Category - Категория + Undo/Redo + Отменить/Вернуть - Bank - Банк + Transport + Транспорт - Bank numerous - Несколько банков + &File + &Файл - Prog - Прог + &View + &Вид - Program numerous - Несколько программ + &Midi + &Midi - &Cancel - &Отмена + &Audio + &Аудио - Alt+C - Alt+C + A&utomation + &Автоматизация - &Ok - &ОК + &Windows + &Окна - Alt+O - Alt+O + MusE Se&ttings + Н&астройки - - - NoteInfo - Note Info - Информация о ноте + &Help + &Справка - Start - Начало + Cannot read template + Не могу прочитать шаблон - Len - Дл + File open error + Ошибка открытия файла - Pitch - Высота тона + File read error + Ошибка прочтения файла - Velo On - Скор. наж + Unknown File Format: %1 + Неизвестный Формат Файла: %1 - Velo Off - Скор. снятия + MusE: Song: %1 + MusE: Проект: %1 - - - OrganGuiBase - - MusE: Organ - MusE: Орган + MusE: load project + MusE: Открыть проект - - O-1 - O-1 + MusE: load template + MusE: открыть шаблон - - Oscillator - Осциллятор + MusE: Write File failed + MusE: Не удалось записать файл - - Brass - Медные духовые + The current Project contains unsaved data +Save Current Project? + Текущий проект содержит не сохранённые данные. +Сохранить текущий проект? - - Reed - Язычковые деревянные духовые + S&kip + Не &сохранять - - Flute - Флейта + &Cancel + &Отмена - - 16' - 16' + MusE: Save As + MusE: Сохранить как - - 4' - 4' + Nothing to edit + Нечего редактировать - - 2 2/3' - 2 2/3' + MusE: Bounce to Track + MusE: Свести в Трек - - 2' - 2' + No wave tracks found + wave-треки не найдены - - 8' - 8' + No audio output tracks found + Выходные аудио треки не найдены + + + Select one audio output track, +and one target wave track + Выберите один трек аудио выхода +и один wave-трек, как цель - - 5 1/3' - 5 1/3' + Select one target wave track + Выберите один wave-трек, как трек назначения - - - Release - Послезвучие + Select one target wave track, +and one audio output track + Выберите один wave-трек, как цель, +(трек назначения) и один трек аудио выхода - - - Sustain - Стационарная часть звука + MusE: Bounce to File + MusE: Свести в файл - - - Decay - Спад огибающей + Select one audio output track + Выберите один трек аудио выхода - - - Attack - Атака + MusE: Bounce + MusE: Свести - - - - - - - ms - мс + set left/right marker for bounce range + настройте левый/правый маркеры для установки диапазона сведения - - Velocity - Скорость нажатия + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Текущий проект содержит не сохранённые данные. +Загрузка нового проекта приведёт к перезаписи данных текущего проекта. +Сохранить текущий проект? - - Drawbars - Слайдеры регистров + &Abort + &Отмена - - Envelope Hi - Верх огибающей + MusE: Export Midi + MusE:Экспорт MIDI - - - cB - cB + no help found at: + справка не найдена в: - - Envelope Lo - Низ огибающей + MusE: Open Help + MusE: Открыть справку - - - PartCanvas - Cannot copy/move/clone to different Track-Type - Невозможно копировать/перемещать/клонировать данные в другие типы дорожек + Unable to launch help + Невозможно открыть справку - C&ut - &Вырезать + For some reason MusE has to launch the default +browser on your machine. + По некоторым причинам MusE вынужден запустить +на вашей машине броузер по умолчанию. - &Copy - С&копировать + MusE: Import Midi + MusE: Импорт MIDI - rename - Переименовать + Add midi file to current project? + + Добавить midi файл в текущий проект? + - color - цвет + &Add to Project + &Добавить в Проект - delete - удалить + &Replace + &Заменить - split - разделить + reading midifile + + читается Midi-файл + + - glue - склеить + +failed: + +не удалось: - de-clone - деклонировать + Import part is only valid for midi and wave tracks! + Импортирование партий допустимо только для midi и wave треков! - pianoroll - Пианорол + MusE: load part + MusE: открыть партию - list - Редактор списка событий + No track selected for import + Не выбран трек для импорта - - drums - Редактор ударных + + %n part(s) out of %1 could not be imported. +Likely the selected track is the wrong type. + + %n парти(я, и, ий) из %1 не могут быть импортированы. +Возможно выбранный трек неверного типа. + + + + + %n part(s) could not be imported. +Likely the selected track is the wrong type. + + %n парти(я, и, ий) могут быть импортированы. +Возможно выбранный трек неверного типа. + + - wave edit - Редактор семплов + to import an audio file you have first to selecta wave track + чтобы импортировать аудио файл, вы должны сначала выбрать wave-трек - Cannot paste: multiple tracks selected - Вставка невозможна: выделено несколько треков + Import Wavefile + Импортировать wave-файл - Cannot paste: no track selected - Вставка невозможна: не выделено ни одного трека + This wave file has a samplerate of %1, +as opposed to current setting %2. +Do you still want to import it? + Samplerate этого wave-файла %1, +в то время как текущий Samplerate %2. +Хотите вы всё же импортировать его? - Cannot paste: wrong data type - Вставка невозможна: неверный тип данных + &Yes + &Да - Can only paste to midi/drum track - Можно вставить только в midi/drum трек + &No + &Нет - Can only paste to wave track - Можно вставить только в звуковой трек + Song Position + - export - экспорт + Tempo + Темп - MusE: save part - MusE: сохранить партию + Signature + Размер - s&elect - В&ыбрать + About &Qt + - clones - клоны + This will clear all automation data on + all audio tracks! +Proceed? + - file info - файл-инфо + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? + + + + MusEGui::NoteInfo - Part name - Имя партии + Note Info + Информация о ноте - Files - Файлы + Start + Начало - out of - из + Len + Дл - parts - партии + Pitch + Высота тона - part - партия + Velo On + Скор. наж - could not be pasted. -Likely the selected track is the wrong type. - не может быть вставлена. -Возможно выбранный трек не того типа. + Velo Off + Скор. снятия - Can only paste to midi or wave track - Можно вставить только в midi или wave треки + delta/absolute mode + - PasteDialogBase + MusEGui::PartCanvas - - MusE: Paste Parts - + Cannot copy/move/clone to different Track-Type + Невозможно копировать/перемещать/клонировать данные в разные типы дорожек - - Number and raster - + C&ut + &Вырезать - - insert - + &Copy + С&копировать - - times - + s&elect + в&ыбрать - - raster - + clones + клоны - - ticks - + rename + переименовать - - Move, Merge, Clone - + color + цвет - - Move everything to the right - + delete + удалить - - Move only affected parts to the right - + split + разделить - - Put everything into a single track - + glue + клей - - Merge with existing parts - + super glue (merge selection) + супер клей (смешать выделенное) - - Insert as clones (where possible) - + de-clone + де-клонировать - - OK - + save part to disk + сохранить партию на диске - - Cancel - Отмена + wave edit + правка сэмплов - - - PasteEventsDialogBase - - MusE: Paste Events - + file info + Информация о файле - - Number and raster - + MusE: save part + MusE: сохранить партию - - insert - + Part name: %1 +Files: + Имя партии: +Файлы: - - - times - + + %n part(s) out of %1 could not be pasted. +Likely the selected track is the wrong type. + + %n парти(я)(и)(й) из %1 не могут быть вставлены. +Неверный формат, выбранного трека. + + - - - raster - + + %n part(s) could not be pasted. +Likely the selected track is the wrong type. + + %n парти(я)(и)(й) не могут быть вставлены. +Неверный формат, выбранного трека. + + - - - ticks - + Cannot paste: multiple tracks selected + Вставка невозможна: выбрано несколько треков - - Paste options - + Cannot paste: no track selected + Вставка невозможна: нет выбранного трека - - Always into existing parts - + Can only paste to midi/drum track + Можно вставить только в midi/drum трек - - Never into existing parts - + Can only paste to wave track + Можно вставить только в wave-трек - - Into existing parts if part has not -to be expanded by more than - + Can only paste to midi or wave track + Можно вставить только в midi или wave треки - - Put everything into the (selected) part - + Cannot paste: wrong data type + Вставка невозможна: неверный тип данных - - OK + Remove selected - - - Cancel - Отмена - - PatchBay + MusEGui::PasteDialog + + %n quarter(s) + + %n четверт(и) + + + - MusE: ALSA MIDI Patch Bay - MusE: ALSA MIDI Patch Bay + %1 quarter + for floating-point arguments like 1.5 + %n четверть - - - PatchBayBase - ALSA Patch Bay - ALSA Patch Bay + %1 quarters + for floating-point arguments like 1.5 + %n четверти - PianoRoll - - &Edit - &Правка + MusEGui::PasteEventsDialog + + %n quarter(s) + + %n четверт(и) + + - Cut - Вырезать + %1 quarter + for floating-point arguments like 1.5 + %n четверть - Copy - Скопировать + %1 quarters + for floating-point arguments like 1.5 + %n четверти + + + MusEGui::PianoRoll - Paste - Вставить + &Edit + &Правка - Delete Events - Удалить события + C&ut + &Вырезать - Select All - Выделить всё + &Copy + С&копировать - Select None - Убрать выделение + Copy events in range + Копировать события в диапазоне - Invert - Инвертировать + &Paste + &Вставить - Inside Loop - Внутри цикла + Paste (with dialog) + Вставить (с диалогом) - Outside Loop - Вне цикла + Delete &Events + Удалить &События &Select - &Выбрать + &Выделить - blue - голубой + Select &All + Выделить &Всё - pitch colors - цвета высоты тона + &Deselect All + &Снять выделение - velocity colors - цвета скорости нажатия + Invert &Selection + Инвертировать &Выделенное - &Config - &Настроить + &Inside Loop + &Внутри цикла + + + &Outside Loop + &Вне цикла - event color - цвет события + &Previous Part + &Предыдущая партия - &Functions - &Функции + &Next Part + &Следующая партия - Over Quantize - Квантовка + Fu&nctions + &Функции - Note On Quantize - Квантовка начала ноты + Quantize + Квантовать - Note On/Off Quantize - Квантовка начала/окончания ноты + Modify Note Length + Изменить Длину Ноты - Iterative Quantize - Повторная квантовка + Modify Velocity + Изменить скорость наж - Config Quant... - Настройка квантования + Crescendo/Decrescendo + Крещендо/Диминуэндо - Modify Gate Time - Изменить время звучания + Transpose + Транспонировать - Modify Velocity - Изменить скорость нажатия + Erase Events + Удалить События - Crescendo - Крещендо + Move Notes + Передвинуть Ноты - Transpose - Транспонировать + Set Fixed Length + Установить Фиксир. Длину - Thin Out - Удалить дубли + Delete Overlaps + Удалить наложения - Erase Event - Удалить событие + Legato + Легато - Note Shift - Сдвиг ноты + &Plugins + &Плагины - Move Clock - Сдвинуть время + Window &Config + Конфигурация &окна - Copy Measure - Скопировать такт + &Event Color + &Цвет события - Erase Measure - Стереть такт + &Blue + &Синий - Delete Measure - Удалить такт + &Pitch colors + &Цвета высоты тона - Create Measure - Создать такт + &Velocity colors + &Цвета скорости нажатия - Pianoroll Tools - Инструменты пианорола + Pianoroll tools + Инструменты пианоролла Step Record - Пошаговая запись + Пошаговая запись Midi Input - MIDI-вход + Midi-вход Play Events - Воспроизвести события + Воспроизвести события ctrl - кнтр + ctrl Add Controller View - Добавить панель контроллеров + Добавить панель + + + MusEGui::PluginDialog - Set Fixed Length - Установить фикс. длину + MusE: select plugin + MusE: выбрать плагин - C&ut - &Вырезать + Lib + Библ - &Copy - С&копировать + Label + Метка - &Paste - &Вставить + Name + Имя - Delete &Events - Удалить &События + AI + AI - Select &All - Выбрать &Всё + AO + AO - &Deselect All - &Убрать выделение + CI + CI - Invert &Selection - Обратить В&ыделение + CO + CO - &Inside Loop - &Внутри цикла + IP + IP - &Outside Loop - &Вне цикла + id + id - &Previous Part - &Предыдущая партия + Maker + Создатель - &Next Part - &Следующая партия + Copyright + Copyright - &Event Color - &Цвет события + Ok + Ok - &Blue - &Синий + Cancel + Отмена - &Pitch colors - &Цвета высоты тона + Mono and Stereo + Моно и Стерео - &Velocity colors - &Цвета скорости нажатия + Stereo + Стерео - Quantize - Квантовать + Mono + Моно - Delete Overlaps - Удалить наложения + Show All + Показать Все - &Plugins - &Плагины + Search in 'Label' and 'Name': + Искать по "Меткам" и "Именам": - Pianoroll tools - Инструменты пианоролла + Type + Тип - panic - паника + Audio inputs + - transport - транспорт + Audio outputs + - - - PluginDialog - MusE: select plugin - MusE: выбрать плагин + Control inputs + - Lib - Библ. + Control outputs + - Label - Метка + In-place capable + - Name - Имя + ID number + - AI - AI + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + - AO - AO + dssi synth + - CI - CI + dssi effect + - CO - CP + ladspa + - IP - IP + Show plugs: + + + + MusEGui::PluginGui - id - id + File Buttons + Файловые кнопки - Maker - Создатель + Load Preset + Загрузить пресет - Copyright - Copyright + Save Preset + Сохранить пресет - Ok - Ok + bypass plugin + обойти плагин - Cancel - Отмена + MusE: load preset + MusE: загрузить пресет - Stereo and Mono - Стерео и Моно + Error reading preset. Might not be right type for this plugin + Ошибка прочтения пресета. Возможно неверный тип для этого плагина - Stereo - Стерео + MusE: save preset + MusE: сохранить пресет + + + MusEGui::ProjectCreateImpl - Mono - Моно + Select directory + Выбрать папку + + + MusEGui::RoutePopupMenu - All - Все + Channel + Канал - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - Выберите типы плагинов, которые будут видны в списке.<br>Обратите внимание, что можно использовать моно плагины в стерео треках, два будут использованы параллельно.<br>Также будте осторожны с плагинами категории "все" альтернативные, возможно их нельзя использовать в MusE. + Soloing chain + Соло цепи - Mono and Stereo - Моно и Стерео + Audio returns + Аудио возвраты - Show All - Показать Все + Warning: No input devices! + Предупреждение: Нет входных устройств! - Search in 'Label' and 'Name': - Искать по "Меткам" и "Именам": + Open midi config... + Открыть midi конфиг... - - - PluginGui - File Buttons - Файловые кнопки + <none> + <ничего> - Load Preset - Загрузить пресет + Toggle all + Переключить все - Save Preset - Сохранить пресет + More... + Ещё... - bypass plugin - обойти плагин + Audio sends + Аудио посылы - MusE: load preset - MusE: загрузить пресет + Midi port sends + Посылы midi порта + + + MusEGui::ScoreCanvas - MusE: save preset - MusE: сохранить пресет + Treble + Скрипичный - Error reading preset. Might not be right type for this plugin - Ошибка прочтения пресета. Возможно неверный тип для этого плагина + Bass + Басовый - - - ProjectCreate - - Create Project - + Grand Staff + Большой стан - - Projects folder: - + Remove staff + Удалить стан - - - - ... - ... + Ambiguous part + Неопределенная партия - - Project Name: - + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + Существуют две или более партии, куда вы можете добавить ноту, но ни одна из них не совпадает с выбранной партией. Щелкните по любой ноте в партии, чтобы выбрать её как партию назначения и повторите попытку. Или добавьте нотный стан с партией назначения. - - Project is a Template - + No part + Нет партии - - Project song file type: - + There are no parts you could add the note to. + Нет партий, куда вы могли бы добавить ноту. + + + MusEGui::ScoreEdit - - Project Path to song file: - + Step recording tools + Инструменты пошаговой записи - - Create project folder (recommended for audio projects) - + Step Record + Пошаговая запись - - Song information: - + Note settings + Настройки ноты - - - QHeader - Port Number - Номер порта + Note length: + Длина ноты: - enable gui for device - разрешить ГИП для устройства + last + - Name of the midi device associated with this port number - Имя MIDI-устройства, ассоциированного с номером этого порта + Apply to new notes: + Применить к новым нотам: - Instrument connected to port - Инструмент, подсоединённый к порту + Apply to selected notes: + Применить к выбранным нотам: - State: result of opening the device - Состояние: результат открытия устройства + Velocity: + Скорость наж: - mute instrument - заглушить инструмент + Off-Velocity: + Скорость отп: - sound name - название звука + Quantisation settings + Настройки квантования - quantisation -currently not used - квантование -сейчас не используется + Quantisation: + Квантование: - this input note triggers the sound - эта входящая нота переключает звук + Pixels per whole: + Пикселей на целую: - note length - длина ноты + &Edit + &Правка - this note is send for the sound - это нота послана для звука + C&ut + &Вырезать - output channel -currently not used - канал выхода -сейчас не используется + &Copy + С&копировать - output port -currently not used - порт выхода -сейчас не используется + Copy events in range + Копировать события в диапазоне - velocity level 1 - Уровень 1 силы нажатия + &Paste + &Вставить - velocity level 2 - Уровень 2 силы нажатия + Paste (with dialog) + Вставить (с диалогом) - velocity level 3 - Уровень 3 силы нажатия + Delete &Events + Удалить &События - velocity level 4 - Уровень 4 силы нажатия + &Select + &Выделить - quantisation - квантование + Select &All + Выделить &Всё - output channel - канал выхода + &Deselect All + &Снять выделение - output port - порт выхода + Invert &Selection + &Инвертировать выделенное - Enable Recording - Разрешить запись + &Inside Loop + &Внутри цикла - Mute Indicator - Индикатор заглушки звука + &Outside Loop + &Вне цикла - Solo Indicator - Индикатор соло + Fu&nctions + &Функции - Track Type - Тип трека + &Quantize + &Квантовать - Track Name - Имя трека + Change note &length + Изменить длину &ноты - Output Channel Number - Номер канала выхода + Change note &velocity + Изменить &скорость наж. ноты - Output Port - Порт выхода + Crescendo/Decrescendo + Крещендо/Диминуэндо - Time Lock - Изменение времени заблокировано + Transpose + Транспонировать - Solo/Pre Fader Listening - Прослушивание Соло/Пре Федера + Erase Events + Удалить события - enables reading from device - разрешает чтение с устройства + Move Notes + Передвинуть события - enables writing to device - разрешает запись на устройство + Set Fixed Length + Установить фикс. длину - - - QObject - Other - Другой + Delete Overlaps + Удалить наложения - - - Error - + Legato + Легато - - - Please first select the range for crescendo with the loop markers. - + Window &Config + &Настройка окна - - - QWidget - - - Cannot convert sysex string - Невозможно конвертировать строку SysEx + Note head &colors + &Цвет головки ноты - - - Hex String too long (2048 bytes limit) - Hex-строка слишком длинная (предел составляет 2048 байтов) + &Black + &Черный - - generic midi - обычный MIDI + &Velocity + &Скорость нажатия - - new - новый + &Part + &Партия - - create peakfile for - создать пиковый файл для + Set up &preamble + &Настроить преамбулу - - MusE: get file name - MusE: получить имя файла + Display &key signature + &Показывать знаки при ключе - the directory - - каталог - + Display &time signature + &Показывать тактовый размер - -does not exist -create? - -не существует -Создать? + Set Score &name + Назн. имя &партитуры - &Create - &Создать + Enter the new score title + Ввести название партитуры - Cancel - Отмена + Error + Ошибка - - The directory -%1 -does not exist. -Create it? - + Changing score title failed: +the selected title is not unique + Не удалось изменить название: +Такое название уже существует + + + MusEGui::ScrollScale - - MusE: create directory - MusE: создать каталог + next page + след. страница - - creating dir failed - создание каталога не удалось + previous page + предыд. страница - - File -%1 -exists. Overwrite? - + current page number + номер текущей страницы + + + MusEGui::ShortcutCaptureDialog - - Open File -%1 -failed: %2 - + Ok + Ok - File - - Файл + Cancel + Отмена - -exists - -существует + Shortcut conflicts with %1 + "Горячая клавиша" конфликтует с %1 - - MusE: write - MusE: записать + Undefined + Не назначено + + + MusEGui::SigScale - Overwrite - Перезаписать + signature scale + линейка ключей + + + MusEGui::SigToolbarWidget - Quit - Выйти + time signature at current position + размер в текущей позиции - Open File - - Открыть файл + Signature: + + + + MusEGui::Strip - -failed: - -не удалось: + Remove track? + Удалить трек? + + + MusEGui::TList - - MusE: Open File - MusE: Открыть файл + <none> + <ничего> - - - None - Ничего + visible + видимые - - No selection. Ignoring - Не выделено. Игнорируется + no clef + без ключа - The directory - - Директория - + Treble + Скрипичный - -does not exist. -Create it? - -не существует. -Создать? + Bass + Басовый - -exists. Overwrite? - -существует. Переписать? + Grand + Большой стан - - - QuantBase - - MusE: Quantize - + MusE: bad trackname + MusE: неверное имя трека - - Range - Диапазон + please choose a unique track name + Выберите неповторяющееся имя для трека - - All Events - + Unused Devices + Неиспользованные устройства - - Selected Events - + Update drummap? + Обновить карту ударных? - - Looped Events - + Do you want to use same port for all instruments in the drummap? + Вы хотите использовать один порт для всех инструментов в списке ударных? - - Selected Looped - + &Yes + &Да - - Values - Значения + &No + &Нет - - Strength: - + show gui + показать ГИП - - % - % + show native gui + показать родной ГИП - - Threshold (ticks): - + Treble clef + Скрипичный - - Quantize Len - + Bass clef + Басовый - - Raster - + Grand Staff + Большой стан - - Whole - + Viewable automation + Видимая автоматизация - - Half - + Delete Track + Удалить трек - - 4th - + Track Comment + Комментарий к треку - - 4th Triplet - + Insert Track + Добавить трек - - 8th - + Midi + Midi - - 8th Triplet - + Drum + Ударные - - 16th - + Do you want to use same port and channel for all instruments in the drummap? + Вы хотите использовать тот же порт и канал для всех инструментов в списке ударных? - - 16th Triplet - + off + выкл - - 32th - + <unknown> + <неизвестно> - - 32th Triplet + Midi control - - Swing: + Assign - - If the proposed change in tick or length is smaller than threshold, nothing is done. -If swing=0, this is normal -If swing is 33, you get a 2:1-rhythm. -If swing is -33, you get a 1:2-rhythm. - + Clear - - OK + Internal - - Cancel - Отмена + Synth + - QuantConfig + MusEGui::TempoSig - MusE: Config Quantize - MusE: Настройка Квантования + Tempo/Sig + Темп/Размер + + + MusEGui::TempoToolbarWidget - Config Quantize - Настройка Квантования + tempo at current position + темп в текущей позиции - Strength - Степень + Tempo: + + + + MusEGui::Toolbar1 - Don´t Quantize - Не Квантовать + Off + Выкл - Quant Len - Квант Дл + Solo + Соло - - - RemoveBase - - MusE: Erase Notes - + Cursor + Курсор - - Range - Диапазон + Snap + Привязка + + + MusEGui::TopWin - - All Events - + As subwindow + Как подокно - - Selected Events - + Shares tools and menu + Общие инструменты и меню - - Looped Events - + Fullscreen + Во весь экран - - Selected Looped - + Piano roll + Пианоролл - - Thresholds - + List editor + Редактор списка - - ticks - + Drum editor + Редактор ударных - - Velocity - + Master track editor + Редактор мастер-трека (график) - - Length - Длина + Master track list editor + Редактор мастер-трека (список) - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> -<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - + Wave editor + Wave редактор - - OK - + Clip list + Редактор списка клипов - - - Cancel - Отмена + + Marker view + Редактор маркеров - - - RhythmBase - MusE: Random Rhythm Generator - MusE: Генератор случайного ритма + Score editor + Партитурный редактор - Instrument Properties - Свойства Инструмента + Arranger + Компоновщик - counts/bar - счет/такт + <unknown toplevel type> + <неизвестный тип уровня> - steps/count - шаги/счет + Undo/Redo tools + - # bars - #такты + Panic + Паника - test - тест + Transport + Транспорт - contrib - внести + Song Position + - randomize - случайным образом + Tempo + Темп - Group 1 - Группа 1 + Signature + Размер + + + MusEGui::TrackComment - Group 2 - Группа 2 + MusE: Track Comment + MusE: Комментарий к треку - Group 3 - Группа 3 + Track Comment: + Комментарий к треку: + + + MusEGui::Transport - Group 4 - Группа 4 + Overdub + Наложить - Group 5 - Группа 5 + Replace + Заменить - listen - слушать + Rec Mode + Режим записи - Instrument - Инструмент + Normal + Нормальный - Group - Группа + Mix + Смешать - &New - &Новый + Cycle Rec + Циклич. запись - create new entry - создать новую запись + punchin + начало врезки - pressing the New button you create a new entry -in the MusE list of defined controllers - нажав кнопку "Новая" вы создаёте новую запись -в списке назначенных в MusE контроллеров + loop + цикл - &Delete - &Удалить + punchout + конец врезки - delete selected entry - удалить выделенную запись + Punch In + Начало врезки - Up - Вверх + Loop + Цикл - Down - Вниз + Punch Out + Конец врезки - Instrument - Инструмент + Left Mark + Левый маркер - steps/count - шаги/счет + Right Mark + Правый маркер - list of defined controllers - список назначенных контроллеров + rewind to start + перемотать к началу - This is the MusE list of defined controllers. - Это список назначенных контроллеров для MusE + Click this button to rewind to start position + Щелкните по этой кнопке для перемещения к началу - &File - &Файл + rewind + перемотать назад - &Edit - &Правка + Click this button to rewind + Щелкните по этой кнопке для перемотки назад - &Help - П&омощь + forward + перемотать вперёд - Tools - Инструменты + Click this button to forward current play position + Щелкните по этой кнопке для перемещения вперёд - New - Новый + stop + остановить - Open - Открыть + Click this button to stop playback + Щелкните по этой кнопке для остановки воспроизведения - &Open... - &Открыть... + play + воспроизвести - Save - Сохранить + Click this button to start playback + Щелкните по этой кнопке, чтобы начать воспроизведение - &Save - &Сохранить + record + запись - Save As - Сохранить как + Click this button to enable recording + Щелкните по этой кнопке, чтобы разрешить запись - Save &As... - Сохранить &как... + AC + AC - Print - Печать + quantize during record + квантовать при записи - &Print... - &Печать... + Click + Метроном - Exit - Выйти + metronom click on/off + метроном вкл/выкл - E&xit - В&ыйти + Sync + Синхр - Undo - Отмена + external sync on/off + Вкл/выкл внешн. синхр - &Undo - &Отмена + Jack + Jack - Redo - Повторить + Jack transport sync on/off + Синхр. транспорта "Jack" вкл/выкл - &Redo - П&овторить + Master + Мастер - Cut - Вырезать + use master track + использовать мастер-трек + + + MusEGui::VisibleTracks - &Cut - &Вырезать + Show wave tracks + Показать wave-треки - Copy - Скопировать + Show group tracks + Показать групповые треки - C&opy - С&копировать + Show aux tracks + Показать aux треки - Paste - Вставить + Show input tracks + Показать входные треки - &Paste - &Вставить + Show output tracks + Показать выходные треки - Find - Найти + Show midi tracks + Показать midi треки - &Find... - &Найти... + Show synth tracks + Показать треки синтезаторов - Contents - Содержание + Visible track types + Видимые типы треков + + + MusEGui::WaveEdit - &Contents... - &Содержание... + &Edit + &Правка - Index - Индекс + Func&tions + Фу&нкции - &Index... - &Индекс... + &Gain + &Усиление - About - О программе + Other + Другой - &About... - &О программе... + &Copy + С&копировать - <b>Notice!</b><br> -Random Rhythm Generator is not enabled yet! - <b>Уведомление!</b><br> -Генератора Случайного Ритма пока ещё нет! + C&ut + &Вырезать - Ctrl+N - Ctrl+N + &Paste + &Вставить - Ctrl+O - Ctrl+O + Edit in E&xternal Editor + Редактировать во &внешнем редакторе - Ctrl+S - Ctrl+S + Mute Selection + Заглушить выделенное - Ctrl+P - Ctrl+P + Normalize Selection + Нормализовать выделенное - Ctrl+Z - Ctrl+Z + Fade In Selection + Нарастание звука в выделенном - Ctrl+Y - Ctrl+Y + Fade Out Selection + Затихание звука в выделенном - Ctrl+X - Ctrl+X + Reverse Selection + Перевернуть выделенное - Ctrl+C - Ctrl+C + Select + Выделить - Ctrl+V - Ctrl+V + Select &All + Выделить &Всё - Ctrl+F - Ctrl+F + &Deselect All + &Снять выделение - - - RhythmGenerator - Form3 - Форма3 + Window &Config + Конфигурация &окна - Instrument Settings: - Настройки инструмента: + WaveEdit tools + Инструменты правки wave - Instrument - Инструмент + Solo + Соло - Hi-Hat - Хай-хэт + Cursor + Курсор + + + MusEGui::WaveView - add - добавить + MusE - external editor failed + MusE - ошибка запуска внешнего редактора - delete - удалить + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + "MusE" не может запустить внешний редактор. +Проверьте, действительно ли в: +Общие настройки->Аудио:Внешний редактор +выбран правильный редактор. - Group Settings: - Настройки группы: + MusE - file size changed + MusE - размер файла изменился - Group - Группа + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + При редактировании во внешнем редакторе - не изменяйте размер файла +так как он должен соответствовать выбранной области. + +Утерянные данные заглушены + + + OrganGuiBase - Group 1 - Группа 1 + MusE: Organ + MusE: Орган - Group 2 - Группа 2 + O-1 + O-1 - Group 3 - Группа 3 + Oscillator + Осциллятор - Group 4 - Группа 4 + Brass + Медные духовые - Group 5 - Группа 5 + Reed + Язычковые деревянные духовые - contrib - внести + Flute + Флейта - listen - слушать + 16' + 16' - Randomize - Случайным образом + 4' + 4' - Rhythm Style: - Ритмический Стиль: + 2 2/3' + 2 2/3' - Clear - Очистить + 2' + 2' - Open... - Открыть... + 8' + 8' - Save - Сохранить + 5 1/3' + 5 1/3' - Save as... - Сохранить как... + Release + Послезвучие - Generate - Сгенерировать + Sustain + Стационарная часть звука - Close - Закрыть + Decay + Спад огибающей - - + Attack + Атака - steps/count - шаги/счет + ms + мс - count/bar - счет/такт + Velocity + Скорость нажатия - # bars - #такты + Drawbars + Слайдеры регистров - - - RouteDialogBase - - MusE: Routing - MusE: Маршруты + Envelope Hi + Верх огибающей - - Add Route - Добавить маршрут + cB + cB - - Source: - Источник: + Envelope Lo + Низ огибающей + + + PasteDialogBase - - Destination: - Назначение: + MusE: Paste Parts + MusE: Вставить партии - - Connect - Соединить + Number and raster + Номер и растр - - connect source to destination - Соединить источник с назначением + insert + вставить - - Current Routes - Текущие маршруты + times + раз - - Source - Источник + raster + растр - - Destination - Назначение + ticks + тик(ов) - - Remove - Удалить + Move, Merge, Clone + Передвинуть, Смешать, Клонировать - - remove selected route - Удалить выбранный маршрут + Move everything to the right + Передвинуть всё вправо - - - RoutePopupMenu - Channel - Канал + Move only affected parts to the right + Передвинуть только задействованные партии вправо - <none> - <ничего> + Put everything into a single track + Поместить всё в один трек - - - SS_PluginChooserBase - - SimpleDrums - Ladspa Plugin Chooser - SimpleDrums - Выбор LADSPA-плагина + Merge with existing parts + Смешать с существующими партиями - - Name - Имя + Insert as clones (where possible) + Вставить как клоны (где возможно) - - Label - Метка + OK + OK - - Inports - Порты входа + Cancel + Отмена + + + PasteEventsDialogBase - - Outports - Порты выхода + MusE: Paste Events + MusE: Вставить события - - Creator - Создатель + Number and raster + Номер и растр - - &Cancel - &Отменить + insert + вставить - - Alt+C - Alt+C + times + раз - - &OK - &ОК + raster + растр - - Alt+O - Alt+О + ticks + тик(ов) - - - SS_PluginFront - - Clear and unload effect - Очистить и выгрузить эффект + Paste options + Опции вставки - - Load effect - Загрузить эффект + Always into existing parts + Всегда в существующие партии - - Toggle display of effect parameters - Переключить дисплей параметров эффекта + Never into existing parts + Никогда в существующие партии - - Turn effect on/off - Эффект вкл/выкл + Into existing parts if part has not +to be expanded by more than + В существующие партии, если партия +не будет расширена больше чем - - - ScoreEdit - Step Record - Пошаговая запись + Put everything into the (selected) part + Поместить всё в (выбранную) партию - panic - паника + OK + OK - transport - транспорт + Cancel + Отмена + + + ProjectCreate - &Edit - &Правка + Create Project + Создать Проект - C&ut - &Вырезать + Projects folder: + Папка проекта: - &Copy - С&копировать + ... + ... - &Paste - &Вставить + Project Name: + Название проекта: - Delete &Events - Удалить &События + Project is a Template + Проект является Шаблоном - &Deselect All - &Убрать выделение + Project song file type: + Тип файла сонга в проекте: - &Inside Loop - &Внутри цикла + Project Path to song file: + Путь к файлу сонга в проекте: - &Outside Loop - &Вне цикла + Create project folder (recommended for audio projects) + Создать папку пректа (рекомендуется для аудио проектов) - Transpose - Транспонировать + Song information: + Информация о сонге: - Delete Overlaps - Удалить наложения + Write window state + - ScrollScale - - next page - след страница - + QObject - previous page - пред страница + Error + Ошибка - current page number - номер текущей страницы + Please first select the range for crescendo with the loop markers. + Выберите сначала маркерами диапазон для крещендо. - SetlenBase + QWidget - - MusE: Set Note Length - + Cannot convert sysex string + Невозможно конвертировать строку SysEx - - Range - Диапазон + Hex String too long (2048 bytes limit) + Hex-строка слишком длинная (предел 2048 байтов) - - All Events - + generic midi + обычный MIDI - - Selected Events - + new + новый - - Looped Events - + create peakfile for + создать пиковый файл для - - Selected Looped - + MusE: get file name + MusE: получить имя файла - - Value - Значение + The directory +%1 +does not exist. +Create it? + Папка +%1 +не существует. +Создать её? - - New length - + MusE: create directory + MusE: создать папку - - ticks - + creating dir failed + создание папки не удалось - - OK - + File +%1 +exists. Overwrite? + Файл +%1 +уже существует. Переписать? - - Cancel - Отмена + Open File +%1 +failed: %2 + Открытие файла +%1 +не удалось: %2 - - - ShortcutCaptureDialog - Ok - OK + MusE: write + MusE: записать - Cancel - Отмена + MusE: Open File + MusE: Открыть файл - Shortcut conflicts with - "Горячая клавиша" конфликтует с + None + Ничего - Undefined - Не назначено + No selection. Ignoring + Не выделено. Игнорируется - ShortcutCaptureDialogBase - - - Enter shortcut sequence - Введите последовательность "горячих клавиш" - - - - Press keys to enter shortcut sequence! - Нажмите клавиши для задания "горячих клавиш"! - - - - Old shortcut: - Старое сочетание: - + QuantBase - - - Undefined - Не назначено + MusE: Quantize + Квантование - - New shortcut: - Новое сочетание: + Range + Диапазон - - OK - ОК + All Events + Все События - - Cancel - Отмена + Selected Events + Выбранные События - - - ShortcutConfigBase - - Configure Keyboard Shortcuts - Настроить "горячие клавиши" + Looped Events + События в Цикле - - Shortcut Category - Категория "горячих клавиш" + Selected Looped + Выбранные в цикле - - Description - Описание + Values + Значения - - Shortcut - "Горячая клавиша" + Strength: + Сила: - - &Clear - &Очистить + % + % - - Alt+C - Alt+C + Threshold (ticks): + Порог (тики): - - &Define - Н&азначить + Quantize Len + Квантовать длину - - Alt+D - Alt+D + Raster + Растр - - &Apply - &Применить + Whole + Целая - - Alt+A - Alt+A + Half + Половинная - - - SigScale - signature scale - шкала ключей + 4th + 1/4 - - - SimpleDrumsGuiBase - - DrumSynth 0.1 - DrumSynth 0.1 + 4th Triplet + 1/4 Триоль - - - SimpleSynthGui - - &Load setup - З&агрузить настройки + 8th + 1/8 - - &Save setup - &Сохранить настройки + 8th Triplet + 1/8 Триоль - - Load sample dialog - Загрузить диалог сэмплов + 16th + 1/16 - - - Song - Jack shutdown! - Jack прекратил работу! + 16th Triplet + 1/16 Триоль - Jack has detected a performance problem which has lead to -MusE being disconnected. -This could happen due to a number of reasons: -- a performance issue with your particular setup. -- a bug in MusE (or possibly in another connected software). -- a random hiccup which might never occur again. -- jack was voluntary stopped by you or someone else -- jack crashed -If there is a persisting problem you are much welcome to discuss it -on the MusE mailinglist. -(there is information about joining the mailinglist on the MusE - homepage which is available through the help menu) - -To proceed check the status of Jack and try to restart it and then . -click on the Restart button. - Проблемы в работе "Jack", привели к его рассоединению с "MusE". -Это могло произойти по разным причинам: --проблемы в работе, вызванные особенностью ваших настроек. --баг в "MusE" (или, возможно, в других подсоединенных программах). --случайное выключение, которое больше никогда не повторится. --"Jack" остановлен вами или кем-нибудь еще. --"Jack" рухнул -Если это постоянная проблема мы приглашаем вас обсудить её -в почтовой рассылке "MusE". -(в меню "Помощь" есть информация о том, как присоединиться -к почтовой рассылке "MusE") - -Чтобы продолжить работу, проверте состояние "Jack", постарайтесь -перезапустить его, а затем щелкните по кнопке "Перезапустить". - - + 32th + 1/32 - previous event - предыдущее событие + 32th Triplet + 1/32 Триоль - next event - следующее событие + Swing: + Свинг: - set event - настроить событие + If the proposed change in tick or length is smaller than threshold, nothing is done. +If swing=0, this is normal +If swing is 33, you get a 2:1-rhythm. +If swing is -33, you get a 1:2-rhythm. + + Если предложенные изменения длины (или тиков) меньше порогового значения, +ничего не произойдет. +если свинг=0, это норма +если свинг = 33, это ритм (2:1). +если свинг = -33, то это ритм (1:2). - add event - добавить событие + OK + OK - erase event - стереть событие + Cancel + Отмена + + + RemoveBase - erase range - стереть диапазон + MusE: Erase Notes + MusE: Стереть ноты - clear automation - Очистить автоматизацию + Range + Диапазон - Clear all controller events? - Очистить все события контроллеров? + All Events + Все события - &Ok - &ОК + Selected Events + Выбранные события - &Cancel - &Отменить + Looped Events + События в цикле - MusE - external script failed - MusE - ошибка запуска внешнего скрипта + Selected Looped + Выбранные в цикле - MusE was unable to launch the script - - MusE не может запустить скрипт + Thresholds + Порог - - - SongInfo - - Song Information - Информация о проекте + ticks + тик(ов) - - Show on song load - + Velocity + Скорость нажатия - - &Cancel - &Отменить + Length + Длина - - Alt+C - Alt+C + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">(new line) +<html><head><meta name="qrichtext" content="1" /><style type="text/css">(new line) +p, li { white-space: pre-wrap; }(new line) +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;">(new line) +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p>(new line) +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p>(new line) +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - - &Ok - &ОК + OK + OK - - Alt+O - Alt+O + Cancel + Отмена - SynthConfigBase - - MusE: Synth Configuration - MusE: Настройка програм. синт. - - - - Soft Synthesizer - Программный синтезатор - - - - File - Файл - + RhythmGenerator - - Instances - Выбранный + + + + + RouteDialogBase - - - Name - Имя + MusE: Routing + MusE: Маршруты - - list of available software synthesizers - список доступных программных синтезаторов + Add Route + Добавить маршрут - - Add Instance - Добавить выбранный + Source: + Источник: - - Remove Instance - Удалить выбранный + Destination: + Назначение: - - Midi connections - MIDI-соединения + Connect + Соединить - - Midi Port - MIDI-порт + connect source to destination + Соединить источник с назначением - - Midi Port and Soft Synth Configuration - + Current Routes + Текущие маршруты - - - Type - Тип + Source + Источник - - Inst - Инстр + Destination + Назначение - - Version - Версия + Remove + Удалить - - Description - Описание + remove selected route + Удалить выбранный маршрут - TList + SS_PluginChooserBase - Show Gui - Показать ГИП + SimpleDrums - Ladspa Plugin Chooser + SimpleDrums - Выбор LADSPA-плагина - Add Midi Track - Добавить MIDI-трек + Name + Имя - Add Drum Track - Добавить трек с ударными + Label + Метка - Add Wave Track - Добавить Wave-трек + Inports + Порты входа - Delete Track - Удалить трек + Outports + Порты выхода - Track Comment - Комментарий к треку + Creator + Создатель - Midi - MIDI + &Cancel + &Отменить - Drum - Ударные + Alt+C + Alt+C - MusE: bad trackname - MusE: неверное имя трека + &OK + &ОК - please choose a unique track name - Выберите неповторяющееся имя для трека + Alt+O + Alt+О + + + SS_PluginFront - show gui - показать ГИП + Clear and unload effect + Очистить и выгрузить эффект - show native gui - показать ГИП + Load effect + Загрузить эффект - Add Output - Добавить Выход + Toggle display of effect parameters + Переключить дисплей параметров эффекта - Add Group - Добавить Группу + Turn effect on/off + Эффект вкл/выкл + + + SetlenBase - Add Input - Добавить Вход + MusE: Set Note Length + MusE: Установить длину ноты - Add Aux Send - Добавить Aux Посыл + Range + Диапазон - Update drummap? - Обновить карту ударных? + All Events + Все события - Do you want to use same port for all instruments in the drummap? - Вы хотите использовать один и тот же порт для всех инструментов в списке ударных? + Selected Events + Выбранные события - &Yes - &Да + Looped Events + События в цикле - &No - &Нет + Selected Looped + Выбранные в цикле - Do you want to use same port and channel for all instruments in the drummap? - Вы хотите использовать один и тот же порт и канал для всех инструментов в списке ударных? + Value + Значение - <none> - <ничего> + New length + Новая длина - - - TempoSig - Tempo/Sig - Темп/Знаки альтерации + ticks + тиков - - - TimeCanvas - Ctrl - Ctrl - + OK + OK - Add Controller View - Добавить Панель Контроллеров + Cancel + Отмена - Toolbar1 - - Solo - Соло - - - Cursor - Курсор - + ShortcutCaptureDialogBase - Snap - Привязка + Enter shortcut sequence + Введите последовательность "горячих клавиш" - Quantize - Квантовать + Press keys to enter shortcut sequence! + Нажмите клавиши для задания "горячих клавиш"! - To - К + Old shortcut: + Старое сочетание: - All Events - Все события + Undefined + Не назначено - Looped Ev. - Соб. в цикле + New shortcut: + Новое сочетание: - Selected Ev. - Выделенное соб. + OK + ОК - Looped+Sel. - В цикле+Выделенн. + Cancel + Отмена - TopWin + ShortcutConfigBase - Arranger - Компоновщик + Configure Keyboard Shortcuts + Настроить "горячие клавиши" - - - TrackComment - MusE: Track Comment - MusE: Комментарий к треку + Shortcut Category + Категория "горячих клавиш" - Track Comment: - Комментарий к треку: + Description + Описание - - - Transport - Overdub - Наложить + Shortcut + "Горячая клавиша" - Replace - Заменить + &Clear + &Очистить - Rec Mode - Режим записи + Alt+C + Alt+C - Normal - Норм. + &Define + Н&азначить - Mix - Смешать + Alt+D + Alt+D - Cycle Rec - Циклич. запись + &Apply + &Применить - punchin - нач. врезки + Alt+A + Alt+A + + + SimpleDrumsGuiBase - loop - цикл + DrumSynth 0.1 + DrumSynth 0.1 + + + SimpleSynthGui - punchout - кнц. врезки + &Load setup + З&агрузить настройки - Punch In - Начало врезки + &Save setup + &Сохранить настройки - Loop - Цикл + Load sample dialog + Загрузить диалог сэмплов + + + + SongInfo + + Song Information + Информация о проекте - Punch Out - Конец врезки + Show on song load + Показывать при загрузке - Left Mark - Левый маркер + &Cancel + &Отменить - Right Mark - Правый маркер + Alt+C + Alt+C - rewind to start - перемотать к началу + &Ok + &ОК - rewind - перемотать назад + Alt+O + Alt+O + + + SynthConfigBase - forward - перемотать вперёд + Soft Synthesizer + Программный синтезатор - stop - остановить + File + Файл - play - воспроизвести + Instances + Выбранный - record - записать + Name + Имя - AC - AC + list of available software synthesizers + список доступных программных синтезаторов - quantize during record - квантовать при записи + Add Instance + Добавить выбранный - Click - Метр. + Remove Instance + Удалить выбранный - metronom click on/off - Метроном вкл/выкл + Midi connections + MIDI-соединения - Sync - Синхр. + Midi Port + MIDI-порт - external sync on/off - Вкл/выкл внешн. синхр. + Midi Port and Soft Synth Configuration + Midi-порт и Конфигурация Синтезатора - Master - Мастер + Type + Тип - use master track - использовать мастер-трек + Inst + Инстр - Jack - Jack + Version + Версия - Jack transport sync on/off - Синхр. транспорта "Jack" вкл/выкл + Description + Описание TransposeBase - MusE: Transpose - + MusE: Транспонировать - Range - Диапазон + Диапазон - All Events - + Все События - Selected Events - + Выбранные События - Looped Events - + События в Цикле - Selected Looped - + Выбранные в Цикле - Value - Значение + Значение - Halftone-steps - - - - - OK - - - - - Cancel - Отмена - - - - TransposeDialogBase - - MusE: Midi Transpose - MusE: MIDI-транспонирование - - - Value - Значение - - - halftones - полутонов - - - Time - Время - - - all - всё - - - between markers - между маркерами - - - Parts - Партии - - - all in selected tracks - все в выбранных треках + Полутоновые шаги OK - ОК + OK Cancel - Отмена + Отмена UnusedWaveFiles - Dialog - + Диалог - List of unused audio files in current project directory: - + Список неиспользуемых аудио файлов в папке проекта: - Current project - + Текущий проект - All .med files in current directory - + Все .med файлы +в текущей +папке - Move files to 'unused' subdir - + Переместить файлы в подпапку 'unused' - Cancel - Отмена + Отмена VAMGui - MusE: Load VAM Presets MusE: загрузить пресеты VAM - - MusE: Save VAM Presets MusE: сохраненить пресеты VAM @@ -20012,948 +10144,563 @@ VAMGuiBase - Virtual Analogue for MusE Виртуальный Аналог для MusE - LFO LFO - Freq Частота - - - Waveform Форма волны - - - Sine Синусоида - - - Pulse Пульс - - - Saw Пилообразная - - - Triangle Треугольная - Filter Фильтр - EnvMod Режим Огибающей - - - Attack Атака - - - Decay Спад - - - Sustain Стационарная часть - - - Release Послезвучие - Cutoff Отсечка - Resonance Резонанс - Invert Инвертировать - KeyTrack Трекинг клавиатуры - Presets Пресеты - Set Установить - load preset list Загрузить список пресетов - save preset list Сохранить список пресетов - save preset list to a new file Сохранить список пресетов в новый файл - delete preset Удалить пресет - DCO 1 DCO 1 - - Pitch Высота тона - - Detune Расстройка - - PWM PWM - - FM FM - - PW PW - DCO 2 DCO 2 - On Вкл - VAM 1.0beta2 -Virtual Analog for MusE -Released under GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) - VAM 1.0beta2 -Виртуальный Аналог для MusE -Выпущено на условиях GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) - - - VAM 1.0beta3 -Virtual Analog for MusE -Released under GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) -Copyright(C) 2005 -Robert Jonsson -(rj@spamatica.se) - VAM 1.0бета3 -Виртуальный Аналог для MusE -Выпущен на условиях GPL. -Copyright(C) 2002 -Jotsif Lindman Hörnlund -( jotsif@linux.nu ) -Copyright(C) 2005 -Robert Jonsson -(rj@spamatica.se) - - - - VelocityBase - - - MusE: Modify Velocity - MusE: Изменить скорость нажатия - - - - Range - Диапазон - - - - All Events - Все События - - - - Selected Events - Выбранные События - - - - Looped Events - События в Цикле - - - Selected & Looped - Выбранные & в Цикле - - - - Values - Значения - - - - Rate: - Частота: - - - - Offset: - Смещение: - - - - % - % - - - - Selected Looped - - - - - veloNew = (veloOld * rate) + offset - - - - - OK - - - - - Cancel - Отмена - - - - WTScale - - bar scale - линейка тактов - - - - WaveEdit - - &File - &Файл - - - weTools - weTools - - - Solo - Соло - - - Cursor - Курсор - - - &Edit - &Правка - - - Func&tions - Фу&нкции - - - 200% - 200% - - - 150% - 150% - - - 75% - 75% - - - 50% - 50% - - - 25% - 25% - - - Other - Другой - - - &Gain - &Усиление - - - &Copy - С&копировать - - - C&ut - &Вырезать - - - &Paste - &Вставить - - - Edit in E&xternal Editor - Редактировать во &внешнем редакторе - - - Mute Selection - Заглушить выделенное - - - Normalize Selection - Нормализовать выделенное - - - Fade In Selection - Нарастание звука в выделенном - - - Fade Out Selection - Затихание звука в выделенном - - - Reverse Selection - Перевернуть выделенное - - - Select &All - Выделить &Всё - - - &Deselect All - &Убрать выделение - - - Select - Выделить - - - Wave edit tools - Инструменты редактирования Wave - - - transport - транспорт - - - Pianoroll tools - Инструменты пианоролла +Virtual Analog for MusE +Released under GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) +Copyright(C) 2005 +Robert Jonsson +(rj@spamatica.se) + VAM 1.0бета3 +Виртуальный Аналог для MusE +Выпущен на условиях GPL. +Copyright(C) 2002 +Jotsif Lindman Hörnlund +( jotsif@linux.nu ) +Copyright(C) 2005 +Robert Jonsson +(rj@spamatica.se) - WaveTrackInfoBase + VelocityBase - MusE: TrackInfo - MusE: Трекинфо + MusE: Modify Velocity + MusE: Изменить скорость нажатия - Track Info - Трек Инфо + Range + Диапазон - Track Name - Имя трека + All Events + Все События - Output Route: - Маршрут выхода: + Selected Events + Выбранные События - Input Route: - Маршрут входа: + Looped Events + События в Цикле - Ports: - Порты: + Values + Значения - Mono - Моно + Rate: + Частота: - Stereo - Стерео + Offset: + Смещение: - - - WaveView - MusE - file size changed - MusE - размер файла изменился + % + % - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted - При редактировании во внешнем редакторе - не изменяйте размер файла -так как он должен соответствовать выбранной области. - -Утерянные данные заглушены + Selected Looped + Выбранные в Цикле - MusE - external editor failed - MusE - ошибка запуска внешнего редактора + veloNew = (veloOld * rate) + offset + Скор.нажНовая = (скор.нажСтарая * частоту) + смещение - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. - "MusE" не может запустить внешний редактор. -Проверте, действительно ли в: -Общие настройки->Аудио:Внешний редактор -выбран правильный редактор. + OK + + + + Cancel + Отмена file_patterns - Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) - + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) - Midi (*.mid *.MID *.mid.gz *.mid.bz2) - + Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) - Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2) - + Караоке (*.kar *.KAR *.kar.gz *.kar.bz2) - - - - - - - - - - - - All Files (*) - Все файлы (*) + Все файлы (*) - Midi (*.mid) - + Midi (*.mid) - Karaoke (*.kar) - + Караоке (*.kar) - all known files (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) - + все известные файлы (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) - med Files (*.med *.med.gz *.med.bz2) - + Файлы med (*.med *.med.gz *.med.bz2) - - - Uncompressed med Files (*.med) - + Несжатые файлы med (*.med) - - - gzip compressed med Files (*.med.gz) - + Сжатые файлы med (*.med.gz) - - - bzip2 compressed med Files (*.med.bz2) - + Сжатые файлы med (*.med.bz2) - mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - + Файлы mid (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - (*.jpg *.gif *.png) - + (*.jpg *.gif *.png) - (*.jpg) - + (*.jpg) - (*.gif) - + (*.gif) - (*.png) - + (*.png) - part Files (*.mpt *.mpt.gz *.mpt.bz2) - + Файлы партии (*.mpt *.mpt.gz *.mpt.bz2) - part Files (*.mpt) - + Файлы партии (*.mpt) - gzip compressed part Files (*.mpt.gz) - + Сжатые файлы партии (*.mpt.gz) - bzip2 compressed part Files (*.mpt.bz2) - + Сжатые файлы партии (*.mpt.bz2) - Presets (*.pre *.pre.gz *.pre.bz2) - + Пресеты (*.pre *.pre.gz *.pre.bz2) - Presets (*.pre) - + Пресеты (*.pre) - gzip compressed presets (*.pre.gz) - + Сжатые пресеты (*.pre.gz) - bzip2 compressed presets (*.pre.bz2) - + Сжатые пресеты (*.pre.bz2) - Presets (*.map *.map.gz *.map.bz2) - + Пресеты (*.map *.map.gz *.map.bz2) - Presets (*.map) - + Пресеты (*.map) - gzip compressed presets (*.map.gz) - + Сжатые пресеты (*.map.gz) - bzip2 compressed presets (*.map.bz2) - + Сжатые пресеты (*.map.bz2) - Wave/Binary (*.wav *.ogg *.bin) - + Wave/Бинарные (*.wav *.ogg *.bin) - Wave (*.wav *.ogg) - + Wave (*.wav *.ogg) - Binary (*.bin) - + Бинарные (*.bin) freeverb - FreeVerb FreeVerb - Rooom Size - Размер помещения - - - Damping Демпфирование - Wet Level Уровень "Влажного" сигнала - Tap-Reverberator Пленочный Ревербератор - Decay [ms] Спад(мсек) - - dB дБ - Dry Level [dB] Уровень "Сухого" сигнала [дб] - Wet Level [dB] Уровень "Влажного" сигнала [Дб] - Preset: Пресет: - AfterBurn Запаздывающее Нарастание - AfterBurn (Long) Запаздывающее Нарастание (Длинное) - Ambience Окружение - Ambience (Thick) Окружение (Плотное) - Ambience (Thick) - HD Окружение (Плотное) - HD - Cathedral Кафедральный Собор - Cathedral - HD Кафедральный Собор - HD - Drum Chamber Комната для Ударных - Garage Гараж - Garage (Bright) Гараж (Яркий) - Gymnasium Гимнастический зал - Gymnasium (Bright) Гимнастический зал (Яркий) - Gymnasium (Bright) - HD Гимнастический зал (Яркий) - HD - Hall (Small) Зал (Небольшой) - Hall (Medium) Зал (Средний) - Hall (Large) Зал (Большой) - Hall (Large) - HD Зал (Большой) - HD - Plate (Small) Plate реверб (Маленькая) - Plate (Medium) Plate реверб (Средняя) - Room Size Размер помещения - Plate (Large) Plate реверб (Большая) - Plate (Large) - HD Plate реверб (Большая) - HD - Pulse Chamber Пульсирующая комната - Pulse Chamber (Reverse) Пульсирующая комната (Реверс) - Resonator (96 ms) Резонатор (96 мсек) - Resonator (152 ms) Резонатор (152 мсек) - Resonator (208 ms) Резонатор (208 мсек) - Room (Small) Помещение (Маленькое) - Room (Medium) Помещение (Среднее) - Room (Large) Помещение (Большое) - Room (Large) - HD Помещение (Большое) - HD - Slap Chamber Комната "slap" - Slap Chamber - HD Комната "slap" - HD - Slap Chamber (Bright) Комната "slap" (Яркая) - Slap Chamber (Bright) HD Комната "slap" (Яркая) HD - Smooth Hall (Small) Ровный зал (Небольшой) - Smooth Hall (Medium) Ровный зал (Средний) - Smooth Hall (Large) Ровный зал (Большой) - Smooth Hall (Large) - HD Ровный зал (Большой) - HD - Vocal Plate Вокальная Plate-реверб - Vocal Plate - HD Вокальная Plate-реверб - HD - Warble Chamber Журчащая комната - Warehoouse Склад - Warehouse - HD Склад - HD - Comb Filters Причесывающие фильтры - Allpass Filters Широкополосный фильтр - Bandpass Filters Полосовой фильтр - Enhanced Stereo Расширенное стерео @@ -20961,875 +10708,700 @@ shortcuts - Transport: Start playback from current location - + Транспорт: Начать проигрывание с текущей позиции - Transport: Toggle metronome - + Транспорт: Метроном вкл/выкл - Transport: Stop Playback - + Транспорт: Стоп - Transport: Goto Start - + Транспорт:: Перейти к началу - Transport: Play, Stop, Rewind - + Транспорт: Воспр., Стоп, Перемотка - Transport: Goto left marker - + Транспорт: Перейти к левому маркеру - Transport: Goto right marker - + Транспорт: Перейти к правому маркеру - Transport: Toggle Loop section - + Транспорт: Цикл вкл/выкл - Transport: Toggle Record - + Транспорт: Запись вкл/выкл - Transport: Clear all rec enabled tracks - + Транспорт: Снять назначенную запись со всех треков - Toggle fullscreen - + Полный экран вкл/выкл - Edit: Copy - + Правка: Копировать - Edit: Copy in range - + Правка: Копировать диапазон - Edit: Undo - + Правка: Отменить - Edit: Redo - + Правка: Вернуть - Edit: Cut - + Правка: Вырезать - Edit: Paste - + Правка: Вставить - Edit: Paste (with dialog) - + Правка: Вставить (с диалогом) - Edit: Delete - + Правка: Удалить - File: New project - + Файл: Новый проект - File: Open from disk - + Файл: Открыть с диска - File: Save project - + Файл: Сохранить проект - File: Open recent file - + Файл: Открыть недавние - File: Save as - + Файл: Сохранить как - File: Load template - + Файл: Загрузить шаблон - File: Import midi file - + Файл: Импортировать midi файл - File: Export midi file - + Файл: Экспортировать midi файл - File: Import midi part - + Файл: Импортировать midi партию - File: Import audio file - + Файл: Импортировать аудио файл - File: Quit MusE - + Файл: Выйти из программы - Edit: Select parts on track - + Правка: Выбрать партии в треке - Open pianoroll - + Открыть пианоролл - Open drumeditor - + Открыть редактор ударных - Open listeditor - + Открыть редактор списка - Open waveeditor - + Открыть wave-редактор - Open graphical mastertrack editor - + Открыть редактор графика мастер-трека - Open list mastertrack editor - + Открыть редактор списка мастер-трека - Open midi transformer - + Открыть преобразователь midi-событий - Add midi track - + Добавить midi-трек - Add drum track - + Добавить трек ударных - Add wave track - + Добавить wave-трек - Add audio output - + Добавить аудио выход - Add audio group - + Добавить аудио-группу - Add audio input - + Добавить аудио вход - Add audio aux - + Добавить аудио aux - Structure: Global cut - + Структура: Общая вырезка - Structure: Global insert - + Структура: Общая вставка - Structure: Global split - + Структура: Общее разделение - Structure: Cut events - + Структура: Вырезать события - View: Open mixer #1 window - + Вид: Открыть окно микшера #1 - View: Open mixer #2 window - + Вид: Открыть окно микшера #2 - View: Toggle transport window - + Вид: Откр/закр окно транспорта - View: Toggle bigtime window - + Вид: Откр/закр окно хронометра - View: Open marker window - + Вид: Открыть окно маркеров - Settings: Follow song by page - + Настройки: Следовать за проектом постранично - Settings: Follow song off - + Настройки: Не следовать за проектом - Settings: Follow song continuous - + Настройки: Следовать за проектом непрерывно - Settings: Global configuration - + Настройки: Общая конфигурация - Settings: Configure shortcuts - + Настройки: Настроить "горячие клавиши" - Settings: Configure metronome - + Настройки: Настроить метроном - Settings: Midi sync configuration - + Настройки: Конфигурация midi-синхр - Settings: Midi file import/export configuration - + Настройки: Настройка экспорта/импорта Midi-файла - Settings: Appearance settings - + Настройки: Настройки внешнего вида - Settings: Midi ports / Soft Synth - + Настройки: Midi-порты / Синтезаторы - Settings: Audio subsystem configuration - + Настройки: Конфигурация аудио-подсистемы - Midi: Edit midi instruments - + Midi: Редактировать midi-инструмент - Midi: Open midi input transform - + Midi: Открыть преобразователь midi-входа - Midi: Open midi input filter - + Midi: Открыть фильтр midi-входа - Midi: Midi input transpose - + Midi: Транспозиция midi-входа - Midi: Midi remote control - + Midi: Дистанционный midi-контроль - Midi: Random rhythm generator - + Midi: Генератор случайного ритма - Midi: Reset midi - + Midi: Сброс настроек midi - Midi: Init midi - + Midi: Инициализация midi - Midi: Midi local off - + Midi: Локальное управление отключено - Audio: Bounce audio to track - + Аудио: Свести аудио в трек - Audio: Bounce audio to file - + Аудио: Свести аудио в файл - Audio: Restart audio - + Аудио: Перезапустить аудио - Automation: Mixer automation - + Автоматизация: Автоматизация микшера - Automation: Take mixer snapshot - + Automation: Сделать снимок микшера - Automation: Clear mixer automation - + Automation: Очистить автоматизацию микшера - Help: Open Manual - + Справка: Открыть руководство - Help: Toggle whatsthis mode - + Справка: Что это? - - Edit: Edit selected part - + Правка: Редактировать выбранную партию - Edit: Select nearest part on track above - + Правка: Выбрать ближайшую партию треком выше - Edit: Add nearest part on track above - + Правка: Добавить ближайшую партию треком выше - Edit: Select nearest part on track below - + Правка: Выбрать ближайшую партию треком ниже - Edit: Add nearest part on track below - + Правка: Добавить ближайшую партию треком ниже - Edit: Insert empty measure - + Правка: Вставить пустой такт - Edit: Paste as clones - + Правка: Вставить как клон - Edit: Paste as clones (with dialog) - + Правка: Вставить как клон (с диалогом) - Select track above - + Выбрать трек выше - Select track below - + Выбрать трек ниже - Midi: Transpose - + Midi: Транпонировать - Edit: Select all - + Правка: Выбрать всё - Edit: Select none - + Правка: Снять выделение - Edit: Invert Selection - + Правка: Инвертировать выделенное - Edit: Select events/parts inside locators - + Правка: Выбрать события/партии внутри локаторов - Edit: Select events/parts outside locators - + Правка: Выбрать события/партии вне локаторов - Edit: Select previous part - + Правка: Выбрать предыдущую партию - Edit: Select next part - + Правка: Выбрать следующую партию - Edit: Select nearest part/event to the left or move cursor - + Правка: Выбрать ближайшую партию/событие слева или передвинуть курсор - Edit: Add nearest part/event to the left to selection - + Правка: Добавить к выделенному ближайшую партию/событие слева - Edit: Select nearest part/event to the right or move cursor - + Правка: Выбрать ближайшую партию/событие справа или передвинуть курсор - Edit: Add nearest part/event to the right to selection - + Правка: Добавить к выделенному ближайшую партию/событие справа - Edit: Set locators to selection - + Правка: Поставить локаторы на выбранный диапазон - Edit: Increase pitch - + Правка: Повысить высоту тона - Edit: Decrease pitch - + Правка: Понизить высоту тона - Edit: Increase event position - + Правка: Увеличить позицию события - Edit: Decrease event position - + Правка: Уменьшить позицию события - View: Zoom in - + Вид: Увеличить - View: Zoom out - + Вид: Уменьшить - View: Goto Current Position - + Вид: Перейти к текущей позиции - - View: Scroll left - + Вид: Прокрутить влево - Edit: Set Fixed Length on Midi Events - + Правка: Установить фикс. длину midi-событий - Quantize - Квантовать + Квантовать - Modify Note Length - + Изменить длительность ноты - Modify Velocity - + Изменить скорость нажатия - Edit: Crescendo - + Правка: Крещендо - Edit: Thin Out - + Правка: Сделать выборку - Edit: Erase Event - + Правка: Удалить событие - Edit: Delete Overlaps - + Правка: Убрать наложения - Edit: Note Shift - + Правка: Сдвиг ноты - Edit: Move Clock - + Правка: Передвинуть время - Edit: Copy Measure - + Правка: Скопировать такт - Edit: Erase Measure - + Правка: Убрать такт - Edit: Delete Measure - + Правка: Удалить такт - Edit: Create Measure - + Правка: Создать такт - Edit: Change Event Color - + Правка: Изменить цвет события - Tool: Pointer - + Инструменты: Указатель - Tool: Pencil - + Инструменты: Карандаш - Tool: Eraser - + Инструменты: Ластик - Tool: Line Draw - + Инструменты: Рисовать линию - Tool: Cursor - + Инструменты: Курсор - Add note velocity 1 - + Добавить скорость нажатия 1 - Add note velocity 2 - + Добавить скорость нажатия 2 - Add note velocity 3 - + Добавить скорость нажатия 3 - Add note velocity 4 - + Добавить скорость нажатия 4 - Cursor step size: larger - + Размер шага курсора: больше - Cursor step size: smaller - + Размер шага курсора: меньше - Instrument/Cursor up - + Инструмент/Курсор вверх - Instrument/Cursor down - + Инструмент/Курсор вниз - Tool: Scissor - + Tool: Ножницы - Tool: Glue - + Tool: Клей - Tool: Mute - + Tool: Без звука - Transport: Increase current position - + Транспорт: Увеличить тек. позицию - Transport: Decrease current position - + Транспорт: Уменьшить тек. позицию - Transport: Increase current position, no snap - + Транспорт: Увеличить тек. позицию, без привязки - Transport: Decrease current position, no snap - + Транспорт: Уменьшить тек. позицию, без привязки - Quantize: Set quantize to 1/1 note - + Квантование: Квантовать целыми (1/1) - Quantize: Set quantize to 1/2 note - + Квантование: Квантовать половинными (1/2) - Quantize: Set quantize to 1/4 note - + Квантование: Квантовать четвертными (1/4) - Quantize: Set quantize to 1/8 note - + Квантование: Квантовать восьмыми (1/8) - Quantize: Set quantize to 1/16 note - + Квантование: Квантовать шестнадцатыми (1/16) - Quantize: Set quantize to 1/32 note - + Квантование: Квантовать тридцатьвторыми (1/32) - Quantize: Set quantize to 1/64 note - + Квантование: Квантовать шестьдесятчетвертыми (1/64) - Quantize: Toggle triol quantization - + Квантование: Вкл/выкл триоль - Quantize: Toggle punctuation quantization - + Квантование: Вкл/выкл точку - Quantize: Toggle punctuation quantization (2) - + Квантование: Вкл/выкл двойную точку - Edit: Insert at location - + Правка: Вставить сюда - Edit: Increase length - + Правка: Увеличить длину - Edit: Decrease length - + Правка: Уменьшить длину - Insert Note - Вставить ноту + Вставить ноту - Insert SysEx - Вставить SysEx + Вставить SysEx - Insert Ctrl - Вставить кнтрл + Вставить кнтрл - Insert Meta - Вставить Meta + Вставить Meta - Insert Channel Aftertouch - Вставить Channel Aftertouch + Вставить Channel Aftertouch - Insert Key Aftertouch - Вставить Key Aftertouch + Вставить Key Aftertouch - Insert Tempo - Вставить темп + Вставить темп - Insert Signature - Вставить размер + Вставить размер - Change Event Position - + Изменить позицию события - Edit Event Value - + Редактировать значение события - Insert Key - + Вставить ключ - Goto Next Marker - + Перейти к след. маркеру - Goto Prev Marker - + Перейти к предыд. маркеру diff -Nru muse-2.0~rc2/share/locale/muse_sv_SE.ts muse-2.0/share/locale/muse_sv_SE.ts --- muse-2.0~rc2/share/locale/muse_sv_SE.ts 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/locale/muse_sv_SE.ts 2012-06-30 19:24:42.000000000 +0200 @@ -1,209 +1,9 @@ - + + + @default - Click this button to enable recording - Klicka här för att spela in - - - sets amount of quantization: -0 - no quantization -100 - full quantization - Sätter mängden kvantisering: -0 - ingen kvantisering -100 - full kvantisering - - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - välj pek-verktyg: -med pekverktyget kan du: - välja parter - flytta parter - kopiera parter - - - Click this button to stop playback - Klicka här för att stoppa uppspelning - - - Click this button to start playback - Klicka här för att starta uppspelning - - - Click this button to rewind to start position - Klicka här för att spola tillbaks till början - - - Click this button to rewind - Klicka här för att flytta markören bakåt - - - Click this button to forward current play position - Klicka här för att flytta markören framåt - - - don't quantize notes above this tick limit - Kvantisera inte över denna tick gräns - - - quantize also note len as default - Kvantisera "note len" som standard - - - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Klicka här för att öppna en <em>ny sång</em>.<br>Du kan också välja menyvalet <b>Öppna</b> från Arkivmenyn. - - - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Klicka här för att spara den sång du håller på att redigera. En förfrågan om filnamn kommer att ställas. -Du kan också välja menyalternativet Spara från Arkivmenyn. - - - Create New Song - Ny sång - - - loop between left mark and right mark - loopa mellan vänster och höger markering - - - record starts at left mark - inspelning börjar vid vänster markering - - - record stops at right mark - inspelning slutar vid höger markering - - - rewind to start position - spola tillbaka till startposition - - - rewind current position - flytta markör bakåt - - - move current position - flytta markör - - - stop sequencer - stoppa sequencer - - - start sequencer play - starta sequenceruppspelning - - - to record press record and then play - för att spela in, tryck på record och sedan play - - - send note off to all midi channels - skicka note-off till alla midi kanaler - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - välj Pennverktyg: -med pennverktyget kan du: - skapa parter - ändra längden på parter - - - - select Delete Tool: -with the delete tool you can delete parts - välj Suddverktyg: -med suddverktyget kan du ta bort parter - - - select Cut Tool: -with the cut tool you can split a part - välj Delningsverktyg: -med delningsverktyget kan du dela på parter - - - select Glue Tool: -with the glue tool you can glue two parts - välj Limverktyg: -med limverktyget kan du limma ihop två parter - - - select Score Tool: - - välj Partiturverktyg: - - - - select Quantize Tool: -insert display quantize event - välj Kvantiseringsverktyg: -sätt in kvantiseringshändelser - - - select Drawing Tool - välj Ritverktyg - - - - select Muting Tool: -click on part to mute/unmute - välj Tystningsverktyg: -klicka på en part för att Tysta/Avtysta - - - pointer - pekare - - - pencil - penna - - - rubber - sudd - - - cutter - delare - - - score - partitur - - - glue - lim - - - quantize - kvantisering - - - draw - rita - - - mute parts - tysta parter - - - Off - Av - - - All Files (*) - Alla filer (*) - - Add Midi Track Lägg till Midispår @@ -232,40 +32,28 @@ Lägg till Aux-Send - eraser - sudd - - Add Synth Lägg till Synth - Bar - Takt - - Route Koppling dest - källa + mål name="%1"/ namn="%1"/ - Velocity - Hastighet - - Warning: No output devices! Varning: Inga utgångsenheter! Open midi config... - Öppna midi config... + Öppna midikonfiguration... Empty ports @@ -277,46 +65,33 @@ channelMask="%1" - kanal mask="%1" - - - - AboutBox - - AboutBox - Om + kanalmask="%1" - Keep On Rocking! - Rocka på! + Select project directory + Välj projektkatalog - Version 0.7.2pre5 - -(C) Copyright 1999-2005 Werner Schweer and others. -See http://www.muse-sequencer.org for new versions and -more information. - -Published under the GNU Public License - Version 0.7.2pre5 - -(C) Copyright 1999-2005 Werner Schweer och andra. -Se http://www.muse-sequencer.org för nya versioner och -och mer information. - -Publiserad under GNU Public License + Bad timing + Dålig timing - Version 2 pre-alpha - + Timing source frequency is %1hz, which is below the recommended minimum: 500hz! +This could lead to audible timing problems for MIDI. +Please see the FAQ on http://muse-sequencer.org for remedies. +Also please check console output for any further error messages. + + Frekvensen på tidkällan är %1hz vilket är under det rekommenderade minsta värdet: 500hz! +Det kan leda till hörbara timingproblem för MIDI. +See FAQ på http://muse-sequencer.org för lösningsförslag. +See också terminalutskrifter för eventuella fler felmeddelanden. + + + AboutBox - (C) Copyright 1999-2010 Werner Schweer and others. -See http://www.muse-sequencer.org for new versions and -more information. - -Published under the GNU Public License - + AboutBox + Om &Keep On Rocking! @@ -326,41 +101,26 @@ Alt+K - - - Appearance - - handle of transport window - handtag för transportfönster - - - track activity in arranger - spår-aktivitet i Arrangeraren - - - bigtime font color - bigtime typsnittsfärg - - - bigtime background color - bigtime bakgrundsfärg - - waveedit background color - audioeditor bakgrundsfärg + Version 2 + - MusE: load image - MusE: ladda bild + (C) Copyright 1999-2012 Werner Schweer and others. +See http://www.muse-sequencer.org for new versions and +more information. + +Published under the GNU Public License + (C) Copyright 1999-2012 Werner Schweer och andra. +Se http://www.muse-sequencer.org för nya versioner och +mer information. + +Publicerad under GNU Public License AppearanceDialogBase - MusE: Appearance Settings - MusE: Utseendeinställningar - - Apply Verkställ @@ -381,10 +141,6 @@ Parter - show frames - visa ramar - - show names visa namn @@ -437,10 +193,6 @@ Bakgrundsbild - select... - välj... - - show snap grid visa rutnät @@ -453,22 +205,6 @@ - selected - vald - - - current: - nuvarande: - - - change... - byt... - - - dynamic colors for track activity in arranger - dynamisk färgallokering för spåraktivitet i arranger - - Style/Fonts Stil/Typsnitt @@ -546,7 +282,7 @@ ... - ... + Color name: @@ -570,7 +306,7 @@ MusE: Appearance settings - MusE: Utseende inställningar + MusE: Utseendeinställningar add @@ -614,398 +350,119 @@ Style Sheet: - + Font 6 Typsnitt 6 - - - Arranger - Arranger - Arrangerare + 1 + 1 - Cursor - Markör + May require restarting MusE for best results + Kan kräva omstart av MusE för bästa resultat + + + ArrangerColumnsBase - Off - Av + Configure arranger columns + Konfigurera arrangerarkolumner - Bar - Takt + Columns: + Kolumner: - Snap - Fäst vid + Name: + Namn: - Len - Längd + Controller type: + Kontroltyp: - Type - Typ + Midi controller type + Midi kontrolltyp - midi song type - typ av midsång + Control7 + Kontroll7 - Pitch - Tonhöjd + Control14 + Kontroll14 - TrackInfo - Spårinfo + RPN + - Track - Spår + NRPN + - Master - Master + RPN14 + - Group A - Grupp A - - - Group B - Grupp B - - - Group C - Grupp C - - - Group D - Grupp D - - - Enable Recording - Slå på Inspelning - - - Solo Indicator - Solo-Indikator - - - Track Type - Spårtyp - - - Track Name - Spårnamn - - - Time Lock - Tidlås - - - - ArrangerView - - panic - panik - - - C&ut - Klipp &ut - - - &Copy - &Kopiera - - - &Paste - K&listra in - - - Delete Selected Tracks - Ta bort valda spår - - - Add Track - Lägg Till Spår - - - Select - Välj - - - Select &All - Markera &Allt - - - &Deselect All - A&vmarkera Allt - - - Invert &Selection - Invertera &Markering - - - &Inside Loop - &I Loop - - - &Outside Loop - &Utanför Loop - - - All &Parts on Track - Alla &Parter i spår - - - Score - Partitur - - - Pianoroll - Pianorulle - - - Drums - Trummor - - - List - Lista - - - Wave - Wave - - - Mastertrack - Masterspår - - - Graphic - Grafik - - - Midi &Transform - Midi &Transform - - - Global Cut - Globalt klipp - - - Global Insert - Global insättning - - - Global Split - Global delning - - - &Edit - &Redigera - - - &Structure - &Struktur - - - Functions - Funktioner - - - Transpose - Transponera - - - New - Ny - - - - AudioConfBase - - MusE: Audio Configuration - MusE: Ljudinställningar - - - &Apply - &Verkställ - - - &OK - &Ok - - - &Cancel - &Avbryt - - - Audio Parameters - Ljudparametrar - - - Frame Size: - Ramstorlek: - - - Delay: - Fördröjning(ms): - - - Sample Rate: - Samplingsfrekvens: - - - Audio Driver - Ljuddrivrutin - - - Use Alsa - Använd Alsa - - - Use JACK - Använd JACK - - - No Audio - Ljud avstängt - - - - AudioMixerApp - - 1/2 channel - 1/2 kanal - - - record - inspelning - - - mute - tysta - - - pre fader listening - pre fader lyssning - - - record downmix - spela in nermixning - - - off - av - - - &Config - &Inställningar - - - Add Input Strip - Lägg till Input-remsa - - - Inputs - Ingångar - - - Tracks - Spår - - - Groups - Grupper - - - Master - Master - - - Group A - Grupp A - - - Group B - Grupp B - - - Group C - Grupp C - - - Group D - Grupp D - - - None - Ingen - - - &Create - &Skapa + NRPN14 + - - - AudioStrip - aux send level - aux send nivå + Pitch + Tonhöjd - off - av + Program + - 1/2 channel - 1/2 kanal + H-Ctrl + - mute - tysta + Midi controller number high byte + Midikontroll-nummer, hög byte - record downmix - spela in nermixning + L-Ctrl + - pre fader listening - pre fader lyssning + Midi controller number low byte + Midikontrollnummer, låg byte - intput routing - ingångsrouting + * + wild card + - output routing - utgångsrouting + affect CCs at + påverkar CC vid - Off - Av + begin of song + början på sång - Read - Läs + current position + nuvarande position - Write - Skriv + &Add + &Lägg till - automation type - automationstyp + &Delete + &Ta bort - Channel - Kanal + Done + Färdig @@ -1027,28 +484,6 @@ - BigTime - - minute - minut - - - second - sekund - - - - ClipListEdit - - MusE: Clip List Editor - MusE: Clip-listredigerare - - - panic - panik - - - ClipListEditorBase MusE: ClipList @@ -1064,7 +499,7 @@ Start - Start + Start Len @@ -1084,7 +519,11 @@ Len: - Längd + Längd: + + + Samplerate + Samplingshastighet @@ -1122,31 +561,27 @@ Format: - + Format: 96 - + 96 192 - + 192 384 - + 384 Division: - + Division: Copyright: - - - - Enable extended smf format - Slå på utbyggt smf-format + Copyright: MusE: Config Midi File Import/Export @@ -1154,7 +589,7 @@ Import: - + Importera: Split tracks into &parts @@ -1162,19 +597,19 @@ Alt+P - + Alt+P Split tracks into parts, or one single part - Dela spå i parter, eller en enda part + Dela spår i parter, eller en enda part Export: - + Exportera: Enable extended smf format (currently not implemented) - SLå på utbyggt smf-format (ej implementerat) + Slå på utbyggt smf-format (ej implementerat) Use &2-byte time signatures instead of standard 4 @@ -1182,11 +617,11 @@ Alt+2 - + Alt+2 Note: Format 0 uses the FIRST midi track's name/comment in the arranger - Notera: Foramt 0 använder det FÖRSTA midi spårets namn/kommentar i arrangeraren + Notera: Format 0 använder det FÖRSTA midi spårets namn/kommentar i arrangeraren Save space by replacing note-offs with &zero velocity note-ons @@ -1194,14 +629,14 @@ Alt+Z - + Alt+Z CrescendoBase MusE: Crescendo/Decrescendo - + MusE: Crescendo/Decrescendo Range @@ -1209,7 +644,7 @@ Looped Events - Loopade Händelser + Loopade händelser Selected Looped @@ -1249,38 +684,7 @@ - CtrlPanel - - select controller - välj controller - - - remove panel - ta bort panel - - - Velocity - Hastighet - - - Pitch - Tonhöjd - - - other ... - annat ... - - - add new ... - lägg till ny... - - - off - av - - - - DeicsOnzeGui + DeicsOnzeGui Delete preset Ta bort preset @@ -1404,7 +808,7 @@ %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. Do you want to replace it or to add it in the next free slot ? - %1 påverkas av hbank nummer %s, men det finns redan en i den positionen. + %1 påverkas av hbank nummer %2s, men det finns redan en i den positionen. Vill du ersätta den eller lägga till i nästa lediga position? @@ -1450,7 +854,7 @@ %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. Do you want to replace it or to add it in the next free slot ? - %1 påverkas av lbank nummer %s, men det finns redan en i den positionen. + %1 påverkas av lbank nummer %2s, men det finns redan en i den positionen. Vill du ersätta den eller lägga till i nästa lediga position? @@ -1484,7 +888,7 @@ %1 is supposed to be affected to the prog number %2, but there is already one on this slot. Do you want to replace it or to add it in the next free slot ? - %1 påverkas av prog nummer %s, men det finns redan en i den positionen. + %1 påverkas av prog nummer %2s, men det finns redan en i den positionen. Vill du ersätta den eller lägga till i nästa lediga position? @@ -1507,18 +911,6 @@ DeicsOnzeGuiBase - Load - Ladda - - - Save - Spara - - - Preset Name - Presetnamn - - Subcategory Underkategori @@ -1527,30 +919,6 @@ Kategori - Delete - Ta bort - - - New - Ny - - - Master Volume - Mastervolym - - - Master volume - Mastervolym - - - Feedback of Op 4 - Återkoppling för Op 4 - - - Function - Funktion - - Pitch Bend Range Pitchbend område @@ -1559,10 +927,6 @@ Hastighet - Square - Fyrkant - - LFO Waveform LFO Vågform @@ -1612,7 +976,7 @@ Bank numerous - Bank nummer + Banknummer NONE @@ -1632,7 +996,7 @@ DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - + DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Publicerad låg tillstånd GPL. &Global @@ -1676,7 +1040,7 @@ LFO Sync - LFO synk + LFO-synk Pitch modulation sensitivity @@ -1731,7 +1095,7 @@ <b>Algorithm 6</b> : addition of the three <i>Op 1, 2, 3</i> all modulated by <i>Op 4</i><br> <b>Algorithm 7</b> : addition of the three <i>Op 1, 2, 3</i> with <i>Op 3</i> modulated by <i>Op 4</i><br> <b>Algorithm 8</b> : addition of the four <i>Op 1, 2, 3, 4</i> - + Op4 Feedback @@ -1743,7 +1107,7 @@ Op &1 - + Scaling 1 @@ -1767,7 +1131,7 @@ Level Scaling - Skalningshastighet + Skalningsnivå Amplitude Envelope 1 @@ -1791,17 +1155,17 @@ Release Rate - Releasedatum + Utgivningsdatum - + 2° Decay Rate 2° Decay-hastighet - + 1° Decay Level 1° Decay-nivå - + 1° Decay Rate 1° Decay-hastighet @@ -1823,7 +1187,7 @@ Detune - + Snedstäm EG Shift @@ -1858,7 +1222,7 @@ Wave form 6 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*abs(sin(2*<b>t</b>)) else 0</i><br> Wave form 7 = <i>if <b>t</b>&#060 pi then abs(sin(2*<b>t</b>)) else 0</i><br> Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t</b>)*sin(2*<b>t</b>) else 0</i> - + Sensitivity 1 @@ -1946,7 +1310,7 @@ Op &2 - + Amplitude Envelope 2 @@ -2030,7 +1394,7 @@ Op &3 - + Amplitude Envelope 3 @@ -2114,7 +1478,7 @@ Op &4 - + amplitude Envelope 4 @@ -2330,7 +1694,7 @@ &Reverb - + Reverb Parameters @@ -2525,11 +1889,11 @@ Selected Events - Valda Händelser + Valda händelser Looped Events - Loopade Händelser + Loopade händelser Selected Looped @@ -2564,217 +1928,57 @@ - DrumEdit - - &File - &Arkiv - - - Load Map - Ladda mappning - - - Save Map - Spara Mappning - - - &Edit - &Redigera - - - Cut - Klipp ut - - - Copy - Kopiera - - - Paste - Klistra in - - - Delete Events - Ta bort händelser - - - Select All - Välj Allt - - - Select None - Välj Ingen - - - Invert - Invertera - - - Inside Loop - I loop - - - Outside Loop - Utanför loop - - - &Select - &Välj - - - Load Drummap - Ladda trummappning - - - Store Drummap - Spara trummappning - - - Step Record - Stegvis inspelning - - - Add Controller View - Lägg till Controller vy - - - Sound - Ljud - - - Len - Längd - - - drummaps - trummappningar - - - Muse: Load Drum Map - Muse: Ladda trummappning - - - MusE: Store Drum Map - MusE: Spara trummappning - - - Set Fixed Length - Sätt fast längd - - - &Functions - &Funktioner - - - Modify Velocity - Modifiera Velocity - - - mute instrument - tysta instrument - - - sound name - ljudnamn - - - quantisation - kvantisering - - - this input note triggers the sound - denna in-not triggar ljudet - - - note length - notlängd - - - output port - utgångsport - - - Quantize - Kvantisera - - - Erase Event - Ta bort Händelse - - - panic - panik - - - - EditCAfterDialog - - Time Position - Tidsposition - - - Pressure - Tryck - - - - EditCtrl14Dialog + DuplicateTracksBase - MusE: Enter Controller14 Event - MusE: Mata in Controller14 Händelse + Duplicate tracks + Duplicera spår - Time Position - Tidsposition + Number of copies + Antal kopior - Value - Värde + Copy all routes + Kopiera alla kopplingar - - - EditCtrl7Dialog - MusE: Enter Controller Event - MusE: Mata in Controller Händelse + Default routing + Förvald koppling - Time Position - Tidsposition + No routes + Inga kopplingar - Value - Värde + Copy parts + Kopiera parter - - - EditCtrl7DialogBase - MusE: Enter Controller - MusE: Mata in Controller + Copy standard controllers (vol, pan) + Kopiera standardkontroller (vol, pan) - Time Position: - Tidspositions: + Copy effects rack plugins + Kopiera effektrack-instickseffekter - Value: - Värde: + Copy plugin controllers + Kopiera instickseffekt-kontroller - controller value - controllervärde + Ok + Cancel - Avbryt + Avbryt EditCtrlBase MusE: Edit Controller Event - MusE: Editera controller-event + MusE: Editera kontroll-event Time Position @@ -2782,11 +1986,11 @@ Available Controller: - Tillgänglig controller: + Tillgänglig kontroll: Create New Controller - Skapa ny Controller + Skapa ny kontroll textLabel3 @@ -2798,7 +2002,7 @@ Controller - + Kontroll H-Bank @@ -2830,13 +2034,6 @@ - EditEventDialog - - Cancel - Avbryt - - - EditGainBase MusE: Modify gain @@ -2872,7 +2069,7 @@ Alt+A - Alt+L + Alt+V &Cancel @@ -2884,39 +2081,12 @@ - EditInstrument - - MusE: Write File failed - MusE: Misslyckades med att skriva Fil - - - &Save - &Spara - - - &Nosave - &Inte spara - - - &Abort - &Avbryt - - - EditInstrumentBase MusE: Instrument Editor MusE: Instrumenteditor - Patches - Patcher - - - Patch Name: - Patchnamn: - - High Bank: Hög bank: @@ -2929,24 +2099,12 @@ Program: - Patch/Group - Patch/Grupp; - - &Delete &Ta bort Alt+D - - - - &New Patch - &Ny Patch - - - New Group - Ny Grupp; + Alt+T Drum @@ -2965,36 +2123,24 @@ - Predefined Controller: - Fördefinierad controller: - - This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. - Detta är en lista med vanligt använda midi-controllers + Detta är en lista med vanligt använda midi-kontroller Notera att i MusE hanteras tonhöjd och program change som -vanliga controllers. +vanliga kontroller. Properties Egenskaper - Name - Namn - - - Type - Typ - - Control7 - + Kontroll7 Control14 - + Kontroll14 RPN @@ -3017,22 +2163,10 @@ - Midi Controller Number High Byte - Midicontrollernummer, hög byte - - L-Ctrl - Midi Controller Number Low Byte - Midicontrollernummer, låg byte - - - Range - Område - - Min @@ -3049,36 +2183,12 @@ Typ - Min Val - Minvärde + Hex Entry: + Hexinmatning: - Max Val - Maxvärde - - - list of defined controllers - lista med definierade controllers - - - This is the MusE list of defined controllers. - Detta är MusEs lista med definierade controllers. - - - Initialization - Initiering - - - Panic - Panik - - - Hex Entry: - Hexinmatning: - - - &File - &Arkiv + &File + &Arkiv Tools @@ -3150,7 +2260,7 @@ Pa&tches - Pa&tches + Pa&tchar List of groups and patches. @@ -3158,7 +2268,7 @@ Group/Patch - Grupp/Patch + Grupp/patch Name: @@ -3170,25 +2280,19 @@ Patch high bank number - Patch högt banknummer + Patch, högt banknummer Patch high bank number. --- means don't care. - Patch högt banknummer. -- betyder: ignorera. - - - --- - dont care - ---- -Ignorera + Patch, högt banknummer. -- betyder: ignorera. Patch low bank number - Patch lågt banknummer + Patch, lågt banknummer Patch low bank number. --- means don't care. - Patch lågt banknummer --- betyder: ignorera. + Patch, lågt banknummer --- betyder: ignorera. --- @@ -3260,7 +2364,7 @@ Contro&ller - Contro&ller + Kontro&ll Common: @@ -3312,7 +2416,7 @@ Midi controller number low byte (* means drum controller) - Midikontroll-nummer låg byte (* trumkontroller) + Midikontroll-nummer, låg byte (* trumkontroller) Midi controller number low byte. @@ -3324,12 +2428,7 @@ replaced by the 'ANote' in the drum map. Examples: The GS and XG instruments' Drum controllers. - - - - * - wild card - + Range: @@ -3359,7 +2458,25 @@ at zero, even with a negative minimum: 'Pitch': Min: -8192 Max: 8191 True range: Min: -8192 Max: 8191 (bias 0) - + Minsta värde. Om det minsta värdet +är negativt så kommer området automatiskt +konverteras till ett positivt område + +Användbart för kontroller som bör visas +balanserad runt noll. Till exempel +'Pan': Minimum: -64 Maximum: 63 +Verkligt område: Min: 0 Max: 127 (förskjutning = 64) +'Grovstämning': Min: -24 Max: 23 +Verkligt område: Min: 40 Max: 87 (förskjutning = 64) + +Förskjutningen bestäms av kontrolltyp +7-bit Kontroll7 / RPN: förskjutning = 64 +14-bit Kontroll14 / RPN14: förskjutning = 8192 + +'Tonhöjd' är undantaget. Den är förskjuten till noll + även med ett negativt minimum: +'Tonhöjd': Min: -8192 Max: 8191 +Verkligt område: Min: -8192 Max: 8191 (bias 0) Maximum value @@ -3409,12 +2526,20 @@ values. You should probably turn 'off' their default (in piano roll or drum edit, and instrument editor). - - - - off - dont care - av + Standard (initialt) värde. Av betyder standard. + +Om standardvärde är valt kommer värdet skickas +till kontrollen när den läggs till i sången (i piano rulle +eller händelseeditor). När sången laddas om +sätts värdet igen. Annars skulle kontrollen stanna +på sitt tidigare värde. +Kontroller läggs också automatiskt till en sång när +de tas emot via midi. + +Warning! Se upp för kontroller som 'Sustain' eller +'ResetAllController' med standard värden. De bör +ha standard värde avstängt (i piano rulle, trum editor, +instrument editor). Add common controller @@ -3430,19 +2555,19 @@ Delete controller - Ta bort controller + Ta bort kontroll Create a new controller - Skapa ny controller + Skapa ny kontroll New &Controller - Ny &controller + Ny &kontroll Alt+C - + Alt+K Null Param Hi: @@ -3459,7 +2584,12 @@ from corrupting the RPN/NRPN controller. Typically, set to 127/127, or an unused RPN/NRPN controller number. - + Om den är inställd, "null" parameternummer + kommer att skickas efter varje händelse RPN / NRPN. +Detta förhindrar efterföljande händelser "data" + korrumperande föraren RPN / NRPN. +Vanligtvis inställd på 127/127, eller genom att använda + controller RPN / NRPN. Lo: @@ -3497,54 +2627,27 @@ What's this? Vad är detta? - - - EditMetaDialog - - MusE: Enter Meta Event - MusE: Mata in Meta Händelse - - - Time Position - Tidsposition - - Meta Type - Metatyp - - - Enter Hex - Mata in Hex - - - - EditMetaDialogBase - - MusE: Enter Meta Event - MusE: Mata in Meta Händelse - - - Cancel - Avbryt - - - Time Position: - Tidsposition: + --- + dont care + ignorera - Meta Type: - Metatyp: + * + wild card + - Enter Hex - Mata in hex + off + dont care + av EditNoteDialogBase MusE: Enter Note - MusE: Mata in Not + MusE: Mata in not OK @@ -3576,40 +2679,6 @@ - EditPAfterDialog - - MusE: Enter Poly Aftertouch - MusE: Mata in Poly Aftertouch - - - Time Position - Tidsposition - - - Pitch - Tonhöjd - - - Pressure - Tryck - - - - EditPitchDialog - - MusE: Enter Pitch Shift - MusE: Mata in Pitch Shift - - - Time Position - Tidsposition - - - Pitch - Tonhöjd - - - EditSysexDialogBase MusE: Enter SysEx @@ -3633,78 +2702,6 @@ - EditToolBar - - Edit Tools - Redigeringsverktyg - - - - EffectRack - - effect rack - effektrack - - - move up - flytta upp - - - move down - flytta ner - - - remove - ta bort - - - show gui - visa gui - - - new - ny - - - change - ändra - - - Replace effect - Byt effekt - - - Do you really want to replace the effect %1? - Vill du verkligen ersätta effekten %1? - - - &Yes - &Ja - - - &No - &Nej - - - - ErrorHandlerBase - - We are sorry, MusE has encountered a -fatal error and is unable to continue. - Tyvärr har ett fatalt fel inträffat, MusE -kan inte fortsätta. - - - The Error -Message: - Felmeddelandet: - - - Terminate - Terminera - - - FLUIDGui FLUID: open Soundfile @@ -3777,10 +2774,6 @@ Ladda - Save - Spara - - Delete Ta bort @@ -3844,28 +2837,18 @@ Projekt - Load: - Ladda: - - - Songdata + -Cofiguration - Sångdata + -konfiguration - - - only -Songdata - bara sångdata - - fdialogbuttons - Songdata + + read Midi Port Configuration - Sångdata + konfiguration + läs midi-portkonfiguration + + + write window +states + skriv fönsterinställningar @@ -3876,19 +2859,8 @@ - FontSel - - Size: - Storlek: - - - GateTimeBase - MusE: Modify Gate Time - MusE: Ändra Gate-tid - - MusE: Modify Note Length MusE: Modifiera not-längd @@ -3898,25 +2870,21 @@ All Events - Alla Händelser + Alla händelser Selected Events - Valda Händelser + Valda händelser Looped Events - Loopade Händelser + Loopade händelser Selected Looped Valda loopade - Selected & Looped - Valda & Loopade - - Values Värden @@ -3949,11 +2917,11 @@ GlobalSettingsDialogBase MusE: Global Settings - MusE: Globala Inställningar + MusE: Globala inställningar Use project save dialog - Använd projekt sparadialog + Använd projektspara-dialog Some popup menus stay open (else hold Ctrl) @@ -3980,19 +2948,19 @@ Shift + Right click sets left range marker - Shift+Högerklick sätter vänster områdesmarkör + Shift+högerklick sätter vänster områdesmarkör Allow adding hidden tracks in track list menu - Tillåt gömda tracks i tracklistan + Tillåt gömda spår i spårlistan Unhide tracks when adding hidden tracks - Ta fram gömda tracks när gömda tracks adderas + Ta fram gömda spår när gömda spår läggs till GUI Style - GUI stil + GUI-stil MDI-subwindowness and sharing menus @@ -4043,10 +3011,6 @@ min. Metervärde - min.Slider Val - min. Slider värde - - Midi Midi @@ -4115,10 +3079,6 @@ (Tick/Sek) - Help Browser: - Hjälpläsare: - - GUI Refresh Rate GUI-uppdateringsfrekvens @@ -4144,7 +3104,7 @@ start song: - startsång: + startsång: Views @@ -4175,10 +3135,6 @@ Stor tidvisare - Arranger - Arrangerare - - Transport @@ -4192,7 +3148,7 @@ start with template: default.med - börja med mall: default.med + börja med mall: default.med show splash screen @@ -4204,7 +3160,7 @@ External Waveditor command - Externt Ljudredigerarkommando + Externt ljudredigerarkommando Mixer A @@ -4381,7 +3337,7 @@ Midi Resolution (Ticks/Quarternote) - Midiupplösning (Tick/Kvartsnot) + Midiupplösning (Tick/kvartsnot) GUI Behaviour @@ -4403,72 +3359,45 @@ Behavior Uppförande - - - LMaster - - MusE: Mastertrack - MusE: Masterspår - - - new tempo - nytt tempo - - - new signature - ny signatur - - - Time - Tid - - - Type - Typ - - - Value - Värde - - - &Edit - &Redigera - - Insert Tempo - Sätt in tempo + Smart focus (restart required) + Smartfokus (omstart krävs) - Insert Signature - Sätt in signatur + Smart focus + Smartfokus - Edit Positon - Editera position + After editing, controls will return + focus to their respective canvas + Efter editering lämnar kontroll tillbaka +fokus till respektive editor - Edit Value - Editera värde + Choose start song or template + Välj startsång eller mall - Delete Event - Ta bort event + Reset to default + Återställ till förvalt - panic - panik + start with template + Starta med mall - Reposition of the initial tempo and signature events is not allowed - Ompositionering av initalt tempo och/eller signaturevent är inte tillåtet + Start template or song: + Startmall eller sång: - Input error, conversion not OK or value out of range - Inmatningsfel, konvertering felaktig eller värde utanför område + Read MIDI Ports configuration from file, + or else automatically configure + Läs MIDI-port konfiguration från fil, +eller i annatfall, konfigurera automatiskt - Reposition of tempo and signature events to start position is not allowed! - Ompositionering av tempo och/eller signaturevent till startposition är inte tillåtet + Read MIDI Ports configuration + läs midi-portkonfiguration @@ -4523,332 +3452,65 @@ - ListEdit + MITTransposeBase - Insert Note - Mata in Not + MusE: Midi Input Plugin: Transpose + MusE: Midi Inputplugin: Transponering - insert Note - Mata in Not + On + - Insert SysEx - Mata in SysEx + TriggerKey + TriggNot - insert SysEx - Mata in SysEx + Transpose: + Transponering: - Insert Ctrl - Mata in Ctrl + +0 + + + + MRConfigBase - insert Ctrl - Mata in Ctrl + MusE: Midi Input Plugin: Remote Control + MusE: Midiinputplugin: Fjärrkontroll - Insert Meta - Mata in Meta + Activate + Aktivera - insert Meta - Mata in Meta + On + - Insert Pitch - Mata in Pitch + Actions + Operationer - insert Pitch - Mata in Pitch + Stop + Stopp - Insert Channel Aftertouch - Mata in Aftertouch för kanal + Record + Spela in - insert Channel Aftertouch - Mata in Aftertouch för kanal + Goto Left Mark + Gå till vänster markering - Insert Key Aftertouch - Mata in Key Aftertouch + Play + Spela - insert Poly Aftertouch - Mata in Poly Aftertouch - - - &Edit - &Redigera - - - Cut - Klipp ut - - - Copy - Kopiera - - - Paste - Klistra in - - - Delete Events - Ta bort Händelser - - - List Tools - Listverktyg - - - Insert Tools - Inmatningsverktyg - - - panic - panik - - - Bar - Takt - - - Len - Längd - - - Comment - Kommentar - - - Type - Typ - - - - MITTransposeBase - - MusE: Midi Input Plugin: Transpose - MusE: Midi Inputplugin: Transponering - - - On - - - - TriggerKey - TriggNot - - - Transpose: - Transponering: - - - +0 - - - - - MPConfig - - none - inga - - - other raw ... - annan raw ... - - - MusE: Midi Port Table - MusE: Midiporttabell - - - Device Name - Enhetsnamn - - - State - Status - - - unknown - okänd - - - Port Number - Portnummer - - - Instrument connected to port - Instrument kopplat till denna port - - - State: result of opening the device - Status: resultat av öppning av enhet - - - - MRConfigBase - - MusE: Midi Input Plugin: Remote Control - MusE: Midiinputplugin: Fjärrkontroll - - - Activate - Aktivera - - - On - - - - Actions - Operationer - - - Stop - Stopp - - - Record - Spela in - - - Goto Left Mark - Gå till vänster markering - - - Play - Spela - - - Insert rest (step rec) - Lägg in paus (sluta spela in) - - - - MTScale - - bar scale - takt skala - - - - MarkerView - - MusE: Marker - MusE: Markör - - - add marker - lägg till markör - - - Add Marker - Lägg till Markör - - - delete marker - ta bort markör - - - Delete Marker - Ta bort Markör - - - &File - &Arkiv - - - &Edit - &Redigera - - - panic - panik - - - Bar:Beat:Tick - Takt:Slag:Tick - - - Lock - Lås - - - Text - Text - - - Marker Properties - Markörinställningar - - - edit tools - redigeringsverktyg - - - - MasterEdit - - MusE: Mastertrack - MusE: Masterspår - - - edit tools - redigeringsverktyg - - - EnableMaster - Aktivera Master - - - use master track - använd master track - - - Cursor - Markör - - - Off - Av - - - Snap - Fäst vid - - - time at cursor position - tid vid markörposition - - - panic - panik - - - tempo at cursor position - tempo vid markörposition - - - tempo at current position - tempo vid nuvarande position - - - time signature at current position - time signature vid nuvarande position - - - Enable - Aktivera - - - Enable usage of master track - Aktivera användning av masterspår + Insert rest (step rec) + Lägg in paus (sluta spela in) @@ -4878,7 +3540,7 @@ MetronomeConfigBase MusE: Metronome Config - MusE: Metronomeconfiguration + MusE: Metronomkonfiguration Metronome @@ -4930,7 +3592,7 @@ From Mastertrack - Från Masterspår + Från masterspår / @@ -4990,72 +3652,105 @@ - MidiController + MidiAudioControlBase - Velocity - Hastighet + Midi control + Midikontroll - - - MidiControllerEditDialog - MusE: save midi controller list - MusE: spara midi-controller lista + Port: + - MusE: load midi controller list - MusE:ladda midi-controller lista + Channel: + Kanal: - - - MidiControllerEditDialogBase - MusE: Define Midi Controller - MusE: Definiera Midi-controller + Control type: + Kontrolltyp: - replace controller set - ersätt controller-set + Control7 + Kontroll7 - merge controller set - slå ihop controller-set + Control14 + Kontroll14 - save controller set as - spara controller-set + RPN + - Name - Namn + NRPN + - Type - Typ + RPN14 + - Min Val - Min.värde + NRPN14 + - Max Val - Max.värde + Pitch + Tonhöjd - list of defined controllers - lista med definierade controllers + Program + - This is the MusE list of defined controllers. - Detta är MusEs lista med definierade controllers. + Hi: + Hög: - Properties - Egenskaper + Lo: + Låg: - Name - Namn + Learn + Lär + + + + MidiControllerEditDialogBase + + MusE: Define Midi Controller + MusE: Definiera Midikontroll + + + Name + Namn + + + Type + Typ + + + Min Val + Min.värde + + + Max Val + Max.värde + + + list of defined controllers + lista med definierade kontroll + + + This is the MusE list of defined controllers. + Detta är MusEs lista med definierade kontroller. + + + Properties + Egenskaper + + + Name + Namn Max Value @@ -5070,10 +3765,6 @@ Typ - &New - &Ny - - create new entry skapa nytt inlägg @@ -5081,7 +3772,7 @@ pressing the New button you create a new entry in the MusE list of defined controllers tryck på Ny knappen för att skapa nytt inlägg -i MusEs lista med definierade controllers +i MusEs lista med definierade kontroller &Delete @@ -5113,7 +3804,7 @@ Managed Controller for Port - Hanterad controller för port + Hanterad kontroll för port Channel @@ -5123,7 +3814,7 @@ This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. - Detta är en lista med vanligt använda midi-controllers. + Detta är en lista med vanligt använda midikontroller. Notera att tonhöjd- och program-change hanteras som vanliga controllers i MusE. @@ -5133,30 +3824,23 @@ Midi Controller Number High Byte - Midicontrollernummer, hög byte + Midikontrollnummer, hög byte Midi Controller Number Low Byte - Midicontrollernummer, låg byte + Midikontrollnummer, låg byte Range Område - - - MidiFileConfig - - Config exported Midi Files - Inställningar exporterade midifiler - - MusE: Config exported Midi Files - MusE: Inställningar exporterade midifiler + Control7 + Kontroll7 - Enable extended smf format - Slå på utbyggt smf-format + Control14 + Kontroll14 @@ -5203,11 +3887,11 @@ Controller Filter - + Kontrollfilter Channel Filter - Kanal filter + Kanalfilter 14 @@ -5275,13 +3959,6 @@ - MidiInputTransformDialog - - New - Ny - - - MidiInputTransformDialogBase MusE: Midi Input Transformator @@ -5381,11 +4058,11 @@ Fix - Fast + Fäst Plus - Plus + Pluss Minus @@ -5497,184 +4174,12 @@ - MidiPortRouteBase - - Output - Utgång - - - Input - Ingång - - - - MidiRawDeviceDialogBase - - MusE: raw midi device configuration - MusE: raw midienhets-inställningar - - - Name - Namn - - - Type - Typ - - - Virt. Ports - Virt. port - - - Speed - Hastighet - - - Handshaking - Handskakning - - - Virt.Ports - Virt.port - - - Serial Port - Serieport - - - None - Ingen - - - &New - &Ny - - - &Delete - &Ta bort - - - &OK - &Ok - - - &Cancel - &Avbryt - - - - MidiStrip - - off - av - - - Pan/Balance - Pan/Balans - - - record - spela in - - - mute - tysta - - - pre fader listening - pre fader lyssning - - - Off - Av - - - Read - Läs - - - Write - Skriv - - - automation type - automationstyp - - - output routing - utgångsrouting - - - - MidiSyncConfig - - Port Number - Portnummer - - - Name of the midi device associated with this port number - Namn på midienhet associerad med detta portnummer - - - Device Name - Enhetsnamn - - - &No - &Nej - - - &Abort - &Avbryt - - - MidiSyncConfigBase MusE: Midi Sync MusE: Midisync - Sync Mode - Synkläge - - - Master - Master - - - Slave - Slav - - - Sync Source - Sync-källa - - - accept MTC - acceptera MTC - - - accept Midi Clock - acceptera Midiclocka - - - accept MMC - acceptera MMC - - - all - alla - - - midi port - midiport - - - Midi Clock - Midiklocka - - Apply Verkställ @@ -5835,8 +4340,12 @@ Skicka synkfördöjning - Note: Sync delay and MTC sync currently not fully implemeted - Notis: Synkfördröjning och MTC-synk är inte helt implementerad + 1 + 1 + + + Note: Sync delay and MTC sync currently not fully implemented + Notera: Synkdelay och MTC-synk, för tillfället inte helt implementerat @@ -5850,50 +4359,22 @@ utgångskanal - all midi events are send to this output channel - alla midihändelser skickas till denna utkanal - - - Track Info - Spårinfo - - % - Track Name - Spårnamn - - output port utgångsport - iR - - - off av - change stereo position - byt stereoposition - - - select instrument patch - välj instrumentpatch - - Transp. Transp. - Volume - Volym - - Channel Info Kanalinfo @@ -5938,48 +4419,8 @@ Längd - input ports - inputportar - - - input channels - inputkanaler - - - Events from all configured channels are -recorded to this track. -You can specify more than one channel for -recording: - 1 2 3 record from channel 1 2 and 3 - 1-3 same - 1-3 5 record from channel 1 2 3 and 5 - Händelser från alla konfigurerade kanaler -spelas in på detta spår -Du kan specificera mer än en kanal för -inspelning: - 1 2 3 spela in på kanal 1 2 och 3 - 1-3 samma - 1-3 5 spela in på kanal 1 2 3 och 5 - - - record: - spela in: - - - add settings to song - lägg inställningar till sång - - - Bank Select LSB - Välj bank LSB - - - Bank Select MSB - Välj bank MSB - - all midi events are sent to this output channel - Alla midi-events skickas till denna utgångskanal + Alla midihändelser skickas till denna utgångskanal Out ch @@ -5990,18 +4431,10 @@ ingångskoppling - Inputs - Ingångar - - output routing utgångskoppling - oR - - - input detect in-detekt @@ -6009,7 +4442,7 @@ Input detect indicator. Detects all note on-off, controller, aftertouch, program change, and pitchbend (but not sysex or realtime) events on the selected channels, on the selected midi ports. - Indikator indikerar midi på ingång. Detekterar alla not on/off, controller-, aftertouch-, + Indikerar midi på ingång. Detekterar alla not on/off, kontroll-, aftertouch-, program change-, pitchbend-, men inte SysEX- eller realtids-event på de valda kanalerna på den valda midi-porten. @@ -6022,7 +4455,7 @@ Pass input events through ('thru') to output. - Skicka inkommande midi event vidare till utgång. + Skicka inkommande midihändelser vidare till utgång. Select instrument patch @@ -6041,36 +4474,56 @@ Alla - Bank Select MSB. Double-click on/off. - Bank val MSB. Dubbelklicka av/på. + Add bank + prog settings to song + Lägg till bank + prog inställning i sång - Bank Select LSB. Double-click on/off. - Bank val LSB. Dubbelklicka av/på. + Add vol setting to song + Lägg till volym inställning i sång - Program. Double-click on/off. - Program. Dubbelklicka av/på. + Add pan setting to song + Lägg till pan inställning i sång - Add bank + prog settings to song - Lägg till bank + prog inställning i sång + Bank Select MSB. Ctrl-click on/off. + Bankval MSB. Ctrl-klick av/på. - Volume. Double-click on/off. - Volym. Dubbelklicka av/på. + Bank Select LSB. Ctrl-click on/off. + Bankval LSB. Ctrl-klick av/på. - Add vol setting to song - Lägg till volym inställning i sång + Program. Ctrl-click on/off. + Program. Ctrl-klick av/på. - Change stereo position. Double-click on/off. - Byt stereo position. Dubbelklicka av/på. + Volume. Ctrl-click on/off. + Volym. Ctrl-klick av/på. - Add pan setting to song - Lägg till pan inställning i sång + Change stereo position. Ctrl-click on/off. + Byt stereo position. Ctrl-klick av/på. + + + Bank Select MSB. Ctrl-double-click on/off. + Bankval MSB. Ctrl-dubbelklick av/på. + + + Bank Select LSB. Ctrl-double-click on/off. + Bankval LSB. Ctrl-dubbelklick av/på. + + + Program. Ctrl-double-click on/off. + Program. Ctrl-dubbelklick av/på. + + + Volume. Ctrl-double-click on/off. + Volym. Ctrl-dubbelklick av/på. + + + Change stereo position. Ctrl-double-click on/off. + Byt stereo position. Ctrl-dubbelklick av/på. @@ -6117,7 +4570,7 @@ Fix - Fast + Fäst Note @@ -6149,7 +4602,7 @@ Plus - + Pluss Minus @@ -6305,24 +4758,10 @@ - MidiTransformerDialog - - New - Ny - - - - MixdownFileDialog - - Wave Files (*.wav);;All Files (*) - Ljudfiler (*.wav);;Alla filer (*) - - - MixdownFileDialogBase MusE: Set Mixdown Wavefile - MusE: Välj mixdown-ljudfil + MusE: Välj ljudfil för nermixning &OK @@ -6370,17 +4809,6 @@ - Mixer - - MusE: Midi Mixer - MusE: Midimixer - - - Master - Master - - - MoveBase MusE: Move Notes @@ -6428,6816 +4856,4979 @@ - MusE + MusECore::Song - to import a audio file you have first to selecta audio track - för att importera en ljudfil måste du ha valt ett ljudspår + Jack shutdown! + Jack avstängd! - Import Wave File - Importera ljudfil + Jack has detected a performance problem which has lead to +MusE being disconnected. +This could happen due to a number of reasons: +- a performance issue with your particular setup. +- a bug in MusE (or possibly in another connected software). +- a random hiccup which might never occur again. +- jack was voluntary stopped by you or someone else +- jack crashed +If there is a persisting problem you are much welcome to discuss it +on the MusE mailinglist. +(there is information about joining the mailinglist on the MusE + homepage which is available through the help menu) + +To proceed check the status of Jack and try to restart it and then . +click on the Restart button. + Jack har detekterat ett prestandaproblem som har lett till att +MusE blivit bortkopplad. +Detta kan hända av en mängd anledningar: +- ett prestanda problem med din specifika konfiguration. +- en bugg i MusE (eller möjligen i en annan inkopplad mjukvara). +- ett slumpmässigt problem som kanske aldrig händer igen. +- Jack blev medvetet stoppad. +- Jack krashade. +Om problemet återkommer är du välkommen att diskutera det +på MusE mailinglistan. (information om hur man kommer åt den +finns på hjälpmenyn) + +För att fortsätta, säkerställ att Jack är igång och klicka på Omstart knappen. - UndoRedo - ÅngraGörom + Automation: + Automation: - undo - ångra + previous event + föregående händelse - Und&o - &Ångra + next event + nästa händelse - redo - gör om + set event + ändra händelse - Re&do - &Gör om + add event + lägg till händelse - undo last change to song - ångra sista ändring i sång + erase event + ta bort händelse - redo last undo - gör om sista ångring + erase range + ta bort händelseområde - rewind - flytta tillbaka + clear automation + rensa automation - Rewind - Flytta tillbaka + Clear all controller events? + Ta bort alla kontrollerhändelser? - forward - frammåt + &Ok + &Ok - Forward - Frammåt + &Cancel + &Avbryt - stop - stopp + MusE - external script failed + MusE - externt skript misslyckades - Stop - Stopp + MusE was unable to launch the script, error message: +%1 + MusE kunde inte starta skript, felmeddelande: %1 - play - spela + Midi control + Midikontroll - Play - Spela + Assign + Tilldela - record - spela in + Clear + Rensa - Record - Spela in + MusE: Tempo list + MusE: Tempolista - panic - panik + External tempo changes were recorded. +Transfer them to master tempo list? + Externa tempoändringar har spelats in. +För över dem till master-tempolistan? + + + MusEGui::Appearance - Panic - Panik + Main application font, and default font for any + controls not defined here. + Huvudapplikationstypsnitt, även standard typsnitt +för alla gui-kontroller ej definierade här. - new - ny + Mixer strips and effects racks. Midi track info panel. +Midi control panel entry box. + Mixer-remsa och effektrack. Midi spårinfopanel. +Midikontrollpanel-inmatningsbox. - &New - &Ny + Transport controls. + Transportkontroller. - open - öppna + Time scale upper, and time signature. +Controller graph and S/X buttons. + Övre tidsskala och tidsignatur. +Kontrollgraf och S/X knappar. - &Open - &Öppna + Time scale lower, and arranger part name overlay. + Lägre tidskala och partnamnöverlagring i redigerare. - save - spara + Tempo scale, and markers. + Temposkala och markörer. - &Save - &Spara + Mixer labels. Auto-font-sizing up to chosen font size. +Word-breaking but only with spaces. + Mixeretiketter. Automatisktypsnittsstorlek upp till vald storlek. +Ordbrytning men bara med mellanslag. - pianoroll - pianorulle + Maximum mixer label auto-font-sizing font size. + Max mixetikett automatisk typsnittsstorlek. - Pianoroll - Pianorulle + Global opacity (opposite of transparency). + Global opacitet (motsats till genomskinlighet). - score - partitur + Standard + - Score - Partitur + Custom + Anpassad - marker - markör + MusE: load image + MusE: ladda bild - Marker - Markör + Select style sheet + Välj stylesheet - File Buttons - Arkivknappar + Qt style sheets (*.qss) + - &File - &Arkiv + Keep Qt system style + Behåll Qt systemstil + + + MusEGui::Arranger - Open &Recent - &Nyligen öppnade + Enable Recording + Slå på inspelning - Save &As - S&para som + Mute/Off Indicator + Tysta/av indikator - Config &Printer - &Konfigurera skrivare + Solo Indicator + Solo-indikator - Import Midifile - Importera midifil + Track Type + Spårtyp - Export Midifile - Exportera midifil + Track Name + Spårnamn - &Quit - A&vsluta + Midi output channel number or audio channels + Midiutgångskanalnummer eller ljudkanal - &Edit - &Redigera + Midi output port or synth midi port + Midiutgångsport eller syntmidiport - C&ut - Klipp &ut + Time Lock + Tidlås - &Copy - &Kopiera + Automation parameter selection + Automation parameterval - &Paste - K&listra in + Notation clef + - Delete Track - Ta bort spår + Enable recording. Click to toggle. + Slå på inspelning. Klicka för att växla. - Add Track - Lägg Till Spår + Mute indicator. Click to toggle. +Right-click to toggle track on/off. +Mute is designed for rapid, repeated action. +On/Off is not! + Mute indikator. Klicka för att växla. +Högerklick för att växla spår av/på. +Mute är gjort för snabb och återkommande användande. +Av/På är det inte! - Select &All - Markera &Allt + Solo indicator. Click to toggle. +Connected tracks are also 'phantom' soloed, + indicated by a dark square. + Soloindikator. Klicka för att växla. +Kopplade spår får implicit solo, +indikeras med en mörk fyrkant. - &Deselect All - A&vmarkera Allt + Track type. Right-click to change + midi and drum track types. + Spårtyp. Högerklicka för att byta +midi- och trum-spårtyper. - Invert &Selection - Invertera &Markering + Track name. Double-click to edit. +Right-click for more options. + Spårnamn. Dubbelklicka för att editera. Högerklick för fler alternativ. - &Inside Loop - &I Loop + Midi/drum track: Output channel number. +Audio track: Channels. +Mid/right-click to change. + Midi/trumspår: Utgångskanalnummer. +Ljudspår: Kanaler. +Mitt/högerklick för att ändra. - &Outside Loop - &Utanför Loop + Midi/drum track: Output port. +Synth track: Assigned midi port. +Left-click to change. +Right-click to show GUI. + Midi/trumspår: Utport +Syntspår: tilldelad midiport. +Vänsterklick för att ändra. +Högerklick för at visa GUI. - All &Parts on Track - Alla &Parter i spår + Time lock + Tidlås - Select - Välj + Notation clef. Select this tracks notation clef. + Notationsklav. Välj spårets notationsklav. - Drums - Trummor + Arranger + Arrangerare - List - Lista + Cursor + Markör - Graphic - Grafik + Off + Av - Mastertrack - Masterspår + Bar + Takt - Midi &Transform - Midi &Transform + Snap + Fäst vid - Modify Gate Time - Modifiera Gate Time + Len + Längd - Modify Velocity - Modifiera Velocity + song length - bars + sånglängd - takter - Transpose - Transponera + Type + Typ - Thin Out - Tunna ut + NO + - Erase Event - Ta bort Händelse + GM + - Note Shift - Shifta Not + GS + - Move Clock - Flytta Klocka + XG + - Copy Measure - Kopiera Takt + midi song type + typ av midisång - Erase Measure - Radera Takt + Pitch + Tonhöjd - Delete Measure - Ta bort Takt + midi pitch + miditonhöjd - Create Measure - Skapa Takt + global midi pitch shift + global midi-tonhöjdsjustering - Mix Track - Mixa Spår + Tempo + - Midi - Midi + midi tempo + - &Structure - &Struktur + N + - Global Cut - Globalt klipp + TrackInfo + Spårinfo - Global Insert - Global insättning + R + - Global Split - Global delning + M + - Copy Range - Kopiera Område + S + - Cut Events - Klipp ut Händelse + C + - Transport Panel - Transportpanel + Track + Spår - Bigtime Window - Bigtime fönster + Port + - Don't Follow Song - följ inte Sång + Ch + - Follow Page - följ sida + T + - Follow Continuous - följ kontinuerligt + Automation + - &Config - &Inställningar + Clef + Klav + + + MusEGui::ArrangerView - Global Settings - Globala Inställningar + MusE: Arranger + MusE: Arrangerare - Follow Song - följ sång + Undo/Redo tools + Ångra/Gör om verktyg - Metronome - Metronom + panic + panik - Midi Sync - Midi Synk + C&ut + Klipp &ut - Midi File Config - Midi Filkonfigurering + &Copy + &Kopiera - Appearance Settings - Utseendeinställningar + Copy in range + Kopiera i område - Soft Synthesizer - Mjukvarusynthar + &Paste + K&listra in - Midi Ports - Midiportar + Paste (show dialog) + Klistra in (visa dialog) - Audio System - Audiosubsystem + Paste c&lone + Klistra in &klon - Save Configuration - Spara Inställningar + Paste clone (show dialog) + Klistra in klon (visa dialog) - Midi Remote Control - Midi-fjärrkontroll + &Insert Empty Measure + &Lägg in tom takt - Random Rhythm Generator - Slumprytmgenerator + Delete Selected Tracks + Ta bort valda spår - Define Controller - Definiera Controller + Shrink selected parts + Krymp valda parter - Reset Instr. - Resetta Instr. + Expand selected parts + Expandera valda parter - Local Off - lokal av + Clean selected parts + Rensa valda parter - &Audio - L&jud + Add Track + Lägg Till Spår - Bounce to Track - Bounce till Spår + Select + Välj - Bounce to File - Bounce till Fil + Select &All + Markera &Allt - &Help - &Hjälp + &Deselect All + A&vmarkera Allt - Browser - Läsare + Invert &Selection + Invertera &Markering - &About - &Om + &Inside Loop + &I Loop - About&Qt - Om &Qt + &Outside Loop + &Utanför Loop - What's &This - Vad är &Detta + All &Parts on Track + Alla &Parter i spår - Unknown File Format - Okänt filformat + Score + Partitur - none - inget + all tracks in one staff + alla spår i en notlinje - MusE: load project - MusE: Öppna projekt + one staff per track + en notlinje per spår - MusE: Write File failed - MusE: Misslyckades med att skriva Fil + New score window + Nytt partiturfönster - The current Project contains unsaved data -Save Current Project? - Det nuvarande Projektet innehåller osparade ändringar -Spara nuvarande Projekt? + Pianoroll + Pianorulle - &Nosave - &Inte spara + Drums + Trummor - &Abort - &Avbryt + List + Lista - MusE: About - MusE: Om + Wave + Wave - MusE: Save As - MusE: Spara Som + Mastertrack + Masterspår - MusE: Song: - MusE: Sång: + Graphic + Grafisk - MusE: Import Midi - MusE: Importera Midi + Midi &Transform + Midi &Transform - MusE: Export Midi - MusE: Exportera Midi + Global Cut + Globalt klipp - reading midifile - - läser midifil + Global Insert + Global insättning - -failed - misslyckades + Global Split + Global delning - Nothing to edit - Inget att redigera + Global Cut - selected tracks + Globalt klipp - valda spår - MusE: Copy Range - MusE: Kopiera område + Global Insert - selected tracks + Global insättning - valda spår - not implemented - ej implementerat + Global Split - selected tracks + Global delning - valda spår - MusE: Cut Events - MusE: Klipp ut Händelse + &Edit + &Redigera - MusE: Bounce to Track - MusE: Bounce till Spår + &Structure + &Struktur - more than one target track selected - mer än ett spår valt som mål + Functions + Funktioner - wrong target track type, -select wave track as target - fel spårtyp som mål -välj wave-spår som mål + &Quantize Notes + Kvantisera &noter - no target track selected - inget spår valt som mål + Change note &length + Ändra not l&ängd - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Det nuvarande Projektet innehåller osparade ändringar -Öppning skriver över nuvarande Projekt -Spara nuvarande Projekt? + Change note &velocity + Ändra not &anslag - &Overwrite - Skriv &över + Crescendo/Decrescendo + - no help found at: - ingen h jälp hittad vid: + Transpose + Transponera - MusE: Open Help - Muse: Arkiv hjälp + Erase Events (Not Parts) + Ta bort händelser (ej parter) - to import a audio file you have first to selecta wave track - för att importa en ljudfil så måste du första välja ett wavespår + Move Events (Not Parts) + Flytta händelser (ej parter) - Delete Selected Tracks - Ta bort valda spår + Set Fixed Note Length + Sätt fast notlängd - View - Vy + Delete Overlapping Notes + Ta bort överlappande noter - Restart Audio - Starta om Audio + Legato + - Mixer Automation - Mixerautomation + Window &Config + Fönster k&onfiguration - Take Snapshot - Ta ett snapshot + New + Ny - Clear Automation Data - Rensa automationsdata + Duplicate Selected Tracks + Duplicera valt spår - Settings - Inställningar + Configure &custom columns + Konfigurera &anpassade kolumner - Configure Shortcuts - Konfigurera kortkommandon + Changed Settings + Ändrade inställningar - Midi File Export - Midifilexport + Unfortunately, the changed arranger column settings +cannot be applied while MusE is running. +To apply the changes, please restart MusE. Sorry. +(we'll try to fix that) + Tyvärr kan inte de ändrade kolumninställningarna +i arrangeraren appliceras när MusE kör. +För att aktivera starta om MusE. (Vi kommer att +försöka fixa det senare) + + + MusEGui::AudioMixerApp - Midi Ports / Soft Synth - Midiportar / Mjukvarusyntar + &Create + &Skapa - &MusE Homepage - M&usEs hemsida + &View + &Vy - &Report Bug... - &Rapportera fel... + Routing + Koppling - &About MusE - &Om MusE + Show Midi Tracks + Visa midispår - What's &This? - Vad är &detta? + Show Drum Tracks + Visa trumspår - Cannot read template - Kan inte läsa mall + Show Wave Tracks + Visa wavespår - File open error - Fel vid öppning av fil + Show Inputs + Visa ingångar - File read error - Fel vid läsning av fil + Show Outputs + Visa utgångar - MusE: load template - MusE: ladda mall + Show Groups + Visa grupper - set left/right marker for bounce range - sätt vänster och höger markör till bounce-område + Show Auxs + Visa Auxspår - MusE: Bounce to File - MusE: Bounce till fil + Show Synthesizers + Visa syntspår + + + MusEGui::AudioStrip - no output track found - hittar inget utgångsspår + panorama + - Add midi file to current project? - - Lägg midifil till nuvarande projekt? + aux send level + aux send nivå - &Add to Project - &Lägg till projekt + Pan + - &Replace - &Ersätt + 1/2 channel + 1/2 kanal - -failed: - -misslyckades: + Pre + - Import Part - Importera Part + pre fader - post fader + - Marker View - Markörvy + dB + - &Skip - &Hoppa över + record + inspelning - Import part is only valid for midi tracks! - Bara midispår kan importera parter! + mute + tysta - MusE: load part - MusE: ladda part + record downmix + spela in nermixning - No track selected for import - Inget spår valt för import - - - Wave - Wave - - - &Cancel - &Avbryt - - - New - Ny - - - &Yes - &Ja - - - &No - &Nej - - - - MusEApp::MusE - - Und&o - &Ångra - - - Re&do - &Gör om - - - undo last change to song - ångra sista ändring i sång - - - redo last undo - gör om sista ångring - - - Rewind - Flytta tillbaka - - - Forward - Frammåt - - - Stop - Stopp - - - Play - Spela - - - Record - Spela in - - - Panic - Panik - - - &New - &Ny - - - &Open - &Öppna - - - Open &Recent - &Nyligen öppnade - - - &Save - &Spara - - - Save &As - S&para som - - - Import Midifile - Importera midifil - - - Export Midifile - Exportera midifil - - - Import Part - Importera Part - - - Import Wave File - Importera ljudfil - - - &Quit - A&vsluta - - - Transport Panel - Transportpanel - - - Bigtime Window - Bigtime fönster - - - Marker View - Markörvy - - - Transpose - Transponera - - - Midi Remote Control - Midi-fjärrkontroll - - - Reset Instr. - Resetta Instr. - - - Local Off - lokal av - - - Bounce to Track - Bounce till Spår - - - Bounce to File - Bounce till Fil - - - Restart Audio - Starta om Audio - - - Mixer Automation - Mixerautomation - - - Take Snapshot - Ta ett snapshot - - - Clear Automation Data - Rensa automationsdata - - - Global Settings - Globala Inställningar - - - Configure Shortcuts - Konfigurera kortkommandon - - - Follow Song - följ sång - - - Don't Follow Song - följ inte Sång - - - Follow Page - följ sida - - - Follow Continuous - följ kontinuerligt - - - Metronome - Metronom - - - Midi Sync - Midi Synk - - - Appearance Settings - Utseendeinställningar - - - Midi Ports / Soft Synth - Midiportar / Mjukvarusyntar - - - &MusE Homepage - M&usEs hemsida - - - &Report Bug... - &Rapportera fel... - - - &About MusE - &Om MusE - - - &File - &Arkiv - - - &Audio - L&jud - - - &Help - &Hjälp - - - Cannot read template - Kan inte läsa mall - - - File open error - Fel vid öppning av fil - - - File read error - Fel vid läsning av fil - - - MusE: Song: - MusE: Sång: - - - MusE: load project - MusE: Öppna projekt - - - MusE: load template - MusE: ladda mall - - - MusE: Write File failed - MusE: Misslyckades med att skriva Fil - - - The current Project contains unsaved data -Save Current Project? - Det nuvarande Projektet innehåller osparade ändringar -Spara nuvarande Projekt? - - - &Cancel - &Avbryt - - - MusE: Save As - MusE: Spara Som - - - Nothing to edit - Inget att redigera - - - MusE: Bounce to Track - MusE: Bounce till Spår - - - MusE: Bounce to File - MusE: Bounce till fil - - - set left/right marker for bounce range - sätt vänster och höger markör till bounce-område - - - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Det nuvarande Projektet innehåller osparade ändringar -Öppning skriver över nuvarande Projekt -Spara nuvarande Projekt? - - - &Abort - &Avbryt - - - MusE: Export Midi - MusE: Exportera Midi - - - no help found at: - ingen h jälp hittad vid: - - - MusE: Open Help - Muse: Arkiv hjälp - - - MusE: Import Midi - MusE: Importera Midi - - - Add midi file to current project? - - Lägg midifil till nuvarande projekt? - - - &Add to Project - &Lägg till projekt - - - &Replace - &Ersätt - - - reading midifile - - läser midifil - - - -failed: - -misslyckades: - - - MusE: load part - MusE: ladda part - - - No track selected for import - Inget spår valt för import - - - &Yes - &Ja - - - &No - &Nej - - - - MusEArranger::Arranger - - Enable Recording - Slå på Inspelning - - - Solo Indicator - Solo-Indikator - - - Track Type - Spårtyp - - - Track Name - Spårnamn - - - Time Lock - Tidlås - - - Arranger - Arrangerare - - - Cursor - Markör - - - Snap - Fäst vid - - - Len - Längd - - - Type - Typ - - - midi song type - typ av midsång - - - Pitch - Tonhöjd - - - TrackInfo - Spårinfo - - - Track - Spår - - - - MusEArranger::ArrangerView - - panic - panik - - - C&ut - Klipp &ut - - - &Copy - &Kopiera - - - &Paste - K&listra in - - - Delete Selected Tracks - Ta bort valda spår - - - Add Track - Lägg Till Spår - - - Select - Välj - - - Select &All - Markera &Allt - - - &Deselect All - A&vmarkera Allt - - - Invert &Selection - Invertera &Markering - - - &Inside Loop - &I Loop - - - &Outside Loop - &Utanför Loop - - - All &Parts on Track - Alla &Parter i spår - - - Score - Partitur - - - Pianoroll - Pianorulle - - - Drums - Trummor - - - List - Lista - - - Wave - Wave - - - Mastertrack - Masterspår - - - Graphic - Grafik - - - Midi &Transform - Midi &Transform - - - Global Cut - Globalt klipp - - - Global Insert - Global insättning - - - Global Split - Global delning - - - &Edit - &Redigera - - - &Structure - &Struktur - - - Functions - Funktioner - - - Transpose - Transponera - - - New - Ny - - - - MusEArranger::PartCanvas - - Cannot copy/move/clone to different Track-Type - Kan inte kopiera/flytta/klona till annan Spårtyp - - - C&ut - Klipp &ut - - - &Copy - &Kopiera - - - rename - byt namn - - - color - färg - - - delete - ta bort - - - split - dela - - - glue - lim - - - de-clone - häv kloning - - - wave edit - wave redigering - - - MusE: save part - MusE: spara part - - - Cannot paste: multiple tracks selected - Kan inte klistra in: flera spår valda - - - Cannot paste: no track selected - Kan inte klistra in: inget spår valt - - - Can only paste to midi/drum track - Kan endast klistra in på midi/trummspår - - - Can only paste to wave track - Kan endast klistra till wavespår - - - Cannot paste: wrong data type - Kan inte klistra in: fel datatyp - - - - MusEArranger::TList - - MusE: bad trackname - MusE: dåligt spårnamn - - - please choose a unique track name - vänligen välj ett unikt spårnamn - - - Update drummap? - Updatera trum-map? - - - Do you want to use same port for all instruments in the drummap? - Vill du använda samma port för alla instrument i trum-map:en? - - - &Yes - &Ja - - - &No - &Nej - - - show gui - visa gui - - - Delete Track - Ta bort spår - - - Midi - Midi - - - Drum - Trumma - - - Do you want to use same port and channel for all instruments in the drummap? - Vill du använda samma port och kanal för alla instrument i trummap:en? - - - - MusECore::Song - - Jack shutdown! - Jack avstängd! - - - Jack has detected a performance problem which has lead to -MusE being disconnected. -This could happen due to a number of reasons: -- a performance issue with your particular setup. -- a bug in MusE (or possibly in another connected software). -- a random hiccup which might never occur again. -- jack was voluntary stopped by you or someone else -- jack crashed -If there is a persisting problem you are much welcome to discuss it -on the MusE mailinglist. -(there is information about joining the mailinglist on the MusE - homepage which is available through the help menu) - -To proceed check the status of Jack and try to restart it and then . -click on the Restart button. - Jack har detekterat ett prestandaproblem som har lett till att -MusE blivit bortkopplad. -Detta kan hända av en mängd anledningar: -- ett prestanda problem med din specifika konfiguration. -- en bugg i MusE (eller möjligen i en annan inkopplad mjukvara). -- ett slumpmässigt problem som kanske aldrig händer igen. -- Jack blev medvetet stoppad. -- Jack krashade. -Om problemet återkommer är du välkommen att diskutera det -på MusE mailinglistan. (information om hur man kommer åt den -finns på hjälpmenyn) - -För att fortsätta, säkerställ att Jack är igång och klicka på Omstart knappen. - - - Automation: - Automation: - - - previous event - föregående händelse - - - next event - nästa händelse - - - set event - ändra händelse - - - add event - lägg till händelse - - - erase event - ta bort händelse - - - erase range - ta bort händelseområde - - - clear automation - rensa automation - - - Clear all controller events? - Ta bort alla kontrollerhändelser? - - - &Ok - &Ok - - - &Cancel - &Avbryt - - - MusE - external script failed - MusE - externt skript misslyckades - - - MusE was unable to launch the script, error message: -%1 - MusE kunde inte starta skript, felmeddelande: %1 - - - - MusEGui - - Select project directory - Välj projektkatalog - - - - MusEGui::Appearance - - Main application font, and default font for any - controls not defined here. - Huvudapplikationstypsnitt, även standard typsnitt -för alla gui-kontroller ej definierade här. - - - Mixer strips and effects racks. Midi track info panel. -Midi control panel entry box. - Mixer-strips och effektrack. Midi spårinfopanel. -Midikontrollpanel inmatningsbox. - - - Transport controls. - Transportkontroller. - - - Time scale upper, and time signature. -Controller graph and S/X buttons. - Övre tidsskala och tidsignatur. -Kontrollgraf och S/X knappar. - - - Time scale lower, and arranger part name overlay. - Lägre tidskala och partnamnöverlagring i redigerare. - - - Tempo scale, and markers. - Temposkala och markörer. - - - Mixer labels. Auto-font-sizing up to chosen font size. -Word-breaking but only with spaces. - Mixeretiketter. Automatisktypsnittsstorlek upp till vald storlek. -Ordbrytning men bara med mellanslag. - - - Maximum mixer label auto-font-sizing font size. - Max mixetikett automatisk typsnittsstorlek. - - - Global opacity (opposite of transparency). - Global opacitet (motsats till genomskinlighet). - - - Standard - - - - Custom - Anpassad - - - MusE: load image - MusE: ladda bild - - - Select style sheet - Välj stylesheet - - - Qt style sheets (*.qss) - - - - - MusEGui::Arranger - - Enable Recording - Slå på Inspelning - - - Mute/Off Indicator - Mute/Av indikator - - - Solo Indicator - Solo-Indikator - - - Track Type - Spårtyp - - - Track Name - Spårnamn - - - Midi output channel number or audio channels - Midiutgångskanalnummer eller ljudkanal - - - Midi output port or synth midi port - Midiutgångsport eller syntmidiport - - - Time Lock - Tidlås - - - Automation parameter selection - Automation parameterval - - - Notation clef - - - - Enable recording. Click to toggle. - Slå på inspelning. Klicka för att växla. - - - Mute indicator. Click to toggle. -Right-click to toggle track on/off. -Mute is designed for rapid, repeated action. -On/Off is not! - Mute indikator. Klicka för att växla. -Högerklick för att växla spår av/på. -Mute är gjort för snabb och återkommande användande. -Av/På är det inte! - - - Solo indicator. Click to toggle. -Connected tracks are also 'phantom' soloed, - indicated by a dark square. - Soloindikator. Klicka för att växla. -Kopplade spår får implicit solo, -indikeras med en mörk fyrkant. - - - Track type. Right-click to change - midi and drum track types. - Spårtyp. Högerklicka för att byta -midi- och trum-spårtyper. - - - Track name. Double-click to edit. -Right-click for more options. - Spårnamn. Dubbelklicka för att editera. Högerklick för fler alternativ. - - - Midi/drum track: Output channel number. -Audio track: Channels. -Mid/right-click to change. - Midi/trumspår: Utgångskanalnummer. -Ljudspår: Kanaler. -Mitt/högerklick för att ändra. - - - Midi/drum track: Output port. -Synth track: Assigned midi port. -Left-click to change. -Right-click to show GUI. - Midi/trumspår: Utport -Syntspår: tilldelad midiport. -Vänsterklick för att ändra. -Högerklick för at visa GUI. - - - Time lock - Tidlås - - - Notation clef. Select this tracks notation clef. - Notationsklav. Välj spårets notationsklav. - - - Arranger - Arrangerare - - - Cursor - Markör - - - Off - Av - - - Bar - Takt - - - Snap - Fäst vid - - - Len - Längd - - - song length - bars - sånglängd - takter - - - Type - Typ - - - NO - - - - GM - - - - GS - - - - XG - - - - midi song type - typ av midisång - - - Pitch - Tonhöjd - - - midi pitch - miditonhöjd - - - global midi pitch shift - global midi-tonhöjdsjustering - - - Tempo - - - - midi tempo - - - - N - - - - TrackInfo - Spårinfo - - - R - - - - M - - - - S - - - - C - - - - Track - Spår - - - Port - - - - Ch - - - - T - - - - Automation - - - - Clef - Klav - - - - MusEGui::ArrangerView - - MusE: Arranger - MusE: Arrangerare - - - Undo/Redo tools - Ångra/Gör om verktyg - - - panic - panik - - - transport - - - - C&ut - Klipp &ut - - - &Copy - &Kopiera - - - Copy in range - Kopiera i område - - - &Paste - K&listra in - - - Paste (show dialog) - Klistra in (visa dialog) - - - Paste c&lone - Klistra in &klon - - - Paste clone (show dialog) - Klistra in klon (visa dialog) - - - &Insert Empty Measure - &Lägg in tom takt - - - Delete Selected Tracks - Ta bort valda spår - - - Shrink selected parts - Krymp valda parter - - - Expand selected parts - Expandera valda parter - - - Clean selected parts - Rensa valda parter - - - Add Track - Lägg Till Spår - - - Select - Välj - - - Select &All - Markera &Allt - - - &Deselect All - A&vmarkera Allt - - - Invert &Selection - Invertera &Markering - - - &Inside Loop - &I Loop - - - &Outside Loop - &Utanför Loop - - - All &Parts on Track - Alla &Parter i spår - - - Score - Partitur - - - all tracks in one staff - alla spår i en notlinje - - - one staff per track - en notlinje per spår - - - New score window - Nytt partiturfönster - - - Pianoroll - Pianorulle - - - Drums - Trummor - - - List - Lista - - - Wave - Wave - - - Mastertrack - Masterspår - - - Graphic - Grafisk - - - Midi &Transform - Midi &Transform - - - Global Cut - Globalt klipp - - - Global Insert - Global insättning - - - Global Split - Global delning - - - Global Cut - selected tracks - Globalt klipp - valda spår - - - Global Insert - selected tracks - Global insättning - valda spår - - - Global Split - selected tracks - Global delning - valda spår - - - &Edit - &Redigera - - - &Structure - &Struktur - - - Functions - Funktioner - - - &Quantize Notes - Kvantisera &noter - - - Change note &length - Ändra not l&ängd - - - Change note &velocity - Ändra not &anslag - - - Crescendo/Decrescendo - - - - Transpose - Transponera - - - Erase Events (Not Parts) - Ta bort händelser (ej parter) - - - Move Events (Not Parts) - Flytta händelser (ej parter) - - - Set Fixed Note Length - Sätt fast notlängd - - - Delete Overlapping Notes - Ta bort överlappande noter - - - Legato - - - - Window &Config - Fönster k&onfiguration - - - New - Ny - - - - MusEGui::AudioMixerApp - - &Create - &Skapa - - - &View - &Vy - - - Routing - Koppling - - - Show Midi Tracks - Visa midispår - - - Show Drum Tracks - Visa trumspår - - - Show Wave Tracks - Visa wavespår - - - Show Inputs - Visa ingångar - - - Show Outputs - Visa utgångar - - - Show Groups - Visa grupper - - - Show Auxs - Visa Auxspår - - - Show Synthesizers - Visa syntspår - - - - MusEGui::AudioStrip - - panorama - - - - aux send level - aux send nivå - - - Pan - - - - 1/2 channel - 1/2 kanal - - - Pre - - - - pre fader - post fader - - - - dB - - - - record - inspelning - - - mute - tysta - - - record downmix - spela in nermixning - - - solo mode - sololäge - - - off - av - - - iR - - - - input routing - ingångskoppling - - - oR - - - - output routing - utgångskoppling - - - Off - Av - - - Read - Läs - - - Touch - Rör - - - Write - Skriv - - - automation type - automationstyp - - - - MusEGui::BigTime - - format display - formatvisning - - - bar - takt - - - beat - taktdel - - - tick - tick - - - minute - minut - - - second - sekund - - - frame - ram - - - subframe - subram - - - MusE: Bigtime - - - - - MusEGui::ClipListEdit - - MusE: Clip List Editor - MusE: Clip-listredigerare - - - Undo/Redo tools - Ångra/Gör om verktyg - - - panic - panik - - - transport - - - - Window &Config - Fönster k&onfiguration - - - - MusEGui::ComboQuant - - Off - Av - - - - MusEGui::CtrlPanel - - S - - - - select controller - välj controller - - - X - - - - remove panel - ta bort panel - - - manual adjust - manuell justering - - - double click on/off - dubbelklick av/på - - - off - av - - - Velocity - Hastighet - - - add new ... - lägg till ny... - - - Instrument-defined - Instrumentdefinierad - - - Add ... - Lägg till... - - - Others - Andra - - - Edit instrument ... - Redigera instrument... - - - Common Controls - Vanliga kontroller - - - - MusEGui::DrumEdit - - mute instrument - tysta instrument - - - sound name - ljudnamn - - - volume percent - volymprocent - - - quantisation - kvantisering - - - this input note triggers the sound - denna in-not triggar ljudet - - - note length - notlängd - - - this is the note which is played - det är denna not som visas - - - output channel (hold ctl to affect all rows) - Utgångskanal (håll Ctrl för att ändra alla rader) - - - output port (hold ctl to affect all rows) - Utgångsport (håll Ctrl för att ändra alla rader) - - - shift + control key: draw velocity level 1 - shift + kontrolltangent: rita anslag nivå 1 - - - control key: draw velocity level 2 - kontrolltangent: rita - - - shift key: draw velocity level 3 - - - - draw velocity level 4 - - - - output channel (ctl: affect all rows) - - - - output port (ctl: affect all rows) - - - - &File - &Arkiv - - - Load Map - Ladda mappning - - - Save Map - Spara Mappning - - - Reset GM Map - - - - &Edit - &Redigera - - - Cut - Klipp ut - - - Copy - Kopiera - - - Copy events in range - - - - Paste - Klistra in - - - Paste (with Dialog) - - - - Delete Events - - - - &Select - &Välj - - - Select All - Välj Allt - - - Select None - Välj Ingen - - - Invert - Invertera - - - Inside Loop - I loop - - - Outside Loop - Utanför loop - - - Previous Part - - - - Next Part - - - - Fu&nctions - - - - Re-order list - - - - Set Fixed Length - Sätt fast längd - - - Modify Velocity - Modifiera Velocity - - - Crescendo/Decrescendo - - - - Quantize - Kvantisera - - - Erase Event - Ta bort Händelse - - - Move Notes - - - - Delete Overlaps - - - - &Plugins - - - - Window &Config - - - - Drum tools - - - - Load Drummap - Ladda trummappning - - - Store Drummap - Spara trummappning - - - Step Record - Stegvis inspelning - - - Midi Input - - - - cursor tools - - - - Set step size for cursor edit - - - - panic - panik - - - transport - - - - ctrl - - - - Add Controller View - - - - M - - - - Sound - Ljud - - - Vol - - - - QNT - - - - E-Note - - - - Len - Längd - - - A-Note - - - - Ch - - - - Port - - - - LV1 - - - - LV2 - - - - LV3 - - - - LV4 - - - - Muse: Load Drum Map - Muse: Ladda trummappning - - - MusE: Store Drum Map - MusE: Spara trummappning - - - Drum map - - - - Reset the drum map with GM defaults? - - - - - MusEGui::EditCAfterDialog - - MusE: Enter Channel Aftertouch - - - - Time Position - Tidsposition - - - Pressure - Tryck - - - - MusEGui::EditEventDialog - - Ok - - - - Cancel - Avbryt - - - - MusEGui::EditInstrument - - MusE: Create file failed - - - - MusE: Write File failed - MusE: Misslyckades med att skriva Fil - - - MusE: Save Instrument Definition - - - - Instrument Definition (*.idf) - - - - MusE: Save instrument as - - - - Enter a new unique instrument name: - + solo mode + sololäge - The user instrument '%1' already exists. This will overwrite its .idf instrument file. -Are you sure? - + off + av - MusE: Bad instrument name - + input routing + ingångskoppling - Please choose a unique instrument name. -(The name might be used by a hidden instrument.) - + output routing + utgångskoppling - MusE: Bad patch name - + Off + Av - Please choose a unique patch name - + Read + Läs - MusE: Bad patchgroup name - + Touch + Rör - Please choose a unique patchgroup name - + Write + Skriv - MusE: Bad controller name - + automation type + automationstyp + + + MusEGui::BigTime - Please choose a unique controller name - + format display + formatvisning - MusE: Cannot add common controller - + bar + takt - A controller named '%1' already exists. - + beat + taktdel - A controller number %1 already exists. - + tick + tick - MusE - + minute + minut - The current Instrument contains unsaved data -Save Current Instrument? - + second + sekund - &Save - &Spara + frame + ram - &Nosave - &Inte spara + subframe + subram - &Abort - &Avbryt + MusE: Bigtime + - MusEGui::EditMetaDialog + MusEGui::ClipListEdit - MusE: Enter Meta Event - MusE: Mata in Meta Händelse + MusE: Clip List Editor + MusE: Clip-listredigerare - Time Position - Tidsposition + Undo/Redo tools + Ångra/Gör om verktyg - Meta Type - Metatyp + panic + panik - Enter Hex - + Window &Config + Fönster k&onfiguration - MusEGui::EditPAfterDialog - - MusE: Enter Poly Aftertouch - MusE: Mata in Poly Aftertouch - - - Time Position - Tidsposition - - - Pitch - Tonhöjd - + MusEGui::ComboQuant - Pressure - Tryck + Off + Av - MusEGui::EditToolBar - - select Pointer Tool: -with the pointer tool you can: - select parts - move parts - copy parts - välj pek-verktyg: -med pekverktyget kan du: - välja parter - flytta parter - kopiera parter - - - select Pencil Tool: -with the pencil tool you can: - create new parts - modify length of parts - välj Pennverktyg: -med pennverktyget kan du: - skapa parter - ändra längden på parter - - - - select Delete Tool: -with the delete tool you can delete parts - välj Suddverktyg: -med suddverktyget kan du ta bort parter - - - select Cut Tool: -with the cut tool you can split a part - välj Delningsverktyg: -med delningsverktyget kan du dela på parter - - - select Glue Tool: -with the glue tool you can glue two parts - välj Limverktyg: -med limverktyget kan du limma ihop två parter - - - select Score Tool: - - välj Partiturverktyg: - - - - select Quantize Tool: -insert display quantize event - välj Kvantiseringsverktyg: -sätt in kvantiseringshändelser - - - select Drawing Tool - välj Ritverktyg - - - - select Muting Tool: -click on part to mute/unmute - välj Tystningsverktyg: -klicka på en part för att Tysta/Avtysta - - - Manipulate automation - - - - Cursor tool - - - - pointer - pekare - - - pencil - penna - - - eraser - sudd - + MusEGui::CtrlCanvas - cutter - delare - - - score - partitur - - - glue - lim - - - quantize - kvantisering - - - draw - rita - - - mute parts - tysta parter + Drawing hint: Hold Ctrl to affect only existing events + Rit-tips: Håll Ctrl för att bara ändra existerande händelser - edit automation - - - - cursor - - - - Edit Tools - Redigeringsverktyg + Use shift + pencil or line tool to draw new events + Använd shift + penna- eller linjeverktyg för att rita nya händelser - MusEGui::EffectRack - - effect rack - effektrack - - - new - ny - - - change - ändra - - - move up - flytta upp - - - move down - flytta ner - - - remove - ta bort - - - bypass - - + MusEGui::CtrlPanel - show gui - visa gui + S + - show native gui - + select controller + välj controller - save preset - + X + - MusE: Save Preset - + remove panel + ta bort panel - Replace effect - Byt effekt + manual adjust + manuell justering - Do you really want to replace the effect %1? - Vill du verkligen ersätta effekten %1? + double click on/off + dubbelklick av/på - - - MusEGui::Header - Track Info Columns - + off + av - - - MusEGui::LMaster - MusE: Mastertrack - MusE: Masterspår + Velocity + Hastighet - &Edit - &Redigera + add new ... + lägg till ny... - Insert Tempo - Sätt in tempo + Instrument-defined + Instrumentdefinierad - Insert Signature - Sätt in signatur + Add ... + Lägg till... - Insert Key - + Others + Andra - Edit Positon - Editera position + Edit instrument ... + Redigera instrument... - Edit Value - Editera värde + Common Controls + Vanliga kontroller - Delete Event - Ta bort event + ctrl-double-click on/off + kontroll dubbelklick av/på + + + MusEGui::DrumEdit - Window &Config - + mute instrument + tysta instrument - Undo/Redo tools - + sound name + ljudnamn - Edit tools - + volume percent + volymprocent - Tempo - + quantisation + kvantisering - Timesig - + this input note triggers the sound + denna in-not triggar ljudet - Key - + note length + notlängd - new tempo - nytt tempo + this is the note which is played + det är denna not som visas - new signature - ny signatur + output channel (hold ctl to affect all rows) + Utgångskanal (håll Ctrl för att ändra alla rader) - new key - + output port (hold ctl to affect all rows) + Utgångsport (håll Ctrl för att ändra alla rader) - panic - panik + shift + control key: draw velocity level 1 + shift + kontrolltangent: rita anslag nivå 1 - transport - + control key: draw velocity level 2 + kontrolltangent: rita - Meter - + shift key: draw velocity level 3 + Shift: Rita hastighet 3 - Time - Tid + draw velocity level 4 + Rita hastighet 4 - Type - Typ + output channel (ctl: affect all rows) + Utgångskanal. (CTRL påverkar alla spår) - Value - Värde + output port (ctl: affect all rows) + Utgång (CTRL påverkar alla spår) - Reposition of the initial tempo and signature events is not allowed - Ompositionering av initalt tempo och/eller signaturevent är inte tillåtet + &File + &Arkiv - MusE: List Editor - + Load Map + Ladda mappning - Input error, conversion not OK or value out of range - Inmatningsfel, konvertering felaktig eller värde utanför område + Save Map + Spara Mappning - Reposition of tempo and signature events to start position is not allowed! - Ompositionering av tempo och/eller signaturevent till startposition är inte tillåtet + Reset GM Map + GM Återställ kartan - - - MusEGui::ListEdit - insert Note - Mata in Not + &Edit + &Redigera - insert SysEx - Mata in SysEx + Cut + Klipp ut - insert Ctrl - Mata in Ctrl + Copy + Kopiera - insert Meta - Mata in Meta + Copy events in range + Kopiera intervall händelser - insert Channel Aftertouch - Mata in Aftertouch för kanal + Paste + Klistra in - insert Poly Aftertouch - Mata in Poly Aftertouch + Paste (with Dialog) + Klistra in (med dialog) - &Edit - &Redigera + Delete Events + Ta bort evenemang - Cut - Klipp ut + &Select + &Välj - Copy - Kopiera + Select All + Välj Allt - Paste - Klistra in + Select None + Välj Ingen - Delete Events - + Invert + Invertera - Window &Config - + Inside Loop + I loop - Undo/Redo tools - + Outside Loop + Utanför loop - Insert tools - + Previous Part + Region föregående - panic - panik + Next Part + Nästa Region - transport - + Fu&nctions + Fu&nktioner - Tick - + Re-order list + Ordna om listan - Bar - Takt + Set Fixed Length + Sätt fast längd - Type - Typ + Modify Velocity + Modifiera Velocity - Ch - + Crescendo/Decrescendo + Crescendo/Decrescendo - Val A - + Quantize + Kvantisera - Val B - + Erase Event + Ta bort Händelse - Val C - + Move Notes + Flytta noter - Len - Längd + Delete Overlaps + Eliminera överlappande - Comment - Kommentar + &Plugins + &Insticksprogram - - - MusEGui::MPConfig - Default input connections - + Window &Config + Fönster&inställningar - Are you sure you want to apply to all existing midi tracks now? - + Drum tools + Slagverktyg - Default output connections - + Load Drummap + Ladda trummappning - Setting will apply to new midi tracks. -Do you want to apply to all existing midi tracks now? - + Store Drummap + Spara trummappning - MusE: bad device name - + Step Record + Stegvis inspelning - please choose a unique device name - + Midi Input + Entry MIDI - in - + cursor tools + Markören verktyg - out - + Set step size for cursor edit + Ställa stegstorleken för att ändra markören - Show first aliases - + panic + panik - Show second aliases - + transport + transport - Toggle all - + ctrl + ctrl - Change all tracks now - + Add Controller View + Lägg View Controller - Create Jack device - + M + M - Port Number - Portnummer + Sound + Ljud - Enable gui - + Vol + - Enable reading - + QNT + - Enable writing - + E-Note + - Port instrument - + Len + Längd - Midi device name. Click to edit (Jack) - + A-Note + - Connections from Jack Midi outputs - + Ch + - Connections to Jack Midi inputs - + Port + - Auto-connect these channels to new midi tracks - + LV1 + - Auto-connect new midi tracks to these channels - + LV2 + - Auto-connect new midi tracks to this channel - + LV3 + - Device state - + LV4 + - Enable gui for device - + Muse: Load Drum Map + Muse: Ladda trummappning - Enable reading from device - + MusE: Store Drum Map + MusE: Spara trummappning - Enable writing to device - + Drum map + Karta över slagverk - Name of the midi device associated with this port number. Click to edit Jack midi name. - + Reset the drum map with GM defaults? + ¿Återställ kartan över slagverk i GM banken? + + + MusEGui::EditCAfterDialog - Instrument connected to port - Instrument kopplat till denna port + MusE: Enter Channel Aftertouch + Muse: Skriv in channel aftertouch - Connections from Jack Midi output ports - + Time Position + Tidsposition - Connections to Jack Midi input ports - + Pressure + Tryck + + + MusEGui::EditEventDialog - Auto-connect these channels, on this port, to new midi tracks. - + Ok + Om - Connect new midi tracks to these channels, on this port. - + Cancel + Avbryt + + + MusEGui::EditInstrument - Connect new midi tracks to this channel, on this port. - + MusE: Create file failed + Muse: Fel vid skapande av filen - State: result of opening the device - Status: resultat av öppning av enhet + MusE: Write File failed + MusE: Misslyckades med att skriva fil - Port - + MusE: Save Instrument Definition + Muse: Spara definition av instrument - GUI - + Instrument Definition (*.idf) + Definition av instrument (*. IDF) - I - + MusE: Save instrument as + Muse: Spara instrument som - O - + Enter a new unique instrument name: + Ange ett nytt unikt namn på instrument: - Instrument - Instrument + The user instrument '%1' already exists. This will overwrite its .idf instrument file. +Are you sure? + Användarinstrumentet '%1' finns redan. Detta kommer att skriva över dess.idf-fil. +Är du säker? - Device Name - Enhetsnamn + MusE: Bad instrument name + Muse: Ogiltig namn på instrument - In routes - + Please choose a unique instrument name. +(The name might be used by a hidden instrument.) + Välj ett unikt namn till instrumentet +(Namnet kanske använd av ett dolt instrument.) - Out routes - + MusE: Bad patch name + Muse: Ogiltigt programnamn - Def in ch - + Please choose a unique patch name + Välj ett unikt programnamn - Def out ch - + MusE: Bad patchgroup name + Muse: Felaktigt gruppnamn - State - Status + Please choose a unique patchgroup name + Välj ett unikt namn i gruppen - <unknown> - + MusE: Bad controller name + Muse: ogiltigt kontroll namn - <none> - + Please choose a unique controller name + Välj ett unikt kontroll-namn - - - MusEGui::MTScale - bar scale - + MusE: Cannot add common controller + Muse: Kan inte lägga till vanlig kontroll - - - MusEGui::MTScaleFlo - bar scale - + A controller named '%1' already exists. + Kontroll med namn %1 finns redan. - - - MusEGui::MarkerView - MusE: Marker - MusE: Markör + A controller number %1 already exists. + Kontroll med nummer %1 finns redan. - add marker - lägg till markör + MusE + MusE - delete marker - ta bort markör + The current Instrument contains unsaved data +Save Current Instrument? + Det nuvarande instrumentet innehåller osparat data. +Vill du spara nu? - &Edit - &Redigera + &Save + &Spara - Window &Config - + &Nosave + &Inte spara - Undo/Redo tools - + &Abort + &Avbryt + + + MusEGui::EditMetaDialog - edit tools - redigeringsverktyg + MusE: Enter Meta Event + MusE: Mata in Meta händelse - panic - panik + Time Position + Tidsposition - transport - + Meta Type + Metatyp - Bar:Beat:Tick - Takt:Slag:Tick + Enter Hex + in hexadecimalt + + + MusEGui::EditPAfterDialog - Hr:Mn:Sc:Fr:Sf - + MusE: Enter Poly Aftertouch + MusE: Mata in Poly Aftertouch - Lock - Lås + Time Position + Tidsposition - Text - Text + Pitch + Tonhöjd - Marker Properties - Markörinställningar + Pressure + Tryck - MusEGui::MasterEdit + MusEGui::EditToolBar - MusE: Mastertrack - MusE: Masterspår + select Pointer Tool: +with the pointer tool you can: + select parts + move parts + copy parts + välj pek-verktyg: +med pekverktyget kan du: + välja parter + flytta parter + kopiera parter - Window &Config - + select Pencil Tool: +with the pencil tool you can: + create new parts + modify length of parts + välj Pennverktyg: +med pennverktyget kan du: + skapa parter + ändra längden på parter + - Undo/Redo tools - + select Delete Tool: +with the delete tool you can delete parts + välj Suddverktyg: +med suddverktyget kan du ta bort parter - panic - panik + select Cut Tool: +with the cut tool you can split a part + välj Delningsverktyg: +med delningsverktyget kan du dela på parter - transport - + select Glue Tool: +with the glue tool you can glue two parts + välj Limverktyg: +med limverktyget kan du limma ihop två parter - Enable master - + select Score Tool: + + välj Partiturverktyg: + - Enable - Aktivera + select Quantize Tool: +insert display quantize event + välj Kvantiseringsverktyg: +sätt in kvantiseringshändelser - Enable usage of master track - Aktivera användning av masterspår + select Drawing Tool + välj Ritverktyg + - Info - + select Muting Tool: +click on part to mute/unmute + välj Tystningsverktyg: +klicka på en part för att Tysta/Avtysta - Cursor - Markör + Manipulate automation + Hantering automation - time at cursor position - tid vid markörposition + Cursor tool + Markören verktyg - tempo at cursor position - tempo vid markörposition + pointer + pekare - Off - Av + pencil + penna - Bar - Takt + eraser + sudd - Snap - Fäst vid + cutter + delare - CurPos - + score + partitur - tempo at current position - tempo vid nuvarande position + glue + lim - time signature at current position - time signature vid nuvarande position + quantize + kvantisering - - - MusEGui::MidiInputTransformDialog - New - Ny + draw + rita - - - MusEGui::MidiStrip - off - av + mute parts + tysta parter - double click on/off - + edit automation + Redigera automatisering - VariationSend - + cursor + markör - Var - + Edit Tools + Redigeringsverktyg + + + MusEGui::EffectRack - ReverbSend - + effect rack + effektrack - Rev - + new + ny - ChorusSend - + change + ändra - Cho - + move up + flytta upp - dB - + move down + flytta ner - Pan/Balance - Pan/Balans + remove + ta bort - Pan - + bypass + hoppa - record - + show gui + Visa gränssnitt - mute - tysta + show native gui + Visa eget gränssnitt - solo mode - + save preset + Spara pre instÄllning - iR - + MusE: Save Preset + MusE:Spara pre instÄllning - input routing - + Replace effect + Ersätta effekt - oR - + Do you really want to replace the effect %1? + Vill du verkligen ersätta effekten %1? + + + MusEGui::GlobalSettingsConfig - output routing - utgångsrouting + MusE: Choose start template or song + MusE: Välj startsång eller mall - MusEGui::MidiSyncConfig + MusEGui::Header - Port Number - Portnummer + Track Info Columns + Spåra information kolonn + + + MusEGui::LMaster - Name of the midi device associated with this port number - Namn på midienhet associerad med detta portnummer + MusE: Mastertrack + MusE: Masterspår - Midi clock input detected - + &Edit + &Redigera - Midi tick input detected - + Insert Tempo + Sätt in tempo - Midi real time input detected - + Insert Signature + Sätt in signatur - MMC input detected - + Insert Key + In nyckeln - MTC input detected - + Edit Positon + Editera position - Detected SMPTE format - + Edit Value + Editera värde - Receive id number. 127 = Global. Double click to edit. - + Delete Event + Ta bort event - Accept midi clock input - + Window &Config + Fönster&inställningar - Accept midi real time input - + Undo/Redo tools + Verktyg Ångra / Gör om - Accept MMC input - + Edit tools + Redigera-verktyg - Accept MTC input - + Tempo + Tempo - Receive start rewinds before playing - + Timesig + Compaz - Transmit id number. 127 = Global. Double click to edit. - + Key + Nyckel - Send midi clock output - + new tempo + nytt tempo - Send midi realtime output - + new signature + ny signatur - Send MMC output - + new key + Ny nyckel - Send MTC output - + panic + panik - Midi clock input detected. -Current port actually used is red. -Click to force a port to be used. - + transport + transport - Midi realtime input detected, including - start/stop/continue, and song position. - + Meter + metronom - MMC input detected, including stop/play/deferred play, and locate. - + Time + Tid - MTC input detected, including forward quarter-frame sync and full-frame locate. -Current port actually used is red. Click to force a port to be current. - + Type + Typ - Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop -Detects format of MTC quarter and full frame, and MMC locate. - + Value + Värde - Receive id number. 127 = global receive all, even if not global. - + Reposition of the initial tempo and signature events is not allowed + Ompositionering av initalt tempo och/eller signaturevent är inte tillåtet - Accept midi clock input. Only one input is used for clock. -Auto-acquire: If two or more port realtime inputs are enabled, - the first clock detected is used, until clock is lost, - then another can take over. Best if each turns off its clock - at stop, so MusE can re-acquire the clock from another port. -Click on detect indicator to force another. - + MusE: List Editor + Muse: Lista Editor - Accept midi realtime input, including - start/stop/continue, and song position. -Non-clock events (start,stop etc) are - accepted by ALL enabled ports. -This means you may have several master - devices connected, and muse will accept - input from them. - + Input error, conversion not OK or value out of range + Inmatningsfel, konvertering felaktig eller värde utanför område - Accept MMC input, including stop/play/deferred play, and locate. - + Reposition of tempo and signature events to start position is not allowed! + Ompositionering av tempo och/eller signaturevent till startposition är inte tillåtet! + + + MusEGui::ListEdit - Accept MTC input, including forward quarter-frame sync and full-frame locate. -See 'rc' column for more help. - + insert Note + Mata in Not - When start is received, rewind before playing. -Note: It may be impossible to rewind fast - enough to synchronize with the external device. - + insert SysEx + Mata in SysEx - Transmit id number. 127 = global transmit to all. - + insert Ctrl + Mata in Ctrl - Send midi clock output. If 'Slave to External Sync' is chosen, - muse can re-transmit clock to any other chosen ports. - + insert Meta + Mata in Meta - Send midi realtime output, including start/stop/continue, - and song position. If 'Slave to external sync' is chosen, - muse can re-transmit midi realtime input messages to any - other chosen ports. This means you may have several slave - devices connected, and muse can re-send realtime messages - to any or all of them. - + insert Channel Aftertouch + Mata in Aftertouch för kanal + + + insert Poly Aftertouch + Mata in Poly Aftertouch + + + &Edit + &Redigera - Port - + Cut + Klipp ut - Device Name - Enhetsnamn + Copy + Kopiera - c - + Paste + Klistra in - k - + Delete Events + Ta bort evenemang - r - + Window &Config + Fönster&inställningar - m - + Undo/Redo tools + Verktyg Ångra / Gör om - t - + Insert tools + Sätt verktyg - type - + panic + panik - rid - + transport + transport - rc - + Tick + kryssa - rr - + Bar + Takt - rm - + Type + Typ - rt - + Ch + kanal - rw - + Val A + Värde A - tid - + Val B + Värde B - tc - + Val C + Värde C - tr - + Len + Längd - tm - + Comment + Kommentar + + + MusEGui::MPConfig - tt - + Default input connections + Standard ingång anslutning - MusE - + Are you sure you want to apply to all existing midi tracks now? + Är du säker på att du vill använda för alla befintliga MIDI-spår? - Settings have changed -Apply sync settings? - + Default output connections + Standard utgångsanslutning - &Apply - + Setting will apply to new midi tracks. +Do you want to apply to all existing midi tracks now? + Den sjuste gäller nya MIDI-spår. +Vill du att gälla för alla befintliga MIDI-spår? - &No - &Nej + MusE: bad device name + Muse: Enhetsnamn fel - &Abort - &Avbryt + please choose a unique device name + Enhetens namn finns redan - <none> - + in + Entry - - - MusEGui::MidiTrackInfo - <unknown> - + out + Utsignal - - - MusEGui::MidiTransformerDialog - New - Ny + Show first aliases + Visa första alias - - - MusEGui::MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Ljudfiler (*.wav);;Alla filer (*) + Show second aliases + Visa de alias efter - - - MusEGui::MusE - Failed to start audio! - + Toggle all + ändra alla - Was not able to start audio, check if jack is running. - - + Change all tracks now + Ändra alla spår nu - Timeout waiting for audio to run. Check if jack is running. - - + Create Jack device + Skapa anslutning Jack - Und&o - &Ångra + Port Number + Portnummer - Re&do - &Gör om + Enable gui + Aktivera visa - undo last change to song - ångra sista ändring i sång + Enable reading + Möjliggöra läsning - redo last undo - gör om sista ångring + Enable writing + Aktivera skriva - Loop - + Port instrument + Redskapsöppning - loop between left mark and right mark - loopa mellan vänster och höger markering + Midi device name. Click to edit (Jack) + MIDI enhetsnamn, Klicka här för att redigera (Jack) - Punchin - + Connections from Jack Midi outputs + MIDI utgångar av Jack - record starts at left mark - inspelning börjar vid vänster markering + Connections to Jack Midi inputs + MIDI anslutningar av Jack - Punchout - + Auto-connect these channels to new midi tracks + Anslut automatiskt till dessa nya spår midi-kanaler - record stops at right mark - inspelning slutar vid höger markering + Auto-connect new midi tracks to these channels + Conectar nuevas pistas MIDI a estos canales - Start - + Auto-connect new midi tracks to this channel + AutoConnect nya MIDI-spår till den här kanalen - rewind to start position - spola tillbaka till startposition + Device state + Enhetsstatus - Rewind - Flytta tillbaka + Enable gui for device + Aktivera visa för enheten - rewind current position - flytta markör bakåt + Enable reading from device + Möjliggöra läsning från anordningen - Forward - Frammåt + Enable writing to device + Aktivera skriva till enheten - move current position - flytta markör + Name of the midi device associated with this port number. Click to edit Jack midi name. + MIDI enhetsnamn i samband med denna port. Klicka för att ändra MIDI enhetsnamnet Jack. - Stop - Stopp + Instrument connected to port + Instrument kopplat till denna port - stop sequencer - stoppa sequencer + Connections from Jack Midi output ports + Anslutningar MIDI utgångsportar av Jack - Play - Spela + Connections to Jack Midi input ports + Anslutningar MIDI ingångsportar av Jack - start sequencer play - starta sequenceruppspelning + Auto-connect these channels, on this port, to new midi tracks. + Automatisk anslutning av dessa kanaler, i denna hamn, nya MIDI spår. - Record - Spela in + Connect new midi tracks to these channels, on this port. + Anslut nya MIDI-spår till dessa kanaler, i denna port. - to record press record and then play - för att spela in, tryck på record och sedan play + Connect new midi tracks to this channel, on this port. + Anslut MIDI-spår nya för den här kanalen på den här porten. - Panic - Panik + State: result of opening the device + Status: resultat av öppning av enhet - send note off to all midi channels - skicka note-off till alla midi kanaler + Port + Porten - &New - &Ny + GUI + Gränssnitt - Create New Song - Ny sång + I + - &Open - &Öppna + O + Av - Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. - Klicka här för att öppna en <em>ny sång</em>.<br>Du kan också välja menyvalet <b>Öppna</b> från Arkivmenyn. + Instrument + Instrument - Open &Recent - &Nyligen öppnade + Device Name + Enhetsnamn - &Save - &Spara + In routes + Ingångsväg - Click this button to save the song you are editing. You will be prompted for a file name. -You can also select the Save command from the File menu. - Klicka här för att spara den sång du håller på att redigera. En förfrågan om filnamn kommer att ställas. -Du kan också välja menyalternativet Spara från Arkivmenyn. + Out routes + Utrymningsvägar - Save &As - S&para som + Def in ch + Definiera ingångskanaler - Import Midifile - Importera midifil + Def out ch + Utgångskanaler fastställa - Export Midifile - Exportera midifil + State + Tillstånd - Import Part - Importera Part + <unknown> + <okänd> - Import Wave File - Importera ljudfil + <none> + <Inget> + + + MusEGui::MTScale - Find unused wave files - + bar scale + Skalstrecken + + + MusEGui::MTScaleFlo - &Quit - A&vsluta + bar scale + Skalstrecken + + + MusEGui::MarkerView - Song Info - + MusE: Marker + MusE: Markör - Transport Panel - Transportpanel + add marker + lägg till markör - Bigtime Window - Bigtime fönster + delete marker + ta bort markör - Mixer A - + &Edit + &Redigera - Mixer B - + Window &Config + Fönster&inställningar - Cliplist - + Undo/Redo tools + Verktyg Ångra / Gör om - Marker View - Markörvy + edit tools + redigeringsverktyg - Arranger View - + panic + panik - Fullscreen - + transport + transport - &Plugins - + Bar:Beat:Tick + Takt:Slag:Tick - Edit Instrument - + Hr:Mn:Sc:Fr:Sf + Hr:Mn:Sc:Fr:Sf - Input Plugins - + Lock + Lås - Transpose - Transponera + Text + Text - Midi Input Transform - + Marker Properties + Markörinställningar + + + MusEGui::MasterEdit - Midi Input Filter - + MusE: Mastertrack + MusE: Masterspår - Midi Remote Control - Midi-fjärrkontroll + Window &Config + Fönster&inställningar - Rhythm Generator - + Undo/Redo tools + Verktyg Ångra / Gör om - Reset Instr. - Resetta Instr. + panic + panik - Init Instr. - + transport + transport - Local Off - lokal av + Enable master + Möjliggöra läraren - Bounce to Track - Bounce till Spår + Enable + Aktivera - Bounce to File - Bounce till Fil + Enable usage of master track + Aktivera användning av masterspår - Restart Audio - Starta om Audio + Info + Informationen - Mixer Automation - Mixerautomation + Cursor + Markör - Take Snapshot - Ta ett snapshot + time at cursor position + tid vid markörposition - Clear Automation Data - Rensa automationsdata + tempo at cursor position + tempo vid markörposition - Cascade - + Off + Av - Tile - + Bar + Takt - In rows - + Snap + Fäst vid - In columns - + CurPos + Placera markören - Global Settings - Globala Inställningar + tempo at current position + tempo vid nuvarande position - Configure Shortcuts - Konfigurera kortkommandon + time signature at current position + time signature vid nuvarande position + + + MusEGui::MidiInputTransformDialog - Follow Song - följ sång + New + Ny + + + MusEGui::MidiStrip - Don't Follow Song - följ inte Sång + off + av - Follow Page - följ sida + double click on/off + Docle klicka på På / Av - Follow Continuous - följ kontinuerligt + VariationSend + Leverans Varians - Metronome - Metronom + Var + Lev - Midi Sync - Midi Synk + ReverbSend + Sända efterklang - Midi File Import/Export - + Rev + Efterklang - Appearance Settings - Utseendeinställningar + ChorusSend + Skicka kören - Midi Ports / Soft Synth - Midiportar / Mjukvarusyntar + Cho + Kören - &Manual - + dB + dB - &MusE Homepage - M&usEs hemsida + Pan/Balance + Översikt / Balans - &Report Bug... - &Rapportera fel... + Pan + Översikt - &About MusE - &Om MusE + record + Post - File Buttons - + mute + tysta - Undo/Redo - + solo mode + endast mode - Transport - + input routing + dirigering av inträde - &File - &Arkiv + output routing + utgångsrouting - &View - + ctrl-double-click on/off + kontroll dubbelklick av/på + + + MusEGui::MidiSyncConfig - &Midi - + Port Number + Portnummer - &Audio - L&jud + Name of the midi device associated with this port number + Namn på midienhet associerad med detta portnummer - A&utomation - + Midi clock input detected + Midi klock-indata upptäckt - &Windows - + Midi tick input detected + Midi tick-indata upptäckt - MusE Se&ttings - + Midi real time input detected + Midi realtids-indata upptäckt - &Help - &Hjälp + MMC input detected + MMC indata upptäckt - Cannot read template - Kan inte läsa mall + MTC input detected + MTC indata upptäckts - File open error - Fel vid öppning av fil + Detected SMPTE format + Upptäckt SMPTE-format - File read error - Fel vid läsning av fil + Receive id number. 127 = Global. Double click to edit. + Mottagar-id nummer: 127 = Global. Dubbelklicka för att editera. - Unknown File Format: %1 - + Accept midi clock input + Acceptera midiklock-indata - MusE: Song: %1 - + Accept midi real time input + Acceptera midi realtidsindata - MusE: load project - MusE: Öppna projekt + Accept MMC input + Acceptera MMC indata - MusE: load template - MusE: ladda mall + Accept MTC input + Acceptera MTC indata - MusE: Write File failed - MusE: Misslyckades med att skriva Fil + Receive start rewinds before playing + Mottagande av start spolar tillbaka före uppspelning - The current Project contains unsaved data -Save Current Project? - Det nuvarande Projektet innehåller osparade ändringar -Spara nuvarande Projekt? + Transmit id number. 127 = Global. Double click to edit. + Skicka id nummer: 127 = Global. Dubbelklicka för att editera. - S&kip - + Send midi clock output + Skicka midi klock utdata - &Cancel - &Avbryt + Send midi realtime output + Skicka midi realtidsutdata - MusE: Save As - MusE: Spara Som + Send MMC output + Skicka MMC utdata - Nothing to edit - Inget att redigera + Send MTC output + Skicka MTC utdata - MusE: Bounce to Track - MusE: Bounce till Spår + Midi clock input detected. +Current port actually used is red. +Click to force a port to be used. + Midi klock-indata upptäckt. +Den nubarande porten som faktiskt används är röd. +Klicka för att tvinga en port att användas. - No wave tracks found - + Midi realtime input detected, including + start/stop/continue, and song position. + Midi realtidsindata upptäckt, inkluderar +start/stopp/fortsätt och sång-position. - No audio output tracks found - + MMC input detected, including stop/play/deferred play, and locate. + MMC indata upptäckt, inkluderar stopp/spela/fördröjd uppspelning och lokalisering. - Select one audio output track, -and one target wave track - + MTC input detected, including forward quarter-frame sync and full-frame locate. +Current port actually used is red. Click to force a port to be current. + MTC indata hittat, inkluderar frammåt kvartsram-synk och full-ram lokalisering. +Nuvarande port som används är röd. Klicka för att tvinga en port att användas. - Select one target wave track - + Detected SMPTE format: 24fps, 25fps, 30fps drop frame, or 30fps non-drop +Detects format of MTC quarter and full frame, and MMC locate. + Detektera SMPTE format: 24fps, 26fps, 30fps tappa rammar, eller 30fps inga tappade +Detekterar format av MTC kvarts- och fullramar, och MMC lokalisering. - Select one target wave track, -and one audio output track - + Receive id number. 127 = global receive all, even if not global. + Ta emot id nummer. 127 = global, ta emot alla, även om inte global. - MusE: Bounce to File - MusE: Bounce till fil + Accept midi clock input. Only one input is used for clock. +Auto-acquire: If two or more port realtime inputs are enabled, + the first clock detected is used, until clock is lost, + then another can take over. Best if each turns off its clock + at stop, so MusE can re-acquire the clock from another port. +Click on detect indicator to force another. + Acceptera midi-klock-indata. Bara en ingång används för klocka. +Auto-välj: Om två eller flera realtids-indata-portar är aktiverade, +den första klockan som hittats används tills klockan tappas, då +kan en annan ta över. Det är bäst om alla slår av sin klocka +vid stopp så MusE can återinitiera klockan från en annan port. +Klicka på detekteringsindikatorn för att tvinga en annan. - Select one audio output track - + Accept midi realtime input, including + start/stop/continue, and song position. +Non-clock events (start,stop etc) are + accepted by ALL enabled ports. +This means you may have several master + devices connected, and muse will accept + input from them. + Acceptera midi realtids-indata, inkluderar +start/stop/fortsätt och sång-position. +Icke-klock-händelser (start, stopp etc) +accepteras av alla aktiverade portar. +Detta betyder att det kan finnas flera +kopplade master-enheter kopplade som +MusE accepterar indata från. - MusE: Bounce - + Accept MMC input, including stop/play/deferred play, and locate. + Acceptera MMC indata, inkluderar stopp/spela/fördröjd uppspelning och lokalisering. - set left/right marker for bounce range - sätt vänster och höger markör till bounce-område + Accept MTC input, including forward quarter-frame sync and full-frame locate. +See 'rc' column for more help. + Acceptera MTC indata, inkluderar frammåt kvartsram-synk och full-ram lokalisering. +See 'rc' kolumn för mer hjälp. - The current Project contains unsaved data -Load overwrites current Project: -Save Current Project? - Det nuvarande Projektet innehåller osparade ändringar -Öppning skriver över nuvarande Projekt -Spara nuvarande Projekt? + When start is received, rewind before playing. +Note: It may be impossible to rewind fast + enough to synchronize with the external device. + När start är mottagen, spola tillbaka innan uppspelning. +Notera: Det kan vara omöjligt att spola tillbaka tillräckligt +snabbt för att synkronisera med en externt enhet. - &Abort - &Avbryt + Transmit id number. 127 = global transmit to all. + Sänd id-nummer. 127 = global sänd till alla. - MusE: Export Midi - MusE: Exportera Midi + Send midi clock output. If 'Slave to External Sync' is chosen, + muse can re-transmit clock to any other chosen ports. + Skicka midiklock-utdata. Om 'Slava till externsynk' är vald, +MusE can återsända klockan till andra valda portar. - no help found at: - ingen h jälp hittad vid: + Send midi realtime output, including start/stop/continue, + and song position. If 'Slave to external sync' is chosen, + muse can re-transmit midi realtime input messages to any + other chosen ports. This means you may have several slave + devices connected, and muse can re-send realtime messages + to any or all of them. + Skicka midi realtids-utdata, inkluderar start/stopp/fortsätt och +sång-position. Om 'slava till externsynk' är vald, MusE kan +återsända midi realtids-indata meddelanden till andra valda +portar. Detta betyder att MusE kan skicka vidare realtids meddelanden +till flera kopplade slav-enheter. - MusE: Open Help - Muse: Arkiv hjälp + Port + Port - Unable to launch help - + Device Name + Enhetsnamn - For some reason MusE has to launch the default -browser on your machine. - + c + - MusE: Import Midi - MusE: Importera Midi + k + - Add midi file to current project? - - Lägg midifil till nuvarande projekt? + r + - &Add to Project - &Lägg till projekt + m + - &Replace - &Ersätt + t + - reading midifile - - läser midifil + type + typ - -failed: - -misslyckades: + rid + - Import part is only valid for midi and wave tracks! - + rc + - MusE: load part - MusE: ladda part + rr + - No track selected for import - Inget spår valt för import + rm + - %n part(s) out of %1 could not be imported. -Likely the selected track is the wrong type. - - + rt + - %n part(s) could not be imported. -Likely the selected track is the wrong type. - - + rw + - to import an audio file you have first to selecta wave track - + tid + - Import Wavefile - + tc + - This wave file has a samplerate of %1, -as opposed to current setting %2. -Do you still want to import it? - + tr + - &Yes - &Ja + tm + - &No - &Nej + tt + - - - MusEGui::NoteInfo - Note Info - Notinfo + MusE + MusE - Start - + Settings have changed +Apply sync settings? + Inställningar har ändrats +Aktivera synkinställningar? - Len - Längd + &Apply + - Pitch - Tonhöjd + &No + &Nej - Velo On - + &Abort + &Avbryt - Velo Off - + <none> + - MusEGui::PartCanvas - - Cannot copy/move/clone to different Track-Type - Kan inte kopiera/flytta/klona till annan Spårtyp - + MusEGui::MidiTrackInfo - C&ut - Klipp &ut + <unknown> + + + + MusEGui::MidiTransformerDialog - &Copy - &Kopiera + New + Ny + + + MusEGui::MixdownFileDialog - s&elect - + Wave Files (*.wav);;All Files (*) + Ljudfiler (*.wav);;Alla filer (*) + + + MusEGui::MusE - clones - + Failed to start audio! + Gick inte att starta ljud! - rename - byt namn + Was not able to start audio, check if jack is running. + + Kan inte starta ljud, kontrollera status på Jack. - color - färg + Timeout waiting for audio to run. Check if jack is running. + + Tid löpte ut i väntan på att ljud skulle starta. Kontrollera om Jack kör. - delete - ta bort + Und&o + &Ångra - split - dela + Re&do + &Gör om - glue - lim + undo last change to song + ångra sista ändring i sång - de-clone - häv kloning + redo last undo + gör om sista ångring - save part to disk - + Loop + Loop - wave edit - wave redigering + loop between left mark and right mark + loopa mellan vänster och höger markering - file info - + Punchin + Tryck in - MusE: save part - MusE: spara part + record starts at left mark + inspelning börjar vid vänster markering - Part name: %1 -Files: - + Punchout + Tryck ut - %n part(s) out of %1 could not be pasted. -Likely the selected track is the wrong type. - - + record stops at right mark + inspelning slutar vid höger markering - %n part(s) could not be pasted. -Likely the selected track is the wrong type. - - + Start + Starta - Cannot paste: multiple tracks selected - Kan inte klistra in: flera spår valda + rewind to start position + spola tillbaka till startposition - Cannot paste: no track selected - Kan inte klistra in: inget spår valt + Rewind + Spola tillbaka - Can only paste to midi/drum track - Kan endast klistra in på midi/trummspår + rewind current position + flytta markör bakåt - Can only paste to wave track - Kan endast klistra till wavespår + Forward + Framåt - Can only paste to midi or wave track - + move current position + flytta markör - Cannot paste: wrong data type - Kan inte klistra in: fel datatyp + Stop + Stopp - - - MusEGui::PasteDialog - %n quarter(s) - - + stop sequencer + stoppa sequencer - %1 quarter - for floating-point arguments like 1.5 - + Play + Spela - %1 quarters - for floating-point arguments like 1.5 - + start sequencer play + starta sequenceruppspelning - - - MusEGui::PasteEventsDialog - %n quarter(s) - - + Record + Spela in - %1 quarter - for floating-point arguments like 1.5 - + to record press record and then play + för att spela in, tryck på record och sedan play - %1 quarters - for floating-point arguments like 1.5 - + Panic + Panik - - - MusEGui::PianoRoll - &Edit - &Redigera + send note off to all midi channels + skicka note-off till alla midi kanaler - C&ut - Klipp &ut + &New + &Ny - &Copy - &Kopiera + Create New Song + Ny sång - Copy events in range - + &Open + &Öppna - &Paste - K&listra in + Click this button to open a <em>new song</em>.<br>You can also select the <b>Open command</b> from the File menu. + Klicka här för att öppna en <em>ny sång</em>.<br>Du kan också välja menyvalet <b>Öppna</b> från Arkivmenyn. - Paste (with dialog) - + Open &Recent + &Nyligen öppnade - Delete &Events - + &Save + &Spara - &Select - &Välj + Click this button to save the song you are editing. You will be prompted for a file name. +You can also select the Save command from the File menu. + Klicka här för att spara den sång du håller på att redigera. En förfrågan om filnamn kommer att ställas. +Du kan också välja menyalternativet Spara från Arkivmenyn. - Select &All - Markera &Allt + Save &As + S&para som - &Deselect All - A&vmarkera Allt + Import Midifile + Importera midifil - Invert &Selection - Invertera &Markering + Export Midifile + Exportera midifil - &Inside Loop - &I Loop + Import Part + Importera Part - &Outside Loop - &Utanför Loop + Import Wave File + Importera ljudfil - &Previous Part - + Find unused wave files + Hitta oanvända filer - &Next Part - + &Quit + A&vsluta - Fu&nctions - + Song Info + Synpunkter från sessionen - Quantize - Kvantisera + Transport Panel + Transportpanel - Modify Note Length - + Bigtime Window + Bigtime fönster - Modify Velocity - Modifiera Velocity + Mixer A + Mixer A - Crescendo/Decrescendo - + Mixer B + Mixer B - Transpose - Transponera + Cliplist + Lista över ljudfiler - Erase Events - + Marker View + Markörvy - Move Notes - + Arranger View + Sortera visningar - Set Fixed Length - Sätt fast längd + Fullscreen + Helskärm - Delete Overlaps - + &Plugins + Insticks&program - Legato - + Edit Instrument + Redigera instrument - &Plugins - + Input Plugins + Effekter av Entry - Window &Config - + Transpose + Transponera - &Event Color - + Midi Input Transform + MIDI ingång omvandling - &Blue - + Midi Input Filter + MIDI Filtrering - &Pitch colors - + Midi Remote Control + Midi-fjärrkontroll - &Velocity colors - + Rhythm Generator + Rytm generatorn - Pianoroll tools - + Reset Instr. + Återställ instrumentet. - Step Record - Stegvis inspelning + Init Instr. + Initiera instrumentet. - Midi Input - + Local Off + lokal av - Play Events - Spela Händelser + Bounce to Track + Bounce till Spår - panic - panik + Bounce to File + Bounce till Fil - transport - + Restart Audio + Starta om Audio - ctrl - + Mixer Automation + Mixerautomation - Add Controller View - + Take Snapshot + Ta ett snapshot - - - MusEGui::PluginDialog - MusE: select plugin - MusE: välj plugin + Clear Automation Data + Rensa automationsdata - Lib - + Cascade + Kaskad - Label - Etikett + Tile + Rubricerade - Name - Namn + In rows + I rader - AI - + In columns + I kolumner - AO - + Global Settings + Globala inställningar - CI - + Configure Shortcuts + Konfigurera kortkommandon - CO - + Follow Song + Följ sång - IP - + Don't Follow Song + Följ inte Sång - id - + Follow Page + Följ sida - Maker - Upphovsman + Follow Continuous + Följ kontinuerligt - Copyright - + Metronome + Metronom - Ok - + Midi Sync + Midi synk - Cancel - Avbryt + Midi File Import/Export + importera/Exportera MIDI-fil - Mono and Stereo - + Appearance Settings + Utseendeinställningar - Stereo - + Midi Ports / Soft Synth + Midiportar / Mjukvarusyntar - Mono - + &Manual + - Show All - + &MusE Homepage + M&usEs hemsida - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - Välj vilka typer av plugins som skall vara synliga i listan.<br>Notera att användning av mono plugins på ett stereospår inte är något problem, två instanser kommer<br> att att användas parallellt. Var också medveten om att 'alla' alternativet inkluderar plugins som MusE antagligen inte kan använda. + &Report Bug... + &Rapportera fel... - Search in 'Label' and 'Name': - + &About MusE + &Om MusE - - - MusEGui::PluginGui File Buttons - + Arkivknappar - Load Preset - Öppna Preset + Undo/Redo + Ångra / Gör om - Save Preset - Spara Preset + Transport + Transport - bypass plugin - koppla ur plugin + &File + &Arkiv - MusE: load preset - MusE: öppna preset + &View + &Visa - Error reading preset. Might not be right type for this plugin - + &Midi + - MusE: save preset - MusE: spara preset + &Audio + L&jud - - - MusEGui::ProjectCreateImpl - Select directory - + A&utomation + A&utomatisering - - - MusEGui::RoutePopupMenu - Channel - Kanal + &Windows + &Fönster - Soloing chain - + MusE Se&ttings + MusE &konfiguration - Audio returns - + &Help + &Hjälp - Warning: No input devices! - + Cannot read template + Kan inte läsa mall - Open midi config... - + File open error + Fel vid öppning av fil - <none> - + File read error + Fel vid läsning av fil - Toggle all - + Unknown File Format: %1 + Okänt filformat:%1 - More... - + MusE: Song: %1 + Muse sång:%1 - Audio sends - + MusE: load project + MusE: öppna projekt - Midi port sends - + MusE: load template + MusE: ladda mall - - - MusEGui::ScoreCanvas - Treble - + MusE: Write File failed + MusE: Misslyckades med att skriva fil - Bass - + The current Project contains unsaved data +Save Current Project? + Det nuvarande projektet innehåller osparade ändringar. +Spara nuvarande projekt? - Grand Staff - + S&kip + &Hoppa över - Remove staff - + &Cancel + &Avbryt - Ambiguous part - + MusE: Save As + MusE: Spara Som - There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. - + Nothing to edit + Inget att redigera - No part - + MusE: Bounce to Track + MusE: Bounce till spår - There are no parts you could add the note to. - + No wave tracks found + Det finns inget ljudspår - - - MusEGui::ScoreEdit - Undo/Redo tools - + No audio output tracks found + Inget utgångs-spår - Step recording tools - + Select one audio output track, +and one target wave track + Välj ett utgångs-ljudspår, +och ett mål-ljudspår - Step Record - Stegvis inspelning + Select one target wave track + Välj ett ljudspår mål - panic - panik + Select one target wave track, +and one audio output track + Välj ett mål-ljudspår, +och en ljudutgång - transport - + MusE: Bounce to File + MusE: Bounce till fil - Note settings - + Select one audio output track + Välj ljudutgång - Note length: - + MusE: Bounce + Muse: Bounce - last - + set left/right marker for bounce range + sätt vänster och höger markör till bounce-område - Apply to new notes: - + The current Project contains unsaved data +Load overwrites current Project: +Save Current Project? + Det nuvarande projektet innehåller osparade ändringar +Öppning skriver över nuvarande Projekt +Spara nuvarande Projekt? - Apply to selected notes: - + &Abort + &Avbryt - Velocity: - + MusE: Export Midi + MusE: Exportera Midi - Off-Velocity: - + no help found at: + ingen h jälp hittad vid: - Quantisation settings - + MusE: Open Help + Muse: Arkiv hjälp - Quantisation: - + Unable to launch help + Kan inte öppna hjälp - Pixels per whole: - + For some reason MusE has to launch the default +browser on your machine. + Av någon anledning måste MusE starta +standardwebbläsare på din maskin. - &Edit - &Redigera + MusE: Import Midi + MusE: Importera Midi - C&ut - Klipp &ut + Add midi file to current project? + + Lägg midifil till nuvarande projekt? - &Copy - &Kopiera + &Add to Project + &Lägg till projekt - Copy events in range - + &Replace + &Ersätt - &Paste - K&listra in + reading midifile + + läser midifil - Paste (with dialog) - + +failed: + +misslyckades: - Delete &Events - + Import part is only valid for midi and wave tracks! + Importera parter är bara möjligt med MIDI- eller ljud-spår! - &Select - &Välj + MusE: load part + MusE: ladda part - Select &All - Markera &Allt + No track selected for import + Inget spår valt för import - &Deselect All - A&vmarkera Allt + to import an audio file you have first to selecta wave track + Om du vill importera en ljudfil väljer ljudspår - Invert &Selection - Invertera &Markering + Import Wavefile + Importera ljudfil - &Inside Loop - &I Loop + This wave file has a samplerate of %1, +as opposed to current setting %2. +Do you still want to import it? + Denna fil har en samplingsfrekvens på %1, +Nuvärdet för sessionen är%2. +Vill du importera den ändå? - &Outside Loop - &Utanför Loop + &Yes + &Ja - Fu&nctions - + &No + &Nej - &Quantize - + About &Qt + om &Qt - Change note &length - + Song Position + Sångposition - Change note &velocity - + Tempo + Tempo - Crescendo/Decrescendo - + Signature + Signatur - - Transpose - Transponera + + %n part(s) out of %1 could not be imported. +Likely the selected track is the wrong type. + + %n parter av %1 kunde inte importeras. +Antagligen var det valda spåret av fel typ. + + + + + %n part(s) could not be imported. +Likely the selected track is the wrong type. + + %n parter kunde inte importeras. +Antagligen var det valda spåret av fel typ. + + - Erase Events - + This will clear all automation data on + all audio tracks! +Proceed? + Detta rensar all automationsdata på +alla ljudspår! +Fortsätt? + + + This takes an automation snapshot of + all controllers on all audio tracks, + at the current position. +Proceed? + Detta tar en ögonblicks bild av automationen +för alla kontrollrar på alla ljudspår vid den +nuvarande positionen. +Försätt? + + + MusEGui::NoteInfo - Move Notes - + Note Info + Notinfo - Set Fixed Length - Sätt fast längd + Start + Starta - Delete Overlaps - + Len + Längd - Legato - + Pitch + Tonhöjd - Window &Config - + Velo On + på hastighet - Note head &colors - + Velo Off + maximivarvtal - &Black - + delta/absolute mode + delta/absolut-läge + + + MusEGui::PartCanvas - &Velocity - + Cannot copy/move/clone to different Track-Type + Kan inte kopiera/flytta/klona till annan Spårtyp - &Part - + C&ut + Klipp &ut - Set up &preamble - + &Copy + &Kopiera - Display &key signature - + s&elect + &Välj - Display &time signature - + clones + kloner - Set Score &name - + rename + byt namn - Enter the new score title - + color + färg - Error - + delete + ta bort - Changing score title failed: -the selected title is not unique - + split + dela - - - MusEGui::ScrollScale - next page - nästa sida + glue + lim - previous page - förra sidan + de-clone + häv kloning - current page number - nuvarande sidnummer + save part to disk + Spara part till disk - - - MusEGui::ShortcutCaptureDialog - Ok - + wave edit + wave redigering - Cancel - Avbryt + file info + Filinformation - Shortcut conflicts with %1 - + MusE: save part + MusE: spara part - Undefined - Odefinierad + Part name: %1 +Files: + Part-namn: %1 +Filer: - - - MusEGui::SigScale - signature scale - signaturskala + Cannot paste: multiple tracks selected + Kan inte klistra in: flera spår valda - - - MusEGui::Strip - Remove track? - + Cannot paste: no track selected + Kan inte klistra in: inget spår valt - - - MusEGui::TList - <none> - + Can only paste to midi/drum track + Kan endast klistra in på midi/trummspår - visible - + Can only paste to wave track + Kan endast klistra till wavespår - no clef - + Can only paste to midi or wave track + Du kan bara bädda MIDI eller ljud spår - Treble - + Cannot paste: wrong data type + Kan inte klistra in: fel datatyp - Bass - + super glue (merge selection) + superlim (sammanfoga val) + + + %n part(s) out of %1 could not be pasted. +Likely the selected track is the wrong type. + + %n parter av %1 kunde inte klistras in. +Antagligen var det valda spåret av fel typ. + + + + + %n part(s) could not be pasted. +Likely the selected track is the wrong type. + + %n parter kunde inte klistras in. +Antagligen var det valda spåret av fel typ. + + - Grand - + Remove selected + Ta bort valt + + + MusEGui::PasteDialog - MusE: bad trackname - MusE: dåligt spårnamn + %1 quarter + for floating-point arguments like 1.5 + %1 kvartar - please choose a unique track name - vänligen välj ett unikt spårnamn + %1 quarters + for floating-point arguments like 1.5 + %1 kvartar + + %n quarter(s) + + %1 kvartar + + + + + + MusEGui::PasteEventsDialog - Unused Devices - + %1 quarter + for floating-point arguments like 1.5 + %1 kvartar - Update drummap? - Updatera trum-map? + %1 quarters + for floating-point arguments like 1.5 + %1 kvartar + + %n quarter(s) + + %1 kvartar + + + + + + MusEGui::PianoRoll - Do you want to use same port for all instruments in the drummap? - Vill du använda samma port för alla instrument i trum-map:en? + &Edit + &Redigera - &Yes - &Ja + C&ut + Klipp &ut - &No - &Nej + &Copy + &Kopiera - show gui - visa gui + Copy events in range + Kopiera händelser i intervall - show native gui - + &Paste + K&listra in - Treble clef - + Paste (with dialog) + Klistra in (med dialog) - Bass clef - + Delete &Events + Ta bort &händelser - Grand Staff - + &Select + &Välj - Viewable automation - + Select &All + Välj &allt - Delete Track - Ta bort spår + &Deselect All + A&vmarkera allt - Track Comment - + Invert &Selection + Invertera &markering - Insert Track - + &Inside Loop + &I loop - Midi - Midi + &Outside Loop + &Utanför loop - Drum - Trumma + &Previous Part + &Föregående part - Do you want to use same port and channel for all instruments in the drummap? - Vill du använda samma port och kanal för alla instrument i trummap:en? + &Next Part + &Nästa part - - - MusEGui::TempoSig - Tempo/Sig - + Fu&nctions + F&unktioner - - - MusEGui::Toolbar1 - Off - Av + Quantize + Kvantisera - Solo - + Modify Note Length + Modifiera notlängd - Cursor - Markör + Modify Velocity + Modifiera anslag - Snap - Fäst vid + Crescendo/Decrescendo + Crescendo/Decrescendo - - - MusEGui::TopWin - As subwindow - + Transpose + Transponera - Shares tools and menu - + Erase Events + Ta bort händelse - Fullscreen - + Move Notes + Flytta noter - Piano roll - + Set Fixed Length + Sätt fast längd - List editor - + Delete Overlaps + Ta bort överlappande - Drum editor - + Legato + - Master track editor - + &Plugins + &Instickseffekter - Master track list editor - + Window &Config + Fönster &konfiguration - Wave editor - + &Event Color + &Händelsefärg - Clip list - + &Blue + &Blå - Marker view - + &Pitch colors + &Tonhöjdsfärg - Score editor - + &Velocity colors + &Anslagsfärg - Arranger - Arrangerare + Pianoroll tools + Pianorulleverktyg - <unknown toplevel type> - + Step Record + Stegvis inspelning - - - MusEGui::TrackComment - MusE: Track Comment - MusE: Spårkommentar + Midi Input + Midi-inmatning - Track Comment: - Spårkommentar: + Play Events + Spela händelser - - - MusEGui::Transport - Overdub - + panic + panik - Replace - Ersätt + transport + transport - Rec Mode - Recläge + ctrl + ctrl - Normal - + Add Controller View + Lägg till kontrollvy + + + MusEGui::PluginDialog - Mix - + MusE: select plugin + MusE: välj instickseffekt - Cycle Rec - + Lib + - punchin - + Label + Etikett - loop - + Name + Namn - punchout - + AI + - Punch In - + AO + - Loop - + CI + - Punch Out - + CO + - Left Mark - Vänster Markering + IP + - Right Mark - Höger Markering + id + - rewind to start - flytta tillbaka till början + Maker + Upphovsman - Click this button to rewind to start position - Klicka här för att spola tillbaks till början + Copyright + - rewind - flytta tillbaka + Ok + Ok - Click this button to rewind - Klicka här för att flytta markören bakåt + Cancel + Avbryt - forward - frammåt + Mono and Stereo + Mono och stereo - Click this button to forward current play position - Klicka här för att flytta markören framåt + Stereo + - stop - stopp + Mono + - Click this button to stop playback - Klicka här för att stoppa uppspelning + Show All + Visa alla - play - spela + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. + Välj vilka typer av instickseffekter som skall vara synliga i listan.<br>Notera att användning av mono effekter på ett stereospår inte är något problem, två instanser kommer<br> att att användas parallellt. Var också medveten om att 'alla' alternativet inkluderar instickseffekter som MusE antagligen inte kan använda. - Click this button to start playback - Klicka här för att starta uppspelning + Search in 'Label' and 'Name': + Sök i 'Etikett' och 'Namn': - record - + Type + Typ - Click this button to enable recording - Klicka här för att spela in + Audio inputs + Ljudingång - AC - + Audio outputs + Ljudutgång - quantize during record - kvantisera under inspelning + Control inputs + Kontrollingångar - Click - + Control outputs + Kontrollutgångar - metronom click on/off - metronomklick av/på + In-place capable + Påplats-kapabel - Sync - Synk + ID number + ID-nummer - external sync on/off - externsynk. av/på + Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallel.<br>Also beware that the 'all' alternative includes plugins that may not be useful in an effect rack. + Välj vilka typer av instickseffekter som skall vara synliga i listan.<br>Notera att användning av mono effekter på ett stereospår inte är något problem, två instanser kommer<br> att att användas parallellt. Var också medveten om att 'alla' alternativet inkluderar instickseffekter kanske inte går använda i ett effektrack. - Jack - + dssi synth + - Jack transport sync on/off - + dssi effect + dssi-effekt - Master - Master + ladspa + - use master track - + Show plugs: + Visa instickseffekter: - MusEGui::VisibleTracks + MusEGui::PluginGui - Show wave tracks - + File Buttons + Arkivknappar - Show group tracks - + Load Preset + Öppna preset - Show aux tracks - + Save Preset + Spara preset - Show input tracks - + bypass plugin + koppla ur instickseffekt - Show output tracks - + MusE: load preset + MusE: öppna preset - Show midi tracks - + Error reading preset. Might not be right type for this plugin + Fel vid preset inläsning. Kanske inte rätt instickseffekt - Show synth tracks - + MusE: save preset + MusE: spara preset + + + MusEGui::ProjectCreateImpl - Visible track types - + Select directory + Välj katalog - MusEGui::WaveEdit + MusEGui::RhythmGenerator - &Edit - &Redigera + Instrument Settings: + Instrumentinställningar: - Func&tions - Funk&tioner + Instrument + Instrument - &Gain - + + - Other - Andra + add + lägg till - &Copy - &Kopiera + delete + ta bort - C&ut - Klipp &ut + steps/count + steg/räknare - &Paste - K&listra in + count/bar + slag/takt - Edit in E&xternal Editor - Editera i e&xtern redigerare + # bars + # takt - Mute Selection - Tysta markering + Group Settings: + Gruppinställningar: - Normalize Selection - Normalisera markering + Group + Grupp - Fade In Selection - Tona in markering + Group 1 + Grupp 1 - Fade Out Selection - Tona ut Markering + Group 2 + Grupp 2 - Reverse Selection - Reversera markering + Group 3 + Grupp 3 - Select - Välj + Group 4 + Grupp 4 - Select &All - Markera &Allt + Group 5 + Grupp 5 - &Deselect All - A&vmarkera Allt + listen + lyssna - Window &Config - + Randomize + Slumpa - Wave edit tools - + Rhythm Style: + Rytmstil: - transport - + Clear + Rensa - WaveEdit tools - + Open... + Öppna... - Solo - + Save + Spara - Cursor - Markör + Save as... + Spara som... + + + Generate + Generera + + + Close + Stäng - MusEGui::WaveView + MusEGui::RoutePopupMenu + + Channel + Kanal + + + Soloing chain + Solokedja + + + Audio returns + Ljudreturer + - MusE - external editor failed - MusE - fel med extern redigerare + Warning: No input devices! + Varning: Inga inmatningsenheter! - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. - MusE kunde inte starta extern redigerare -kontrollera om inställningarna i: -Globala inställningar->Ljud:Extern ljudredigerare -är satt till en giltig redigerarbinär + Open midi config... + Öppna midikonfiguration... - MusE - file size changed - MusE - filstorleken har förändrats + <none> + - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted - Vid editering i extern editor - bör du inte ändra filstorleken -eftersom den måste passa i regionen. - -Saknat data tystas + Toggle all + Ändra alla - - - MusEMixer::AudioMixerApp - &Create - &Skapa + More... + Mer... - - - MusEMixer::AudioStrip - aux send level - aux send nivå + Audio sends + Ljud-sänd - 1/2 channel - 1/2 kanal + Midi port sends + Midiport-sänd + + + MusEGui::ScoreCanvas - mute - tysta + Treble + Diskant - record downmix - spela in nermixning + Bass + Bas - off - av + Grand Staff + Notrad - output routing - utgångsrouting + Remove staff + Ta bort rad - Off - Av + Ambiguous part + Tvetydig del - Read - Läs + There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. + Det finns två eller fler möjliga parter du kan lägga noten till men ingen matchar den valda parten. Välj mål genom att klicka på någon not tillhörande rätt part och försök igen, eller lägg till en ny notrad som bara innehåller den nya parten. - Write - Skriv + No part + Ingen part - automation type - automationstyp + There are no parts you could add the note to. + Det finns ingen part att lägga noten till. - MusEMixer::EffectRack + MusEGui::ScoreEdit - effect rack - effektrack + Undo/Redo tools + Ångra/gör om-verktyg - new - ny + Step recording tools + Stegvisinspelningsverktyg - change - ändra + Step Record + Stegvisinspelning - move up - flytta upp + panic + panik - move down - flytta ner + transport + transport - remove - ta bort + Note settings + Notinställningar - show gui - visa gui + Note length: + Notlängd: - Replace effect - Byt effekt + last + sist - Do you really want to replace the effect %1? - Vill du verkligen ersätta effekten %1? + Apply to new notes: + Använd på nya noter: - - - MusEMixer::MidiStrip - off - av + Apply to selected notes: + Använd på valda noter: - Pan/Balance - Pan/Balans + Velocity: + Anslag: - mute - tysta + Off-Velocity: + Av-anslag: - output routing - utgångsrouting + Quantisation settings + Kvantiseringsinställningar - - - MusEWidget::BigTime - minute - minut + Quantisation: + Kvantisering: - second - sekund + Pixels per whole: + Pixels per hel: - - - MusEWidget::EditToolBar - Edit Tools - Redigeringsverktyg + &Edit + &Redigera - - - MusEWidget::MidiSyncConfig - Port Number - Portnummer + C&ut + Klipp &ut - Name of the midi device associated with this port number - Namn på midienhet associerad med detta portnummer + &Copy + &Kopiera - Device Name - Enhetsnamn + Copy events in range + Kopiera händelser i intervall - &No - &Nej + &Paste + K&listra in - &Abort - &Avbryt + Paste (with dialog) + Klistra in (med dialog) - - - MusEWidget::MixdownFileDialog - Wave Files (*.wav);;All Files (*) - Ljudfiler (*.wav);;Alla filer (*) + Delete &Events + Ta bort &händelser - - - MusEWidget::NoteInfo - Note Info - Notinfo + &Select + &Välj - Len - Längd + Select &All + Markera &allt - Pitch - Tonhöjd + &Deselect All + A&vmarkera allt - - - MusEWidget::RoutePopupMenu - Channel - Kanal + Invert &Selection + Invertera &markering - - - MusEWidget::ScrollScale - next page - nästa sida + &Inside Loop + &I loop - previous page - förra sidan + &Outside Loop + &Utanför loop - current page number - nuvarande sidnummer + Fu&nctions + Fu&nktioner - - - MusEWidget::ShortcutCaptureDialog - Cancel - Avbryt + &Quantize + &Kvantisera - Shortcut conflicts with - Kortkommando konfliktar med + Change note &length + Ändra notl&ängd - Undefined - Odefinierad + Change note &velocity + Ändra not&anslag - - - MusEWidget::SigScale - signature scale - signaturskala + Crescendo/Decrescendo + Crescendo/Decrescendo - - - MusEWidget::Toolbar1 - Cursor - Markör + Transpose + Transponera - Snap - Fäst vid + Erase Events + Ta bort händelser - - - MusEWidget::TrackComment - MusE: Track Comment - MusE: Spårkommentar + Move Notes + Flytta noter - Track Comment: - Spårkommentar: + Set Fixed Length + Sätt fast längd - - - NewPreset - New preset - Ny preset + Delete Overlaps + Ta bort överlappande - Preset Name - Presetnamn + Legato + - Subcategory - Underkategori + Window &Config + Fönster &konfiguration - Category - Kategori + Note head &colors + Nothuvud&färger - &Cancel - &Avbryt + &Black + &Svart - - - NoteInfo - Note Info - Notinfo + &Velocity + &Anslag - Len - Längd + &Part + - Pitch - Tonhöjd + Set up &preamble + Konfigurera &upptakt - - - OrganGuiBase - Presets - Preset + Display &key signature + Visa &tonart - load preset list - öppna presetlista + Display &time signature + Visa &taktart - save preset list - spara presetlista + Set Score &name + Ange noternas &namn - Velocity - Hastighet + Enter the new score title + Mata in det nya namnet på noterna - MusE: Organ - + Error + Fel - Drawbars - + Changing score title failed: +the selected title is not unique + Byte av not-titel misslyckades: +Den valda titeln är inte unik + + + MusEGui::ScrollScale - 16' - + next page + nästa sida - 4' - + previous page + förra sidan - 2 2/3' - + current page number + nuvarande sidnummer + + + MusEGui::ShortcutCaptureDialog - 2' - + Ok + Ok - 5 1/3' - + Cancel + Avbryt - 8' - + Shortcut conflicts with %1 + Kortkommando krockar med %1 - Envelope Hi - + Undefined + Odefinierad + + + MusEGui::SigScale - Release - + signature scale + signaturskala + + + + MusEGui::SigToolbarWidget + + time signature at current position + tid-signatur vid nuvarande position - Sustain - + Signature: + Signatur + + + MusEGui::Strip - Decay - + Remove track? + Ta bort spår? + + + MusEGui::TList - Attack - + <none> + - ms - + visible + synlig - cB - + no clef + ingen klav - Envelope Lo - + Treble + Diskant - O-1 - + Bass + Bas - Oscillator - + Grand + Noter - Brass - + MusE: bad trackname + MusE: dåligt spårnamn - Reed - + please choose a unique track name + vänligen välj ett unikt spårnamn - Flute - + Unused Devices + Oanvända enheter - - - PageSettings - Paper Size - Pappersstorlek + Update drummap? + Updatera trum-map? - user - användare + Do you want to use same port for all instruments in the drummap? + Vill du använda samma port för alla instrument i trum-map:en? - Margins - Marginal + &Yes + &Ja - left Margin - vänster Marginal + &No + &Nej - top Margin - övre Marginal + show gui + visa gui - right Margin - höger Marginal + show native gui + Visa eget gränssnitt - bottom Margin - undre Marginal + Treble clef + Diskantklav - Header - Överskrift + Bass clef + Basklav - Title - Titel + Grand Staff + Noter - Author - Författare + Viewable automation + Synlig automation - Fonts - Typsnitt + Delete Track + Ta bort spår - Page No. - Sidnummer. + Track Comment + Spårkommentar - Measure No - Taktnummer + Insert Track + Lägg in spår - Track Name - Spårnamn + Midi + Midi - Lyrics - Text + Drum + Trumma - Layout - Utseende + Do you want to use same port and channel for all instruments in the drummap? + Vill du använda samma port och kanal för alla instrument i trummap:en? - Bars across the Page - Takter över sidan + off + av - Scale - Skala + <unknown> + <okänd> - Flags - Flaggor + Midi control + Midikontroll - show page no. - visa sida nr. + Assign + Tilldela - show measure no. - visa takt nr. + Clear + Rensa - show track name - visa spårnamn + Internal + Intern - Apply - Verkställ + Synth + Synt + + + MusEGui::TempoSig - Cancel - Avbryt + Tempo/Sig + - PartCanvas + MusEGui::TempoToolbarWidget - Cannot copy/move/clone to different Track-Type - Kan inte kopiera/flytta/klona till annan Spårtyp + tempo at current position + tempo vid nuvarande position - C&ut - Klipp &ut + Tempo: + + + + MusEGui::Toolbar1 - &Copy - &Kopiera + Off + Av - rename - byt namn + Solo + - color - färg + Cursor + Markör - delete - ta bort + Snap + Fäst vid + + + MusEGui::TopWin - split - dela + As subwindow + Som underfönster - glue - lim + Shares tools and menu + Delar verktyg och meny - de-clone - häv kloning + Fullscreen + Helskärm - pianoroll - pianorulle + Piano roll + Pianorulle - score - partitur + List editor + Listredigerare - list - lista + Drum editor + Trumeditor - drums - trummor + Master track editor + Master spår redigerare - wave edit - wave redigering + Master track list editor + Master spår list redigerare - Cannot paste: multiple tracks selected - Kan inte klistra in: flera spår valda + Wave editor + Ljud-redigerare - Cannot paste: no track selected - Kan inte klistra in: inget spår valt + Clip list + Klipp-lista - Cannot paste midi parts to wave track - Kan inte klistra in midipart till wavespår + Marker view + Markörvy - Cannot paste wave parts to midi track - Kan inte klistra in wavepart på midispår + Score editor + Notredigerare - Cannot paste: wrong data type - Kan inte klistra in: fel datatyp + Arranger + Arrangerare - Can only paste to midi/drum track - Kan endast klistra in på midi/trummspår + <unknown toplevel type> + - Can only paste to wave track - Kan endast klistra till wavespår + Undo/Redo tools + Ångra/Gör om verktyg - export - exportera + Panic + Panik - MusE: save part - MusE: spara part + Transport + Transport - - - PasteDialogBase - MusE: Paste Parts - + Song Position + Sångposition - Number and raster - + Tempo + Tempo - insert - + Signature + Signatur + + + MusEGui::TrackComment - times - + MusE: Track Comment + MusE: Spårkommentar - raster - + Track Comment: + Spårkommentar: + + + MusEGui::Transport - ticks - + Overdub + Överspelning - Move, Merge, Clone - + Replace + Ersätt - Move everything to the right - + Rec Mode + Inspelningsläge - Move only affected parts to the right - + Normal + - Put everything into a single track - + Mix + - Merge with existing parts - + Cycle Rec + Cirkulärinspelning - Insert as clones (where possible) - + punchin + Tryck på - OK - + loop + upprepning - Cancel - Avbryt + punchout + tryck av - - - PasteEventsDialogBase - MusE: Paste Events - + Punch In + Tryck in - Number and raster - + Loop + Upprepning - insert - + Punch Out + Tryck av - times - + Left Mark + Vänster markering - raster - + Right Mark + Höger markering - ticks - + rewind to start + spola tillbaka till början - Paste options - + Click this button to rewind to start position + Klicka här för att spola tillbaks till början - Always into existing parts - + rewind + spola tillbaka - Never into existing parts - + Click this button to rewind + Klicka här för att spola tillbaka - Into existing parts if part has not -to be expanded by more than - + forward + framåt - Put everything into the (selected) part - + Click this button to forward current play position + Klicka här för att flytta markören framåt - OK - + stop + stopp - Cancel - Avbryt + Click this button to stop playback + Klicka här för att stoppa uppspelning - - - PianoRoll - &Edit - &Redigera + play + spela - Cut - Klipp ut + Click this button to start playback + Klicka här för att starta uppspelning - Copy - Kopiera + record + inspelning - Paste - Klistra in + Click this button to enable recording + Klicka här för att spela in - Delete Events - Ta bort Händelser + AC + - Select All - Välj Allt + quantize during record + kvantisera under inspelning - Select None - Välj Ingen + Click + Klick - Invert - Invertera + metronom click on/off + metronomklick av/på - Inside Loop - I loop + Sync + Synk - Outside Loop - Utanför loop + external sync on/off + externsynk. av/på - &Select - &Välj + Jack + - blue - blå + Jack transport sync on/off + Jack transport synk av/på - pitch colors - pitchfärger + Master + Master - velocity colors - velocityfärger + use master track + använd master-spår + + + MusEGui::VisibleTracks - &Config - &Inställningar + Show wave tracks + Visa ljudspår - event color - händelsefärg + Show group tracks + Visa gruppspår + + + Show aux tracks + Visa aux-spår - &Functions - &Funktioner + Show input tracks + Visa ingångs-spår - Over Quantize - Över Kvantisera + Show output tracks + Visa utgångs-spår - Note On Quantize - Note On-kvantisera + Show midi tracks + Visa midi-spår - Note On/Off Quantize - Note On/Off Kvantisera + Show synth tracks + Visa synth-spår - Iterative Quantize - Iterativ kvantisering + Visible track types + Synliga spårtyper + + + MusEGui::WTScale - Config Quant... - Konfigurera Kvant... + bar scale + taktskala + + + MusEGui::WaveEdit - Modify Gate Time - Modifiera Gate Time + &Edit + &Redigera - Modify Velocity - Modifiera Velocity + Func&tions + Funk&tioner - Transpose - Transponera + &Gain + &Förstärkning - Thin Out - Tunna ut + Other + Andra - Erase Event - Ta bort Händelse + &Copy + &Kopiera - Note Shift - Shifta Not + C&ut + Klipp &ut - Move Clock - Flytta Klocka + &Paste + K&listra in - Copy Measure - Kopiera Takt + Edit in E&xternal Editor + Editera i e&xtern redigerare - Erase Measure - Radera Takt + Mute Selection + Tysta markering - Delete Measure - Ta bort Takt + Normalize Selection + Normalisera markering - Create Measure - Skapa Takt + Fade In Selection + Tona in markering - Pianoroll Tools - Verktyg Pianorulle + Fade Out Selection + Tona ut Markering - Step Record - Stegvis inspelning + Reverse Selection + Reversera markering - Play Events - Spela Händelser + Select + Välj - Add Controller View - Lägg till Controller Vy + Select &All + Markera &allt - Set Fixed Length - Sätt fast längd + &Deselect All + A&vmarkera allt - C&ut - Klipp &ut + Window &Config + Fönster &konfigurering - &Copy - &Kopiera + Wave edit tools + Ljudredigeringsverktyg - &Paste - K&listra in + transport + transport - Select &All - Markera &Allt + WaveEdit tools + Ljudredigeringsverktyg - &Deselect All - A&vmarkera Allt + Solo + - Invert &Selection - Invertera &Markering + Cursor + Markör + + + MusEGui::WaveView - &Inside Loop - &I Loop + MusE - external editor failed + MusE - fel med extern redigerare - &Outside Loop - &Utanför Loop + MusE was unable to launch the external editor +check if the editor setting in: +Global Settings->Audio:External Waveditor +is set to a valid editor. + MusE kunde inte starta extern redigerare +kontrollera om inställningarna i: +Globala inställningar->Ljud:Extern ljudredigerare +är satt till en giltig redigerarbinär. - Quantize - Kvantisera + MusE - file size changed + MusE - filstorleken har förändrats - panic - panik + When editing in external editor - you should not change the filesize +since it must fit the selected region. + +Missing data is muted + Vid editering i extern editor - bör du inte ändra filstorleken +eftersom den måste passa i regionen. + +Saknat data tystas - PluginDialog + OrganGuiBase - MusE: select plugin - MusE: välj plugin + Velocity + Anslag - Label - Etikett + MusE: Organ + - Name - Namn + Drawbars + Koppel - Maker - Upphovsman + 16' + - Cancel - Avbryt + 4' + - Stereo and Mono - Stereo och mono + 2 2/3' + - All - Alla + 2' + - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. - Välj vilka typer av plugins som skall vara synliga i listan.<br>Notera att användning av mono plugins på ett stereospår inte är något problem, två instanser kommer<br> att att användas parallellt. Var också medveten om att 'alla' alternativet inkluderar plugins som MusE antagligen inte kan använda. + 5 1/3' + - - - PluginGui - File Buttons - Arkiv Knappar + 8' + - Load Preset - Öppna Preset + Envelope Hi + Envelop Hög - Save Preset - Spara Preset + Release + Avslut - bypass plugin - koppla ur plugin + Sustain + - MusE: load preset - MusE: öppna preset + Decay + - MusE: save preset - MusE: spara preset + Attack + - - - PrinterConfig - MusE: Config Printer - MusE: Konfigurera Skrivare + ms + - Print to file - Skriv till fil + cB + - Print Command - Utskriftskommando + Envelope Lo + Envelop Hög - Preview Command - Förhandsgranskningskommando + O-1 + - Cancel - Avbryt + Oscillator + - - - ProjectCreate - Create Project - + Brass + - Projects folder: - + Reed + - ... - + Flute + + + + PasteDialogBase - Project Name: - + MusE: Paste Parts + MusE: Klistra in parter - Project is a Template - + Number and raster + Nummer och rutnät - Project song file type: - + insert + lägg in - Project Path to song file: - + times + antal gånger - Create project folder (recommended for audio projects) - + raster + rutnät - Song information: - + ticks + tick - - - QHeader - Port Number - Portnummer + Move, Merge, Clone + Flytta, Sammanfoga, Klona - enable gui for device - visa gui för enhet + Move everything to the right + Flytta allt till höger - enables recording from the device - slå på inspelning från enhet + Move only affected parts to the right + Flytta endast påverkade parter till höger - Name of the midi device associated with this port number - Namn på midienhet associerad med detta portnummer + Put everything into a single track + Stoppa allt i ett enda spår - Instrument connected to port - Instrument kopplat till denna port + Merge with existing parts + Sammanfoga med existerande parter - State: result of opening the device - Status: resultat av öppning av enhet + Insert as clones (where possible) + Infoga som klon (när möjligt) - mute instrument - tysta instrument + OK + - sound name - ljudnamn + Cancel + Avbryt + + + 1 quarter + 1 kvart + + + PasteEventsDialogBase - quantisation -currently not used - kvantisering -används inte för tillfället + MusE: Paste Events + MusE: Klistra in händelser - this input note triggers the sound - denna in-not triggar ljudet + Number and raster + Nummer och rutnät - note length - notlängd + insert + infoga - this note is send for the sound - denna not skickas för ljudet + times + gånger - output channel -currently not used - utgångskanal -används inte för tillfället + raster + rutnät - output port -currently not used - utgångsport -används inte för tillfället + ticks + tick - velocity level 1 - velocity nivå 1 + Paste options + Inklistringsinställningar - velocity level 2 - velocity nivå 2 + Always into existing parts + Alltid i existerande parter - velocity level 3 - velocity nivå 3 + Never into existing parts + Aldrig i existerande parter - velocity level 4 - velocity nivå 4 + Into existing parts if part has not +to be expanded by more than + I existerande parter om part inte +behöver expandera mer än - quantisation - kvantisering + Put everything into the (selected) part + Info allt i den valda parten - output channel - utgångskanal + OK + - output port - utgångsport + Cancel + Avbryt - Enable Recording - Slå på Inspelning + 1 quarter + 1 kvart - Track Activity - Spåraktivitet + 1 quarter + 1 kvart + + + ProjectCreate - Mute Indicator - Tyst-Indikator + Create Project + Skapa projekt - Solo Indicator - Solo-Indikator + Projects folder: + Projektkatalog: - Track Type - Spårtyp + ... + ... - Track Name - Spårnamn + Project Name: + Projektnamn: - Output Channel Number - Kanalnummer för utgång + Project is a Template + Projekt är en mall - Output Port - Utgångsport + Project song file type: + Sång-filtyp för projekt: - Time Lock - Tidlås + Project Path to song file: + Projektsökväg till sångfil: - Solo/Pre Fader Listening - Solo/För-reglage lyssning + Create project folder (recommended for audio projects) + Skapa projektkatalog (rekommenderat för ljudprojekt) - enables reading from device - slår på läsning från device + Song information: + Sånginformation: - enables writing to device - slår på skrivning till device + Write window state + Skriv fönsterinställningar QObject - Other - Andra - - Error - + Fel Please first select the range for crescendo with the loop markers. - + Välj område för crescendo med loopmarkörerna. QWidget - Velocity - Hastighet - - Cannot convert sysex string Kan inte konvertera sysex-sträng @@ -13247,7 +9838,7 @@ generic midi - generell midi + generell midi new @@ -13258,40 +9849,18 @@ skapa "peak"-fil - Cannot transform non empty track - Kan inte transformera ej tomt spår - - MusE: get file name MusE: hämta filnamn - the directory - - katalogen - - - -does not exist -create? - -finns inte -skapa? - - - &Create - &Skapa - - - Cancel - Avbryt - - The directory %1 does not exist. Create it? - + Katalogen +%1 +existerar inte. +Skapa den? MusE: create directory @@ -13305,270 +9874,190 @@ File %1 exists. Overwrite? - + Filen +%1 +existerar. Skrivöver? Open File %1 failed: %2 - - - - File - - Arkiv - - - -exists - existerar + Öppning av fil +%1 +misslyckades: %2 MusE: write MusE: skriv - Overwrite - Spara inte - - - Quit - Avsluta - - - Open File - - Öppna fil - - - -failed: - -misslyckades: - - MusE: Open File MusE: Öppna fil None - Ingen - - - Master - Master - - - Group %c - Grupp %c - - - Unknown - Okänd - - - Group - Grupp + Ingen No selection. Ignoring - + Inget valt, ignorerar QuantBase MusE: Quantize - + MusE: kvantisering Range - Område + Område All Events - Alla Händelser + Alla händelser Selected Events - Valda Händelser + Valda händelser Looped Events - Loopade Händelser + Loopade händelser Selected Looped - + Valda loopade Values - Värden + Värden Strength: - + Styrka: % - + Threshold (ticks): - + Tröskelvärde (tick): Quantize Len - + Kvantiseringslängd Raster - Rutnät + Rutnät Whole - + Hel Half - + Halv 4th - + Fjärdedel 4th Triplet - + Fjärdedel triol 8th - + Åttondel 8th Triplet - + Åttondel triol 16th - + Sextondel 16th Triplet - + Sextondel triol 32th - + 32:del 32th Triplet - - - - Swing: - - - - If the proposed change in tick or length is smaller than threshold, nothing is done. -If swing=0, this is normal -If swing is 33, you get a 2:1-rhythm. -If swing is -33, you get a 1:2-rhythm. - - - - - OK - - - - Cancel - Avbryt - - - - QuantConfig - - MusE: Config Quantize - MusE: Konfigurera Kvantisering - - - Config Quantize - Konfigurera Kvantisering - - - Strength - Styrka - - - Don´t Quantize - Kvantisera Inte - - - Quant Len - Kvant Längd + 32:del triol - - - QuantDialog - Display Quantize - Visa Kvantisering + Swing: + - Note Quantize - Not Kvantisering + If the proposed change in tick or length is smaller than threshold, nothing is done. +If swing=0, this is normal +If swing is 33, you get a 2:1-rhythm. +If swing is -33, you get a 1:2-rhythm. + + Om den föreslagna ändringen i tick eller längd är mindre än tröskelvärdet händer inget. +Om swing=0 är detta normalt +Om swing är 33 blir rytmen 2:1 +Om swing är -33 blir 1:2. - Rest Quantize - Rest Kvantisering + OK + Ok Cancel - Avbryt + Avbryt RemoveBase MusE: Erase Notes - + MusE: Ta bort noter Range - Område + Område All Events - Alla Händelser + Alla händelser Selected Events - Valda Händelser + Valda händelser Looped Events - Loopade Händelser + Loopade händelser Selected Looped - + Valda loopade Thresholds - + Tröskelvärden ticks - + tick Velocity - Hastighet + Anslag Length - Längd + Längd <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> @@ -13578,15 +10067,21 @@ <p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If nothing is checked, everything is removed.</p> <p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If velocity is checked, only notes with velo &lt; threshold are removed.</p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">If both are checked, notes with velo &lt; threshold OR with length &lt; threshold are removed.</p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Om inget är valt, allt blir borttaget.</p> +<p style=" margin-top:0px; margin-bottom:7px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Om anslag är valt, bara noter med anslag &lt; tröskelvärdet tas bort.</p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Om båda är valda, noter med anslag &lt; tröskelvärde ELLER med längd &lt; tröskelvärdet tas bort.</p></body></html> OK - + Ok Cancel - Avbryt + Avbryt @@ -13809,97 +10304,27 @@ &About... &Om... - - - RhythmGenerator - - Instrument Settings: - Instrumentinställningar: - - - Instrument - Instrument - - - add - lägg till - - - delete - ta bort - - - count/bar - slag/takt - - - # bars - # takt - - - Group Settings: - Gruppinställningar: - - - Group - Grupp - - - Group 1 - Grupp 1 - - - Group 2 - Grupp 2 - - Group 3 - Grupp 3 - - - Group 4 - Grupp 4 - - - Group 5 - Grupp 5 - - - listen - lyssna - - - Randomize - Slumpa - - - Rhythm Style: - Rytmstil: - - - Clear - Rensa - - - Open... - Öppna... - - - Save - Spara + steps/count + steg/inräkning - Save as... - Spara som... + test + test - Generate - Generera + steps/count + steg/inräkning - Close - Stäng + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + <b>Notera!</b><br> +Slumprytmgenerator är inte tillgänglig än! + + + RhythmGenerator @@ -13909,555 +10334,284 @@ RouteDialogBase MusE: Routing - + MusE: Kopplingar Add Route - Lägg till rutt + Lägg till rutt Source: - Källa: + Källa: Destination: - + Connect - Koppla + Koppla connect source to destination - koppla källa till destination - - - Current Routes - Nuvarande rutter - - - Source - Källa - - - Destination - - - - Remove - Ta bort - - - remove selected route - Ta bort vald rutt - - - - RoutePopupMenu - - Channel - Kanal - - - - SS_PluginChooserBase - - SimpleDrums - Ladspa Plugin Chooser - SimpleDrums - Ladspa pluginväljare - - - Name - Namn - - - Label - Etikett - - - Inports - Inporta - - - Outports - Utportar - - - Creator - Upphovsman - - - &Cancel - &Avbryt - - - Alt+C - Alt+A - - - &OK - &Ok - - - Alt+O - - - - - SS_PluginFront - - Clear and unload effect - - - - Load effect - - - - Toggle display of effect parameters - - - - Turn effect on/off - - - - - Score - - Dynamics - Dynamik - - - &Config - &Inställningar - - - Page Settings - Sidinställningar - - - Staff Settings - Notsystem inställningar - - - Background Pixmap - Bakgrundsbild - - - Palettes - Palett - - - Print - Skriv ut - - - Preview Print - Förhandsgranska utskrift - - - Lyrics - Text - - - enter lyrics - skriv in text - - - Text - Text - - - enter text - skriv in Text - - - enter chord symbol - skriv in ackordsymbol - - - Score - Partitur - - - to previous voice - till föregående röst - - - to next voice - till nästa röst - - - flip stem direction - ändra stämriktning - - - move marked notes to previous voice or to upper stave in a split system - flytta de markerade noterna till föregående röst eller till övre notsystem i ett delat notssystem - - - move marked notes to next voice or to lower stave in a split system - flytta de markerade noterna till nästa röst eller undre notsystem i ett delat notsystem - - - flip stem direction of selected notes - byt stämriktning för valda noter - - - StaffSettings - Notsysteminställningar - - - MusE: config wallpaper - MusE: konfigurera bakgrundsbild - - - - ScoreConfig - - Staff Settings: - Partiturinställningar: - - - Track List - Spårlista - - - Key/Clef - Stämma/Klav - - - Upper Staff - Övre notplan - - - Lower Staff - Nedre notplan - - - Raster - Rutnät - - - Note Quantize - Notkvantisera - - - Rest Quantize - Restkvantisera - - - Mode - Läge - - - Split System - Delat system - - - Splitpoint - Delningspunkt - - - Apply - Verkställ + koppla källa till destination - Cancel - Avbryt + Current Routes + Nuvarande kopplingar - - - ScoreEdit - Step Record - Stegvis inspelning + Source + Källa - panic - panik + Destination + - &Edit - &Redigera + Remove + Ta bort - C&ut - Klipp &ut + remove selected route + Ta bort vald koppling + + + SS_PluginChooserBase - &Copy - &Kopiera + SimpleDrums - Ladspa Plugin Chooser + SimpleDrums - Ladspa insticksprogramväljare - &Paste - K&listra in + Name + Namn - &Select - &Välj + Label + Etikett - Select &All - Markera &Allt + Inports + Inportar - &Deselect All - A&vmarkera Allt + Outports + Utportar - Invert &Selection - Invertera &Markering + Creator + Upphovsman - &Inside Loop - &I Loop + &Cancel + &Avbryt - &Outside Loop - &Utanför Loop + Alt+C + Alt+A - Transpose - Transponera + &OK + &Ok - Set Fixed Length - Sätt fast längd + Alt+O + - ScrollScale + SS_PluginFront - next page - nästa sida + Clear and unload effect + Rensa och ladda ur effekt - previous page - förra sidan + Load effect + Ladda effekt - current page number - nuvarande sidnummer + Toggle display of effect parameters + Slå av/på visning av effektparametrar + + + Turn effect on/off + Slå effekt av/på SetlenBase MusE: Set Note Length - + MusE: Sätt notlängd Range - Område + Område All Events - Alla Händelser + Alla händelser Selected Events - Valda Händelser + Valda händelser Looped Events - Loopade Händelser + Loopade händelser Selected Looped - + Valda loopade Value - Värde + Värde New length - + Ny längd ticks - + tick OK - - - - Cancel - Avbryt + - - - ShortcutCaptureDialog Cancel - Avbryt - - - Shortcut conflicts with - Kortkommando konfliktar med - - - Undefined - Odefinierad + Avbryt ShortcutCaptureDialogBase Enter shortcut sequence - Ange kortkommandosekvens + Ange kortkommandosekvens Press keys to enter shortcut sequence! - Tryck på tangenter för att ange kortkommandosekvens: + Tryck valda tangenter för att ange kortkommandosekvens! Old shortcut: - Gammalt kortkommando + Gammalt kortkommando: Undefined - Odefinierad + Odefinierad New shortcut: - Nytt kortkommando + Nytt kortkommando: OK - + Cancel - Avbryt + Avbryt ShortcutConfigBase Configure Keyboard Shortcuts - Konfigurera tangentbordskortkommando + Konfigurera tangentbordskortkommando Shortcut Category - Kortkommandokategori + Kortkommandokategori Description - Beskrivning + Beskrivning Shortcut - Kortkommando + Kortkommando &Clear - &Rensa + &Rensa Alt+C - Alt+R + Alt+R &Define - &Definiera + &Definiera Alt+D - + &Apply - &Verkställ + &Verkställ Alt+A - Alt+L - - - - SigScale - - signature scale - signaturskala + Alt+L SimpleDrumsGuiBase DrumSynth 0.1 - + Trumsynth 0,1 SimpleSynthGui &Load setup - &Ladda setup + &Ladda setup &Save setup - &Spara setup + &Spara setup Load sample dialog - - - - - Song - - &Cancel - &Avbryt + SongInfo Song Information - + Sånginformation Show on song load - + Visa vid inladdning av sång &Cancel - &Avbryt + &Avbryt Alt+C - + Alt+R &Ok - + &Ok Alt+O - - - - - StkGuiBase - - Voices - Röster - - - Edit - Redigera + SynthConfigBase - MusE: Synth Configuration - MusE: Syntinställningar - - Soft Synthesizer Mjukvarusynt @@ -14475,7 +10629,7 @@ list of available software synthesizers - lista med tillgängliga mjukvarusyntar + lista med tillgängliga mjukvarusyntar Add Instance @@ -14487,516 +10641,256 @@ Midi Port - Midiport + Midiport Midi Port and Soft Synth Configuration - + Midiport och mjukvarusynt-konfiguration Type - Typ + Typ Midi connections - Midikopplingar - - - Inst - - - - Version - - - - Description - Beskrivning - - - - TList - - Show Gui - Visa Gui - - - Add Midi Track - Lägg till Midispår - - - Add Drum Track - Lägg till Trumspår - - - Add Wave Track - Lägg till Wavespår - - - Delete Track - Ta bort spår - - - Track Comment - Spårkommentar - - - Midi - Midi - - - Drum - Trumma - - - Wave - Wave - - - This is your first wave track and the project -doesn't appear to be saved yet. - -It is recommended that you save a project file now! - -By doing that you are implicitly selecting a folder -where the audio files will end up. - Detta är ditt första ljudspår och projektet verkar inte vara sparat ännu. - -Du rekommenderas att spara projektet nu! - -Genom att göra det så väljer du indirekt den katalog där -ljudfilerna skall hamna. - - - Save dialog - Spara dialog - - - Cancel - Avbryt - - - MusE: bad trackname - MusE: dåligt spårnamn - - - please choose a unique track name - vänligen välj ett unikt spårnamn - - - Add Output - Lägg till utgång - - - Add Group - Lägg till grupp - - - Add Input - Lägg till ingång - - - Add Aux Send - Lägg till aux-send - - - Update drummap? - Updatera trum-map? - - - Do you want to use same port for all instruments in the drummap? - Vill du använda samma port för alla instrument i trum-map:en? - - - &Yes - &Ja - - - &No - &Nej - - - show gui - visa gui - - - Do you want to use same port and channel for all instruments in the drummap? - Vill du använda samma port och kanal för alla instrument i trummap:en? - - - - Toolbar1 - - Cursor - Markör - - - Snap - Fäst vid - - - Quantize - Kvantisera - - - To - Till - - - All Events - Alla Händelser - - - Looped Ev. - Loopade Händelser. - - - Selected Ev. - Valda Händelser. - - - Looped+Sel. - Loopade och Valda. - - - - TopWin - - Arranger - Arrangerare - - - - TrackComment - - MusE: Track Comment - MusE: Spårkommentar - - - Track Comment: - Spårkommentar: - - - - Transport - - Replace - Ersätt - - - Rec Mode - Recläge - - - Left Mark - Vänster Markering - - - Right Mark - Höger Markering - - - rewind to start - flytta tillbaka till början - - - rewind - flytta tillbaka - - - forward - frammåt + Midikopplingar - stop - stopp - - - play - spela - - - record - spela in - - - quantize during record - kvantisera under inspelning - - - metronom click on/off - metronomklick av/på - - - Sync - Synk + Inst + - external sync on/off - externsynk. av/på + Version + - Master - Master + Description + Beskrivning + + + TimeCanvas - use master track - använder masterspår + Add Controller View + Lägg till kontrollvy TransposeBase MusE: Transpose - + MusE: Transponera Range - Område + Område All Events - Alla Händelser + Alla händelser Selected Events - Valda Händelser + Valda händelser Looped Events - Loopade Händelser + Loopade händelser Selected Looped - + Valda loopade Value - Värde + Värde Halftone-steps - + Halvnots-steg OK - - - - Cancel - Avbryt - - - - TransposeDialogBase - - MusE: Midi Transpose - MusE: Miditransponering - - - Value - Värde - - - halftones - halvtoner - - - Time - Tid - - - all - alla - - - between markers - mellan markeringar - - - Parts - Parter - - - all in selected tracks - alla i valda spår + Cancel - Avbryt + Avbryt UnusedWaveFiles Dialog - + List of unused audio files in current project directory: - + Oanvända ljudfiler i nuvarande projektkatalog: Current project - + Nuvarande projekt All .med files in current directory - + Alla .med filter +i nuvarande +katalog Move files to 'unused' subdir - + Flytta filer till 'unused' underkatalog Cancel - Avbryt + Avbryt VAMGui MusE: Save VAM Presets - MusE: Spara VAM presets + MusE: Spara VAM presets MusE: Load VAM Presets - + MusE: Ladda VAM Presets VAMGuiBase Virtual Analogue for MusE - Virtual Analogue för MusE + Virtual Analogue för MusE Waveform - Vågform + Vågform Sine - Sinus + Sinus Pulse - Puls + Puls Saw - Sågtand + Sågtand Triangle - Triangel + Triangel Filter - Filter + Filter Invert - Invertera + Invertera Presets - Preset + Preset load preset list - öppna presetlista + öppna presetlista save preset list - spara presetlista + spara presetlista save preset list to a new file - spara presetlista till ny fil + spara presetlista till ny fil delete preset - ta bort preset + ta bort preset Pitch - Tonhöjd + Tonhöjd On - + LFO - + Freq - + EnvMod - + Attack - + Decay - + Sustain - + Release - + Cutoff - + Resonance - + KeyTrack - + Set - + DCO 1 - + Detune - + Snedstäm PWM - + FM - + PW - + DCO 2 - + - + VAM 1.0beta3 Virtual Analog for MusE Released under GPL. @@ -15006,1271 +10900,1119 @@ Copyright(C) 2005 Robert Jonsson (rj@spamatica.se) - + VelocityBase MusE: Modify Velocity - MusE: Modifiera Velocity + MusE: Modifiera anslag Range - Område + Område All Events - Alla Händelser + Alla händelser Selected Events - Valda Händelser + Valda händelser Looped Events - Loopade Händelser + Loopade händelser Selected Looped - - - - Selected & Looped - Valda & Loopade + Valda loopade Values - Värden + Värden Rate: - Hastighet: + Hastighet: % - + Offset: - Offset: + Kompensation: veloNew = (veloOld * rate) + offset - + OK - + Cancel - Avbryt - - - - WTScale - - bar scale - takt-skala - - - - WaveEdit - - &File - &Arkiv - - - Functions - Funktioner - - - Normalize - Normalisera - - - Cursor - Markör - - - &Edit - &Redigera - - - Func&tions - Funk&tioner - - - Other - Andra - - - &Copy - &Kopiera - - - C&ut - Klipp &ut - - - &Paste - K&listra in - - - Edit in E&xternal Editor - Editera i e&xtern redigerare - - - Mute Selection - Tysta markering - - - Normalize Selection - Normalisera markering - - - Fade In Selection - Tona in markering - - - Fade Out Selection - Tona ut Markering - - - Reverse Selection - Reversera markering - - - Select &All - Markera &Allt - - - &Deselect All - A&vmarkera Allt - - - Select - Välj - - - - WaveTrackInfoBase - - MusE: TrackInfo - MusE: Spårinfo - - - Track Info - Spårinfo - - - Track Name - Spårnamn - - - Output Route: - Utgångsrutt: - - - Input Route: - Ingångsrutt: - - - Ports: - Portar: - - - - WaveView - - MusE - external editor failed - MusE - fel med extern redigerare - - - MusE was unable to launch the external editor -check if the editor setting in: -Global Settings->Audio:External Waveditor -is set to a valid editor. - MusE kunde inte starta extern redigerare -kontrollera om inställningarna i: -Globala inställningar->Ljud:Extern ljudredigerare -är satt till en giltig redigerarbinär - - - MusE - file size changed - MusE - filstorleken har förändrats - - - When editing in external editor - you should not change the filesize -since it must fit the selected region. - -Missing data is muted - Vid editering i extern editor - bör du inte ändra filstorleken -eftersom den måste passa i regionen. - -Saknat data tystas + Avbryt file_patterns Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) - + Midi (*.mid *.MID *.mid.gz *.mid.bz2) - + Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2) - + All Files (*) - Alla filer (*) + Alla filer (*) Midi (*.mid) - + Karaoke (*.kar) - + all known files (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) - + Alla kända filer (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) med Files (*.med *.med.gz *.med.bz2) - + med-filer (*.med *.med.gz *.med.bz2) Uncompressed med Files (*.med) - + Okomprimerade med-filer (*.med) gzip compressed med Files (*.med.gz) - + gzip komprimerade med-filer (*.med.gz) bzip2 compressed med Files (*.med.bz2) - + bzip2 komprimerade med-filer (*.med.bz2) mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - + mid-filer (*.mid *.midi *.kar *.MID *.MIDI *.KAR) (*.jpg *.gif *.png) - + (*.jpg) - + (*.gif) - + (*.png) - + part Files (*.mpt *.mpt.gz *.mpt.bz2) - + part-filer (*,mpt *.mpt.gz *.mpt.bz2) part Files (*.mpt) - + part-filer (*.mpt) gzip compressed part Files (*.mpt.gz) - + gzip-komprimerade part-filer (*.mpt.gz) bzip2 compressed part Files (*.mpt.bz2) - + bzip2-komprimerade part-filer (*.mpt.bz2) Presets (*.pre *.pre.gz *.pre.bz2) - + Presets (*.pre) - + gzip compressed presets (*.pre.gz) - + gzip-komprimerade presets (*.pre.gz) bzip2 compressed presets (*.pre.bz2) - + bzip2 komprimerade presets (*.pre.bz2) Presets (*.map *.map.gz *.map.bz2) - + Presets (*.map) - + gzip compressed presets (*.map.gz) - + gzip-komprimerade presets (*.map.gz) bzip2 compressed presets (*.map.bz2) - + bzip2-komprimerade presets (*.map.bz2) Wave/Binary (*.wav *.ogg *.bin) - + Wave (*.wav *.ogg) - + Binary (*.bin) - + freeverb - Rooom Size - Rumstorlek - - Damping - Dämpning + Dämpning FreeVerb - + Room Size - Rumsstorlek + Rumsstorlek Wet Level - + Effektnivå Tap-Reverberator - + Decay [ms] - + Utklingning [ms] dB - + dB Dry Level [dB] - + Mängd torrt ljud [dB] Wet Level [dB] - + Mängden effektljud [db] Preset: - + AfterBurn - + AfterBurn (Long) - + Ambience - + Ambience (Thick) - + Ambience (Thick) - HD - + Cathedral - + Cathedral - HD - + Drum Chamber - + Garage - + Garage (Bright) - + Gymnasium - + Gymnasium (Bright) - + Gymnasium (Bright) - HD - + Hall (Small) - + Hall (Medium) - + Hall (Large) - + Hall (Large) - HD - + Plate (Small) - + Plate (Medium) - + Plate (Large) - + Plate (Large) - HD - + Pulse Chamber - + Pulse Chamber (Reverse) - + Resonator (96 ms) - + Resonator (152 ms) - + Resonator (208 ms) - + Room (Small) - + Room (Medium) - + Room (Large) - + Room (Large) - HD - + Slap Chamber - + Slap Chamber - HD - + Slap Chamber (Bright) - + Slap Chamber (Bright) HD - + Smooth Hall (Small) - + Smooth Hall (Medium) - + Smooth Hall (Large) - + Smooth Hall (Large) - HD - + Vocal Plate - + Vocal Plate - HD - + Warble Chamber - + Warehoouse - + Warehouse - HD - + Comb Filters - + Allpass Filters - + Bandpass Filters - + Enhanced Stereo - + shortcuts Transport: Start playback from current location - + Transport: Starta uppspelning från nuvarande position Transport: Toggle metronome - + Transport: Slå av/på metronome Transport: Stop Playback - + Transport: Stoppa uppspelning Transport: Goto Start - + Transport: Gå till början Transport: Play, Stop, Rewind - + Transport: Spela, Stoppa, Spola tillbaka Transport: Goto left marker - + Transport: Gå till vänster markör Transport: Goto right marker - + Transport: Gå till höger markör Transport: Toggle Loop section - + Transport: Slå av/på loop Transport: Toggle Record - + Transport: Slå av/på inspelning Transport: Clear all rec enabled tracks - + Transport: Slå av alla inspelningsaktiverade spår Toggle fullscreen - + Av/på fullskärm Edit: Copy - + Redigera: Kopiera Edit: Copy in range - + Redigera: Kopiera område Edit: Undo - + Redigera: Ångra Edit: Redo - + Redigera: Gör om Edit: Cut - + Redigera: Klipp ut Edit: Paste - + Redigera: Klistra in Edit: Paste (with dialog) - + Redigera: Klistra in (med dialog) Edit: Delete - + Redigera:Ta bort File: New project - + Arkiv: Nytt projekt File: Open from disk - + Arkiv: Öppna från disk File: Save project - + Arkiv: Spara projekt File: Open recent file - + Arkiv: Öppna nyligen använd fil File: Save as - + Arkiv: Spara som File: Load template - + Arkiv: Ladda mall File: Import midi file - + Arkiv: Importera midi-fil File: Export midi file - + Arkiv: Exportera midi-fil File: Import midi part - + Arkiv: Importera midi-part File: Import audio file - + Arkiv: Importera ljud-fil File: Quit MusE - + Arkiv: Stäng av MusE Edit: Select parts on track - + Redigera: Välj parter på spår Open pianoroll - + Öppna pianorulle Open drumeditor - + Öppna trum-redigerare Open listeditor - + Öppna list-redigerare Open waveeditor - + Öppna ljud-redigerare Open graphical mastertrack editor - + Öppna grafisk master-spår redigerare Open list mastertrack editor - + Öppna lista-masterspår redigerare Open midi transformer - + Öppna midi-transformator Add midi track - + Lägg till midispår Add drum track - + Lägg till trumspår Add wave track - + Lägg till ljudspår Add audio output - + Lägg till ljudutgång Add audio group - + Lägg till ljudgrupp Add audio input - + Lägg till ljudingång Add audio aux - + Lägg till ljud-aux Structure: Global cut - + Struktur: Globalt klipp ut Structure: Global insert - + Struktur: Global lägg in Structure: Global split - + Struktur: Global delning Structure: Cut events - + Struktur, Klipp händelser View: Open mixer #1 window - + Vy: Öppna mixer #1 fönster View: Open mixer #2 window - + Vy: Öppna mixer #2 fönster View: Toggle transport window - + Vy Av/på transport-fönster View: Toggle bigtime window - + Vy: Av/på bigtime fönster View: Open marker window - + Vy: Öppna markör-fönster Settings: Follow song by page - + Inställningar: Följ sång sida för sida Settings: Follow song off - + Inställningar: Följ inte sång Settings: Follow song continuous - + Inställningar: Följ sång kontinuerligt Settings: Global configuration - + Inställningar: Global konfiguration Settings: Configure shortcuts - + Inställningar: Konfigurera kortkommandon Settings: Configure metronome - + Inställningar: Konfigurera metronom Settings: Midi sync configuration - + Inställningar: Midi synk-konfiguration Settings: Midi file import/export configuration - + Inställningar: Midi-fil import/export konfiguration Settings: Appearance settings - + Inställningar: Utseende inställningar Settings: Midi ports / Soft Synth - + Inställningar: Midi-port / mjukvarusynt Settings: Audio subsystem configuration - + Inställningar: Ljud-system konfiguration Midi: Edit midi instruments - + Midi: Redigera midi-instrument Midi: Open midi input transform - + Midi: Öppna midi ingångstransformator Midi: Open midi input filter - + Midi: Öppna midi ingångsfilter Midi: Midi input transpose - + Midi: Midi ingångs transponerare Midi: Midi remote control - + Midi: Midi fjärrkontroll Midi: Random rhythm generator - + Midi: Slumprytm-generator Midi: Reset midi - + Midi- Nollställ midi Midi: Init midi - + Midi: Initiera midi Midi: Midi local off - + Midi: Midi lokal av Audio: Bounce audio to track - + Ljud: Studsa ljud till spår Audio: Bounce audio to file - + Ljud: Studsa ljud till fil Audio: Restart audio - + Ljud: Starta om ljud Automation: Mixer automation - + Automatisering: Mixer automatisering Automation: Take mixer snapshot - + Automatisering: Ta en ögonblicksbild av mixer Automation: Clear mixer automation - + Automatisering: Rensa mixer automatisering Help: Open Manual - + Hjälp: Öppna manual Help: Toggle whatsthis mode - + Hjälp: Slå av/på "vad är det här"-funktion Edit: Edit selected part - + Redigera: Redigera vald part Edit: Select nearest part on track above - + Redigera: Välj närmaste part på spåret ovanför Edit: Add nearest part on track above - + Redigera: Lägg till närmaste part på spår ovan Edit: Select nearest part on track below - + Redigera: Välj närmaste part på spår under Edit: Add nearest part on track below - + Redigera: Lägg till närmaste part på spår under Edit: Insert empty measure - + Redigera: Lägg in tom takt Edit: Paste as clones - + Redigera: Klistra in som kloner Edit: Paste as clones (with dialog) - + Redigera: Klistra in som kloner (med dialog) Select track above - + Välj spår ovan Select track below - + Välj spår under Midi: Transpose - + Midi: Transponera Edit: Select all - + Redigera: Välj allt Edit: Select none - + Redigera: Välj inget Edit: Invert Selection - + Redigera: Invertera val Edit: Select events/parts inside locators - + Redigera: Välj händelser/parter innanför markörer Edit: Select events/parts outside locators - + Redigera: Välj händelser/parter utanför markörer Edit: Select previous part - + Redigera: Välj föregående part Edit: Select next part - + Redigera: Välj nästa part Edit: Select nearest part/event to the left or move cursor - + Redigera: Välj närmaste part/händelse till vänster eller flytta markör Edit: Add nearest part/event to the left to selection - + Redigera: Välj närmaste part/händelse till vänster om valda Edit: Select nearest part/event to the right or move cursor - + Redigera: Välj närmaste part/händelse till höger eller flytta markör Edit: Add nearest part/event to the right to selection - + Redigera: Lägg till närmaste part/händelse till höger om valda Edit: Set locators to selection - + Redigera: Sätt markörer till valda Edit: Increase pitch - + Redigera: Öka tonhöjd Edit: Decrease pitch - + Redigera Sänk tonhöjd Edit: Increase event position - + Redigera: Öka händelse-position Edit: Decrease event position - + Redigera: Minska händelse-position View: Zoom in - + Vy: Zooma in View: Zoom out - + Vy: Zooma ut View: Goto Current Position - + Vy: Gå till nuvarande position View: Scroll left - + Vy: Rulla vänster Edit: Set Fixed Length on Midi Events - + Vy: Sätt fast längd på midi-händelser Quantize - Kvantisera + Kvantisera Modify Note Length - + Modifiera notlängd Modify Velocity - Modifiera Velocity + Modifiera anslag Edit: Crescendo - + Redigera: Crescendo Edit: Thin Out - + Redigera: Tunna ut Edit: Erase Event - + Redigera: Ta bort händelse Edit: Delete Overlaps - + Redigera: Ta bort överlappande Edit: Note Shift - + Redigera. Ändra not Edit: Move Clock - + Redigera: Flytta klocka Edit: Copy Measure - + Redigera: Kopiera takt Edit: Erase Measure - + Redigera: Ta bort takt Edit: Delete Measure - + Redigera: Ta bort takt Edit: Create Measure - + Redigera: Skapa takt Edit: Change Event Color - + Redigera: Ändra händelse-färg Tool: Pointer - + Verktyg: Pekare Tool: Pencil - + Verktyg: Penna Tool: Eraser - + Verktyg: Sudd Tool: Line Draw - + Verktyg: Rita linje Tool: Cursor - + Verktyg: Pekare Add note velocity 1 - + Lägg till not med anslag 1 Add note velocity 2 - + Läg till not med anslag 2 Add note velocity 3 - + Lägg till not med anslag 3 Add note velocity 4 - + Lägg till not med anslag 4 Cursor step size: larger - + Pekare steglängd: större Cursor step size: smaller - + Pekare steglängd: mindre Instrument/Cursor up - + Instrument/pekare up Instrument/Cursor down - + Instrument/Pekare nere Tool: Scissor - + Verktyg: Sax Tool: Glue - + Verktyg: Lim Tool: Mute - + Verktyg: Tysta Transport: Increase current position - + Transport: Öka nuvarande position Transport: Decrease current position - + Transport: Minska nuvarande position Transport: Increase current position, no snap - + Transport: Minska nuvarande position, utan att fästa Transport: Decrease current position, no snap - + Transport: Minska nuvarande position, utan att fästa Quantize: Set quantize to 1/1 note - + Kvantisera: Sätt kvantisering till 1/1 not Quantize: Set quantize to 1/2 note - + Kvantisera: Sätt kvantisering till 1/2 not Quantize: Set quantize to 1/4 note - + Kvantisera: Sätt kvantisering till 1/4 not Quantize: Set quantize to 1/8 note - + Kvantisera: Sätt kvantisering till 1/8 not Quantize: Set quantize to 1/16 note - + Kvantisera: Sätt kvantisering till 1/16 not Quantize: Set quantize to 1/32 note - + Kvantisera: Sätt kvantisering till 1/32 not Quantize: Set quantize to 1/64 note - + Kvantisera: Sätt kvantisering till 1/64 not Quantize: Toggle triol quantization - + Kvantisering: Slå av på triol-kvantisering Quantize: Toggle punctuation quantization - + Kvantisering: Slå av/på interpunktion-kvantisering Quantize: Toggle punctuation quantization (2) - + Kvantisering: Slå av/på interpunktion-kvantisering (2) Edit: Insert at location - + Redigera: Lägg till vid position Edit: Increase length - + Redigera: Öka längd Edit: Decrease length - + Redigera: Minska längd Insert Note - Mata in Not + Mata in not Insert SysEx - Mata in SysEx + Mata in SysEx Insert Ctrl - Mata in Ctrl + Mata in Ctrl Insert Meta - Mata in Meta + Mata in Meta Insert Channel Aftertouch - Mata in Aftertouch för kanal + Mata in Aftertouch för kanal Insert Key Aftertouch - Mata in Key Aftertouch + Mata in tangent Aftertouch Insert Tempo - Sätt in tempo + Sätt in tempo Insert Signature - Sätt in signatur + Sätt in signatur Change Event Position - + Ändra händelse-position Edit Event Value - + Redigera händelsevärde Insert Key - + Lägg till tonart Goto Next Marker - + Gå till nästa markör Goto Prev Marker - + Gå till föregående markör diff -Nru muse-2.0~rc2/share/plugins/2142.ui muse-2.0/share/plugins/2142.ui --- muse-2.0~rc2/share/plugins/2142.ui 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/plugins/2142.ui 2012-06-30 19:24:42.000000000 +0200 @@ -81,6 +81,9 @@ 0 + + -70 + -70 @@ -122,6 +125,9 @@ 0 + + -70 + -70 I file binari /tmp/m6Yk97oSId/muse-2.0~rc2/share/splash.png e /tmp/WAbpuZ8qWl/muse-2.0/share/splash.png sono diversi diff -Nru muse-2.0~rc2/share/templates/audio.med muse-2.0/share/templates/audio.med --- muse-2.0~rc2/share/templates/audio.med 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/share/templates/audio.med 2012-06-30 19:24:42.000000000 +0200 @@ -17,8 +17,10 @@ 0 0 0 - - + + + 1 + 0 0 0 @@ -53,10 +55,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -67,10 +93,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -81,10 +131,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -95,10 +169,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -109,10 +207,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -123,10 +245,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -137,10 +283,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -151,10 +321,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -165,10 +359,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -179,10 +397,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -193,10 +435,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -207,10 +473,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -221,10 +511,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -235,10 +549,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -249,10 +587,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -263,10 +625,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -289,7 +675,7 @@ 1 90 0 - 3 + 2 0 1 @@ -329,7 +715,7 @@ 0 1 - 384 + 1536 0 0 @@ -575,14 +961,14 @@ - + - + @@ -647,4 +1033,6 @@ + + diff -Nru muse-2.0~rc2/share/templates/default.med muse-2.0/share/templates/default.med --- muse-2.0~rc2/share/templates/default.med 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/share/templates/default.med 2012-06-30 19:24:42.000000000 +0200 @@ -17,6 +17,10 @@ 0 0 0 + + + 1 + 0 0 0 @@ -51,10 +55,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -65,10 +93,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -79,10 +131,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -93,10 +169,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -107,10 +207,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -121,10 +245,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -135,10 +283,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -149,10 +321,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -163,10 +359,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -177,10 +397,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -191,10 +435,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -205,10 +473,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -219,10 +511,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -233,10 +549,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -247,10 +587,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -261,10 +625,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -287,7 +675,7 @@ 1 90 0 - 3 + 2 0 1 @@ -327,7 +715,7 @@ 0 1 - 384 + 1536 0 0 @@ -382,14 +770,14 @@ - - - - + + + + 0 @@ -412,5 +800,6 @@ + + - diff -Nru muse-2.0~rc2/share/templates/midiGM.med muse-2.0/share/templates/midiGM.med --- muse-2.0~rc2/share/templates/midiGM.med 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/share/templates/midiGM.med 2012-06-30 19:24:42.000000000 +0200 @@ -17,8 +17,10 @@ 0 0 0 - - + + + 1 + 0 0 0 @@ -55,10 +57,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -72,10 +98,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -89,10 +139,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -106,10 +180,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -123,10 +221,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -140,10 +262,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -157,10 +303,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -174,10 +344,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -191,10 +385,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -208,10 +426,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -225,10 +467,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -242,10 +508,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -259,10 +549,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -276,10 +590,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -293,10 +631,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -310,10 +672,34 @@ 0 + + + + + + + + + + + + + + + + + + + + + + + + @@ -337,7 +723,7 @@ 1 90 0 - 3 + 2 0 1 @@ -377,7 +763,7 @@ 0 1 - 384 + 1536 0 0 @@ -560,4 +946,6 @@ + + diff -Nru muse-2.0~rc2/share/templates/monorecord.med muse-2.0/share/templates/monorecord.med --- muse-2.0~rc2/share/templates/monorecord.med 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/templates/monorecord.med 2012-06-30 19:24:42.000000000 +0200 @@ -17,8 +17,10 @@ 0 0 0 - - + + + 1 + 0 0 0 @@ -53,10 +55,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -67,10 +93,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -81,10 +131,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -95,10 +169,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -109,10 +207,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -123,10 +245,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -137,10 +283,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -151,10 +321,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -165,10 +359,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -179,10 +397,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -193,10 +435,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -207,10 +473,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -221,10 +511,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -235,10 +549,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -249,10 +587,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -263,10 +625,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -274,7 +660,7 @@ - generic midi + General Midi @@ -405,7 +791,7 @@ - generic midi + General Midi @@ -536,7 +922,7 @@ - generic midi + General Midi @@ -682,7 +1068,7 @@ 1 90 0 - 3 + 2 0 1 @@ -722,7 +1108,7 @@ 0 1 - 384 + 1536 0 0 @@ -853,4 +1239,6 @@ + + diff -Nru muse-2.0~rc2/share/templates/MusE.cfg muse-2.0/share/templates/MusE.cfg --- muse-2.0~rc2/share/templates/MusE.cfg 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/share/templates/MusE.cfg 2012-06-30 19:24:42.000000000 +0200 @@ -12,7 +12,7 @@ 0 512 44100 - 64 + 256 20 1 384 @@ -24,7 +24,8 @@ 1 1 - ./ + 0 + /home/flo/MusE 1 1 0 @@ -41,6 +42,18 @@ 0 0 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 arial,10,-1,5,50,0,0,0,0,0 arial,7,-1,5,50,0,0,0,0,0 arial,10,-1,5,50,0,0,0,0,0 @@ -99,9 +112,11 @@ Keyboard Piano Saxophone + + @@ -111,6 +126,7 @@ + @@ -118,17 +134,12 @@ - - - 1 00:00:00:00:00 0 - + - - 0 0 0 @@ -195,13 +206,13 @@ 96 - 133 - 795 + 132 + 788 934 488 - 000000ff00000000fd00000000000003ae0000019e00000004000000040000000800000008fc00000002000000020000000400000014004400720075006d00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c007301000000f5ffffffff000000000000000000000012007400720061006e00730070006f007200740100000198ffffffff00000000000000000000000a00700061006e0069006301000002be000000f8000000000000000000000002000000030000000c0063007500720073006f00720100000000ffffffff0000000000000000000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000081ffffffff000000000000000000000012004e006f0074006500200049006e0066006f01000001a90000020d0000000000000000 - 000000ff00000000fd00000000000004000000024d00000004000000040000000800000008fc0000000200000002000000050000001800460069006c006500200042007500740074006f006e007301000000000000008c000000000000000000000014004400720075006d00200074006f006f006c0073010000008cffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000181ffffffff000000000000000000000012007400720061006e00730070006f007200740100000224ffffffff00000000000000000000000a00700061006e00690063010000034a000000b6000000000000000000000002000000030000000c0063007500720073006f00720100000000ffffffff0000000000000000000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000081ffffffff000000000000000000000012004e006f0074006500200049006e0066006f01000001a9000002570000000000000000 + 000000ff00000000fd00000000000003a60000015a00000004000000040000000800000008fc0000000300000002000000050000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004400720075006d00200074006f006f006c00730100000049ffffffff000000000000000000000014004500640069007400200054006f006f006c007301000000f7ffffffff000000000000000000000012007400720061006e00730070006f00720074010000019affffffff00000000000000000000000a00700061006e0069006301000002c0000000f8000000000000000000000002000000030000000c0063007500720073006f00720100000000ffffffff0000000000000000000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000081ffffffff000000000000000000000012004e006f0074006500200049006e0066006f01000001b9ffffffff000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b0000026b0000000000000000 + 000000ff00000000fd00000000000004000000022900000004000000040000000800000008fc0000000300000002000000060000001800460069006c006500200042007500740074006f006e00730100000000ffffffff00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000085ffffffff000000000000000000000014004400720075006d00200074006f006f006c007301000000ceffffffff000000000000000000000014004500640069007400200054006f006f006c0073010000017cffffffff000000000000000000000012007400720061006e00730070006f00720074010000021fffffffff00000000000000000000000a00700061006e00690063010000034500000120000000000000000000000002000000030000000c0063007500720073006f00720100000000ffffffff0000000000000000000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000081ffffffff000000000000000000000012004e006f0074006500200049006e0066006f01000001b9ffffffff000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000002c50000000000000000 0 1 0 @@ -213,19 +224,27 @@ 852 460 - 000000ff00000000fd000000000000035c0000018200000004000000040000000800000008fc0000000200000002000000040000001e005000690061006e006f0072006f006c006c00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c007301000000ae00000098000000000000000000000012007400720061006e00730070006f007200740100000146ffffffff00000000000000000000000a00700061006e00690063010000026c000000f800000000000000000000000200000002000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000000ffffffff000000000000000000000012004e006f0074006500200049006e0066006f0100000152000002120000000000000000 - 000000ff00000000fd00000000000004000000024d00000004000000040000000800000008fc0000000200000002000000050000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e005000690061006e006f0072006f006c006c00200074006f006f006c0073010000008cffffffff000000000000000000000014004500640069007400200054006f006f006c0073010000013affffffff000000000000000000000012007400720061006e00730070006f0072007401000001bfffffffff00000000000000000000000a00700061006e0069006301000002e50000011b00000000000000000000000200000002000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000000ffffffff000000000000000000000012004e006f0074006500200049006e0066006f0100000152000002ae0000000000000000 + 000000ff00000000fd00000000000003540000013e00000004000000040000000800000008fc0000000300000002000000050000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000001e005000690061006e006f0072006f006c006c00200074006f006f006c00730100000049ffffffff000000000000000000000014004500640069007400200054006f006f006c007301000000b000000098000000000000000000000012007400720061006e00730070006f007200740100000148ffffffff00000000000000000000000a00700061006e00690063010000026e000000f800000000000000000000000200000002000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000000ffffffff000000000000000000000012004e006f0074006500200049006e0066006f0100000162ffffffff000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000002190000000000000000 + 000000ff00000000fd00000000000004000000022900000004000000040000000800000008fc0000000300000002000000060000001800460069006c006500200042007500740074006f006e00730100000000ffffffff00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000085ffffffff00000000000000000000001e005000690061006e006f0072006f006c006c00200074006f006f006c007301000000ceffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000135ffffffff000000000000000000000012007400720061006e00730070006f0072007401000001baffffffff00000000000000000000000a00700061006e0069006301000002e00000012000000000000000000000000200000002000000260050006f0073002f0053006e00610070002f0053006f006c006f002d0074006f006f006c00730100000000ffffffff000000000000000000000012004e006f0074006500200049006e0066006f0100000162ffffffff000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000002c50000000000000000 0 1 0 + 3 + 300 + 64 + 64 + 0 + 0 + 1 + 1 867 544 - 000000ff00000000fd000000000000036b000001e300000004000000040000000800000008fc0000000200000002000000060000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c00730100000049ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000074ffffffff00000000000000000000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000dbffffffff000000000000000000000012007400720061006e00730070006f007200740100000203ffffffff00000000000000000000000a00700061006e006900630100000329000000420000000000000000000000020000000100000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000000ffffffff0000000000000000 - 000000ff00000000fd00000000000004000000025900000004000000040000000800000008fc0000000200000002000000060000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c007301000000d5ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000100ffffffff000000000000000000000012007400720061006e00730070006f007200740100000167ffffffff00000000000000000000000a00700061006e00690063010000028d000001730000000000000000000000020000000200000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000000ffffffff00000000000000000000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000002650000019b0000000000000000 + 000000ff00000000fd0000000000000363000001a700000004000000040000000800000008fc0000000300000002000000060000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c00730100000049ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000074ffffffff00000000000000000000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000dbffffffff000000000000000000000012007400720061006e00730070006f007200740100000224ffffffff00000000000000000000000a00700061006e006900630100000338000000420000000000000000000000020000000100000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000000ffffffff000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000002d80000000000000000 + 000000ff00000000fd00000000000004000000023d00000004000000040000000800000008fc0000000300000002000000060000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c007301000000d5ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000100ffffffff000000000000000000000012007400720061006e00730070006f007200740100000167ffffffff00000000000000000000000a00700061006e00690063010000028d000001730000000000000000000000020000000200000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000000ffffffff00000000000000000000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e00670073010000027a00000186000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000002c50000000000000000 0 1 0 @@ -236,8 +255,8 @@ 784 544 - 000000ff00000000fd0000000000000318000001ce00000004000000040000000800000008fc0000000200000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000049ffffffff000000000000000000000012007400720061006e00730070006f0072007401000000b0ffffffff00000000000000000000000a00700061006e0069006301000001d600000142000000000000000000000002000000020000001a0045006e00610062006c00650020006d006100730074006500720100000000ffffffff0000000000000000000000080049006e0066006f010000005d000002bb0000000000000000 - 000000ff00000000fd00000000000004000000024500000004000000040000000800000008fc0000000200000002000000050000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff000000000000000000000014004500640069007400200054006f006f006c007301000000d500000071000000000000000000000012007400720061006e00730070006f007200740100000146ffffffff00000000000000000000000a00700061006e00690063010000026c00000194000000000000000000000002000000020000001a0045006e00610062006c00650020006d006100730074006500720100000000ffffffff0000000000000000000000080049006e0066006f010000005d000003a30000000000000000 + 000000ff00000000fd0000000000000310000001b200000004000000040000000800000008fc0000000400000002000000050000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000049ffffffff000000000000000000000012007400720061006e00730070006f0072007401000000b0ffffffff00000000000000000000000a00700061006e0069006301000001d6ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e01000002010000010f000000000000000000000002000000020000001a0045006e00610062006c00650020006d006100730074006500720100000000ffffffff0000000000000000000000080049006e0066006f010000005dffffffff000000000000000000000002000000020000000a00540065006d0070006f0000000000ffffffff000000000000000000000012005300690067006e006100740075007200650000000000ffffffff00000000000000000000000200000000 + 000000ff00000000fd00000000000004000000024900000004000000040000000800000008fc0000000400000002000000060000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff00000000000000000000001a0045006e00610062006c00650020006d0061007300740065007201000000d5ffffffff000000000000000000000014004500640069007400200054006f006f006c0073010000013200000071000000000000000000000012007400720061006e00730070006f0072007401000001a3ffffffff00000000000000000000000a00700061006e0069006301000002c9ffffffff00000000000000000000000200000002000000080049006e0066006f0100000000ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000025d000001a300000000000000000000000200000000000000020000000200000012005300690067006e006100740075007200650000000000ffffffff00000000000000000000000a00540065006d0070006f00000000b0ffffffff0000000000000000 0 1 0 @@ -246,10 +265,10 @@ - 760 - 460 - 000000ff00000000fd0000000000000300000001ac00000004000000040000000800000008fc0000000100000002000000030000001e00570061007600650020006500640069007400200074006f006f006c00730100000000ffffffff00000000000000000000001c0057006100760065004500640069007400200074006f006f006c00730100000049ffffffff000000000000000000000012007400720061006e00730070006f007200740100000184ffffffff0000000000000000 - 000000ff00000000fd00000000000004000000027700000004000000040000000800000008fc0000000100000002000000040000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e00570061007600650020006500640069007400200074006f006f006c0073010000008cffffffff00000000000000000000001c0057006100760065004500640069007400200074006f006f006c007301000000d5ffffffff000000000000000000000012007400720061006e00730070006f007200740100000210ffffffff0000000000000000 + 797 + 478 + 000000ff00000000fd000000000000031d0000018200000004000000040000000800000008fc0000000200000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000001c0057006100760065004500640069007400200074006f006f006c007301000000490000010f000000000000000000000012007400720061006e00730070006f007200740100000158ffffffff00000000000000000000000a00700061006e00690063010000027e0000009f000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000001e20000000000000000 + 000000ff00000000fd00000000000004000000025b00000004000000040000000800000008fc0000000200000002000000050000001800460069006c006500200042007500740074006f006e00730100000000ffffffff00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000085ffffffff00000000000000000000001c0057006100760065004500640069007400200074006f006f006c007301000000ceffffffff000000000000000000000012007400720061006e00730070006f0072007401000001d1ffffffff00000000000000000000000a00700061006e0069006301000002f700000109000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000002c50000000000000000 0 1 0 @@ -258,9 +277,9 @@ 756 - 327 - 000000ff00000000fd00000000000002fc0000012700000004000000040000000800000008fc0000000100000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000022006c00690073007400200069006e007300650072007400200074006f006f006c00730100000049000000e0000000000000000000000012007400720061006e00730070006f007200740100000129ffffffff00000000000000000000000a00700061006e00690063010000024f000000b50000000000000000 - 000000ff00000000fd00000000000004000000027700000004000000040000000800000008fc0000000100000002000000050000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff000000000000000000000022006c00690073007400200069006e007300650072007400200074006f006f006c007301000000d5000000e7000000000000000000000012007400720061006e00730070006f0072007401000001bcffffffff00000000000000000000000a00700061006e0069006301000002e20000011e0000000000000000 + 364 + 000000ff00000000fd00000000000002f40000013000000004000000040000000800000008fc0000000100000002000000070000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000000a00700061006e006900630100000049ffffffff000000000000000000000012007400720061006e00730070006f007200740100000074ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e0000000175ffffffff00000000000000000000000a00540065006d0070006f0000000182ffffffff000000000000000000000012005300690067006e00610074007500720065000000019affffffff000000000000000000000022006c00690073007400200069006e007300650072007400200074006f006f006c0073010000019affffffff0000000000000000 + 000000ff00000000fd00000000000004000000027b00000004000000040000000800000008fc0000000100000002000000080000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff000000000000000000000022006c00690073007400200069006e007300650072007400200074006f006f006c007301000000d5ffffffff000000000000000000000012007400720061006e00730070006f007200740100000196ffffffff00000000000000000000000a00540065006d0070006f00000002c5ffffffff000000000000000000000012005300690067006e006100740075007200650000000350ffffffff00000000000000000000000a00700061006e0069006301000002bcffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e01000002e7000001190000000000000000 0 1 0 @@ -270,8 +289,8 @@ 784 544 - 000000ff00000000fd00000000000003180000020000000004000000040000000800000008fc0000000100000002000000030000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000000000000059000000000000000000000012007400720061006e00730070006f007200740100000059ffffffff00000000000000000000000a00700061006e00690063010000017f000001a10000000000000000 - 000000ff00000000fd00000000000004000000027700000004000000040000000800000008fc0000000100000002000000040000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff000000000000000000000012007400720061006e00730070006f0072007401000000d5ffffffff00000000000000000000000a00700061006e0069006301000001fb000002050000000000000000 + 000000ff00000000fd0000000000000310000001e400000004000000040000000800000008fc0000000100000002000000060000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000000a00700061006e006900630100000049ffffffff000000000000000000000012007400720061006e00730070006f007200740100000074ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000019affffffff00000000000000000000000a00540065006d0070006f01000001d5ffffffff000000000000000000000012005300690067006e006100740075007200650100000260ffffffff0000000000000000 + 000000ff00000000fd00000000000004000000027b00000004000000040000000800000008fc0000000100000002000000070000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff000000000000000000000012007400720061006e00730070006f0072007401000000d5ffffffff00000000000000000000000a00700061006e0069006301000001fbffffffff00000000000000000000000a00540065006d0070006f00000002c5ffffffff000000000000000000000012005300690067006e006100740075007200650000000350ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e0100000226000001da0000000000000000 0 1 0 @@ -279,10 +298,10 @@ - 400 + 612 360 - 000000ff00000000fd00000000000001900000012600000004000000040000000800000008fc00000003000000020000000200000012007400720061006e00730070006f007200740100000000ffffffff00000000000000000000000a00700061006e0069006301000001260000006a0000000000000000000000020000000000000002000000020000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000002c004d006100730074006500720020004c0069007300740020004500640069007400200054006f006f006c00730100000049ffffffff0000000000000000 - 000000ff00000000fd00000000000004000000027700000004000000040000000800000008fc0000000100000002000000050000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff00000000000000000000002c004d006100730074006500720020004c0069007300740020004500640069007400200054006f006f006c007301000000d5000000ac000000000000000000000012007400720061006e00730070006f007200740100000181ffffffff00000000000000000000000a00700061006e0069006301000002a7000001590000000000000000 + 000000ff00000000fd00000000000002640000012c00000004000000040000000800000008fc0000000100000002000000070000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000000000000052000000000000000000000012007400720061006e00730070006f007200740100000052ffffffff00000000000000000000000a00700061006e006900630100000178ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e00000001a30000006800000000000000000000000a00540065006d0070006f00000000a6ffffffff000000000000000000000012005300690067006e006100740075007200650000000131ffffffff00000000000000000000002c004d006100730074006500720020004c0069007300740020004500640069007400200054006f006f006c007301000001a3000000920000000000000000 + 000000ff00000000fd00000000000004000000027b00000004000000040000000800000008fc0000000200000002000000070000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff00000000000000000000002c004d006100730074006500720020004c0069007300740020004500640069007400200054006f006f006c007301000000d5ffffffff000000000000000000000012005300690067006e0061007400750072006500000002d9ffffffff000000000000000000000012007400720061006e00730070006f007200740100000182ffffffff00000000000000000000000a00700061006e0069006301000002a8ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e01000002d30000012d000000000000000000000002000000010000000a00540065006d0070006f0000000000ffffffff0000000000000000 0 1 0 @@ -292,8 +311,8 @@ 784 544 - 000000ff00000000fd00000000000003180000020000000004000000040000000800000008fc0000000100000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000022006d00610072006b006500720020006500640069007400200074006f006f006c0073010000004900000054000000000000000000000012007400720061006e00730070006f00720074010000009dffffffff00000000000000000000000a00700061006e0069006301000001c30000015d0000000000000000 - 000000ff00000000fd00000000000004000000027700000004000000040000000800000008fc0000000100000002000000050000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff000000000000000000000022006d00610072006b006500720020006500640069007400200074006f006f006c007301000000d50000007f000000000000000000000012007400720061006e00730070006f007200740100000154ffffffff00000000000000000000000a00700061006e00690063010000027a000001860000000000000000 + 000000ff00000000fd0000000000000310000001e400000004000000040000000800000008fc0000000100000002000000070000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000000a00700061006e006900630100000049ffffffff000000000000000000000012007400720061006e00730070006f007200740100000074ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e0100000191ffffffff00000000000000000000000a00540065006d0070006f010000019effffffff000000000000000000000012005300690067006e006100740075007200650100000229ffffffff000000000000000000000022006d00610072006b006500720020006500640069007400200074006f006f006c007301000002d9ffffffff0000000000000000 + 000000ff00000000fd00000000000004000000027b00000004000000040000000800000008fc0000000100000002000000080000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff000000000000000000000022006d00610072006b006500720020006500640069007400200074006f006f006c007301000000d5ffffffff000000000000000000000012007400720061006e00730070006f00720074010000011effffffff00000000000000000000000a00700061006e006900630100000244ffffffff00000000000000000000000a00540065006d0070006f00000002c5ffffffff000000000000000000000012005300690067006e006100740075007200650000000329ffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000026f000001910000000000000000 0 1 0 @@ -301,14 +320,19 @@
- 996 - 223 + 1024 + 553 000000ff00000000fd00000000000003ec0000008d00000004000000040000000800000008fc0000000200000002000000050000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff00000000000000000000001a0061007200720061006e0067006500720054006f006f006c00730100000049ffffffff00000000000000000000002600560069007300690062006c006500200074007200610063006b0020007400790070006500730100000128000000f0000000000000000000000012007400720061006e00730070006f007200740100000218ffffffff00000000000000000000000a00700061006e00690063010000033e000000b6000000000000000000000002000000010000001e0041007200720061006e0067006500720054006f006f006c0062006100720100000000ffffffff0000000000000000 - 000000ff00000000fd00000000000004000000024500000004000000040000000800000008fc0000000200000002000000060000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff00000000000000000000001a0061007200720061006e0067006500720054006f006f006c007301000000d5ffffffff00000000000000000000002600560069007300690062006c006500200074007200610063006b00200074007900700065007301000001b4ffffffff000000000000000000000012007400720061006e00730070006f007200740100000293ffffffff00000000000000000000000a00700061006e0069006301000003b900000047000000000000000000000002000000010000001e0041007200720061006e0067006500720054006f006f006c0062006100720100000000ffffffff0000000000000000 + 000000ff00000000fd00000000000004000000022900000004000000040000000800000008fc0000000300000002000000060000001800460069006c006500200042007500740074006f006e007301000000000000008c00000000000000000000001e0055006e0064006f002f005200650064006f00200074006f006f006c0073010000008cffffffff00000000000000000000001a0061007200720061006e0067006500720054006f006f006c007301000000d5ffffffff00000000000000000000002600560069007300690062006c006500200074007200610063006b00200074007900700065007301000001b4ffffffff000000000000000000000012007400720061006e00730070006f007200740100000293ffffffff00000000000000000000000a00700061006e0069006301000003b900000047000000000000000000000002000000010000001e0041007200720061006e0067006500720054006f006f006c0062006100720100000000ffffffff000000000000000000000002000000030000000a00540065006d0070006f0100000000ffffffff000000000000000000000012005300690067006e00610074007500720065010000008bffffffff00000000000000000000001a0053006f006e006700200050006f0073006900740069006f006e010000013b000002c50000000000000000 0 1 1 + + + + 9 8 7 6 5 4 3 2 1 0 + diff -Nru muse-2.0~rc2/share/templates/synti.med muse-2.0/share/templates/synti.med --- muse-2.0~rc2/share/templates/synti.med 2012-01-06 20:45:38.000000000 +0100 +++ muse-2.0/share/templates/synti.med 2012-06-30 19:24:42.000000000 +0200 @@ -17,8 +17,10 @@ 0 0 0 - - + + + 1 + 0 0 0 @@ -57,10 +59,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -71,10 +97,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -85,10 +135,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -99,10 +173,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -113,10 +211,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -127,10 +249,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -141,10 +287,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -155,10 +325,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -169,10 +363,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -183,10 +401,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -197,10 +439,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -211,10 +477,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -225,10 +515,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -239,10 +553,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -253,10 +591,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -267,10 +629,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -412,7 +798,7 @@ - generic midi + General Midi @@ -692,7 +1078,7 @@ 1 90 0 - 3 + 2 0 1 @@ -732,7 +1118,7 @@ 0 1 - 384 + 1536 0 0 @@ -862,7 +1248,7 @@ 0 0 - + @@ -897,7 +1283,7 @@ 3 0 - + @@ -934,21 +1320,9 @@ - - - - - - - - - - - - 0 @@ -971,4 +1345,6 @@ + + diff -Nru muse-2.0~rc2/synti/deicsonze/deicsonze.cpp muse-2.0/synti/deicsonze/deicsonze.cpp --- muse-2.0~rc2/synti/deicsonze/deicsonze.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/deicsonze/deicsonze.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -1318,7 +1318,7 @@ file = fopen (presetPath.toLatin1().constData(), "rt"); if (file == NULL) { printf("can't open "); - printf(presetPath.toLatin1().constData()); + printf("%s", presetPath.toLatin1().constData()); printf("\n"); } else diff -Nru muse-2.0~rc2/synti/deicsonze/deicsonzegui.cpp muse-2.0/synti/deicsonze/deicsonzegui.cpp --- muse-2.0~rc2/synti/deicsonze/deicsonzegui.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/deicsonze/deicsonzegui.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -4558,7 +4558,7 @@ void DeicsOnzeGui::updateSelectPreset(int hbank, int lbank, int prog) { //QTreeWidgetItem* cat = categoryListView->currentItem(); //QTreeWidgetItem* sub = subcategoryListView->currentItem(); - QTreeWidgetItem* pre = presetListView->currentItem(); + //QTreeWidgetItem* pre = presetListView->currentItem(); //select category, subcategory, preset //category QList qlcat = @@ -4621,7 +4621,7 @@ presetListView->scrollToItem(qpre); updatePresetName(qpre->text(1), true); updateProg(prog, true); - pre=(QTreePreset*) qpre; + //pre=(QTreePreset*) qpre; setEnabledPreset(true); } else { diff -Nru muse-2.0~rc2/synti/deicsonze/deicsonzeplugin.cpp muse-2.0/synti/deicsonze/deicsonzeplugin.cpp --- muse-2.0~rc2/synti/deicsonze/deicsonzeplugin.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/deicsonze/deicsonzeplugin.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -300,12 +300,12 @@ //for(int i = 0; i < plugI->plugin()->parameter(); i++) { for(int i = 0; i < (int)plugI->plugin()->controlInPorts(); i++) { ///double min, max, val; - float min, max, val; + float min, max; //, val; plugI->range(i, &min, &max); - val = _deicsOnze->getReverbParam(i); // FIXME FIXME Tim /* + val = _deicsOnze->getReverbParam(i); if(plugI->isBool(i)) addPluginCheckBox(i, plugI->getParameterName(i), val > 0.0, _reverbSuperWidget, grid, true); @@ -351,12 +351,12 @@ //for(int i = 0; i < plugI->plugin()->parameter(); i++) { for(int i = 0; i < (int)plugI->plugin()->controlInPorts(); i++) { ///double min, max, val; - float min, max, val; + float min, max; //, val; plugI->range(i, &min, &max); - val = _deicsOnze->getChorusParam(i); // FIXME FIXME Tim /* + val = _deicsOnze->getChorusParam(i); if(plugI->isBool(i)) addPluginCheckBox(i, plugI->getParameterName(i), val > 0.0, _chorusSuperWidget, grid, false); diff -Nru muse-2.0~rc2/synti/fluid/fluid.cpp muse-2.0/synti/fluid/fluid.cpp --- muse-2.0~rc2/synti/fluid/fluid.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/fluid/fluid.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -154,6 +154,8 @@ break; case MusECore::CTRL_PITCH: + // MusE's range is from -8192 to +8191, fluidsynth seems to be [0, 16384] + val +=8192; fluid_synth_pitch_bend (_fluidsynth, ch, val); break; @@ -378,8 +380,9 @@ { switch(ev.type()) { case MusECore::ME_CONTROLLER: - setController(ev.channel(), ev.dataA(), ev.dataB()); - return true; + setController(ev.channel(), ev.dataA(), ev.dataB()); + //return true; // ?? + break; case MusECore::ME_NOTEON: return playNote(ev.channel(), ev.dataA(), ev.dataB()); case MusECore::ME_NOTEOFF: diff -Nru muse-2.0~rc2/synti/fluid/fluidgui.cpp muse-2.0/synti/fluid/fluidgui.cpp --- muse-2.0~rc2/synti/fluid/fluidgui.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/fluid/fluidgui.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -79,7 +79,7 @@ } QByteArray ba = pathEntry->text().toLatin1(); const char* path = ba.constData(); - int len = strlen(path) + 1 + 3; + int len = ba.length() + 1 + 3; unsigned char buffer[len]; int k = 0; buffer[k++] = MUSE_SYNTH_SYSEX_MFG_ID; diff -Nru muse-2.0~rc2/synti/fluidsynth/fluidsynti.cpp muse-2.0/synti/fluidsynth/fluidsynti.cpp --- muse-2.0~rc2/synti/fluidsynth/fluidsynti.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/fluidsynth/fluidsynti.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -417,7 +417,7 @@ chptr+=strlen(lastdir.c_str())+1; - FluidSoundFont fonts[nrOfSoundfonts]; //Just a temp one + FluidSoundFont* fonts = new FluidSoundFont[nrOfSoundfonts]; //Just a temp one //Fonts: for (int i=0; iframes, srcratio); - printf("Resampling from %lld frames to %ld frames - srcration: %lf\n", sfi.frames, smp->frames, srcratio); + //printf("Resampling from %lld frames to %ld frames - srcration: %lf\n", sfi.frames, smp->frames, srcratio); + // Changed by Tim. Just avoid the hassle for now. Need to determine 32/64 bit and provide two different printf lines. + printf("Resampling to %ld frames - srcration: %lf\n", smp->frames, srcratio); printf("Nr of new samples: %ld\n", smp->samples); } @@ -1767,8 +1770,8 @@ QString errorString = "Error loading plugin \"" + plugin->label() + "\""; guiSendError(errorString.toLatin1().constData()); } - return success; SS_TRACE_OUT + return success; } diff -Nru muse-2.0~rc2/synti/simpledrums2/ssplugin.cpp muse-2.0/synti/simpledrums2/ssplugin.cpp --- muse-2.0~rc2/synti/simpledrums2/ssplugin.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/simpledrums2/ssplugin.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -324,9 +324,11 @@ double val = 1.0; if (LADSPA_IS_HINT_DEFAULT_MINIMUM(rh)) val = range.LowerBound; + else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) + val = range.UpperBound; else if (LADSPA_IS_HINT_DEFAULT_LOW(rh)) if (LADSPA_IS_HINT_LOGARITHMIC(range.HintDescriptor)) - val = exp(fast_log10(range.LowerBound) * .75 + + val = exp(log(range.LowerBound) * .75 + log(range.UpperBound) * .25); else val = range.LowerBound*.75 + range.UpperBound*.25; @@ -342,8 +344,6 @@ log(range.UpperBound) * .75); else val = range.LowerBound*.25 + range.UpperBound*.75; - else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(rh)) - val = range.UpperBound; else if (LADSPA_IS_HINT_DEFAULT_0(rh)) val = 0.0; else if (LADSPA_IS_HINT_DEFAULT_1(rh)) @@ -352,6 +352,29 @@ val = 100.0; else if (LADSPA_IS_HINT_DEFAULT_440(rh)) val = 440.0; + // No default found. Make one up... + else if (LADSPA_IS_HINT_BOUNDED_BELOW(rh) && LADSPA_IS_HINT_BOUNDED_ABOVE(rh)) + { + if (LADSPA_IS_HINT_LOGARITHMIC(rh)) + val = exp(log(range.LowerBound) * .5 + + log(range.UpperBound) * .5); + else + val = range.LowerBound*.5 + range.UpperBound*.5; + } + else if (LADSPA_IS_HINT_BOUNDED_BELOW(rh)) + val = range.LowerBound; + else if (LADSPA_IS_HINT_BOUNDED_ABOVE(rh)) + { + // Hm. What to do here... Just try 0.0 or the upper bound if less than zero. + //if(range.UpperBound > 0.0) + // val = 0.0; + //else + // val = range.UpperBound; + // Instead try this: Adopt an 'attenuator-like' policy, where upper is the default. + val = range.UpperBound; + return true; + } + SS_TRACE_OUT return val; } diff -Nru muse-2.0~rc2/synti/simpledrums2/ssplugingui.cpp muse-2.0/synti/simpledrums2/ssplugingui.cpp --- muse-2.0~rc2/synti/simpledrums2/ssplugingui.cpp 2012-01-06 20:45:39.000000000 +0100 +++ muse-2.0/synti/simpledrums2/ssplugingui.cpp 2012-06-30 19:24:43.000000000 +0200 @@ -536,8 +536,10 @@ connect(pluginFronts[i], SIGNAL(sizeChanged(int, int)), SLOT(pluginFrontSizeChanged(int, int))); connect(pluginFronts[i], SIGNAL(effectParameterChanged(int, int, int)), simplesynthgui_ptr, SLOT(effectParameterChanged(int, int, int))); } - setMinimumSize(QSize(SS_PLUGINGUI_WIDTH, geometry().height())); - setMaximumSize(QSize(SS_PLUGINGUI_MAX_WIDTH, geometry().height())); + + // FIXME: These are causing window height to be fixed way too small - can't see anything. Why? It was working before. Tim p4.0.49 + //setMinimumSize(QSize(SS_PLUGINGUI_WIDTH, geometry().height())); + //setMaximumSize(QSize(SS_PLUGINGUI_MAX_WIDTH, geometry().height())); } diff -Nru muse-2.0~rc2/xpm/delta_off.xpm muse-2.0/xpm/delta_off.xpm --- muse-2.0~rc2/xpm/delta_off.xpm 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/xpm/delta_off.xpm 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,21 @@ +/* XPM */ +static const char * delta_off_xpm[] = { +"15 15 3 1", +" c None", +". c #000000", +"+ c #80FF80", +" ", +" . ", +" . ", +" . ", +" . . ", +" . .. ", +" ....... ..... ", +" .+++++. .. ", +" .+++++. . ", +" .+++++. ", +" .+++++. ", +" .+++++. ", +" .+++++. ", +" ............. ", +" "}; diff -Nru muse-2.0~rc2/xpm/delta_on.xpm muse-2.0/xpm/delta_on.xpm --- muse-2.0~rc2/xpm/delta_on.xpm 1970-01-01 01:00:00.000000000 +0100 +++ muse-2.0/xpm/delta_on.xpm 2012-06-30 19:24:43.000000000 +0200 @@ -0,0 +1,22 @@ +/* XPM */ +static const char * delta_on_xpm[] = { +"15 15 4 1", +" c None", +". c #000000", +"+ c #F74C45", +"@ c #80FF80", +" ", +" . . ", +" . ... ", +" .. . . ..... ", +" .+++++. . ", +" .+++++. . ", +" ....... ", +" .+++++. . ", +" .+++++. . ", +" ..@.@.. ..... ", +" .@@@@@. ... ", +" .@@@@@. . ", +" .@@@@@. ", +" ............. ", +" "}; diff -Nru muse-2.0~rc2/xpm/record_off.xpm muse-2.0/xpm/record_off.xpm --- muse-2.0~rc2/xpm/record_off.xpm 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/xpm/record_off.xpm 2012-06-30 19:24:43.000000000 +0200 @@ -1,150 +1,70 @@ /* XPM */ static const char * record_off_xpm[] = { -"15 15 132 2", -" c None", -". c #520002", -"+ c #420002", -"@ c #3F0002", -"# c #350002", -"$ c #3E0002", -"% c #360002", -"& c #370002", -"* c #590006", -"= c #490002", -"- c #3F0000", -"; c #450002", -"> c #470003", -", c #5A0006", -"' c #430003", -") c #3B0001", -"! c #450200", -"~ c #530006", -"{ c #470000", -"] c #520001", -"^ c #5C0200", -"/ c #760002", -"( c #980201", -"_ c #6E0006", -": c #660004", -"< c #630002", -"[ c #3B0000", -"} c #3B0200", -"| c #5A0002", -"1 c #4D0004", -"2 c #610600", -"3 c #740800", -"4 c #990200", -"5 c #B20201", -"6 c #740000", -"7 c #6E0200", -"8 c #680200", -"9 c #560200", -"0 c #390100", -"a c #460002", -"b c #400000", -"c c #590200", -"d c #830800", -"e c #A40B00", -"f c #A80400", -"g c #B00400", -"h c #960400", -"i c #6E0400", -"j c #630300", -"k c #450000", -"l c #330000", -"m c #700000", -"n c #AA0300", -"o c #A60300", -"p c #AA0200", -"q c #B40101", -"r c #AC0400", -"s c #8E0200", -"t c #750000", -"u c #590000", -"v c #4B0002", -"w c #680100", -"x c #330002", -"y c #9D0201", -"z c #A70200", -"A c #B00201", -"B c #AC0001", -"C c #B20101", -"D c #C00000", -"E c #AE0001", -"F c #8C0004", -"G c #530004", -"H c #3A0000", -"I c #540200", -"J c #400002", -"K c #560006", -"L c #670006", -"M c #7F0000", -"N c #A70400", -"O c #990300", -"P c #AF0100", -"Q c #8E0600", -"R c #920400", -"S c #9E0001", -"T c #5A0004", -"U c #430002", -"V c #340000", -"W c #510200", -"X c #6A0004", -"Y c #6C0200", -"Z c #9C0200", -"` c #B20200", -" . c #930300", -".. c #610000", -"+. c #4F0003", -"@. c #3F0003", -"#. c #390002", -"$. c #450003", -"%. c #640002", -"&. c #6A0200", -"*. c #6A0400", -"=. c #710001", -"-. c #810004", -";. c #900004", -">. c #650000", -",. c #540400", -"'. c #500200", -"). c #430000", -"!. c #3F0004", -"~. c #370001", -"{. c #350000", -"]. c #590300", -"^. c #570000", -"/. c #510004", -"(. c #5F0004", -"_. c #5D0002", -":. c #4F0200", -"<. c #3D0000", -"[. c #450004", -"}. c #4D0200", -"|. c #4C0002", -"1. c #440002", -"2. c #490003", -"3. c #380000", -"4. c #370000", -"5. c #3E0000", -"6. c #310000", -"7. c #390000", -"8. c #4A0006", -"9. c #440004", -"0. c #670100", -"a. c #5E0200", -" ", -" . + @ # $ % & ", -" * = - ; > , - ' ) ! ", -" ~ { ] ^ / ( _ : < [ } ", -" | 1 ] 2 3 4 5 6 7 8 9 - 0 ", -" a b c d e f 5 g h i j k l ", -" @ - m n o p q r s t u v [ w ", -" x > y z A B C D E F G = H I ", -" J K L M N O P Q R S T U V W ", -" # b X Y R Z ` .8 ..| +.@. ", -" #.$.%.&.*.=.-.;.>.,.'.).!. ", -" ~.{.].*.^./.(._.:.<.$ [. ", -" }.} - ).a |.1.2.{ 3.} ", -" 0 4.5.b 6.7.8.9. ", -" 0.}.a. "}; +"13 13 54 1", +" c None", +". c #790000", +"+ c #7A0000", +"@ c #780000", +"# c #770000", +"$ c #740000", +"% c #6B0000", +"& c #730000", +"* c #710000", +"= c #640000", +"- c #620000", +"; c #6D0000", +"> c #760000", +", c #6A0000", +"' c #5E0000", +") c #5A0000", +"! c #720000", +"~ c #610000", +"{ c #570000", +"] c #530000", +"^ c #5B0000", +"/ c #6F0000", +"( c #6E0000", +"_ c #680000", +": c #600000", +"< c #580000", +"[ c #4E0000", +"} c #4A0000", +"| c #510000", +"1 c #5C0000", +"2 c #560000", +"3 c #450000", +"4 c #460000", +"5 c #4C0000", +"6 c #520000", +"7 c #590000", +"8 c #550000", +"9 c #500000", +"0 c #4B0000", +"a c #440000", +"b c #3D0000", +"c c #410000", +"d c #490000", +"e c #3F0000", +"f c #380000", +"g c #360000", +"h c #3A0000", +"i c #3E0000", +"j c #3C0000", +"k c #330000", +"l c #2F0000", +"m c #310000", +"n c #300000", +"o c #2E0000", +" ..... ", +" +.@@@@@@. ", +" +.@.......# ", +" #........@$ ", +"%&.@.....@.*=", +"-;>.......$,'", +")=;$@...#!,~{", +"]^-,/!!*(_:<[", +"}|<'-===~12[3", +" 4562<7<890a ", +" bc3d}0}daef ", +" ghbieijfk ", +" lmmno "}; diff -Nru muse-2.0~rc2/xpm/record_on.xpm muse-2.0/xpm/record_on.xpm --- muse-2.0~rc2/xpm/record_on.xpm 2012-01-06 20:45:36.000000000 +0100 +++ muse-2.0/xpm/record_on.xpm 2012-06-30 19:24:43.000000000 +0200 @@ -1,160 +1,88 @@ /* XPM */ static const char * record_on_xpm[] = { -"15 15 142 2", -" c None", -". c #9B0500", -"+ c #900601", -"@ c #AF0205", -"# c #980401", -"$ c #AF0206", -"% c #A70205", -"& c #A80204", -"* c #A9040A", -"= c #990502", -"- c #A00400", -"; c #CC0004", -"> c #A30404", -", c #BD0212", -"' c #B20207", -") c #AC0201", -"! c #A30800", -"~ c #A70409", -"{ c #990500", -"] c #D50002", -"^ c #DB0400", -"/ c #E70004", -"( c #F20010", -"_ c #E30018", -": c #E00010", -"< c #C00202", -"[ c #AB0200", -"} c #AB0800", -"| c #A90401", -"1 c #A50406", -"2 c #B90201", -"3 c #DE1800", -"4 c #E62300", -"5 c #F10900", -"6 c #FF0016", -"7 c #E60000", -"8 c #E40800", -"9 c #E10900", -"0 c #BB0600", -"a c #BE0200", -"b c #B00200", -"c c #DA0400", -"d c #EB2500", -"e c #F33000", -"f c #F80D00", -"g c #FF0018", -"h c #FE0F00", -"i c #F11000", -"j c #E40F00", -"k c #DF0B00", -"l c #B30200", -"m c #A20200", -"n c #BB0304", -"o c #A00403", -"p c #E40000", -"q c #F90B00", -"r c #FF0F00", -"s c #F90006", -"t c #FB0012", -"u c #F40D00", -"v c #EE0800", -"w c #E70000", -"x c #DA0000", -"y c #D00004", -"z c #AC0500", -"A c #A40202", -"B c #B40207", -"C c #F40010", -"D c #FD0014", -"E c #FF0008", -"F c #F70009", -"G c #EE0010", -"H c #D6000F", -"I c #CF0009", -"J c #A80800", -"K c #BB0211", -"L c #E10018", -"M c #EA0000", -"N c #F10B00", -"O c #EE3000", -"P c #EF0F00", -"Q c #F5000D", -"R c #DA0010", -"S c #B10202", -"T c #A50200", -"U c #A70600", -"V c #9B0403", -"W c #970500", -"X c #E20010", -"Y c #E30800", -"Z c #EF1000", -"` c #F10800", -" . c #FF0009", -".. c #F01000", -"+. c #E10800", -"@. c #DE0000", -"#. c #DA0004", -"$. c #B80207", -"%. c #AF0207", -"&. c #EC0004", -"*. c #AB0204", -"=. c #B30207", -"-. c #E20800", -";. c #E20F00", -">. c #E50002", -",. c #EB000F", -"'. c #EF000D", -"). c #E00000", -"!. c #D70F00", -"~. c #B90500", -"{. c #B10200", -"]. c #AF020C", -"^. c #A90201", -"/. c #A70200", -"(. c #DA0B00", -"_. c #E20D00", -":. c #D90000", -"<. c #D5000F", -"[. c #DD0010", -"}. c #DC0004", -"|. c #D30400", -"1. c #AD0200", -"2. c #AE0204", -"3. c #B3020A", -"4. c #9A0600", -"5. c #AC0800", -"6. c #AF0200", -"7. c #C90000", -"8. c #CD0004", -"9. c #D10009", -"0. c #CA0004", -"a. c #B50207", -"b. c #B40200", -"c. c #9C0400", -"d. c #A90400", -"e. c #A30200", -"f. c #AA0200", -"g. c #B6020E", -"h. c #A90402", -"i. c #A50800", -"j. c #AB0600", -"k. c #B50302", -" ", -" . + @ # $ % & ", -" * = - ; > , - ' ) ! ", -" ~ { ] ^ / ( _ : < [ } ", -" | 1 2 3 4 5 6 7 8 9 0 - a ", -" > b c d e f g h i j k l m n ", -" o - p q r s t u v w x y [ z ", -" A B C 6 g D t E F G H I [ J ", -" o K L M r N E O P Q R S T U ", -" V W X Y Z ` ...+.@.#.$.%.&.", -" *.=.< -.;.>.,.'.).!.~.{.]. ", -" ^./.(._.:.<.[.}.|.1.2.3. ", -" 4.5.6.7.8.9.0.a.b.c.} ", -" d.e.6.b e.f.g.3. ", -" h.z i.j.k. "}; +"13 13 72 1", +" c None", +". c #FF0000", +"+ c #FE0000", +"@ c #FC0101", +"# c #F80202", +"$ c #EA0707", +"% c #F70303", +"& c #F30505", +"* c #E20A0A", +"= c #E00A0A", +"- c #EE0506", +"; c #FB0101", +"> c #E90707", +", c #DB0C0C", +"' c #D60E0E", +") c #E30909", +"! c #EF0505", +"~ c #F90202", +"{ c #FD0000", +"] c #F60303", +"^ c #EB0707", +"/ c #DF0A0A", +"( c #D10F0F", +"_ c #CA1111", +": c #D70E0D", +"< c #E10A0A", +"[ c #F00505", +"} c #F40404", +"| c #F60403", +"1 c #F30404", +"2 c #E70808", +"3 c #DE0B0B", +"4 c #D30E0E", +"5 c #C71313", +"6 c #C01515", +"7 c #CA1212", +"8 c #D30F0F", +"9 c #DA0D0D", +"0 c #E00B0B", +"a c #E40909", +"b c #E30A0A", +"c c #D80D0D", +"d c #D01010", +"e c #BA1717", +"f c #BB1717", +"g c #C41414", +"h c #CB1212", +"i c #D40F0F", +"j c #D30F10", +"k c #CE1010", +"l c #C91212", +"m c #C21515", +"n c #B91818", +"o c #AE1B1B", +"p c #B51A1A", +"q c #BF1616", +"r c #C31515", +"s c #C11515", +"t c #BE1616", +"u c #B81818", +"v c #B31A1A", +"w c #AA1D1D", +"x c #A51F1E", +"y c #AF1B1B", +"z c #B21A1A", +"A c #B11A1B", +"B c #A91D1D", +"C c #A31F1F", +"D c #9D2121", +"E c #A02020", +"F c #9F2121", +"G c #9C2121", +" .+++. ", +" ..++.++++ ", +" .++.......@ ", +" @+......+.# ", +"$%.+......+&*", +"=-;.......%>,", +"')!~{..+@]^/(", +"_:<$[}|1!2345", +"67890)ab3cd5e", +" fghd8ijklmn ", +" opeqmrstuvw ", +" xwyzzAoBC ", +" DEEFG "};