From 1bc4ba9dfc00b6e7511fbf4765296a2002f83315 Mon Sep 17 00:00:00 2001 From: Florian Jung Date: Tue, 3 Jan 2012 17:26:09 +0000 Subject: merged with release_2_0 --- muse2/ChangeLog | 19 + muse2/muse/app.cpp | 2 +- muse2/muse/arranger/arrangerview.cpp | 8 + muse2/muse/arranger/arrangerview.h | 3 +- muse2/muse/arranger/pcanvas.cpp | 10 +- muse2/muse/arranger/tlist.cpp | 240 +- muse2/muse/audio.cpp | 3 +- muse2/muse/audio.h | 5 +- muse2/muse/audiotrack.cpp | 338 +- muse2/muse/confmport.cpp | 3 +- muse2/muse/ctrl.cpp | 53 +- muse2/muse/ctrl.h | 9 +- muse2/muse/driver/alsamidi.cpp | 7 +- muse2/muse/evdata.h | 19 +- muse2/muse/mididev.cpp | 4 +- muse2/muse/mididev.h | 1 + muse2/muse/mixer/amixer.cpp | 5 +- muse2/muse/mixer/strip.cpp | 4 + muse2/muse/node.cpp | 15 +- muse2/muse/osc.cpp | 4 + muse2/muse/plugin.cpp | 17 +- muse2/muse/plugin.h | 4 +- muse2/muse/seqmsg.cpp | 6 +- muse2/muse/song.cpp | 186 +- muse2/muse/song.h | 3 +- muse2/muse/structure.cpp | 13 +- muse2/muse/synth.h | 3 +- muse2/muse/track.cpp | 330 +- muse2/muse/track.h | 74 +- muse2/muse/undo.cpp | 158 +- muse2/muse/undo.h | 13 + muse2/muse/widgets/CMakeLists.txt | 3 + muse2/muse/widgets/fdialogbuttons.ui | 6 +- muse2/muse/widgets/tracks_duplicate.cpp | 43 + muse2/muse/widgets/tracks_duplicate.h | 58 + muse2/muse/widgets/tracks_duplicate_base.ui | 184 + muse2/share/locale/muse_sv_SE.ts | 5436 ++++++--------------------- 37 files changed, 2641 insertions(+), 4648 deletions(-) create mode 100644 muse2/muse/widgets/tracks_duplicate.cpp create mode 100644 muse2/muse/widgets/tracks_duplicate.h create mode 100644 muse2/muse/widgets/tracks_duplicate_base.ui diff --git a/muse2/ChangeLog b/muse2/ChangeLog index c07434ea..1445633b 100644 --- a/muse2/ChangeLog +++ b/muse2/ChangeLog @@ -1,3 +1,22 @@ +03.01.2012: + - Global Cut: Fixed crashes with markers. Re-did marker section in structure.cpp:adjustGlobalLists(). (Tim) + TODO: Still get tempo, key, and sig not found warnings. +02.01.2012: + - Fixed drag and drop cloning parts - bad reference count in PartCanvas::moveItem(). (Tim) + - File Open dialog: Start with song data and configuration. + - Don't auto-open ALSA Midi Through device. Fixes "midi write error: Resource temporarily unavailable". +31.12.2011: + - 'Duplicate tracks' route copying now works, including Audio Input/Output Jack routes. (Tim) +30.12.2011: + - Added 'Duplicate tracks' Edit action, and dialog. Post-cleanups. TODO: Copy plugins, fix copying parts. (Tim) + Class Track, and some of it descendants, have fixed copy constructors, and a new assign() method. + Tested copy constructors and the new assign() method using the new duplicate tracks feature: Good so far, + undo/redo. + - Fixed compile errors when configured without OSC. Tested OK. Reported by Philippe Macaire. (Tim) +27.12.2011: + - Fixed some undo/redo/close crashes. TODO Global cut crashes from null Marker. (Tim. All marked p4.0.46) + Fixed some issues with track list and popup 'name edit' and 'channel spinbox'. Added to audio tracks. + REPLACED Undo type ModifyTrack: Two simpler 'ModifyTrackName', 'ModifyTrackChannels' type/struct/functions. + Some work was done in undo/redo and a couple of slight apparent leaks were fixed in evdata.h 21.12.2011: - Fixed some mixer issues: Very slow updating with large mixer when setting visible tracks for example: Set and check Style() object name in MusE::loadTheme() so that slow mixer ScrollArea::viewportEvent() is not called every time. (Tim...) diff --git a/muse2/muse/app.cpp b/muse2/muse/app.cpp index d65a071f..836fe6fb 100644 --- a/muse2/muse/app.cpp +++ b/muse2/muse/app.cpp @@ -3143,7 +3143,7 @@ void MusE::focusInEvent(QFocusEvent* ev) // mixer1->raise(); //if (mixer2) // mixer2->raise(); - raise(); + //raise(); QMainWindow::focusInEvent(ev); } diff --git a/muse2/muse/arranger/arrangerview.cpp b/muse2/muse/arranger/arrangerview.cpp index aff3d056..0b450612 100644 --- a/muse2/muse/arranger/arrangerview.cpp +++ b/muse2/muse/arranger/arrangerview.cpp @@ -146,6 +146,7 @@ ArrangerView::ArrangerView(QWidget* parent) editPasteCloneDialogAction = new QAction(QIcon(*editpasteCloneIconSet), tr("Paste clone (show dialog)"), this); editInsertEMAction = new QAction(QIcon(*editpasteIconSet), tr("&Insert Empty Measure"), this); editDeleteSelectedAction = new QAction(QIcon(*edit_track_delIcon), tr("Delete Selected Tracks"), this); + editDuplicateSelTrackAction = new QAction(QIcon(*edit_track_addIcon), tr("Duplicate Selected Tracks"), this); editShrinkPartsAction = new QAction(tr("Shrink selected parts"), this); //FINDMICH TODO tooltips! editExpandPartsAction = new QAction(tr("Expand selected parts"), this); @@ -224,6 +225,7 @@ ArrangerView::ArrangerView(QWidget* parent) menuEdit->addAction(editDeleteSelectedAction); menuEdit->addMenu(addTrack); + menuEdit->addAction(editDuplicateSelTrackAction); menuEdit->addMenu(select); select->addAction(editSelectAllAction); select->addAction(editDeselectAllAction); @@ -298,6 +300,7 @@ ArrangerView::ArrangerView(QWidget* parent) connect(editPasteCloneDialogAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editInsertEMAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editDeleteSelectedAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); + connect(editDuplicateSelTrackAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editShrinkPartsAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); connect(editExpandPartsAction, SIGNAL(triggered()), editSignalMapper, SLOT(map())); @@ -319,6 +322,7 @@ ArrangerView::ArrangerView(QWidget* parent) editSignalMapper->setMapping(editPasteCloneDialogAction, CMD_PASTE_CLONE_DIALOG); editSignalMapper->setMapping(editInsertEMAction, CMD_INSERTMEAS); editSignalMapper->setMapping(editDeleteSelectedAction, CMD_DELETE_TRACK); + editSignalMapper->setMapping(editDuplicateSelTrackAction, CMD_DUPLICATE_TRACK); editSignalMapper->setMapping(editShrinkPartsAction, CMD_SHRINK_PART); editSignalMapper->setMapping(editExpandPartsAction, CMD_EXPAND_PART); editSignalMapper->setMapping(editCleanPartsAction, CMD_CLEAN_PART); @@ -515,6 +519,10 @@ void ArrangerView::cmd(int cmd) MusEGlobal::audio->msgUpdateSoloStates(); break; + case CMD_DUPLICATE_TRACK: + MusEGlobal::song->duplicateTracks(); + break; + case CMD_SELECT_ALL: case CMD_SELECT_NONE: case CMD_SELECT_INVERT: diff --git a/muse2/muse/arranger/arrangerview.h b/muse2/muse/arranger/arrangerview.h index c56767a6..5c81101c 100644 --- a/muse2/muse/arranger/arrangerview.h +++ b/muse2/muse/arranger/arrangerview.h @@ -69,7 +69,7 @@ class ArrangerView : public TopWin CMD_PASTE_DIALOG, CMD_PASTE_CLONE_DIALOG, CMD_DELETE, CMD_SELECT_ALL, CMD_SELECT_NONE, CMD_SELECT_INVERT, CMD_SELECT_ILOOP, CMD_SELECT_OLOOP, CMD_SELECT_PARTS, - CMD_DELETE_TRACK, CMD_EXPAND_PART, CMD_SHRINK_PART, CMD_CLEAN_PART, + CMD_DELETE_TRACK, CMD_DUPLICATE_TRACK, CMD_EXPAND_PART, CMD_SHRINK_PART, CMD_CLEAN_PART, CMD_QUANTIZE, CMD_VELOCITY, CMD_CRESCENDO, CMD_NOTELEN, CMD_TRANSPOSE, CMD_ERASE, CMD_MOVE, CMD_FIXED_LEN, CMD_DELETE_OVERLAPS, CMD_LEGATO }; @@ -95,6 +95,7 @@ class ArrangerView : public TopWin QAction *editCutAction, *editCopyAction, *editCopyRangeAction; QAction *editPasteAction, *editPasteCloneAction, *editPasteDialogAction, *editPasteCloneDialogAction; QAction *editInsertEMAction, *editPasteC2TAction, *editDeleteSelectedAction, *editSelectAllAction, *editDeselectAllAction; + QAction *editDuplicateSelTrackAction; QAction *editInvertSelectionAction, *editInsideLoopAction, *editOutsideLoopAction, *editAllPartsAction; QAction *masterGraphicAction, *masterListAction; QAction *midiTransformerAction; diff --git a/muse2/muse/arranger/pcanvas.cpp b/muse2/muse/arranger/pcanvas.cpp index 05b7b12a..57232d42 100644 --- a/muse2/muse/arranger/pcanvas.cpp +++ b/muse2/muse/arranger/pcanvas.cpp @@ -379,7 +379,7 @@ bool PartCanvas::moveItem(MusECore::Undo& operations, CItem* item, const QPoint& if(t == MOVE_MOVE) item->setPart(dpart); if (t == MOVE_COPY && !clone) { - dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it + //dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it // so we must decrement it first :/ // @@ -396,11 +396,19 @@ bool PartCanvas::moveItem(MusECore::Undo& operations, CItem* item, const QPoint& if (t == MOVE_COPY || t == MOVE_CLONE) { + dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it + // so we must decrement it first :/ // These will not increment ref count, and will not chain clones... // TODO FINDMICH: is this still correct (by flo93)? i doubt it! operations.push_back(MusECore::UndoOp(MusECore::UndoOp::AddPart,dpart)); } else if (t == MOVE_MOVE) { + // In all cases found ev lists were same. So this is redundant - Redo incs then decs the same list. + // But just in case we ever have two different lists... + dpart->events()->incARef(-1); // the later MusEGlobal::song->applyOperationGroup() will increment it + // so we must decrement it first :/ + spart->events()->incARef(1); // the later MusEGlobal::song->applyOperationGroup() will decrement it + // so we must increment it first :/ dpart->setSelected(spart->selected()); // These will increment ref count if not a clone, and will chain clones... // TODO FINDMICH: is this still correct (by flo93)? i doubt it! diff --git a/muse2/muse/arranger/tlist.cpp b/muse2/muse/arranger/tlist.cpp index 568bac05..5d88ede9 100644 --- a/muse2/muse/arranger/tlist.cpp +++ b/muse2/muse/arranger/tlist.cpp @@ -359,8 +359,6 @@ void TList::paint(const QRect& r) int outport = ((MusECore::MidiTrack*)track)->outPort(); s.sprintf("%d:%s", outport+1, MusEGlobal::midiPorts[outport].portname().toLatin1().constData()); } - // Added by Tim. p3.3.9 - else if(track->type() == MusECore::Track::AUDIO_SOFTSYNTH) { @@ -448,44 +446,140 @@ void TList::paint(const QRect& r) //--------------------------------------------------------- void TList::returnPressed() - { - editor->hide(); - if (editor->text() != editTrack->name()) { - MusECore::TrackList* tl = MusEGlobal::song->tracks(); - for (MusECore::iTrack i = tl->begin(); i != tl->end(); ++i) { - if ((*i)->name() == editor->text()) { - QMessageBox::critical(this, - tr("MusE: bad trackname"), - tr("please choose a unique track name"), - QMessageBox::Ok, - Qt::NoButton, - Qt::NoButton); - editTrack = 0; - setFocus(); - return; - } - } - //MusECore::Track* track = editTrack->clone(); - MusECore::Track* track = editTrack->clone(false); - editTrack->setName(editor->text()); - MusEGlobal::audio->msgChangeTrack(track, editTrack); - } - editTrack = 0; +{ + if(editTrack) + { + if(editor && editor->isVisible()) + { + //editor->hide(); + if (editor->text() != editTrack->name()) { + MusECore::TrackList* tl = MusEGlobal::song->tracks(); + for (MusECore::iTrack i = tl->begin(); i != tl->end(); ++i) { + if ((*i)->name() == editor->text()) { + QMessageBox::critical(this, + tr("MusE: bad trackname"), + tr("please choose a unique track name"), + QMessageBox::Ok, + Qt::NoButton, + Qt::NoButton); + editTrack = 0; + editor->blockSignals(true); + editor->hide(); + editor->blockSignals(false); + setFocus(); + return; + } + } + + //MusECore::Track* track = editTrack->clone(false); + //editTrack->setName(editor->text()); + //MusEGlobal::audio->msgChangeTrack(track, editTrack); + // p4.0.46 Tim... + MusEGlobal::song->startUndo(); + MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyTrackName, + editTrack, + editTrack->name().toLatin1().constData(), + editor->text().toLatin1().constData())); + editTrack->setName(editor->text()); + //MusEGlobal::song->update(SC_TRACK_MODIFIED); + MusEGlobal::song->endUndo(-1); + } + } + + editTrack = 0; + } + editMode = false; + if(editor->isVisible()) + { + editor->blockSignals(true); + editor->hide(); + editor->blockSignals(false); + } setFocus(); - } +} -void TList::chanValueChanged(int val) +void TList::chanValueChanged(int /*val*/) { - MusECore::Track* track = editTrack->clone(false); - ((MusECore::MidiTrack*)editTrack)->setOutChannel(val-1); - MusEGlobal::audio->msgChangeTrack(track, editTrack); + //MusECore::Track* track = editTrack->clone(false); + //((MusECore::MidiTrack*)editTrack)->setOutChannel(val-1); + //MusEGlobal::audio->msgChangeTrack(track, editTrack); } void TList::chanValueFinished() { - editTrack = 0; - chan_edit->hide(); + if(editTrack) + { + if(editTrack->isMidiTrack()) + { + MusECore::MidiTrack* mt = dynamic_cast(editTrack); + if (mt && mt->type() != MusECore::Track::DRUM) + //if (mt && !mt->isDrumTrack()) // For Flo later with new drum tracks. + { + int channel = chan_edit->value() - 1; + if(channel >= MIDI_CHANNELS) + channel = MIDI_CHANNELS - 1; + if(channel < 0) + channel = 0; + if(channel != mt->outChannel()) + { + MusEGlobal::song->startUndo(); + MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyTrackChannel, + editTrack, + mt->outChannel(), + channel)); + //mt->setOutChannel(channel); + MusEGlobal::audio->msgIdle(true); + //MusEGlobal::audio->msgSetTrackOutChannel(mt, channel); + mt->setOutChanAndUpdate(channel); + MusEGlobal::audio->msgIdle(false); + //if (mt->type() == MusECore::MidiTrack::DRUM) {//Change channel on all drum instruments + // for (int i=0; imsgUpdateSoloStates(); + //MusEGlobal::song->endUndo(SC_CHANNELS); + //MusEGlobal::song->endUndo(SC_MIDI_TRACK_PROP | SC_ROUTE); + MusEGlobal::song->endUndo(SC_MIDI_TRACK_PROP); + } + } + } + else + { + if(editTrack->type() != MusECore::Track::AUDIO_SOFTSYNTH) + { + MusECore::AudioTrack* at = dynamic_cast(editTrack); + if(at) + { + int n = chan_edit->value(); + if(n > MAX_CHANNELS) + n = MAX_CHANNELS; + else if (n < 1) + n = 1; + if(n != at->channels()) + { + MusEGlobal::song->startUndo(); + MusEGlobal::song->addUndo(MusECore::UndoOp(MusECore::UndoOp::ModifyTrackChannel, + editTrack, + at->channels(), + n)); + MusEGlobal::audio->msgSetChannels(at, n); + MusEGlobal::song->endUndo(SC_CHANNELS); + } + } + } + } + + editTrack = 0; + } + + editMode = false; + if(chan_edit->isVisible()) + { + chan_edit->blockSignals(true); + chan_edit->hide(); + chan_edit->blockSignals(false); + } setFocus(); } @@ -526,11 +620,21 @@ MusECore::Track* TList::y2Track(int y) const void TList::mouseDoubleClickEvent(QMouseEvent* ev) { + int button = ev->button(); + //bool ctrl = ((QInputEvent*)ev)->modifiers() & Qt::ControlModifier; + if(button != Qt::LeftButton) { + mousePressEvent(ev); + return; + } + int x = ev->x(); int section = header->logicalIndexAt(x); if (section == -1) - return; - + { + mousePressEvent(ev); + return; + } + MusECore::Track* t = y2Track(ev->y() + ypos); if (t) { @@ -546,30 +650,53 @@ void TList::mouseDoubleClickEvent(QMouseEvent* ev) /*connect(editor, SIGNAL(returnPressed()), SLOT(returnPressed()));*/ editor->setFrame(true); + connect(editor, SIGNAL(editingFinished()), SLOT(returnPressed())); } + //editor->blockSignals(true); editor->setText(editTrack->name()); + //editor->blockSignals(false); editor->end(false); editor->setGeometry(colx, coly, colw, colh); editMode = true; editor->show(); } else if (section == COL_OCHANNEL) { - if (t->isMidiTrack() && t->type() != MusECore::Track::DRUM) + //if (t->isMidiTrack() && t->type() != MusECore::Track::DRUM) + // Enabled for audio tracks. And synth channels cannot be changed ATM. + if(t->type() == MusECore::Track::DRUM || t->type() == MusECore::Track::AUDIO_SOFTSYNTH) + { + mousePressEvent(ev); + return; + } + + //if(t->type() != MusECore::Track::DRUM && t->type() != MusECore::Track::AUDIO_SOFTSYNTH) { 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(valueChanged(int)), SLOT(chanValueChanged(int))); connect(chan_edit, SIGNAL(editingFinished()), SLOT(chanValueFinished())); } - chan_edit->setValue(((MusECore::MidiTrack*)editTrack)->outChannel()+1); + //chan_edit->blockSignals(true); + if (t->isMidiTrack()) + { + chan_edit->setMaximum(MIDI_CHANNELS); + chan_edit->setValue(((MusECore::MidiTrack*)editTrack)->outChannel()+1); + } + else // if(t->type() != MusECore::Track::AUDIO_SOFTSYNTH) + { + chan_edit->setMaximum(MAX_CHANNELS); + chan_edit->setValue(((MusECore::AudioTrack*)editTrack)->channels()); + } + //chan_edit->blockSignals(false); int w=colw; if (w < chan_edit->sizeHint().width()) w=chan_edit->sizeHint().width(); chan_edit->setGeometry(colx, coly, w, colh); + editMode = true; chan_edit->show(); chan_edit->setFocus(); + ev->accept(); } } else @@ -832,7 +959,6 @@ void TList::portsPopupMenu(MusECore::Track* t, int x, int y) void TList::oportPropertyPopupMenu(MusECore::Track* t, int x, int y) { - // Added by Tim. p3.3.9 if(t->type() == MusECore::Track::AUDIO_SOFTSYNTH) { MusECore::SynthI* synth = (MusECore::SynthI*)t; @@ -860,7 +986,7 @@ void TList::oportPropertyPopupMenu(MusECore::Track* t, int x, int y) // If it has a gui but we don't have OSC, disable the action. #ifndef OSC_SUPPORT #ifdef DSSI_SUPPORT - if(dynamic_cast(synth->sif())) + if(dynamic_cast(synth->sif())) { //act->setChecked(false); //act->setEnabled(false); @@ -913,7 +1039,7 @@ void TList::oportPropertyPopupMenu(MusECore::Track* t, int x, int y) #ifndef OSC_SUPPORT #ifdef DSSI_SUPPORT MusECore::MidiDevice* dev = port->device(); - if(dev && dev->isSynti() && (dynamic_cast(((MusECore::SynthI*)dev)->sif()))) + if(dev && dev->isSynti() && (dynamic_cast(((MusECore::SynthI*)dev)->sif()))) { //act->setChecked(false); //act->setEnabled(false); @@ -958,14 +1084,26 @@ void TList::keyPressEvent(QKeyEvent* e) { // First time we get a keypress event when lineedit is open is on the return key: // -- Not true for Qt4. Modifier keys also send key events - Orcan - if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) + //if ( e->key() == Qt::Key_Return || e->key() == Qt::Key_Enter) // Removed p4.0.46 Tim. + // { + // returnPressed(); + // return; + // } + //else + if ( e->key() == Qt::Key_Escape ) { - returnPressed(); - return; - } - else if ( e->key() == Qt::Key_Escape ) - { - editor->hide(); + if(editor && editor->isVisible()) + { + editor->blockSignals(true); + editor->hide(); + editor->blockSignals(false); + } + if(chan_edit && chan_edit->isVisible()) + { + chan_edit->blockSignals(true); + chan_edit->hide(); + chan_edit->blockSignals(false); + } editTrack = 0; editMode = false; setFocus(); @@ -1048,8 +1186,9 @@ void TList::moveSelection(int n) MusEGlobal::song->setRecordFlag((*t),true); } - if (editTrack && editTrack != *t) + if (editTrack && editTrack != *t) returnPressed(); + redraw(); break; } @@ -1692,6 +1831,9 @@ void TList::mouseReleaseEvent(QMouseEvent* ev) } if (editTrack && editor && editor->isVisible()) editor->setFocus(); + //else + //if (editTrack && chan_edit && chan_edit->isVisible()) // p4.0.46 + // chan_edit->setFocus(); adjustScrollbar(); } diff --git a/muse2/muse/audio.cpp b/muse2/muse/audio.cpp index 0b1574cc..3f1d4dc8 100644 --- a/muse2/muse/audio.cpp +++ b/muse2/muse/audio.cpp @@ -67,7 +67,8 @@ extern double curTime(); //static const unsigned char mmcStopMsg[] = { 0x7f, 0x7f, 0x06, 0x01 }; const char* seqMsgList[] = { - "SEQM_ADD_TRACK", "SEQM_REMOVE_TRACK", "SEQM_CHANGE_TRACK", "SEQM_MOVE_TRACK", + "SEQM_ADD_TRACK", "SEQM_REMOVE_TRACK", //"SEQM_CHANGE_TRACK", + "SEQM_MOVE_TRACK", "SEQM_ADD_PART", "SEQM_REMOVE_PART", "SEQM_CHANGE_PART", "SEQM_ADD_EVENT", "SEQM_REMOVE_EVENT", "SEQM_CHANGE_EVENT", "SEQM_ADD_TEMPO", "SEQM_SET_TEMPO", "SEQM_REMOVE_TEMPO", "SEQM_ADD_SIG", "SEQM_REMOVE_SIG", diff --git a/muse2/muse/audio.h b/muse2/muse/audio.h index 3c4eb17d..a81498a6 100644 --- a/muse2/muse/audio.h +++ b/muse2/muse/audio.h @@ -55,7 +55,8 @@ class Track; //--------------------------------------------------------- enum { - SEQM_ADD_TRACK, SEQM_REMOVE_TRACK, SEQM_CHANGE_TRACK, SEQM_MOVE_TRACK, + SEQM_ADD_TRACK, SEQM_REMOVE_TRACK, //SEQM_CHANGE_TRACK, + SEQM_MOVE_TRACK, SEQM_ADD_PART, SEQM_REMOVE_PART, SEQM_CHANGE_PART, SEQM_ADD_EVENT, SEQM_REMOVE_EVENT, SEQM_CHANGE_EVENT, SEQM_ADD_TEMPO, SEQM_SET_TEMPO, SEQM_REMOVE_TEMPO, SEQM_ADD_SIG, SEQM_REMOVE_SIG, @@ -221,7 +222,7 @@ class Audio { void msgRemoveTrack(Track*, bool u = true); void msgRemoveTracks(); - void msgChangeTrack(Track* oldTrack, Track* newTrack, bool u = true); + //void msgChangeTrack(Track* oldTrack, Track* newTrack, bool u = true); void msgMoveTrack(int idx1, int dx2, bool u = true); void msgAddPart(Part*, bool u = true); void msgRemovePart(Part*, bool u = true); diff --git a/muse2/muse/audiotrack.cpp b/muse2/muse/audiotrack.cpp index aceacc75..e542deec 100644 --- a/muse2/muse/audiotrack.cpp +++ b/muse2/muse/audiotrack.cpp @@ -93,7 +93,6 @@ void cacheJackRouteNames() //--------------------------------------------------------- AudioTrack::AudioTrack(TrackType t) -//AudioTrack::AudioTrack(TrackType t, int num_out_bufs) : Track(t) { //_totalOutChannels = num_out_bufs; // Is either parameter-default MAX_CHANNELS, or custom value passed (used by syntis). @@ -111,7 +110,6 @@ AudioTrack::AudioTrack(TrackType t) addController(new CtrlList(AC_PAN, "Pan", -1.0, 1.0, VAL_LINEAR)); addController(new CtrlList(AC_MUTE,"Mute",0.0,1.0, VAL_LINEAR, true /*dont show in arranger */)); - // Changed by Tim. p3.3.15 //outBuffers = new float*[MAX_CHANNELS]; //for (int i = 0; i < MAX_CHANNELS; ++i) // outBuffers[i] = new float[MusEGlobal::segmentSize]; @@ -125,7 +123,6 @@ AudioTrack::AudioTrack(TrackType t) //for (int i = 0; i < MAX_CHANNELS; ++i) // *(outBuffers + i) = sizeof(float) * MusEGlobal::segmentSize * i; - // p3.3.38 // Easy way, less desirable... Start out with enough for MAX_CHANNELS. Then multi-channel syntis can re-allocate, // via a call to (a modified!) setChannels(). // Hard way, more desirable... Creating a synti instance passes the total channels to this constructor, overriding MAX_CHANNELS. @@ -142,71 +139,181 @@ AudioTrack::AudioTrack(TrackType t) setVolume(1.0); } -//AudioTrack::AudioTrack(const AudioTrack& t) -// : Track(t) -AudioTrack::AudioTrack(const AudioTrack& t, bool cloneParts) - : Track(t, cloneParts) +AudioTrack::AudioTrack(const AudioTrack& t, int flags) + : Track(t, flags) { - _totalOutChannels = t._totalOutChannels; // Is either MAX_CHANNELS, or custom value (used by syntis). _processed = false; _haveData = false; - _sendMetronome = t._sendMetronome; - _controller = t._controller; - _prefader = t._prefader; - _auxSend = t._auxSend; - _efxPipe = new Pipeline(*(t._efxPipe)); - _automationType = t._automationType; - _inRoutes = t._inRoutes; - _outRoutes = t._outRoutes; - // Changed by Tim. p3.3.15 - //outBuffers = new float*[MAX_CHANNELS]; - //for (int i = 0; i < MAX_CHANNELS; ++i) - // outBuffers[i] = new float[MusEGlobal::segmentSize]; - //for (int i = 0; i < MAX_CHANNELS; ++i) - // posix_memalign((void**)(outBuffers + i), 16, sizeof(float) * MusEGlobal::segmentSize); + _efxPipe = new Pipeline(); // Start off with a new pipeline. - // p3.3.38 - int chans = _totalOutChannels; - // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. - if(chans < MAX_CHANNELS) - chans = MAX_CHANNELS; - outBuffers = new float*[chans]; - for (int i = 0; i < chans; ++i) - posix_memalign((void**)&outBuffers[i], 16, sizeof(float) * MusEGlobal::segmentSize); + // Don't allocate outBuffers here. Let internal_assign() call setTotalOutChannels to set them up. + outBuffers = 0; + _totalOutChannels = 0; + // This is only set by multi-channel syntis... + _totalInChannels = 0; bufferPos = MAXINT; - _recFile = t._recFile; + + //_recFile = t._recFile; + _recFile = NULL; + + internal_assign(t, flags | ASSIGN_PROPERTIES); } +void AudioTrack::internal_assign(const Track& t, int flags) +{ + if(t.isMidiTrack()) + return; + + const AudioTrack& at = (const AudioTrack&)t; + + if(flags & ASSIGN_PROPERTIES) + { + _sendMetronome = at._sendMetronome; + _prefader = at._prefader; + _auxSend = at._auxSend; + _automationType = at._automationType; + + if(!(flags & ASSIGN_STD_CTRLS)) + { + _controller.clearDelete(); + for(ciCtrlList icl = at._controller.begin(); icl != at._controller.end(); ++icl) + { + CtrlList* cl = icl->second; + // Copy all built-in controllers (id below AC_PLUGIN_CTL_BASE), but not plugin controllers. + if(cl->id() >= AC_PLUGIN_CTL_BASE) + continue; + CtrlList* new_cl = new CtrlList(); + new_cl->assign(*cl, CtrlList::ASSIGN_PROPERTIES); // Don't copy values. + addController(new_cl); + } + } + + // This will set up or reallocate the outBuffers. + setTotalOutChannels(at._totalOutChannels); + + // This is only set by multi-channel syntis... + //_totalInChannels = 0; + //_totalInChannels = t._totalInChannels; + setTotalInChannels(at._totalInChannels); + + setChannels(at.channels()); // Set track channels (max 2). + + //bufferPos = MAXINT; + + //_recFile = at._recFile; + //_recFile = NULL; + } + + if(flags & ASSIGN_PLUGINS) + { + delete _efxPipe; + _efxPipe = new Pipeline(*(at._efxPipe)); // Make copies of the plugins. + } + + if(flags & (ASSIGN_STD_CTRLS | ASSIGN_PLUGIN_CTRLS)) + { + _controller.clearDelete(); + for(ciCtrlList icl = at._controller.begin(); icl != at._controller.end(); ++icl) + { + CtrlList* cl = icl->second; + // Discern between built-in controllers (id below AC_PLUGIN_CTL_BASE), and plugin controllers. + if(cl->id() >= AC_PLUGIN_CTL_BASE) + { + if(!(flags & ASSIGN_PLUGIN_CTRLS)) + continue; + } + else if(!(flags & ASSIGN_STD_CTRLS)) + continue; + + CtrlList* new_cl = new CtrlList(*cl); // Let copy constructor handle the rest. Copy values. + addController(new_cl); + } + } + + // FIXME: May get "addRoute: src track route already exists" when say, + // an audio output and wave track are selected just because + // of the redundancy (wave track wants to connect to output by default). + if(flags & ASSIGN_ROUTES) + { + for(ciRoute ir = at._inRoutes.begin(); ir != at._inRoutes.end(); ++ir) + { + // Defer all Jack routes to Audio Input and Output copy constructors or assign ! + if(ir->type == Route::JACK_ROUTE) + continue; + // Amazingly, this single line seems to work. + MusEGlobal::audio->msgAddRoute(*ir, Route(this, ir->channel, ir->channels)); + } + + for(ciRoute ir = at._outRoutes.begin(); ir != at._outRoutes.end(); ++ir) + { + // Defer all Jack routes to Audio Input and Output copy constructors or assign ! + if(ir->type == Route::JACK_ROUTE) + continue; + // Amazingly, this single line seems to work. + MusEGlobal::audio->msgAddRoute(Route(this, ir->channel, ir->channels), *ir); + } + } + else if(flags & ASSIGN_DEFAULT_ROUTES) + { + // + // add default route to master + // + OutputList* ol = MusEGlobal::song->outputs(); + if (!ol->empty()) { + AudioOutput* ao = ol->front(); + switch(type()) { + //case Track::MIDI: + //case Track::DRUM: + //case Track::AUDIO_OUTPUT: + // break; + + case Track::WAVE: + //case Track::AUDIO_GROUP: + case Track::AUDIO_AUX: + //case Track::AUDIO_INPUT: + //case Track::AUDIO_SOFTSYNTH: + MusEGlobal::audio->msgAddRoute(Route(this, -1), Route(ao, -1)); + //updateFlags |= SC_ROUTE; + break; + // It should actually never get here now, but just in case. + case Track::AUDIO_SOFTSYNTH: + MusEGlobal::audio->msgAddRoute(Route(this, 0, channels()), Route(ao, 0, channels())); + //updateFlags |= SC_ROUTE; + break; + default: + break; + } + } + } + +} + +void AudioTrack::assign(const Track& t, int flags) +{ + Track::assign(t, flags); + internal_assign(t, flags); +} + AudioTrack::~AudioTrack() { delete _efxPipe; - //for (int i = 0; i < MAX_CHANNELS; ++i) - // delete[] outBuffers[i]; - //delete[] outBuffers; - - // p3.3.15 - //for(int i = 0; i < MAX_CHANNELS; ++i) - //{ - // if(outBuffers[i]) - // free(outBuffers[i]); - //} - // p3.3.38 int chans = _totalOutChannels; // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. if(chans < MAX_CHANNELS) chans = MAX_CHANNELS; - for(int i = 0; i < chans; ++i) + if(outBuffers) { - if(outBuffers[i]) - free(outBuffers[i]); + for(int i = 0; i < chans; ++i) + { + if(outBuffers[i]) + free(outBuffers[i]); + } + delete[] outBuffers; } - delete[] outBuffers; - - for(iCtrlList i = _controller.begin(); i != _controller.end(); ++i) - delete i->second; + _controller.clearDelete(); } //--------------------------------------------------------- @@ -1028,8 +1135,7 @@ bool AudioTrack::readProperties(Xml& xml, const QString& tag) //PluginI* p = 0; PluginIBase* p = 0; bool ctlfound = false; - //int m = l->id() & AC_PLUGIN_CTL_ID_MASK; - unsigned m = l->id() & AC_PLUGIN_CTL_ID_MASK; // p4.0.21 + unsigned m = l->id() & AC_PLUGIN_CTL_ID_MASK; int n = (l->id() >> AC_PLUGIN_CTL_BASE_POW) - 1; if(n >= 0 && n < PipelineDepth) { @@ -1195,8 +1301,7 @@ void AudioTrack::mapRackPluginsToControllers() // Ignore volume, pan, mute etc. if(id < AC_PLUGIN_CTL_BASE) continue; - //int param = id & AC_PLUGIN_CTL_ID_MASK; - unsigned param = id & AC_PLUGIN_CTL_ID_MASK; // p4.0.21 + unsigned param = id & AC_PLUGIN_CTL_ID_MASK; int idx = (id >> AC_PLUGIN_CTL_BASE_POW) - 1; //PluginI* p = (*_efxPipe)[idx]; @@ -1346,14 +1451,50 @@ AudioInput::AudioInput() //setChannels(2); } -//AudioInput::AudioInput(const AudioInput& t) -// : AudioTrack(t) -AudioInput::AudioInput(const AudioInput& t, bool cloneParts) - : AudioTrack(t, cloneParts) - { - for (int i = 0; i < MAX_CHANNELS; ++i) - jackPorts[i] = t.jackPorts[i]; - } +AudioInput::AudioInput(const AudioInput& t, int flags) + : AudioTrack(t, flags) +{ + for (int i = 0; i < MAX_CHANNELS; ++i) + //jackPorts[i] = t.jackPorts[i]; + jackPorts[i] = 0; + + // Register ports. + if(MusEGlobal::checkAudioDevice()) + { + for (int i = 0; i < channels(); ++i) + { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", _name.toLatin1().constData(), i); + jackPorts[i] = MusEGlobal::audioDevice->registerInPort(buffer, false); + } + } + internal_assign(t, flags); +} + +void AudioInput::assign(const Track& t, int flags) +{ + AudioTrack::assign(t, flags); + internal_assign(t, flags); +} + +void AudioInput::internal_assign(const Track& t, int flags) +{ + if(t.type() != AUDIO_INPUT) + return; + + const AudioInput& at = (const AudioInput&)t; + + if(flags & ASSIGN_ROUTES) + { + for(ciRoute ir = at._inRoutes.begin(); ir != at._inRoutes.end(); ++ir) + { + // Defer all Jack routes to these copy constructors or assign ! + if(ir->type != Route::JACK_ROUTE) + continue; + MusEGlobal::audio->msgAddRoute(*ir, Route(this, ir->channel, ir->channels)); + } + } +} //--------------------------------------------------------- // ~AudioInput @@ -1422,16 +1563,53 @@ AudioOutput::AudioOutput() //setChannels(2); } -//AudioOutput::AudioOutput(const AudioOutput& t) -// : AudioTrack(t) -AudioOutput::AudioOutput(const AudioOutput& t, bool cloneParts) - : AudioTrack(t, cloneParts) - { - for (int i = 0; i < MAX_CHANNELS; ++i) - jackPorts[i] = t.jackPorts[i]; - _nframes = t._nframes; - } +AudioOutput::AudioOutput(const AudioOutput& t, int flags) + : AudioTrack(t, flags) +{ + for (int i = 0; i < MAX_CHANNELS; ++i) + //jackPorts[i] = t.jackPorts[i]; + jackPorts[i] = 0; + //_nframes = t._nframes; + _nframes = 0; + + // Register ports. + if(MusEGlobal::checkAudioDevice()) + { + for (int i = 0; i < channels(); ++i) + { + char buffer[128]; + snprintf(buffer, 128, "%s-%d", _name.toLatin1().constData(), i); + jackPorts[i] = MusEGlobal::audioDevice->registerOutPort(buffer, false); + } + } + internal_assign(t, flags); +} + +void AudioOutput::assign(const Track& t, int flags) +{ + AudioTrack::assign(t, flags); + internal_assign(t, flags); +} +void AudioOutput::internal_assign(const Track& t, int flags) +{ + if(t.type() != AUDIO_OUTPUT) + return; + + const AudioOutput& at = (const AudioOutput&)t; + + if(flags & ASSIGN_ROUTES) + { + for(ciRoute ir = at._outRoutes.begin(); ir != at._outRoutes.end(); ++ir) + { + // Defer all Jack routes to these copy constructors or assign ! + if(ir->type != Route::JACK_ROUTE) + continue; + MusEGlobal::audio->msgAddRoute(Route(this, ir->channel, ir->channels), *ir); + } + } +} + //--------------------------------------------------------- // ~AudioOutput //--------------------------------------------------------- @@ -1548,7 +1726,6 @@ AudioAux::AudioAux() { //_channels = 0; //setChannels(2); - // Changed by Tim. p3.3.15 //for (int i = 0; i < MAX_CHANNELS; ++i) // buffer[i] = (i < channels()) ? new float[MusEGlobal::segmentSize] : 0; for(int i = 0; i < MAX_CHANNELS; ++i) @@ -1560,13 +1737,27 @@ AudioAux::AudioAux() } } +AudioAux::AudioAux(const AudioAux& t, int flags) + : AudioTrack(t, flags) +{ + //_channels = 0; + //setChannels(2); + //for (int i = 0; i < MAX_CHANNELS; ++i) + // buffer[i] = (i < channels()) ? new float[MusEGlobal::segmentSize] : 0; + for(int i = 0; i < MAX_CHANNELS; ++i) + { + if(i < channels()) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * MusEGlobal::segmentSize); + else + buffer[i] = 0; + } +} //--------------------------------------------------------- // AudioAux //--------------------------------------------------------- AudioAux::~AudioAux() { - // Changed by Tim. p3.3.15 //for (int i = 0; i < channels(); ++i) // delete[] buffer[i]; for (int i = 0; i < MAX_CHANNELS; ++i) { @@ -1657,7 +1848,6 @@ void AudioAux::setChannels(int n) { if(n > channels()) { - // Changed by Tim. p3.3.15 //for (int i = channels(); i < n; ++i) // buffer[i] = new float[MusEGlobal::segmentSize]; for(int i = channels(); i < n; ++i) @@ -1665,7 +1855,6 @@ void AudioAux::setChannels(int n) } else if(n < channels()) { - // Changed by Tim. p3.3.15 //for (int i = n; i < channels(); ++i) // delete[] buffer[i]; for(int i = n; i < channels(); ++i) @@ -1704,7 +1893,6 @@ bool AudioTrack::setRecordFlag1(bool f) // recording, the _recFile pointer is made into an event, // then _recFile is made zero before this function is called. QString s = _recFile->path(); - // Added by Tim. p3.3.8 delete _recFile; setRecFile(0); diff --git a/muse2/muse/confmport.cpp b/muse2/muse/confmport.cpp index d45dd370..0acb8f64 100644 --- a/muse2/muse/confmport.cpp +++ b/muse2/muse/confmport.cpp @@ -1162,7 +1162,8 @@ MPConfig::MPConfig(QWidget* parent) instrPopup = 0; defpup = 0; //_showAliases = -1; // 0: Show first aliases, if available. Nah, stick with -1: none at first. - _showAliases = 0; // 0: Show first aliases, if available. + //_showAliases = 0; // 0: Show first aliases, if available. + _showAliases = 1; // 0: Show second aliases, if available. QStringList columnnames; columnnames << tr("Port") diff --git a/muse2/muse/ctrl.cpp b/muse2/muse/ctrl.cpp index bc4ce246..f9353860 100644 --- a/muse2/muse/ctrl.cpp +++ b/muse2/muse/ctrl.cpp @@ -56,6 +56,17 @@ void CtrlList::initColor(int i) // CtrlList //--------------------------------------------------------- +CtrlList::CtrlList() + { + _id = 0; + _default = 0.0; + _curVal = 0.0; + _mode = INTERPOLATE; + _dontShow = false; + _visible = false; + initColor(0); + } + CtrlList::CtrlList(int id) { _id = id; @@ -63,11 +74,10 @@ CtrlList::CtrlList(int id) _curVal = 0.0; _mode = INTERPOLATE; _dontShow = false; + _visible = false; initColor(id); } -//--------------------------------------------------------- -// CtrlList -//--------------------------------------------------------- + CtrlList::CtrlList(int id, QString name, double min, double max, CtrlValueType v, bool dontShow) { _id = id; @@ -79,21 +89,36 @@ CtrlList::CtrlList(int id, QString name, double min, double max, CtrlValueType v _max = max; _valueType = v; _dontShow = dontShow; + _visible = false; initColor(id); } + //--------------------------------------------------------- -// CtrlList +// assign //--------------------------------------------------------- -CtrlList::CtrlList() - { - _id = 0; - _default = 0.0; - _curVal = 0.0; - _mode = INTERPOLATE; - _dontShow = false; - initColor(0); - } +void CtrlList::assign(const CtrlList& l, int flags) +{ + if(flags & ASSIGN_PROPERTIES) + { + _id = l._id; + _default = l._default; + _curVal = l._curVal; + _mode = l._mode; + _name = l._name; + _min = l._min; + _max = l._max; + _valueType = l._valueType; + _dontShow = l._dontShow; + _displayColor = l._displayColor; + _visible = l._visible; + } + + if(flags & ASSIGN_VALUES) + { + *this = l; // Let the vector assign values. + } +} //--------------------------------------------------------- // value @@ -396,5 +421,5 @@ void CtrlListList::add(CtrlList* vl) // printf("CtrlListList(%p)::add(id=%d) size %d\n", this, vl->id(), size()); insert(std::pair(vl->id(), vl)); } - + } // namespace MusECore diff --git a/muse2/muse/ctrl.h b/muse2/muse/ctrl.h index 5e4ee531..83db1063 100644 --- a/muse2/muse/ctrl.h +++ b/muse2/muse/ctrl.h @@ -97,7 +97,7 @@ typedef std::map >::const_iterator ciCtrl; class CtrlList : public std::map > { public: enum Mode { INTERPOLATE, DISCRETE}; - + enum AssignFlags { ASSIGN_PROPERTIES=1, ASSIGN_VALUES=2 }; // Can be or'd together. private: Mode _mode; int _id; @@ -116,6 +116,7 @@ class CtrlList : public std::map > { CtrlList(); CtrlList(int id); CtrlList(int id, QString name, double min, double max, CtrlValueType v, bool dontShow=false); + void assign(const CtrlList& l, int flags); Mode mode() const { return _mode; } void setMode(Mode m) { _mode = m; } @@ -162,6 +163,12 @@ typedef std::map >::const_iterator ciCtrlList; class CtrlListList : public std::map > { public: void add(CtrlList* vl); + void clearDelete() { + for(iCtrlList i = begin(); i != end(); ++i) + delete i->second; + clear(); + } + iCtrlList find(int id) { return std::map >::find(id); } diff --git a/muse2/muse/driver/alsamidi.cpp b/muse2/muse/driver/alsamidi.cpp index 2c6f9468..740de1fb 100644 --- a/muse2/muse/driver/alsamidi.cpp +++ b/muse2/muse/driver/alsamidi.cpp @@ -792,8 +792,9 @@ bool initMidiAlsa() const char* cname = snd_seq_client_info_get_name(cinfo); //printf( "ALSA client name: %s\n", cname); - // Put Midi Through and user clients after others. Insert other unwanted clients here: // p4.0.41 - if( !(snd_seq_client_info_get_type(cinfo) == SND_SEQ_USER_CLIENT || strcmp("Midi Through", cname) == 0) ) + bool is_thru = (strcmp("Midi Through", cname) == 0); + // Put Midi Through and user clients after others. Insert other unwanted clients here: // p4.0.41 + if( !(snd_seq_client_info_get_type(cinfo) == SND_SEQ_USER_CLIENT || is_thru) ) continue; snd_seq_port_info_t *pinfo; @@ -820,6 +821,8 @@ bool initMidiAlsa() if (capability & inCap) flags |= 2; dev->setrwFlags(flags); + if(is_thru) // Don't auto-open Midi Through. + dev->setOpenFlags(0); if (MusEGlobal::debugMsg) printf("ALSA port add: <%s>, %d:%d flags %d 0x%0x\n", snd_seq_port_info_get_name(pinfo), diff --git a/muse2/muse/evdata.h b/muse2/muse/evdata.h index 4700e20a..333a5e2d 100644 --- a/muse2/muse/evdata.h +++ b/muse2/muse/evdata.h @@ -58,8 +58,9 @@ class EvData { return *this; if (--(*refCount) == 0) { delete refCount; - delete[] data; - } + if(data) + delete[] data; + } data = ed.data; dataLen = ed.dataLen; refCount = ed.refCount; @@ -69,9 +70,17 @@ class EvData { ~EvData() { if (--(*refCount) == 0) { - delete[] data; - delete refCount; - } + if(data) + { + delete[] data; + data = 0; + } + if(refCount) + { + delete refCount; + refCount = 0; + } + } } void setData(const unsigned char* p, int l) { if(data) diff --git a/muse2/muse/mididev.cpp b/muse2/muse/mididev.cpp index 3bec7716..f7686e18 100644 --- a/muse2/muse/mididev.cpp +++ b/muse2/muse/mididev.cpp @@ -92,8 +92,8 @@ void initMidiDevices() void MidiDevice::init() { - _readEnable = false; - _writeEnable = false; + _readEnable = false; + _writeEnable = false; _rwFlags = 3; _openFlags = 3; _port = -1; diff --git a/muse2/muse/mididev.h b/muse2/muse/mididev.h index e2eab0b1..57c96090 100644 --- a/muse2/muse/mididev.h +++ b/muse2/muse/mididev.h @@ -56,6 +56,7 @@ class MidiDevice { int _openFlags; // configured open flags bool _readEnable; // set when opened/closed. bool _writeEnable; // + //int _sysexWriteChunk; //int _sysexReadChunk; //bool _sysexWritingChunks; diff --git a/muse2/muse/mixer/amixer.cpp b/muse2/muse/mixer/amixer.cpp index d03cc81e..d9513a47 100644 --- a/muse2/muse/mixer/amixer.cpp +++ b/muse2/muse/mixer/amixer.cpp @@ -149,7 +149,8 @@ bool ScrollArea::viewportEvent(QEvent* event) if(event->type() == QEvent::LayoutRequest) emit layoutRequest(); - return false; + //return false; + return true; } //--------------------------------------------------------- @@ -219,7 +220,7 @@ AudioMixerApp::AudioMixerApp(QWidget* parent, MusEGlobal::MixerConfig* c) ///view = new QScrollArea(); view = new ScrollArea(); - view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); +// view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setCentralWidget(view); central = new QWidget(view); diff --git a/muse2/muse/mixer/strip.cpp b/muse2/muse/mixer/strip.cpp index e8b52887..c6e79f17 100644 --- a/muse2/muse/mixer/strip.cpp +++ b/muse2/muse/mixer/strip.cpp @@ -316,11 +316,15 @@ void Strip::mousePressEvent(QMouseEvent* ev) if (!act) { delete menu; + QFrame::mousePressEvent(ev); return; } MusEGlobal::song->removeTrack0(track); MusEGlobal::audio->msgUpdateSoloStates(); + ev->accept(); + return; } + QFrame::mousePressEvent(ev); } diff --git a/muse2/muse/node.cpp b/muse2/muse/node.cpp index b6b40738..20440b45 100644 --- a/muse2/muse/node.cpp +++ b/muse2/muse/node.cpp @@ -1851,12 +1851,15 @@ void AudioTrack::setTotalOutChannels(int num) // Number of allocated buffers is always MAX_CHANNELS or more, even if _totalOutChannels is less. if(chans < MAX_CHANNELS) chans = MAX_CHANNELS; - for(int i = 0; i < chans; ++i) - { - if(outBuffers[i]) - free(outBuffers[i]); - } - delete[] outBuffers; + if(outBuffers) + { + for(int i = 0; i < chans; ++i) + { + if(outBuffers[i]) + free(outBuffers[i]); + } + delete[] outBuffers; + } _totalOutChannels = num; chans = num; diff --git a/muse2/muse/osc.cpp b/muse2/muse/osc.cpp index 7daeb9ff..7bdc0b00 100644 --- a/muse2/muse/osc.cpp +++ b/muse2/muse/osc.cpp @@ -61,8 +61,12 @@ #include "globals.h" #include "globaldefs.h" +#endif // OSC_SUPPORT + namespace MusECore { +#ifdef OSC_SUPPORT + static lo_server_thread serverThread = 0; static char* url = 0; static bool oscServerRunning = false; diff --git a/muse2/muse/plugin.cpp b/muse2/muse/plugin.cpp index e7e5c1f8..ed3a8655 100644 --- a/muse2/muse/plugin.cpp +++ b/muse2/muse/plugin.cpp @@ -1300,7 +1300,6 @@ Plugin* PluginList::find(const QString& file, const QString& name) Pipeline::Pipeline() : std::vector() { - // Added by Tim. p3.3.15 for (int i = 0; i < MAX_CHANNELS; ++i) posix_memalign((void**)(buffer + i), 16, sizeof(float) * MusEGlobal::segmentSize); @@ -1308,6 +1307,21 @@ Pipeline::Pipeline() push_back(0); } +//--------------------------------------------------------- +// Pipeline copy constructor +//--------------------------------------------------------- + +Pipeline::Pipeline(const Pipeline& /*p*/) + : std::vector() + { + for (int i = 0; i < MAX_CHANNELS; ++i) + posix_memalign((void**)(buffer + i), 16, sizeof(float) * MusEGlobal::segmentSize); + + // TODO: Copy plug-ins ! + for (int i = 0; i < PipelineDepth; ++i) + push_back(0); + } + //--------------------------------------------------------- // ~Pipeline //--------------------------------------------------------- @@ -1316,6 +1330,7 @@ Pipeline::~Pipeline() { removeAll(); for (int i = 0; i < MAX_CHANNELS; ++i) + if(buffer[i]) ::free(buffer[i]); } diff --git a/muse2/muse/plugin.h b/muse2/muse/plugin.h index 717dc281..719db108 100644 --- a/muse2/muse/plugin.h +++ b/muse2/muse/plugin.h @@ -439,11 +439,11 @@ class PluginI : public PluginIBase { class Pipeline : public std::vector { float* buffer[MAX_CHANNELS]; - + public: Pipeline(); + Pipeline(const Pipeline&); ~Pipeline(); - void insert(PluginI* p, int index); void remove(int index); void removeAll(); diff --git a/muse2/muse/seqmsg.cpp b/muse2/muse/seqmsg.cpp index 39dcc53c..abdebda7 100644 --- a/muse2/muse/seqmsg.cpp +++ b/muse2/muse/seqmsg.cpp @@ -879,13 +879,14 @@ void Audio::msgRemoveTracks() } +/* //--------------------------------------------------------- // msgChangeTrack // oldTrack - copy of the original track befor modification // newTrack - modified original track //--------------------------------------------------------- -void Audio::msgChangeTrack(Track* oldTrack, Track* newTrack, bool doUndoFlag) +void Audio::msgChangeTrack(Track* oldTrack, Track* newTrack, bool doUndoFlag) { AudioMsg msg; msg.id = SEQM_CHANGE_TRACK; @@ -893,7 +894,8 @@ void Audio::msgChangeTrack(Track* oldTrack, Track* newTrack, bool doUndoFlag) msg.p2 = newTrack; sendMessage(&msg, doUndoFlag); } - +*/ + //--------------------------------------------------------- // msgMoveTrack // move track idx1 to slot idx2 diff --git a/muse2/muse/song.cpp b/muse2/muse/song.cpp index 8b8f6e15..97a4d7a1 100644 --- a/muse2/muse/song.cpp +++ b/muse2/muse/song.cpp @@ -31,6 +31,7 @@ #include #include #include +#include #include #include #include @@ -56,6 +57,7 @@ #include "sync.h" #include "midictrl.h" #include "menutitleitem.h" +#include "tracks_duplicate.h" #include "midi.h" ///#include "sig.h" #include "al/sig.h" @@ -374,6 +376,165 @@ Track* Song::addTrack(Undo& operations, Track::TrackType type, Track* insertAt) return track; } +//--------------------------------------------------------- +// duplicateTracks +// Called from GUI context +//--------------------------------------------------------- + +void Song::duplicateTracks() +{ + // Make a temporary copy. + TrackList tl = _tracks; + + int audio_found = 0; + int midi_found = 0; + int drum_found = 0; + for(iTrack it = tl.begin(); it != tl.end(); ++it) + if((*it)->selected()) + { + Track::TrackType type = (*it)->type(); + // TODO: Handle synths. p4.0.47 + if(type == Track::AUDIO_SOFTSYNTH) + continue; + + if(type == Track::DRUM) + //if(track->isDrumTrack()) // For Flo later with new drum tracks. + ++drum_found; + else + if(type == Track::MIDI) + ++midi_found; + else + ++audio_found; + } + + if(audio_found == 0 && midi_found == 0 && drum_found == 0) + return; + + + MusEGui::DuplicateTracksDialog* dlg = new MusEGui::DuplicateTracksDialog(audio_found, midi_found, drum_found); + + int rv = dlg->exec(); + if(rv == QDialog::Rejected) + { + delete dlg; + return; + } + + int copies = dlg->copies(); + + int flags = Track::ASSIGN_PROPERTIES; + if(dlg->copyStdCtrls()) + flags |= Track::ASSIGN_STD_CTRLS; + if(dlg->copyPlugins()) + flags |= Track::ASSIGN_PLUGINS; + if(dlg->copyPluginCtrls()) + flags |= Track::ASSIGN_PLUGIN_CTRLS; + if(dlg->allRoutes()) + flags |= Track::ASSIGN_ROUTES; + if(dlg->defaultRoutes()) + flags |= Track::ASSIGN_DEFAULT_ROUTES; + if(dlg->copyParts()) + flags |= Track::ASSIGN_PARTS; + + delete dlg; + + QString track_name; + int idx; + int trackno = tl.size(); + MusEGlobal::song->startUndo(); + for(TrackList::reverse_iterator it = tl.rbegin(); it != tl.rend(); ++it) + { + Track* track = *it; + if(track->selected()) + { + track_name = track->name(); + + for(int cp = 0; cp < copies; ++cp) + { + // There are two ways to copy a track now. Using the copy constructor or using new + assign(). + // Tested: Both ways seem OK. Prefer copy constructors for simplicity. But new + assign() may be + // required for fine-grained control over initializing various track types. + // + + // Set to 0 to use the copy constructor. Set to 1 to use new + assign(). + #if 0 + + Track* new_track = 0; + int lastAuxIdx = _auxs.size(); + switch(track->type()) + { + case Track::AUDIO_SOFTSYNTH: // TODO: Handle synths. p4.0.47 + // ((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + break; + + case Track::MIDI: + new_track = new MidiTrack(); + new_track->setType(Track::MIDI); + break; + case Track::DRUM: + new_track = new MidiTrack(); + new_track->setType(Track::DRUM); + //((MidiTrack*)new_track)->setOutChannel(9); + break; + case Track::WAVE: + new_track = new MusECore::WaveTrack(); + //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + break; + case Track::AUDIO_OUTPUT: + new_track = new AudioOutput(); + break; + case Track::AUDIO_GROUP: + new_track = new AudioGroup(); + //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + break; + case Track::AUDIO_AUX: + new_track = new AudioAux(); + break; + case Track::AUDIO_INPUT: + new_track = new AudioInput(); + //((AudioTrack*)new_track)->addAuxSend(lastAuxIdx); + break; + default: + printf("Song::duplicateTracks: Illegal type %d\n", track->type()); + break; + } + + if(new_track) + { + new_track->assign(*track, flags); + #else + if(track->type() != Track::AUDIO_SOFTSYNTH) // TODO: Handle synths. p4.0.47 + { + Track* new_track = track->clone(flags); + #endif + + //new_track->setDefaultName(track_name); // Handled in class now. + + idx = trackno + cp; + insertTrack1(new_track, idx); + addUndo(MusECore::UndoOp(MusECore::UndoOp::AddTrack, idx, new_track)); + msgInsertTrack(new_track, idx, false); // No undo. + insertTrack3(new_track, idx); + } + } + } + --trackno; + } + + int update_flags = SC_TRACK_INSERTED; + if(flags & (Track::ASSIGN_ROUTES | Track::ASSIGN_DEFAULT_ROUTES)) + update_flags |= SC_ROUTE; + MusEGlobal::song->endUndo(update_flags); + MusEGlobal::audio->msgUpdateSoloStates(); + + //if (t->isVisible()) + //{ + ////deselectTracks(); + //t->setSelected(true); + ////update(SC_SELECTION); + //} +} + //--------------------------------------------------------- // cmdRemoveTrack //--------------------------------------------------------- @@ -415,6 +576,7 @@ void Song::deselectTracks() (*t)->setSelected(false); } +/* //--------------------------------------------------------- // changeTrack // oldTrack - copy of the original track befor modification @@ -430,7 +592,8 @@ void Song::changeTrack(Track* oldTrack, Track* newTrack) addUndo(UndoOp(UndoOp::ModifyTrack, idx, oldTrack, newTrack)); updateFlags |= SC_TRACK_MODIFIED; } - +*/ + //--------------------------------------------------------- // addEvent // return true if event was added @@ -1692,7 +1855,8 @@ void Song::rescanAlsaPorts() void Song::endMsgCmd() { if (updateFlags) { - redoList->clear(); // TODO: delete elements in list + //redoList->clear(); // TODO: delete elements in list + redoList->clearDelete(); // p4.0.46 Tim. NOTE Hm, shouldn't this be above? MusEGlobal::undoAction->setEnabled(true); MusEGlobal::redoAction->setEnabled(false); emit songChanged(updateFlags); @@ -1813,9 +1977,9 @@ void Song::processMsg(AudioMsg* msg) //removeTrack2(msg->track); cmdRemoveTrack(msg->track); break; - case SEQM_CHANGE_TRACK: - changeTrack((Track*)(msg->p1), (Track*)(msg->p2)); - break; + //case SEQM_CHANGE_TRACK: + // changeTrack((Track*)(msg->p1), (Track*)(msg->p2)); + // break; case SEQM_ADD_PART: cmdAddPart((Part*)msg->p1); break; @@ -2029,8 +2193,15 @@ void Song::clear(bool signal, bool clear_all) MusEGlobal::tempomap.clear(); AL::sigmap.clear(); MusEGlobal::keymap.clear(); + undoList->clearDelete(); - redoList->clear(); + //redoList->clear(); // Check this - Should we do a clearDelete? IIRC it was OK this way - no clearDelete in case of same items in both lists. + redoList->clearDelete(); // p4.0.46 Tim + if(MusEGlobal::undoAction) + MusEGlobal::undoAction->setEnabled(false); // + if(MusEGlobal::redoAction) + MusEGlobal::redoAction->setEnabled(false); // + _markerList->clear(); pos[0].setTick(0); pos[1].setTick(0); @@ -2120,7 +2291,8 @@ void Song::cleanupForQuit() if(MusEGlobal::debugMsg) printf("deleting undoList, clearing redoList\n"); undoList->clearDelete(); - redoList->clear(); // Check this - Should we do a clearDelete? IIRC it was OK this way - no clearDelete in case of same items in both lists. + //redoList->clear(); // Check this - Should we do a clearDelete? IIRC it was OK this way - no clearDelete in case of same items in both lists. + redoList->clearDelete(); // p4.0.46 Tim _markerList->clear(); diff --git a/muse2/muse/song.h b/muse2/muse/song.h index 2c07396c..ce5aadeb 100644 --- a/muse2/muse/song.h +++ b/muse2/muse/song.h @@ -319,7 +319,7 @@ class Song : public QObject { void removeTrack2(Track* track); void removeTrack3(Track* track); void removeMarkedTracks(); - void changeTrack(Track* oldTrack, Track* newTrack); + //void changeTrack(Track* oldTrack, Track* newTrack); MidiTrack* findTrack(const Part* part) const; Track* findTrack(const QString& name) const; void swapTracks(int i1, int i2); @@ -413,6 +413,7 @@ class Song : public QObject { void seqSignal(int fd); Track* addTrack(Undo& operations, Track::TrackType type, Track* insertAt = 0); Track* addNewTrack(QAction* action, Track* insertAt = 0); + void duplicateTracks(); QString getScriptPath(int id, bool delivered); void populateScriptMenu(QMenu* menuPlugins, QObject* receiver); diff --git a/muse2/muse/structure.cpp b/muse2/muse/structure.cpp index 70b19540..d1d8d3a1 100644 --- a/muse2/muse/structure.cpp +++ b/muse2/muse/structure.cpp @@ -116,15 +116,12 @@ void adjustGlobalLists(Undo& operations, int startPos, int diff) if (tick > startPos) { if (tick + diff < startPos ) { // these ticks should be removed - Marker *oldMarker = new Marker(); - *oldMarker = *m; - markerlist->remove(m); - operations.push_back(UndoOp(UndoOp::ModifyMarker,oldMarker, 0)); + operations.push_back(UndoOp(UndoOp::ModifyMarker, 0, m)); } else { - Marker *oldMarker = new Marker(); - *oldMarker = *m; - m->setTick(tick + diff); - operations.push_back(UndoOp(UndoOp::ModifyMarker,oldMarker, m)); + Marker *newMarker = new Marker(); + *newMarker = *m; + newMarker->setTick(tick + diff); + operations.push_back(UndoOp(UndoOp::ModifyMarker, newMarker, m)); } } } diff --git a/muse2/muse/synth.h b/muse2/muse/synth.h index 497395c0..b9f1dcd2 100644 --- a/muse2/muse/synth.h +++ b/muse2/muse/synth.h @@ -246,8 +246,7 @@ class SynthI : public AudioTrack, public MidiDevice, SynthI(); virtual ~SynthI(); - //SynthI* clone() const { return new SynthI(*this); } - SynthI* clone(bool /*cloneParts*/) const { return new SynthI(*this); } + SynthI* clone(int /*flags*/) const { return new SynthI(*this/*, flags*/); } virtual inline int deviceType() const { return SYNTH_MIDI; } diff --git a/muse2/muse/track.cpp b/muse2/muse/track.cpp index e9aa0cf6..2a57a4e3 100644 --- a/muse2/muse/track.cpp +++ b/muse2/muse/track.cpp @@ -230,67 +230,21 @@ void Track::init() } Track::Track(Track::TrackType t) - { +{ init(); _type = t; - } +} -//Track::Track(const Track& t) -Track::Track(const Track& t, bool cloneParts) - { - _auxRouteCount = t._auxRouteCount; - _nodeTraversed = t._nodeTraversed; - _activity = t._activity; - _lastActivity = t._lastActivity; - _recordFlag = t._recordFlag; - _mute = t._mute; - _solo = t._solo; - _internalSolo = t._internalSolo; - _off = t._off; - _channels = t._channels; - - _volumeEnCtrl = t._volumeEnCtrl; - _volumeEn2Ctrl = t._volumeEn2Ctrl; - _panEnCtrl = t._panEnCtrl; - _panEn2Ctrl = t._panEn2Ctrl; - - _selected = t.selected(); - _y = t._y; - _height = t._height; - _comment = t.comment(); - _name = t.name(); - _type = t.type(); - _locked = t.locked(); - - if(cloneParts) - { - const PartList* pl = t.cparts(); - for (ciPart ip = pl->begin(); ip != pl->end(); ++ip) { - Part* newPart = ip->second->clone(); - newPart->setTrack(this); - _parts.add(newPart); - } - } - else - { - _parts = *(t.cparts()); - // NOTE: We can't do this because of the way clipboard, cloneList, and undoOp::ModifyTrack, work. - // A couple of schemes were conceived to deal with cloneList being invalid, but the best way is - // to not alter the part list here. It's a big headache because: Either the parts in the cloneList - // need to be reliably looked up replaced with the new ones, or the clipboard and cloneList must be cleared. - // Fortunately the ONLY part of muse using this function is track rename (in TrackList and TrackInfo). - // So we can get away with leaving this out: - //for (iPart ip = _parts.begin(); ip != _parts.end(); ++ip) - // ip->second->setTrack(this); - } - +Track::Track(const Track& t, int flags) +{ + internal_assign(t, flags | ASSIGN_PROPERTIES); for (int i = 0; i < MAX_CHANNELS; ++i) { //_meter[i] = 0; //_peak[i] = 0; _meter[i] = 0.0; _peak[i] = 0.0; } - } +} Track::~Track() { @@ -298,47 +252,70 @@ Track::~Track() } //--------------------------------------------------------- -// operator = -// Added by Tim. Parts' track members MUST point to this track, -// not some other track, so simple assignment operator won't do! +// assign //--------------------------------------------------------- -Track& Track::operator=(const Track& t) +void Track::assign(const Track& t, int flags) { - _auxRouteCount = t._auxRouteCount; - _nodeTraversed = t._nodeTraversed; - _activity = t._activity; - _lastActivity = t._lastActivity; - _recordFlag = t._recordFlag; - _mute = t._mute; - _solo = t._solo; - _internalSolo = t._internalSolo; - _off = t._off; - _channels = t._channels; - - _volumeEnCtrl = t._volumeEnCtrl; - _volumeEn2Ctrl = t._volumeEn2Ctrl; - _panEnCtrl = t._panEnCtrl; - _panEn2Ctrl = t._panEn2Ctrl; - - _selected = t.selected(); - _y = t._y; - _height = t._height; - _comment = t.comment(); - _name = t.name(); - _type = t.type(); - _locked = t.locked(); - - _parts = *(t.cparts()); - // NOTE: Can't do this. See comments in copy constructor. - //for (iPart ip = _parts.begin(); ip != _parts.end(); ++ip) - // ip->second->setTrack(this); - - for (int i = 0; i < MAX_CHANNELS; ++i) { - _meter[i] = t._meter[i]; - _peak[i] = t._peak[i]; - } - return *this; + internal_assign(t, flags); +} + +void Track::internal_assign(const Track& t, int flags) +{ + if(flags & ASSIGN_PROPERTIES) + { + _auxRouteCount = t._auxRouteCount; + _nodeTraversed = t._nodeTraversed; + _activity = t._activity; + _lastActivity = t._lastActivity; + _recordFlag = t._recordFlag; + _mute = t._mute; + _solo = t._solo; + _internalSolo = t._internalSolo; + _off = t._off; + _channels = t._channels; + + _volumeEnCtrl = t._volumeEnCtrl; + _volumeEn2Ctrl = t._volumeEn2Ctrl; + _panEnCtrl = t._panEnCtrl; + _panEn2Ctrl = t._panEn2Ctrl; + + _selected = t.selected(); + _y = t._y; + _height = t._height; + _comment = t.comment(); + _type = t.type(); + _locked = t.locked(); + + //_name = t.name(); + _name = t.name() + " #"; + for(int i = 2; true; ++i) + { + QString n; + n.setNum(i); + QString s = _name + n; + Track* track = MusEGlobal::song->findTrack(s); + if(track == 0) + { + // Do not call setName here. Audio Input and Output override it and try to set + // Jack ports, which have not been initialized yet here. Must wait until + // .Audio Input and Output copy constructors or assign are called. + //setName(s); + _name = s; + break; + } + } + } + + if(flags & ASSIGN_PARTS) + { + const PartList* pl = t.cparts(); + for (ciPart ip = pl->begin(); ip != pl->end(); ++ip) { + Part* newPart = ip->second->clone(); + newPart->setTrack(this); + _parts.add(newPart); + } + } } //--------------------------------------------------------- @@ -346,33 +323,42 @@ Track& Track::operator=(const Track& t) // generate unique name for track //--------------------------------------------------------- -void Track::setDefaultName() +void Track::setDefaultName(QString base) { - QString base; - switch(_type) { - case MIDI: - case DRUM: - case WAVE: - base = QString("Track"); - break; - case AUDIO_OUTPUT: - base = QString("Out"); - break; - case AUDIO_GROUP: - base = QString("Group"); - break; - case AUDIO_AUX: - base = QString("Aux"); - break; - case AUDIO_INPUT: - base = QString("Input"); - break; - case AUDIO_SOFTSYNTH: - base = QString("Synth"); - break; - }; - base += " "; - for (int i = 1; true; ++i) { + int num_base = 1; + if(base.isEmpty()) + { + switch(_type) { + case MIDI: + case DRUM: + case WAVE: + base = QString("Track"); + break; + case AUDIO_OUTPUT: + base = QString("Out"); + break; + case AUDIO_GROUP: + base = QString("Group"); + break; + case AUDIO_AUX: + base = QString("Aux"); + break; + case AUDIO_INPUT: + base = QString("Input"); + break; + case AUDIO_SOFTSYNTH: + base = QString("Synth"); + break; + }; + base += " "; + } + else + { + num_base = 2; + base += " #"; + } + + for (int i = num_base; true; ++i) { QString n; n.setNum(i); QString s = base + n; @@ -538,25 +524,103 @@ MidiTrack::MidiTrack() clefType=trebleClef; } -//MidiTrack::MidiTrack(const MidiTrack& mt) -// : Track(mt) -MidiTrack::MidiTrack(const MidiTrack& mt, bool cloneParts) - : Track(mt, cloneParts) +MidiTrack::MidiTrack(const MidiTrack& mt, int flags) + : Track(mt, flags) +{ + _events = new EventList; + _mpevents = new MPEventList; + internal_assign(mt, flags | Track::ASSIGN_PROPERTIES); +} + +void MidiTrack::internal_assign(const Track& t, int flags) +{ + if(!t.isMidiTrack()) + return; + + const MidiTrack& mt = (const MidiTrack&)t; + + if(flags & ASSIGN_PROPERTIES) { - _outPort = mt.outPort(); - _outChannel = mt.outChannel(); - ///_inPortMask = mt.inPortMask(); - ///_inChannelMask = mt.inChannelMask(); - _events = new EventList; - _mpevents = new MPEventList; - transposition = mt.transposition; - velocity = mt.velocity; - delay = mt.delay; - len = mt.len; - compression = mt.compression; - _recEcho = mt.recEcho(); - clefType=trebleClef; + _outPort = mt.outPort(); + _outChannel = mt.outChannel(); + transposition = mt.transposition; + velocity = mt.velocity; + delay = mt.delay; + len = mt.len; + compression = mt.compression; + _recEcho = mt.recEcho(); + clefType = mt.clefType; + } + + // FIXME: May get "addRoute: src track route already exists" when say, + // an audio output and wave track are selected just because + // of the redundancy (wave track wants to connect to output by default). + if(flags & ASSIGN_ROUTES) + { + for(ciRoute ir = mt._inRoutes.begin(); ir != mt._inRoutes.end(); ++ir) + // Amazingly, this single line seems to work. + MusEGlobal::audio->msgAddRoute(*ir, Route(this, ir->channel)); + + for(ciRoute ir = mt._outRoutes.begin(); ir != mt._outRoutes.end(); ++ir) + // Amazingly, this single line seems to work. + MusEGlobal::audio->msgAddRoute(Route(this, ir->channel), *ir); } + else if(flags & ASSIGN_DEFAULT_ROUTES) + { + // Add default track <-> midiport routes. + int c, cbi, ch; + bool defOutFound = false; /// TODO: Remove this if and when multiple output routes supported. + for(int i = 0; i < MIDI_PORTS; ++i) + { + MidiPort* mp = &MusEGlobal::midiPorts[i]; + + if(mp->device()) // Only if device is valid. + { + c = mp->defaultInChannels(); + if(c) + { + MusEGlobal::audio->msgAddRoute(Route(i, c), Route(this, c)); + //updateFlags |= SC_ROUTE; + } + } + + if(!defOutFound) /// + { + c = mp->defaultOutChannels(); + if(c) + { + + /// TODO: Switch if and when multiple output routes supported. + #if 0 + MusEGlobal::audio->msgAddRoute(Route(this, c), Route(i, c)); + //updateFlags |= SC_ROUTE; + #else + for(ch = 0; ch < MIDI_CHANNELS; ++ch) + { + cbi = 1 << ch; + if(c & cbi) + { + defOutFound = true; + _outPort = i; + if(type() != Track::DRUM) // Leave drum tracks at channel 10. + _outChannel = ch; + //updateFlags |= SC_ROUTE; + break; + } + } + #endif + } + } + } + } + +} + +void MidiTrack::assign(const Track& t, int flags) +{ + Track::assign(t, flags); + internal_assign(t, flags); +} MidiTrack::~MidiTrack() { diff --git a/muse2/muse/track.h b/muse2/muse/track.h index 04cf71c2..b887ff52 100644 --- a/muse2/muse/track.h +++ b/muse2/muse/track.h @@ -57,6 +57,8 @@ class Track { MIDI=0, DRUM, WAVE, AUDIO_OUTPUT, AUDIO_INPUT, AUDIO_GROUP, AUDIO_AUX, AUDIO_SOFTSYNTH }; + enum AssignFlags { + ASSIGN_PROPERTIES=1, ASSIGN_PARTS=2, ASSIGN_PLUGINS=4, ASSIGN_STD_CTRLS=8, ASSIGN_PLUGIN_CTRLS=16, ASSIGN_ROUTES=32, ASSIGN_DEFAULT_ROUTES=64 }; private: TrackType _type; QString _comment; @@ -64,6 +66,7 @@ class Track { PartList _parts; void init(); + void internal_assign(const Track&, int flags); protected: static unsigned int _soloRefCnt; @@ -104,10 +107,10 @@ class Track { public: Track(TrackType); - //Track(const Track&); - Track(const Track&, bool cloneParts); + Track(const Track&, int flags); virtual ~Track(); - virtual Track& operator=(const Track& t); + //virtual Track& operator=(const Track& t); + virtual void assign(const Track&, int flags); static const char* _cname[]; @@ -159,8 +162,7 @@ class Track { virtual void write(int, Xml&) const = 0; virtual Track* newTrack() const = 0; - //virtual Track* clone() const = 0; - virtual Track* clone(bool CloneParts) const = 0; + virtual Track* clone(int flags) const = 0; virtual bool setRecordFlag1(bool f) = 0; virtual void setRecordFlag2(bool f) = 0; @@ -199,7 +201,7 @@ class Track { void resetMeter(); bool readProperty(Xml& xml, const QString& tag); - void setDefaultName(); + void setDefaultName(QString base = QString()); int channels() const { return _channels; } virtual void setChannels(int n); bool isMidiTrack() const { return type() == MIDI || type() == DRUM; } @@ -230,13 +232,15 @@ class MidiTrack : public Track { MPEventList* _mpevents; // tmp Events druring recording static bool _isVisible; clefTypes clefType; + void internal_assign(const Track&, int flags); public: MidiTrack(); - //MidiTrack(const MidiTrack&); - MidiTrack(const MidiTrack&, bool cloneParts); + MidiTrack(const MidiTrack&, int flags); virtual ~MidiTrack(); + virtual void assign(const Track&, int flags); + void init(); virtual AutomationType automationType() const; virtual void setAutomationType(AutomationType); @@ -258,9 +262,9 @@ class MidiTrack : public Track { virtual void write(int, Xml&) const; virtual int height() const; + virtual MidiTrack* newTrack() const { return new MidiTrack(); } - //virtual MidiTrack* clone() const { return new MidiTrack(*this); } - virtual MidiTrack* clone(bool cloneParts) const { return new MidiTrack(*this, cloneParts); } + virtual MidiTrack* clone(int flags) const { return new MidiTrack(*this, flags); } virtual Part* newPart(Part*p=0, bool clone=false); void setOutChannel(int i) { _outChannel = i; } @@ -324,6 +328,7 @@ class AudioTrack : public Track { bool _sendMetronome; AutomationType _automationType; Pipeline* _efxPipe; + void internal_assign(const Track&, int flags); protected: float** outBuffers; @@ -341,10 +346,14 @@ class AudioTrack : public Track { AudioTrack(TrackType t); //AudioTrack(TrackType t, int num_out_bufs = MAX_CHANNELS); - //AudioTrack(const AudioTrack&); - AudioTrack(const AudioTrack&, bool cloneParts); + AudioTrack(const AudioTrack&, int flags); virtual ~AudioTrack(); + virtual void assign(const Track&, int flags); + + virtual AudioTrack* clone(int flags) const = 0; + virtual Part* newPart(Part*p=0, bool clone=false); + virtual bool setRecordFlag1(bool f); virtual void setRecordFlag2(bool f); bool prepareRecording(); @@ -362,10 +371,6 @@ class AudioTrack : public Track { void mapRackPluginsToControllers(); void showPendingPluginNativeGuis(); - //virtual AudioTrack* clone() const = 0; - virtual AudioTrack* clone(bool cloneParts) const = 0; - virtual Part* newPart(Part*p=0, bool clone=false); - SndFile* recFile() const { return _recFile; } void setRecFile(SndFile* sf) { _recFile = sf; } @@ -447,14 +452,15 @@ class AudioInput : public AudioTrack { void* jackPorts[MAX_CHANNELS]; virtual bool getData(unsigned, int, unsigned, float**); static bool _isVisible; - + void internal_assign(const Track& t, int flags); + public: AudioInput(); - //AudioInput(const AudioInput&); - AudioInput(const AudioInput&, bool cloneParts); + AudioInput(const AudioInput&, int flags); virtual ~AudioInput(); - //AudioInput* clone() const { return new AudioInput(*this); } - AudioInput* clone(bool cloneParts) const { return new AudioInput(*this, cloneParts); } + + virtual void assign(const Track&, int flags); + AudioInput* clone(int flags) const { return new AudioInput(*this, flags); } virtual AudioInput* newTrack() const { return new AudioInput(); } virtual void read(Xml&); virtual void write(int, Xml&) const; @@ -478,16 +484,16 @@ class AudioOutput : public AudioTrack { float* buffer1[MAX_CHANNELS]; unsigned long _nframes; static bool _isVisible; - float* _monitorBuffer[MAX_CHANNELS]; + void internal_assign(const Track& t, int flags); public: AudioOutput(); - //AudioOutput(const AudioOutput&); - AudioOutput(const AudioOutput&, bool cloneParts); + AudioOutput(const AudioOutput&, int flags); virtual ~AudioOutput(); - //AudioOutput* clone() const { return new AudioOutput(*this); } - AudioOutput* clone(bool cloneParts) const { return new AudioOutput(*this, cloneParts); } + + virtual void assign(const Track&, int flags); + AudioOutput* clone(int flags) const { return new AudioOutput(*this, flags); } virtual AudioOutput* newTrack() const { return new AudioOutput(); } virtual void read(Xml&); virtual void write(int, Xml&) const; @@ -516,8 +522,9 @@ class AudioGroup : public AudioTrack { static bool _isVisible; public: AudioGroup() : AudioTrack(AUDIO_GROUP) { } - //AudioGroup* clone() const { return new AudioGroup(*this); } - AudioGroup* clone(bool /*cloneParts*/) const { return new AudioGroup(*this); } + AudioGroup(const AudioGroup& t, int flags) : AudioTrack(t, flags) { } + + AudioGroup* clone(int flags) const { return new AudioGroup(*this, flags); } virtual AudioGroup* newTrack() const { return new AudioGroup(); } virtual void read(Xml&); virtual void write(int, Xml&) const; @@ -536,8 +543,9 @@ class AudioAux : public AudioTrack { static bool _isVisible; public: AudioAux(); - //AudioAux* clone() const { return new AudioAux(*this); } - AudioAux* clone(bool /*cloneParts*/) const { return new AudioAux(*this); } + AudioAux(const AudioAux& t, int flags); + + AudioAux* clone(int flags) const { return new AudioAux(*this, flags); } ~AudioAux(); virtual AudioAux* newTrack() const { return new AudioAux(); } virtual void read(Xml&); @@ -562,11 +570,9 @@ class WaveTrack : public AudioTrack { public: WaveTrack() : AudioTrack(Track::WAVE) { } - //WaveTrack(const WaveTrack& wt) : AudioTrack(wt) {} - WaveTrack(const WaveTrack& wt, bool cloneParts) : AudioTrack(wt, cloneParts) {} + WaveTrack(const WaveTrack& wt, int flags) : AudioTrack(wt, flags) {} - //virtual WaveTrack* clone() const { return new WaveTrack(*this); } - virtual WaveTrack* clone(bool cloneParts) const { return new WaveTrack(*this, cloneParts); } + virtual WaveTrack* clone(int flags) const { return new WaveTrack(*this, flags); } virtual WaveTrack* newTrack() const { return new WaveTrack(); } virtual Part* newPart(Part*p=0, bool clone=false); diff --git a/muse2/muse/undo.cpp b/muse2/muse/undo.cpp index 06c190a2..9cece41c 100644 --- a/muse2/muse/undo.cpp +++ b/muse2/muse/undo.cpp @@ -21,14 +21,16 @@ // //========================================================= -///#include "sig.h" -#include "al/sig.h" // Tim. +//#include "sig.h" +#include "al/sig.h" #include "keyevent.h" #include "undo.h" #include "song.h" #include "globals.h" +#include "audio.h" +#include #include #include @@ -53,7 +55,9 @@ const char* UndoOp::typeName() "AddTempo", "DeleteTempo", "AddSig", "DeleteSig", "AddKey", "DeleteKey", - "SwapTrack", "ModifyClip", "ModifyMarker", + "ModifyTrackName", "ModifyTrackChannel", + "SwapTrack", + "ModifyClip", "ModifyMarker", "ModifySongLen", "DoNothing" }; return name[type]; @@ -88,6 +92,12 @@ void UndoOp::dump() if (part) part->dump(5); break; + case ModifyTrackName: + printf("<%s>-<%s>\n", _oldName, _newName); + break; + case ModifyTrackChannel: + printf("<%d>-<%d>\n", _oldPropValue, _newPropValue); + break; case ModifyEvent: case AddTempo: case DeleteTempo: @@ -101,6 +111,8 @@ void UndoOp::dump() case ModifySongLen: case DoNothing: break; + default: + break; } } @@ -139,7 +151,7 @@ void UndoList::clearDelete() } } break; - case UndoOp::ModifyTrack: + /* case UndoOp::ModifyTrack: if(i->oTrack) { // Prevent delete i->oTrack from crashing. @@ -181,7 +193,8 @@ void UndoList::clearDelete() } } } - break; + break; */ + //case UndoOp::DeletePart: //delete i->oPart; // break; @@ -192,6 +205,14 @@ void UndoList::clearDelete() case UndoOp::ModifyMarker: if (i->copyMarker) delete i->copyMarker; + break; + case UndoOp::ModifyTrackName: + //printf("UndoList::clearDelete ModifyTrackName old:%s new:%s\n", i->_oldName, i->_newName); + if (i->_oldName) + delete i->_oldName; + if (i->_newName) + delete i->_newName; + break; default: break; } @@ -209,8 +230,9 @@ void UndoList::clearDelete() void Song::startUndo() { - redoList->clear(); // added by flo93: redo must be invalidated when - MusEGlobal::redoAction->setEnabled(false); // a new undo is started + //redoList->clear(); // added by flo93: redo must be invalidated when a new undo is started + redoList->clearDelete(); // p4.0.46 Tim + MusEGlobal::redoAction->setEnabled(false); // undoList->push_back(Undo()); updateFlags = 0; @@ -277,8 +299,9 @@ bool Song::applyOperationGroup(Undo& group, bool doUndo) } else { - redoList->clear(); // added by flo93: redo must be invalidated when - MusEGlobal::redoAction->setEnabled(false); // a new undo is started + //redoList->clear(); // added by flo93: redo must be invalidated when a new undo is started + redoList->clearDelete(); // p4.0.46 Tim. + MusEGlobal::redoAction->setEnabled(false); // } return doUndo; @@ -310,9 +333,9 @@ void Song::doUndo2() updateFlags |= SC_TRACK_INSERTED; break; +/* case UndoOp::ModifyTrack: { - // Added by Tim. p3.3.6 //printf("Song::doUndo2 ModifyTrack #1 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().toLatin1().constData(), i->nTrack, i->nTrack->name().toLatin1().constData()); // Unchain the track parts, but don't touch the ref counts. @@ -324,7 +347,6 @@ void Song::doUndo2() // A Track custom assignment operator was added by Tim. *(i->nTrack) = *(i->oTrack); - // Added by Tim. p3.3.6 //printf("Song::doUndo2 ModifyTrack #2 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().toLatin1().constData(), i->nTrack, i->nTrack->name().toLatin1().constData()); // Prevent delete i->oTrack from crashing. @@ -356,7 +378,6 @@ void Song::doUndo2() // Chain the track parts, but don't touch the ref counts. chainTrackParts(i->nTrack, false); - // Added by Tim. p3.3.6 //printf("Song::doUndo2 ModifyTrack #3 oTrack %p %s nTrack %p %s\n", i->oTrack, i->oTrack->name().toLatin1().constData(), i->nTrack, i->nTrack->name().toLatin1().constData()); // Connect and register ports. @@ -384,6 +405,7 @@ void Song::doUndo2() updateFlags |= SC_TRACK_MODIFIED; } break; +*/ /* switch(i->nTrack->type()) @@ -542,6 +564,8 @@ void Song::doUndo2() case UndoOp::ModifyMarker: case UndoOp::DoNothing: break; + default: + break; } } } @@ -566,6 +590,8 @@ void Song::doRedo2() removeTrack2(i->oTrack); updateFlags |= SC_TRACK_REMOVED; break; + +/* case UndoOp::ModifyTrack: { // Unchain the track parts, but don't touch the ref counts. @@ -630,7 +656,8 @@ void Song::doRedo2() updateFlags |= SC_TRACK_MODIFIED; } break; - +*/ + /* // Prevent delete i->oTrack from crashing. switch(i->oTrack->type()) @@ -783,6 +810,8 @@ void Song::doRedo2() case UndoOp::ModifyMarker: case UndoOp::DoNothing: break; + default: + break; } } } @@ -885,6 +914,24 @@ UndoOp::UndoOp(UndoType type_, const char* changedFile, const char* changeData, endframe = endframe_; } +UndoOp::UndoOp(UndoOp::UndoType type_, Track* track, const char* old_name, const char* new_name) +{ + type = type_; + _renamedTrack = track; + _oldName = new char[strlen(old_name) + 1]; + _newName = new char[strlen(new_name) + 1]; + strcpy(_oldName, old_name); + strcpy(_newName, new_name); +} + +UndoOp::UndoOp(UndoOp::UndoType type_, Track* track, int old_chan, int new_chan) +{ + type = type_; + _propertyTrack = track; + _oldPropValue = old_chan; + _newPropValue = new_chan; +} + void Song::undoOp(UndoOp::UndoType type, const char* changedFile, const char* changeData, int startframe, int endframe) { addUndo(UndoOp(type,changedFile,changeData,startframe,endframe)); @@ -944,9 +991,51 @@ bool Song::doUndo1() } break; + case UndoOp::ModifyTrackName: + i->_renamedTrack->setName(i->_oldName); + updateFlags |= SC_TRACK_MODIFIED; + break; case UndoOp::ModifyClip: MusECore::SndFile::applyUndoFile(i->filename, i->tmpwavfile, i->startframe, i->endframe); break; + case UndoOp::ModifyTrackChannel: + if (i->_propertyTrack->isMidiTrack()) + { + MusECore::MidiTrack* mt = dynamic_cast(i->_propertyTrack); + if (mt == 0 || mt->type() == MusECore::Track::DRUM) + //if (mt == 0 || mt->isDrumTrack()) // For Flo later with new drum tracks. p4.0.46 Tim + break; + if (i->_oldPropValue != mt->outChannel()) + { + //mt->setOutChannel(i->_oldPropValue); + MusEGlobal::audio->msgIdle(true); + //MusEGlobal::audio->msgSetTrackOutChannel(mt, i->_oldPropValue); + mt->setOutChanAndUpdate(i->_oldPropValue); + MusEGlobal::audio->msgIdle(false); + //if (mt->type() == MusECore::MidiTrack::DRUM) {//Change channel on all drum instruments + // for (int i=0; i_oldPropValue; + // } + //updateFlags |= SC_CHANNELS; + MusEGlobal::audio->msgUpdateSoloStates(); + //updateFlags |= SC_MIDI_TRACK_PROP | SC_ROUTE; + updateFlags |= SC_MIDI_TRACK_PROP; + } + } + else + { + if(i->_propertyTrack->type() != MusECore::Track::AUDIO_SOFTSYNTH) + { + MusECore::AudioTrack* at = dynamic_cast(i->_propertyTrack); + if (at == 0) + break; + if (i->_oldPropValue != at->channels()) { + MusEGlobal::audio->msgSetChannels(at, i->_oldPropValue); + updateFlags |= SC_CHANNELS; + } + } + } + break; default: break; @@ -1035,9 +1124,52 @@ bool Song::doRedo1() case UndoOp::DeleteTrack: removeTrack1(i->oTrack); break; + case UndoOp::ModifyTrackName: + i->_renamedTrack->setName(i->_newName); + updateFlags |= SC_TRACK_MODIFIED; + break; case UndoOp::ModifyClip: MusECore::SndFile::applyUndoFile(i->filename, i->tmpwavfile, i->startframe, i->endframe); break; + case UndoOp::ModifyTrackChannel: + if (i->_propertyTrack->isMidiTrack()) + { + MusECore::MidiTrack* mt = dynamic_cast(i->_propertyTrack); + if (mt == 0 || mt->type() == MusECore::Track::DRUM) + //if (mt == 0 || mt->isDrumTrack()) // For Flo later with new drum tracks. p4.0.46 Tim + break; + if (i->_newPropValue != mt->outChannel()) + { + //mt->setOutChannel(i->_newPropValue); + MusEGlobal::audio->msgIdle(true); + //MusEGlobal::audio->msgSetTrackOutChannel(mt, i->_newPropValue); + mt->setOutChanAndUpdate(i->_newPropValue); + MusEGlobal::audio->msgIdle(false); + //if (mt->type() == MusECore::MidiTrack::DRUM) {//Change channel on all drum instruments + // for (int i=0; i_newPropValue; + // } + //updateFlags |= SC_CHANNELS; + MusEGlobal::audio->msgUpdateSoloStates(); + //updateFlags |= SC_MIDI_TRACK_PROP | SC_ROUTE; + updateFlags |= SC_MIDI_TRACK_PROP; + } + } + else + { + if(i->_propertyTrack->type() != MusECore::Track::AUDIO_SOFTSYNTH) + { + MusECore::AudioTrack* at = dynamic_cast(i->_propertyTrack); + if (at == 0) + break; + if (i->_newPropValue != at->channels()) { + MusEGlobal::audio->msgSetChannels(at, i->_newPropValue); + updateFlags |= SC_CHANNELS; + } + } + } + break; + default: break; } diff --git a/muse2/muse/undo.h b/muse2/muse/undo.h index ce73ac9a..61604d6f 100644 --- a/muse2/muse/undo.h +++ b/muse2/muse/undo.h @@ -51,6 +51,7 @@ struct UndoOp { AddTempo, DeleteTempo, AddSig, DeleteSig, AddKey, DeleteKey, + ModifyTrackName, ModifyTrackChannel, SwapTrack, ModifyClip, ModifyMarker, @@ -97,6 +98,16 @@ struct UndoOp { Marker* realMarker; Marker* copyMarker; }; + struct { + Track* _renamedTrack; + char* _oldName; + char* _newName; + }; + struct { + Track* _propertyTrack; + int _oldPropValue; + int _newPropValue; + }; }; Event oEvent; Event nEvent; @@ -118,6 +129,8 @@ struct UndoOp { UndoOp(UndoType type, SigEvent* oevent, SigEvent* nevent); UndoOp(UndoType type, const char* changedFile, const char* changeData, int startframe, int endframe); UndoOp(UndoType type, Marker* copyMarker, Marker* realMarker); + UndoOp(UndoType type, Track* track, const char* old_name, const char* new_name); + UndoOp(UndoType type, Track* track, int old_chan, int new_chan); UndoOp(UndoType type); }; diff --git a/muse2/muse/widgets/CMakeLists.txt b/muse2/muse/widgets/CMakeLists.txt index bf71f51e..0328b89d 100644 --- a/muse2/muse/widgets/CMakeLists.txt +++ b/muse2/muse/widgets/CMakeLists.txt @@ -89,6 +89,7 @@ QT4_WRAP_CPP (widget_mocs tb1.h tempolabel.h tools.h + tracks_duplicate.h # ttoolbar.h ttoolbutton.h unusedwavefiles.h @@ -126,6 +127,7 @@ file (GLOB widgets_ui_files shortcutconfigbase.ui songinfo.ui synthconfigbase.ui + tracks_duplicate_base.ui transformbase.ui unusedwavefiles.ui ) @@ -197,6 +199,7 @@ file (GLOB widgets_source_files tb1.cpp tempolabel.cpp tools.cpp + tracks_duplicate.cpp # ttoolbar.cpp ttoolbutton.cpp unusedwavefiles.cpp diff --git a/muse2/muse/widgets/fdialogbuttons.ui b/muse2/muse/widgets/fdialogbuttons.ui index 24f58e1f..09f9e52d 100644 --- a/muse2/muse/widgets/fdialogbuttons.ui +++ b/muse2/muse/widgets/fdialogbuttons.ui @@ -135,6 +135,9 @@ Songdata + Configuration + + true + @@ -143,9 +146,6 @@ Configuration only Songdata - - true - diff --git a/muse2/muse/widgets/tracks_duplicate.cpp b/muse2/muse/widgets/tracks_duplicate.cpp new file mode 100644 index 00000000..c50554b5 --- /dev/null +++ b/muse2/muse/widgets/tracks_duplicate.cpp @@ -0,0 +1,43 @@ +//========================================================= +// MusE +// Linux Music Editor +// tracks_duplicate.cpp +// (C) Copyright 2011 Tim E. Real (terminator356 on sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#include "tracks_duplicate.h" + +namespace MusEGui { + +DuplicateTracksDialog::DuplicateTracksDialog(bool audio, bool /*midi*/, bool /*drum*/, QWidget* parent) + : QDialog(parent) +{ + setupUi(this); + + //standardCtrlsCheckBox->setEnabled(audio); + //pluginsCheckBox->setEnabled(audio); + //pluginCtrlsCheckBox->setEnabled(audio); + standardCtrlsCheckBox->setVisible(audio); + pluginsCheckBox->setVisible(audio); + pluginCtrlsCheckBox->setVisible(audio); + + connect(okPushButton, SIGNAL(clicked()), this, SLOT(accept())); + connect(cancelPushButton, SIGNAL(clicked()), this, SLOT(reject())); +} + +} // namespace MusEGui \ No newline at end of file diff --git a/muse2/muse/widgets/tracks_duplicate.h b/muse2/muse/widgets/tracks_duplicate.h new file mode 100644 index 00000000..4cef089b --- /dev/null +++ b/muse2/muse/widgets/tracks_duplicate.h @@ -0,0 +1,58 @@ +//========================================================= +// MusE +// Linux Music Editor +// tracks_duplicate.h +// (C) Copyright 2011 Tim E. Real (terminator356 on sourceforge.net) +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; version 2 of +// the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +// +//========================================================= + +#ifndef __TRACKS_DUPLICATE_H__ +#define __TRACKS_DUPLICATE_H__ + +#include "ui_tracks_duplicate_base.h" + +namespace MusEGui { + +class DuplicateTracksDialog : public QDialog, public Ui::DuplicateTracksBase +{ + Q_OBJECT + protected: + + protected slots: + //void accept(); + + public slots: + //int exec(); + + public: + DuplicateTracksDialog(bool audio, bool midi, bool drum, QWidget* parent = 0); + + int copies() const { return copiesSpinBox->value(); } + bool copyStdCtrls() const { return standardCtrlsCheckBox->isChecked(); } + bool copyPlugins() const { return pluginsCheckBox->isChecked(); } + bool copyPluginCtrls() const { return pluginCtrlsCheckBox->isChecked(); } + + bool allRoutes() const { return allRoutesRadioButton->isChecked(); } + bool defaultRoutes() const { return defaultRoutesRadioButton->isChecked(); } + + bool copyParts() const { return copyPartsCheckBox->isChecked(); } +}; + +} // namespace MusEGui + +#endif + diff --git a/muse2/muse/widgets/tracks_duplicate_base.ui b/muse2/muse/widgets/tracks_duplicate_base.ui new file mode 100644 index 00000000..c993e370 --- /dev/null +++ b/muse2/muse/widgets/tracks_duplicate_base.ui @@ -0,0 +1,184 @@ + + + DuplicateTracksBase + + + + 0 + 0 + 231 + 261 + + + + Duplicate tracks + + + + + + + + 1 + + + 100 + + + + + + + Number of copies + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + + + + + Copy all routes + + + true + + + + + + + Default routing + + + + + + + No routes + + + + + + + Qt::Horizontal + + + + + + + Copy parts + + + + + + + Qt::Horizontal + + + + + + + Copy standard controllers (vol, pan) + + + true + + + + + + + Copy effects rack plugins + + + false + + + + + + + Copy plugin controllers + + + false + + + + + + + Qt::Vertical + + + + 20 + 27 + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Ok + + + true + + + + + + + Cancel + + + + + + + + + + diff --git a/muse2/share/locale/muse_sv_SE.ts b/muse2/share/locale/muse_sv_SE.ts index 5c5d4216..e0c6e350 100644 --- a/muse2/share/locale/muse_sv_SE.ts +++ b/muse2/share/locale/muse_sv_SE.ts @@ -1,6 +1,4 @@ - - - + @default @@ -206,104 +204,87 @@ klicka på en part för att Tysta/Avtysta Alla filer (*) - Add Midi Track - Lägg till Midispår + Lägg till Midispår - Add Drum Track - Lägg till Trumspår + Lägg till Trumspår - Add Wave Track - Lägg till Wavespår + Lägg till Wavespår - Add Audio Output - Lägg till Ljudutgång + Lägg till Ljudutgång - Add Audio Group - Lägg till Ljudgrupp + Lägg till Ljudgrupp - Add Audio Input - Lägg till Ljudingång + Lägg till Ljudingång - Add Aux Send - Lägg till Aux-Send + Lägg till Aux-Send eraser sudd - Add Synth - + Lägg till Synth Bar Takt - Route - + Koppling - dest - + källa - name="%1"/ - + namn="%1"/ Velocity Hastighet - Warning: No output devices! - + Varning: Inga utgångsenheter! - Open midi config... - + Öppna midi config... - Empty ports - + Tomma portar - <none> - + <ingen> - channelMask="%1" - + kanal mask="%1" AboutBox - AboutBox - Om + Om Keep On Rocking! @@ -326,28 +307,24 @@ 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. Published under the GNU Public License - + - &Keep On Rocking! - + &Rocka på! - Alt+K - + @@ -384,27 +361,22 @@ Published under the GNU Public License MusE: Utseendeinställningar - Apply Verkställ - Ok - + - Cancel Avbryt - Arranger Arrangerare - Parts Parter @@ -413,67 +385,54 @@ Published under the GNU Public License visa ramar - show names visa namn - show events visa händelser(events) - show Cakewalk Style använd Cakewalkstil - y-stretch - + y-sträck - Events Händelser - note on - + - poly pressure - + - controller - + kontroll - aftertouch - + - pitch bend - + - program change - + - special - + - Background picture Bakgrundsbild @@ -482,19 +441,16 @@ Published under the GNU Public License välj... - show snap grid visa rutnät - Colors Färger - Items - + selected @@ -513,214 +469,156 @@ Published under the GNU Public License dynamisk färgallokering för spåraktivitet i arranger - Style/Fonts Stil/Typsnitt - QT Theme QT-tema - Windows - + Fönster - MusE - + - Metal - + Metall - Norwegian Wood - + Norskt trä - Platinum - + Platina - 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: - + Färgnamn: - Global opacity - + Global genomskinlighet - Font 4 Typsnitt 4 - Font 5 Typsnitt 5 - Palette - Palett + Palett - MusE: Appearance settings - + MusE: Utseende inställningar - add - lägg till + lägg till - remove - ta bort + ta bort - add to palette - lägg till palett + lägg till i palett - B - + - S - + - H - + - V - + - G - + - R - + - clear - + rensa - Style Sheet: - Font 6 - Typsnitt 6 + Typsnitt 6 @@ -1113,22 +1011,19 @@ Published under the GNU Public License Awl::MidiVolEntry - off - av + av - db - + Awl::VolEntry - off - av + av @@ -1156,65 +1051,53 @@ Published under the GNU Public License ClipListEditorBase - MusE: ClipList MusE: Clip-lista - Name Namn - Refs - + Refs - Start - + Start - Len - Längd + Längd - Data - + Data - Clip Properties Clip-egenskaper - Pos: - + Pos: - Len: - + Längd CommentBase - Form1 - + - Track Comment Spår-kommentar - Track 1 Spår 1 @@ -1222,52 +1105,42 @@ Published under the GNU Public License ConfigMidiFileBase - &OK - &Ok + &Ok - &Cancel - &Avbryt + &Avbryt - 0 (single track) - 0 (ett spår) + 0 (ett spår) - 1 (multiple tracks) - 1 (flera spår) + 1 (flera spår) - Format: - 96 - 192 - 384 - Division: - Copyright: @@ -1276,128 +1149,103 @@ Published under the GNU Public License Slå på utbyggt smf-format - MusE: Config Midi File Import/Export - + MusE: Ställ in midifil import/export - Import: - Split tracks into &parts - + Dela spår i &parter - Alt+P - + - Split tracks into parts, or one single part - + Dela spå i parter, eller en enda part - Export: - Enable extended smf format (currently not implemented) - + SLå på utbyggt smf-format (ej implementerat) - Use &2-byte time signatures instead of standard 4 - + Använd &2-byte tidsignaturer istället för standard, 4 - Alt+2 - + - Note: Format 0 uses the FIRST midi track's name/comment in the arranger - + Notera: Foramt 0 använder det FÖRSTA midi spårets namn/kommentar i arrangeraren - Save space by replacing note-offs with &zero velocity note-ons - + Spara utrymme genom att ersätta note-off med note-on med velocity &noll - Alt+Z - + CrescendoBase - MusE: Crescendo/Decrescendo - + - Range - Område + Område - Looped Events - Loopade Händelser + Loopade Händelser - Selected Looped - + Valda loopade - Values - Värden + Värden - Start velocity - + Startvelocity - - % - + - End velocity - + Slutvelocity - Absolute - + Absolut - Relative - + Relativ - OK - + - Cancel - Avbryt + Avbryt @@ -1434,320 +1282,226 @@ Published under the GNU Public License DeicsOnzeGui - - Delete preset - Ta bort preset + Ta bort preset - - - Do you really want to delete %1 ? - Vill du verkligen ta bort %1 ? + Vill du verkligen ta bort %1 ? - - - &Yes - &Ja + &Ja - - - &No - &Nej + &Nej - Save configuration - + Spara konfiguration - - - - - - - - - - Critical Error - + Kritiskt fel - - - - - Cannot open file %1 - + Kan inte öppna fil %1 - - - - - Parsing error for file %1 - + Fel vid parsning av fil %1 - - Load category dialog - + Ladda kategoridialog - Load set dialog - + Ladda set-dialog - Save set dialog - + Spara set-dialog - New category - + Ny kategori - - Delete category - + Ta bort kategori - Load category - + Ladda kategori - Save category - + Spara kategori - Load set - + Ladda set - Save set - + Spara set - Delete set - + Ta bort set - New subcategory - + Ny sub-kategori - - Delete subcategory - + Ta bort sub-kategori - Load subcategory - + Ladda sub-kategori - Save subcategory - + Spara sub-kategori - New preset - Ny preset + Ny preset - Load preset - + Ladda preset - Save preset - + Spara preset - No more category supported - + Ingen fler kategori stöds - You can not add more categories - + Kan inte lägga till fler kategorier - - No category selected - + Ingen kategori vald - - You must first select a category. - + Välj först en kategori. - - - Replace or add - + Ersätt eller lägg till - %1 is supposed to be affected to the hbank number %2, but there is already one on this slot. Do you want to replace it or to add it in the next free slot ? - + %1 påverkas av hbank nummer %s, men det finns redan en i den positionen. +Vill du ersätta den eller lägga till i nästa lediga position? - - - &Replace - &Ersätt + &Ersätt - - - &Add - &Lägg till + &Lägg till - - - Download error - + Nerladdningsfel - There is no more free category slot. - + Finns inga fler lediga kategori-positioner. - Save category dialog - + Spara kategori dialog - No more subcategory supported - + Inga fler sub-kategorier stöds - You can not add more subcategories - + Du kan inte lägga till fler subkategorier - - No subcategory selected - + Ingen subkategori är vald - - You must first select a subcategory. - + Väl först en subkategori. - Load subcategory dialog - + Ladda sub-kategori dialog - %1 is supposed to be affected to the lbank number %2, but there is already one on this slot. Do you want to replace it or to add it in the next free slot ? - + %1 påverkas av lbank nummer %s, men det finns redan en i den positionen. +Vill du ersätta den eller lägga till i nästa lediga position? - There is no more free subcategory slot. - + Finns inga fler lediga sub-kategoripositioner. - Save subcategory dialog - + Spara sub-kategori dialog - No more preset supported - + Inga fler presets stöds - You can not add more presets - + Det går inte lägga till fler presets - - - No preset selected - + Inget preset valt - - - You must first select a preset. - + Välj först ett preset. - Load preset dialog - + Ladda 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 ? - + %1 påverkas av prog nummer %s, men det finns redan en i den positionen. +Vill du ersätta den eller lägga till i nästa lediga position? - There is no more free preset slot. - + Finns inga fler lediga preset positioner. - Save preset dialog - + Spara preset dialog - Browse set dialog - + Bläddra set dialog - Browse image dialog - + Bläddra bild dialog @@ -1765,14 +1519,12 @@ Published under the GNU Public License Presetnamn - Subcategory - Underkategori + Underkategori - Category - Kategori + Kategori Delete @@ -1799,261 +1551,178 @@ Published under the GNU Public License Funktion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Pitch Bend Range - Pitchbend område + Pitchbend område - Speed - Hastighet + Hastighet Square Fyrkant - 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 - DeicsOnze - + - &Preset - + &Preset - Program numerous - + Programnummer - INITVOICE - + - LBank - + - - Bank numerous - + Bank nummer - - NONE - + Ingen - HBank - + - Prog - + - Preset - + - DeicsOnze v0.5.5 Copyright (c) 2004-2006 Nil Geisweiller. Published under GPL licence. - &Global - + &Global - Pitch Envelope - + Pitchenvelope - PL3 - + - PL2 - + - PL1 - + - PR1 - + - PR2 - + - PR3 - + - - - - - - - Pitch modulation depth - + Pitchmodulationsdjup - LFO - + - LFO Sync - + LFO synk - Pitch modulation sensitivity - + Pitchmodulationskänslighet - LFO Delay - + - LFO delay - + - LFO speed - + LFO Hastighet - Amplitude modulation depth - + Amplitudmodulationskänslighet - Amplitude modulation sensitivity - + Amplitudmodulationskänslighet - AMS - + - PMD - + - AMD - + - Delay - + - PMS - + - <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> @@ -2065,222 +1734,122 @@ Published under the GNU Public License - Op4 Feedback - + Op4 återkoppling - - Feedback level of the operator 4 - + Återkopplingsmängd för operator 4 - Op &1 - Scaling 1 - + Skalning 1 - LS1 - + - RS1 - + - - - - - - - - Rate Scaling - + Skalningshastighet - - - - - - - - - - - - Attack Rate of the operator 1 - + Attackhastighet för operator 1 - - - - - - - - Level Scaling - + Skalningshastighet - Amplitude Envelope 1 - + Amplitudeenvelope 1 - RR1 - + - D1R1 - + - D1L1 - + - D2R1 - + - - - - Release Rate - + Releasedatum - - - - - + 2° Decay Rate - + 2° Decay-hastighet - - - - - + 1° Decay Level - + 1° Decay-nivå - - - - - + 1° Decay Rate - + 1° Decay-hastighet - - - - Attack Rate - + Attack-hastighet - AR1 - + - Detune, OSCWave, EGShift 1 - + - DET1 - + - - - - - - - - - Detune - + - - - - EG Shift - + - - - - 96dB - + - - - - 48dB - + - - - - 24dB - + - - - - 12dB - + - - - - Wave form - + Vågform - - - - 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> @@ -2292,942 +1861,706 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t - Sensitivity 1 - + Känslighet 1 - KVS1 - + - - - - Amplitude Modulation Enable - + Aktivera amplitudmodulering - AME1 - + - - - - Keyboard Velocity Sensitivity - + Keyboard velocitykänslighet - - - - Key Velocity Sensitivity - + Tangent-velocitykänslighet - EBS1 - + - - - - EG Bias Sensitivity - + EG Bias-känslighet - - - - Eg Bias Sensitivity - + Eg Bias-känslighet - Frequency 1 - Frekvens 1 + Frekvens 1 - Coarse 1 - + Growkornig 1 - - - - Coarse Ratio - + Grovkornig kvot - Fine 1 - + Fin 1 - - - - Fine Ratio - + Fin kvot - Freq 1 - + Frek 1 - - - - Fixed Frequency - + Fast frekvens - - - - Toggle Fix Frequency - + Omkoppling fast frekvens - - - - FIX - + Fast - OUT 1 - + Ut 1 - - - - Output Volume - + Utgångsvolym - - - - - - Volume - Volym + Volym - Op &2 - Amplitude Envelope 2 - + Amplitudeenvelope 2 - D1R2 - + - D1L2 - + - D2R2 - + - RR2 - + - AR2 - + - Frequency 2 - + Frekvens 2 - Coarse 2 - + Growkornig 2 - Fine 2 - + Fin 2 - Freq 2 - + Frek 2 - Scaling 2 - + Skalning 2 - LS2 - + - RS2 - + - OUT 2 - + Ut 2 - Detune, OSCWave, EGShift 2 - + - DET2 - + - Sensitivity 2 - + Känslighet 2 - EBS2 - + - KVS2 - + - AME2 - + - Op &3 - Amplitude Envelope 3 - + Amplitudenvelope 3 - D1R3 - + - D1L3 - + - D2R3 - + - RR3 - + - AR3 - + - Scaling 3 - + Skalning 3 - LS3 - + - RS3 - + - OUT 3 - + Ut 3 - Frequency 3 - + Frekvens 3 - Coarse 3 - + Grovkornig 3 - Fine 3 - + Fin 3 - Freq 3 - + Frek 3 - Detune, OSCWave, EGShift 3 - + - DET3 - + - Sensitivity 3 - + Känslighet 3 - EBS3 - + - KVS3 - + - AME3 - + - Op &4 - amplitude Envelope 4 - + Amplitudenvelop 4 - AR4 - + - D1R4 - + - D1L4 - + - D2R4 - + - RR4 - + - Frequency 4 - + Frekvens 4 - Coarse 4 - + Grovkornig 4 - Fine 4 - + Fin 4 - Freq 4 - + Frek 4 - Scaling 4 - + Skalning 4 - LS4 - + - RS4 - + - OUT 4 - + Ut 4 - Detune, OSCWave, EGShift 4 - + - DET4 - + - Sensitivity 4 - + Känslighet 4 - EBS4 - + - KVS4 - + - AME4 - + - &Func - + &Funk - Delay Pan Depth - + Delay-pandjup - Delay Pan LFO Freq - + Delay-pan LFO-frek - Delay Ch Send Level - + Delay Kanal Sändnivå - - - Channel Chorus - + Kanalchorus - Delay Feedback - + Delay-återkoppling - Delay On/Off, Return Level - + Delay Av/På, Returnivå - - - On - + - Delay Beat Ratio - + Delay Taktkvot - Delay BPM - + - Foot Control - + Fotkontroll - - - - Pitch - Tonhöjd + Tonhöjd - - - - Amplitude - + Amplitud - Modulation Wheel - + Modulationshjul - Breath Control - + Andningskontroll - - Pitch Bias - + Tonhöjdspåverkan - - Envelope Bias - + Enveloppåverkan - After Touch - + Aftertouch - Phony Mode - + - POLY - + - MONO - + - Potamento - + Portamento - Portamento Mode - + Portamentoläge - FINGER - + - FULL - + - PT - + - - Portamento Time - + Portamentotid - C&horus - + C&horus - Chorus Parameters - + Chorusparametrar - - Channel send level - + Kanal-sändnivå - - On/Off and Return level - + Av/På och returnivå - - Select LADSPA plugin - + Välj LADSPA-plugin - - Change plugin - + Byt plugin - &Reverb - Reverb Parameters - + Reverbparametrar - &Config - &Inställningar + &Inställningar - Font Size - + Fontstorlek - Quality - + Kvalitet - High - + Hög - Middle - + Mellan - Low - + Låg - Ultra low - + Extremlåg - Filter - Filter + Filter - Save Mode (into the song) - + Spara läge (i sång) - Save only the used presets - + Spara endast använda presets - Save the entire set - + Spara hela gruppen - Save the configuration - + Spara konfiguration - Configuration File - + Konfigurationsfil - Save... - + Spara... - Load... - + Ladda... - Save as default - + Spara som förvalt - Colors - Färger + Färger - Text - Text + Text - Background - + Bakgrund - Edit Text - + Redigera text - Edit Background - + Redigera bakgrund - - - Red - + - - - Blue - + Blå - - - Green - + Grön - Set Path - + Ställ in sökväg - Image in the background : - + Bild i bakgrund: - - Browse... - + Bläddra... - Load the set at the initialization : - + Ladda gruppen vid initiering : - Set Brightness, Detune, Attack and Release of the current channel to default - + Ställ in klarhet, detune, attack och release för nuvarande kanal till standard - Res. Ctrl - + - Cut all notes off - + Alla noter av - Panic! - + Panik! - Number of Voices - + Antal röster - Number of voices - + Antal röster - Enable - Aktivera + Aktivera - Channel - Kanal + Kanal - Vol - + - Channel Ctrl - + Kanalkontroll - Release - + - Attack - + - Brightness - + Klarhet - Modulation - + Modulering - Pan - + DelOverlapsBase - MusE: Delete Overlaps - + MusE: Ta bort överlappande - 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 - OK - + Ok - Cancel - Avbryt + Avbryt DidYouKnow - Did you know? - + Visste du? - Don't show on startup - + Visa inte vid start - Next tip - + Nästa tips - Close - Stäng + Stäng @@ -3440,75 +2773,60 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditCtrlBase - MusE: Edit Controller Event - + MusE: Editera controller-event - Time Position - Tidsposition + Tidsposition - Available Controller: - Tillgänglig controller: + Tillgänglig controller: - Create New Controller - Skapa ny Controller: + Skapa ny Controller - textLabel3 - + - Value - Värde + Värde - Controller - + - H-Bank - + - L-Bank - + - Program - + - - off - av + av - pushButton4 - + - &OK - &Ok + &Ok - &Cancel - &Avbryt + &Avbryt @@ -3521,59 +2839,48 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditGainBase - MusE: Modify gain - + MusE: Ändra förstärkning - Gain - Förstärkning + Förstärkning - 200% - + - 100% - + - 0% - + - &Reset - + &Reset - Alt+R - + - &Apply - &Verkställ + &Verkställ - Alt+A - Alt+L + Alt+L - &Cancel - &Avbryt + &Avbryt - Alt+C - + @@ -3598,9 +2905,8 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t EditInstrumentBase - MusE: Instrument Editor - + MusE: Instrumenteditor Patches @@ -3611,37 +2917,28 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t Patchnamn: - High Bank: - Hög bank: + Hög bank: - Low Bank: - Låg bank: + Låg bank: - Program: - + Program: Patch/Group Patch/Grupp; - - - &Delete - &Ta bort + &Ta bort - - - Alt+D - + &New Patch @@ -3652,43 +2949,36 @@ Wave form 8 = <i>if <b>t</b>&#060 pi then sin(2*<b>t Ny Grupp; - Drum - Trumma + Trumma - GM - + - GS - + - XG - + Predefined Controller: Fördefinierad controller: - This is a list of commonly used midi controllers. Note that in MusE pitch and program changes are handled like normal controllers. - Detta är en lista med vanligt använda midi-controllers + Detta är en lista med vanligt använda midi-controllers Notera att i MusE hanteras tonhöjd och program change som vanliga controllers. - - Properties - Egenskaper + Egenskaper Name @@ -3699,50 +2989,40 @@ vanliga controllers. Typ - Control7 - + - Control14 - + - RPN - + - NRPN - + - Pitch - Tonhöjd + Tonhöjd - Program - + - - H-Ctrl - + Midi Controller Number High Byte Midicontrollernummer, hög byte - - L-Ctrl - + Midi Controller Number Low Byte @@ -3753,24 +3033,20 @@ vanliga controllers. Område - Min - + - Max - + - Name - Namn + Namn - Type - Typ + Typ Min Val @@ -3797,314 +3073,248 @@ vanliga controllers. Panik - Hex Entry: - + Hexinmatning: - &File - &Arkiv + &Arkiv - Tools - Verktyg + Verktyg - New - Ny + Ny - &New - &Ny + &Ny - Ctrl+N - + - Open - Öppna + Öppna - &Open... - &Öppna... + &Öppna... - Ctrl+O - Ctrl+Ö + Ctrl+Ö - Save - Spara + Spara - &Save - &Spara + &Spara - Ctrl+S - + - Save As - Spara som + Spara som - Save &As... - S&para som... + S&para som... - Exit - Stäng + Stäng - E&xit - S&täng + S&täng - Instrument Name: - + Instrumentnamn: - Selected instrument name. - + Valt instrumentnamn. - List of defined instruments. - + Lista med definierade instrument. - Pa&tches - + Pa&tches - List of groups and patches. - + Lista med grupper och patcher. - Group/Patch - + Grupp/Patch - - - Name: - Namn: + Namn: - - Group or patch name - + Grupp eller patch-namn - Patch high bank number - + Patch högt banknummer - Patch high bank number. --- means don't care. - + Patch högt banknummer. -- betyder: ignorera. - --- dont care - + ---- +Ignorera - Patch low bank number - + Patch lågt banknummer - Patch low bank number. --- means don't care. - + Patch lågt banknummer --- betyder: ignorera. - --- - + - - Patch program number - + Patch programnummer - Drum patch - + Trumpatch - If set, the patch is available only for drum channels. - + Om satt så är patchen endast tillgänglig för trumkanaler. - GM patch - + - If set, the patch is available in a 'GM' or 'NO' midi song type. - + Om satt så är patchen endast tillgänglig för 'GM' eller NO' midisångtyper. - GS patch - + - If set, the patch is available in a 'GS' or 'NO' midi song type. - + Om satt så är patchen endast tillgänglig för 'GS' eller 'NO' midisångtyper. - XG patch - + - If set, the patch is available in an 'XG' or 'NO' midi song type. - + Om satt så är patchen endast tillgänglig för 'XG' eller NO' midisångtyper. - Delete group or patch - + Ta bort grupp eller patch - New patch - + Ny patch - New &Patch - + Ny &patch - Alt+P - + - New group - + Ny grupp - New &Group - + Ny &grupp - Alt+G - + - Contro&ller - + Contro&ller - Common: - + Vanlig: - List of defined controllers - + Lista med definierade kontroller - List of defined controllers. - + Lista med definierade kontroller. - Min - + - Max - + - Def - + - Midi controller name - + Midi kontrollnamn - Type: - Typ: + Typ: - - Midi controller type - + Midi kontrolltyp - RPN14 - + - NRPN14 - + - - Midi controller number high byte - + Midikontroll-nummer, hög byte - Midi controller number low byte (* means drum controller) - + Midikontroll-nummer låg byte (* trumkontroller) - Midi controller number low byte. If low byte is * then the controller is a 'drum controller'. For drum tracks and @@ -4117,23 +3327,19 @@ Examples: The GS and XG instruments' - * wild card - Range: - + Område: - Minimum value. If negative, auto-translate. - + Minsta värde. Om negativt, översätt automatiskt. - Minimum value. If the minimum value is negative, the range will automatically be translated to a positive range. @@ -4153,55 +3359,41 @@ Type 'Pitch' is the exception. It is biased at zero, even with a negative minimum: 'Pitch': Min: -8192 Max: 8191 True range: Min: -8192 Max: 8191 (bias 0) - + - - Maximum value - + Högsta värde - Default: - + Förvalt: - L-Bank - + - - - - - off - av + av - Progr. - + Progr. - ??? - + ??? - H-Bank - + - Default value. Off: No default. - + Förvalt värde. Av: Inget förvalt. - Default (initial) value. Off means no default. If a default value is chosen, the value will be sent @@ -4220,59 +3412,47 @@ Caution! Watch out for controllers such as - off dont care av - Add common controller - + Lägg till vanlig kontroll - &Add - &Lägg till + &Lägg till - Alt+A - Alt+L + Alt+L - Delete controller - + Ta bort controller - Create a new controller - + Skapa ny controller - New &Controller - + Ny &controller - Alt+C - + - Null Param Hi: - + Nullparam. hög: - Null parameter number High byte - + Nullparameter hög-byte - - If set, these 'null' parameter numbers will be sent after each RPN/NRPN event. This prevents subsequent 'data' events @@ -4282,51 +3462,40 @@ Typically, set to 127/127, or an unused - Lo: - + Låg: - Null parameter number Low byte - + Nullparameter, låg byte - S&ysEx - + S&ysEx - SysEx List: - + SysEx-lista: - New SysE&x - + Ny SysE&x - Alt+X - + - &Help - &Hjälp + &Hjälp - - new item - + ny enhet - - What's this? - + Vad är detta? @@ -4374,44 +3543,36 @@ Typically, set to 127/127, or an unused EditNoteDialogBase - MusE: Enter Note MusE: Mata in Not - OK - + Ok - Cancel Avbryt - Length: Längd: - Time Position: Tidsposition: - Pitch: Tonhöjd: - Velocity On: - + Velocity på: - Velocity Off: - + Velocity av: @@ -4451,27 +3612,22 @@ Typically, set to 127/127, or an unused EditSysexDialogBase - MusE: Enter SysEx MusE: Mata in SysEx - TimePosition: Tidsposition: - Comment: Kommentar: - OK - + Ok - Cancel Avbryt @@ -4551,171 +3707,139 @@ Message: FLUIDGui - FLUID: open Soundfile - FLUID: öppna ljudbank + FLUID: öppna ljudbank FLUIDGuiBase - Load - Ladda + Ladda - Form1 - + - Soundfont - + FLUIDSynthGuiBase - Gain - Förstärkning + Förstärkning - Room Size - Rumsstorlek + Rumsstorlek - Damping - Dämpning + Dämpning - - Level - Nivå + Nivå - Width - Bredd + Bredd - Speed - Hastighet + Hastighet - Depth - Djup + Djup - Number - Nummer + Nummer - Type - Typ + Typ - Sine - Sinus + Sinus - Triangle - Triangel + Triangel - Load - Ladda + Ladda Save Spara - Delete - Ta bort + Ta bort - Fontname - Fontnamn + Fontnamn - FLUID Synth - + - Dump Info - + - ID - + - Chnl - + - Soundfont - + - Drum Chnl - + Trumkanal - Reverb - + - CHANNEL SETUP - + Kanalkonfiguration - Chorus - + - LOADED SOUNDFONTS - + Laddade soundfonts FileDialogButtons - Global - + - User Användare - Project Projekt @@ -4730,29 +3854,25 @@ Cofiguration konfiguration - only Songdata - bara sångdata + bara sångdata - fdialogbuttons - + - Songdata + Configuration - + Sångdata + konfiguration FluidSynthGui - Choose soundfont - + Välj soundfont @@ -4769,189 +3889,156 @@ Configuration MusE: Ändra Gate-tid - MusE: Modify Note Length - + MusE: Modifiera not-längd - Range - Område + Område - All Events - Alla Händelser + Alla Händelser - Selected Events - Valda Händelser + Valda Händelser - Looped Events - Loopade Händelser + Loopade Händelser - Selected Looped - + Valda loopade Selected & Looped Valda & Loopade - Values - Värden + Värden - Rate: - Hastighet: + Hastighet: - Offset: - Offset: + Offset: - % - + - lenNew = (lenOld * rate) + offset - + - OK - + - Cancel - Avbryt + Avbryt GlobalSettingsDialogBase - MusE: Global Settings MusE: Globala Inställningar - Use project save dialog - + Använd projekt sparadialog - Some popup menus stay open (else hold Ctrl) - + Vissa popupmenyer behöver Ctrl+click för att stanna öppna - Allows some popup menus to stay open. Otherwise, hold Ctrl to keep them open. - + Tillåter vissa popupmenyer att vara öppna. För vissa använd ctrl+click. - In some areas, the middle mouse button decreases values, while the right button increases. Users without a middle mouse button can select this option to make the left button behave like the middle button in such areas. - + Ibland används mittersta musknappen för att minska +och högra knappen för att minska värden. Användare utan +mittersta musknappen kan använda denna option +för att använda vänster musknapp i stället för mittersta. - Use left mouse button for decreasing values - + Använd vänster musknapp för att minska värden - Shift + Right click sets left range marker - + Shift+Högerklick sätter vänster områdesmarkör - Allow adding hidden tracks in track list menu - + Tillåt gömda tracks i tracklistan - Unhide tracks when adding hidden tracks - + Ta fram gömda tracks när gömda tracks adderas - GUI Style - + GUI stil - MDI-subwindowness and sharing menus - + MDI-subwindowness och delning av menyer - Presets: - + Presets: - traditional MusE SDI - + traditionell MusE SDI - Cakewalk-like MDI - + Cakewalkliknande MDI - Borland-/Mac-like MDI - + Borland/Macliknande MDI - &Apply &Verkställ - &Ok - + &Ok - &Cancel &Avbryt - Audio - Ljud + Ljud - Mixer - + - - dB - + - min. Meter Value min. Metervärde @@ -4960,97 +4047,68 @@ left button behave like the middle button in such areas. min. Slider värde - Midi - Midi + Midi - Ticks - Tick + 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 @@ -5061,379 +4119,289 @@ left button behave like the middle button in such areas. Hjälpläsare: - GUI Refresh Rate GUI-uppdateringsfrekvens - /sec /sek - Application - Applikation + Applikation - Start Muse - Starta MusE + Starta MusE - start with last song - starta med föregående sång + starta med senaste sång - start with song - starta med sång + starta med sång - start song: - startsång: + startsång: - Views - Vyer + Vyer - - - - - y-pos - + - - - - show - visa + visa - - - - - x-pos - + - - - - height - höjd + höjd - - - - width - bredd + bredd - Big Time - + Stor tidvisare Arranger Arrangerare - Transport - + - - - - - Cur - + - - - - - set current values - sätt nuvarande värden + sätt nuvarande värden - start with template: default.med - börja med mall: default.med + börja med mall: default.med - show splash screen - visa splash + visa splash - External Waveditor - Extern Ljudredigerare + Extern Ljudredigerare - External Waveditor command - Extern Ljudredigerarkommando + Externt Ljudredigerarkommando - Mixer A - + - Mixer B - + - show "Did you know?" dialog - + visa "Visste du?" dialog - Start song - + Startsång - min. Slider Val - + min. Regelvärde - Enable denormal protection - + Slå på "denormal"-skydd - Enable output limiter - + Slå på utgångs-limiter - Note: External editor opened from the internal editor. - + Notis: Extern redigerare öppnas från den interna redigeraren. - Dummy Audio Driver (settings require restart) - + Låtsas ljuddrivrutin (kräver omstart vid ändring) - Hz - + - Period size (Frames per period): - + Periodlängd (antalet ramar per period): - - 16 - + - Project directory - + Projektkatalog - Projects: - + Projekt: - ... - + .... - Main Window - + Huvudfönster - Try to use Jack Freewheel - + Använd Jack Freewheel om tillgängligt - Speeds bounce operations - + Snabbar upp ping-pong operationer - Use Jack Freewheel mode if possible. This dramatically speeds bounce operations. - + Använd Jack Freewheel läge om möjligt. Snabbar upp ping-pong operationer dramatiskt. - VST in-place - + VST på-plats - Enable VST in-place processing (restart required) - + Möjliggör VST på-plats processering (kräver omstart) - 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. - + Slå på VST på-plats processering. Slå av detta +om VST Ladspa effektrack instickseffekter inte +fungerar eller ger högljud feedback även om +de bör vara på-plats kapabla. Inställning kräver +omstart. - Minimum control period - + Minsta kontrollperiod - Minimum audio controller process period (samples). - + Minsta ljudkontroll-processeringsperiod (i ljudramar). - 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. - + Minsta ljudkontroll-processeringsperiod (i ljudramar). +Justerar responstid för ljudkontroll och kontroll +grafer. Låga värden ger snabb, mjuk kontroll. Om +det ger prestandaproblem sätt ett högre värde. - 1 - + - 2 - + - 4 - + - 8 - + - - 32 - + - - 64 - + - - 128 - + - - 256 - + - - 512 - + - Sample rate - + Samplingshastighet - Shorter periods give better midi playback resolution. - + Kortare perioder ger bättre midiuppspelnings-upplösning. - 8192 - + - 16384 - + - 32768 - + - Midi Resolution (Ticks/Quarternote) - + Midiupplösning (Tick/Kvartsnot) - GUI Behaviour - + GUI-funktion - Use old-style stop shortcut: - + Använd traditionellt stop kortkommando: - Move single armed track with selection - + Flytta enskilt inspelningsspår med valt spår - On Launch - + Vid start - Behavior - + Uppförande @@ -5506,64 +4474,52 @@ Adjusts responsiveness of audio controls and LegatoBase - MusE: Legato - + - 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 - Settings - Inställningar + Inställningar - ticks - + Tick - Minimum Length - + Minsta längd - Allow shortening notes - + Tillåt förkortning av noter - OK - + - Cancel - Avbryt + Avbryt @@ -5676,29 +4632,24 @@ Adjusts responsiveness of audio controls and MITTransposeBase - MusE: Midi Input Plugin: Transpose MusE: Midi Inputplugin: Transponering - On - TriggerKey - TriggNot + TriggNot - Transpose: - Transponering: + Transponering: - +0 - + @@ -5743,49 +4694,40 @@ Adjusts responsiveness of audio controls and MRConfigBase - MusE: Midi Input Plugin: Remote Control MusE: Midiinputplugin: Fjärrkontroll - Activate Aktivera - On - Actions - + Operationer - Stop - Stopp + Stopp - Record - Spela in + Spela in - Goto Left Mark Gå till vänster markering - Play - Spela + Spela - Insert rest (step rec) - + Lägg in paus (sluta spela in) @@ -5912,172 +4854,139 @@ Adjusts responsiveness of audio controls and MdiSettingsBase - Form - + - GroupBox - + - MDI subwin - + MDI underfönster - Shares menu when subwin - + Dela meny med underfönster - Shares menu when free - + Delar meny när ledigt MetronomeConfigBase - MusE: Metronome Config MusE: Metronomeconfiguration - Metronome Metronom - Audio Beep Audio - Ton - MIDI Click - Midiklick + Midiklick - Midi Channel - Midikanal + Midikanal - Measure Note Taktnot - Measure Velocity Taktanslag - Beat Velocity Slaganslag - Beat Note Slagnot - Midi Port - Midiport + Midiport - Precount Inräkning - enable - Bars Takter - From Mastertrack Från Masterspår - / - + - Signature - + Signatur - Prerecord - + Förinspelning - Preroll - + Inräkning - &Apply &Verställ - &OK &Ok - &Cancel &Avbryt - Choose outputs... - + Välj utgångar... - 50 - + - % Audio volume - + % ljudvolym - Hint: Enable metronome in Transportpanel - + Tips: Slå på metronom i transportpanelen - Alt+A - Alt+L + Alt+L - Alt+O - + - Alt+C - + @@ -6253,151 +5162,116 @@ som vanliga controllers i MusE. MidiFilterConfigBase - MusE: Midi Input Filter - + MusE: Midi ingångsfilter - Record Filter - Inspelningsfilter + Inspelningsfilter - - Note On - Noteon + Noteon - - Poly Pressure - + - - Controller - + kontroll - - Program Change - + - - After Touch - + - - Pitch Bend - + - - Sysex - + - Thru Filter - + - Controller Filter - + - Channel Filter - + Kanal filter - 14 - + - 10 - + - 6 - + - 12 - + - 4 - + - 2 - + - 9 - + - 8 - + - 3 - + - 13 - + - 15 - + - 16 - + - 7 - + - 11 - + - 5 - + - 1 - + @@ -6410,336 +5284,216 @@ som vanliga controllers i MusE. MidiInputTransformDialogBase - MusE: Midi Input Transformator MusE: Midi inputtransformator - Filter - Filter + Filter - All - Alla + Alla - - - - - Equal Lika - - - - - Unequal - Ej lika + 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 + Ignorera - - - - Higher - Högre + Högre - - - - Lower Lägre - - - - Inside - Innanför + Innanför - - - - Outside - Utanför + Utanför - - Channel - Kanal + Kanal - - Port - + - Processing Bearbetar - - - - - Keep Behåll - - - - - Fix - + Fast - - - - Plus - + Plus - - - - Minus - + - - - - Multiply Multiplicera - - - - Divide - Dela + Dela - - - - Invert Invertera - ScaleMap - Skalmap + Skalmap - Flip - Vänd + Vänd - - - - Dyn - + - - - - Random - Slumpmässig + 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: + Kommentar: - Function - Funktion + Funktion - &New &Ny - create new preset - skapa ny preset + skapa nytt preset - &Delete &Ta bort - delete preset ta bort preset - &Dismiss &Stäng - PresetList - Presetlista + Presetlista @@ -6877,9 +5631,8 @@ som vanliga controllers i MusE. MidiSyncConfigBase - MusE: Midi Sync - MusE: Midisync + MusE: Midisync Sync Mode @@ -6922,198 +5675,177 @@ som vanliga controllers i MusE. Midiklocka - Apply Verkställ - Ok - + - Cancel Avbryt - MTC - + - Type: Typ: - 24 - + - 25 - + - 30D - + - 30N - + - Offset: - Offset: + Offset: - hour timma - h - + - minute - minut + minut - m - + - second - sekund + sekund - s - + - frame - + ram - f - + r - subframe - + subram - Sync receiving and sending - + Synkronisera inkommande och utgående - Send and receive Jack transport - + Skicka och ta emot Jack-transport - Send and receive Jack transport information, including stop, start and position. - + Skicka och ta emot Jack-transport information, +inkluderar stop, start och position. - Use Jack transport - + Använd Jack-transport - Make MusE the Jack transport Timebase Master - + Låt MusE vara Jack-transport tidbas-master - Make MusE the Jack transport Timebase Master. Allows Jack to show time as MusE Bars, Beats, and Ticks. MusE will try to become master, but other Jack clients can also take over later. You can always click here again for Master. - + Låt MusE vara Jack-transport tidbas-master. +Låter Jack visa tid som +MusE takter, taktdelar och tick. +MusE försöker ta rollen som master men +andra jack-klienter kan överta rollen senare. +Du kan alltid trycka här igen för att låta +MusE bli master. - Jack transport Timebase Master - + Jack-transport tidbas-master - Control MusE timing by external midi clock or MTC sync - + Kontrollera MusE timing med extern midi-klocka eller MTC synk - When in slave mode, tempo is controlled externally. MusE can sync to midi clock, or MTC quarter frame sync. Enabled inputs in the list will be in effect (RMC, RMMC, RMTC). - + I slav-läge så kontrolleras tempo +externt. +MusE kan synkronisera mot midiklocka eller +MTC kvartsram-synk. +Aktiverade ingångar i listan används +(RMC, RMMC, RMTC). - Slave to external sync - + Slava till extern synkronisering - Send start to first clock delay - + "Start till första klocka"-fördröjning - Allows 'slow sync' devices time to synchronize to MusE. This value is the delay from sending start to sending the first clock. - + Ger 'långsama' enheter tid +att synkronisera till MusE. Detta värde är en +fördröjning från att start skickas till första +klockan skickas. - ms - + - Send sync delay - + Skicka synkfördöjning - Note: Sync delay and MTC sync currently not fully implemeted - + Notis: Synkfördröjning och MTC-synk är inte helt implementerad MidiTrackInfoBase - MusE: TrackInfo - MusE: Spårinfo + MusE: Spårinfo - output channel utgångskanal @@ -7126,35 +5858,24 @@ Enabled inputs in the list will Spårinfo - - % - + Track Name Spårnamn - output port utgångsport - iR - + - - - - - - - off - av + av change stereo position @@ -7165,68 +5886,56 @@ Enabled inputs in the list will välj instrumentpatch - Transp. - + Transp. Volume Volym - Channel Info Kanalinfo - Rec: - + Rec: - Prog - + - Vol - + - Pan - + - Delay - + - H-Bank - + - Compr. - + Compr. - L-Bank - + - Velocity Hastighet - Length - Längd + Längd input ports @@ -7243,7 +5952,7 @@ You can specify more than one channel for recording: 1 2 3 record from channel 1 2 and 3 1-3 same - 1-3 5 record from channel 1 2 3 and 5 + 1-3 5 record from channel 1 2 3 and 5 Händelser från alla konfigurerade kanaler spelas in på detta spår Du kan specificera mer än en kanal för @@ -7269,465 +5978,328 @@ inspelning: Välj bank MSB - all midi events are sent to this output channel - + Alla midi-events skickas till denna utgångskanal - Out ch - + Utkanal - input routing - + ingångskoppling Inputs Ingångar - output routing - utgångsrouting + utgångskoppling - oR - + - input detect - + in-detekt - Input detect indicator. Detects all note on-off, controller, aftertouch, program change, and pitchbend (but not sysex or realtime) events on the selected channels, on the selected midi ports. - + Indikator indikerar midi på ingång. Detekterar alla not on/off, controller-, aftertouch-, +program change-, pitchbend-, men inte SysEX- eller realtids-event på de valda kanalerna på den valda midi-porten. - W - + - Midi thru - + - Pass input events through ('thru') to output. - + Skicka inkommande midi event vidare till utgång. - Select instrument patch - + Välj instrument-patch - <unknown> - + <okänt> - Add all settings to song - + Lägg till alla inställningar i sång - All - Alla + Alla - Bank Select MSB. Double-click on/off. - + Bank val MSB. Dubbelklicka av/på. - Bank Select LSB. Double-click on/off. - + Bank val LSB. Dubbelklicka av/på. - Program. Double-click on/off. - + Program. Dubbelklicka av/på. - Add bank + prog settings to song - + Lägg till bank + prog inställning i sång - Volume. Double-click on/off. - + Volym. Dubbelklicka av/på. - Add vol setting to song - + Lägg till volym inställning i sång - - Change stereo position. Double-click on/off. - + Byt stereo position. Dubbelklicka av/på. - Add pan setting to song - + Lägg till pan inställning i sång MidiTransformDialogBase - MusE: Midi Transformator - + - &New &Ny - &Delete &Ta bort - &Apply &Verkställ - &OK &Ok - &Cancel &Avbryt - PresetList - Presetlista + Presetlista - Processing Bearbetar - - Event Type - Händelsetyp + Händelsetyp - - - - - Keep Behåll - - - - Fix - + Fast - - Note Not - - Poly Pressure - + - - Control Change - + - - Aftertouch - + - - Pitch Bend - + - - NRPN - + - - RPN - + - - - - Plus - + - - - - Minus - + - - - - Multiply Multiplicera - - - - Divide - Dela + Dela - - - Value 2 Värde 2 - - Invert Invertera - ScaleMap - Skalmap + Skalmap - Flip - Vänd + Vänd - - Dyn - + - - Random Slumpmässig - - - Value 1 Värde 1 - - Length Längd - Position - + - Filter - Filter + Filter - All Alla - - - - - Equal - Lika + Lika - - - - - Unequal Ej lika - - - - Ignore Ignorera - - - - Higher Högre - - - - Lower Lägre - - - - Inside Innanför - - - - Outside Utanför - Bar Range - Takt Område + Taktområde - Preset - + - Name: Namn: - Comment: Kommentar: - Range Område - process all events - bearbeta alla händelser + bearbeta alla händelser - selected tracks - valda spår + valda spår - inside loop I loop - Function - Funktion + Funktion - Select - Välj + Välj - Quantize Kvantisera - Delete Ta bort - Transform Transformera - Insert Sätt in - Copy Kopiera - Extract - Extrahera + Extrahera - Quantize Value Kvantisera värde @@ -7749,64 +6321,52 @@ 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 - + @@ -7823,59 +6383,48 @@ inspelning: MoveBase - MusE: Move Notes - + MusE: Flytta noter - Range - Område + Område - All Events - Alla Händelser + Alla Händelser - Selected Events - Valda Händelser + Valda Händelser - Looped Events - Loopade Händelser + Loopade Händelser - Selected Looped - + Valda loopade - Value - Värde + Värde - Move by - + Flytta, steg - ticks - + tick - OK - + - Cancel - Avbryt + Avbryt @@ -9194,12 +7743,10 @@ misslyckades: MusECore::Song - Jack shutdown! - + Jack avstängd! - Jack has detected a performance problem which has lead to MusE being disconnected. This could happen due to a number of reasons: @@ -9215,1418 +7762,1150 @@ on the MusE mailinglist. To proceed check the status of Jack and try to restart it and then . click on the Restart button. - + Jack har detekterat ett prestandaproblem som har lett till att +MusE blivit bortkopplad. +Detta kan hända av en mängd anledningar: +- ett prestanda problem med din specifika konfiguration. +- en bugg i MusE (eller möjligen i en annan inkopplad mjukvara). +- ett slumpmässigt problem som kanske aldrig händer igen. +- Jack blev medvetet stoppad. +- Jack krashade. +Om problemet återkommer är du välkommen att diskutera det +på MusE mailinglistan. (information om hur man kommer åt den +finns på hjälpmenyn) + +För att fortsätta, säkerställ att Jack är igång och klicka på Omstart knappen. - - Automation: - + Automation: - previous event - + föregående händelse - next event - + nästa händelse - - set event - + ändra händelse - - add event - + lägg till händelse - - erase event - + ta bort händelse - erase range - + ta bort händelseområde - clear automation - + rensa automation - Clear all controller events? - + Ta bort alla kontrollerhändelser? - &Ok - + &Ok - &Cancel - &Avbryt + &Avbryt - MusE - external script failed - + MusE - externt skript misslyckades - MusE was unable to launch the script, error message: %1 - + MusE kunde inte starta skript, felmeddelande: %1 MusEGui - Select project directory - + Välj projektkatalog MusEGui::Appearance - Main application font, and default font for any controls not defined here. - + Huvudapplikationstypsnitt, även standard typsnitt +för alla gui-kontroller ej definierade här. - Mixer strips and effects racks. Midi track info panel. Midi control panel entry box. - + Mixer-strips och effektrack. Midi spårinfopanel. +Midikontrollpanel inmatningsbox. - Transport controls. - + Transportkontroller. - Time scale upper, and time signature. Controller graph and S/X buttons. - + Övre tidsskala och tidsignatur. +Kontrollgraf och S/X knappar. - Time scale lower, and arranger part name overlay. - + Lägre tidskala och partnamnöverlagring i redigerare. - Tempo scale, and markers. - + Temposkala och markörer. - Mixer labels. Auto-font-sizing up to chosen font size. Word-breaking but only with spaces. - + Mixeretiketter. Automatisktypsnittsstorlek upp till vald storlek. +Ordbrytning men bara med mellanslag. - Maximum mixer label auto-font-sizing font size. - + Max mixetikett automatisk typsnittsstorlek. - Global opacity (opposite of transparency). - + Global opacitet (motsats till genomskinlighet). - Standard - + - Custom - + Anpassad - MusE: load image - MusE: ladda bild + MusE: ladda bild - Select style sheet - + Välj stylesheet - Qt style sheets (*.qss) - + MusEGui::Arranger - Enable Recording - Slå på Inspelning + Slå på Inspelning - Mute/Off Indicator - + Mute/Av indikator - Solo Indicator - Solo-Indikator + Solo-Indikator - Track Type - Spårtyp + Spårtyp - Track Name - Spårnamn + Spårnamn - Midi output channel number or audio channels - + Midiutgångskanalnummer eller ljudkanal - Midi output port or synth midi port - + Midiutgångsport eller syntmidiport - Time Lock - Tidlås + Tidlås - Automation parameter selection - + Automation parameterval - Notation clef - + - Enable recording. Click to toggle. - + Slå på inspelning. Klicka för att växla. - Mute indicator. Click to toggle. Right-click to toggle track on/off. Mute is designed for rapid, repeated action. On/Off is not! - + Mute indikator. Klicka för att växla. +Högerklick för att växla spår av/på. +Mute är gjort för snabb och återkommande användande. +Av/På är det inte! - Solo indicator. Click to toggle. Connected tracks are also 'phantom' soloed, indicated by a dark square. - + Soloindikator. Klicka för att växla. +Kopplade spår får implicit solo, +indikeras med en mörk fyrkant. - Track type. Right-click to change midi and drum track types. - + Spårtyp. Högerklicka för att byta +midi- och trum-spårtyper. - Track name. Double-click to edit. Right-click for more options. - + Spårnamn. Dubbelklicka för att editera. Högerklick för fler alternativ. - Midi/drum track: Output channel number. Audio track: Channels. Mid/right-click to change. - + Midi/trumspår: Utgångskanalnummer. +Ljudspår: Kanaler. +Mitt/högerklick för att ändra. - Midi/drum track: Output port. Synth track: Assigned midi port. Left-click to change. Right-click to show GUI. - + Midi/trumspår: Utport +Syntspår: tilldelad midiport. +Vänsterklick för att ändra. +Högerklick för at visa GUI. - Time lock - + Tidlås - Notation clef. Select this tracks notation clef. - + Notationsklav. Välj spårets notationsklav. - Arranger - Arrangerare + Arrangerare - Cursor - Markör + Markör - Off - Av + Av - Bar - Takt + Takt - Snap - Fäst vid + Fäst vid - Len - Längd + Längd - - song length - bars - + sånglängd - takter - Type - Typ + Typ - NO - + - GM - + - GS - + - XG - + - - midi song type - typ av midsång + typ av midisång - Pitch - Tonhöjd + Tonhöjd - midi pitch - + miditonhöjd - global midi pitch shift - + global midi-tonhöjdsjustering - Tempo - + - - midi tempo - + - N - + - TrackInfo - Spårinfo + Spårinfo - R - + - M - + - S - + - C - + - Track - Spår + Spår - Port - + - Ch - + - T - + - Automation - + - Clef - + Klav MusEGui::ArrangerView - MusE: Arranger - + MusE: Arrangerare - Undo/Redo tools - + Ångra/Gör om verktyg - panic - panik + panik - transport - + - C&ut - Klipp &ut + Klipp &ut - &Copy - &Kopiera + &Kopiera - Copy in range - + Kopiera i område - &Paste - K&listra in + K&listra in - Paste (show dialog) - + Klistra in (visa dialog) - Paste c&lone - + Klistra in &klon - Paste clone (show dialog) - + Klistra in klon (visa dialog) - &Insert Empty Measure - + &Lägg in tom takt - Delete Selected Tracks - Ta bort valda spår + Ta bort valda spår - Shrink selected parts - + Krymp valda parter - Expand selected parts - + Expandera valda parter - Clean selected parts - + Rensa valda parter - Add Track - Lägg Till Spår + Lägg Till Spår - Select - Välj + Välj - Select &All - Markera &Allt + Markera &Allt - &Deselect All - A&vmarkera Allt + A&vmarkera Allt - Invert &Selection - Invertera &Markering + Invertera &Markering - &Inside Loop - &I Loop + &I Loop - &Outside Loop - &Utanför Loop + &Utanför Loop - All &Parts on Track - Alla &Parter i spår + Alla &Parter i spår - Score - Partitur + Partitur - all tracks in one staff - + alla spår i en notlinje - one staff per track - + en notlinje per spår - New score window - + Nytt partiturfönster - Pianoroll - Pianorulle + Pianorulle - Drums - Trummor + Trummor - - List - Lista + Lista - Wave - Wave + Wave - Mastertrack - Masterspår + Masterspår - Graphic - Grafik + Grafisk - Midi &Transform - Midi &Transform + Midi &Transform - Global Cut - Globalt klipp + Globalt klipp - Global Insert - Global insättning + Global insättning - Global Split - Global delning + Global delning - Global Cut - selected tracks - + Globalt klipp - valda spår - Global Insert - selected tracks - + Global insättning - valda spår - Global Split - selected tracks - + Global delning - valda spår - &Edit - &Redigera + &Redigera - &Structure - &Struktur + &Struktur - Functions - Funktioner + Funktioner - &Quantize Notes - + Kvantisera &noter - Change note &length - + Ändra not l&ängd - Change note &velocity - + Ändra not &anslag - Crescendo/Decrescendo - + - Transpose - Transponera + Transponera - Erase Events (Not Parts) - + Ta bort händelser (ej parter) - Move Events (Not Parts) - + Flytta händelser (ej parter) - Set Fixed Note Length - + Sätt fast notlängd - Delete Overlapping Notes - + Ta bort överlappande noter - Legato - + - Window &Config - + Fönster k&onfiguration - - New - Ny + Ny MusEGui::AudioMixerApp - &Create - &Skapa + &Skapa - &View - + &Vy - Routing - + Koppling - Show Midi Tracks - + Visa midispår - Show Drum Tracks - + Visa trumspår - Show Wave Tracks - + Visa wavespår - Show Inputs - + Visa ingångar - Show Outputs - + Visa utgångar - Show Groups - + Visa grupper - Show Auxs - + Visa Auxspår - Show Synthesizers - + Visa syntspår MusEGui::AudioStrip - panorama - + - aux send level - aux send nivå + aux send nivå - Pan - + - 1/2 channel - 1/2 kanal + 1/2 kanal - Pre - + - pre fader - post fader - + - dB - + - record - + inspelning - mute - tysta + tysta - record downmix - spela in nermixning + spela in nermixning - - solo mode - + sololäge - off - av + av - iR - + - input routing - + ingångskoppling - oR - + - output routing - utgångsrouting + utgångskoppling - Off - Av + Av - Read - Läs + Läs - Touch - + Rör - Write - Skriv + Skriv - automation type - automationstyp + automationstyp MusEGui::BigTime - format display - + formatvisning - bar - + takt - beat - + taktdel - - tick - + tick - minute - minut + minut - second - sekund + sekund - - frame - + ram - subframe - + subram - MusE: Bigtime - + MusEGui::ClipListEdit - MusE: Clip List Editor - MusE: Clip-listredigerare + MusE: Clip-listredigerare - Undo/Redo tools - + Ångra/Gör om verktyg - panic - panik + panik - transport - + - Window &Config - + Fönster k&onfiguration MusEGui::ComboQuant - - - Off - Av + Av MusEGui::CtrlPanel - S - + - select controller - välj controller + välj controller - X - + - remove panel - ta bort panel + ta bort panel - manual adjust - + manuell justering - double click on/off - + dubbelklick av/på - off - av + av - - Velocity - Hastighet + Hastighet - add new ... - lägg till ny... + lägg till ny... - - Instrument-defined - + Instrumentdefinierad - - Add ... - + Lägg till... - Others - + Andra - Edit instrument ... - + Redigera instrument... - Common Controls - + Vanliga kontroller MusEGui::DrumEdit - - mute instrument - tysta instrument + tysta instrument - - sound name - ljudnamn + ljudnamn - - volume percent - + volymprocent - - quantisation - kvantisering + kvantisering - - this input note triggers the sound - denna in-not triggar ljudet + denna in-not triggar ljudet - - note length - notlängd + notlängd - - this is the note which is played - + det är denna not som visas - output channel (hold ctl to affect all rows) - + Utgångskanal (håll Ctrl för att ändra alla rader) - output port (hold ctl to affect all rows) - + Utgångsport (håll Ctrl för att ändra alla rader) - - shift + control key: draw velocity level 1 - + shift + kontrolltangent: rita anslag nivå 1 - - control key: draw velocity level 2 - + kontrolltangent: rita - - shift key: draw velocity level 3 - - draw velocity level 4 - output channel (ctl: affect all rows) - output port (ctl: affect all rows) - &File &Arkiv - Load Map Ladda mappning - Save Map Spara Mappning - Reset GM Map - &Edit &Redigera - Cut Klipp ut - Copy Kopiera - Copy events in range - Paste Klistra in - Paste (with Dialog) - Delete Events - &Select &Välj - Select All Välj Allt - Select None Välj Ingen - Invert Invertera - Inside Loop I loop - Outside Loop Utanför loop - Previous Part - Next Part - Fu&nctions - Re-order list - Set Fixed Length Sätt fast längd - Modify Velocity Modifiera Velocity - Crescendo/Decrescendo - Quantize Kvantisera - Erase Event Ta bort Händelse - Move Notes - Delete Overlaps - &Plugins - Window &Config - Drum tools - Load Drummap Ladda trummappning - Store Drummap Spara trummappning - Step Record Stegvis inspelning - Midi Input - cursor tools - Set step size for cursor edit - panic panik - transport - ctrl - Add Controller View - M - Sound Ljud - Vol - QNT - E-Note - Len Längd - A-Note - Ch - Port - LV1 - LV2 - LV3 - LV4 - Muse: Load Drum Map Muse: Ladda trummappning - MusE: Store Drum Map MusE: Spara trummappning - Drum map - Reset the drum map with GM defaults? @@ -10634,17 +8913,14 @@ Right-click to show GUI. MusEGui::EditCAfterDialog - MusE: Enter Channel Aftertouch - Time Position Tidsposition - Pressure Tryck @@ -10652,12 +8928,10 @@ Right-click to show GUI. MusEGui::EditEventDialog - Ok - Cancel Avbryt @@ -10665,129 +8939,97 @@ Right-click to show GUI. MusEGui::EditInstrument - - MusE: Create file failed - MusE: Write File failed MusE: Misslyckades med att skriva Fil - - MusE: Save Instrument Definition - - Instrument Definition (*.idf) - - MusE: Save instrument as - Enter a new unique instrument name: - The user instrument '%1' already exists. This will overwrite its .idf instrument file. Are you sure? - MusE: Bad instrument name - Please choose a unique instrument name. (The name might be used by a hidden instrument.) - MusE: Bad patch name - Please choose a unique patch name - MusE: Bad patchgroup name - Please choose a unique patchgroup name - MusE: Bad controller name - Please choose a unique controller name - - MusE: Cannot add common controller - A controller named '%1' already exists. - A controller number %1 already exists. - - MusE - - The current Instrument contains unsaved data Save Current Instrument? - - &Save &Spara - - &Nosave &Inte spara - &Abort &Avbryt @@ -10795,22 +9037,18 @@ Save Current Instrument? MusEGui::EditMetaDialog - MusE: Enter Meta Event MusE: Mata in Meta Händelse - Time Position Tidsposition - Meta Type Metatyp - Enter Hex @@ -10818,22 +9056,18 @@ Save Current Instrument? MusEGui::EditPAfterDialog - MusE: Enter Poly Aftertouch MusE: Mata in Poly Aftertouch - Time Position Tidsposition - Pitch Tonhöjd - Pressure Tryck @@ -10841,7 +9075,6 @@ Save Current Instrument? MusEGui::EditToolBar - select Pointer Tool: with the pointer tool you can: select parts @@ -10854,7 +9087,6 @@ med pekverktyget kan du: kopiera parter - select Pencil Tool: with the pencil tool you can: create new parts @@ -10866,120 +9098,99 @@ 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 - eraser sudd - cutter delare - score partitur - glue lim - quantize kvantisering - draw rita - mute parts tysta parter - edit automation - cursor - Edit Tools Redigeringsverktyg @@ -10987,67 +9198,54 @@ klicka på en part för att Tysta/Avtysta MusEGui::EffectRack - effect rack effektrack - new ny - change ändra - move up flytta upp - move down flytta ner - remove ta bort - bypass - show gui visa gui - show native gui - save preset - MusE: Save Preset - Replace effect Byt effekt - Do you really want to replace the effect %1? Vill du verkligen ersätta effekten %1? @@ -11055,7 +9253,6 @@ klicka på en part för att Tysta/Avtysta MusEGui::Header - Track Info Columns @@ -11063,137 +9260,110 @@ klicka på en part för att Tysta/Avtysta MusEGui::LMaster - MusE: Mastertrack MusE: Masterspår - &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 - Window &Config - Undo/Redo tools - Edit tools - Tempo - Timesig - Key - new tempo nytt tempo - new signature ny signatur - new key - panic panik - transport - Meter - Time Tid - Type Typ - Value Värde - 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 @@ -11201,127 +9371,102 @@ klicka på en part för att Tysta/Avtysta MusEGui::ListEdit - insert Note Mata in Not - insert SysEx Mata in SysEx - insert Ctrl Mata in Ctrl - insert Meta Mata in Meta - insert Channel Aftertouch Mata in Aftertouch för kanal - insert Poly Aftertouch Mata in Poly Aftertouch - &Edit &Redigera - Cut Klipp ut - Copy Kopiera - Paste Klistra in - Delete Events - Window &Config - Undo/Redo tools - Insert tools - panic panik - transport - Tick - Bar Takt - Type Typ - Ch - Val A - Val B - Val C - Len Längd - Comment Kommentar @@ -11329,258 +9474,199 @@ klicka på en part för att Tysta/Avtysta MusEGui::MPConfig - - Default input connections - - Are you sure you want to apply to all existing midi tracks now? - - Default output connections - - Setting will apply to new midi tracks. Do you want to apply to all existing midi tracks now? - MusE: bad device name - please choose a unique device name - - in - - out - Show first aliases - Show second aliases - - Toggle all - - Change all tracks now - Create Jack device - - Port Number 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 - Auto-connect these channels to new midi tracks - Auto-connect new midi tracks to these channels - Auto-connect new midi tracks to this channel - Device state - Enable gui for device - Enable reading from device - Enable writing to device - Name of the midi device associated with this port number. Click to edit Jack midi name. - Instrument connected to port Instrument kopplat till denna port - Connections from Jack Midi output ports - Connections to Jack Midi input ports - Auto-connect these channels, on this port, to new midi tracks. - Connect new midi tracks to these channels, on this port. - Connect new midi tracks to this channel, on this port. - State: result of opening the device Status: resultat av öppning av enhet - Port - GUI - I - O - Instrument Instrument - Device Name Enhetsnamn - In routes - Out routes - Def in ch - Def out ch - State Status - <unknown> - - <none> @@ -11588,7 +9674,6 @@ Do you want to apply to all existing midi tracks now? MusEGui::MTScale - bar scale @@ -11596,7 +9681,6 @@ Do you want to apply to all existing midi tracks now? MusEGui::MTScaleFlo - bar scale @@ -11604,72 +9688,58 @@ Do you want to apply to all existing midi tracks now? MusEGui::MarkerView - MusE: Marker MusE: Markör - add marker lägg till markör - delete marker ta bort markör - &Edit &Redigera - Window &Config - Undo/Redo tools - edit tools redigeringsverktyg - panic panik - transport - Bar:Beat:Tick Takt:Slag:Tick - Hr:Mn:Sc:Fr:Sf - Lock Lås - Text Text - Marker Properties Markörinställningar @@ -11677,92 +9747,74 @@ Do you want to apply to all existing midi tracks now? MusEGui::MasterEdit - MusE: Mastertrack MusE: Masterspår - Window &Config - Undo/Redo tools - panic panik - transport - Enable master - Enable Aktivera - Enable usage of master track Aktivera användning av masterspår - Info - Cursor Markör - time at cursor position tid vid markörposition - tempo at cursor position tempo vid markörposition - Off Av - Bar Takt - Snap Fäst vid - CurPos - tempo at current position tempo vid nuvarande position - time signature at current position time signature vid nuvarande position @@ -11770,8 +9822,6 @@ Do you want to apply to all existing midi tracks now? MusEGui::MidiInputTransformDialog - - New Ny @@ -11779,95 +9829,74 @@ Do you want to apply to all existing midi tracks now? MusEGui::MidiStrip - - - off av - - double click on/off - VariationSend - Var - ReverbSend - Rev - ChorusSend - Cho - dB - Pan/Balance Pan/Balans - Pan - record - mute tysta - solo mode - iR - input routing - oR - output routing utgångsrouting @@ -11875,142 +9904,111 @@ Do you want to apply to all existing midi tracks now? MusEGui::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, @@ -12020,7 +10018,6 @@ 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 @@ -12031,36 +10028,30 @@ 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 @@ -12070,128 +10061,103 @@ 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> @@ -12199,8 +10165,6 @@ Apply sync settings? MusEGui::MidiTrackInfo - - <unknown> @@ -12208,8 +10172,6 @@ Apply sync settings? MusEGui::MidiTransformerDialog - - New Ny @@ -12217,7 +10179,6 @@ Apply sync settings? MusEGui::MixdownFileDialog - Wave Files (*.wav);;All Files (*) Ljudfiler (*.wav);;Alla filer (*) @@ -12225,633 +10186,494 @@ Apply sync settings? MusEGui::MusE - - Failed to start audio! - Was not able to start audio, check if jack is running. - Timeout waiting for audio to run. Check if jack is running. - Und&o &Ångra - Re&do &Gör om - undo last change to song ångra sista ändring i sång - redo last undo gör om sista ångring - Loop - loop between left mark and right mark loopa mellan vänster och höger markering - Punchin - record starts at left mark inspelning börjar vid vänster markering - Punchout - record stops at right mark inspelning slutar vid höger markering - Start - rewind to start position spola tillbaka till startposition - Rewind Flytta tillbaka - rewind current position flytta markör bakåt - Forward Frammåt - move current position flytta markör - Stop Stopp - stop sequencer stoppa sequencer - Play Spela - start sequencer play starta sequenceruppspelning - Record Spela in - to record press record and then play för att spela in, tryck på record och sedan play - - Panic Panik - send note off to all midi channels skicka note-off till alla midi kanaler - &New &Ny - - Create New Song Ny sång - &Open &Öppna - - 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. - Open &Recent &Nyligen öppnade - - - &Save &Spara - - 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. - Save &As S&para som - Import Midifile Importera midifil - Export Midifile Exportera midifil - Import Part Importera Part - - Import Wave File Importera ljudfil - Find unused wave files - &Quit A&vsluta - Song Info - Transport Panel Transportpanel - Bigtime Window Bigtime fönster - Mixer A - Mixer B - Cliplist - Marker View Markörvy - Arranger View - Fullscreen - &Plugins - Edit Instrument - Input Plugins - Transpose Transponera - Midi Input Transform - Midi Input Filter - Midi Remote Control Midi-fjärrkontroll - Rhythm Generator - Reset Instr. Resetta Instr. - Init Instr. - Local Off lokal av - Bounce to Track Bounce till Spår - Bounce to File Bounce till Fil - Restart Audio Starta om Audio - Mixer Automation Mixerautomation - Take Snapshot Ta ett snapshot - Clear Automation Data Rensa automationsdata - Cascade - Tile - In rows - In columns - Global Settings Globala Inställningar - Configure Shortcuts Konfigurera kortkommandon - Follow Song följ sång - Don't Follow Song följ inte Sång - Follow Page följ sida - Follow Continuous följ kontinuerligt - Metronome Metronom - Midi Sync Midi Synk - Midi File Import/Export - Appearance Settings Utseendeinställningar - Midi Ports / Soft Synth Midiportar / Mjukvarusyntar - &Manual - &MusE Homepage M&usEs hemsida - &Report Bug... &Rapportera fel... - &About MusE &Om MusE - File Buttons - Undo/Redo - Transport - &File &Arkiv - &View - &Midi - &Audio L&jud - A&utomation - &Windows - MusE Se&ttings - &Help &Hjälp - Cannot read template Kan inte läsa mall - File open error Fel vid öppning av fil - File read error Fel vid läsning av fil - Unknown File Format: %1 - - - MusE: Song: %1 - MusE: load project MusE: Öppna projekt - MusE: load template MusE: ladda mall - MusE: Write File failed MusE: Misslyckades med att skriva Fil - The current Project contains unsaved data Save Current Project? Det nuvarande Projektet innehåller osparade ändringar Spara nuvarande Projekt? - - S&kip - &Cancel &Avbryt - MusE: Save As MusE: Spara Som - - Nothing to edit Inget att redigera - - - - - MusE: Bounce to Track MusE: Bounce till Spår - 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 MusE: Bounce till fil - Select one audio output track - MusE: Bounce - set left/right marker for bounce range sätt vänster och höger markör till bounce-område - The current Project contains unsaved data Load overwrites current Project: Save Current Project? @@ -12860,126 +10682,101 @@ Save Current Project? Spara nuvarande Projekt? - - &Abort &Avbryt - MusE: Export Midi MusE: Exportera Midi - no help found at: ingen h jälp hittad vid: - MusE: Open Help Muse: Arkiv hjälp - Unable to launch help - For some reason MusE has to launch the default browser on your machine. - MusE: Import Midi MusE: Importera Midi - Add midi file to current project? Lägg midifil till nuvarande projekt? - &Add to Project &Lägg till projekt - &Replace &Ersätt - reading midifile läser midifil - failed: misslyckades: - Import part is only valid for midi and wave tracks! - MusE: load part MusE: ladda part - No track selected for import Inget spår valt för import - - + %n part(s) out of %1 could not be imported. Likely the selected track is the wrong type. - - - + %n part(s) could not be imported. Likely the selected track is the wrong type. - - 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 @@ -12987,32 +10784,26 @@ Do you still want to import it? MusEGui::NoteInfo - Note Info Notinfo - Start - Len Längd - Pitch Tonhöjd - Velo On - Velo Off @@ -13020,152 +10811,120 @@ Do you still want to import it? MusEGui::PartCanvas - Cannot copy/move/clone to different Track-Type Kan inte kopiera/flytta/klona till annan Spårtyp - C&ut Klipp &ut - &Copy &Kopiera - s&elect - clones - rename byt namn - color färg - delete ta bort - split dela - glue lim - de-clone häv kloning - - - save part to disk - wave edit wave redigering - file info - MusE: save part MusE: spara part - Part name: %1 Files: - - + %n part(s) out of %1 could not be pasted. Likely the selected track is the wrong type. - - - + %n part(s) could not be pasted. Likely the selected track is the wrong type. - - Cannot paste: multiple tracks selected Kan inte klistra in: flera spår valda - Cannot paste: no track selected Kan inte klistra in: inget spår valt - Can only paste to midi/drum track Kan endast klistra in på midi/trummspår - Can only paste to wave track Kan endast klistra till wavespår - Can only paste to midi or wave track - Cannot paste: wrong data type Kan inte klistra in: fel datatyp MusEGui::PasteDialog - - + %n quarter(s) - - %1 quarter for floating-point arguments like 1.5 - %1 quarters for floating-point arguments like 1.5 @@ -13173,21 +10932,17 @@ Likely the selected track is the wrong type. MusEGui::PasteEventsDialog - - + %n quarter(s) - - %1 quarter for floating-point arguments like 1.5 - %1 quarters for floating-point arguments like 1.5 @@ -13196,202 +10951,162 @@ Likely the selected track is the wrong type. MusEGui::PianoRoll - &Edit &Redigera - C&ut Klipp &ut - &Copy &Kopiera - Copy events in range - &Paste K&listra in - Paste (with dialog) - Delete &Events - &Select &Välj - Select &All Markera &Allt - &Deselect All A&vmarkera Allt - Invert &Selection Invertera &Markering - &Inside Loop &I Loop - &Outside Loop &Utanför Loop - &Previous Part - &Next Part - Fu&nctions - Quantize Kvantisera - Modify Note Length - Modify Velocity Modifiera Velocity - Crescendo/Decrescendo - Transpose Transponera - Erase Events - Move Notes - Set Fixed Length Sätt fast längd - Delete Overlaps - Legato - &Plugins - Window &Config - &Event Color - &Blue - &Pitch colors - &Velocity colors - Pianoroll tools - Step Record Stegvis inspelning - Midi Input - Play Events Spela Händelser - panic panik - transport - ctrl - Add Controller View @@ -13399,102 +11114,82 @@ Likely the selected track is the wrong type. MusEGui::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 - Mono and Stereo - Stereo - Mono - Show All - Select which types of plugins should be visible in the list.<br>Note that using mono plugins on stereo tracks is not a problem, two will be used in parallell.<br>Also beware that the 'all' alternative includes plugins that probably not are usable by MusE. 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. - Search in 'Label' and 'Name': @@ -13502,38 +11197,30 @@ Likely the selected track is the wrong type. MusEGui::PluginGui - File Buttons - Load Preset Öppna Preset - Save Preset Spara Preset - - bypass plugin koppla ur plugin - MusE: load preset MusE: öppna preset - Error reading preset. Might not be right type for this plugin - MusE: save preset MusE: spara preset @@ -13541,7 +11228,6 @@ Likely the selected track is the wrong type. MusEGui::ProjectCreateImpl - Select directory @@ -13549,63 +11235,42 @@ Likely the selected track is the wrong type. MusEGui::RoutePopupMenu - - - - - - - - Channel Kanal - - - Soloing chain - - Audio returns - Warning: No input devices! - Open midi config... - - <none> - Toggle all - More... - Audio sends - Midi port sends @@ -13613,42 +11278,34 @@ Likely the selected track is the wrong type. MusEGui::ScoreCanvas - Treble - Bass - Grand Staff - Remove staff - Ambiguous part - There are two or more possible parts you could add the note to, but none matches the selected part. Please select the destination part by clicking on any note belonging to it and try again, or add a new stave containing only the destination part. - No part - There are no parts you could add the note to. @@ -13656,261 +11313,206 @@ Likely the selected track is the wrong type. MusEGui::ScoreEdit - Undo/Redo tools - Step recording tools - Step Record Stegvis inspelning - panic panik - transport - Note settings - Note length: - last - - - Apply to new notes: - - Apply to selected notes: - Velocity: - Off-Velocity: - Quantisation settings - Quantisation: - Pixels per whole: - &Edit &Redigera - C&ut Klipp &ut - &Copy &Kopiera - Copy events in range - &Paste K&listra in - Paste (with dialog) - Delete &Events - &Select &Välj - Select &All Markera &Allt - &Deselect All A&vmarkera Allt - Invert &Selection Invertera &Markering - &Inside Loop &I Loop - &Outside Loop &Utanför Loop - Fu&nctions - &Quantize - Change note &length - Change note &velocity - Crescendo/Decrescendo - Transpose Transponera - Erase Events - Move Notes - Set Fixed Length Sätt fast längd - Delete Overlaps - Legato - Window &Config - Note head &colors - &Black - &Velocity - &Part - Set up &preamble - Display &key signature - Display &time signature - Set Score &name - - Enter the new score title - Error - Changing score title failed: the selected title is not unique @@ -13919,17 +11521,14 @@ the selected title is not unique MusEGui::ScrollScale - next page nästa sida - previous page förra sidan - current page number nuvarande sidnummer @@ -13937,22 +11536,18 @@ the selected title is not unique MusEGui::ShortcutCaptureDialog - Ok - Cancel Avbryt - Shortcut conflicts with %1 - Undefined Odefinierad @@ -13960,7 +11555,6 @@ the selected title is not unique MusEGui::SigScale - signature scale signaturskala @@ -13968,7 +11562,6 @@ the selected title is not unique MusEGui::Strip - Remove track? @@ -13976,132 +11569,102 @@ the selected title is not unique MusEGui::TList - <none> - visible - no clef - Treble - Bass - Grand - MusE: bad trackname MusE: dåligt spårnamn - please choose a unique track name vänligen välj ett unikt spårnamn - Unused Devices - - Update drummap? Updatera trum-map? - Do you want to use same port for all instruments in the drummap? Vill du använda samma port för alla instrument i trum-map:en? - - &Yes &Ja - - &No &Nej - - show gui visa gui - - show native gui - Treble clef - Bass clef - Grand Staff - Viewable automation - Delete Track Ta bort spår - Track Comment - Insert Track - Midi Midi - Drum Trumma - Do you want to use same port and channel for all instruments in the drummap? Vill du använda samma port och kanal för alla instrument i trummap:en? @@ -14109,7 +11672,6 @@ the selected title is not unique MusEGui::TempoSig - Tempo/Sig @@ -14117,24 +11679,18 @@ the selected title is not unique MusEGui::Toolbar1 - - - Off Av - Solo - Cursor Markör - Snap Fäst vid @@ -14142,72 +11698,58 @@ the selected title is not unique MusEGui::TopWin - As subwindow - Shares tools and menu - Fullscreen - Piano roll - List editor - Drum editor - Master track editor - Master track list editor - Wave editor - Clip list - Marker view - Score editor - Arranger Arrangerare - <unknown toplevel type> @@ -14215,12 +11757,10 @@ the selected title is not unique MusEGui::TrackComment - MusE: Track Comment MusE: Spårkommentar - Track Comment: Spårkommentar: @@ -14228,186 +11768,146 @@ the selected title is not unique MusEGui::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 - Click this button to rewind to start position Klicka här för att spola tillbaks till början - rewind flytta tillbaka - Click this button to rewind Klicka här för att flytta markören bakåt - forward frammåt - Click this button to forward current play position Klicka här för att flytta markören framåt - stop stopp - Click this button to stop playback Klicka här för att stoppa uppspelning - play spela - Click this button to start playback Klicka här för att starta uppspelning - record - Click this button to enable recording Klicka här för att 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å - Jack - Jack transport sync on/off - Master Master - use master track @@ -14415,49 +11915,34 @@ the selected title is not unique MusEGui::VisibleTracks - - Show wave tracks - - Show group tracks - - Show aux tracks - - Show input tracks - - Show output tracks - - Show midi tracks - - Show synth tracks - Visible track types @@ -14465,112 +11950,90 @@ the selected title is not unique MusEGui::WaveEdit - &Edit &Redigera - Func&tions Funk&tioner - &Gain - Other Andra - &Copy &Kopiera - C&ut Klipp &ut - &Paste K&listra in - Edit in E&xternal Editor Editera i e&xtern redigerare - Mute Selection Tysta markering - Normalize Selection Normalisera markering - Fade In Selection Tona in markering - Fade Out Selection Tona ut Markering - Reverse Selection Reversera markering - Select Välj - Select &All Markera &Allt - &Deselect All A&vmarkera Allt - Window &Config - Wave edit tools - transport - WaveEdit tools - Solo - Cursor Markör @@ -14578,12 +12041,10 @@ the selected title is not unique MusEGui::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 @@ -14594,12 +12055,10 @@ 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. @@ -14900,122 +12359,90 @@ Saknat data tystas 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 @@ -15217,72 +12644,58 @@ Saknat data tystas PasteDialogBase - MusE: Paste Parts - Number and raster - insert - times - raster - ticks - Move, Merge, Clone - Move everything to the right - Move only affected parts to the right - Put everything into a single track - Merge with existing parts - Insert as clones (where possible) - OK - Cancel Avbryt @@ -15290,69 +12703,55 @@ Saknat data tystas PasteEventsDialogBase - MusE: Paste Events - Number and raster - insert - times - raster - - ticks - Paste options - Always into existing parts - Never into existing parts - Into existing parts if part has not to be expanded by more than - Put everything into the (selected) part - OK - Cancel Avbryt @@ -15640,49 +13039,38 @@ to be expanded by more than ProjectCreate - Create Project - Projects folder: - - - ... - Project Name: - Project is a Template - Project song file type: - Project Path to song file: - Create project folder (recommended for audio projects) - Song information: @@ -15835,14 +13223,10 @@ används inte för tillfället Andra - - Error - - Please first select the range for crescendo with the loop markers. @@ -15854,29 +13238,22 @@ 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 @@ -15885,7 +13262,6 @@ används inte för tillfället Kan inte transformera ej tomt spår - MusE: get file name MusE: hämta filnamn @@ -15911,7 +13287,6 @@ skapa? Avbryt - The directory %1 does not exist. @@ -15919,24 +13294,20 @@ Create it? - MusE: create directory MusE: skapa katalog - creating dir failed misslyckades med att skapa katalog - File %1 exists. Overwrite? - Open File %1 failed: %2 @@ -15953,7 +13324,6 @@ exists existerar - MusE: write MusE: skriv @@ -15977,13 +13347,10 @@ failed: misslyckades: - MusE: Open File MusE: Öppna fil - - None Ingen @@ -16004,7 +13371,6 @@ misslyckades: Grupp - No selection. Ignoring @@ -16012,122 +13378,98 @@ misslyckades: QuantBase - MusE: Quantize - Range Område - All Events Alla Händelser - Selected Events Valda Händelser - Looped Events Loopade Händelser - Selected Looped - Values Värden - Strength: - % - Threshold (ticks): - Quantize Len - Raster Rutnät - Whole - Half - 4th - 4th Triplet - 8th - 8th Triplet - 16th - 16th Triplet - 32th - 32th Triplet - Swing: - If the proposed change in tick or length is smaller than threshold, nothing is done. If swing=0, this is normal If swing is 33, you get a 2:1-rhythm. @@ -16136,12 +13478,10 @@ If swing is -33, you get a 1:2-rhythm. - OK - Cancel Avbryt @@ -16161,7 +13501,7 @@ If swing is -33, you get a 1:2-rhythm. Styrka - Don´t Quantize + Don´t Quantize Kvantisera Inte @@ -16191,57 +13531,46 @@ If swing is -33, you get a 1:2-rhythm. RemoveBase - MusE: Erase Notes - Range Område - All Events Alla Händelser - Selected Events Valda Händelser - Looped Events Loopade Händelser - Selected Looped - Thresholds - ticks - Velocity Hastighet - Length Längd - <!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; } @@ -16252,12 +13581,10 @@ p, li { white-space: pre-wrap; } - OK - Cancel Avbryt @@ -16581,57 +13908,46 @@ 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 @@ -16646,52 +13962,42 @@ 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 @@ -16699,22 +14005,18 @@ i MusEs lista över definierade controllers SS_PluginFront - Clear and unload effect - Load effect - Toggle display of effect parameters - Turn effect on/off @@ -16942,57 +14244,46 @@ i MusEs lista över definierade controllers SetlenBase - MusE: Set Note Length - Range Område - All Events Alla Händelser - Selected Events Valda Händelser - Looped Events Loopade Händelser - Selected Looped - Value Värde - New length - ticks - OK - Cancel Avbryt @@ -17015,38 +14306,30 @@ 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 @@ -17054,52 +14337,42 @@ 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 @@ -17114,7 +14387,6 @@ i MusEs lista över definierade controllers SimpleDrumsGuiBase - DrumSynth 0.1 @@ -17122,17 +14394,14 @@ i MusEs lista över definierade controllers SimpleSynthGui - &Load setup &Ladda setup - &Save setup &Spara setup - Load sample dialog @@ -17147,32 +14416,26 @@ i MusEs lista över definierade controllers SongInfo - Song Information - Show on song load - &Cancel &Avbryt - Alt+C - &Ok - Alt+O @@ -17195,74 +14458,58 @@ i MusEs lista över definierade controllers 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 Port and Soft Synth Configuration - - Type Typ - Midi connections Midikopplingar - Inst - Version - Description Beskrivning @@ -17500,52 +14747,42 @@ ljudfilerna skall hamna. TransposeBase - MusE: Transpose - Range Område - All Events Alla Händelser - Selected Events Valda Händelser - Looped Events Loopade Händelser - Selected Looped - Value Värde - Halftone-steps - OK - Cancel Avbryt @@ -17592,34 +14829,28 @@ ljudfilerna skall hamna. UnusedWaveFiles - Dialog - List of unused audio files in current project directory: - Current project - All .med files in current directory - Move files to 'unused' subdir - Cancel Avbryt @@ -17627,13 +14858,10 @@ in current VAMGui - - MusE: Save VAM Presets MusE: Spara VAM presets - MusE: Load VAM Presets @@ -17641,190 +14869,134 @@ in current 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. @@ -17840,32 +15012,26 @@ Robert Jonsson VelocityBase - MusE: Modify Velocity MusE: Modifiera Velocity - Range Område - All Events Alla Händelser - Selected Events Valda Händelser - Looped Events Loopade Händelser - Selected Looped @@ -17874,37 +15040,30 @@ Robert Jonsson Valda & Loopade - Values Värden - Rate: Hastighet: - % - Offset: Offset: - veloNew = (veloOld * rate) + offset - OK - Cancel Avbryt @@ -18056,174 +15215,126 @@ Saknat data tystas file_patterns - Midi/Kar (*.mid *.MID *.kar *.KAR *.mid.gz *.mid.bz2) - Midi (*.mid *.MID *.mid.gz *.mid.bz2) - Karaoke (*.kar *.KAR *.kar.gz *.kar.bz2) - - - - - - - - - - - - All Files (*) Alla filer (*) - Midi (*.mid) - Karaoke (*.kar) - all known files (*.med *.med.gz *.med.bz2 *.mid *.midi *.kar) - med Files (*.med *.med.gz *.med.bz2) - - - Uncompressed med Files (*.med) - - - gzip compressed med Files (*.med.gz) - - - bzip2 compressed med Files (*.med.bz2) - mid Files (*.mid *.midi *.kar *.MID *.MIDI *.KAR) - (*.jpg *.gif *.png) - (*.jpg) - (*.gif) - (*.png) - part Files (*.mpt *.mpt.gz *.mpt.bz2) - part Files (*.mpt) - gzip compressed part Files (*.mpt.gz) - bzip2 compressed part Files (*.mpt.bz2) - Presets (*.pre *.pre.gz *.pre.bz2) - Presets (*.pre) - gzip compressed presets (*.pre.gz) - bzip2 compressed presets (*.pre.bz2) - Presets (*.map *.map.gz *.map.bz2) - Presets (*.map) - gzip compressed presets (*.map.gz) - bzip2 compressed presets (*.map.bz2) - Wave/Binary (*.wav *.ogg *.bin) - Wave (*.wav *.ogg) - Binary (*.bin) @@ -18235,288 +15346,230 @@ 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 @@ -18524,873 +15577,698 @@ Saknat data tystas shortcuts - Transport: Start playback from current location - Transport: Toggle metronome - Transport: Stop Playback - Transport: Goto Start - Transport: Play, Stop, Rewind - Transport: Goto left marker - Transport: Goto right marker - Transport: Toggle Loop section - Transport: Toggle Record - Transport: Clear all rec enabled tracks - Toggle fullscreen - Edit: Copy - Edit: Copy in range - Edit: Undo - Edit: Redo - Edit: Cut - Edit: Paste - Edit: Paste (with dialog) - Edit: Delete - File: New project - File: Open from disk - File: Save project - File: Open recent file - File: Save as - File: Load template - File: Import midi file - File: Export midi file - File: Import midi part - File: Import audio file - File: Quit MusE - Edit: Select parts on track - Open pianoroll - Open drumeditor - Open listeditor - Open waveeditor - Open graphical mastertrack editor - Open list mastertrack editor - Open midi transformer - Add midi track - Add drum track - Add wave track - Add audio output - Add audio group - Add audio input - Add audio aux - Structure: Global cut - Structure: Global insert - Structure: Global split - Structure: Cut events - View: Open mixer #1 window - View: Open mixer #2 window - View: Toggle transport window - View: Toggle bigtime window - View: Open marker window - Settings: Follow song by page - Settings: Follow song off - Settings: Follow song continuous - Settings: Global configuration - Settings: Configure shortcuts - Settings: Configure metronome - Settings: Midi sync configuration - Settings: Midi file import/export configuration - Settings: Appearance settings - Settings: Midi ports / Soft Synth - Settings: Audio subsystem configuration - Midi: Edit midi instruments - Midi: Open midi input transform - Midi: Open midi input filter - Midi: Midi input transpose - Midi: Midi remote control - Midi: Random rhythm generator - Midi: Reset midi - Midi: Init midi - Midi: Midi local off - Audio: Bounce audio to track - Audio: Bounce audio to file - Audio: Restart audio - Automation: Mixer automation - Automation: Take mixer snapshot - Automation: Clear mixer automation - Help: Open Manual - Help: Toggle whatsthis mode - Edit: Edit selected part - Edit: Select nearest part on track above - Edit: Add nearest part on track above - Edit: Select nearest part on track below - Edit: Add nearest part on track below - Edit: Insert empty measure - Edit: Paste as clones - Edit: Paste as clones (with dialog) - Select track above - Select track below - Midi: Transpose - Edit: Select all - Edit: Select none - Edit: Invert Selection - Edit: Select events/parts inside locators - Edit: Select events/parts outside locators - Edit: Select previous part - Edit: Select next part - Edit: Select nearest part/event to the left or move cursor - Edit: Add nearest part/event to the left to selection - Edit: Select nearest part/event to the right or move cursor - Edit: Add nearest part/event to the right to selection - Edit: Set locators to selection - Edit: Increase pitch - Edit: Decrease pitch - Edit: Increase event position - Edit: Decrease event position - View: Zoom in - View: Zoom out - View: Goto Current Position - - View: Scroll left - Edit: Set Fixed Length on Midi Events - Quantize Kvantisera - Modify Note Length - Modify Velocity Modifiera Velocity - Edit: Crescendo - Edit: Thin Out - Edit: Erase Event - Edit: Delete Overlaps - Edit: Note Shift - Edit: Move Clock - Edit: Copy Measure - Edit: Erase Measure - Edit: Delete Measure - Edit: Create Measure - Edit: Change Event Color - Tool: Pointer - Tool: Pencil - Tool: Eraser - Tool: Line Draw - Tool: Cursor - Add note velocity 1 - Add note velocity 2 - Add note velocity 3 - Add note velocity 4 - Cursor step size: larger - Cursor step size: smaller - Instrument/Cursor up - Instrument/Cursor down - Tool: Scissor - Tool: Glue - Tool: Mute - Transport: Increase current position - Transport: Decrease current position - Transport: Increase current position, no snap - Transport: Decrease current position, no snap - Quantize: Set quantize to 1/1 note - Quantize: Set quantize to 1/2 note - Quantize: Set quantize to 1/4 note - Quantize: Set quantize to 1/8 note - Quantize: Set quantize to 1/16 note - Quantize: Set quantize to 1/32 note - Quantize: Set quantize to 1/64 note - Quantize: Toggle triol quantization - Quantize: Toggle punctuation quantization - Quantize: Toggle punctuation quantization (2) - Edit: Insert at location - Edit: Increase length - Edit: Decrease length - Insert Note Mata in Not - Insert SysEx Mata in SysEx - Insert Ctrl Mata in Ctrl - Insert Meta Mata in Meta - Insert Channel Aftertouch Mata in Aftertouch för kanal - Insert Key Aftertouch Mata in Key Aftertouch - Insert Tempo Sätt in tempo - Insert Signature Sätt in signatur - Change Event Position - Edit Event Value - Insert Key - Goto Next Marker - Goto Prev Marker -- cgit v1.2.3