From 0792c2ec66dacfff10899cbe171cb661871617f1 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Mon, 16 May 2011 21:40:52 +0000 Subject: improved error handling of script execution just a bit --- muse2/muse/song.cpp | 103 ++++++++++++++++++++++++---------------------------- 1 file changed, 47 insertions(+), 56 deletions(-) diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp index e6fa9cab..2900097e 100644 --- a/muse2/muse/song.cpp +++ b/muse2/muse/song.cpp @@ -3685,8 +3685,8 @@ void Song::executeScript(const char* scriptfile, PartList* parts, int quant, boo //const char* tmp = tmpnam(NULL); char tmp[16] = "muse-tmp-XXXXXX"; int fd = mkstemp(tmp); - printf("script input filename=%s\n",tmp); - //FILE *fp = fopen(tmp, "w"); + if (debugMsg) + printf("executeScript: script input filename=%s\n",tmp); FILE *fp = fdopen(fd , "w"); MidiPart *part = (MidiPart*)(i->second); int partStart = part->endTick()-part->lenTick(); @@ -3717,7 +3717,6 @@ void Song::executeScript(const char* scriptfile, PartList* parts, int quant, boo } fclose(fp); -// QString program(scriptfile); QStringList arguments; arguments << tmp; @@ -3725,65 +3724,57 @@ void Song::executeScript(const char* scriptfile, PartList* parts, int quant, boo myProcess->start(scriptfile, arguments); myProcess->waitForFinished(); QByteArray errStr = myProcess->readAllStandardError(); - if (errStr.size()) { - QMessageBox::warning(muse, tr("MusE - external script failed"), - "Script returned the following error\n"+ QString(errStr)); - endUndo(SC_EVENT_REMOVED); - return; - } else if (myProcess->exitCode()) { + if (myProcess->exitCode()) { QMessageBox::warning(muse, tr("MusE - external script failed"), - tr("MusE was unable to launch the script\n") + tr("MusE was unable to launch the script, error message:\n ")+ QString(errStr) ); endUndo(SC_EVENT_REMOVED); return; } - else { // d0 the fun55or5! - // TODO: Create a new part, update the entire editor from it, hehh.... - - QFile file(tmp); - if ( file.open( QIODevice::ReadOnly ) ) { - QTextStream stream( &file ); - QString line; - while ( !stream.atEnd() ) { - line = stream.readLine(); // line of text excluding '\n' - if (line.startsWith("NOTE")) - { - QStringList sl = line.split(" "); - - Event e(Note); - int tick = sl[1].toInt(); - int pitch = sl[2].toInt(); - int len = sl[3].toInt(); - int velo = sl[4].toInt(); - //printf ("tick=%d pitch=%d velo=%d len=%d\n", tick,pitch,velo,len); - e.setTick(tick); - e.setPitch(pitch); - e.setVelo(velo); - e.setLenTick(len); - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgAddEvent(e, part, false, false, false); - } - if (line.startsWith("CONTROLLER")) - { - 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(); - //printf ("tick=%d a=%d b=%d c=%d\n", tick,a,b,c); - e.setA(a); - e.setB(b); - e.setB(c); - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgAddEvent(e, part, false, false, false); - } - } - file.close(); - } - } + if (errStr.size()> 0) { + printf("script execution produced the following error:\n%s\n", QString(errStr).toLatin1().data()); + } + QFile file(tmp); + if ( file.open( QIODevice::ReadOnly ) ) { + QTextStream stream( &file ); + QString line; + while ( !stream.atEnd() ) { + line = stream.readLine(); // line of text excluding '\n' + if (line.startsWith("NOTE")) + { + QStringList sl = line.split(" "); + + Event e(Note); + int tick = sl[1].toInt(); + int pitch = sl[2].toInt(); + int len = sl[3].toInt(); + int velo = sl[4].toInt(); + e.setTick(tick); + e.setPitch(pitch); + e.setVelo(velo); + e.setLenTick(len); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgAddEvent(e, part, false, false, false); + } + if (line.startsWith("CONTROLLER")) + { + 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(); + e.setA(a); + e.setB(b); + e.setB(c); + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgAddEvent(e, part, false, false, false); + } + } + file.close(); + } remove(tmp); } -- cgit v1.2.3 From 0f3ed66e83d6639452a5aa219b9a6bf2bfd54897 Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Thu, 19 May 2011 07:43:06 +0000 Subject: Popup menus now auto-scroll if too large to fit on desktop. Midi track info patch popup now stays open for auditioning patches. Editor 'ctrl' controller popups: Split instrument/other (+ common controls!) + show ctrl numbers. --- muse2/ChangeLog | 6 + muse2/muse/app.cpp | 301 +-------------------------------- muse2/muse/app.h | 3 +- muse2/muse/arranger/tlist.cpp | 18 +- muse2/muse/arranger/tlist.h | 6 +- muse2/muse/confmport.cpp | 4 +- muse2/muse/ctrl/ctrledit.cpp | 10 +- muse2/muse/ctrl/ctrlpanel.cpp | 265 ++++++++++++++++++++++++++++- muse2/muse/ctrl/ctrlpanel.h | 3 +- muse2/muse/dssihost.cpp | 6 +- muse2/muse/dssihost.h | 6 +- muse2/muse/instruments/minstrument.cpp | 9 +- muse2/muse/instruments/minstrument.h | 6 +- muse2/muse/liste/editevent.cpp | 27 ++- muse2/muse/midictrl.cpp | 78 ++++++++- muse2/muse/midictrl.h | 3 +- muse2/muse/mixer/astrip.cpp | 16 +- muse2/muse/synth.cpp | 5 +- muse2/muse/synth.h | 12 +- muse2/muse/ticksynth.cpp | 6 +- muse2/muse/vst.h | 6 +- muse2/muse/widgets/mtrackinfo.cpp | 46 ++++- muse2/muse/widgets/mtrackinfo.h | 1 + muse2/muse/widgets/popupmenu.cpp | 221 +++++++++++++++++++++++- muse2/muse/widgets/popupmenu.h | 30 +++- 25 files changed, 729 insertions(+), 365 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index fce03eb0..956b0c3f 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,9 @@ +19.05.2011: + * Feature: Popup menus now auto-scroll if too large to fit on desktop. (p4.0.25 Tim) + Added auto-scroll to my class PopupMenu. Added selectable stay-open. TODO: Use it more, where needed. + - Changed midi track info patch popup behaviour. Now stays open for auditioning patches. (Tim) + - Changed editor 'ctrl' controller popups. Split instrument/other (+ common controls!) + show ctrl numbers. (Tim) + TODO: Add custom (R)NRPN dialog to 'other' section. 15.05.2011: - Changed mouse wheel behaviour in graphical editors except the score editor (rj) * wheel scrolls left-right diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index c42a1a7c..5b8da28e 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -2303,7 +2303,7 @@ void MusE::showTransport(bool flag) PopupMenu* MusE::getRoutingPopupMenu() { if(!routingPopupMenu) - routingPopupMenu = new PopupMenu(this); + routingPopupMenu = new PopupMenu(this, true); return routingPopupMenu; } @@ -2884,7 +2884,7 @@ PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) pup->addSeparator(); pup->addAction(new MenuTitleItem(tr("Soloing chain"), pup)); - PopupMenu* subp = new PopupMenu(pup); + PopupMenu* subp = new PopupMenu(pup, true); subp->setTitle(tr("Audio returns")); pup->addMenu(subp); @@ -2978,7 +2978,7 @@ PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) if(!md && ir == rl->end()) continue; - PopupMenu* subp = new PopupMenu(pup); + PopupMenu* subp = new PopupMenu(pup, true); subp->setTitle(QString("%1:").arg(i+1) + (md ? md->name() : tr(""))); for(int ch = 0; ch < MIDI_CHANNELS; ++ch) @@ -3009,7 +3009,7 @@ PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) #if 0 // p4.0.17 List ports with no device and no in routes, in a separate popup. - PopupMenu* morep = new PopupMenu(pup); + PopupMenu* morep = new PopupMenu(pup, true); morep->setTitle(tr("More...")); for(int i = 0; i < MIDI_PORTS; ++i) { @@ -3017,7 +3017,7 @@ PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) if(mp->device()) continue; - PopupMenu* subp = new PopupMenu(morep); + PopupMenu* subp = new PopupMenu(morep, true); subp->setTitle(QString("%1:").arg(i) + tr("")); // MusE-2: Check this - needed with QMenu? Help says no. No - verified, it actually causes double triggers! @@ -3080,297 +3080,6 @@ PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) return 0; } -#if 0 -//--------------------------------------------------------- -// getRoutingPopupView -//--------------------------------------------------------- - -PopupView* MusE::getRoutingPopupView() -{ - if(!routingPopupView) - //routingPopupView = new PopupView(this); - routingPopupView = new PopupView(); - return routingPopupView; -} - -//--------------------------------------------------------- -// routingPopupViewActivated -//--------------------------------------------------------- - -void MusE::routingPopupViewActivated(Track* track, int n) -{ - //if(!track || (track != gRoutingPopupMenuMaster)) - if(!track) - return; - - if(track->isMidiTrack()) - { - PopupView* pup = getRoutingPopupView(); - - //printf("MusE::routingPopupMenuActivated midi n:%d count:%d\n", n, pup->count()); - - if(pup->model()->rowCount() == 0) - return; - - //MidiTrack* t = (MidiTrack*)track; - RouteList* rl = gIsOutRoutingPopupMenu ? track->outRoutes() : track->inRoutes(); - - if(n == -1) - return; - - iRouteMenuMap imm = gRoutingMenuMap.find(n); - if(imm == gRoutingMenuMap.end()) - return; - if(imm->second.type != Route::MIDI_PORT_ROUTE) - return; - Route &aRoute = imm->second; - int chbit = aRoute.channel; - Route bRoute(track, chbit); - int mdidx = aRoute.midiPort; - - MidiPort* mp = &midiPorts[mdidx]; - MidiDevice* md = mp->device(); - if(!md) - return; - - //if(!(md->rwFlags() & 2)) - if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) - return; - - int chmask = 0; - iRoute iir = rl->begin(); - for (; iir != rl->end(); ++iir) - { - //if(*iir == (dst ? bRoute : aRoute)) - //if(*iir == aRoute) - if(iir->type == Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // p3.3.50 Is there already a route to this port? - { - chmask = iir->channel; // p3.3.50 Grab the channel mask. - break; - } - } - //if (iir != rl->end()) - if ((chmask & chbit) == chbit) // p3.3.50 Is the channel's bit(s) set? - { - // disconnect - if(gIsOutRoutingPopupMenu) - audio->msgRemoveRoute(bRoute, aRoute); - else - audio->msgRemoveRoute(aRoute, bRoute); - } - else - { - // connect - if(gIsOutRoutingPopupMenu) - audio->msgAddRoute(bRoute, aRoute); - else - audio->msgAddRoute(aRoute, bRoute); - } - - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - } - else - { - // TODO: Try to move code from AudioStrip::routingPopupMenuActivated into here. - } - //else - //{ - //} -} - -//--------------------------------------------------------- -// prepareRoutingPopupView -//--------------------------------------------------------- - -PopupView* MusE::prepareRoutingPopupView(Track* track, bool dst) -{ - if(!track) - return 0; - - //QPoint ppt = QCursor::pos(); - - if(track->isMidiTrack()) - { - - //QPoint ppt = parent->rect().bottomLeft(); - - //if(dst) - //{ - // TODO - - //} - //else - //{ - RouteList* rl = dst ? track->outRoutes() : track->inRoutes(); - //Route dst(track, -1); - - ///QPopupMenu* pup = new QPopupMenu(parent); - - PopupView* pup = getRoutingPopupView(); - pup->disconnect(); - //connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); - //connect(pup, SIGNAL(aboutToHide()), SLOT(routingPopupMenuAboutToHide())); - - ///pup->setCheckable(true); - - int gid = 0; - //int n; - - // Routes can't be re-read until the message sent from msgAddRoute1() - // has had time to be sent and actually affected the routes. - ///_redisplay: - - pup->clear(); - gRoutingMenuMap.clear(); - gid = 0; - - //MidiInPortList* tl = song->midiInPorts(); - //for(iMidiInPort i = tl->begin();i != tl->end(); ++i) - for(int i = 0; i < MIDI_PORTS; ++i) - { - //MidiInPort* track = *i; - // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick with ports. - MidiPort* mp = &midiPorts[i]; - MidiDevice* md = mp->device(); - if(!md) - continue; - - if(!(md->rwFlags() & (dst ? 1 : 2))) - continue; - - //printf("MusE::prepareRoutingPopupMenu adding submenu portnum:%d\n", i); - - //QMenu* m = menu->addMenu(track->name()); - //QPopupMenu* subp = new QPopupMenu(parent); - //PopupMenu* subp = new PopupMenu(this); - QStandardItem* subp = new QStandardItem(QT_TRANSLATE_NOOP("@default", md->name())); -/// connect(subp, SIGNAL(activated(int)), pup, SIGNAL(activated(int))); - //connect(subp, SIGNAL(aboutToHide()), pup, SIGNAL(aboutToHide())); - - int chanmask = 0; - // p3.3.50 To reduce number of routes required, from one per channel to just one containing a channel mask. - // Look for the first route to this midi port. There should always be only a single route for each midi port, now. - for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) - { - if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) - { - // We have a route to the midi port. Grab the channel mask. - chanmask = ir->channel; - break; - } - } - - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - { - //QAction* a = m->addAction(QString("Channel %1").arg(ch+1)); - //subp->insertItem(QT_TRANSLATE_NOOP("@default", QString("Channel %1").arg(ch+1)), i * MIDI_CHANNELS + ch); - gid = i * MIDI_CHANNELS + ch; - - //printf("MusE::prepareRoutingPopupMenu inserting gid:%d\n", gid); - -/// subp->insertItem(QString("Channel %1").arg(ch+1), gid); - QStandardItem* sti = new QStandardItem(QString("Channel %1").arg(ch+1)); - sti->setCheckable(true); - sti->setData(gid); - subp->appendRow(sti); - - //a->setCheckable(true); - //Route src(track, ch, RouteNode::TRACK); - //Route src(md, ch); - //Route r = Route(src, dst); - //a->setData(QVariant::fromValue(r)); - //a->setChecked(rl->indexOf(r) != -1); - - //Route srcRoute(md, ch); - //Route srcRoute(i, ch); // p3.3.49 New: Midi port route. - int chbit = 1 << ch; - Route srcRoute(i, chbit); // p3.3.50 In accordance with new channel mask, use the bit position. - - gRoutingMenuMap.insert( pRouteMenuMap(gid, srcRoute) ); - - //for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) // p3.3.50 Removed. - //{ - //if(*ir == dst) - // if(*ir == srcRoute) - // { - // subp->setItemChecked(id, true); - // break; - // } - //} - if(chanmask & chbit) // p3.3.50 Is the channel already set? Show item check mark. -/// subp->setItemChecked(gid, true); - sti->setCheckState(Qt::Checked); - } - //subp->insertItem(QString("Toggle all"), 1000+i); - // p3.3.50 One route with all channel bits set. - gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. -/// subp->insertItem(QString("Toggle all"), gid); - QStandardItem* sti = new QStandardItem(QString("Toggle all")); - sti->setData(gid); - subp->appendRow(sti); - - Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. - gRoutingMenuMap.insert( pRouteMenuMap(gid, togRoute) ); - -/// pup->insertItem(QT_TRANSLATE_NOOP("@default", md->name()), subp); - pup->model()->appendRow(subp); - pup->updateView(); - } - - /* - QPopupMenu* pup = new QPopupMenu(iR); - pup->setCheckable(true); - //MidiTrack* t = (MidiTrack*)track; - RouteList* irl = track->inRoutes(); - - MidiTrack* t = (MidiTrack*)track; - int gid = 0; - 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); - - if (!checkAudioDevice()) return; - std::list ol = audioDevice->outputPorts(); - for (std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) { - int id = pup->insertItem(*ip, (gid * 16) + i); - Route dst(*ip, true, i); - ++gid; - for (iRoute ir = irl->begin(); ir != irl->end(); ++ir) { - if (*ir == dst) { - pup->setItemChecked(id, true); - break; - } - } - } - if (i+1 != channel) - pup->addSeparator(); - } - */ - -/// if(pup->count() == 0) - if(pup->model()->rowCount() == 0) - { - ///delete pup; - gRoutingPopupMenuMaster = 0; - //pup->clear(); - //pup->disconnect(); - gRoutingMenuMap.clear(); - //oR->setDown(false); - return 0; - } - - gIsOutRoutingPopupMenu = dst; - return pup; - } - - return 0; -} -#endif - //--------------------------------------------------------- // saveAs //--------------------------------------------------------- diff --git a/muse2/muse/app.h b/muse2/muse/app.h index e940c1ad..45b2efff 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -287,7 +287,7 @@ class MusE : public QMainWindow void startMidiTransformer(); void writeGlobalConfiguration() const; - void startEditInstrument(); + //void startEditInstrument(); void startClipList(bool); void openRecentMenu(); @@ -359,6 +359,7 @@ class MusE : public QMainWindow void importMidi(const QString &file); void setUsedTool(int); void showDidYouKnowDialog(); + void startEditInstrument(); void routingPopupMenuAboutToHide(); void configMidiPorts(); diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index b907b555..ccd213da 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -11,7 +11,7 @@ #include #include -#include +//#include #include #include #include @@ -44,6 +44,7 @@ #include "midiedit/drummap.h" #include "synth.h" #include "config.h" +#include "popupmenu.h" #ifdef DSSI_SUPPORT #include "dssihost.h" @@ -348,7 +349,7 @@ void TList::paint(const QRect& r) if (cl->isVisible()) countVisible++; } - int count = ((AudioTrack*)track)->controller()->size(); + //int count = ((AudioTrack*)track)->controller()->size(); s.sprintf(" %d(%d) visible",countVisible, countAll); } @@ -883,9 +884,11 @@ void TList::changeAutomationColor(QAction* act) //--------------------------------------------------------- // colorMenu //--------------------------------------------------------- -QMenu* TList::colorMenu(QColor c, int id) +//QMenu* TList::colorMenu(QColor c, int id) +PopupMenu* TList::colorMenu(QColor c, int id) { - QMenu * m = new QMenu(this); + //QMenu * m = new QMenu(this); + PopupMenu * m = new PopupMenu(this); //, true); TODO for (int i = 0; i< 6; i++) { QPixmap pix(10,10); QPainter p(&pix); @@ -1058,7 +1061,7 @@ void TList::mousePressEvent(QMouseEvent* ev) { if (!t->isMidiTrack()) { editAutomation = t; - PopupMenu* p = new PopupMenu(); + PopupMenu* p = new PopupMenu(true); p->disconnect(); p->clear(); p->setTitle(tr("Viewable automation")); @@ -1075,12 +1078,11 @@ void TList::mousePressEvent(QMouseEvent* ev) int data = cl->id() * 256; // shift 8 bits data += 150; // illegal color > 100 act->setData(data); - QMenu *m = colorMenu(cl->color(), cl->id()); + //QMenu *m = colorMenu(cl->color(), cl->id()); + PopupMenu *m = colorMenu(cl->color(), cl->id()); act->setMenu(m); } connect(p, SIGNAL(triggered(QAction*)), SLOT(changeAutomation(QAction*))); - //connect(p, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - //p->popup(QCursor::pos()); p->exec(QCursor::pos()); delete p; diff --git a/muse2/muse/arranger/tlist.h b/muse2/muse/arranger/tlist.h index 8bebef95..4d787030 100644 --- a/muse2/muse/arranger/tlist.h +++ b/muse2/muse/arranger/tlist.h @@ -19,7 +19,8 @@ class QPaintEvent; class QResizeEvent; class QScrollBar; class QWheelEvent; -class QMenu; +//class QMenu; +class PopupMenu; class ScrollScale; class Track; @@ -85,7 +86,8 @@ class TList : public QWidget { void classesPopupMenu(Track*, int x, int y); TrackList getRecEnabledTracks(); void setHeaderToolTips(); - QMenu* colorMenu(QColor c, int id); + //QMenu* colorMenu(QColor c, int id); + PopupMenu* colorMenu(QColor c, int id); private slots: void returnPressed(); diff --git a/muse2/muse/confmport.cpp b/muse2/muse/confmport.cpp index 8c27d9eb..fc005923 100644 --- a/muse2/muse/confmport.cpp +++ b/muse2/muse/confmport.cpp @@ -609,7 +609,7 @@ void MPConfig::rbClicked(QTableWidgetItem* item) return; #else { - defpup = new PopupMenu(this); + defpup = new PopupMenu(this, true); defpup->addAction(new MenuTitleItem("Channel", defpup)); QAction* act = 0; int chbits = midiPorts[no].defaultInChannels(); @@ -649,7 +649,7 @@ void MPConfig::rbClicked(QTableWidgetItem* item) return; #else { - defpup = new PopupMenu(this); + defpup = new PopupMenu(this, true); defpup->addAction(new MenuTitleItem("Channel", defpup)); QAction* act = 0; int chbits = midiPorts[no].defaultOutChannels(); diff --git a/muse2/muse/ctrl/ctrledit.cpp b/muse2/muse/ctrl/ctrledit.cpp index 8842ba97..c4e33822 100644 --- a/muse2/muse/ctrl/ctrledit.cpp +++ b/muse2/muse/ctrl/ctrledit.cpp @@ -69,7 +69,8 @@ void CtrlEdit::writeStatus(int level, Xml& xml) { if (canvas->controller()) { xml.tag(level++, "ctrledit"); - xml.strTag(level, "ctrl", canvas->controller()->name()); + //xml.strTag(level, "ctrl", canvas->controller()->name()); + xml.intTag(level, "ctrlnum", canvas->controller()->num()); xml.tag(level, "/ctrledit"); } } @@ -89,6 +90,8 @@ void CtrlEdit::readStatus(Xml& xml) return; case Xml::TagStart: if (tag == "ctrl") { + xml.parse1(); // Obsolete. + /* QString name = xml.parse1(); int portno = canvas->track()->outPort(); MidiPort* port = &midiPorts[portno]; @@ -101,6 +104,11 @@ void CtrlEdit::readStatus(Xml& xml) break; } } + */ + } + else if (tag == "ctrlnum") { + int num = xml.parseInt(); + canvas->setController(num); } else xml.unknown("CtrlEdit"); diff --git a/muse2/muse/ctrl/ctrlpanel.cpp b/muse2/muse/ctrl/ctrlpanel.cpp index 9e990861..b23ce855 100644 --- a/muse2/muse/ctrl/ctrlpanel.cpp +++ b/muse2/muse/ctrl/ctrlpanel.cpp @@ -11,7 +11,8 @@ #include "ctrlpanel.h" #include "ctrlcanvas.h" -#include +//#include +#include #include #include #include @@ -20,10 +21,12 @@ #include +#include "app.h" #include "globals.h" #include "midictrl.h" #include "instruments/minstrument.h" #include "midiport.h" +#include "mididev.h" #include "xml.h" #include "icons.h" #include "event.h" @@ -37,6 +40,8 @@ #include "doublelabel.h" #include "midi.h" #include "audio.h" +#include "menutitleitem.h" +#include "popupmenu.h" //--------------------------------------------------------- // CtrlPanel @@ -47,6 +52,8 @@ CtrlPanel::CtrlPanel(QWidget* parent, MidiEditor* e, const char* name) { setObjectName(name); inHeartBeat = true; + //ctrlMainPop = 0; + //ctrlSubPop = 0; editor = e; setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QVBoxLayout* vbox = new QVBoxLayout; @@ -514,6 +521,7 @@ void CtrlPanel::setHeight(int h) setFixedHeight(h); } +#if 0 struct CI { QString s; bool used; @@ -673,6 +681,261 @@ void CtrlPanel::ctrlPopup() } } +#else // p4.0.25 Tim +struct CI { + int num; + QString s; + bool used; + bool instrument; + CI(int n, const QString& ss, bool u, bool i) : num(n), s(ss), used(u), instrument(i) {} + }; + +void CtrlPanel::ctrlPopup() + { + //--------------------------------------------------- + // build list of midi controllers for current + // MidiPort/channel + //--------------------------------------------------- + + PartList* parts = editor->parts(); + Part* part = editor->curCanvasPart(); + MidiTrack* track = (MidiTrack*)(part->track()); + int channel = track->outChannel(); + MidiPort* port = &midiPorts[track->outPort()]; + int curDrumInstrument = editor->curDrumInstrument(); + bool isDrum = track->type() == Track::DRUM; + MidiInstrument* instr = port->instrument(); + MidiControllerList* mcl = instr->controller(); + + MidiCtrlValListList* cll = port->controller(); + int min = channel << 24; + int max = min + 0x1000000; + + std::list sList; + typedef std::list::iterator isList; + + for (iMidiCtrlValList i = cll->lower_bound(min); i != cll->lower_bound(max); ++i) { + MidiCtrlValList* cl = i->second; + MidiController* c = port->midiController(cl->num()); + // dont show drum specific controller if not a drum track + if ((c->num() & 0xff) == 0xff) { + if (!isDrum) + continue; + // only show controller for curDrumInstrument: + if ((cl->num() & 0xff) != drumMap[curDrumInstrument].anote) { + continue; + } + } + isList i = sList.begin(); + for (; i != sList.end(); ++i) { + //if (i->s == c->name()) + if (i->num == c->num()) + break; + } + if (i == sList.end()) { + bool used = false; + for (iPart ip = parts->begin(); ip != parts->end(); ++ip) { + EventList* el = ip->second->events(); + for (iEvent ie = el->begin(); ie != el->end(); ++ie) { + Event e = ie->second; + if ((e.type() == Controller) && (e.dataA() == cl->num())) { + used = true; + break; + } + } + if (used) + break; + } + //sList.push_back(CI(c->name(), used)); + bool isinstr = ( mcl->find(c->num()) != mcl->end() ); + int cnum = c->num(); + // Need to distinguish between global default controllers and + // instrument defined controllers. Instrument takes priority over global + // ie they 'overtake' definition of a global controller such that the + // global def is no longer available. + sList.push_back(CI(cnum, + isinstr ? midiCtrlNumString(cnum, true) + c->name() : midiCtrlName(cnum, true), + used, isinstr)); + } + } + + PopupMenu* ctrlMainPop = new PopupMenu; + + //ctrlMainPop->addSeparator(); + ctrlMainPop->addAction(new MenuTitleItem(tr("Instrument-defined"), ctrlMainPop)); + + //ctrlMainPop->addAction(QIcon(*configureIcon), tr("Add ..."))->setData(max + 1); + + // Add instrument-defined controllers. + for (isList i = sList.begin(); i != sList.end(); ++i) + { + if(!i->instrument) + continue; + if (i->used) + ctrlMainPop->addAction(QIcon(*greendotIcon), i->s)->setData(i->num); + else + ctrlMainPop->addAction(i->s)->setData(i->num); + } + + ctrlMainPop->addAction(QIcon(*configureIcon), tr("Add ..."))->setData(max + 1); + //ctrlMainPop->addAction(QIcon(*midi_edit_instrumentIcon), tr("Edit instruments"))->setData(max + 2); + + ctrlMainPop->addSeparator(); + ctrlMainPop->addAction(new MenuTitleItem(tr("Others"), ctrlMainPop)); + + //ctrlMainPop->addAction(QIcon(*configureIcon), tr("Add ..."))->setData(max + 3); + + ctrlMainPop->addAction(tr("Velocity"))->setData(max); + + // Add global default controllers (all controllers not found in instrument). + for (isList i = sList.begin(); i != sList.end(); ++i) + { + if(i->instrument) + continue; + if (i->used) + ctrlMainPop->addAction(QIcon(*greendotIcon), i->s)->setData(i->num); + else + ctrlMainPop->addAction(i->s)->setData(i->num); + } + + ctrlMainPop->addAction(QIcon(*configureIcon), tr("Add ..."))->setData(max + 3); + + //connect(ctrlMainPop, SIGNAL(hovered(QAction*)), SLOT(ctrlMainPopHovered(QAction*))); + + QAction *act = ctrlMainPop->exec(selCtrl->mapToGlobal(QPoint(0,0))); + selCtrl->setDown(false); + + if (!act) + { + delete ctrlMainPop; + return; + } + + int rv = act->data().toInt(); + delete ctrlMainPop; + + if (rv == max) { // special case velocity + emit controllerChanged(CTRL_VELOCITY); + } + else if (rv == max + 1) { // add new instrument controller + + PopupMenu * ctrlSubPop = new PopupMenu(this); + ctrlSubPop->addAction(new MenuTitleItem(tr("Instrument-defined"), ctrlSubPop)); + + // + // populate popup with all controllers available for + // current instrument + // + + //ctrlSubPop->addAction(QIcon(*midi_edit_instrumentIcon), tr("Edit instruments"))->setData(max + 2); + + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) + { + int num = ci->second->num(); + if((num & 0xff) == 0xff) + { + // dont show drum specific controller if not a drum track + if(!isDrum) + continue; + num = (num & ~0xff) + drumMap[curDrumInstrument].anote; + } + + if(cll->find(channel, num) == cll->end()) + ctrlSubPop->addAction(midiCtrlNumString(num, true) + ci->second->name())->setData(num); + } + + // Don't allow editing instrument if it's a synth + if(!port->device() || port->device()->deviceType() != MidiDevice::SYNTH_MIDI) + ctrlSubPop->addAction(QIcon(*midi_edit_instrumentIcon), tr("Edit instrument ..."))->setData(max + 2); + + //connect(ctrlSubPop, SIGNAL(hovered(QAction*)), SLOT(ctrlSubPopHovered(QAction*))); + + QAction *act2 = ctrlSubPop->exec(selCtrl->mapToGlobal(QPoint(0,0))); + if (act2) + { + int rv2 = act2->data().toInt(); + + if (rv2 == max + 2) // edit instrument + muse->startEditInstrument(); + else // select new instrument control + { + MidiController* c; + for (iMidiController ci = mcl->begin(); ci != mcl->end(); ++ci) + { + c = ci->second; + int num = c->num(); + if (isDrum && ((num & 0xff) == 0xff)) + num = (num & ~0xff) + drumMap[curDrumInstrument].anote; + + if(num != rv2) + continue; + + if(cll->find(channel, num) == cll->end()) + { + MidiCtrlValList* vl = new MidiCtrlValList(num); + + cll->add(channel, vl); + emit controllerChanged(c->num()); + //song->update(SC_MIDI_CONTROLLER_ADD); + } + else + emit controllerChanged(c->num()); + break; + } + } + } + delete ctrlSubPop; + } + + //else if (rv == max + 2) // edit instrument + // muse->startEditInstrument(); + + else if (rv == max + 3) { // add new other controller + PopupMenu* ctrlSubPop = new PopupMenu(this); + ctrlSubPop->addAction(new MenuTitleItem(tr("Common Controls"), ctrlSubPop)); + + for(int num = 0; num < 127; ++num) + if(cll->find(channel, num) == cll->end()) + ctrlSubPop->addAction(midiCtrlName(num, true))->setData(num); + QAction *act2 = ctrlSubPop->exec(selCtrl->mapToGlobal(QPoint(0,0))); + if (act2) { + int rv2 = act2->data().toInt(); + int num = rv2; + if (isDrum && ((num & 0xff) == 0xff)) + num = (num & ~0xff) + drumMap[curDrumInstrument].anote; + if(cll->find(channel, num) == cll->end()) + { + MidiCtrlValList* vl = new MidiCtrlValList(num); + + cll->add(channel, vl); + emit controllerChanged(rv2); + //song->update(SC_MIDI_CONTROLLER_ADD); + } + else + emit controllerChanged(rv2); + } + delete ctrlSubPop; + } + else { // Select a control + //QString s = act->text(); + iMidiCtrlValList i = cll->begin(); + for (; i != cll->end(); ++i) { + MidiCtrlValList* cl = i->second; + MidiController* c = port->midiController(cl->num()); + //if (c->name() == s) { + if (c->num() == rv) { + emit controllerChanged(c->num()); + break; + } + } + if (i == cll->end()) { + //printf("CtrlPanel: controller %s not found!", s.toLatin1().constData()); + printf("CtrlPanel: controller number %d not found!", rv); + } + } + } +#endif + //--------------------------------------------------------- // ctrlRightClicked //--------------------------------------------------------- diff --git a/muse2/muse/ctrl/ctrlpanel.h b/muse2/muse/ctrl/ctrlpanel.h index a0e5f915..92911b8e 100644 --- a/muse2/muse/ctrl/ctrlpanel.h +++ b/muse2/muse/ctrl/ctrlpanel.h @@ -12,7 +12,6 @@ class MidiController; -class QMenu; class QPushButton; class MidiEditor; @@ -26,7 +25,7 @@ class MidiTrack; //--------------------------------------------------------- class CtrlPanel: public QWidget { - ///QMenu* pop; + //QMenu* pop; QPushButton* selCtrl; MidiEditor* editor; diff --git a/muse2/muse/dssihost.cpp b/muse2/muse/dssihost.cpp index 49a63643..2384ed02 100644 --- a/muse2/muse/dssihost.cpp +++ b/muse2/muse/dssihost.cpp @@ -37,7 +37,7 @@ #include #include -#include +//#include #include "dssihost.h" #include "synth.h" @@ -61,6 +61,8 @@ #include "globaldefs.h" //#include "al/dsp.h" #include "gconfig.h" +#include "popupmenu.h" + /* static lo_server_thread serverThread; @@ -3388,7 +3390,7 @@ const char* DssiSynthIF::getPatchName(int /*chan*/, int prog, MType /*type*/, bo //--------------------------------------------------------- //void DssiSynthIF::populatePatchPopup(QMenu* menu, int) -void DssiSynthIF::populatePatchPopup(QMenu* menu, int /*ch*/, MType /*type*/, bool /*drum*/) +void DssiSynthIF::populatePatchPopup(PopupMenu* menu, int /*ch*/, MType /*type*/, bool /*drum*/) { // The plugin can change the programs, patches etc. // So make sure we're up to date by calling queryPrograms. diff --git a/muse2/muse/dssihost.h b/muse2/muse/dssihost.h index 096c84c7..b917bbf6 100644 --- a/muse2/muse/dssihost.h +++ b/muse2/muse/dssihost.h @@ -42,7 +42,8 @@ #include "plugin.h" -#include +//#include +#include "popupmenu.h" #define DSSI_PARAMSAVE_VERSION_MAJOR 0 #define DSSI_PARAMSAVE_VERSION_MINOR 1 @@ -199,7 +200,8 @@ class DssiSynthIF : public SynthIF, public PluginIBase virtual const char* getPatchName(int, int, MType, bool); //virtual void populatePatchPopup(QMenu*, int); - virtual void populatePatchPopup(QMenu*, int, MType, bool); + //virtual void populatePatchPopup(QMenu*, int, MType, bool); + virtual void populatePatchPopup(PopupMenu*, int, MType, bool); //virtual void write(Xml& xml) const; virtual void write(int level, Xml& xml) const; diff --git a/muse2/muse/instruments/minstrument.cpp b/muse2/muse/instruments/minstrument.cpp index 4fde7bf3..10cb3ec2 100644 --- a/muse2/muse/instruments/minstrument.cpp +++ b/muse2/muse/instruments/minstrument.cpp @@ -11,7 +11,7 @@ #include #include #include -#include +//#include #include #include "minstrument.h" @@ -25,6 +25,7 @@ #include "mpevent.h" #include "midictrl.h" #include "gconfig.h" +#include "popupmenu.h" MidiInstrumentList midiInstruments; MidiInstrument* genericMidiInstrument; @@ -881,7 +882,7 @@ QString MidiInstrument::getPatchName(int channel, int prog, MType mode, bool dru // populatePatchPopup //--------------------------------------------------------- -void MidiInstrument::populatePatchPopup(QMenu* menu, int chan, MType songType, bool drum) +void MidiInstrument::populatePatchPopup(PopupMenu* menu, int chan, MType songType, bool drum) { menu->clear(); int mask = 0; @@ -905,7 +906,9 @@ void MidiInstrument::populatePatchPopup(QMenu* menu, int chan, MType songType, b if (pg.size() > 1) { for (ciPatchGroup i = pg.begin(); i != pg.end(); ++i) { PatchGroup* pgp = *i; - QMenu* pm = menu->addMenu(pgp->name); + //QMenu* pm = menu->addMenu(pgp->name); + PopupMenu* pm = new PopupMenu(pgp->name, menu, menu->stayOpen()); // Use the parent stayOpen here. + menu->addMenu(pm); pm->setFont(config.fonts[0]); const PatchList& pl = pgp->patches; for (ciPatch ipl = pl.begin(); ipl != pl.end(); ++ipl) { diff --git a/muse2/muse/instruments/minstrument.h b/muse2/muse/instruments/minstrument.h index a8fb1168..15942537 100644 --- a/muse2/muse/instruments/minstrument.h +++ b/muse2/muse/instruments/minstrument.h @@ -14,7 +14,8 @@ #include class MidiPort; -class QMenu; +//class QMenu; +class PopupMenu; class MidiPlayEvent; class Xml; class EventList; @@ -118,7 +119,8 @@ class MidiInstrument { virtual void reset(int, MType); virtual QString getPatchName(int,int,MType,bool); - virtual void populatePatchPopup(QMenu*, int, MType, bool); + //virtual void populatePatchPopup(QMenu*, int, MType, bool); + virtual void populatePatchPopup(PopupMenu*, int, MType, bool); void read(Xml&); void write(int level, Xml&); diff --git a/muse2/muse/liste/editevent.cpp b/muse2/muse/liste/editevent.cpp index b162a3e6..0643c34d 100644 --- a/muse2/muse/liste/editevent.cpp +++ b/muse2/muse/liste/editevent.cpp @@ -36,6 +36,7 @@ #include "midiedit/drummap.h" #include "instruments/minstrument.h" #include "midi.h" +#include "popupmenu.h" //--------------------------------------------------------- // string2qhex @@ -715,7 +716,9 @@ void EditCtrlDialog::newController() cll->add(channel, vl); //song->update(SC_MIDI_CONTROLLER_ADD); } - for (int idx = 0; ;++idx) { + //for (int idx = 0; ;++idx) { + int idx = 0; + for (; idx < ctrlList->count() ;++idx) { // p4.0.25 Fix segfault QString str = ctrlList->item(idx)->text(); if (s == str) { @@ -723,14 +726,21 @@ void EditCtrlDialog::newController() ctrlListClicked(ctrlList->item(idx)); break; } - if (str.isNull()) { - ctrlList->addItem(s); - 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); + ctrlList->item(idx)->setSelected(true); + ctrlListClicked(ctrlList->item(idx)); + break; } + break; } } @@ -844,7 +854,8 @@ void EditCtrlDialog::instrPopup() MidiInstrument* instr = midiPorts[port].instrument(); ///instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM); - QMenu* pup = new QMenu(this); + //QMenu* pup = new QMenu(this); + PopupMenu* pup = new PopupMenu(this); instr->populatePatchPopup(pup, channel, song->mtype(), track->type() == Track::DRUM); ///if(pop->actions().count() == 0) diff --git a/muse2/muse/midictrl.cpp b/muse2/muse/midictrl.cpp index 66f8d87e..4cf1886a 100644 --- a/muse2/muse/midictrl.cpp +++ b/muse2/muse/midictrl.cpp @@ -138,16 +138,86 @@ void initMidiController() defaultMidiController.add(&panCtrl); } +//--------------------------------------------------------- +// midiCtrlNumString +//--------------------------------------------------------- + +QString midiCtrlNumString(int ctrl, bool fullyQualified) +{ + int h = (ctrl >> 8) & 0xff; + int l = ctrl & 0xff; + QString s1 = QString("%1").arg(h); + QString s2 = ( l == 0xff ? QString("* ") : QString("%1 ").arg(l) ); + MidiController::ControllerType type = midiControllerType(ctrl); + switch (type) + { + case MidiController::Controller7: + if(fullyQualified) + return s2; + else + return QString(); + case MidiController::Controller14: + return s1 + QString("CF") + s2; + case MidiController::RPN: + return s1 + QString("R") + s2; + case MidiController::NRPN: + return s1 + QString("N") + s2; + case MidiController::Pitch: // Don't show internal controller numbers. + return QString(); + case MidiController::Program: + return QString(); + case MidiController::Velo: + return QString(); + case MidiController::RPN14: + return s1 + QString("RF") + s2; + case MidiController::NRPN14: + return s1 + QString("NF") + s2; + } + return s1 + QString("?") + s2; +} + //--------------------------------------------------------- // midiCtrlName //--------------------------------------------------------- -QString midiCtrlName(int ctrl) +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); + QString s2 = ( l == 0xff ? QString("*") : QString("%1").arg(l) ); + MidiController::ControllerType type = midiControllerType(ctrl); + switch (type) { - if (ctrl < 0x10000) - return QString(ctrlName[ctrl]); - return QString("?N?"); + case MidiController::Controller7: + if(fullyQualified) + return s2 + QString(" ") + QString(ctrlName[l]); + else + return QString(ctrlName[l]); + case MidiController::Controller14: + return s1 + QString("CF") + s2; + case MidiController::RPN: + return s1 + QString("R") + s2; + case MidiController::NRPN: + return s1 + QString("N") + s2; + case MidiController::Pitch: + return QString("Pitch"); + case MidiController::Program: + return QString("Program"); + case MidiController::Velo: + return QString("Velocity"); + case MidiController::RPN14: + return s1 + QString("RF") + s2; + case MidiController::NRPN14: + return s1 + QString("NF") + s2; } + return s1 + QString("?") + s2; +} //--------------------------------------------------------- // MidiController diff --git a/muse2/muse/midictrl.h b/muse2/muse/midictrl.h index 27f8e7be..3b18ba91 100644 --- a/muse2/muse/midictrl.h +++ b/muse2/muse/midictrl.h @@ -243,7 +243,8 @@ extern MidiController::ControllerType midiControllerType(int num); extern const QString& int2ctrlType(int n); extern MidiController::ControllerType ctrlType2Int(const QString& s); -extern QString midiCtrlName(int ctrl); +extern QString midiCtrlName(int ctrl, bool fullyQualified = false); +extern QString midiCtrlNumString(int ctrl, bool fullyQualified = false); extern MidiController veloCtrl; diff --git a/muse2/muse/mixer/astrip.cpp b/muse2/muse/mixer/astrip.cpp index 265061ad..c1e92e59 100644 --- a/muse2/muse/mixer/astrip.cpp +++ b/muse2/muse/mixer/astrip.cpp @@ -1185,7 +1185,7 @@ static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, if(chans > 0) { - PopupMenu* chpup = new PopupMenu(lb); + PopupMenu* chpup = new PopupMenu(lb, true); chpup->setTitle(track->name()); for(int ch = 0; ch < chans; ++ch) { @@ -1270,7 +1270,7 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu { // If more than one channel, create the sub-menu. if(chans > 1) - chpup = new PopupMenu(pup); + chpup = new PopupMenu(pup, true); if(isOutput) { @@ -1356,7 +1356,7 @@ static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenu { // If more than two channels, create the sub-menu. if(chans > 2) - chpup = new PopupMenu(pup); + chpup = new PopupMenu(pup, true); if(isOutput) { @@ -1460,7 +1460,7 @@ static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMen if(chans > 0) { - PopupMenu* chpup = new PopupMenu(lb); + PopupMenu* chpup = new PopupMenu(lb, true); chpup->setTitle(track->name()); if(chans > 1) chpup->addAction(new MenuTitleItem("", chpup)); @@ -1597,7 +1597,7 @@ static int addMidiPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenuMap& mm, RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); - PopupMenu* subp = new PopupMenu(pup); + PopupMenu* subp = new PopupMenu(pup, true); subp->setTitle(md->name()); int chanmask = 0; @@ -1830,11 +1830,11 @@ void AudioStrip::iRoutePressed() // pup->addSeparator(); pup->addAction(new MenuTitleItem(tr("Soloing chain"), pup)); - PopupMenu* subp = new PopupMenu(pup); + PopupMenu* subp = new PopupMenu(pup, true); subp->setTitle(tr("Audio sends")); pup->addMenu(subp); gid = addOutPorts(t, subp, gid, gRoutingMenuMap, -1, -1, false); - subp = new PopupMenu(pup); + subp = new PopupMenu(pup, true); subp->setTitle(tr("Midi port sends")); pup->addMenu(subp); addMidiPorts(t, subp, gid, gRoutingMenuMap, false); @@ -1980,7 +1980,7 @@ void AudioStrip::oRoutePressed() // pup->addSeparator(); pup->addAction(new MenuTitleItem(tr("Soloing chain"), pup)); - PopupMenu* subp = new PopupMenu(pup); + PopupMenu* subp = new PopupMenu(pup, true); subp->setTitle(tr("Audio returns")); pup->addMenu(subp); gid = addInPorts(t, subp, gid, gRoutingMenuMap, -1, -1, true); diff --git a/muse2/muse/synth.cpp b/muse2/muse/synth.cpp index 521c7d63..4f43a02a 100644 --- a/muse2/muse/synth.cpp +++ b/muse2/muse/synth.cpp @@ -17,7 +17,7 @@ #include #include -#include +//#include #include "app.h" #include "synth.h" @@ -35,6 +35,7 @@ #include "midiseq.h" #include "midictrl.h" //#include "stringparam.h" +#include "popupmenu.h" std::vector synthis; // array of available synthis @@ -864,7 +865,7 @@ const char* MessSynthIF::getPatchName(int channel, int prog, MType type, bool dr // populatePatchPopup //--------------------------------------------------------- -void MessSynthIF::populatePatchPopup(QMenu* menu, int ch, MType, bool) +void MessSynthIF::populatePatchPopup(PopupMenu* menu, int ch, MType, bool) { menu->clear(); const MidiPatch* mp = _mess->getPatchInfo(ch, 0); diff --git a/muse2/muse/synth.h b/muse2/muse/synth.h index b11ea2d9..88fa70b8 100644 --- a/muse2/muse/synth.h +++ b/muse2/muse/synth.h @@ -22,7 +22,8 @@ #include -class QMenu; +//class QMenu; +class PopupMenu; //class MidiEvent; class MidiPlayEvent; @@ -147,7 +148,8 @@ class SynthIF { 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(QMenu*, int, MType, bool) = 0; + virtual void populatePatchPopup(PopupMenu*, int, MType, bool) = 0; virtual void write(int level, Xml& xml) const = 0; virtual float getParameter(unsigned long idx) const = 0; virtual void setParameter(unsigned long idx, float value) = 0; @@ -231,7 +233,8 @@ class SynthI : public AudioTrack, public MidiDevice, return _sif->getPatchName(ch, prog, t, dr); } - virtual void populatePatchPopup(QMenu* m, int i, MType t, bool d) { + //virtual void populatePatchPopup(QMenu* m, int i, MType t, bool d) { + virtual void populatePatchPopup(PopupMenu* m, int i, MType t, bool d) { _sif->populatePatchPopup(m, i, t, d); } @@ -313,7 +316,8 @@ class MessSynthIF : public SynthIF { 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(QMenu*, int, MType, bool); + virtual void populatePatchPopup(PopupMenu*, int, MType, bool); virtual void write(int level, Xml& xml) const; virtual float getParameter(unsigned long) const { return 0.0; } virtual void setParameter(unsigned long, float) {} diff --git a/muse2/muse/ticksynth.cpp b/muse2/muse/ticksynth.cpp index c5d3a1e7..7456b856 100644 --- a/muse2/muse/ticksynth.cpp +++ b/muse2/muse/ticksynth.cpp @@ -9,7 +9,8 @@ #include "ticksynth.h" #include "default_click.h" -#include +//#include +#include "popupmenu.h" // Added by Tim. p3.3.18 //#define METRONOME_DEBUG @@ -90,7 +91,8 @@ class MetronomeSynthIF : public SynthIF 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(QMenu*, int, MType, bool) {}; + virtual void populatePatchPopup(PopupMenu*, int, MType, bool) {}; virtual void write(int, Xml&) const {} virtual float getParameter(unsigned long) const { return 0.0; } virtual void setParameter(unsigned long, float) {} diff --git a/muse2/muse/vst.h b/muse2/muse/vst.h index d41502e5..bb675c22 100644 --- a/muse2/muse/vst.h +++ b/muse2/muse/vst.h @@ -10,7 +10,8 @@ #include "synth.h" -class QMenu; +//class QMenu; +class PopupMenu; struct _FSTHandle; struct _FST; @@ -76,7 +77,8 @@ class VstSynthIF : public SynthIF 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(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; virtual void setParameter(unsigned long idx, float value); diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp index acdfb42f..47576823 100644 --- a/muse2/muse/widgets/mtrackinfo.cpp +++ b/muse2/muse/widgets/mtrackinfo.cpp @@ -1035,6 +1035,29 @@ void MidiTrackInfo::iPanChanged(int val) song->update(SC_MIDI_CONTROLLER); } +//--------------------------------------------------------- +// instrPopupActivated +//--------------------------------------------------------- + +void MidiTrackInfo::instrPopupActivated(QAction* act) +{ + printf("MidiTrackInfo::instrPopupActivated\n"); // REMOVE Tim + + if(act && selected) + { + int rv = act->data().toInt(); + if(rv != -1) + { + MidiTrack* track = (MidiTrack*)selected; + int channel = track->outChannel(); + int port = track->outPort(); + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, rv); + audio->msgPlayMidiEvent(&ev); + updateTrackInfo(-1); + } + } +} + //--------------------------------------------------------- // instrPopup //--------------------------------------------------------- @@ -1047,7 +1070,9 @@ void MidiTrackInfo::instrPopup() int channel = track->outChannel(); int port = track->outPort(); MidiInstrument* instr = midiPorts[port].instrument(); - QMenu* pup = new QMenu; + //QMenu* pup = new QMenu; + PopupMenu* pup = new PopupMenu(true); + ///instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM); instr->populatePatchPopup(pup, channel, song->mtype(), track->type() == Track::DRUM); @@ -1059,14 +1084,21 @@ void MidiTrackInfo::instrPopup() return; } + connect(pup, SIGNAL(triggered(QAction*)), SLOT(instrPopupActivated(QAction*))); + //connect(pup, SIGNAL(hovered(QAction*)), SLOT(instrPopupActivated(QAction*))); + ///QAction *act = pop->exec(iPatch->mapToGlobal(QPoint(10,5))); QAction *act = pup->exec(iPatch->mapToGlobal(QPoint(10,5))); - if (act) { - int rv = act->data().toInt(); - MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, rv); - audio->msgPlayMidiEvent(&ev); - updateTrackInfo(-1); - } + if(act) + { + int rv = act->data().toInt(); + if(rv != -1) + { + MidiPlayEvent ev(0, port, channel, ME_CONTROLLER, CTRL_PROGRAM, rv); + audio->msgPlayMidiEvent(&ev); + updateTrackInfo(-1); + } + } delete pup; } diff --git a/muse2/muse/widgets/mtrackinfo.h b/muse2/muse/widgets/mtrackinfo.h index 4e06f1d0..0e559f33 100644 --- a/muse2/muse/widgets/mtrackinfo.h +++ b/muse2/muse/widgets/mtrackinfo.h @@ -48,6 +48,7 @@ class MidiTrackInfo : public QWidget, public Ui::MidiTrackInfoBase void outRoutesPressed(); void routingPopupMenuActivated(QAction*); //void routingPopupViewActivated(const QModelIndex&); + void instrPopupActivated(QAction*); protected slots: virtual void heartBeat(); diff --git a/muse2/muse/widgets/popupmenu.cpp b/muse2/muse/widgets/popupmenu.cpp index 862bda91..b59e8d43 100644 --- a/muse2/muse/widgets/popupmenu.cpp +++ b/muse2/muse/widgets/popupmenu.cpp @@ -10,21 +10,44 @@ //#include #include +#include #include +#include +#include +#include +//#include + #include //#include #include "popupmenu.h" + //====================== // PopupMenu //====================== -PopupMenu::PopupMenu(QWidget* parent) - : QMenu(parent) +//PopupMenu::PopupMenu() +//{ +// init(); +//} + +PopupMenu::PopupMenu(bool stayOpen) + : _stayOpen(stayOpen) { - // Menus will trigger! Set to make sure our trigger handlers ignore menus. - menuAction()->setData(-1); + init(); +} + +PopupMenu::PopupMenu(QWidget* parent, bool stayOpen) + : QMenu(parent), _stayOpen(stayOpen) +{ + init(); +} + +PopupMenu::PopupMenu(const QString& title, QWidget* parent, bool stayOpen) + : QMenu(title, parent), _stayOpen(stayOpen) +{ + init(); } PopupMenu::~PopupMenu() @@ -32,6 +55,23 @@ PopupMenu::~PopupMenu() //printf("PopupMenu::~PopupMenu\n"); } +void PopupMenu::init() +{ + // Menus will trigger! Set to make sure our trigger handlers ignore menus. + menuAction()->setData(-1); + + //_stayOpen = false; + moveDelta = 0; + + #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL + timer = new QTimer(this); + timer->setInterval(100); + timer->setSingleShot(false); + connect(this, SIGNAL(hovered(QAction*)), SLOT(popHovered(QAction*))); + connect(timer, SIGNAL(timeout()), SLOT(timerHandler())); + #endif // POPUP_MENU_DISABLE_AUTO_SCROLL +} + void PopupMenu::clear() { QList list = actions(); @@ -49,6 +89,11 @@ void PopupMenu::clear() // Now let QT remove and delete this menu's actions. QMenu::clear(); + + #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL + connect(this, SIGNAL(hovered(QAction*)), SLOT(popHovered(QAction*))); + connect(timer, SIGNAL(timeout()), SLOT(timerHandler())); + #endif // POPUP_MENU_DISABLE_AUTO_SCROLL } QAction* PopupMenu::findActionFromData(QVariant v) @@ -69,8 +114,175 @@ QAction* PopupMenu::findActionFromData(QVariant v) return 0; } +bool PopupMenu::event(QEvent* event) +{ + //printf("PopupMenu::event type:%d\n", event->type()); // REMOVE Tim. + + #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL + if(event->type() == QEvent::MouseMove) + { + QMouseEvent* e = static_cast(event); + QPoint globPos = e->globalPos(); + //QPoint pos = e->pos(); + int dw = QApplication::desktop()->width(); // We want the whole thing if multiple monitors. + + //printf("PopupMenu::event MouseMove: pos x:%d y:%d globPos x:%d y:%d\n", + // pos.x(), pos.y(), globPos.x(), globPos.y()); // REMOVE Tim. + + /* + //QAction* action = actionAt(globPos); + QAction* action = actionAt(pos); + if(action) + { + QRect r = actionGeometry(action); + //printf(" act x:%d y:%d w:%d h:%d popup px:%d py:%d pw:%d ph:%d\n", + // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. + + //action->hover(); + } + */ + + if(x() < 0 && globPos.x() <= 0) // If on the very first pixel (or beyond) + { + moveDelta = 32; + if(!timer->isActive()) + timer->start(); + event->accept(); + return true; + } + else + if(x() + width() >= dw && globPos.x() >= (dw -1)) // If on the very last pixel (or beyond) + { + moveDelta = -32; + if(!timer->isActive()) + timer->start(); + event->accept(); + return true; + } + + if(timer->isActive()) + timer->stop(); + + //event->accept(); + //return true; + + event->ignore(); // Pass it on + //return QMenu::event(event); + } + #endif // POPUP_MENU_DISABLE_AUTO_SCROLL + /* + else + if(event->type() == QEvent::HoverEnter) + { + // Nope! Hovering over menu items did not invoke this. + printf("PopupMenu::event hover\n"); // REMOVE Tim. + QHoverEvent* he = static_cast(event); + QPoint oldPos = he->oldPos(); + QPoint pos = he->pos(); + + QAction* action = actionAt(pos); + + if(action) + { + QRect r = actionGeometry(action); + printf("PopupMenu::event hover: act x:%d y:%d w:%d h:%d popup px:%d py:%d pw:%d ph:%d\n", + r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. + printf(" pos x:%d y:%d oldPos px:%d py:%d\n", + pos.x(), pos.y(), oldPos.x(), oldPos.y()); // REMOVE Tim. + + + } + + + //return true; + } + */ + + return QMenu::event(event); +} + +#ifndef POPUP_MENU_DISABLE_AUTO_SCROLL +void PopupMenu::timerHandler() +{ + // printf("PopupMenu::timerHandler\n"); // REMOVE Tim. + + //if(!isVisible() || !hasFocus()) + if(!isVisible()) + { + timer->stop(); + return; + } + + int dw = QApplication::desktop()->width(); // We want the whole thing if multiple monitors. + int nx = x() + moveDelta; + if(moveDelta < 0 && nx + width() < dw) + { + timer->stop(); + nx = dw - width(); + } + else + if(moveDelta > 0 && nx > 0) + { + timer->stop(); + nx = 0; + } + + move(nx, y()); +} + +void PopupMenu::popHovered(QAction* action) +{ + //timer->stop(); + + //moveDelta = 0; + if(action) + { + int dw = QApplication::desktop()->width(); // We want the whole thing if multiple monitors. + + QRect r = actionGeometry(action); + //printf("PopupMenu::popHovered x:%d y:%d w:%d h:%d px:%d py:%d pw:%d ph:%d\n", + // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. + //printf("PopupMenu::popHovered x:%d y:%d w:%d h:%d px:%d py:%d pw:%d ph:%d dtw:%d\n", + // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height(), dw); // REMOVE Tim. + //int x = r.x() + ctrlSubPop->x(); + if(x() + r.x() < 0) + //setGeometry(0, y(), width(), height()); + //scroll(-x, 0); + //move(-r.x() + 32, y()); // Allow some of left column to show so that mouse can move over it. + //move(-r.x() + r.width(), y()); // Allow some of left column to show so that mouse can move over it. + //moveDelta = x() - r.x() + 32; + move(-r.x(), y()); + else + if(r.x() + r.width() + x() > dw) + //setGeometry(1200 - r.x() - r.width(), y(), width(), height()); + //scroll(-x + 1200, 0); + //move(dw - r.x() - r.width() - 32, y()); // Allow some of right column to show so that mouse can move over it. + //move(dw - r.x(), y()); // Allow some of right column to show so that mouse can move over it. + //moveDelta = x() + dw - r.x() - r.width() - 32; + move(dw - r.x() - r.width(), y()); + } + + //if(moveDelta == 0) + // timer->stop(); + +} +#endif // POPUP_MENU_DISABLE_AUTO_SCROLL + void PopupMenu::mouseReleaseEvent(QMouseEvent *e) { + #ifdef POPUP_MENU_DISABLE_STAY_OPEN + QMenu::mouseReleaseEvent(e); + return; + + #else + if(!_stayOpen) + { + QMenu::mouseReleaseEvent(e); + return; + } + + //printf("PopupMenu::mouseReleaseEvent\n"); // REMOVE Tim. + //Q_D(QMenu); //if (d->mouseEventTaken(e)) // return; @@ -106,6 +318,7 @@ void PopupMenu::mouseReleaseEvent(QMouseEvent *e) // d->hideUpToMenuBar(); // } QMenu::mouseReleaseEvent(e); + #endif // POPUP_MENU_DISABLE_STAY_OPEN } /* diff --git a/muse2/muse/widgets/popupmenu.h b/muse2/muse/widgets/popupmenu.h index c06d51f4..4982d199 100644 --- a/muse2/muse/widgets/popupmenu.h +++ b/muse2/muse/widgets/popupmenu.h @@ -11,7 +11,15 @@ #ifndef __POPUPMENU_H__ #define __POPUPMENU_H__ +// Just in case Qt ever adds these features natively, we would need to turn our features off! +//#define POPUP_MENU_DISABLE_STAY_OPEN +//#define POPUP_MENU_DISABLE_AUTO_SCROLL + #include +#ifndef POPUP_MENU_DISABLE_AUTO_SCROLL + #include +#endif + //#include //#include @@ -19,20 +27,40 @@ class QWidget; class QMouseEvent; class QVariant; class QAction; +class QEvent; +//class QTimer; //class QStandardItemModel; class PopupMenu : public QMenu { Q_OBJECT + bool _stayOpen; + #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL + QTimer* timer; + #endif + int moveDelta; + void init(); + + private slots: + #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL + void popHovered(QAction*); + void timerHandler(); + #endif + protected: void mouseReleaseEvent(QMouseEvent *); + bool event(QEvent*); public: - PopupMenu(QWidget* parent=0); + //PopupMenu(); + PopupMenu(bool stayOpen); + PopupMenu(QWidget* parent=0, bool stayOpen = false); + PopupMenu(const QString& title, QWidget* parent = 0, bool stayOpen = false); ~PopupMenu(); void clear(); QAction* findActionFromData(QVariant); + bool stayOpen() { return _stayOpen; } }; -- cgit v1.2.3 From 921d1536f9fd2db8e0995a26929141cd38a5cc6d Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Thu, 19 May 2011 08:19:09 +0000 Subject: remove a debug message --- muse2/muse/widgets/mtrackinfo.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp index 47576823..e6e618bd 100644 --- a/muse2/muse/widgets/mtrackinfo.cpp +++ b/muse2/muse/widgets/mtrackinfo.cpp @@ -1041,7 +1041,7 @@ void MidiTrackInfo::iPanChanged(int val) void MidiTrackInfo::instrPopupActivated(QAction* act) { - printf("MidiTrackInfo::instrPopupActivated\n"); // REMOVE Tim + //printf("MidiTrackInfo::instrPopupActivated\n"); // REMOVE Tim if(act && selected) { -- cgit v1.2.3 From b5bdb59699abd38a3aa90dfb4d9882b2be7f5be0 Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Fri, 20 May 2011 03:59:53 +0000 Subject: Popup menus: If stay-open mode, space triggers item and double-click simulates return (closing). --- muse2/ChangeLog | 2 + muse2/muse/audioconvert.cpp | 3 +- muse2/muse/audioconvert.h | 3 +- muse2/muse/liste/editevent.cpp | 5 +- muse2/muse/widgets/popupmenu.cpp | 166 ++++++++++++++++++++++----------------- muse2/muse/widgets/popupmenu.h | 5 +- 6 files changed, 105 insertions(+), 79 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 956b0c3f..01e6645d 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,5 @@ +20.05.2011: + - Popup menus: If stay-open mode, space triggers item and double-click simulates return (closing). (Tim) 19.05.2011: * Feature: Popup menus now auto-scroll if too large to fit on desktop. (p4.0.25 Tim) Added auto-scroll to my class PopupMenu. Added selectable stay-open. TODO: Use it more, where needed. diff --git a/muse2/muse/audioconvert.cpp b/muse2/muse/audioconvert.cpp index 552b5e95..ced8e703 100644 --- a/muse2/muse/audioconvert.cpp +++ b/muse2/muse/audioconvert.cpp @@ -5,7 +5,8 @@ // // (C) Copyright 1999-2009 Werner Schweer (ws@seh.de) // -// Audio converter module created by Tim terminator356 +// Audio converter module created by Tim +// (C) Copyright 2009-2011 Tim E. Real (terminator356 A T sourceforge D O T net) //========================================================= #include diff --git a/muse2/muse/audioconvert.h b/muse2/muse/audioconvert.h index 039af912..0933de60 100644 --- a/muse2/muse/audioconvert.h +++ b/muse2/muse/audioconvert.h @@ -5,7 +5,8 @@ // // (C) Copyright 1999-2009 Werner Schweer (ws@seh.de) // -// Audio converter module created by Tim terminator356 +// Audio converter module created by Tim +// (C) Copyright 2009-2011 Tim E. Real (terminator356 A T sourceforge D O T net) //========================================================= #ifndef __AUDIOCONVERT_H__ diff --git a/muse2/muse/liste/editevent.cpp b/muse2/muse/liste/editevent.cpp index 0643c34d..fd74d5d3 100644 --- a/muse2/muse/liste/editevent.cpp +++ b/muse2/muse/liste/editevent.cpp @@ -12,7 +12,7 @@ #include #include #include -#include +//#include #include #include #include @@ -680,7 +680,8 @@ EditCtrlDialog::EditCtrlDialog(int tick, const Event& event, void EditCtrlDialog::newController() { - QMenu* pup = new QMenu(this); + //QMenu* pup = new QMenu(this); + PopupMenu* pup = new PopupMenu(this); //pup->setCheckable(this);//not necessary in Qt4 // // populate popup with all controllers available for diff --git a/muse2/muse/widgets/popupmenu.cpp b/muse2/muse/widgets/popupmenu.cpp index b59e8d43..263c8475 100644 --- a/muse2/muse/widgets/popupmenu.cpp +++ b/muse2/muse/widgets/popupmenu.cpp @@ -6,6 +6,7 @@ // (C) Copyright 1999-2010 Werner Schweer (ws@seh.de) // // PopupMenu sub-class of QMenu created by Tim. +// (C) Copyright 2010-2011 Tim E. Real (terminator356 A T sourceforge D O T net) //========================================================= //#include @@ -96,7 +97,7 @@ void PopupMenu::clear() #endif // POPUP_MENU_DISABLE_AUTO_SCROLL } -QAction* PopupMenu::findActionFromData(QVariant v) +QAction* PopupMenu::findActionFromData(QVariant v) const { QList list = actions(); for(int i = 0; i < list.size(); ++i) @@ -118,86 +119,105 @@ bool PopupMenu::event(QEvent* event) { //printf("PopupMenu::event type:%d\n", event->type()); // REMOVE Tim. - #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL - if(event->type() == QEvent::MouseMove) + switch(event->type()) { - QMouseEvent* e = static_cast(event); - QPoint globPos = e->globalPos(); - //QPoint pos = e->pos(); - int dw = QApplication::desktop()->width(); // We want the whole thing if multiple monitors. - - //printf("PopupMenu::event MouseMove: pos x:%d y:%d globPos x:%d y:%d\n", - // pos.x(), pos.y(), globPos.x(), globPos.y()); // REMOVE Tim. - - /* - //QAction* action = actionAt(globPos); - QAction* action = actionAt(pos); - if(action) - { - QRect r = actionGeometry(action); - //printf(" act x:%d y:%d w:%d h:%d popup px:%d py:%d pw:%d ph:%d\n", - // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. - - //action->hover(); - } - */ - - if(x() < 0 && globPos.x() <= 0) // If on the very first pixel (or beyond) - { - moveDelta = 32; - if(!timer->isActive()) - timer->start(); - event->accept(); - return true; + #ifndef POPUP_MENU_DISABLE_STAY_OPEN + case QEvent::MouseButtonDblClick: + { + if(_stayOpen) + { + QMouseEvent* e = static_cast(event); + if(e->modifiers() == Qt::NoModifier) + { + event->accept(); + // Convert into a return press, which selects the item and closes the menu. + // Note that with double click, it's a press followed by release followed by double click. + // That would toggle our item twice eg on->off->on, which is hopefully OK. + QKeyEvent ke(QEvent::KeyPress, Qt::Key_Return, Qt::NoModifier); + //ke.ignore(); // Pass it on + return QMenu::event(&ke); + } + } } - else - if(x() + width() >= dw && globPos.x() >= (dw -1)) // If on the very last pixel (or beyond) + break; + case QEvent::KeyPress: { - moveDelta = -32; - if(!timer->isActive()) - timer->start(); - event->accept(); - return true; + if(_stayOpen) + { + QKeyEvent* e = static_cast(event); + if(e->modifiers() == Qt::NoModifier && e->key() == Qt::Key_Space) + { + QAction* act = activeAction(); + if(act) + { + act->trigger(); + event->accept(); + return true; // We handled it. + } + } + } } - - if(timer->isActive()) - timer->stop(); + break; + #endif // POPUP_MENU_DISABLE_STAY_OPEN - //event->accept(); - //return true; - - event->ignore(); // Pass it on - //return QMenu::event(event); - } - #endif // POPUP_MENU_DISABLE_AUTO_SCROLL - /* - else - if(event->type() == QEvent::HoverEnter) - { - // Nope! Hovering over menu items did not invoke this. - printf("PopupMenu::event hover\n"); // REMOVE Tim. - QHoverEvent* he = static_cast(event); - QPoint oldPos = he->oldPos(); - QPoint pos = he->pos(); - - QAction* action = actionAt(pos); - - if(action) + #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL + case QEvent::MouseMove: { - QRect r = actionGeometry(action); - printf("PopupMenu::event hover: act x:%d y:%d w:%d h:%d popup px:%d py:%d pw:%d ph:%d\n", - r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. - printf(" pos x:%d y:%d oldPos px:%d py:%d\n", - pos.x(), pos.y(), oldPos.x(), oldPos.y()); // REMOVE Tim. - - - } - + QMouseEvent* e = static_cast(event); + QPoint globPos = e->globalPos(); + //QPoint pos = e->pos(); + int dw = QApplication::desktop()->width(); // We want the whole thing if multiple monitors. + + //printf("PopupMenu::event MouseMove: pos x:%d y:%d globPos x:%d y:%d\n", + // pos.x(), pos.y(), globPos.x(), globPos.y()); // REMOVE Tim. + + /* + //QAction* action = actionAt(globPos); + QAction* action = actionAt(pos); + if(action) + { + QRect r = actionGeometry(action); + //printf(" act x:%d y:%d w:%d h:%d popup px:%d py:%d pw:%d ph:%d\n", + // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. + + //action->hover(); + } + */ + + if(x() < 0 && globPos.x() <= 0) // If on the very first pixel (or beyond) + { + moveDelta = 32; + if(!timer->isActive()) + timer->start(); + event->accept(); + return true; + } + else + if(x() + width() >= dw && globPos.x() >= (dw -1)) // If on the very last pixel (or beyond) + { + moveDelta = -32; + if(!timer->isActive()) + timer->start(); + event->accept(); + return true; + } + + if(timer->isActive()) + timer->stop(); + + //event->accept(); + //return true; + + event->ignore(); // Pass it on + //return QMenu::event(event); + } + break; + #endif // POPUP_MENU_DISABLE_AUTO_SCROLL - //return true; + default: + break; } - */ - + return QMenu::event(event); } diff --git a/muse2/muse/widgets/popupmenu.h b/muse2/muse/widgets/popupmenu.h index 4982d199..47be57ae 100644 --- a/muse2/muse/widgets/popupmenu.h +++ b/muse2/muse/widgets/popupmenu.h @@ -6,6 +6,7 @@ // (C) Copyright 1999-2010 Werner Schweer (ws@seh.de) // // PopupMenu sub-class of QMenu created by Tim. +// (C) Copyright 2010-2011 Tim E. Real (terminator356 A T sourceforge D O T net) //========================================================= #ifndef __POPUPMENU_H__ @@ -59,8 +60,8 @@ class PopupMenu : public QMenu PopupMenu(const QString& title, QWidget* parent = 0, bool stayOpen = false); ~PopupMenu(); void clear(); - QAction* findActionFromData(QVariant); - bool stayOpen() { return _stayOpen; } + QAction* findActionFromData(QVariant) const; + bool stayOpen() const { return _stayOpen; } }; -- cgit v1.2.3 From 0ec95d49a1cdf886fc44f98f68adc703ca65b3ee Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Sat, 21 May 2011 23:16:32 +0000 Subject: added midi clef in track list + right click menu to select columns in track list --- muse2/muse/arranger/arranger.cpp | 4 ++ muse2/muse/arranger/tlist.cpp | 39 +++++++++++++ muse2/muse/arranger/tlist.h | 1 + muse2/muse/midiedit/scoreedit.h | 3 + muse2/muse/track.cpp | 5 ++ muse2/muse/track.h | 5 ++ muse2/muse/widgets/header.cpp | 119 +++++++++++++++++++++++++++----------- muse2/muse/widgets/header.h | 4 ++ muse2/share/templates/audio.med | 2 +- muse2/share/templates/default.med | 2 +- muse2/share/templates/midiGM.med | 2 +- muse2/share/templates/synti.med | 2 +- 12 files changed, 149 insertions(+), 39 deletions(-) diff --git a/muse2/muse/arranger/arranger.cpp b/muse2/muse/arranger/arranger.cpp index d74bed78..e1205d6f 100644 --- a/muse2/muse/arranger/arranger.cpp +++ b/muse2/muse/arranger/arranger.cpp @@ -69,6 +69,7 @@ void Arranger::setHeaderToolTips() header->setToolTip(COL_OPORT, tr("Midi output port or synth midi port")); header->setToolTip(COL_TIMELOCK, tr("Time Lock")); header->setToolTip(COL_AUTOMATION, tr("Automation parameter selection")); + header->setToolTip(COL_CLEF, tr("Notation clef")); } @@ -87,6 +88,7 @@ void Arranger::setHeaderWhatsThis() header->setWhatsThis(COL_OCHANNEL, tr("Midi/drum track: Output channel number.\nAudio track: Channels.\nMid/right-click to change.")); header->setWhatsThis(COL_OPORT, tr("Midi/drum track: Output port.\nSynth track: Assigned midi port.\nLeft-click to change.\nRight-click to show GUI.")); header->setWhatsThis(COL_TIMELOCK, tr("Time lock")); + header->setToolTip(COL_CLEF, tr("Notation clef. Select this tracks notation clef.")); } //--------------------------------------------------------- @@ -290,6 +292,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name) header->setColumnLabel(tr("Ch"), COL_OCHANNEL, 30); header->setColumnLabel(tr("T"), COL_TIMELOCK, fm1.width('T')+fw); header->setColumnLabel(tr("Automation"), COL_AUTOMATION, 75); + header->setColumnLabel(tr("Clef"), COL_CLEF, 75); header->setResizeMode(COL_RECORD, QHeaderView::Fixed); header->setResizeMode(COL_MUTE, QHeaderView::Fixed); header->setResizeMode(COL_SOLO, QHeaderView::Fixed); @@ -299,6 +302,7 @@ Arranger::Arranger(QMainWindow* parent, const char* name) header->setResizeMode(COL_OCHANNEL, QHeaderView::Fixed); header->setResizeMode(COL_TIMELOCK, QHeaderView::Fixed); header->setResizeMode(COL_AUTOMATION, QHeaderView::Interactive); + header->setResizeMode(COL_CLEF, QHeaderView::Interactive); setHeaderToolTips(); setHeaderWhatsThis(); diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index 4b531607..427047c2 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -44,6 +44,7 @@ #include "midiedit/drummap.h" #include "synth.h" #include "config.h" +#include "scoreedit.h" #ifdef DSSI_SUPPORT #include "dssihost.h" @@ -356,6 +357,18 @@ void TList::paint(const QRect& r) p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); } break; + case COL_CLEF: + if (track->isMidiTrack()) { + QString s = "no clef"; + if (((MidiTrack*)track)->getClef() == ScoreEdit::trebleClef) + s="Treble Clef"; + else if (((MidiTrack*)track)->getClef() == ScoreEdit::bassClef) + s="Bass Clef"; + else if (((MidiTrack*)track)->getClef() == ScoreEdit::grandStaff) + s="Grand Staff"; + p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); + } + break; default: break; } @@ -1054,6 +1067,32 @@ void TList::mousePressEvent(QMouseEvent* ev) mode = START_DRAG; switch (col) { + case COL_CLEF: + if (t->isMidiTrack()) { + QMenu* p = new QMenu; + p->addAction("Treble clef")->setData(0); + p->addAction("Bass clef")->setData(1); + p->addAction("Grand Staff")->setData(2); + + // Show the menu + QAction* act = p->exec(ev->globalPos(), 0); + switch (act->data().toInt()) { + case 0: + ((MidiTrack*)t)->setClef(ScoreEdit::trebleClef); + break; + case 1: + ((MidiTrack*)t)->setClef(ScoreEdit::bassClef); + break; + case 2: + ((MidiTrack*)t)->setClef(ScoreEdit::grandStaff); + break; + default: + break; + } + delete p; + } + + break; case COL_AUTOMATION: { if (!t->isMidiTrack()) { diff --git a/muse2/muse/arranger/tlist.h b/muse2/muse/arranger/tlist.h index 8bebef95..7691b6cc 100644 --- a/muse2/muse/arranger/tlist.h +++ b/muse2/muse/arranger/tlist.h @@ -36,6 +36,7 @@ enum TrackColumn { COL_OCHANNEL, COL_TIMELOCK, COL_AUTOMATION, + COL_CLEF, COL_NONE = -1 }; diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index 4004452f..f587483a 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -60,6 +60,7 @@ enum {CMD_COLOR_BLACK, CMD_COLOR_VELO, CMD_COLOR_PART, CMD_QUANTIZE, CMD_VELOCITY, CMD_CRESCENDO, CMD_NOTELEN }; + class ScoreCanvas; class EditToolBar; @@ -70,6 +71,8 @@ class EditToolBar; class ScoreEdit : public TopWin { Q_OBJECT + public: + enum clefTypes { trebleClef, bassClef, grandStaff }; private: virtual void closeEvent(QCloseEvent*); diff --git a/muse2/muse/track.cpp b/muse2/muse/track.cpp index 2a93968d..5dab4c09 100644 --- a/muse2/muse/track.cpp +++ b/muse2/muse/track.cpp @@ -369,6 +369,7 @@ MidiTrack::MidiTrack() init(); _events = new EventList; _mpevents = new MPEventList; + clefType=ScoreEdit::trebleClef; } //MidiTrack::MidiTrack(const MidiTrack& mt) @@ -388,6 +389,7 @@ MidiTrack::MidiTrack(const MidiTrack& mt, bool cloneParts) len = mt.len; compression = mt.compression; _recEcho = mt.recEcho(); + clefType=ScoreEdit::trebleClef; } MidiTrack::~MidiTrack() @@ -894,6 +896,7 @@ void MidiTrack::write(int level, Xml& xml) const xml.intTag(level, "len", len); xml.intTag(level, "compression", compression); xml.intTag(level, "automation", int(automationType())); + xml.intTag(level, "clef", int(clefType)); const PartList* pl = cparts(); for (ciPart p = pl->begin(); p != pl->end(); ++p) @@ -955,6 +958,8 @@ void MidiTrack::read(Xml& xml) _recEcho = xml.parseInt(); else if (tag == "automation") setAutomationType(AutomationType(xml.parseInt())); + else if (tag == "clef") + clefType = (ScoreEdit::clefTypes)xml.parseInt(); else if (Track::readProperties(xml, tag)) { // version 1.0 compatibility: if (tag == "track" && xml.majorVersion() == 1 && xml.minorVersion() == 0) diff --git a/muse2/muse/track.h b/muse2/muse/track.h index aec765da..d1dc3a6f 100644 --- a/muse2/muse/track.h +++ b/muse2/muse/track.h @@ -20,6 +20,7 @@ #include "route.h" #include "ctrl.h" #include "globaldefs.h" +#include "scoreedit.h" class Pipeline; class Xml; @@ -208,6 +209,7 @@ class MidiTrack : public Track { EventList* _events; // tmp Events during midi import MPEventList* _mpevents; // tmp Events druring recording static bool _isVisible; + ScoreEdit::clefTypes clefType; public: MidiTrack(); @@ -273,6 +275,9 @@ class MidiTrack : public Track { virtual bool canRecord() const { return true; } static void setVisible(bool t) { _isVisible = t; } static bool visible() { return _isVisible; } + + void setClef(ScoreEdit::clefTypes i) { clefType = i; } + ScoreEdit::clefTypes getClef() { return clefType; } }; //--------------------------------------------------------- diff --git a/muse2/muse/widgets/header.cpp b/muse2/muse/widgets/header.cpp index 16cc374b..00cbd29c 100644 --- a/muse2/muse/widgets/header.cpp +++ b/muse2/muse/widgets/header.cpp @@ -7,46 +7,56 @@ #include "header.h" #include "xml.h" +#include "popupmenu.h" #include #include +#include //--------------------------------------------------------- // readStatus //--------------------------------------------------------- void Header::readStatus(Xml& xml) - { - for (;;) { - Xml::Token token = xml.parse(); - const QString& tag = xml.s1(); - switch (token) { - case Xml::Error: - case Xml::End: - return; - case Xml::Text: - { - //QStringList l = QStringList::split(QString(" "), tag); - QStringList l = tag.split(QString(" "), QString::SkipEmptyParts); - int index = count() -1; - for (QStringList::Iterator it = l.begin(); it != l.end(); ++it) { - int section = visualIndex((*it).toInt()); - moveSection(section, index); - --index; - } - } - break; - case Xml::TagStart: - xml.unknown("Header"); - break; - case Xml::TagEnd: - if (tag ==objectName()) - return; - default: - break; - } - } - } +{ + + for (;;) { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) { + case Xml::Error: + case Xml::End: + return; + case Xml::Text: + { + //QStringList l = QStringList::split(QString(" "), tag); + 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); + setMovable(true); + moveSection(section, index); + if (isHidden) + hideSection(logialIdx); + else + showSection(logialIdx); + --index; + } + } + break; + case Xml::TagStart: + xml.unknown("Header"); + break; + case Xml::TagEnd: + if (tag ==objectName()) + return; + default: + break; + } + } +} //--------------------------------------------------------- // writeStatus @@ -57,8 +67,12 @@ void Header::writeStatus(int level, Xml& xml) const //xml.nput(level, "<%s> ", name()); xml.nput(level, "<%s> ", Xml::xmlString(objectName()).toLatin1().constData()); int n = count() - 1; - for (int i = n; i >= 0; --i) - xml.nput("%d ", logicalIndex(i)); + for (int i = n; i >= 0; --i) { + if (isSectionHidden(logicalIndex(i))) + xml.nput("%d ", -logicalIndex(i)); // hidden is stored as negative value + else + xml.nput("%d ", logicalIndex(i)); + } //xml.put("", name()); xml.put("", Xml::xmlString(objectName()).toLatin1().constData()); } @@ -73,8 +87,9 @@ Header::Header(QWidget* parent, const char* name) setObjectName(name); itemModel = new QStandardItemModel; setModel(itemModel); - //setResizeMode(QHeaderView::ResizeToContents); setDefaultSectionSize(30); + setStretchLastSection(true); + } //--------------------------------------------------------- @@ -86,7 +101,7 @@ void Header::setColumnLabel(const QString & text, int col, int width ) QStandardItem *sitem = new QStandardItem(text ); itemModel->setHorizontalHeaderItem(col, sitem); if (width > -1) - resizeSection(col, width); + resizeSection(col, width); } //--------------------------------------------------------- @@ -109,3 +124,37 @@ void Header::setWhatsThis(int col, const QString &text) item->setWhatsThis(text); } +void Header::mousePressEvent ( QMouseEvent * e ) +{ + if (e->button() == Qt::RightButton) { + + PopupMenu* p = new PopupMenu(); + p->disconnect(); + p->clear(); + p->setTitle(tr("Track Info Columns")); + QAction* act = 0; + + for(int i=1; i < count(); i++) { + act = p->addAction(itemModel->horizontalHeaderItem(logicalIndex(i))->text() + + "\t - "+ itemModel->horizontalHeaderItem(logicalIndex(i))->toolTip()); + + act->setCheckable(true); + act->setChecked(!isSectionHidden(logicalIndex(i))); + int data = logicalIndex(i); + act->setData(data); + } + connect(p, SIGNAL(triggered(QAction*)), SLOT(changeColumns(QAction*))); + p->exec(QCursor::pos()); + + delete p; + + } +} +void Header::changeColumns(QAction *a) +{ + int section = a->data().toInt(); + if (isSectionHidden(section)) + showSection(section); + else + hideSection(section); +} diff --git a/muse2/muse/widgets/header.h b/muse2/muse/widgets/header.h index 83680f8a..3e7b73a4 100644 --- a/muse2/muse/widgets/header.h +++ b/muse2/muse/widgets/header.h @@ -9,6 +9,7 @@ #define __HEADER_H__ #include +#include class QStandardItemModel; @@ -26,6 +27,9 @@ class Header : public QHeaderView { void setColumnLabel( const QString & s, int col, int width = -1 ); void setToolTip(int col, const QString &text); void setWhatsThis(int col, const QString &text); + void mousePressEvent ( QMouseEvent * e ); + private slots: + void changeColumns(QAction* a); }; #endif diff --git a/muse2/share/templates/audio.med b/muse2/share/templates/audio.med index 14cd9c47..85b9edb4 100644 --- a/muse2/share/templates/audio.med +++ b/muse2/share/templates/audio.med @@ -33,7 +33,7 @@ 1 298 298 -
7 6 5 4 3 2 1 0 8
+
9 8 7 6 5 4 3 2 1 0
0 266 diff --git a/muse2/share/templates/default.med b/muse2/share/templates/default.med index 8772f759..82390cc4 100644 --- a/muse2/share/templates/default.med +++ b/muse2/share/templates/default.med @@ -33,7 +33,7 @@ 1 418 456 -
8 7 6 5 4 3 2 1 0
+
9 8 7 6 5 4 3 2 1 0
0 266 diff --git a/muse2/share/templates/midiGM.med b/muse2/share/templates/midiGM.med index bbc04498..e5459c14 100644 --- a/muse2/share/templates/midiGM.med +++ b/muse2/share/templates/midiGM.med @@ -33,7 +33,7 @@ 1 298 298 -
7 6 5 4 3 2 1 0 8
+
9 8 7 6 5 4 3 2 1 0
0 266 diff --git a/muse2/share/templates/synti.med b/muse2/share/templates/synti.med index 1a14a9ce..1939dacb 100644 --- a/muse2/share/templates/synti.med +++ b/muse2/share/templates/synti.med @@ -33,7 +33,7 @@ 0 298 298 -
7 6 5 4 3 2 1 0 8
+
9 8 7 6 5 4 3 2 1 0
0 266 -- cgit v1.2.3 From c3d2b8170870d7c0025d902b675fac417019aa7b Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Sun, 22 May 2011 14:11:41 +0000 Subject: "don't quantize len" is now respected quantize in the drum editor automatically doesn't quantize len --- muse2/muse/functions.cpp | 7 ++++--- muse2/muse/functions.h | 2 +- muse2/muse/midiedit/drumedit.cpp | 8 +++++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index 3c6bbc89..ba5f33c4 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -108,7 +108,8 @@ bool quantize_notes(const set& parts) return false; quantize_notes(parts, quantize_dialog->range, (config.division*4)/(1<raster_power2), - quantize_dialog->strength, quantize_dialog->swing, quantize_dialog->threshold); + quantize_dialog->quant_len, quantize_dialog->strength, quantize_dialog->swing, + quantize_dialog->threshold); return true; } @@ -314,7 +315,7 @@ unsigned quantize_tick(unsigned tick, unsigned raster, int swing) return tick_dest3; } -void quantize_notes(const set& parts, int range, int raster, int strength, int swing, int threshold) +void quantize_notes(const set& parts, int range, int raster, bool quant_len, int strength, int swing, int threshold) { map events = get_events(parts, range); bool undo_started=false; @@ -338,7 +339,7 @@ void quantize_notes(const set& parts, int range, int raster, int strength unsigned end_tick = begin_tick + len; int len_diff = quantize_tick(end_tick, raster, swing) - end_tick; - if (abs(len_diff) > threshold) + if ((abs(len_diff) > threshold) && quant_len) len = len + len_diff*strength/100; if (len <= 0) diff --git a/muse2/muse/functions.h b/muse2/muse/functions.h index 2b6dc711..4d7be6e2 100644 --- a/muse2/muse/functions.h +++ b/muse2/muse/functions.h @@ -42,7 +42,7 @@ std::map get_events(const std::set& parts, int range); void modify_velocity(const std::set& parts, int range, int rate, int offset=0); void modify_off_velocity(const std::set& parts, int range, int rate, int offset=0); void modify_notelen(const std::set& parts, int range, int rate, int offset=0); -void quantize_notes(const std::set& parts, int range, int raster, int strength=100, int swing=0, int threshold=0); +void quantize_notes(const std::set& parts, int range, int raster, bool len=false, int strength=100, int swing=0, int threshold=0); void erase_notes(const std::set& parts, int range); void delete_overlaps(const std::set& parts, int range); void set_notelen(const std::set& parts, int range, int len); diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index 9e64d7a7..97ab092e 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -908,7 +908,13 @@ void DrumEdit::cmd(int cmd) case DrumCanvas::CMD_RESET: reset(); break; case DrumCanvas::CMD_MODIFY_VELOCITY: modify_velocity(partlist_to_set(parts())); break; case DrumCanvas::CMD_CRESCENDO: crescendo(partlist_to_set(parts())); break; - case DrumCanvas::CMD_QUANTIZE: quantize_notes(partlist_to_set(parts())); break; + case DrumCanvas::CMD_QUANTIZE: + if (quantize_dialog->exec()) + quantize_notes(partlist_to_set(parts()), quantize_dialog->range, + (config.division*4)/(1<raster_power2), + /* quant_len= */false, quantize_dialog->strength, + quantize_dialog->swing, quantize_dialog->threshold); + break; case DrumCanvas::CMD_ERASE_EVENT: erase_notes(partlist_to_set(parts())); break; case DrumCanvas::CMD_DEL: erase_notes(partlist_to_set(parts()),1); break; //delete selected events case DrumCanvas::CMD_DELETE_OVERLAPS: delete_overlaps(partlist_to_set(parts())); break; -- cgit v1.2.3 From 44e32358acdd41f03c24d59e7764913c86196b9e Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Sun, 22 May 2011 14:56:52 +0000 Subject: fixed crash when skipping selection in clef menu --- muse2/muse/arranger/tlist.cpp | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index 427047c2..6fea279a 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -1076,18 +1076,20 @@ void TList::mousePressEvent(QMouseEvent* ev) // Show the menu QAction* act = p->exec(ev->globalPos(), 0); - switch (act->data().toInt()) { - case 0: - ((MidiTrack*)t)->setClef(ScoreEdit::trebleClef); - break; - case 1: - ((MidiTrack*)t)->setClef(ScoreEdit::bassClef); - break; - case 2: - ((MidiTrack*)t)->setClef(ScoreEdit::grandStaff); - break; - default: - break; + if (act) { + switch (act->data().toInt()) { + case 0: + ((MidiTrack*)t)->setClef(ScoreEdit::trebleClef); + break; + case 1: + ((MidiTrack*)t)->setClef(ScoreEdit::bassClef); + break; + case 2: + ((MidiTrack*)t)->setClef(ScoreEdit::grandStaff); + break; + default: + break; + } } delete p; } -- cgit v1.2.3 From 53a36a7047584ce0e66e00815c501f59cac2fa14 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Sun, 22 May 2011 18:14:05 +0000 Subject: the track's clef is now respected when opening a new score window --- muse2/muse/midiedit/scoreedit.cpp | 136 ++++++++++++++++++++++++-------------- 1 file changed, 88 insertions(+), 48 deletions(-) diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index bbdd3d6f..b0e0eaf6 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -911,55 +911,99 @@ void ScoreEdit::write_configuration(int level, Xml& xml) void ScoreCanvas::add_staves(PartList* pl, bool all_in_one) { - staff_t staff(this); - - if (all_in_one) + if (!pl->empty()) { - staff.parts.clear(); - for (ciPart part_it=pl->begin(); part_it!=pl->end(); part_it++) - staff.parts.insert(part_it->second); - staff.cleanup_parts(); - - staff.type=GRAND_TOP; //FINDME_INITCLEF - staff.clef=VIOLIN; - staves.push_back(staff); - - staff.type=GRAND_BOTTOM; - staff.clef=BASS; - staves.push_back(staff); - } - else - { - set tracks; - for (ciPart it=pl->begin(); it!=pl->end(); it++) - tracks.insert(it->second->track()); - - TrackList* tracklist = song->tracks(); - // this loop is used for inserting track-staves in the - // correct order. simply iterating through tracks's contents - // would sort after the pointer values, i.e. randomly - for (ciTrack track_it=tracklist->begin(); track_it!=tracklist->end(); track_it++) - if (tracks.find(*track_it)!=tracks.end()) + staff_t staff(this); + + if (all_in_one) + { + ScoreEdit::clefTypes clef=((MidiTrack*)pl->begin()->second->track())->getClef(); + + staff.parts.clear(); + for (ciPart part_it=pl->begin(); part_it!=pl->end(); part_it++) { - staff.parts.clear(); - for (ciPart part_it=pl->begin(); part_it!=pl->end(); part_it++) - if (part_it->second->track() == *track_it) - staff.parts.insert(part_it->second); - staff.cleanup_parts(); - - staff.type=GRAND_TOP; //FINDME_INITCLEF - staff.clef=VIOLIN; - staves.push_back(staff); + if (((MidiTrack*)part_it->second->track())->getClef() != clef) + clef=ScoreEdit::grandStaff; + + staff.parts.insert(part_it->second); + } + staff.cleanup_parts(); - staff.type=GRAND_BOTTOM; - staff.clef=BASS; - staves.push_back(staff); + switch (clef) + { + case ScoreEdit::trebleClef: + staff.type=NORMAL; + staff.clef=VIOLIN; + staves.push_back(staff); + break; + + case ScoreEdit::bassClef: + staff.type=NORMAL; + staff.clef=BASS; + staves.push_back(staff); + break; + + case ScoreEdit::grandStaff: + staff.type=GRAND_TOP; + staff.clef=VIOLIN; + staves.push_back(staff); + + staff.type=GRAND_BOTTOM; + staff.clef=BASS; + staves.push_back(staff); + break; } + } + else + { + set tracks; + for (ciPart it=pl->begin(); it!=pl->end(); it++) + tracks.insert(it->second->track()); + + TrackList* tracklist = song->tracks(); + // this loop is used for inserting track-staves in the + // correct order. simply iterating through tracks's contents + // would sort after the pointer values, i.e. randomly + for (ciTrack track_it=tracklist->begin(); track_it!=tracklist->end(); track_it++) + if (tracks.find(*track_it)!=tracks.end()) + { + staff.parts.clear(); + for (ciPart part_it=pl->begin(); part_it!=pl->end(); part_it++) + if (part_it->second->track() == *track_it) + staff.parts.insert(part_it->second); + staff.cleanup_parts(); + + switch (((MidiTrack*)(*track_it))->getClef()) + { + case ScoreEdit::trebleClef: + staff.type=NORMAL; + staff.clef=VIOLIN; + staves.push_back(staff); + break; + + case ScoreEdit::bassClef: + staff.type=NORMAL; + staff.clef=BASS; + staves.push_back(staff); + break; + + case ScoreEdit::grandStaff: + staff.type=GRAND_TOP; + staff.clef=VIOLIN; + staves.push_back(staff); + + staff.type=GRAND_BOTTOM; + staff.clef=BASS; + staves.push_back(staff); + break; + } + } + } + + cleanup_staves(); + fully_recalculate(); + recalc_staff_pos(); } - - cleanup_staves(); - fully_recalculate(); - recalc_staff_pos(); } @@ -4221,8 +4265,6 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) * o drum list: scroll while dragging * * IMPORTANT TODO - * o add a select-clef-toolbox for tracks - * o respect the track's clef (has to be implemented first in muse) * 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 @@ -4268,8 +4310,6 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) * ( (2+2+3)/4 or (3+2+2)/4 instead of 7/4 ) * o maybe do expanding parts inside the msgChangeEvent or * msgNewEvent functions (see my e-mail) - * - * o make quantize and other stuff faster (by assymetric communication) */ -- cgit v1.2.3 From cebe18a6c4211f23bc7cad82b4d9a9611a46234f Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 23 May 2011 12:27:43 +0000 Subject: the "remove" function now supports velo- and length-thresholds --- muse2/muse/functions.cpp | 11 +- muse2/muse/functions.h | 2 +- muse2/muse/midiedit/scoreedit.cpp | 8 +- muse2/muse/widgets/function_dialogs/remove.cpp | 20 ++++ muse2/muse/widgets/function_dialogs/remove.h | 4 + muse2/muse/widgets/function_dialogs/removebase.ui | 129 +++++++++++++++++++++- 6 files changed, 162 insertions(+), 12 deletions(-) diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index ba5f33c4..1ad81693 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -119,7 +119,8 @@ bool erase_notes(const set& parts) if (!erase_dialog->exec()) return false; - erase_notes(parts,erase_dialog->range); + erase_notes(parts,erase_dialog->range, erase_dialog->velo_threshold, erase_dialog->velo_thres_used, + erase_dialog->len_threshold, erase_dialog->len_thres_used ); return true; } @@ -366,7 +367,7 @@ void quantize_notes(const set& parts, int range, int raster, bool quant_l } } -void erase_notes(const set& parts, int range) +void erase_notes(const set& parts, int range, int velo_threshold, bool velo_thres_used, int len_threshold, bool len_thres_used) { map events = get_events(parts, range); @@ -378,8 +379,10 @@ void erase_notes(const set& parts, int range) { Event& event=*(it->first); Part* part=it->second; - - audio->msgDeleteEvent(event, part, false, false, false); + if ( (!velo_thres_used && !len_thres_used) || + (velo_thres_used && event.velo() < velo_threshold) || + (len_thres_used && int(event.lenTick()) < len_threshold) ) + audio->msgDeleteEvent(event, part, false, false, false); } song->endUndo(SC_EVENT_REMOVED); diff --git a/muse2/muse/functions.h b/muse2/muse/functions.h index 4d7be6e2..18f6e3ec 100644 --- a/muse2/muse/functions.h +++ b/muse2/muse/functions.h @@ -43,7 +43,7 @@ void modify_velocity(const std::set& parts, int range, int rate, int offs void modify_off_velocity(const std::set& parts, int range, int rate, int offset=0); void modify_notelen(const std::set& parts, int range, int rate, int offset=0); void quantize_notes(const std::set& parts, int range, int raster, bool len=false, int strength=100, int swing=0, int threshold=0); -void erase_notes(const std::set& parts, int range); +void erase_notes(const std::set& parts, int range, int velo_threshold=0, bool velo_thres_used=false, int len_threshold=0, bool len_thres_used=false); void delete_overlaps(const std::set& parts, int range); void set_notelen(const std::set& parts, int range, int len); void move_notes(const std::set& parts, int range, signed int ticks); diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index b0e0eaf6..2636d4f2 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4255,27 +4255,23 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) /* BUGS and potential bugs - * o quantize always quantizes length. make this selectable! * o when the keymap is not used, this will probably lead to a bug * same when mastertrack is disabled * 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 * * CURRENT TODO - * o drum list: scroll while dragging + * o legato: extend length to next note * * IMPORTANT TODO * 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 legato: extend length to next note - * o delete: add velo and len threshold * o thin out: remove unneeded ctrl messages - * o in drum roll: changing the list causes undo to be triggered, WTF? - * o changing list is dead slow * * less important stuff + * o drum list: scroll while dragging * o controller view in score editor * o quantize-templates (everything is forced into a specified * rhythm) diff --git a/muse2/muse/widgets/function_dialogs/remove.cpp b/muse2/muse/widgets/function_dialogs/remove.cpp index 5ad272ab..4a875135 100644 --- a/muse2/muse/widgets/function_dialogs/remove.cpp +++ b/muse2/muse/widgets/function_dialogs/remove.cpp @@ -25,6 +25,10 @@ Remove::Remove(QWidget* parent) void Remove::pull_values() { range = range_group->checkedId(); + len_thres_used=len_checkbox->isChecked(); + len_threshold=len_spinbox->value(); + velo_thres_used=velo_checkbox->isChecked(); + velo_threshold=velo_spinbox->value(); } void Remove::accept() @@ -38,6 +42,10 @@ int Remove::exec() if ((range < 0) || (range > 3)) range=0; range_group->button(range)->setChecked(true); + len_checkbox->setChecked(len_thres_used); + len_spinbox->setValue(len_threshold); + velo_checkbox->setChecked(velo_thres_used); + velo_spinbox->setValue(velo_threshold); return QDialog::exec(); } @@ -56,6 +64,14 @@ void Remove::read_configuration(Xml& xml) case Xml::TagStart: if (tag == "range") range=xml.parseInt(); + else if (tag == "velo_threshold") + velo_threshold=xml.parseInt(); + else if (tag == "velo_thres_used") + velo_thres_used=xml.parseInt(); + else if (tag == "len_threshold") + len_threshold=xml.parseInt(); + else if (tag == "len_thres_used") + len_thres_used=xml.parseInt(); else xml.unknown("Erase"); break; @@ -74,5 +90,9 @@ void Remove::write_configuration(int level, Xml& xml) { xml.tag(level++, "erase"); xml.intTag(level, "range", range); + xml.intTag(level, "velo_threshold", velo_threshold); + xml.intTag(level, "velo_thres_used", velo_thres_used); + xml.intTag(level, "len_threshold", len_threshold); + xml.intTag(level, "len_thres_used", len_thres_used); xml.tag(level, "/erase"); } diff --git a/muse2/muse/widgets/function_dialogs/remove.h b/muse2/muse/widgets/function_dialogs/remove.h index 5615ed42..4c1a91e9 100644 --- a/muse2/muse/widgets/function_dialogs/remove.h +++ b/muse2/muse/widgets/function_dialogs/remove.h @@ -27,6 +27,10 @@ class Remove : public QDialog, public Ui::RemoveBase Remove(QWidget* parent = 0); int range; + int velo_threshold; + bool velo_thres_used; + int len_threshold; + bool len_thres_used; void read_configuration(Xml& xml); void write_configuration(int level, Xml& xml); diff --git a/muse2/muse/widgets/function_dialogs/removebase.ui b/muse2/muse/widgets/function_dialogs/removebase.ui index 3381795c..79d541cc 100644 --- a/muse2/muse/widgets/function_dialogs/removebase.ui +++ b/muse2/muse/widgets/function_dialogs/removebase.ui @@ -10,7 +10,7 @@ 0 0 275 - 195 + 443 @@ -69,6 +69,101 @@ + + + + Thresholds + + + false + + + false + + + + 11 + + + 6 + + + + + false + + + true + + + + + + 0 + + + 127 + + + 1 + + + 16 + + + + + + + false + + + ticks + + + 10000 + + + 12 + + + + + + + Velocity + + + + + + + Length + + + + + + + <!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> + + + Qt::AutoText + + + true + + + + + + @@ -149,5 +244,37 @@ + + velo_checkbox + toggled(bool) + velo_spinbox + setEnabled(bool) + + + 83 + 192 + + + 198 + 193 + + + + + len_checkbox + toggled(bool) + len_spinbox + setEnabled(bool) + + + 83 + 221 + + + 198 + 222 + + + -- cgit v1.2.3 From 44a5f5d8805449c008924cca65c16837245825e0 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 23 May 2011 16:24:51 +0000 Subject: implemented legato function added all the new functions to the score editor --- muse2/muse/functions.cpp | 69 ++++++ muse2/muse/functions.h | 4 + muse2/muse/midiedit/pianoroll.cpp | 12 +- muse2/muse/midiedit/prcanvas.h | 2 +- muse2/muse/midiedit/scoreedit.cpp | 25 ++- muse2/muse/midiedit/scoreedit.h | 3 +- muse2/muse/widgets/function_dialogs/CMakeLists.txt | 3 + muse2/muse/widgets/function_dialogs/legato.cpp | 88 ++++++++ muse2/muse/widgets/function_dialogs/legato.h | 42 ++++ muse2/muse/widgets/function_dialogs/legatobase.ui | 233 +++++++++++++++++++++ 10 files changed, 474 insertions(+), 7 deletions(-) create mode 100644 muse2/muse/widgets/function_dialogs/legato.cpp create mode 100644 muse2/muse/widgets/function_dialogs/legato.h create mode 100644 muse2/muse/widgets/function_dialogs/legatobase.ui diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index 1ad81693..89a66fa7 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -27,6 +27,7 @@ Setlen* set_notelen_dialog=NULL; Move* move_notes_dialog=NULL; Transpose* transpose_dialog=NULL; Crescendo* crescendo_dialog=NULL; +Legato* legato_dialog=NULL; void init_function_dialogs(QWidget* parent) { @@ -39,6 +40,7 @@ void init_function_dialogs(QWidget* parent) move_notes_dialog = new Move(parent); transpose_dialog = new Transpose(parent); crescendo_dialog = new Crescendo(parent); + legato_dialog = new Legato(parent); } set partlist_to_set(PartList* pl) @@ -181,6 +183,16 @@ bool crescendo(const set& parts) return true; } +bool legato(const set& parts) +{ + if (!legato_dialog->exec()) + return false; + + legato(parts,legato_dialog->range, legato_dialog->min_len, !legato_dialog->allow_shortening); + + return true; +} + void modify_velocity(const set& parts, int range, int rate, int offset) @@ -535,6 +547,60 @@ void delete_overlaps(const set& parts, int range) } } +void legato(const set& parts, int range, int min_len, bool dont_shorten) +{ + map events = get_events(parts, range); + bool undo_started=false; + + if (min_len<=0) min_len=1; + + if (!events.empty()) + { + for (map::iterator it1=events.begin(); it1!=events.end(); it1++) + { + Event& event1=*(it1->first); + Part* part1=it1->second; + + unsigned len=MAXINT; + // 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. + for (map::iterator it2=events.begin(); it2!=events.end(); it2++) + { + Event& event2=*(it2->first); + Part* part2=it2->second; + + bool relevant = (event2.tick() >= event1.tick() + min_len); + if (dont_shorten) + relevant = relevant && (event2.tick() >= event1.endTick()); + + if ( (part1->events()==part2->events()) && // part1 and part2 are the same or are duplicates + relevant && // they're not too near (respect min_len and dont_shorten) + (event2.tick()-event1.tick() < len ) ) // that's the nearest relevant following note + len=event2.tick()-event1.tick(); + } + + if (len==MAXINT) len=event1.lenTick(); // if no following note was found, keep the length + + if (event1.lenTick() != len) + { + if (undo_started==false) + { + song->startUndo(); + undo_started=true; + } + + Event new_event1 = event1.clone(); + new_event1.setLenTick(len); + + audio->msgChangeEvent(event1, new_event1, part1, false, false, false); + } + } + + if (undo_started) song->endUndo(SC_EVENT_MODIFIED); + } +} + void read_function_dialog_config(Xml& xml) @@ -574,6 +640,8 @@ void read_function_dialog_config(Xml& xml) transpose_dialog->read_configuration(xml); else if (tag == "crescendo") crescendo_dialog->read_configuration(xml); + else if (tag == "legato") + legato_dialog->read_configuration(xml); else xml.unknown("function_dialogs"); break; @@ -601,6 +669,7 @@ void write_function_dialog_config(int level, Xml& xml) move_notes_dialog->write_configuration(level, xml); transpose_dialog->write_configuration(level, xml); crescendo_dialog->write_configuration(level, xml); + legato_dialog->write_configuration(level, xml); xml.tag(level, "/dialogs"); } diff --git a/muse2/muse/functions.h b/muse2/muse/functions.h index 18f6e3ec..40e5f0e0 100644 --- a/muse2/muse/functions.h +++ b/muse2/muse/functions.h @@ -17,6 +17,7 @@ #include "widgets/function_dialogs/setlen.h" #include "widgets/function_dialogs/move.h" #include "widgets/function_dialogs/deloverlaps.h" +#include "widgets/function_dialogs/legato.h" #include #include "part.h" @@ -31,6 +32,7 @@ extern Setlen* set_notelen_dialog; extern Move* move_notes_dialog; extern Transpose* transpose_dialog; extern Crescendo* crescendo_dialog; +extern Legato* legato_dialog; void init_function_dialogs(QWidget* parent); @@ -49,6 +51,7 @@ void set_notelen(const std::set& parts, int range, int len); void move_notes(const std::set& parts, int range, signed int ticks); void transpose_notes(const std::set& parts, int range, signed int halftonesteps); void crescendo(const std::set& parts, int range, int start_val, int end_val, bool absolute); +void legato(const std::set& parts, int range, int min_len=1, bool dont_shorten=false); //the below functions automatically open the dialog @@ -62,6 +65,7 @@ bool transpose_notes(const std::set& parts); bool crescendo(const std::set& parts); bool erase_notes(const std::set& parts); bool delete_overlaps(const std::set& parts); +bool legato(const std::set& parts); diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp index 9105a446..ab83e85f 100644 --- a/muse2/muse/midiedit/pianoroll.cpp +++ b/muse2/muse/midiedit/pianoroll.cpp @@ -198,11 +198,11 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i mapper->setMapping(funcTransposeAction, PianoCanvas::CMD_TRANSPOSE); connect(funcTransposeAction, SIGNAL(triggered()), mapper, SLOT(map())); - funcEraseEventAction = menuFunctions->addAction(tr("Erase Event")); + funcEraseEventAction = menuFunctions->addAction(tr("Erase Events")); mapper->setMapping(funcEraseEventAction, PianoCanvas::CMD_ERASE_EVENT); connect(funcEraseEventAction, SIGNAL(triggered()), mapper, SLOT(map())); - funcNoteShiftAction = menuFunctions->addAction(tr("Note Shift")); + funcNoteShiftAction = menuFunctions->addAction(tr("Move Notes")); mapper->setMapping(funcNoteShiftAction, PianoCanvas::CMD_NOTE_SHIFT); connect(funcNoteShiftAction, SIGNAL(triggered()), mapper, SLOT(map())); @@ -213,7 +213,12 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i funcDelOverlapsAction = menuFunctions->addAction(tr("Delete Overlaps")); mapper->setMapping(funcDelOverlapsAction, PianoCanvas::CMD_DELETE_OVERLAPS); connect(funcDelOverlapsAction, SIGNAL(triggered()), mapper, SLOT(map())); - + + QAction* funcLegatoAction = menuFunctions->addAction(tr("Legato")); + mapper->setMapping(funcLegatoAction, PianoCanvas::CMD_LEGATO); + connect(funcLegatoAction, SIGNAL(triggered()), mapper, SLOT(map())); + + menuPlugins = menuBar()->addMenu(tr("&Plugins")); song->populateScriptMenu(menuPlugins, this); @@ -610,6 +615,7 @@ void PianoRoll::cmd(int cmd) case PianoCanvas::CMD_NOTE_SHIFT: move_notes(partlist_to_set(parts())); break; case PianoCanvas::CMD_FIXED_LEN: set_notelen(partlist_to_set(parts())); break; case PianoCanvas::CMD_DELETE_OVERLAPS: delete_overlaps(partlist_to_set(parts())); break; + case PianoCanvas::CMD_LEGATO: legato(partlist_to_set(parts())); break; default: ((PianoCanvas*)canvas)->cmd(cmd); } diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index a04ca514..3ca9ab52 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -98,7 +98,7 @@ class PianoCanvas : public EventCanvas { CMD_TRANSPOSE, CMD_THIN_OUT, CMD_ERASE_EVENT, CMD_NOTE_SHIFT, CMD_MOVE_CLOCK, CMD_COPY_MEASURE, CMD_ERASE_MEASURE, CMD_DELETE_MEASURE, CMD_CREATE_MEASURE, - CMD_FIXED_LEN, CMD_DELETE_OVERLAPS + CMD_FIXED_LEN, CMD_DELETE_OVERLAPS, CMD_LEGATO }; PianoCanvas(MidiEditor*, QWidget*, int, int); diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 2636d4f2..0019de91 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -365,10 +365,23 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) QAction* func_notelen_action = functions_menu->addAction(tr("Change note &length"), menu_mapper, SLOT(map())); QAction* func_velocity_action = functions_menu->addAction(tr("Change note &velocity"), menu_mapper, SLOT(map())); QAction* func_cresc_action = functions_menu->addAction(tr("Crescendo/Decrescendo"), menu_mapper, SLOT(map())); + QAction* func_transpose_action = functions_menu->addAction(tr("Transpose"), menu_mapper, SLOT(map())); + QAction* func_erase_action = functions_menu->addAction(tr("Erase Events"), menu_mapper, SLOT(map())); + QAction* func_move_action = functions_menu->addAction(tr("Move Notes"), menu_mapper, SLOT(map())); + QAction* func_fixed_len_action = functions_menu->addAction(tr("Set Fixed Length"), menu_mapper, SLOT(map())); + QAction* func_del_overlaps_action = functions_menu->addAction(tr("Delete Overlaps"), menu_mapper, SLOT(map())); + QAction* func_legato_action = functions_menu->addAction(tr("Legato"), menu_mapper, SLOT(map())); menu_mapper->setMapping(func_quantize_action, CMD_QUANTIZE); menu_mapper->setMapping(func_notelen_action, CMD_NOTELEN); menu_mapper->setMapping(func_velocity_action, CMD_VELOCITY); menu_mapper->setMapping(func_cresc_action, CMD_CRESCENDO); + menu_mapper->setMapping(func_transpose_action, CMD_TRANSPOSE); + menu_mapper->setMapping(func_erase_action, CMD_ERASE); + menu_mapper->setMapping(func_move_action, CMD_MOVE); + menu_mapper->setMapping(func_fixed_len_action, CMD_FIXED_LEN); + menu_mapper->setMapping(func_del_overlaps_action, CMD_DELETE_OVERLAPS); + menu_mapper->setMapping(func_legato_action, CMD_LEGATO); + if (!default_toolbar_state.isEmpty()) restoreState(default_toolbar_state); @@ -572,7 +585,13 @@ void ScoreEdit::menu_command(int cmd) case CMD_VELOCITY: modify_velocity(score_canvas->get_all_parts()); break; case CMD_CRESCENDO: crescendo(score_canvas->get_all_parts()); break; case CMD_NOTELEN: modify_notelen(score_canvas->get_all_parts()); break; - + case CMD_TRANSPOSE: transpose_notes(score_canvas->get_all_parts()); break; + case CMD_ERASE: erase_notes(score_canvas->get_all_parts()); break; + case CMD_MOVE: move_notes(score_canvas->get_all_parts()); break; + case CMD_FIXED_LEN: set_notelen(score_canvas->get_all_parts()); break; + case CMD_DELETE_OVERLAPS: delete_overlaps(score_canvas->get_all_parts()); break; + case CMD_LEGATO: legato(score_canvas->get_all_parts()); break; + default: score_canvas->menu_command(cmd); } @@ -4261,7 +4280,9 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) * between, for example, when a cis is tied to a des * * CURRENT TODO - * o legato: extend length to next note + * > o legato: extend length to next note + * o add music-keyboard-bindings for "insert rest" and "increase note length" + * o maybe support step-recording in score editor as well? * * IMPORTANT TODO * o do partial recalculating; recalculating can take pretty long diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index f587483a..2ce8d645 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -58,7 +58,8 @@ enum {CMD_COLOR_BLACK, CMD_COLOR_VELO, CMD_COLOR_PART, CMD_NOTELEN_1, CMD_NOTELEN_2, CMD_NOTELEN_4, CMD_NOTELEN_8, CMD_NOTELEN_16, CMD_NOTELEN_32, CMD_NOTELEN_LAST, - CMD_QUANTIZE, CMD_VELOCITY, CMD_CRESCENDO, CMD_NOTELEN }; + CMD_QUANTIZE, CMD_VELOCITY, CMD_CRESCENDO, CMD_NOTELEN, CMD_TRANSPOSE, + CMD_ERASE, CMD_MOVE, CMD_FIXED_LEN, CMD_DELETE_OVERLAPS, CMD_LEGATO }; class ScoreCanvas; diff --git a/muse2/muse/widgets/function_dialogs/CMakeLists.txt b/muse2/muse/widgets/function_dialogs/CMakeLists.txt index 7ddc6bee..db1f3229 100644 --- a/muse2/muse/widgets/function_dialogs/CMakeLists.txt +++ b/muse2/muse/widgets/function_dialogs/CMakeLists.txt @@ -30,6 +30,7 @@ QT4_WRAP_CPP (widgets_functiondialogs_mocs remove.h setlen.h transpose.h + legato.h velocity.h ) @@ -45,6 +46,7 @@ file (GLOB widgets_functiondialogs_ui_files removebase.ui setlenbase.ui transposebase.ui + legatobase.ui velocitybase.ui ) @@ -62,6 +64,7 @@ file (GLOB widgets_functiondialogs_source_files remove.cpp setlen.cpp transpose.cpp + legato.cpp velocity.cpp ) diff --git a/muse2/muse/widgets/function_dialogs/legato.cpp b/muse2/muse/widgets/function_dialogs/legato.cpp new file mode 100644 index 00000000..0a181106 --- /dev/null +++ b/muse2/muse/widgets/function_dialogs/legato.cpp @@ -0,0 +1,88 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: legato.cpp,v 1.1.1.1 2011/05/05 18:51:04 flo93 Exp $ +// (C) Copyright 2011 Florian Jung (flo93@sourceforge.net) +//========================================================= + +#include +#include "legato.h" +#include "xml.h" + +Legato::Legato(QWidget* parent) + : QDialog(parent) +{ + setupUi(this); + range_group = new QButtonGroup; + range_group->addButton(all_events_button,0); + 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() +{ + range = range_group->checkedId(); + min_len = len_spinbox->value(); + allow_shortening = allow_shorten_checkbox->isChecked(); +} + +void Legato::accept() +{ + pull_values(); + QDialog::accept(); +} + +int Legato::exec() +{ + if ((range < 0) || (range > 3)) range=0; + + range_group->button(range)->setChecked(true); + len_spinbox->setValue(min_len); + allow_shorten_checkbox->setChecked(allow_shortening); + + return QDialog::exec(); +} + +void Legato::read_configuration(Xml& xml) +{ + for (;;) + { + Xml::Token token = xml.parse(); + if (token == Xml::Error || token == Xml::End) + break; + + const QString& tag = xml.s1(); + switch (token) + { + case Xml::TagStart: + if (tag == "range") + range=xml.parseInt(); + else if (tag == "min_len") + min_len=xml.parseInt(); + else if (tag == "allow_shortening") + allow_shortening=xml.parseInt(); + else + xml.unknown("Legato"); + break; + + case Xml::TagEnd: + if (tag == "legato") + return; + + default: + break; + } + } +} + +void Legato::write_configuration(int level, Xml& xml) +{ + xml.tag(level++, "legato"); + xml.intTag(level, "range", range); + xml.intTag(level, "min_len", min_len); + xml.intTag(level, "allow_shortening", allow_shortening); + xml.tag(level, "/legato"); +} diff --git a/muse2/muse/widgets/function_dialogs/legato.h b/muse2/muse/widgets/function_dialogs/legato.h new file mode 100644 index 00000000..80b371ca --- /dev/null +++ b/muse2/muse/widgets/function_dialogs/legato.h @@ -0,0 +1,42 @@ +//========================================================= +// MusE +// Linux Music Editor +// $Id: legato.h,v 1.1.1.1 2011/05/05 18:51:04 flo93 Exp $ +// (C) Copyright 2011 Florian Jung (flo93@sourceforge.net) +//========================================================= + +#ifndef __LEGATO_H__ +#define __LEGATO_H__ + +#include "ui_legatobase.h" + +class QButtonGroup; +class Xml; + +class Legato : public QDialog, public Ui::LegatoBase +{ + private: + Q_OBJECT + QButtonGroup* range_group; + + protected slots: + void accept(); + void pull_values(); + + public: + Legato(QWidget* parent = 0); + + int range; + int min_len; + bool allow_shortening; + + void read_configuration(Xml& xml); + void write_configuration(int level, Xml& xml); + + + public slots: + int exec(); +}; + +#endif + diff --git a/muse2/muse/widgets/function_dialogs/legatobase.ui b/muse2/muse/widgets/function_dialogs/legatobase.ui new file mode 100644 index 00000000..7bc406df --- /dev/null +++ b/muse2/muse/widgets/function_dialogs/legatobase.ui @@ -0,0 +1,233 @@ + + + LegatoBase + + + true + + + + 0 + 0 + 275 + 289 + + + + MusE: Legato + + + + 6 + + + 11 + + + + + Range + + + + 6 + + + 11 + + + + + All Events + + + + + + + Selected Events + + + true + + + + + + + Looped Events + + + + + + + Selected Looped + + + + + + + + + + Settings + + + false + + + false + + + + 11 + + + 6 + + + + + true + + + true + + + ticks + + + 0 + + + 10000 + + + 1 + + + 0 + + + + + + + Minimum Length + + + + + + + + + + 0 + 0 + + + + Allow shortening notes + + + + + + + Qt::RightToLeft + + + + + + + + + + + + + + + 6 + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 20 + 20 + + + + + + + + OK + + + false + + + true + + + + + + + Cancel + + + + + + + + + + + + okButton + clicked() + LegatoBase + accept() + + + 20 + 20 + + + 20 + 20 + + + + + cancelButton + clicked() + LegatoBase + reject() + + + 20 + 20 + + + 20 + 20 + + + + + -- cgit v1.2.3 From 69427576250f7fcfdf0e1fb28658790f4b2077bb Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 23 May 2011 16:37:26 +0000 Subject: corrected reversed contollers in part canvas (cakewalk mode) --- muse2/muse/arranger/pcanvas.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index daaf2d28..9b0a65b9 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -1730,7 +1730,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi int hoffset = (mt->height() - th ) / 2; // offset from bottom if (ctrl_type == CTRL_PITCH) - p.drawLine(t, hoffset + r.y() + th/2, t, hoffset + r.y() + val*th/8192/2 + th/2); + p.drawLine(t, hoffset + r.y() + th/2, t, hoffset + r.y() - val*th/8192/2 + th/2); } } @@ -1747,7 +1747,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi int hoffset = (mt->height() - th ) / 2; // offset from bottom if (ctrl_type == 10) - p.drawLine(t, hoffset + r.y() + val*th/127, t, hoffset + r.y() + th); + p.drawLine(t, hoffset + r.y() + th - val*th/127, t, hoffset + r.y() + th); } } @@ -1764,7 +1764,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi int hoffset = (mt->height() - th ) / 2; // offset from bottom if (ctrl_type == 7) - p.drawLine(t, hoffset + r.y() + val*th/127, t, hoffset + r.y() + th); + p.drawLine(t, hoffset + r.y() + th - val*th/127, t, hoffset + r.y() + th); } } -- cgit v1.2.3 From 7caa48f2561ae838049abb64adffe8ce43185b34 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 23 May 2011 18:06:57 +0000 Subject: Updated Changelog; prepared for merge --- muse2/ChangeLog | 32 ++++++++++++++++++++++++++++++++ muse2/muse/midiedit/scoreedit.cpp | 1 - 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index fce03eb0..c46b7f7f 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,35 @@ +23.05.2011: (all changes made by flo93, except one) + Function-related changes: + - made all the stuff in the "functions" menu global + - added crescendo, legato functions, improved erase function + - removed unneccessary _to and _quant* - stuff from piano roll and drum edit + this also involved changing the Toolbar1 + - changed behaviour for step-recording: the note-length is now the "raster"- + value instead of the "quant"-value + - changed behaviour for scripts: the "quant"-parameter they get isn't the + quant-combo's setting, but the snap-combo's now + - removed unneccessary short cuts: SHRT_OVER_QUANTIZE etc. instead added + SHRT_QUANTIZE + + Score-Editor-related changes: + - using the proper AL::raster functions in the score editor + - added support for selections to the score editor + - distance between staves is now automatically increased if neccessary + - fixed "change pitch freezes scoreeditor"-bug + - added clef-combobox to midi tracks (rj and flo) + - don't install the *.mf files any more + - added a modified MTScale to the score editor + + Other Stuff: + - speeded up importing midi massively + - when step-recording, chords can now be entered with only the musical keyboard + - swapped ctrl and shift behaviour to make muse accord to standards + - toolbar states are now saved + - improved "cakewalk" mode for arranger: added y-stretch and drawing some controllers + - added line tool to drum editor + - added "reorder list" function to drum roll + - changed ctrl-edit's behaviour when control key is pressed + 15.05.2011: - Changed mouse wheel behaviour in graphical editors except the score editor (rj) * wheel scrolls left-right diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 0019de91..f8815185 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4280,7 +4280,6 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) * between, for example, when a cis is tied to a des * * CURRENT TODO - * > o legato: extend length to next note * o add music-keyboard-bindings for "insert rest" and "increase note length" * o maybe support step-recording in score editor as well? * -- cgit v1.2.3 From 605b5bd05b7bcd20437ed07f0e0fe41f94fe9f1f Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Tue, 24 May 2011 09:38:48 +0000 Subject: fixed bug with y-stretch and added debug messages --- muse2/muse/arranger/pcanvas.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index 9b0a65b9..54785200 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -1796,7 +1796,7 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi if (config.canvasShowPartType & 4) //y-stretch? { - for (iEvent i = events->begin(); i != ito; ++i) + for (iEvent i = events->begin(); i != events->end(); ++i) { if (i->second.type()==Note) { @@ -1831,6 +1831,19 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi lowest_pitch--; highest_pitch++; } + + if (heavyDebugMsg) + { + if (!isdrum) + printf("DEBUG: arranger: cakewalk enabled, y-stretching from %i to %i. eventlist=%i\n",lowest_pitch, highest_pitch, events); + else + { + printf("DEBUG: arranger: cakewalk enabled, y-stretching drums: ");; + for (map::iterator it=y_mapper.begin(); it!=y_mapper.end(); it++) + printf("%i ", it->first); + printf("; eventlist=%i\n",events); + } + } } else { @@ -1840,6 +1853,8 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi if (isdrum) for (int cnt=0;cnt<127;cnt++) y_mapper[cnt]=cnt; + + if (heavyDebugMsg) printf("DEBUG: arranger: cakewalk enabled, y-stretch disabled\n"); } p.setPen(QColor(color_brightness,color_brightness,color_brightness)); -- cgit v1.2.3 From ef0aa8834d71587f7c417bb36d865ed1c8919a0b Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Tue, 24 May 2011 10:13:03 +0000 Subject: - removed unneccessary "midi in" button from piano- and drum canvas - removed unused step-record button from drum canvas - moved _steprec member from EventCanvas to PianoCanvas --- muse2/muse/midiedit/drumedit.cpp | 29 +---------------------------- muse2/muse/midiedit/ecanvas.cpp | 2 -- muse2/muse/midiedit/ecanvas.h | 6 ------ muse2/muse/midiedit/pianoroll.cpp | 21 +++------------------ muse2/muse/midiedit/prcanvas.cpp | 3 ++- muse2/muse/midiedit/prcanvas.h | 5 +++++ 6 files changed, 11 insertions(+), 55 deletions(-) diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index 97ab092e..e64379a2 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -289,19 +289,6 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini tools->addSeparator(); tools->addActions(undoRedo->actions()); - tools->addSeparator(); - - srec = new QToolButton(); - srec->setToolTip(tr("Step Record")); - srec->setIcon(*steprecIcon); - srec->setCheckable(true); - tools->addWidget(srec); - - midiin = new QToolButton(); - midiin->setToolTip(tr("Midi Input")); - midiin->setIcon(*midiinIcon); - midiin->setCheckable(true); - tools->addWidget(midiin); tools2 = new EditToolBar(this, drumeditTools); @@ -453,8 +440,6 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini connect(vscroll, SIGNAL(scaleChanged(int)), dlist, SLOT(setYMag(int))); connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); - connect(srec, SIGNAL(toggled(bool)), canvas, SLOT(setSteprec(bool))); - connect(midiin, SIGNAL(toggled(bool)), canvas, SLOT(setMidiin(bool))); connect(vscroll, SIGNAL(scrollChanged(int)), dlist, SLOT(setYPos(int))); connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); @@ -675,8 +660,6 @@ void DrumEdit::writeStatus(int level, Xml& xml) const split2->writeStatus(level, xml); header->writeStatus(level, xml); - xml.intTag(level, "steprec", canvas->steprec()); - xml.intTag(level, "midiin", canvas->midiin()); xml.intTag(level, "xpos", hscroll->pos()); xml.intTag(level, "xmag", hscroll->mag()); xml.intTag(level, "ypos", vscroll->pos()); @@ -698,17 +681,7 @@ void DrumEdit::readStatus(Xml& xml) case Xml::End: return; case Xml::TagStart: - if (tag == "steprec") { - int val = xml.parseInt(); - canvas->setSteprec(val); - srec->setChecked(val); - } - else if (tag == "midiin") { - int val = xml.parseInt(); - canvas->setMidiin(val); - midiin->setChecked(val); - } - else if (tag == "ctrledit") { + if (tag == "ctrledit") { CtrlEdit* ctrl = addCtrl(); ctrl->readStatus(xml); } diff --git a/muse2/muse/midiedit/ecanvas.cpp b/muse2/muse/midiedit/ecanvas.cpp index 7a421411..8f04bdfc 100644 --- a/muse2/muse/midiedit/ecanvas.cpp +++ b/muse2/muse/midiedit/ecanvas.cpp @@ -35,8 +35,6 @@ EventCanvas::EventCanvas(MidiEditor* pr, QWidget* parent, int sx, : Canvas(parent, sx, sy, name) { editor = pr; - _steprec = false; - _midiin = false; _playEvents = false; curVelo = 70; diff --git a/muse2/muse/midiedit/ecanvas.h b/muse2/muse/midiedit/ecanvas.h index 86e1c200..a278fb19 100644 --- a/muse2/muse/midiedit/ecanvas.h +++ b/muse2/muse/midiedit/ecanvas.h @@ -51,8 +51,6 @@ class EventCanvas : public Canvas { MidiEditor* editor; unsigned start_tick, end_tick; int curVelo; - bool _steprec; - bool _midiin; void updateSelection(); virtual void addItem(Part*, Event&) = 0; @@ -61,8 +59,6 @@ class EventCanvas : public Canvas { public slots: void redrawGrid() { redraw(); } - void setSteprec(bool f) { _steprec = f; } - void setMidiin(bool f) { _midiin = f; } signals: void pitchChanged(int); // current cursor position @@ -75,8 +71,6 @@ class EventCanvas : public Canvas { MidiTrack* track() const; unsigned start() const { return start_tick; } unsigned end() const { return end_tick; } - bool midiin() const { return _midiin; } - bool steprec() const { return _steprec; } QString getCaption() const; void songChanged(int); void range(int* s, int* e) const { *s = start_tick; *e = end_tick; } diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp index ab83e85f..89f5ad6a 100644 --- a/muse2/muse/midiedit/pianoroll.cpp +++ b/muse2/muse/midiedit/pianoroll.cpp @@ -236,12 +236,6 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i srec->setCheckable(true); tools->addWidget(srec); - midiin = new QToolButton(); - midiin->setToolTip(tr("Midi Input")); - midiin->setIcon(*midiinIcon); - midiin->setCheckable(true); - tools->addWidget(midiin); - speaker = new QToolButton(); speaker->setToolTip(tr("Play Events")); speaker->setIcon(*speakerIcon); @@ -441,7 +435,6 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i connect(piano, SIGNAL(keyPressed(int, int, bool)), canvas, SLOT(pianoPressed(int, int, bool))); connect(piano, SIGNAL(keyReleased(int, bool)), canvas, SLOT(pianoReleased(int, bool))); connect(srec, SIGNAL(toggled(bool)), SLOT(setSteprec(bool))); - connect(midiin, SIGNAL(toggled(bool)), canvas, SLOT(setMidiin(bool))); connect(speaker, SIGNAL(toggled(bool)), SLOT(setSpeaker(bool))); connect(canvas, SIGNAL(followEvent(int)), SLOT(follow(int))); @@ -873,8 +866,7 @@ void PianoRoll::writeStatus(int level, Xml& xml) const (*i)->writeStatus(level, xml); } - xml.intTag(level, "steprec", canvas->steprec()); - xml.intTag(level, "midiin", canvas->midiin()); + xml.intTag(level, "steprec", ((PianoCanvas*)canvas)->steprec()); xml.intTag(level, "tool", int(canvas->tool())); xml.intTag(level, "playEvents", _playEvents); xml.intTag(level, "xpos", hscroll->pos()); @@ -899,14 +891,9 @@ void PianoRoll::readStatus(Xml& xml) case Xml::TagStart: if (tag == "steprec") { int val = xml.parseInt(); - canvas->setSteprec(val); + ((PianoCanvas*)canvas)->setSteprec(val); srec->setChecked(val); } - else if (tag == "midiin") { - int val = xml.parseInt(); - canvas->setMidiin(val); - midiin->setChecked(val); - } else if (tag == "tool") { int tool = xml.parseInt(); canvas->setTool(tool); @@ -1130,9 +1117,7 @@ void PianoRoll::keyPressEvent(QKeyEvent* event) void PianoRoll::setSteprec(bool flag) { - canvas->setSteprec(flag); - if (flag == false) - midiin->setChecked(flag); + ((PianoCanvas*)canvas)->setSteprec(flag); } //--------------------------------------------------------- diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index 84cac135..1706681e 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -83,6 +83,7 @@ PianoCanvas::PianoCanvas(MidiEditor* pr, QWidget* parent, int sx, int sy) { colorMode = 0; playedPitch = -1; + _steprec = false; chordTimer = new QTimer(this); chordTimer->setSingleShot(true); @@ -1055,7 +1056,7 @@ void PianoCanvas::cmd(int cmd) void PianoCanvas::midiNote(int pitch, int velo) { - if (_midiin && _steprec && curPart + if (_steprec && curPart && !audio->isPlaying() && velo && pos[0] >= start_tick && pos[0] < end_tick && !(globalKeyState & Qt::AltModifier)) { diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index 3ca9ab52..a5fea173 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -44,6 +44,8 @@ class PianoCanvas : public EventCanvas { QTimer* chordTimer; unsigned chordTimer_setToTick; + bool _steprec; + Q_OBJECT virtual void viewMouseDoubleClickEvent(QMouseEvent*); virtual void drawItem(QPainter&, const CItem*, const QRect&); @@ -87,6 +89,7 @@ class PianoCanvas : public EventCanvas { void pianoCmd(int); void pianoPressed(int pitch, int velocity, bool shift); void pianoReleased(int pitch, bool); + void setSteprec(bool f) { _steprec = f; } public: enum { @@ -108,6 +111,8 @@ class PianoCanvas : public EventCanvas { redraw(); } virtual void modifySelected(NoteInfo::ValType type, int delta); + + bool steprec() const { return _steprec; } }; #endif -- cgit v1.2.3 From 50e54c9b95c39badcd1f30443f30a74a7eb69ea3 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Tue, 24 May 2011 13:39:39 +0000 Subject: improved step recording and minor fixes --- muse2/ChangeLog | 7 ++++ muse2/awl/pitchedit.cpp | 4 +-- muse2/awl/pitchedit.h | 4 +-- muse2/muse/conf.cpp | 3 ++ muse2/muse/driver/jackmidi.cpp | 8 +++-- muse2/muse/globals.cpp | 1 + muse2/muse/globals.h | 1 + muse2/muse/mididev.cpp | 10 ++++-- muse2/muse/midiedit/prcanvas.cpp | 72 ++++++++++++++++++++++++++++++++++++- muse2/muse/midiedit/prcanvas.h | 2 +- muse2/muse/mplugins/mrconfig.cpp | 7 ++++ muse2/muse/mplugins/mrconfig.h | 1 + muse2/muse/mplugins/mrconfigbase.ui | 42 +++++++++++++--------- 13 files changed, 135 insertions(+), 27 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index b16462d8..61f1509f 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,10 @@ +24.05.2011: + - fixed y-stretch (flo93) + - cleaned up step-rec and midi-in buttons and stuff (flo93) + - steprec now supports a "insert rest" key, which can be set (flo93) + under Midi -> Input Plugins -> Remote Control + - song->midiNote now also delivers note off events (flo93) + - fixed pitch-spinbox (flo93) 23.05.2011: (all changes made by flo93, except one) Function-related changes: - made all the stuff in the "functions" menu global diff --git a/muse2/awl/pitchedit.cpp b/muse2/awl/pitchedit.cpp index 93f4b310..71486be8 100644 --- a/muse2/awl/pitchedit.cpp +++ b/muse2/awl/pitchedit.cpp @@ -54,7 +54,7 @@ void PitchEdit::keyPressEvent(QKeyEvent* ev) // mapValueToText //--------------------------------------------------------- -QString PitchEdit::mapValueToText(int v) +QString PitchEdit::textFromValue(int v) const { if (deltaMode) { QString s; @@ -69,7 +69,7 @@ QString PitchEdit::mapValueToText(int v) // mapTextToValue //--------------------------------------------------------- -int PitchEdit::mapTextToValue(bool* ok) +int PitchEdit::valueFromText(bool* ok) const { printf("AwlPitchEdit: mapTextToValue: not impl.\n"); if (ok) diff --git a/muse2/awl/pitchedit.h b/muse2/awl/pitchedit.h index bdcfc4c4..f9b5b24e 100644 --- a/muse2/awl/pitchedit.h +++ b/muse2/awl/pitchedit.h @@ -37,8 +37,8 @@ class PitchEdit : public QSpinBox { bool deltaMode; protected: - virtual QString mapValueToText(int v); - virtual int mapTextToValue(bool* ok); + virtual QString textFromValue(int v) const; + virtual int valueFromText(bool* ok) const; virtual void keyPressEvent(QKeyEvent*); signals: diff --git a/muse2/muse/conf.cpp b/muse2/muse/conf.cpp index e7eef503..56cbc321 100644 --- a/muse2/muse/conf.cpp +++ b/muse2/muse/conf.cpp @@ -481,6 +481,8 @@ static void readSeqConfiguration(Xml& xml) rcGotoLeftMarkNote = xml.parseInt(); else if (tag == "rcPlay") rcPlayNote = xml.parseInt(); + else if (tag == "rcSteprec") + rcSteprecNote = xml.parseInt(); else xml.unknown("Seq"); break; @@ -1061,6 +1063,7 @@ static void writeSeqConfiguration(int level, Xml& xml, bool writePortInfo) xml.intTag(level, "rcRecord", rcRecordNote); xml.intTag(level, "rcGotoLeft", rcGotoLeftMarkNote); xml.intTag(level, "rcPlay", rcPlayNote); + xml.intTag(level, "rcSteprec", rcSteprecNote); if (writePortInfo) { // diff --git a/muse2/muse/driver/jackmidi.cpp b/muse2/muse/driver/jackmidi.cpp index c950e096..1765fabb 100644 --- a/muse2/muse/driver/jackmidi.cpp +++ b/muse2/muse/driver/jackmidi.cpp @@ -974,13 +974,17 @@ void MidiJackDevice::recordEvent(MidiRecordEvent& event) } // - // transfer noteOn events to gui for step recording and keyboard - // remote control + // transfer noteOn and Off events to gui for step recording and keyboard + // remote control (changed by flo93: added noteOff-events) // if (typ == ME_NOTEON) { int pv = ((event.dataA() & 0xff)<<8) + (event.dataB() & 0xff); song->putEvent(pv); } + else if (typ == ME_NOTEOFF) { + int pv = ((event.dataA() & 0xff)<<8) + (0x00); //send an event with velo=0 + song->putEvent(pv); + } //if(_recordFifo.put(MidiPlayEvent(event))) // printf("MidiJackDevice::recordEvent: fifo overflow\n"); diff --git a/muse2/muse/globals.cpp b/muse2/muse/globals.cpp index f8ae4454..00c0f0a9 100644 --- a/muse2/muse/globals.cpp +++ b/muse2/muse/globals.cpp @@ -347,6 +347,7 @@ unsigned char rcStopNote = 28; unsigned char rcRecordNote = 31; unsigned char rcGotoLeftMarkNote = 33; unsigned char rcPlayNote = 29; +unsigned char rcSteprecNote = 36; bool automation = true; QObject* gRoutingPopupMenuMaster = 0; diff --git a/muse2/muse/globals.h b/muse2/muse/globals.h index 894f1baf..984571e2 100644 --- a/muse2/muse/globals.h +++ b/muse2/muse/globals.h @@ -167,6 +167,7 @@ extern unsigned char rcStopNote; extern unsigned char rcRecordNote; extern unsigned char rcGotoLeftMarkNote; extern unsigned char rcPlayNote; +extern unsigned char rcSteprecNote; extern bool midiSeqRunning; extern bool automation; diff --git a/muse2/muse/mididev.cpp b/muse2/muse/mididev.cpp index b5445b71..b13f571b 100644 --- a/muse2/muse/mididev.cpp +++ b/muse2/muse/mididev.cpp @@ -315,7 +315,7 @@ void MidiDevice::recordEvent(MidiRecordEvent& event) if (filterEvent(event, midiRecordType, false)) return; - + if (!applyMidiInputTransformation(event)) { if (midiInputTrace) printf(" midi input transformation: event filtered\n"); @@ -323,13 +323,17 @@ void MidiDevice::recordEvent(MidiRecordEvent& event) } // - // transfer noteOn events to gui for step recording and keyboard - // remote control + // transfer noteOn and Off events to gui for step recording and keyboard + // remote control (changed by flo93: added noteOff-events) // if (typ == ME_NOTEON) { int pv = ((event.dataA() & 0xff)<<8) + (event.dataB() & 0xff); song->putEvent(pv); } + else if (typ == ME_NOTEOFF) { + int pv = ((event.dataA() & 0xff)<<8) + (0x00); //send an event with velo=0 + song->putEvent(pv); + } ///if(_recBufFlipped) /// _recordEvents2.add(event); // add event to secondary list of recorded events diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index 1706681e..c9f66737 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -15,6 +15,8 @@ #include #include +#include + #include #include #include @@ -84,6 +86,7 @@ PianoCanvas::PianoCanvas(MidiEditor* pr, QWidget* parent, int sx, int sy) colorMode = 0; playedPitch = -1; _steprec = false; + for (int i=0;i<128;i++) noteHeldDown[i]=false; chordTimer = new QTimer(this); chordTimer->setSingleShot(true); @@ -1053,13 +1056,30 @@ void PianoCanvas::cmd(int cmd) //--------------------------------------------------------- // midiNote //--------------------------------------------------------- - void PianoCanvas::midiNote(int pitch, int velo) { + if (debugMsg) printf("PianoCanvas::midiNote: pitch=%i, velo=%i\n", pitch, velo); + + if (velo) + noteHeldDown[pitch]=true; + else + noteHeldDown[pitch]=false; + + if (heavyDebugMsg) + { + printf(" held down notes are: "); + for (int i=0;i<128;i++) + if (noteHeldDown[i]) + printf("%i ",i); + printf("\n"); + } + if (_steprec && curPart && !audio->isPlaying() && velo && pos[0] >= start_tick && pos[0] < end_tick && !(globalKeyState & Qt::AltModifier)) { + + if (pitch!=rcSteprecNote) { chordTimer->stop(); //len has been changed by flo: set to raster() instead of quant() @@ -1128,6 +1148,56 @@ void PianoCanvas::midiNote(int pitch, int velo) chordTimer->start(); } } + else { // equals if (pitch==rcSteprecNote) + bool held_notes=false; + for (int i=0;i<128;i++) + if (noteHeldDown[i]) { held_notes=true; break; } + + if (held_notes) + { + chordTimer->stop(); + + unsigned tick = pos[0]; + + // extend len of last note(s) + using std::set; + + set extend_set; + EventList* events = curPart->events(); + for (iEvent i = events->begin(); i != events->end(); ++i) { + Event& ev = i->second; + if (!ev.isNote()) + continue; + + if (noteHeldDown[ev.pitch()] && ((ev.tick() + ev.lenTick()) == tick)) + extend_set.insert(&ev); + } + for (set::iterator it=extend_set.begin(); it!=extend_set.end(); it++) + { + Event& ev=**it; + Event e = ev.clone(); + e.setLenTick(ev.lenTick() + editor->rasterStep(tick)); + // Indicate do undo, and do not do port controller values and clone parts. + audio->msgChangeEvent(ev, e, curPart, true, false, false); + } + + if (! (globalKeyState & Qt::ShiftModifier)) { + chordTimer_setToTick = tick + editor->rasterStep(tick); + chordTimer->start(); + } + return; + + } + else // equals if (!held_notes) + { + chordTimer->stop(); + + //simply proceed, inserting a rest + Pos p(pos[0] + editor->rasterStep(pos[0]), true); + song->setPos(0, p, true, false, true); + } + } + } } void PianoCanvas::chordTimerTimedOut() diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index a5fea173..e90ac613 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -43,7 +43,7 @@ class PianoCanvas : public EventCanvas { QTimer* chordTimer; unsigned chordTimer_setToTick; - + bool noteHeldDown[128]; bool _steprec; Q_OBJECT diff --git a/muse2/muse/mplugins/mrconfig.cpp b/muse2/muse/mplugins/mrconfig.cpp index f64384af..1a55c826 100644 --- a/muse2/muse/mplugins/mrconfig.cpp +++ b/muse2/muse/mplugins/mrconfig.cpp @@ -26,12 +26,14 @@ MRConfig::MRConfig(QWidget* parent, Qt::WFlags fl) sb2->setValue(rcRecordNote); sb3->setValue(rcGotoLeftMarkNote); sb4->setValue(rcPlayNote); + steprec_box->setValue(rcSteprecNote); connect(b1, SIGNAL(toggled(bool)), SLOT(setRcEnable(bool))); connect(sb1, SIGNAL(valueChanged(int)), SLOT(setRcStopNote(int))); connect(sb2, SIGNAL(valueChanged(int)), SLOT(setRcRecordNote(int))); connect(sb3, SIGNAL(valueChanged(int)), SLOT(setRcGotoLeftMarkNote(int))); connect(sb4, SIGNAL(valueChanged(int)), SLOT(setRcPlayNote(int))); + connect(steprec_box, SIGNAL(valueChanged(int)), SLOT(setRcSteprecNote(int))); } //--------------------------------------------------------- @@ -69,3 +71,8 @@ void MRConfig::setRcPlayNote(int val) rcPlayNote = val; } +void MRConfig::setRcSteprecNote(int val) + { + rcSteprecNote = val; + } + diff --git a/muse2/muse/mplugins/mrconfig.h b/muse2/muse/mplugins/mrconfig.h index e829c15c..5e4b38af 100644 --- a/muse2/muse/mplugins/mrconfig.h +++ b/muse2/muse/mplugins/mrconfig.h @@ -32,6 +32,7 @@ class MRConfig : public QWidget, public Ui::MRConfigBase { void setRcRecordNote(int); void setRcGotoLeftMarkNote(int); void setRcPlayNote(int); + void setRcSteprecNote(int); public: MRConfig(QWidget* parent=0, Qt::WFlags fl = 0); diff --git a/muse2/muse/mplugins/mrconfigbase.ui b/muse2/muse/mplugins/mrconfigbase.ui index ed04c334..18050c78 100644 --- a/muse2/muse/mplugins/mrconfigbase.ui +++ b/muse2/muse/mplugins/mrconfigbase.ui @@ -7,7 +7,7 @@ 0 0 298 - 249 + 267 @@ -95,19 +95,29 @@ - + - + - + - + - - + + + + + + + Insert rest (step rec) + + + + + Qt::Horizontal @@ -122,8 +132,8 @@ - - + + Qt::Horizontal @@ -138,8 +148,8 @@ - - + + Qt::Horizontal @@ -154,8 +164,8 @@ - - + + Qt::Horizontal @@ -178,9 +188,9 @@ - PitchEdit - QWidget -
pitchedit.h
+ Awl::PitchEdit + QSpinBox +
awl/pitchedit.h
-- cgit v1.2.3 From bbd239959dd26ee023fb256e6178365186194869 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Tue, 24 May 2011 13:49:56 +0000 Subject: Awl::PitchEdit now can be set with the musical keyboard --- muse2/ChangeLog | 1 + muse2/awl/pitchedit.cpp | 12 ++++++++++++ muse2/awl/pitchedit.h | 3 +++ 3 files changed, 16 insertions(+) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 61f1509f..bef2769f 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,4 +1,5 @@ 24.05.2011: + - Awl::PitchEdit now can be set with the musical keyboard (flo93) - fixed y-stretch (flo93) - cleaned up step-rec and midi-in buttons and stuff (flo93) - steprec now supports a "insert rest" key, which can be set (flo93) diff --git a/muse2/awl/pitchedit.cpp b/muse2/awl/pitchedit.cpp index 71486be8..6bae2f5b 100644 --- a/muse2/awl/pitchedit.cpp +++ b/muse2/awl/pitchedit.cpp @@ -25,6 +25,8 @@ #include +extern QObject* song; // TODO FINDME this is a really dirty hack! + namespace Awl { //--------------------------------------------------------- @@ -36,6 +38,7 @@ PitchEdit::PitchEdit(QWidget* parent) { setRange(0, 127); deltaMode = false; + connect(song, SIGNAL(midiNote(int, int)), SLOT(midiNote(int,int))); } //--------------------------------------------------------- @@ -89,5 +92,14 @@ void PitchEdit::setDeltaMode(bool val) else setRange(0, 127); } + +void PitchEdit::midiNote(int pitch, int velo) +{ + if (hasFocus() && velo) + setValue(pitch); +} + + } + diff --git a/muse2/awl/pitchedit.h b/muse2/awl/pitchedit.h index f9b5b24e..1512ec8d 100644 --- a/muse2/awl/pitchedit.h +++ b/muse2/awl/pitchedit.h @@ -48,6 +48,9 @@ class PitchEdit : public QSpinBox { public: PitchEdit(QWidget* parent); void setDeltaMode(bool); + + private slots: + void midiNote(int pitch, int velo); }; } -- cgit v1.2.3 From 9c9671d3220561d4094b47b3c0eba20c42c17d08 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Tue, 24 May 2011 16:21:54 +0000 Subject: made "clef" column consume less space --- muse2/muse/arranger/tlist.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index 2dd19b4d..fbd763d8 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -360,13 +360,13 @@ void TList::paint(const QRect& r) break; case COL_CLEF: if (track->isMidiTrack()) { - QString s = "no clef"; + QString s = tr("no clef"); if (((MidiTrack*)track)->getClef() == ScoreEdit::trebleClef) - s="Treble Clef"; + s=tr("Treble"); else if (((MidiTrack*)track)->getClef() == ScoreEdit::bassClef) - s="Bass Clef"; + s=tr("Bass"); else if (((MidiTrack*)track)->getClef() == ScoreEdit::grandStaff) - s="Grand Staff"; + s=tr("Grand"); p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); } break; @@ -1073,9 +1073,9 @@ void TList::mousePressEvent(QMouseEvent* ev) case COL_CLEF: if (t->isMidiTrack()) { QMenu* p = new QMenu; - p->addAction("Treble clef")->setData(0); - p->addAction("Bass clef")->setData(1); - p->addAction("Grand Staff")->setData(2); + p->addAction(tr("Treble clef"))->setData(0); + p->addAction(tr("Bass clef"))->setData(1); + p->addAction(tr("Grand Staff"))->setData(2); // Show the menu QAction* act = p->exec(ev->globalPos(), 0); -- cgit v1.2.3 From 9defbf3c671ccb70ff4b29f222ea9fb9227099b2 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Tue, 24 May 2011 18:13:48 +0000 Subject: more doubleclick-lineedits for the drum list --- muse2/muse/midiedit/dlist.cpp | 48 +++++++++++++++++++++++++++++++-------- muse2/muse/midiedit/scoreedit.cpp | 1 - 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/muse2/muse/midiedit/dlist.cpp b/muse2/muse/midiedit/dlist.cpp index 3b8670db..7640b38e 100644 --- a/muse2/muse/midiedit/dlist.cpp +++ b/muse2/muse/midiedit/dlist.cpp @@ -256,7 +256,7 @@ void DList::viewMousePressEvent(QMouseEvent* ev) dm->mute = !dm->mute; break; case COL_PORT: - if (button == Qt::RightButton) { + if ((button == Qt::RightButton) || (button == Qt::LeftButton)) { bool changeAll = ev->modifiers() & Qt::ControlModifier; devicesPopupMenu(dm, mapx(x), mapy(pitch * TH), changeAll); } @@ -425,7 +425,8 @@ void DList::viewMouseDoubleClickEvent(QMouseEvent* ev) int section = header->logicalIndexAt(x); if ((section == COL_NAME || section == COL_VOL || section == COL_LEN || section == COL_LV1 || - section == COL_LV2 || section == COL_LV3 || section == COL_LV4) && (ev->button() == Qt::LeftButton)) + section == COL_LV2 || section == COL_LV3 || section == COL_LV4 || section == COL_CHANNEL || + section == COL_QNT) && (ev->button() == Qt::LeftButton)) { lineEdit(pitch, section); } @@ -483,6 +484,14 @@ void DList::lineEdit(int line, int section) case COL_LV4: editor->setText(QString::number(dm->lv4)); break; + + case COL_QNT: + editor->setText(QString::number(dm->quant)); + break; + + case COL_CHANNEL: + editor->setText(QString::number(dm->channel+1)); + break; } // editor->setText(dm->name); @@ -551,22 +560,35 @@ void DList::returnPressed() { ///val = atoi(editor->text().ascii()); val = atoi(editor->text().toAscii().constData()); - if (selectedColumn != COL_LEN) + + switch (selectedColumn) { - if(selectedColumn == COL_VOL) - { + case COL_VOL: if (val > 200) //Check bounds for volume val = 200; if (val < 0) val = 0; - } - else - { + break; + + case COL_LV1: + case COL_LV2: + case COL_LV3: + case COL_LV4: if (val > 127) //Check bounds for lv1-lv4 values val = 127; if (val < 0) val = 0; - } + break; + + case COL_CHANNEL: + val--; + if (val >= 16) + val = 15; + if (val < 0) + val = 0; + break; + + default: break; } } @@ -600,6 +622,14 @@ void DList::returnPressed() editEntry->lv4 = val; break; + case COL_QNT: + editEntry->quant = val; + break; + + case COL_CHANNEL: + editEntry->channel = val; + break; + default: printf("Return pressed in unknown column\n"); break; diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index f8815185..c090ea32 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4280,7 +4280,6 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) * between, for example, when a cis is tied to a des * * CURRENT TODO - * o add music-keyboard-bindings for "insert rest" and "increase note length" * o maybe support step-recording in score editor as well? * * IMPORTANT TODO -- cgit v1.2.3 From 9e3802aadd279ffd0a677df9dd5d21e02315d8b4 Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Tue, 24 May 2011 18:31:42 +0000 Subject: template sample rate, drum track channel, track list header --- muse2/ChangeLog | 3 +++ muse2/muse/app.cpp | 2 +- muse2/muse/app.h | 2 +- muse2/muse/arranger/tlist.cpp | 15 ++++++++++++--- muse2/muse/song.h | 2 +- muse2/muse/songfile.cpp | 8 ++++---- muse2/muse/widgets/header.cpp | 2 +- muse2/muse/widgets/mtrackinfo.cpp | 9 ++++++--- 8 files changed, 29 insertions(+), 14 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index bef2769f..742d5a48 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -6,6 +6,9 @@ under Midi -> Input Plugins -> Remote Control - song->midiNote now also delivers note off events (flo93) - fixed pitch-spinbox (flo93) + - removed auto-resize from tracklist-header (rj) + - removed channel from track list for a drum track and grayed it out in track info (rj) + - fixed samplerate warning from templates (rj) 23.05.2011: (all changes made by flo93, except one) Function-related changes: - made all the stuff in the "functions" menu global diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index f94f4a64..62871b18 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -1815,7 +1815,7 @@ void MusE::loadProjectFile1(const QString& name, bool songTemplate, bool loadAll } else { Xml xml(f); - read(xml, !loadAll); + read(xml, !loadAll, songTemplate); bool fileError = ferror(f); popenFlag ? pclose(f) : fclose(f); if (fileError) { diff --git a/muse2/muse/app.h b/muse2/muse/app.h index 2aa2834f..c194b603 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -195,7 +195,7 @@ class MusE : public QMainWindow QMenu* openRecent; bool readMidi(FILE*); - void read(Xml& xml, bool skipConfig); + void read(Xml& xml, bool skipConfig, bool isTemplate); void processTrack(MidiTrack* track); void write(Xml& xml) const; diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index fbd763d8..b1033a2a 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -299,7 +299,11 @@ void TList::paint(const QRect& r) { QString s; int n; - if (track->isMidiTrack()) { + if (track->isMidiTrack() && track->type() == Track::DRUM) { + p.drawText(r, Qt::AlignVCenter|Qt::AlignHCenter, "-"); + break; + } + else if (track->isMidiTrack()) { n = ((MidiTrack*)track)->outChannel() + 1; } else { @@ -1279,8 +1283,10 @@ void TList::mousePressEvent(QMouseEvent* ev) { MidiTrack* mt = dynamic_cast(t); if (mt == 0) - break; - + break; + if (mt->type() == Track::DRUM) + break; + int channel = mt->outChannel(); channel += delta; if(channel >= MIDI_CHANNELS) @@ -1554,6 +1560,9 @@ void TList::wheelEvent(QWheelEvent* ev) case COL_OCHANNEL: if (t->isMidiTrack()) { MidiTrack* mt = (MidiTrack*)t; + if (mt && mt->type() == Track::DRUM) + break; + int channel = mt->outChannel() + delta; if (channel >= MIDI_CHANNELS) diff --git a/muse2/muse/song.h b/muse2/muse/song.h index e1378480..47fd96d4 100644 --- a/muse2/muse/song.h +++ b/muse2/muse/song.h @@ -162,7 +162,7 @@ class Song : public QObject { AudioOutput* bounceOutput; void updatePos(); - void read(Xml&); + void read(Xml&, bool isTemplate=false); void write(int, Xml&) const; void writeFont(int level, Xml& xml, const char* name, const QFont& font) const; diff --git a/muse2/muse/songfile.cpp b/muse2/muse/songfile.cpp index a8134b1d..72cacfaa 100644 --- a/muse2/muse/songfile.cpp +++ b/muse2/muse/songfile.cpp @@ -1213,7 +1213,7 @@ void Song::readMarker(Xml& xml) // read //--------------------------------------------------------- -void Song::read(Xml& xml) +void Song::read(Xml& xml, bool isTemplate) { cloneList.clear(); for (;;) { @@ -1260,7 +1260,7 @@ void Song::read(Xml& xml) _follow = FollowMode(xml.parseInt()); else if (tag == "sampleRate") { int sRate = xml.parseInt(); - if (audioDevice->deviceType() != AudioDevice::DUMMY_AUDIO && sRate != sampleRate) + if (!isTemplate && audioDevice->deviceType() != AudioDevice::DUMMY_AUDIO && sRate != sampleRate) QMessageBox::warning(muse,"Wrong sample rate", "The sample rate in this project and the current system setting differs, the project may not work as intended!"); } else if (tag == "tempolist") { @@ -1373,7 +1373,7 @@ void Song::read(Xml& xml) // read song //--------------------------------------------------------- -void MusE::read(Xml& xml, bool skipConfig) +void MusE::read(Xml& xml, bool skipConfig, bool isTemplate) { bool skipmode = true; for (;;) { @@ -1398,7 +1398,7 @@ void MusE::read(Xml& xml, bool skipConfig) readConfiguration(xml, false); else if (tag == "song") { - song->read(xml); + song->read(xml, isTemplate); audio->msgUpdateSoloStates(); } else if (tag == "midiport") diff --git a/muse2/muse/widgets/header.cpp b/muse2/muse/widgets/header.cpp index 00cbd29c..61ebcc74 100644 --- a/muse2/muse/widgets/header.cpp +++ b/muse2/muse/widgets/header.cpp @@ -88,7 +88,7 @@ Header::Header(QWidget* parent, const char* name) itemModel = new QStandardItemModel; setModel(itemModel); setDefaultSectionSize(30); - setStretchLastSection(true); +// setStretchLastSection(true); } diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp index e6e618bd..465b7130 100644 --- a/muse2/muse/widgets/mtrackinfo.cpp +++ b/muse2/muse/widgets/mtrackinfo.cpp @@ -44,10 +44,13 @@ void MidiTrackInfo::setTrack(Track* t) selected = t; QPalette pal; - if(selected->type() == Track::DRUM) + if(selected->type() == Track::DRUM) { pal.setColor(trackNameLabel->backgroundRole(), config.drumTrackLabelBg); - else - pal.setColor(trackNameLabel->backgroundRole(), config.midiTrackLabelBg); + iOutputChannel->setEnabled(false); + } else { + pal.setColor(trackNameLabel->backgroundRole(), config.midiTrackLabelBg); + iOutputChannel->setEnabled(true); + } trackNameLabel->setPalette(pal); updateTrackInfo(-1); -- cgit v1.2.3 From ccef6200fac0de84de65bb0d3eda223acc6b03c6 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 25 May 2011 13:47:06 +0000 Subject: made drum list fully editable by LineEdits or PitchEdits --- muse2/muse/midiedit/dlist.cpp | 113 ++++++++++++++++++++++++++++++++---------- muse2/muse/midiedit/dlist.h | 23 +++++++++ 2 files changed, 110 insertions(+), 26 deletions(-) diff --git a/muse2/muse/midiedit/dlist.cpp b/muse2/muse/midiedit/dlist.cpp index 7640b38e..ab2ed230 100644 --- a/muse2/muse/midiedit/dlist.cpp +++ b/muse2/muse/midiedit/dlist.cpp @@ -23,10 +23,6 @@ #include "song.h" #include "scrollscale.h" -// enum DCols { COL_MUTE=0, COL_NAME, COL_QNT, COL_ENOTE, COL_LEN, -// COL_ANOTE, COL_CHANNEL, COL_PORT, -// COL_LV1, COL_LV2, COL_LV3, COL_LV4, COL_NONE=-1}; - //--------------------------------------------------------- // draw //--------------------------------------------------------- @@ -308,7 +304,6 @@ void DList::viewMousePressEvent(QMouseEvent* ev) if(val != dm->anote) { audio->msgIdle(true); - //audio->msgRemapPortDrumCtlEvents(pitch, val, -1, -1); song->remapPortDrumCtrlEvents(pitch, val, -1, -1); audio->msgIdle(false); dm->anote = val; @@ -387,24 +382,7 @@ void DList::viewMousePressEvent(QMouseEvent* ev) case COL_NAME: emit keyPressed(pitch, 100); //Mapping done on other side, send index break; -#if 0 - case COL_CHANNEL: - { - int channel = t->channel(); - if (button == Qt::RightButton) { - if (channel < 15) - ++channel; - } - else if (button == Qt::MidButton) { - if (channel > 0) - --channel; - } - if (channel != t->channel()) { - t->setChannel(channel); - emit channelChanged(); - } - } -#endif + default: break; } @@ -430,6 +408,8 @@ void DList::viewMouseDoubleClickEvent(QMouseEvent* ev) { lineEdit(pitch, section); } + else if ((section == COL_ANOTE || section == COL_ENOTE) && (ev->button() == Qt::LeftButton)) + pitchEdit(pitch, section); else viewMousePressEvent(ev); } @@ -505,6 +485,40 @@ void DList::lineEdit(int line, int section) } +//--------------------------------------------------------- +// pitchEdit +//--------------------------------------------------------- +void DList::pitchEdit(int line, int section) + { + DrumMap* dm = &drumMap[line]; + editEntry = dm; + if (pitch_editor == 0) { + pitch_editor = new DPitchEdit(this); + connect(pitch_editor, SIGNAL(editingFinished()), + SLOT(pitchEdited())); + pitch_editor->setFrame(true); + } + int colx = mapx(header->sectionPosition(section)); + int colw = rmapx(header->sectionSize(section)); + int coly = mapy(line * TH); + int colh = rmapy(TH); + selectedColumn = section; //Store selected column to have an idea of which one was selected when return is pressed + switch (section) { + case COL_ENOTE: + pitch_editor->setValue(dm->enote); + break; + + case COL_ANOTE: + pitch_editor->setValue(dm->anote); + break; + } + + pitch_editor->setGeometry(colx, coly, colw, colh); + pitch_editor->show(); + pitch_editor->setFocus(); + + } + //--------------------------------------------------------- // x2col @@ -641,6 +655,52 @@ void DList::returnPressed() redraw(); } +//--------------------------------------------------------- +// pitchValueChanged +//--------------------------------------------------------- + +void DList::pitchEdited() +{ + int val=pitch_editor->value(); + int pitch=(editEntry-drumMap); + + switch(selectedColumn) { + case COL_ANOTE: + if(val != editEntry->anote) + { + audio->msgIdle(true); + song->remapPortDrumCtrlEvents(pitch, val, -1, -1); + audio->msgIdle(false); + editEntry->anote = val; + song->update(SC_DRUMMAP); + } + break; + + case COL_ENOTE: + //Check if there is any other drumMap with the same inmap value (there should be one (and only one):-) + //If so, switch the inmap between the instruments + for (int i=0; ienote)] = i; + drumMap[i].enote = editEntry->enote; + break; + } + } + //TODO: Set all the notes on the track with pitch=dm->enote to pitch=val + editEntry->enote = val; + drumInmap[val] = pitch; + break; + default: + printf("Value changed in unknown column\n"); + break; + } + selectedColumn = -1; + pitch_editor->hide(); + editEntry = 0; + setFocus(); + redraw(); + } + //--------------------------------------------------------- // moved //--------------------------------------------------------- @@ -688,6 +748,7 @@ DList::DList(QHeaderView* h, QWidget* parent, int ymag) setFocusPolicy(Qt::StrongFocus); drag = NORMAL; editor = 0; + pitch_editor = 0; editEntry = 0; // always select a drum instrument currentlySelected = &drumMap[0]; @@ -745,9 +806,9 @@ void DList::viewMouseReleaseEvent(QMouseEvent* ev) emit mapChanged(sPitch, dPitch); //Track pitch change done in canvas } drag = NORMAL; -//?? redraw(); - if (editEntry) - editor->setFocus(); +//?? redraw(); //commented out NOT by flo93; was already commented out +// if (editEntry) //removed by flo93; seems to work without it +// editor->setFocus(); //and causes segfaults after adding the pitchedits int x = ev->x(); int y = ev->y(); bool shift = ev->modifiers() & Qt::ShiftModifier; diff --git a/muse2/muse/midiedit/dlist.h b/muse2/muse/midiedit/dlist.h index f57b7501..03437e64 100644 --- a/muse2/muse/midiedit/dlist.h +++ b/muse2/muse/midiedit/dlist.h @@ -11,6 +11,7 @@ #include #include +#include "awl/pitchedit.h" #include "view.h" #define TH 18 // normal Track-hight @@ -45,6 +46,25 @@ class DLineEdit: public QLineEdit } }; +//--------------------------------------------------------- +// DPitchEdit +//--------------------------------------------------------- +class DPitchEdit: public Awl::PitchEdit +{ + public: + DPitchEdit(QWidget* parent) : PitchEdit(parent) {} + virtual ~DPitchEdit() {}; + + virtual void keyPressEvent(QKeyEvent* keyItem) { + if ((keyItem->key() == Qt::Key_Escape) || (keyItem->key() == Qt::Key_Return)) { + parentWidget()->setFocus(); + hide(); + } + else + PitchEdit::keyPressEvent(keyItem); + } +}; + //--------------------------------------------------------- // DList //--------------------------------------------------------- @@ -53,6 +73,7 @@ class DList : public View { QHeaderView* header; ScrollScale* scroll; QLineEdit* editor; + DPitchEdit* pitch_editor; DrumMap* editEntry; DrumMap* currentlySelected; int selectedColumn; @@ -77,6 +98,7 @@ class DList : public View { private slots: void sizeChange(int, int, int); void returnPressed(); + void pitchEdited(); void moved(int, int, int); signals: @@ -91,6 +113,7 @@ class DList : public View { void songChanged(int); public: void lineEdit(int line, int section); + void pitchEdit(int line, int section); void setCurDrumInstrument(int n); DList(QHeaderView*, QWidget* parent, int ymag); ~DList(); -- cgit v1.2.3 From 5e47397a7d496b8dcc93e11b89cb0f9159f291e0 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 25 May 2011 15:38:43 +0000 Subject: undone commit 954: reintroduced midi-in buttons and the step-rec button for the drum editor. however, i disabled these buttons in the drum editor, because they have no function right now, and muse should not pretend there is some function. --- muse2/muse/midiedit/drumedit.cpp | 36 +++++++++++++++++++++++++++++++++++- muse2/muse/midiedit/ecanvas.cpp | 2 ++ muse2/muse/midiedit/ecanvas.h | 6 ++++++ muse2/muse/midiedit/pianoroll.cpp | 21 ++++++++++++++++++--- muse2/muse/midiedit/prcanvas.cpp | 3 +-- muse2/muse/midiedit/prcanvas.h | 4 ---- 6 files changed, 62 insertions(+), 10 deletions(-) diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index e64379a2..4d632984 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -289,6 +289,26 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini tools->addSeparator(); tools->addActions(undoRedo->actions()); + tools->addSeparator(); + + srec = new QToolButton(); + srec->setToolTip(tr("Step Record")); + srec->setIcon(*steprecIcon); + srec->setCheckable(true); + srec->setEnabled(false); //disabled by flo93 (see below) + tools->addWidget(srec); + + midiin = new QToolButton(); + midiin->setToolTip(tr("Midi Input")); + midiin->setIcon(*midiinIcon); + midiin->setCheckable(true); + midiin->setEnabled(false); //disabled by flo93 (see below) + tools->addWidget(midiin); + + // I disabled these buttons because they're without function; + // muse should not lie to the user pretending some functionality + // it doesn't have; they should be enabled as soon step-recording + // has been implemented. tools2 = new EditToolBar(this, drumeditTools); @@ -440,6 +460,8 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini connect(vscroll, SIGNAL(scaleChanged(int)), dlist, SLOT(setYMag(int))); connect(hscroll, SIGNAL(scrollChanged(int)), canvas, SLOT(setXPos(int))); connect(hscroll, SIGNAL(scaleChanged(int)), canvas, SLOT(setXMag(int))); + connect(srec, SIGNAL(toggled(bool)), canvas, SLOT(setSteprec(bool))); + connect(midiin, SIGNAL(toggled(bool)), canvas, SLOT(setMidiin(bool))); connect(vscroll, SIGNAL(scrollChanged(int)), dlist, SLOT(setYPos(int))); connect(hscroll, SIGNAL(scrollChanged(int)), time, SLOT(setXPos(int))); @@ -660,6 +682,8 @@ void DrumEdit::writeStatus(int level, Xml& xml) const split2->writeStatus(level, xml); header->writeStatus(level, xml); + xml.intTag(level, "steprec", canvas->steprec()); + xml.intTag(level, "midiin", canvas->midiin()); xml.intTag(level, "xpos", hscroll->pos()); xml.intTag(level, "xmag", hscroll->mag()); xml.intTag(level, "ypos", vscroll->pos()); @@ -681,7 +705,17 @@ void DrumEdit::readStatus(Xml& xml) case Xml::End: return; case Xml::TagStart: - if (tag == "ctrledit") { + if (tag == "steprec") { + int val = xml.parseInt(); + canvas->setSteprec(val); + srec->setChecked(val); + } + else if (tag == "midiin") { + int val = xml.parseInt(); + canvas->setMidiin(val); + midiin->setChecked(val); + } + else if (tag == "ctrledit") { CtrlEdit* ctrl = addCtrl(); ctrl->readStatus(xml); } diff --git a/muse2/muse/midiedit/ecanvas.cpp b/muse2/muse/midiedit/ecanvas.cpp index 8f04bdfc..7a421411 100644 --- a/muse2/muse/midiedit/ecanvas.cpp +++ b/muse2/muse/midiedit/ecanvas.cpp @@ -35,6 +35,8 @@ EventCanvas::EventCanvas(MidiEditor* pr, QWidget* parent, int sx, : Canvas(parent, sx, sy, name) { editor = pr; + _steprec = false; + _midiin = false; _playEvents = false; curVelo = 70; diff --git a/muse2/muse/midiedit/ecanvas.h b/muse2/muse/midiedit/ecanvas.h index a278fb19..86e1c200 100644 --- a/muse2/muse/midiedit/ecanvas.h +++ b/muse2/muse/midiedit/ecanvas.h @@ -51,6 +51,8 @@ class EventCanvas : public Canvas { MidiEditor* editor; unsigned start_tick, end_tick; int curVelo; + bool _steprec; + bool _midiin; void updateSelection(); virtual void addItem(Part*, Event&) = 0; @@ -59,6 +61,8 @@ class EventCanvas : public Canvas { public slots: void redrawGrid() { redraw(); } + void setSteprec(bool f) { _steprec = f; } + void setMidiin(bool f) { _midiin = f; } signals: void pitchChanged(int); // current cursor position @@ -71,6 +75,8 @@ class EventCanvas : public Canvas { MidiTrack* track() const; unsigned start() const { return start_tick; } unsigned end() const { return end_tick; } + bool midiin() const { return _midiin; } + bool steprec() const { return _steprec; } QString getCaption() const; void songChanged(int); void range(int* s, int* e) const { *s = start_tick; *e = end_tick; } diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp index 89f5ad6a..ab83e85f 100644 --- a/muse2/muse/midiedit/pianoroll.cpp +++ b/muse2/muse/midiedit/pianoroll.cpp @@ -236,6 +236,12 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i srec->setCheckable(true); tools->addWidget(srec); + midiin = new QToolButton(); + midiin->setToolTip(tr("Midi Input")); + midiin->setIcon(*midiinIcon); + midiin->setCheckable(true); + tools->addWidget(midiin); + speaker = new QToolButton(); speaker->setToolTip(tr("Play Events")); speaker->setIcon(*speakerIcon); @@ -435,6 +441,7 @@ PianoRoll::PianoRoll(PartList* pl, QWidget* parent, const char* name, unsigned i connect(piano, SIGNAL(keyPressed(int, int, bool)), canvas, SLOT(pianoPressed(int, int, bool))); connect(piano, SIGNAL(keyReleased(int, bool)), canvas, SLOT(pianoReleased(int, bool))); connect(srec, SIGNAL(toggled(bool)), SLOT(setSteprec(bool))); + connect(midiin, SIGNAL(toggled(bool)), canvas, SLOT(setMidiin(bool))); connect(speaker, SIGNAL(toggled(bool)), SLOT(setSpeaker(bool))); connect(canvas, SIGNAL(followEvent(int)), SLOT(follow(int))); @@ -866,7 +873,8 @@ void PianoRoll::writeStatus(int level, Xml& xml) const (*i)->writeStatus(level, xml); } - xml.intTag(level, "steprec", ((PianoCanvas*)canvas)->steprec()); + xml.intTag(level, "steprec", canvas->steprec()); + xml.intTag(level, "midiin", canvas->midiin()); xml.intTag(level, "tool", int(canvas->tool())); xml.intTag(level, "playEvents", _playEvents); xml.intTag(level, "xpos", hscroll->pos()); @@ -891,9 +899,14 @@ void PianoRoll::readStatus(Xml& xml) case Xml::TagStart: if (tag == "steprec") { int val = xml.parseInt(); - ((PianoCanvas*)canvas)->setSteprec(val); + canvas->setSteprec(val); srec->setChecked(val); } + else if (tag == "midiin") { + int val = xml.parseInt(); + canvas->setMidiin(val); + midiin->setChecked(val); + } else if (tag == "tool") { int tool = xml.parseInt(); canvas->setTool(tool); @@ -1117,7 +1130,9 @@ void PianoRoll::keyPressEvent(QKeyEvent* event) void PianoRoll::setSteprec(bool flag) { - ((PianoCanvas*)canvas)->setSteprec(flag); + canvas->setSteprec(flag); + if (flag == false) + midiin->setChecked(flag); } //--------------------------------------------------------- diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index c9f66737..7794c520 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -85,7 +85,6 @@ PianoCanvas::PianoCanvas(MidiEditor* pr, QWidget* parent, int sx, int sy) { colorMode = 0; playedPitch = -1; - _steprec = false; for (int i=0;i<128;i++) noteHeldDown[i]=false; chordTimer = new QTimer(this); @@ -1074,7 +1073,7 @@ void PianoCanvas::midiNote(int pitch, int velo) printf("\n"); } - if (_steprec && curPart + if (_midiin && _steprec && curPart && !audio->isPlaying() && velo && pos[0] >= start_tick && pos[0] < end_tick && !(globalKeyState & Qt::AltModifier)) { diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index e90ac613..c6d84e88 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -44,7 +44,6 @@ class PianoCanvas : public EventCanvas { QTimer* chordTimer; unsigned chordTimer_setToTick; bool noteHeldDown[128]; - bool _steprec; Q_OBJECT virtual void viewMouseDoubleClickEvent(QMouseEvent*); @@ -89,7 +88,6 @@ class PianoCanvas : public EventCanvas { void pianoCmd(int); void pianoPressed(int pitch, int velocity, bool shift); void pianoReleased(int pitch, bool); - void setSteprec(bool f) { _steprec = f; } public: enum { @@ -111,8 +109,6 @@ class PianoCanvas : public EventCanvas { redraw(); } virtual void modifySelected(NoteInfo::ValType type, int delta); - - bool steprec() const { return _steprec; } }; #endif -- cgit v1.2.3 From 3948032d0a2e439069d9a6859f7f35eebb54944d Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 25 May 2011 17:27:35 +0000 Subject: added step recording for drum edit step-recording stuff has been put into a easy-to-use StepRec class the midi-in and step-rec buttons are now fully functional again --- muse2/muse/CMakeLists.txt | 2 + muse2/muse/midiedit/dcanvas.cpp | 24 ++++++ muse2/muse/midiedit/dcanvas.h | 8 +- muse2/muse/midiedit/drumedit.cpp | 7 -- muse2/muse/midiedit/prcanvas.cpp | 161 ++------------------------------------- muse2/muse/midiedit/prcanvas.h | 7 +- muse2/muse/steprec.cpp | 159 ++++++++++++++++++++++++++++++++++++++ muse2/muse/steprec.h | 36 +++++++++ 8 files changed, 237 insertions(+), 167 deletions(-) create mode 100644 muse2/muse/steprec.cpp create mode 100644 muse2/muse/steprec.h diff --git a/muse2/muse/CMakeLists.txt b/muse2/muse/CMakeLists.txt index e6a90a59..cea95083 100644 --- a/muse2/muse/CMakeLists.txt +++ b/muse2/muse/CMakeLists.txt @@ -63,6 +63,7 @@ QT4_WRAP_CPP ( muse_moc_headers song.h transport.h value.h + steprec.h ) ## @@ -135,6 +136,7 @@ file (GLOB core_source_files waveevent.cpp wavetrack.cpp xml.cpp + steprec.cpp ) file (GLOB main_source_files main.cpp diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp index eea29b46..4f904be1 100644 --- a/muse2/muse/midiedit/dcanvas.cpp +++ b/muse2/muse/midiedit/dcanvas.cpp @@ -88,7 +88,11 @@ DrumCanvas::DrumCanvas(MidiEditor* pr, QWidget* parent, int sx, setVirt(false); cursorPos= QPoint(0,0); _stepSize=1; + + steprec=new StepRec(NULL); + songChanged(SC_TRACK_INSERTED); + connect(song, SIGNAL(midiNote(int, int)), SLOT(midiNote(int,int))); } //--------------------------------------------------------- @@ -1063,6 +1067,10 @@ void DrumCanvas::keyPressed(int index, int velocity) // play note: MidiPlayEvent e(0, port, channel, 0x90, pitch, velocity); audio->msgPlayMidiEvent(&e); + + if (_steprec && pos[0] >= start_tick && pos[0] < end_tick && curPart) + steprec->record(curPart,index,drumMap[index].len,editor->raster(),velocity,globalKeyState&Qt::ControlModifier,globalKeyState&Qt::ShiftModifier); + } //--------------------------------------------------------- @@ -1503,3 +1511,19 @@ void DrumCanvas::moveAwayUnused() used.erase(it++); } } + + +//--------------------------------------------------------- +// midiNote +//--------------------------------------------------------- +void DrumCanvas::midiNote(int pitch, int velo) + { + if (debugMsg) printf("DrumCanvas::midiNote: pitch=%i, velo=%i\n", pitch, velo); + + if (_midiin && _steprec && curPart + && !audio->isPlaying() && velo && pos[0] >= start_tick + && pos[0] < end_tick + && !(globalKeyState & Qt::AltModifier)) { + steprec->record(curPart,drumInmap[pitch],drumMap[(int)drumInmap[pitch]].len,editor->raster(),velo,globalKeyState&Qt::ControlModifier,globalKeyState&Qt::ShiftModifier); + } + } diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h index b86bc2d7..5a1fefeb 100644 --- a/muse2/muse/midiedit/dcanvas.h +++ b/muse2/muse/midiedit/dcanvas.h @@ -10,6 +10,7 @@ #include "ecanvas.h" #include "song.h" +#include "steprec.h" #define TH 18 @@ -40,7 +41,9 @@ class PianoRoll; //--------------------------------------------------------- class DrumCanvas : public EventCanvas { - + + StepRec* steprec; + // Cursor tool position QPoint cursorPos; int _stepSize; @@ -77,6 +80,9 @@ class DrumCanvas : public EventCanvas { signals: void newWidth(int); + private slots: + void midiNote(int pitch, int velo); + public slots: void mapChanged(int, int); void keyPressed(int, int); diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index 4d632984..4d2fae93 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -295,21 +295,14 @@ DrumEdit::DrumEdit(PartList* pl, QWidget* parent, const char* name, unsigned ini srec->setToolTip(tr("Step Record")); srec->setIcon(*steprecIcon); srec->setCheckable(true); - srec->setEnabled(false); //disabled by flo93 (see below) tools->addWidget(srec); midiin = new QToolButton(); midiin->setToolTip(tr("Midi Input")); midiin->setIcon(*midiinIcon); midiin->setCheckable(true); - midiin->setEnabled(false); //disabled by flo93 (see below) tools->addWidget(midiin); - // I disabled these buttons because they're without function; - // muse should not lie to the user pretending some functionality - // it doesn't have; they should be enabled as soon step-recording - // has been implemented. - tools2 = new EditToolBar(this, drumeditTools); addToolBar(tools2); diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index 7794c520..75ad3c06 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -37,8 +37,6 @@ #include "song.h" #include "audio.h" -#define CHORD_TIMEOUT 75 - //--------------------------------------------------------- // NEvent //--------------------------------------------------------- @@ -87,13 +85,8 @@ PianoCanvas::PianoCanvas(MidiEditor* pr, QWidget* parent, int sx, int sy) playedPitch = -1; for (int i=0;i<128;i++) noteHeldDown[i]=false; - chordTimer = new QTimer(this); - chordTimer->setSingleShot(true); - chordTimer->setInterval(CHORD_TIMEOUT); - chordTimer->stop(); + steprec=new StepRec(noteHeldDown); - connect(chordTimer, SIGNAL(timeout()), SLOT(chordTimerTimedOut())); - songChanged(SC_TRACK_INSERTED); connect(song, SIGNAL(midiNote(int, int)), SLOT(midiNote(int,int))); } @@ -778,27 +771,9 @@ void PianoCanvas::pianoPressed(int pitch, int velocity, bool shift) //MidiPlayEvent e(0, port, channel, 0x90, pitch, 127); MidiPlayEvent e(0, port, channel, 0x90, pitch, velocity); audio->msgPlayMidiEvent(&e); - - if (_steprec && pos[0] >= start_tick && pos[0] < end_tick) { - if (curPart) { - int len = editor->raster(); - unsigned tick = pos[0] - curPart->tick(); //CDW - if (shift) - tick -= editor->rasterStep(tick); - Event e(Note); - e.setTick(tick); - e.setPitch(pitch); - e.setVelo(127); - e.setLenTick(len); - // Indicate do undo, and do not do port controller values and clone parts. - //audio->msgAddEvent(e, curPart); - audio->msgAddEvent(e, curPart, true, false, false); - tick += editor->rasterStep(tick) + curPart->tick(); - if (tick != song->cpos()) { - Pos p(tick, true); - song->setPos(0, p, true, false, true); - } - } + + if (_steprec && pos[0] >= start_tick && pos[0] < end_tick && curPart) { + steprec->record(curPart,pitch,editor->raster(),editor->raster(),velocity,globalKeyState&Qt::ControlModifier,shift); } } @@ -1077,136 +1052,10 @@ void PianoCanvas::midiNote(int pitch, int velo) && !audio->isPlaying() && velo && pos[0] >= start_tick && pos[0] < end_tick && !(globalKeyState & Qt::AltModifier)) { - - if (pitch!=rcSteprecNote) { - chordTimer->stop(); - - //len has been changed by flo: set to raster() instead of quant() - //reason: the quant-toolbar has been removed; the flexibility you - //lose with this can be re-gained by applying a "modify note len" - //on the notes you have entered. - unsigned int len = editor->raster();//prevent compiler warning: comparison singed/unsigned - unsigned tick = pos[0]; //CDW - unsigned starttick = tick; - - // - // extend len of last note? - // - EventList* events = curPart->events(); - if (globalKeyState & Qt::ControlModifier) { - for (iEvent i = events->begin(); i != events->end(); ++i) { - Event ev = i->second; - if (!ev.isNote()) - continue; - if (ev.pitch() == pitch && ((ev.tick() + ev.lenTick()) == /*(int)*/starttick)) { - Event e = ev.clone(); - e.setLenTick(ev.lenTick() + editor->rasterStep(starttick)); - // Indicate do undo, and do not do port controller values and clone parts. - //audio->msgChangeEvent(ev, e, curPart); - audio->msgChangeEvent(ev, e, curPart, true, false, false); - - if (! (globalKeyState & Qt::ShiftModifier)) { - chordTimer_setToTick = tick + editor->rasterStep(tick); - chordTimer->start(); - } - return; - } - } - } - - // - // if we already entered the note, delete it - // - EventRange range = events->equal_range(tick); - for (iEvent i = range.first; i != range.second; ++i) { - Event ev = i->second; - if (ev.isNote() && ev.pitch() == pitch) { - // Indicate do undo, and do not do port controller values and clone parts. - //audio->msgDeleteEvent(ev, curPart); - audio->msgDeleteEvent(ev, curPart, true, false, false); - - if (! (globalKeyState & Qt::ShiftModifier)) { - chordTimer_setToTick = tick + editor->rasterStep(tick); - chordTimer->start(); - } - - return; - } - } - Event e(Note); - e.setTick(tick - curPart->tick()); - e.setPitch(pitch); - e.setVelo(velo); - e.setLenTick(len); - // Indicate do undo, and do not do port controller values and clone parts. - //audio->msgAddEvent(e, curPart); - audio->msgAddEvent(e, curPart, true, false, false); - - if (! (globalKeyState & Qt::ShiftModifier)) { - chordTimer_setToTick = tick + editor->rasterStep(tick); - chordTimer->start(); - } - } - else { // equals if (pitch==rcSteprecNote) - bool held_notes=false; - for (int i=0;i<128;i++) - if (noteHeldDown[i]) { held_notes=true; break; } - - if (held_notes) - { - chordTimer->stop(); - - unsigned tick = pos[0]; - - // extend len of last note(s) - using std::set; - - set extend_set; - EventList* events = curPart->events(); - for (iEvent i = events->begin(); i != events->end(); ++i) { - Event& ev = i->second; - if (!ev.isNote()) - continue; - - if (noteHeldDown[ev.pitch()] && ((ev.tick() + ev.lenTick()) == tick)) - extend_set.insert(&ev); - } - for (set::iterator it=extend_set.begin(); it!=extend_set.end(); it++) - { - Event& ev=**it; - Event e = ev.clone(); - e.setLenTick(ev.lenTick() + editor->rasterStep(tick)); - // Indicate do undo, and do not do port controller values and clone parts. - audio->msgChangeEvent(ev, e, curPart, true, false, false); - } - - if (! (globalKeyState & Qt::ShiftModifier)) { - chordTimer_setToTick = tick + editor->rasterStep(tick); - chordTimer->start(); - } - return; - - } - else // equals if (!held_notes) - { - chordTimer->stop(); - - //simply proceed, inserting a rest - Pos p(pos[0] + editor->rasterStep(pos[0]), true); - song->setPos(0, p, true, false, true); - } - } + steprec->record(curPart,pitch,editor->raster(),editor->raster(),velo,globalKeyState&Qt::ControlModifier,globalKeyState&Qt::ShiftModifier); } } -void PianoCanvas::chordTimerTimedOut() -{ - if (chordTimer_setToTick != song->cpos()) - { - Pos p(chordTimer_setToTick, true); - song->setPos(0, p, true, false, true); - } -} /* //--------------------------------------------------------- diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index c6d84e88..b9da00c6 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -17,6 +17,8 @@ #include #include +#include "steprec.h" + #define KH 13 //--------------------------------------------------------- @@ -41,9 +43,9 @@ class PianoCanvas : public EventCanvas { int colorMode; int playedPitch; - QTimer* chordTimer; - unsigned chordTimer_setToTick; bool noteHeldDown[128]; + + StepRec* steprec; Q_OBJECT virtual void viewMouseDoubleClickEvent(QMouseEvent*); @@ -77,7 +79,6 @@ class PianoCanvas : public EventCanvas { private slots: void midiNote(int pitch, int velo); - void chordTimerTimedOut(); signals: void quantChanged(int); diff --git a/muse2/muse/steprec.cpp b/muse2/muse/steprec.cpp new file mode 100644 index 00000000..29cb9540 --- /dev/null +++ b/muse2/muse/steprec.cpp @@ -0,0 +1,159 @@ +//========================================================= +// MusE +// Linux Music Editor +// steprec.cpp +// (C) Copyright 2011 Florian Jung (flo93@users.sourceforge.net) +//========================================================= + +#include "steprec.h" +#include "part.h" +#include "event.h" +#include "globals.h" + +#include "song.h" +#include "audio.h" + +#include + +#define CHORD_TIMEOUT 75 + +StepRec::StepRec(bool* note_held_down_array) +{ + note_held_down=note_held_down_array; + + chord_timer=new QTimer(this); + chord_timer->setSingleShot(true); + chord_timer->setInterval(CHORD_TIMEOUT); + chord_timer->stop(); + connect(chord_timer, SIGNAL(timeout()), SLOT(timeout())); +} + +void StepRec::timeout() +{ + if (chord_timer_set_to_tick != song->cpos()) + { + Pos p(chord_timer_set_to_tick, true); + song->setPos(0, p, true, false, true); + } +} + +void StepRec::record(Part* part, int pitch, int len, int step, int velo, bool ctrl, bool shift) +{ + unsigned tick = song->cpos(); + + if (pitch!=rcSteprecNote) { + chord_timer->stop(); + + + // + // extend len of last note? + // + EventList* events = part->events(); + if (ctrl) { + for (iEvent i = events->begin(); i != events->end(); ++i) { + Event ev = i->second; + if (!ev.isNote()) + continue; + if (ev.pitch() == pitch && ((ev.tick() + ev.lenTick()) == tick)) { + Event e = ev.clone(); + e.setLenTick(ev.lenTick() + len); + // Indicate do undo, and do not do port controller values and clone parts. + audio->msgChangeEvent(ev, e, part, true, false, false); + + if (!shift) { + chord_timer_set_to_tick = tick + step; + chord_timer->start(); + } + return; + } + } + } + + // + // if we already entered the note, delete it + // + EventRange range = events->equal_range(tick); + for (iEvent i = range.first; i != range.second; ++i) { + Event ev = i->second; + if (ev.isNote() && ev.pitch() == pitch) { + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgDeleteEvent(ev, part); + audio->msgDeleteEvent(ev, part, true, false, false); + + if (!shift) { + chord_timer_set_to_tick = tick + step; + chord_timer->start(); + } + + return; + } + } + + Event e(Note); + e.setTick(tick - part->tick()); + e.setPitch(pitch); + e.setVelo(velo); + e.setLenTick(len); + // Indicate do undo, and do not do port controller values and clone parts. + //audio->msgAddEvent(e, part); + audio->msgAddEvent(e, part, true, false, false); + + if (! (globalKeyState & Qt::ShiftModifier)) { + chord_timer_set_to_tick = tick + step; + chord_timer->start(); + } + } + else { // equals if (pitch==rcSteprecNote) + bool held_notes=false; + if (note_held_down!=NULL) + { + for (int i=0;i<128;i++) + if (note_held_down[i]) { held_notes=true; break; } + } + else + held_notes=false; + + + if (held_notes) + { + chord_timer->stop(); + + // extend len of last note(s) + using std::set; + + set extend_set; + EventList* events = part->events(); + for (iEvent i = events->begin(); i != events->end(); ++i) { + Event& ev = i->second; + if (!ev.isNote()) + continue; + + if (note_held_down[ev.pitch()] && ((ev.tick() + ev.lenTick()) == tick)) + extend_set.insert(&ev); + } + for (set::iterator it=extend_set.begin(); it!=extend_set.end(); it++) + { + Event& ev=**it; + Event e = ev.clone(); + e.setLenTick(ev.lenTick() + len); + // Indicate do undo, and do not do port controller values and clone parts. + audio->msgChangeEvent(ev, e, part, true, false, false); + } + + if (!shift) { + chord_timer_set_to_tick = tick + step; + chord_timer->start(); + } + return; + + } + else // equals if (!held_notes) + { + chord_timer->stop(); + + //simply proceed, inserting a rest + Pos p(song->cpos() + step, true); + song->setPos(0, p, true, false, true); + } + } +} diff --git a/muse2/muse/steprec.h b/muse2/muse/steprec.h new file mode 100644 index 00000000..b09a9edd --- /dev/null +++ b/muse2/muse/steprec.h @@ -0,0 +1,36 @@ +//========================================================= +// MusE +// Linux Music Editor +// steprec.h +// (C) Copyright 2011 Florian Jung (flo93@users.sourceforge.net) +//========================================================= + +#ifndef __STEPREC_H__ +#define __STEPREC_H__ + +#include +#include + +#include "part.h" + + +class StepRec : public QObject +{ + Q_OBJECT + + public: + StepRec(bool* note_held_down_array); + + void record(Part* part, int pitch, int len, int step, int velo=80, bool ctrl=false, bool shift=false); + + private slots: + void timeout(); + + private: + QTimer* chord_timer; + int chord_timer_set_to_tick; + bool* note_held_down; + +}; + +#endif -- cgit v1.2.3 From a1db21404d203bec7353099a9947778735271bfd Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Wed, 25 May 2011 18:26:02 +0000 Subject: added step-recording support to the score editor moved clefTypes to avoid compile-horror updated templates due to the new toolbar --- muse2/ChangeLog | 5 +++ muse2/muse/arranger/tlist.cpp | 13 +++--- muse2/muse/cleftypes.h | 13 ++++++ muse2/muse/functions.cpp | 1 + muse2/muse/midiedit/scoreedit.cpp | 77 +++++++++++++++++++++++++++++++----- muse2/muse/midiedit/scoreedit.h | 21 ++++++++-- muse2/muse/track.cpp | 6 +-- muse2/muse/track.h | 8 ++-- muse2/share/templates/audio.med | 2 +- muse2/share/templates/default.med | 2 +- muse2/share/templates/midiGM.med | 2 +- muse2/share/templates/monorecord.med | 2 +- muse2/share/templates/synti.med | 2 +- 13 files changed, 122 insertions(+), 32 deletions(-) create mode 100644 muse2/muse/cleftypes.h diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 742d5a48..24545b76 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,8 @@ +25.05.2011: + - Added midiin and steprec buttons again (flo93) + - Added step-rec-support for drum edit and score edit (flo93) + - put step-rec-stuff into its own class (flo93) + - moved clefTypes out of scoreedit.h to prevent compile-horror (flo93) 24.05.2011: - Awl::PitchEdit now can be set with the musical keyboard (flo93) - fixed y-stretch (flo93) diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index b1033a2a..9e4db5ba 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -44,7 +44,6 @@ #include "midiedit/drummap.h" #include "synth.h" #include "config.h" -#include "scoreedit.h" #include "popupmenu.h" #ifdef DSSI_SUPPORT @@ -365,11 +364,11 @@ void TList::paint(const QRect& r) case COL_CLEF: if (track->isMidiTrack()) { QString s = tr("no clef"); - if (((MidiTrack*)track)->getClef() == ScoreEdit::trebleClef) + if (((MidiTrack*)track)->getClef() == trebleClef) s=tr("Treble"); - else if (((MidiTrack*)track)->getClef() == ScoreEdit::bassClef) + else if (((MidiTrack*)track)->getClef() == bassClef) s=tr("Bass"); - else if (((MidiTrack*)track)->getClef() == ScoreEdit::grandStaff) + else if (((MidiTrack*)track)->getClef() == grandStaff) s=tr("Grand"); p.drawText(r, Qt::AlignVCenter|Qt::AlignLeft, s); } @@ -1086,13 +1085,13 @@ void TList::mousePressEvent(QMouseEvent* ev) if (act) { switch (act->data().toInt()) { case 0: - ((MidiTrack*)t)->setClef(ScoreEdit::trebleClef); + ((MidiTrack*)t)->setClef(trebleClef); break; case 1: - ((MidiTrack*)t)->setClef(ScoreEdit::bassClef); + ((MidiTrack*)t)->setClef(bassClef); break; case 2: - ((MidiTrack*)t)->setClef(ScoreEdit::grandStaff); + ((MidiTrack*)t)->setClef(grandStaff); break; default: break; diff --git a/muse2/muse/cleftypes.h b/muse2/muse/cleftypes.h new file mode 100644 index 00000000..8c14a6d3 --- /dev/null +++ b/muse2/muse/cleftypes.h @@ -0,0 +1,13 @@ +//========================================================= +// MusE +// Linux Music Editor +// cleftypes.h +// (C) Copyright 2011 Florian Jung (flo93@users.sourceforge.net) +//========================================================= + +#ifndef __CLEFTYPES_H__ +#define __CLEFTYPES_H__ + +enum clefTypes { trebleClef, bassClef, grandStaff }; + +#endif diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index 89a66fa7..5677bcfd 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -12,6 +12,7 @@ #include "audio.h" #include "gconfig.h" +#include #include #include diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index c090ea32..f8d2a3ba 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -211,6 +211,23 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) undo_tools->addActions(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); + steprec_tools->addWidget(srec); + connect(srec, SIGNAL(toggled(bool)), SLOT(set_steprec(bool))); + + midiin = new QToolButton(); + midiin->setToolTip(tr("Midi Input")); + midiin->setIcon(*midiinIcon); + midiin->setCheckable(true); + steprec_tools->addWidget(midiin); + connect(midiin, SIGNAL(toggled(bool)), score_canvas, SLOT(set_midiin(bool))); + + edit_tools = new EditToolBar(this, PointerTool | PencilTool | RubberTool); addToolBar(edit_tools); edit_tools->set(PointerTool); @@ -457,6 +474,15 @@ ScoreEdit::~ScoreEdit() } +void ScoreEdit::set_steprec(bool flag) +{ + score_canvas->set_steprec(flag); + if (flag == false) + midiin->setChecked(false); +} + + + void ScoreEdit::velo_box_changed() { emit velo_changed(velo_spinbox->value()); @@ -714,6 +740,8 @@ void ScoreEdit::writeStatus(int level, Xml& xml) const xml.strTag(level, "name", name); xml.intTag(level, "tool", edit_tools->curTool()); + xml.intTag(level, "steprec", srec->isChecked()); + xml.intTag(level, "midiin", midiin->isChecked()); xml.intTag(level, "quantPower", score_canvas->quant_power2()); xml.intTag(level, "pxPerWhole", score_canvas->pixels_per_whole()); xml.intTag(level, "newNoteVelo", velo_spinbox->value()); @@ -806,6 +834,10 @@ void ScoreEdit::readStatus(Xml& xml) set_name(xml.parse1()); else if (tag == "tool") edit_tools->set(xml.parseInt()); + else if (tag == "midiin") + midiin->setChecked(xml.parseInt()); + else if (tag == "steprec") + srec->setChecked(xml.parseInt()); else if (tag == "quantPower") quant_combobox->setCurrentIndex(xml.parseInt()-1); else if (tag == "pxPerWhole") @@ -936,13 +968,13 @@ void ScoreCanvas::add_staves(PartList* pl, bool all_in_one) if (all_in_one) { - ScoreEdit::clefTypes clef=((MidiTrack*)pl->begin()->second->track())->getClef(); + clefTypes clef=((MidiTrack*)pl->begin()->second->track())->getClef(); staff.parts.clear(); for (ciPart part_it=pl->begin(); part_it!=pl->end(); part_it++) { if (((MidiTrack*)part_it->second->track())->getClef() != clef) - clef=ScoreEdit::grandStaff; + clef=grandStaff; staff.parts.insert(part_it->second); } @@ -950,19 +982,19 @@ void ScoreCanvas::add_staves(PartList* pl, bool all_in_one) switch (clef) { - case ScoreEdit::trebleClef: + case trebleClef: staff.type=NORMAL; staff.clef=VIOLIN; staves.push_back(staff); break; - case ScoreEdit::bassClef: + case bassClef: staff.type=NORMAL; staff.clef=BASS; staves.push_back(staff); break; - case ScoreEdit::grandStaff: + case grandStaff: staff.type=GRAND_TOP; staff.clef=VIOLIN; staves.push_back(staff); @@ -994,19 +1026,19 @@ void ScoreCanvas::add_staves(PartList* pl, bool all_in_one) switch (((MidiTrack*)(*track_it))->getClef()) { - case ScoreEdit::trebleClef: + case trebleClef: staff.type=NORMAL; staff.clef=VIOLIN; staves.push_back(staff); break; - case ScoreEdit::bassClef: + case bassClef: staff.type=NORMAL; staff.clef=BASS; staves.push_back(staff); break; - case ScoreEdit::grandStaff: + case grandStaff: staff.type=GRAND_TOP; staff.clef=VIOLIN; staves.push_back(staff); @@ -1036,6 +1068,12 @@ ScoreCanvas::ScoreCanvas(ScoreEdit* pr, QWidget* parent_widget) : View(parent_wi init_pixmaps(); + srec=false; + midiin=false; + for (int i=0;i<128;i++) held_notes[i]=false; + steprec=new StepRec(held_notes); + connect(song, SIGNAL(midiNote(int, int)), SLOT(midi_note(int,int))); + x_pos=0; x_left=0; y_pos=0; @@ -4254,6 +4292,27 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) } } +void ScoreCanvas::set_steprec(bool flag) +{ + srec=flag; +} + +void ScoreCanvas::set_midiin(bool flag) +{ + midiin=flag; +} + +void ScoreCanvas::midi_note(int pitch, int velo) +{ + if (velo) + held_notes[pitch]=true; + else + held_notes[pitch]=false; + + if ( midiin && srec && selected_part && !audio->isPlaying() && velo ) + steprec->record(selected_part,pitch,quant_ticks(),quant_ticks(),velo,globalKeyState&Qt::ControlModifier,globalKeyState&Qt::ShiftModifier); +} + //the following assertions are made: // pix_quarter.width() == pix_half.width() @@ -4280,7 +4339,7 @@ void staff_t::apply_lasso(QRect rect, set& already_processed) * between, for example, when a cis is tied to a des * * CURRENT TODO - * o maybe support step-recording in score editor as well? + * x nothing atm * * IMPORTANT TODO * o do partial recalculating; recalculating can take pretty long diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index 2ce8d645..71b672a9 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -22,6 +22,7 @@ #include #include #include +#include #include #include "noteinfo.h" @@ -32,6 +33,8 @@ #include "part.h" #include "keyevent.h" #include "mtscale_flo.h" +#include "steprec.h" +#include "cleftypes.h" #include #include @@ -72,9 +75,6 @@ class EditToolBar; class ScoreEdit : public TopWin { Q_OBJECT - public: - enum clefTypes { trebleClef, bassClef, grandStaff }; - private: virtual void closeEvent(QCloseEvent*); virtual void resizeEvent(QResizeEvent*); @@ -110,6 +110,9 @@ class ScoreEdit : public TopWin QAction* color_black_action; QAction* color_velo_action; QAction* color_part_action; + + QToolButton* srec; + QToolButton* midiin; QScrollBar* xscroll; QScrollBar* yscroll; @@ -133,6 +136,7 @@ class ScoreEdit : public TopWin void menu_command(int); void velo_box_changed(); void velo_off_box_changed(); + void set_steprec(bool); signals: void deleted(unsigned long); @@ -616,6 +620,8 @@ class ScoreCanvas : public View list staves; + StepRec* steprec; + // the drawing area is split into a "preamble" containing clef, // key and time signature, and the "item's area" containing the // actual items (notes, bars, rests, etc.) @@ -668,7 +674,10 @@ class ScoreCanvas : public View bool undo_started; int undo_flags; - + + bool srec; + bool midiin; + bool held_notes[128]; enum {COLOR_MODE_BLACK, COLOR_MODE_PART, COLOR_MODE_VELO} coloring_mode; bool preamble_contains_keysig; @@ -696,6 +705,7 @@ class ScoreCanvas : public View void config_changed(); void deselect_all(); + void midi_note(int pitch, int velo); public slots: void x_scroll_event(int); @@ -715,6 +725,9 @@ class ScoreCanvas : public View void set_velo(int); void set_velo_off(int); + + void set_steprec(bool); + void set_midiin(bool); signals: void xscroll_changed(int); diff --git a/muse2/muse/track.cpp b/muse2/muse/track.cpp index 5dab4c09..5f358375 100644 --- a/muse2/muse/track.cpp +++ b/muse2/muse/track.cpp @@ -369,7 +369,7 @@ MidiTrack::MidiTrack() init(); _events = new EventList; _mpevents = new MPEventList; - clefType=ScoreEdit::trebleClef; + clefType=trebleClef; } //MidiTrack::MidiTrack(const MidiTrack& mt) @@ -389,7 +389,7 @@ MidiTrack::MidiTrack(const MidiTrack& mt, bool cloneParts) len = mt.len; compression = mt.compression; _recEcho = mt.recEcho(); - clefType=ScoreEdit::trebleClef; + clefType=trebleClef; } MidiTrack::~MidiTrack() @@ -959,7 +959,7 @@ void MidiTrack::read(Xml& xml) else if (tag == "automation") setAutomationType(AutomationType(xml.parseInt())); else if (tag == "clef") - clefType = (ScoreEdit::clefTypes)xml.parseInt(); + clefType = (clefTypes)xml.parseInt(); else if (Track::readProperties(xml, tag)) { // version 1.0 compatibility: if (tag == "track" && xml.majorVersion() == 1 && xml.minorVersion() == 0) diff --git a/muse2/muse/track.h b/muse2/muse/track.h index d1dc3a6f..50870166 100644 --- a/muse2/muse/track.h +++ b/muse2/muse/track.h @@ -20,7 +20,7 @@ #include "route.h" #include "ctrl.h" #include "globaldefs.h" -#include "scoreedit.h" +#include "cleftypes.h" class Pipeline; class Xml; @@ -209,7 +209,7 @@ class MidiTrack : public Track { EventList* _events; // tmp Events during midi import MPEventList* _mpevents; // tmp Events druring recording static bool _isVisible; - ScoreEdit::clefTypes clefType; + clefTypes clefType; public: MidiTrack(); @@ -276,8 +276,8 @@ class MidiTrack : public Track { static void setVisible(bool t) { _isVisible = t; } static bool visible() { return _isVisible; } - void setClef(ScoreEdit::clefTypes i) { clefType = i; } - ScoreEdit::clefTypes getClef() { return clefType; } + void setClef(clefTypes i) { clefType = i; } + clefTypes getClef() { return clefType; } }; //--------------------------------------------------------- diff --git a/muse2/share/templates/audio.med b/muse2/share/templates/audio.med index 85b9edb4..35f5d8f5 100644 --- a/muse2/share/templates/audio.med +++ b/muse2/share/templates/audio.med @@ -309,7 +309,7 @@ 880 466 - 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000030000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000099ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000fc00000000000000000000000a00700061006e0069006301000003460000011f0000000000000000 + 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c00730100000099ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e0067007301000000d9ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000ff00000000000000000000000a00700061006e006900630100000349ffffffff0000000000000000 0 diff --git a/muse2/share/templates/default.med b/muse2/share/templates/default.med index 82390cc4..11d2f33a 100644 --- a/muse2/share/templates/default.med +++ b/muse2/share/templates/default.med @@ -309,7 +309,7 @@ 880 466 - 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000030000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000099ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000fc00000000000000000000000a00700061006e0069006301000003460000011f0000000000000000 + 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c00730100000099ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e0067007301000000d9ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000ff00000000000000000000000a00700061006e006900630100000349ffffffff0000000000000000 0 diff --git a/muse2/share/templates/midiGM.med b/muse2/share/templates/midiGM.med index e5459c14..2fc6bc77 100644 --- a/muse2/share/templates/midiGM.med +++ b/muse2/share/templates/midiGM.med @@ -357,7 +357,7 @@ 880 466 - 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000030000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000099ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000fc00000000000000000000000a00700061006e0069006301000003460000011f0000000000000000 + 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c00730100000099ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e0067007301000000d9ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000ff00000000000000000000000a00700061006e006900630100000349ffffffff0000000000000000 0 diff --git a/muse2/share/templates/monorecord.med b/muse2/share/templates/monorecord.med index fc8b324c..bcb469f5 100644 --- a/muse2/share/templates/monorecord.med +++ b/muse2/share/templates/monorecord.med @@ -309,7 +309,7 @@ 880 466 - 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000030000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000099ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000fc00000000000000000000000a00700061006e0069006301000003460000011f0000000000000000 + 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c00730100000099ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e0067007301000000d9ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000ff00000000000000000000000a00700061006e006900630100000349ffffffff0000000000000000 0 diff --git a/muse2/share/templates/synti.med b/muse2/share/templates/synti.med index 1939dacb..da39fee0 100644 --- a/muse2/share/templates/synti.med +++ b/muse2/share/templates/synti.med @@ -712,7 +712,7 @@ 880 466 - 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000030000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e006700730100000099ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000fc00000000000000000000000a00700061006e0069006301000003460000011f0000000000000000 + 000000ff00000000fd00000000000003700000018500000004000000040000000800000008fc0000000200000002000000040000001e0055006e0064006f002f005200650064006f00200074006f006f006c00730100000000ffffffff000000000000000000000014004500640069007400200054006f006f006c00730100000040ffffffff00000000000000000000002800530074006500700020007200650063006f007200640069006e006700200074006f006f006c00730100000099ffffffff000000000000000000000022004e006500770020006e006f00740065002000730065007400740069006e0067007301000000d9ffffffff000000000000000000000002000000030000002a005100750061006e007400690073006100740069006f006e002000730065007400740069006e0067007301000000000000024a000000000000000000000012007400720061006e00730070006f00720074010000024a000000ff00000000000000000000000a00700061006e006900630100000349ffffffff0000000000000000 0 -- cgit v1.2.3 From e8612708161b71b43d56ef47eede6cc58b035967 Mon Sep 17 00:00:00 2001 From: "Tim E. Real" Date: Thu, 26 May 2011 00:18:47 +0000 Subject: Moved all routing popup menu stuff from app, astrip, mstrip, mtrackinfo into new class RoutePopupMenu, *massively* cleaning up those 4 files. Used new Route QVariant type as action data instead of integers. Moved MenuTitleItem definitions from astrip.cpp into it's own menutitleitem.cpp Added to settings: "Make popup menus stay open. Otherwise hold Ctrl." --- muse2/ChangeLog | 7 + muse2/muse/app.cpp | 796 +--------------- muse2/muse/app.h | 27 +- muse2/muse/audiotrack.cpp | 1 + muse2/muse/conf.cpp | 40 +- muse2/muse/confmport.cpp | 6 +- muse2/muse/driver/jack.cpp | 24 +- muse2/muse/gconfig.cpp | 3 +- muse2/muse/gconfig.h | 1 + muse2/muse/globals.cpp | 4 - muse2/muse/globals.h | 10 - muse2/muse/mixer/astrip.cpp | 1058 +-------------------- muse2/muse/mixer/astrip.h | 6 +- muse2/muse/mixer/mstrip.cpp | 52 +- muse2/muse/mixer/mstrip.h | 5 - muse2/muse/node.cpp | 2 +- muse2/muse/route.cpp | 22 +- muse2/muse/route.h | 15 +- muse2/muse/seqmsg.cpp | 4 +- muse2/muse/song.cpp | 4 +- muse2/muse/wavetrack.cpp | 2 +- muse2/muse/widgets/CMakeLists.txt | 4 + muse2/muse/widgets/genset.cpp | 3 + muse2/muse/widgets/gensetbase.ui | 23 +- muse2/muse/widgets/menutitleitem.cpp | 48 + muse2/muse/widgets/mtrackinfo.cpp | 98 +- muse2/muse/widgets/mtrackinfo.h | 2 - muse2/muse/widgets/musewidgetsplug.cpp | 5 +- muse2/muse/widgets/popupmenu.cpp | 91 +- muse2/muse/widgets/popupmenu.h | 3 +- muse2/muse/widgets/routepopup.cpp | 1416 +++++++++++++++++++++++++++++ muse2/muse/widgets/routepopup.h | 73 ++ muse2/synti/deicsonze/deicsonzeplugin.cpp | 8 +- 33 files changed, 1720 insertions(+), 2143 deletions(-) create mode 100644 muse2/muse/widgets/menutitleitem.cpp create mode 100644 muse2/muse/widgets/routepopup.cpp create mode 100644 muse2/muse/widgets/routepopup.h diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 24545b76..613cecc1 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -3,6 +3,13 @@ - Added step-rec-support for drum edit and score edit (flo93) - put step-rec-stuff into its own class (flo93) - moved clefTypes out of scoreedit.h to prevent compile-horror (flo93) + - Declared struct Route as QMetaType to make it a QVariant type. (Tim) + - Moved: All routing popup menu stuff from app, astrip, mstrip, mtrackinfo into + new class RoutePopupMenu, *massively* cleaning up those 4 files. + Used the new Route QVariant type as action data instead of integers. + - Moved MenuTitleItem definitions from astrip.cpp into it's own menutitleitem.cpp (Tim) + - Added to settings: "Make popup menus stay open. Otherwise hold Ctrl." (Tim) + To avoid showing new users non-standard behaviour, the default is off! 24.05.2011: - Awl::PitchEdit now can be set with the musical keyboard (flo93) - fixed y-stretch (flo93) diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index 62871b18..72cdad6a 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -43,7 +43,7 @@ #include "mixdowndialog.h" #include "pianoroll.h" #include "scoreedit.h" -#include "popupmenu.h" +#include "routepopup.h" #include "shortcutconfig.h" #include "songinfo.h" #include "ticksynth.h" @@ -93,7 +93,6 @@ static QString* projectList[PROJECT_LIST_LEN]; extern void initMidiSynth(); extern void exitJackAudio(); extern void exitDummyAudio(); -// p3.3.39 extern void exitOSC(); #ifdef HAVE_LASH @@ -809,7 +808,6 @@ MusE::MusE(int argc, char** argv) : QMainWindow() editInstrument = 0; routingPopupMenu = 0; progress = 0; - //routingPopupView = 0; appName = QString("MusE"); setWindowTitle(appName); @@ -1658,7 +1656,6 @@ void MusE::initMidiDevices() audio->msgInitMidiDevices(); - // Added by T356 //audio->msgIdle(false); } @@ -2080,7 +2077,7 @@ bool MusE::save(const QString& name, bool overwriteWarn) if (ferror(f)) { QString s = "Write File\n" + name + "\nfailed: " //+ strerror(errno); - + QString(strerror(errno)); // p4.0.0 + + QString(strerror(errno)); QMessageBox::critical(this, tr("MusE: Write File failed"), s); popenFlag? pclose(f) : fclose(f); @@ -2172,10 +2169,10 @@ void MusE::closeEvent(QCloseEvent* event) printf("MusE: Exiting Metronome\n"); exitMetronome(); - // p3.3.47 - // Make sure to clear the menu, which deletes any sub menus. + // Make sure to delete the menu. ~routingPopupMenu() will NOT be called automatically. + // Even though it is a child of MusE, it just passes MusE onto the underlying PopupMenus. p4.0.26 if(routingPopupMenu) - routingPopupMenu->clear(); + delete routingPopupMenu; #if 0 if(routingPopupView) { @@ -2201,10 +2198,8 @@ void MusE::closeEvent(QCloseEvent* event) d.remove(f.completeBaseName() + ".wca"); } - // Added by Tim. p3.3.14 - #ifdef HAVE_LASH - // Disconnect gracefully from LASH. + // Disconnect gracefully from LASH. Tim. p3.3.14 if(lash_client) { if(debugMsg) @@ -2292,788 +2287,17 @@ void MusE::showTransport(bool flag) //--------------------------------------------------------- // getRoutingPopupMenu +// Get the special common routing popup menu. Used (so far) +// by audio strip, midi strip, and midi trackinfo. //--------------------------------------------------------- -PopupMenu* MusE::getRoutingPopupMenu() +RoutePopupMenu* MusE::getRoutingPopupMenu() { if(!routingPopupMenu) - routingPopupMenu = new PopupMenu(this, true); + routingPopupMenu = new RoutePopupMenu(this); return routingPopupMenu; } -//--------------------------------------------------------- -// updateRouteMenus -//--------------------------------------------------------- - -void MusE::updateRouteMenus(Track* track, QObject* master) -{ - // NOTE: The purpose of this routine is to make sure the items actually reflect - // the routing status. - // In case for some reason a route could not be added (or removed). - // Then the item will be properly un-checked (or checked) here. - - //if(!track || track != gRoutingPopupMenuMaster || track->type() == Track::AUDIO_AUX) - //if(!track || track->type() == Track::AUDIO_AUX) - if(!track || gRoutingPopupMenuMaster != master) // p3.3.50 - return; - - PopupMenu* pup = getRoutingPopupMenu(); - - if(pup->actions().isEmpty()) - return; - - if(!pup->isVisible()) - return; - - //AudioTrack* t = (AudioTrack*)track; - RouteList* rl = gIsOutRoutingPopupMenu ? track->outRoutes() : track->inRoutes(); - - iRouteMenuMap imm = gRoutingMenuMap.begin(); - for(; imm != gRoutingMenuMap.end(); ++imm) - { - // p3.3.50 Ignore the 'toggle' items. - if(imm->second.type == Route::MIDI_PORT_ROUTE && - //imm->first >= (MIDI_PORTS * MIDI_CHANNELS) && imm->first < (MIDI_PORTS * MIDI_CHANNELS + MIDI_PORTS)) - imm->second.channel == (1 << MIDI_CHANNELS) - 1) // p4.0.14 See if all channels are set, rather than using ID. - continue; - - - // p4.0.14 TODO FIXME Couldn't quite figure out the logic yet. It should be possible (I hope). - // But not really required for now, as per above note. - if(gIsOutRoutingPopupMenu && track->isMidiTrack() && - imm->second.type == Route::TRACK_ROUTE && imm->second.track->type() == Track::AUDIO_INPUT) - return; - #if 0 - printf("imm route:\n"); - imm->second.dump(); - if(track->isMidiTrack()) - { - if(imm->second.type == Route::TRACK_ROUTE && imm->second.track->type() == Track::AUDIO_INPUT) - { - Route &aRoute = imm->second; - int chbit = aRoute.channel; - ///Route bRoute(track, chbit); - ///int mdidx = bRoute.midiPort; - int port = ((MidiTrack*)track)->outPort(); - if(port < 0 || port >= MIDI_PORTS) - continue; - int tchbit = 1 << ((MidiTrack*)track)->outChannel(); - - MidiPort* mp = &midiPorts[port]; - - ///Route bRoute(port, chbit); - - //int chmask = 0; - bool found = false; - RouteList* mprl = gIsOutRoutingPopupMenu ? mp->outRoutes() : mp->inRoutes(); - iRoute ir = mprl->begin(); - for(; ir != mprl->end(); ++ir) - { - printf("mp route:\n"); - ir->dump(); - ///if(aRoute.type == Route::TRACK_ROUTE) // Is the map route a track route? - { - if(ir->type == Route::TRACK_ROUTE && ir->track == aRoute.track) // Is the track route a midi port route? - //&& (ir->channel & chbit) == chbit) - //&& (ir->channel & tchbit)) // Is the exact channel mask bit(s) set? - { - printf("track matches\n"); - if(ir->channel & tchbit) - { - found = true; - printf("found: bit matches\n"); - } - break; - } - } - ///else - ///if(*ir == aRoute) - ///{ - //found = true; - /// break; - ///} - } - //pup->setItemChecked(imm->first, found); - //printf("MusE::updateRouteMenus setItemChecked\n"); - // TODO: MusE-2: Convert this, fastest way is to change the routing map, otherwise this requires a lookup. - //if(pup->isItemChecked(imm->first) != (irl != rl->end())) - // pup->setItemChecked(imm->first, irl != rl->end()); - QAction* act = pup->findActionFromData(imm->first); - //printf("set act checked to:%d\n", ir != mprl->end()); - //if(act && act->isChecked() != (ir != mprl->end())) - // act->setChecked(ir != mprl->end()); - printf("set act checked to:%d\n", found); - if(act && act->isChecked() != found) - act->setChecked(found); - - //return; - } - } - #endif - - //bool found = false; - iRoute irl = rl->begin(); - for(; irl != rl->end(); ++irl) - { - if(imm->second.type == Route::MIDI_PORT_ROUTE) // p3.3.50 Is the map route a midi port route? - { - if(irl->type == Route::MIDI_PORT_ROUTE && irl->midiPort == imm->second.midiPort // Is the track route a midi port route? - && (irl->channel & imm->second.channel) == imm->second.channel) // Is the exact channel mask bit(s) set? - { - //found = true; - break; - } - } - else - if(*irl == imm->second) - { - //found = true; - break; - } - } - //pup->setItemChecked(imm->first, found); - //printf("MusE::updateRouteMenus setItemChecked\n"); - // TODO: MusE-2: Convert this, fastest way is to change the routing map, otherwise this requires a lookup. - //if(pup->isItemChecked(imm->first) != (irl != rl->end())) - // pup->setItemChecked(imm->first, irl != rl->end()); - QAction* act = pup->findActionFromData(imm->first); - if(act && act->isChecked() != (irl != rl->end())) - act->setChecked(irl != rl->end()); - } -} - -//--------------------------------------------------------- -// routingPopupMenuActivated -//--------------------------------------------------------- - -void MusE::routingPopupMenuActivated(Track* track, int n) -{ - //if(!track || (track != gRoutingPopupMenuMaster)) - if(!track) - return; - - if(track->isMidiTrack()) - { - PopupMenu* pup = getRoutingPopupMenu(); - - if(pup->actions().isEmpty()) - return; - - //MidiTrack* t = (MidiTrack*)track; - RouteList* rl = gIsOutRoutingPopupMenu ? track->outRoutes() : track->inRoutes(); - - if(n == -1) - return; - - if(!gIsOutRoutingPopupMenu && n == 0) // p4.0.17 - { - muse->configMidiPorts(); - return; - } - - iRouteMenuMap imm = gRoutingMenuMap.find(n); - if(imm == gRoutingMenuMap.end()) - return; - - // Support Midi Port to Audio Input track routes. p4.0.14 Tim. - if(imm->second.type == Route::TRACK_ROUTE) - { - //if(gIsOutRoutingPopupMenu) // Try to avoid splitting like this. - { - Route &aRoute = imm->second; - int chbit = aRoute.channel; - int port = ((MidiTrack*)track)->outPort(); - if(port < 0 || port >= MIDI_PORTS) - return; - - MidiPort* mp = &midiPorts[port]; - ///MidiDevice* md = mp->device(); - - // This is desirable, but could lead to 'hidden' routes unless we add more support - // such as removing the existing routes when user changes flags. - // So for now, just list all valid ports whether read or write. - ///if(!md) - /// return; - ///if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) - /// return; - - //int channel = ((MidiTrack*)track->outChannel(); - Route bRoute(port, chbit); - - int chmask = 0; - RouteList* mprl = gIsOutRoutingPopupMenu ? mp->outRoutes() : mp->inRoutes(); - iRoute ir = mprl->begin(); - for (; ir != mprl->end(); ++ir) - { - if(ir->type == Route::TRACK_ROUTE && ir->track == aRoute.track) // Is there already a route to this port? - { - chmask = ir->channel; // Grab the channel mask. - break; - } - } - //if (iir != rl->end()) - if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? - { - // disconnect - if(gIsOutRoutingPopupMenu) - audio->msgRemoveRoute(bRoute, aRoute); - else - audio->msgRemoveRoute(aRoute, bRoute); - } - else - { - // connect - if(gIsOutRoutingPopupMenu) - audio->msgAddRoute(bRoute, aRoute); - else - audio->msgAddRoute(aRoute, bRoute); - } - - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - } - return; - } - - - if(imm->second.type != Route::MIDI_PORT_ROUTE) - return; - Route &aRoute = imm->second; - int chbit = aRoute.channel; - Route bRoute(track, chbit); - int mdidx = aRoute.midiPort; - - MidiPort* mp = &midiPorts[mdidx]; - MidiDevice* md = mp->device(); - //if(!md) // Removed p4.0.17 Allow connections to ports with no device. - // return; - - //if(!(md->rwFlags() & 2)) - //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) - if(md && !(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) // p4.0.17 - return; - - int chmask = 0; - iRoute iir = rl->begin(); - for (; iir != rl->end(); ++iir) - { - //if(*iir == (dst ? bRoute : aRoute)) - //if(*iir == aRoute) - if(iir->type == Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // p3.3.50 Is there already a route to this port? - { - chmask = iir->channel; // p3.3.50 Grab the channel mask. - break; - } - } - //if (iir != rl->end()) - if ((chmask & chbit) == chbit) // p3.3.50 Is the channel's bit(s) set? - { - // disconnect - if(gIsOutRoutingPopupMenu) - audio->msgRemoveRoute(bRoute, aRoute); - else - audio->msgRemoveRoute(aRoute, bRoute); - } - else - { - // connect - if(gIsOutRoutingPopupMenu) - audio->msgAddRoute(bRoute, aRoute); - else - audio->msgAddRoute(aRoute, bRoute); - } - - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - } - else - { - // TODO: Try to move code from AudioStrip::routingPopupMenuActivated into here. - - /* - PopupMenu* pup = getRoutingPopupMenu(); - - printf("MusE::routingPopupMenuActivated audio n:%d count:%d\n", n, pup->count()); - - if(pup->count() == 0) - return; - - AudioTrack* t = (AudioTrack*)track; - RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes(); - - //QPoint ppt = QCursor::pos(); - - if(n == -1) - { - //printf("MusE::routingPopupMenuActivated audio n = -1 deleting popup...\n"); - printf("MusE::routingPopupMenuActivated audio n = -1\n"); - ///delete pup; - ///pup = 0; - return; - } - else - //if(n == 0) - //{ - //printf("MusE::routingPopupMenuActivated audio n = 0 = tearOffHandle\n"); - //oR->setDown(false); - // return; - //} - //else - { - if(gIsOutRoutingPopupMenu) - { - QString s(pup->text(n)); - - //printf("AudioStrip::routingPopupMenuActivated audio text:%s\n", s.toLatin1().constData()); - - if(track->type() == Track::AUDIO_OUTPUT) - { - ///delete orpup; - - int chan = n & 0xf; - - //Route srcRoute(t, -1); - //Route srcRoute(t, chan, chans); - //Route srcRoute(t, chan, 1); - Route srcRoute(t, chan); - - //Route dstRoute(s, true, -1); - Route dstRoute(s, true, -1, Route::JACK_ROUTE); - //Route dstRoute(s, true, 0, Route::JACK_ROUTE); - - //srcRoute.channel = dstRoute.channel = chan; - dstRoute.channel = chan; - //dstRoute.channels = 1; - - // check if route src->dst exists: - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == dstRoute) - break; - } - if (irl != rl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.47 - //pup->popup(ppt, 0); - - //oR->setDown(false); - return; - - // p3.3.46 - ///goto _redisplay; - } - - iRouteMenuMap imm = gRoutingMenuMap.find(n); - if(imm == gRoutingMenuMap.end()) - { - ///delete orpup; - //oR->setDown(false); // orpup->exec() catches mouse release event - return; - } - - //int chan = n >> 16; - //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. - //chan &= 0xffff; - //int chan = imm->second.channel; - //int chans = imm->second.channels; - - //Route srcRoute(t, -1); - //srcRoute.remoteChannel = chan; - //Route srcRoute(t, chan, chans); - Route srcRoute(t, imm->second.channel, imm->second.channels); - //Route srcRoute(t, imm->second.channel); - srcRoute.remoteChannel = imm->second.remoteChannel; - - //Route dstRoute(s, true, -1); - //Route dstRoute(s, true, -1, Route::TRACK_ROUTE); - Route &dstRoute = imm->second; - - // check if route src->dst exists: - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == dstRoute) - break; - } - if (irl != rl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.46 - //oR->setDown(false); - ///goto _redisplay; - - // p3.3.47 - //pup->popup(ppt, 0); - } - else - { - QString s(pup->text(n)); - - if(track->type() == Track::AUDIO_INPUT) - { - ///delete pup; - int chan = n & 0xf; - - Route srcRoute(s, false, -1, Route::JACK_ROUTE); - Route dstRoute(t, chan); - - srcRoute.channel = chan; - - iRoute irl = rl->begin(); - for(; irl != rl->end(); ++irl) - { - if(*irl == srcRoute) - break; - } - if(irl != rl->end()) - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - else - // connect - audio->msgAddRoute(srcRoute, dstRoute); - - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - //iR->setDown(false); // pup->exec() catches mouse release event - return; - - // p3.3.46 - ///goto _redisplay; - } - - iRouteMenuMap imm = gRoutingMenuMap.find(n); - if(imm == gRoutingMenuMap.end()) - { - //delete pup; - //iR->setDown(false); // pup->exec() catches mouse release event - return; - } - - //int chan = n >> 16; - //int chans = (chan >> 15) + 1; // Bit 31 MSB: Mono or stereo. - //chan &= 0xffff; - //int chan = imm->second.channel; - //int chans = imm->second.channels; - - //Route srcRoute(s, false, -1); - //Route srcRoute(s, false, -1, Route::TRACK_ROUTE); - Route &srcRoute = imm->second; - - //Route dstRoute(t, -1); - //Route dstRoute(t, chan, chans); - Route dstRoute(t, imm->second.channel, imm->second.channels); - //Route dstRoute(t, imm->second.channel); - dstRoute.remoteChannel = imm->second.remoteChannel; - - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == srcRoute) - break; - } - if (irl != rl->end()) { - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - - // p3.3.46 - //iR->setDown(false); - ///goto _redisplay; - - - - - } - - } - */ - - } - //else - //{ - //} -} - -//--------------------------------------------------------- -// routingPopupMenuAboutToHide -//--------------------------------------------------------- - -void MusE::routingPopupMenuAboutToHide() -{ - // Hmm, can't do this? Sub-menus stay open with this. Re-arranged, testing... Nope. - //PopupMenu* pup = muse->getRoutingPopupMenu(); - //pup->disconnect(); - //pup->clear(); - - gRoutingMenuMap.clear(); - gRoutingPopupMenuMaster = 0; -} - -//--------------------------------------------------------- -// prepareRoutingPopupMenu -//--------------------------------------------------------- - -PopupMenu* MusE::prepareRoutingPopupMenu(Track* track, bool dst) -{ - if(!track) - return 0; - - if(track->isMidiTrack()) - { - RouteList* rl = dst ? track->outRoutes() : track->inRoutes(); - //Route dst(track, -1); - - PopupMenu* pup = getRoutingPopupMenu(); - pup->disconnect(); - //connect(pup, SIGNAL(activated(int)), SLOT(routingPopupMenuActivated(int))); - //connect(pup, SIGNAL(aboutToHide()), SLOT(routingPopupMenuAboutToHide())); - - pup->clear(); - gRoutingMenuMap.clear(); - - int gid = 0; - QAction* act = 0; - - if(dst) - { - // Support Midi Port to Audio Input track routes. p4.0.14 Tim. - int port = ((MidiTrack*)track)->outPort(); - if(port >= 0 && port < MIDI_PORTS) - { - MidiPort* mp = &midiPorts[port]; - - // p4.0.17 Do not list synth devices! Requiring valid device is desirable, - // but could lead to 'hidden' routes unless we add more support - // such as removing the existing routes when user changes flags. - // So for now, just list all valid ports whether read or write. - if(mp->device() && !mp->device()->isSynti()) - { - RouteList* mprl = mp->outRoutes(); - int chbits = 1 << ((MidiTrack*)track)->outChannel(); - //MidiDevice* md = mp->device(); - //if(!md) - // continue; - - pup->addSeparator(); - pup->addAction(new MenuTitleItem(tr("Soloing chain"), pup)); - PopupMenu* subp = new PopupMenu(pup, true); - subp->setTitle(tr("Audio returns")); - pup->addMenu(subp); - - InputList* al = song->inputs(); - for (iAudioInput i = al->begin(); i != al->end(); ++i) - { - Track* t = *i; - QString s(t->name()); - - act = subp->addAction(s); - act->setData(gid); - act->setCheckable(true); - - Route r(t, chbits); - - gRoutingMenuMap.insert( pRouteMenuMap(gid, r) ); - - for(iRoute ir = mprl->begin(); ir != mprl->end(); ++ir) - { - if(ir->type == Route::TRACK_ROUTE && ir->track == t && (ir->channel & chbits)) - { - act->setChecked(true); - break; - } - } - ++gid; - } - } - } - } - else - { - // Warn if no devices available. Add an item to open midi config. p4.0.17 - int pi = 0; - for( ; pi < MIDI_PORTS; ++pi) - { - MidiDevice* md = midiPorts[pi].device(); - if(md && !md->isSynti() && (md->rwFlags() & 2)) - break; - } - if(pi == MIDI_PORTS) - { - act = pup->addAction(tr("Warning: No midi input devices!")); - act->setCheckable(false); - act->setData(-1); - pup->addSeparator(); - } - act = pup->addAction(QIcon(*settings_midiport_softsynthsIcon), tr("Open midi config...")); - act->setCheckable(false); - act->setData(gid); - pup->addSeparator(); - ++gid; - - pup->addAction(new MenuTitleItem("Midi input ports", pup)); - - for(int i = 0; i < MIDI_PORTS; ++i) - { - // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick with ports. - MidiPort* mp = &midiPorts[i]; - MidiDevice* md = mp->device(); - //if(!md) - // continue; - - // p4.0.17 Do not list synth devices! - if(md && md->isSynti()) - continue; - - if(md && !(md->rwFlags() & 2)) - continue; - - //printf("MusE::prepareRoutingPopupMenu adding submenu portnum:%d\n", i); - - // MusE-2: Check this - needed with QMenu? Help says no. No - verified, it actually causes double triggers! - //connect(subp, SIGNAL(triggered(QAction*)), pup, SIGNAL(triggered(QAction*))); - //connect(subp, SIGNAL(aboutToHide()), pup, SIGNAL(aboutToHide())); - - int chanmask = 0; - // p3.3.50 To reduce number of routes required, from one per channel to just one containing a channel mask. - // Look for the first route to this midi port. There should always be only a single route for each midi port, now. - iRoute ir = rl->begin(); - for( ; ir != rl->end(); ++ir) - { - if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) - { - // We have a route to the midi port. Grab the channel mask. - chanmask = ir->channel; - break; - } - } - // p4.0.17 List ports with no device, but with routes to this track, in the main popup. - if(!md && ir == rl->end()) - continue; - - PopupMenu* subp = new PopupMenu(pup, true); - subp->setTitle(QString("%1:").arg(i+1) + (md ? md->name() : tr(""))); - - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - { - act = subp->addAction(QString("Channel %1").arg(ch+1)); - act->setCheckable(true); - act->setData(gid); - - int chbit = 1 << ch; - Route srcRoute(i, chbit); // p3.3.50 In accordance with new channel mask, use the bit position. - - gRoutingMenuMap.insert( pRouteMenuMap(gid, srcRoute) ); - - if(chanmask & chbit) // p3.3.50 Is the channel already set? Show item check mark. - act->setChecked(true); - - ++gid; - } - //gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. - act = subp->addAction(tr("Toggle all")); - //act->setCheckable(true); - act->setData(gid); - Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. - gRoutingMenuMap.insert( pRouteMenuMap(gid, togRoute) ); - ++gid; - pup->addMenu(subp); - } - - #if 0 - // p4.0.17 List ports with no device and no in routes, in a separate popup. - PopupMenu* morep = new PopupMenu(pup, true); - morep->setTitle(tr("More...")); - for(int i = 0; i < MIDI_PORTS; ++i) - { - MidiPort* mp = &midiPorts[i]; - if(mp->device()) - continue; - - PopupMenu* subp = new PopupMenu(morep, true); - subp->setTitle(QString("%1:").arg(i) + tr("")); - - // MusE-2: Check this - needed with QMenu? Help says no. No - verified, it actually causes double triggers! - //connect(subp, SIGNAL(triggered(QAction*)), pup, SIGNAL(triggered(QAction*))); - //connect(subp, SIGNAL(aboutToHide()), pup, SIGNAL(aboutToHide())); - - iRoute ir = rl->begin(); - for( ; ir != rl->end(); ++ir) - { - if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) - break; - } - if(ir != rl->end()) - continue; - - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - { - act = subp->addAction(QString("Channel %1").arg(ch+1)); - act->setCheckable(true); - act->setData(gid); - - int chbit = 1 << ch; - Route srcRoute(i, chbit); // In accordance with new channel mask, use the bit position. - - gRoutingMenuMap.insert( pRouteMenuMap(gid, srcRoute) ); - - //if(chanmask & chbit) // Is the channel already set? Show item check mark. - // act->setChecked(true); - - ++gid; - } - //gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. - act = subp->addAction(QString("Toggle all")); - //act->setCheckable(true); - act->setData(gid); - Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. - gRoutingMenuMap.insert( pRouteMenuMap(gid, togRoute) ); - ++gid; - morep->addMenu(subp); - } - pup->addMenu(morep); - #endif - - } - - if(pup->actions().isEmpty()) - { - gRoutingPopupMenuMaster = 0; - //pup->clear(); - //pup->disconnect(); - gRoutingMenuMap.clear(); - //oR->setDown(false); - return 0; - } - - gIsOutRoutingPopupMenu = dst; - return pup; - } - - return 0; -} - //--------------------------------------------------------- // saveAs //--------------------------------------------------------- diff --git a/muse2/muse/app.h b/muse2/muse/app.h index c194b603..256154e2 100644 --- a/muse2/muse/app.h +++ b/muse2/muse/app.h @@ -36,8 +36,7 @@ class Transport; class BigTime; class Arranger; class Instrument; -class PopupMenu; -class PopupView; +class RoutePopupMenu; class Track; class PrinterConfig; class MidiSyncConfig; @@ -69,8 +68,6 @@ class ScoreEdit; #define MENU_ADD_SYNTH_ID_BASE 0x1000 - - //--------------------------------------------------------- // MusE //--------------------------------------------------------- @@ -164,10 +161,8 @@ class MusE : public QMainWindow QMenu* menu_functions, *menuScriptPlugins; QMenu* select, *master, *midiEdit, *addTrack; - // Special 'stay-open' menu for routes. - PopupMenu* routingPopupMenu; - //PopupView* routingPopupView; - + // Special common menu for routes. Used (so far) by audio and midi strip, and midi trackinfo. + RoutePopupMenu* routingPopupMenu; QMenu* follow; QMenu* midiInputPlugins; @@ -337,7 +332,6 @@ class MusE : public QMainWindow private: void adjustGlobalLists(int startPos, int diff); - public slots: bool saveAs(); void bounceToFile(AudioOutput* ao = 0); @@ -358,8 +352,6 @@ class MusE : public QMainWindow void setUsedTool(int); void showDidYouKnowDialog(); void startEditInstrument(); - - void routingPopupMenuAboutToHide(); void configMidiPorts(); public: @@ -371,7 +363,6 @@ class MusE : public QMainWindow bool importMidi(const QString name, bool merge); void kbAccel(int); void changeConfig(bool writeFlag); - void seqStop(); bool seqStart(); void setHeartBeat(); @@ -384,18 +375,8 @@ class MusE : public QMainWindow QWidget* bigtimeWindow(); bool importWaveToTrack(QString& name, unsigned tick=0, Track* track=NULL); void importPartToTrack(QString& filename, unsigned tick, Track* track); - void showTransport(bool flag); - - // Special 'stay-open' menu for routes. - PopupMenu* getRoutingPopupMenu(); - PopupMenu* prepareRoutingPopupMenu(Track* /*track*/, bool /*dst*/); - void routingPopupMenuActivated(Track* /*track*/, int /*id*/); - void updateRouteMenus(Track* /*track*/, QObject* /*master*/); - // Testing... - //PopupView* getRoutingPopupView(); - //PopupView* prepareRoutingPopupView(Track* /*track*/, bool /*dst*/); - //void routingPopupViewActivated(Track* /*track*/, int /*id*/); + RoutePopupMenu* getRoutingPopupMenu(); #ifdef HAVE_LASH void lash_idle_cb (); diff --git a/muse2/muse/audiotrack.cpp b/muse2/muse/audiotrack.cpp index c427a55c..b004638f 100644 --- a/muse2/muse/audiotrack.cpp +++ b/muse2/muse/audiotrack.cpp @@ -34,6 +34,7 @@ bool WaveTrack::_isVisible=true; // 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 // Update: Not required any more because the real problem was Jack RT priority, which has been fixed. +// Keep this around for now. It may come in handy if we want to preserve route names with dummy audio driver! /* typedef std::multimap jackRouteNameMap; std::map jackRouteNameCache; diff --git a/muse2/muse/conf.cpp b/muse2/muse/conf.cpp index 56cbc321..89cdd04d 100644 --- a/muse2/muse/conf.cpp +++ b/muse2/muse/conf.cpp @@ -948,6 +948,9 @@ void readConfiguration(Xml& xml, bool readOnlySequencer) config.projectStoreInFolder = xml.parseInt(); else if (tag == "useProjectSaveDialog") config.useProjectSaveDialog = xml.parseInt(); + else if (tag == "popupsDefaultStayOpen") + config.popupsDefaultStayOpen = xml.parseInt(); + else xml.unknown("configuration"); break; @@ -1217,7 +1220,6 @@ void MusE::writeGlobalConfiguration(int level, Xml& xml) const xml.intTag(level, "midiFilterCtrl2", midiFilterCtrl2); xml.intTag(level, "midiFilterCtrl3", midiFilterCtrl3); xml.intTag(level, "midiFilterCtrl4", midiFilterCtrl4); - // Removed by Tim. p3.3.6 //xml.intTag(level, "txDeviceId", txDeviceId); //xml.intTag(level, "rxDeviceId", rxDeviceId); @@ -1226,7 +1228,8 @@ void MusE::writeGlobalConfiguration(int level, Xml& xml) const xml.strTag(level, "externalWavEditor", config.externalWavEditor); xml.intTag(level, "useOldStyleStopShortCut", config.useOldStyleStopShortCut); xml.intTag(level, "moveArmedCheckBox", config.moveArmedCheckBox); - + xml.intTag(level, "popupsDefaultStayOpen", config.popupsDefaultStayOpen); + //for (int i = 0; i < 6; ++i) { for (int i = 0; i < NUM_FONTS; ++i) { char buffer[32]; @@ -1279,39 +1282,8 @@ void MusE::writeGlobalConfiguration(int level, Xml& xml) const xml.colorTag(level, "auxTrackBg", config.auxTrackBg); xml.colorTag(level, "synthTrackBg", config.synthTrackBg); - // Changed by Tim. p3.3.6 - + // Removed by Tim. p3.3.6 //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; - } - } - */ - - // Added by Tim. p3.3.6 - - //xml.tag(level++, "midiSyncInfo"); - //for(iMidiDevice id = midiDevices.begin(); id != midiDevices.end(); ++id) - //{ - // MidiDevice* md = *id; - // (*id)->syncInfo().write(level, xml, md); - //} - //xml.etag(level, "midiSyncInfo"); - //xml.intTag(level, "rxSyncPort", rxSyncPort); xml.intTag(level, "mtctype", mtcType); xml.nput(level, "%02d:%02d:%02d:%02d:%02d\n", diff --git a/muse2/muse/confmport.cpp b/muse2/muse/confmport.cpp index fc005923..8b323fc1 100644 --- a/muse2/muse/confmport.cpp +++ b/muse2/muse/confmport.cpp @@ -507,7 +507,7 @@ void MPConfig::rbClicked(QTableWidgetItem* item) //Route dst(*ip, true, i); //Route rt(*ip, (dev->rwFlags() & 1), -1, Route::JACK_ROUTE); Route rt(*ip, (col == DEVCOL_OUTROUTES), -1, Route::JACK_ROUTE); - for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) { if (*ir == rt) { @@ -553,7 +553,7 @@ void MPConfig::rbClicked(QTableWidgetItem* item) Route srcRoute(dev, -1); Route dstRoute(s, true, -1, Route::JACK_ROUTE); - iRoute iir = rl->begin(); + ciRoute iir = rl->begin(); for(; iir != rl->end(); ++iir) { if(*iir == dstRoute) @@ -573,7 +573,7 @@ void MPConfig::rbClicked(QTableWidgetItem* item) Route srcRoute(s, false, -1, Route::JACK_ROUTE); Route dstRoute(dev, -1); - iRoute iir = rl->begin(); + ciRoute iir = rl->begin(); for(; iir != rl->end(); ++iir) { if(*iir == srcRoute) diff --git a/muse2/muse/driver/jack.cpp b/muse2/muse/driver/jack.cpp index f70cf3d3..c4d7a8ca 100644 --- a/muse2/muse/driver/jack.cpp +++ b/muse2/muse/driver/jack.cpp @@ -711,7 +711,7 @@ void JackAudioDevice::connectJackMidiPorts() if(port) // { RouteList* rl = md->outRoutes(); - for (iRoute r = rl->begin(); r != rl->end(); ++r) + for (ciRoute r = rl->begin(); r != rl->end(); ++r) connect(port, r->jackPort); } } @@ -724,7 +724,7 @@ void JackAudioDevice::connectJackMidiPorts() if(port) // { RouteList* rl = md->inRoutes(); - for (iRoute r = rl->begin(); r != rl->end(); ++r) + for (ciRoute r = rl->begin(); r != rl->end(); ++r) connect(r->jackPort, port); } } @@ -915,7 +915,7 @@ void JackAudioDevice::graphChanged() // the "right" amount for (int i = 0;i < 20;i++) { erased = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { if (irl->channel != channel) continue; QString name = irl->name(); @@ -953,7 +953,7 @@ void JackAudioDevice::graphChanged() const char** pn = ports; while (*pn) { bool found = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { if (irl->channel != channel) continue; QString name = irl->name(); @@ -1002,7 +1002,7 @@ void JackAudioDevice::graphChanged() // the "right" amount for (int i = 0; i < 20 ; i++) { erased = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { if (irl->channel != channel) continue; QString name = irl->name(); @@ -1039,7 +1039,7 @@ void JackAudioDevice::graphChanged() const char** pn = ports; while (*pn) { bool found = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { if (irl->channel != channel) continue; QString name = irl->name(); @@ -1113,7 +1113,7 @@ void JackAudioDevice::graphChanged() for (int i = 0; i < 20 ; i++) { erased = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { //if (irl->channel != channel) // continue; QString name = irl->name(); @@ -1155,7 +1155,7 @@ void JackAudioDevice::graphChanged() const char** pn = ports; while (*pn) { bool found = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { //if (irl->channel != channel) // continue; QString name = irl->name(); @@ -1212,7 +1212,7 @@ void JackAudioDevice::graphChanged() for (int i = 0; i < 20 ; i++) { erased = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { //if (irl->channel != channel) // continue; QString name = irl->name(); @@ -1253,7 +1253,7 @@ void JackAudioDevice::graphChanged() const char** pn = ports; while (*pn) { bool found = false; - for (iRoute irl = rl->begin(); irl != rl->end(); ++irl) { + for (ciRoute irl = rl->begin(); irl != rl->end(); ++irl) { //if (irl->channel != channel) // continue; QString name = irl->name(); @@ -1473,7 +1473,7 @@ void JackAudioDevice::start(int /*priority*/) for (int ch = 0; ch < channel; ++ch) { RouteList* rl = ai->inRoutes(); void* port = ai->jackPort(ch); - for (iRoute ir = rl->begin(); ir != rl->end(); ++ir) { + for (ciRoute ir = rl->begin(); ir != rl->end(); ++ir) { if (ir->channel == ch) connect(ir->jackPort, port); } @@ -1486,7 +1486,7 @@ void JackAudioDevice::start(int /*priority*/) for (int ch = 0; ch < channel; ++ch) { RouteList* rl = ai->outRoutes(); void* port = ai->jackPort(ch); - for (iRoute r = rl->begin(); r != rl->end(); ++r) { + for (ciRoute r = rl->begin(); r != rl->end(); ++r) { if (r->channel == ch) { connect(port, r->jackPort); } diff --git a/muse2/muse/gconfig.cpp b/muse2/muse/gconfig.cpp index 4d22ad4c..49a6d572 100644 --- a/muse2/muse/gconfig.cpp +++ b/muse2/muse/gconfig.cpp @@ -168,6 +168,7 @@ GlobalConfigValues config = { QString("./"), // projectBaseFolder true, // projectStoreInFolder true, // useProjectSaveDialog - 64 // minControlProcessPeriod + 64, // minControlProcessPeriod + false // popupsDefaultStayOpen }; diff --git a/muse2/muse/gconfig.h b/muse2/muse/gconfig.h index cd236b36..acf39782 100644 --- a/muse2/muse/gconfig.h +++ b/muse2/muse/gconfig.h @@ -143,6 +143,7 @@ struct GlobalConfigValues { bool projectStoreInFolder; bool useProjectSaveDialog; unsigned long minControlProcessPeriod; + bool popupsDefaultStayOpen; }; extern GlobalConfigValues config; diff --git a/muse2/muse/globals.cpp b/muse2/muse/globals.cpp index 00c0f0a9..7f346f87 100644 --- a/muse2/muse/globals.cpp +++ b/muse2/muse/globals.cpp @@ -350,10 +350,6 @@ unsigned char rcPlayNote = 29; unsigned char rcSteprecNote = 36; bool automation = true; -QObject* gRoutingPopupMenuMaster = 0; -RouteMenuMap gRoutingMenuMap; -bool gIsOutRoutingPopupMenu = false; - uid_t euid, ruid; // effective user id, real user id bool midiSeqRunning = false; diff --git a/muse2/muse/globals.h b/muse2/muse/globals.h index 984571e2..cee5e815 100644 --- a/muse2/muse/globals.h +++ b/muse2/muse/globals.h @@ -13,7 +13,6 @@ #include "value.h" #include "mtc.h" -#include "route.h" #include @@ -172,15 +171,6 @@ extern unsigned char rcSteprecNote; extern bool midiSeqRunning; extern bool automation; -class QObject; -// Which audio strip, midi strip, or midi track info strip -// was responsible for popping up the routing menu. -extern QObject* gRoutingPopupMenuMaster; -// Map of routing popup menu item IDs to Routes. -extern RouteMenuMap gRoutingMenuMap; -// Whether the routes popup was shown by clicking the output routes button, or input routes button. -extern bool gIsOutRoutingPopupMenu; - // p3.3.55 #define JACK_MIDI_OUT_PORT_SUFFIX "_out" #define JACK_MIDI_IN_PORT_SUFFIX "_in" diff --git a/muse2/muse/mixer/astrip.cpp b/muse2/muse/mixer/astrip.cpp index c1e92e59..5644e6eb 100644 --- a/muse2/muse/mixer/astrip.cpp +++ b/muse2/muse/mixer/astrip.cpp @@ -48,33 +48,8 @@ #include "gconfig.h" #include "ttoolbutton.h" #include "menutitleitem.h" -#include "popupmenu.h" - -//--------------------------------------------------------- -// MenuTitleItem -//--------------------------------------------------------- - -MenuTitleItem::MenuTitleItem(const QString& ss, QWidget* parent) - : QWidgetAction(parent) - { - s = ss; - // Don't allow to click on it. - setEnabled(false); - // Just to be safe, set to -1 instead of default 0. - setData(-1); - } - -QWidget* MenuTitleItem::createWidget(QWidget *parent) -{ - QLabel* l = new QLabel(s, parent); - l->setAlignment(Qt::AlignCenter); - l->setAutoFillBackground(true); - //QPalette palette; - //palette.setColor(label->backgroundRole(), c); - //l->setPalette(palette); - l->setBackgroundRole(QPalette::Dark); - return l; -} +//#include "popupmenu.h" +#include "routepopup.h" /* //--------------------------------------------------------- @@ -145,14 +120,6 @@ void AudioStrip::songChanged(int val) if (val & SC_CHANNELS) updateChannels(); - // p3.3.47 - // Update the routing popup menu if anything relevant changed. - if (val & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) - { - //updateRouteMenus(); - muse->updateRouteMenus(track, this); // p3.3.50 Use this handy shared routine. - } - // Catch when label font, or configuration min slider and meter values change. if (val & SC_CONFIG) { @@ -215,7 +182,6 @@ void AudioStrip::songChanged(int val) if (val & SC_TRACK_MODIFIED) { setLabelText(); - // Added by Tim. p3.3.9 setLabelFont(); } @@ -1006,899 +972,15 @@ AudioStrip::AudioStrip(QWidget* parent, AudioTrack* at) connect(heartBeatTimer, SIGNAL(timeout()), SLOT(heartBeat())); } -//--------------------------------------------------------- -// addMenuItem -//--------------------------------------------------------- - -static int addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) -{ - // totalInChannels is only used by syntis. - int toch = ((AudioTrack*)track)->totalOutChannels(); - // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. - if(track->channels() == 1) - toch = 1; - - // Don't add the last stray mono route if the track is stereo. - //if(route_track->channels() > 1 && (channel+1 == chans)) - // return id; - - RouteList* rl = isOutput ? track->outRoutes() : track->inRoutes(); - - QAction* act; - - QString s(route_track->name()); - - act = lb->addAction(s); - act->setData(id); - act->setCheckable(true); - - int ach = channel; - int bch = -1; - - Route r(route_track, isOutput ? ach : bch, channels); - - r.remoteChannel = isOutput ? bch : ach; - - mm.insert( pRouteMenuMap(id, r) ); - - for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) - { - if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->remoteChannel == r.remoteChannel) - { - int tcompch = r.channel; - if(tcompch == -1) - tcompch = 0; - int tcompchs = r.channels; - if(tcompchs == -1) - tcompchs = isOutput ? track->channels() : route_track->channels(); - - int compch = ir->channel; - if(compch == -1) - compch = 0; - int compchs = ir->channels; - if(compchs == -1) - compchs = isOutput ? track->channels() : ir->track->channels(); - - if(compch == tcompch && compchs == tcompchs) - { - act->setChecked(true); - break; - } - } - } - return ++id; -} - -//--------------------------------------------------------- -// addAuxPorts -//--------------------------------------------------------- - -static int addAuxPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) - { - AuxList* al = song->auxs(); - for (iAudioAux i = al->begin(); i != al->end(); ++i) { - Track* track = *i; - if (t == track) - continue; - id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - } - return id; - } - -//--------------------------------------------------------- -// addInPorts -//--------------------------------------------------------- - -static int addInPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) - { - InputList* al = song->inputs(); - for (iAudioInput i = al->begin(); i != al->end(); ++i) { - Track* track = *i; - if (t == track) - continue; - id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - } - return id; - } - -//--------------------------------------------------------- -// addOutPorts -//--------------------------------------------------------- - -static int addOutPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) - { - OutputList* al = song->outputs(); - for (iAudioOutput i = al->begin(); i != al->end(); ++i) { - Track* track = *i; - if (t == track) - continue; - id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - } - return id; - } - -//--------------------------------------------------------- -// addGroupPorts -//--------------------------------------------------------- - -static int addGroupPorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) - { - GroupList* al = song->groups(); - for (iAudioGroup i = al->begin(); i != al->end(); ++i) { - Track* track = *i; - if (t == track) - continue; - id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - } - return id; - } - -//--------------------------------------------------------- -// addWavePorts -//--------------------------------------------------------- - -static int addWavePorts(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, int channel, int channels, bool isOutput) - { - WaveTrackList* al = song->waves(); - for (iWaveTrack i = al->begin(); i != al->end(); ++i) { - Track* track = *i; - if (t == track) - continue; - id = addMenuItem(t, track, lb, id, mm, channel, channels, isOutput); - } - return id; - } - -//--------------------------------------------------------- -// addSyntiPorts -//--------------------------------------------------------- - -static int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, - RouteMenuMap& mm, int channel, int channels, bool isOutput) -{ - RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); - - QAction* act; - - SynthIList* al = song->syntis(); - for (iSynthI i = al->begin(); i != al->end(); ++i) - { - Track* track = *i; - if (t == track) - continue; - int toch = ((AudioTrack*)track)->totalOutChannels(); - // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. - if(track->channels() == 1) - toch = 1; - - // totalInChannels is only used by syntis. - int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); - - int tchans = (channels != -1) ? channels: t->channels(); - if(tchans == 2) - { - // Ignore odd numbered left-over mono channel. - //chans = chans & ~1; - //if(chans != 0) - chans -= 1; - } - - if(chans > 0) - { - PopupMenu* chpup = new PopupMenu(lb, true); - chpup->setTitle(track->name()); - for(int ch = 0; ch < chans; ++ch) - { - char buffer[128]; - if(tchans == 2) - snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").toLatin1().constData(), ch+1, ch+2); - else - snprintf(buffer, 128, "%s %d", chpup->tr("Channel").toLatin1().constData(), ch+1); - act = chpup->addAction(QString(buffer)); - act->setData(id); - act->setCheckable(true); - - int ach = (channel == -1) ? ch : channel; - int bch = (channel == -1) ? -1 : ch; - - Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans); - //Route rt(track, ch); - //rt.remoteChannel = -1; - rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach; - - mm.insert( pRouteMenuMap(id, rt) ); - - for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) - { - if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) - { - int tcompch = rt.channel; - if(tcompch == -1) - tcompch = 0; - int tcompchs = rt.channels; - if(tcompchs == -1) - tcompchs = isOutput ? t->channels() : track->channels(); - - int compch = ir->channel; - if(compch == -1) - compch = 0; - int compchs = ir->channels; - if(compchs == -1) - compchs = isOutput ? t->channels() : ir->track->channels(); - - if(compch == tcompch && compchs == tcompchs) - { - act->setChecked(true); - break; - } - } - } - ++id; - } - - lb->addMenu(chpup); - } - } - return id; -} - -//--------------------------------------------------------- -// addMultiChannelOutPorts -//--------------------------------------------------------- - -static int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenuMap& mm, bool isOutput) -{ - int toch = t->totalOutChannels(); - // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. - if(t->channels() == 1) - toch = 1; - - // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. - // totalInChannels is only used by syntis. - int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? toch : t->totalInChannels(); - - if(chans > 1) - pup->addAction(new MenuTitleItem("", pup)); - - // - // If it's more than one channel, create a sub-menu. If it's just one channel, don't bother with a sub-menu... - // - - PopupMenu* chpup = pup; - - for(int ch = 0; ch < chans; ++ch) - { - // If more than one channel, create the sub-menu. - if(chans > 1) - chpup = new PopupMenu(pup, true); - - if(isOutput) - { - switch(t->type()) - { - - case Track::AUDIO_INPUT: - //id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); // Rem p4.0.20 - case Track::WAVE: - case Track::AUDIO_GROUP: - case Track::AUDIO_SOFTSYNTH: - case Track::AUDIO_AUX: // p4.0.20 - id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); - id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput); - id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); - id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); - //break; // Rem p4.0.20 - //case Track::AUDIO_AUX: // - //id = addOutPorts(t, chpup, id, mm, ch, 1, isOutput); // - break; - default: - break; - } - } - else - { - switch(t->type()) - { - - case Track::AUDIO_OUTPUT: - id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); - id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); - id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); - id = addAuxPorts(t, chpup, id, mm, ch, 1, isOutput); - id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); - break; - case Track::WAVE: - //id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); // Rem p4.0.20 - //break; - case Track::AUDIO_SOFTSYNTH: - case Track::AUDIO_GROUP: - id = addWavePorts(t, chpup, id, mm, ch, 1, isOutput); - id = addInPorts(t, chpup, id, mm, ch, 1, isOutput); - id = addGroupPorts(t, chpup, id, mm, ch, 1, isOutput); - id = addAuxPorts(t, chpup, id, mm, ch, 1, isOutput); // p4.0.20 - id = addSyntiPorts(t, chpup, id, mm, ch, 1, isOutput); - break; - default: - break; - } - } - - // If more than one channel, add the created sub-menu. - if(chans > 1) - { - char buffer[128]; - snprintf(buffer, 128, "%s %d", pup->tr("Channel").toLatin1().constData(), ch+1); - chpup->setTitle(QString(buffer)); - pup->addMenu(chpup); - } - } - - // For stereo listing, ignore odd numbered left-over channels. - chans -= 1; - if(chans > 0) - { - // Ignore odd numbered left-over channels. - //int schans = (chans & ~1) - 1; - - pup->addSeparator(); - pup->addAction(new MenuTitleItem("", pup)); - - // - // If it's more than two channels, create a sub-menu. If it's just two channels, don't bother with a sub-menu... - // - - chpup = pup; - if(chans <= 2) - // Just do one iteration. - chans = 1; - - for(int ch = 0; ch < chans; ++ch) - { - // If more than two channels, create the sub-menu. - if(chans > 2) - chpup = new PopupMenu(pup, true); - - if(isOutput) - { - switch(t->type()) - { - case Track::AUDIO_INPUT: - //id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); // Rem p4.0.20 - case Track::WAVE: - case Track::AUDIO_GROUP: - case Track::AUDIO_SOFTSYNTH: - case Track::AUDIO_AUX: // p4.0.20 - id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); // p4.0.20 - id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput); - id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); - id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); - break; - //case Track::AUDIO_AUX: // Rem p4.0.20 - // id = addOutPorts(t, chpup, id, mm, ch, 2, isOutput); - // break; - default: - break; - } - } - else - { - switch(t->type()) - { - case Track::AUDIO_OUTPUT: - id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); - id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); - id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); - id = addAuxPorts(t, chpup, id, mm, ch, 2, isOutput); - id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); - break; - case Track::WAVE: - //id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); // Rem p4.0.20 - //break; - case Track::AUDIO_SOFTSYNTH: - case Track::AUDIO_GROUP: - id = addWavePorts(t, chpup, id, mm, ch, 2, isOutput); - id = addInPorts(t, chpup, id, mm, ch, 2, isOutput); - id = addGroupPorts(t, chpup, id, mm, ch, 2, isOutput); - id = addAuxPorts(t, chpup, id, mm, ch, 2, isOutput); // p4.0.20 - id = addSyntiPorts(t, chpup, id, mm, ch, 2, isOutput); - break; - default: - break; - } - } - - // If more than two channels, add the created sub-menu. - if(chans > 2) - { - char buffer[128]; - snprintf(buffer, 128, "%s %d,%d", pup->tr("Channel").toLatin1().constData(), ch+1, ch+2); - chpup->setTitle(QString(buffer)); - pup->addMenu(chpup); - } - } - } - - return id; -} - -//--------------------------------------------------------- -// nonSyntiTrackAddSyntis -//--------------------------------------------------------- - -static int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, RouteMenuMap& mm, bool isOutput) -{ - RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); - - QAction* act; - SynthIList* al = song->syntis(); - for (iSynthI i = al->begin(); i != al->end(); ++i) - { - Track* track = *i; - if (t == track) - continue; - - int toch = ((AudioTrack*)track)->totalOutChannels(); - // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. - if(track->channels() == 1) - toch = 1; - - // totalInChannels is only used by syntis. - int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); - - //int schans = synti->channels(); - //if(schans < chans) - // chans = schans; -// int tchans = (channels != -1) ? channels: t->channels(); -// if(tchans == 2) -// { - // Ignore odd numbered left-over mono channel. - //chans = chans & ~1; - //if(chans != 0) -// chans -= 1; -// } - //int tchans = (channels != -1) ? channels: t->channels(); - - if(chans > 0) - { - PopupMenu* chpup = new PopupMenu(lb, true); - chpup->setTitle(track->name()); - if(chans > 1) - chpup->addAction(new MenuTitleItem("", chpup)); - - for(int ch = 0; ch < chans; ++ch) - { - char buffer[128]; - snprintf(buffer, 128, "%s %d", chpup->tr("Channel").toLatin1().constData(), ch+1); - act = chpup->addAction(QString(buffer)); - act->setData(id); - act->setCheckable(true); - - int ach = ch; - int bch = -1; - - Route rt(track, isOutput ? bch : ach, 1); - - rt.remoteChannel = isOutput ? ach : bch; - - mm.insert( pRouteMenuMap(id, rt) ); - - for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) - { - if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) - { - int tcompch = rt.channel; - if(tcompch == -1) - tcompch = 0; - int tcompchs = rt.channels; - if(tcompchs == -1) - tcompchs = isOutput ? t->channels() : track->channels(); - - int compch = ir->channel; - if(compch == -1) - compch = 0; - int compchs = ir->channels; - if(compchs == -1) - compchs = isOutput ? t->channels() : ir->track->channels(); - - if(compch == tcompch && compchs == tcompchs) - { - act->setChecked(true); - break; - } - } - } - ++id; - } - - chans -= 1; - if(chans > 0) - { - // Ignore odd numbered left-over channels. - //int schans = (chans & ~1) - 1; - - chpup->addSeparator(); - chpup->addAction(new MenuTitleItem("", chpup)); - - for(int ch = 0; ch < chans; ++ch) - { - char buffer[128]; - snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").toLatin1().constData(), ch+1, ch+2); - act = chpup->addAction(QString(buffer)); - act->setData(id); - act->setCheckable(true); - - int ach = ch; - int bch = -1; - - Route rt(track, isOutput ? bch : ach, 2); - - rt.remoteChannel = isOutput ? ach : bch; - - mm.insert( pRouteMenuMap(id, rt) ); - - for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) - { - if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) - { - int tcompch = rt.channel; - if(tcompch == -1) - tcompch = 0; - int tcompchs = rt.channels; - if(tcompchs == -1) - tcompchs = isOutput ? t->channels() : track->channels(); - - int compch = ir->channel; - if(compch == -1) - compch = 0; - int compchs = ir->channels; - if(compchs == -1) - compchs = isOutput ? t->channels() : ir->track->channels(); - - if(compch == tcompch && compchs == tcompchs) - { - act->setChecked(true); - break; - } - } - } - ++id; - } - } - - lb->addMenu(chpup); - } - } - return id; -} - -//--------------------------------------------------------- -// addMidiPorts -//--------------------------------------------------------- - -static int addMidiPorts(AudioTrack* t, PopupMenu* pup, int id, RouteMenuMap& mm, bool isOutput) -{ - QAction* act; - for(int i = 0; i < MIDI_PORTS; ++i) - { - MidiPort* mp = &midiPorts[i]; - MidiDevice* md = mp->device(); - - // This is desirable, but could lead to 'hidden' routes unless we add more support - // such as removing the existing routes when user changes flags. - // So for now, just list all valid ports whether read or write. - if(!md) - continue; - //if(!(md->rwFlags() & (isOutput ? 1 : 2))) - // continue; - - // p4.0.17 Do not list synth devices! - if(md->isSynti()) - continue; - - RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); - - PopupMenu* subp = new PopupMenu(pup, true); - subp->setTitle(md->name()); - - int chanmask = 0; - // To reduce number of routes required, from one per channel to just one containing a channel mask. - // Look for the first route to this midi port. There should always be only a single route for each midi port, now. - for(iRoute ir = rl->begin(); ir != rl->end(); ++ir) - { - if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) - { - // We have a route to the midi port. Grab the channel mask. - chanmask = ir->channel; - break; - } - } - - for(int ch = 0; ch < MIDI_CHANNELS; ++ch) - { - act = subp->addAction(QString("Channel %1").arg(ch+1)); - act->setCheckable(true); - act->setData(id); - - int chbit = 1 << ch; - Route srcRoute(i, chbit); // In accordance with new channel mask, use the bit position. - - mm.insert( pRouteMenuMap(id, srcRoute) ); - - if(chanmask & chbit) // Is the channel already set? Show item check mark. - act->setChecked(true); - - ++id; - } - - //gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. - act = subp->addAction(QString("Toggle all")); - //act->setCheckable(true); - act->setData(id); - Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. - mm.insert( pRouteMenuMap(id, togRoute) ); - ++id; - - pup->addMenu(subp); - } - return id; -} - -//--------------------------------------------------------- -// routingPopupMenuActivated -//--------------------------------------------------------- - -void AudioStrip::routingPopupMenuActivated(QAction* act) -{ - if(!track || gRoutingPopupMenuMaster != this || track->isMidiTrack()) - return; - - PopupMenu* pup = muse->getRoutingPopupMenu(); - - if(pup->actions().isEmpty()) - return; - - AudioTrack* t = (AudioTrack*)track; - RouteList* rl = gIsOutRoutingPopupMenu ? t->outRoutes() : t->inRoutes(); - - int n = act->data().toInt(); - if (n == -1) - return; - - iRouteMenuMap imm = gRoutingMenuMap.find(n); - if(imm == gRoutingMenuMap.end()) - return; - - if(gIsOutRoutingPopupMenu) - { - Route srcRoute(t, imm->second.channel, imm->second.channels); - srcRoute.remoteChannel = imm->second.remoteChannel; - - Route &dstRoute = imm->second; - - // check if route src->dst exists: - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == dstRoute) - break; - } - if (irl != rl->end()) { - // disconnect if route exists - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect if route does not exist - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - } - else - { - Route &srcRoute = imm->second; - - // Support Midi Port to Audio Input routes. p4.0.14 Tim. - if(track->type() == Track::AUDIO_INPUT && srcRoute.type == Route::MIDI_PORT_ROUTE) - { - int chbit = srcRoute.channel; - Route dstRoute(t, chbit); - int mdidx = srcRoute.midiPort; - int chmask = 0; - iRoute iir = rl->begin(); - for (; iir != rl->end(); ++iir) - { - if(iir->type == Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port? - { - chmask = iir->channel; // Grab the channel mask. - break; - } - } - - if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? - { - //printf("astrip: removing src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else - { - //printf("astrip: adding src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); - audio->msgAddRoute(srcRoute, dstRoute); - } - - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - return; - } - - Route dstRoute(t, imm->second.channel, imm->second.channels); - dstRoute.remoteChannel = imm->second.remoteChannel; - - iRoute irl = rl->begin(); - for (; irl != rl->end(); ++irl) { - if (*irl == srcRoute) - break; - } - if (irl != rl->end()) { - // disconnect - audio->msgRemoveRoute(srcRoute, dstRoute); - } - else { - // connect - audio->msgAddRoute(srcRoute, dstRoute); - } - audio->msgUpdateSoloStates(); - song->update(SC_ROUTE); - } -} - //--------------------------------------------------------- // iRoutePressed //--------------------------------------------------------- void AudioStrip::iRoutePressed() { - //if(track->isMidiTrack() || (track->type() == Track::AUDIO_AUX) || (track->type() == Track::AUDIO_SOFTSYNTH)) - if(!track || track->isMidiTrack() || track->type() == Track::AUDIO_AUX) - { - gRoutingPopupMenuMaster = 0; - return; - } - - QPoint ppt = QCursor::pos(); - - PopupMenu* pup = muse->getRoutingPopupMenu(); - pup->disconnect(); - - AudioTrack* t = (AudioTrack*)track; - RouteList* irl = t->inRoutes(); - - QAction* act = 0; - int gid = 0; - //int id = 0; - - pup->clear(); - gRoutingMenuMap.clear(); - gid = 0; - - switch(track->type()) - { - case Track::AUDIO_INPUT: - { - 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); - pup->addAction(titel); - - if(!checkAudioDevice()) - { - gRoutingPopupMenuMaster = 0; - pup->clear(); - gRoutingMenuMap.clear(); - iR->setDown(false); - return; - } - std::list ol = audioDevice->outputPorts(); - for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) - { - //id = gid * 16 + i; // IDs removed p4.0.14 Tim. - act = pup->addAction(*ip); - //act->setData(id); - act->setData(gid); - act->setCheckable(true); - - Route dst(*ip, true, i, Route::JACK_ROUTE); - //gRoutingMenuMap.insert( pRouteMenuMap(id, dst) ); - gRoutingMenuMap.insert( pRouteMenuMap(gid, dst) ); - ++gid; - for(iRoute ir = irl->begin(); ir != irl->end(); ++ir) - { - if(*ir == dst) - { - act->setChecked(true); - break; - } - } - } - if(i+1 != channel) - pup->addSeparator(); - } - - // p4.0.14 - // - // Display using separate menus for midi ports and audio outputs: - // - pup->addSeparator(); - pup->addAction(new MenuTitleItem(tr("Soloing chain"), pup)); - PopupMenu* subp = new PopupMenu(pup, true); - subp->setTitle(tr("Audio sends")); - pup->addMenu(subp); - gid = addOutPorts(t, subp, gid, gRoutingMenuMap, -1, -1, false); - subp = new PopupMenu(pup, true); - subp->setTitle(tr("Midi port sends")); - pup->addMenu(subp); - addMidiPorts(t, subp, gid, gRoutingMenuMap, false); - // - // Display all in the same menu: - // - //pup->addAction(new MenuTitleItem(tr("Audio sends"), pup)); - //gid = addOutPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); - //pup->addSeparator(); - //pup->addAction(new MenuTitleItem(tr("Midi sends"), pup)); - //addMidiPorts(t, pup, gid, gRoutingMenuMap, false); - } - break; - //case Track::AUDIO_OUTPUT: - //case Track::WAVE: - //case Track::AUDIO_GROUP: - - case Track::AUDIO_OUTPUT: - gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); - break; - case Track::WAVE: - gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); // p4.0.20 - gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); // - gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); // - gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); // - break; - case Track::AUDIO_GROUP: - gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = addInPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = addGroupPorts(t, pup, gid, gRoutingMenuMap, -1, -1, false); - gid = addAuxPorts( t, pup, gid, gRoutingMenuMap, -1, -1, false); // p4.0.20 - gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, false); - break; - - case Track::AUDIO_SOFTSYNTH: - gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, false); - break; - default: - gRoutingPopupMenuMaster = 0; - pup->clear(); - gRoutingMenuMap.clear(); - iR->setDown(false); - return; - } - - if(pup->actions().isEmpty()) - { - gRoutingPopupMenuMaster = 0; - gRoutingMenuMap.clear(); - iR->setDown(false); - return; - } - - gIsOutRoutingPopupMenu = false; - gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); - connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(ppt); + RoutePopupMenu* pup = muse->getRoutingPopupMenu(); iR->setDown(false); + pup->exec(QCursor::pos(), track, false); } //--------------------------------------------------------- @@ -1907,136 +989,8 @@ void AudioStrip::iRoutePressed() void AudioStrip::oRoutePressed() { - if(!track || track->isMidiTrack()) - { - gRoutingPopupMenuMaster = 0; - return; - } - - QPoint ppt = QCursor::pos(); - - PopupMenu* pup = muse->getRoutingPopupMenu(); - pup->disconnect(); - - AudioTrack* t = (AudioTrack*)track; - RouteList* orl = t->outRoutes(); - - QAction* act = 0; - int gid = 0; - //int id = 0; - - pup->clear(); - gRoutingMenuMap.clear(); - gid = 0; - - switch(track->type()) - { - case Track::AUDIO_OUTPUT: - { - 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); - pup->addAction(titel); - - if(!checkAudioDevice()) - { - gRoutingPopupMenuMaster = 0; - pup->clear(); - gRoutingMenuMap.clear(); - oR->setDown(false); - return; - } - std::list ol = audioDevice->inputPorts(); - for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) - { - //id = gid * 16 + i; // IDs removed p4.0.14 Tim. - act = pup->addAction(*ip); - //act->setData(id); - act->setData(gid); - act->setCheckable(true); - - Route dst(*ip, true, i, Route::JACK_ROUTE); - //gRoutingMenuMap.insert( pRouteMenuMap(id, dst) ); - gRoutingMenuMap.insert( pRouteMenuMap(gid, dst) ); - ++gid; - for(iRoute ir = orl->begin(); ir != orl->end(); ++ir) - { - if(*ir == dst) - { - act->setChecked(true); - break; - } - } - } - if(i+1 != channel) - pup->addSeparator(); - } - - // p4.0.14 - // - // Display using separate menu for audio inputs: - // - pup->addSeparator(); - pup->addAction(new MenuTitleItem(tr("Soloing chain"), pup)); - PopupMenu* subp = new PopupMenu(pup, true); - subp->setTitle(tr("Audio returns")); - pup->addMenu(subp); - gid = addInPorts(t, subp, gid, gRoutingMenuMap, -1, -1, true); - // - // Display all in the same menu: - // - //pup->addSeparator(); - //MenuTitleItem* title = new MenuTitleItem(tr("Audio returns"), pup); - //pup->addAction(title); - //gid = addInPorts(t, pup, gid, gRoutingMenuMap, -1, -1, true); - } - break; - //case Track::AUDIO_INPUT: - //case Track::WAVE: - //case Track::AUDIO_GROUP: - - case Track::AUDIO_SOFTSYNTH: - gid = addMultiChannelPorts(t, pup, gid, gRoutingMenuMap, true); - break; - - case Track::AUDIO_INPUT: - //gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); // Rem p4.0.20 - case Track::WAVE: - case Track::AUDIO_GROUP: - case Track::AUDIO_AUX: - //case Track::AUDIO_SOFTSYNTH: - gid = addWavePorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); // p4.0.20 - gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); - gid = addGroupPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); - gid = nonSyntiTrackAddSyntis(t, pup, gid, gRoutingMenuMap, true); - break; - //case Track::AUDIO_AUX: - // gid = addOutPorts( t, pup, gid, gRoutingMenuMap, -1, -1, true); - //break; - - default: - gRoutingPopupMenuMaster = 0; - pup->clear(); - gRoutingMenuMap.clear(); - oR->setDown(false); - return; - } - - if(pup->actions().isEmpty()) - { - gRoutingPopupMenuMaster = 0; - gRoutingMenuMap.clear(); - oR->setDown(false); - return; - } - - gIsOutRoutingPopupMenu = true; - gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); - connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(ppt); + RoutePopupMenu* pup = muse->getRoutingPopupMenu(); oR->setDown(false); + pup->exec(QCursor::pos(), track, true); } diff --git a/muse2/muse/mixer/astrip.h b/muse2/muse/mixer/astrip.h index 10d75305..92867033 100644 --- a/muse2/muse/mixer/astrip.h +++ b/muse2/muse/mixer/astrip.h @@ -12,7 +12,7 @@ #include #include "strip.h" -#include "route.h" +//#include "route.h" class Slider; class Knob; @@ -20,7 +20,7 @@ class Knob; class QToolButton; //class QAction; //class QPopupMenu; -class PopupMenu; +//class PopupMenu; class QButton; class TransparentToolButton; class AudioTrack; @@ -61,7 +61,6 @@ class AudioStrip : public Strip { void updateVolume(); void updatePan(); void updateChannels(); - //void updateRouteMenus(); private slots: void stereoToggled(bool); @@ -69,7 +68,6 @@ class AudioStrip : public Strip { void offToggled(bool); void iRoutePressed(); void oRoutePressed(); - void routingPopupMenuActivated(QAction*); void auxChanged(double, int); void volumeChanged(double); void volumePressed(); diff --git a/muse2/muse/mixer/mstrip.cpp b/muse2/muse/mixer/mstrip.cpp index 427f9ed6..d773708a 100644 --- a/muse2/muse/mixer/mstrip.cpp +++ b/muse2/muse/mixer/mstrip.cpp @@ -43,7 +43,8 @@ #include "gconfig.h" #include "ttoolbutton.h" //#include "utils.h" -#include "popupmenu.h" +//#include "popupmenu.h" +#include "routepopup.h" enum { KNOB_PAN, KNOB_VAR_SEND, KNOB_REV_SEND, KNOB_CHO_SEND }; @@ -503,26 +504,17 @@ void MidiStrip::songChanged(int val) if (val & SC_TRACK_MODIFIED) { setLabelText(); - // Added by Tim. p3.3.9 setLabelFont(); } - // Added by Tim. p3.3.9 - // Catch when label font changes. + // Catch when label font changes. Tim. p3.3.9 if (val & SC_CONFIG) { // Set the strip label's font. //label->setFont(config.fonts[1]); setLabelFont(); } - - // p3.3.47 Update the routing popup menu if anything relevant changes. - //if(gRoutingPopupMenuMaster == this && track && (val & (SC_ROUTE | SC_CHANNELS | SC_CONFIG))) - if(val & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) // p3.3.50 - // Use this handy shared routine. - //muse->updateRouteMenus(track); - muse->updateRouteMenus(track, this); // p3.3.50 } //--------------------------------------------------------- @@ -1006,36 +998,15 @@ void MidiStrip::setReverbSend(double val) ctrlChanged(CTRL_REVERB_SEND, lrint(val)); } -//--------------------------------------------------------- -// routingPopupMenuActivated -//--------------------------------------------------------- - -void MidiStrip::routingPopupMenuActivated(QAction* act) -{ - if(gRoutingPopupMenuMaster != this || !track || !track->isMidiTrack()) - return; - - muse->routingPopupMenuActivated(track, act->data().toInt()); -} - //--------------------------------------------------------- // iRoutePressed //--------------------------------------------------------- void MidiStrip::iRoutePressed() { - if(!track || !track->isMidiTrack()) - return; - - PopupMenu* pup = muse->prepareRoutingPopupMenu(track, false); - if(!pup) - return; - - gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); - connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(QCursor::pos()); + RoutePopupMenu* pup = muse->getRoutingPopupMenu(); iR->setDown(false); + pup->exec(QCursor::pos(), track, false); } //--------------------------------------------------------- @@ -1044,18 +1015,9 @@ void MidiStrip::iRoutePressed() void MidiStrip::oRoutePressed() { - if(!track || !track->isMidiTrack()) - return; - - PopupMenu* pup = muse->prepareRoutingPopupMenu(track, true); - if(!pup) - return; - - gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); - connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(QCursor::pos()); + RoutePopupMenu* pup = muse->getRoutingPopupMenu(); oR->setDown(false); + pup->exec(QCursor::pos(), track, true); } diff --git a/muse2/muse/mixer/mstrip.h b/muse2/muse/mixer/mstrip.h index 920cca99..39b55d21 100644 --- a/muse2/muse/mixer/mstrip.h +++ b/muse2/muse/mixer/mstrip.h @@ -32,9 +32,6 @@ class MidiStrip : public Strip { Slider* slider; DoubleLabel* sl; TransparentToolButton* off; - //QToolButton* route; - //QToolButton* iR; - //QToolButton* oR; struct KNOB { Knob* knob; @@ -55,11 +52,9 @@ class MidiStrip : public Strip { void updateOffState(); private slots: - //void routeClicked(); void offToggled(bool); void iRoutePressed(); void oRoutePressed(); - void routingPopupMenuActivated(QAction*); void setVolume(double); void setPan(double); void setChorusSend(double); diff --git a/muse2/muse/node.cpp b/muse2/muse/node.cpp index 114b03d3..06dbbc8d 100644 --- a/muse2/muse/node.cpp +++ b/muse2/muse/node.cpp @@ -1264,7 +1264,7 @@ bool AudioTrack::getData(unsigned pos, int channels, unsigned nframes, float** b printf("AudioTrack::getData name:%s inRoutes:%d\n", name().toLatin1().constData(), rl->size()); #endif - iRoute ir = rl->begin(); + ciRoute ir = rl->begin(); if (ir == rl->end()) return false; diff --git a/muse2/muse/route.cpp b/muse2/muse/route.cpp index 6f42c1f2..9425f056 100644 --- a/muse2/muse/route.cpp +++ b/muse2/muse/route.cpp @@ -187,7 +187,7 @@ void addRoute(Route src, Route dst) src.channel = dst.channel; //src.channels = dst.channels = 1; RouteList* inRoutes = dst.track->inRoutes(); - for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + for (ciRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) { if (*i == src) // route already there { @@ -226,7 +226,7 @@ void addRoute(Route src, Route dst) //dst.channel = -1; RouteList* routes = dst.device->inRoutes(); - for (iRoute i = routes->begin(); i != routes->end(); ++i) + for (ciRoute i = routes->begin(); i != routes->end(); ++i) { if (*i == src) // route already there { @@ -284,7 +284,7 @@ void addRoute(Route src, Route dst) dst.channel = src.channel; //dst.channels = src.channels = 1; - for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + for (ciRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { if (*i == dst) // route already there { @@ -312,7 +312,7 @@ void addRoute(Route src, Route dst) //dst.channels = src.channels = 1; RouteList* routes = src.device->outRoutes(); - for (iRoute i = routes->begin(); i != routes->end(); ++i) + for (ciRoute i = routes->begin(); i != routes->end(); ++i) { if (*i == dst) // route already there { @@ -616,7 +616,7 @@ void addRoute(Route src, Route dst) // dst.channels = src.track->channels(); //} - for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + for (ciRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { if (*i == dst) // route already there // TODO: @@ -1248,7 +1248,7 @@ bool checkRoute(const QString& s, const QString& d) } src.channel = dst.channel; RouteList* inRoutes = dst.track->inRoutes(); - for (iRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) + for (ciRoute i = inRoutes->begin(); i != inRoutes->end(); ++i) { if (*i == src) { // route already there return false; @@ -1263,7 +1263,7 @@ bool checkRoute(const QString& s, const QString& d) src.channel = -1; //dst.channel = -1; RouteList* routes = dst.device->inRoutes(); - for (iRoute i = routes->begin(); i != routes->end(); ++i) + for (ciRoute i = routes->begin(); i != routes->end(); ++i) { if (*i == src) { // route already there return false; @@ -1286,7 +1286,7 @@ bool checkRoute(const QString& s, const QString& d) } RouteList* outRoutes = src.track->outRoutes(); dst.channel = src.channel; - for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + for (ciRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { if (*i == dst) { // route already there return false; @@ -1301,7 +1301,7 @@ bool checkRoute(const QString& s, const QString& d) //dst.channel = src.channel; dst.channel = -1; //src.channel = -1; - for (iRoute i = routes->begin(); i != routes->end(); ++i) + for (ciRoute i = routes->begin(); i != routes->end(); ++i) { if (*i == dst) { // route already there return false; @@ -1314,7 +1314,7 @@ bool checkRoute(const QString& s, const QString& d) else if (src.type == Route::MIDI_PORT_ROUTE) // p3.3.49 { RouteList* outRoutes = midiPorts[src.midiPort].outRoutes(); - for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + for (ciRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { if (*i == dst) { // route already there return false; @@ -1330,7 +1330,7 @@ bool checkRoute(const QString& s, const QString& d) // src.device->outRoutes() : src.track->outRoutes(); RouteList* outRoutes = (src.type == Route::MIDI_DEVICE_ROUTE) ? src.device->outRoutes() : src.track->outRoutes(); - for (iRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) + for (ciRoute i = outRoutes->begin(); i != outRoutes->end(); ++i) { if (*i == dst) { // route already there return false; diff --git a/muse2/muse/route.h b/muse2/muse/route.h index 2f29bcf8..9809352c 100644 --- a/muse2/muse/route.h +++ b/muse2/muse/route.h @@ -9,9 +9,10 @@ #ifndef __ROUTE_H__ #define __ROUTE_H__ +#include + #include #include - #include "globaldefs.h" class QString; @@ -71,6 +72,8 @@ struct Route { void dump() const; }; +// Allow Routes to be a QVariant +Q_DECLARE_METATYPE(Route) ; //--------------------------------------------------------- // RouteList @@ -93,11 +96,11 @@ extern bool checkRoute(const QString&, const QString&); // RouteMenuMap //--------------------------------------------------------- -typedef std::map >::iterator iRouteMenuMap; -typedef std::map >::const_iterator ciRouteMenuMap; -typedef std::map > RouteMenuMap; -typedef std::pair pRouteMenuMap; -typedef std::pair rpRouteMenuMap; +//typedef std::map >::iterator iRouteMenuMap; +//typedef std::map >::const_iterator ciRouteMenuMap; +//typedef std::map > RouteMenuMap; +//typedef std::pair pRouteMenuMap; +//typedef std::pair rpRouteMenuMap; #endif diff --git a/muse2/muse/seqmsg.cpp b/muse2/muse/seqmsg.cpp index 950015b2..b4d65148 100644 --- a/muse2/muse/seqmsg.cpp +++ b/muse2/muse/seqmsg.cpp @@ -396,7 +396,7 @@ void Audio::msgSetChannels(AudioTrack* node, int n) else if ((i >= n) && ai->jackPort(i)) { RouteList* ir = node->inRoutes(); - for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + for (ciRoute ii = ir->begin(); ii != ir->end(); ++ii) { Route r = *ii; if ((r.type == Route::JACK_ROUTE) && (r.channel == i)) @@ -427,7 +427,7 @@ void Audio::msgSetChannels(AudioTrack* node, int n) else if (i >= n && jp) { RouteList* ir = node->outRoutes(); - for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + for (ciRoute ii = ir->begin(); ii != ir->end(); ++ii) { Route r = *ii; if ((r.type == Route::JACK_ROUTE) && (r.channel == i)) diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp index 28ea1210..6750203a 100644 --- a/muse2/muse/song.cpp +++ b/muse2/muse/song.cpp @@ -2926,7 +2926,7 @@ void Song::connectJackRoutes(AudioTrack* track, bool disconnect) for(int ch = 0; ch < ao->channels(); ++ch) { RouteList* ir = ao->outRoutes(); - for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + for (ciRoute ii = ir->begin(); ii != ir->end(); ++ii) { Route r = *ii; if ((r.type == Route::JACK_ROUTE) && (r.channel == ch)) @@ -2959,7 +2959,7 @@ void Song::connectJackRoutes(AudioTrack* track, bool disconnect) for(int ch = 0; ch < ai->channels(); ++ch) { RouteList* ir = ai->inRoutes(); - for (iRoute ii = ir->begin(); ii != ir->end(); ++ii) + for (ciRoute ii = ir->begin(); ii != ir->end(); ++ii) { Route r = *ii; if ((r.type == Route::JACK_ROUTE) && (r.channel == ch)) diff --git a/muse2/muse/wavetrack.cpp b/muse2/muse/wavetrack.cpp index fdebc8b8..ad02084c 100644 --- a/muse2/muse/wavetrack.cpp +++ b/muse2/muse/wavetrack.cpp @@ -209,7 +209,7 @@ bool WaveTrack::getData(unsigned framePos, int channels, unsigned nframe, float* if ((song->bounceTrack != this) && !noInRoute()) { RouteList* irl = inRoutes(); - iRoute i = irl->begin(); + ciRoute i = irl->begin(); if(i->track->isMidiTrack()) { if(debugMsg) diff --git a/muse2/muse/widgets/CMakeLists.txt b/muse2/muse/widgets/CMakeLists.txt index 7589ddf0..a4da398f 100644 --- a/muse2/muse/widgets/CMakeLists.txt +++ b/muse2/muse/widgets/CMakeLists.txt @@ -47,6 +47,7 @@ QT4_WRAP_CPP (widget_mocs intlabel.h knob.h lcombo.h + menutitleitem.h meter.h metronome.h midisyncimpl.h @@ -63,6 +64,7 @@ QT4_WRAP_CPP (widget_mocs # posedit.h poslabel.h projectcreateimpl.h + routepopup.h scrollscale.h shortcutcapturedialog.h shortcutconfig.h @@ -142,6 +144,7 @@ file (GLOB widgets_source_files intlabel.cpp knob.cpp lcombo.cpp + menutitleitem.cpp meter.cpp metronome.cpp midisyncimpl.cpp @@ -159,6 +162,7 @@ file (GLOB widgets_source_files # posedit.cpp poslabel.cpp projectcreateimpl.cpp + routepopup.cpp scldiv.cpp scldraw.cpp sclif.cpp diff --git a/muse2/muse/widgets/genset.cpp b/muse2/muse/widgets/genset.cpp index edf3cfda..d8c76874 100644 --- a/muse2/muse/widgets/genset.cpp +++ b/muse2/muse/widgets/genset.cpp @@ -151,6 +151,7 @@ Shorter periods are desirable. oldStyleStopCheckBox->setChecked(config.useOldStyleStopShortCut); moveArmedCheckBox->setChecked(config.moveArmedCheckBox); projectSaveCheckBox->setChecked(config.useProjectSaveDialog); + popsDefStayOpenCheckBox->setChecked(config.popupsDefaultStayOpen); //updateSettings(); // TESTING @@ -263,6 +264,7 @@ void GlobalSettingsConfig::updateSettings() oldStyleStopCheckBox->setChecked(config.useOldStyleStopShortCut); moveArmedCheckBox->setChecked(config.moveArmedCheckBox); projectSaveCheckBox->setChecked(config.useProjectSaveDialog); + popsDefStayOpenCheckBox->setChecked(config.popupsDefaultStayOpen); } //--------------------------------------------------------- @@ -344,6 +346,7 @@ void GlobalSettingsConfig::apply() config.useOldStyleStopShortCut = oldStyleStopCheckBox->isChecked(); config.moveArmedCheckBox = moveArmedCheckBox->isChecked(); config.useProjectSaveDialog = projectSaveCheckBox->isChecked(); + config.popupsDefaultStayOpen = popsDefStayOpenCheckBox->isChecked(); //muse->showMixer(config.mixerVisible); muse->showMixer1(config.mixer1Visible); diff --git a/muse2/muse/widgets/gensetbase.ui b/muse2/muse/widgets/gensetbase.ui index ca4b97f8..68f3ebb5 100644 --- a/muse2/muse/widgets/gensetbase.ui +++ b/muse2/muse/widgets/gensetbase.ui @@ -1333,7 +1333,7 @@ Adjusts responsiveness of audio controls and
- + Qt::Vertical @@ -1346,6 +1346,27 @@ Adjusts responsiveness of audio controls and + + + + + + + Some popup menus stay open (else hold Ctrl) + + + + + + + Allows some popup menus to stay open. +Otherwise, hold Ctrl to keep them open. + + + + + + diff --git a/muse2/muse/widgets/menutitleitem.cpp b/muse2/muse/widgets/menutitleitem.cpp new file mode 100644 index 00000000..8769eb02 --- /dev/null +++ b/muse2/muse/widgets/menutitleitem.cpp @@ -0,0 +1,48 @@ +//============================================================================= +// MusE +// Linux Music Editor +// (C) Copyright 1999-2001 Werner Schweer (ws@seh.de) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// 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., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include + +#include "menutitleitem.h" + +//--------------------------------------------------------- +// MenuTitleItem +//--------------------------------------------------------- + +MenuTitleItem::MenuTitleItem(const QString& ss, QWidget* parent) + : QWidgetAction(parent) + { + s = ss; + // Don't allow to click on it. + setEnabled(false); + // Just to be safe, set to -1 instead of default 0. + setData(-1); + } + +QWidget* MenuTitleItem::createWidget(QWidget *parent) +{ + QLabel* l = new QLabel(s, parent); + l->setAlignment(Qt::AlignCenter); + l->setAutoFillBackground(true); + //QPalette palette; + //palette.setColor(label->backgroundRole(), c); + //l->setPalette(palette); + l->setBackgroundRole(QPalette::Dark); + return l; +} + diff --git a/muse2/muse/widgets/mtrackinfo.cpp b/muse2/muse/widgets/mtrackinfo.cpp index 465b7130..6dd02931 100644 --- a/muse2/muse/widgets/mtrackinfo.cpp +++ b/muse2/muse/widgets/mtrackinfo.cpp @@ -26,6 +26,7 @@ #include "app.h" #include "route.h" #include "popupmenu.h" +#include "routepopup.h" //--------------------------------------------------------- // setTrack @@ -576,33 +577,6 @@ void MidiTrackInfo::iOutputPortChanged(int index) song->update(SC_MIDI_TRACK_PROP); // } -//--------------------------------------------------------- -// routingPopupMenuActivated -//--------------------------------------------------------- - -//void MidiTrackInfo::routingPopupMenuActivated(int n) -void MidiTrackInfo::routingPopupMenuActivated(QAction* act) -{ - ///if(!midiTrackInfo || gRoutingPopupMenuMaster != midiTrackInfo || !selected || !selected->isMidiTrack()) - if((gRoutingPopupMenuMaster != this) || !selected || !selected->isMidiTrack()) - return; - muse->routingPopupMenuActivated(selected, act->data().toInt()); -} - -#if 0 -//--------------------------------------------------------- -// routingPopupViewActivated -//--------------------------------------------------------- - -void MidiTrackInfo::routingPopupViewActivated(const QModelIndex& mdi) -{ - ///if(!midiTrackInfo || gRoutingPopupMenuMaster != midiTrackInfo || !selected || !selected->isMidiTrack()) - if(gRoutingPopupMenuMaster != this || !selected || !selected->isMidiTrack()) - return; - muse->routingPopupMenuActivated(selected, mdi.data().toInt()); -} -#endif - //--------------------------------------------------------- // inRoutesPressed //--------------------------------------------------------- @@ -614,44 +588,9 @@ void MidiTrackInfo::inRoutesPressed() if(!selected->isMidiTrack()) return; - PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, false); - //PopupView* pup = muse->prepareRoutingPopupView(selected, false); - - /* - QPoint ppt = QCursor::pos(); - - int i = 0; - for( ; i < MIDI_PORTS; ++i) - { - if(midiPorts[i].device() && !midiPorts[pi].device()->isSynti()) - break; - } - if(!pup || i == MIDI_PORTS) - { - int ret = QMessageBox::warning(this, tr("No devices"), - tr("There are no midi port devices defined.\n" - "Do you want to open the midi configuration dialog?"), - QMessageBox::Ok | QMessageBox::Cancel, - QMessageBox::Ok); - if (ret == QMessageBox::Ok) { - //printf("open config midi ports\n"); - muse->configMidiPorts(); - } - if(!pup) - return; - } - */ - - ///gRoutingPopupMenuMaster = midiTrackInfo; - gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); - //connect(pup, SIGNAL(activated(const QModelIndex&)), SLOT(routingPopupViewActivated(const QModelIndex&))); - connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - //connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupViewAboutToHide())); - pup->popup(QCursor::pos()); - //pup->setVisible(true); + RoutePopupMenu* pup = muse->getRoutingPopupMenu(); iRButton->setDown(false); - return; + pup->exec(QCursor::pos(), selected, false); } //--------------------------------------------------------- @@ -665,17 +604,9 @@ void MidiTrackInfo::outRoutesPressed() if(!selected->isMidiTrack()) return; - PopupMenu* pup = muse->prepareRoutingPopupMenu(selected, true); - if(!pup) - return; - - ///gRoutingPopupMenuMaster = midiTrackInfo; - gRoutingPopupMenuMaster = this; - connect(pup, SIGNAL(triggered(QAction*)), SLOT(routingPopupMenuActivated(QAction*))); - connect(pup, SIGNAL(aboutToHide()), muse, SLOT(routingPopupMenuAboutToHide())); - pup->popup(QCursor::pos()); + RoutePopupMenu* pup = muse->getRoutingPopupMenu(); oRButton->setDown(false); - return; + pup->exec(QCursor::pos(), selected, true); } //--------------------------------------------------------- @@ -1044,7 +975,7 @@ void MidiTrackInfo::iPanChanged(int val) void MidiTrackInfo::instrPopupActivated(QAction* act) { - //printf("MidiTrackInfo::instrPopupActivated\n"); // REMOVE Tim + //printf("MidiTrackInfo::instrPopupActivated\n"); if(act && selected) { @@ -1076,11 +1007,11 @@ void MidiTrackInfo::instrPopup() //QMenu* pup = new QMenu; PopupMenu* pup = new PopupMenu(true); - ///instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM); + //instr->populatePatchPopup(pop, channel, song->mtype(), track->type() == Track::DRUM); instr->populatePatchPopup(pup, channel, song->mtype(), track->type() == Track::DRUM); - ///if(pop->actions().count() == 0) - /// return; + //if(pop->actions().count() == 0) + // return; if(pup->actions().count() == 0) { delete pup; @@ -1090,7 +1021,7 @@ void MidiTrackInfo::instrPopup() connect(pup, SIGNAL(triggered(QAction*)), SLOT(instrPopupActivated(QAction*))); //connect(pup, SIGNAL(hovered(QAction*)), SLOT(instrPopupActivated(QAction*))); - ///QAction *act = pop->exec(iPatch->mapToGlobal(QPoint(10,5))); + //QAction *act = pop->exec(iPatch->mapToGlobal(QPoint(10,5))); QAction *act = pup->exec(iPatch->mapToGlobal(QPoint(10,5))); if(act) { @@ -1310,15 +1241,6 @@ void MidiTrackInfo::updateTrackInfo(int flags) return; MidiTrack* track = (MidiTrack*)selected; - // p3.3.47 Update the routing popup menu if anything relevant changes. - //if(gRoutingPopupMenuMaster == midiTrackInfo && selected && (flags & (SC_ROUTE | SC_CHANNELS | SC_CONFIG))) - if(flags & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) // p3.3.50 - // Use this handy shared routine. - //muse->updateRouteMenus(selected); - ///muse->updateRouteMenus(selected, midiTrackInfo); // p3.3.50 - muse->updateRouteMenus(selected, this); - - // Added by Tim. p3.3.9 setLabelText(); setLabelFont(); diff --git a/muse2/muse/widgets/mtrackinfo.h b/muse2/muse/widgets/mtrackinfo.h index 0e559f33..ed229ad6 100644 --- a/muse2/muse/widgets/mtrackinfo.h +++ b/muse2/muse/widgets/mtrackinfo.h @@ -46,8 +46,6 @@ class MidiTrackInfo : public QWidget, public Ui::MidiTrackInfoBase void recEchoToggled(bool); void inRoutesPressed(); void outRoutesPressed(); - void routingPopupMenuActivated(QAction*); - //void routingPopupViewActivated(const QModelIndex&); void instrPopupActivated(QAction*); protected slots: diff --git a/muse2/muse/widgets/musewidgetsplug.cpp b/muse2/muse/widgets/musewidgetsplug.cpp index 8cb0b57e..993b0fb8 100644 --- a/muse2/muse/widgets/musewidgetsplug.cpp +++ b/muse2/muse/widgets/musewidgetsplug.cpp @@ -190,13 +190,14 @@ GlobalConfigValues config = { true, // useDenormalBias false, // useOutputLimiter true, // showDidYouKnow - false, // vstInPlace Enable VST in-place processing + false, // vstInPlace Enable VST in-place processing 44100, // Dummy audio preferred sample rate 512 // Dummy audio buffer size QString("./"), // projectBaseFolder true, // projectStoreInFolder true, // useProjectSaveDialog - 64 // minControlProcessPeriod + 64, // minControlProcessPeriod + false // popupsDefaultStayOpen }; //--------------------------------------------------------- diff --git a/muse2/muse/widgets/popupmenu.cpp b/muse2/muse/widgets/popupmenu.cpp index 263c8475..adbe7dd6 100644 --- a/muse2/muse/widgets/popupmenu.cpp +++ b/muse2/muse/widgets/popupmenu.cpp @@ -22,6 +22,8 @@ //#include #include "popupmenu.h" +#include "gconfig.h" +#include "route.h" //====================== @@ -82,7 +84,7 @@ void PopupMenu::clear() QMenu* menu = act->menu(); if(menu) { - menu->clear(); + menu->clear(); // Recursive. act->setMenu(0); // CHECK: Is this OK? delete menu; } @@ -97,7 +99,25 @@ void PopupMenu::clear() #endif // POPUP_MENU_DISABLE_AUTO_SCROLL } -QAction* PopupMenu::findActionFromData(QVariant v) const +void PopupMenu::clearAllChecks() const +{ + QList list = actions(); + for(int i = 0; i < list.size(); ++i) + { + QAction* act = list[i]; + PopupMenu* menu = static_cast (act->menu()); + if(menu) + menu->clearAllChecks(); // Recursive. + if(act->isCheckable()) + { + act->blockSignals(true); + act->setChecked(false); + act->blockSignals(false); + } + } +} + +QAction* PopupMenu::findActionFromData(const QVariant& v) const { QList list = actions(); for(int i = 0; i < list.size(); ++i) @@ -106,9 +126,21 @@ QAction* PopupMenu::findActionFromData(QVariant v) const PopupMenu* menu = (PopupMenu*)act->menu(); if(menu) { - if(QAction* actm = menu->findActionFromData(v)) + if(QAction* actm = menu->findActionFromData(v)) // Recursive. return actm; } + + // "Operator == Compares this QVariant with v and returns true if they are equal, + // otherwise returns false. In the case of custom types, their equalness operators + // are not called. Instead the values' addresses are compared." + // + // Take care of struct Route first. Insert other future custom structures here too ! + if(act->data().canConvert() && v.canConvert()) + { + if(act->data().value() == v.value()) + return act; + } + else if(act->data() == v) return act; } @@ -117,7 +149,7 @@ QAction* PopupMenu::findActionFromData(QVariant v) const bool PopupMenu::event(QEvent* event) { - //printf("PopupMenu::event type:%d\n", event->type()); // REMOVE Tim. + //printf("PopupMenu::event type:%d\n", event->type()); switch(event->type()) { @@ -125,6 +157,7 @@ bool PopupMenu::event(QEvent* event) case QEvent::MouseButtonDblClick: { if(_stayOpen) + //if(_stayOpen && config.popupsDefaultStayOpen) { QMouseEvent* e = static_cast(event); if(e->modifiers() == Qt::NoModifier) @@ -143,6 +176,7 @@ bool PopupMenu::event(QEvent* event) case QEvent::KeyPress: { if(_stayOpen) + //if(_stayOpen && config.popupsDefaultStayOpen) { QKeyEvent* e = static_cast(event); if(e->modifiers() == Qt::NoModifier && e->key() == Qt::Key_Space) @@ -169,7 +203,7 @@ bool PopupMenu::event(QEvent* event) int dw = QApplication::desktop()->width(); // We want the whole thing if multiple monitors. //printf("PopupMenu::event MouseMove: pos x:%d y:%d globPos x:%d y:%d\n", - // pos.x(), pos.y(), globPos.x(), globPos.y()); // REMOVE Tim. + // pos.x(), pos.y(), globPos.x(), globPos.y()); /* //QAction* action = actionAt(globPos); @@ -178,7 +212,7 @@ bool PopupMenu::event(QEvent* event) { QRect r = actionGeometry(action); //printf(" act x:%d y:%d w:%d h:%d popup px:%d py:%d pw:%d ph:%d\n", - // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. + // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); //action->hover(); } @@ -224,7 +258,7 @@ bool PopupMenu::event(QEvent* event) #ifndef POPUP_MENU_DISABLE_AUTO_SCROLL void PopupMenu::timerHandler() { - // printf("PopupMenu::timerHandler\n"); // REMOVE Tim. + // printf("PopupMenu::timerHandler\n"); //if(!isVisible() || !hasFocus()) if(!isVisible()) @@ -261,9 +295,9 @@ void PopupMenu::popHovered(QAction* action) QRect r = actionGeometry(action); //printf("PopupMenu::popHovered x:%d y:%d w:%d h:%d px:%d py:%d pw:%d ph:%d\n", - // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); // REMOVE Tim. + // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height()); //printf("PopupMenu::popHovered x:%d y:%d w:%d h:%d px:%d py:%d pw:%d ph:%d dtw:%d\n", - // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height(), dw); // REMOVE Tim. + // r.x(), r.y(), r.width(), r.height(), x(), y(), width(), height(), dw); //int x = r.x() + ctrlSubPop->x(); if(x() + r.x() < 0) //setGeometry(0, y(), width(), height()); @@ -295,49 +329,20 @@ void PopupMenu::mouseReleaseEvent(QMouseEvent *e) return; #else - if(!_stayOpen) + // Check for Ctrl to stay open. + if(!_stayOpen || (!config.popupsDefaultStayOpen && (e->modifiers() & Qt::ControlModifier) == 0)) { QMenu::mouseReleaseEvent(e); return; } - //printf("PopupMenu::mouseReleaseEvent\n"); // REMOVE Tim. - - //Q_D(QMenu); - //if (d->mouseEventTaken(e)) - // return; - - //d->mouseDown = false; - //QAction *action = d->actionAt(e->pos()); + //printf("PopupMenu::mouseReleaseEvent\n"); QAction *action = actionAt(e->pos()); - - //for(QWidget *caused = this; caused;) { - // if (QMenu *m = qobject_cast(caused)) { - // QAction *currentAction = d->currentAction; - // if(currentAction && (!currentAction->isEnabled() || currentAction->menu() || currentAction->isSeparator())) - // currentAction = 0; - // caused = m->d_func()->causedPopup.widget; - // if (m->d_func()->eventLoop) - // m->d_func()->syncAction = currentAction; // synchronous operation - // } else { - // break; - // } - //} - - //if (action && action == d->currentAction) { if (action && action == activeAction() && !action->isSeparator() && action->isEnabled()) - { - //if (action->menu()) - // action->menu()->d_func()->setFirstActionActive(); - //else - //d->activateAction(action, QAction::Trigger); - action->activate(QAction::Trigger); - } + action->activate(QAction::Trigger); else - //if (d->motions > 6) { - // d->hideUpToMenuBar(); - // } QMenu::mouseReleaseEvent(e); + #endif // POPUP_MENU_DISABLE_STAY_OPEN } diff --git a/muse2/muse/widgets/popupmenu.h b/muse2/muse/widgets/popupmenu.h index 47be57ae..e0e7d26f 100644 --- a/muse2/muse/widgets/popupmenu.h +++ b/muse2/muse/widgets/popupmenu.h @@ -60,8 +60,9 @@ class PopupMenu : public QMenu PopupMenu(const QString& title, QWidget* parent = 0, bool stayOpen = false); ~PopupMenu(); void clear(); - QAction* findActionFromData(QVariant) const; + QAction* findActionFromData(const QVariant&) const; bool stayOpen() const { return _stayOpen; } + void clearAllChecks() const; }; diff --git a/muse2/muse/widgets/routepopup.cpp b/muse2/muse/widgets/routepopup.cpp new file mode 100644 index 00000000..910d693d --- /dev/null +++ b/muse2/muse/widgets/routepopup.cpp @@ -0,0 +1,1416 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// RoutePopupMenu.cpp +// (C) Copyright 2011 Tim E. Real (terminator356 A T sourceforge D O T net) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// 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., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#include "app.h" +#include "routepopup.h" +#include "midiport.h" +#include "mididev.h" +#include "audio.h" +#include "driver/audiodev.h" +#include "song.h" +#include "track.h" +#include "synth.h" +#include "route.h" +#include "icons.h" +#include "menutitleitem.h" +#include "popupmenu.h" + +//--------------------------------------------------------- +// addMenuItem +//--------------------------------------------------------- + +int RoutePopupMenu::addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int id, int channel, int channels, bool isOutput) +{ + // totalInChannels is only used by syntis. + int toch = ((AudioTrack*)track)->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(track->channels() == 1) + toch = 1; + + // Don't add the last stray mono route if the track is stereo. + //if(route_track->channels() > 1 && (channel+1 == chans)) + // return id; + + RouteList* rl = isOutput ? track->outRoutes() : track->inRoutes(); + + QAction* act; + + QString s(route_track->name()); + + act = lb->addAction(s); + act->setCheckable(true); + + int ach = channel; + int bch = -1; + + Route r(route_track, isOutput ? ach : bch, channels); + + r.remoteChannel = isOutput ? bch : ach; + + act->setData(qVariantFromValue(r)); + + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE && ir->track == route_track && ir->remoteChannel == r.remoteChannel) + { + int tcompch = r.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = r.channels; + if(tcompchs == -1) + tcompchs = isOutput ? track->channels() : route_track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? track->channels() : ir->track->channels(); + + if(compch == tcompch && compchs == tcompchs) + { + act->setChecked(true); + break; + } + } + } + return ++id; +} + +//--------------------------------------------------------- +// addAuxPorts +//--------------------------------------------------------- + +int RoutePopupMenu::addAuxPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput) + { + AuxList* al = song->auxs(); + for (iAudioAux i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + id = addMenuItem(t, track, lb, id, channel, channels, isOutput); + } + return id; + } + +//--------------------------------------------------------- +// addInPorts +//--------------------------------------------------------- + +int RoutePopupMenu::addInPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput) + { + InputList* al = song->inputs(); + for (iAudioInput i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + id = addMenuItem(t, track, lb, id, channel, channels, isOutput); + } + return id; + } + +//--------------------------------------------------------- +// addOutPorts +//--------------------------------------------------------- + +int RoutePopupMenu::addOutPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput) + { + OutputList* al = song->outputs(); + for (iAudioOutput i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + id = addMenuItem(t, track, lb, id, channel, channels, isOutput); + } + return id; + } + +//--------------------------------------------------------- +// addGroupPorts +//--------------------------------------------------------- + +int RoutePopupMenu::addGroupPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput) + { + GroupList* al = song->groups(); + for (iAudioGroup i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + id = addMenuItem(t, track, lb, id, channel, channels, isOutput); + } + return id; + } + +//--------------------------------------------------------- +// addWavePorts +//--------------------------------------------------------- + +int RoutePopupMenu::addWavePorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput) + { + WaveTrackList* al = song->waves(); + for (iWaveTrack i = al->begin(); i != al->end(); ++i) { + Track* track = *i; + if (t == track) + continue; + id = addMenuItem(t, track, lb, id, channel, channels, isOutput); + } + return id; + } + +//--------------------------------------------------------- +// addSyntiPorts +//--------------------------------------------------------- + +int RoutePopupMenu::addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, + int channel, int channels, bool isOutput) +{ + RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); + + QAction* act; + + SynthIList* al = song->syntis(); + for (iSynthI i = al->begin(); i != al->end(); ++i) + { + Track* track = *i; + if (t == track) + continue; + int toch = ((AudioTrack*)track)->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(track->channels() == 1) + toch = 1; + + // totalInChannels is only used by syntis. + int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); + + int tchans = (channels != -1) ? channels: t->channels(); + if(tchans == 2) + { + // Ignore odd numbered left-over mono channel. + //chans = chans & ~1; + //if(chans != 0) + chans -= 1; + } + + if(chans > 0) + { + PopupMenu* chpup = new PopupMenu(lb, true); + chpup->setTitle(track->name()); + for(int ch = 0; ch < chans; ++ch) + { + char buffer[128]; + if(tchans == 2) + snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").toLatin1().constData(), ch+1, ch+2); + else + snprintf(buffer, 128, "%s %d", chpup->tr("Channel").toLatin1().constData(), ch+1); + act = chpup->addAction(QString(buffer)); + act->setCheckable(true); + + int ach = (channel == -1) ? ch : channel; + int bch = (channel == -1) ? -1 : ch; + + Route rt(track, (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? ach : bch, tchans); + rt.remoteChannel = (t->type() != Track::AUDIO_SOFTSYNTH || isOutput) ? bch : ach; + + act->setData(qVariantFromValue(rt)); + + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) + { + int tcompch = rt.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = rt.channels; + if(tcompchs == -1) + tcompchs = isOutput ? t->channels() : track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? t->channels() : ir->track->channels(); + + if(compch == tcompch && compchs == tcompchs) + { + act->setChecked(true); + break; + } + } + } + ++id; + } + + lb->addMenu(chpup); + } + } + return id; +} + +//--------------------------------------------------------- +// addMultiChannelOutPorts +//--------------------------------------------------------- + +int RoutePopupMenu::addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, bool isOutput) +{ + int toch = t->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(t->channels() == 1) + toch = 1; + + // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. + // totalInChannels is only used by syntis. + int chans = (isOutput || t->type() != Track::AUDIO_SOFTSYNTH) ? toch : t->totalInChannels(); + + if(chans > 1) + pup->addAction(new MenuTitleItem("", pup)); + + // + // If it's more than one channel, create a sub-menu. If it's just one channel, don't bother with a sub-menu... + // + + PopupMenu* chpup = pup; + + for(int ch = 0; ch < chans; ++ch) + { + // If more than one channel, create the sub-menu. + if(chans > 1) + chpup = new PopupMenu(pup, true); + + if(isOutput) + { + switch(t->type()) + { + + case Track::AUDIO_INPUT: + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + case Track::AUDIO_AUX: + id = addWavePorts(t, chpup, id, ch, 1, isOutput); + id = addOutPorts(t, chpup, id, ch, 1, isOutput); + id = addGroupPorts(t, chpup, id, ch, 1, isOutput); + id = addSyntiPorts(t, chpup, id, ch, 1, isOutput); + break; + default: + break; + } + } + else + { + switch(t->type()) + { + + case Track::AUDIO_OUTPUT: + id = addWavePorts(t, chpup, id, ch, 1, isOutput); + id = addInPorts(t, chpup, id, ch, 1, isOutput); + id = addGroupPorts(t, chpup, id, ch, 1, isOutput); + id = addAuxPorts(t, chpup, id, ch, 1, isOutput); + id = addSyntiPorts(t, chpup, id, ch, 1, isOutput); + break; + case Track::WAVE: + case Track::AUDIO_SOFTSYNTH: + case Track::AUDIO_GROUP: + id = addWavePorts(t, chpup, id, ch, 1, isOutput); + id = addInPorts(t, chpup, id, ch, 1, isOutput); + id = addGroupPorts(t, chpup, id, ch, 1, isOutput); + id = addAuxPorts(t, chpup, id, ch, 1, isOutput); + id = addSyntiPorts(t, chpup, id, ch, 1, isOutput); + break; + default: + break; + } + } + + // If more than one channel, add the created sub-menu. + if(chans > 1) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d", pup->tr("Channel").toLatin1().constData(), ch+1); + chpup->setTitle(QString(buffer)); + pup->addMenu(chpup); + } + } + + // For stereo listing, ignore odd numbered left-over channels. + chans -= 1; + if(chans > 0) + { + // Ignore odd numbered left-over channels. + //int schans = (chans & ~1) - 1; + + pup->addSeparator(); + pup->addAction(new MenuTitleItem("", pup)); + + // + // If it's more than two channels, create a sub-menu. If it's just two channels, don't bother with a sub-menu... + // + + chpup = pup; + if(chans <= 2) + // Just do one iteration. + chans = 1; + + for(int ch = 0; ch < chans; ++ch) + { + // If more than two channels, create the sub-menu. + if(chans > 2) + chpup = new PopupMenu(pup, true); + + if(isOutput) + { + switch(t->type()) + { + case Track::AUDIO_INPUT: + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_SOFTSYNTH: + case Track::AUDIO_AUX: + id = addWavePorts(t, chpup, id, ch, 2, isOutput); + id = addOutPorts(t, chpup, id, ch, 2, isOutput); + id = addGroupPorts(t, chpup, id, ch, 2, isOutput); + id = addSyntiPorts(t, chpup, id, ch, 2, isOutput); + break; + default: + break; + } + } + else + { + switch(t->type()) + { + case Track::AUDIO_OUTPUT: + id = addWavePorts(t, chpup, id, ch, 2, isOutput); + id = addInPorts(t, chpup, id, ch, 2, isOutput); + id = addGroupPorts(t, chpup, id, ch, 2, isOutput); + id = addAuxPorts(t, chpup, id, ch, 2, isOutput); + id = addSyntiPorts(t, chpup, id, ch, 2, isOutput); + break; + case Track::WAVE: + case Track::AUDIO_SOFTSYNTH: + case Track::AUDIO_GROUP: + id = addWavePorts(t, chpup, id, ch, 2, isOutput); + id = addInPorts(t, chpup, id, ch, 2, isOutput); + id = addGroupPorts(t, chpup, id, ch, 2, isOutput); + id = addAuxPorts(t, chpup, id, ch, 2, isOutput); + id = addSyntiPorts(t, chpup, id, ch, 2, isOutput); + break; + default: + break; + } + } + + // If more than two channels, add the created sub-menu. + if(chans > 2) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d,%d", pup->tr("Channel").toLatin1().constData(), ch+1, ch+2); + chpup->setTitle(QString(buffer)); + pup->addMenu(chpup); + } + } + } + + return id; +} + +//--------------------------------------------------------- +// nonSyntiTrackAddSyntis +//--------------------------------------------------------- + +int RoutePopupMenu::nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, bool isOutput) +{ + RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); + + QAction* act; + SynthIList* al = song->syntis(); + for (iSynthI i = al->begin(); i != al->end(); ++i) + { + Track* track = *i; + if (t == track) + continue; + + int toch = ((AudioTrack*)track)->totalOutChannels(); + // If track channels = 1, it must be a mono synth. And synti channels cannot be changed by user. + if(track->channels() == 1) + toch = 1; + + // totalInChannels is only used by syntis. + int chans = (!isOutput || track->type() != Track::AUDIO_SOFTSYNTH) ? toch : ((AudioTrack*)track)->totalInChannels(); + + //int schans = synti->channels(); + //if(schans < chans) + // chans = schans; +// int tchans = (channels != -1) ? channels: t->channels(); +// if(tchans == 2) +// { + // Ignore odd numbered left-over mono channel. + //chans = chans & ~1; + //if(chans != 0) +// chans -= 1; +// } + //int tchans = (channels != -1) ? channels: t->channels(); + + if(chans > 0) + { + PopupMenu* chpup = new PopupMenu(lb, true); + chpup->setTitle(track->name()); + if(chans > 1) + chpup->addAction(new MenuTitleItem("", chpup)); + + for(int ch = 0; ch < chans; ++ch) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d", chpup->tr("Channel").toLatin1().constData(), ch+1); + act = chpup->addAction(QString(buffer)); + act->setCheckable(true); + + int ach = ch; + int bch = -1; + + Route rt(track, isOutput ? bch : ach, 1); + + rt.remoteChannel = isOutput ? ach : bch; + + act->setData(qVariantFromValue(rt)); + + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) + { + int tcompch = rt.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = rt.channels; + if(tcompchs == -1) + tcompchs = isOutput ? t->channels() : track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? t->channels() : ir->track->channels(); + + if(compch == tcompch && compchs == tcompchs) + { + act->setChecked(true); + break; + } + } + } + ++id; + } + + chans -= 1; + if(chans > 0) + { + // Ignore odd numbered left-over channels. + //int schans = (chans & ~1) - 1; + + chpup->addSeparator(); + chpup->addAction(new MenuTitleItem("", chpup)); + + for(int ch = 0; ch < chans; ++ch) + { + char buffer[128]; + snprintf(buffer, 128, "%s %d,%d", chpup->tr("Channel").toLatin1().constData(), ch+1, ch+2); + act = chpup->addAction(QString(buffer)); + act->setCheckable(true); + + int ach = ch; + int bch = -1; + + Route rt(track, isOutput ? bch : ach, 2); + + rt.remoteChannel = isOutput ? ach : bch; + + act->setData(qVariantFromValue(rt)); + + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE && ir->track == track && ir->remoteChannel == rt.remoteChannel) + { + int tcompch = rt.channel; + if(tcompch == -1) + tcompch = 0; + int tcompchs = rt.channels; + if(tcompchs == -1) + tcompchs = isOutput ? t->channels() : track->channels(); + + int compch = ir->channel; + if(compch == -1) + compch = 0; + int compchs = ir->channels; + if(compchs == -1) + compchs = isOutput ? t->channels() : ir->track->channels(); + + if(compch == tcompch && compchs == tcompchs) + { + act->setChecked(true); + break; + } + } + } + ++id; + } + } + + lb->addMenu(chpup); + } + } + return id; +} + +//--------------------------------------------------------- +// addMidiPorts +//--------------------------------------------------------- + +int RoutePopupMenu::addMidiPorts(AudioTrack* t, PopupMenu* pup, int id, bool isOutput) +{ + QAction* act; + for(int i = 0; i < MIDI_PORTS; ++i) + { + MidiPort* mp = &midiPorts[i]; + MidiDevice* md = mp->device(); + + // This is desirable, but could lead to 'hidden' routes unless we add more support + // such as removing the existing routes when user changes flags. + // So for now, just list all valid ports whether read or write. + if(!md) + continue; + //if(!(md->rwFlags() & (isOutput ? 1 : 2))) + // continue; + + // Do not list synth devices! + if(md->isSynti()) + continue; + + RouteList* rl = isOutput ? t->outRoutes() : t->inRoutes(); + + PopupMenu* subp = new PopupMenu(pup, true); + subp->setTitle(md->name()); + + int chanmask = 0; + // To reduce number of routes required, from one per channel to just one containing a channel mask. + // Look for the first route to this midi port. There should always be only a single route for each midi port, now. + for(ciRoute ir = rl->begin(); ir != rl->end(); ++ir) + { + if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) + { + // We have a route to the midi port. Grab the channel mask. + chanmask = ir->channel; + break; + } + } + + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + act = subp->addAction(QString("Channel %1").arg(ch+1)); + act->setCheckable(true); + + int chbit = 1 << ch; + Route srcRoute(i, chbit); // In accordance with channel mask, use the bit position. + + act->setData(qVariantFromValue(srcRoute)); + + if(chanmask & chbit) // Is the channel already set? Show item check mark. + act->setChecked(true); + + ++id; + } + + //gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. + act = subp->addAction(QString("Toggle all")); + //act->setCheckable(true); + Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. + act->setData(qVariantFromValue(togRoute)); + ++id; + + pup->addMenu(subp); + } + return id; +} + + +//====================== +// RoutePopupMenu +//====================== + +RoutePopupMenu::RoutePopupMenu(QWidget* parent, Track* track, bool isOutput) + : _track(track), _isOutMenu(isOutput) +{ + _pup = new PopupMenu(parent, true); + init(); +} + +RoutePopupMenu::RoutePopupMenu(const QString& title, QWidget* parent, Track* track, bool isOutput) + : _track(track), _isOutMenu(isOutput) +{ + _pup = new PopupMenu(title, parent, true); + init(); +} + +RoutePopupMenu::~RoutePopupMenu() +{ + //printf("RoutePopupMenu::~RoutePopupMenu\n"); + // Make sure to clear which clears and deletes any sub popups. + _pup->clear(); + delete _pup; +} + +void RoutePopupMenu::init() +{ + connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int))); +} + +void RoutePopupMenu::songChanged(int val) +{ + if(val & (SC_ROUTE | SC_CHANNELS | SC_CONFIG)) + updateRouteMenus(); +} + +void RoutePopupMenu::updateRouteMenus() +{ + // NOTE: The purpose of this routine is to make sure the items actually reflect + // the routing status. + // In case for some reason a route could not be added (or removed). + // Then the item will be properly un-checked (or checked) here. + + //printf("RoutePopupMenu::updateRouteMenus\n"); + + if(!_track || !_pup || _pup->actions().isEmpty() || !_pup->isVisible()) + return; + + RouteList* rl = _isOutMenu ? _track->outRoutes() : _track->inRoutes(); + + // Clear all the action check marks. + _pup->clearAllChecks(); + + // Take care of Midi Port to Audio Input routes first... + if(_isOutMenu && _track->isMidiTrack()) + { + int port = ((MidiTrack*)_track)->outPort(); + if(port >= 0 && port < MIDI_PORTS) + { + MidiPort* mp = &midiPorts[port]; + RouteList* mprl = mp->outRoutes(); + for (ciRoute ir = mprl->begin(); ir != mprl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE && ir->track && ir->track->type() == Track::AUDIO_INPUT) + { + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + int chbits = 1 << ch; + if(ir->channel & chbits) + { + Route r(ir->track, chbits); + //printf("RoutePopupMenu::updateRouteMenus MidiPort to AudioInput chbits:%d\n", chbits); + QAction* act = _pup->findActionFromData(qVariantFromValue(r)); + if(act) + act->setChecked(true); + } + } + } + } + } + } + + // Now check the ones that are found in the route list. + for(ciRoute irl = rl->begin(); irl != rl->end(); ++irl) + { + // Do MidiTrack to MidiPort routes... + if(irl->type == Route::MIDI_PORT_ROUTE) + { + //printf("RoutePopupMenu::updateRouteMenus MIDI_PORT_ROUTE\n"); + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + int chbits = 1 << ch; + if(irl->channel & chbits) + { + Route r(irl->midiPort, chbits); + QAction* act = _pup->findActionFromData(qVariantFromValue(r)); + if(act) + act->setChecked(true); + } + } + } + else + // Do all other routes... + { + //printf("RoutePopupMenu::updateRouteMenus other irl type:%d\n", irl->type); + QAction* act = _pup->findActionFromData(qVariantFromValue(*irl)); + if(act) + act->setChecked(true); + } + } +} + +void RoutePopupMenu::popupActivated(QAction* action) +{ + if(!action || !_track || !_pup || _pup->actions().isEmpty()) + return; + + if(_track->isMidiTrack()) + { + RouteList* rl = _isOutMenu ? _track->outRoutes() : _track->inRoutes(); + + // Take care of Route data items first... + if(qVariantCanConvert(action->data())) + { + Route aRoute = action->data().value(); + + // Support Midi Port to Audio Input track routes. + if(aRoute.type == Route::TRACK_ROUTE && aRoute.track && aRoute.track->type() == Track::AUDIO_INPUT) + { + //if(gIsOutRoutingPopupMenu) // Try to avoid splitting like this. + { + int chbit = aRoute.channel; + int port = ((MidiTrack*)_track)->outPort(); + if(port < 0 || port >= MIDI_PORTS) + return; + + MidiPort* mp = &midiPorts[port]; + //MidiDevice* md = mp->device(); + + // This is desirable, but could lead to 'hidden' routes unless we add more support + // such as removing the existing routes when user changes flags. + // So for now, just list all valid ports whether read or write. + //if(!md) + // return; + //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) + // return; + + Route bRoute(port, chbit); + + int chmask = 0; + RouteList* mprl = _isOutMenu ? mp->outRoutes() : mp->inRoutes(); + ciRoute ir = mprl->begin(); + for (; ir != mprl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE && ir->track == aRoute.track) // Is there already a route to this port? + { + chmask = ir->channel; // Grab the channel mask. + break; + } + } + if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? + { + // disconnect + if(_isOutMenu) + audio->msgRemoveRoute(bRoute, aRoute); + else + audio->msgRemoveRoute(aRoute, bRoute); + } + else + { + // connect + if(_isOutMenu) + audio->msgAddRoute(bRoute, aRoute); + else + audio->msgAddRoute(aRoute, bRoute); + } + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + + } + return; + } + else if(aRoute.type == Route::MIDI_PORT_ROUTE) + { + int chbit = aRoute.channel; + Route bRoute(_track, chbit); + int mdidx = aRoute.midiPort; + + MidiPort* mp = &midiPorts[mdidx]; + MidiDevice* md = mp->device(); + //if(!md) // Rem. Allow connections to ports with no device. + // return; + + //if(!(md->rwFlags() & 2)) + //if(!(md->rwFlags() & (gIsOutRoutingPopupMenu ? 1 : 2))) + if(md && !(md->rwFlags() & (_isOutMenu ? 1 : 2))) + return; + + int chmask = 0; + ciRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + { + if(iir->type == Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port? + { + chmask = iir->channel; // Grab the channel mask. + break; + } + } + if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? + { + // disconnect + if(_isOutMenu) + audio->msgRemoveRoute(bRoute, aRoute); + else + audio->msgRemoveRoute(aRoute, bRoute); + } + else + { + // connect + if(_isOutMenu) + audio->msgAddRoute(bRoute, aRoute); + else + audio->msgAddRoute(aRoute, bRoute); + } + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } + } + else + // ... now take care of integer data items. + if(qVariantCanConvert(action->data())) + { + int n = action->data().value(); + if(!_isOutMenu && n == 0) + muse->configMidiPorts(); + return; + } + } + else + { + AudioTrack* t = (AudioTrack*)_track; + RouteList* rl = _isOutMenu ? t->outRoutes() : t->inRoutes(); + + if(!qVariantCanConvert(action->data())) + return; + + if(_isOutMenu) + { + Route dstRoute = action->data().value(); + Route srcRoute(t, dstRoute.channel, dstRoute.channels); + srcRoute.remoteChannel = dstRoute.remoteChannel; + + // check if route src->dst exists: + ciRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == dstRoute) + break; + } + if (irl != rl->end()) { + // disconnect if route exists + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect if route does not exist + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } + else + { + Route srcRoute = action->data().value(); + + // Support Midi Port to Audio Input routes. + if(_track->type() == Track::AUDIO_INPUT && srcRoute.type == Route::MIDI_PORT_ROUTE) + { + int chbit = srcRoute.channel; + Route dstRoute(t, chbit); + int mdidx = srcRoute.midiPort; + int chmask = 0; + ciRoute iir = rl->begin(); + for (; iir != rl->end(); ++iir) + { + if(iir->type == Route::MIDI_PORT_ROUTE && iir->midiPort == mdidx) // Is there already a route to this port? + { + chmask = iir->channel; // Grab the channel mask. + break; + } + } + + if ((chmask & chbit) == chbit) // Is the channel's bit(s) set? + { + //printf("routingPopupMenuActivated: removing src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else + { + //printf("routingPopupMenuActivated: adding src route ch:%d dst route ch:%d\n", srcRoute.channel, dstRoute.channel); + audio->msgAddRoute(srcRoute, dstRoute); + } + + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + return; + } + + Route dstRoute(t, srcRoute.channel, srcRoute.channels); + dstRoute.remoteChannel = srcRoute.remoteChannel; + + ciRoute irl = rl->begin(); + for (; irl != rl->end(); ++irl) { + if (*irl == srcRoute) + break; + } + if (irl != rl->end()) { + // disconnect + audio->msgRemoveRoute(srcRoute, dstRoute); + } + else { + // connect + audio->msgAddRoute(srcRoute, dstRoute); + } + audio->msgUpdateSoloStates(); + song->update(SC_ROUTE); + } + + + } + //else + //{ + //} +} + +void RoutePopupMenu::prepare() +{ + _pup->disconnect(); + _pup->clear(); + + if(!_track) + return; + + connect(_pup, SIGNAL(triggered(QAction*)), SLOT(popupActivated(QAction*))); + + if(_track->isMidiTrack()) + { + RouteList* rl = _isOutMenu ? _track->outRoutes() : _track->inRoutes(); + + int gid = 0; + QAction* act = 0; + + if(_isOutMenu) + { + // Support Midi Port to Audio Input track routes. + int port = ((MidiTrack*)_track)->outPort(); + if(port >= 0 && port < MIDI_PORTS) + { + MidiPort* mp = &midiPorts[port]; + + // Do not list synth devices! Requiring valid device is desirable, + // but could lead to 'hidden' routes unless we add more support + // such as removing the existing routes when user changes flags. + // So for now, just list all valid ports whether read or write. + if(mp->device() && !mp->device()->isSynti()) + { + RouteList* mprl = mp->outRoutes(); + int chbits = 1 << ((MidiTrack*)_track)->outChannel(); + //MidiDevice* md = mp->device(); + //if(!md) + // continue; + + _pup->addSeparator(); + _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup)); + PopupMenu* subp = new PopupMenu(_pup, true); + subp->setTitle(tr("Audio returns")); + _pup->addMenu(subp); + + InputList* al = song->inputs(); + for (ciAudioInput i = al->begin(); i != al->end(); ++i) + { + Track* t = *i; + QString s(t->name()); + act = subp->addAction(s); + act->setCheckable(true); + Route r(t, chbits); + act->setData(qVariantFromValue(r)); + for(ciRoute ir = mprl->begin(); ir != mprl->end(); ++ir) + { + if(ir->type == Route::TRACK_ROUTE && ir->track == t && (ir->channel & chbits)) + { + act->setChecked(true); + break; + } + } + ++gid; + } + } + } + } + else + { + // Warn if no devices available. Add an item to open midi config. + int pi = 0; + for( ; pi < MIDI_PORTS; ++pi) + { + MidiDevice* md = midiPorts[pi].device(); + if(md && !md->isSynti() && (md->rwFlags() & 2)) + break; + } + if(pi == MIDI_PORTS) + { + act = _pup->addAction(tr("Warning: No midi input devices!")); + act->setCheckable(false); + act->setData(-1); + _pup->addSeparator(); + } + act = _pup->addAction(QIcon(*settings_midiport_softsynthsIcon), tr("Open midi config...")); + act->setCheckable(false); + act->setData(gid); + _pup->addSeparator(); + ++gid; + + _pup->addAction(new MenuTitleItem("Midi input ports", _pup)); + + for(int i = 0; i < MIDI_PORTS; ++i) + { + // NOTE: Could possibly list all devices, bypassing ports, but no, let's stick with ports. + MidiPort* mp = &midiPorts[i]; + MidiDevice* md = mp->device(); + //if(!md) + // continue; + + // Do not list synth devices! + if(md && md->isSynti()) + continue; + + if(md && !(md->rwFlags() & 2)) + continue; + + //printf("MusE::prepareRoutingPopupMenu adding submenu portnum:%d\n", i); + + int chanmask = 0; + // To reduce number of routes required, from one per channel to just one containing a channel mask. + // Look for the first route to this midi port. There should always be only a single route for each midi port, now. + ciRoute ir = rl->begin(); + for( ; ir != rl->end(); ++ir) + { + if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) + { + // We have a route to the midi port. Grab the channel mask. + chanmask = ir->channel; + break; + } + } + // List ports with no device, but with routes to this track, in the main popup. + if(!md && ir == rl->end()) + continue; + + PopupMenu* subp = new PopupMenu(_pup, true); + subp->setTitle(QString("%1:").arg(i+1) + (md ? md->name() : tr(""))); + + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + act = subp->addAction(QString("Channel %1").arg(ch+1)); + act->setCheckable(true); + int chbit = 1 << ch; + Route srcRoute(i, chbit); // In accordance with channel mask, use the bit position. + act->setData(qVariantFromValue(srcRoute)); + if(chanmask & chbit) // Is the channel already set? Show item check mark. + act->setChecked(true); + ++gid; + } + //gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. + act = subp->addAction(tr("Toggle all")); + //act->setCheckable(true); + Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. + act->setData(qVariantFromValue(togRoute)); + ++gid; + _pup->addMenu(subp); + } + + #if 0 + // p4.0.17 List ports with no device and no in routes, in a separate popup. + PopupMenu* morep = new PopupMenu(pup, true); + morep->setTitle(tr("More...")); + for(int i = 0; i < MIDI_PORTS; ++i) + { + MidiPort* mp = &midiPorts[i]; + if(mp->device()) + continue; + + PopupMenu* subp = new PopupMenu(morep, true); + subp->setTitle(QString("%1:").arg(i) + tr("")); + + // MusE-2: Check this - needed with QMenu? Help says no. No - verified, it actually causes double triggers! + //connect(subp, SIGNAL(triggered(QAction*)), pup, SIGNAL(triggered(QAction*))); + //connect(subp, SIGNAL(aboutToHide()), pup, SIGNAL(aboutToHide())); + + iRoute ir = rl->begin(); + for( ; ir != rl->end(); ++ir) + { + if(ir->type == Route::MIDI_PORT_ROUTE && ir->midiPort == i) + break; + } + if(ir != rl->end()) + continue; + + for(int ch = 0; ch < MIDI_CHANNELS; ++ch) + { + act = subp->addAction(QString("Channel %1").arg(ch+1)); + act->setCheckable(true); + act->setData(gid); + + int chbit = 1 << ch; + Route srcRoute(i, chbit); // In accordance with new channel mask, use the bit position. + + gRoutingMenuMap.insert( pRouteMenuMap(gid, srcRoute) ); + + //if(chanmask & chbit) // Is the channel already set? Show item check mark. + // act->setChecked(true); + + ++gid; + } + //gid = MIDI_PORTS * MIDI_CHANNELS + i; // Make sure each 'toggle' item gets a unique id. + act = subp->addAction(QString("Toggle all")); + //act->setCheckable(true); + act->setData(gid); + Route togRoute(i, (1 << MIDI_CHANNELS) - 1); // Set all channel bits. + gRoutingMenuMap.insert( pRouteMenuMap(gid, togRoute) ); + ++gid; + morep->addMenu(subp); + } + pup->addMenu(morep); + #endif + + } + return; + } + else + { + AudioTrack* t = (AudioTrack*)_track; + int channel = t->channels(); + if(_isOutMenu) + { + RouteList* orl = t->outRoutes(); + + QAction* act = 0; + int gid = 0; + gid = 0; + + switch(_track->type()) + { + case Track::AUDIO_OUTPUT: + { + 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); + _pup->addAction(titel); + + if(!checkAudioDevice()) + { + _pup->clear(); + return; + } + std::list ol = audioDevice->inputPorts(); + for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) + { + act = _pup->addAction(*ip); + act->setCheckable(true); + + Route dst(*ip, true, i, Route::JACK_ROUTE); + act->setData(qVariantFromValue(dst)); + ++gid; + for(ciRoute ir = orl->begin(); ir != orl->end(); ++ir) + { + if(*ir == dst) + { + act->setChecked(true); + break; + } + } + } + if(i+1 != channel) + _pup->addSeparator(); + } + + // + // Display using separate menu for audio inputs: + // + _pup->addSeparator(); + _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup)); + PopupMenu* subp = new PopupMenu(_pup, true); + subp->setTitle(tr("Audio returns")); + _pup->addMenu(subp); + gid = addInPorts(t, subp, gid, -1, -1, true); + // + // Display all in the same menu: + // + //_pup->addSeparator(); + //MenuTitleItem* title = new MenuTitleItem(tr("Audio returns"), _pup); + //_pup->addAction(title); + //gid = addInPorts(t, _pup, gid, -1, -1, true); + } + break; + case Track::AUDIO_SOFTSYNTH: + gid = addMultiChannelPorts(t, _pup, gid, true); + break; + + case Track::AUDIO_INPUT: + case Track::WAVE: + case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + gid = addWavePorts( t, _pup, gid, -1, -1, true); + gid = addOutPorts( t, _pup, gid, -1, -1, true); + gid = addGroupPorts( t, _pup, gid, -1, -1, true); + gid = nonSyntiTrackAddSyntis(t, _pup, gid, true); + break; + default: + _pup->clear(); + return; + } + } + else + { + if(_track->type() == Track::AUDIO_AUX) + return; + + RouteList* irl = t->inRoutes(); + + QAction* act = 0; + int gid = 0; + gid = 0; + + switch(_track->type()) + { + case Track::AUDIO_INPUT: + { + 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); + _pup->addAction(titel); + + if(!checkAudioDevice()) + { + _pup->clear(); + return; + } + std::list ol = audioDevice->outputPorts(); + for(std::list::iterator ip = ol.begin(); ip != ol.end(); ++ip) + { + act = _pup->addAction(*ip); + act->setCheckable(true); + + Route dst(*ip, true, i, Route::JACK_ROUTE); + act->setData(qVariantFromValue(dst)); + ++gid; + for(ciRoute ir = irl->begin(); ir != irl->end(); ++ir) + { + if(*ir == dst) + { + act->setChecked(true); + break; + } + } + } + if(i+1 != channel) + _pup->addSeparator(); + } + + // + // Display using separate menus for midi ports and audio outputs: + // + _pup->addSeparator(); + _pup->addAction(new MenuTitleItem(tr("Soloing chain"), _pup)); + PopupMenu* subp = new PopupMenu(_pup, true); + subp->setTitle(tr("Audio sends")); + _pup->addMenu(subp); + gid = addOutPorts(t, subp, gid, -1, -1, false); + subp = new PopupMenu(_pup, true); + subp->setTitle(tr("Midi port sends")); + _pup->addMenu(subp); + addMidiPorts(t, subp, gid, false); + // + // Display all in the same menu: + // + //_pup->addAction(new MenuTitleItem(tr("Audio sends"), _pup)); + //gid = addOutPorts(t, _pup, gid, -1, -1, false); + //_pup->addSeparator(); + //_pup->addAction(new MenuTitleItem(tr("Midi sends"), _pup)); + //addMidiPorts(t, _pup, gid, false); + } + break; + case Track::AUDIO_OUTPUT: + gid = addWavePorts( t, _pup, gid, -1, -1, false); + gid = addInPorts( t, _pup, gid, -1, -1, false); + gid = addGroupPorts(t, _pup, gid, -1, -1, false); + gid = addAuxPorts( t, _pup, gid, -1, -1, false); + gid = nonSyntiTrackAddSyntis(t, _pup, gid, false); + break; + case Track::WAVE: + gid = addWavePorts( t, _pup, gid, -1, -1, false); + gid = addInPorts( t, _pup, gid, -1, -1, false); + gid = addGroupPorts(t, _pup, gid, -1, -1, false); + gid = addAuxPorts( t, _pup, gid, -1, -1, false); + gid = nonSyntiTrackAddSyntis(t, _pup, gid, false); + break; + case Track::AUDIO_GROUP: + gid = addWavePorts( t, _pup, gid, -1, -1, false); + gid = addInPorts( t, _pup, gid, -1, -1, false); + gid = addGroupPorts(t, _pup, gid, -1, -1, false); + gid = addAuxPorts( t, _pup, gid, -1, -1, false); + gid = nonSyntiTrackAddSyntis(t, _pup, gid, false); + break; + + case Track::AUDIO_SOFTSYNTH: + gid = addMultiChannelPorts(t, _pup, gid, false); + break; + default: + _pup->clear(); + return; + } + } + } +} + +void RoutePopupMenu::exec(Track* track, bool isOutput) +{ + if(track) + { + _track = track; + _isOutMenu = isOutput; + } + prepare(); + _pup->exec(); +} + +void RoutePopupMenu::exec(const QPoint& p, Track* track, bool isOutput) +{ + if(track) + { + _track = track; + _isOutMenu = isOutput; + } + prepare(); + _pup->exec(p); +} + +void RoutePopupMenu::popup(const QPoint& p, Track* track, bool isOutput) +{ + if(track) + { + _track = track; + _isOutMenu = isOutput; + } + prepare(); + _pup->popup(p); +} + diff --git a/muse2/muse/widgets/routepopup.h b/muse2/muse/widgets/routepopup.h new file mode 100644 index 00000000..6772e8ca --- /dev/null +++ b/muse2/muse/widgets/routepopup.h @@ -0,0 +1,73 @@ +//========================================================= +// MusE +// Linux Music Editor +// +// RoutePopupMenu.h +// (C) Copyright 2011 Tim E. Real (terminator356 A T sourceforge D O T net) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License version 2. +// +// 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., 675 Mass Ave, Cambridge, MA 02139, USA. +//============================================================================= + +#ifndef __ROUTEPOPUPMENU_H__ +#define __ROUTEPOPUPMENU_H__ + +#include + +class Track; +class AudioTrack; +class PopupMenu; +class QWidget; +class QString; +class QAction; +class QPoint; + +class RoutePopupMenu : public QObject +{ + Q_OBJECT + + PopupMenu* _pup; + Track* _track; + // Whether the route popup was shown by clicking the output routes button, or input routes button. + bool _isOutMenu; + + void init(); + void prepare(); + + int addMenuItem(AudioTrack* track, Track* route_track, PopupMenu* lb, int id, int channel, + int channels, bool isOutput); + int addAuxPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput); + int addInPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput); + int addOutPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput); + int addGroupPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput); + int addWavePorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput); + int addSyntiPorts(AudioTrack* t, PopupMenu* lb, int id, int channel, int channels, bool isOutput); + int addMultiChannelPorts(AudioTrack* t, PopupMenu* pup, int id, bool isOutput); + int nonSyntiTrackAddSyntis(AudioTrack* t, PopupMenu* lb, int id, bool isOutput); + int addMidiPorts(AudioTrack* t, PopupMenu* pup, int id, bool isOutput); + + private slots: + void popupActivated(QAction*); + void songChanged(int); + + public: + RoutePopupMenu(QWidget* parent = 0, Track* track = 0, bool isOutput = false); + RoutePopupMenu(const QString& title, QWidget* parent = 0, Track* track = 0, bool isOutput = false); + ~RoutePopupMenu(); + + void updateRouteMenus(); + void exec(Track* track = 0, bool isOutput = false); + void exec(const QPoint& p, Track* track = 0, bool isOutput = false); + void popup(const QPoint& p, Track* track = 0, bool isOutput = false); +}; + +#endif diff --git a/muse2/synti/deicsonze/deicsonzeplugin.cpp b/muse2/synti/deicsonze/deicsonzeplugin.cpp index 36684f5f..54eee202 100644 --- a/muse2/synti/deicsonze/deicsonzeplugin.cpp +++ b/muse2/synti/deicsonze/deicsonzeplugin.cpp @@ -406,7 +406,7 @@ void DeicsOnzeGui::setChorusCheckBox(double v, int i) { else printf("setChorusCheckBox Error : cannot send controller upper than 225\n"); } -void DeicsOnzeGui::setReverbFloatEntry(double v, int i) { +void DeicsOnzeGui::setReverbFloatEntry(double /*v*/, int /*i*/) { if(_deicsOnze->_pluginIReverb) { // FIXME FIXME Tim @@ -420,7 +420,7 @@ void DeicsOnzeGui::setReverbFloatEntry(double v, int i) { } else printf("Warning : no DeicsOnze reverb loaded\n"); } -void DeicsOnzeGui::setReverbSlider(double v, int i) { +void DeicsOnzeGui::setReverbSlider(double /*v*/, int /*i*/) { if(_deicsOnze->_pluginIReverb) { // FIXME FIXME Tim @@ -434,7 +434,7 @@ void DeicsOnzeGui::setReverbSlider(double v, int i) { } else printf("Warning : no DeicsOnze reverb loaded\n"); } -void DeicsOnzeGui::setChorusFloatEntry(double v, int i) { +void DeicsOnzeGui::setChorusFloatEntry(double /*v*/, int /*i*/) { if(_deicsOnze->_pluginIReverb) { // FIXME FIXME Tim @@ -448,7 +448,7 @@ void DeicsOnzeGui::setChorusFloatEntry(double v, int i) { } else printf("Warning : no DeicsOnze chorus loaded\n"); } -void DeicsOnzeGui::setChorusSlider(double v, int i) { +void DeicsOnzeGui::setChorusSlider(double /*v*/, int /*i*/) { if(_deicsOnze->_pluginIReverb) { // FIXME FIXME Tim -- cgit v1.2.3 From 4b344cf08471bcfbce5814ddead384dddb9bb86b Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Fri, 27 May 2011 13:20:58 +0000 Subject: fixed bug: score editor didn't react on part changes which invalidate the Part*; it simply worked with the old, invalid pointers, which may lead to severe problems, and indeed leads to a bug when saving. --- muse2/muse/helper.cpp | 25 +++++++++++ muse2/muse/helper.h | 5 +++ muse2/muse/midiedit/scoreedit.cpp | 89 +++++++++++++++++++++++++++------------ muse2/muse/midiedit/scoreedit.h | 13 +++++- 4 files changed, 103 insertions(+), 29 deletions(-) diff --git a/muse2/muse/helper.cpp b/muse2/muse/helper.cpp index 605d6f5c..d4a237ea 100644 --- a/muse2/muse/helper.cpp +++ b/muse2/muse/helper.cpp @@ -6,6 +6,9 @@ //========================================================= #include "helper.h" +#include "part.h" +#include "track.h" +#include "song.h" extern bool hIsB; static const char* vall[] = { @@ -38,3 +41,25 @@ QString pitch2string(int v) } + + +int partToIndex(Part* p) +{ + return p->track()->parts()->index(p); +} + +Part* partFromIndex(int index) +{ + TrackList* tl = song->tracks(); + for (iTrack it = tl->begin(); it != tl->end(); ++it) + { + PartList* pl = (*it)->parts(); + iPart ip; + for (ip = pl->begin(); ip != pl->end(); ++ip) + if (ip->second->sn() == index) + return ip->second; + } + + printf("ERROR: partFromIndex(%i) wasn't able to find an appropriate part!\n",index); + return NULL; +} diff --git a/muse2/muse/helper.h b/muse2/muse/helper.h index f772ebf6..d88dcb94 100644 --- a/muse2/muse/helper.h +++ b/muse2/muse/helper.h @@ -10,7 +10,12 @@ #include +class Part; + extern QString pitch2string(int v); +int partToIndex(Part* p); +Part* partFromIndex(int index); + #endif diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index f8d2a3ba..8c6e85c7 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -51,7 +51,7 @@ using namespace std; #include "icons.h" #include "audio.h" #include "functions.h" - +#include "helper.h" #include "cmd.h" #include "sig.h" #include "song.h" @@ -649,9 +649,11 @@ Part* read_part(Xml& xml, QString tag_name="part") else { sscanf(tag.toLatin1().constData(), "%d:%d", &trackIdx, &partIdx); + if (debugMsg) cout << "read_part: trackIdx="<second); } staff.cleanup_parts(); + staff.update_part_indices(); switch (clef) { @@ -1023,6 +1029,7 @@ void ScoreCanvas::add_staves(PartList* pl, bool all_in_one) if (part_it->second->track() == *track_it) staff.parts.insert(part_it->second); staff.cleanup_parts(); + staff.update_part_indices(); switch (((MidiTrack*)(*track_it))->getClef()) { @@ -1256,6 +1263,8 @@ void ScoreCanvas::merge_staves(list::iterator dest, list::iter dest->parts.insert(src->parts.begin(), src->parts.end()); } + dest->update_part_indices(); + remove_staff(src); fully_recalculate(); @@ -1324,6 +1333,26 @@ void ScoreCanvas::fully_recalculate() void ScoreCanvas::song_changed(int flags) { + if (flags & (SC_PART_MODIFIED | SC_PART_REMOVED | SC_PART_INSERTED | SC_TRACK_REMOVED)) + { + update_parts(); + + if (flags & (SC_PART_REMOVED | SC_TRACK_REMOVED)) + { + for (list::iterator it=staves.begin(); it!=staves.end(); it++) + it->cleanup_parts(); + + cleanup_staves(); + + for (list::iterator it=staves.begin(); it!=staves.end(); it++) + it->recalculate(); + + recalc_staff_pos(); + + redraw(); + } + } + if (flags & (SC_PART_MODIFIED | SC_EVENT_INSERTED | SC_EVENT_MODIFIED | SC_EVENT_REMOVED | SC_SIG | SC_KEY) ) @@ -1339,26 +1368,6 @@ void ScoreCanvas::song_changed(int flags) emit canvas_width_changed(canvas_width()); } - if (flags & SC_PART_REMOVED) - { - bool something_changed=false; - - for (list::iterator it=staves.begin(); it!=staves.end(); it++) - { - if (it->cleanup_parts()) - something_changed=true; - } - - cleanup_staves(); - - for (list::iterator it=staves.begin(); it!=staves.end(); it++) - it->recalculate(); - - recalc_staff_pos(); - - redraw(); - } - if (flags & SC_SELECTION) { redraw(); @@ -3490,7 +3499,7 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) int this_begin=tick; int this_end=this_begin+calc_len(set_it->len, set_it->dots); - selected_part=set_it->source_part; + set_selected_part(set_it->source_part); //that's the only note corresponding to the event? if (this_begin==total_begin && this_end==total_end) @@ -4263,6 +4272,7 @@ bool staff_t::cleanup_parts() it++; } + if (did_something) update_part_indices(); return did_something; } @@ -4314,6 +4324,32 @@ void ScoreCanvas::midi_note(int pitch, int velo) } + +void ScoreCanvas::update_parts() +{ + if (selected_part!=NULL) //if it's null, let it be null + selected_part=partFromIndex(selected_part_index); + + for (list::iterator it=staves.begin(); it!=staves.end(); it++) + it->update_parts(); +} + +void staff_t::update_parts() +{ + parts.clear(); + + for (set::iterator it=part_indices.begin(); it!=part_indices.end(); it++) + parts.insert(partFromIndex(*it)); +} + +void staff_t::update_part_indices() +{ + part_indices.clear(); + + for (set::iterator it=parts.begin(); it!=parts.end(); it++) + part_indices.insert(partToIndex(*it)); +} + //the following assertions are made: // pix_quarter.width() == pix_half.width() @@ -4339,7 +4375,8 @@ void ScoreCanvas::midi_note(int pitch, int velo) * between, for example, when a cis is tied to a des * * CURRENT TODO - * x nothing atm + * o controller view in score editor + * o deal with expanding parts * * IMPORTANT TODO * o do partial recalculating; recalculating can take pretty long @@ -4349,14 +4386,11 @@ void ScoreCanvas::midi_note(int pitch, int velo) * o thin out: remove unneeded ctrl messages * * less important stuff - * o drum list: scroll while dragging - * o controller view in score editor * o quantize-templates (everything is forced into a specified * rhythm) * o part-templates (you specify some notes and a control-chord; * the notes are set according to the chord then) * o add functions like set velo, mod/set velo-off - * o deal with expanding parts * o use bars instead of flags over groups of 8ths / 16ths etc * o support different keys in different tracks at the same time * calc_pos_add_list and calc_item_pos will be affected by this @@ -4373,6 +4407,7 @@ void ScoreCanvas::midi_note(int pitch, int velo) * o refuse to resize so that width gets smaller or equal than x_left * o draw a margin around notes which are in a bright color * o support drum tracks (x-note-heads etc.) + * o drum list: scroll while dragging: probably unneccessary with the "reorder list" function * * * stuff for the other muse developers diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index 71b672a9..0e61f066 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -35,6 +35,7 @@ #include "mtscale_flo.h" #include "steprec.h" #include "cleftypes.h" +#include "helper.h" #include #include @@ -489,6 +490,7 @@ enum staff_mode_t struct staff_t { set parts; + set part_indices; ScoreEventList eventlist; ScoreItemList itemlist; @@ -532,6 +534,7 @@ struct staff_t clef=clef_; parts=parts_; parent=parent_; + update_part_indices(); } bool cleanup_parts(); @@ -540,6 +543,9 @@ struct staff_t void read_status(Xml& xml); void write_status(int level, Xml& xml) const; + + void update_parts(); //re-populates the set from the set + void update_part_indices(); //re-populates the set from the set }; list calc_accidentials(key_enum key, clef_t clef, key_enum next_key=KEY_C); @@ -643,6 +649,8 @@ class ScoreCanvas : public View float y_scroll_pos; Part* selected_part; + int selected_part_index; + int last_len; int new_len; //when zero or negative, last_len is used @@ -728,7 +736,8 @@ class ScoreCanvas : public View void set_steprec(bool); void set_midiin(bool); - + + void update_parts(); //re-populates the sets from the sets signals: void xscroll_changed(int); void yscroll_changed(int); @@ -772,7 +781,7 @@ class ScoreCanvas : public View void set_last_len(int l) {last_len=l;} Part* get_selected_part() {return selected_part;} - void set_selected_part(Part* p) {selected_part=p;} + void set_selected_part(Part* p) {selected_part=p; if (selected_part) selected_part_index=partToIndex(selected_part);} set get_all_parts(); -- cgit v1.2.3 From e46d7bf9d40b883ef7194a893ad03de8d5fd32ef Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Fri, 27 May 2011 13:40:27 +0000 Subject: applied some hunks of the patch sent in by WillyFoobar --- muse2/ChangeLog | 3 +++ muse2/awl/sigedit.cpp | 2 +- muse2/muse/arranger/pcanvas.cpp | 20 ++++++++++---------- muse2/muse/master/tscale.h | 3 ++- muse2/muse/steprec.h | 3 +-- muse2/muse/waveevent.cpp | 2 +- muse2/muse/widgets/function_dialogs/gatetime.h | 2 -- muse2/muse/widgets/menutitleitem.h | 3 +++ 8 files changed, 21 insertions(+), 17 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 613cecc1..57147fc6 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,6 @@ +27.05.2011: + - fixed bug in scoreeditor: invalid Part*s are now not used any more (flo93) + - applied some hunks of the patch sent in by WillyFoobar (flo93) 25.05.2011: - Added midiin and steprec buttons again (flo93) - Added step-rec-support for drum edit and score edit (flo93) diff --git a/muse2/awl/sigedit.cpp b/muse2/awl/sigedit.cpp index 984a209b..0ff40de9 100644 --- a/muse2/awl/sigedit.cpp +++ b/muse2/awl/sigedit.cpp @@ -159,7 +159,7 @@ QAbstractSpinBox::StepEnabled SigEdit::stepEnabled() const // fixup //--------------------------------------------------------- -void SigEdit::fixup(QString& input) const +void SigEdit::fixup(QString& /*input*/) const { // printf("fixup <%s>\n", input.toLatin1().constData()); } diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index 54785200..8c7c89ad 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -1834,16 +1834,16 @@ void PartCanvas::drawMidiPart(QPainter& p, const QRect&, EventList* events, Midi if (heavyDebugMsg) { - if (!isdrum) - printf("DEBUG: arranger: cakewalk enabled, y-stretching from %i to %i. eventlist=%i\n",lowest_pitch, highest_pitch, events); - else - { - printf("DEBUG: arranger: cakewalk enabled, y-stretching drums: ");; - for (map::iterator it=y_mapper.begin(); it!=y_mapper.end(); it++) - printf("%i ", it->first); - printf("; eventlist=%i\n",events); - } - } + if (!isdrum) + printf("DEBUG: arranger: cakewalk enabled, y-stretching from %i to %i. eventlist=%p\n",lowest_pitch, highest_pitch, events); + else + { + printf("DEBUG: arranger: cakewalk enabled, y-stretching drums: ");; + for (map::iterator it=y_mapper.begin(); it!=y_mapper.end(); it++) + printf("%i ", it->first); + printf("; eventlist=%p\n",events); + } + } } else { diff --git a/muse2/muse/master/tscale.h b/muse2/muse/master/tscale.h index 35fa39f2..d7ce86c9 100644 --- a/muse2/muse/master/tscale.h +++ b/muse2/muse/master/tscale.h @@ -15,8 +15,9 @@ //--------------------------------------------------------- class TScale : public View { - double curTempo; Q_OBJECT + + double curTempo; virtual void viewMouseMoveEvent(QMouseEvent* event); virtual void leaveEvent(QEvent*e); diff --git a/muse2/muse/steprec.h b/muse2/muse/steprec.h index b09a9edd..02eab46c 100644 --- a/muse2/muse/steprec.h +++ b/muse2/muse/steprec.h @@ -28,9 +28,8 @@ class StepRec : public QObject private: QTimer* chord_timer; - int chord_timer_set_to_tick; + unsigned int chord_timer_set_to_tick; bool* note_held_down; - }; #endif diff --git a/muse2/muse/waveevent.cpp b/muse2/muse/waveevent.cpp index 867ce5c8..9f81b7e3 100644 --- a/muse2/muse/waveevent.cpp +++ b/muse2/muse/waveevent.cpp @@ -151,7 +151,7 @@ void WaveEventBase::write(int level, Xml& xml, const Pos& offset, bool forcePath //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) +void WaveEventBase::readAudio(WavePart* /*part*/, unsigned offset, float** buffer, int channel, int n, bool /*doSeek*/, bool overwrite) { // Added by Tim. p3.3.17 #ifdef WAVEEVENT_DEBUG_PRC diff --git a/muse2/muse/widgets/function_dialogs/gatetime.h b/muse2/muse/widgets/function_dialogs/gatetime.h index d2555872..f8f35ffd 100644 --- a/muse2/muse/widgets/function_dialogs/gatetime.h +++ b/muse2/muse/widgets/function_dialogs/gatetime.h @@ -11,7 +11,6 @@ #include "ui_gatetimebase.h" class QButtonGroup; -class QDialog; class Xml; //--------------------------------------------------------- @@ -21,7 +20,6 @@ class Xml; class GateTime : public QDialog, public Ui::GateTimeBase { private: Q_OBJECT - QButtonGroup *rangeGroup; protected slots: diff --git a/muse2/muse/widgets/menutitleitem.h b/muse2/muse/widgets/menutitleitem.h index 016d4663..0c345ffe 100644 --- a/muse2/muse/widgets/menutitleitem.h +++ b/muse2/muse/widgets/menutitleitem.h @@ -15,6 +15,9 @@ //--------------------------------------------------------- class MenuTitleItem : public QWidgetAction { + private: + Q_OBJECT + QString s; public: -- cgit v1.2.3 From c31d6446978cba5e7db0e5c58d16e07192e4951a Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Fri, 27 May 2011 15:57:48 +0000 Subject: updated translation files with lupdate, removed preprocessor-abuse in cliplist.cpp, added translation paths to muse.pro should have changed nothing. --- muse2/muse.pro | 7 + muse2/muse/cliplist/cliplist.cpp | 4 +- muse2/muse/midiedit/scoreedit.cpp | 4 + muse2/share/locale/muse_de.ts | 4484 +++++++++++++++++++++++++----------- muse2/share/locale/muse_es.ts | 4591 ++++++++++++++++++++++++++----------- muse2/share/locale/muse_fr.ts | 4365 +++++++++++++++++++++++++---------- muse2/share/locale/muse_pl.ts | 4426 ++++++++++++++++++++++++----------- muse2/share/locale/muse_ru.ts | 4400 +++++++++++++++++++++++++---------- muse2/share/locale/muse_sv_SE.ts | 4511 +++++++++++++++++++++++++----------- 9 files changed, 19109 insertions(+), 7683 deletions(-) diff --git a/muse2/muse.pro b/muse2/muse.pro index 364ab42b..4f19f2b4 100644 --- a/muse2/muse.pro +++ b/muse2/muse.pro @@ -686,3 +686,10 @@ QT += xml qt3support #The following line was inserted by qt3to4 CONFIG += uic3 +TRANSLATIONS = \ +share/locale/muse_de.ts \ +share/locale/muse_es.ts \ +share/locale/muse_fr.ts \ +share/locale/muse_pl.ts \ +share/locale/muse_ru.ts \ +share/locale/muse_sv_SE.ts diff --git a/muse2/muse/cliplist/cliplist.cpp b/muse2/muse/cliplist/cliplist.cpp index 967c608d..96636463 100644 --- a/muse2/muse/cliplist/cliplist.cpp +++ b/muse2/muse/cliplist/cliplist.cpp @@ -235,7 +235,7 @@ void ClipListEdit::clipSelectionChanged() editor->start->setEnabled(false); editor->len->setEnabled(false); return; -#if 0 +/* } editor->start->setEnabled(true); editor->len->setEnabled(true); @@ -246,7 +246,7 @@ void ClipListEdit::clipSelectionChanged() len.setFrame(curClip.lenFrame()); editor->start->setValue(pos); editor->len->setValue(len); -#endif +*/ } //--------------------------------------------------------- diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 8c6e85c7..b000dc5f 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4377,6 +4377,10 @@ void staff_t::update_part_indices() * CURRENT TODO * o controller view in score editor * o deal with expanding parts + * o in main win: make "Ch" column editable with a line edit + * o paste to different tick + * o fix sigedit boxes + * o mid-click in pianoroll: change to "delete", or initiate drag and drop between windows? * * IMPORTANT TODO * o do partial recalculating; recalculating can take pretty long diff --git a/muse2/share/locale/muse_de.ts b/muse2/share/locale/muse_de.ts index b53d0f5e..768bf89a 100644 --- a/muse2/share/locale/muse_de.ts +++ b/muse2/share/locale/muse_de.ts @@ -1,9 +1,10 @@ - + @default + Click this button to enable recording Auf diese Schaltfläche klicken um in den Modus "Aufnahme" zu gelangen @@ -11,11 +12,12 @@ sets amount of quantization: 0 - no quantization 100 - full quantization - Quantisierungsstärke einstellen: + Quantisierungsstärke einstellen: 0 - keine Quantisierung 100 - volle Quantisierung + select Pointer Tool: with the pointer tool you can: select parts @@ -28,88 +30,107 @@ Dieses Werkzeug ermöglicht: 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 + Keine Note länger als die Taktschlagdauer quantisieren quantize also note len as default - Auch die Notenlänge als Standard quantisieren + 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 @@ -120,77 +141,120 @@ Dieses Werkzeug ermöglicht: 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 @@ -203,130 +267,189 @@ click on part to mute/unmute Alle Dateien (*) + Add Midi Track Midispur erzeugen + Add Drum Track Schlagzeugspur erzeugen + Add Wave Track Wavespur erzeugen + Add Audio Output Audioausgang erzeugen + Add Audio Group Audiogruppe erzeugen + Add Audio Input Audioeingang erzeugen + Add Aux Send Aux Send erzeugen + eraser Radierer + MESS - + MESS + DSSI - + DSSI + FST - + FST + + Add Synth - + Synthesizer hinzufügen + Bar - Takt + Takt + Jack - + Jack + ALSA: - + ALSA: + SYNTH: - + SYNTH: + JACK: - + JACK: + + + + + + Route - Signalfluss + Signalfluss + + + + channel="%1" - + Kanal="%1" + + + + + dest - + Ziel + + devtype="%1" - + Gerätetyp="%1" + + + + + type="%1" - + Typ="%1" + + + + + + + name="%1"/ - + Name="%1" + + source - + Quelle + Velocity - Velocity + Anschlag + <none> - + <kein> + + + channelMask="%1" - + KanalMaske="%1" + dssi_synth + ladspa_efx + channels="%1" - + Kanäle="%1" + remch="%1" + mport="%1"/ @@ -334,6 +457,7 @@ click on part to mute/unmute AboutBox + AboutBox Projektinformation @@ -342,10 +466,12 @@ click on part to mute/unmute Zurück zu MusE! + Version 2 pre-alpha + (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -354,10 +480,12 @@ Published under the GNU Public License + &Keep On Rocking! + Alt+K @@ -365,60 +493,78 @@ Published under the GNU Public License Appearance + MusE: load image MusE: Bild laden + 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. + Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. + 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> + + Global opacity (opposite of transparency). - Select style sheet + + Standard - Qt style sheets (*.qss) + + Custom + + + + + Select style sheet - Global opaqueness (inverse of transparency). + + Qt style sheets (*.qss) @@ -426,284 +572,398 @@ Word-breaking but only with spaces. AppearanceDialogBase MusE: Appearance Settings - MusE: Erscheinungsbild einstellen + MusE: Erscheinungsbild einstellen + Apply Anwenden + Ok Bestätigen + Cancel Abbrechen + Arranger Arrangierer + + MusE: Appearance settings + + + + Parts Parts + show names Namen anzeigen + show events Ereignisse anzeigen + show Cakewalk Style Cakewalk Stil + + y-stretch + + + + Events Ereignisse + note on Note An + poly pressure Poly Tastendruck + controller Kontroller + aftertouch Aftertouch + pitch bend Pitch bend + program change Programmwechsel + special Spezial + Background picture Hintergrundbild bg - bg + bg select... - auswählen ... + auswählen ... + show snap grid Magnetisches Gitter anzeigen + Colors Farben + Items Items + + Color name: + + + + + Global opacity + + + + Style/Fonts Stil und Schriftart + QT Theme Qt Thema + Windows Fenster + MusE MusE + Metal Metall + Norwegian Wood Norwegisches Holz + Platinum Platinum + CDE CDE + Motif Motif + Motif Plus Motif Plus + Fonts Schriftarten + Family Familie + Size Größe + Font 1 Schriftart 1 + Font 2 Schriftart 2 + Font 3 Schriftart 3 + Font 0 Schriftart 0 + + + + + + + Bold Fett + + + + + + + Italic Kursiv + + + + + + + + + ... ... + Font 4 Schriftart 4 + Font 5 Schriftart 5 + Palette Palette + + add + Zufgen + + + + remove + entfernen + + + add to palette Zur Palette hinzufügen + B B + S S + H H + V V + G G + R R + clear + Style Sheet: + Font 6 Schriftart 6 - - Global opaqueness - - Arranger + Cursor Position + Snap Magnet + Len Länge + NO Kein + TrackInfo Spurinfo + Track Spur + Type Typ + + midi song type Midi Lied Typ + Pitch Tonhöhenänderung + midi pitch Midi Tonhöhenänderung + global midi pitch shift Globale Midi Tonhöhenänderung + Tempo Tempo + + midi tempo Midi Tempo @@ -712,6 +972,7 @@ Word-breaking but only with spaces. Ausgangsanschluss + Arranger Arrangierer @@ -724,82 +985,112 @@ Word-breaking but only with spaces. Takt + GM GM + GS GS + XG XG + N N + R R + M M + S S + C C + Ch K + T T + Enable Recording Aufnahme einschalten + Mute/Off Indicator + Solo Indicator Anzeige "Solo" + Track Type Spurtyp + Track Name + Midi output channel number or audio channels + Midi output port or synth midi port + Time Lock Sperre "Zeit" + + 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. @@ -807,28 +1098,33 @@ 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. @@ -836,19 +1132,34 @@ Right-click to show GUI. + Time lock + + Notation clef. Select this tracks notation clef. + + + + + song length - bars + Port - <unknown> + + Automation + Automatisierung + + + + Clef @@ -859,46 +1170,57 @@ Right-click to show GUI. MusE: Mischpult + &Create &Erzeugen + &View &Zeigen + Routing Signalfluss + Show Midi Tracks + Show Drum Tracks + Show Wave Tracks + Show Inputs + Show Outputs + Show Groups + Show Auxs + Show Synthesizers @@ -906,46 +1228,57 @@ Right-click to show GUI. AudioStrip + panorama Panorama + aux send level Aux Send Pegel + off Aus + Pan Balance + 1/2 channel 1/2 Kanal + Pre Pre + pre fader - post fader Vor Regler - nach Regler + dB dB + record Aufnahme + mute still + record downmix Aufnahme Abmischung @@ -958,6 +1291,7 @@ Right-click to show GUI. Abhöre vor Regler + iR iR @@ -966,99 +1300,102 @@ Right-click to show GUI. Eingangs-Signalfluss + oR oR + output routing Ausgangs-Signalfluss + Off Aus + Read Lesen + Touch Antasten + Write Schreiben + automation type Automationstyp Channel - Kanal + Kanal + + solo mode + input routing - - Awl::MidiVolEntry - - off - - - - db - - - - - Awl::VolEntry - - off - - - BigTime + MusE: Bigtime MusE: Zeitanzeige groß + format display + bar + beat + + tick + minute Minute + second Sekunde + + frame Rahmen + subframe Subrahmen @@ -1066,6 +1403,7 @@ Right-click to show GUI. ClipListEdit + MusE: Clip List Editor @@ -1073,38 +1411,47 @@ Right-click to show GUI. ClipListEditorBase + MusE: ClipList MusE: Klipp Liste + Name Name + Refs Refs + Start Start + Len Länge + Data Daten + Clip Properties Klippeigenschaften + Pos: Pos: + Len: Länge: @@ -1112,14 +1459,17 @@ Right-click to show GUI. CommentBase + Form1 Form1 + Track Comment Spur Kommentar + Track 1 Spur 1 @@ -1131,42 +1481,52 @@ Right-click to show GUI. MusE: Konfiguration Midi Datei exportieren + &OK &Bestätigen + &Cancel &Abbrechen + 0 (single track) 0 (einzelne Spur) + 1 (multiple tracks) 1 (mehrere Spuren) + Format: Format: + 96 96 + 192 192 + 384 384 + Division: Unterteilung: + Copyright: Copyright: @@ -1175,46 +1535,57 @@ Right-click to show GUI. Aktiviere erweitertes SMF Format + MusE: Config Midi File Import/Export + Import: + Split tracks into &parts + Alt+P + Split tracks into parts, or one single part + Export: + Enable extended smf format (currently not implemented) + Use &2-byte time signatures instead of standard 4 + Alt+2 + Save space by replacing note-offs with &zero velocity note-ons + Alt+Z @@ -1222,10 +1593,12 @@ Right-click to show GUI. CtrlPanel + select controller Kontroller wählen + remove panel Kontrolleransicht schließen @@ -1238,1236 +1611,458 @@ Right-click to show GUI. Schließen + + Velocity Velocity + add new ... Neuen Kontroller hinzufügen ... + S S + X + manual adjust + double click on/off + off + + + + Instrument-defined + + + + + + Add ... + + + + + Others + + + + + Edit instrument ... + + + + + Common Controls + + DeicsOnzeGui + Save configuration + + + + + + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + Load category dialog + Load set dialog + Save set dialog + New category + + Delete category + Load category + Save category + Load set + Save set + Delete set + New subcategory + + Delete subcategory + Load subcategory + Save subcategory - New preset - - - - Delete preset - - - - Load preset - - - - Save preset - - - - No more category supported - - - - You can not add more categories - - - - Do you really want to delete %1 ? - - - - &Yes - &Ja - - - &No - &Nein - - - No category selected - - - - You must first select a category. - - - - Replace or add - - - - %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 ? - - - - &Replace - Erset&zen - - - &Add - &Hinzufügen - - - Download error - - - - There is no more free category slot. - - - - Save category dialog - - - - No more subcategory supported - - - - You can not add more subcategories - - - - No subcategory selected - - - - You must first select a subcategory. - - - - Load subcategory 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 ? - - - - There is no more free subcategory slot. - - - - Save subcategory dialog - - - - No more preset supported - - - - You can not add more presets - - - - No preset selected - - - - You must first select a preset. - - - - Load preset 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 ? - - - - There is no more free preset slot. - - - - Save preset dialog - - - - Browse set dialog - - - - Browse image dialog - - - - - DeicsOnzeGuiBase - - DeicsOnze - - - - &Preset - - - - Program numerous - - - - INITVOICE - - - - LBank - - - - Subcategory - - - - Bank numerous - - - - NONE - - - - HBank - - - - Category - - - - Prog - - - - Preset - Vorlage - - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - - - - &Global - - - - Pitch Envelope - - - - PL3 - - - - PL2 - - - - PL1 - - - - PR1 - - - - PR2 - - - - PR3 - - - - Pitch modulation depth - - - - LFO - - - - LFO Sync - - - - Pitch modulation sensitivity - - - - Pitch Modulation Sensitivity - - - - LFO Delay - - - - LFO delay - - - - LFO speed - - - - Amplitude modulation depth - - - - Amplitude modulation sensitivity - - - - Amplitude Modulation Sensitivity - - - - AMS - - - - LFO Waveform - - - - Pitch Modulation Depth - - - - PMD - - - - LFO Speed - - - - AMD - - - - Speed - - - - Delay - Delay - - - PMS - - - - 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> - - - - Op4 Feedback - - - - Feedback level of the operator 4 - - - - Transpose - Transponieren - - - Op &1 - - - - Scaling 1 - - - - LS1 - - - - RS1 - - - - Rate Scaling - - - - Attack Rate of the operator 1 - - - - Level Scaling - - - - Amplitude Envelope 1 - - - - RR1 - - - - D1R1 - - - - D1L1 - - - - D2R1 - - - - Release Rate - - - - 2° Decay Rate - - - - 1° Decay Level - - - - 1° Decay Rate - - - - Attack Rate - - - - AR1 - - - - Detune, OSCWave, EGShift 1 - - - - DET1 - - - - Detune - - - - EG Shift - - - - 96dB - - - - 48dB - - - - 24dB - - - - 12dB - - - - 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> - - - - Sensitivity 1 - - - - KVS1 - - - - Amplitude Modulation Enable - - - - AME1 - - - - Keyboard Velocity Sensitivity - - - - Key Velocity Sensitivity - - - - EBS1 - - - - EG Bias Sensitivity - - - - Eg Bias Sensitivity - - - - Frequency 1 - - - - Coarse 1 - - - - Coarse Ratio - - - - Fine 1 - - - - Fine Ratio - - - - Freq 1 - - - - Fixed Frequency - - - - Toggle Fix Frequency - - - - FIX - - - - OUT 1 - - - - Output Volume - - - - Volume - Volume - - - Op &2 - - - - Amplitude Envelope 2 - - - - D1R2 - - - - D1L2 - - - - D2R2 - - - - RR2 - - - - AR2 - - - - Frequency 2 - - - - Coarse 2 - - - - Fine 2 - - - - Freq 2 - - - - Scaling 2 - - - - LS2 - - - - RS2 - - - - OUT 2 - - - - Detune, OSCWave, EGShift 2 - - - - DET2 - - - - Sensitivity 2 - - - - EBS2 - - - - KVS2 - - - - AME2 - - - - Op &3 - - - - Amplitude Envelope 3 - - - - D1R3 - - - - D1L3 - - - - D2R3 - - - - RR3 - - - - AR3 - - - - Scaling 3 - - - - LS3 - - - - RS3 - - - - OUT 3 - - - - Frequency 3 - - - - Coarse 3 - - - - Fine 3 - - - - Freq 3 - - - - Detune, OSCWave, EGShift 3 - - - - DET3 - - - - Sensitivity 3 - - - - EBS3 - - - - KVS3 - - - - AME3 - - - - Op &4 - - - - amplitude Envelope 4 - - - - AR4 - - - - D1R4 - - - - D1L4 - - - - D2R4 - - - - RR4 - - - - Frequency 4 - - - - Coarse 4 - - - - Fine 4 - - - - Freq 4 - - - - Scaling 4 - - - - LS4 - - - - RS4 - - - - OUT 4 - - - - Detune, OSCWave, EGShift 4 - - - - DET4 - - - - Sensitivity 4 - - - - EBS4 - - - - KVS4 - - - - AME4 - - - - &Func - - - - Delay Pan Depth - - - - Delay Pan LFO Freq - - - - Delay Ch Send Level - - - - Channel Chorus - - - - Delay Feedback - - - - Delay On/Off, Return Level - - - - On - An - - - Delay Beat Ratio - - - - Delay BPM - - - - Foot Control - - - - Pitch Bend Range - - - - Pitch - - - - Amplitude - - - - Modulation Wheel - - - - Breath Control - - - - Pitch Bias - - - - Envelope Bias - - - - After Touch - Aftertouch - - - Phony Mode - - - - POLY - - - - MONO - - - - Potamento - - - - Portamento Mode - - - - FINGER - - - - FULL - - - - PT - - - - Portamento Time - - - - C&horus - - - - Chorus Parameters + + New preset - Channel send level + + + Delete preset - On/Off and Return level + + Load preset - Select LADSPA plugin + + Save preset - Change plugin + + No more category supported - &Reverb + + You can not add more categories - Reverb Parameters + + + + Do you really want to delete %1 ? - &Config - &Einstellen + + + + &Yes + &Ja - Font Size - + + + + &No + &Nein - Quality + + + No category selected - High + + + You must first select a category. - Middle + + + + Replace or add - Low + + %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 ? - Ultra low - + + + + &Replace + Erset&zen - Filter - Filter + + + + &Add + &Hinzufügen - Save Mode (into the song) + + + + Download error - Save only the used presets + + There is no more free category slot. - Save the entire set + + Save category dialog - Save the configuration + + No more subcategory supported - Configuration File + + You can not add more subcategories - Save... + + + No subcategory selected - Load... + + + You must first select a subcategory. - Save as default + + Load subcategory dialog - Colors - Farben - - - Text - Text - - - Background + + %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 ? - Edit Text + + There is no more free subcategory slot. - Edit Background + + Save subcategory dialog - Red + + No more preset supported - Blue + + You can not add more presets - Green + + + + No preset selected - Set Path + + + + You must first select a preset. - Image in the background : + + Load preset dialog - Browse... + + %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 ? - Load the set at the initialization : + + There is no more free preset slot. - Set Brightness, Detune, Attack and Release of the current channel to default + + Save preset dialog - Res. Ctrl + + Browse set dialog - Cut all notes off + + Browse image dialog + + + DeicsOnzeGuiBase - Panic! - + Preset + Vorlage - Number of Voices - + Delay + Delay - Number of voices - + Transpose + Transponieren - Enable - Einschalten + Volume + Volume - Channel - Kanal + On + An - Vol - + After Touch + Aftertouch - Channel Ctrl - + &Config + &Einstellen - Release - + Filter + Filter - Attack - + Colors + Farben - Brightness - + Text + Text - Modulation - + Enable + Einschalten - Pan - + Channel + Kanal DidYouKnow + Did you know? + Don't show on startup + Next tip + Close @@ -2475,130 +2070,162 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t 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 @@ -2607,118 +2234,199 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t 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 + + volume percent + + quantisation Quantisierung + + this input note triggers the sound Diese Eingangsnote löst den Klang aus + + note length Notenlänge + + this is the note which is played + output channel (hold ctl to affect all rows) + + output port Ausgangsanschluss + + 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) + Reset GM Map + Previous Part + Next Part + + Re-order list + + + + + Crescendo/Decrescendo + + + + + Quantize + Quantisieren + + + + Erase Event + Ereignis löschen + + + + Move Notes + + + + + Delete Overlaps + + + + &Plugins + Drum tools + + cursor tools + + + + + Set step size for cursor edit + + + + panic Panik + transport + Vol + Drum map + Reset the drum map with GM defaults? @@ -2726,14 +2434,17 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCAfterDialog + Time Position Position + Pressure Anschlagsdruck + MusE: Enter Channel Aftertouch MusE: Kanal Aftertouch festlegen @@ -2772,58 +2483,73 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t 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 @@ -2831,10 +2557,12 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditEventDialog + Ok Bestätigen + Cancel Abbrechen @@ -2842,46 +2570,57 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditGainBase + MusE: Modify gain + Gain + 200% 200% + 100% 100% + 0% 0% + &Reset + Alt+R + &Apply &Anwenden + Alt+A Alt+A + &Cancel + Alt+C Alt+C @@ -2889,131 +2628,178 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditInstrument + + MusE: Create file failed + MusE: Write File failed MusE: Datei schreiben schlug fehl + + + + MusE: + + The user instrument directory + + does not exist yet. Create it now? - (You can override with the environment variable MUSEINSTRUMENTS) + + + (You can change the user instruments directory at Settings->Global Settings->Midi) + + Unable to create user instrument directory + + MusE: Save Instrument Definition + + Instrument Definition (*.idf) + + MusE: Save instrument as + Enter a new unique instrument name: + The user instrument: + 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 + + already exists. + A controller number + + MusE MusE + + The current Instrument contains unsaved data Save Current Instrument? + + &Save + + &Nosave Lied &nicht Sichern + &Abort &Abbrechen @@ -3021,6 +2807,7 @@ Save Current Instrument? EditInstrumentBase + MusE: Instrument Editor MusE: Instrumenten Editor @@ -3033,14 +2820,17 @@ Save Current Instrument? Patch Name: + High Bank: High Bank: + Low Bank: Low Bank: + Program: Programm: @@ -3058,10 +2848,16 @@ Save Current Instrument? Patch/Gruppe + + + &Delete &Löschen + + + Alt+D Alt+D @@ -3078,18 +2874,22 @@ Save Current Instrument? Neue Gruppe + Drum Schlagzeug + GM GM + GS GS + XG XG @@ -3102,6 +2902,7 @@ Save Current Instrument? Vordefinierte Kontroller: + This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. @@ -3109,6 +2910,8 @@ handled like normal controllers. MusE behandelt allerdings Kontroller wie "pitch" und "program changes" wie normale Kontroller. + + Properties Eigenschaften @@ -3121,30 +2924,38 @@ MusE behandelt allerdings Kontroller wie "pitch" und "program cha Typ + Control7 Kontroller7 + Control14 Kontroller14 + RPN RPN + NRPN NRPN + Pitch Tonhöhe + Program Programm + + H-Ctrl H-Ctrl @@ -3153,6 +2964,8 @@ MusE behandelt allerdings Kontroller wie "pitch" und "program cha Midi Kontrollernummer High Byte + + L-Ctrl L-Ctrl @@ -3165,10 +2978,12 @@ MusE behandelt allerdings Kontroller wie "pitch" und "program cha Bereich + Min Min + Max Max @@ -3177,10 +2992,12 @@ MusE behandelt allerdings Kontroller wie "pitch" und "program cha Standard + Name Name + Type Typ @@ -3213,247 +3030,314 @@ MusE behandelt allerdings Kontroller wie "pitch" und "program cha 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: + Selected instrument name. + List of defined instruments. + Pa&tches + List of groups and patches. + Group/Patch + + + Name: Name: + + Group or patch name + Patch high bank number + Patch high bank number. --- means don't care. + --- dont care + Patch low bank number + Patch low bank number. --- means don't care. + --- + + Patch program number + Drum patch + If set, the patch is available only for drum channels. + GM patch + If set, the patch is available in a 'GM' or 'NO' midi song type. + GS patch + If set, the patch is available in a 'GS' or 'NO' midi song type. + XG patch + If set, the patch is available in an 'XG' or 'NO' midi song type. + Delete group or patch + New patch + New &Patch + Alt+P + New group + New &Group + Alt+G + Contro&ller + Common: + List of defined controllers + List of defined controllers. + Min + Max + Def + Midi controller name + Type: Typ: + + Midi controller type + RPN14 + NRPN14 + + Midi controller number high byte + Midi controller number low byte (* means drum controller) + Midi controller number low byte. If low byte is * then the controller is a 'drum controller'. For drum tracks and @@ -3466,19 +3350,23 @@ Examples: The GS and XG instruments' + * 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. @@ -3501,38 +3389,52 @@ True range: Min: -8192 Max: 8191 (bias 0) + + Maximum value + Default: + L-Bank L-Bank + + + + + off + Progr. Progr. + ??? ??? + H-Bank H-Bank + Default value. Off: No default. + Default (initial) value. Off means no default. If a default value is chosen, the value will be sent @@ -3551,47 +3453,59 @@ Caution! Watch out for controllers such as + off dont care + Add common controller + &Add &Hinzufügen + 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 @@ -3601,38 +3515,49 @@ Typically, set to 127/127, or an unused + Lo: + Null parameter number Low byte + S&ysEx + SysEx List: + New SysE&x + Alt+X + &Help &Hilfe + + new item + + What's this? @@ -3640,18 +3565,22 @@ Typically, set to 127/127, or an unused EditMetaDialog + Time Position Position + Meta Type Meta Typ + Enter Hex Hex Eingabe + MusE: Enter Meta Event MusE: Eingabe von Metaereignissen @@ -3690,34 +3619,42 @@ Typically, set to 127/127, or an unused 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: @@ -3725,18 +3662,22 @@ Typically, set to 127/127, or an unused EditPAfterDialog + Time Position Position + Pitch Tonhöhe + Pressure Anschlagsdruck + MusE: Enter Poly Aftertouch MusE: Poly Aftertouch eingeben @@ -3744,22 +3685,27 @@ Typically, set to 127/127, or an unused EditSysexDialogBase + MusE: Enter SysEx MusE: SysEx eingeben + TimePosition: Position: + Comment: Kommentar: + OK Bestätigen + Cancel Abbrechen @@ -3767,6 +3713,7 @@ Typically, set to 127/127, or an unused EditToolBar + Edit Tools Werkzeuge bearbeiten @@ -3774,54 +3721,67 @@ Typically, set to 127/127, or an unused 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 + show native gui + save preset + MusE: Save Preset + Replace effect + Do you really want to replace the effect %1? @@ -3829,6 +3789,7 @@ Typically, set to 127/127, or an unused FLUIDGui + FLUID: open Soundfile @@ -3836,14 +3797,17 @@ Typically, set to 127/127, or an unused FLUIDGuiBase + Form1 Form1 + Soundfont + Load @@ -3851,98 +3815,123 @@ Typically, set to 127/127, or an unused FLUIDSynthGuiBase + FLUID Synth + Load + Delete Löschen + Dump Info + ID + Fontname + Chnl + Soundfont + Drum Chnl + + Level + Width + Damping + Room Size + Reverb + CHANNEL SETUP + Sine + Triangle + Type Typ + Number + Speed + Depth + Chorus + Gain + LOADED SOUNDFONTS @@ -3954,14 +3943,17 @@ Typically, set to 127/127, or an unused Form1 + Global Global + User Benutzer + Project Projekt @@ -3976,15 +3968,18 @@ Cofiguration Konfiguration + only Songdata Nur Lieddaten + fdialogbuttons + Songdata + Configuration @@ -3993,6 +3988,7 @@ Configuration FluidSynthGui + Choose soundfont @@ -4008,72 +4004,86 @@ Configuration GateTimeBase MusE: Modify Gate Time - MusE: Gate Zeit ändern + MusE: Gate Zeit ändern Range - Bereich + Bereich All Events - Alle Ereignisse + Alle Ereignisse Selected Events - Ausgewählte Ereignisse + Ausgewählte Ereignisse Looped Events - Ereignisse innerhalb Schleife + Ereignisse innerhalb Schleife Selected & Looped - Ausgewählt & innerhalb der Schleife + Ausgewählt & innerhalb der Schleife Values - Werte + Werte Rate: - Rate: + Rate: Offset: - Zeitversatz: + Zeitversatz: % - % + % OK - Bestätigen + Bestätigen Cancel - Abbrechen + Abbrechen + + + + GlobalSettingsConfig + + + Selects instruments directory + GlobalSettingsDialogBase + MusE: Global Settings MusE: Globale Einstellungen + Audio Audio + Mixer Mischpult + + dB dB + min. Meter Value min. Pegelreglerwerte @@ -4082,22 +4092,31 @@ Configuration min. Schiebereglerwerte + Midi Midi + Ticks Ticks + + + 1024 1024 + + + 2048 2048 + 4096 4096 @@ -4106,74 +4125,116 @@ Configuration 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 + + + + + Some popup menus stay open (else hold Ctrl) + + + + + Allows some popup menus to stay open. +Otherwise, hold Ctrl to keep them open. + + + + &Apply &Anwenden + &Ok &Bestätigen + &Cancel Abb&rechen @@ -4182,304 +4243,479 @@ Configuration 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 B + show "Did you know?" dialog + Start song + min. Slider Val - Use Jack freewheel mode if possible. -(Speeds up bounce operations). + + Enable denormal protection - Enable denormal protection + + Enable output limiter - Enable output limiter + + External Waveditor - Enable in-place processing for VST plugins. -(Requires restart.) + + External Waveditor command - 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. + + Note: External editor opened from the internal editor. - External Waveditor + + Dummy Audio Driver (settings require restart) - External Waveditor command + + Hz - Note: External editor opened from the internal editor. + + Period size (Frames per period): - Dummy Audio Driver (settings require restart) + + + 16 + 16 + + + + Try to use Jack Freewheel - Preferred sample rate + + Speeds bounce operations - 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. + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. - Hz + + VST in-place - Actual rate used now (dummy or not): + + 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. - Period size (Frames per period): + + Minimum control period - 16 - 16 + + 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) + + Instruments Directory + + + + Use old-style stop shortcut: + Move single armed track with selection + On Launch + Behavior + + Header + + + Track Info Columns + + + LMaster + new tempo Neues Tempo + new signature Neues Taktmaß + Meter Taktposition + Time Zeitposition + Type Typ + Value Wert + MusE: Mastertrack MusE: Masterspur + Tempo Tempo + Timesig Taktmaß + &Edit + Insert Tempo + Insert Signature + + Insert Key + + + + Edit Positon + Edit Value + Delete Event + Master tools + Edit tools + + Key + + + + + new key + + + + 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! @@ -4487,18 +4723,22 @@ Shorter periods are desirable. ListEdit + &Edit B&earbeiten + Cut Ausschneiden + Copy Kopieren + Paste Einfügen @@ -4511,6 +4751,7 @@ Shorter periods are desirable. Werkzeuge "Einfügen" + Delete Events Ereignisse löschen @@ -4519,6 +4760,7 @@ Shorter periods are desirable. Note einfügen + insert Note Note einfügen @@ -4527,6 +4769,7 @@ Shorter periods are desirable. SysEx einfügen + insert SysEx SysEx einfügen @@ -4535,6 +4778,7 @@ Shorter periods are desirable. Ctrl einfügen + insert Ctrl ctrl einfügen @@ -4543,6 +4787,7 @@ Shorter periods are desirable. Meta einfügen + insert Meta Meta einfügen @@ -4551,6 +4796,7 @@ Shorter periods are desirable. Channel Aftertouch einfügen + insert Channel Aftertouch Channel Aftertouch einfügen @@ -4559,14 +4805,17 @@ Shorter periods are desirable. Key Aftertouch einfügen + insert Poly Aftertouch Poly Aftertouch einfügen + Tick Tick + Bar Takt @@ -4575,38 +4824,47 @@ Shorter periods are desirable. Typ + Ch K + Val A Wert A + Val B Wert B + Val C Wert C + Len Länge + Comment Kommentar + List tools + Insert tools + Type Typ @@ -4614,22 +4872,27 @@ Shorter periods are desirable. MITTransposeBase + MusE: Midi Input Plugin: Transpose MusE: Midi Eingang PlugIn: Transponieren + On An + TriggerKey Auslösertaste + Transpose: Transponieren: + +0 +0 @@ -4641,22 +4904,27 @@ Shorter periods are desirable. kein + Port Anschluss + GUI GUI + Instrument Instrument + Device Name Gerätename + State Status @@ -4665,158 +4933,238 @@ Shorter periods are desirable. unbekannt + I E + O A + MusE: bad device name + + + 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? + + + + please choose a unique device name + + in + + out + Show first aliases + Show second aliases + + + Toggle all + + + + + + Change all tracks now + + + + Create + device + + Port Number Anschlussnummer + 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 - Connect these to new midi tracks + + Auto-connect these channels to new midi tracks + + + + + Auto-connect new midi tracks to these channels + + + + + Auto-connect new midi tracks to this channel + + + + + 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 (first listed only) + + Connect new midi tracks to this channel, on this port. + 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 mit Anschluss verbunden + Connections from Jack Midi output ports + Connections to Jack Midi input ports - 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 - - - - 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) - - - + State: result of opening the device Status: Ergebnis des Geräteanschlusses + In routes + Out routes + Def in ch + Def out ch + <unknown> + + <none> @@ -4824,41 +5172,55 @@ NOTE: Currently only one output port and channel supported (first found) 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) + + MTScale + bar scale Taktposition @@ -4866,30 +5228,37 @@ NOTE: Currently only one output port and channel supported (first found) MarkerView + 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 @@ -4898,6 +5267,7 @@ NOTE: Currently only one output port and channel supported (first found)Marker hinzufügen + delete marker Marker löschen @@ -4910,14 +5280,17 @@ NOTE: Currently only one output port and channel supported (first found)&Datei + &Edit &Bearbeiten + marker-tools + edit tools Werkzeuge "Bearbeitung" @@ -4925,34 +5298,42 @@ NOTE: Currently only one output port and channel supported (first found) MasterEdit + Cursor Positionsmarker + Snap Magnet + time at cursor position Zeit an aktuellem Positionsmarker + 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 @@ -4965,6 +5346,7 @@ NOTE: Currently only one output port and channel supported (first found)Master aktivieren + Info Info @@ -4974,18 +5356,22 @@ NOTE: Currently only one output port and channel supported (first found) + Enable Einschalten + Enable usage of master track Verwendung der Masterspur einschalten + Master tools + Enable master @@ -4993,114 +5379,142 @@ NOTE: Currently only one output port and channel supported (first found) 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... + 50 50 + % Audio volume + Hint: Enable metronome in Transportpanel + Alt+A Alt+A + Alt+O + Alt+C Alt+C @@ -5115,266 +5529,353 @@ NOTE: Currently only one output port and channel supported (first found) MidiControllerEditDialogBase + Type - Typ + Typ + Properties - Eigenschaften + Eigenschaften + Type - Typ + Typ &New Neu + &Delete - &Löschen + &Löschen + &OK - &Bestätigen + &Bestätigen + &Cancel - Abb&rechen + Abb&rechen + MusE: Define Midi Controller - MusE: Midi Kontroller definieren + MusE: Midi Kontroller definieren + &Add - &Hinzufügen + &Hinzufügen + Alt+A - Alt+A + Alt+A + create new entry - Neuen Eintrag erzeugen + 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 + Durch Klicken der Schaltfläche "Neu" einen neuen Eintrag erzeugen in der MusE Liste "Definierte Kontroller" + delete selected entry - Ausgewählten Eintrag löschen + Ausgewählten Eintrag löschen + + A&pply + + + + Predefined Controller: - Vordefinierte Kontroller: + Vordefinierte Kontroller: + Name - Name + Name + + H-Ctrl - H-Ctrl + H-Ctrl + + L-Ctrl - L-Ctrl + L-Ctrl + Min Val - Min Wert + Min Wert + Max Val - Max Wert + Max Wert + list of defined controllers - Liste definierter Kontroller + Liste definierter Kontroller + This is the MusE list of defined controllers. - Dies ist die MusE Liste definierter Kontroller. + Dies ist die MusE Liste definierter Kontroller. + Managed Controller for Port - Verwendeter Kontroller für Anschluss + Verwendeter Kontroller für Anschluss + Channel - Kanal + 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. + Dies ist eine Liste oft standardisierter Midi Kontroller. Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller behandelt werden. + Name - Name + Name + Min Value - Min Wert + Min Wert + Max Value - Max Wert + Max Wert + Control7 - Kontroller7 + Kontroller7 + Control14 - Kontroller14 + Kontroller14 + RPN - RPN + RPN + NRPN - NRPN + NRPN + + + + RPN14 + + + + + NRPN14 + + Pitch - Tonhöhe + Tonhöhe + Program - Programm + Programm + Midi Controller Number High Byte - Midi Kontrollernummer höchstwertiges Byte + Midi Kontrollernummer höchstwertiges Byte + Midi Controller Number Low Byte - Midi Kontrollernummer niederwertigstes Byte + Midi Kontrollernummer niederwertigstes Byte + Range - Bereich + 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 @@ -5382,6 +5883,8 @@ Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller be MidiInputTransformDialog + + New Neu @@ -5389,214 +5892,334 @@ Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller be 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 @@ -5623,50 +6246,64 @@ Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller be 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 @@ -5703,26 +6340,33 @@ Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller be Automatisationstyp + + double click on/off + solo mode + iR iR + input routing + oR oR + output routing Ausgangs-Signalfluss @@ -5730,111 +6374,142 @@ Beachte dass in MusE Tonhöhen- und Programmwechselbefehle wie Midikontroller be MidiSyncConfig + + Port Number Anschlussnummer + + Name of the midi device associated with this port number Name des Midi Gerätes an dieser Anschlussnummer + 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, @@ -5844,6 +6519,7 @@ 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 @@ -5854,30 +6530,36 @@ This means you may have several master + 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 @@ -5887,103 +6569,128 @@ Note: It may be impossible to rewind fast + Port + Device Name Gerätename + c + k + r + m min + t + type + rid + rc + rr + rm + rt + rw + tid + tc + tr + tm + tt + MusE MusE + Settings have changed Apply sync settings? + &Apply &Anwenden + &No &Nein + &Abort &Abbrechen + <none> @@ -5991,70 +6698,87 @@ Apply sync settings? 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 @@ -6123,39 +6847,48 @@ Apply sync settings? alle + MTC MTC + Type: Typ: + Offset: Zeitversatz: + 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. @@ -6165,14 +6898,17 @@ 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. @@ -6181,14 +6917,17 @@ Enabled inputs in the list will + 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 @@ -6196,10 +6935,12 @@ Enabled inputs in the list will + ms + Send sync delay @@ -6207,10 +6948,12 @@ Enabled inputs in the list will MidiTrackInfoBase + MusE: TrackInfo MusE: Spurinfo + output channel Ausgangskanal @@ -6223,6 +6966,8 @@ Enabled inputs in the list will Spurinfo + + % % @@ -6231,10 +6976,23 @@ Enabled inputs in the list will Spur Name + output port Ausgangsanschluss + + iR + iR + + + + + + + + + off aus @@ -6255,6 +7013,7 @@ Enabled inputs in the list will Instrumentenpatch auswählen + Transp. Transp. @@ -6263,26 +7022,47 @@ Enabled inputs in the list will Volume + Channel Info Kanalinfo + + Rec: + + + + + Prog + + + + + Vol + + + + Pan Pan + Delay Delay + H-Bank H-Bank + Compr. Kompr. + L-Bank L-Bank @@ -6291,10 +7071,12 @@ Enabled inputs in the list will Progr. + Velocity Velocity + Length Länge @@ -6347,108 +7129,115 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: Bank Wahl MSB + all midi events are sent to this output channel + Out ch + input routing - Inputs - - - + output routing Ausgangs-Signalfluss + oR 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> - Record: - - - + Add all settings to song + All alle + 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 - Prog. - - - + Volume. Double-click on/off. + Add vol setting to song - Vol. - - - + + Change stereo position. Double-click on/off. + Add pan setting to song @@ -6456,230 +7245,345 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: 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 @@ -6687,6 +7591,8 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: MidiTransformerDialog + + New Neu @@ -6694,6 +7600,7 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: MixdownFileDialog + Wave Files (*.wav);;All Files (*) Wave Dateien (*.wav);;Alle Dateien (*) @@ -6701,50 +7608,62 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: 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 @@ -6759,14 +7678,17 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: MusE + &File Lied&datei + Open &Recent &Letztes Lied öffnen + Save &As Lied &sichern als @@ -6775,34 +7697,43 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: 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 @@ -6811,186 +7742,233 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: 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 + Move Clock + 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 + + 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 + Follow Song Folge dem Lied + Metronome Metronom + Midi Sync Midi Sync + Appearance Settings Erscheinungsbild einstellen + Midi Input Transform Midi Eingang transformieren + Midi Input Filter Midi Eingangsfilter + Midi Remote Control Midi Fernbedienung @@ -6999,6 +7977,7 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: Zufälliger Rhythmusgenerator + &Midi &Midi @@ -7007,34 +7986,42 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: Mischpult + Input Plugins Eingangs-PlugIns + Reset Instr. Rücksetzen Instr. + Init Instr. Initialisieren Instr. + Local Off Lokal off + &Audio &Audio + Bounce to Track Auf Spur abmischen + Bounce to File In Datei abmischen + &Help &Hilfe @@ -7047,16 +8034,21 @@ Zur Aufnahme können mehrere Kanäle gewählt werden: Über &Qt + MusE: load project Muse: Projekt laden + The current Project contains unsaved data Save Current Project? Das aktuelle Projekt enthält ungesicherte Daten Aktuelles Projekt sichern? + + + &Save Lied &sichern @@ -7065,18 +8057,25 @@ Aktuelles Projekt sichern? Lied &nicht Sichern + + &Abort &Abbrechen + + MusE: Save As MusE: Lied sichern als + + Nothing to edit Es gibt Nichts zu editieren + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -7089,10 +8088,12 @@ Aktuelles Projekt sichern? &Überschreiben + no help found at: Hilfe wurde nicht gefunden: + MusE: Open Help MusE: Hilfe öffnen @@ -7105,6 +8106,7 @@ Aktuelles Projekt sichern? Rücksetzen + Und&o &Rücksetzen @@ -7113,18 +8115,22 @@ Aktuelles Projekt sichern? Wiederholen + Re&do &Wiederholen + undo last change to song Letzte Änderung am Lied rücksetzen + redo last undo Letztes Rücksetzen wiederholen + Transport Transport @@ -7133,6 +8139,7 @@ Aktuelles Projekt sichern? Schleife erzeugen + Loop Schleife @@ -7141,6 +8148,7 @@ Aktuelles Projekt sichern? Aufnahme am linken Marker beginnen + Punchin Aufnahme am linken Marker beginnen @@ -7149,6 +8157,7 @@ Aktuelles Projekt sichern? Aufnahme am rechten Marker beenden + Punchout Aufnahme am rechten Marker beenden @@ -7157,6 +8166,7 @@ Aktuelles Projekt sichern? Start + Start Start @@ -7165,6 +8175,7 @@ Aktuelles Projekt sichern? Einen Taktschlag rückwärts + Rewind Einen Taktschlag rückwärts @@ -7173,6 +8184,7 @@ Aktuelles Projekt sichern? Einen Taktschlag vorwärts + Forward Einen Taktschlag vorwärts @@ -7181,6 +8193,7 @@ Aktuelles Projekt sichern? Stopp + Stop Stopp @@ -7189,6 +8202,7 @@ Aktuelles Projekt sichern? Wiedergabe + Play Wiedergabe @@ -7197,6 +8211,7 @@ Aktuelles Projekt sichern? Aufnahme + Record Aufnahme @@ -7205,6 +8220,8 @@ Aktuelles Projekt sichern? Panik + + Panic Panik @@ -7213,6 +8230,7 @@ Aktuelles Projekt sichern? Neues Lied + &New &Neues Lied @@ -7221,6 +8239,7 @@ Aktuelles Projekt sichern? Öffnen + &Open Lied &öffnen @@ -7233,6 +8252,7 @@ Aktuelles Projekt sichern? Pianorollen Editor + Pianoroll Pianorollen Editor @@ -7245,6 +8265,7 @@ Aktuelles Projekt sichern? Marker + File Buttons Schaltflächen @@ -7253,26 +8274,35 @@ Aktuelles Projekt sichern? Unbekanntes Dateiformat + MusE: Write File failed MusE: Datei schreiben schlug fehl + + + MusE: Song: MusE: Lied: MusE: Copy Range - MusE: Bereich kopieren + MusE: Bereich kopieren not implemented - Nicht umgesetzt + Nicht umgesetzt MusE: Cut Events - MusE: Ereignisse ausschneiden + MusE: Ereignisse ausschneiden + + + + + MusE: Bounce to Track MusE: Auf Spur abmischen @@ -7295,42 +8325,49 @@ Wave Spur als Zielspur auswählen Um eine Audiodatei zu importieren zuerst eine Wave Spur auswählen + Delete Selected Tracks Ausgewählte Spuren löschen View - Ansicht + Ansicht + Edit Instrument Instrument bearbeiten + Restart Audio Audio erneut starten Automation - Automatisierung + Automatisierung + Mixer Automation Mischpult Automatisierung + Take Snapshot Schnappschuss aufnehmen + Clear Automation Data Automatisierungsdaten löschen Settings - Einstellungen + Einstellungen + Configure Shortcuts Tastenkürzel einstellen @@ -7339,22 +8376,27 @@ Wave Spur als Zielspur auswählen Midi Datei exportieren + Midi Ports / Soft Synth Midi Anschlüsse / Software Synthesizer + &Manual &Handbuch + &MusE Homepage &MusE Webseite + &Report Bug... &Fehler melden ... + &About MusE &Über MusE @@ -7363,30 +8405,36 @@ Wave Spur als Zielspur auswählen Was ist &das? + Cannot read template Vorlage nicht lesbar + File open error Fehler beim Datei öffnen + File read error Fehler beim Datei lesen + MusE: load template Muse: Vorlage laden MusE: Bounce - MusE: Abmischen + MusE: Abmischen set left/right marker for bounce range - Linken/rechten Marker für Abmischbereich einstellen + Linken/rechten Marker für Abmischbereich einstellen + + MusE: Bounce to File MusE: In Datei abmischen @@ -7395,200 +8443,301 @@ Wave Spur als Zielspur auswählen Keine Ausgangsspur gefunden + MusE: Export Midi MusE: Midi exportieren + MusE: Import Midi MusE: Midi importieren + Add midi file to current project? Mididatei zu aktuellem Lied hinzufügen? + &Add to Project Zu Lied hin&zufügen + &Replace Erset&zen + reading midifile Lese Mididatei + failed: schlug fehl: + + 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. + Import Part + &Insert + Paste c&lone + Paste to &track + Paste clone to trac&k + &Insert Empty Measure + + Find unused wave files + + + + + Score + + + + + all parts in one staff + + + + + one staff per part + + + + + New score window + + + + Wave + Song Info + Mixer A + Mixer B + Cliplist + Marker View + &Plugins + Rhythm Generator + Midi File Import/Export + + &View + &Zeigen + + + + A&utomation + + + + + Se&ttings + + + + Unknown File Format: + + &Skip + + &Cancel + + + + + + New + Neu + + + 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 + Select one audio output track + Import part is only valid for midi and wave tracks! + MusE: load part + No track selected for import + 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 + Import Wavefile + This wave file has a samplerate of %1, as opposed to current setting %2. Do you still want to import it? + &Yes &Ja + &No &Nein + Unable to launch help + For some reason MusE has to launch the default browser on your machine. @@ -7597,26 +8746,32 @@ browser on your machine. NoteInfo + Start Start + Len Länge + Pitch Tonhöhe + Velo On Velo an + Velo Off Velo aus + Note Info Noteninformation @@ -7624,90 +8779,122 @@ browser on your machine. OrganGuiBase + MusE: Organ + Drawbars + 16' 16' + 4' 4' + 2 2/3' 2 2/3' + 2' 2' + 5 1/3' 5 1/3' + 8' 8' + Envelope Hi + + Release + + Sustain + + Decay + + Attack + + + + + + ms + + cB + Envelope Lo + O-1 + Oscillator + Brass + Reed + Flute + Velocity Velocity @@ -7722,123 +8909,152 @@ browser on your machine. PartCanvas + C&ut &Ausschneiden + &Copy &Kopieren + rename Umbenennen + delete Löschen + split Schnitt + glue Verbinder pianoroll - Pianorollen Editor + Pianorollen Editor list - Listen Editor + Listen Editor drums - Schlagzeug Editor + Schlagzeug Editor + Cannot copy/move/clone to different Track-Type Kopieren/verschieben/klonen auf anderen Spurtyp nicht möglich + color Farbe + de-clone Entklonen + + + + save part to disk + + + + wave edit Wave Editor + Cannot paste: multiple tracks selected Einfügen nicht möglich: mehrere Spuren ausgewählt + Cannot paste: no track selected Einfügen nicht möglich: keine Spur ausgewählt + Cannot paste: wrong data type Einfügen nicht möglich: falscher Datentyp + Can only paste to midi/drum track Einfügen möglich nur in Midi/Drum Spur + Can only paste to wave track Einfügen möglich nur in Wave Spur + s&elect + clones - export - - - + file info + MusE: save part + Part name + Files + out of + parts + part + could not be pasted. Likely the selected track is the wrong type. + Can only paste to midi or wave track @@ -7860,6 +9076,7 @@ Likely the selected track is the wrong type. PianoRoll + &Edit &Bearbeiten @@ -7900,6 +9117,7 @@ Likely the selected track is the wrong type. Auswahl außerhalb Schleife + &Select &Auswählen @@ -7916,6 +9134,7 @@ Likely the selected track is the wrong type. Farbe nach Anschlagsstärke + &Config &Einstellen @@ -7924,182 +9143,241 @@ Likely the selected track is the wrong type. Ereignisfarbe + &Functions &Funktionen Over Quantize - Überquantisieren + Überquantisieren Note On Quantize - Wert "Note an" quantisieren + Wert "Note an" quantisieren Note On/Off Quantize - Wert "Note an/aus" quantisieren + Wert "Note an/aus" quantisieren Iterative Quantize - Iteratives quantisieren + Iteratives quantisieren Pianoroll Tools Werkzeug "Pianorollen Editor" + Step Record Aufnahme taktschlagweise + Midi Input Midi Eingang + Play Events Ereignisse abspielen + Add Controller View Kontrolleransicht hinzufügen Config Quant... - Quantisierung einstellen ... + Quantisierung einstellen ... Modify Gate Time - Gate Zeit ändern + Gate Zeit ändern + Modify Velocity Velocity ändern Crescendo - Crescendo + Crescendo + Transpose Transponieren Thin Out - Ausdünnen + Ausdünnen Erase Event - Ereignis löschen + Ereignis löschen Note Shift - Note verschieben + Note verschieben Move Clock - Zeitposition verschieben + Zeitposition verschieben Copy Measure - Taktmaß kopieren + Taktmaß kopieren Erase Measure - Taktmaß löschen + Taktmaß löschen Delete Measure - Taktmaß löschen + Taktmaß löschen Create Measure - Taktmaß erzeugen + Taktmaß erzeugen + ctrl Ktrl + C&ut &Ausschneiden + &Copy &Kopieren + &Paste + Delete &Events + 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 + &Previous Part + &Next Part + &Event Color + &Blue + &Pitch colors + &Velocity colors + + Quantize + Quantisieren + + + + Modify Note Length + + + + + Crescendo/Decrescendo + + + + + Erase Events + + + + + Move Notes + + + + Set Fixed Length Länge festlegen + Delete Overlaps + + Legato + + + + &Plugins + Pianoroll tools + panic Panik + transport @@ -8107,58 +9385,72 @@ Likely the selected track is the wrong type. PluginDialog + Ok Bestätigen + Cancel Abbrechen + MusE: select plugin MusE: PlugIn wählen + Lib Lib + Label Beschriftung + Name Name + AI Al + AO AO + CI Cl + CO CO + IP IP + id id + Maker Erzeuger + Copyright Copyright @@ -8171,10 +9463,12 @@ Likely the selected track is the wrong type. Stereo und Mono + Stereo Stereo + Mono Mono @@ -8183,18 +9477,22 @@ Likely the selected track is the wrong type. alle + Mono and Stereo + 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. + Search in 'Label' and 'Name': @@ -8202,30 +9500,38 @@ Likely the selected track is the wrong type. PluginGui + + bypass plugin Signalfluss PlugIn umleiten + MusE: load preset MusE: Vorlage laden + MusE: save preset MusE: Vorlage sichern + File Buttons Schaltfläche Datei + Load Preset + Save Preset Speicher Preset + Error reading preset. Might not be right type for this plugin @@ -8366,6 +9672,7 @@ gegenwärtig nicht benutzt QObject + Other @@ -8373,22 +9680,29 @@ gegenwärtig nicht benutzt QWidget + + Cannot convert sysex string Sysex Kette nicht umwandelbar + + Hex String too long (2048 bytes limit) Hex Kette ist zu lang (Grenze 2048 Bytes) + new Neu + create peakfile for Pegelspitzendatei erzeugen für + MusE: get file name MusE: Dateinamen übermitteln @@ -8413,14 +9727,17 @@ Erzeugen? Abbrechen + MusE: create directory MusE: Verzeichnis erzeugen + creating dir failed Verzeichnis erzeugen schlug fehl + File Datei @@ -8431,6 +9748,7 @@ exists besteht + MusE: write MusE: schreiben @@ -8443,43 +9761,53 @@ exists Beenden + Open File Datei öffnen + failed: schlug fehl: + MusE: Open File MusE: Datei öffnen + + None Kein + generic midi General Midi + No selection. Ignoring + The directory + does not exist. Create it? + exists. Overwrite? @@ -8489,333 +9817,524 @@ exists. Overwrite? QuantConfig Config Quantize - Quantisierung einstellen + Quantisierung einstellen Strength - Stärke + Stärke Don´t Quantize - Nicht quantisieren + Nicht quantisieren Quant Len - Länge quantisieren + Länge quantisieren MusE: Config Quantize - MusE: Quantisierung einstellen + MusE: Quantisierung einstellen RhythmBase + MusE: Random Rhythm Generator - MusE: Rhythmus Zufallsgenerator + MusE: Rhythmus Zufallsgenerator + Instrument Properties - Instrumenteigenschaften + Instrumenteigenschaften + + counts/bar - Schläge/Takt + Schläge/Takt + steps/count - Schritte/Schlag + Schritte/Schlag + + # bars - # Takte + # Takte + test - testen + testen + + contrib - beitragen + beitragen + randomize - zufällig anordnen + zufällig anordnen + Group 1 - Gruppe 1 + Gruppe 1 + Group 2 - Gruppe 2 + Gruppe 2 + Group 3 - Gruppe 3 + Gruppe 3 + Group 4 - Gruppe 4 + Gruppe 4 + Group 5 - Gruppe 5 + Gruppe 5 + + listen - vorhören + vorhören + Instrument - Instrument + Instrument + + Group - Gruppe + Gruppe + + &New - &Neu + &Neu + create new entry - Neuen Eintrag erzeugen + Neuen Eintrag erzeugen + pressing the New button you create a new entry in the MusE list of defined controllers - Schaltfläche "Neu" klicken um einen neuen Eintrag + Schaltfläche "Neu" klicken um einen neuen Eintrag in der MusE Liste definierter Kontroller zu erzeugen + &Delete - &Löschen + &Löschen + delete selected entry - Ausgewählten Eintrag löschen + Ausgewählten Eintrag löschen + Up - Nach oben + Nach oben + Down - Nach unten + Nach unten + Instrument - Instrument + Instrument + steps/count - Schritte/Schlag + Schritte/Schlag + list of defined controllers - Liste definierter Kontroller + Liste definierter Kontroller + This is the MusE list of defined controllers. - Dies ist die MusE Liste definierter Kontroller. + Dies ist die MusE Liste definierter Kontroller. + &File - &Datei + &Datei + &Edit - &Bearbeiten + &Bearbeiten + &Help - &Hilfe + &Hilfe + Tools - Werkzeuge + Werkzeuge + New - Neu + Neu + Open - Öffnen + Öffnen + &Open... - &Öffnen ... + &Öffnen ... + Save - Sichern + Sichern + &Save - &Sichern + &Sichern + Save As - Sichern als + Sichern als + Save &As... - S&ichern als ... + S&ichern als ... + Print - Drucken + Drucken + &Print... - &Drucken ... + &Drucken ... + Exit - Beenden + Beenden + E&xit - Bee&nden + Bee&nden + Undo - Rckgängig + Rckgängig + &Undo - &Rückgängig + &Rückgängig + Redo - Wiederherstellen + Wiederherstellen + &Redo - &Wiederherstellen + &Wiederherstellen + Cut - Ausschneiden + Ausschneiden + &Cut - A&usschneiden + A&usschneiden + Copy - Kopieren + Kopieren + C&opy - Ko&pieren + Ko&pieren + Paste - Einfügen + Einfügen + &Paste - Ein&fügen + Ein&fügen + Find - Suchen + Suchen + &Find... - &Suchen ... + &Suchen ... + Contents - Inhalte + Inhalte + &Contents... - &Inhalte ... + &Inhalte ... + Index - Verzeichnis + Verzeichnis + &Index... - &Verzeichnis ... + &Verzeichnis ... + About - Über + Über + &About... - &Über ... + &Über ... + <b>Notice!</b><br> Random Rhythm Generator is not enabled yet! - Merke! + Merke! Rhythmus Zufallsgenerator noch nicht eingeführt! + Ctrl+N - Strg+N + Strg+N + Ctrl+O - Strg+O + Strg+O + Ctrl+S - Strg+S + Strg+S + Ctrl+P - Strg+P + Strg+P + Ctrl+Z - Strg+Z + Strg+Z + Ctrl+Y - Strg+Y + Strg+Y + Ctrl+X - Strg+X + Strg+X + Ctrl+C - Strg+C + Strg+C + Ctrl+V - Strg+V + Strg+V + Ctrl+F - Strg+F + Strg+F RhythmGenerator + + Form3 + Form3 + + + Instrument Settings: - Instrument Einstellungen + Instrument Einstellungen + + + + Instrument + Instrument + + + + Hi-Hat + + add - Zufgen + Zufgen + delete - Entfernen + Entfernen + + + + steps/count + Schritte/Schlag + + + + count/bar + + + + + # bars + # Takte + + + + Group Settings: + + Group - Gruppe + Gruppe + + + + Group 1 + Gruppe 1 + + + + Group 2 + Gruppe 2 + + + + Group 3 + Gruppe 3 + + + + Group 4 + Gruppe 4 + + + + Group 5 + Gruppe 5 + + + + contrib + beitragen + + + + listen + vorhören + + + + Randomize + + + + + Rhythm Style: + + + + + Clear + + + + + Open... + + + + + Save + Sichern + + + + Save as... + + + + + Generate + + + + + Close + @@ -8825,46 +10344,57 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! RouteDialogBase + MusE: Routing MusE: Signalfluss + Add Route Signalfluss hinzufügen + Source: Quelle: + Destination: Ziel: + Connect Verbinden + connect source to destination Quelle mit Ziel verbinden + Current Routes Aktueller Signalfluss + Source Quelle + Destination Ziel + Remove Entfernen + remove selected route Ausgewählten Signalfluss entfernen @@ -8872,76 +10402,70 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! SS_PluginChooserBase + SimpleDrums - Ladspa Plugin Chooser + Name Name + Label Beschriftung + Inports + Outports + Creator + &Cancel + Alt+C Alt+C + &OK &Bestätigen + Alt+O - - SS_PluginFront - - Clear and unload effect - - - - Load effect - - - - Toggle display of effect parameters - - - - Turn effect on/off - - - ScrollScale + next page Nächste Seite + previous page Vorherige Seite + current page number Aktuelle Seitennummer @@ -8949,18 +10473,22 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! ShortcutCaptureDialog + Ok Bestätigen + Cancel Abbrechen + Shortcut conflicts with + Undefined unbestimmt @@ -8968,30 +10496,38 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! ShortcutCaptureDialogBase + Enter shortcut sequence Folge von Tastenkürzeln eingeben + Press keys to enter shortcut sequence! Tasten drücken um Folge von Tastenkürzeln einzugeben! + Old shortcut: Altes Tastenkürzel: + + Undefined unbestimmt + New shortcut: Neues Tastenkürzel: + OK Bestätigen + Cancel Abbrechen @@ -8999,42 +10535,52 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! ShortcutConfigBase + Configure Keyboard Shortcuts Tastenkürzel einstellen + Shortcut Category Kategorie Tastenkürzel + Description Beschreibung + Shortcut Tastenkürzel + &Clear &Löschen + Alt+C Alt+C + &Define &Bestimmen + Alt+D Alt+D + &Apply &Anwenden + Alt+A Alt+A @@ -9042,6 +10588,7 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! SigScale + signature scale Skala Taktmaß @@ -9049,6 +10596,7 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! SimpleDrumsGuiBase + DrumSynth 0.1 @@ -9056,25 +10604,25 @@ Rhythmus Zufallsgenerator noch nicht eingeführt! SimpleSynthGui + &Load setup + &Save setup - - Load sample dialog - - 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: @@ -9093,55 +10641,71 @@ click on the Restart button. + previous event + next event + + set event + + add event + + erase event + erase range + clear automation + Clear all controller events? + &Ok &Bestätigen + &Cancel + MusE - external script failed - MusE was unable to launch the script - + + MusE was unable to launch the script, error message: + + Automation: @@ -9149,22 +10713,32 @@ click on the Restart button. SongInfo + Song Information + + Show on song load + + + + &Cancel + Alt+C Alt+C + &Ok &Bestätigen + Alt+O @@ -9172,54 +10746,68 @@ click on the Restart button. SynthConfigBase + MusE: Synth Configuration MusE: Synth Einstellung + Soft Synthesizer Software-Synthesizer + File Datei + Instances Instanzen + + Name Name + list of available software synthesizers Liste verfügbarer Software-Synthesizer + Add Instance Instanz hinzufügen + Remove Instance Instanz entfernen + Midi Port Midi Anschluss + Midi connections Midi Verbindungen + Inst Inst + Version Version + Description Beschreibung @@ -9227,82 +10815,156 @@ click on the Restart button. TList + Midi Midi + Drum Drum + Delete Track Spur löschen + Track Comment Spur Kommentar Show Gui - Zeige GUI + Zeige GUI + Add Midi Track Midi Spur hinzufügen + Add Drum Track Drum Spur hinzufügen + Add Wave Track Wave Spur hinzufügen + MusE: bad trackname MusE: ungeeigneter Spurname + + no clef + + + + + Treble + + + + + Bass + + + + + Grand + + + + please choose a unique track name Bitte eindeutigen Spurnamen wählen + + + show gui + GUI anzeigen + + + + + show native gui + + + + Add Output Ausgang hinzufügen + Add Group Gruppe hinzufügen + Add Input Eingang hinzufügen + Add Aux Send Aux Send hinzufügen + + Update drummap? Drumbelegung aktualisieren? + 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? + + &Yes &Ja + + &No &Nein + + Treble clef + + + + + Bass clef + + + + + Grand Staff + + + + + Viewable automation + + + + 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? + <none> @@ -9310,6 +10972,7 @@ click on the Restart button. TempoSig + Tempo/Sig Tempo/Taktmaß @@ -9324,38 +10987,41 @@ click on the Restart button. Toolbar1 + Solo Solo + Snap Magnet Quantize - Quantisieren + Quantisieren To - Zu + Zu All Events - Alle Ereignisse + Alle Ereignisse Looped Ev. - Ereignisse innerhalb Schleife. + Ereignisse innerhalb Schleife. Selected Ev. - Ausgewählte Ereignisse. + Ausgewählte Ereignisse. Looped+Sel. - Innerhalb Schleife + augewählt. + Innerhalb Schleife + augewählt. + Cursor Positionsmarker @@ -9363,10 +11029,12 @@ click on the Restart button. TrackComment + MusE: Track Comment MusE: Spur Kommentar + Track Comment: Spur Kommentar: @@ -9374,122 +11042,156 @@ click on the Restart button. Transport + + Punch In Aufnahme am linken Marker beginnen + + Loop Schleife + + Punch Out Aufnahme am rechten Marker beenden + Left Mark Linker Marker + Right Mark Rechter Marker + Overdub Überschreiben + + Replace Ersetzen + Rec Mode Modus "Aufnahme" + Normal Normal + Mix Mischen + Cycle Rec Aufnahme in Schleife + punchin Aufnahme am linken Marker geginnen + loop Schleife + punchout Aufnahme am rechten Marker beenden + rewind to start Zum Start zurück + rewind Einen Taktschlag rückwärts + forward Einen Taktschlag vorwärts + stop Stopp + play Wiedergabe + record Aufnahme + AC AC + quantize during record Während Aufnahme quantisieren + Click Klick + metronom click on/off Metronom Klick an/aus + Sync Sync + external sync on/off Externer Sync an/aus + Master Master + use master track Masterspur einschalten + Jack + Jack transport sync on/off @@ -9498,52 +11200,55 @@ click on the Restart button. TransposeDialogBase MusE: Midi Transpose - MusE: Midi transponieren + MusE: Midi transponieren Value - Wert + Wert halftones - Halbtonschritte + Halbtonschritte Time - Zeit + Zeit all - alle + alle between markers - Zwischen Markern + Zwischen Markern Parts - Parts + Parts all in selected tracks - Alles in ausgewählter Spur + Alles in ausgewählter Spur OK - Bestätigen + Bestätigen Cancel - Abbrechen + Abbrechen VAMGui + MusE: Load VAM Presets + + MusE: Save VAM Presets @@ -9551,134 +11256,190 @@ click on the Restart button. VAMGuiBase + Virtual Analogue for MusE + LFO + Freq + + + Waveform + + + Sine + + + Pulse + + + Saw + + + Triangle + Filter 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 Vorlage löschen + DCO 1 + + Pitch + + Detune + + PWM + + FM + + PW + DCO 2 + On An + VAM 1.0beta3 Virtual Analog for MusE Released under GPL. @@ -9695,58 +11456,59 @@ Robert Jonsson VelocityBase MusE: Modify Velocity - MusE: Velocity ändern + MusE: Velocity ändern Range - Bereich + Bereich All Events - Alle Ereignisse + Alle Ereignisse Selected Events - Ausgewählte Ereignisse + Ausgewählte Ereignisse Looped Events - Ereignisse innerhalb Schleife + Ereignisse innerhalb Schleife Selected & Looped - Ausgewählt & innerhalb Schleife + Ausgewählt & innerhalb Schleife Values - Werte + Werte Rate: - Rate: + Rate: Offset: - Zeitversatz: + Zeitversatz: % - % + % OK - Bestätigen + Bestätigen Cancel - Abbrechen + Abbrechen WTScale + bar scale - Taktskala + Taktskala @@ -9760,10 +11522,12 @@ Robert Jonsson Werkzeug "we" + Solo Solo + Cursor Positionsmarker @@ -9776,87 +11540,123 @@ Robert Jonsson Funktionen + &Edit + Func&tions + &Gain + 200% 200% + 150% 150% + 75% 75% + 50% 50% + 25% 25% + Other + + &Copy + &Kopieren + + + + C&ut + &Ausschneiden + + + + &Paste + + + + Edit in E&xternal Editor + Mute Selection + Normalize Selection + Fade In Selection + Fade Out Selection + Reverse Selection + Select Auswählen + Select &All Alles a&uswählen + &Deselect All Alles ab&wählen + Wave edit tools + transport - Pianoroll tools + + WaveEdit tools @@ -9898,10 +11698,12 @@ Robert Jonsson WaveView + MusE - external editor failed + MusE was unable to launch the external editor check if the editor setting in: Global Settings->Audio:External Waveditor @@ -9909,10 +11711,12 @@ is set to a valid editor. + MusE - file size changed + When editing in external editor - you should not change the filesize since it must fit the selected region. @@ -9923,230 +11727,288 @@ Missing data is muted freeverb + FreeVerb + Room Size + Damping + Wet Level + Tap-Reverberator + Decay [ms] + + dB 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 --git a/muse2/share/locale/muse_es.ts b/muse2/share/locale/muse_es.ts index 18b96de3..047655ce 100644 --- a/muse2/share/locale/muse_es.ts +++ b/muse2/share/locale/muse_es.ts @@ -4,6 +4,7 @@ @default + Click this button to enable recording Pulsa este botón para habilitar la captura @@ -11,11 +12,12 @@ sets amount of quantization: 0 - no quantization 100 - full quantization - selecciona el porcentaje de cuantizado: + selecciona el porcentaje de cuantizado: 0 - sin cuantizar 100 - sobrecuantizado + select Pointer Tool: with the pointer tool you can: select parts @@ -28,88 +30,107 @@ con la herramienta de puntero puedes: 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 + 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 + 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 @@ -120,82 +141,125 @@ con la herramienta de lápiz puedes: 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 + + Manipulate automation + + + + + Cursor tool + + + + pointer puntero + pencil lápiz + + + edit automation + + + + + cursor + + rubber goma + cutter cortador + score partitura + glue pegamento + quantize cuantizador + draw dibujar + mute parts silenciar partes + + + + + + + + Off Apagar @@ -208,130 +272,189 @@ haz click en una parte para silenciar/des-silenciar Todos los archivos (*) + Add Midi Track Agregar pista MIDI + Add Drum Track Agregar pista de percusión + Add Wave Track Agregar pista de audio + Add Audio Output + Add Audio Group + Add Audio Input + Add Aux Send + eraser + MESS + DSSI + FST + + Add Synth + Bar + Jack + ALSA: + SYNTH: + JACK: + + + + + + Route + + + + channel="%1" + + + + + dest + + devtype="%1" + + + + + type="%1" + + + + + + + name="%1"/ + + source + Velocity Velocidad + <none> + + + channelMask="%1" + dssi_synth + ladspa_efx + channels="%1" + remch="%1" + mport="%1"/ @@ -339,14 +462,17 @@ haz click en una parte para silenciar/des-silenciar AboutBox + AboutBox + Version 2 pre-alpha + (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -355,10 +481,12 @@ Published under the GNU Public License + &Keep On Rocking! + Alt+K @@ -366,6 +494,7 @@ Published under the GNU Public License Appearance + MusE: load image MusE: carga imagen @@ -390,56 +519,73 @@ Published under the GNU Public License color de fondo de edición de onda + 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. + Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. + 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> + + Global opacity (opposite of transparency). - Select style sheet + + Standard - Qt style sheets (*.qss) + + Custom + + + + + Select style sheet - Global opaqueness (inverse of transparency). + + Qt style sheets (*.qss) @@ -447,25 +593,30 @@ Word-breaking but only with spaces. AppearanceDialogBase MusE: Appearance Settings - MusE: Configuración de apariencia + MusE: Configuración de apariencia + Apply Aplicar + Ok Aceptar + Cancel Cancelar + Arranger Arreglador + Parts Partes @@ -474,70 +625,90 @@ Word-breaking but only with spaces. mostrar frames + show names mostrar nombres + show events mostrar eventos + show Cakewalk Style mostrar al estilo de Cakewalk + + y-stretch + + + + Events Eventos + note on nota on + poly pressure presión polifónica + controller controlador + aftertouch aftertouch + pitch bend pitch bend + program change cambio de programa + special especial + Background picture Imagen de fondo bg - fondo + fondo select... - selecciona... + selecciona... + show snap grid muestra la rejilla de captura + Colors Colores + Items Objetos @@ -558,193 +729,282 @@ Word-breaking but only with spaces. colores dinámicos para actividad en el arreglador + Style/Fonts Estilo/Tipografía + QT Theme tema QT + Windows Ventanas + MusE MusE + Metal Metal + Norwegian Wood Madera Noruega + Platinum Platino + CDE CDE + Motif Motif + Motif Plus Motif Plus + Fonts Tipografía + Family Familia + Size Tamaño + Font 1 Tipografía 1 + Font 2 Tipografía 2 + Font 3 Tipografía 3 + Font 0 Tipografía 0 + + + + + + + Bold Negrita + + + + + + + Italic Cursiva + + + + + + + + + ... ... + + Color name: + + + + + Global opacity + + + + Font 4 Tipografía 4 + Font 5 Tipografía 5 + Palette + + MusE: Appearance settings + + + + + add + Agregar + + + + remove + quitar + + + add to palette + B + S S + H + V + G + R R + clear + Style Sheet: + Font 6 - - Global opaqueness - - Arranger + Cursor Cursor + Snap Snap + Len Longitud + NO No + TrackInfo Información de pista + Track Pista + Type Tipo + + midi song type tipo de canción midi + Pitch Tono + midi pitch tono midi + global midi pitch shift desplazamiento de tono midi + Tempo Tempo + + midi tempo tempo midi @@ -753,6 +1013,7 @@ Word-breaking but only with spaces. Port de Salida + Arranger Arreglador @@ -765,22 +1026,27 @@ Word-breaking but only with spaces. compás + GM GM + GS GS + XG XG + N N + R R @@ -789,22 +1055,27 @@ Word-breaking but only with spaces. A + M M + S S + C C + Ch Ch + T T @@ -829,42 +1100,62 @@ Word-breaking but only with spaces. Grupo D + Enable Recording Habilita captura + Mute/Off Indicator + Solo Indicator Indicador de solo + Track Type Tipo de pista + Track Name + Midi output channel number or audio channels + Midi output port or synth midi port + Time Lock Bloqueo de tiempo + + 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. @@ -872,28 +1163,33 @@ 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. @@ -901,19 +1197,34 @@ Right-click to show GUI. + Time lock + + Notation clef. Select this tracks notation clef. + + + + + song length - bars + Port Puerto - <unknown> + + Automation + + + + + Clef @@ -1115,46 +1426,57 @@ Right-click to show GUI. Grupo D + &Create &Crear + &View + Routing + Show Midi Tracks + Show Drum Tracks + Show Wave Tracks + Show Inputs + Show Outputs + Show Groups + Show Auxs + Show Synthesizers @@ -1162,18 +1484,22 @@ Right-click to show GUI. AudioStrip + panorama + aux send level + off apagado + Pan Bal @@ -1182,30 +1508,37 @@ Right-click to show GUI. S + 1/2 channel Canales 1/2 + Pre Pre + pre fader - post fader pre fader - port fader + dB dB + record grabar + mute silencio + record downmix downmix de captura @@ -1214,46 +1547,57 @@ Right-click to show GUI. monitorizar pre fader + iR + oR + output routing ruteado de entrada + Off + Read + Touch + Write + automation type Channel - Canal + Canal + + solo mode + input routing @@ -1262,55 +1606,62 @@ Right-click to show GUI. Awl::MidiVolEntry off - apagado - - - db - + apagado Awl::VolEntry off - apagado + apagado BigTime + MusE: Bigtime MusE: Big Time + format display + bar + beat + + tick + minute minuto + second segundo + + frame frame + subframe sub-frame @@ -1318,6 +1669,7 @@ Right-click to show GUI. ClipListEdit + MusE: Clip List Editor MusE: Editor de lista de clips @@ -1325,38 +1677,47 @@ Right-click to show GUI. ClipListEditorBase + MusE: ClipList MusE: Lista de Clips + Name Nombre + Refs Referencias + Start Inicio + Len Longitud + Data Datos + Clip Properties Propiedades del Clip + Pos: Posición: + Len: Longitud: @@ -1364,14 +1725,17 @@ Right-click to show GUI. CommentBase + Form1 Form1 + Track Comment Comentario de la pista + Track 1 Pista 1 @@ -1379,42 +1743,52 @@ Right-click to show GUI. ConfigMidiFileBase + &OK + &Cancel &Cancelar + 0 (single track) + 1 (multiple tracks) + Format: + 96 96 + 192 192 + 384 384 + Division: + Copyright: @@ -1423,46 +1797,57 @@ Right-click to show GUI. Habilita el formato extendido de smf + MusE: Config Midi File Import/Export + Import: + Split tracks into &parts + Alt+P + Split tracks into parts, or one single part + Export: + Enable extended smf format (currently not implemented) + Use &2-byte time signatures instead of standard 4 + Alt+2 + Save space by replacing note-offs with &zero velocity note-ons + Alt+Z @@ -1470,10 +1855,12 @@ Right-click to show GUI. CtrlPanel + select controller selecciona controlador + remove panel quitar panel @@ -1490,6 +1877,8 @@ Right-click to show GUI. x + + Velocity Velocidad @@ -1498,248 +1887,378 @@ Right-click to show GUI. Tono + add new ... + S S + X + manual adjust + double click on/off + off apagado + + + + Instrument-defined + + + + + + Add ... + + + + + Others + + + + + Edit instrument ... + + + + + Common Controls + + DeicsOnzeGui + Save configuration + + + + + + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + Load category dialog + Load set dialog + Save set dialog + New category + + Delete category + Load category + Save category + Load set + Save set + Delete set + New subcategory + + Delete subcategory + Load subcategory + Save subcategory + New preset + + Delete preset + Load preset + Save preset + No more category supported + You can not add more categories + + + Do you really want to delete %1 ? + + + &Yes + + + &No + + No category selected + + You must first select a category. + + + Replace or add + %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 ? + + + &Replace + + + &Add + + + Download error + There is no more free category slot. + Save category dialog + No more subcategory supported + You can not add more subcategories + + No subcategory selected + + You must first select a subcategory. + Load subcategory 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 ? + There is no more free subcategory slot. + Save subcategory dialog + No more preset supported + You can not add more presets + + + No preset selected + + + You must first select a preset. + Load preset 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 ? + There is no more free preset slot. + Save preset dialog + Browse set dialog + Browse image dialog @@ -1747,1234 +2266,449 @@ Right-click to show GUI. DeicsOnzeGuiBase - DeicsOnze - + Preset + Preselección - &Preset - + LFO + LFO - Program nuúmerous - + Speed + Velocidad - INITVOICE - + Delay + Delay - LBank - + Transpose + Transponer - Subcategory - + Detune + Desafinación - Bank nuúmerous - + Volume + Volumen - NONE - + On + Encendido - HBank - + Pitch + Tono - Category - + After Touch + After Touch - Prog - + Colors + Colores - Preset - Preselección + Text + Texto - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - + Channel + Canal - &Global - + Release + Relajación - Pitch Envelope - + Attack + Ataque + + + DidYouKnow - PL3 + + Did you know? - PL2 + + Don't show on startup - PL1 + + Next tip - PR1 - + + Close + Cerrar + + + DrumEdit - PR2 - + + Load Map + Carga Mapa - PR3 - + + Save Map + Guarda Mapa - Pitch modulation depth - + + &Edit + &Editar - LFO - LFO + + Cut + Cortar - LFO Sync - + + Copy + Copiar - Pitch modulation sensitivity - + + Paste + Pegar - Pitch Modulation Sensitivity - + + Delete Events + Borrar Eventos - LFO Delay - + + Select All + Seleccionar todo - LFO delay - + + Select None + Deseleccionar - LFO speed - + + Invert + Invertir - Amplitude modulation depth - + + Inside Loop + Bucle interior - Amplitude modulation sensitivity - + + Outside Loop + Bucle exterior - Amplitude Modulation Sensitivity - + + &Select + &Seleccionar - AMS - + + Step Record + Parar captura - LFO Waveform - + + Midi Input + Entrada MIDI - Pitch Modulation Depth - + + Add Controller View + Agregar Controlador - PMD - + + M + M - LFO Speed - + + Sound + Sonido - AMD - + + QNT + QNT - Speed - Velocidad + + E-Note + Nota-E - Delay - Delay + + Len + Longitud - PMS - + + A-Note + Nota-A - Modulation Matrix - + + Ch + Ch - <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> - + + Port + Puerto - Op4 Feedback - + + LV1 + VL1 - Feedback level of the operator 4 - + + LV2 + VL2 - Transpose - Transponer + + LV3 + VL3 - Op &1 - + + LV4 + VL4 - Scaling 1 - + + &File + &Fichero - LS1 - + + Load Drummap + Cargar mapa de percusión - RS1 - + + Store Drummap + Guardar mapa de percusión - Rate Scaling - + + ctrl + control - Attack Rate of the operator 1 - + drummaps + mapas de percusión - Level Scaling - + + Muse: Load Drum Map + MusE: Cargar mapa de percusión - Amplitude Envelope 1 - + + MusE: Store Drum Map + MusE: Guardar mapa de percusión - RR1 - + + &Functions + &Funciones - D1R1 + + Modify Velocity - D1L1 - + + + mute instrument + silenciar instrumento - D2R1 - + + + sound name + nombre del sonido - Release Rate - - - - 2° Decay Rate + + + volume percent - - 1° Decay Level - - - - 1° Decay Rate - - - - Attack Rate - - - - AR1 - - - - Detune, OSCWave, EGShift 1 - - - - DET1 - - - - Detune - Desafinación - - - EG Shift - - - - 96dB - - - - 48dB - - - - 24dB - - - - 12dB - - - - 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> - - - - Sensitivity 1 - - - - KVS1 - - - - Amplitude Modulation Enable - - - - AME1 - - - - Keyboard Velocity Sensitivity - - - - Key Velocity Sensitivity - - - - EBS1 - - - - EG Bias Sensitivity - - - - Eg Bias Sensitivity - - - - Frequency 1 - - - - Coarse 1 - - - - Coarse Ratio - - - - Fine 1 - - - - Fine Ratio - - - - Freq 1 - - - - Fixed Frequency - - - - Toggle Fix Frequency - - - - FIX - - - - OUT 1 - - - - Output Volume - - - - Volume - Volumen - - - Op &2 - - - - Amplitude Envelope 2 - - - - D1R2 - - - - D1L2 - - - - D2R2 - - - - RR2 - - - - AR2 - - - - Frequency 2 - - - - Coarse 2 - - - - Fine 2 - - - - Freq 2 - - - - Scaling 2 - - - - LS2 - - - - RS2 - - - - OUT 2 - - - - Detune, OSCWave, EGShift 2 - - - - DET2 - - - - Sensitivity 2 - - - - EBS2 - - - - KVS2 - - - - AME2 - - - - Op &3 - - - - Amplitude Envelope 3 - - - - D1R3 - - - - D1L3 - - - - D2R3 - - - - RR3 - - - - AR3 - - - - Scaling 3 - - - - LS3 - - - - RS3 - - - - OUT 3 - - - - Frequency 3 - - - - Coarse 3 - - - - Fine 3 - - - - Freq 3 - - - - Detune, OSCWave, EGShift 3 - - - - DET3 - - - - Sensitivity 3 - - - - EBS3 - - - - KVS3 - - - - AME3 - - - - Op &4 - - - - amplitude Envelope 4 - - - - AR4 - - - - D1R4 - - - - D1L4 - - - - D2R4 - - - - RR4 - - - - Frequency 4 - - - - Coarse 4 - - - - Fine 4 - - - - Freq 4 - - - - Scaling 4 - - - - LS4 - - - - RS4 - - - - OUT 4 - - - - Detune, OSCWave, EGShift 4 - - - - DET4 - - - - Sensitivity 4 - - - - EBS4 - - - - KVS4 - - - - AME4 - - - - &Func - - - - Delay Pan Depth - - - - Delay Pan LFO Freq - - - - Delay Ch Send Level - - - - Channel Chorus - - - - Delay Feedback - - - - Delay On/Off, Return Level - - - - On - Encendido - - - Delay Beat Ratio - - - - Delay BPM - - - - Foot Control - - - - Pitch Bend Range - - - - Pitch - Tono - - - Amplitude - - - - Modulation Wheel - - - - Breath Control - - - - Pitch Bias - - - - Envelope Bias - - - - After Touch - After Touch - - - Phony Mode - - - - POLY - - - - MONO - - - - Potamento - - - - Portamento Mode - - - - FINGER - - - - FULL - - - - PT - - - - Portamento Time - - - - C&horus - - - - Chorus Parameters - - - - Channel send level - - - - On/Off and Return level - - - - Select LADSPA plugin - - - - Change plugin - - - - &Reverb - - - - Reverb Parameters - - - - &Config - - - - Font Size - - - - Quality - - - - High - - - - Middle - - - - Low - - - - Ultra low - - - - Filter - - - - Save Mode (into the song) - - - - Save only the used presets - - - - Save the entire set - - - - Save the configuration - - - - Configuration File - - - - Save... - - - - Load... - - - - Save as default - - - - Colors - Colores - - - Text - Texto - - - Background - - - - Edit Text - - - - Edit Background - - - - Red - - - - Blue - - - - 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 - + + + + quantisation + cuantización - Panic! - - - - Number of Voices - - - - Number of voices - - - - Enable - - - - Channel - Canal + + + this input note triggers the sound + ensta nota de entrada dispara el sonido - Vol - + + + note length + longitud de nota - Channel Ctrl + + + this is the note which is played - Release - Relajación - - - Attack - Ataque - - - Brightness + + output channel (hold ctl to affect all rows) - Modulation - + + + output port + puerto de salida - Pan + + + shift + control key: draw velocity level 1 - - - DidYouKnow - Did you know? + + + control key: draw velocity level 2 - Don't show on startup + + + shift key: draw velocity level 3 - Next tip + + + draw velocity level 4 - 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 - - - Set fixed length + + output channel (ctl: affect all rows) - &Functions - &Funciones - - - Modify Velocity + + Reset GM Map - mute instrument - silenciar instrumento - - - sound name - nombre del sonido - - - volume percent + + Previous Part - quantisation - cuantización - - - this input note triggers the sound - ensta nota de entrada dispara el sonido - - - note length - longitud de nota - - - this is the note which is played + + Next Part - output channel (hold ctl to affect all rows) + + Re-order list - output port - puerto de salida - - - shift + control key: draw velocity level 1 + + Set Fixed Length - control key: draw velocity level 2 + + Crescendo/Decrescendo - shift key: draw velocity level 3 - + + Quantize + Cuantizar - draw velocity level 4 + + Erase Event - output channel (ctl: affect all rows) + + Move Notes - Reset GM Map + + Delete Overlaps - Previous Part + + &Plugins - Next Part + + Drum tools - &Plugins + + cursor tools - Drum tools + + Set step size for cursor edit + panic pánico + transport + Vol + Drum map + Reset the drum map with GM defaults? @@ -2982,14 +2716,17 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCAfterDialog + Time Position Posición de tiempo + Pressure Presión + MusE: Enter Channel Aftertouch MusE: Introduce el AfterTouch del canal @@ -3070,58 +2807,73 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCtrlBase + MusE: Edit Controller Event + Time Position Posición de tiempo + Available Controller: + Create New Controller + textLabel3 + Value Valor + Controller Controlador + H-Bank Banco-H + L-Bank Banco-L + Program + + off apagado + pushButton4 + &OK + &Cancel &Cancelar @@ -3129,10 +2881,12 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditEventDialog + Ok Aceptar + Cancel Cancelar @@ -3140,46 +2894,57 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditGainBase + MusE: Modify gain + Gain Ganancia + 200% 5 1/3' {200%?} + 100% 5 1/3' {100%?} + 0% 5 1/3' {0%?} + &Reset + Alt+R + &Apply &Aplicar + Alt+A + &Cancel &Cancelar + Alt+C @@ -3187,131 +2952,178 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditInstrument + + MusE: Create file failed + MusE: Write File failed MusE: La captura del archivo ha fallado + + + + MusE: + + The user instrument directory + + does not exist yet. Create it now? - (You can override with the environment variable MUSEINSTRUMENTS) + + + (You can change the user instruments directory at Settings->Global Settings->Midi) + + Unable to create user instrument directory + + MusE: Save Instrument Definition + + Instrument Definition (*.idf) + + MusE: Save instrument as + Enter a new unique instrument name: + The user instrument: + 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 + + already exists. + A controller number + + MusE MusE + + The current Instrument contains unsaved data Save Current Instrument? + + &Save &Guardar + + &Nosave &No Guardar + &Abort &Abortar @@ -3319,42 +3131,56 @@ Save Current Instrument? EditInstrumentBase + MusE: Instrument Editor + High Bank: + Low Bank: + Program: + + + &Delete &Borrar + + + Alt+D + Drum Percusión + GM GM + GS GS + XG XG @@ -3363,12 +3189,15 @@ Save Current Instrument? Controlador + This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. + + Properties Propiedades @@ -3381,50 +3210,64 @@ handled like normal controllers. Tipo + Control7 Control7 :-? + Control14 Control14 + RPN RPN + NRPN NRPN + Pitch Tono + Program + + H-Ctrl Control-H + + L-Ctrl Control-L + Min + Max + Name Nombre + Type Tipo @@ -3433,247 +3276,314 @@ handled like normal controllers. Sistema Exclusivo + Hex Entry: + &File + Tools Herramientas + New + &New &Nuevo + Ctrl+N + Open Abrir + &Open... &Abrir... + Ctrl+O + Save Guardar + &Save &Guardar + Ctrl+S + Save As Guardar como + Save &As... Guardar &Como... + Exit Salir + E&xit &Salir + Instrument Name: + Selected instrument name. + List of defined instruments. + Pa&tches + List of groups and patches. + Group/Patch + + + Name: Nombre: + + Group or patch name + Patch high bank number + Patch high bank number. --- means don't care. + --- dont care + Patch low bank number + Patch low bank number. --- means don't care. + --- + + Patch program number + Drum patch + If set, the patch is available only for drum channels. + GM patch + If set, the patch is available in a 'GM' or 'NO' midi song type. + GS patch + If set, the patch is available in a 'GS' or 'NO' midi song type. + XG patch + If set, the patch is available in an 'XG' or 'NO' midi song type. + Delete group or patch + New patch + New &Patch + Alt+P + New group + New &Group + Alt+G + Contro&ller + Common: + List of defined controllers + List of defined controllers. + Min + Max + Def + Midi controller name + Type: Tipo: + + Midi controller type + RPN14 + NRPN14 + + Midi controller number high byte + Midi controller number low byte (* means drum controller) + Midi controller number low byte. If low byte is * then the controller is a 'drum controller'. For drum tracks and @@ -3686,19 +3596,23 @@ Examples: The GS and XG instruments' + * 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. @@ -3721,38 +3635,52 @@ True range: Min: -8192 Max: 8191 (bias 0) + + Maximum value + Default: + L-Bank Banco-L + + + + + off apagado + Progr. Progr. + ??? ??? + H-Bank Banco-H + Default value. Off: No default. + Default (initial) value. Off means no default. If a default value is chosen, the value will be sent @@ -3771,47 +3699,59 @@ Caution! Watch out for controllers such as + off dont care apagado + Add common controller + &Add + Alt+A + Delete controller + Create a new controller + New &Controller + 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 @@ -3821,38 +3761,49 @@ Typically, set to 127/127, or an unused + Lo: + Null parameter number Low byte + S&ysEx + SysEx List: + New SysE&x + Alt+X + &Help A&yuda + + new item + + What's this? @@ -3860,18 +3811,22 @@ Typically, set to 127/127, or an unused 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 @@ -3910,34 +3865,42 @@ Typically, set to 127/127, or an unused EditNoteDialogBase + MusE: Enter Note MusE: Escribe Nota + OK Aceptar + Cancel Cancelar + Length: Longitud: + Time Position: Posición de tiempo + Pitch: Tono: + Velocity On: Velocidad On: + Velocity Off: Velocidad Off: @@ -3945,18 +3908,22 @@ Typically, set to 127/127, or an unused EditPAfterDialog + Time Position Posición de tiempo + Pitch Tono + Pressure Presión + MusE: Enter Poly Aftertouch Muse: Escribe el aftertouch polifónico @@ -3979,22 +3946,27 @@ Typically, set to 127/127, or an unused EditSysexDialogBase + MusE: Enter SysEx MusE: Introduce el sistema exclusivo + TimePosition: Posición de tiempo: + Comment: Comentario: + OK Aceptar + Cancel Cancelar @@ -4002,6 +3974,7 @@ Typically, set to 127/127, or an unused EditToolBar + Edit Tools Editar herramientas @@ -4009,54 +3982,67 @@ Typically, set to 127/127, or an unused EffectRack + effect rack rack de efectos + move up subir + move down bajar + remove quitar + bypass saltar + show gui mostrar gui + new nuevo + change cambiar + show native gui + save preset + MusE: Save Preset + Replace effect + Do you really want to replace the effect %1? @@ -4064,6 +4050,7 @@ Typically, set to 127/127, or an unused FLUIDGui + FLUID: open Soundfile @@ -4071,14 +4058,17 @@ Typically, set to 127/127, or an unused FLUIDGuiBase + Form1 Formulario1 + Soundfont Fuente de sonido + Load Cargar @@ -4086,98 +4076,123 @@ Typically, set to 127/127, or an unused FLUIDSynthGuiBase + FLUID Synth + Load Cargar + Delete Borrar + Dump Info + ID + Fontname + Chnl + Soundfont Fuente de sonido + Drum Chnl + + Level Nivel + Width Anchura + Damping Amortiguamiento + Room Size Tamaño sala + Reverb Reverberación + CHANNEL SETUP + Sine Seno + Triangle Triángulo + Type Tipo + Number Número + Speed Velocidad + Depth Profundidad + Chorus Coro ;-) + Gain Ganancia + LOADED SOUNDFONTS @@ -4189,27 +4204,33 @@ Typically, set to 127/127, or an unused Formulario1 + Global Global + User Usuario + Project Proyecto + only Songdata + fdialogbuttons + Songdata + Configuration @@ -4218,6 +4239,7 @@ Configuration FluidSynthGui + Choose soundfont @@ -4233,72 +4255,86 @@ Configuration GateTimeBase MusE: Modify Gate Time - MusE: Modifica el timpo de puerta + MusE: Modifica el timpo de puerta Range - Rango + Rango All Events - Todos los eventos + Todos los eventos Selected Events - Eventos seleccionados + Eventos seleccionados Looped Events - Eventos en bucle + Eventos en bucle Selected & Looped - Seleccionados y en bucle + Seleccionados y en bucle Values - Valores + Valores Rate: - Velocidad: + Velocidad: Offset: - Desplazamiento: + Desplazamiento: % - % + % OK - Aceptar + Aceptar Cancel - Cancelar + Cancelar + + + + GlobalSettingsConfig + + + Selects instruments directory + GlobalSettingsDialogBase + MusE: Global Settings MusE: Valores globales + Audio Audio + Mixer Mezclador + + dB dB + min. Meter Value valor mínimo del vumeter @@ -4307,22 +4343,31 @@ Configuration valor mínimo del desplazador + Midi MIDI + Ticks Ticks + + + 1024 1024 + + + 2048 2048 + 4096 4096 @@ -4331,74 +4376,116 @@ Configuration 8172 + Displayed Resolution (Ticks/Quarternote) Resolución mostrada (ticks/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 (Ticks/segundo) + GUI GUI + /sec /seg + GUI Refresh Rate Velocidad de refresco del GUI + + 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. + + + + &Apply &Aplicar + &Ok Ac&eptar + &Cancel &Cancelar @@ -4407,221 +4494,360 @@ Configuration Navegador de ayuda: + Application + Start Muse + start with last song + start with song + start song: + Views + + + + + y-pos + + + + show + + + + + x-pos + + + + height + + + + width + Big Time + Arranger Arreglador + Transport Transporte + + + + + Cur + + + + + set current values + start with template: default.med + show splash screen + Mixer A + Mixer B + show "Did you know?" dialog + Start song + min. Slider Val - Use Jack freewheel mode if possible. -(Speeds up bounce operations). + + Enable denormal protection - Enable denormal protection + + Enable output limiter - Enable output limiter + + External Waveditor + + + + + External Waveditor command - Enable in-place processing for VST plugins. -(Requires restart.) + + Note: External editor opened from the internal editor. - 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. + + Dummy Audio Driver (settings require restart) - External Waveditor + + Hz - External Waveditor command + + Period size (Frames per period): - Note: External editor opened from the internal editor. + + + 16 + 16 + + + + Try to use Jack Freewheel - Dummy Audio Driver (settings require restart) + + Speeds bounce operations - Preferred sample rate + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. - 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. + + VST in-place - Hz + + Enable VST in-place processing (restart required) - Actual rate used now (dummy or not): + + 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 - Period size (Frames per period): + + Minimum audio controller process period (samples). + - 16 - 16 + + 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) + + Instruments Directory + + + + Use old-style stop shortcut: + Move single armed track with selection + On Launch + Behavior + + Header + + + Track Info Columns + + + IIWUGuiBase @@ -4723,86 +4949,122 @@ Shorter periods are desirable. 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 + Insert Tempo + Insert Signature + + Insert Key + + + + Edit Positon + Edit Value + Delete Event + Master tools + Edit tools + + Key + + + + + new key + + + + 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! @@ -4810,18 +5072,22 @@ Shorter periods are desirable. ListEdit + &Edit &Editar + Cut Cortar + Copy Copiar + Paste Pegar @@ -4834,6 +5100,7 @@ Shorter periods are desirable. Insertar herramientas + Delete Events Borrar eventos @@ -4842,6 +5109,7 @@ Shorter periods are desirable. Insertar nota + insert Note insertar Nota @@ -4850,6 +5118,7 @@ Shorter periods are desirable. Insertar sistema exclusivo + insert SysEx insertar sistema exclusivo @@ -4858,6 +5127,7 @@ Shorter periods are desirable. Insertar controlador + insert Ctrl insertar controlador @@ -4866,6 +5136,7 @@ Shorter periods are desirable. Insertar Meta + insert Meta insertar Meta @@ -4882,6 +5153,7 @@ Shorter periods are desirable. Insertar AfterTouch de canal + insert Channel Aftertouch insertar AfterTouch de canal @@ -4890,14 +5162,17 @@ Shorter periods are desirable. Insertar AfterTouch de tecla + insert Poly Aftertouch insertar AfterTouch Polifónico + Tick Tick + Bar Compás @@ -4906,38 +5181,47 @@ Shorter periods are desirable. Tip + Ch Cn + Val A Val A + Val B Val B + Val C Val C + Len Lon + Comment Comentario + List tools + Insert tools + Type Tipo @@ -4945,22 +5229,27 @@ Shorter periods are desirable. MITTransposeBase + MusE: Midi Input Plugin: Transpose MusE: Plugin de entrada MIDI : Transposición + On Encendido + TriggerKey Tecla de salto + Transpose: Trasponer: + +0 +0 @@ -4980,10 +5269,12 @@ Shorter periods are desirable. MusE: Tabla de puertos MIDI + Port Puerto + GUI GUI @@ -4992,14 +5283,17 @@ Shorter periods are desirable. Grabar + Instrument Instrumento + Device Name Nombre de dispositivo + State Estado @@ -5008,158 +5302,238 @@ Shorter periods are desirable. desconocido + I + O + MusE: bad device name + + + 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? + + + + please choose a unique device name + + in + + out + Show first aliases + Show second aliases + + + Toggle all + + + + + + Change all tracks now + + + + Create + device + + Port Number Número de puerto + 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 - Connect these to new midi tracks + + Auto-connect these channels to new midi tracks + + + + + Auto-connect new midi tracks to these channels + + + + + Auto-connect new midi tracks to this channel + + + + + 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 (first listed only) + + Connect new midi tracks to this channel, on this port. + 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 Instrumento conectado al puerto + Connections from Jack Midi output ports + Connections to Jack Midi input ports - 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 - - - - 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) - - - + State: result of opening the device Estado: resultado de abrir el puerto + In routes + Out routes + Def in ch + Def out ch + <unknown> + + <none> @@ -5167,41 +5541,55 @@ NOTE: Currently only one output port and channel supported (first found) 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 ala marca izquierda + Play Reproducir + + + Insert rest (step rec) + + MTScale + bar scale escala de compases @@ -5209,30 +5597,37 @@ NOTE: Currently only one output port and channel supported (first found) MarkerView + 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 @@ -5241,6 +5636,7 @@ NOTE: Currently only one output port and channel supported (first found)Agregar marcador + delete marker borrar marcador @@ -5253,14 +5649,17 @@ NOTE: Currently only one output port and channel supported (first found)&Archivo + &Edit &Editar + marker-tools + edit tools editar herramientas @@ -5268,30 +5667,37 @@ NOTE: Currently only one output port and channel supported (first found) MasterEdit + Cursor Cursor + Snap Snap + time at cursor position tiempo en la posición del cursor + 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 @@ -5300,6 +5706,7 @@ NOTE: Currently only one output port and channel supported (first found)Maestro + MusE: Mastertrack Muse: Pista Maestra @@ -5316,6 +5723,7 @@ NOTE: Currently only one output port and channel supported (first found)usar pista maestra + Info Info @@ -5324,18 +5732,22 @@ NOTE: Currently only one output port and channel supported (first found)Apagado + Enable + Enable usage of master track + Master tools + Enable master @@ -5343,114 +5755,142 @@ NOTE: Currently only one output port and channel supported (first found) MetronomeConfigBase + MusE: Metronome Config MusE: Configuración del metrónomo + Metronome Metrónomo + Audio Beep Bip de audio + MIDI Click Click 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... + 50 5 1/3' {50?} + % Audio volume + Hint: Enable metronome in Transportpanel + Alt+A + Alt+O + Alt+C @@ -5476,8 +5916,9 @@ NOTE: Currently only one output port and channel supported (first found) MidiControllerEditDialogBase + MusE: Define Midi Controller - MusE: Define controlador MIDI + MusE: Define controlador MIDI replace controller set @@ -5492,68 +5933,143 @@ NOTE: Currently only one output port and channel supported (first found)guardar conjunto de controladores como + Name - Nombre + Nombre + Type - Tipo + Tipo + + H-Ctrl - Control-H + Control-H + + L-Ctrl - Control-L + Control-L + Min Val - Valor mínimo + Valor mínimo + Max Val - Valor mínimo + Valor mínimo + list of defined controllers - lista de controladores definidos + lista de controladores definidos + This is the MusE list of defined controllers. - Esta es la lista de controladores definidos por MusE. + Esta es la lista de controladores definidos por MusE. + + + + Managed Controller for Port + + + + + Channel + Canal + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + Properties - Propiedades + Propiedades + Name - Nombre + Nombre + Max Value - Valor mínimo + Valor mínimo + + + + Program + + + + + Midi Controller Number High Byte + + + + + Midi Controller Number Low Byte + + + + + Range + Rango + Min Value - Valor mínimo + Valor mínimo + + + + &Add + + + + + Alt+A + + + + + A&pply + + + Predefined Controller: + + + + Control7 - Control7 :-? + Control7 :-? + Control14 - Control14 + Control14 + RPN - RPN + RPN + NRPN - NRPN + NRPN XG-SysEx @@ -5564,42 +6080,60 @@ NOTE: Currently only one output port and channel supported (first found)Sistema Exclusivo + Type - Tipo + Tipo &New &Nuevo + create new entry - crear entrada nueva + 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 + pulsando el botón se creará una nueva clase de controladores en la lista de MusE. + &Delete - &Borrar + &Borrar + delete selected entry - borra la clase seleccionada + borra la clase seleccionada + &OK - &Aceptar + &Aceptar + &Cancel - &Cancelar + &Cancelar + + + + RPN14 + + + + + NRPN14 + + Pitch - Tono + Tono @@ -5628,114 +6162,149 @@ clase de controladores en la lista de MusE. 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 Caontrolador + + Program Change Cambio de programa + + After Touch After Touch + + Pitch Bend Rueda de bend + + 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 @@ -5743,6 +6312,8 @@ clase de controladores en la lista de MusE. MidiInputTransformDialog + + New Nueva @@ -5750,214 +6321,334 @@ clase de controladores en la lista de MusE. MidiInputTransformDialogBase + MusE: Midi Input Transformator MusE: Transformador de entrada MIDI + Filter Filtrar + 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 @@ -6067,50 +6758,64 @@ clase de controladores en la lista de MusE. MidiStrip + VariationSend + Var Var + ReverbSend + Rev Rev + ChorusSend + Cho Cho + + + off apagado + dB dB + Pan/Balance + Pan Bal + record grabar + mute silencio @@ -6119,26 +6824,33 @@ clase de controladores en la lista de MusE. monitorizar pre fader + + double click on/off + solo mode + iR + input routing + oR + output routing ruteado de entrada @@ -6146,111 +6858,142 @@ clase de controladores en la lista de MusE. 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 + 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, @@ -6260,6 +7003,7 @@ 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 @@ -6270,30 +7014,36 @@ This means you may have several master + 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 @@ -6303,103 +7053,128 @@ Note: It may be impossible to rewind fast + Port Puerto + Device Name Nombre de dispositivo + c + k + r + m m + t + type + rid + rc + rr + rm + rt + rw + tid + tc + tr + tm + tt + MusE MusE + Settings have changed Apply sync settings? + &Apply &Aplicar + &No + &Abort &Abortar + <none> @@ -6407,70 +7182,87 @@ Apply sync settings? 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 @@ -6539,39 +7331,48 @@ Apply sync settings? todo + MTC MTC + Type: Tipo: + Offset: Desplazamiento: + 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. @@ -6581,14 +7382,17 @@ 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. @@ -6597,14 +7401,17 @@ Enabled inputs in the list will + 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 @@ -6612,10 +7419,12 @@ Enabled inputs in the list will + ms + Send sync delay @@ -6623,10 +7432,12 @@ Enabled inputs in the list will MidiTrackInfoBase + MusE: TrackInfo MusE: Información de pista + output channel canal de salida @@ -6639,6 +7450,8 @@ Enabled inputs in the list will Información de Pista + + % % @@ -6647,10 +7460,23 @@ Enabled inputs in the list will Nombre de Pista + output port puerto de salida + + iR + + + + + + + + + + off apagado @@ -6675,6 +7501,7 @@ Enabled inputs in the list will selecciona el grupo de instrumento + Transp. Transposición @@ -6683,26 +7510,47 @@ Enabled inputs in the list will Volumen + Channel Info Información de Canal + + Rec: + + + + + Prog + + + + + Vol + + + + Pan Balance + Delay Delay + H-Bank Banco-H + Compr. Compr. + L-Bank Banco-L @@ -6711,10 +7559,12 @@ Enabled inputs in the list will Progr. + Velocity Velocidad + Length Longitud @@ -6750,108 +7600,119 @@ Puedes especificar más de un canal para grabar: Grabar + all midi events are sent to this output channel + Out ch + input routing Inputs - Entradas + Entradas + output routing ruteado de entrada + 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> - Record: - - - + Add all settings to song + All Todo + 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 - Prog. - - - + Volume. Double-click on/off. + Add vol setting to song - Vol. - - - + + Change stereo position. Double-click on/off. + Add pan setting to song @@ -6859,230 +7720,345 @@ Puedes especificar más de un canal para grabar: 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 Longitud + Position Posición + Filter Filtro + All Todo + + + + + Equal Igual + + + + + Unequal Diferente + + + + Ignore Ignora + + + + Higher Mayor + + + + Lower Menor + + + + Inside Entre + + + + Outside Fuera + Bar Range Rango de compases + Preset Preselección + Name: Nombre: + Comment: Comentario: + Range Rango + process all events procesar todos los eventos + selected tracks seleccionar pistas + inside loop dentro de bucle + Function Función + Select Seleccionar + Quantize Cuantizar + Delete Borrar + Transform Transformar + Insert Insertar + Copy Copiar + Extract Extraer + Quantize Value Cuantizar valor @@ -7090,6 +8066,8 @@ Puedes especificar más de un canal para grabar: MidiTransformerDialog + + New Nueva @@ -7097,6 +8075,7 @@ Puedes especificar más de un canal para grabar: MixdownFileDialog + Wave Files (*.wav);;All Files (*) Archivos de onda (*.wav);;Todos los archivos(*) @@ -7104,50 +8083,62 @@ Puedes especificar más de un canal para grabar: MixdownFileDialogBase + MusE: Set Mixdown Wavefile MusE: Selecciona el archivo de Masterización + &OK &Aceptar + &Cancel &Cancelar + File Path Directorio del archivo + Channel Canal + Stereo Estéreo + Mono Mono + 5.1 5.1 + wav,16 Bit wav, 16 bits + wav, 24 Bit wav, 24 bits + wav, 32 Bit (float) wav, 32 bits + Format Formato @@ -7190,14 +8181,17 @@ Puedes especificar más de un canal para grabar: MusE + &File &Archivo + Open &Recent Abrir &Recientes + Save &As Guardar c&omo @@ -7206,34 +8200,43 @@ Puedes especificar más de un canal para grabar: Configurar &Impresión + Import Midifile Importar archivo MIDI + Export Midifile Exportar archivo MIDI + + Import Wave File Importar archivo de audio + &Quit &Salir + &Edit &Editar + C&ut C&ortar + &Copy &Copiar + &Paste &Pegar @@ -7242,134 +8245,213 @@ Puedes especificar más de un canal para grabar: Borrar pista + Add Track Agregar Pista + Select &All Seleccion&ar Todo + &Deselect All &Deseleccionar Todo + Invert &Selection Invertir &Selección + &Inside Loop &Interior de bucle + &Outside Loop &Exterior de Bucle + All &Parts on Track Todas las &Partes de la pista + Select Seleccionar + Drums Percusión + + List Lista + Graphic Gráfico + Mastertrack Pista Maestra - Midi &Transform - &Transformación MIDI + + Midi &Transform + &Transformación MIDI + + + + Modify Gate Time + Modificar el tiempo de puerta + + + + Modify Velocity + Modificar Velocidad + + + + Crescendo + Crescendo + + + + Transpose + Transponer + + + + Find unused wave files + + + + + &Insert Empty Measure + + + + + all parts in one staff + + + + + one staff per part + + + + + New score window + - Modify Gate Time - Modificar el tiempo de puerta + + Song Info + - Modify Velocity - Modificar Velocidad + + Bigtime Window + - Crescendo - Crescendo + + Local Off + - Transpose - Transponer + + &MusE Homepage + + Thin Out Adelgazar? (Thin Out) + Erase Event Borrar Evento + Note Shift Desplazamiento de nota + Move Clock Mover reloj + Copy Measure Copiar compás + Erase Measure Vaciar compás + Delete Measure Borrar compás + Create Measure Crear compás + Mix Track Mezclar pista + Midi MIDI + &Structure E&structura + Global Cut Corte global + Global Insert Inserción Global + Global Split Partición Global + Copy Range Copiar Rango + Cut Events Cortar eventos @@ -7378,22 +8460,26 @@ Puedes especificar más de un canal para grabar: &Mostrar + Transport Panel Panel de transporte Bigtime window - ventana BigTime + ventana BigTime - Don't Follow Song + + Don't Follow Song no sigas la canción + Follow Page sigue la página + Follow Continuous sigue contínuamente @@ -7402,18 +8488,22 @@ Puedes especificar más de un canal para grabar: &Configuración + Global Settings Selecciones Globales + Follow Song seguir canción + Metronome Metrónomo + Midi Sync Sincronización MIDI @@ -7422,6 +8512,7 @@ Puedes especificar más de un canal para grabar: Configuración de archivos MIDI + Appearance Settings Selecciones de apariencia @@ -7442,14 +8533,17 @@ Puedes especificar más de un canal para grabar: Guardar configuración + Midi Input Transform Transformación de entrada MIDI + Midi Input Filter Filtrado de entrada MIDI + Midi Remote Control Control remoto MIDI @@ -7458,6 +8552,7 @@ Puedes especificar más de un canal para grabar: generador aleatorio de ritmos + &Midi &MIDI @@ -7470,22 +8565,26 @@ Puedes especificar más de un canal para grabar: Define Controlador + Input Plugins Plugins e entrada + Reset Instr. Reinicializa Instrumento + Init Instr. Inicializa Instruemnto local off - apagado local + apagado local + &Audio &Audio @@ -7494,14 +8593,17 @@ Puedes especificar más de un canal para grabar: Audio + Cliplist Lista de Clips + Bounce to Track Rebotar a pista + Bounce to File Rebotar a Archivo @@ -7510,6 +8612,7 @@ Puedes especificar más de un canal para grabar: Rebotar + &Help A&yuda @@ -7530,16 +8633,21 @@ Puedes especificar más de un canal para grabar: Que es esto + MusE: load project MusE: Carga proyecto + The current Project contains unsaved data Save Current Project? El proyecto actual contiene datos no guardados Guardamos el proyecto actual? + + + &Save &Guardar @@ -7548,26 +8656,35 @@ Guardamos el proyecto actual? &No Guardar + + &Abort &Abortar + + MusE: Save As MusE: Guardar como + MusE: Import Midi MusE: Importar MIDI + MusE: Export Midi MusE: Exportar MIDI + + Nothing to edit Nada para editar + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -7580,10 +8697,12 @@ Guardar el proyecto actual? S&obre escribir + no help found at: no se ha encontrado ayuda en: + MusE: Open Help MusE: Abre ayuda @@ -7600,6 +8719,7 @@ Guardar el proyecto actual? deshacer + Und&o &Deshacer @@ -7608,18 +8728,22 @@ Guardar el proyecto actual? rehacer + Re&do &Rehacer + undo last change to song deshace el ltimo cambio en la canción + redo last undo rehace el ltimo deshacer + Transport Transporte @@ -7628,6 +8752,7 @@ Guardar el proyecto actual? bucle + Loop Bucle @@ -7636,6 +8761,7 @@ Guardar el proyecto actual? pinchar + Punchin Pinchar @@ -7644,6 +8770,7 @@ Guardar el proyecto actual? fin pinchado + Punchout Fin pinchado @@ -7652,6 +8779,7 @@ Guardar el proyecto actual? empezar + Start Empezar @@ -7660,6 +8788,7 @@ Guardar el proyecto actual? retroceder + Rewind Retroceder @@ -7668,6 +8797,7 @@ Guardar el proyecto actual? avanzar + Forward Avanzar @@ -7676,6 +8806,7 @@ Guardar el proyecto actual? parar + Stop Parar @@ -7684,6 +8815,7 @@ Guardar el proyecto actual? reproducir + Play Reproducir @@ -7692,6 +8824,7 @@ Guardar el proyecto actual? grabar + Record Grabar @@ -7700,6 +8833,8 @@ Guardar el proyecto actual? pánico + + Panic Pánico @@ -7708,6 +8843,7 @@ Guardar el proyecto actual? nuevo + &New &Nuevo @@ -7716,6 +8852,7 @@ Guardar el proyecto actual? abrir + &Open &Abrir @@ -7728,6 +8865,7 @@ Guardar el proyecto actual? pianola + Pianoroll Pianola @@ -7736,8 +8874,9 @@ Guardar el proyecto actual? partitura + Score - Partitura + Partitura marker @@ -7748,6 +8887,7 @@ Guardar el proyecto actual? Marcador + File Buttons Botones de Archivo @@ -7760,6 +8900,7 @@ Guardar el proyecto actual? ninguno + MusE: Write File failed MusE: La captura del archivo ha fallado @@ -7768,10 +8909,14 @@ Guardar el proyecto actual? Muse: Acerca de + + + MusE: Song: MusE: Canción: + reading midifile leyendo archivo midi @@ -7785,17 +8930,22 @@ falló MusE: Copy Range - MusE: Copiar Rango + MusE: Copiar Rango not implemented - no implementado + no implementado MusE: Cut Events - MusE: Cortar Eventos + MusE: Cortar Eventos + + + + + MusE: Bounce to Track MusE: Rebotar a la pista @@ -7814,272 +8964,327 @@ selecciona una pista de audio como destino no hay pista de destino seleccionada + Delete Selected Tracks - View - - - + Edit Instrument + Restart Audio - Automation - - - + Mixer Automation + Take Snapshot + Clear Automation Data - Settings - - - + Configure Shortcuts + Midi Ports / Soft Synth + &Manual - &MusE homepage - - - + &Report Bug... + &About MusE + Cannot read template + File open error + File read error + MusE: load template - MusE: Bounce - - - - set left/right marker for bounce range - - - + + MusE: Bounce to File + Add midi file to current project? + &Add to Project + &Replace + failed: falló + + 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. + Import Part + &Insert + Paste c&lone + Paste to &track + Paste clone to trac&k - &Insert empty measure - - - + Wave Audio - Song info - - - + Mixer A + Mixer B + Marker View + &Plugins + Rhythm Generator + Midi File Import/Export + + &View + + + + + A&utomation + + + + + Se&ttings + + + + Unknown File Format: + + &Skip + + &Cancel + &Cancelar + + + + + New + + + + 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 + Select one audio output track + Import part is only valid for midi and wave tracks! + MusE: load part + No track selected for import + 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 + 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 + Unable to launch help + For some reason MusE has to launch the default browser on your machine. @@ -8088,26 +9293,32 @@ browser on your machine. NoteInfo + Start Inicio + Len Longitud + Pitch Tono + Velo On Velocidad On + Velo Off Velocidad Off + Note Info Información de nota @@ -8115,6 +9326,7 @@ browser on your machine. OrganGuiBase + MusE: Organ MusE: órgano @@ -8135,54 +9347,67 @@ browser on your machine. guardar lista de preselecciones + O-1 0-1 + Oscillator Oscilador + Brass Metales + Reed Reed + Flute Flauta + Drawbars Drawbars + 16' 16' + 4' 4' + 2 2/3' 2 2/3' + 2' 2' + 8' 8' + 5 1/3' 5 1/3' + Envelope Lo Envolvente Lo @@ -8203,34 +9428,52 @@ browser on your machine. Relajación (ms) + Envelope Hi Envolvente Hi + + Release Relajación + + Sustain Sostenido + + Decay Decaimiento + + Attack Ataque + + + + + + ms + + cB + Velocity Velocidad @@ -8341,32 +9584,38 @@ browser on your machine. PartCanvas + C&ut C&ortar + &Copy &Copiar + rename renombrar + delete borrar + split partir + glue pegar pianoroll - pianola + pianola score @@ -8374,33 +9623,46 @@ browser on your machine. list - lista + lista drums - percusión + percusión + Cannot copy/move/clone to different Track-Type No puedo copiar/mover/clonar a un tipo diferente de pista + color color + de-clone des-clonar + + + + save part to disk + + + + wave edit editar onda + Cannot paste: multiple tracks selected No puedo pegar: mtilpes pistas seleccionadas + Cannot paste: no track selected No puedo pegar: No hay pista seleccionada @@ -8413,63 +9675,73 @@ browser on your machine. No puedo pegar audio en una pista MIDI + Cannot paste: wrong data type No puedo pegar: Tipo de datos equivocado + Can only paste to midi/drum track + Can only paste to wave track + s&elect + clones - export - - - + file info + MusE: save part + Part name + Files + out of + parts + part + could not be pasted. Likely the selected track is the wrong type. + Can only paste to midi or wave track @@ -8491,6 +9763,7 @@ Likely the selected track is the wrong type. PianoRoll + &Edit &Editar @@ -8531,6 +9804,7 @@ Likely the selected track is the wrong type. Fuera del bucle + &Select &Seleccionar @@ -8547,6 +9821,7 @@ Likely the selected track is the wrong type. colores de velocidad + &Config &Configurar @@ -8555,182 +9830,241 @@ Likely the selected track is the wrong type. color de eventos + &Functions &Funciones Over Quantize - Sobre cuantizar + Sobre cuantizar Note On Quantize - Cuantizar inicio de nota + Cuantizar inicio de nota Note On/Off Quantize - Cuantizar inicio y final de nota + Cuantizar inicio y final de nota Iterative Quantize - Cuantización iterativa + Cuantización iterativa Pianoroll Tools Herramientas de pianola + Step Record captura por pasos + Midi Input Entrada MIDI + Play Events Reproducir eventos + Add Controller View Añade vista de controladores Config Quant... - Configura cuantización... + Configura cuantización... Modify Gate Time - Modifica el tiempo de puerta + Modifica el tiempo de puerta + Modify Velocity Modifica la velocidad Crescendo - Crescendo + Crescendo + Transpose Transponer Thin Out - Adelgazar + Adelgazar Erase Event - Borrar evento + Borrar evento Note Shift - Desplazar nota + Desplazar nota Move Clock - Mover reloj + Mover reloj Copy Measure - Copiar compás + Copiar compás Erase Measure - Vaciar compás + Vaciar compás Delete Measure - Borrar compás + Borrar compás Create Measure - Crear compás + Crear compás + ctrl control + C&ut C&ortar + &Copy &Copiar + &Paste &Pegar + Delete &Events + Select &All Seleccion&ar Todo + &Deselect All &Deseleccionar Todo + Invert &Selection Invertir &Selección + &Inside Loop &Interior de bucle + &Outside Loop &Exterior de Bucle + &Previous Part + &Next Part - &Event color + + &Event Color - &Blue + + Quantize + Cuantizar + + + + Modify Note Length - &Pitch colors + + Crescendo/Decrescendo - &Velocity colors + + Erase Events + + + + + Move Notes + + + + + Set Fixed Length + + + + + Delete Overlaps + + + + + Legato + + + + + &Blue - Set fixed length + + &Pitch colors - Delete overlaps + + &Velocity colors + &Plugins + Pianoroll tools + panic pánico + transport @@ -8738,82 +10072,102 @@ Likely the selected track is the wrong type. PluginDialog + Ok Aceptar + Cancel Cancelar + MusE: select plugin MusE: Selecciona el plugin + Lib Lib + Label Etiqueta + Name Nombre + AI AI + AO AO + CI CI + CO CO + IP IP + id id + Maker Fabricante + Copyright Copyright + Stereo Estéreo + Mono Mono + Mono and Stereo + 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. + Search in 'Label' and 'Name': @@ -8821,30 +10175,38 @@ Likely the selected track is the wrong type. PluginGui + + bypass plugin saltar plugin + MusE: load preset MusE: Cargar plantilla + MusE: save preset MusE: Guardar plantilla + File Buttons Archivar botones + Load Preset Cargar plantilla + Save Preset Guardar plantilla + Error reading preset. Might not be right type for this plugin @@ -9012,6 +10374,7 @@ actualmente sin uso QObject + Other @@ -9027,26 +10390,34 @@ actualmente sin uso Velocidad + + Cannot convert sysex string No puedo convertir el paquete de sistema exclusivo + + Hex String too long (2048 bytes limit) Cadena hexadecimal demasiado larga (límite de 2048 bytes) + generic midi midi genánico + new nuevo + create peakfile for crear archivo de picos para + MusE: get file name MusE: obtener el nombre de archivo @@ -9073,14 +10444,17 @@ no existe Cancelar + MusE: create directory MusE: crear directorio + creating dir failed fallóla creación de directorio + File El archivo @@ -9093,6 +10467,7 @@ exists existe + MusE: write MusE: escribe @@ -9105,21 +10480,26 @@ existe Salir + Open File Abrir archivo + failed: falló + MusE: Open File MusE: Abrir archivo + + None Ninguno @@ -9140,21 +10520,25 @@ falló Desconocido + No selection. Ignoring + The directory + does not exist. Create it? + exists. Overwrite? @@ -9164,23 +10548,23 @@ exists. Overwrite? QuantConfig Config Quantize - Configurar Cuantización + Configurar Cuantización Strength - Fuerza + Fuerza Don´t Quantize - No cuantizes + No cuantizes Quant Len - Cuantizar la longitud + Cuantizar la longitud MusE: Config Quantize - MusE: Configurar Cuantización + MusE: Configurar Cuantización @@ -9213,353 +10597,501 @@ exists. Overwrite? RhythmBase + MusE: Random Rhythm Generator - MusE: Generador de rítmo aleatorio + MusE: Generador de rítmo aleatorio + Instrument Properties - Propiedades del instrumento + Propiedades del instrumento + + counts/bar - cuentar por barra + cuentar por barra + steps/count - pasos por cuenta + pasos por cuenta + + # bars - n barras + n barras + test - probar + probar + + contrib - contribuir + contribuir + randomize - aleartorizar + aleartorizar + Group 1 - Grupo 1 + Grupo 1 + Group 2 - Grupo 2 + Grupo 2 + Group 3 - Grupo 3 + Grupo 3 + Group 4 - Grupo 4 + Grupo 4 + Group 5 - Grupo 5 + Grupo 5 + + listen - escuchar + escuchar + Instrument - Instrumento + Instrumento + + Group - Grupo + Grupo + + &New - &Nuevo + &Nuevo + create new entry - crear nueva entrada + crear nueva entrada + 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 + pulsando el botón Nuevo creas una entrada nueva en la lista de controles definidos por MusE + &Delete - &Borrar + &Borrar + delete selected entry - borra la entrada seleccionada + borra la entrada seleccionada + Up - Arriba + Arriba + Down - Abajo + Abajo + Instrument - Instrumento + Instrumento + steps/count - pasos por cuenta + pasos por cuenta + list of defined controllers - Lista de controladores definidos + Lista de controladores definidos + This is the MusE list of defined controllers. - Esta es la lista de controladores definidos en MusE. + Esta es la lista de controladores definidos en MusE. + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + + + + &File - &Archivo + &Archivo + &Edit - &Editar + &Editar + &Help - A&yuda + A&yuda + Tools - Herramientas + Herramientas + New - Nuevo + Nuevo + + Ctrl+N + + + + Open - Abrir + Abrir + &Open... - &Abrir... + &Abrir... + + + + Ctrl+O + + Save - Guardar + Guardar + &Save - &Guardar + &Guardar + + + + Ctrl+S + + Save As - Guardar como + Guardar como + Save &As... - Guardar &Como... + Guardar &Como... + Print - Imprimir + Imprimir + &Print... - &Imprimir... + &Imprimir... + + Ctrl+P + + + + Exit - Salir + Salir + E&xit - &Salir + &Salir + Undo - Deshacer + Deshacer + &Undo - &Deshacer + &Deshacer + + + + Ctrl+Z + + Redo - Rehacer + Rehacer + &Redo - &Rehacer + &Rehacer + + + + Ctrl+Y + + Cut - Cortar + Cortar + &Cut - &Cortar + &Cortar + + Ctrl+X + + + + Copy - Copiar + Copiar + C&opy - C&opiar + C&opiar + + + + Ctrl+C + + Paste - Pegar + Pegar + &Paste - &Pegar + &Pegar + + + + Ctrl+V + + Find - Buscar + Buscar + &Find... - &Buscar... + &Buscar... + + + + Ctrl+F + + Contents - Contenidos + Contenidos + &Contents... - &Contenidos... + &Contenidos... + Index - índice + índice + &Index... - &Indice... + &Indice... + About - Acerca de + Acerca de + &About... - &Acerca de ... + &Acerca de ... RhythmGenerator + Form3 - Formulario3 + Formulario3 + Instrument Settings: - Configuración de instrumento: + Configuración de instrumento: + Instrument - Instrumento + Instrumento + Hi-Hat - Charli + Charli + add - Agregar + Agregar + delete - borrar + borrar + steps/count - pasos/cuenta + pasos/cuenta + count/bar - cuentas/compás + cuentas/compás + # bars - n compases + n compases + Group Settings: - Configuración de grupo: + Configuración de grupo: + Group - Grupo + Grupo + Group 1 - Grupo 1 + Grupo 1 + Group 2 - Grupo 2 + Grupo 2 + Group 3 - Grupo 3 + Grupo 3 + Group 4 - Grupo 4 + Grupo 4 + Group 5 - Grupo 5 + Grupo 5 + contrib - contrib + contrib + listen - escuchar + escuchar + Randomize - aleatorizar + aleatorizar + Rhythm Style: - Estilo de ritmo: + Estilo de ritmo: + Clear - Límpio + Límpio + Open... - Abrir... + Abrir... + Save - Guardar + Guardar + Save as... - Guardar como... + Guardar como... + Generate - Generar + Generar + Close - Cerrar + Cerrar @@ -9569,46 +11101,57 @@ en la lista de controles definidos por MusE RouteDialogBase + MusE: Routing + Add Route + Source: + Destination: + Connect + connect source to destination + Current Routes + Source + Destination + Remove + remove selected route @@ -9616,65 +11159,56 @@ en la lista de controles definidos por MusE SS_PluginChooserBase + SimpleDrums - Ladspa Plugin Chooser + Name Nombre + Label Etiqueta + Inports + Outports + Creator + &Cancel &Cancelar + Alt+C + &OK + Alt+O - - SS_PluginFront - - Clear and unload effect - - - - Load effect - - - - Toggle display of effect parameters - - - - Turn effect on/off - - - Score @@ -9832,14 +11366,17 @@ en la lista de controles definidos por MusE ScrollScale + next page página siguiente + previous page página anterior + current page number nuúmero de página actual @@ -9847,18 +11384,22 @@ en la lista de controles definidos por MusE ShortcutCaptureDialog + Ok Aceptar + Cancel Cancelar + Shortcut conflicts with + Undefined @@ -9866,30 +11407,38 @@ en la lista de controles definidos por MusE ShortcutCaptureDialogBase + Enter shortcut sequence + Press keys to enter shortcut sequence! + Old shortcut: + + Undefined + New shortcut: + OK Aceptar + Cancel Cancelar @@ -9897,42 +11446,52 @@ en la lista de controles definidos por MusE ShortcutConfigBase + Configure Keyboard Shortcuts + Shortcut Category + Description + Shortcut + &Clear + Alt+C + &Define + Alt+D + &Apply &Aplicar + Alt+A @@ -9940,6 +11499,7 @@ en la lista de controles definidos por MusE SigScale + signature scale Armadura de la escala @@ -9947,6 +11507,7 @@ en la lista de controles definidos por MusE SimpleDrumsGuiBase + DrumSynth 0.1 @@ -9954,25 +11515,25 @@ en la lista de controles definidos por MusE SimpleSynthGui + &Load setup + &Save setup - - Load sample dialog - - 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: @@ -9991,55 +11552,71 @@ click on the Restart button. + previous event + next event + + set event + + add event + + erase event + erase range + clear automation + Clear all controller events? + &Ok Ac&eptar + &Cancel &Cancelar + MusE - external script failed - MusE was unable to launch the script - + + MusE was unable to launch the script, error message: + + Automation: @@ -10047,22 +11624,32 @@ click on the Restart button. SongInfo + Song Information + + Show on song load + + + + &Cancel &Cancelar + Alt+C + &Ok Ac&eptar + Alt+O @@ -10085,30 +11672,38 @@ click on the Restart button. SynthConfigBase + MusE: Synth Configuration MusE: Configuración del Sintetizador virtual + Soft Synthesizer Sintetizador Virtual + File Archivo + Instances Copias + + Name Nombre + list of available software synthesizers lista de sintetizadores de software dispoibles + Add Instance Agregar copia @@ -10117,26 +11712,32 @@ click on the Restart button. Puerto ALSA + Remove Instance Quitar copia + Midi Port Puerto MIDI + Midi connections + Inst + Version + Description @@ -10144,10 +11745,12 @@ click on the Restart button. TList + Midi MIDI + Drum Percusión @@ -10156,74 +11759,146 @@ click on the Restart button. Audio + Delete Track Borrar pista + Track Comment Comentario de pista Show Gui - Mostrar GUI + Mostrar GUI + Add Midi Track Agregar pista MIDI + Add Drum Track Agregar pista de percusión + Add Wave Track Agregar pista de audio + MusE: bad trackname + + no clef + + + + + Treble + + + + + Bass + + + + + Grand + + + + please choose a unique track name + + + show gui + mostrar gui + + + + + show native gui + + + + Add Output + Add Group + Add Input + Add Aux Send + + Update drummap? + Do you want to use same port for all instruments in the drummap? + + &Yes + + &No + + Treble clef + + + + + Bass clef + + + + + Grand Staff + + + + + Viewable automation + + + + Do you want to use same port and channel for all instruments in the drummap? + <none> @@ -10231,6 +11906,7 @@ click on the Restart button. TempoSig + Tempo/Sig tempo/firma @@ -10238,38 +11914,41 @@ click on the Restart button. Toolbar1 + Solo Solo + Snap Snap Quantize - Cuantizar + Cuantizar To - A + A All Events - Todos los eventos + Todos los eventos Looped Ev. - Eventos del bucle + Eventos del bucle Selected Ev. - Eventos seleccionados + Eventos seleccionados Looped+Sel. - Bucle + Selección + Bucle + Selección + Cursor Cursor @@ -10277,10 +11956,12 @@ click on the Restart button. TrackComment + MusE: Track Comment MusE: Comentario de la pista + Track Comment: Comentario de la pista: @@ -10288,122 +11969,156 @@ click on the Restart button. Transport + + Punch In Pinchar + + Loop Bucle + + Punch Out Fin pinchado + Left Mark Marca izquierda + Right Mark Marca derecha + Overdub Agregar + + Replace Reemplazar + Rec Mode Modo de captura + Normal Normal + Mix Mezcla + Cycle Rec Ciclar captura + punchin pinchar + loop bucle + punchout fin pinchado + rewind to start retroceder al inicio + rewind retroceder + forward avanzar + stop parar + play reproducir + record grabar + AC AC + quantize during record cuantizar durante la captura + Click Click + metronom click on/off Click del metrónomo encendido/apagado + Sync Sinconización + external sync on/off Sincronización externa encedida/apagada + Master Maestro + use master track usar pista maestra + Jack + Jack transport sync on/off @@ -10412,52 +12127,55 @@ click on the Restart button. TransposeDialogBase MusE: Midi Transpose - MusE: Transposición MIDI + MusE: Transposición MIDI Value - Valor + Valor halftones - semitonos + semitonos Time - Tiempo + Tiempo all - todo + todo between markers - entre marcadores + entre marcadores Parts - Partes + Partes all in selected tracks - todo en las pistas seleccionadas + todo en las pistas seleccionadas OK - Aceptar + Aceptar Cancel - Cancelar + Cancelar VAMGui + MusE: Load VAM Presets + + MusE: Save VAM Presets @@ -10465,130 +12183,185 @@ click on the Restart button. VAMGuiBase + Virtual Analogue for MusE Analogico virtual para MusE + LFO LFO + Freq Freq + + + Waveform Tipo Onda + + + Sine Seno + + + Pulse Pulso + + + Saw Sierra + + + Triangle Triángulo + Filter Filtro + EnvMod Modulación de envolvente + + + Attack Ataque + + + Decay Decaimiento + + + Sustain Sostenido + + + Release Relajación + Cutoff Frecuencia de corte + Resonance Resonancia + Invert Invertir + KeyTrack Seguir teclas + Presets Plantillas + Set Establecer + load preset list cargar lista de plantillas + save preset list guardar lista de plantillas + save preset list to a new file guardar lista de plantillas en un archivo nuevo + delete preset borrar plantilla + DCO 1 DCO 1 + + Pitch Tono + + Detune Desafinación + + PWM PWM + + FM FM + + PW PW + DCO 2 DCO 2 + On Encendido @@ -10607,6 +12380,7 @@ Jotsif Lindman Hörnlund ( jotsif@linux.nu ) + VAM 1.0beta3 Virtual Analog for MusE Released under GPL. @@ -10623,58 +12397,59 @@ Robert Jonsson VelocityBase MusE: Modify Velocity - MusE: Modificar velocidad + MusE: Modificar velocidad Range - Rango + Rango All Events - Todos los eventos + Todos los eventos Selected Events - Eventos seleccionados + Eventos seleccionados Looped Events - Eventos del bucle + Eventos del bucle Selected & Looped - Seleccionados y bucle + Seleccionados y bucle Values - Valores + Valores Rate: - Velocidad: + Velocidad: Offset: - Desplazamiento: + Desplazamiento: % - % + % OK - Aceptar + Aceptar Cancel - Cancelar + Cancelar WTScale + bar scale - escala de compases + escala de compases @@ -10688,10 +12463,12 @@ Robert Jonsson Herramientas de Audio + Solo Solo + Cursor Cursor @@ -10704,87 +12481,123 @@ Robert Jonsson Funciones + &Edit &Editar + Func&tions + &Gain + 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%?} + Other + + &Copy + &Copiar + + + + C&ut + C&ortar + + + + &Paste + &Pegar + + + Edit in E&xternal Editor + Mute Selection + Normalize Selection + Fade In Selection + Fade Out Selection + Reverse Selection + Select Seleccionar + Select &All Seleccion&ar Todo + &Deselect All &Deseleccionar Todo + Wave edit tools + transport - Pianoroll tools + + WaveEdit tools @@ -10826,10 +12639,12 @@ Robert Jonsson WaveView + MusE - external editor failed + MusE was unable to launch the external editor check if the editor setting in: Global Settings->Audio:External Waveditor @@ -10837,10 +12652,12 @@ is set to a valid editor. + MusE - file size changed + When editing in external editor - you should not change the filesize since it must fit the selected region. @@ -10851,230 +12668,288 @@ Missing data is muted freeverb + FreeVerb + Room Size Tamaño sala + Damping Amortiguamiento + Wet Level + Tap-Reverberator + Decay [ms] + + dB 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 --git a/muse2/share/locale/muse_fr.ts b/muse2/share/locale/muse_fr.ts index 2e22b550..9a402bbe 100644 --- a/muse2/share/locale/muse_fr.ts +++ b/muse2/share/locale/muse_fr.ts @@ -4,6 +4,7 @@ @default + Click this button to enable recording Cliquez sur ce bouton pour activer l'enregistrement @@ -12,11 +13,12 @@ l'enregistrement sets amount of quantization: 0 - no quantization 100 - full quantization - Définit le niveau de quantisation: + 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 @@ -45,89 +47,106 @@ You can also select the Save command from the File menu. 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 + Ne pas quantiser les notes sur cette limite (en tick) quantize also note len as default - quantiser aussi la longueur de note par + 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 @@ -138,81 +157,124 @@ avec le crayon vous pouvez: 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. + + Manipulate automation + + + + + Cursor tool + + + + pointer pointeur + pencil crayon + + + edit automation + + + + + cursor + + rubber gomme + cutter ciseaux + score partition + glue colle + quantize quantisation + draw dessin + mute parts silence + + + + + + + + Off Arrêt @@ -226,139 +288,200 @@ cliquez sur une pièces pour la rendre muette ou pas. Tous les Fichiers (*) + 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. + MESS + DSSI + FST + Add Midi Track Ajouter une Piste Midi + Add Drum Track Ajouter une Piste de Batterie + Add Wave Track Ajouter une Piste Audio + Add Audio Output + Add Audio Group + Add Audio Input + Add Aux Send + + Add Synth + Bar Mesure + Jack + ALSA: + SYNTH: + JACK: + + + + + + Route + + + + channel="%1" + + + + + dest + + devtype="%1" + + + + + type="%1" + + + + + + + name="%1"/ + + source + Velocity Vélocité + <none> + + + channelMask="%1" + dssi_synth + ladspa_efx + channels="%1" + remch="%1" + mport="%1"/ + eraser @@ -366,14 +489,17 @@ You can also select the Save command from the File menu. AboutBox + AboutBox + Version 2 pre-alpha + (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -382,10 +508,12 @@ Published under the GNU Public License + &Keep On Rocking! + Alt+K @@ -393,6 +521,7 @@ Published under the GNU Public License Appearance + MusE: load image MusE: charger une image @@ -418,56 +547,73 @@ Published under the GNU Public License d'échantillon + 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. + Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. + 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> + + Global opacity (opposite of transparency). - Select style sheet + + Standard - Qt style sheets (*.qss) + + Custom + + + + + Select style sheet - Global opaqueness (inverse of transparency). + + Qt style sheets (*.qss) @@ -475,25 +621,30 @@ Word-breaking but only with spaces. AppearanceDialogBase MusE: Appearance Settings - MusE: réglages de l'apparence + MusE: réglages de l'apparence + Apply Appliquer + Ok Ok + Cancel Annuler + Arranger Arrangeur + Parts Pièces @@ -502,70 +653,90 @@ Word-breaking but only with spaces. montrer les séparations + show names montrer les noms + show events montrer les évènements + show Cakewalk Style montrer dans le style Cakewalk + + y-stretch + + + + Events Evènements + note on note on + poly pressure pression poly + controller contrôleurs + aftertouch pression (aftertouch) + pitch bend molette de hauteur (pitch) + program change sélection de programme (prog. change) + special spécial + Background picture image de fond bg - fond + fond select... - choisissez... + choisissez... + show snap grid voir la grille de positionnement + Colors couleurs + Items Objets @@ -587,193 +758,282 @@ Word-breaking but only with spaces. dans l'Arrangeur + Style/Fonts Styles/Polices + QT Theme Thème + Windows Windows + MusE MusE + Metal Metal + Norwegian Wood Norwegian Wood + Platinum Platinum + CDE CDE + Motif Motif + Motif Plus Motif Plus + Fonts Polices + Family Famille + Size Taille + Font 1 Police 1 + Font 2 Police 2 + Font 3 Police 3 + Font 0 Police 0 + + + + + + + Bold Gras + + + + + + + Italic Italique + + + + + + + + + ... ... + Font 4 Police 4 + Font 5 Couleurs + clear + + MusE: Appearance settings + + + + + add + ajouter + + + + remove + enlever + + + Palette + add to palette + B + S S + H + V + G + R R - Style Sheet: + + Color name: - Font 6 - Couleurs {6?} + + Global opacity + - Global opaqueness + + Style Sheet: + + + Font 6 + Couleurs {6?} + Arranger + Cursor Curseur + Snap Aligne + Len Long + Type Type + NO NON + + 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 + TrackInfo InfoPiste + Track Piste @@ -782,6 +1042,7 @@ dans l'Arrangeur O-Port + Arranger Arrangeur @@ -794,22 +1055,27 @@ dans l'Arrangeur Mesure + GM GM + GS GS + XG XG + N N + R R @@ -818,62 +1084,87 @@ dans l'Arrangeur A + M M + S S + C C + Ch Ch + T T + 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. @@ -881,28 +1172,33 @@ 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. @@ -910,19 +1206,34 @@ Right-click to show GUI. + Time lock + + Notation clef. Select this tracks notation clef. + + + + + song length - bars + Port Port - <unknown> + + Automation + + + + + Clef @@ -1100,46 +1411,57 @@ Right-click to show GUI. Pistes + &Create &Créer + &View + Routing + Show Midi Tracks + Show Drum Tracks + Show Wave Tracks + Show Inputs + Show Outputs + Show Groups + Show Auxs + Show Synthesizers @@ -1147,147 +1469,162 @@ Right-click to show GUI. 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 Channel - Canal - - - - Awl::MidiVolEntry - - off - - - - db - - - - - Awl::VolEntry - - off - + Canal BigTime + MusE: Bigtime MusE: GrandChrono + format display + bar + beat + + tick + minute minute + second second + + frame trame (frame) + subframe trame fine (subframe) @@ -1295,6 +1632,7 @@ Right-click to show GUI. ClipListEdit + MusE: Clip List Editor MusE: Editeur de la Liste de Clips @@ -1302,38 +1640,47 @@ Right-click to show GUI. ClipListEditorBase + MusE: ClipList MusE: Liste de Clips + Name Nom + Refs Réfs + Start Départ + Len Long + Data Donnée + Clip Properties Propriétés du Clip + Pos: Pos: + Len: Long: @@ -1341,14 +1688,17 @@ Right-click to show GUI. CommentBase + Form1 Forme1 + Track Comment Commentaire pour la Piste + Track 1 Piste 1 @@ -1356,86 +1706,107 @@ Right-click to show GUI. ConfigMidiFileBase + MusE: Config Midi File Import/Export + Import: + Split tracks into &parts + Alt+P + Split tracks into parts, or one single part + Export: + 96 96 + 192 192 + 384 384 + Enable extended smf format (currently not implemented) + Use &2-byte time signatures instead of standard 4 + Alt+2 + Copyright: + Format: + Division: + Save space by replacing note-offs with &zero velocity note-ons + Alt+Z + 0 (single track) + 1 (multiple tracks) + &OK + &Cancel @@ -1443,10 +1814,12 @@ Right-click to show GUI. CtrlPanel + select controller Choisissez le contrôle + remove panel enlever le panneau @@ -1463,6 +1836,8 @@ Right-click to show GUI. x + + Velocity Vélocité @@ -1471,1232 +1846,472 @@ Right-click to show GUI. Hauteur + S S + X + manual adjust + double click on/off + off + add new ... + + + + Instrument-defined + + + + + + Add ... + + + + + Others + + + + + Edit instrument ... + + + + + Common Controls + + DeicsOnzeGui + Save configuration + + + + + + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + Load category dialog + Load set dialog + Save set dialog + New category + + Delete category + Load category + Save category + Load set + Save set + Delete set + New subcategory + + Delete subcategory + Load subcategory + Save subcategory + New preset + + Delete preset + Load preset + Save preset + No more category supported + You can not add more categories + + + Do you really want to delete %1 ? + + + &Yes + + + &No + + No category selected + + You must first select a category. + + + Replace or add + %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 ? + + + &Replace + + + &Add + + + Download error + There is no more free category slot. + Save category dialog + No more subcategory supported + You can not add more subcategories + + No subcategory selected + + You must first select a subcategory. + Load subcategory 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 ? + There is no more free subcategory slot. + Save subcategory dialog + No more preset supported + You can not add more presets + + + No preset selected + + + You must first select a preset. + Load preset 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 ? - There is no more free preset slot. - - - - Save preset dialog - - - - Browse set dialog - - - - Browse image dialog - - - - - DeicsOnzeGuiBase - - DeicsOnze - - - - &Preset - - - - Program numerous - - - - INITVOICE - - - - LBank - - - - Subcategory - - - - Bank numerous - - - - NONE - - - - HBank - - - - Category - - - - Prog - - - - Preset - - - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - - - - &Global - - - - Pitch Envelope - - - - PL3 - - - - PL2 - - - - PL1 - - - - PR1 - - - - PR2 - - - - PR3 - - - - Pitch modulation depth - - - - LFO - LFO - - - LFO Sync - - - - Pitch modulation sensitivity - - - - Pitch Modulation Sensitivity - - - - LFO Delay - - - - LFO delay - - - - LFO speed - - - - Amplitude modulation depth - - - - Amplitude modulation sensitivity - - - - Amplitude Modulation Sensitivity - - - - AMS - - - - LFO Waveform - - - - Pitch Modulation Depth - - - - PMD - - - - LFO Speed - - - - AMD - - - - Speed - Vitesse - - - Delay - Délai - - - PMS - - - - 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> - - - - Op4 Feedback - - - - Feedback level of the operator 4 - - - - Transpose - Transposition - - - Op &1 - - - - Scaling 1 - - - - LS1 - - - - RS1 - - - - Rate Scaling - - - - Attack Rate of the operator 1 - - - - Level Scaling - - - - Amplitude Envelope 1 - - - - RR1 - - - - D1R1 - - - - D1L1 - - - - D2R1 - - - - Release Rate - - - - 2° Decay Rate - - - - 1° Decay Level - - - - 1° Decay Rate - - - - Attack Rate - - - - AR1 - - - - Detune, OSCWave, EGShift 1 - - - - DET1 - - - - Detune - Désaccordage - - - EG Shift - - - - 96dB - - - - 48dB - - - - 24dB - - - - 12dB - - - - 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> - - - - Sensitivity 1 - - - - KVS1 - - - - Amplitude Modulation Enable - - - - AME1 - - - - Keyboard Velocity Sensitivity - - - - Key Velocity Sensitivity - - - - EBS1 - - - - EG Bias Sensitivity - - - - Eg Bias Sensitivity - - - - Frequency 1 - - - - Coarse 1 - - - - Coarse Ratio - - - - Fine 1 - - - - Fine Ratio - - - - Freq 1 - - - - Fixed Frequency - - - - Toggle Fix Frequency - - - - FIX - - - - OUT 1 - - - - Output Volume - - - - Volume - Volume - - - Op &2 - - - - Amplitude Envelope 2 - - - - D1R2 - - - - D1L2 - - - - D2R2 - - - - RR2 - - - - AR2 - - - - Frequency 2 - - - - Coarse 2 - - - - Fine 2 - - - - Freq 2 - - - - Scaling 2 - - - - LS2 - - - - RS2 - - - - OUT 2 - - - - Detune, OSCWave, EGShift 2 - - - - DET2 - - - - Sensitivity 2 - - - - EBS2 - - - - KVS2 - - - - AME2 - - - - Op &3 - - - - Amplitude Envelope 3 - - - - D1R3 - - - - D1L3 - - - - D2R3 - - - - RR3 - - - - AR3 - - - - Scaling 3 - - - - LS3 - - - - RS3 - - - - OUT 3 - - - - Frequency 3 - - - - Coarse 3 - - - - Fine 3 - - - - Freq 3 - - - - Detune, OSCWave, EGShift 3 - - - - DET3 - - - - Sensitivity 3 - - - - EBS3 - - - - KVS3 - - - - AME3 - - - - Op &4 - - - - amplitude Envelope 4 - - - - AR4 - - - - D1R4 - - - - D1L4 - - - - D2R4 - - - - RR4 - - - - Frequency 4 - - - - Coarse 4 - - - - Fine 4 - - - - Freq 4 - - - - Scaling 4 - - - - LS4 - - - - RS4 - - - - OUT 4 - - - - Detune, OSCWave, EGShift 4 - - - - DET4 - - - - Sensitivity 4 - - - - EBS4 - - - - KVS4 - - - - AME4 - - - - &Func - - - - Delay Pan Depth - - - - Delay Pan LFO Freq - - - - Delay Ch Send Level - - - - Channel Chorus - - - - Delay Feedback - - - - Delay On/Off, Return Level - - - - On - On - - - Delay Beat Ratio - - - - Delay BPM - - - - Foot Control - - - - Pitch Bend Range - - - - Pitch - Hauteur - - - Amplitude - - - - Modulation Wheel - - - - Breath Control - - - - Pitch Bias - - - - Envelope Bias - - - - After Touch - Pression (After Touch) - - - Phony Mode - - - - POLY - - - - MONO - - - - Potamento - - - - Portamento Mode - - - - FINGER - - - - FULL - - - - PT - - - - Portamento Time - - - - C&horus - - - - Chorus Parameters - - - - Channel send level - - - - On/Off and Return level - - - - Select LADSPA plugin - - - - Change plugin - - - - &Reverb - - - - Reverb Parameters - - - - &Config - &Configuration - - - Font Size - - - - Quality - - - - High - - - - Middle - - - - Low - - - - Ultra low - - - - Filter - Filtre - - - Save Mode (into the song) - - - - Save only the used presets - - - - Save the entire set - - - - Save the configuration - - - - Configuration File - - - - Save... - - - - Load... - - - - Save as default - - - - Colors - couleurs - - - Text - Texte - - - Background - - - - Edit Text - - - - Edit Background - - - - Red - - - - Blue + + There is no more free preset slot. - Green + + Save preset dialog - Set Path + + Browse set dialog - Image in the background : + + Browse image dialog + + + DeicsOnzeGuiBase - Browse... - + LFO + LFO - Load the set at the initialization : - + Speed + Vitesse - Set Brightness, Detune, Attack and Release of the current channel to default - + Delay + Délai - Res. Ctrl - + Transpose + Transposition - Cut all notes off - + Detune + Désaccordage - Panic! - + Volume + Volume - Number of Voices - + On + On - Number of voices - + Pitch + Hauteur - Enable - + After Touch + Pression (After Touch) - Channel - Canal + &Config + &Configuration - Vol - + Filter + Filtre - Channel Ctrl - + Colors + couleurs - Release - Relachement + Text + Texte - Attack - Attaque + Channel + Canal - Brightness - + Release + Relachement - Modulation - + Attack + Attaque Pan - Pan + Pan DidYouKnow + Did you know? + Don't show on startup + Next tip + Close Fermer @@ -2704,130 +2319,162 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t DrumEdit + Load Map Charger set de batterie + Save Map Enregistrer set de batterie + &Edit &Editer + Cut Couper + Copy Copier + Paste Coller + Delete Events Effacer + Select All Tout sélectionner + Select None Dé-sélectionner + Invert Inverser + Inside Loop Dans la boucle + Outside Loop Hors de la boucle + &Select &Sélectionner + Step Record Enregistrement pas-�-pas + Midi Input Entrée Midi + Add Controller View Ajouter une Vue des contrôles + M M + Sound Son + QNT QNT + E-Note E-Note + Len Long + A-Note A-Note + Ch Ch + Port Port + LV1 LV1 + LV2 LV2 + LV3 LV3 + LV4 LV4 + &File &Fichier + Load Drummap Charger Set de Batterie + Store Drummap Enregistrer Set de Batterie + ctrl ctrl @@ -2836,118 +2483,199 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t Sets de Batterie + Muse: Load Drum Map MusE: Charger Set de Batterie + MusE: Store Drum Map MusE: Enregistrer Set de Batterie + + 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 + + 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) + Reset GM Map + Previous Part + Next Part + &Functions &Fonctions + + Re-order list + + + + Set Fixed Length + Modify Velocity Modifier la vélocité + + Crescendo/Decrescendo + + + + + Quantize + + + + + Erase Event + + + + + Move Notes + + + + + Delete Overlaps + + + + &Plugins + Drum tools + + cursor tools + + + + + Set step size for cursor edit + + + + panic panique! + transport + Vol + Drum map + Reset the drum map with GM defaults? @@ -2955,14 +2683,17 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCAfterDialog + Time Position Position temporelle + Pressure Pression + MusE: Enter Channel Aftertouch MusE: Entrez le Canal de Pression (AfterTouch) @@ -3044,58 +2775,73 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCtrlBase + MusE: Edit Controller Event + Time Position + Available Controller: + Create New Controller + textLabel3 + Value Valeur + Controller Contrôle + H-Bank H-Bank + L-Bank L-Bank + Program + + off + pushButton4 + &OK + &Cancel @@ -3103,10 +2849,12 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditEventDialog + Ok Ok + Cancel Annuler @@ -3114,46 +2862,57 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditGainBase + MusE: Modify gain + Gain Gain + 200% 5 1/3' {200%?} + 100% 5 1/3' {100%?} + 0% 5 1/3' {0%?} + &Reset + Alt+R + &Apply &Appliquer + Alt+A + &Cancel + Alt+C @@ -3161,131 +2920,178 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditInstrument + + MusE: Create file failed + MusE: Write File failed MusE: échec de l'enregistrement + + + + MusE: + + The user instrument directory + + does not exist yet. Create it now? - (You can override with the environment variable MUSEINSTRUMENTS) + + + (You can change the user instruments directory at Settings->Global Settings->Midi) + + Unable to create user instrument directory + + MusE: Save Instrument Definition + + Instrument Definition (*.idf) + + MusE: Save instrument as + Enter a new unique instrument name: + The user instrument: + 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 + + already exists. + A controller number + + MusE MusE + + The current Instrument contains unsaved data Save Current Instrument? + + &Save + + &Nosave &Pas d'enregistrement + &Abort &Annuler @@ -3293,273 +3099,353 @@ Save Current Instrument? EditInstrumentBase + MusE: Instrument Editor + Instrument Name: + Selected instrument name. + List of defined instruments. + Pa&tches + List of groups and patches. + Group/Patch + + Properties Propriétés + + + Name: Nom: + + Group or patch name + High Bank: + Patch high bank number + Patch high bank number. --- means don't care. + --- dont care + Low Bank: + Patch low bank number + Patch low bank number. --- means don't care. + --- + Program: + + Patch program number + Drum patch + If set, the patch is available only for drum channels. + Drum Batterie + GM patch + If set, the patch is available in a 'GM' or 'NO' midi song type. + GM GM + GS patch + If set, the patch is available in a 'GS' or 'NO' midi song type. + GS GS + XG patch + If set, the patch is available in an 'XG' or 'NO' midi song type. + XG XG + Delete group or patch + + + &Delete + + + Alt+D + New patch + New &Patch + Alt+P + New group + New &Group + Alt+G + Contro&ller + Common: + This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. + List of defined controllers + List of defined controllers. + Name Nom + Type Type + + H-Ctrl H-Ctrl + + L-Ctrl L-Ctrl + Min + Max + Def + Midi controller name + Type: Type: + + Midi controller type + Control7 Control7 + Control14 Control8 + RPN RPN + NRPN NRPN + RPN14 + NRPN14 + Pitch Hauteur + Program + + Midi controller number high byte + Midi controller number low byte (* means drum controller) + Midi controller number low byte. If low byte is * then the controller is a 'drum controller'. For drum tracks and @@ -3572,23 +3458,28 @@ Examples: The GS and XG instruments' + * wild card + Range: + Min + Minimum value. If negative, auto-translate. + Minimum value. If the minimum value is negative, the range will automatically be translated to a positive range. @@ -3611,42 +3502,57 @@ True range: Min: -8192 Max: 8191 (bias 0) + Max + + Maximum value + Default: + L-Bank L-Bank + + + + + off + Progr. Progr. + ??? ??? + H-Bank H-Bank + Default value. Off: No default. + Default (initial) value. Off means no default. If a default value is chosen, the value will be sent @@ -3665,47 +3571,59 @@ Caution! Watch out for controllers such as + off dont care + Add common controller + &Add + Alt+A + Delete controller + Create a new controller + New &Controller + 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 @@ -3715,102 +3633,129 @@ Typically, set to 127/127, or an unused + Lo: + Null parameter number Low byte + S&ysEx + SysEx List: + Hex Entry: + New SysE&x + Alt+X + Tools Outils + &File &Fichier + &Help &Aide + &New &Nouveau + New Nouveau + Ctrl+N + &Open... &Ouvrir... + Open Ouvrir + Ctrl+O + &Save + Save + Ctrl+S + Save &As... Sauvegarder &sous... + Save As Sauvegarder sous + E&xit &Quitter + Exit Quitter + + new item + + What's this? @@ -3818,18 +3763,22 @@ Typically, set to 127/127, or an unused EditMetaDialog + Time Position Position temporelle + Meta Type Meta Type + Enter Hex Entrez en Hexa + MusE: Enter Meta Event MusE: Entrer un Evènement en Hexa @@ -3868,34 +3817,42 @@ Typically, set to 127/127, or an unused EditNoteDialogBase + MusE: Enter Note Mus2: Entrer la Note + OK OK + Cancel Annuler + Length: Longueur: + Time Position: Position temporelle: + Pitch: Hauteur + Velocity On: Vélocité On: + Velocity Off: Vélocité Off: @@ -3903,18 +3860,22 @@ Typically, set to 127/127, or an unused EditPAfterDialog + Time Position Position temporelle + Pitch Hauteur + Pressure Pression + MusE: Enter Poly Aftertouch Muse: Entrer la Pression polyphonique @@ -3937,22 +3898,27 @@ Typically, set to 127/127, or an unused EditSysexDialogBase + MusE: Enter SysEx MusE: Entrer le Sysex + TimePosition: Position temporelle + Comment: Commentaire: + OK OK + Cancel Annuler @@ -3960,6 +3926,7 @@ Typically, set to 127/127, or an unused EditToolBar + Edit Tools Outils d'Edition @@ -3967,54 +3934,67 @@ Typically, set to 127/127, or an unused EffectRack + effect rack rack d'effets + move up Déplacer vers le haut + move down Déplacer vers le bas + remove enlever + bypass direct + show gui montrer l'interface + new nouveau + change changement + show native gui + save preset + MusE: Save Preset + Replace effect + Do you really want to replace the effect %1? @@ -4022,6 +4002,7 @@ Typically, set to 127/127, or an unused FLUIDGui + FLUID: open Soundfile @@ -4029,14 +4010,17 @@ Typically, set to 127/127, or an unused FLUIDGuiBase + Form1 Form1 + Soundfont Set de Sons + Load Charger @@ -4044,58 +4028,73 @@ Typically, set to 127/127, or an unused FLUIDSynthGuiBase + FLUID Synth FLUID Synth + Gain Gain + Room Size Dimension de la chambre + Damping Atténuation + + Level Niveau + Width Largeur + Speed Vitesse + Depth Profondeur + Number Nombre + Type Type + Sine Sinusoide + Triangle Triangle + Reverb Réverb + Chorus Chorus @@ -4116,6 +4115,7 @@ Typically, set to 127/127, or an unused Montrer les contrôles de fluidsynth + Load charger @@ -4124,38 +4124,47 @@ Typically, set to 127/127, or an unused Enregistrer + Delete Effacer + Dump Info + ID + Fontname + Chnl + Soundfont Set de Sons + Drum Chnl + CHANNEL SETUP + LOADED SOUNDFONTS @@ -4167,27 +4176,33 @@ Typically, set to 127/127, or an unused Form1 + Global Global + User Utilisateur + Project Projet + fdialogbuttons + Songdata + Configuration + only Songdata @@ -4196,6 +4211,7 @@ Songdata FluidSynthGui + Choose soundfont @@ -4211,73 +4227,87 @@ Songdata GateTimeBase MusE: Modify Gate Time - MusE: modifier le temps de fermeture (Gate + MusE: modifier le temps de fermeture (Gate Time) Range - Entre + Entre All Events - Tous les Evènements + Tous les Evènements Selected Events - Evènements choisis + Evènements choisis Looped Events - Evènements bouclés + Evènements bouclés Selected & Looped - Boucle & sélectionnée + Boucle & sélectionnée Values - Valeurs + Valeurs Rate: - Vitesse: + Vitesse: Offset: - Décalage: + Décalage: % - % + % OK - OK + OK Cancel - Annuler + Annuler + + + + GlobalSettingsConfig + + + Selects instruments directory + GlobalSettingsDialogBase + MusE: Global Settings MusE: Paramètres + Audio Audio + Mixer Mixeur + + dB dB + min. Meter Value Métrage mini @@ -4286,22 +4316,31 @@ Time) Val. mini du Curseur + Midi Midi + Ticks Tics + + + 1024 1024 + + + 2048 2048 + 4096 4096 @@ -4310,75 +4349,117 @@ Time) 8172 + Displayed Resolution (Ticks/Quarternote) Résolution affichée (Tics par 1/4 de note) + + 48 48 + + 96 96 + + 192 192 + + 384 384 + + 768 768 + + 1536 1536 + + 3072 3072 + + 6144 6144 + + 12288 12288 + RTC Resolution (Ticks/Sec) Résolution RTC (Tics par sec.) + GUI GUI + /sec /sec + GUI Refresh Rate Vitesse de rafraîchissement de l'interface + + 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. + + + + &Apply &Appliquer + &Ok &Ok + &Cancel &Annuler @@ -4387,304 +4468,479 @@ l'interface Navigateur pour l'aide: + Application + Views + + + + + y-pos + + + + show + + + + + x-pos + + + + 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 - Use Jack freewheel mode if possible. -(Speeds up bounce operations). + + Enable denormal protection - Enable denormal protection + + Enable output limiter - Enable output limiter + + External Waveditor - Enable in-place processing for VST plugins. -(Requires restart.) + + External Waveditor command - 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. + + Note: External editor opened from the internal editor. - External Waveditor + + Dummy Audio Driver (settings require restart) - External Waveditor command + + Hz - Note: External editor opened from the internal editor. + + Period size (Frames per period): - Dummy Audio Driver (settings require restart) + + + 16 + 16 + + + + Try to use Jack Freewheel - Preferred sample rate + + Speeds bounce operations - 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. + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. - Hz + + VST in-place - Actual rate used now (dummy or not): + + 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. - Period size (Frames per period): + + Minimum control period - 16 - 16 + + 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) + + Instruments Directory + + + + Use old-style stop shortcut: + Move single armed track with selection + On Launch + Behavior + + Header + + + Track Info Columns + + + 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 + &Edit + Insert Tempo + Insert Signature + + Insert Key + + + + Edit Positon + Edit Value + Delete Event + Master tools + Edit tools + + Key + + + + + new key + + + + 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! @@ -4692,22 +4948,27 @@ Shorter periods are desirable. ListEdit + &Edit &Edition + Cut Couper + Copy Copier + Paste Coller + Delete Events Effacer évènements @@ -4724,6 +4985,7 @@ Shorter periods are desirable. Insérer Note + insert Note insére une note @@ -4732,6 +4994,7 @@ Shorter periods are desirable. Insérer SysEx + insert SysEx insère une commande midi SysEx @@ -4740,6 +5003,7 @@ Shorter periods are desirable. Insérer Ctrl + insert Ctrl insére un caractère de Contrôle @@ -4748,6 +5012,7 @@ Shorter periods are desirable. Insérer Meta + insert Meta insére une balise Meta @@ -4764,6 +5029,7 @@ Shorter periods are desirable. Insérer Canal de Pression + insert Channel Aftertouch insére un canal de Pression (AfterTouch) @@ -4772,15 +5038,18 @@ Shorter periods are desirable. Insérer une note de Pression + insert Poly Aftertouch insère une Pression (AfterTouch) polyphonique + Tick Tic + Bar Mesure @@ -4789,38 +5058,47 @@ polyphonique Typ + Ch Can + Val A Val A + Val B Val B + Val C Val C + Len Lon + Comment Commentaire + List tools + Insert tools + Type Type @@ -4828,23 +5106,28 @@ polyphonique MITTransposeBase + MusE: Midi Input Plugin: Transpose MusE: Plugin d'Entrée Midi: Transposition + On On + TriggerKey Note de Déclenchement + Transpose: Transposition: + +0 +0 @@ -4864,10 +5147,12 @@ Transposition MusE: Table des ports Midi + Port Port + GUI GUI @@ -4876,14 +5161,17 @@ Transposition Enr + Instrument Instrument + Device Name Nom du Périphérique + State Etat @@ -4892,158 +5180,238 @@ Transposition inconnu + + + 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 + device + + Port Number Numéro de port + 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 - Connect these to new midi tracks + + Auto-connect these channels to new midi tracks + + + + + Auto-connect new midi tracks to these channels + + + + + Auto-connect new midi tracks to this channel + + + + + Auto-connect these channels, on this port, to new midi tracks. - Connect new midi tracks to this (first listed only) + + Connect new midi tracks to these channels, on this port. + + Connect new midi tracks to this channel, on this port. + + + + 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 connecté au port + Connections from Jack Midi output ports + Connections to Jack Midi input ports - 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 - - - - 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) - - - + State: result of opening the device Etat: résultat de l'ouverture du port + I + O + In routes + Out routes + Def in ch + Def out ch + <unknown> + + <none> @@ -5051,42 +5419,56 @@ NOTE: Currently only one output port and channel supported (first found) 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 @@ -5094,30 +5476,37 @@ Distant MarkerView + 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 @@ -5126,6 +5515,7 @@ Distant Ajoute un marqueur + delete marker Effacer Marqueur @@ -5138,14 +5528,17 @@ Distant &Fichier + &Edit &Edition + marker-tools + edit tools outils d'édition @@ -5153,34 +5546,42 @@ Distant MasterEdit + Cursor Curseur + Snap Aligne + time at cursor position Temps à la position du curseur + 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 @@ -5197,6 +5598,7 @@ Distant Utiliser la piste principale + Info Info @@ -5205,18 +5607,22 @@ Distant Off + Master tools + Enable master + Enable + Enable usage of master track @@ -5224,114 +5630,142 @@ Distant 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 @@ -5351,8 +5785,9 @@ midi MidiControllerEditDialogBase + MusE: Define Midi Controller - MusE: Définir un Contrôle Midi + MusE: Définir un Contrôle Midi replace controller set @@ -5367,69 +5802,159 @@ midi Enregistrer le groupe de contrôles sous + Name - Nom + Nom + Type - Type + Type + + H-Ctrl - H-Ctrl + H-Ctrl + + L-Ctrl - L-Ctrl + L-Ctrl + Min Val - Val Min + Val Min + Max Val - Val Max + 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. + + + + Managed Controller for Port + + + + + Channel + Canal + + + + This is a list of commonly used midi controllers. +Note that in MusE pitch and program changes are +handled like normal controllers. + + + + + Properties + Propriétés + + + + Name + Nom + + + + Max Value + Valeur Max + + + + RPN14 + + + + + NRPN14 + + + + + Pitch + Hauteur + + + + Program + + + + + Midi Controller Number High Byte + + + + + Midi Controller Number Low Byte + - list of defined controllers - list des contrôles définis + + Range + - This is the MusE list of defined controllers. - C'est la liste des contrôles qui ont été -définis. + + Min Value + Valeur Mini - Properties - Propriétés + + &Add + - Name - Nom + + Alt+A + - Max Value - Valeur Max + + A&pply + - Min Value - Valeur Mini + + Predefined Controller: + + Control7 - Control7 + Control7 + Control14 - Control8 + Control8 + RPN - RPN + RPN + NRPN - NRPN + NRPN XG-SysEx @@ -5440,38 +5965,45 @@ définis. SysEx + Type - Type + Type &New &Nouveau + create new entry - Crée une nouvelle entrée + 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 + Crée une nouvelle entrée dans la liste des contrôles + &Delete - &Effacer + &Effacer + delete selected entry - efface l'entrée sélectionnée + efface l'entrée sélectionnée + &OK - &Ok + &Ok + &Cancel - &Annuler + &Annuler @@ -5503,114 +6035,149 @@ 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 @@ -5618,6 +6185,8 @@ Midi MidiInputTransformDialog + + New Nouveau @@ -5625,214 +6194,334 @@ Midi 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 @@ -5931,74 +6620,95 @@ Midi MidiStrip + + + off + + double click on/off + VariationSend + Var Var + ReverbSend + Rev Rev + ChorusSend + Cho Cho + dB dB + Pan/Balance + Pan Pan + record + mute silence + solo mode + iR + input routing + oR + output routing chemin de sortie (routing) @@ -6006,111 +6716,142 @@ Midi MidiSyncConfig + + Port Number Numéro de port + + Name of the midi device associated with this port number + 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, @@ -6120,6 +6861,7 @@ 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 @@ -6130,30 +6872,36 @@ This means you may have several master + 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 @@ -6163,103 +6911,128 @@ Note: It may be impossible to rewind fast + Port Port + Device Name Nom du Périphérique + c + k + r + m m + t + type + rid + rc + rr + rm + rt + rw + tid + tc + tr + tm + tt + MusE MusE + Settings have changed Apply sync settings? + &Apply &Appliquer + &No + &Abort &Annuler + <none> @@ -6267,70 +7040,87 @@ Apply sync settings? 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 @@ -6395,39 +7185,48 @@ Apply sync settings? 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. @@ -6437,14 +7236,17 @@ 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. @@ -6453,14 +7255,17 @@ Enabled inputs in the list will + 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 @@ -6468,10 +7273,12 @@ Enabled inputs in the list will + ms + Send sync delay @@ -6479,10 +7286,12 @@ Enabled inputs in the list will MidiTrackInfoBase + MusE: TrackInfo MusE: InfoPiste + output channel canal de sortie @@ -6496,6 +7305,8 @@ sortie Info Piste + + % % @@ -6504,10 +7315,23 @@ sortie Nom de Piste + output port port de sortie (Output Ch.) + + iR + + + + + + + + + + off off @@ -6532,6 +7356,7 @@ sortie choisissez le groupe d'instruments + Transp. Transp. @@ -6540,26 +7365,47 @@ sortie Volume + Channel Info Info canal + + Rec: + + + + + Prog + + + + + Vol + + + + Pan Pan + Delay Délai + H-Bank H-Bank + Compr. Compr. + L-Bank L-Bank @@ -6568,10 +7414,12 @@ sortie Progr. + Velocity Vélocité + Length Longueur @@ -6605,108 +7453,119 @@ pour l'enregistrement: 5 + all midi events are sent to this output channel + Out ch + input routing Inputs - Entrées + 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> - Record: - - - + 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 - Prog. - - - + Volume. Double-click on/off. + Add vol setting to song - Vol. - - - + + Change stereo position. Double-click on/off. + Add pan setting to song @@ -6714,230 +7573,345 @@ pour l'enregistrement: 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 @@ -6945,6 +7919,8 @@ pour l'enregistrement: MidiTransformerDialog + + New @@ -6952,6 +7928,7 @@ pour l'enregistrement: MixdownFileDialog + Wave Files (*.wav);;All Files (*) Fichiers Wave (*.wav);;Tous les Fichiers (*) @@ -6959,50 +7936,62 @@ pour l'enregistrement: 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 @@ -7041,14 +8030,17 @@ pour l'enregistrement: MusE + &File &Fichier + Open &Recent Ouvrir &Récent + Save &As Enregistrer &Sous @@ -7057,34 +8049,43 @@ pour l'enregistrement: 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 @@ -7093,134 +8094,168 @@ pour l'enregistrement: 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 @@ -7229,22 +8264,27 @@ pour l'enregistrement: &Affichage + Transport Panel Panneau de Contrôle + Bigtime Window Fenêtre GrandeHorloge - Don't Follow Song + + Don't Follow Song Ne pas suivre la chanson + Follow Page Défilement par page + Follow Continuous Défilement fin @@ -7253,18 +8293,22 @@ pour l'enregistrement: &Configuration + Global Settings Paramètres Généraux + Follow Song suivre la chanson + Metronome Métronome + Midi Sync Synchro MIDI @@ -7273,6 +8317,7 @@ pour l'enregistrement: Paramètres du fichier MIDI + Appearance Settings Apparence @@ -7293,14 +8338,17 @@ pour l'enregistrement: 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 @@ -7309,6 +8357,7 @@ pour l'enregistrement: Générateur aléatoire de rythmes + &Midi &MIDI @@ -7321,34 +8370,47 @@ pour l'enregistrement: Définir contrôles + Input Plugins Plugins d'Entrée + Reset Instr. Ré-initialisation des Instruments + Init Instr. Init. Instr. + Local Off Local Off + + &View + + + + &Audio &Audio + Cliplist ListClip + Bounce to Track Rebondir (bounce) sur la piste + Bounce to File Rebondir (bounce) sur Fichier @@ -7357,6 +8419,7 @@ pour l'enregistrement: Rebondir (bounce) + &Help &Aide @@ -7377,16 +8440,21 @@ pour l'enregistrement: 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 @@ -7395,26 +8463,41 @@ non encore sauvegardées. Enregistrer? &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? @@ -7427,10 +8510,12 @@ avant d'en ouvrir un autre? Ec&raser + no help found at: Pas d'aide trouvée ici: + MusE: Open Help MusE: Ouvrir l'Aide @@ -7449,6 +8534,7 @@ une piste AUDIO annuler + Und&o &Annuler @@ -7457,18 +8543,22 @@ une piste AUDIO 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 @@ -7477,6 +8567,7 @@ une piste AUDIO boucle + Loop Boucle @@ -7485,6 +8576,7 @@ une piste AUDIO Punch-In + Punchin Punch-In @@ -7493,6 +8585,7 @@ une piste AUDIO Punch-Out + Punchout Punch-Out @@ -7501,6 +8594,7 @@ une piste AUDIO démarrer + Start Démarrer @@ -7509,6 +8603,7 @@ une piste AUDIO rembobiner + Rewind Rembobiner @@ -7517,6 +8612,7 @@ une piste AUDIO avance + Forward Avance @@ -7525,6 +8621,7 @@ une piste AUDIO stop + Stop Stop @@ -7533,6 +8630,7 @@ une piste AUDIO jouer + Play Jouer @@ -7541,6 +8639,7 @@ une piste AUDIO enregistrer + Record Enregistrer @@ -7549,6 +8648,8 @@ une piste AUDIO panique! + + Panic Panique! @@ -7557,6 +8658,7 @@ une piste AUDIO nouveau + &New &Nouveau @@ -7565,6 +8667,7 @@ une piste AUDIO ouvrir + &Open &Ouvrir @@ -7577,6 +8680,7 @@ une piste AUDIO rouleau Piano + Pianoroll Rouleau-Piano @@ -7585,8 +8689,9 @@ une piste AUDIO partition + Score - Partition + Partition marker @@ -7597,6 +8702,7 @@ une piste AUDIO Marker + File Buttons Boutons Fichiers @@ -7609,6 +8715,7 @@ une piste AUDIO aucun + MusE: Write File failed MusE: échec de l'enregistrement @@ -7617,10 +8724,14 @@ une piste AUDIO MusE: A propos + + + MusE: Song: MusE: chanson + reading midifile lecture du fichier MIDI @@ -7634,17 +8745,22 @@ Echec MusE: Copy Range - MusE: limites de la copie + MusE: limites de la copie not implemented - Non-implémenté (désolé) + Non-implémenté (désolé) MusE: Cut Events - MusE: Couper Evènements + MusE: Couper Evènements + + + + + MusE: Bounce to Track MusE: Rebondir sur la piste (bounce) @@ -7665,272 +8781,351 @@ choisissez une piste AUDIO en destination destination + + 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. + Import Part + &Insert + Paste c&lone + Paste to &track + Paste clone to trac&k + &Insert Empty Measure + + Find unused wave files + + + + Delete Selected Tracks + + all parts in one staff + + + + + one staff per part + + + + + New score window + + + + Wave Forme d'Onde + Song Info + Mixer A + Mixer B + Marker View + &Plugins + Edit Instrument + Rhythm Generator + Restart Audio + Mixer Automation + Take Snapshot + Clear Automation Data + Configure Shortcuts + Midi File Import/Export + Midi Ports / Soft Synth + &Manual + &MusE Homepage + &Report Bug... + &About MusE - View + + A&utomation - Automation + + Se&ttings - Settings + + &Cancel + Cannot read template + File open error + File read error + Unknown File Format: + MusE: load template + + &Skip - MusE: Bounce - - - - set left/right marker for bounce range - - - + 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 + Add midi file to current project? + &Add to Project + &Replace + failed: échec: + Import part is only valid for midi and wave tracks! + MusE: load part + No track selected for import + 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 + 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 + Unable to launch help + For some reason MusE has to launch the default browser on your machine. @@ -7939,26 +9134,32 @@ browser on your machine. NoteInfo + Start Début + Len Long + Pitch Hauteur + Velo On Vélo on + Velo Off Vélo off + Note Info Info Note @@ -7966,6 +9167,7 @@ browser on your machine. OrganGuiBase + MusE: Organ MusE: Orgue @@ -7986,54 +9188,67 @@ browser on your machine. enregistrer la liste des presets + O-1 O-1 + Oscillator Oscillateur + Brass Cuivres + Reed Roseau + Flute Flûte + Drawbars Grands Tuyaux + 16' 16' + 4' 4' + 2 2/3' 2 2/3' + 2' 2' + 8' 8' + 5 1/3' 5 1/3' + Envelope Lo Enveloppe basse (Lo) @@ -8054,34 +9269,52 @@ browser on your machine. Relachement (ms) + Envelope Hi Enveloppe Haute (Hi) + + Release Relachement + + Sustain Tenue + + Decay Affaiblissement + + Attack Attaque + + + + + + ms + + cB + Velocity Vélocité @@ -8192,45 +9425,54 @@ browser on your machine. 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 + glue coller + de-clone annuler-clônage pianoroll - rouleau-piano + rouleau-piano score @@ -8238,22 +9480,25 @@ différent list - liste + liste drums - batterie + batterie + 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 @@ -8268,63 +9513,80 @@ AUDIO MIDI + Cannot paste: wrong data type Ne peut coller: mauvais type de donnée + s&elect + clones - export + + + + save part to disk + file info + MusE: save part + Part name + Files + out of + parts + part + could not be pasted. Likely the selected track is the wrong type. + Can only paste to midi/drum track + Can only paste to wave track + Can only paste to midi or wave track @@ -8346,6 +9608,7 @@ Likely the selected track is the wrong type. PianoRoll + &Edit &Edition @@ -8386,6 +9649,7 @@ Likely the selected track is the wrong type. Hors de la Boucle + &Select &Sélectionner @@ -8402,6 +9666,7 @@ Likely the selected track is the wrong type. couleurs pour la vélocité + &Config &Configuration @@ -8410,182 +9675,241 @@ Likely the selected track is the wrong type. couleur pour les évènements + &Functions &Fonctions Over Quantize - Plus de Quantisation + Plus de Quantisation Note On Quantize - Quantisation Appui de Note + Quantisation Appui de Note Note On/Off Quantize - Quantisation Appui/Relachement de Note + Quantisation Appui/Relachement de Note Iterative Quantize - Quantisation itérative + Quantisation itérative Config Quant... - Config. Quant... + Config. Quant... Modify Gate Time - Modifier temps de fermeture (gate time) + Modifier temps de fermeture (gate time) + Modify Velocity Modifier la vélocité Crescendo - Crescendo + Crescendo + Transpose Transposition Thin Out - Sortie fine + Sortie fine Erase Event - Effacer Evènements + Effacer Evènements Note Shift - Décalage de Note + Décalage de Note Move Clock - Décalage temporel + Décalage temporel Copy Measure - Copier mesure + Copier mesure Erase Measure - Effacer mesure + Effacer mesure Delete Measure - Supprimer mesure + Supprimer mesure Create Measure - Créer mesure + Créer mesure Pianoroll Tools Outils de piano-roll + Step Record Enregistrement pas-a-pas + Midi Input Entrée MIDI + Play Events Jouer Evènements + Add Controller View Ajouter une vue de contrôles + ctrl ctrl + C&ut Co&uper + &Copy &Copier + &Paste + Delete &Events + 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 + &Previous Part + &Next Part + &Event Color + &Blue + &Pitch colors + &Velocity colors + + Quantize + + + + + Modify Note Length + + + + + Crescendo/Decrescendo + + + + + Erase Events + + + + + Move Notes + + + + Set Fixed Length + Delete Overlaps + + Legato + + + + &Plugins + Pianoroll tools + panic panique! + transport @@ -8593,82 +9917,102 @@ Likely the selected track is the wrong type. PluginDialog + Ok Ok + Cancel Annuler + MusE: select plugin MusE: choisir plugin + Lib Lib + Label Label + Name Nom + AI AI + AO AO + CI CI + CO CO + IP IP + id id + Maker Fabrique + Copyright Copyright + Mono and Stereo + Stereo Stéréo + Mono 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. + Search in 'Label' and 'Name': @@ -8676,30 +10020,38 @@ Likely the selected track is the wrong type. PluginGui + + bypass plugin Plugin de Direct (bypass) + MusE: load preset MusE: charger réglages + MusE: save preset MusE: enregistrer réglages + File Buttons Boutons Fichier + Load Preset Charger réglages + Save Preset Enregistrer réglages + Error reading preset. Might not be right type for this plugin @@ -8871,6 +10223,7 @@ port QObject + Other @@ -8886,26 +10239,34 @@ port Vélocité + + Cannot convert sysex string Ne peut convertir le code sysex + + Hex String too long (2048 bytes limit) Code Hexa tro long (limite: 2048 octets) + generic midi MIDI générique + new nouveau + create peakfile for créer fichier de crêtes pour + MusE: get file name MusE: avoir le nom du fichier @@ -8931,14 +10292,17 @@ Le créer? Annuler + MusE: create directory MusE: créer un répertoire + creating dir failed échec de la création du répertoire + File Fichier @@ -8951,6 +10315,7 @@ exists existe + MusE: write MusE: écriture @@ -8963,22 +10328,27 @@ existe Quitter + Open File Ouvrir Fichier + failed: échec: + MusE: Open File MusE: Ouvrir un Fichier + + None @@ -8991,21 +10361,25 @@ failed: Inconnu + No selection. Ignoring + The directory + does not exist. Create it? + exists. Overwrite? @@ -9015,23 +10389,23 @@ exists. Overwrite? QuantConfig Config Quantize - Configuration de la Quantisation + Configuration de la Quantisation Strength - Force + Force Don´t Quantize - Ne pas quantiser + Ne pas quantiser Quant Len - Lon Quant + Lon Quant MusE: Config Quantize - MusE: Configuration de la Quantisation + MusE: Configuration de la Quantisation @@ -9064,391 +10438,558 @@ exists. Overwrite? RhythmBase + MusE: Random Rhythm Generator - MusE: Générateur Aléatoire de Rythmes + MusE: Générateur Aléatoire de Rythmes + Instrument Properties - Propriétés des Instruments + Propriétés des Instruments + + counts/bar - battements/mesure + battements/mesure + steps/count - divisions/battements + divisions/battements + + # bars - # mesure + # mesure + test - test + test + + contrib - contrib + contrib + randomize - aléatoire + aléatoire + Group 1 - Groupe 1 + Groupe 1 + Group 2 - Groupe 2 + Groupe 2 + Group 3 - Groupe 3 + Groupe 3 + Group 4 - Groupe 4 + Groupe 4 + Group 5 - Groupe 5 + Groupe 5 + + listen - écoute + écoute + Instrument - Instrument + Instrument + + + Group + + + + + &New - &Nouveau + &Nouveau + create new entry - créer une nouvelle entrée + créer une nouvelle entrée + 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 + en appuyant sur Nouveau vous créez une nouvelle entrée dans la liste des contrôles + &Delete - &Effacer + &Effacer + delete selected entry - efface l'entrée sélectionnée + efface l'entrée sélectionnée + Up - Haut + Haut + Down - Bas + Bas + Instrument - Instrument + Instrument + steps/count - divisions/battement + divisions/battement + list of defined controllers - liste des contrôles définis + liste des contrôles définis + This is the MusE list of defined controllers. - Ceci est la liste des contrôles qui ont été + Ceci est la liste des contrôles qui ont été définis. + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + + + + &File - &Fichier + &Fichier + &Edit - &Edition + &Edition + &Help - &Aide + &Aide + Tools - Outils + Outils + New - Nouveau + Nouveau + + + + Ctrl+N + + Open - Ouvrir + Ouvrir + &Open... - &Ouvrir... + &Ouvrir... + + + + Ctrl+O + + Save - Sauvegarder + Sauvegarder + &Save - &Sauvegarder + &Sauvegarder + + Ctrl+S + + + + Save As - Sauvegarder sous + Sauvegarder sous + Save &As... - Sauvegarder &sous... + Sauvegarder &sous... + Print - Imprimer + Imprimer + &Print... - Im&primer... + Im&primer... + + + + Ctrl+P + + Exit - Quitter + Quitter + E&xit - &Quitter + &Quitter + Undo - Annuler + Annuler + &Undo - &Annuler + &Annuler + + + + Ctrl+Z + + Redo - Refaire + Refaire + &Redo - &Refaire + &Refaire + + + + Ctrl+Y + + Cut - Couper + Couper + &Cut - Co&uper + Co&uper + + + + Ctrl+X + + Copy - Copier + Copier + C&opy - &Copier + &Copier + + + + Ctrl+C + + Paste - Coller + Coller + &Paste - C&oller + C&oller + + + + Ctrl+V + + Find - Rechercher + Rechercher + &Find... - &Rechercher... + &Rechercher... + + + + Ctrl+F + + Contents - Contenus + Contenus + &Contents... - Co&ntenus... + Co&ntenus... + Index - Index + Index + &Index... - &Index... + &Index... + About - A propos + A propos + &About... - &A propos... + &A propos... RhythmGenerator + Form3 - Form3 + Form3 + Instrument Settings: - Réglages des Instruments: + Réglages des Instruments: + Instrument - Instrument + Instrument + Hi-Hat - Charley (Hi-Hat) + Charley (Hi-Hat) + add - ajouter + ajouter + delete - effacer + effacer + steps/count - battements/division + battements/division + count/bar - divisions/mesure + divisions/mesure + # bars - # mesures + # mesures + Group Settings: - Réglages des Groupes: + Réglages des Groupes: + + + + Group + + Group 1 - Groupe 1 + Groupe 1 + Group 2 - Groupe 2 + Groupe 2 + Group 3 - Groupe 3 + Groupe 3 + Group 4 - Groupe 4 + Groupe 4 + Group 5 - Groupe 5 + Groupe 5 + contrib - contrib + contrib + listen - écoute + écoute + Randomize - Aléatoire + Aléatoire + Rhythm Style: - Style de Rythme: + Style de Rythme: + Clear - Effacer + Effacer + Open... - Ouvrir... + Ouvrir... + Save - Sauvegarder + Sauvegarder + Save as... - Sauvegarder sous... + Sauvegarder sous... + Generate - Générer + Générer + Close - Fermer + Fermer RouteDialogBase + MusE: Routing + Add Route + Source: + Destination: + connect source to destination + Connect + Current Routes + Source + Destination + remove selected route + Remove @@ -9456,65 +10997,56 @@ définis. SS_PluginChooserBase + SimpleDrums - Ladspa Plugin Chooser + Name Nom + Label Label + Inports + Outports + Creator + &Cancel + Alt+C + &OK + Alt+O - - SS_PluginFront - - Clear and unload effect - - - - Load effect - - - - Toggle display of effect parameters - - - - Turn effect on/off - - - Score @@ -9677,14 +11209,17 @@ sélectionnées ScrollScale + next page page suivante + previous page page précédente + current page number numéro de page courante @@ -9692,18 +11227,22 @@ sélectionnées ShortcutCaptureDialog + Ok Ok + Cancel Annuler + Shortcut conflicts with + Undefined @@ -9711,30 +11250,38 @@ sélectionnées ShortcutCaptureDialogBase + Enter shortcut sequence + Press keys to enter shortcut sequence! + Old shortcut: + + Undefined + New shortcut: + OK OK + Cancel Annuler @@ -9742,42 +11289,52 @@ sélectionnées ShortcutConfigBase + Configure Keyboard Shortcuts + Shortcut Category + Description + Shortcut + &Clear + Alt+C + &Define + Alt+D + &Apply &Appliquer + Alt+A @@ -9785,6 +11342,7 @@ sélectionnées SigScale + signature scale Echelle de la signature @@ -9792,6 +11350,7 @@ sélectionnées SimpleDrumsGuiBase + DrumSynth 0.1 @@ -9799,25 +11358,25 @@ sélectionnées SimpleSynthGui + &Load setup + &Save setup - - Load sample dialog - - 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: @@ -9836,55 +11395,71 @@ click on the Restart button. + 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 - + + MusE was unable to launch the script, error message: + + Automation: @@ -9892,22 +11467,32 @@ click on the Restart button. SongInfo + Song Information + + Show on song load + + + + &Cancel + Alt+C + &Ok &Ok + Alt+O @@ -9930,31 +11515,39 @@ click on the Restart button. SynthConfigBase + MusE: Synth Configuration MusE: Configuration Synth Virtuel + Soft Synthesizer Synthétiseur Virtuel + File Fichier + Instances Exemplaires + + Name Nom + list of available software synthesizers liste des synthétiseurs virtuels disponibles + Add Instance Ajouter un Exemplaire @@ -9963,26 +11556,32 @@ disponibles Port Alsa + Remove Instance Retirer un Exemplaire + Midi Port Port MIDI + Midi connections + Inst + Version + Description @@ -9990,18 +11589,22 @@ disponibles TList + Delete Track Effacer la Piste + Track Comment Commentaire de Piste + Midi Midi + Drum Batterie @@ -10011,65 +11614,135 @@ disponibles Show Gui - Montrer la Gui + Montrer la Gui + Add Midi Track Ajouter une Piste Midi + Add Drum Track Ajouter une Piste de Batterie + Add Wave Track Ajouter une Piste Audio + <none> + + no clef + + + + + Treble + + + + + Bass + + + + + Grand + + + + MusE: bad trackname + please choose a unique track name + + Update drummap? + Do you want to use same port for all instruments in the drummap? + + &Yes + + &No + + + show gui + montrer l'interface + + + + + show native gui + + + + Add Output + Add Group + Add Input + Add Aux Send + + Treble clef + + + + + Bass clef + + + + + Grand Staff + + + + + Viewable automation + + + + Do you want to use same port and channel for all instruments in the drummap? @@ -10077,6 +11750,7 @@ disponibles TempoSig + Tempo/Sig Tempo/Sig @@ -10084,38 +11758,41 @@ disponibles Toolbar1 + Solo Solo + Snap Aligne Quantize - Quantisation + Quantisation To - A + A All Events - Tous les Evènements + Tous les Evènements Looped Ev. - Ev. Bouclés + Ev. Bouclés Selected Ev. - Ev. Choisis + Ev. Choisis Looped+Sel. - Bouclés+Sél. + Bouclés+Sél. + Cursor Curseur @@ -10123,10 +11800,12 @@ disponibles TrackComment + MusE: Track Comment Muse: Commentaire de Piste + Track Comment: Commentaire de Piste: @@ -10134,122 +11813,156 @@ disponibles Transport + + Punch In Punch-In + + Loop Boucle + + Punch Out Punch-Out + Left Mark Marque Gauche + Right Mark Marque Droite + Overdub Sur-enregistrement (Overdub) + + Replace Remplace + Rec Mode Mode Enregistrement + Normal Normal + Mix Mix + Cycle Rec Enr. Cycle + punchin Punch-In + loop boucle + punchout Punch-Out + rewind to start rembobine au départ + rewind rembobiner + forward avance + stop stop + play jouer + record enregistrement + AC AC + quantize during record quantise pendant l'enregistrement + Click Clic + metronom click on/off clic du métronome oui/non + Sync Synchro + external sync on/off synchro externe oui/non + Master + use master track Utiliser la piste principale + Jack + Jack transport sync on/off @@ -10258,52 +11971,55 @@ disponibles TransposeDialogBase MusE: Midi Transpose - MusE: Transposition Midi + MusE: Transposition Midi Value - Valeur + Valeur halftones - demi-tons + demi-tons Time - Temps + Temps all - tous + tous between markers - entre les marqueurs + entre les marqueurs Parts - Pièces + Pièces all in selected tracks - tous dans les pistes sélectionnées + tous dans les pistes sélectionnées OK - OK + OK Cancel - Annuler + Annuler VAMGui + MusE: Load VAM Presets + + MusE: Save VAM Presets @@ -10311,131 +12027,186 @@ disponibles VAMGuiBase + Virtual Analogue for MusE Synthé Analogique Virtuel pour Muse + LFO LFO + Freq Frèq + + + Waveform Forme d'Onde + + + Sine Sinusoïde + + + Pulse Impulsion + + + Saw Dents-de-scie + + + Triangle Triangle + Filter Filtre + EnvMod ModEnv + + + Attack Attaque + + + Decay Affaiblissement + + + Sustain Tenue + + + Release Relachement + Cutoff Limiteur (CutOff) + Resonance Résonance + Invert Inverser + KeyTrack PisteClef + Presets Presets + Set Set + load preset list charger la liste des presets + save preset list enregistrer la liste des presets + save preset list to a new file enregistrer la liste des presets dans un nouveau fichier + delete preset efface le preset + DCO 1 DCO 1 + + Pitch Hauteur + + Detune Désaccordage + + PWM PWM + + FM FM + + PW PW + DCO 2 DCO 2 + On On @@ -10454,6 +12225,7 @@ Jotsif Lindman Hörnlund ( jotsif@linux.nu ) + VAM 1.0beta3 Virtual Analog for MusE Released under GPL. @@ -10470,58 +12242,59 @@ Robert Jonsson VelocityBase MusE: Modify Velocity - Muse: Modifier la vélocité + Muse: Modifier la vélocité Range - Taille + Taille All Events - Tous les Evènements + Tous les Evènements Selected Events - Evènements choisis + Evènements choisis Looped Events - Evènements bouclés + Evènements bouclés Selected & Looped - Bouclés & Sélectionnés + Bouclés & Sélectionnés Values - Valeurs + Valeurs Rate: - Vitesse: + Vitesse: Offset: - Décalage: + Décalage: % - % + % OK - OK + OK Cancel - Annuler + Annuler WTScale + bar scale - échelle de la mesure + échelle de la mesure @@ -10535,10 +12308,12 @@ Robert Jonsson weTools + Solo Solo + Cursor Curseur @@ -10551,87 +12326,123 @@ Robert Jonsson Fonctions + &Edit + Func&tions + &Gain + 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%?} + Other + + &Copy + &Copier + + + + C&ut + Co&uper + + + + &Paste + + + + Edit in E&xternal Editor + Mute Selection + Normalize Selection + Fade In Selection + Fade Out Selection + Reverse Selection + Select Sélectionner + Select &All Selectionner &Tout + &Deselect All &Dé-selectionner tout + Wave edit tools + transport - Pianoroll tools + + WaveEdit tools @@ -10673,10 +12484,12 @@ Robert Jonsson WaveView + MusE - external editor failed + MusE was unable to launch the external editor check if the editor setting in: Global Settings->Audio:External Waveditor @@ -10684,10 +12497,12 @@ is set to a valid editor. + MusE - file size changed + When editing in external editor - you should not change the filesize since it must fit the selected region. @@ -10698,230 +12513,288 @@ Missing data is muted freeverb + FreeVerb + Room Size Dimension de la chambre + Damping Atténuation + Wet Level + Tap-Reverberator + Decay [ms] + + dB 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 --git a/muse2/share/locale/muse_pl.ts b/muse2/share/locale/muse_pl.ts index a36746a6..d7354e66 100644 --- a/muse2/share/locale/muse_pl.ts +++ b/muse2/share/locale/muse_pl.ts @@ -4,6 +4,7 @@ @default + Click this button to enable recording Naciśnij ten przycisk, aby pozwolić na nagrywanie @@ -11,11 +12,12 @@ sets amount of quantization: 0 - no quantization 100 - full quantization - stopień kwantyzacji: + stopień kwantyzacji: 0 - bez kwantyzacji 100 - pełna kwantyzacja + select Pointer Tool: with the pointer tool you can: select parts @@ -25,11 +27,13 @@ with the pointer tool you can: 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. @@ -37,78 +41,95 @@ 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. + Nie kwantyzuj nut poniżej tego poziomu. quantize also note len as default - Kwantyzuj długości nut tak samo jak domyślnie. + 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 @@ -117,77 +138,120 @@ with the pencil tool you can: 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 + cutter Nożyczki + score Pogląd nutowy + glue Klej + quantize Kwantyzator + draw Wykres + mute parts Wyłącz klocki z odtwarzania + + edit automation + + + + + cursor + + + + + + + + + + + Off Wył. @@ -200,130 +264,189 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. Wszystkie Pliki (*) + Add Midi Track Dodaj Ślad Midi + Add Drum Track Dodaj Ślad Perkusyjny + Add Wave Track Dodaj Ślad Audio + Add Audio Output Dodaj Wyjście Audio + Add Audio Group Dodaj Grupę(Szynę) Audio + Add Audio Input Dodaj Wejście Audio + Add Aux Send Dodaj Wysyłkę Audio + eraser Gumka + MESS + DSSI + FST + + Add Synth + Bar + Jack + ALSA: + SYNTH: + JACK: + + + + + + Route Połącznie + + + + channel="%1" + + + + + dest + + devtype="%1" + + + + + type="%1" + + + + + + + name="%1"/ + + source + Velocity + <none> + + + channelMask="%1" + dssi_synth + ladspa_efx + channels="%1" + remch="%1" + mport="%1"/ @@ -331,6 +454,7 @@ Kliknij na pojedynczy klocek aby go wyłączyć z odtwarzania. AboutBox + AboutBox O Programie @@ -356,10 +480,12 @@ Opublikowane na zasadzie licencji GNU Public License + Version 2 pre-alpha + (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -368,10 +494,12 @@ Published under the GNU Public License + &Keep On Rocking! + Alt+K @@ -379,60 +507,78 @@ Published under the GNU Public License Appearance + MusE: load image Muza: Załaduj obrazek. + 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. + Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. + 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> + + Global opacity (opposite of transparency). - Select style sheet + + Standard - Qt style sheets (*.qss) + + Custom + + + + + Select style sheet - Global opaqueness (inverse of transparency). + + Qt style sheets (*.qss) @@ -440,284 +586,398 @@ Word-breaking but only with spaces. AppearanceDialogBase MusE: Appearance Settings - MuzA: Wygląd aplikacji. + MuzA: Wygląd aplikacji. + Apply Zastosuj + Ok Akceptuj + Cancel Anuluj + Arranger Główne Okno + + MusE: Appearance settings + + + + Parts Klocki + show names pokaż nazwy + show events pokaż elementy midi + show Cakewalk Style pokaż w stylu Cakewalk + + y-stretch + + + + Events Elementy midi + note on Dźwięki + poly pressure Poly pressure + controller Kontrolery midi + aftertouch Nacisk pod uderzeniu (aftertouch) + pitch bend Odchylenie stroju (Pitch Bend) + program change Zmiana programu (program change) + special specjalne + Background picture Obrazek w tle bg - tło + tło select... - wybierz... + wybierz... + show snap grid pokaż siatkę przyciągania + Colors Kolory + Items Składniki + + Color name: + + + + + Global opacity + + + + Style/Fonts Style/Czcionki + QT Theme Styl Qt + Windows Windows + MusE MuzA + Metal Metaliczny + Norwegian Wood Norweskie drzewo + Platinum Platyna + CDE CDE + Motif Motif + Motif Plus Motif Plus + Fonts Czcionki + Family Rodzina Czcionek + Size Rozmiar + Font 1 Czcionka 1 + Font 2 Czcionka 2 + Font 3 Czcionka 3 + Font 0 Czcionka 0 + + + + + + + Bold Pogrubionie + + + + + + + Italic Kursywa + + + + + + + + + ... ... + Font 4 Czcionka 4 + Font 5 Czcionka 5 + Palette Paleta kolorów + + add + Zufgen + + + + remove + usuń + + + add to palette dodaj do palety + B B + S S + H H + V V + G G + R R + clear + Style Sheet: + Font 6 Czcionka 6 - - Global opaqueness - - Arranger + Cursor Kursor + Snap Przyciąganie elementów + Len Długość utworu w taktach + NO Brak + TrackInfo Info o śladzie + Track Ślad + Type Typ + + midi song type Utwór Midi + Pitch Glob. Transpozycja + midi pitch transpozycja midi + global midi pitch shift globalna transpozycja midi + Tempo Tempo + + midi tempo Tempo Midi @@ -726,6 +986,7 @@ Word-breaking but only with spaces. Wyjście + Arranger Główne Okno @@ -738,82 +999,112 @@ Word-breaking but only with spaces. do kreski taktowej + GM GM + GS GS + XG XG + N 100% + R N + M W + S S + C T + Ch K + T B + 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. @@ -821,28 +1112,33 @@ 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. @@ -850,19 +1146,34 @@ Right-click to show GUI. + Time lock + + Notation clef. Select this tracks notation clef. + + + + + song length - bars + Port - <unknown> + + Automation + Au&tomatyka + + + + Clef @@ -873,46 +1184,57 @@ Right-click to show GUI. MuzA: Mikser + &Create &Dodaj + &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 @@ -920,46 +1242,57 @@ Right-click to show GUI. 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 @@ -972,6 +1305,7 @@ Right-click to show GUI. odsłuch przed tłumikiem + iR Wej. @@ -980,99 +1314,102 @@ Right-click to show GUI. połączenie wejścia + oR Wyj. + output routing połączenie Wyjścia + Off Wył. + Read Czytaj + Touch Dotknij + Write Zapisz + automation type typ automatyki Channel - Kanał + Kanał + + solo mode + input routing - - Awl::MidiVolEntry - - off - - - - db - - - - - Awl::VolEntry - - off - - - BigTime + MusE: Bigtime MuzA: Duży zegar + format display + bar + beat + + tick + minute minuta + second sekunda + + frame ramka + subframe subramka @@ -1080,6 +1417,7 @@ Right-click to show GUI. ClipListEdit + MusE: Clip List Editor @@ -1087,38 +1425,47 @@ Right-click to show GUI. ClipListEditorBase + MusE: ClipList MuzA: Lista Klipów + Name Nazwa + Refs Refs + Start Start + Len Długość + Data Dane + Clip Properties Właściwości klipu + Pos: Poz.: + Len: Dł.: @@ -1126,14 +1473,17 @@ Right-click to show GUI. CommentBase + Form1 Form. 1 + Track Comment Opis śladu + Track 1 Ślad 1 @@ -1145,42 +1495,52 @@ Right-click to show GUI. MuzA: Konfiguracja exportu plików midi + &OK &Akceptuj + &Cancel &Anuluj + 0 (single track) 0 (pojedynczy ślad) + 1 (multiple tracks) 1 (wiele śladów) + Format: Format: + 96 96 + 192 192 + 384 384 + Division: Rozdzielczość: + Copyright: Prawa autorskie: @@ -1189,46 +1549,57 @@ Right-click to show GUI. Aktuwuj rozszerzony format smf (standard midi file) + MusE: Config Midi File Import/Export + Import: + Split tracks into &parts + Alt+P + Split tracks into parts, or one single part + Export: + Enable extended smf format (currently not implemented) + Use &2-byte time signatures instead of standard 4 + Alt+2 + Save space by replacing note-offs with &zero velocity note-ons + Alt+Z @@ -1236,10 +1607,12 @@ Right-click to show GUI. CtrlPanel + select controller Wybierz kontroler + remove panel Usuń panel @@ -1252,1236 +1625,446 @@ Right-click to show GUI. x + + Velocity Predkość uderzenia (velocity) + add new ... dodaj nowe ... + S S + X + manual adjust + double click on/off + off + + + + Instrument-defined + + + + + + Add ... + + + + + Others + + + + + Edit instrument ... + + + + + Common Controls + + DeicsOnzeGui + Save configuration + + + + + + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + Load category dialog + Load set dialog + Save set dialog + New category + + Delete category + Load category + Save category + Load set + Save set + Delete set + New subcategory + + Delete subcategory + Load subcategory + Save subcategory + New preset + + Delete preset + Load preset + Save preset + No more category supported + You can not add more categories + + + Do you really want to delete %1 ? + + + &Yes &Tak + + + &No &Nie - No category selected - - - - You must first select a category. - - - - Replace or add - - - - %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 ? - - - - &Replace - &Zastąp - - - &Add - &Dodaj - - - Download error - - - - There is no more free category slot. - - - - Save category dialog - - - - No more subcategory supported - - - - You can not add more subcategories - - - - No subcategory selected - - - - You must first select a subcategory. - - - - Load subcategory 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 ? - - - - There is no more free subcategory slot. - - - - Save subcategory dialog - - - - No more preset supported - - - - You can not add more presets - - - - No preset selected - - - - You must first select a preset. - - - - Load preset 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 ? - - - - There is no more free preset slot. - - - - Save preset dialog - - - - Browse set dialog - - - - Browse image dialog - - - - - DeicsOnzeGuiBase - - DeicsOnze - - - - &Preset - - - - Program numerous - - - - INITVOICE - - - - LBank - - - - Subcategory - - - - Bank numerous - - - - NONE - - - - HBank - - - - Category - - - - Prog - - - - Preset - Ustawienie - - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - - - - &Global - - - - Pitch Envelope - - - - PL3 - - - - PL2 - - - - PL1 - - - - PR1 - - - - PR2 - - - - PR3 - - - - Pitch modulation depth - - - - LFO - - - - LFO Sync - - - - Pitch modulation sensitivity - - - - Pitch Modulation Sensitivity - - - - LFO Delay - - - - LFO delay - - - - LFO speed - - - - Amplitude modulation depth - - - - Amplitude modulation sensitivity - - - - Amplitude Modulation Sensitivity - - - - AMS - - - - LFO Waveform - - - - Pitch Modulation Depth - - - - PMD - - - - LFO Speed - - - - AMD - - - - Speed - - - - Delay - Opóźnienie - - - PMS - - - - 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> - - - - Op4 Feedback - - - - Feedback level of the operator 4 - - - - Transpose - Transponuj - - - Op &1 - - - - Scaling 1 - - - - LS1 - - - - RS1 - - - - Rate Scaling - - - - Attack Rate of the operator 1 - - - - Level Scaling - - - - Amplitude Envelope 1 - - - - RR1 - - - - D1R1 - - - - D1L1 - - - - D2R1 - - - - Release Rate - - - - 2° Decay Rate - - - - 1° Decay Level - - - - 1° Decay Rate - - - - Attack Rate - - - - AR1 - - - - Detune, OSCWave, EGShift 1 - - - - DET1 - - - - Detune - - - - EG Shift - - - - 96dB - - - - 48dB - - - - 24dB - - - - 12dB - - - - 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> - - - - Sensitivity 1 - - - - KVS1 - - - - Amplitude Modulation Enable - - - - AME1 - - - - Keyboard Velocity Sensitivity - - - - Key Velocity Sensitivity - - - - EBS1 - - - - EG Bias Sensitivity - - - - Eg Bias Sensitivity - - - - Frequency 1 - - - - Coarse 1 - - - - Coarse Ratio - - - - Fine 1 - - - - Fine Ratio - - - - Freq 1 - - - - Fixed Frequency - - - - Toggle Fix Frequency - - - - FIX - - - - OUT 1 - - - - Output Volume - - - - Volume - Głośność - - - Op &2 - - - - Amplitude Envelope 2 - - - - D1R2 - - - - D1L2 - - - - D2R2 - - - - RR2 - - - - AR2 - - - - Frequency 2 - - - - Coarse 2 - - - - Fine 2 - - - - Freq 2 - - - - Scaling 2 - - - - LS2 - - - - RS2 - - - - OUT 2 - - - - Detune, OSCWave, EGShift 2 - - - - DET2 - - - - Sensitivity 2 - - - - EBS2 - - - - KVS2 - - - - AME2 - - - - Op &3 - - - - Amplitude Envelope 3 - - - - D1R3 - - - - D1L3 - - - - D2R3 - - - - RR3 - - - - AR3 - - - - Scaling 3 - - - - LS3 - - - - RS3 - - - - OUT 3 - - - - Frequency 3 - - - - Coarse 3 - - - - Fine 3 - - - - Freq 3 - - - - Detune, OSCWave, EGShift 3 - - - - DET3 - - - - Sensitivity 3 - - - - EBS3 - - - - KVS3 - - - - AME3 - - - - Op &4 - - - - amplitude Envelope 4 - - - - AR4 - - - - D1R4 - - - - D1L4 - - - - D2R4 - - - - RR4 - - - - Frequency 4 - - - - Coarse 4 - - - - Fine 4 - - - - Freq 4 - - - - Scaling 4 - - - - LS4 - - - - RS4 - - - - OUT 4 - - - - Detune, OSCWave, EGShift 4 - - - - DET4 - - - - Sensitivity 4 - - - - EBS4 - - - - KVS4 - - - - AME4 - - - - &Func - - - - Delay Pan Depth - - - - Delay Pan LFO Freq - - - - Delay Ch Send Level - - - - Channel Chorus - - - - Delay Feedback - - - - Delay On/Off, Return Level - - - - On - - - - Delay Beat Ratio - - - - Delay BPM - - - - Foot Control - - - - Pitch Bend Range - - - - Pitch - - - - Amplitude - - - - Modulation Wheel - - - - Breath Control - - - - Pitch Bias - - - - Envelope Bias - - - - After Touch - Nacisk pod uderzeniu (aftertouch) - - - Phony Mode - - - - POLY - - - - MONO - - - - Potamento - - - - Portamento Mode - - - - FINGER - - - - FULL - - - - PT - - - - Portamento Time - - - - C&horus - - - - Chorus Parameters - - - - Channel send level - - - - On/Off and Return level - - - - Select LADSPA plugin - - - - Change plugin - - - - &Reverb - - - - Reverb Parameters - - - - &Config - &Konfiguracja - - - Font Size - - - - Quality - - - - High - - - - Middle - - - - Low - - - - Ultra low - - - - Filter + + + No category selected - Save Mode (into the song) + + + You must first select a category. - Save only the used presets + + + + Replace or add - Save the entire set + + %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 ? - Save the configuration - + + + + &Replace + &Zastąp - Configuration File - + + + + &Add + &Dodaj - Save... + + + + Download error - Load... + + There is no more free category slot. - Save as default + + Save category dialog - Colors - Kolory + + No more subcategory supported + - Text - Tekst + + You can not add more subcategories + - Background + + + No subcategory selected - Edit Text + + + You must first select a subcategory. - Edit Background + + Load subcategory dialog - Red + + %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 ? - Blue + + There is no more free subcategory slot. - Green + + Save subcategory dialog - Set Path + + No more preset supported - Image in the background : + + You can not add more presets - Browse... + + + + No preset selected - Load the set at the initialization : + + + + You must first select a preset. - Set Brightness, Detune, Attack and Release of the current channel to default + + Load preset dialog - Res. Ctrl + + %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 ? - Cut all notes off + + There is no more free preset slot. - Panic! + + Save preset dialog - Number of Voices + + Browse set dialog - Number of voices + + Browse image dialog + + + DeicsOnzeGuiBase - Enable - Włącz + Preset + Ustawienie - Channel - + Delay + Opóźnienie - Vol - + Transpose + Transponuj - Channel Ctrl - + Volume + Głośność - Release - + After Touch + Nacisk pod uderzeniu (aftertouch) - Attack - + &Config + &Konfiguracja - Brightness - + Colors + Kolory - Modulation - + Text + Tekst - Pan - + Enable + Włącz DidYouKnow + Did you know? + Don't show on startup + Next tip + Close @@ -2489,130 +2072,162 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t DrumEdit + Load Map Załaduj zestaw + Save Map Zapisz zestaw + &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 @@ -2621,118 +2236,199 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t 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 + + 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 port wyjściowy + + 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) + Reset GM Map + Previous Part + Next Part + + Re-order list + + + + + Crescendo/Decrescendo + + + + + Quantize + + + + + Erase Event + + + + + Move Notes + + + + + Delete Overlaps + + + + &Plugins + Drum tools + + cursor tools + + + + + Set step size for cursor edit + + + + panic Zatrzymaj wszystkie komunikaty midi! + transport + Vol + Drum map + Reset the drum map with GM defaults? @@ -2740,14 +2436,17 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCAfterDialog + Time Position Pozycja: + Pressure Nacisk + MusE: Enter Channel Aftertouch MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) @@ -2786,58 +2485,73 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCtrlBase + MusE: Edit Controller Event MuzA: Edytuj zdarzenia kontrolera + Time Position Pozycja: + Available Controller: Dostępne kontrolery: + Create New Controller Ustaw nowy kontroler + textLabel3 Etykieta3 + Value Wartość + Controller Kontroler + H-Bank H-Bank + L-Bank L-Bank + Program Program + + off wył. + pushButton4 naciśnij Przycisk 4 + &OK &Akceptuj + &Cancel &Anuluj @@ -2845,10 +2559,12 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditEventDialog + Ok Akceptuj + Cancel Anuluj @@ -2856,46 +2572,57 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditGainBase + MusE: Modify gain + Gain + 200% 200% + 100% 100% + 0% 0% + &Reset + Alt+R + &Apply &Zastosuj + Alt+A Alt+A + &Cancel + Alt+C Alt+C @@ -2903,131 +2630,178 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditInstrument + + MusE: Create file failed + MusE: Write File failed MuzA: Zapis pliku nie powiódł się + + + + MusE: + + The user instrument directory + + does not exist yet. Create it now? - (You can override with the environment variable MUSEINSTRUMENTS) + + + (You can change the user instruments directory at Settings->Global Settings->Midi) + + Unable to create user instrument directory + + MusE: Save Instrument Definition + + Instrument Definition (*.idf) + + MusE: Save instrument as + Enter a new unique instrument name: + The user instrument: + 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 + + already exists. + A controller number + + MusE MuzA + + The current Instrument contains unsaved data Save Current Instrument? + + &Save &Zapisz + + &Nosave &Nie zapisuj + &Abort &Anuluj @@ -3035,6 +2809,7 @@ Save Current Instrument? EditInstrumentBase + MusE: Instrument Editor MuzA: Edytor Instrumentów @@ -3047,14 +2822,17 @@ Save Current Instrument? Patch Nazwa + High Bank: Górny Bank: + Low Bank: Dolny Bank: + Program: Program: @@ -3073,10 +2851,16 @@ nie ważne Patch/Grupa + + + &Delete &Kasuj + + + Alt+D Alt+D @@ -3093,18 +2877,22 @@ nie ważne Nowa Grupa + Drum Perkusja + GM GM + GS GS + XG XG @@ -3117,6 +2905,7 @@ nie ważne Predefiniowany kontroler: + This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. @@ -3124,6 +2913,8 @@ handled like normal controllers. Zauważ, że "pitch" i "zmiana programu (program change)" są traktowane w MuzA jako zwykłe kontrolery. + + Properties Właściwości @@ -3136,30 +2927,38 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s Typ + Control7 Kontroler7 + Control14 Kontroler14 + RPN RPN + NRPN NRPN + Pitch Transpozycja + Program Program + + H-Ctrl H-Ctrl @@ -3168,6 +2967,8 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s Numer midi kontrolera High Byte + + L-Ctrl L-Ctrl @@ -3180,10 +2981,12 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s Zakres + Min Min. + Max Max @@ -3192,10 +2995,12 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s Domyślny + Name nazwa + Type Typ @@ -3228,247 +3033,314 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s Zatrzymaj wszystkie komunikaty midi! + Hex Entry: Wartość Heks. + &File &Plik + Tools Narzędzia + New Nowy + &New &Nowy + Ctrl+N Ctrl+N + Open Otwórz + &Open... &Otwórz... + Ctrl+O Ctrl+O + Save Zapisz + &Save &Zapisz + Ctrl+S Ctrl+S + Save As Zapisz jako + Save &As... Zapisz &Jako... + Exit Zakończ + E&xit &Zakończ + Instrument Name: + Selected instrument name. + List of defined instruments. + Pa&tches + List of groups and patches. + Group/Patch + + + Name: Nazwa: + + Group or patch name + Patch high bank number + Patch high bank number. --- means don't care. + --- dont care + Patch low bank number + Patch low bank number. --- means don't care. + --- + + Patch program number + Drum patch + If set, the patch is available only for drum channels. + GM patch + If set, the patch is available in a 'GM' or 'NO' midi song type. + GS patch + If set, the patch is available in a 'GS' or 'NO' midi song type. + XG patch + If set, the patch is available in an 'XG' or 'NO' midi song type. + Delete group or patch + New patch + New &Patch + Alt+P + New group + New &Group + Alt+G + Contro&ller + Common: + List of defined controllers + List of defined controllers. + Min + Max + Def + Midi controller name + Type: Typ: + + Midi controller type + RPN14 + NRPN14 + + Midi controller number high byte + Midi controller number low byte (* means drum controller) + Midi controller number low byte. If low byte is * then the controller is a 'drum controller'. For drum tracks and @@ -3481,19 +3353,23 @@ Examples: The GS and XG instruments' + * 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. @@ -3516,38 +3392,52 @@ True range: Min: -8192 Max: 8191 (bias 0) + + Maximum value + Default: + L-Bank L-Bank + + + + + off + Progr. Nr programu + ??? ??? + H-Bank H-Bank + Default value. Off: No default. + Default (initial) value. Off means no default. If a default value is chosen, the value will be sent @@ -3566,47 +3456,59 @@ Caution! Watch out for controllers such as + off dont care + Add common controller + &Add &Dodaj + 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 @@ -3616,38 +3518,49 @@ Typically, set to 127/127, or an unused + Lo: + Null parameter number Low byte + S&ysEx + SysEx List: + New SysE&x + Alt+X + &Help P&omoc + + new item + + What's this? @@ -3655,18 +3568,22 @@ Typically, set to 127/127, or an unused EditMetaDialog + Time Position Pozycja: + Meta Type Meta Typ + Enter Hex Wstaw Heks. + MusE: Enter Meta Event MuzA: Wstaw Zdarzenie Meta (nacisk po uderzeniu @@ -3705,34 +3622,42 @@ Typically, set to 127/127, or an unused EditNoteDialogBase + MusE: Enter Note MuzA: Wstaw Nutę + OK Akceptuj + Cancel Anuluj + Length: Długość: + Time Position: Pozycja: + Pitch: Wysokość dźwięku + Velocity On: Predkość uderzenia (velocity) Wł.: + Velocity Off: Predkość uderzenia (velocity) Wył.: @@ -3740,18 +3665,22 @@ Typically, set to 127/127, or an unused EditPAfterDialog + Time Position Pozycja: + Pitch Wysokość dźwięku + Pressure Nacisk + MusE: Enter Poly Aftertouch MuzA: Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) @@ -3759,22 +3688,27 @@ Typically, set to 127/127, or an unused EditSysexDialogBase + MusE: Enter SysEx MuzA: Wstaw komunikat midi SysEx + TimePosition: Pozycja: + Comment: Opis: + OK Akceptuj + Cancel Anuluj @@ -3782,6 +3716,7 @@ Typically, set to 127/127, or an unused EditToolBar + Edit Tools Narzędzia Edycyjne @@ -3789,54 +3724,67 @@ Typically, set to 127/127, or an unused 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ń + show native gui + save preset + MusE: Save Preset + Replace effect + Do you really want to replace the effect %1? @@ -3844,6 +3792,7 @@ Typically, set to 127/127, or an unused FLUIDGui + FLUID: open Soundfile @@ -3851,14 +3800,17 @@ Typically, set to 127/127, or an unused FLUIDGuiBase + Form1 + Soundfont + Load @@ -3866,98 +3818,123 @@ Typically, set to 127/127, or an unused FLUIDSynthGuiBase + FLUID Synth + Load + Delete Kasuj + Dump Info + ID + Fontname + Chnl + Soundfont + Drum Chnl + + Level + Width + Damping + Room Size + Reverb + CHANNEL SETUP + Sine + Triangle + Type Typ + Number + Speed + Depth + Chorus + Gain + LOADED SOUNDFONTS @@ -3969,14 +3946,17 @@ Typically, set to 127/127, or an unused Form1 + Global Globalnie + User Użytkownik + Project Katalog projektu @@ -3991,15 +3971,18 @@ Cofiguration konfiguracja + only Songdata Tylko pliki typu utwór + fdialogbuttons + Songdata + Configuration @@ -4008,6 +3991,7 @@ Configuration FluidSynthGui + Choose soundfont @@ -4023,72 +4007,86 @@ Configuration GateTimeBase MusE: Modify Gate Time - MuzA: modyfikuj Gate Time + MuzA: modyfikuj Gate Time Range - Zakres + Zakres All Events - Wszytkie Elementy + Wszytkie Elementy Selected Events - Zaznaczone Elementy + Zaznaczone Elementy Looped Events - Pomiędzy lokatorami + Pomiędzy lokatorami Selected & Looped - Zaznaczone & Pomiędzy lokatorami + Zaznaczone & Pomiędzy lokatorami Values - Wartość + Wartość Rate: - Częstotliwość: + Częstotliwość: Offset: - Offset: + Offset: % - % + % OK - Akceptuj + Akceptuj Cancel - Anuluj + Anuluj + + + + GlobalSettingsConfig + + + Selects instruments directory + GlobalSettingsDialogBase + MusE: Global Settings MuzA: Globalne Ustawienia + Audio Audio + Mixer Mikser + + dB dB + min. Meter Value min. wartość miernika sygnału @@ -4097,22 +4095,31 @@ Configuration dolna granica przesunięcia tłumika + Midi Midi + Ticks Tykanie + + + 1024 1024 + + + 2048 2048 + 4096 4096 @@ -4121,48 +4128,68 @@ Configuration 8172 + Displayed Resolution (Ticks/Quarternote) Wyświetlana Rozdzielczość (Tykanie/Ćwiartka) + + 48 48 + + 96 96 + + 192 192 + + 384 384 + + 768 768 + + 1536 1536 + + 3072 3072 + + 6144 6144 + + 12288 12288 + RTC Resolution (Ticks/Sec) @@ -4170,26 +4197,48 @@ RTC (Rzeczywista Rozdzielczość Zegara) (Tykanie/Sekunda) + GUI Interfejs Użytkownika + /sec /sek. + GUI Refresh Rate Częstotliwość odświeżania interfejsu użytkownika + + 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. + + + + &Apply &Zastosuj + &Ok &Akceptuj + &Cancel A&nuluj @@ -4198,304 +4247,479 @@ RTC (Rzeczywista Rozdzielczość Zegara) Przeglądarka pomocy: + Application Zastosowanie + Start Muse Uruchamianie MuzA + start with last song Otwórz ostatnio otwierany utwór + start with song Ładuj przy uruchamianiu utwór + start song: Ładuj utwór: + Views Widoki + + + + + y-pos poz.-y + + + + show Pokaż + + + + + x-pos poz.-x + + + + height wysokość + + + + width szerokość + Big Time Duży Zegar + Arranger Główne Okno + Transport Panel transportu + + + + + Cur Aktualne + + + + + set current values 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 + Mixer B + show "Did you know?" dialog + Start song + min. Slider Val - Use Jack freewheel mode if possible. -(Speeds up bounce operations). + + Enable denormal protection - Enable denormal protection + + Enable output limiter - Enable output limiter + + External Waveditor - Enable in-place processing for VST plugins. -(Requires restart.) + + External Waveditor command - 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. + + Note: External editor opened from the internal editor. - External Waveditor + + Dummy Audio Driver (settings require restart) - External Waveditor command + + Hz - Note: External editor opened from the internal editor. + + Period size (Frames per period): - Dummy Audio Driver (settings require restart) + + + 16 + 16 + + + + Try to use Jack Freewheel - Preferred sample rate + + Speeds bounce operations - 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. + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. - Hz + + VST in-place - Actual rate used now (dummy or not): + + 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. - Period size (Frames per period): + + Minimum control period - 16 - 16 + + 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) + + Instruments Directory + + + + Use old-style stop shortcut: + Move single armed track with selection + On Launch + Behavior + + Header + + + Track Info Columns + + + 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 + &Edit + Insert Tempo + Insert Signature + + Insert Key + + + + Edit Positon + Edit Value + Delete Event + Master tools + Edit tools + + Key + + + + + new key + + + + 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! @@ -4503,18 +4727,22 @@ Shorter periods are desirable. ListEdit + &Edit E&dytuj + Cut Wytnij + Copy Kopiuj + Paste Wklej @@ -4527,6 +4755,7 @@ Shorter periods are desirable. Wstaw Narzędzia + Delete Events Kasuj Elementy @@ -4535,6 +4764,7 @@ Shorter periods are desirable. Wstaw nutę + insert Note Wstaw nutę @@ -4543,6 +4773,7 @@ Shorter periods are desirable. wstaw SysEx + insert SysEx wstaw SysEx @@ -4551,6 +4782,7 @@ Shorter periods are desirable. Wstaw kontroler + insert Ctrl wstaw @@ -4559,6 +4791,7 @@ Shorter periods are desirable. Wstaw Meta + insert Meta Wstaw Meta @@ -4567,6 +4800,7 @@ Shorter periods are desirable. Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) + insert Channel Aftertouch Wstaw zmianę średniego nacisku pod uderzeniu (channel aftertouch) @@ -4575,14 +4809,17 @@ Shorter periods are desirable. Wstaw pojedynczą zmiane nacisku pod uderzeniu + insert Poly Aftertouch Wstaw zmianę średniego nacisku pod uderzeniu (Poly Aftertouch) + Tick Takt (impuls sygnału czasu) + Bar Takt @@ -4591,38 +4828,47 @@ Shorter periods are desirable. Typ + Ch Kan + Val A Wart. A + Val B Wart. B + Val C Wart. C + Len Dług. + Comment Opis + List tools + Insert tools + Type Typ @@ -4630,22 +4876,27 @@ Shorter periods are desirable. MITTransposeBase + MusE: Midi Input Plugin: Transpose MuzA: Wtyczka Wejścia Midi: Transponuj + On Włącz. + TriggerKey Klawisz uruchamiający + Transpose: Transponuj: + +0 @@ -4657,22 +4908,27 @@ Shorter periods are desirable. brak + Port Numer + GUI Interfejs użytkownika + Instrument Typ portu midi + Device Name Nazwa Urządzenia + State Status @@ -4681,158 +4937,238 @@ Shorter periods are desirable. nieznane + I Wej. + O Wyj. + MusE: bad device name + + + 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? + + + + please choose a unique device name + + in + + out + Show first aliases + Show second aliases + + + Toggle all + + + + + + Change all tracks now + + + + Create + 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 - Connect these to new midi tracks + + Auto-connect these channels to new midi tracks + + + + + Auto-connect new midi tracks to these channels + + + + + Auto-connect new midi tracks to this channel + + + + + 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 (first listed only) + + Connect new midi tracks to this channel, on this port. + 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 - 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 - - - - 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) - - - + State: result of opening the device Status: rezultat otworzenia urządzenia + In routes + Out routes + Def in ch + Def out ch + <unknown> + + <none> @@ -4840,41 +5176,55 @@ NOTE: Currently only one output port and channel supported (first found) 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 + Play Odtwarzanie + + + Insert rest (step rec) + + MTScale + bar scale Oś taktów @@ -4882,30 +5232,37 @@ NOTE: Currently only one output port and channel supported (first found) MarkerView + 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 @@ -4914,6 +5271,7 @@ NOTE: Currently only one output port and channel supported (first found)Dodaj znacznik + delete marker Kasuj znacznik @@ -4926,14 +5284,17 @@ NOTE: Currently only one output port and channel supported (first found)&Plik + &Edit &Edycja + marker-tools + edit tools Narzędzia Edycyjne @@ -4941,34 +5302,42 @@ NOTE: Currently only one output port and channel supported (first found) MasterEdit + Cursor Poz. kursora + Snap Przyciąganie + time at cursor position Wstaw metrum w aktualnej pozycji kursora + 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 @@ -4981,6 +5350,7 @@ NOTE: Currently only one output port and channel supported (first found)Aktywuj Ślad Tempo/Metrum + Info Info @@ -4989,18 +5359,22 @@ NOTE: Currently only one output port and channel supported (first found)Wył. + Enable Włącz + Enable usage of master track Aktywuj Ślad Tempo/Metrum + Master tools + Enable master @@ -5008,114 +5382,142 @@ NOTE: Currently only one output port and channel supported (first found) MetronomeConfigBase + MusE: Metronome Config MuzA: Konfiguracja Metronomu + Metronome Metronom + Audio Beep Audio Beep + MIDI Click MIDI Klik + Midi Channel Kanał Midi + Measure Note Dźwięk 1 uderzenie w takcie + Measure Velocity Głośność 1 uderzenie w takcie + Beat Velocity Głośność pozostałych uderzeń metronomu + Beat Note Dźwięk pozostałych uderzeń metronomu + Midi Port Numer Portu Midi + Precount Nabicie tempa + enable włącz + Bars Takty + From Mastertrack Ze śladu tempo/metrum (Mastertrack) + / / + Signature Metrum + Prerecord Prerecord + Preroll Preroll + &Apply &Zastosuj + &OK &Akceptuj + &Cancel &Anuluj + Choose outputs... + 50 50 + % Audio volume + Hint: Enable metronome in Transportpanel + Alt+A Alt+A + Alt+O + Alt+C Alt+C @@ -5130,261 +5532,352 @@ NOTE: Currently only one output port and channel supported (first found) MidiControllerEditDialogBase + Type - Typ + Typ + Properties - Właściwości + Właściwości + Type - Typ + Typ &New Neu + &Delete - &Kasuj + &Kasuj + &OK - &AkceptujOK + &AkceptujOK + &Cancel - &Anuluj + &Anuluj + MusE: Define Midi Controller - MuzA: Zdefiniuj Midi Kontroler + MuzA: Zdefiniuj Midi Kontroler + &Add - &Dodaj + &Dodaj + + + + Alt+A + Alt+A + create new entry - Stwórz nowy wpis + 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 + Naciśnij Nowy żeby utworzyć nowy wpis do listy zdefiniowanych kontrolerów MuzA + delete selected entry - kasuj zaznaczone elementy + kasuj zaznaczone elementy + + + + A&pply + + Predefined Controller: - Predefiniowany kontroler: + Predefiniowany kontroler: + Name - nazwa + nazwa + + H-Ctrl - H-Ctrl + H-Ctrl + + L-Ctrl - L-Ctrl + L-Ctrl + Min Val - Min. Wart. + Min. Wart. + Max Val - Max Wart. + Max Wart. + list of defined controllers - Lista zdefiniowanych kontrolerów + Lista zdefiniowanych kontrolerów + This is the MusE list of defined controllers. - To jest lista MuzA zdefiniowanych midi kontrolerów. + To jest lista MuzA zdefiniowanych midi kontrolerów. + Managed Controller for Port - Obsługiwane kontrolery dla portu + Obsługiwane kontrolery dla portu + Channel - Kanał + 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. + 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 + Nazwa + Min Value - Min. Wart. + Min. Wart. + Max Value - Max Wart. + Max Wart. + 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 + Numer midi kontrolera High Byte + Midi Controller Number Low Byte - Numer midi kontrolera Low Byte + Numer midi kontrolera Low Byte + Range - Zakres + Zakres MidiFilterConfigBase + MusE: Midi Input Filter Filtr Wejścia Midi + Record Filter Filtr Komunikatów Przych. (Midi In) + + Note On Dźwięki + + Poly Pressure Średni nacisk po uderzeniu + + Controller Kontrolery + + Program Change Zmiana programu (program change) + + After Touch Nacisk pod uderzeniu (aftertouch) + + Pitch Bend Odchylenie stroju (Pitch Bend) + + Sysex SysEx + Thru Filter Filtr Komunikatów Wych. (Midi Thru) + Controller Filter Filtruj Kontroler + Channel Filter Filtruj Kanał + 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 @@ -5392,6 +5885,8 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s MidiInputTransformDialog + + New Nowy @@ -5399,214 +5894,334 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s MidiInputTransformDialogBase + MusE: Midi Input Transformator MuzA: Transformator Wejścia Midi + Filter Filtr + All Wszystko + + + + + Equal Równe + + + + + Unequal Nierówne + Note Dźwięk + + Poly Pressure Średni nacisk po uderzeniu (Poly Pressure) + + Control Change Control Change + + Aftertouch Nacisk pod uderzeniu (aftertouch) + + Pitch Bend Odchylenie stroju (Pitch Bend) + + NRPN NRPN + + RPN RPN + + + Value 2 Wartość 2 + + + + + Value 1 Wartość 1 + + Event Type Rodzaje komunikatów midi + + + + Ignore Ignoruj + + + + Higher Powyżej + + + + Lower Poniżej + + + + Inside Pomiędzy + + + + Outside Poza + + Channel Kanał + + Port Port + Processing Przetwarzanie + + + + + Keep Pozostaw + + + + + Fix Ustal + + + + Plus Plus + + + + Minus Minus + + + + Multiply Przemnóż + + + + Divide Podziel + + + + Invert Odwróć + ScaleMap Zakres Skali + Flip Odwróć + + + + Dyn Dyn + + + + Random Losowo + Modules Moduły + 1 1 + 2 2 + 3 3 + 4 4 + enable modul 1 aktywuj moduł 1 + enable modul 2 aktywuj moduł 2 + enable modul 3 aktywuj moduł 3 + enable modul 4 aktywuj moduł 4 + Preset Ustawienie + Name: Nazwa: + Comment: Opis: + Function Funkcja + &New &Nowy + create new preset Twórz nowe ustawienie + &Delete &Kasuj + delete preset kasuj ustawienie + &Dismiss &Wyrzuć + PresetList Lista Ustawień @@ -5633,50 +6248,64 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s 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 @@ -5713,26 +6342,33 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s typ automatyki + + double click on/off + solo mode + iR Wej. + input routing + oR Wyj. + output routing połączenie Wyjścia @@ -5740,111 +6376,142 @@ Zauważ, że "pitch" i "zmiana programu (program change)" s 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, @@ -5854,6 +6521,7 @@ 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 @@ -5864,30 +6532,36 @@ This means you may have several master + 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 @@ -5897,103 +6571,128 @@ Note: It may be impossible to rewind fast + 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> @@ -6001,70 +6700,87 @@ Apply sync settings? MidiSyncConfigBase + MusE: Midi Sync MuzA: Synchronizacja Midi + Apply Zastosuj + Ok Akceptuj + Cancel Anuluj + hour godzina + h godz. + minute minuta + m min. + second sekunda + s sek. + frame ramka + f r. + subframe subramka + 24 24 + 25 25 + 30D 30D + 30N 30N @@ -6133,39 +6849,48 @@ Apply sync settings? wszystkie + MTC MTC + Type: Typ: + Offset: Offset: + 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. @@ -6175,14 +6900,17 @@ 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. @@ -6191,14 +6919,17 @@ Enabled inputs in the list will + 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 @@ -6206,10 +6937,12 @@ Enabled inputs in the list will + ms + Send sync delay @@ -6217,10 +6950,12 @@ Enabled inputs in the list will MidiTrackInfoBase + MusE: TrackInfo Info o śladzie + output channel kanał wyjściowy @@ -6233,6 +6968,8 @@ Enabled inputs in the list will Info o śladzie + + % % @@ -6241,10 +6978,23 @@ Enabled inputs in the list will Nazwa Śladu + output port port wyjściowy + + iR + Wej. + + + + + + + + + off Wył. @@ -6265,6 +7015,7 @@ Enabled inputs in the list will wybierz ustawienie instrumentu + Transp. Transpozycja @@ -6273,26 +7024,47 @@ Enabled inputs in the list will Głośność + Channel Info Info o kanale + + Rec: + + + + + Prog + + + + + Vol + + + + Pan Panorama + Delay Opóźnienie + H-Bank H-Bank + Compr. Kompr. + L-Bank L-Bank @@ -6301,10 +7073,12 @@ Enabled inputs in the list will Nr programu + Velocity Prędk. uderz. (vel) + Length Długość @@ -6355,108 +7129,115 @@ Możesz określić więcej niż jeden ślad do nagrywania: Wybierz Bank MSB + all midi events are sent to this output channel + Out ch + input routing - Inputs - - - + output routing połączenie Wyjścia + oR Wyj. + 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> - Record: - - - + Add all settings to song + All 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 - Prog. - - - + Volume. Double-click on/off. + Add vol setting to song - Vol. - - - + + Change stereo position. Double-click on/off. + Add pan setting to song @@ -6464,230 +7245,345 @@ Możesz określić więcej niż jeden ślad do nagrywania: MidiTransformDialogBase + MusE: Midi Transformator MuzA: Midi Transformator + &New &Nowy + &Delete &Kasuj + &Apply &Zastosuj + &OK &Akceptuj + &Cancel &Anuluj + PresetList Lista Ustawień + Processing Przetwarzanie + + Event Type Rodzaje komunikatów midi + + + + + Keep Pozostaw + + + + Fix Ustal + + Note Dźwięki + + Poly Pressure Średni nacisk po uderzeniu + + Control Change Control Change + + Aftertouch Nacisk pod uderzeniu (aftertouch) + + Pitch Bend Odchylenie stroju (Pitch Bend) + + NRPN NRPN + + RPN RPN + + + + Plus Plus + + + + Minus Minus + + + + Multiply Przemnóż + + + + Divide Podziel + + + Value 2 Wartość 2 + + Invert Odwróć + ScaleMap Zakres Skali + Flip Odwróć + + Dyn Dyn. + + Random Losowo + + + Value 1 Wartość 1 + + Length Długość: + Position Pozycja + Filter Filtruj + All Wszystko + + + + + Equal Równe + + + + + Unequal Nnierówne + + + + Ignore Ignoruj + + + + Higher Powyżej + + + + Lower Poniżej + + + + Inside Pomiędzy + + + + Outside Poza + Bar Range Zakres Taktów + Preset Ustawienie + Name: Nazwa: + Comment: Opis: + Range Zakres + process all events przetwórz wszystkie elementy + selected tracks Zaznaczone ślady + inside loop Pomiędzy lokatorami. + Function Opcje + Select Wybierz + Quantize Kwantyzuj + Delete Kasuj + Transform przekształć + Insert Wstaw + Copy Kopiuj + Extract Wydobądź + Quantize Value Wartość kwantyzacji @@ -6695,6 +7591,8 @@ Możesz określić więcej niż jeden ślad do nagrywania: MidiTransformerDialog + + New Nowy @@ -6702,6 +7600,7 @@ Możesz określić więcej niż jeden ślad do nagrywania: MixdownFileDialog + Wave Files (*.wav);;All Files (*) Pliki Wave (*.wav);;Wszystkie Pliki (*) @@ -6709,50 +7608,62 @@ Możesz określić więcej niż jeden ślad do nagrywania: MixdownFileDialogBase + MusE: Set Mixdown Wavefile MuzA: Ustaw miks do zgrania do pliku Wavefile + &OK &Akceptuj + &Cancel &Anuluj + File Path Ścieżka do pliku + Channel Ilość Kanałów + Stereo Stereo + Mono Mono + 5.1 5.1 + wav,16 Bit wav, 16 Bitów + wav, 24 Bit wav, 24 Bity + wav, 32 Bit (float) wav, 32 Bity (float) + Format Format @@ -6767,14 +7678,17 @@ Możesz określić więcej niż jeden ślad do nagrywania: MusE + &File &Plik + Open &Recent Otwórz O&statnie + Save &As Zapisz &Jako @@ -6783,34 +7697,43 @@ Możesz określić więcej niż jeden ślad do nagrywania: Druckerkonfiguration + Import Midifile &Import Pliku Midi + Export Midifile &Export do pliku midi + + Import Wave File Import Pliku &Wave + &Quit &Zakończ + &Edit &Edycja + C&ut W&ytnij + &Copy &Kopiuj + &Paste &Wklej @@ -6819,186 +7742,233 @@ Możesz określić więcej niż jeden ślad do nagrywania: Spur Lschen + 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 + Select Zaznacz + Drums Edytor Perkusji + + List Edytor Lista + Graphic Edytor Graficzny Tempo/Metrum + Mastertrack Ślad Tempo/Metrum + Midi &Transform &Przekształcanie Midi + Modify Gate Time Modyfikuj Gate Time + Modify Velocity Modifikuj predkość uderzenia (velocity) + Crescendo Crescendo + Transpose Transponuj + Thin Out Decresendo + Erase Event Skasuj Element + Note Shift Przesunięcie Dźwięku + Move Clock Przesuń licznik + Copy Measure Kopiuj Takt + Erase Measure Skasuj Takt + Delete Measure Skasuj Takt + Create Measure Twórz Takt + Mix Track Zmiksuj Ślad + Midi Midi + &Structure &Globalne + Global Cut Globalne Wycięcie + Global Insert Globalne Wstawienie + Global Split Globalne Podzielenie + Copy Range Kopiuj Zakres + Cut Events Wytnij Elementy + Transport Panel Panel transportu + Bigtime Window Duży Zegar - Don't Follow Song + + Don't Follow Song nie podążaj za utworem + Follow Page kursor się przesuwa + Follow Continuous takty się przesuwają (kursor stoi) + Global Settings Globalne Ustawienia + Follow Song podążanie kursora za utworem + Metronome Metronom + Midi Sync Synchronizacja Midi + Appearance Settings Ustawienia wyglądu + Midi Input Transform Przekształcanie Wejścia Midi + Midi Input Filter Filtr Wejścia Midi + Midi Remote Control Zdalne Sterowanie Midi @@ -7007,6 +7977,7 @@ Możesz określić więcej niż jeden ślad do nagrywania: Losowy generator rytmu + &Midi &Midi @@ -7015,35 +7986,43 @@ Możesz określić więcej niż jeden ślad do nagrywania: Mikser + Input Plugins Wtyczki wejścia + Reset Instr. Reset Instr. + Init Instr. Inicjalizacja Instr. + Local Off Local Off + &Audio &Audio + Bounce to Track Zgrywanie śladu (bounce) + Bounce to File Zgrywanie do Pliku (bounce) + &Help P&omoc @@ -7056,16 +8035,21 @@ Zgrywanie śladu (bounce) Informacje o &Qt + MusE: load project MuzA: ładuj utwór + The current Project contains unsaved data Save Current Project? Otwarty utwór zawiera niezapisane dane Zapisać otwarty utwór? + + + &Save &Zapisz @@ -7074,18 +8058,25 @@ Zapisać otwarty utwór? &Nie zapisuj + + &Abort &Anuluj + + MusE: Save As MuzA: Zapisz Jako + + Nothing to edit Nie ma nic do edytowania + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -7098,10 +8089,12 @@ Zapisać otwarty utwór? &Nadpisz + no help found at: nie znalezniono pomocy + MusE: Open Help MuzA: Otwórz Pomoc @@ -7114,6 +8107,7 @@ Zapisać otwarty utwór? cofnij + Und&o Co&fnij @@ -7122,18 +8116,22 @@ Zapisać otwarty utwór? cofnij + Re&do Co&fnij + undo last change to song cofnij ostatnią zmianę w utworze + redo last undo ponów ostanie cofnij + Transport Panel transportu @@ -7142,6 +8140,7 @@ Zapisać otwarty utwór? pętla + Loop Pętla @@ -7150,6 +8149,7 @@ Zapisać otwarty utwór? włącz wcinki (punch In) + Punchin Włącz wcinki (punch In) @@ -7158,6 +8158,7 @@ Zapisać otwarty utwór? wył. wcinki (punch out)punchout + Punchout Wył. wcinki (punch out) @@ -7166,6 +8167,7 @@ Zapisać otwarty utwór? Początek + Start Początek @@ -7174,6 +8176,7 @@ Zapisać otwarty utwór? Przewiń do tyłu + Rewind Przewiń do tyłu @@ -7182,6 +8185,7 @@ Zapisać otwarty utwór? Przewiń do przodu + Forward Przewiń do przodu @@ -7190,6 +8194,7 @@ Zapisać otwarty utwór? Stop + Stop Stop @@ -7198,6 +8203,7 @@ Zapisać otwarty utwór? Odtwarzaj + Play Odtwarzanie @@ -7206,6 +8212,7 @@ Zapisać otwarty utwór? Nagrywaj + Record Nagrywanie @@ -7214,6 +8221,8 @@ Zapisać otwarty utwór? Zatrzymaj wszystkie komunikaty midi! + + Panic Zatrzymaj wszystkie komunikaty midi! @@ -7222,6 +8231,7 @@ Zapisać otwarty utwór? nowy + &New &Nowy @@ -7230,6 +8240,7 @@ Zapisać otwarty utwór? otwórz + &Open &Otwórz @@ -7242,6 +8253,7 @@ Zapisać otwarty utwór? Pianoroll + Pianoroll Pianoroll @@ -7254,6 +8266,7 @@ Zapisać otwarty utwór? Edytor Znaczników + File Buttons Przyciski Menu Plik @@ -7262,26 +8275,35 @@ Zapisać otwarty utwór? Nieznany Format Pliku + MusE: Write File failed MuzA: Zapis pliku nie powiódł się + + + MusE: Song: MuzA: Utwór MusE: Copy Range - Kopiuj Zakres + Kopiuj Zakres not implemented - jeszcze nie wprowadzone + jeszcze nie wprowadzone MusE: Cut Events - MuzA: Wytnij Elementy + MuzA: Wytnij Elementy + + + + + MusE: Bounce to Track MuzA: Zgrywanie (bounce) do Śladu @@ -7304,42 +8326,49 @@ zaznacz ślad audio jako docelowy aby zaimpotować plik audio, najpierw zaznacz ślad audio + Delete Selected Tracks Skasuj Zaznaczone Ślady View - &Widok + &Widok + Edit Instrument Edytuj Instrument + Restart Audio Zrestartuj Audio Automation - Au&tomatyka + Au&tomatyka + Mixer Automation Automatyka Miksera + Take Snapshot Zrób zrzut ekranu + Clear Automation Data Wyczyść automatykę Settings - &Ustawienia + &Ustawienia + Configure Shortcuts Konfiguracja skrótów @@ -7348,22 +8377,27 @@ zaznacz ślad audio jako docelowy Export do pliku midi + Midi Ports / Soft Synth Porty Midi i Syntezatory Softowe + &Manual &Instrukcja Obłsugi + &MusE Homepage strona domowa &MuzA + &Report Bug... &Zgłoś Błąd... + &About MusE &Informacje o programie @@ -7372,30 +8406,36 @@ zaznacz ślad audio jako docelowy Co &To? + Cannot read template Nie można odczytać pliku szablonu + File open error Błąd odczytu pliku + File read error błąd odczytu pliku + MusE: load template MuzA: ładuj szablon MusE: Bounce - MuzA: Zgrywanie (bounce) + MuzA: Zgrywanie (bounce) set left/right marker for bounce range - ustaw lokatory do zgrania (bounce) danego zakresu + ustaw lokatory do zgrania (bounce) danego zakresu + + MusE: Bounce to File MuzA: Zgrywanie (bounce) do Pliku @@ -7404,200 +8444,301 @@ zaznacz ślad audio jako docelowy nie znaleziono śladu wyjściowego + MusE: Export Midi MuzA: Exportuj Midi + MusE: Import Midi MuzA: Importuj Midi + Add midi file to current project? Dodać plik midi do otwartego utworu? + &Add to Project &Dodaj do utworu + &Replace &Zastąp + reading midifile czytanie pliku midi + failed: nie powiodło się + + 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. + Import Part + &Insert + Paste c&lone + Paste to &track + Paste clone to trac&k + &Insert Empty Measure + + Find unused wave files + + + + + Score + + + + + all parts in one staff + + + + + one staff per part + + + + + New score window + + + + Wave + Song Info + Mixer A + Mixer B + Cliplist + Marker View + &Plugins + Rhythm Generator + Midi File Import/Export + + &View + &Przeglądaj + + + + A&utomation + + + + + Se&ttings + + + + Unknown File Format: + + &Skip + + &Cancel + + + + + + New + Nowy + + + 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 + Select one audio output track + Import part is only valid for midi and wave tracks! + MusE: load part + No track selected for import + 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 + Import Wavefile + This wave file has a samplerate of %1, as opposed to current setting %2. Do you still want to import it? + &Yes &Tak + &No &Nie + Unable to launch help + For some reason MusE has to launch the default browser on your machine. @@ -7606,26 +8747,32 @@ browser on your machine. NoteInfo + Start Pozycja + Len Długość + Pitch Wysokość dźwięku + Velo On Prędk. uderz. + Velo Off Prędk. puszcz. + Note Info Info o dźwięku @@ -7633,90 +8780,122 @@ browser on your machine. OrganGuiBase + MusE: Organ + Drawbars + 16' 16' + 4' 4' + 2 2/3' 2 2/3' + 2' 2' + 5 1/3' 5 1/3' + 8' 8' + Envelope Hi + + Release + + Sustain + + Decay + + Attack + + + + + + ms + + cB + Envelope Lo + O-1 + Oscillator + Brass + Reed + Flute + Velocity @@ -7731,123 +8910,152 @@ browser on your machine. PartCanvas + C&ut &Wytnij + &Copy &Kopiuj + rename zmień nazwę + delete kasuj + split podziel + glue sklej pianoroll - pianoroll + pianoroll list - edytor lista + edytor lista drums - edytor perkusja + edytor perkusja + Cannot copy/move/clone to different Track-Type Nie można skopiować/przenieść/sklonować do innego typu śladu + color kolor + de-clone sklonuj + + + + save part to disk + + + + 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 + Cannot paste: wrong data type Nie można wkleić: nieprawidłowy typ danych + 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 + s&elect + clones - export - - - + file info + MusE: save part + Part name + Files + out of + parts + part + could not be pasted. Likely the selected track is the wrong type. + Can only paste to midi or wave track @@ -7869,6 +9077,7 @@ Likely the selected track is the wrong type. PianoRoll + &Edit &Edycja @@ -7909,6 +9118,7 @@ Likely the selected track is the wrong type. Poza obrębem lokatorów + &Select &Zaznacz @@ -7925,6 +9135,7 @@ Likely the selected track is the wrong type. kolory predkości uderzenia (velocity) + &Config &Konfiguracja @@ -7933,182 +9144,241 @@ Likely the selected track is the wrong type. kolor elementu + &Functions &Opcje Over Quantize - Inteligentna kwantyzacja do najbliższej dozw. poz. (w tym samym kierunku) + Inteligentna kwantyzacja do najbliższej dozw. poz. (w tym samym kierunku) Note On Quantize - Kwantyzacja do najbl. dozwolonej pozycji + Kwantyzacja do najbl. dozwolonej pozycji Note On/Off Quantize - Kwantyzacja pocz i końca dźwięku + Kwantyzacja pocz i końca dźwięku Iterative Quantize - Przesuwana Kwantyzacja + Przesuwana Kwantyzacja Pianoroll Tools Narzędzia Pianoroll + Step Record Nagrywanie krok po kroku + Midi Input Wejście Midi + Play Events Podgląd midi + Add Controller View Dodaj wykres kontorolera Config Quant... - Konfiguruj kwantyzację + Konfiguruj kwantyzację Modify Gate Time - Modyfikuj czas bramki + Modyfikuj czas bramki + Modify Velocity Modyfikuj predkość uderzenia (velocity) Crescendo - Crescendo + Crescendo + Transpose Transponuj Thin Out - Decresendo + Decresendo Erase Event - Skasuj element + Skasuj element Note Shift - Przesuń dźwięk + Przesuń dźwięk Move Clock - Przesuń zegar + Przesuń zegar Copy Measure - Kopiuj takt + Kopiuj takt Erase Measure - Wyczyść takt + Wyczyść takt Delete Measure - Kasuj takt + Kasuj takt Create Measure - Stwórz takt + Stwórz takt + ctrl kontr. + C&ut + &Copy &Kopiuj + &Paste &Wklej + Delete &Events + Select &All Zaznacz &wszystko + &Deselect All &Odznacz wszystko + Invert &Selection Odwróć &zaznaczenie + &Inside Loop &Pomiędzy lokatorami. + &Outside Loop &Poza obrębem lokatorów + &Previous Part + &Next Part + &Event Color + &Blue + &Pitch colors + &Velocity colors + + Quantize + + + + + Modify Note Length + + + + + Crescendo/Decrescendo + + + + + Erase Events + + + + + Move Notes + + + + Set Fixed Length Ustaw stałą długość nut + Delete Overlaps + + Legato + + + + &Plugins + Pianoroll tools + panic Zatrzymaj wszystkie komunikaty midi! + transport @@ -8116,58 +9386,72 @@ Likely the selected track is the wrong type. PluginDialog + Ok Akceptuj + Cancel Anuluj + MusE: select plugin MuzA: wybierz wtyczkę + Lib Bibl. + Label Etykieta + Name Nazwa + AI AI + AO AO + CI CI + CO CO + IP IP + id numer + Maker Znacznik + Copyright Prawa autorskie @@ -8180,10 +9464,12 @@ Likely the selected track is the wrong type. Stereo i Mono + Stereo Stereo + Mono Mono @@ -8192,18 +9478,22 @@ Likely the selected track is the wrong type. Wszystko + Mono and Stereo + 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. + Search in 'Label' and 'Name': @@ -8211,30 +9501,38 @@ Likely the selected track is the wrong type. PluginGui + + bypass plugin omiń wtyczkę (bypass) + MusE: load preset MuzA: załaduj ustawienie + MusE: save preset MuzA: zapisz ustawienie + File Buttons Przyciski Menu Plik + Load Preset Załaduj Ustawienie + Save Preset Zapisz ustawienie + Error reading preset. Might not be right type for this plugin @@ -8372,6 +9670,7 @@ currently not used QObject + Other @@ -8379,22 +9678,29 @@ currently not used QWidget + + Cannot convert sysex string Nie można przekonwertować łańcucha sysex + + Hex String too long (2048 bytes limit) Łańcuch Hex za długi (limit 2048 bajtów) + new nowy + create peakfile for stwórz plik szczytu dla + MusE: get file name MuzA: weź nazwę pliku @@ -8419,14 +9725,17 @@ utworzyć? Anuluj + MusE: create directory MuzA: utwórz katalog + creating dir failed tworzenie katalogu nie powiodło się + File Plik @@ -8437,6 +9746,7 @@ exists istnieje + MusE: write MuzA: zapis: @@ -8449,43 +9759,53 @@ exists Wyjdź + Open File Otwórz plik + failed: nie udane + MusE: Open File MuzA: Otwórz plik + + None Brak + generic midi generyczne midi + No selection. Ignoring + The directory + does not exist. Create it? + exists. Overwrite? @@ -8495,332 +9815,523 @@ exists. Overwrite? QuantConfig Config Quantize - Konfiguruj Kwantyzację + Konfiguruj Kwantyzację Strength - Siła + Siła Don´t Quantize - Nie kwantyzuj + Nie kwantyzuj Quant Len - Wartość kwantyzacji + Wartość kwantyzacji MusE: Config Quantize - MuzA: Konfiguracja kwantyzacji + MuzA: Konfiguracja kwantyzacji RhythmBase + MusE: Random Rhythm Generator - MuzA: Generator Losowego Rytmu + MuzA: Generator Losowego Rytmu + Instrument Properties - Właściwości Instrumentu + Właściwości Instrumentu + + counts/bar - ilość taktów + ilość taktów + steps/count - ilość kroków + ilość kroków + + # bars - # takty + # takty + test - test + test + + contrib - contrib + contrib + randomize - ustaw w przypadkowej kolejności + ustaw w przypadkowej kolejności + Group 1 - Grupa 1 + Grupa 1 + Group 2 - Grupa 2 + Grupa 2 + Group 3 - Grupa 3 + Grupa 3 + Group 4 - Grupa 4 + Grupa 4 + Group 5 - Grupa 5 + Grupa 5 + + listen - słuchaj + słuchaj + Instrument - Instrument + Instrument + + Group - Grupa + Grupa + + &New - &Nowy + &Nowy + create new entry - stwórz nowy wpis + stwórz nowy wpis + 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 + naciśnij przycisk Nowy aby utworzyć wpis na lisćie zdefiniowanych kontrolerów + &Delete - &Kasuj + &Kasuj + delete selected entry - kasuj zaznaczone elementy + kasuj zaznaczone elementy + Up - W góre + W góre + Down - W dół + W dół + Instrument - Instrument + Instrument + steps/count - kroki/liczy + kroki/liczy + list of defined controllers - Lista zdefiniowanych kontrolerów + Lista zdefiniowanych kontrolerów + This is the MusE list of defined controllers. - To jest lista MuzA zdefiniowanych midi kontrolerów. + To jest lista MuzA zdefiniowanych midi kontrolerów. + &File - &Plik + &Plik + &Edit - &Edytuj + &Edytuj + &Help - P&omoc + P&omoc + Tools - Narzędzia + Narzędzia + New - Nowy + Nowy + Open - Otwórz + Otwórz + &Open... - &Otwórz... + &Otwórz... + Save - Zapisz + Zapisz + &Save - &Zapisz + &Zapisz + Save As - Zapisz jako + Zapisz jako + Save &As... - Zapisz &Jako... + Zapisz &Jako... + Print - Drukuj + Drukuj + &Print... - &Drukuj + &Drukuj + Exit - Zakończ + Zakończ + E&xit - &Zakończ + &Zakończ + Undo - Cofnij + Cofnij + &Undo - &Cofnij + &Cofnij + Redo - Ponów + Ponów + &Redo - &Ponów + &Ponów + Cut - Wytnij + Wytnij + &Cut - &Wytnij + &Wytnij + Copy - Kopiuj + Kopiuj + C&opy - &Kopiuj + &Kopiuj + Paste - Wklej + Wklej + &Paste - &Wklej + &Wklej + Find - Szukaj + Szukaj + &Find... - &Szukaj + &Szukaj + Contents - Spis treści + Spis treści + &Contents... - &Spis treści + &Spis treści + Index - Indeks + Indeks + &Index... - &Indeks + &Indeks + About - O programie + O programie + &About... - &O programie + &O programie + <b>Notice!</b><br> Random Rhythm Generator is not enabled yet! - <b>Zauważ!</b><br> + <b>Zauważ!</b><br> Losowy Generator Rytmu jeszcze nie jest udostępniony! + Ctrl+N - Ctrl+N + Ctrl+N + Ctrl+O - Ctrl+O + Ctrl+O + Ctrl+S - Ctrl+S + Ctrl+S + Ctrl+P - Ctrl+P + Ctrl+P + Ctrl+Z - Ctrl+Z + Ctrl+Z + Ctrl+Y - Ctrl+Y + Ctrl+Y + Ctrl+X - Ctrl+X + Ctrl+X + Ctrl+C - Ctrl+C + Ctrl+C + Ctrl+V - Ctrl+V + Ctrl+V + Ctrl+F - Ctrl+F + Ctrl+F RhythmGenerator + + Form3 + Form3 + + + Instrument Settings: - Instrument Einstellungen + Instrument Einstellungen + + + + Instrument + + + + + Hi-Hat + + add - Zufgen + Zufgen + delete - Entfernen + Entfernen + + + + steps/count + ilość kroków + + + + count/bar + + + + + # bars + # takty + + + + Group Settings: + + Group - Gruppe + Gruppe + + + + Group 1 + Grupa 1 + + + + Group 2 + Grupa 2 + + + + Group 3 + Grupa 3 + + + + Group 4 + Grupa 4 + + + + Group 5 + Grupa 5 + + + + contrib + contrib + + + + listen + słuchaj + + + + Randomize + + + + + Rhythm Style: + + + + + Clear + + + + + Open... + + + + + Save + Zapisz + + + + Save as... + + + + + Generate + + + + + Close + @@ -8830,46 +10341,57 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! RouteDialogBase + MusE: Routing MuzA: Konfiguracja połączeń + Add Route Dodaj połączenie + Source: Źródło: + Destination: Odbiornik: + Connect Połącz + connect source to destination połącz źródło do odbiornika + Current Routes Aktualne połączenia + Source Źródło + Destination Odbiornik + Remove Usuń + remove selected route Usuń wybrane połączenie @@ -8877,76 +10399,70 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! SS_PluginChooserBase + SimpleDrums - Ladspa Plugin Chooser + Name Nazwa + Label Etykieta + Inports + Outports + Creator + &Cancel + Alt+C Alt+C + &OK + Alt+O - - SS_PluginFront - - Clear and unload effect - - - - Load effect - - - - Toggle display of effect parameters - - - - Turn effect on/off - - - ScrollScale + next page następna strona + previous page poprzednia strona + current page number aktualny numer strony @@ -8954,18 +10470,22 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! ShortcutCaptureDialog + Ok Akceptuj + Cancel Anuluj + Shortcut conflicts with + Undefined Niezdefiniowany @@ -8973,30 +10493,38 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! ShortcutCaptureDialogBase + Enter shortcut sequence Wprowadź skrót - kominację klawiszy + Press keys to enter shortcut sequence! Naciśnij kombinację klawiszy by wprowadzić skrót! + Old shortcut: Stary skrót + + Undefined Niezdefiniowany + New shortcut: Nowy skrót + OK Akceptuj + Cancel Anuluj @@ -9004,42 +10532,52 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! ShortcutConfigBase + Configure Keyboard Shortcuts Konfiguruj Skróty Klawiaturowe + Shortcut Category Kategoria Skrótu + Description Opis + Shortcut Skrót + &Clear &Wyczyść + Alt+C Alt+C + &Define &Zdefiniuj + Alt+D Alt+D + &Apply &Zastosuj + Alt+A Alt+A @@ -9047,6 +10585,7 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! SigScale + signature scale oś metrum @@ -9054,6 +10593,7 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! SimpleDrumsGuiBase + DrumSynth 0.1 @@ -9061,25 +10601,25 @@ Losowy Generator Rytmu jeszcze nie jest udostępniony! SimpleSynthGui + &Load setup + &Save setup - - Load sample dialog - - 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: @@ -9098,55 +10638,71 @@ click on the Restart button. + 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 - + + MusE was unable to launch the script, error message: + + Automation: @@ -9154,22 +10710,32 @@ click on the Restart button. SongInfo + Song Information + + Show on song load + + + + &Cancel + Alt+C Alt+C + &Ok &Akceptuj + Alt+O @@ -9177,54 +10743,68 @@ click on the Restart button. SynthConfigBase + MusE: Synth Configuration MuzA: Konfiguracja Syntezatora Softowego + Soft Synthesizer Syntezator Softowy + File Plik + Instances Urządzenia + + Name Nazwa + list of available software synthesizers lista wszystkich dostępnych syntezatorów softowych + Add Instance Dodaj urządzenie + Remove Instance Usuń urządzenie + Midi Port Port Midi + Midi connections Połączenia midi + Inst Instr. + Version Wersja + Description Opis @@ -9232,82 +10812,156 @@ click on the Restart button. TList + Midi Midi + Drum Perkusja + Delete Track Kasuj Ślad + Track Comment Opis Śladu Show Gui - Pokaż interfejs użytkownika + Pokaż interfejs użytkownika + Add Midi Track Dodaj ślad midi + Add Drum Track Dodaj ślad perkusyjny + Add Wave Track Dodaj ślad audio + MusE: bad trackname MuzA: zła nazwa śladu + + no clef + + + + + Treble + + + + + Bass + + + + + Grand + + + + please choose a unique track name proszę wybrać niepowtarzalną nazwę dla śladu + + + show gui + pokaż interfejs użytkownika + + + + + show native gui + + + + Add Output Dodaj wyjście audio + Add Group Dodaj szynę audio + Add Input Dodaj wejście audio + Add Aux Send Dodaj wysyłkę na efekty + + 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 + + Treble clef + + + + + Bass clef + + + + + Grand Staff + + + + + Viewable automation + + + + 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? + <none> @@ -9315,6 +10969,7 @@ click on the Restart button. TempoSig + Tempo/Sig Tempo/Metrum @@ -9322,38 +10977,41 @@ click on the Restart button. Toolbar1 + Solo Solo + Snap Przyciąganie Quantize - Kwantyzacja + Kwantyzacja To - Zakres + Zakres All Events - Wszytkie Elementy + Wszytkie Elementy Looped Ev. - Pomiędzy lokatorami + Pomiędzy lokatorami Selected Ev. - Zaznaczone Elementy + Zaznaczone Elementy Looped+Sel. - Zaznaczone + Pomiędzy lokatorami + Zaznaczone + Pomiędzy lokatorami + Cursor Kursor @@ -9361,10 +11019,12 @@ click on the Restart button. TrackComment + MusE: Track Comment MuzA: Opis Śladu + Track Comment: Opis Śladu @@ -9372,122 +11032,156 @@ click on the Restart button. Transport + + Punch In Włącz wcinki (punch In) + + Loop Pętla + + Punch Out Wył. wcinki (punch out) + Left Mark Lewy Lokator + Right Mark Prawy Lokator + Overdub Dogrywanie + + Replace Zastępowania + Rec Mode Typ Nagrywania + Normal Normalny + Mix Miks + Cycle Rec Zapętl nagrywanie + punchin włącz wcinki (punch In) + loop pętla + punchout wył. wcinki (punch out)punchout + rewind to start przewiń do początku + rewind przewijaj do tyłu + forward przewijaj do przodu + stop stop + play odtwarzanie + record nagrywanie + AC Aut. Kw. + quantize during record kwantyzuj podczas nagrywania + Click Metronom + metronom click on/off włącz/wyłącz metronom + Sync Synch. + external sync on/off synchronizowanie do zewn. urz. + Master Ślad Tempo/Metrum + use master track Używaj śladu tempo/metrum + Jack + Jack transport sync on/off @@ -9496,52 +11190,55 @@ click on the Restart button. TransposeDialogBase MusE: Midi Transpose - MuzA: Transponuj Midi + MuzA: Transponuj Midi Value - Wartość + Wartość halftones - Półtony + Półtony Time - Zakres + Zakres all - Wszystko + Wszystko between markers - Pomiędzy znacznikami + Pomiędzy znacznikami Parts - Klocki + Klocki all in selected tracks - Wszystko na zaznaczonych śladach + Wszystko na zaznaczonych śladach OK - Akceptuj + Akceptuj Cancel - Anuluj + Anuluj VAMGui + MusE: Load VAM Presets + + MusE: Save VAM Presets @@ -9549,134 +11246,190 @@ click on the Restart button. VAMGuiBase + Virtual Analogue for MusE + 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 kasuj ustawienie + DCO 1 + + Pitch + + Detune + + PWM + + FM + + PW + DCO 2 + On + VAM 1.0beta3 Virtual Analog for MusE Released under GPL. @@ -9693,58 +11446,59 @@ Robert Jonsson VelocityBase MusE: Modify Velocity - MuzA: Modyfikuj predkość uderzenia (velocity) + MuzA: Modyfikuj predkość uderzenia (velocity) Range - Zakres + Zakres All Events - Wszytkie Elementy + Wszytkie Elementy Selected Events - Zaznaczone Elementy + Zaznaczone Elementy Looped Events - Pomiędzy lokatorami + Pomiędzy lokatorami Selected & Looped - Zaznaczone & Pomiędzy lokatorami + Zaznaczone & Pomiędzy lokatorami Values - Wartość + Wartość Rate: - Częstotliwość: + Częstotliwość: Offset: - Offset: + Offset: % - % + % OK - Akceptuj + Akceptuj Cancel - Anuluj + Anuluj WTScale + bar scale - oś taktów + oś taktów @@ -9758,10 +11512,12 @@ Robert Jonsson Narzędzia audio + Solo Solo + Cursor Kursor @@ -9774,87 +11530,123 @@ Robert Jonsson Opcje + &Edit + Func&tions + &Gain + 200% 200% + 150% 150% + 75% 75% + 50% 50% + 25% 25% + Other + + &Copy + &Kopiuj + + + + C&ut + + + + + &Paste + &Wklej + + + Edit in E&xternal Editor + Mute Selection + Normalize Selection + Fade In Selection + Fade Out Selection + Reverse Selection + Select + Select &All Zaznacz &wszystko + &Deselect All &Odznacz wszystko + Wave edit tools + transport - Pianoroll tools + + WaveEdit tools @@ -9896,10 +11688,12 @@ Robert Jonsson WaveView + MusE - external editor failed + MusE was unable to launch the external editor check if the editor setting in: Global Settings->Audio:External Waveditor @@ -9907,10 +11701,12 @@ is set to a valid editor. + MusE - file size changed + When editing in external editor - you should not change the filesize since it must fit the selected region. @@ -9921,230 +11717,288 @@ Missing data is muted freeverb + FreeVerb + Room Size + Damping + Wet Level + Tap-Reverberator + Decay [ms] + + dB 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 --git a/muse2/share/locale/muse_ru.ts b/muse2/share/locale/muse_ru.ts index 167c24a7..c7a70abb 100644 --- a/muse2/share/locale/muse_ru.ts +++ b/muse2/share/locale/muse_ru.ts @@ -4,6 +4,7 @@ @default + Click this button to enable recording Щелкните по этой кнопке для активизации режима записи @@ -11,11 +12,12 @@ sets amount of quantization: 0 - no quantization 100 - full quantization - устанавливает объём квантования: + устанавливает объём квантования: 0 - без квантования 100 - полное квантование + select Pointer Tool: with the pointer tool you can: select parts @@ -28,88 +30,107 @@ with the pointer tool you can: копировать партии + 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 @@ -120,78 +141,121 @@ with the pencil tool you can: изменять длину партий + 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 выбрать инструмент "Не проигрывать партию (Заглушить)": Щелкните по партии, чтобы "Проигрывать" или "Не проигрывать" ее + + Manipulate automation + + + + + Cursor tool + + + + pointer указатель + pencil карандаш + cutter ножницы + score партитура + glue клей + quantize квантовать + draw рисовать + mute parts заглушить партии + + edit automation + + + + + cursor + + + + + + + + + + + Off Выкл @@ -204,130 +268,189 @@ click on part to mute/unmute Все файлы (*) + Add Midi Track Добавить Midi Трек + Add Drum Track Добавить трек с ударными + Add Wave Track Добавить wave-трек + Add Audio Output Добавить аудиовыход + Add Audio Group Добавить аудиогруппу + Add Audio Input Добавить аудиовход + Add Aux Send Добавить Aux посыл + eraser ластик + MESS MESS + DSSI DSSI + FST FST + + 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 Скорость нажатия + <none> <ничего> + + + channelMask="%1" МаскаКанала="%1" + dssi_synth dssi_synth + ladspa_efx ladspa_efx + channels="%1" каналы="%1" + remch="%1" remch="%1" + mport="%1"/ mport="%1"/ @@ -335,6 +458,7 @@ click on part to mute/unmute AboutBox + AboutBox Об окне @@ -358,10 +482,12 @@ Published under the GNU Public License Опубликовано на условиях GNU Public License + Version 2 pre-alpha Версия 2 пре-альфа + (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -374,10 +500,12 @@ Published under the GNU Public License Опубликовано на условиях GNU Public License + &Keep On Rocking! &Продолжим рок! + Alt+K Alt+K @@ -385,16 +513,19 @@ Published under the GNU Public License 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. @@ -402,288 +533,408 @@ Also timescale small numbers, arranger part name overlay, Также для маленьких цифр на линейке времени, названий партий в компоновщике и рэка эффектов. + 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. Максимальный размер автоматически изменяющегося шрифта метки микшера. + + + Global opacity (opposite of transparency). + + + + + Standard + + + + + Custom + + <none> - <ничего> + <ничего> + Select style sheet Выберите таблицу стилей + Qt style sheets (*.qss) Таблицы стилей Qt (*.qss) - - Global opaqueness (inverse of transparency). - - AppearanceDialogBase MusE: Appearance Settings - MusE: Настройки вида + MusE: Настройки вида + Apply Применить + Ok Ok + Cancel Отмена + Arranger Компоновщик + + MusE: Appearance settings + + + + 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 - - Global opaqueness - - Arranger + Arranger Компоновщик + Cursor Курсор @@ -696,82 +947,104 @@ Word-breaking but only with spaces. Такт + Snap Привязка + Len Дл + 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 Трек @@ -780,50 +1053,72 @@ Word-breaking but only with spaces. Вых. порт + Ch Кан + T Т + 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 Изменение времени заблокировано + + 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. @@ -834,6 +1129,7 @@ On/Off is not! А Вкл/Выкл нет! + Solo indicator. Click to toggle. Connected tracks are also 'phantom' soloed, indicated by a dark square. @@ -842,18 +1138,21 @@ Connected tracks are also 'phantom' soloed, Они будут обозначены темными квадратами. + 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. @@ -862,6 +1161,7 @@ Mid/right-click to change. Чтобы изменить, щелкните Средней/Правой кнопкой мыши. + Midi/drum track: Output port. Synth track: Assigned midi port. Left-click to change. @@ -872,20 +1172,39 @@ Right-click to show GUI. Щелчок правой кнопкой - показать ГИП. + Time lock Изменение времени заблокировано + + Notation clef. Select this tracks notation clef. + + + + + song length - bars длина проекта - в тактах + Port Порт + + + Automation + Автоматизация + + + + Clef + + <unknown> - <неизвестно> + <неизвестно> @@ -895,46 +1214,57 @@ Right-click to show GUI. MusE: Микшер + &Create &Добавить + &View &Вид + Routing Маршрутизация + Show Midi Tracks Показать Midi-треки + Show Drum Tracks Показать треки ударных + Show Wave Tracks Показать Wave-треки + Show Inputs Показать входы + Show Outputs Показать выходы + Show Groups Показать группы + Show Auxs Показать Auxs + Show Synthesizers Показать синтезаторы @@ -942,46 +1272,57 @@ Right-click to show GUI. AudioStrip + panorama панорама + aux send level уровень aux посыла + off выкл + Pan Пан + 1/2 channel стерео-моно + Pre Пре + pre fader - post fader пре федер - пост федер + dB Дб + record записать + mute заглушить + record downmix записать downmix @@ -994,6 +1335,7 @@ Right-click to show GUI. прослушивание пре федера + iR вх @@ -1002,42 +1344,52 @@ Right-click to show GUI. маршрут входа + oR вых + output routing маршрут выхода + Off Откл + Read Читать + Touch По касанию + Write Записывать + automation type тип автоматизации Channel - Канал + Канал + + solo mode режим соло + input routing маршрут входа @@ -1046,55 +1398,66 @@ Right-click to show GUI. Awl::MidiVolEntry off - выкл + выкл db - дб + дб Awl::VolEntry off - выкл + выкл BigTime + MusE: Bigtime MusE: Хронометр + format display формат дисплея + bar такт + beat доля + + tick тик + minute минут(а) + second секунд(а) + + frame фреймов + subframe субфреймов @@ -1102,6 +1465,7 @@ Right-click to show GUI. ClipListEdit + MusE: Clip List Editor MusE: Редактор списка фрагментов @@ -1109,38 +1473,47 @@ Right-click to show GUI. ClipListEditorBase + MusE: ClipList MusE: Список фрагментов + Name Имя + Refs Рефс (Refs) + Start Начало + Len Дл + Data Данные + Clip Properties Свойства фрагмента + Pos: Поз: + Len: Дл: @@ -1148,14 +1521,17 @@ Right-click to show GUI. CommentBase + Form1 Форма1 + Track Comment Комментарий к треку + Track 1 Трек 1 @@ -1167,42 +1543,52 @@ Right-click to show GUI. Настроить экспорт midi-файла + &OK &ОК + &Cancel &Отмена + 0 (single track) 0 (один трек) + 1 (multiple tracks) 1 (несколько треков) + Format: Формат: + 96 96 + 192 192 + 384 384 + Division: Деление(Division): + Copyright: Copyright: @@ -1211,46 +1597,57 @@ Right-click to show GUI. Разрешить расширенный формат SMF + MusE: Config Midi File Import/Export MusE: Настроить Импорт/Экспорт Midi-файла + Import: Импорт: + Split tracks into &parts Разделить треки на &партии + Alt+P Alt+P + Split tracks into parts, or one single part Разделить треки на партии, или одну партию + Export: Экспорт: + Enable extended smf format (currently not implemented) Разрешить расширенный smf формат (в настоящее время не осуществлено) + Use &2-byte time signatures instead of standard 4 Использовать &2-байтные размеры в такте вместо стандартных 4 + Alt+2 Alt+2 + Save space by replacing note-offs with &zero velocity note-ons Сохранить место, заменяя note-offs на &note-ons с нулевой скоростью нажатия + Alt+Z Alt+Z @@ -1262,6 +1659,7 @@ Right-click to show GUI. Выбр + select controller выбрать контроллер @@ -1270,256 +1668,389 @@ Right-click to show GUI. x + remove panel удалить панель + + Velocity Скорость нажатия + add new ... Добавить новый... + S S + X X + manual adjust настройка вручную + double click on/off двойной щелчок вкл/выкл + off выкл + + + + Instrument-defined + + + + + + Add ... + + + + + Others + + + + + Edit instrument ... + + + + + Common Controls + + DeicsOnzeGui + + Delete preset Удалить пресет + + + Do you really want to delete %1 ? Вы действительно хотите удалить %1 ? + + + &Yes &Да + + + &No &Нет + Save configuration Сохранить конфигурацию + + + + + + + + + + Critical Error Критическая ошибка + + + + + Cannot open file %1 Не могу открыть файл %1 + + + + + Parsing error for file %1 Синтаксическая ошибка в файле %1 + + Load category dialog Загрузить диалог категорий + Load set dialog + Save set dialog + New category + + Delete category + Load category + Save category + Load set + Save set + Delete set + New subcategory + + Delete subcategory + Load subcategory + Save subcategory + New preset Новый пресет + Load preset + Save preset + No more category supported + You can not add more categories + + No category selected + + You must first select a category. + + + Replace or add + %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 ? + + + &Replace &Заменить + + + &Add &Добавить + + + Download error + There is no more free category slot. + Save category dialog + No more subcategory supported + You can not add more subcategories + + No subcategory selected + + You must first select a subcategory. + Load subcategory 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 ? + There is no more free subcategory slot. + Save subcategory dialog + No more preset supported + You can not add more presets + + + No preset selected + + + You must first select a preset. + Load preset 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 ? + There is no more free preset slot. + Save preset dialog + Browse set dialog + Browse image dialog @@ -1528,7 +2059,7 @@ Right-click to show GUI. DeicsOnzeGuiBase DeicsOnze - DeicsOnze + DeicsOnze &Presets @@ -1552,1074 +2083,292 @@ Right-click to show GUI. Subcategory - Подкатегория + Подкатегория NONE - НИЧЕГО + НИЧЕГО Category - Категория - - - Delete - Удалить - - - Preset - Пресет - - - New - Новый - - - Bank - Банк - - - Bank numerous - Несколько банков - - - Prog - Прогр - - - Program numerous - Несколько программ - - - DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller under GPL licence - DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller на условиях GPL licence - - - &Global - &Глобальный - - - Master Volume - Общая Громкость - - - Master volume - Общая громкость - - - feedback - обратная связь - - - Coarse Ratio - Грубая пропорция - - - Feedback of Op 4 - Обратная связь от Op 4 - - - Function - Функция - - - POLY - ПОЛИ - - - MONO - МОНО - - - PBR - PBR - - - Pitch Bend Range - Диапозон изменения высоты тона - - - LFO - LFO - - - PMS - PMS - - - PMD - PMD - - - AMD - AMD - - - Speed - Скорость - - - Delay - Задержка - - - AMS - AMS - - - Saw Up - Пилообразный - - - Square - Прямоугольный - - - Triangl - Треугольный - - - S/Hold - S/Hold - - - LFO Waveform - Форма волны LFO - - - LFO Sync - Синхр. LFO - - - Amplitude Modulation Sensitivity - Чувствительность Амплитудной Модуляции - - - Pitch Modulation Sensitivity - Чувствительность Частотной Модуляции - - - Pitch Modulation Depth - Глубина Частотной Модуляции - - - LFO Speed - Скорость LFO - - - LFO Delay - Задержка LFO - - - Transpose and Global Detune - Транспозиция и Общая Расстройка - - - Transpose - Транспонировать - - - Global Detune - Общая расстройка - - - Algorithm 1 - Алгоритм 1 - - - Algorithm 2 - Алгоритм 2 - - - Algorithm 3 - Алгоритм 3 - - - Algorithm 4 - Алгоритм 4 - - - Algorithm 5 - Алгоритм 5 - - - Algorithm 6 - Алгоритм 6 - - - Algorithm 7 - Алгоритм 7 - - - Algorithm 8 - Алгоритм 8 - - - Modulation Matrix - Матрица модуляции - - - Volume - Громкость - - - &Preset - - - - INITVOICE - - - - LBank - - - - HBank - - - - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - - - - Pitch Envelope - - - - PL3 - - - - PL2 - - - - PL1 - - - - PR1 - - - - PR2 - - - - PR3 - - - - Pitch modulation depth - - - - Pitch modulation sensitivity - - - - LFO delay - - - - LFO speed - - - - Amplitude modulation depth - - - - Amplitude modulation sensitivity - - - - <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 - - - - Feedback level of the operator 4 - - - - Op &1 - - - - Scaling 1 - - - - LS1 - - - - RS1 - - - - Rate Scaling - - - - Attack Rate of the operator 1 - - - - Level Scaling - - - - Amplitude Envelope 1 - - - - RR1 - - - - D1R1 - - - - D1L1 - - - - D2R1 - - - - Release Rate - - - - 2° Decay Rate - - - - 1° Decay Level - - - - 1° Decay Rate - - - - Attack Rate - - - - AR1 - - - - Detune, OSCWave, EGShift 1 - - - - DET1 - - - - Detune - Расстройка - - - EG Shift - - - - 96dB - - - - 48dB - - - - 24dB - - - - 12dB - - - - 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> - - - - Sensitivity 1 - - - - KVS1 - - - - Amplitude Modulation Enable - - - - AME1 - - - - Keyboard Velocity Sensitivity - - - - Key Velocity Sensitivity - - - - EBS1 - - - - EG Bias Sensitivity - - - - Eg Bias Sensitivity - - - - Frequency 1 - - - - Coarse 1 - - - - Fine 1 - - - - Fine Ratio - - - - Freq 1 - - - - Fixed Frequency - - - - Toggle Fix Frequency - - - - FIX - - - - OUT 1 - - - - Output Volume - - - - Op &2 - - - - Amplitude Envelope 2 - - - - D1R2 - - - - D1L2 - - - - D2R2 - - - - RR2 - - - - AR2 - - - - Frequency 2 - - - - Coarse 2 - - - - Fine 2 - - - - Freq 2 - - - - Scaling 2 - - - - LS2 - - - - RS2 - - - - OUT 2 - - - - Detune, OSCWave, EGShift 2 - - - - DET2 - - - - Sensitivity 2 - - - - EBS2 - - - - KVS2 - - - - AME2 - - - - Op &3 - - - - Amplitude Envelope 3 - - - - D1R3 - - - - D1L3 - - - - D2R3 - - - - RR3 - - - - AR3 - - - - Scaling 3 - - - - LS3 - - - - RS3 - - - - OUT 3 - - - - Frequency 3 - - - - Coarse 3 - - - - Fine 3 - - - - Freq 3 - - - - Detune, OSCWave, EGShift 3 - - - - DET3 - - - - Sensitivity 3 - - - - EBS3 - - - - KVS3 - - - - AME3 - - - - Op &4 - - - - amplitude Envelope 4 - - - - AR4 - - - - D1R4 - - - - D1L4 - - - - D2R4 - - - - RR4 - - - - Frequency 4 - - - - Coarse 4 - - - - Fine 4 - - - - Freq 4 - - - - Scaling 4 - - - - LS4 - - - - RS4 - - - - OUT 4 - - - - Detune, OSCWave, EGShift 4 - - - - DET4 - - - - Sensitivity 4 - - - - EBS4 - - - - KVS4 - - - - AME4 - - - - &Func - - - - Delay Pan Depth - - - - Delay Pan LFO Freq - - - - Delay Ch Send Level - - - - Channel Chorus - - - - Delay Feedback - - - - Delay On/Off, Return Level - - - - On - Вкл - - - Delay Beat Ratio - + Категория - Delay BPM - + Delete + Удалить - Foot Control - + Preset + Пресет - Pitch - Высота тона + New + Новый - Amplitude - + Bank + Банк - Modulation Wheel - + Bank numerous + Несколько банков - Breath Control - + Prog + Прогр - Pitch Bias - + Program numerous + Несколько программ - Envelope Bias - + DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller under GPL licence + DeicsOnze v0.2.2 Copyright (c) 2004 Nil Geisweiller на условиях GPL licence - After Touch - Посленажатие + &Global + &Глобальный - Phony Mode - + Master Volume + Общая Громкость - Potamento - + Master volume + Общая громкость - Portamento Mode - + feedback + обратная связь - FINGER - + Coarse Ratio + Грубая пропорция - FULL - + Feedback of Op 4 + Обратная связь от Op 4 - PT - + Function + Функция - Portamento Time - + POLY + ПОЛИ - C&horus - + MONO + МОНО - Chorus Parameters - + PBR + PBR - Channel send level - + Pitch Bend Range + Диапозон изменения высоты тона - On/Off and Return level - + LFO + LFO - Select LADSPA plugin - + PMS + PMS - Change plugin - + PMD + PMD - &Reverb - + AMD + AMD - Reverb Parameters - + Speed + Скорость - &Config - &Настроить + Delay + Задержка - Font Size - + AMS + AMS - Quality - + Saw Up + Пилообразный - High - + Square + Прямоугольный - Middle - + Triangl + Треугольный - Low - + S/Hold + S/Hold - Ultra low - + LFO Waveform + Форма волны LFO - Filter - Фильтр + LFO Sync + Синхр. LFO - Save Mode (into the song) - + Amplitude Modulation Sensitivity + Чувствительность Амплитудной Модуляции - Save only the used presets - + Pitch Modulation Sensitivity + Чувствительность Частотной Модуляции - Save the entire set - + Pitch Modulation Depth + Глубина Частотной Модуляции - Save the configuration - + LFO Speed + Скорость LFO - Configuration File - + LFO Delay + Задержка LFO - Save... - + Transpose and Global Detune + Транспозиция и Общая Расстройка - Load... - + Transpose + Транспонировать - Save as default - + Global Detune + Общая расстройка - Colors - Цвета + Algorithm 1 + Алгоритм 1 - Text - Текст + Algorithm 2 + Алгоритм 2 - Background - + Algorithm 3 + Алгоритм 3 - Edit Text - + Algorithm 4 + Алгоритм 4 - Edit Background - + Algorithm 5 + Алгоритм 5 - Red - + Algorithm 6 + Алгоритм 6 - Blue - + Algorithm 7 + Алгоритм 7 - Green - + Algorithm 8 + Алгоритм 8 - Set Path - + Modulation Matrix + Матрица модуляции - Image in the background : - + Volume + Громкость - Browse... - + Detune + Расстройка - Load the set at the initialization : - + On + Вкл - Set Brightness, Detune, Attack and Release of the current channel to default - + Pitch + Высота тона - Res. Ctrl - + After Touch + Посленажатие - Cut all notes off - + &Config + &Настроить - Panic! - + Filter + Фильтр - Number of Voices - + Colors + Цвета - Number of voices - + Text + Текст Enable - Разрешить + Разрешить Channel - Канал + Канал Vol - Громк - - - Channel Ctrl - + Громк Release - Послезвучие + Послезвучие Attack - Атака - - - Brightness - - - - Modulation - + Атака Pan - Пан + Пан DidYouKnow + Did you know? Знаете ли вы? + Don't show on startup Не показывать при старте программы + Next tip Следующий совет + Close Закрыть @@ -2627,130 +2376,162 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t 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 @@ -2759,118 +2540,199 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t драм-карты + 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 Следующая партия + + Re-order list + + + + + Crescendo/Decrescendo + + + + + Quantize + Квантовать + + + + Erase Event + Удалить событие + + + + Move Notes + + + + + Delete Overlaps + Удалить наложения + + + &Plugins &Плагины + Drum tools Инструменты ударных + + cursor tools + + + + + Set step size for cursor edit + + + + panic паника + transport транспорт + Vol Громк + Drum map Карта ударных + Reset the drum map with GM defaults? Сброс карты ударных на GM по умолчанию? @@ -2878,14 +2740,17 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCAfterDialog + MusE: Enter Channel Aftertouch MusE: Ввести Channel Aftertouch + Time Position Позиция по времени + Pressure Давление @@ -2924,58 +2789,73 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t 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 О&тмена @@ -2983,10 +2863,12 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditEventDialog + Ok ОК + Cancel Отмена @@ -2994,46 +2876,57 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t 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 @@ -3041,23 +2934,34 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditInstrument + + MusE: Create file failed MusE: Не удалось создать файл + MusE: Write File failed MusE: Не удалось записать файл + + + + MusE: MusE: + + The user instrument directory Пользовательский инструментальный каталог + + does not exist yet. Create it now? @@ -3065,35 +2969,52 @@ does not exist yet. Create it now? (You can override with the environment variable MUSEINSTRUMENTS) - (Вы можете переписать с переменной окружения MUSEINSTRUMENTS) + (Вы можете переписать с переменной окружения MUSEINSTRUMENTS) + + + + + (You can change the user instruments directory at Settings->Global Settings->Midi) + + + 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? @@ -3102,74 +3023,97 @@ Are you sure? Вы уверены? + 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 &Отмена @@ -3177,6 +3121,7 @@ Save Current Instrument? EditInstrumentBase + MusE: Instrument Editor Редактор инструментов @@ -3189,14 +3134,17 @@ Save Current Instrument? Название патча + High Bank: H-банк: + Low Bank: L-банк: + Program: Программа: @@ -3214,10 +3162,16 @@ Save Current Instrument? Патч/Группа + + + &Delete &Удалить + + + Alt+D Alt+D @@ -3234,18 +3188,22 @@ Save Current Instrument? Новая Группа + Drum Ударные + GM GM + GS GS + XG XG @@ -3258,6 +3216,7 @@ Save Current Instrument? Предустановленный контроллер: + This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. @@ -3267,6 +3226,8 @@ handled like normal controllers. + + Properties Свойства @@ -3279,30 +3240,38 @@ handled like normal controllers. Тип + Control7 Контрл7 + Control14 Контрл14 + RPN RPN + NRPN NRPN + Pitch Высота тона + Program Программа + + H-Ctrl H-Ктрл @@ -3311,6 +3280,8 @@ handled like normal controllers. Старший байт midi-контроллера + + L-Ctrl L-Ктрл @@ -3323,10 +3294,12 @@ handled like normal controllers. Диапазон + Min Миним + Max Макс @@ -3335,10 +3308,12 @@ handled like normal controllers. По умолчанию + Name Имя + Type Тип @@ -3371,110 +3346,140 @@ handled like normal controllers. Паника + 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 --- @@ -3482,138 +3487,175 @@ handled like normal controllers. всё равно + 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 @@ -3634,6 +3676,7 @@ GS/XG типов проектов и инструментов. инструментов. + * wild card * @@ -3641,14 +3684,17 @@ GS/XG типов проектов и инструментов. универсальный шаблон + 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. @@ -3685,38 +3731,52 @@ True range: Min: -8192 Max: 8191 (bias 0) Реальный диапазон: Мин: -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 @@ -3749,47 +3809,59 @@ midi-сообщений о контроллерах. или редакторе инструментов). + 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 @@ -3803,38 +3875,49 @@ Typically, set to 127/127, or an unused Обычно, устанавливается 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? Что это? @@ -3842,18 +3925,22 @@ Typically, set to 127/127, or an unused EditMetaDialog + MusE: Enter Meta Event MusE: Ввести метасобытие + Time Position Позиция по времени + Meta Type Метатип + Enter Hex Ввести Hex @@ -3892,34 +3979,42 @@ Typically, set to 127/127, or an unused EditNoteDialogBase + MusE: Enter Note MusE: Ввести ноту + OK ОК + Cancel Отмена + Length: Длина: + Time Position: Позиция по времени: + Pitch: Высота тона: + Velocity On: Скорость наж: + Velocity Off: Скорость снятия: @@ -3927,18 +4022,22 @@ Typically, set to 127/127, or an unused EditPAfterDialog + MusE: Enter Poly Aftertouch MusE: Ввести полиф. посленажатие + Time Position Позиция по времени + Pitch Высота тона + Pressure Давление @@ -3946,22 +4045,27 @@ Typically, set to 127/127, or an unused EditSysexDialogBase + MusE: Enter SysEx MusE: Ввести SysEx + TimePosition: Время: + Comment: Комментарий: + OK ОК + Cancel Отмена @@ -3969,6 +4073,7 @@ Typically, set to 127/127, or an unused EditToolBar + Edit Tools Инструменты редактирования @@ -3976,42 +4081,52 @@ Typically, set to 127/127, or an unused 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? @@ -4024,14 +4139,17 @@ Typically, set to 127/127, or an unused &Нет + show native gui показать ГИП + save preset сохранить пресет + MusE: Save Preset MusE: Сохранить Пресет @@ -4039,6 +4157,7 @@ Typically, set to 127/127, or an unused FLUIDGui + FLUID: open Soundfile FLUID: открыть звуковой файл @@ -4046,14 +4165,17 @@ Typically, set to 127/127, or an unused FLUIDGuiBase + Form1 Форма1 + Soundfont Soundfont + Load Загрузить @@ -4061,98 +4183,123 @@ Typically, set to 127/127, or an unused 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 Канал ударных @@ -4164,15 +4311,18 @@ Typically, set to 127/127, or an unused Форма1 + Global Общий + User Пользователь + Project Проект @@ -4187,16 +4337,19 @@ Cofiguration Конфигурация + only Songdata Только Данные проекта + fdialogbuttons КнопкиДиалогаФайлов + Songdata + Configuration ДанныеПроекта+ @@ -4206,6 +4359,7 @@ Configuration FluidSynthGui + Choose soundfont Выберите soundfont @@ -4221,84 +4375,117 @@ Configuration GateTimeBase MusE: Modify Gate Time - MusE: Изменить время звучания + MusE: Изменить время звучания Range - Диапазон + Диапазон All Events - Все события + Все события Selected Events - Выбранные события + Выбранные события Looped Events - События в цикле + События в цикле Selected & Looped - Выбранные и в цикле + Выбранные и в цикле Values - Значения + Значения Rate: - Величина: + Величина: Offset: - Смещение: + Смещение: % - % + % OK - ОК + ОК Cancel - Отмена + Отмена + + + + GlobalSettingsConfig + + + Selects instruments directory + 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. + + + + &Apply &Применить + &Ok &ОК + &Cancel &Отмена + Audio Аудио + Mixer Микшер + + dB Дб + min. Meter Value мин. значение индикатора @@ -4307,22 +4494,31 @@ Configuration мин. значение ползунка + Midi Midi + Ticks Тактовые импульсы (тики) + + + 1024 1024 + + + 2048 2048 + 4096 4096 @@ -4331,54 +4527,75 @@ Configuration 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 ГИП @@ -4387,319 +4604,530 @@ Configuration В чём читать справку: + 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, если возможно. + Использовать Jack freewheel mode, если возможно. (Ускоряет операции сведения). + Enable denormal protection Разрешить защиту от нарушений режима + Enable output limiter Разрешить ограничитель выхода Enable in-place processing for VST plugins. (Requires restart.) - Разрешить быструю обработку для VST-плагинов. + Разрешить быструю обработку для 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-плагины в рэке эффектов не работают или слишком громко звучат, даже если они, предположительно, могут быть быстро обработаны. + Отключите, если VST Ladspa-плагины в рэке эффектов не работают или слишком громко звучат, даже если они, предположительно, могут быть быстро обработаны. + Note: External editor opened from the internal editor. Примечание: Внешний редактор открывается из внутреннего редактора. + Dummy Audio Driver (settings require restart) Фиктивный Аудио Драйвер (требует перезагрузки) Preferred sample rate - Предпочитаемый 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 + + + + 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 + - 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-воспроизведение. -Желательны более короткие периоды. + + Minimum audio controller process period (samples). + + - Hz - Гц + + 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. + - Actual rate used now (dummy or not): - Реальный "sample rate" (фиктивный или нет): + + 1 + 1 - --- - --- + + 2 + 2 - Period size (Frames per period): - Размер периода (Фреймов на период): + + 4 + 4 - 16 - 16 + + 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-Разрешение (Тиков/На четвертную ноту) + + Instruments Directory + + + + Use old-style stop shortcut: Использовать старую "горячую клавишу" для остановки: + Move single armed track with selection Назначать "для записи" выбранный трек + On Launch + Behavior + + Header + + + Track Info Columns + + + LMaster + MusE: Mastertrack MusE: Мастер-трек + Tempo Темп + Timesig Размер + new tempo новый темп + new signature новый размер + Meter Индикатор + Time Время + Type Тип + Value Значение + &Edit &Правка + Insert Tempo Вставить темп + Insert Signature Вставить размер + + Insert Key + + + + Edit Positon Изменить позицию + Edit Value Изменить значение + Delete Event Удалить событие + + Key + + + + + new key + + + + 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 Инструменты редактирования @@ -4711,6 +5139,7 @@ Shorter periods are desirable. Вставить ноту + insert Note вставить Ноту @@ -4719,6 +5148,7 @@ Shorter periods are desirable. Вставить SysEx + insert SysEx вставить SysEx @@ -4727,6 +5157,7 @@ Shorter periods are desirable. Вставить кнтрл + insert Ctrl Вставить кнтрл @@ -4735,6 +5166,7 @@ Shorter periods are desirable. Вставить Meta + insert Meta вставить Meta @@ -4743,6 +5175,7 @@ Shorter periods are desirable. Вставить Channel Aftertouch + insert Channel Aftertouch вставить Channel Aftertouch @@ -4751,26 +5184,32 @@ Shorter periods are desirable. Вставить Key Aftertouch + insert Poly Aftertouch вставить Poly Aftertouch + &Edit &Правка + Cut Вырезать + Copy Скопировать + Paste Вставить + Delete Events Удалить события @@ -4783,10 +5222,12 @@ Shorter periods are desirable. Вставить инструменты + Tick Тик + Bar Такт @@ -4795,38 +5236,47 @@ Shorter periods are desirable. Тип + Ch Кан + Val A Знач. А + Val B Знач. B + Val C Знач. С + Len Дл + Comment Комментарий + List tools Инструменты редактора списка + Insert tools Инструменты для вставки + Type Тип @@ -4834,22 +5284,27 @@ Shorter periods are desirable. MITTransposeBase + MusE: Midi Input Plugin: Transpose MusE: Midi-плагин на входе: Транспонирование + On Вкл + TriggerKey Кнопка запуска + Transpose: Транспонировать: + +0 +0 @@ -4861,22 +5316,27 @@ Shorter periods are desirable. ничего + Port Порт + GUI ГИП + Instrument Инструмент + Device Name Имя устройства + State Состояние @@ -4885,114 +5345,210 @@ Shorter periods are desirable. неизвестно + I Вх + O Вых + MusE: bad device name MusE: неверное имя устройства + + + 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? + + + + please choose a unique device name пожалуйста выберите неповторяющееся имя для устройства + + in в + + out вне (из) + Show first aliases Показать первые псевдонимы + Show second aliases Показать вторые псевдонимы + + + Toggle all + + + + + + Change all tracks now + + + + 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 + + + Auto-connect these channels to new midi tracks + + + + + Auto-connect new midi tracks to these channels + + + + + Auto-connect new midi tracks to this channel + + + + + 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. + + Connect these to new midi tracks - Подсоединить к новым midi-трекам + Подсоединить к новым midi-трекам Connect new midi tracks to this (first listed only) - Подсоединять новые midi-треки сюда (только к первому в списке) + Подсоединять новые 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 @@ -5004,7 +5560,7 @@ Example: 1-3 5 channel 1 2 3 and 5 all all channels none no channels - Соединить каналы этого порта с новыми midi-треками. + Соединить каналы этого порта с новыми midi-треками. Пример: 1 2 3 каналы 1 2 и 3 1-3 то же самое @@ -5016,36 +5572,44 @@ Example: 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-треки с этими каналами данного порта. + Соединить новые midi-треки с этими каналами данного порта. См. вх. каналы по умолчанию Примечание: Пока поддерживается только один порт и канал (первый найденный) + State: result of opening the device Состояние: результат открытия устройства + In routes Маршруты входа + Out routes Маршруты выхода + Def in ch вх кан по ум + Def out ch вых кан по ум + <unknown> <неизвестно> + + <none> <ничего> @@ -5053,41 +5617,55 @@ NOTE: Currently only one output port and channel supported (first found) 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 шкала тактов @@ -5095,10 +5673,12 @@ NOTE: Currently only one output port and channel supported (first found) MarkerView + MusE: Marker MusE: Маркер + add marker добавить маркер @@ -5107,6 +5687,7 @@ NOTE: Currently only one output port and channel supported (first found)Добавить Маркер + delete marker удалить маркер @@ -5119,34 +5700,42 @@ NOTE: Currently only one output port and channel supported (first found)&Файл + &Edit &Правка + Bar:Beat:Tick Такт:Доля:Тик + Hr:Mn:Sc:Fr:Sf Чс:Мин:Сек:Фрм:Субфрм + Lock Закрыть + Text Текст + Marker Properties Свойства маркера + marker-tools инструменты маркера + edit tools инструменты редактирования @@ -5154,6 +5743,7 @@ NOTE: Currently only one output port and channel supported (first found) MasterEdit + MusE: Mastertrack MusE: Мастер-трек @@ -5166,10 +5756,12 @@ NOTE: Currently only one output port and channel supported (first found)Разрешить(Мастер) + Info Инфо + Cursor Курсор @@ -5178,42 +5770,52 @@ NOTE: Currently only one output port and channel supported (first found)выкл + Snap Привязка + time at cursor position время в позиции курсора + tempo at cursor position темп в позиции курсора + CurPos КурсПоз + tempo at current position темп в текущей позиции + time signature at current position размер в текущей позиции + Enable Разрешить + Enable usage of master track Разрешить использование мастер-трека + Master tools Основные инструменты + Enable master Разрешить мастер(а) @@ -5221,114 +5823,142 @@ NOTE: Currently only one output port and channel supported (first found) 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 @@ -5343,263 +5973,350 @@ NOTE: Currently only one output port and channel supported (first found) MidiControllerEditDialogBase + MusE: Define Midi Controller - MusE: Назначить MIDI-контроллер + MusE: Назначить MIDI-контроллер + + + + A&pply + + Name - Имя + Имя + Type - Тип + Тип + + H-Ctrl - H-Ctrl + H-Ctrl + + L-Ctrl - L-Ctrl + L-Ctrl + Min Val - Мин знач + Мин знач + Max Val - Макс знач + Макс знач + list of defined controllers - Список назначенных контроллеров + Список назначенных контроллеров + This is the MusE list of defined controllers. - Это список назначенных в MusE контроллеров. + Это список назначенных в MusE контроллеров. + Properties - Свойства + Свойства + Name - Имя + Имя + Max Value - Макс значение + Макс значение + Min Value - Мин значение + Мин значение + Control7 - Контрл7 + Контрл7 + Control14 - Контрл14 + Контрл14 + RPN - RPN + RPN + NRPN - 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 + &OK + &Cancel - &Отмена + &Отмена + &Add - &Добавить + &Добавить + Alt+A - 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-контроллеров. + Это список общеупотребительных midi-контроллеров. Обратите внимание, что управление высотой тона(pitch) и изменением программ(program change) в MusE, такое же, как и управление обычными контроллерами. + + RPN14 + RPN14 + + + + NRPN14 + NRPN14 + + + Pitch - Высота тона + Высота тона + Program - Программа + Программа + Midi Controller Number High Byte - Значение Старшего Байта Midi-контроллера + Значение Старшего Байта Midi-контроллера + Midi Controller Number Low Byte - Значение Младшего Байта Midi-контроллера + Значение Младшего Байта 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 @@ -5607,6 +6324,8 @@ handled like normal controllers. MidiInputTransformDialog + + New Новый @@ -5614,214 +6333,334 @@ handled like normal controllers. 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 Список пресетов @@ -5848,50 +6687,64 @@ handled like normal controllers. MidiStrip + VariationSend Вариационный посыл + Var Вар + ReverbSend Посыл Реверберации + Rev Ревер + ChorusSend Посыл Хоруса + Cho Хорус + + + off выкл + dB Дб + Pan/Balance Пан/Баланс + Pan Пан + record запись + mute заглушить @@ -5928,26 +6781,33 @@ handled like normal controllers. тип автоматизации + + double click on/off двойной щелчок вкл/выкл + solo mode режим соло + iR вх + input routing маршрут входа + oR вых + output routing маршрут выхода @@ -5955,82 +6815,107 @@ handled like normal controllers. 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. @@ -6041,17 +6926,20 @@ Click to force a port to be used. использовать порт. + 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-вход, с четверть-фреймовой @@ -6062,6 +6950,7 @@ 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. Обнаруженые форматы SMPTE: 24fps, 25fps, 30fps с пропущенным @@ -6069,10 +6958,12 @@ Detects format of MTC quarter and full frame, and MMC locate. Обнаруживает 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, @@ -6083,6 +6974,7 @@ Click on detect indicator to force another. Авто-получение: если разрешены два или более входов реального времени на порт, то будут использован первый обнаруженный "clock", пока он не будет потерян, затем будет использован другой. Самое лучшее, если каждый отключит свой "clock" во время остановки, чтобы MusE снова получил "clock" с другого порта. Щелкните по индикатору обнаружения, чтобы сделать по другому. + Accept midi realtime input, including start/stop/continue, and song position. Non-clock events (start,stop etc) are @@ -6098,10 +6990,12 @@ This means you may have several master и 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, с четверть-фреймовой @@ -6109,6 +7003,7 @@ See 'rc' column for more help. См. колонку "rc" для получения помощи. + When start is received, rewind before playing. Note: It may be impossible to rewind fast enough to synchronize with the external device. @@ -6118,16 +7013,19 @@ Note: It may be impossible to rewind fast для синхронизации с внешним устройством. + 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 @@ -6141,104 +7039,129 @@ Note: It may be impossible to rewind fast иметь несколько присоединенных ведомых устройств, и 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> <ничего> @@ -6246,6 +7169,7 @@ Apply sync settings? MidiSyncConfigBase + MusE: Midi Sync MusE: MIDI-синхр. @@ -6314,104 +7238,129 @@ Apply sync settings? 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. @@ -6425,14 +7374,17 @@ You can always click here again for Master. щелкнуть здесь, чтобы 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. @@ -6444,14 +7396,17 @@ Enabled inputs in the list will входы в списке будут задействованы. (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 @@ -6462,10 +7417,12 @@ Enabled inputs in the list will посылки первого "clock". + ms мс + Send sync delay Посылать синхр. задержку @@ -6473,10 +7430,12 @@ Enabled inputs in the list will MidiTrackInfoBase + MusE: TrackInfo MusE: ТрекИнфо + output channel канал выхода @@ -6489,6 +7448,8 @@ Enabled inputs in the list will Трек Инфо + + % % @@ -6497,10 +7458,23 @@ Enabled inputs in the list will Имя трека + output port порт выхода + + iR + вх + + + + + + + + + off выкл @@ -6521,6 +7495,7 @@ Enabled inputs in the list will выбрать патч инструмента + Transp. Трансп. @@ -6529,26 +7504,47 @@ Enabled inputs in the list will Громкость + Channel Info Инфо о канале + + Rec: + + + + + Prog + + + + + Vol + Громк + + + Pan Пан + Delay Задержка + H-Bank H-банк + Compr. Компр. + L-Bank L-банк @@ -6557,10 +7553,12 @@ Enabled inputs in the list will Прогр. + Velocity Скорость нажатия + Length Длина @@ -6613,34 +7611,41 @@ recording: Выбор Банка 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. @@ -6648,74 +7653,90 @@ recording: выделенных каналах выделенных 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 Добавить настройки панорамы к проекту @@ -6723,230 +7744,345 @@ recording: 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 Значение квантования @@ -6954,6 +8090,8 @@ recording: MidiTransformerDialog + + New Новый @@ -6961,6 +8099,7 @@ recording: MixdownFileDialog + Wave Files (*.wav);;All Files (*) Файлы Wave (*.wav);;Все файлы (*) @@ -6968,50 +8107,62 @@ recording: 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 Формат @@ -7019,6 +8170,8 @@ recording: MusE + + Import Wave File Импортировать WAV-файл @@ -7031,6 +8184,7 @@ recording: отменить действие + Und&o &Отменить действие @@ -7039,18 +8193,22 @@ recording: повторить + Re&do &Повторить + undo last change to song отменить последнее изменение в проекте + redo last undo повторить последнюю отмену + Transport Транспорт @@ -7059,6 +8217,7 @@ recording: цикл + Loop Цикл @@ -7067,6 +8226,7 @@ recording: начало врезки + Punchin Начало врезки @@ -7075,6 +8235,7 @@ recording: конец врезки + Punchout Конец врезки @@ -7083,6 +8244,7 @@ recording: к началу + Start К началу @@ -7091,6 +8253,7 @@ recording: перемотать назад + Rewind Перемотать назад @@ -7099,6 +8262,7 @@ recording: перемотать вперёд + Forward Перемотать вперёд @@ -7107,6 +8271,7 @@ recording: остановить + Stop Остановить @@ -7115,6 +8280,7 @@ recording: воспроизвести + Play Воспроизвести @@ -7123,6 +8289,7 @@ recording: записать + Record Записать @@ -7131,6 +8298,8 @@ recording: паника + + Panic Паника @@ -7139,6 +8308,7 @@ recording: новый + &New &Новый @@ -7147,6 +8317,7 @@ recording: открыть + &Open &Открыть @@ -7155,6 +8326,9 @@ recording: сохранить + + + &Save &Сохранить @@ -7163,238 +8337,298 @@ recording: пианорол + 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 + + 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 @@ -7403,34 +8637,42 @@ recording: Микшер + Input Plugins Плагины на входе + Reset Instr. Перезагрузить Инстр. + Init Instr. Запустить Инстр. + Local Off откл. локальное управление + &Audio &Аудио + Bounce to Track Свести в трек + Bounce to File Свести в файл + &Help &Помощь @@ -7443,40 +8685,53 @@ recording: Неизвестный формат файла + 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-файл @@ -7484,22 +8739,29 @@ Save Current Project? + + Nothing to edit Нечего редактировать MusE: Copy Range - MusE: Скопировать диапазон + MusE: Скопировать диапазон not implemented - не реализовано + не реализовано MusE: Cut Events - MusE: Вырезать события + MusE: Вырезать события + + + + + MusE: Bounce to Track MusE: Сведение в Трек @@ -7518,6 +8780,7 @@ select wave track as target трек не выбран + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -7526,14 +8789,17 @@ Save Current Project? Сохранить текущий проект? + no help found at: справка не найдена в: + MusE: Open Help MusE: Открыть справку + Midi Ports / Soft Synth MIDI-порты / Прогр. синтезаторы @@ -7542,38 +8808,44 @@ Save Current Project? чтобы импортировать аудио-файл, вы должны сначала выделить звуковой трек + Delete Selected Tracks Удалить выделенные треки View - Вид + Вид + Restart Audio Перезапустить аудио Automation - Автоматизация + Автоматизация + Mixer Automation Автоматизация микшера + Take Snapshot Сделать снимок + Clear Automation Data Удалить Данные Автоматизации Settings - Настройки + Настройки + Configure Shortcuts Настроить горячие клавиши @@ -7582,18 +8854,22 @@ Save Current Project? Экспорт Midi Файла + &Manual &Руководство + &MusE Homepage &Домашняя страница MusE + &Report Bug... &Сообщить об ошибке... + &About MusE &О программе MusE @@ -7602,30 +8878,36 @@ Save Current Project? Что &Это + Cannot read template Не могу прочитать шаблон + File open error Ошибка при открытии файла + File read error Ошибка прочтения файла + MusE: load template MusE: открыть шаблон MusE: Bounce - MusE: Свести + MusE: Свести set left/right marker for bounce range - настройте левый/правый маркеры для установки диапазона сведения + настройте левый/правый маркеры для установки диапазона сведения + + MusE: Bounce to File MusE: Свести в файл @@ -7634,34 +8916,42 @@ Save Current Project? выходной трек не найден + Add midi file to current project? Добавить midi файл в текущий проект? + &Add to Project &Добавить в Проект + &Replace &Заменить + failed: не удалось: + Import Part Импортировать Партию + Marker View Маркеры + + &Skip Не сохранять @@ -7670,148 +8960,235 @@ failed: Импорт партии действителен только для 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 &Вставить пустой такт + + Find unused wave files + + + + + Score + + + + + all parts in one staff + + + + + one staff per part + + + + + New score window + + + + Wave Wave + Song Info Проект инфо + Mixer A Микшер А + Mixer B Микшер В + Cliplist Список фрагментов + &Plugins &Плагины + Edit Instrument Редактировать Инструмент + Rhythm Generator Генератор Ритма + Midi File Import/Export Импорт/Экспорт midi-файла + + &View + &Вид + + + + A&utomation + + + + + Se&ttings + + + + Unknown File Format: Несзвестный формат файла: + + &Cancel + + + + + + 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? @@ -7820,18 +9197,22 @@ Do you still want to import it? Хотите ли вы импортировать его? + &Yes &Да + &No &Нет + Unable to launch help + For some reason MusE has to launch the default browser on your machine. @@ -7899,26 +9280,32 @@ browser on your machine. NoteInfo + Note Info Информация о ноте + Start Начало + Len Дл + Pitch Высота тона + Velo On Скор. наж + Velo Off Скор. снятия @@ -7926,90 +9313,122 @@ browser on your machine. OrganGuiBase + MusE: Organ MusE: Орган + O-1 O-1 + Oscillator Осциллятор + Brass Медные духовые + Reed Язычковые деревянные духовые + Flute Флейта + 16' 16' + 4' 4' + 2 2/3' 2 2/3' + 2' 2' + 8' 8' + 5 1/3' 5 1/3' + + Release Послезвучие + + Sustain Стационарная часть звука + + Decay Спад огибающей + + Attack Атака + + + + + + ms мс + Velocity Скорость нажатия + Drawbars Слайдеры регистров + Envelope Hi Верх огибающей + + cB cB + Envelope Lo Низ огибающей @@ -8017,124 +9436,157 @@ browser on your machine. PartCanvas + Cannot copy/move/clone to different Track-Type Невозможно копировать/перемещать/клонировать данные в другие типы дорожек + C&ut &Вырезать + &Copy С&копировать + rename Переименовать + color цвет + delete удалить + split разделить + glue склеить + de-clone деклонировать pianoroll - Пианорол + Пианорол list - Редактор списка событий + Редактор списка событий drums - Редактор ударных + Редактор ударных + wave edit Редактор семплов + Cannot paste: multiple tracks selected Вставка невозможна: выделено несколько треков + Cannot paste: no track selected Вставка невозможна: не выделено ни одного трека + Cannot paste: wrong data type Вставка невозможна: неверный тип данных + Can only paste to midi/drum track Можно вставить только в midi/drum трек + Can only paste to wave track Можно вставить только в звуковой трек export - экспорт + экспорт + MusE: save part MusE: сохранить партию + s&elect В&ыбрать + clones клоны + + + + save part to disk + + + + file info файл-инфо + Part name Имя партии + Files Файлы + out of из + parts партии + part партия + could not be pasted. Likely the selected track is the wrong type. не может быть вставлена. Возможно выбранный трек не того типа. + Can only paste to midi or wave track Можно вставить только в midi или wave треки @@ -8156,6 +9608,7 @@ Likely the selected track is the wrong type. PianoRoll + &Edit &Правка @@ -8196,6 +9649,7 @@ Likely the selected track is the wrong type. Вне цикла + &Select &Выбрать @@ -8212,6 +9666,7 @@ Likely the selected track is the wrong type. цвета скорости нажатия + &Config &Настроить @@ -8220,182 +9675,241 @@ Likely the selected track is the wrong type. цвет события + &Functions &Функции Over Quantize - Квантовка + Квантовка Note On Quantize - Квантовка начала ноты + Квантовка начала ноты Note On/Off Quantize - Квантовка начала/окончания ноты + Квантовка начала/окончания ноты Iterative Quantize - Повторная квантовка + Повторная квантовка Config Quant... - Настройка квантования + Настройка квантования Modify Gate Time - Изменить время звучания + Изменить время звучания + Modify Velocity Изменить скорость нажатия Crescendo - Крещендо + Крещендо + Transpose Транспонировать Thin Out - Удалить дубли + Удалить дубли Erase Event - Удалить событие + Удалить событие Note Shift - Сдвиг ноты + Сдвиг ноты Move Clock - Сдвинуть время + Сдвинуть время Copy Measure - Скопировать такт + Скопировать такт Erase Measure - Стереть такт + Стереть такт Delete Measure - Удалить такт + Удалить такт Create Measure - Создать такт + Создать такт Pianoroll Tools Инструменты пианорола + Step Record Пошаговая запись + Midi Input MIDI-вход + Play Events Воспроизвести события + ctrl кнтр + Add Controller View Добавить панель контроллеров + Set Fixed Length Установить фикс. длину + C&ut &Вырезать + &Copy С&копировать + &Paste &Вставить + Delete &Events Удалить &События + Select &All Выбрать &Всё + &Deselect All &Убрать выделение + Invert &Selection Обратить В&ыделение + &Inside Loop &Внутри цикла + &Outside Loop &Вне цикла + &Previous Part &Предыдущая партия + &Next Part &Следующая партия + &Event Color &Цвет события + &Blue &Синий + &Pitch colors &Цвета высоты тона + &Velocity colors &Цвета скорости нажатия + + Quantize + Квантовать + + + + Modify Note Length + + + + + Crescendo/Decrescendo + + + + + Erase Events + + + + + Move Notes + + + + Delete Overlaps Удалить наложения + + Legato + + + + &Plugins &Плагины + Pianoroll tools Инструменты пианоролла + panic паника + transport транспорт @@ -8403,58 +9917,72 @@ Likely the selected track is the wrong type. PluginDialog + MusE: select plugin MusE: выбрать плагин + Lib Библ. + Label Метка + Name Имя + AI AI + AO AO + CI CI + CO CP + IP IP + id id + Maker Создатель + Copyright Copyright + Ok Ok + Cancel Отмена @@ -8463,10 +9991,12 @@ Likely the selected track is the wrong type. Стерео и Моно + Stereo Стерео + Mono Моно @@ -8475,18 +10005,22 @@ Likely the selected track is the wrong type. Все + 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. + Mono and Stereo Моно и Стерео + Show All Показать Все + Search in 'Label' and 'Name': Искать по "Меткам" и "Именам": @@ -8494,30 +10028,38 @@ Likely the selected track is the wrong type. PluginGui + File Buttons Файловые кнопки + Load Preset Загрузить пресет + Save Preset Сохранить пресет + + bypass plugin обойти плагин + MusE: load preset MusE: загрузить пресет + MusE: save preset MusE: сохранить пресет + Error reading preset. Might not be right type for this plugin Ошибка прочтения пресета. Возможно неверный тип для этого плагина @@ -8658,6 +10200,7 @@ currently not used QObject + Other Другой @@ -8665,26 +10208,34 @@ currently not used QWidget + + Cannot convert sysex string Невозможно конвертировать строку SysEx + + Hex String too long (2048 bytes limit) Hex-строка слишком длинная (предел составляет 2048 байтов) + generic midi обычный MIDI + new новый + create peakfile for создать пиковый файл для + MusE: get file name MusE: получить имя файла @@ -8711,14 +10262,17 @@ create? Отмена + MusE: create directory MusE: создать каталог + creating dir failed создание каталога не удалось + File Файл @@ -8730,6 +10284,7 @@ exists существует + MusE: write MusE: записать @@ -8742,35 +10297,43 @@ exists Выйти + Open File Открыть файл + failed: не удалось: + MusE: Open File MusE: Открыть файл + + None Ничего + No selection. Ignoring Не выделено. Игнорируется + The directory Директория + does not exist. Create it? @@ -8779,6 +10342,7 @@ Create it? Создать? + exists. Overwrite? @@ -8789,470 +10353,584 @@ exists. Overwrite? QuantConfig MusE: Config Quantize - MusE: Настройка Квантования + MusE: Настройка Квантования Config Quantize - Настройка Квантования + Настройка Квантования Strength - Степень + Степень Don´t Quantize - Не Квантовать + Не Квантовать Quant Len - Квант Дл + Квант Дл RhythmBase + MusE: Random Rhythm Generator - MusE: Генератор случайного ритма + MusE: Генератор случайного ритма + Instrument Properties - Свойства Инструмента + Свойства Инструмента + + counts/bar - счет/такт + счет/такт + steps/count - шаги/счет + шаги/счет + + # bars - #такты + #такты + test - тест + тест + + contrib - внести + внести + randomize - случайным образом + случайным образом + Group 1 - Группа 1 + Группа 1 + Group 2 - Группа 2 + Группа 2 + Group 3 - Группа 3 + Группа 3 + Group 4 - Группа 4 + Группа 4 + Group 5 - Группа 5 + Группа 5 + + listen - слушать + слушать + Instrument - Инструмент + Инструмент + + Group - Группа + Группа + + &New - &Новый + &Новый + create new entry - создать новую запись + создать новую запись + pressing the New button you create a new entry in the MusE list of defined controllers - нажав кнопку "Новая" вы создаёте новую запись + нажав кнопку "Новая" вы создаёте новую запись в списке назначенных в MusE контроллеров + &Delete - &Удалить + &Удалить + delete selected entry - удалить выделенную запись + удалить выделенную запись + Up - Вверх + Вверх + Down - Вниз + Вниз + Instrument - Инструмент + Инструмент + steps/count - шаги/счет + шаги/счет + list of defined controllers - список назначенных контроллеров + список назначенных контроллеров + This is the MusE list of defined controllers. - Это список назначенных контроллеров для MusE + Это список назначенных контроллеров для MusE + &File - &Файл + &Файл + &Edit - &Правка + &Правка + &Help - П&омощь + П&омощь + Tools - Инструменты + Инструменты + New - Новый + Новый + Open - Открыть + Открыть + &Open... - &Открыть... + &Открыть... + Save - Сохранить + Сохранить + &Save - &Сохранить + &Сохранить + Save As - Сохранить как + Сохранить как + Save &As... - Сохранить &как... + Сохранить &как... + Print - Печать + Печать + &Print... - &Печать... + &Печать... + Exit - Выйти + Выйти + E&xit - В&ыйти + В&ыйти + Undo - Отмена + Отмена + &Undo - &Отмена + &Отмена + Redo - Повторить + Повторить + &Redo - П&овторить + П&овторить + Cut - Вырезать + Вырезать + &Cut - &Вырезать + &Вырезать + Copy - Скопировать + Скопировать + C&opy - С&копировать + С&копировать + Paste - Вставить + Вставить + &Paste - &Вставить + &Вставить + Find - Найти + Найти + &Find... - &Найти... + &Найти... + Contents - Содержание + Содержание + &Contents... - &Содержание... + &Содержание... + Index - Индекс + Индекс + &Index... - &Индекс... + &Индекс... + About - О программе + О программе + &About... - &О программе... + &О программе... + <b>Notice!</b><br> Random Rhythm Generator is not enabled yet! - <b>Уведомление!</b><br> + <b>Уведомление!</b><br> Генератора Случайного Ритма пока ещё нет! + Ctrl+N - Ctrl+N + Ctrl+N + Ctrl+O - Ctrl+O + Ctrl+O + Ctrl+S - Ctrl+S + Ctrl+S + Ctrl+P - Ctrl+P + Ctrl+P + Ctrl+Z - Ctrl+Z + Ctrl+Z + Ctrl+Y - Ctrl+Y + Ctrl+Y + Ctrl+X - Ctrl+X + Ctrl+X + Ctrl+C - Ctrl+C + Ctrl+C + Ctrl+V - Ctrl+V + Ctrl+V + Ctrl+F - Ctrl+F + Ctrl+F RhythmGenerator + Form3 - Форма3 + Форма3 + Instrument Settings: - Настройки инструмента: + Настройки инструмента: + Instrument - Инструмент + Инструмент + Hi-Hat - Хай-хэт + Хай-хэт + add - добавить + добавить + delete - удалить + удалить + Group Settings: - Настройки группы: + Настройки группы: + Group - Группа + Группа + Group 1 - Группа 1 + Группа 1 + Group 2 - Группа 2 + Группа 2 + Group 3 - Группа 3 + Группа 3 + Group 4 - Группа 4 + Группа 4 + Group 5 - Группа 5 + Группа 5 + contrib - внести + внести + listen - слушать + слушать + Randomize - Случайным образом + Случайным образом + Rhythm Style: - Ритмический Стиль: + Ритмический Стиль: + Clear - Очистить + Очистить + Open... - Открыть... + Открыть... + Save - Сохранить + Сохранить + Save as... - Сохранить как... + Сохранить как... + Generate - Сгенерировать + Сгенерировать + Close - Закрыть + Закрыть + steps/count - шаги/счет + шаги/счет + count/bar - счет/такт + счет/такт + # bars - #такты + #такты RouteDialogBase + MusE: Routing MusE: Маршруты + Add Route Добавить маршрут + Source: Источник: + Destination: Назначение: + Connect Соединить + connect source to destination Соединить источник с назначением + Current Routes Текущие маршруты + Source Источник + Destination Назначение + Remove Удалить + remove selected route Удалить выбранный маршрут @@ -9260,42 +10938,52 @@ Random Rhythm Generator is not enabled yet! SS_PluginChooserBase + SimpleDrums - Ladspa Plugin Chooser SimpleDrums - Выбор LADSPA-плагина + Name Имя + Label Метка + Inports Порты входа + Outports Порты выхода + Creator Создатель + &Cancel &Отменить + Alt+C Alt+C + &OK &ОК + Alt+O Alt+О @@ -9304,32 +10992,35 @@ Random Rhythm Generator is not enabled yet! SS_PluginFront Clear and unload effect - Очистить и выгрузить эффект + Очистить и выгрузить эффект Load effect - Загрузить эффект + Загрузить эффект Toggle display of effect parameters - Переключить дисплей параметров эффекта + Переключить дисплей параметров эффекта Turn effect on/off - Эффект вкл/выкл + Эффект вкл/выкл ScrollScale + next page след страница + previous page пред страница + current page number номер текущей страницы @@ -9337,18 +11028,22 @@ Random Rhythm Generator is not enabled yet! ShortcutCaptureDialog + Ok OK + Cancel Отмена + Shortcut conflicts with "Горячая клавиша" конфликтует с + Undefined Не назначено @@ -9356,30 +11051,38 @@ Random Rhythm Generator is not enabled yet! ShortcutCaptureDialogBase + Enter shortcut sequence Введите последовательность "горячих клавиш" + Press keys to enter shortcut sequence! Нажмите клавиши для задания "горячих клавиш"! + Old shortcut: Старое сочетание: + + Undefined Не назначено + New shortcut: Новое сочетание: + OK ОК + Cancel Отмена @@ -9387,42 +11090,52 @@ Random Rhythm Generator is not enabled yet! ShortcutConfigBase + Configure Keyboard Shortcuts Настроить "горячие клавиши" + Shortcut Category Категория "горячих клавиш" + Description Описание + Shortcut "Горячая клавиша" + &Clear &Очистить + Alt+C Alt+C + &Define Н&азначить + Alt+D Alt+D + &Apply &Применить + Alt+A Alt+A @@ -9430,6 +11143,7 @@ Random Rhythm Generator is not enabled yet! SigScale + signature scale шкала ключей @@ -9437,6 +11151,7 @@ Random Rhythm Generator is not enabled yet! SimpleDrumsGuiBase + DrumSynth 0.1 DrumSynth 0.1 @@ -9444,25 +11159,29 @@ Random Rhythm Generator is not enabled yet! SimpleSynthGui + &Load setup З&агрузить настройки + &Save setup &Сохранить настройки Load sample dialog - Загрузить диалог сэмплов + Загрузить диалог сэмплов Song + Jack shutdown! Jack прекратил работу! + Jack has detected a performance problem which has lead to MusE being disconnected. This could happen due to a number of reasons: @@ -9496,55 +11215,76 @@ click on the Restart button. + 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: + + + MusE was unable to launch the script - MusE не может запустить скрипт + MusE не может запустить скрипт + Automation: @@ -9552,22 +11292,32 @@ click on the Restart button. SongInfo + Song Information Информация о проекте + + Show on song load + + + + &Cancel &Отменить + Alt+C Alt+C + &Ok &ОК + Alt+O Alt+O @@ -9575,54 +11325,68 @@ click on the Restart button. SynthConfigBase + MusE: Synth Configuration MusE: Настройка програм. синт. + Soft Synthesizer Программный синтезатор + File Файл + Instances Выбранный + + Name Имя + list of available software synthesizers список доступных программных синтезаторов + Add Instance Добавить выбранный + Remove Instance Удалить выбранный + Midi connections MIDI-соединения + Midi Port MIDI-порт + Inst Инстр + Version Версия + Description Описание @@ -9631,81 +11395,155 @@ click on the Restart button. TList Show Gui - Показать ГИП + Показать ГИП + Add Midi Track Добавить MIDI-трек + Add Drum Track Добавить трек с ударными + Add Wave Track Добавить Wave-трек + + Treble clef + + + + + Bass clef + + + + + Grand Staff + + + + + Viewable automation + + + + Delete Track Удалить трек + Track Comment Комментарий к треку + Midi MIDI + Drum Ударные + MusE: bad trackname MusE: неверное имя трека + + no clef + + + + + Treble + + + + + Bass + + + + + Grand + + + + please choose a unique track name Выберите неповторяющееся имя для трека + + + show gui + показать ГИП + + + + + show native gui + показать ГИП + + + Add Output Добавить Выход + Add Group Добавить Группу + Add Input Добавить Вход + Add Aux Send Добавить Aux Посыл + + Update drummap? Обновить карту ударных? + Do you want to use same port for all instruments in the drummap? Вы хотите использовать один и тот же порт для всех инструментов в списке ударных? + + &Yes &Да + + &No &Нет + Do you want to use same port and channel for all instruments in the drummap? Вы хотите использовать один и тот же порт и канал для всех инструментов в списке ударных? + <none> <ничего> @@ -9713,6 +11551,7 @@ click on the Restart button. TempoSig + Tempo/Sig Темп/Знаки альтерации @@ -9732,49 +11571,54 @@ click on the Restart button. Toolbar1 + Solo Соло + Cursor Курсор + Snap Привязка Quantize - Квантовать + Квантовать To - К + К All Events - Все события + Все события Looped Ev. - Соб. в цикле + Соб. в цикле Selected Ev. - Выделенное соб. + Выделенное соб. Looped+Sel. - В цикле+Выделенн. + В цикле+Выделенн. TrackComment + MusE: Track Comment MusE: Комментарий к треку + Track Comment: Комментарий к треку: @@ -9782,122 +11626,156 @@ click on the Restart button. Transport + Overdub Наложить + + Replace Заменить + Rec Mode Режим записи + Normal Норм. + Mix Смешать + Cycle Rec Циклич. запись + punchin нач. врезки + loop цикл + punchout кнц. врезки + + Punch In Начало врезки + + Loop Цикл + + Punch Out Конец врезки + Left Mark Левый маркер + Right Mark Правый маркер + rewind to start перемотать к началу + rewind перемотать назад + forward перемотать вперёд + stop остановить + play воспроизвести + record записать + AC AC + quantize during record квантовать при записи + Click Метр. + metronom click on/off Метроном вкл/выкл + Sync Синхр. + external sync on/off Вкл/выкл внешн. синхр. + Master Мастер + use master track использовать мастер-трек + Jack Jack + Jack transport sync on/off Синхр. транспорта "Jack" вкл/выкл @@ -9906,52 +11784,55 @@ click on the Restart button. TransposeDialogBase MusE: Midi Transpose - MusE: MIDI-транспонирование + MusE: MIDI-транспонирование Value - Значение + Значение halftones - полутонов + полутонов Time - Время + Время all - всё + всё between markers - между маркерами + между маркерами Parts - Партии + Партии all in selected tracks - все в выбранных треках + все в выбранных треках OK - ОК + ОК Cancel - Отмена + Отмена VAMGui + MusE: Load VAM Presets MusE: загрузить пресеты VAM + + MusE: Save VAM Presets MusE: сохраненить пресеты VAM @@ -9959,130 +11840,185 @@ click on the Restart button. 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 Вкл @@ -10101,6 +12037,7 @@ Jotsif Lindman Hörnlund ( jotsif@linux.nu ) + VAM 1.0beta3 Virtual Analog for MusE Released under GPL. @@ -10125,58 +12062,59 @@ Robert Jonsson VelocityBase MusE: Modify Velocity - MusE: Изменить скорость нажатия + MusE: Изменить скорость нажатия Range - Диапазон + Диапазон All Events - Все События + Все События Selected Events - Выбранные События + Выбранные События Looped Events - События в Цикле + События в Цикле Selected & Looped - Выбранные & в Цикле + Выбранные & в Цикле Values - Значения + Значения Rate: - Частота: + Частота: Offset: - Смещение: + Смещение: % - % + % OK - + Cancel - Отмена + Отмена WTScale + bar scale - линейка тактов + линейка тактов @@ -10190,96 +12128,138 @@ Robert Jonsson 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 &Убрать выделение + + WaveEdit tools + + + + Select Выделить + Wave edit tools Инструменты редактирования Wave + transport транспорт Pianoroll tools - Инструменты пианоролла + Инструменты пианоролла @@ -10320,10 +12300,12 @@ Robert Jonsson WaveView + MusE - file size changed MusE - размер файла изменился + When editing in external editor - you should not change the filesize since it must fit the selected region. @@ -10334,10 +12316,12 @@ Missing data is muted Утерянные данные заглушены + MusE - external editor failed MusE - ошибка запуска внешнего редактора + MusE was unable to launch the external editor check if the editor setting in: Global Settings->Audio:External Waveditor @@ -10351,6 +12335,7 @@ is set to a valid editor. freeverb + FreeVerb FreeVerb @@ -10359,226 +12344,283 @@ is set to a valid editor. Размер помещения + 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 Расширенное стерео diff --git a/muse2/share/locale/muse_sv_SE.ts b/muse2/share/locale/muse_sv_SE.ts index 95271d8e..7b768e8d 100644 --- a/muse2/share/locale/muse_sv_SE.ts +++ b/muse2/share/locale/muse_sv_SE.ts @@ -4,6 +4,7 @@ @default + Click this button to enable recording Klicka här för att spela in @@ -11,11 +12,12 @@ sets amount of quantization: 0 - no quantization 100 - full quantization - Sätter mängden kvantisering: + Sätter mängden kvantisering: 0 - ingen kvantisering 100 - full kvantisering + select Pointer Tool: with the pointer tool you can: select parts @@ -28,88 +30,107 @@ med pekverktyget kan du: 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 + Kvantisera inte över denna tick gräns quantize also note len as default - Kvantisera "note len" som standard + 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 @@ -121,83 +142,126 @@ med pennverktyget kan du: + 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 + + + edit automation + + + + + cursor + + rubber sudd + cutter delare + score partitur + glue lim + quantize kvantisering + draw rita + mute parts tysta parter + + + + + + + + Off Av @@ -206,130 +270,189 @@ klicka på en part för att Tysta/Avtysta Alla filer (*) + Add Midi Track Lägg till Midispår + Add Drum Track Lägg till Trumspår + Add Wave Track Lägg till Wavespå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 Aux Send Lägg till Aux-Send + eraser sudd + MESS + DSSI + FST + + Add Synth + Bar Takt + Jack + ALSA: + SYNTH: + JACK: + + + + + + Route + + + + channel="%1" + + + + + dest + + devtype="%1" + + + + + type="%1" + + + + + + + name="%1"/ + + source + Velocity Hastighet + <none> + + + channelMask="%1" + dssi_synth + ladspa_efx + channels="%1" + remch="%1" + mport="%1"/ @@ -337,6 +460,7 @@ klicka på en part för att Tysta/Avtysta AboutBox + AboutBox Om @@ -361,10 +485,12 @@ och mer information. Publiserad under GNU Public License + Version 2 pre-alpha + (C) Copyright 1999-2010 Werner Schweer and others. See http://www.muse-sequencer.org for new versions and more information. @@ -373,10 +499,12 @@ Published under the GNU Public License + &Keep On Rocking! + Alt+K @@ -404,60 +532,78 @@ Published under the GNU Public License audioeditor bakgrundsfärg + MusE: load image MusE: ladda bild + 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. + Controller graph and S/X buttons. Large numbers for time and tempo scale, and time signature. + 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> + + Global opacity (opposite of transparency). - Select style sheet + + Standard - Qt style sheets (*.qss) + + Custom + + + + + Select style sheet - Global opaqueness (inverse of transparency). + + Qt style sheets (*.qss) @@ -465,25 +611,30 @@ Word-breaking but only with spaces. AppearanceDialogBase MusE: Appearance Settings - MusE: Utseendeinställningar + MusE: Utseendeinställningar + Apply Verkställ + Ok + Cancel Avbryt + Arranger Arrangerare + Parts Parter @@ -492,70 +643,86 @@ Word-breaking but only with spaces. visa ramar + show names visa namn + show events visa händelser(events) + show Cakewalk Style använd Cakewalkstil + + y-stretch + + + + Events Händelser + note on + poly pressure + controller + aftertouch + pitch bend + program change + special + Background picture Bakgrundsbild - - bg - - select... - välj... + välj... + show snap grid visa rutnät + Colors Färger + Items @@ -576,149 +743,225 @@ Word-breaking but only with spaces. dynamisk färgallokering för spåraktivitet i arranger + Style/Fonts Stil/Typsnitt + QT Theme QT-tema + Windows + MusE + Metal + Norwegian Wood + Platinum + CDE + Motif + Motif Plus + Fonts Typsnitt + Family Familj + Size Storlek + Font 1 Typsnitt 1 + Font 2 Typsnitt 2 + Font 3 Typsnitt 3 + Font 0 Typsnitt 0 + + + + + + + Bold Fet + + + + + + + Italic Kursiv + + + + + + + + + ... + + Color name: + + + + + Global opacity + + + + Font 4 Typsnitt 4 + Font 5 Typsnitt 5 + Palette Palett + + MusE: Appearance settings + + + + + add + lägg till + + + + remove + ta bort + + + add to palette lägg till palett + B + S + H + V + G + R + clear + Style Sheet: + Font 6 Typsnitt 6 - - Global opaqueness - - Arranger + Arranger Arrangerare + Cursor Markör @@ -731,93 +974,127 @@ Word-breaking but only with spaces. Takt + Snap Fäst vid + Len Längd + Type Typ + NO + GM + GS + XG + + midi song type typ av midsång + Pitch Tonhöjd + midi pitch + global midi pitch shift + Tempo + + midi tempo + N + TrackInfo Spårinfo + R + M + S + C + Track Spår + Ch + T + + + Automation + + + + + Clef + + Master Master @@ -839,42 +1116,62 @@ Word-breaking but only with spaces. Grupp D + Enable Recording Slå på Inspelning + Mute/Off Indicator + Solo Indicator Solo-Indikator + Track Type Spårtyp + Track Name Spårnamn + Midi output channel number or audio channels + Midi output port or synth midi port + Time Lock Tidlås + + 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. @@ -882,28 +1179,33 @@ 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. @@ -911,19 +1213,24 @@ Right-click to show GUI. + Time lock - song length - bars + + Notation clef. Select this tracks notation clef. - Port + + + song length - bars - <unknown> + + Port @@ -1049,46 +1356,57 @@ Right-click to show GUI. Ingen + &Create &Skapa + &View + Routing + Show Midi Tracks + Show Drum Tracks + Show Wave Tracks + Show Inputs + Show Outputs + Show Groups + Show Auxs + Show Synthesizers @@ -1096,46 +1414,57 @@ Right-click to show GUI. AudioStrip + panorama + aux send level aux send nivå + off av + Pan + 1/2 channel 1/2 kanal + Pre + pre fader - post fader + dB + record + mute tysta + record downmix spela in nermixning @@ -1144,6 +1473,7 @@ Right-click to show GUI. pre fader lyssning + iR @@ -1152,42 +1482,52 @@ Right-click to show GUI. ingångsrouting + oR + output routing utgångsrouting + Off Av + Read Läs + Touch + Write Skriv + automation type automationstyp Channel - Kanal + Kanal + + solo mode + input routing @@ -1196,55 +1536,62 @@ Right-click to show GUI. Awl::MidiVolEntry off - av - - - db - + av Awl::VolEntry off - av + av BigTime + MusE: Bigtime + format display + bar + beat + + tick + minute minut + second sekund + + frame + subframe @@ -1252,6 +1599,7 @@ Right-click to show GUI. ClipListEdit + MusE: Clip List Editor MusE: Clip-listredigerare @@ -1259,38 +1607,47 @@ Right-click to show GUI. ClipListEditorBase + MusE: ClipList MusE: Clip-lista + Name Namn + Refs + Start + Len Längd + Data + Clip Properties Clip-egenskaper + Pos: + Len: @@ -1298,14 +1655,17 @@ Right-click to show GUI. CommentBase + Form1 + Track Comment Spår-kommentar + Track 1 Spår 1 @@ -1313,42 +1673,52 @@ Right-click to show GUI. ConfigMidiFileBase + &OK &Ok + &Cancel &Avbryt + 0 (single track) 0 (ett spår) + 1 (multiple tracks) 1 (flera spår) + Format: + 96 + 192 + 384 + Division: + Copyright: @@ -1357,46 +1727,57 @@ Right-click to show GUI. Slå på utbyggt smf-format + MusE: Config Midi File Import/Export + Import: + Split tracks into &parts + Alt+P + Split tracks into parts, or one single part + Export: + Enable extended smf format (currently not implemented) + Use &2-byte time signatures instead of standard 4 + Alt+2 + Save space by replacing note-offs with &zero velocity note-ons + Alt+Z @@ -1404,14 +1785,18 @@ Right-click to show GUI. CtrlPanel + select controller välj controller + remove panel ta bort panel + + Velocity Hastighet @@ -1424,248 +1809,378 @@ Right-click to show GUI. annat ... + add new ... lägg till ny... + S + X + manual adjust + double click on/off + off av + + + + Instrument-defined + + + + + + Add ... + + + + + Others + + + + + Edit instrument ... + + + + + Common Controls + + DeicsOnzeGui + + Delete preset Ta bort preset + + + Do you really want to delete %1 ? Vill du verkligen ta bort %1 ? + + + &Yes &Ja + + + &No &Nej + Save configuration + + + + + + + + + + Critical Error + + + + + Cannot open file %1 + + + + + Parsing error for file %1 + + Load category dialog + Load set dialog + Save set dialog + New category + + Delete category + Load category + Save category + Load set + Save set + Delete set + New subcategory + + Delete subcategory + Load subcategory + Save subcategory + New preset Ny preset + Load preset + Save preset + No more category supported + You can not add more categories + + No category selected + + You must first select a category. + + + Replace or add + %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 ? + + + &Replace &Ersätt + + + &Add &Lägg till + + + Download error + There is no more free category slot. + Save category dialog + No more subcategory supported + You can not add more subcategories + + No subcategory selected + + You must first select a subcategory. + Load subcategory 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 ? + There is no more free subcategory slot. + Save subcategory dialog + No more preset supported + You can not add more presets + + + No preset selected + + + You must first select a preset. + Load preset 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 ? + There is no more free preset slot. + Save preset dialog + Browse set dialog + Browse image dialog @@ -1686,11 +2201,11 @@ Right-click to show GUI. Subcategory - Underkategori + Underkategori Category - Kategori + Kategori Delete @@ -1718,11 +2233,11 @@ Right-click to show GUI. Pitch Bend Range - Pitchbend område + Pitchbend område Speed - Hastighet + Hastighet Square @@ -1730,1217 +2245,456 @@ Right-click to show GUI. LFO Waveform - LFO Vågform + LFO Vågform Amplitude Modulation Sensitivity - Amplitudmodulationskänslighet + Amplitudmodulationskänslighet Pitch Modulation Sensitivity - Pitchmodulationskänslighet + Pitchmodulationskänslighet Pitch Modulation Depth - Pitchmodulationsdjup + Pitchmodulationsdjup LFO Speed - LFO Hastighet + LFO Hastighet Transpose - Transponera + Transponera Modulation Matrix - Modulationsmatris + Modulationsmatris Frequency 1 - Frekvens 1 + Frekvens 1 Volume - Volym + Volym - DeicsOnze - + On + - &Preset - + Pitch + Tonhöjd - Program numerous - + &Config + &Inställningar - INITVOICE - + Filter + Filter - LBank - + Colors + Färger - Bank numerous - + Text + Text - NONE - + Enable + Aktivera - HBank - + Channel + Kanal + + + DidYouKnow - Prog + + Did you know? - Preset + + Don't show on startup - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. + + Next tip - &Global - + + Close + Stäng + + + DrumEdit - Pitch Envelope - + + &File + &Arkiv - PL3 - + + Load Map + Ladda mappning - PL2 - + + Save Map + Spara Mappning - PL1 - + + &Edit + &Redigera - PR1 - + + Cut + Klipp ut - PR2 - + + Copy + Kopiera - PR3 - + + Paste + Klistra in - Pitch modulation depth - + + Delete Events + Ta bort händelser - LFO - + + Select All + Välj Allt - LFO Sync - + + Select None + Välj Ingen - Pitch modulation sensitivity - + + Invert + Invertera - LFO Delay - + + Inside Loop + I loop - LFO delay - + + Outside Loop + Utanför loop - LFO speed - + + &Select + &Välj - Amplitude modulation depth - + + Load Drummap + Ladda trummappning - Amplitude modulation sensitivity - + + Store Drummap + Spara trummappning - AMS - + + Step Record + Stegvis inspelning - PMD + + Midi Input - AMD + + ctrl - Delay - + + Add Controller View + Lägg till Controller vy - PMS + + M - <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> - + + Sound + Ljud - Op4 Feedback + + QNT - Feedback level of the operator 4 + + E-Note - Op &1 - + + Len + Längd - Scaling 1 + + A-Note - LS1 + + Ch - RS1 + + Port - Rate Scaling + + LV1 - Attack Rate of the operator 1 + + LV2 - Level Scaling + + LV3 - Amplitude Envelope 1 + + LV4 - RR1 - + drummaps + trummappningar - D1R1 - + + Muse: Load Drum Map + Muse: Ladda trummappning - D1L1 - + + MusE: Store Drum Map + MusE: Spara trummappning - D2R1 - + + Set Fixed Length + Sätt fast längd - Release Rate - - - - 2° Decay Rate - - - - 1° Decay Level - - - - 1° Decay Rate - + + &Functions + &Funktioner - Attack Rate - + + Modify Velocity + Modifiera Velocity - AR1 - + + + mute instrument + tysta instrument - Detune, OSCWave, EGShift 1 - + + + sound name + ljudnamn - DET1 + + + volume percent - Detune - + + + quantisation + kvantisering - EG Shift - + + + this input note triggers the sound + denna in-not triggar ljudet - 96dB - + + + note length + notlängd - 48dB + + + this is the note which is played - 24dB + + output channel (hold ctl to affect all rows) - 12dB - + + + output port + utgångsport - Wave form + + + shift + control key: draw velocity level 1 - 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> + + + control key: draw velocity level 2 - Sensitivity 1 + + + shift key: draw velocity level 3 - KVS1 + + + draw velocity level 4 - Amplitude Modulation Enable + + output channel (ctl: affect all rows) - AME1 + + Reset GM Map - Keyboard Velocity Sensitivity - - - - Key Velocity Sensitivity - - - - EBS1 - - - - EG Bias Sensitivity - - - - Eg Bias Sensitivity - - - - Coarse 1 - - - - Coarse Ratio - - - - Fine 1 - - - - Fine Ratio - - - - Freq 1 - - - - Fixed Frequency - - - - Toggle Fix Frequency - - - - FIX - - - - OUT 1 - - - - Output Volume - - - - Op &2 - - - - Amplitude Envelope 2 - - - - D1R2 - - - - D1L2 - - - - D2R2 - - - - RR2 - - - - AR2 - - - - Frequency 2 - - - - Coarse 2 - - - - Fine 2 - - - - Freq 2 - - - - Scaling 2 - - - - LS2 - - - - RS2 - - - - OUT 2 - - - - Detune, OSCWave, EGShift 2 - - - - DET2 - - - - Sensitivity 2 - - - - EBS2 - - - - KVS2 - - - - AME2 - - - - Op &3 - - - - Amplitude Envelope 3 - - - - D1R3 - - - - D1L3 - - - - D2R3 - - - - RR3 - - - - AR3 - - - - Scaling 3 - - - - LS3 - - - - RS3 - - - - OUT 3 - - - - Frequency 3 - - - - Coarse 3 - - - - Fine 3 - - - - Freq 3 - - - - Detune, OSCWave, EGShift 3 - - - - DET3 - - - - Sensitivity 3 - - - - EBS3 - - - - KVS3 - - - - AME3 - - - - Op &4 - - - - amplitude Envelope 4 - - - - AR4 - - - - D1R4 - - - - D1L4 - - - - D2R4 - - - - RR4 - - - - Frequency 4 - - - - Coarse 4 - - - - Fine 4 - - - - Freq 4 - - - - Scaling 4 - - - - LS4 - - - - RS4 - - - - OUT 4 - - - - Detune, OSCWave, EGShift 4 - - - - DET4 - - - - Sensitivity 4 - - - - EBS4 - - - - KVS4 - - - - AME4 - - - - &Func - - - - Delay Pan Depth - - - - Delay Pan LFO Freq - - - - Delay Ch Send Level - - - - Channel Chorus - - - - Delay Feedback - - - - Delay On/Off, Return Level - - - - On - - - - Delay Beat Ratio - - - - Delay BPM - - - - Foot Control - - - - Pitch - Tonhöjd - - - Amplitude - - - - Modulation Wheel - - - - Breath Control - - - - Pitch Bias - - - - Envelope Bias - - - - After Touch - - - - Phony Mode - - - - POLY - - - - MONO - - - - Potamento - - - - Portamento Mode - - - - FINGER - - - - FULL - - - - PT - - - - Portamento Time - - - - C&horus - - - - Chorus Parameters - - - - Channel send level - - - - On/Off and Return level - - - - Select LADSPA plugin - - - - Change plugin - - - - &Reverb - - - - Reverb Parameters - - - - &Config - &Inställningar - - - Font Size - - - - Quality - - - - High - - - - Middle - - - - Low - - - - Ultra low - - - - Filter - Filter - - - Save Mode (into the song) - - - - Save only the used presets - - - - Save the entire set - - - - Save the configuration - - - - Configuration File - - - - Save... - - - - Load... - - - - Save as default - - - - Colors - Färger - - - Text - Text - - - Background - - - - Edit Text - - - - Edit Background - - - - Red - - - - Blue - - - - 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 - Aktivera - - - Channel - Kanal - - - Vol - - - - Channel Ctrl - - - - Release - - - - Attack - - - - Brightness - - - - Modulation - - - - Pan - - - - - DidYouKnow - - Did you know? - - - - Don't show on startup - - - - Next tip - - - - Close - Stäng - - - - 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 - - - Midi Input - - - - ctrl - - - - Add Controller View - Lägg till Controller vy - - - M - - - - Sound - Ljud - - - QNT - - - - E-Note - - - - Len - Längd - - - A-Note - - - - Ch - - - - Port - - - - LV1 - - - - LV2 - - - - LV3 - - - - LV4 - - - - 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 - - - volume percent - - - - quantisation - kvantisering - - - this input note triggers the sound - denna in-not triggar ljudet - - - note length - notlängd - - - this is the note which is played - - - - output channel (hold ctl to affect all rows) - - - - output port - utgångsport + + Previous Part + - shift + control key: draw velocity level 1 + + Next Part - control key: draw velocity level 2 + + Re-order list - shift key: draw velocity level 3 + + Crescendo/Decrescendo - draw velocity level 4 - + + Quantize + Kvantisera - output channel (ctl: affect all rows) + + Erase Event + Ta bort Händelse + + + + Move Notes - Reset GM Map + + Delete Overlaps - Previous Part + + &Plugins - Next Part + + Drum tools - &Plugins + + cursor tools - Drum tools + + Set step size for cursor edit + panic panik + transport + Vol + Drum map + Reset the drum map with GM defaults? @@ -2948,14 +2702,17 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCAfterDialog + MusE: Enter Channel Aftertouch + Time Position Tidsposition + Pressure Tryck @@ -3016,58 +2773,73 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCtrlBase + MusE: Edit Controller Event + Time Position Tidsposition + Available Controller: Tillgänglig controller: + Create New Controller Skapa ny Controller: + textLabel3 + Value Värde + Controller + H-Bank + L-Bank + Program + + off av + pushButton4 + &OK &Ok + &Cancel &Avbryt @@ -3075,10 +2847,12 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditEventDialog + Ok + Cancel Avbryt @@ -3086,46 +2860,57 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditGainBase + MusE: Modify gain + Gain Förstärkning + 200% + 100% + 0% + &Reset + Alt+R + &Apply &Verkställ + Alt+A Alt+L + &Cancel &Avbryt + Alt+C @@ -3133,131 +2918,178 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditInstrument + + MusE: Create file failed + MusE: Write File failed MusE: Misslyckades med att skriva Fil + + + + MusE: + + The user instrument directory + + does not exist yet. Create it now? - (You can override with the environment variable MUSEINSTRUMENTS) + + + (You can change the user instruments directory at Settings->Global Settings->Midi) + + Unable to create user instrument directory + + MusE: Save Instrument Definition + + Instrument Definition (*.idf) + + MusE: Save instrument as + Enter a new unique instrument name: + The user instrument: + 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 + + already exists. + A controller number + + MusE + + The current Instrument contains unsaved data Save Current Instrument? + + &Save &Spara + + &Nosave &Inte spara + &Abort &Avbryt @@ -3265,6 +3097,7 @@ Save Current Instrument? EditInstrumentBase + MusE: Instrument Editor @@ -3277,14 +3110,17 @@ Save Current Instrument? Patchnamn: + High Bank: Hög bank: + Low Bank: Låg bank: + Program: @@ -3293,10 +3129,16 @@ Save Current Instrument? Patch/Grupp; + + + &Delete &Ta bort + + + Alt+D @@ -3309,18 +3151,22 @@ Save Current Instrument? Ny Grupp; + Drum Trumma + GM + GS + XG @@ -3329,6 +3175,7 @@ Save Current Instrument? 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. @@ -3337,6 +3184,8 @@ Notera att i MusE hanteras tonhöjd och program change som vanliga controllers. + + Properties Egenskaper @@ -3349,30 +3198,38 @@ vanliga controllers. Typ + Control7 + Control14 + RPN + NRPN + Pitch Tonhöjd + Program + + H-Ctrl @@ -3381,6 +3238,8 @@ vanliga controllers. Midicontrollernummer, hög byte + + L-Ctrl @@ -3393,18 +3252,22 @@ vanliga controllers. Område + Min + Max + Name Namn + Type Typ @@ -3433,247 +3296,314 @@ vanliga controllers. Panik + Hex Entry: + &File &Arkiv + Tools Verktyg + New Ny + &New &Ny + Ctrl+N + Open Öppna + &Open... &Öppna... + Ctrl+O Ctrl+Ö + Save Spara + &Save &Spara + Ctrl+S + Save As Spara som + Save &As... S&para som... + Exit Stäng + E&xit S&täng + Instrument Name: + Selected instrument name. + List of defined instruments. + Pa&tches + List of groups and patches. + Group/Patch + + + Name: Namn: + + Group or patch name + Patch high bank number + Patch high bank number. --- means don't care. + --- dont care + Patch low bank number + Patch low bank number. --- means don't care. + --- + + Patch program number + Drum patch + If set, the patch is available only for drum channels. + GM patch + If set, the patch is available in a 'GM' or 'NO' midi song type. + GS patch + If set, the patch is available in a 'GS' or 'NO' midi song type. + XG patch + If set, the patch is available in an 'XG' or 'NO' midi song type. + Delete group or patch + New patch + New &Patch + Alt+P + New group + New &Group + Alt+G + Contro&ller + Common: + List of defined controllers + List of defined controllers. + Min + Max + Def + Midi controller name + Type: Typ: + + Midi controller type + RPN14 + NRPN14 + + Midi controller number high byte + Midi controller number low byte (* means drum controller) + Midi controller number low byte. If low byte is * then the controller is a 'drum controller'. For drum tracks and @@ -3686,19 +3616,23 @@ Examples: The GS and XG instruments' + * 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. @@ -3721,38 +3655,52 @@ True range: Min: -8192 Max: 8191 (bias 0) + + Maximum value + Default: + L-Bank + + + + + off av + Progr. + ??? + H-Bank + Default value. Off: No default. + Default (initial) value. Off means no default. If a default value is chosen, the value will be sent @@ -3771,47 +3719,59 @@ Caution! Watch out for controllers such as + off dont care av + Add common controller + &Add &Lägg till + Alt+A Alt+L + Delete controller + Create a new controller + New &Controller + 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 @@ -3821,38 +3781,49 @@ Typically, set to 127/127, or an unused + Lo: + Null parameter number Low byte + S&ysEx + SysEx List: + New SysE&x + Alt+X + &Help &Hjälp + + new item + + What's this? @@ -3860,18 +3831,22 @@ Typically, set to 127/127, or an unused EditMetaDialog + MusE: Enter Meta Event MusE: Mata in Meta Händelse + Time Position Tidsposition + Meta Type Metatyp + Enter Hex Mata in Hex @@ -3902,34 +3877,42 @@ Typically, set to 127/127, or an unused EditNoteDialogBase + MusE: Enter Note MusE: Mata in Not + OK + Cancel Avbryt + Length: Längd: + Time Position: Tidsposition: + Pitch: Tonhöjd: + Velocity On: + Velocity Off: @@ -3937,18 +3920,22 @@ Typically, set to 127/127, or an unused EditPAfterDialog + MusE: Enter Poly Aftertouch MusE: Mata in Poly Aftertouch + Time Position Tidsposition + Pitch Tonhöjd + Pressure Tryck @@ -3971,22 +3958,27 @@ Typically, set to 127/127, or an unused EditSysexDialogBase + MusE: Enter SysEx MusE: Mata in SysEx + TimePosition: Tidsposition: + Comment: Kommentar: + OK + Cancel Avbryt @@ -3994,6 +3986,7 @@ Typically, set to 127/127, or an unused EditToolBar + Edit Tools Redigeringsverktyg @@ -4001,42 +3994,52 @@ Typically, set to 127/127, or an unused EffectRack + effect rack effektrack + move up flytta upp + move down flytta ner + remove ta bort + bypass + 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? @@ -4049,14 +4052,17 @@ Typically, set to 127/127, or an unused &Nej + show native gui + save preset + MusE: Save Preset @@ -4082,6 +4088,7 @@ Message: FLUIDGui + FLUID: open Soundfile FLUID: öppna ljudbank @@ -4089,14 +4096,17 @@ Message: FLUIDGuiBase + Load Ladda + Form1 + Soundfont @@ -4104,50 +4114,63 @@ Message: FLUIDSynthGuiBase + Gain Förstärkning + Room Size Rumsstorlek + Damping Dämpning + + Level Nivå + Width Bredd + Speed Hastighet + Depth Djup + Number Nummer + Type Typ + Sine Sinus + Triangle Triangel + Load Ladda @@ -4156,50 +4179,62 @@ Message: Spara + Delete Ta bort + Fontname Fontnamn + FLUID Synth + Dump Info + ID + Chnl + Soundfont + Drum Chnl + Reverb + CHANNEL SETUP + Chorus + LOADED SOUNDFONTS @@ -4207,14 +4242,17 @@ Message: FileDialogButtons + Global + User Användare + Project Projekt @@ -4229,15 +4267,18 @@ Cofiguration konfiguration + only Songdata bara sångdata + fdialogbuttons + Songdata + Configuration @@ -4246,6 +4287,7 @@ Configuration FluidSynthGui + Choose soundfont @@ -4261,84 +4303,109 @@ Configuration GateTimeBase MusE: Modify Gate Time - MusE: Ändra Gate-tid + MusE: Ändra Gate-tid 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 + Valda & Loopade Values - Värden + Värden Rate: - Hastighet: + Hastighet: Offset: - Offset: + Offset: - % - + Cancel + Avbryt + + + GlobalSettingsConfig - OK + + Selects instruments directory - - Cancel - Avbryt - GlobalSettingsDialogBase + MusE: Global Settings MusE: Globala Inställningar + + 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. + + + + &Apply &Verkställ + &Ok + &Cancel &Avbryt + Audio Ljud + Mixer + + dB + min. Meter Value min. Metervärde @@ -4347,74 +4414,104 @@ Configuration min. Slider värde + Midi Midi + Ticks Tick + + + 1024 + + + 2048 + 4096 + Displayed Resolution (Ticks/Quarternote) Visad upplösning (Tick/Kvartsnot) + + 48 + + 96 + + 192 + + 384 + + 768 + + 1536 + + 3072 + + 6144 + + 12288 + RTC Resolution (Ticks/Sec) RTC-Upplösning (Tick/Sek) + GUI @@ -4423,312 +4520,489 @@ Configuration Hjälpläsare: + GUI Refresh Rate GUI-uppdateringsfrekvens + /sec /sek + Application Applikation + Start Muse Starta MusE + start with last song starta med föregående sång + start with song starta med sång + start song: startsång: + Views Vyer + + + + + y-pos + + + + show visa + + + + + x-pos + + + + height höjd + + + + width bredd + Big Time + Arranger Arrangerare + Transport + + + + + Cur + + + + + set current values sätt nuvarande värden + start with template: default.med börja med mall: default.med + show splash screen visa splash + External Waveditor Extern Ljudredigerare + External Waveditor command Extern Ljudredigerarkommando + Mixer A + Mixer B + show "Did you know?" dialog + Start song + min. Slider Val - Use Jack freewheel mode if possible. -(Speeds up bounce operations). + + Enable denormal protection - Enable denormal protection + + Enable output limiter - Enable output limiter + + Note: External editor opened from the internal editor. - Enable in-place processing for VST plugins. -(Requires restart.) + + Dummy Audio Driver (settings require restart) - 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. + + Hz - Note: External editor opened from the internal editor. + + Period size (Frames per period): - Dummy Audio Driver (settings require restart) + + + 16 - Preferred sample rate + + Try to use Jack Freewheel - 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. + + Speeds bounce operations - Hz + + Use Jack Freewheel mode if possible. +This dramatically speeds bounce operations. - Actual rate used now (dummy or not): + + VST in-place - --- + + Enable VST in-place processing (restart required) - Period size (Frames per period): + + 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. - 16 + + 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 + + + + + 2 + + + + + 4 + + + + + 8 + + 32 + + 64 + + 128 + + 256 + + 512 + + Sample rate + + + + + Shorter periods give better midi playback resolution. + + + + 8192 + 16384 + 32768 + Midi Resolution (Ticks/Quarternote) + + Instruments Directory + + + + Use old-style stop shortcut: + Move single armed track with selection + On Launch + Behavior + + Header + + + Track Info Columns + + + LMaster + MusE: Mastertrack MusE: Masterspår + Tempo + Timesig + new tempo nytt tempo + new signature ny signatur + Meter + Time Tid + Type Typ + Value Värde + &Edit &Redigera + Insert Tempo Sätt in tempo + Insert Signature Sätt in signatur + + Insert Key + + + + Edit Positon Editera position + Edit Value Editera värde + Delete Event Ta bort event + + Key + + + + + new key + + + + Reposition of the initial tempo and signature events is not allowed Ompositionering av initalt tempo och/eller signaturevent är inte tillåtet + MusE: List Editor + Input error, conversion not OK or value out of range Inmatningsfel, konvertering felaktig eller värde utanför område + Reposition of tempo and signature events to start position is not allowed! Ompositionering av tempo och/eller signaturevent till startposition är inte tillåtet + Master tools + Edit tools @@ -4740,6 +5014,7 @@ Shorter periods are desirable. Mata in Not + insert Note Mata in Not @@ -4748,6 +5023,7 @@ Shorter periods are desirable. Mata in SysEx + insert SysEx Mata in SysEx @@ -4756,6 +5032,7 @@ Shorter periods are desirable. Mata in Ctrl + insert Ctrl Mata in Ctrl @@ -4764,6 +5041,7 @@ Shorter periods are desirable. Mata in Meta + insert Meta Mata in Meta @@ -4780,6 +5058,7 @@ Shorter periods are desirable. Mata in Aftertouch för kanal + insert Channel Aftertouch Mata in Aftertouch för kanal @@ -4788,26 +5067,32 @@ Shorter periods are desirable. Mata in Key Aftertouch + insert Poly Aftertouch Mata in Poly Aftertouch + &Edit &Redigera + Cut Klipp ut + Copy Kopiera + Paste Klistra in + Delete Events Ta bort Händelser @@ -4820,46 +5105,57 @@ Shorter periods are desirable. Inmatningsverktyg + Tick + Bar Takt + Ch + Val A + Val B + Val C + Len Längd + Comment Kommentar + List tools + Insert tools + Type Typ @@ -4867,22 +5163,27 @@ Shorter periods are desirable. MITTransposeBase + MusE: Midi Input Plugin: Transpose MusE: Midi Inputplugin: Transponering + On + TriggerKey TriggNot + Transpose: Transponering: + +0 @@ -4902,22 +5203,27 @@ Shorter periods are desirable. MusE: Midiporttabell + Port + GUI + Instrument + Device Name Enhetsnamn + State Status @@ -4926,158 +5232,238 @@ Shorter periods are desirable. okänd + I + O + MusE: bad device name + + + 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? + + + + please choose a unique device name + + in + + out + Show first aliases + Show second aliases + + + Toggle all + + + + + + Change all tracks now + + + + Create + device + + Port Number Portnummer + 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 - Connect these to new midi tracks + + Auto-connect these channels to new midi tracks + + + + + Auto-connect new midi tracks to these channels + + + + + Auto-connect new midi tracks to this channel - Connect new midi tracks to this (first listed only) + + 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. + + + + 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 kopplat till denna port + Connections from Jack Midi output ports + Connections to Jack Midi input ports - 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 - - - - 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) - - - + State: result of opening the device Status: resultat av öppning av enhet + In routes + Out routes + Def in ch + Def out ch + <unknown> + + <none> @@ -5085,41 +5471,55 @@ NOTE: Currently only one output port and channel supported (first found) MRConfigBase + MusE: Midi Input Plugin: Remote Control MusE: Midiinputplugin: Fjärrkontroll + Activate Aktivera + On + Actions + Stop Stopp + Record Spela in + Goto Left Mark Gå till vänster markering + Play Spela + + + Insert rest (step rec) + + MTScale + bar scale takt skala @@ -5127,10 +5527,12 @@ NOTE: Currently only one output port and channel supported (first found) MarkerView + MusE: Marker MusE: Markör + add marker lägg till markör @@ -5139,6 +5541,7 @@ NOTE: Currently only one output port and channel supported (first found)Lägg till Markör + delete marker ta bort markör @@ -5151,34 +5554,42 @@ NOTE: Currently only one output port and channel supported (first found)&Arkiv + &Edit &Redigera + Bar:Beat:Tick Takt:Slag:Tick + Hr:Mn:Sc:Fr:Sf + Lock Lås + Text Text + Marker Properties Markörinställningar + marker-tools + edit tools redigeringsverktyg @@ -5186,6 +5597,7 @@ NOTE: Currently only one output port and channel supported (first found) MasterEdit + MusE: Mastertrack MusE: Masterspår @@ -5202,10 +5614,12 @@ NOTE: Currently only one output port and channel supported (first found)använd master track + Info + Cursor Markör @@ -5214,42 +5628,52 @@ NOTE: Currently only one output port and channel supported (first found)Av + Snap Fäst vid + time at cursor position tid vid markörposition + tempo at cursor position tempo vid markörposition + CurPos + 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 + Master tools + Enable master @@ -5257,114 +5681,142 @@ NOTE: Currently only one output port and channel supported (first found) MetronomeConfigBase + MusE: Metronome Config MusE: Metronomeconfiguration + Metronome Metronom + Audio Beep Audio - Ton + MIDI Click Midiklick + Midi Channel Midikanal + Measure Note Taktnot + Measure Velocity Taktanslag + Beat Velocity Slaganslag + Beat Note Slagnot + Midi Port Midiport + Precount Inräkning + enable + Bars Takter + From Mastertrack Från Masterspår + / + Signature + Prerecord + Preroll + &Apply &Verställ + &OK &Ok + &Cancel &Avbryt + Choose outputs... + 50 + % Audio volume + Hint: Enable metronome in Transportpanel + Alt+A Alt+L + Alt+O + Alt+C @@ -5390,8 +5842,9 @@ NOTE: Currently only one output port and channel supported (first found) MidiControllerEditDialogBase + MusE: Define Midi Controller - MusE: Definiera Midi-controller + MusE: Definiera Midi-controller replace controller set @@ -5406,122 +5859,201 @@ NOTE: Currently only one output port and channel supported (first found)spara controller-set + Name - Namn + Namn + Type - Typ + Typ + Min Val - Min.värde + Min.värde + Max Val - Max.värde + Max.värde + list of defined controllers - lista med definierade controllers + lista med definierade controllers + This is the MusE list of defined controllers. - Detta är MusEs lista med definierade controllers. + Detta är MusEs lista med definierade controllers. + Properties - Egenskaper + Egenskaper + Name - Namn + Namn + Max Value - Max.värde + Max.värde + Min Value - Min.värde + Min.värde + Type - Typ + Typ &New &Ny + create new entry - skapa nytt inlägg + skapa nytt inlägg + 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 + tryck på Ny knappen för att skapa nytt inlägg i MusEs lista med definierade controllers + &Delete - &Ta bort + &Ta bort + delete selected entry - ta bort valt inlägg + ta bort valt inlägg + &OK - &Ok + &Ok + &Cancel - &Avbryt + &Avbryt + &Add - &Lägg till + &Lägg till + Alt+A - Alt+L + Alt+L + + + + A&pply + + Predefined Controller: - Fördefinieradecontrollers: + Fördefinieradecontrollers: + + + + + H-Ctrl + + + + + + L-Ctrl + + Managed Controller for Port - Hanterad controller för port + Hanterad controller för port + Channel - Kanal + Kanal + 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-controllers. Notera att tonhöjd- och program-change hanteras som vanliga controllers i MusE. + + Control7 + + + + + Control14 + + + + + RPN + + + + + NRPN + + + + + RPN14 + + + + + NRPN14 + + + + Pitch - Tonhöjd + Tonhöjd + + + + Program + + Midi Controller Number High Byte - Midicontrollernummer, hög byte + Midicontrollernummer, hög byte + Midi Controller Number Low Byte - Midicontrollernummer, låg byte + Midicontrollernummer, låg byte + Range - Område + Område @@ -5542,114 +6074,149 @@ som vanliga controllers i MusE. MidiFilterConfigBase + MusE: Midi Input Filter + Record Filter Inspelningsfilter + + Note On Noteon + + Poly Pressure + + Controller + + Program Change + + After Touch + + Pitch Bend + + Sysex + Thru Filter + Controller Filter + Channel Filter + 14 + 10 + 6 + 12 + 4 + 2 + 9 + 8 + 3 + 13 + 15 + 16 + 7 + 11 + 5 + 1 @@ -5657,6 +6224,8 @@ som vanliga controllers i MusE. MidiInputTransformDialog + + New Ny @@ -5664,214 +6233,334 @@ som vanliga controllers i MusE. MidiInputTransformDialogBase + MusE: Midi Input Transformator MusE: Midi inputtransformator + Filter Filter + All Alla + + + + + Equal Lika + + + + + Unequal Ej lika + Note Not + + Poly Pressure + + Control Change + + Aftertouch + + Pitch Bend + + NRPN + + RPN + + + Value 2 Värde 2 + + + + + Value 1 Värde 1 + + Event Type Händelsetyp + + + + Ignore Ignorera + + + + Higher Högre + + + + Lower Lägre + + + + Inside Innanför + + + + Outside Utanför + + Channel Kanal + + Port + Processing Bearbetar + + + + + Keep Behåll + + + + + Fix + + + + Plus + + + + Minus + + + + Multiply Multiplicera + + + + Divide Dela + + + + Invert Invertera + ScaleMap Skalmap + Flip Vänd + + + + Dyn + + + + Random Slumpmässig + Modules Moduler + 1 + 2 + 3 + 4 + enable modul 1 aktivera modul 1 + enable modul 2 aktivera modul 2 + enable modul 3 aktivera modul 3 + enable modul 4 aktivera modul 4 + Preset + Name: Namn: + Comment: Kommentar: + Function Funktion + &New &Ny + create new preset skapa ny preset + &Delete &Ta bort + delete preset ta bort preset + &Dismiss &Stäng + PresetList Presetlista @@ -5945,50 +6634,64 @@ som vanliga controllers i MusE. MidiStrip + VariationSend + Var + ReverbSend + Rev + ChorusSend + Cho + + + off av + dB + Pan/Balance Pan/Balans + Pan + record spela in + mute tysta @@ -6013,26 +6716,33 @@ som vanliga controllers i MusE. automationstyp + + double click on/off + solo mode + iR + input routing + oR + output routing utgångsrouting @@ -6040,111 +6750,142 @@ som vanliga controllers i MusE. MidiSyncConfig + + Port Number Portnummer + + Name of the midi device associated with this port number Namn på midienhet associerad med detta portnummer + 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, @@ -6154,6 +6895,7 @@ 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 @@ -6164,30 +6906,36 @@ This means you may have several master + 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 @@ -6197,103 +6945,128 @@ Note: It may be impossible to rewind fast + Port + Device Name Enhetsnamn + c + k + r + m + t + type + rid + rc + rr + rm + rt + rw + tid + tc + tr + tm + tt + MusE + Settings have changed Apply sync settings? + &Apply + &No &Nej + &Abort &Avbryt + <none> @@ -6301,6 +7074,7 @@ Apply sync settings? MidiSyncConfigBase + MusE: Midi Sync MusE: Midisync @@ -6345,103 +7119,128 @@ Apply sync settings? Midiklocka + Apply Verkställ + Ok + Cancel Avbryt + MTC + Type: Typ: + 24 + 25 + 30D + 30N + Offset: Offset: + hour timma + h + minute minut + m + second sekund + s + frame + f + subframe + 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. @@ -6451,14 +7250,17 @@ 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. @@ -6467,14 +7269,17 @@ Enabled inputs in the list will + 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 @@ -6482,10 +7287,12 @@ Enabled inputs in the list will + ms + Send sync delay @@ -6493,10 +7300,12 @@ Enabled inputs in the list will MidiTrackInfoBase + MusE: TrackInfo MusE: Spårinfo + output channel utgångskanal @@ -6509,6 +7318,8 @@ Enabled inputs in the list will Spårinfo + + % @@ -6517,10 +7328,23 @@ Enabled inputs in the list will Spårnamn + output port utgångsport + + iR + + + + + + + + + + off av @@ -6533,6 +7357,7 @@ Enabled inputs in the list will välj instrumentpatch + Transp. @@ -6541,34 +7366,57 @@ Enabled inputs in the list will Volym + Channel Info Kanalinfo + + Rec: + + + + + Prog + + + + + Vol + + + + Pan + Delay + H-Bank + Compr. + L-Bank + Velocity Hastighet + Length Längd @@ -6613,108 +7461,119 @@ inspelning: Välj bank MSB + all midi events are sent to this output channel + Out ch + input routing Inputs - Ingångar + Ingångar + output routing utgångsrouting + 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> - Record: - - - + Add all settings to song + All Alla + 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 - Prog. - - - + Volume. Double-click on/off. + Add vol setting to song - Vol. - - - + + Change stereo position. Double-click on/off. + Add pan setting to song @@ -6722,230 +7581,345 @@ inspelning: MidiTransformDialogBase + MusE: Midi Transformator + &New &Ny + &Delete &Ta bort + &Apply &Verkställ + &OK &Ok + &Cancel &Avbryt + PresetList Presetlista + Processing Bearbetar + + Event Type Händelsetyp + + + + + Keep Behåll + + + + Fix + + Note Not + + Poly Pressure + + Control Change + + Aftertouch + + Pitch Bend + + NRPN + + RPN + + + + Plus + + + + Minus + + + + Multiply Multiplicera + + + + Divide Dela + + + Value 2 Värde 2 + + Invert Invertera + ScaleMap Skalmap + Flip Vänd + + Dyn + + Random Slumpmässig + + + Value 1 Värde 1 + + Length Längd + Position + Filter Filter + All Alla + + + + + Equal Lika + + + + + Unequal Ej lika + + + + Ignore Ignorera + + + + Higher Högre + + + + Lower Lägre + + + + Inside Innanför + + + + Outside Utanför + Bar Range Takt Område + Preset + Name: Namn: + Comment: Kommentar: + Range Område + process all events bearbeta alla händelser + selected tracks valda spår + inside loop I loop + Function Funktion + Select Välj + Quantize Kvantisera + Delete Ta bort + Transform Transformera + Insert Sätt in + Copy Kopiera + Extract Extrahera + Quantize Value Kvantisera värde @@ -6953,6 +7927,8 @@ inspelning: MidiTransformerDialog + + New Ny @@ -6960,6 +7936,7 @@ inspelning: MixdownFileDialog + Wave Files (*.wav);;All Files (*) Ljudfiler (*.wav);;Alla filer (*) @@ -6967,50 +7944,62 @@ inspelning: MixdownFileDialogBase + MusE: Set Mixdown Wavefile MusE: Välj mixdown-ljudfil + &OK &Ok + &Cancel &Avbryt + File Path Sökväg till fil + Channel Kanal + Stereo + Mono + 5.1 + wav,16 Bit + wav, 24 Bit + wav, 32 Bit (float) + Format @@ -7033,6 +8022,8 @@ inspelning: för att importera en ljudfil måste du ha valt ett ljudspår + + Import Wave File Importera ljudfil @@ -7045,6 +8036,7 @@ inspelning: ångra + Und&o &Ångra @@ -7053,34 +8045,42 @@ inspelning: gör om + Re&do &Gör om + undo last change to song ångra sista ändring i sång + redo last undo gör om sista ångring + Transport + Loop + Punchin + Punchout + Start @@ -7089,6 +8089,7 @@ inspelning: flytta tillbaka + Rewind Flytta tillbaka @@ -7097,6 +8098,7 @@ inspelning: frammåt + Forward Frammåt @@ -7105,6 +8107,7 @@ inspelning: stopp + Stop Stopp @@ -7113,6 +8116,7 @@ inspelning: spela + Play Spela @@ -7121,6 +8125,7 @@ inspelning: spela in + Record Spela in @@ -7129,6 +8134,8 @@ inspelning: panik + + Panic Panik @@ -7137,6 +8144,7 @@ inspelning: ny + &New &Ny @@ -7145,6 +8153,7 @@ inspelning: öppna + &Open &Öppna @@ -7153,6 +8162,9 @@ inspelning: spara + + + &Save &Spara @@ -7161,6 +8173,7 @@ inspelning: pianorulle + Pianoroll Pianorulle @@ -7169,8 +8182,9 @@ inspelning: partitur + Score - Partitur + Partitur marker @@ -7181,18 +8195,22 @@ inspelning: Markör + File Buttons Arkivknappar + &File &Arkiv + Open &Recent &Nyligen öppnade + Save &As S&para som @@ -7201,30 +8219,37 @@ inspelning: &Konfigurera skrivare + Import Midifile Importera midifil + Export Midifile Exportera midifil + &Quit A&vsluta + &Edit &Redigera + C&ut Klipp &ut + &Copy &Kopiera + &Paste K&listra in @@ -7233,154 +8258,193 @@ inspelning: Ta bort spår + Add Track Lägg Till Spår + 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 + Select Välj + Drums Trummor + + List Lista + Graphic Grafik + Mastertrack Masterspår + Midi &Transform Midi &Transform + Modify Gate Time Modifiera Gate Time + Modify Velocity Modifiera Velocity + Crescendo + Transpose Transponera + Thin Out Tunna ut + Erase Event Ta bort Händelse + Note Shift Shifta Not + Move Clock Flytta Klocka + Copy Measure Kopiera Takt + Erase Measure Radera Takt + Delete Measure Ta bort Takt + Create Measure Skapa Takt + Mix Track Mixa Spår + Midi Midi + &Structure &Struktur + Global Cut Globalt klipp + Global Insert Global insättning + Global Split Global delning + Copy Range Kopiera Område + Cut Events Klipp ut Händelse + Transport Panel Transportpanel + Bigtime Window Bigtime fönster - Don't Follow Song + + Don't Follow Song följ inte Sång + Follow Page följ sida + Follow Continuous följ kontinuerligt @@ -7389,18 +8453,22 @@ inspelning: &Inställningar + Global Settings Globala Inställningar + Follow Song följ sång + Metronome Metronom + Midi Sync Midi Synk @@ -7409,6 +8477,7 @@ inspelning: Midi Filkonfigurering + Appearance Settings Utseendeinställningar @@ -7429,14 +8498,17 @@ inspelning: Spara Inställningar + Midi Input Transform + Midi Input Filter + Midi Remote Control Midi-fjärrkontroll @@ -7445,6 +8517,7 @@ inspelning: Slumprytmgenerator + &Midi @@ -7453,34 +8526,42 @@ inspelning: Definiera Controller + Input Plugins + Reset Instr. Resetta Instr. + Init Instr. + Local Off lokal av + &Audio L&jud + Bounce to Track Bounce till Spår + Bounce to File Bounce till Fil + &Help &Hjälp @@ -7509,14 +8590,17 @@ inspelning: inget + MusE: load project MusE: Öppna projekt + 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 @@ -7527,6 +8611,8 @@ Spara nuvarande Projekt? &Inte spara + + &Abort &Avbryt @@ -7535,22 +8621,30 @@ Spara nuvarande Projekt? MusE: Om + + MusE: Save As MusE: Spara Som + + + MusE: Song: MusE: Sång: + MusE: Import Midi MusE: Importera Midi + MusE: Export Midi MusE: Exportera Midi + reading midifile läser midifil @@ -7561,22 +8655,29 @@ failed misslyckades + + Nothing to edit Inget att redigera MusE: Copy Range - MusE: Kopiera område + MusE: Kopiera område not implemented - ej implementerat + ej implementerat MusE: Cut Events - MusE: Klipp ut Händelse + MusE: Klipp ut Händelse + + + + + MusE: Bounce to Track MusE: Bounce till Spår @@ -7595,6 +8696,7 @@ välj wave-spår som mål inget spår valt som mål + The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -7607,10 +8709,12 @@ Spara nuvarande Projekt? Skriv &över + no help found at: ingen h jälp hittad vid: + MusE: Open Help Muse: Arkiv hjälp @@ -7619,38 +8723,40 @@ Spara nuvarande Projekt? för att importa en ljudfil så måste du första välja ett wavespår + Delete Selected Tracks Ta bort valda spår View - Vy + Vy + Restart Audio Starta om Audio - Automation - - - + Mixer Automation Mixerautomation + Take Snapshot Ta ett snapshot + Clear Automation Data Rensa automationsdata Settings - Inställningar + Inställningar + Configure Shortcuts Konfigurera kortkommandon @@ -7659,22 +8765,27 @@ Spara nuvarande Projekt? Midifilexport + Midi Ports / Soft Synth Midiportar / Mjukvarusyntar + &Manual + &MusE Homepage M&usEs hemsida + &Report Bug... &Rapportera fel... + &About MusE &Om MusE @@ -7683,30 +8794,32 @@ Spara nuvarande Projekt? Vad är &detta? + 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: load template MusE: ladda mall - - MusE: Bounce - - set left/right marker for bounce range - sätt vänster och höger markör till bounce-område + sätt vänster och höger markör till bounce-område + + MusE: Bounce to File MusE: Bounce till fil @@ -7715,33 +8828,41 @@ Spara nuvarande Projekt? hittar inget utgångsspår + Add midi file to current project? Lägg midifil till nuvarande projekt? + &Add to Project &Lägg till projekt + &Replace &Ersätt + failed: misslyckades: + Import Part Importera Part + Marker View Markörvy + + &Skip &Hoppa över @@ -7750,161 +8871,247 @@ misslyckades: Bara midispår kan importera parter! + MusE: load part MusE: ladda part + No track selected for import Inget spår valt för import + + 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. + &Insert - Paste c&lone + + Paste c&lone + + + + + Paste to &track + + + + + Paste clone to trac&k + + + + + &Insert Empty Measure + + + + + Find unused wave files - Paste to &track + + all parts in one staff - Paste clone to trac&k + + one staff per part - &Insert Empty Measure + + New score window + Wave Wave + Song Info + Mixer A + Mixer B + Cliplist + &Plugins + Edit Instrument + Rhythm Generator + Midi File Import/Export + + &View + + + + + A&utomation + + + + + Se&ttings + + + + Unknown File Format: + + &Cancel + &Avbryt + + + + + New + Ny + + + 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 + Select one audio output track + Import part is only valid for midi and wave tracks! + 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 + Import Wavefile + This wave file has a samplerate of %1, as opposed to current setting %2. Do you still want to import it? + &Yes &Ja + &No &Nej + Unable to launch help + For some reason MusE has to launch the default browser on your machine. @@ -7936,26 +9143,32 @@ browser on your machine. NoteInfo + Note Info Notinfo + Start + Len Längd + Pitch Tonhöjd + Velo On + Velo Off @@ -7975,90 +9188,122 @@ browser on your machine. spara presetlista + Velocity Hastighet + MusE: Organ + Drawbars + 16' + 4' + 2 2/3' + 2' + 5 1/3' + 8' + Envelope Hi + + Release + + Sustain + + Decay + + Attack + + + + + + ms + + cB + Envelope Lo + O-1 + Oscillator + Brass + Reed + Flute @@ -8165,44 +9410,53 @@ browser on your machine. 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 pianoroll - pianorulle + pianorulle score @@ -8210,21 +9464,24 @@ browser on your machine. list - lista + lista drums - trummor + trummor + wave edit wave redigering + 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 @@ -8237,63 +9494,84 @@ browser on your machine. Kan inte klistra in wavepart på midispår + Cannot paste: wrong data type Kan inte klistra in: fel datatyp + 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 export - exportera + exportera + MusE: save part MusE: spara part + s&elect + clones + + + + save part to disk + + + + file info + Part name + Files + out of + parts + part + could not be pasted. Likely the selected track is the wrong type. + Can only paste to midi or wave track @@ -8301,6 +9579,7 @@ Likely the selected track is the wrong type. PianoRoll + &Edit &Redigera @@ -8341,6 +9620,7 @@ Likely the selected track is the wrong type. Utanför loop + &Select &Välj @@ -8357,6 +9637,7 @@ Likely the selected track is the wrong type. velocityfärger + &Config &Inställningar @@ -8365,182 +9646,237 @@ Likely the selected track is the wrong type. händelsefärg + &Functions &Funktioner Over Quantize - Över Kvantisera + Över Kvantisera Note On Quantize - Note On-kvantisera + Note On-kvantisera Note On/Off Quantize - Note On/Off Kvantisera + Note On/Off Kvantisera Iterative Quantize - Iterativ kvantisering + Iterativ kvantisering Config Quant... - Konfigurera Kvant... + Konfigurera Kvant... Modify Gate Time - Modifiera Gate Time + Modifiera Gate Time + Modify Velocity Modifiera Velocity - Crescendo - - - + Transpose Transponera Thin Out - Tunna ut + Tunna ut Erase Event - Ta bort Händelse + Ta bort Händelse Note Shift - Shifta Not + Shifta Not Move Clock - Flytta Klocka + Flytta Klocka Copy Measure - Kopiera Takt + Kopiera Takt Erase Measure - Radera Takt + Radera Takt Delete Measure - Ta bort Takt + Ta bort Takt Create Measure - Skapa Takt + Skapa Takt Pianoroll Tools Verktyg Pianorulle + Step Record Stegvis inspelning + Midi Input + Play Events Spela Händelser + ctrl + Add Controller View Lägg till Controller Vy + Set Fixed Length Sätt fast längd + C&ut Klipp &ut + &Copy &Kopiera + &Paste K&listra in + Delete &Events + Select &All Markera &Allt + &Deselect All A&vmarkera Allt + Invert &Selection Invertera &Markering + &Inside Loop &I Loop + &Outside Loop &Utanför Loop + &Previous Part + &Next Part + &Event Color + &Blue + &Pitch colors + &Velocity colors + + Quantize + Kvantisera + + + + Modify Note Length + + + + + Crescendo/Decrescendo + + + + + Erase Events + + + + + Move Notes + + + + Delete Overlaps + + Legato + + + + &Plugins + Pianoroll tools + panic panik + transport @@ -8548,58 +9884,72 @@ Likely the selected track is the wrong type. PluginDialog + MusE: select plugin MusE: välj plugin + Lib + Label Etikett + Name Namn + AI + AO + CI + CO + IP + id + Maker Upphovsman + Copyright + Ok + Cancel Avbryt @@ -8608,10 +9958,12 @@ Likely the selected track is the wrong type. Stereo och mono + Stereo + Mono @@ -8620,18 +9972,22 @@ Likely the selected track is the wrong type. Alla + 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. + Mono and Stereo + Show All + Search in 'Label' and 'Name': @@ -8639,30 +9995,38 @@ Likely the selected track is the wrong type. PluginGui + File Buttons Arkiv Knappar + Load Preset Öppna Preset + Save Preset Spara Preset + + bypass plugin koppla ur plugin + MusE: load preset MusE: öppna preset + MusE: save preset MusE: spara preset + Error reading preset. Might not be right type for this plugin @@ -8834,6 +10198,7 @@ används inte för tillfället QObject + Other Andra @@ -8845,22 +10210,29 @@ används inte för tillfället Hastighet + + Cannot convert sysex string Kan inte konvertera sysex-sträng + + Hex String too long (2048 bytes limit) Hex-sträng för lång (2048 bytes maxgräns) + generic midi generell midi + new ny + create peakfile for skapa "peak"-fil @@ -8869,6 +10241,7 @@ används inte för tillfället Kan inte transformera ej tomt spår + MusE: get file name MusE: hämta filnamn @@ -8894,14 +10267,17 @@ skapa? Avbryt + MusE: create directory MusE: skapa katalog + creating dir failed misslyckades med att skapa katalog + File Arkiv @@ -8912,6 +10288,7 @@ exists existerar + MusE: write MusE: skriv @@ -8924,21 +10301,26 @@ exists Avsluta + Open File Öppna fil + failed: misslyckades: + MusE: Open File MusE: Öppna fil + + None Ingen @@ -8959,21 +10341,25 @@ misslyckades: Grupp + No selection. Ignoring + The directory + does not exist. Create it? + exists. Overwrite? @@ -8983,23 +10369,23 @@ exists. Overwrite? QuantConfig MusE: Config Quantize - MusE: Konfigurera Kvantisering + MusE: Konfigurera Kvantisering Config Quantize - Konfigurera Kvantisering + Konfigurera Kvantisering Strength - Styrka + Styrka Don´t Quantize - Kvantisera Inte + Kvantisera Inte Quant Len - Kvant Längd + Kvant Längd @@ -9024,309 +10410,501 @@ exists. Overwrite? RhythmBase + MusE: Random Rhythm Generator - MusE: Slumprytmgenerator + MusE: Slumprytmgenerator + Instrument Properties - Instrumentinställningar + Instrumentinställningar + + counts/bar - slag/takt + slag/takt + + + + steps/count + + + # bars - # takter + # takter + + + + test + + + + contrib + + + + randomize - slumpa + slumpa + Group 1 - Grupp 1 + Grupp 1 + Group 2 - Grupp 2 + Grupp 2 + Group 3 - Grupp 3 + Grupp 3 + Group 4 - Grupp 4 + Grupp 4 + Group 5 - Grupp 5 + Grupp 5 + + listen - lyssna + lyssna + Instrument - Instrument + Instrument + + Group - Grupp + Grupp + + &New - &Ny + &Ny + create new entry - skapa nytt inlägg + skapa nytt inlägg + pressing the New button you create a new entry in the MusE list of defined controllers - skapa nytt inlägg genom att trycka på Ny knappen + skapa nytt inlägg genom att trycka på Ny knappen i MusEs lista över definierade controllers + &Delete - &Ta bort + &Ta bort + delete selected entry - ta bort valt inlägg + ta bort valt inlägg + Up - Upp + Upp + Down - Ner + Ner + list of defined controllers - lista med definierade controllers + lista med definierade controllers + This is the MusE list of defined controllers. - Detta är MusEs lista med definierade controllers. + Detta är MusEs lista med definierade controllers. + + + + Instrument + + + + + steps/count + + + <b>Notice!</b><br> +Random Rhythm Generator is not enabled yet! + + + + &File - &Arkiv + &Arkiv + &Edit - &Redigera + &Redigera + &Help - &Hjälp + &Hjälp + Tools - Verktyg + Verktyg + New - Ny + Ny + + + + Ctrl+N + + Open - Öppna + Öppna + &Open... - &Öppna... + &Öppna... + + Ctrl+O + Ctrl+Ö + + + Save - Spara + Spara + &Save - &Spara + &Spara + + + + Ctrl+S + + Save As - Spara som + Spara som + Save &As... - S&para som... + S&para som... + Print - Skriv ut + Skriv ut + &Print... - Skriv &ut... + Skriv &ut... + + + + Ctrl+P + + Exit - Stäng + Stäng + E&xit - S&täng + S&täng + Undo - Ångra + Ångra + &Undo - &Ångra + &Ångra + + + + Ctrl+Z + + Redo - Gör om + Gör om + &Redo - Gör &om + Gör &om + + + + Ctrl+Y + + Cut - Klipp ut + Klipp ut + &Cut - Klipp &ut + Klipp &ut + + + + Ctrl+X + + Copy - Kopiera + Kopiera + C&opy - &Öppna + &Öppna + + + + Ctrl+C + + Paste - Klistra in + Klistra in + &Paste - K&listra in + K&listra in + + Ctrl+V + + + + Find - Sök + Sök + &Find... - &Sök... + &Sök... + + + + Ctrl+F + + Contents - Innehåll + Innehåll + &Contents... - &Innehåll... + &Innehåll... + + + + &Index... + + + + + Index + + About - Om + Om + &About... - &Om... + &Om... RhythmGenerator + + Form3 + + + + Instrument Settings: - Instrumentinställningar: + Instrumentinställningar: + Instrument - Instrument + Instrument + + Hi-Hat + + + + add - lägg till + lägg till + delete - ta bort + ta bort + + + + steps/count + + count/bar - slag/takt + slag/takt + # bars - # takt + # takt + Group Settings: - Gruppinställningar: + Gruppinställningar: + Group - Grupp + Grupp + Group 1 - Grupp 1 + Grupp 1 + Group 2 - Grupp 2 + Grupp 2 + Group 3 - Grupp 3 + Grupp 3 + Group 4 - Grupp 4 + Grupp 4 + Group 5 - Grupp 5 + Grupp 5 + + + + contrib + + listen - lyssna + lyssna + Randomize - Slumpa + Slumpa + Rhythm Style: - Rytmstil: + Rytmstil: + Clear - Rensa + Rensa + Open... - Öppna... + Öppna... + Save - Spara + Spara + Save as... - Spara som... + Spara som... + Generate - Generera + Generera + Close - Stäng + Stäng @@ -9336,46 +10914,57 @@ i MusEs lista över definierade controllers RouteDialogBase + MusE: Routing + Add Route Lägg till rutt + Source: Källa: + Destination: + Connect 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 @@ -9383,65 +10972,56 @@ i MusEs lista över definierade controllers 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 @@ -9591,14 +11171,17 @@ i MusEs lista över definierade controllers ScrollScale + next page nästa sida + previous page förra sidan + current page number nuvarande sidnummer @@ -9606,18 +11189,22 @@ i MusEs lista över definierade controllers ShortcutCaptureDialog + Ok + Cancel Avbryt + Shortcut conflicts with Kortkommando konfliktar med + Undefined Odefinierad @@ -9625,30 +11212,38 @@ i MusEs lista över definierade controllers ShortcutCaptureDialogBase + Enter shortcut sequence Ange kortkommandosekvens + Press keys to enter shortcut sequence! Tryck på tangenter för att ange kortkommandosekvens: + Old shortcut: Gammalt kortkommando + + Undefined Odefinierad + New shortcut: Nytt kortkommando + OK + Cancel Avbryt @@ -9656,42 +11251,52 @@ i MusEs lista över definierade controllers ShortcutConfigBase + Configure Keyboard Shortcuts Konfigurera tangentbordskortkommando + Shortcut Category Kortkommandokategori + Description Beskrivning + Shortcut Kortkommando + &Clear &Rensa + Alt+C Alt+R + &Define &Definiera + Alt+D + &Apply &Verkställ + Alt+A Alt+L @@ -9699,6 +11304,7 @@ i MusEs lista över definierade controllers SigScale + signature scale signaturskala @@ -9706,6 +11312,7 @@ i MusEs lista över definierade controllers SimpleDrumsGuiBase + DrumSynth 0.1 @@ -9713,25 +11320,25 @@ i MusEs lista över definierade controllers SimpleSynthGui + &Load setup &Ladda setup + &Save setup &Spara setup - - Load sample dialog - - 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: @@ -9750,55 +11357,71 @@ click on the Restart button. + previous event + next event + + set event + + add event + + erase event + erase range + clear automation + Clear all controller events? + &Ok + &Cancel &Avbryt + MusE - external script failed - MusE was unable to launch the script - + + MusE was unable to launch the script, error message: + + Automation: @@ -9806,22 +11429,32 @@ click on the Restart button. SongInfo + Song Information + + Show on song load + + + + &Cancel &Avbryt + Alt+C + &Ok + Alt+O @@ -9840,54 +11473,68 @@ click on the Restart button. SynthConfigBase + MusE: Synth Configuration MusE: Syntinställningar + Soft Synthesizer Mjukvarusynt + File Arkiv + Instances Instanser + + Name Namn + list of available software synthesizers lista med tillgängliga mjukvarusyntar + Add Instance Lägg till instans + Remove Instance Ta bort instans + Midi Port Midiport + Midi connections Midikopplingar + Inst + Version + Description Beskrivning @@ -9896,33 +11543,40 @@ click on the Restart button. TList Show Gui - Visa 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 @@ -9954,50 +11608,117 @@ ljudfilerna skall hamna. 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? + + no clef + + + + + Treble + + + + + Bass + + + + + Grand + + + + 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 + + + + + show native gui + + + + + Treble clef + + + + + Bass clef + + + + + Grand Staff + + + + + Viewable automation + + + + 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? + <none> @@ -10005,6 +11726,7 @@ ljudfilerna skall hamna. TempoSig + Tempo/Sig @@ -10012,49 +11734,54 @@ ljudfilerna skall hamna. Toolbar1 + Solo + Cursor Markör + Snap Fäst vid Quantize - Kvantisera + Kvantisera To - Till + Till All Events - Alla Händelser + Alla Händelser Looped Ev. - Loopade Händelser. + Loopade Händelser. Selected Ev. - Valda Händelser. + Valda Händelser. Looped+Sel. - Loopade och Valda. + Loopade och Valda. TrackComment + MusE: Track Comment MusE: Spårkommentar + Track Comment: Spårkommentar: @@ -10062,122 +11789,156 @@ ljudfilerna skall hamna. Transport + Overdub + + Replace Ersätt + Rec Mode Recläge + Normal + Mix + Cycle Rec + punchin + loop + punchout + + Punch In + + Loop + + Punch Out + Left Mark Vänster Markering + Right Mark Höger Markering + rewind to start flytta tillbaka till början + rewind flytta tillbaka + forward frammåt + stop stopp + play spela + record spela in + AC + quantize during record kvantisera under inspelning + Click + metronom click on/off metronomklick av/på + Sync Synk + external sync on/off externsynk. av/på + Master Master + use master track använder masterspår + Jack + Jack transport sync on/off @@ -10186,52 +11947,51 @@ ljudfilerna skall hamna. TransposeDialogBase MusE: Midi Transpose - MusE: Miditransponering + MusE: Miditransponering Value - Värde + Värde halftones - halvtoner + halvtoner Time - Tid + Tid all - alla + alla between markers - mellan markeringar + mellan markeringar Parts - Parter + Parter all in selected tracks - alla i valda spår - - - OK - + alla i valda spår Cancel - Avbryt + Avbryt VAMGui + + MusE: Save VAM Presets MusE: Spara VAM presets + MusE: Load VAM Presets @@ -10239,134 +11999,190 @@ ljudfilerna skall hamna. VAMGuiBase + Virtual Analogue for MusE Virtual Analogue för MusE + + + Waveform Vågform + + + Sine Sinus + + + Pulse Puls + + + Saw Sågtand + + + Triangle Triangel + Filter Filter + Invert Invertera + Presets Preset + load preset list öppna presetlista + save preset list spara presetlista + save preset list to a new file spara presetlista till ny fil + delete preset ta bort preset + + Pitch Tonhöjd + On + LFO + Freq + EnvMod + + + Attack + + + Decay + + + Sustain + + + Release + Cutoff + Resonance + KeyTrack + Set + DCO 1 + + Detune + + PWM + + FM + + PW + DCO 2 + VAM 1.0beta3 Virtual Analog for MusE Released under GPL. @@ -10383,58 +12199,51 @@ Robert Jonsson VelocityBase MusE: Modify Velocity - MusE: Modifiera Velocity + MusE: Modifiera Velocity 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 + Valda & Loopade Values - Värden + Värden Rate: - Hastighet: + Hastighet: Offset: - Offset: - - - % - - - - OK - + Offset: Cancel - Avbryt + Avbryt WTScale + bar scale - takt-skala + takt-skala @@ -10452,97 +12261,135 @@ Robert Jonsson Normalisera + Solo + Cursor Markör + &Edit &Redigera + Func&tions Funk&tioner + 200% + 150% + 75% + 50% + 25% + Other Andra + &Gain + + &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 + + WaveEdit tools + + + + Select Välj + Wave edit tools + transport - - Pianoroll tools - - WaveTrackInfoBase @@ -10574,10 +12421,12 @@ Robert Jonsson 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 @@ -10588,10 +12437,12 @@ 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. @@ -10609,230 +12460,288 @@ Saknat data tystas Rumstorlek + Damping Dämpning + FreeVerb + Room Size Rumsstorlek + Wet Level + Tap-Reverberator + Decay [ms] + + 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 -- cgit v1.2.3 From c05ce86388943e66db1aa39ace54f040000e49ac Mon Sep 17 00:00:00 2001 From: Robert Jonsson Date: Sat, 28 May 2011 11:40:31 +0000 Subject: fixed track header --- muse2/ChangeLog | 3 ++ muse2/muse/arranger/tlist.cpp | 4 ++- muse2/muse/widgets/header.cpp | 56 +++++++++++++++++++++++------------- muse2/muse/widgets/visibletracks.cpp | 2 +- 4 files changed, 43 insertions(+), 22 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 57147fc6..92108489 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,6 @@ +28.05.2011: + - fixed dragging and resizing of track header, also changed default index of new + sections, they should appear last now (rj) 27.05.2011: - fixed bug in scoreeditor: invalid Part*s are now not used any more (flo93) - applied some hunks of the patch sent in by WillyFoobar (flo93) diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index 9e4db5ba..bd58ad88 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -231,13 +231,15 @@ void TList::paint(const QRect& r) switch (section) { case COL_RECORD: - if (track->canRecord()) { + if (track->canRecord() && !header->isSectionHidden(COL_RECORD)) { drawCenteredPixmap(p, track->recordFlag() ? record_on_Icon : record_off_Icon, r); } break; case COL_CLASS: { + if (header->isSectionHidden(COL_CLASS)) + break; const QPixmap* pm = 0; switch(type) { case Track::MIDI: diff --git a/muse2/muse/widgets/header.cpp b/muse2/muse/widgets/header.cpp index 61ebcc74..c12c8eaf 100644 --- a/muse2/muse/widgets/header.cpp +++ b/muse2/muse/widgets/header.cpp @@ -29,21 +29,34 @@ void Header::readStatus(Xml& xml) return; case Xml::Text: { - //QStringList l = QStringList::split(QString(" "), tag); - 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); - setMovable(true); - moveSection(section, index); - if (isHidden) - hideSection(logialIdx); - else - showSection(logialIdx); - --index; - } + 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); + 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); + } + } } break; case Xml::TagStart: @@ -66,10 +79,10 @@ void Header::writeStatus(int level, Xml& xml) const { //xml.nput(level, "<%s> ", name()); xml.nput(level, "<%s> ", Xml::xmlString(objectName()).toLatin1().constData()); - int n = count() - 1; + int n = count(); for (int i = n; i >= 0; --i) { if (isSectionHidden(logicalIndex(i))) - xml.nput("%d ", -logicalIndex(i)); // hidden is stored as negative value + xml.nput("%d ", -logicalIndex(i)-1); // hidden is stored as negative value starting from -1 else xml.nput("%d ", logicalIndex(i)); } @@ -88,7 +101,7 @@ Header::Header(QWidget* parent, const char* name) itemModel = new QStandardItemModel; setModel(itemModel); setDefaultSectionSize(30); -// setStretchLastSection(true); + setStretchLastSection(true); } @@ -134,7 +147,7 @@ void Header::mousePressEvent ( QMouseEvent * e ) p->setTitle(tr("Track Info Columns")); QAction* act = 0; - for(int i=1; i < count(); i++) { + for(int i=0; i < count(); i++) { act = p->addAction(itemModel->horizontalHeaderItem(logicalIndex(i))->text() + "\t - "+ itemModel->horizontalHeaderItem(logicalIndex(i))->toolTip()); @@ -147,8 +160,11 @@ void Header::mousePressEvent ( QMouseEvent * e ) p->exec(QCursor::pos()); delete p; - + return; } + + QHeaderView::mousePressEvent(e); + } void Header::changeColumns(QAction *a) { diff --git a/muse2/muse/widgets/visibletracks.cpp b/muse2/muse/widgets/visibletracks.cpp index e261c274..f6acf206 100644 --- a/muse2/muse/widgets/visibletracks.cpp +++ b/muse2/muse/widgets/visibletracks.cpp @@ -87,7 +87,7 @@ void VisibleTracks::updateVisibleTracksButtons() void VisibleTracks::visibilityChanged(QAction* action) { - printf("update visibility\n"); +// printf("update visibility\n"); switch (((Action*)action)->id()) { case 0: WaveTrack::setVisible(action->isChecked()); -- cgit v1.2.3 From 55a6fa75d70dbcd38e4b434420c970475448d1a7 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Sat, 28 May 2011 12:08:21 +0000 Subject: fixed buggy bugfix in score editor --- muse2/ChangeLog | 1 + muse2/muse/helper.cpp | 11 +++-------- muse2/muse/helper.h | 3 +-- muse2/muse/midiedit/scoreedit.cpp | 10 ++++++---- muse2/muse/midiedit/scoreedit.h | 2 +- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 92108489..aac27cc3 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,6 +1,7 @@ 28.05.2011: - fixed dragging and resizing of track header, also changed default index of new sections, they should appear last now (rj) + - fixed the buggy bugfix of the "invalid Part*s" bug (flo93) 27.05.2011: - fixed bug in scoreeditor: invalid Part*s are now not used any more (flo93) - applied some hunks of the patch sent in by WillyFoobar (flo93) diff --git a/muse2/muse/helper.cpp b/muse2/muse/helper.cpp index d4a237ea..be45e048 100644 --- a/muse2/muse/helper.cpp +++ b/muse2/muse/helper.cpp @@ -43,12 +43,7 @@ QString pitch2string(int v) -int partToIndex(Part* p) -{ - return p->track()->parts()->index(p); -} - -Part* partFromIndex(int index) +Part* partFromSerialNumber(int serial) { TrackList* tl = song->tracks(); for (iTrack it = tl->begin(); it != tl->end(); ++it) @@ -56,10 +51,10 @@ Part* partFromIndex(int index) PartList* pl = (*it)->parts(); iPart ip; for (ip = pl->begin(); ip != pl->end(); ++ip) - if (ip->second->sn() == index) + if (ip->second->sn() == serial) return ip->second; } - printf("ERROR: partFromIndex(%i) wasn't able to find an appropriate part!\n",index); + printf("ERROR: partFromSerialNumber(%i) wasn't able to find an appropriate part!\n",serial); return NULL; } diff --git a/muse2/muse/helper.h b/muse2/muse/helper.h index d88dcb94..109ecbee 100644 --- a/muse2/muse/helper.h +++ b/muse2/muse/helper.h @@ -14,8 +14,7 @@ class Part; extern QString pitch2string(int v); -int partToIndex(Part* p); -Part* partFromIndex(int index); +Part* partFromSerialNumber(int serial); #endif diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index b000dc5f..c2e901ad 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4328,7 +4328,7 @@ void ScoreCanvas::midi_note(int pitch, int velo) void ScoreCanvas::update_parts() { if (selected_part!=NULL) //if it's null, let it be null - selected_part=partFromIndex(selected_part_index); + selected_part=partFromSerialNumber(selected_part_index); for (list::iterator it=staves.begin(); it!=staves.end(); it++) it->update_parts(); @@ -4339,7 +4339,7 @@ void staff_t::update_parts() parts.clear(); for (set::iterator it=part_indices.begin(); it!=part_indices.end(); it++) - parts.insert(partFromIndex(*it)); + parts.insert(partFromSerialNumber(*it)); } void staff_t::update_part_indices() @@ -4347,7 +4347,7 @@ void staff_t::update_part_indices() part_indices.clear(); for (set::iterator it=parts.begin(); it!=parts.end(); it++) - part_indices.insert(partToIndex(*it)); + part_indices.insert((*it)->sn()); } //the following assertions are made: @@ -4375,10 +4375,12 @@ void staff_t::update_part_indices() * between, for example, when a cis is tied to a des * * CURRENT TODO + * o investigate with valgrind + * ! o paste to different tick !! + * o allow batch-movements in score editor * o controller view in score editor * o deal with expanding parts * o in main win: make "Ch" column editable with a line edit - * o paste to different tick * o fix sigedit boxes * o mid-click in pianoroll: change to "delete", or initiate drag and drop between windows? * diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index 0e61f066..3fd321b9 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -781,7 +781,7 @@ class ScoreCanvas : public View void set_last_len(int l) {last_len=l;} Part* get_selected_part() {return selected_part;} - void set_selected_part(Part* p) {selected_part=p; if (selected_part) selected_part_index=partToIndex(selected_part);} + void set_selected_part(Part* p) {selected_part=p; if (selected_part) selected_part_index=selected_part->sn();} set get_all_parts(); -- cgit v1.2.3 From 25a43d58dead31caf482fc8ada4f231d2f1269d9 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Sun, 29 May 2011 12:43:17 +0000 Subject: - moved cut,copy'n'paste to functions.cpp, removed unneccessary duplication - changed behaviour of paste: now the pasted, not the original notes are selected --- muse2/ChangeLog | 3 + muse2/muse/functions.cpp | 157 ++++++++++++++++++++++++++ muse2/muse/functions.h | 8 ++ muse2/muse/midiedit/dcanvas.cpp | 230 +------------------------------------- muse2/muse/midiedit/dcanvas.h | 2 - muse2/muse/midiedit/drumedit.cpp | 9 ++ muse2/muse/midiedit/ecanvas.cpp | 135 +--------------------- muse2/muse/midiedit/ecanvas.h | 3 - muse2/muse/midiedit/pianoroll.cpp | 9 ++ muse2/muse/midiedit/prcanvas.cpp | 226 +------------------------------------ muse2/muse/midiedit/prcanvas.h | 2 - muse2/muse/midiedit/scoreedit.cpp | 7 +- 12 files changed, 197 insertions(+), 594 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index aac27cc3..9f7d2e07 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,6 @@ +29.05.2011: + - moved cut,copy'n'paste to functions.cpp, removed unneccessary duplication (flo93) + - changed behaviour of paste: now the pasted, not the original notes are selected (flo93) 28.05.2011: - fixed dragging and resizing of track header, also changed default index of new sections, they should appear last now (rj) diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index 5677bcfd..94b7a52d 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -14,8 +14,18 @@ #include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include + using namespace std; @@ -604,6 +614,153 @@ void legato(const set& parts, int range, int min_len, bool dont_shorten) +void copy_notes(const set& parts, int range) +{ + QMimeData* drag = selected_events_to_mime(parts,range); + + if (drag) + QApplication::clipboard()->setMimeData(drag, QClipboard::Clipboard); +} + +void paste_notes(Part* dest_part) +{ + QString tmp="x-muse-eventlist"; // QClipboard::text() expects a QString&, not a QString :( + QString s = QApplication::clipboard()->text(tmp, QClipboard::Clipboard); // TODO CHECK Tim. + paste_at(dest_part, s, song->cpos()); +} + +QMimeData* selected_events_to_mime(const set& parts, int range) +{ + map events=get_events(parts,range); + + //--------------------------------------------------- + // generate event list from selected events + //--------------------------------------------------- + + EventList el; + unsigned startTick = MAXINT; //will be the tick of the first event or MAXINT if no events are there + + for (map::iterator it=events.begin(); it!=events.end(); it++) + { + Event& e = *it->first; + + if (e.tick() < startTick) + startTick = e.tick(); + + el.add(e); + } + + //--------------------------------------------------- + // write events as XML into tmp file + //--------------------------------------------------- + + FILE* tmp = tmpfile(); + if (tmp == 0) + { + fprintf(stderr, "EventCanvas::getTextDrag() fopen failed: %s\n", strerror(errno)); + return 0; + } + + Xml xml(tmp); + int level = 0; + + xml.tag(level++, "eventlist"); + for (ciEvent e = el.begin(); e != el.end(); ++e) + e->second.write(level, xml, -startTick); + xml.etag(--level, "eventlist"); + + //--------------------------------------------------- + // read tmp file into drag Object + //--------------------------------------------------- + + fflush(tmp); + struct stat f_stat; + if (fstat(fileno(tmp), &f_stat) == -1) + { + fprintf(stderr, "PianoCanvas::copy() fstat failed:<%s>\n", + strerror(errno)); + fclose(tmp); + return 0; + } + int n = f_stat.st_size; + char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE, + MAP_PRIVATE, fileno(tmp), 0); + fbuf[n] = 0; + + QByteArray data(fbuf); + QMimeData* md = new QMimeData(); + + md->setData("text/x-muse-eventlist", data); + + munmap(fbuf, n); + fclose(tmp); + + return md; +} + +void paste_at(Part* dest_part, const QString& pt, int pos) +{ + Xml xml(pt.toLatin1().constData()); + for (;;) + { + Xml::Token token = xml.parse(); + const QString& tag = xml.s1(); + switch (token) + { + case Xml::Error: + case Xml::End: + return; + + case Xml::TagStart: + if (tag == "eventlist") + { + song->startUndo(); + EventList el; + el.read(xml, "eventlist", true); + int modified = SC_EVENT_INSERTED; + for (iEvent i = el.begin(); i != el.end(); ++i) + { + Event e = i->second; + int tick = e.tick() + pos - dest_part->tick(); + if (tick<0) + { + printf("ERROR: trying to add event before current part!\n"); + song->endUndo(SC_EVENT_INSERTED); + return; + } + + e.setTick(tick); + e.setSelected(true); + int diff = e.endTick()-dest_part->lenTick(); + if (diff > 0) // too short part? extend it + { + Part* newPart = dest_part->clone(); + newPart->setLenTick(newPart->lenTick()+diff); + // Indicate no undo, and do port controller values but not clone parts. + audio->msgChangePart(dest_part, newPart, false, true, false); + modified=modified|SC_PART_MODIFIED; + dest_part = newPart; // reassign TODO FINDME does this work, or has dest_part to be a nonconst reference? + } + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgAddEvent(e, dest_part, false, false, false); + } + song->endUndo(modified); + return; + } + else + xml.unknown("pasteAt"); + break; + + case Xml::Attribut: + case Xml::TagEnd: + default: + break; + } + } +} + + + void read_function_dialog_config(Xml& xml) { if (erase_dialog==NULL) diff --git a/muse2/muse/functions.h b/muse2/muse/functions.h index 40e5f0e0..b08c2c39 100644 --- a/muse2/muse/functions.h +++ b/muse2/muse/functions.h @@ -22,6 +22,8 @@ #include #include "part.h" +class QString; +class QMimeData; extern GateTime* gatetime_dialog; extern Velocity* velocity_dialog; @@ -68,6 +70,12 @@ bool delete_overlaps(const std::set& parts); bool legato(const std::set& parts); +//functions for copy'n'paste +void copy_notes(const std::set& parts, int range); +void paste_notes(Part* dest_part); +QMimeData* selected_events_to_mime(const std::set& parts, int range); +void paste_at(Part* dest_part, const QString& pt, int pos); + //functions for reading and writing default values class Xml; diff --git a/muse2/muse/midiedit/dcanvas.cpp b/muse2/muse/midiedit/dcanvas.cpp index 4f904be1..89cb1e4c 100644 --- a/muse2/muse/midiedit/dcanvas.cpp +++ b/muse2/muse/midiedit/dcanvas.cpp @@ -34,6 +34,7 @@ #include "audio.h" #include "shortcuts.h" #include "icons.h" +#include "functions.h" #define CARET 10 #define CARET2 5 @@ -652,27 +653,7 @@ int DrumCanvas::pitch2y(int pitch) const void DrumCanvas::cmd(int cmd) { - switch(cmd) { - case CMD_CUT: - copy(); - song->startUndo(); - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!i->second->isSelected()) - continue; - DEvent* e = (DEvent*)(i->second); - Event event = e->event(); - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgDeleteEvent(event, e->part(), false); - audio->msgDeleteEvent(event, e->part(), false, false, false); - } - song->endUndo(SC_EVENT_REMOVED); - break; - case CMD_COPY: - copy(); - break; - case CMD_PASTE: - paste(); - break; + switch (cmd) { case CMD_SELECT_ALL: // select all for (iCItem k = items.begin(); k != items.end(); ++k) { if (!k->second->isSelected()) @@ -814,158 +795,7 @@ void DrumCanvas::cmd(int cmd) redraw(); } -/* -//--------------------------------------------------------- -// getTextDrag -//--------------------------------------------------------- - -Q3TextDrag* DrumCanvas::getTextDrag(QWidget* parent) - { - //--------------------------------------------------- - // generate event list from selected events - //--------------------------------------------------- - - EventList el; - unsigned startTick = MAXINT; - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!i->second->isSelected()) - continue; - DEvent* ne = (DEvent*)(i->second); - Event e = ne->event(); - if (startTick == MAXINT) - startTick = e.tick(); - el.add(e); - } - - //--------------------------------------------------- - // write events as XML into tmp file - //--------------------------------------------------- - - FILE* tmp = tmpfile(); - if (tmp == 0) { - fprintf(stderr, "EventCanvas::copy() fopen failed: %s\n", - strerror(errno)); - return 0; - } - Xml xml(tmp); - - int level = 0; - for (ciEvent e = el.begin(); e != el.end(); ++e) - e->second.write(level, xml, -startTick); - - //--------------------------------------------------- - // read tmp file into QTextDrag Object - //--------------------------------------------------- - - fflush(tmp); - struct stat f_stat; - if (fstat(fileno(tmp), &f_stat) == -1) { - fprintf(stderr, "EventCanvas::copy() fstat failes:<%s>\n", - strerror(errno)); - fclose(tmp); - return 0; - } - int n = f_stat.st_size; - char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE, - MAP_PRIVATE, fileno(tmp), 0); - fbuf[n] = 0; - Q3TextDrag* drag = new Q3TextDrag(QString(fbuf), parent); - drag->setSubtype("eventlist"); - munmap(fbuf, n); - fclose(tmp); - return drag; - } -*/ - -//--------------------------------------------------------- -// copy -// cut copy paste -//--------------------------------------------------------- - -void DrumCanvas::copy() - { - QMimeData* md = getTextDrag(); - - if (md) - QApplication::clipboard()->setMimeData(md, QClipboard::Clipboard); - } - -/* -//--------------------------------------------------------- -// paste -//--------------------------------------------------------- - -int DrumCanvas::pasteAt(const QString& pt, int pos) - { - QByteArray ba = pt.toLatin1(); - const char* p = ba.constData(); - Xml xml(p); - - // Added by T356. - int modified = SC_EVENT_INSERTED; - - song->startUndo(); - for (;;) { - Xml::Token token = xml.parse(); - QString tag = xml.s1(); - switch (token) { - case Xml::Error: - case Xml::End: - song->endUndo(modified); - return pos; - case Xml::TagStart: - if (tag == "event") { - Event e(Note); - e.read(xml); - - // Added by T356. - int tick = e.tick() + pos - curPart->tick(); - if (tick<0) { - printf("DrumCanvas::pasteAt ERROR: trying to add event before current part!\n"); - song->endUndo(SC_EVENT_INSERTED); - //delete el; - return pos; - } - e.setTick(tick); - int diff = e.endTick() - curPart->lenTick(); - if (diff > 0) {// too short part? extend it - Part* newPart = curPart->clone(); - newPart->setLenTick(newPart->lenTick()+diff); - // Indicate no undo, and do port controller values but not clone parts. - audio->msgChangePart(curPart, newPart, false, true, false); - - modified=modified|SC_PART_MODIFIED; - curPart = newPart; // reassign - } - - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgAddEvent(e, curPart, false, false, false); - } - else - xml.unknown("DCanvas::pasteAt"); - break; - case Xml::TagEnd: - default: - break; - } - } - } -*/ - -//--------------------------------------------------------- -// paste -// paste events -//--------------------------------------------------------- -void DrumCanvas::paste() - { - QString stype("x-muse-eventlist"); - - //QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); - QString s = QApplication::clipboard()->text(stype, QClipboard::Clipboard); // TODO CHECK Tim. - - pasteAt(s, song->cpos()); - } //--------------------------------------------------------- // startDrag @@ -973,7 +803,7 @@ void DrumCanvas::paste() void DrumCanvas::startDrag(CItem* /* item*/, bool copymode) { - QMimeData* md = getTextDrag(); + QMimeData* md = selected_events_to_mime(partlist_to_set(editor->parts()), 1); if (md) { // QApplication::clipboard()->setData(drag, QClipboard::Clipboard); // This line NOT enabled in muse-1 @@ -1018,41 +848,6 @@ void DrumCanvas::dragLeaveEvent(QDragLeaveEvent*) { } -/* -//--------------------------------------------------------- -// dropEvent -//--------------------------------------------------------- - -void DrumCanvas::viewDropEvent(QDropEvent* event) - { - QString text; - if (event->source() == this) { - printf("local DROP\n"); - //event->acceptProposedAction(); - //event->ignore(); // TODO CHECK Tim. - return; - } - //if (event->mimeData()->hasText()) { - if (event->mimeData()->hasFormat("text/x-muse-eventlist")) { - - //text = event->mimeData()->text(); - text = QString(event->mimeData()->data("text/x-muse-eventlist")); - -// printf("drop <%s>\n", text.ascii()); - int x = editor->rasterVal(event->pos().x()); - if (x < 0) - x = 0; - pasteAt(text, x); - //event->accept(); // TODO - } - else { - printf("cannot decode drop\n"); - //event->acceptProposedAction(); - //event->ignore(); // TODO CHECK Tim. - } - } -*/ - //--------------------------------------------------------- // keyPressed - called from DList //--------------------------------------------------------- @@ -1108,25 +903,6 @@ void DrumCanvas::mapChanged(int spitch, int dpitch) typedef std::vector< std::pair >::iterator idel_ev; typedef std::vector< std::pair >::iterator iadd_ev; - /* - class delete_events : public std::vector< Part*, Event* > - { - public: - idel_ev find(Part* p, Event* e) - { - - }; - }; - class add_events : public std::vector< Part*, Event > - { - public: - iadd_ev find(Part* p, Event& e) - { - - }; - }; - */ - MidiTrackList* tracks = song->midis(); for (ciMidiTrack t = tracks->begin(); t != tracks->end(); t++) { MidiTrack* curTrack = *t; diff --git a/muse2/muse/midiedit/dcanvas.h b/muse2/muse/midiedit/dcanvas.h index 5a1fefeb..364d9268 100644 --- a/muse2/muse/midiedit/dcanvas.h +++ b/muse2/muse/midiedit/dcanvas.h @@ -66,8 +66,6 @@ class DrumCanvas : public EventCanvas { int y2pitch(int y) const; int pitch2y(int pitch) const; - void copy(); - void paste(); void startDrag(CItem*, bool copymode); void dragEnterEvent(QDragEnterEvent* event); void dragMoveEvent(QDragMoveEvent*); diff --git a/muse2/muse/midiedit/drumedit.cpp b/muse2/muse/midiedit/drumedit.cpp index 4d2fae93..1e678432 100644 --- a/muse2/muse/midiedit/drumedit.cpp +++ b/muse2/muse/midiedit/drumedit.cpp @@ -903,6 +903,15 @@ void DrumEdit::reset() void DrumEdit::cmd(int cmd) { switch(cmd) { + case DrumCanvas::CMD_CUT: + copy_notes(partlist_to_set(parts()), 1); + erase_notes(partlist_to_set(parts()), 1); + break; + case DrumCanvas::CMD_COPY: copy_notes(partlist_to_set(parts()), 1); break; + case DrumCanvas::CMD_PASTE: + ((DrumCanvas*)canvas)->cmd(DrumCanvas::CMD_SELECT_NONE); + paste_notes(canvas->part()); + break; case DrumCanvas::CMD_LOAD: load(); break; case DrumCanvas::CMD_SAVE: save(); break; case DrumCanvas::CMD_RESET: reset(); break; diff --git a/muse2/muse/midiedit/ecanvas.cpp b/muse2/muse/midiedit/ecanvas.cpp index 7a421411..d41a383c 100644 --- a/muse2/muse/midiedit/ecanvas.cpp +++ b/muse2/muse/midiedit/ecanvas.cpp @@ -25,6 +25,7 @@ #include "event.h" #include "shortcuts.h" #include "audio.h" +#include "functions.h" //--------------------------------------------------------- // EventCanvas @@ -383,138 +384,6 @@ void EventCanvas::keyPress(QKeyEvent* event) event->ignore(); } -//--------------------------------------------------------- -// getTextDrag -//--------------------------------------------------------- - -//QDrag* EventCanvas::getTextDrag(QWidget* parent) -QMimeData* EventCanvas::getTextDrag() - { - //--------------------------------------------------- - // generate event list from selected events - //--------------------------------------------------- - - EventList el; - unsigned startTick = MAXINT; - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!i->second->isSelected()) - continue; - ///NEvent* ne = (NEvent*)(i->second); - CItem* ne = i->second; - Event e = ne->event(); - if (startTick == MAXINT) - startTick = e.tick(); - el.add(e); - } - - //--------------------------------------------------- - // write events as XML into tmp file - //--------------------------------------------------- - - FILE* tmp = tmpfile(); - if (tmp == 0) { - fprintf(stderr, "EventCanvas::getTextDrag() fopen failed: %s\n", - strerror(errno)); - return 0; - } - Xml xml(tmp); - - int level = 0; - xml.tag(level++, "eventlist"); - for (ciEvent e = el.begin(); e != el.end(); ++e) - e->second.write(level, xml, -startTick); - xml.etag(--level, "eventlist"); - - //--------------------------------------------------- - // read tmp file into drag Object - //--------------------------------------------------- - - fflush(tmp); - struct stat f_stat; - if (fstat(fileno(tmp), &f_stat) == -1) { - fprintf(stderr, "PianoCanvas::copy() fstat failes:<%s>\n", - strerror(errno)); - fclose(tmp); - return 0; - } - int n = f_stat.st_size; - char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE, - MAP_PRIVATE, fileno(tmp), 0); - fbuf[n] = 0; - - QByteArray data(fbuf); - QMimeData* md = new QMimeData(); - //QDrag* drag = new QDrag(parent); - - md->setData("text/x-muse-eventlist", data); - //drag->setMimeData(md); - - munmap(fbuf, n); - fclose(tmp); - - //return drag; - return md; - } - -//--------------------------------------------------------- -// pasteAt -//--------------------------------------------------------- - -void EventCanvas::pasteAt(const QString& pt, int pos) - { - QByteArray ba = pt.toLatin1(); - const char* p = ba.constData(); - Xml xml(p); - for (;;) { - Xml::Token token = xml.parse(); - const QString& tag = xml.s1(); - switch (token) { - case Xml::Error: - case Xml::End: - return; - case Xml::TagStart: - if (tag == "eventlist") { - song->startUndo(); - EventList* el = new EventList(); - el->read(xml, "eventlist", true); - int modified = SC_EVENT_INSERTED; - for (iEvent i = el->begin(); i != el->end(); ++i) { - Event e = i->second; - int tick = e.tick() + pos - curPart->tick(); - if (tick<0) { - printf("ERROR: trying to add event before current part!\n"); - song->endUndo(SC_EVENT_INSERTED); - delete el; - return; - } - - e.setTick(tick); - int diff = e.endTick()-curPart->lenTick(); - if (diff > 0) {// too short part? extend it - Part* newPart = curPart->clone(); - newPart->setLenTick(newPart->lenTick()+diff); - // Indicate no undo, and do port controller values but not clone parts. - audio->msgChangePart(curPart, newPart, false, true, false); - modified=modified|SC_PART_MODIFIED; - curPart = newPart; // reassign - } - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgAddEvent(e, curPart, false, false, false); - } - song->endUndo(modified); - delete el; - return; - } - else - xml.unknown("pasteAt"); - break; - case Xml::Attribut: - case Xml::TagEnd: - default: - break; - } - } - } //--------------------------------------------------------- // dropEvent @@ -535,7 +404,7 @@ void EventCanvas::viewDropEvent(QDropEvent* event) int x = editor->rasterVal(event->pos().x()); if (x < 0) x = 0; - pasteAt(text, x); + paste_at(curPart, text, x); //event->accept(); // TODO } else { diff --git a/muse2/muse/midiedit/ecanvas.h b/muse2/muse/midiedit/ecanvas.h index 86e1c200..0ae970ab 100644 --- a/muse2/muse/midiedit/ecanvas.h +++ b/muse2/muse/midiedit/ecanvas.h @@ -82,9 +82,6 @@ class EventCanvas : public Canvas { void range(int* s, int* e) const { *s = start_tick; *e = end_tick; } void playEvents(bool flag) { _playEvents = flag; } void selectAtTick(unsigned int tick); - //QDrag* getTextDrag(QWidget* parent); - QMimeData* getTextDrag(); - void pasteAt(const QString& pt, int pos); void viewDropEvent(QDropEvent* event); virtual void modifySelected(NoteInfo::ValType, int) {} virtual void keyPress(QKeyEvent*); diff --git a/muse2/muse/midiedit/pianoroll.cpp b/muse2/muse/midiedit/pianoroll.cpp index ab83e85f..b2fe55ee 100644 --- a/muse2/muse/midiedit/pianoroll.cpp +++ b/muse2/muse/midiedit/pianoroll.cpp @@ -605,6 +605,15 @@ void PianoRoll::cmd(int cmd) { switch (cmd) { + case PianoCanvas::CMD_CUT: + copy_notes(partlist_to_set(parts()), 1); + erase_notes(partlist_to_set(parts()), 1); + break; + case PianoCanvas::CMD_COPY: copy_notes(partlist_to_set(parts()), 1); break; + case PianoCanvas::CMD_PASTE: + ((PianoCanvas*)canvas)->cmd(PianoCanvas::CMD_SELECT_NONE); + paste_notes(canvas->part()); + break; case PianoCanvas::CMD_MODIFY_GATE_TIME: modify_notelen(partlist_to_set(parts())); break; case PianoCanvas::CMD_MODIFY_VELOCITY: modify_velocity(partlist_to_set(parts())); break; case PianoCanvas::CMD_CRESCENDO: crescendo(partlist_to_set(parts())); break; diff --git a/muse2/muse/midiedit/prcanvas.cpp b/muse2/muse/midiedit/prcanvas.cpp index 75ad3c06..4e81b2e9 100644 --- a/muse2/muse/midiedit/prcanvas.cpp +++ b/muse2/muse/midiedit/prcanvas.cpp @@ -36,6 +36,7 @@ #include "cmd.h" #include "song.h" #include "audio.h" +#include "functions.h" //--------------------------------------------------------- // NEvent @@ -895,26 +896,6 @@ void PianoCanvas::drawCanvas(QPainter& p, const QRect& rect) void PianoCanvas::cmd(int cmd) { switch (cmd) { - case CMD_CUT: - copy(); - song->startUndo(); - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!(i->second->isSelected())) - continue; - NEvent* e = (NEvent*)(i->second); - Event ev = e->event(); - // Indicate no undo, and do not do port controller values and clone parts. - //audio->msgDeleteEvent(ev, e->part(), false); - audio->msgDeleteEvent(ev, e->part(), false, false, false); - } - song->endUndo(SC_EVENT_REMOVED); - break; - case CMD_COPY: - copy(); - break; - case CMD_PASTE: - paste(); - break; case CMD_SELECT_ALL: // select all for (iCItem k = items.begin(); k != items.end(); ++k) { if (!k->second->isSelected()) @@ -1057,181 +1038,13 @@ void PianoCanvas::midiNote(int pitch, int velo) } -/* -//--------------------------------------------------------- -// getTextDrag -//--------------------------------------------------------- - -Q3TextDrag* PianoCanvas::getTextDrag(QWidget* parent) - { - //--------------------------------------------------- - // generate event list from selected events - //--------------------------------------------------- - - EventList el; - unsigned startTick = MAXINT; - for (iCItem i = items.begin(); i != items.end(); ++i) { - if (!i->second->isSelected()) - continue; - NEvent* ne = (NEvent*)(i->second); - Event e = ne->event(); - if (startTick == MAXINT) - startTick = e.tick(); - el.add(e); - } - - //--------------------------------------------------- - // write events as XML into tmp file - //--------------------------------------------------- - - FILE* tmp = tmpfile(); - if (tmp == 0) { - fprintf(stderr, "PianoCanvas::copy() fopen failed: %s\n", - strerror(errno)); - return 0; - } - Xml xml(tmp); - - int level = 0; - xml.tag(level++, "eventlist"); - for (ciEvent e = el.begin(); e != el.end(); ++e) - e->second.write(level, xml, -startTick); - xml.etag(--level, "eventlist"); - - //--------------------------------------------------- - // read tmp file into QTextDrag Object - //--------------------------------------------------- - - fflush(tmp); - struct stat f_stat; - if (fstat(fileno(tmp), &f_stat) == -1) { - fprintf(stderr, "PianoCanvas::copy() fstat failes:<%s>\n", - strerror(errno)); - fclose(tmp); - return 0; - } - int n = f_stat.st_size; - char* fbuf = (char*)mmap(0, n+1, PROT_READ|PROT_WRITE, - MAP_PRIVATE, fileno(tmp), 0); - fbuf[n] = 0; - Q3TextDrag* drag = new Q3TextDrag(QString(fbuf), parent); - drag->setSubtype("eventlist"); - munmap(fbuf, n); - fclose(tmp); - return drag; - } -*/ - -//--------------------------------------------------------- -// copy -// cut copy paste -//--------------------------------------------------------- - -void PianoCanvas::copy() - { - //QDrag* drag = getTextDrag(); - QMimeData* drag = getTextDrag(); - - if (drag) - QApplication::clipboard()->setMimeData(drag, QClipboard::Clipboard); - } - -/* -//--------------------------------------------------------- -// pasteAt -//--------------------------------------------------------- - -void PianoCanvas::pasteAt(const QString& pt, int pos) - { - QByteArray ba = pt.toLatin1(); - const char* p = ba.constData(); - Xml xml(p); - for (;;) { - Xml::Token token = xml.parse(); - const QString& tag = xml.s1(); - switch (token) { - case Xml::Error: - case Xml::End: - return; - case Xml::TagStart: - if (tag == "eventlist") { - song->startUndo(); - EventList* el = new EventList(); - el->read(xml, "eventlist", true); - int modified = SC_EVENT_INSERTED; - for (iEvent i = el->begin(); i != el->end(); ++i) { - Event e = i->second; - int tick = e.tick() + pos - curPart->tick(); - if (tick<0) { - printf("ERROR: trying to add event before current part!\n"); - song->endUndo(SC_EVENT_INSERTED); - delete el; - return; - } - - e.setTick(tick); - int diff = e.endTick()-curPart->lenTick(); - if (diff > 0) {// too short part? extend it - Part* newPart = curPart->clone(); - newPart->setLenTick(newPart->lenTick()+diff); - // Indicate no undo, and do port controller values but not clone parts. - audio->msgChangePart(curPart, newPart, false, true, false); - modified=modified|SC_PART_MODIFIED; - curPart = newPart; // reassign - } - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgAddEvent(e, curPart, false, false, false); - } - song->endUndo(modified); - delete el; - return; - } - else - xml.unknown("pasteAt"); - break; - case Xml::Attribut: - case Xml::TagEnd: - default: - break; - } - } - } -*/ - -//--------------------------------------------------------- -// paste -// paste events -//--------------------------------------------------------- - -void PianoCanvas::paste() - { -/* - //Q3CString subtype("eventlist"); ddskrjo - QString subtype("eventlist"); - QMimeSource* ms = QApplication::clipboard()->data(QClipboard::Clipboard); - QString pt; - if (!Q3TextDrag::decode(ms, pt, subtype)) { - printf("cannot paste: bad data type\n"); - return; - } - pasteAt(pt, song->cpos()); -*/ - QString stype("x-muse-eventlist"); - - //QString s = QApplication::clipboard()->text(stype, QClipboard::Selection); - QString s = QApplication::clipboard()->text(stype, QClipboard::Clipboard); // TODO CHECK Tim. - - pasteAt(s, song->cpos()); - } - //--------------------------------------------------------- // startDrag //--------------------------------------------------------- void PianoCanvas::startDrag(CItem* /* item*/, bool copymode) { - QMimeData* md = getTextDrag(); - //QDrag* drag = getTextDrag(); + QMimeData* md = selected_events_to_mime(partlist_to_set(editor->parts()), 1); if (md) { // QApplication::clipboard()->setData(drag, QClipboard::Clipboard); // This line NOT enabled in muse-1 @@ -1281,41 +1094,6 @@ void PianoCanvas::dragLeaveEvent(QDragLeaveEvent*) //event->acceptProposedAction(); } -/* -//--------------------------------------------------------- -// dropEvent -//--------------------------------------------------------- - -void PianoCanvas::viewDropEvent(QDropEvent* event) - { - QString text; - if (event->source() == this) { - printf("local DROP\n"); - //event->acceptProposedAction(); - //event->ignore(); // TODO CHECK Tim. - return; - } - ///if (Q3TextDrag::decode(event, text)) { - //if (event->mimeData()->hasText()) { - if (event->mimeData()->hasFormat("text/x-muse-eventlist")) { - - //text = event->mimeData()->text(); - text = QString(event->mimeData()->data("text/x-muse-eventlist")); - - int x = editor->rasterVal(event->pos().x()); - if (x < 0) - x = 0; - pasteAt(text, x); - //event->accept(); // TODO - } - else { - printf("cannot decode drop\n"); - //event->acceptProposedAction(); - //event->ignore(); // TODO CHECK Tim. - } - } -*/ - //--------------------------------------------------------- // itemPressed //--------------------------------------------------------- diff --git a/muse2/muse/midiedit/prcanvas.h b/muse2/muse/midiedit/prcanvas.h index b9da00c6..96b5b4f5 100644 --- a/muse2/muse/midiedit/prcanvas.h +++ b/muse2/muse/midiedit/prcanvas.h @@ -69,8 +69,6 @@ class PianoCanvas : public EventCanvas { int y2pitch(int) const; int pitch2y(int) const; virtual void drawCanvas(QPainter&, const QRect&); - void copy(); - void paste(); virtual void itemPressed(const CItem*); virtual void itemReleased(const CItem*, const QPoint&); virtual void itemMoved(const CItem*, const QPoint&); diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index c2e901ad..e0fe6491 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -4375,12 +4375,13 @@ void staff_t::update_part_indices() * between, for example, when a cis is tied to a des * * CURRENT TODO - * o investigate with valgrind - * ! o paste to different tick !! + * o when pasting, the pasted, not the previously selected should be selected * o allow batch-movements in score editor + * o in main win: make "Ch" column editable with a line edit + * o either remove these "hidden notes", or deal with them in the score editor + * o investigate with valgrind * o controller view in score editor * o deal with expanding parts - * o in main win: make "Ch" column editable with a line edit * o fix sigedit boxes * o mid-click in pianoroll: change to "delete", or initiate drag and drop between windows? * -- cgit v1.2.3 From cd03ccbd8f3a9fb57c665014f62d779c5c3f8418 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 30 May 2011 08:57:30 +0000 Subject: implemented cut,copy'n'paste and "select foo" to the score editor --- muse2/ChangeLog | 3 + muse2/muse/functions.cpp | 65 ++++++++++++++++- muse2/muse/functions.h | 6 ++ muse2/muse/midiedit/scoreedit.cpp | 142 ++++++++++++++++++++++++++++++++++---- muse2/muse/midiedit/scoreedit.h | 32 ++++++++- 5 files changed, 231 insertions(+), 17 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 9f7d2e07..fae1936d 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,6 @@ +30.05.2011: + - implemented cut,copy'n'paste and the "select foo" entries in the score editor (flo93) + - added select_foo() functions to functions.cpp (flo93) 29.05.2011: - moved cut,copy'n'paste to functions.cpp, removed unneccessary duplication (flo93) - changed behaviour of paste: now the pasted, not the original notes are selected (flo93) diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index 94b7a52d..8b17bd8d 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -709,7 +709,7 @@ void paste_at(Part* dest_part, const QString& pt, int pos) { case Xml::Error: case Xml::End: - return; + goto end_of_paste_at; case Xml::TagStart: if (tag == "eventlist") @@ -726,7 +726,7 @@ void paste_at(Part* dest_part, const QString& pt, int pos) { printf("ERROR: trying to add event before current part!\n"); song->endUndo(SC_EVENT_INSERTED); - return; + goto end_of_paste_at; } e.setTick(tick); @@ -745,7 +745,7 @@ void paste_at(Part* dest_part, const QString& pt, int pos) audio->msgAddEvent(e, dest_part, false, false, false); } song->endUndo(modified); - return; + goto end_of_paste_at; } else xml.unknown("pasteAt"); @@ -757,8 +757,67 @@ void paste_at(Part* dest_part, const QString& pt, int pos) break; } } + + end_of_paste_at: + song->update(SC_SELECTION); +} + +void select_all(const std::set& parts) +{ + for (set::iterator part=parts.begin(); part!=parts.end(); part++) + for (iEvent ev_it=(*part)->events()->begin(); ev_it!=(*part)->events()->end(); ev_it++) + { + Event& event=ev_it->second; + event.setSelected(true); + } + song->update(SC_SELECTION); } +void select_none(const std::set& parts) +{ + for (set::iterator part=parts.begin(); part!=parts.end(); part++) + for (iEvent ev_it=(*part)->events()->begin(); ev_it!=(*part)->events()->end(); ev_it++) + { + Event& event=ev_it->second; + event.setSelected(false); + } + song->update(SC_SELECTION); +} + +void select_invert(const std::set& parts) +{ + for (set::iterator part=parts.begin(); part!=parts.end(); part++) + for (iEvent ev_it=(*part)->events()->begin(); ev_it!=(*part)->events()->end(); ev_it++) + { + Event& event=ev_it->second; + event.setSelected(!event.selected()); + } + song->update(SC_SELECTION); +} + +void select_in_loop(const std::set& parts) +{ + select_none(parts); + for (set::iterator part=parts.begin(); part!=parts.end(); part++) + for (iEvent ev_it=(*part)->events()->begin(); ev_it!=(*part)->events()->end(); ev_it++) + { + Event& event=ev_it->second; + event.setSelected((event.tick()>=song->lpos() && event.endTick()<=song->rpos())); + } + song->update(SC_SELECTION); +} + +void select_not_in_loop(const std::set& parts) +{ + select_none(parts); + for (set::iterator part=parts.begin(); part!=parts.end(); part++) + for (iEvent ev_it=(*part)->events()->begin(); ev_it!=(*part)->events()->end(); ev_it++) + { + Event& event=ev_it->second; + event.setSelected(!(event.tick()>=song->lpos() && event.endTick()<=song->rpos())); + } + song->update(SC_SELECTION); +} void read_function_dialog_config(Xml& xml) diff --git a/muse2/muse/functions.h b/muse2/muse/functions.h index b08c2c39..6826a9b7 100644 --- a/muse2/muse/functions.h +++ b/muse2/muse/functions.h @@ -76,6 +76,12 @@ void paste_notes(Part* dest_part); QMimeData* selected_events_to_mime(const std::set& parts, int range); void paste_at(Part* dest_part, const QString& pt, int pos); +//functions for selections +void select_all(const std::set& parts); +void select_none(const std::set& parts); +void select_invert(const std::set& parts); +void select_in_loop(const std::set& parts); +void select_not_in_loop(const std::set& parts); //functions for reading and writing default values class Xml; diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index e0fe6491..7bb4737f 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -55,9 +55,9 @@ using namespace std; #include "cmd.h" #include "sig.h" #include "song.h" +#include "shortcuts.h" //#include "../ctrl/ctrledit.h" -//#include "shortcuts.h" string IntToStr(int i); @@ -340,9 +340,59 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) quant_toolbar->addWidget(px_per_whole_spinbox); px_per_whole_spinbox->setValue(300); + QMenu* edit_menu = menuBar()->addMenu(tr("&Edit")); + + edit_menu->addActions(undoRedo->actions()); + edit_menu->addSeparator(); + + cut_action = edit_menu->addAction(QIcon(*editcutIconSet), tr("C&ut")); + menu_mapper->setMapping(cut_action, CMD_CUT); + connect(cut_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + copy_action = edit_menu->addAction(QIcon(*editcopyIconSet), tr("&Copy")); + menu_mapper->setMapping(copy_action, CMD_COPY); + connect(copy_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + paste_action = edit_menu->addAction(QIcon(*editpasteIconSet), tr("&Paste")); + menu_mapper->setMapping(paste_action, CMD_PASTE); + connect(paste_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + edit_menu->addSeparator(); + + del_action = edit_menu->addAction(tr("Delete &Events")); + menu_mapper->setMapping(del_action, CMD_ERASE); + connect(del_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + edit_menu->addSeparator(); + + QMenu* select_menu = edit_menu->addMenu(QIcon(*selectIcon), tr("&Select")); + + select_all_action = select_menu->addAction(QIcon(*select_allIcon), tr("Select &All")); + menu_mapper->setMapping(select_all_action, CMD_SELECT_ALL); + connect(select_all_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + select_none_action = select_menu->addAction(QIcon(*select_deselect_allIcon), tr("&Deselect All")); + menu_mapper->setMapping(select_none_action, CMD_SELECT_NONE); + connect(select_none_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + select_invert_action = select_menu->addAction(QIcon(*select_invert_selectionIcon), tr("Invert &Selection")); + menu_mapper->setMapping(select_invert_action, CMD_SELECT_INVERT); + connect(select_invert_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + select_menu->addSeparator(); + + select_iloop_action = select_menu->addAction(QIcon(*select_inside_loopIcon), tr("&Inside Loop")); + menu_mapper->setMapping(select_iloop_action, CMD_SELECT_ILOOP); + connect(select_iloop_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + select_oloop_action = select_menu->addAction(QIcon(*select_outside_loopIcon), tr("&Outside Loop")); + menu_mapper->setMapping(select_oloop_action, CMD_SELECT_OLOOP); + connect(select_oloop_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); + + QMenu* settings_menu = menuBar()->addMenu(tr("&Settings")); - QMenu* color_menu = settings_menu->addMenu(tr("Note head &colors")); + color_menu = settings_menu->addMenu(tr("Note head &colors")); color_actions = new QActionGroup(this); color_black_action = color_menu->addAction(tr("&Black"), menu_mapper, SLOT(map())); color_velo_action = color_menu->addAction(tr("&Velocity"), menu_mapper, SLOT(map())); @@ -378,16 +428,16 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) QMenu* functions_menu = menuBar()->addMenu(tr("&Functions")); - QAction* func_quantize_action = functions_menu->addAction(tr("&Quantize"), menu_mapper, SLOT(map())); - QAction* func_notelen_action = functions_menu->addAction(tr("Change note &length"), menu_mapper, SLOT(map())); - QAction* func_velocity_action = functions_menu->addAction(tr("Change note &velocity"), menu_mapper, SLOT(map())); - QAction* func_cresc_action = functions_menu->addAction(tr("Crescendo/Decrescendo"), menu_mapper, SLOT(map())); - QAction* func_transpose_action = functions_menu->addAction(tr("Transpose"), menu_mapper, SLOT(map())); - QAction* func_erase_action = functions_menu->addAction(tr("Erase Events"), menu_mapper, SLOT(map())); - QAction* func_move_action = functions_menu->addAction(tr("Move Notes"), menu_mapper, SLOT(map())); - QAction* func_fixed_len_action = functions_menu->addAction(tr("Set Fixed Length"), menu_mapper, SLOT(map())); - QAction* func_del_overlaps_action = functions_menu->addAction(tr("Delete Overlaps"), menu_mapper, SLOT(map())); - QAction* func_legato_action = functions_menu->addAction(tr("Legato"), menu_mapper, SLOT(map())); + 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())); + func_velocity_action = functions_menu->addAction(tr("Change note &velocity"), menu_mapper, SLOT(map())); + func_cresc_action = functions_menu->addAction(tr("Crescendo/Decrescendo"), menu_mapper, SLOT(map())); + func_transpose_action = functions_menu->addAction(tr("Transpose"), menu_mapper, SLOT(map())); + func_erase_action = functions_menu->addAction(tr("Erase Events"), menu_mapper, SLOT(map())); + func_move_action = functions_menu->addAction(tr("Move Notes"), menu_mapper, SLOT(map())); + func_fixed_len_action = functions_menu->addAction(tr("Set Fixed Length"), menu_mapper, SLOT(map())); + func_del_overlaps_action = functions_menu->addAction(tr("Delete Overlaps"), menu_mapper, SLOT(map())); + func_legato_action = functions_menu->addAction(tr("Legato"), menu_mapper, SLOT(map())); menu_mapper->setMapping(func_quantize_action, CMD_QUANTIZE); menu_mapper->setMapping(func_notelen_action, CMD_NOTELEN); menu_mapper->setMapping(func_velocity_action, CMD_VELOCITY); @@ -398,7 +448,16 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) menu_mapper->setMapping(func_fixed_len_action, CMD_FIXED_LEN); menu_mapper->setMapping(func_del_overlaps_action, CMD_DELETE_OVERLAPS); menu_mapper->setMapping(func_legato_action, CMD_LEGATO); + + init_shortcuts(); + + connect(muse, SIGNAL(configChanged()), SLOT(init_shortcuts())); + QClipboard* cb = QApplication::clipboard(); + connect(cb, SIGNAL(dataChanged()), SLOT(clipboard_changed())); + + clipboard_changed(); + selection_changed(); if (!default_toolbar_state.isEmpty()) restoreState(default_toolbar_state); @@ -417,6 +476,32 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) apply_velo=true; } +void ScoreEdit::init_shortcuts() +{ + cut_action->setShortcut(shortcuts[SHRT_CUT].key); + copy_action->setShortcut(shortcuts[SHRT_COPY].key); + paste_action->setShortcut(shortcuts[SHRT_PASTE].key); + del_action->setShortcut(shortcuts[SHRT_DELETE].key); + + select_all_action->setShortcut(shortcuts[SHRT_SELECT_ALL].key); + select_none_action->setShortcut(shortcuts[SHRT_SELECT_NONE].key); + select_invert_action->setShortcut(shortcuts[SHRT_SELECT_INVERT].key); + select_iloop_action->setShortcut(shortcuts[SHRT_SELECT_ILOOP].key); + select_oloop_action->setShortcut(shortcuts[SHRT_SELECT_OLOOP].key); + + color_menu->menuAction()->setShortcut(shortcuts[SHRT_EVENT_COLOR].key); + + func_quantize_action->setShortcut(shortcuts[SHRT_QUANTIZE].key); + func_notelen_action->setShortcut(shortcuts[SHRT_MODIFY_GATE_TIME].key); + func_velocity_action->setShortcut(shortcuts[SHRT_MODIFY_VELOCITY].key); + func_transpose_action->setShortcut(shortcuts[SHRT_TRANSPOSE].key); + func_erase_action->setShortcut(shortcuts[SHRT_ERASE_EVENT].key); + func_move_action->setShortcut(shortcuts[SHRT_NOTE_SHIFT].key); + func_fixed_len_action->setShortcut(shortcuts[SHRT_FIXED_LEN].key); + func_del_overlaps_action->setShortcut(shortcuts[SHRT_DELETE_OVERLAPS].key); +} + + void ScoreEdit::add_parts(PartList* pl, bool all_in_one) { score_canvas->add_staves(pl, all_in_one); @@ -522,6 +607,9 @@ void ScoreEdit::song_changed(int flags) if (velo_off>=0) velo_off_spinbox->setValue(velo_off); } } + + if (flags & SC_SELECTION) + selection_changed(); } void ScoreEdit::canvas_width_changed(int width) @@ -607,6 +695,21 @@ void ScoreEdit::menu_command(int cmd) } break; + case CMD_SELECT_ALL: select_all(score_canvas->get_all_parts()); break; + case CMD_SELECT_NONE: select_none(score_canvas->get_all_parts()); break; + case CMD_SELECT_INVERT: select_invert(score_canvas->get_all_parts()); break; + case CMD_SELECT_ILOOP: select_in_loop(score_canvas->get_all_parts()); break; + case CMD_SELECT_OLOOP: select_not_in_loop(score_canvas->get_all_parts()); break; + + case CMD_CUT: + copy_notes(score_canvas->get_all_parts(), 1); + erase_notes(score_canvas->get_all_parts(), 1); + break; + case CMD_COPY: copy_notes(score_canvas->get_all_parts(), 1); break; + case CMD_PASTE: + menu_command(CMD_SELECT_NONE); + paste_notes(score_canvas->get_selected_part()); + break; case CMD_QUANTIZE: quantize_notes(score_canvas->get_all_parts()); break; case CMD_VELOCITY: modify_velocity(score_canvas->get_all_parts()); break; case CMD_CRESCENDO: crescendo(score_canvas->get_all_parts()); break; @@ -623,6 +726,19 @@ void ScoreEdit::menu_command(int cmd) } } +void ScoreEdit::clipboard_changed() +{ + paste_action->setEnabled(QApplication::clipboard()->mimeData()->hasFormat(QString("text/x-muse-eventlist"))); +} + +void ScoreEdit::selection_changed() +{ + bool flag = !get_events(score_canvas->get_all_parts(),1).empty(); + cut_action->setEnabled(flag); + copy_action->setEnabled(flag); + del_action->setEnabled(flag); +} + //duplicated from songfile.cpp's MusE::readPart(); the only differences: //"none" is supported and tag_name is settable @@ -4117,6 +4233,7 @@ void ScoreCanvas::menu_command(int cmd) case CMD_NOTELEN_16: new_len=TICKS_PER_WHOLE/16; break; case CMD_NOTELEN_32: new_len=TICKS_PER_WHOLE/32; break; case CMD_NOTELEN_LAST: new_len=-1; break; + default: cerr << "ERROR: ILLEGAL FUNCTION CALL: ScoreCanvas::menu_command called with unknown command ("< Date: Mon, 30 May 2011 09:03:29 +0000 Subject: removed midi in button from score editor (yes, it's really unneccessary here ;) ) --- muse2/ChangeLog | 1 + muse2/muse/midiedit/scoreedit.cpp | 27 ++------------------------- muse2/muse/midiedit/scoreedit.h | 4 ---- 3 files changed, 3 insertions(+), 29 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index fae1936d..5e2b578f 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,6 +1,7 @@ 30.05.2011: - implemented cut,copy'n'paste and the "select foo" entries in the score editor (flo93) - added select_foo() functions to functions.cpp (flo93) + - removed "midi in" button from score editor (flo93) 29.05.2011: - moved cut,copy'n'paste to functions.cpp, removed unneccessary duplication (flo93) - changed behaviour of paste: now the pasted, not the original notes are selected (flo93) diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index 7bb4737f..e15e2ec4 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -218,14 +218,7 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) srec->setIcon(*steprecIcon); srec->setCheckable(true); steprec_tools->addWidget(srec); - connect(srec, SIGNAL(toggled(bool)), SLOT(set_steprec(bool))); - - midiin = new QToolButton(); - midiin->setToolTip(tr("Midi Input")); - midiin->setIcon(*midiinIcon); - midiin->setCheckable(true); - steprec_tools->addWidget(midiin); - connect(midiin, SIGNAL(toggled(bool)), score_canvas, SLOT(set_midiin(bool))); + connect(srec, SIGNAL(toggled(bool)), score_canvas, SLOT(set_steprec(bool))); edit_tools = new EditToolBar(this, PointerTool | PencilTool | RubberTool); @@ -559,13 +552,6 @@ ScoreEdit::~ScoreEdit() } -void ScoreEdit::set_steprec(bool flag) -{ - score_canvas->set_steprec(flag); - if (flag == false) - midiin->setChecked(false); -} - void ScoreEdit::velo_box_changed() @@ -862,7 +848,6 @@ void ScoreEdit::writeStatus(int level, Xml& xml) const xml.strTag(level, "name", name); xml.intTag(level, "tool", edit_tools->curTool()); xml.intTag(level, "steprec", srec->isChecked()); - xml.intTag(level, "midiin", midiin->isChecked()); xml.intTag(level, "quantPower", score_canvas->quant_power2()); xml.intTag(level, "pxPerWhole", score_canvas->pixels_per_whole()); xml.intTag(level, "newNoteVelo", velo_spinbox->value()); @@ -955,8 +940,6 @@ void ScoreEdit::readStatus(Xml& xml) set_name(xml.parse1()); else if (tag == "tool") edit_tools->set(xml.parseInt()); - else if (tag == "midiin") - midiin->setChecked(xml.parseInt()); else if (tag == "steprec") srec->setChecked(xml.parseInt()); else if (tag == "quantPower") @@ -1192,7 +1175,6 @@ ScoreCanvas::ScoreCanvas(ScoreEdit* pr, QWidget* parent_widget) : View(parent_wi init_pixmaps(); srec=false; - midiin=false; for (int i=0;i<128;i++) held_notes[i]=false; steprec=new StepRec(held_notes); connect(song, SIGNAL(midiNote(int, int)), SLOT(midi_note(int,int))); @@ -4424,11 +4406,6 @@ void ScoreCanvas::set_steprec(bool flag) srec=flag; } -void ScoreCanvas::set_midiin(bool flag) -{ - midiin=flag; -} - void ScoreCanvas::midi_note(int pitch, int velo) { if (velo) @@ -4436,7 +4413,7 @@ void ScoreCanvas::midi_note(int pitch, int velo) else held_notes[pitch]=false; - if ( midiin && srec && selected_part && !audio->isPlaying() && velo ) + if ( srec && selected_part && !audio->isPlaying() && velo ) steprec->record(selected_part,pitch,quant_ticks(),quant_ticks(),velo,globalKeyState&Qt::ControlModifier,globalKeyState&Qt::ShiftModifier); } diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index 603c1c12..cd08d4b0 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -140,7 +140,6 @@ class ScoreEdit : public TopWin QAction* func_legato_action; QToolButton* srec; - QToolButton* midiin; QScrollBar* xscroll; QScrollBar* yscroll; @@ -164,7 +163,6 @@ class ScoreEdit : public TopWin void menu_command(int); void velo_box_changed(); void velo_off_box_changed(); - void set_steprec(bool); void init_shortcuts(); void selection_changed(); void clipboard_changed(); @@ -714,7 +712,6 @@ class ScoreCanvas : public View bool srec; - bool midiin; bool held_notes[128]; enum {COLOR_MODE_BLACK, COLOR_MODE_PART, COLOR_MODE_VELO} coloring_mode; @@ -765,7 +762,6 @@ class ScoreCanvas : public View void set_velo_off(int); void set_steprec(bool); - void set_midiin(bool); void update_parts(); //re-populates the sets from the sets signals: -- cgit v1.2.3 From 175ed105f7bb2ed96c631bbe7f67830475c61572 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Mon, 30 May 2011 17:44:15 +0000 Subject: added a spinbox to the arranger's "Ch:"-column --- muse2/ChangeLog | 1 + muse2/muse/arranger/tlist.cpp | 36 +++++++++++++++++++++++++++++++++++- muse2/muse/arranger/tlist.h | 4 ++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 5e2b578f..41bfbb73 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -2,6 +2,7 @@ - implemented cut,copy'n'paste and the "select foo" entries in the score editor (flo93) - added select_foo() functions to functions.cpp (flo93) - removed "midi in" button from score editor (flo93) + - added a spinbox to the arranger's "Ch:" column (flo93) 29.05.2011: - moved cut,copy'n'paste to functions.cpp, removed unneccessary duplication (flo93) - changed behaviour of paste: now the pasted, not the original notes are selected (flo93) diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index bd58ad88..4f050c46 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include "popupmenu.h" #include "globals.h" @@ -438,6 +439,20 @@ void TList::returnPressed() setFocus(); } +void TList::chanValueChanged(int val) +{ + Track* track = editTrack->clone(false); + ((MidiTrack*)editTrack)->setOutChannel(val-1); + audio->msgChangeTrack(track, editTrack); +} + +void TList::chanValueFinished() +{ + editTrack = 0; + chan_edit->hide(); + setFocus(); +} + //--------------------------------------------------------- // adjustScrollbar //--------------------------------------------------------- @@ -491,7 +506,7 @@ void TList::mouseDoubleClickEvent(QMouseEvent* ev) if (section == COL_NAME) { editTrack = t; if (editor == 0) { - editor = new QLineEdit(this); + editor = new QLineEdit(this); /*connect(editor, SIGNAL(returnPressed()), SLOT(returnPressed()));*/ editor->setFrame(true); @@ -502,6 +517,25 @@ void TList::mouseDoubleClickEvent(QMouseEvent* ev) editMode = true; editor->show(); } + else if (section == COL_OCHANNEL) { + if (t->isMidiTrack() && t->type() != Track::DRUM) + { + editTrack=t; + if (chan_edit==0) { + chan_edit=new QSpinBox(this); + chan_edit->setMinimum(1); + chan_edit->setMaximum(16); + connect(chan_edit, SIGNAL(valueChanged(int)), SLOT(chanValueChanged(int))); + connect(chan_edit, SIGNAL(editingFinished()), SLOT(chanValueFinished())); + } + chan_edit->setValue(((MidiTrack*)editTrack)->outChannel()+1); + int w=colw; + if (w < chan_edit->sizeHint().width()) w=chan_edit->sizeHint().width(); + chan_edit->setGeometry(colx, coly, w, colh); + chan_edit->show(); + chan_edit->setFocus(); + } + } else mousePressEvent(ev); } diff --git a/muse2/muse/arranger/tlist.h b/muse2/muse/arranger/tlist.h index 15be450a..607ca8c0 100644 --- a/muse2/muse/arranger/tlist.h +++ b/muse2/muse/arranger/tlist.h @@ -14,6 +14,7 @@ class QKeyEvent; class QLineEdit; +class QSpinBox; class QMouseEvent; class QPaintEvent; class QResizeEvent; @@ -57,6 +58,7 @@ class TList : public QWidget { Header* header; QScrollBar* _scroll; QLineEdit* editor; + QSpinBox* chan_edit; Track* editTrack; Track* editAutomation; @@ -92,6 +94,8 @@ class TList : public QWidget { private slots: void returnPressed(); + void chanValueChanged(int); + void chanValueFinished(); void songChanged(int flags); void changeAutomation(QAction*); void changeAutomationColor(QAction*); -- cgit v1.2.3 From 9187899632c14d64b3fae6477b7f941240f912a6 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Thu, 2 Jun 2011 16:37:28 +0000 Subject: the score editor now supports batch-movements the functions return as bool if undo has been triggered --- muse2/ChangeLog | 6 ++ muse2/muse/functions.cpp | 87 ++++++++++++++++----- muse2/muse/functions.h | 23 +++--- muse2/muse/midiedit/scoreedit.cpp | 160 +++++++++++++++++++------------------- muse2/muse/midiedit/scoreedit.h | 16 ++-- 5 files changed, 174 insertions(+), 118 deletions(-) diff --git a/muse2/ChangeLog b/muse2/ChangeLog index 41bfbb73..1af47f28 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,9 @@ +02.06.2011: + - the score editor now allows batch-movements, that is, + you can transpose or move the whole selection and not + only single notes (flo93) + - the functions now return as boolean, if they have triggered + undo (flo93) 30.05.2011: - implemented cut,copy'n'paste and the "select foo" entries in the score editor (flo93) - added select_foo() functions to functions.cpp (flo93) diff --git a/muse2/muse/functions.cpp b/muse2/muse/functions.cpp index 8b17bd8d..6fab2ee4 100644 --- a/muse2/muse/functions.cpp +++ b/muse2/muse/functions.cpp @@ -64,6 +64,13 @@ set partlist_to_set(PartList* pl) return result; } +set part_to_set(Part* p) +{ + set result; + result.insert(p); + return result; +} + bool is_relevant(const Event& event, const Part* part, int range) { unsigned tick; @@ -206,7 +213,7 @@ bool legato(const set& parts) -void modify_velocity(const set& parts, int range, int rate, int offset) +bool modify_velocity(const set& parts, int range, int rate, int offset) { map events = get_events(parts, range); @@ -239,10 +246,13 @@ void modify_velocity(const set& parts, int range, int rate, int offset) } song->endUndo(SC_EVENT_MODIFIED); + return true; } + else + return false; } -void modify_off_velocity(const set& parts, int range, int rate, int offset) +bool modify_off_velocity(const set& parts, int range, int rate, int offset) { map events = get_events(parts, range); @@ -275,10 +285,13 @@ void modify_off_velocity(const set& parts, int range, int rate, int offse } song->endUndo(SC_EVENT_MODIFIED); + return true; } + else + return false; } -void modify_notelen(const set& parts, int range, int rate, int offset) +bool modify_notelen(const set& parts, int range, int rate, int offset) { map events = get_events(parts, range); @@ -309,12 +322,15 @@ void modify_notelen(const set& parts, int range, int rate, int offset) } song->endUndo(SC_EVENT_MODIFIED); + return true; } + else + return false; } -void set_notelen(const set& parts, int range, int len) +bool set_notelen(const set& parts, int range, int len) { - modify_notelen(parts, range, 0, len); + return modify_notelen(parts, range, 0, len); } unsigned quantize_tick(unsigned tick, unsigned raster, int swing) @@ -339,7 +355,7 @@ unsigned quantize_tick(unsigned tick, unsigned raster, int swing) return tick_dest3; } -void quantize_notes(const set& parts, int range, int raster, bool quant_len, int strength, int swing, int threshold) +bool quantize_notes(const set& parts, int range, int raster, bool quant_len, int strength, int swing, int threshold) { map events = get_events(parts, range); bool undo_started=false; @@ -388,9 +404,11 @@ void quantize_notes(const set& parts, int range, int raster, bool quant_l if (undo_started) song->endUndo(SC_EVENT_MODIFIED); } + + return undo_started; } -void erase_notes(const set& parts, int range, int velo_threshold, bool velo_thres_used, int len_threshold, bool len_thres_used) +bool erase_notes(const set& parts, int range, int velo_threshold, bool velo_thres_used, int len_threshold, bool len_thres_used) { map events = get_events(parts, range); @@ -409,16 +427,19 @@ void erase_notes(const set& parts, int range, int velo_threshold, bool ve } song->endUndo(SC_EVENT_REMOVED); + return true; } + else + return false; } -void transpose_notes(const set& parts, int range, signed int halftonesteps) +bool transpose_notes(const set& parts, int range, signed int halftonesteps, bool do_undo) { map events = get_events(parts, range); if ( (!events.empty()) && (halftonesteps!=0) ) { - song->startUndo(); + if (do_undo) song->startUndo(); for (map::iterator it=events.begin(); it!=events.end(); it++) { @@ -434,11 +455,14 @@ void transpose_notes(const set& parts, int range, signed int halftonestep audio->msgChangeEvent(event, newEvent, part, false, false, false); } - song->endUndo(SC_EVENT_MODIFIED); + if (do_undo) song->endUndo(SC_EVENT_MODIFIED); + return do_undo; } + else + return false; } -void crescendo(const set& parts, int range, int start_val, int end_val, bool absolute) +bool crescendo(const set& parts, int range, int start_val, int end_val, bool absolute) { map events = get_events(parts, range); @@ -473,33 +497,56 @@ void crescendo(const set& parts, int range, int start_val, int end_val, b } song->endUndo(SC_EVENT_MODIFIED); + return true; } + else + return false; } -void move_notes(const set& parts, int range, signed int ticks) //TODO FINDMICH: safety checks +bool move_notes(const set& parts, int range, signed int ticks, bool do_undo) //TODO: clipping { map events = get_events(parts, range); if ( (!events.empty()) && (ticks!=0) ) { - song->startUndo(); + if (do_undo) song->startUndo(); for (map::iterator it=events.begin(); it!=events.end(); it++) { Event& event=*(it->first); Part* part=it->second; + bool del=false; Event newEvent = event.clone(); - newEvent.setTick(event.tick()+ticks); - // Indicate no undo, and do not do port controller values and clone parts. - audio->msgChangeEvent(event, newEvent, part, false, false, false); + if ((signed)event.tick()+ticks < 0) //don't allow moving before the part's begin + newEvent.setTick(0); + else + newEvent.setTick(event.tick()+ticks); + + if (newEvent.endTick() > part->lenTick()) //if exceeding the part's end, clip + { + if (part->lenTick() > newEvent.tick()) + newEvent.setLenTick(part->lenTick() - newEvent.tick()); + else + del=true; //if the new length would be <= 0, erase the note + } + + if (del==false) + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgChangeEvent(event, newEvent, part, false, false, false); + else + // Indicate no undo, and do not do port controller values and clone parts. + audio->msgDeleteEvent(event, part, false, false, false); } - song->endUndo(SC_EVENT_MODIFIED); + if (do_undo) song->endUndo(SC_EVENT_MODIFIED); + return do_undo; } + else + return false; } -void delete_overlaps(const set& parts, int range) +bool delete_overlaps(const set& parts, int range) { map events = get_events(parts, range); bool undo_started=false; @@ -556,9 +603,10 @@ void delete_overlaps(const set& parts, int range) if (undo_started) song->endUndo(SC_EVENT_MODIFIED); } + return undo_started; } -void legato(const set& parts, int range, int min_len, bool dont_shorten) +bool legato(const set& parts, int range, int min_len, bool dont_shorten) { map events = get_events(parts, range); bool undo_started=false; @@ -610,6 +658,7 @@ void legato(const set& parts, int range, int min_len, bool dont_shorten) if (undo_started) song->endUndo(SC_EVENT_MODIFIED); } + return undo_started; } diff --git a/muse2/muse/functions.h b/muse2/muse/functions.h index 6826a9b7..226c43f7 100644 --- a/muse2/muse/functions.h +++ b/muse2/muse/functions.h @@ -40,20 +40,21 @@ void init_function_dialogs(QWidget* parent); std::set partlist_to_set(PartList* pl); +std::set part_to_set(Part* p); std::map get_events(const std::set& parts, int range); //these functions simply do their job, non-interactively -void modify_velocity(const std::set& parts, int range, int rate, int offset=0); -void modify_off_velocity(const std::set& parts, int range, int rate, int offset=0); -void modify_notelen(const std::set& parts, int range, int rate, int offset=0); -void quantize_notes(const std::set& parts, int range, int raster, bool len=false, int strength=100, int swing=0, int threshold=0); -void erase_notes(const std::set& parts, int range, int velo_threshold=0, bool velo_thres_used=false, int len_threshold=0, bool len_thres_used=false); -void delete_overlaps(const std::set& parts, int range); -void set_notelen(const std::set& parts, int range, int len); -void move_notes(const std::set& parts, int range, signed int ticks); -void transpose_notes(const std::set& parts, int range, signed int halftonesteps); -void crescendo(const std::set& parts, int range, int start_val, int end_val, bool absolute); -void legato(const std::set& parts, int range, int min_len=1, bool dont_shorten=false); +bool modify_velocity(const std::set& parts, int range, int rate, int offset=0); +bool modify_off_velocity(const std::set& parts, int range, int rate, int offset=0); +bool modify_notelen(const std::set& parts, int range, int rate, int offset=0); +bool quantize_notes(const std::set& parts, int range, int raster, bool len=false, int strength=100, int swing=0, int threshold=0); +bool erase_notes(const std::set& parts, int range, int velo_threshold=0, bool velo_thres_used=false, int len_threshold=0, bool len_thres_used=false); +bool delete_overlaps(const std::set& parts, int range); +bool set_notelen(const std::set& parts, int range, int len); +bool move_notes(const std::set& parts, int range, signed int ticks, bool do_undo=true); +bool transpose_notes(const std::set& parts, int range, signed int halftonesteps, bool do_undo=true); +bool crescendo(const std::set& parts, int range, int start_val, int end_val, bool absolute); +bool legato(const std::set& parts, int range, int min_len=1, bool dont_shorten=false); //the below functions automatically open the dialog diff --git a/muse2/muse/midiedit/scoreedit.cpp b/muse2/muse/midiedit/scoreedit.cpp index e15e2ec4..0660ebc5 100644 --- a/muse2/muse/midiedit/scoreedit.cpp +++ b/muse2/muse/midiedit/scoreedit.cpp @@ -353,7 +353,7 @@ ScoreEdit::ScoreEdit(QWidget* parent, const char* name, unsigned initPos) edit_menu->addSeparator(); del_action = edit_menu->addAction(tr("Delete &Events")); - menu_mapper->setMapping(del_action, CMD_ERASE); + menu_mapper->setMapping(del_action, CMD_DEL); connect(del_action, SIGNAL(triggered()), menu_mapper, SLOT(map())); edit_menu->addSeparator(); @@ -702,6 +702,7 @@ void ScoreEdit::menu_command(int cmd) case CMD_NOTELEN: modify_notelen(score_canvas->get_all_parts()); break; case CMD_TRANSPOSE: transpose_notes(score_canvas->get_all_parts()); break; case CMD_ERASE: erase_notes(score_canvas->get_all_parts()); break; + case CMD_DEL: erase_notes(score_canvas->get_all_parts(),1); break; case CMD_MOVE: move_notes(score_canvas->get_all_parts()); break; case CMD_FIXED_LEN: set_notelen(score_canvas->get_all_parts()); break; case CMD_DELETE_OVERLAPS: delete_overlaps(score_canvas->get_all_parts()); break; @@ -1183,13 +1184,12 @@ ScoreCanvas::ScoreCanvas(ScoreEdit* pr, QWidget* parent_widget) : View(parent_wi x_left=0; y_pos=0; have_lasso=false; + inserting=false; dragging=false; drag_cursor_changed=false; mouse_erases_notes=false; mouse_inserts_notes=true; - undo_started=false; - undo_flags=0; selected_part=NULL; @@ -3520,10 +3520,9 @@ int ScoreCanvas::y_to_pitch(int y, int t, clef_t clef) void ScoreCanvas::mousePressEvent (QMouseEvent* event) { - keystate=((QInputEvent*)event)->modifiers(); - + 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 @@ -3534,10 +3533,6 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) int x=event->x()+x_pos-x_left; int tick=flo_quantize_floor(x_to_tick(x), quant_ticks()); - if (event->button()==Qt::LeftButton) - if (!ctrl) - deselect_all(); - if (staff_it!=staves.end()) { if (event->x() <= x_left) //clicked in the preamble? @@ -3627,9 +3622,10 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) + clicked_event_ptr=set_it->source_event; dragged_event=*set_it->source_event; + original_dragged_event=dragged_event.clone(); dragged_event_part=set_it->source_part; - dragged_event_original_pitch=dragged_event.pitch(); if ((mouse_erases_notes) || (event->button()==Qt::MidButton)) //erase? { @@ -3637,14 +3633,9 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) } else if (event->button()==Qt::LeftButton) //edit? { - set_it->source_event->setSelected(!set_it->source_event->selected()); - song_changed(SC_SELECTION); - setMouseTracking(true); dragging=true; drag_cursor_changed=false; - undo_started=false; - undo_flags=SC_EVENT_MODIFIED; } } else //we found nothing? @@ -3676,11 +3667,9 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) if (relative_tick<0) cerr << "ERROR: THIS SHOULD NEVER HAPPEN: relative_tick is negative!" << endl; song->startUndo(); - undo_started=true; - undo_flags=SC_EVENT_INSERTED | SC_EVENT_MODIFIED; - //stopping undo at the end of this function is unneccessary - //because we'll begin a drag right after it. finishing - //this drag will stop undo as well (in mouseReleaseEvent) + + if (!ctrl) + deselect_all(); Event newevent(Note); newevent.setPitch(y_to_pitch(y,tick, staff_it->clef)); @@ -3689,7 +3678,7 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) newevent.setTick(relative_tick); newevent.setLenTick((new_len>0)?new_len:last_len); newevent.setSelected(true); - + if (flo_quantize(newevent.lenTick(), quant_ticks()) <= 0) { newevent.setLenTick(quant_ticks()); @@ -3707,7 +3696,7 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) dragged_event_part=curr_part; dragged_event=newevent; - dragged_event_original_pitch=newevent.pitch(); + original_dragged_event=dragged_event.clone(); mouse_down_pos=event->pos(); mouse_operation=NO_OP; @@ -3717,9 +3706,12 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) setMouseTracking(true); dragging=true; + inserting=true; drag_cursor_changed=true; setCursor(Qt::SizeAllCursor); - //song->startUndo(); unneccessary because we have started it already above + + song->endUndo(SC_EVENT_INSERTED); + song->update(SC_SELECTION); } } else // !mouse_inserts_notes. open a lasso @@ -3733,16 +3725,16 @@ void ScoreCanvas::mousePressEvent (QMouseEvent* event) } } } - - if (event->button()==Qt::LeftButton) - song->update(SC_SELECTION); } void ScoreCanvas::mouseReleaseEvent (QMouseEvent* event) { + keystate=event->modifiers(); + bool ctrl=keystate & Qt::ControlModifier; + if (dragging && event->button()==Qt::LeftButton) { - if ((mouse_operation==LENGTH) || (mouse_operation==BEGIN)) //also BEGIN can change the len by clipping + if (mouse_operation==LENGTH) { if (flo_quantize(dragged_event.lenTick(), quant_ticks()) <= 0) { @@ -3753,15 +3745,29 @@ void ScoreCanvas::mouseReleaseEvent (QMouseEvent* event) { last_len=flo_quantize(dragged_event.lenTick(), quant_ticks()); } + + if (undo_started) + song->endUndo(SC_EVENT_MODIFIED | SC_EVENT_REMOVED); } + - if (undo_started) - song->endUndo(undo_flags); + if (mouse_operation==NO_OP && !inserting) + { + if (event->button()==Qt::LeftButton) + if (!ctrl) + deselect_all(); + + clicked_event_ptr->setSelected(!clicked_event_ptr->selected()); + + song->update(SC_SELECTION); + } setMouseTracking(false); unsetCursor(); + inserting=false; dragging=false; drag_cursor_changed=false; + undo_started=false; x_scroll_speed=0; x_scroll_pos=0; } @@ -3791,6 +3797,9 @@ void ScoreCanvas::mouseReleaseEvent (QMouseEvent* event) if (have_lasso && event->button()==Qt::LeftButton) { + if (!ctrl) + deselect_all(); + set already_processed; for (list::iterator it=staves.begin(); it!=staves.end(); it++) @@ -3808,6 +3817,9 @@ void ScoreCanvas::mouseReleaseEvent (QMouseEvent* event) void ScoreCanvas::mouseMoveEvent (QMouseEvent* event) { + keystate=event->modifiers(); + bool ctrl=keystate & Qt::ControlModifier; + if (dragging) { int dx=event->x()-mouse_down_pos.x(); @@ -3838,6 +3850,22 @@ void ScoreCanvas::mouseMoveEvent (QMouseEvent* event) mouse_operation=PITCH; setCursor(Qt::SizeVerCursor); } + + if (mouse_operation!=NO_OP) + { + if (!inserting && clicked_event_ptr->selected()==false) + { + if (!ctrl) + deselect_all(); + + clicked_event_ptr->setSelected(true); + + song->update(SC_SELECTION); + } + + old_pitch=-1; + old_dest_tick=MAXINT; + } } int new_pitch; @@ -3848,70 +3876,41 @@ void ScoreCanvas::mouseMoveEvent (QMouseEvent* event) break; case PITCH: - if (debugMsg) cout << "changing pitch, delta="< dragged_event_part->lenTick()) + if (dest_tick != old_dest_tick) { - signed new_len=dragged_event_part->lenTick() - tmp.tick(); - if (new_len>=0) - { - tmp.setLenTick(dragged_event_part->lenTick() - tmp.tick()); - if (debugMsg) cout << "moved note would exceed its part; clipping length to " << tmp.lenTick() << endl; - } - else - { - tmp.setLenTick(0); - if (debugMsg) cout << "moved note would exceed its part; clipping length to 0 (actually negative)" << endl; - } + if (undo_started) song->undo(); + undo_started=move_notes(part_to_set(dragged_event_part),1, (signed)dest_tick-original_dragged_event.tick()); + old_dest_tick=dest_tick; } - - audio->msgChangeEvent(dragged_event, tmp, dragged_event_part, false, false, false); - dragged_event=tmp; - - fully_recalculate(); } break; @@ -4332,14 +4331,6 @@ void ScoreCanvas::deselect_all() song->update(SC_SELECTION); } -void ScoreCanvas::keyPressEvent(QKeyEvent* event) -{ - if (event->key()==Qt::Key_Delete) - { - erase_notes(get_all_parts(), 1); // 1 means "all selected" - } -} - bool staff_t::cleanup_parts() { bool did_something=false; @@ -4469,8 +4460,13 @@ void staff_t::update_part_indices() * between, for example, when a cis is tied to a des * * CURRENT TODO + * o batch-movements: they may be destructive: if you move a chord + * upwards, so that some notes get clipped, + * they'll appear "damaged" in undo/redo + * maybe DO apply stuff with undo/redo, but count + * n_steps, and undo all steps before really + * applying the operation then. * o allow batch-movements in score editor - * o in main win: make "Ch" column editable with a line edit * o either remove these "hidden notes", or deal with them in the score editor * o investigate with valgrind * o controller view in score editor diff --git a/muse2/muse/midiedit/scoreedit.h b/muse2/muse/midiedit/scoreedit.h index cd08d4b0..1c45f578 100644 --- a/muse2/muse/midiedit/scoreedit.h +++ b/muse2/muse/midiedit/scoreedit.h @@ -64,7 +64,7 @@ enum {CMD_COLOR_BLACK, CMD_COLOR_VELO, CMD_COLOR_PART, CMD_QUANTIZE, CMD_VELOCITY, CMD_CRESCENDO, CMD_NOTELEN, CMD_TRANSPOSE, CMD_ERASE, CMD_MOVE, CMD_FIXED_LEN, CMD_DELETE_OVERLAPS, CMD_LEGATO, - CMD_CUT, CMD_COPY, CMD_PASTE, + CMD_CUT, CMD_COPY, CMD_PASTE, CMD_DEL, CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT, CMD_SELECT_ILOOP, CMD_SELECT_OLOOP}; @@ -697,19 +697,24 @@ class ScoreCanvas : public View bool mouse_erases_notes; bool mouse_inserts_notes; + bool inserting; bool dragging; bool drag_cursor_changed; Part* dragged_event_part; Event dragged_event; - int dragged_event_original_pitch; + Event original_dragged_event; + Event* clicked_event_ptr; + + int old_pitch; + unsigned old_dest_tick; + + bool undo_started; + bool temp_undo; bool have_lasso; QPoint lasso_start; QRect lasso; - bool undo_started; - int undo_flags; - bool srec; bool held_notes[128]; @@ -783,7 +788,6 @@ class ScoreCanvas : public View virtual void mouseMoveEvent (QMouseEvent* event); virtual void mouseReleaseEvent (QMouseEvent* event); virtual void resizeEvent(QResizeEvent*); - virtual void keyPressEvent(QKeyEvent* event); public: ScoreCanvas(ScoreEdit*, QWidget*); -- cgit v1.2.3