From 44b52ebd99b614dcc28cc4da284ac583dcbdc216 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 7 Dec 2014 11:53:20 +0100 Subject: [PATCH 001/172] Add Editor superclass Provides a toolbar with play, record and stop buttons. --- include/Editor.h | 65 +++++++++++++++++++++++++++++++++++++++ src/gui/Editor.cpp | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 include/Editor.h create mode 100644 src/gui/Editor.cpp diff --git a/include/Editor.h b/include/Editor.h new file mode 100644 index 000000000..0416f0369 --- /dev/null +++ b/include/Editor.h @@ -0,0 +1,65 @@ +/* + * Editor.h - declaration of Editor class + * + * Copyright (c) 2014 Lukas W + * + * This file is part of LMMS - http://lmms.io + * + * 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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef EDITOR_COMMON_H +#define EDITOR_COMMON_H + +#include +#include + +#include "Timeline.h" +#include "ToolButton.h" + +/// \brief Superclass for editors with a toolbar. +/// +/// Those editors include the Song Editor, the Automation Editor, +/// B&B Editor, Piano Roll. +class Editor : public QMainWindow +{ + Q_OBJECT +public: + void setPlaying(bool playing=true); + +signals: + +protected: + /// \brief Constructor. + /// + /// \param record If set true, the editor's toolbar will contain record + /// buttons in addition to the play and stop buttons. + Editor(bool record = false); + virtual ~Editor(); + + + QToolBar* m_toolBar; + + QAbstractButton* m_playButton; + QAbstractButton* m_recordButton; + QAbstractButton* m_recordAccompanyButton; + QAbstractButton* m_stopButton; +private: +}; + + +#endif diff --git a/src/gui/Editor.cpp b/src/gui/Editor.cpp new file mode 100644 index 000000000..8f0e80da2 --- /dev/null +++ b/src/gui/Editor.cpp @@ -0,0 +1,76 @@ +/* + * Editor.cpp - implementation of Editor class + * + * Copyright (c) 2014 Lukas W + * + * This file is part of LMMS - http://lmms.io + * + * 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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "Editor.h" + +#include "embed.h" + +#include +#include + + +void Editor::setPlaying(bool playing) +{ + // If we're playing, show a pause icon + if (playing) + m_playButton->setIcon(embed::getIconPixmap("play")); + else + m_playButton->setIcon(embed::getIconPixmap("pause")); +} + +Editor::Editor(bool record) : + m_toolBar(new QToolBar(this)), + m_playButton(nullptr), + m_recordButton(nullptr), + m_recordAccompanyButton(nullptr), + m_stopButton(nullptr) +{ + auto addButton = [this](const char* pixmap_name, QString text, QString objectName) { + ToolButton* button = new ToolButton(embed::getIconPixmap(pixmap_name), text); + button->setObjectName(objectName); + m_toolBar->addWidget(button); + return button; + }; + + // Set up play button + m_playButton = addButton("play", tr("Play (Space)"), "playButton"); + + // Set up record buttons if wanted + if (record) + { + m_recordButton= addButton("record", tr("Record"), "recordButton"); + m_recordAccompanyButton = addButton("record_accompany", tr("Record while playing"), "recordAccompanyButton"); + } + + // Set up stop button + m_stopButton = addButton("stop", tr("Stop (Space)"), "stopButton"); + + // Add toolbar to window + addToolBar(Qt::TopToolBarArea, m_toolBar); +} + +Editor::~Editor() +{ + +} From c6ee6140120967f00b05d4144cfdf17e4e723a7c Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 7 Dec 2014 11:53:32 +0100 Subject: [PATCH 002/172] Clean up ToolButton class --- include/ToolButton.h | 44 ++++------------------------ src/gui/widgets/ToolButton.cpp | 52 +--------------------------------- 2 files changed, 7 insertions(+), 89 deletions(-) diff --git a/include/ToolButton.h b/include/ToolButton.h index 7e1183e14..27365d69d 100644 --- a/include/ToolButton.h +++ b/include/ToolButton.h @@ -34,48 +34,16 @@ class ToolButton : public QToolButton { Q_OBJECT public: - ToolButton( const QPixmap & _pixmap, const QString & _tooltip, - QObject * _receiver, const char * _slot, - QWidget * _parent ); + ToolButton(const QPixmap & _pixmap, const QString & _tooltip, + QObject * _receiver=nullptr, const char * _slot=nullptr, + QWidget * _parent=nullptr); - inline ToolButton( QWidget * _parent ) : - QToolButton( _parent ), - m_colorStandard( s_stdColor ), - m_colorHighlighted( s_hlColor ) - { - // setup colors - leaveEvent( NULL ); - } + inline ToolButton(QWidget * _parent) : + QToolButton(_parent) + { } virtual ~ToolButton(); - inline void setStandardColor( const QColor & _color ) - { - m_colorStandard = _color; - } - - inline void setHighlightedColor( const QColor & _color ) - { - m_colorHighlighted = _color; - } - - -protected: - virtual void enterEvent( QEvent * _ev ); - virtual void leaveEvent( QEvent * _ev ); - - -private slots: - void toggledBool( bool _on ); - - -private: - static const QColor s_stdColor; - static const QColor s_hlColor; - - QColor m_colorStandard; - QColor m_colorHighlighted; - } ; #endif diff --git a/src/gui/widgets/ToolButton.cpp b/src/gui/widgets/ToolButton.cpp index d2031abc6..20e601868 100644 --- a/src/gui/widgets/ToolButton.cpp +++ b/src/gui/widgets/ToolButton.cpp @@ -27,24 +27,12 @@ #include "ToolTip.h" -const QColor ToolButton::s_stdColor = QColor( 216, 216, 216 ); -const QColor ToolButton::s_hlColor = QColor( 240, 240, 240 ); - - - ToolButton::ToolButton( const QPixmap & _pixmap, const QString & _tooltip, QObject * _receiver, const char * _slot, QWidget * _parent ) : - QToolButton( _parent ), - m_colorStandard( s_stdColor ), - m_colorHighlighted( s_hlColor ) + QToolButton( _parent ) { setAutoFillBackground( false ); - QPalette pal = palette(); - pal.setColor( backgroundRole(), m_colorStandard ); - pal.setColor( QPalette::Window, m_colorStandard ); - pal.setColor( QPalette::Button, m_colorStandard ); - setPalette( pal ); if( _receiver != NULL && _slot != NULL ) { @@ -53,9 +41,6 @@ ToolButton::ToolButton( const QPixmap & _pixmap, const QString & _tooltip, ToolTip::add( this, _tooltip ); setFixedSize( 30, 30 ); setIcon( _pixmap ); - leaveEvent( NULL ); - connect( this, SIGNAL( toggled( bool ) ), this, - SLOT( toggledBool( bool ) ) ); } @@ -68,40 +53,5 @@ ToolButton::~ToolButton() -void ToolButton::enterEvent( QEvent * ) -{ - QPalette pal = palette(); - pal.setColor( backgroundRole(), m_colorHighlighted ); - pal.setColor( QPalette::Window, m_colorHighlighted ); - pal.setColor( QPalette::Button, m_colorHighlighted ); - setPalette( pal ); -} - - - - -void ToolButton::leaveEvent( QEvent * ) -{ - QPalette pal = palette(); - pal.setColor( backgroundRole(), m_colorStandard ); - pal.setColor( QPalette::Window, m_colorStandard ); - pal.setColor( QPalette::Button, m_colorStandard ); - setPalette( pal ); -} - - - - -void ToolButton::toggledBool( bool _on ) -{ - if( _on == true ) - { - emit( clicked() ); - } -} - - - - From 02006f98557526add0dc8f555b9b7cd68ab2fb41 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 7 Dec 2014 12:48:49 +0100 Subject: [PATCH 003/172] Use Editor superclass in AutomationEditor Split AutomationEditor -> AutomationEditor + AutomationEditorWindow --- include/AutomationEditor.h | 131 +++-- include/Editor.h | 2 +- include/Engine.h | 6 +- src/core/Engine.cpp | 4 +- src/core/Song.cpp | 6 +- src/gui/AutomationEditor.cpp | 941 ++++++++++++++---------------- src/gui/AutomationPatternView.cpp | 2 +- src/gui/Editor.cpp | 8 +- 8 files changed, 533 insertions(+), 567 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 83b0a022b..856b6177e 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -29,6 +29,8 @@ #include #include +#include "Editor.h" + #include "lmms_basics.h" #include "JournallingObject.h" #include "MidiTime.h" @@ -36,7 +38,6 @@ #include "ComboBoxModel.h" #include "Knob.h" - class QPainter; class QPixmap; class QScrollBar; @@ -47,6 +48,7 @@ class Timeline; class ToolButton; + class AutomationEditor : public QWidget, public JournallingObject { Q_OBJECT @@ -69,16 +71,13 @@ public: int quantization() const; - virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); - inline virtual QString nodeName() const + QString nodeName() const { - return( "automationeditor" ); + return "automationeditor"; } - void setPauseIcon( bool pause ); - // qproperty access methods QColor gridColor() const; QBrush graphColor() const; @@ -89,6 +88,14 @@ public: void setVertexColor( const QColor & c ); void setScaleColor( const QBrush & c ); + enum editModes + { + DRAW, + ERASE, + SELECT, + MOVE + }; + public slots: void update(); void updateAfterPatternChange(); @@ -97,7 +104,6 @@ public slots: protected: typedef AutomationPattern::timeMap timeMap; - virtual void closeEvent( QCloseEvent * _ce ); virtual void keyPressEvent( QKeyEvent * _ke ); virtual void leaveEvent( QEvent * _e ); virtual void mousePressEvent( QMouseEvent * _me ); @@ -117,7 +123,6 @@ protected: void getSelectedValues( timeMap & _selected_values ); void drawLine( int x0, float y0, int x1, float y1 ); - void disableTensionKnob(); protected slots: void play(); @@ -126,15 +131,14 @@ protected slots: void horScrolled( int _new_pos ); void verScrolled( int _new_pos ); - void drawButtonToggled(); - void eraseButtonToggled(); - void selectButtonToggled(); - void moveButtonToggled(); + void setEditMode(AutomationEditor::editModes mode); + void setEditMode(int mode); - void discreteButtonToggled(); - void linearButtonToggled(); - void cubicHermiteButtonToggled(); - void tensionChanged(); + void setProgressionType(AutomationPattern::ProgressionTypes type); + void setProgressionDiscrete(); + void setProgressionLinear(); + void setProgressionHermite(); + void setTension(); void copySelectedValues(); void cutSelectedValues(); @@ -149,14 +153,6 @@ protected slots: private: - enum editModes - { - DRAW, - ERASE, - SELECT, - MOVE - } ; - enum actions { NONE, @@ -166,11 +162,8 @@ private: } ; // some constants... - static const int INITIAL_WIDTH = 860; - static const int INITIAL_HEIGHT = 480; - static const int SCROLLBAR_SIZE = 16; - static const int TOP_MARGIN = 48; + static const int TOP_MARGIN = 16; static const int DEFAULT_Y_DELTA = 6; static const int DEFAULT_STEPS_PER_TACT = 16; @@ -182,41 +175,17 @@ private: AutomationEditor( const AutomationEditor & ); virtual ~AutomationEditor(); - static QPixmap * s_toolDraw; static QPixmap * s_toolErase; static QPixmap * s_toolSelect; static QPixmap * s_toolMove; - - QWidget * m_toolBar; - - ToolButton * m_playButton; - ToolButton * m_stopButton; - - ToolButton * m_drawButton; - ToolButton * m_eraseButton; - ToolButton * m_selectButton; - ToolButton * m_moveButton; - - ToolButton * m_discreteButton; - ToolButton * m_linearButton; - ToolButton * m_cubicHermiteButton; - Knob * m_tensionKnob; - FloatModel * m_tensionModel; - - ToolButton * m_cutButton; - ToolButton * m_copyButton; - ToolButton * m_pasteButton; - - ComboBox * m_zoomingXComboBox; - ComboBox * m_zoomingYComboBox; - ComboBox * m_quantizeComboBox; - ComboBoxModel m_zoomingXModel; ComboBoxModel m_zoomingYModel; ComboBoxModel m_quantizeModel; + FloatModel * m_tensionModel; + QMutex m_patternMutex; AutomationPattern * m_pattern; float m_minLevel; @@ -270,14 +239,64 @@ private: QColor m_vertexColor; QBrush m_scaleColor; - friend class Engine; + //friend class Engine; + friend class AutomationEditorWindow; signals: void currentPatternChanged(); void positionChanged( const MidiTime & ); - } ; + +class AutomationEditorWindow : public Editor +{ + Q_OBJECT + + static const int INITIAL_WIDTH = 860; + static const int INITIAL_HEIGHT = 480; +public: + AutomationEditorWindow(); + ~AutomationEditorWindow(); + + void setCurrentPattern(AutomationPattern* pattern); + const AutomationPattern* currentPattern(); + + int quantization() const; + + AutomationEditor* m_editor; + + virtual void closeEvent( QCloseEvent * _ce ); + +signals: + void currentPatternChanged(); + +protected slots: + void play(); + void stop(); + +private: + QAbstractButton * m_drawButton; + QAbstractButton * m_eraseButton; + QAbstractButton * m_selectButton; + QAbstractButton * m_moveButton; + + ToolButton * m_discreteButton; + ToolButton * m_linearButton; + ToolButton * m_cubicHermiteButton; + Knob * m_tensionKnob; + + ToolButton * m_cutButton; + ToolButton * m_copyButton; + ToolButton * m_pasteButton; + + ComboBox * m_zoomingXComboBox; + ComboBox * m_zoomingYComboBox; + ComboBox * m_quantizeComboBox; + + friend class Engine; +}; + + #endif diff --git a/include/Editor.h b/include/Editor.h index 0416f0369..ccc4af494 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -39,7 +39,7 @@ class Editor : public QMainWindow { Q_OBJECT public: - void setPlaying(bool playing=true); + void setPauseIcon(bool displayPauseIcon=true); signals: diff --git a/include/Engine.h b/include/Engine.h index b7839f817..827d72e65 100644 --- a/include/Engine.h +++ b/include/Engine.h @@ -33,7 +33,7 @@ #include "export.h" -class AutomationEditor; +class AutomationEditorWindow; class BBEditor; class BBTrackContainer; class DummyTrackContainer; @@ -128,7 +128,7 @@ public: return s_projectNotes; } - static AutomationEditor * automationEditor() + static AutomationEditorWindow * automationEditor() { return s_automationEditor; } @@ -188,7 +188,7 @@ private: static MainWindow * s_mainWindow; static FxMixerView * s_fxMixerView; static SongEditor* s_songEditor; - static AutomationEditor * s_automationEditor; + static AutomationEditorWindow * s_automationEditor; static BBEditor * s_bbEditor; static PianoRoll* s_pianoRoll; static ProjectNotes * s_projectNotes; diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index 67a6a669f..a921fde56 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -56,7 +56,7 @@ MainWindow * Engine::s_mainWindow = NULL; BBTrackContainer * Engine::s_bbTrackContainer = NULL; Song * Engine::s_song = NULL; SongEditor* Engine::s_songEditor = NULL; -AutomationEditor * Engine::s_automationEditor = NULL; +AutomationEditorWindow * Engine::s_automationEditor = NULL; BBEditor * Engine::s_bbEditor = NULL; PianoRoll* Engine::s_pianoRoll = NULL; ProjectNotes * Engine::s_projectNotes = NULL; @@ -99,7 +99,7 @@ void Engine::init( const bool _has_gui ) s_projectNotes = new ProjectNotes; s_bbEditor = new BBEditor( s_bbTrackContainer ); s_pianoRoll = new PianoRoll; - s_automationEditor = new AutomationEditor; + s_automationEditor = new AutomationEditorWindow; s_mainWindow->finalize(); } diff --git a/src/core/Song.cpp b/src/core/Song.cpp index ce686e79f..cd1a642e1 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -958,9 +958,9 @@ void Song::loadProject( const QString & _file_name ) { Engine::pianoRoll()->restoreState( node.toElement() ); } - else if( node.nodeName() == Engine::automationEditor()->nodeName() ) + else if( node.nodeName() == Engine::automationEditor()->m_editor->nodeName() ) { - Engine::automationEditor()->restoreState( node.toElement() ); + Engine::automationEditor()->m_editor->restoreState( node.toElement() ); } else if( node.nodeName() == Engine::getProjectNotes()->nodeName() ) { @@ -1027,7 +1027,7 @@ bool Song::saveProjectFile( const QString & _filename ) { Engine::getControllerRackView()->saveState( dataFile, dataFile.content() ); Engine::pianoRoll()->saveState( dataFile, dataFile.content() ); - Engine::automationEditor()->saveState( dataFile, dataFile.content() ); + Engine::automationEditor()->m_editor->saveState( dataFile, dataFile.content() ); Engine::getProjectNotes()->SerializingObject::saveState( dataFile, dataFile.content() ); m_playPos[Mode_PlaySong].m_timeLine->saveState( dataFile, dataFile.content() ); } diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index f47d8165b..a80b118d8 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -38,6 +38,7 @@ #include #include #include +#include #ifndef __USE_XOPEN @@ -107,6 +108,43 @@ AutomationEditor::AutomationEditor() : Qt::QueuedConnection ); connect( Engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ), this, SLOT( update() ) ); + + setAttribute( Qt::WA_OpaquePaintEvent, true ); + + m_tensionModel = new FloatModel(1.0, 0.0, 1.0, 0.01); + connect( m_tensionModel, SIGNAL( dataChanged() ), + this, SLOT( setTension() ) ); + + for( int i = 0; i < 7; ++i ) + { + m_quantizeModel.addItem( "1/" + QString::number( 1 << i ) ); + } + m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) ); + + // add time-line + m_timeLine = new Timeline( VALUES_WIDTH, 0, m_ppt, + Engine::getSong()->getPlayPos( + Song::Mode_PlayAutomationPattern ), + m_currentPosition, this ); + connect( this, SIGNAL( positionChanged( const MidiTime & ) ), + m_timeLine, SLOT( updatePosition( const MidiTime & ) ) ); + connect( m_timeLine, SIGNAL( positionChanged( const MidiTime & ) ), + this, SLOT( updatePosition( const MidiTime & ) ) ); + + removeSelection(); + + // init scrollbars + m_leftRightScroll = new QScrollBar( Qt::Horizontal, this ); + m_leftRightScroll->setSingleStep( 1 ); + connect( m_leftRightScroll, SIGNAL( valueChanged( int ) ), this, + SLOT( horScrolled( int ) ) ); + + m_topBottomScroll = new QScrollBar( Qt::Vertical, this ); + m_topBottomScroll->setSingleStep( 1 ); + m_topBottomScroll->setPageStep( 20 ); + connect( m_topBottomScroll, SIGNAL( valueChanged( int ) ), this, + SLOT( verScrolled( int ) ) ); + // init pixmaps if( s_toolDraw == NULL ) { @@ -129,324 +167,9 @@ AutomationEditor::AutomationEditor() : "edit_move" ) ); } - setAttribute( Qt::WA_OpaquePaintEvent, true ); - - // add time-line - m_timeLine = new Timeline( VALUES_WIDTH, 32, m_ppt, - Engine::getSong()->getPlayPos( - Song::Mode_PlayAutomationPattern ), - m_currentPosition, this ); - connect( this, SIGNAL( positionChanged( const MidiTime & ) ), - m_timeLine, SLOT( updatePosition( const MidiTime & ) ) ); - connect( m_timeLine, SIGNAL( positionChanged( const MidiTime & ) ), - this, SLOT( updatePosition( const MidiTime & ) ) ); - - - m_toolBar = new QWidget( this ); - m_toolBar->setFixedHeight( 32 ); - m_toolBar->move( 0, 0 ); - m_toolBar->setAutoFillBackground( true ); - QPalette pal; - pal.setBrush( m_toolBar->backgroundRole(), - embed::getIconPixmap( "toolbar_bg" ) ); - m_toolBar->setPalette( pal ); - - QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); - tb_layout->setMargin( 0 ); - tb_layout->setSpacing( 0 ); - - - // init control-buttons at the top - - m_playButton = new ToolButton( embed::getIconPixmap( "play" ), - tr( "Play/pause current pattern (Space)" ), - this, SLOT( play() ), m_toolBar ); - - - m_stopButton = new ToolButton( embed::getIconPixmap( "stop" ), - tr( "Stop playing of current pattern (Space)" ), - this, SLOT( stop() ), m_toolBar ); - - m_playButton->setObjectName( "playButton" ); - m_stopButton->setObjectName( "stopButton" ); - - m_playButton->setWhatsThis( - tr( "Click here if you want to play the current pattern. " - "This is useful while editing it. The pattern is " - "automatically looped when the end is reached." ) ); - m_stopButton->setWhatsThis( - tr( "Click here if you want to stop playing of the " - "current pattern." ) ); - - removeSelection(); - - // init scrollbars - m_leftRightScroll = new QScrollBar( Qt::Horizontal, this ); - m_leftRightScroll->setSingleStep( 1 ); - connect( m_leftRightScroll, SIGNAL( valueChanged( int ) ), this, - SLOT( horScrolled( int ) ) ); - - m_topBottomScroll = new QScrollBar( Qt::Vertical, this ); - m_topBottomScroll->setSingleStep( 1 ); - m_topBottomScroll->setPageStep( 20 ); - connect( m_topBottomScroll, SIGNAL( valueChanged( int ) ), this, - SLOT( verScrolled( int ) ) ); - - // init edit-buttons at the top - m_drawButton = new ToolButton( embed::getIconPixmap( "edit_draw" ), - tr( "Draw mode (Shift+D)" ), - this, SLOT( drawButtonToggled() ), - m_toolBar ); - m_drawButton->setCheckable( true ); - m_drawButton->setChecked( true ); - - m_eraseButton = new ToolButton( embed::getIconPixmap( "edit_erase" ), - tr( "Erase mode (Shift+E)" ), - this, SLOT( eraseButtonToggled() ), - m_toolBar ); - m_eraseButton->setCheckable( true ); - - //TODO: m_selectButton and m_moveButton are broken. - /*m_selectButton = new toolButton( embed::getIconPixmap( - "edit_select" ), - tr( "Select mode (Shift+S)" ), - this, SLOT( selectButtonToggled() ), - m_toolBar ); - m_selectButton->setCheckable( true ); - - m_moveButton = new toolButton( embed::getIconPixmap( "edit_move" ), - tr( "Move selection mode (Shift+M)" ), - this, SLOT( moveButtonToggled() ), - m_toolBar ); - m_moveButton->setCheckable( true );*/ - - QButtonGroup * tool_button_group = new QButtonGroup( this ); - tool_button_group->addButton( m_drawButton ); - tool_button_group->addButton( m_eraseButton ); - //tool_button_group->addButton( m_selectButton ); - //tool_button_group->addButton( m_moveButton ); - tool_button_group->setExclusive( true ); - - m_drawButton->setWhatsThis( - tr( "Click here and draw-mode will be activated. In this " - "mode you can add and move single values. This " - "is the default mode which is used most of the time. " - "You can also press 'Shift+D' on your keyboard to " - "activate this mode." ) ); - m_eraseButton->setWhatsThis( - tr( "Click here and erase-mode will be activated. In this " - "mode you can erase single values. You can also press " - "'Shift+E' on your keyboard to activate this mode." ) ); - /*m_selectButton->setWhatsThis( - tr( "Click here and select-mode will be activated. In this " - "mode you can select values. This is necessary " - "if you want to cut, copy, paste, delete, or move " - "values. You can also press 'Shift+S' on your keyboard " - "to activate this mode." ) ); - m_moveButton->setWhatsThis( - tr( "If you click here, move-mode will be activated. In this " - "mode you can move the values you selected in select-" - "mode. You can also press 'Shift+M' on your keyboard " - "to activate this mode." ) );*/ - - m_discreteButton = new ToolButton( embed::getIconPixmap( - "progression_discrete" ), - tr( "Discrete progression" ), - this, SLOT( discreteButtonToggled() ), - m_toolBar ); - m_discreteButton->setCheckable( true ); - m_discreteButton->setChecked( true ); - - m_linearButton = new ToolButton( embed::getIconPixmap( - "progression_linear" ), - tr( "Linear progression" ), - this, SLOT( linearButtonToggled() ), - m_toolBar ); - m_linearButton->setCheckable( true ); - - m_cubicHermiteButton = new ToolButton( embed::getIconPixmap( - "progression_cubic_hermite" ), - tr( "Cubic Hermite progression" ), - this, SLOT( - cubicHermiteButtonToggled() ), - m_toolBar ); - m_cubicHermiteButton->setCheckable( true ); - - // setup tension-stuff - m_tensionKnob = new Knob( knobSmall_17, this, "Tension" ); - m_tensionModel = new FloatModel(1.0, 0.0, 1.0, 0.01); - connect( m_tensionModel, SIGNAL( dataChanged() ), - this, SLOT( tensionChanged() ) ); - - QLabel * tension_lbl = new QLabel( m_toolBar ); - tension_lbl->setText( tr("Tension: ") ); - - tool_button_group = new QButtonGroup( this ); - tool_button_group->addButton( m_discreteButton ); - tool_button_group->addButton( m_linearButton ); - tool_button_group->addButton( m_cubicHermiteButton ); - tool_button_group->setExclusive( true ); - - m_discreteButton->setWhatsThis( - tr( "Click here to choose discrete progressions for this " - "automation pattern. The value of the connected " - "object will remain constant between control points " - "and be set immediately to the new value when each " - "control point is reached." ) ); - m_linearButton->setWhatsThis( - tr( "Click here to choose linear progressions for this " - "automation pattern. The value of the connected " - "object will change at a steady rate over time " - "between control points to reach the correct value at " - "each control point without a sudden change." ) ); - m_cubicHermiteButton->setWhatsThis( - tr( "Click here to choose cubic hermite progressions for this " - "automation pattern. The value of the connected " - "object will change in a smooth curve and ease in to " - "the peaks and valleys." ) ); - - m_cutButton = new ToolButton( embed::getIconPixmap( "edit_cut" ), - tr( "Cut selected values (Ctrl+X)" ), - this, SLOT( cutSelectedValues() ), - m_toolBar ); - - m_copyButton = new ToolButton( embed::getIconPixmap( "edit_copy" ), - tr( "Copy selected values (Ctrl+C)" ), - this, SLOT( copySelectedValues() ), - m_toolBar ); - - m_pasteButton = new ToolButton( embed::getIconPixmap( "edit_paste" ), - tr( "Paste values from clipboard " - "(Ctrl+V)" ), - this, SLOT( pasteValues() ), - m_toolBar ); - - m_cutButton->setWhatsThis( - tr( "Click here and selected values will be cut into the " - "clipboard. You can paste them anywhere in any pattern " - "by clicking on the paste button." ) ); - m_copyButton->setWhatsThis( - tr( "Click here and selected values will be copied into " - "the clipboard. You can paste them anywhere in any " - "pattern by clicking on the paste button." ) ); - m_pasteButton->setWhatsThis( - tr( "Click here and the values from the clipboard will be " - "pasted at the first visible measure." ) ); - - - // setup zooming-stuff - QLabel * zoom_x_lbl = new QLabel( m_toolBar ); - zoom_x_lbl->setPixmap( embed::getIconPixmap( "zoom_x" ) ); - - m_zoomingXComboBox = new ComboBox( m_toolBar ); - m_zoomingXComboBox->setFixedSize( 80, 22 ); - - for( int i = 0; i < 6; ++i ) - { - m_zoomingXModel.addItem( QString::number( 25 << i ) + "%" ); - } - m_zoomingXModel.setValue( m_zoomingXModel.findText( "100%" ) ); - - m_zoomingXComboBox->setModel( &m_zoomingXModel ); - - connect( &m_zoomingXModel, SIGNAL( dataChanged() ), - this, SLOT( zoomingXChanged() ) ); - - - QLabel * zoom_y_lbl = new QLabel( m_toolBar ); - zoom_y_lbl->setPixmap( embed::getIconPixmap( "zoom_y" ) ); - - m_zoomingYComboBox = new ComboBox( m_toolBar ); - m_zoomingYComboBox->setFixedSize( 80, 22 ); - - m_zoomingYModel.addItem( "Auto" ); - for( int i = 0; i < 7; ++i ) - { - m_zoomingYModel.addItem( QString::number( 25 << i ) + "%" ); - } - m_zoomingYModel.setValue( m_zoomingYModel.findText( "Auto" ) ); - - m_zoomingYComboBox->setModel( &m_zoomingYModel ); - - connect( &m_zoomingYModel, SIGNAL( dataChanged() ), - this, SLOT( zoomingYChanged() ) ); - - - // setup quantize-stuff - QLabel * quantize_lbl = new QLabel( m_toolBar ); - quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); - - m_quantizeComboBox = new ComboBox( m_toolBar ); - m_quantizeComboBox->setFixedSize( 60, 22 ); - - for( int i = 0; i < 7; ++i ) - { - m_quantizeModel.addItem( "1/" + QString::number( 1 << i ) ); - } - m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) ); - - m_quantizeComboBox->setModel( &m_quantizeModel ); - - - tb_layout->addSpacing( 5 ); - tb_layout->addWidget( m_playButton ); - tb_layout->addWidget( m_stopButton ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( m_drawButton ); - tb_layout->addWidget( m_eraseButton ); - //tb_layout->addWidget( m_selectButton ); - //tb_layout->addWidget( m_moveButton ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( m_discreteButton ); - tb_layout->addWidget( m_linearButton ); - tb_layout->addWidget( m_cubicHermiteButton ); - tb_layout->addSpacing( 5 ); - tb_layout->addWidget( tension_lbl ); - tb_layout->addSpacing( 5 ); - tb_layout->addWidget( m_tensionKnob ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( m_cutButton ); - tb_layout->addWidget( m_copyButton ); - tb_layout->addWidget( m_pasteButton ); - tb_layout->addSpacing( 10 ); - m_timeLine->addToolButtons( m_toolBar ); - tb_layout->addSpacing( 15 ); - tb_layout->addWidget( zoom_x_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_zoomingXComboBox ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( zoom_y_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_zoomingYComboBox ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( quantize_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_quantizeComboBox ); - tb_layout->addStretch(); - - // setup our actual window - setFocusPolicy( Qt::StrongFocus ); - setFocus(); - setWindowIcon( embed::getIconPixmap( "automation" ) ); setCurrentPattern( NULL ); setMouseTracking( true ); - - setMinimumSize( tb_layout->minimumSize().width(), 128 ); - - // add us to workspace - if( Engine::mainWindow()->workspace() ) - { - Engine::mainWindow()->workspace()->addSubWindow( this ); - parentWidget()->resize( INITIAL_WIDTH, INITIAL_HEIGHT ); - parentWidget()->move( 5, 5 ); - parentWidget()->hide(); - } - else - { - resize( INITIAL_WIDTH, INITIAL_HEIGHT ); - hide(); - } } @@ -492,19 +215,6 @@ void AutomationEditor::loadSettings( const QDomElement & _this ) - -void AutomationEditor::setPauseIcon( bool pause ) -{ - if( pause == true ) - { - m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); - } - else - { - m_playButton->setIcon( embed::getIconPixmap( "play" ) ); - } -} - // qproperty access methods QColor AutomationEditor::gridColor() const @@ -541,27 +251,6 @@ void AutomationEditor::updateAfterPatternChange() return; } - if( m_pattern->progressionType() == - AutomationPattern::DiscreteProgression && - !m_discreteButton->isChecked() ) - { - m_discreteButton->setChecked( true ); - } - - if( m_pattern->progressionType() == - AutomationPattern::LinearProgression && - !m_linearButton->isChecked() ) - { - m_linearButton->setChecked( true ); - } - - if( m_pattern->progressionType() == - AutomationPattern::CubicHermiteProgression && - !m_cubicHermiteButton->isChecked() ) - { - m_cubicHermiteButton->setChecked( true ); - } - m_minLevel = m_pattern->firstObject()->minValue(); m_maxLevel = m_pattern->firstObject()->maxValue(); m_step = m_pattern->firstObject()->step(); @@ -605,23 +294,6 @@ void AutomationEditor::removeSelection() -void AutomationEditor::closeEvent( QCloseEvent * _ce ) -{ - QApplication::restoreOverrideCursor(); - if( parentWidget() ) - { - parentWidget()->hide(); - } - else - { - hide(); - } - _ce->ignore(); -} - - - - void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) { switch( _ke->key() ) @@ -685,44 +357,12 @@ void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) update(); _ke->accept(); } - break;*/ - - case Qt::Key_D: - if( _ke->modifiers() & Qt::ShiftModifier ) - { - m_drawButton->setChecked( true ); - _ke->accept(); - } break; - case Qt::Key_E: - if( _ke->modifiers() & Qt::ShiftModifier ) - { - m_eraseButton->setChecked( true ); - _ke->accept(); - } - break; - //TODO: m_selectButton and m_moveButton are broken. - /*case Qt::Key_S: - if( _ke->modifiers() & Qt::ShiftModifier ) - { - m_selectButton->setChecked( true ); - _ke->accept(); - } - break; - - case Qt::Key_M: - if( _ke->modifiers() & Qt::ShiftModifier ) - { - m_moveButton->setChecked( true ); - _ke->accept(); - } - break;*/ - case Qt::Key_Delete: deleteSelectedValues(); _ke->accept(); - break; + break;*/ case Qt::Key_Space: if( Engine::getSong()->isPlaying() ) @@ -812,14 +452,6 @@ void AutomationEditor::drawLine( int _x0, float _y0, int _x1, float _y1 ) -void AutomationEditor::disableTensionKnob() -{ - m_tensionKnob->setEnabled( false ); -} - - - - void AutomationEditor::mousePressEvent( QMouseEvent * _me ) { QMutexLocker m( &m_patternMutex ); @@ -941,7 +573,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) { // when clicking right in select-move, we // switch to move-mode - m_moveButton->setChecked( true ); + //m_moveButton->setChecked( true ); } else if( _me->button() == Qt::LeftButton && m_editMode == MOVE ) @@ -961,7 +593,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) { // when clicking right in select-move, we // switch to draw-mode - m_drawButton->setChecked( true ); + //m_drawButton->setChecked( true ); } update(); @@ -1822,7 +1454,6 @@ void AutomationEditor::resizeEvent( QResizeEvent * ) Engine::getSong()->getPlayPos( Song::Mode_PlayAutomationPattern ).m_timeLine->setFixedWidth( width() ); } - m_toolBar->setFixedWidth( width() ); updateTopBottomLevels(); update(); @@ -1960,8 +1591,6 @@ void AutomationEditor::play() Engine::getSong()->togglePause(); } } - - setPauseIcon( Engine::getSong()->isPlaying() ); } @@ -2009,102 +1638,69 @@ void AutomationEditor::verScrolled( int _new_pos ) -void AutomationEditor::drawButtonToggled() +void AutomationEditor::setEditMode(AutomationEditor::editModes mode) { - m_editMode = DRAW; - removeSelection(); - update(); -} + if (m_editMode == mode) + return; - - - -void AutomationEditor::eraseButtonToggled() -{ - m_editMode = ERASE; - removeSelection(); - update(); -} - - - - -void AutomationEditor::selectButtonToggled() -{ - m_editMode = SELECT; - removeSelection(); - update(); -} - - - - -void AutomationEditor::moveButtonToggled() -{ - m_editMode = MOVE; - m_selValuesForMove.clear(); - getSelectedValues( m_selValuesForMove ); - update(); -} - - - - -void AutomationEditor::discreteButtonToggled() -{ - if ( validPattern() ) + m_editMode = mode; + switch (mode) { - QMutexLocker m( &m_patternMutex ); - disableTensionKnob(); - m_pattern->setProgressionType( - AutomationPattern::DiscreteProgression ); + case DRAW: + case ERASE: + case SELECT: + removeSelection(); + break; + case MOVE: + m_selValuesForMove.clear(); + getSelectedValues(m_selValuesForMove); + } + update(); +} + + + +void AutomationEditor::setEditMode(int mode) +{ + setEditMode((AutomationEditor::editModes) mode); +} + + + + +void AutomationEditor::setProgressionType(AutomationPattern::ProgressionTypes type) +{ + if (validPattern()) + { + QMutexLocker m(&m_patternMutex); + m_pattern->setProgressionType(type); Engine::getSong()->setModified(); update(); } } - - -void AutomationEditor::linearButtonToggled() +void AutomationEditor::setProgressionDiscrete() { - if ( validPattern() ) - { - QMutexLocker m( &m_patternMutex ); - disableTensionKnob(); - m_pattern->setProgressionType( - AutomationPattern::LinearProgression ); - Engine::getSong()->setModified(); - update(); - } + setProgressionType(AutomationPattern::DiscreteProgression); +} + + +void AutomationEditor::setProgressionLinear() +{ + setProgressionType(AutomationPattern::LinearProgression); +} + + +void AutomationEditor::setProgressionHermite() +{ + setProgressionType(AutomationPattern::CubicHermiteProgression); } -void AutomationEditor::cubicHermiteButtonToggled() -{ - if ( validPattern() ) - { - m_tensionKnob->setModel( m_tensionModel ); - m_tensionKnob->setEnabled( true ); - ToolTip::add( m_tensionKnob, tr( "Tension value for spline" ) ); - m_tensionKnob->setWhatsThis( - tr( "A higher tension value may make a smoother curve " - "but overshoot some values. A low tension " - "value will cause the slope of the curve to " - "level off at each control point." ) ); - m_pattern->setProgressionType( - AutomationPattern::CubicHermiteProgression ); - Engine::getSong()->setModified(); - update(); - } -} - - - - -void AutomationEditor::tensionChanged() +void AutomationEditor::setTension() { m_pattern->setTension( QString::number( m_tensionModel->value() ) ); update(); @@ -2366,10 +1962,7 @@ void AutomationEditor::zoomingYChanged() int AutomationEditor::quantization() const { - return( DefaultTicksPerTact / - m_quantizeComboBox->model()->currentText().right( - m_quantizeComboBox->model()->currentText().length() - - 2 ).toInt() ); + return DefaultTicksPerTact / (1 << m_quantizeModel.value()); } @@ -2425,3 +2018,357 @@ void AutomationEditor::updateTopBottomLevels() + + +AutomationEditorWindow::AutomationEditorWindow() : + Editor(), + m_editor(new AutomationEditor()) +{ + setCentralWidget(m_editor); + + + + // Play/stop buttons + m_playButton->setToolTip(tr( "Play/pause current pattern (Space)" )); + m_playButton->setWhatsThis( + tr( "Click here if you want to play the current pattern. " + "This is useful while editing it. The pattern is " + "automatically looped when the end is reached." ) ); + + m_stopButton->setToolTip(tr("Stop playing of current pattern (Space)")); + m_stopButton->setWhatsThis( + tr( "Click here if you want to stop playing of the " + "current pattern." ) ); + + // Set up signals) + connect(m_playButton, SIGNAL(clicked()), this, SLOT(play())); + connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); + + + // Edit mode buttons + + m_drawButton = new ToolButton(embed::getIconPixmap( "edit_draw" ), + tr( "Draw mode (Shift+D)" )); + m_drawButton->setCheckable( true ); + m_drawButton->setChecked( true ); + m_drawButton->setShortcut(Qt::SHIFT | Qt::Key_D); + + m_eraseButton = new ToolButton( embed::getIconPixmap( "edit_erase" ), + tr( "Erase mode (Shift+E)" )); + m_eraseButton->setCheckable( true ); + m_eraseButton->setShortcut(Qt::SHIFT | Qt::Key_E); + + //TODO: m_selectButton and m_moveButton are broken. + /*m_selectButton = new ToolButton( embed::getIconPixmap( + "edit_select" ), + tr( "Select mode (Shift+S)" ), + this, SLOT( selectButtonToggled() ), + m_toolBar ); + m_selectButton->setCheckable( true ); + + m_moveButton = new ToolButton( embed::getIconPixmap( "edit_move" ), + tr( "Move selection mode (Shift+M)" ), + this, SLOT( moveButtonToggled() ), + m_toolBar ); + m_moveButton->setCheckable( true );*/ + + QSignalMapper* signalmapper = new QSignalMapper(this); + signalmapper->setMapping(m_drawButton, AutomationEditor::DRAW); + signalmapper->setMapping(m_eraseButton, AutomationEditor::ERASE); +// signalmapper->setMapping(m_selectButton, AutomationEditor::SELECT); +// signalmapper->setMapping(m_moveButton, AutomationEditor::MOVE); + + connect(m_drawButton, SIGNAL(clicked()), signalmapper, SLOT(map())); + connect(m_eraseButton, SIGNAL(clicked()), signalmapper, SLOT(map())); +// connect(m_selectButton, SIGNAL(triggered()), signalmapper, SLOT(map())); +// connect(m_moveButton, SIGNAL(triggered()), signalmapper, SLOT(map())); + + connect(signalmapper, SIGNAL(mapped(int)), m_editor, SLOT(setEditMode(int))); + + QButtonGroup * tool_button_group = new QButtonGroup(); + tool_button_group->addButton( m_drawButton ); + tool_button_group->addButton( m_eraseButton ); + //tool_button_group->addButton( m_selectButton ); + //tool_button_group->addButton( m_moveButton ); + tool_button_group->setExclusive( true ); + + m_drawButton->setWhatsThis( + tr( "Click here and draw-mode will be activated. In this " + "mode you can add and move single values. This " + "is the default mode which is used most of the time. " + "You can also press 'Shift+D' on your keyboard to " + "activate this mode." ) ); + m_eraseButton->setWhatsThis( + tr( "Click here and erase-mode will be activated. In this " + "mode you can erase single values. You can also press " + "'Shift+E' on your keyboard to activate this mode." ) ); + /*m_selectButton->setWhatsThis( + tr( "Click here and select-mode will be activated. In this " + "mode you can select values. This is necessary " + "if you want to cut, copy, paste, delete, or move " + "values. You can also press 'Shift+S' on your keyboard " + "to activate this mode." ) ); + m_moveButton->setWhatsThis( + tr( "If you click here, move-mode will be activated. In this " + "mode you can move the values you selected in select-" + "mode. You can also press 'Shift+M' on your keyboard " + "to activate this mode." ) );*/ + + + + // Progression type buttons + + m_discreteButton = new ToolButton( embed::getIconPixmap( + "progression_discrete" ), + tr( "Discrete progression" ), + m_editor, SLOT( setProgressionDiscrete() ), + m_toolBar ); + m_discreteButton->setCheckable( true ); + m_discreteButton->setChecked( true ); + + m_linearButton = new ToolButton( embed::getIconPixmap( + "progression_linear" ), + tr( "Linear progression" ), + m_editor, SLOT( setProgressionLinear() ), + m_toolBar ); + m_linearButton->setCheckable( true ); + + m_cubicHermiteButton = new ToolButton( embed::getIconPixmap( + "progression_cubic_hermite" ), + tr( "Cubic Hermite progression" ), + m_editor, SLOT( + setProgressionHermite() ), + m_toolBar ); + m_cubicHermiteButton->setCheckable( true ); + + // setup tension-stuff + m_tensionKnob = new Knob( knobSmall_17, this, "Tension" ); + + tool_button_group = new QButtonGroup( this ); + tool_button_group->addButton( m_discreteButton ); + tool_button_group->addButton( m_linearButton ); + tool_button_group->addButton( m_cubicHermiteButton ); + tool_button_group->setExclusive( true ); + + m_discreteButton->setWhatsThis( + tr( "Click here to choose discrete progressions for this " + "automation pattern. The value of the connected " + "object will remain constant between control points " + "and be set immediately to the new value when each " + "control point is reached." ) ); + m_linearButton->setWhatsThis( + tr( "Click here to choose linear progressions for this " + "automation pattern. The value of the connected " + "object will change at a steady rate over time " + "between control points to reach the correct value at " + "each control point without a sudden change." ) ); + m_cubicHermiteButton->setWhatsThis( + tr( "Click here to choose cubic hermite progressions for this " + "automation pattern. The value of the connected " + "object will change in a smooth curve and ease in to " + "the peaks and valleys." ) ); + + + + // Copy paste buttons + + m_cutButton = new ToolButton( embed::getIconPixmap( "edit_cut" ), + tr( "Cut selected values (Ctrl+X)" ), + m_editor, SLOT( cutSelectedValues() ), + m_toolBar ); + + m_copyButton = new ToolButton( embed::getIconPixmap( "edit_copy" ), + tr( "Copy selected values (Ctrl+C)" ), + m_editor, SLOT( copySelectedValues() ), + m_toolBar ); + + m_pasteButton = new ToolButton( embed::getIconPixmap( "edit_paste" ), + tr( "Paste values from clipboard " + "(Ctrl+V)" ), + m_editor, SLOT( pasteValues() ), + m_toolBar ); + + m_cutButton->setWhatsThis( + tr( "Click here and selected values will be cut into the " + "clipboard. You can paste them anywhere in any pattern " + "by clicking on the paste button." ) ); + m_copyButton->setWhatsThis( + tr( "Click here and selected values will be copied into " + "the clipboard. You can paste them anywhere in any " + "pattern by clicking on the paste button." ) ); + m_pasteButton->setWhatsThis( + tr( "Click here and the values from the clipboard will be " + "pasted at the first visible measure." ) ); + + + + // Zoom controls + + QLabel * zoom_x_label = new QLabel( m_toolBar ); + zoom_x_label->setPixmap( embed::getIconPixmap( "zoom_x" ) ); + + m_zoomingXComboBox = new ComboBox( m_toolBar ); + m_zoomingXComboBox->setFixedSize( 80, 22 ); + + for( int i = 0; i < 6; ++i ) + { + m_editor->m_zoomingXModel.addItem( QString::number( 25 << i ) + "%" ); + } + m_editor->m_zoomingXModel.setValue( m_editor->m_zoomingXModel.findText( "100%" ) ); + + m_zoomingXComboBox->setModel( &m_editor->m_zoomingXModel ); + + connect( &m_editor->m_zoomingXModel, SIGNAL( dataChanged() ), + m_editor, SLOT( zoomingXChanged() ) ); + + + QLabel * zoom_y_label = new QLabel( m_toolBar ); + zoom_y_label->setPixmap( embed::getIconPixmap( "zoom_y" ) ); + + m_zoomingYComboBox = new ComboBox( m_toolBar ); + m_zoomingYComboBox->setFixedSize( 80, 22 ); + + m_editor->m_zoomingYModel.addItem( "Auto" ); + for( int i = 0; i < 7; ++i ) + { + m_editor->m_zoomingYModel.addItem( QString::number( 25 << i ) + "%" ); + } + m_editor->m_zoomingYModel.setValue( m_editor->m_zoomingYModel.findText( "Auto" ) ); + + m_zoomingYComboBox->setModel( &m_editor->m_zoomingYModel ); + + connect( &m_editor->m_zoomingYModel, SIGNAL( dataChanged() ), + m_editor, SLOT( zoomingYChanged() ) ); + + + + // Quantization controls + + QLabel * quantize_lbl = new QLabel( m_toolBar ); + quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); + + m_quantizeComboBox = new ComboBox( m_toolBar ); + m_quantizeComboBox->setFixedSize( 60, 22 ); + + m_quantizeComboBox->setModel( &m_editor->m_quantizeModel ); + + + m_toolBar->addSeparator();; + m_toolBar->addWidget( m_drawButton ); + m_toolBar->addWidget( m_eraseButton ); + //m_toolBar->addWidget( m_selectButton ); + //m_toolBar->addWidget( m_moveButton ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( m_discreteButton ); + m_toolBar->addWidget( m_linearButton ); + m_toolBar->addWidget( m_cubicHermiteButton ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( new QLabel( tr("Tension: "), m_toolBar )); + m_toolBar->addWidget( m_tensionKnob ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( m_cutButton ); + m_toolBar->addWidget( m_copyButton ); + m_toolBar->addWidget( m_pasteButton ); + m_toolBar->addSeparator(); + QWidget* timeLineButtons = new QWidget(); + timeLineButtons->setFixedHeight(m_cutButton->height()); + timeLineButtons->move(0,0); + QLayout* l = new QHBoxLayout( timeLineButtons ); + l->setSpacing(0); l->setMargin(0); + m_editor->m_timeLine->addToolButtons(timeLineButtons); + m_toolBar->addWidget(timeLineButtons); + m_toolBar->addSeparator(); + m_toolBar->addWidget( zoom_x_label ); + m_toolBar->addWidget( m_zoomingXComboBox ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( zoom_y_label ); + m_toolBar->addWidget( m_zoomingYComboBox ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( quantize_lbl ); + m_toolBar->addWidget( m_quantizeComboBox ); + + // Setup our actual window + setFocusPolicy( Qt::StrongFocus ); + setFocus(); + setWindowIcon( embed::getIconPixmap( "automation" ) ); + + // Add us to workspace + if( Engine::mainWindow()->workspace() ) + { + Engine::mainWindow()->workspace()->addSubWindow( this ); + parentWidget()->resize( INITIAL_WIDTH, INITIAL_HEIGHT ); + parentWidget()->move( 5, 5 ); + parentWidget()->hide(); + } + else + { + resize( INITIAL_WIDTH, INITIAL_HEIGHT ); + hide(); + } +} + + +AutomationEditorWindow::~AutomationEditorWindow() +{ +} + + +void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) +{ + m_editor->setCurrentPattern(pattern); + + if (pattern == nullptr) + return; + + switch(m_editor->m_pattern->progressionType()) + { + case AutomationPattern::DiscreteProgression: + m_discreteButton->setChecked(true); + break; + case AutomationPattern::LinearProgression: + m_linearButton->setChecked(true); + break; + case AutomationPattern::CubicHermiteProgression: + m_cubicHermiteButton->setChecked(true); + break; + } + + emit currentPatternChanged(); +} + + +const AutomationPattern* AutomationEditorWindow::currentPattern() +{ + return m_editor->currentPattern(); +} + + +int AutomationEditorWindow::quantization() const +{ + return m_editor->quantization(); +} + +void AutomationEditorWindow::closeEvent(QCloseEvent* _ce) +{ + QApplication::restoreOverrideCursor(); + if( parentWidget() ) + { + parentWidget()->hide(); + } + else + { + hide(); + } + _ce->ignore(); +} + +void AutomationEditorWindow::play() +{ + m_editor->play(); + setPauseIcon(Engine::getSong()->isPlaying()); +} + +void AutomationEditorWindow::stop() +{ + m_editor->stop(); +} diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 17fbb559f..fba27ceb1 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -125,7 +125,7 @@ void AutomationPatternView::disconnectObject( QAction * _a ) //If automation editor is opened, update its display after disconnection if( Engine::automationEditor() ) { - Engine::automationEditor()->updateAfterPatternChange(); + Engine::automationEditor()->m_editor->updateAfterPatternChange(); } //if there is no more connection connected to the AutomationPattern diff --git a/src/gui/Editor.cpp b/src/gui/Editor.cpp index 8f0e80da2..e292ced1b 100644 --- a/src/gui/Editor.cpp +++ b/src/gui/Editor.cpp @@ -30,13 +30,13 @@ #include -void Editor::setPlaying(bool playing) +void Editor::setPauseIcon(bool displayPauseIcon) { // If we're playing, show a pause icon - if (playing) - m_playButton->setIcon(embed::getIconPixmap("play")); - else + if (displayPauseIcon) m_playButton->setIcon(embed::getIconPixmap("pause")); + else + m_playButton->setIcon(embed::getIconPixmap("play")); } Editor::Editor(bool record) : From 3e9cc61042d753ba73d0e0786ae7ecb618e68b18 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 7 Dec 2014 17:37:22 +0100 Subject: [PATCH 004/172] SongEditor: Use Editor superclass --- include/Engine.h | 6 +- include/SongEditor.h | 44 ++++-- src/core/Engine.cpp | 4 +- src/core/Song.cpp | 2 +- src/gui/SongEditor.cpp | 307 +++++++++++++++++++---------------------- src/tracks/BBTrack.cpp | 2 +- 6 files changed, 184 insertions(+), 181 deletions(-) diff --git a/include/Engine.h b/include/Engine.h index 827d72e65..fb5ad0b5f 100644 --- a/include/Engine.h +++ b/include/Engine.h @@ -45,7 +45,7 @@ class Mixer; class PianoRoll; class ProjectNotes; class Song; -class SongEditor; +class SongEditorWindow; class Ladspa2LMMS; class ControllerRackView; @@ -108,7 +108,7 @@ public: return s_fxMixerView; } - static SongEditor* songEditor() + static SongEditorWindow* songEditor() { return s_songEditor; } @@ -187,7 +187,7 @@ private: // GUI static MainWindow * s_mainWindow; static FxMixerView * s_fxMixerView; - static SongEditor* s_songEditor; + static SongEditorWindow* s_songEditor; static AutomationEditorWindow * s_automationEditor; static BBEditor * s_bbEditor; static PianoRoll* s_pianoRoll; diff --git a/include/SongEditor.h b/include/SongEditor.h index bb40155eb..b51b22e1c 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -27,6 +27,7 @@ #ifndef SONG_EDITOR_H #define SONG_EDITOR_H +#include "Editor.h" #include "TrackContainerView.h" class QLabel; @@ -34,6 +35,7 @@ class QScrollBar; class AutomatableSlider; class ComboBox; +class ComboBoxModel; class LcdSpinBox; class MeterDialog; class Song; @@ -56,6 +58,12 @@ class SongEditor : public TrackContainerView { Q_OBJECT public: + enum Mode + { + DrawMode, + EditMode + }; + SongEditor( Song * _song ); virtual ~SongEditor(); @@ -65,6 +73,10 @@ public: public slots: void scrolled( int _new_pos ); + void setMode(Mode mode); + void setModeDraw(); + void setModeEdit(); + private slots: void setHighQuality( bool ); @@ -119,6 +131,28 @@ private: TextFloat * m_mvsStatus; TextFloat * m_mpsStatus; + positionLine * m_positionLine; + + ComboBoxModel* m_zoomingModel; + + bool m_scrollBack; + bool m_smoothScroll; + + Mode m_mode; + + friend class SongEditorWindow; + +} ; + +class SongEditorWindow : public Editor +{ + Q_OBJECT +public: + SongEditorWindow(Song* song); + + SongEditor* m_editor; + +private: ToolButton * m_addBBTrackButton; ToolButton * m_addSampleTrackButton; ToolButton * m_addAutomationTrackButton; @@ -127,14 +161,6 @@ private: ToolButton * m_editModeButton; ComboBox * m_zoomingComboBox; - - positionLine * m_positionLine; - - bool m_scrollBack; - bool m_smoothScroll; - -} ; - - +}; #endif diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index a921fde56..a9d4a65a9 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -55,7 +55,7 @@ FxMixerView * Engine::s_fxMixerView = NULL; MainWindow * Engine::s_mainWindow = NULL; BBTrackContainer * Engine::s_bbTrackContainer = NULL; Song * Engine::s_song = NULL; -SongEditor* Engine::s_songEditor = NULL; +SongEditorWindow* Engine::s_songEditor = NULL; AutomationEditorWindow * Engine::s_automationEditor = NULL; BBEditor * Engine::s_bbEditor = NULL; PianoRoll* Engine::s_pianoRoll = NULL; @@ -93,7 +93,7 @@ void Engine::init( const bool _has_gui ) if( s_hasGUI ) { s_mainWindow = new MainWindow; - s_songEditor = new SongEditor( s_song ); + s_songEditor = new SongEditorWindow( s_song ); s_fxMixerView = new FxMixerView; s_controllerRackView = new ControllerRackView; s_projectNotes = new ProjectNotes; diff --git a/src/core/Song.cpp b/src/core/Song.cpp index cd1a642e1..dc19a3d65 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -733,7 +733,7 @@ void Song::clearProject() } if( Engine::songEditor() ) { - Engine::songEditor()->clearAllTracks(); + Engine::songEditor()->m_editor->clearAllTracks(); } if( Engine::fxMixerView() ) { diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index bb477be56..c7a47d55f 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -77,15 +77,11 @@ void positionLine::paintEvent( QPaintEvent * _pe ) SongEditor::SongEditor( Song * _song ) : TrackContainerView( _song ), m_song( _song ), + m_zoomingModel(new ComboBoxModel()), m_scrollBack( false ), - m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ) + m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ), + m_mode(DrawMode) { - setWindowTitle( tr( "Song-Editor" ) ); - setWindowIcon( embed::getIconPixmap( "songeditor" ) ); - - setFocusPolicy( Qt::StrongFocus ); - setFocus(); - // create time-line int widgetTotal = ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt()==1 ? @@ -103,6 +99,8 @@ SongEditor::SongEditor( Song * _song ) : m_positionLine = new positionLine( this ); + static_cast( layout() )->insertWidget( 1, m_timeLine ); + // let's get notified when loading a project connect( m_song, SIGNAL( projectLoaded() ), @@ -229,154 +227,7 @@ SongEditor::SongEditor( Song * _song ) : Engine::mainWindow()->addWidgetToToolBar( vc_w ); - - // create own toolbar - m_toolBar = new QWidget( this ); - m_toolBar->setFixedHeight( 32 ); - m_toolBar->setAutoFillBackground( true ); - QPalette pal; - pal.setBrush( m_toolBar->backgroundRole(), - embed::getIconPixmap( "toolbar_bg" ) ); - m_toolBar->setPalette( pal ); - - static_cast( layout() )->insertWidget( 0, m_toolBar ); - static_cast( layout() )->insertWidget( 1, m_timeLine ); - - QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); - tb_layout->setMargin( 0 ); - tb_layout->setSpacing( 0 ); - - - // fill own tool-bar - m_playButton = new ToolButton( embed::getIconPixmap( "play" ), - tr( "Play song (Space)" ), - this, SLOT( play() ), m_toolBar ); - m_playButton->setObjectName( "playButton" ); - - m_recordButton = new ToolButton( embed::getIconPixmap( "record" ), - tr( "Record samples from Audio-device" ), - this, SLOT( record() ), m_toolBar ); - m_recordButton->setObjectName( "recordButton" ); - - m_recordAccompanyButton = new ToolButton( - embed::getIconPixmap( "record_accompany" ), - tr( "Record samples from Audio-device while playing " - "song or BB track" ), - this, SLOT( recordAccompany() ), m_toolBar ); - m_recordAccompanyButton->setObjectName( "recordAccompanyButton" ); - - // FIXME: disable record button while it is not implemented - m_recordButton->setDisabled( true ); - - // disable record buttons if capturing is not supported - if( !Engine::mixer()->audioDev()->supportsCapture() ) - { - m_recordButton->setDisabled( true ); - m_recordAccompanyButton->setDisabled( true ); - } - - m_stopButton = new ToolButton( embed::getIconPixmap( "stop" ), - tr( "Stop song (Space)" ), - this, SLOT( stop() ), m_toolBar ); - m_stopButton->setObjectName( "stopButton" ); - - m_addBBTrackButton = new ToolButton( embed::getIconPixmap( - "add_bb_track" ), - tr( "Add beat/bassline" ), - m_song, SLOT( addBBTrack() ), - m_toolBar ); - - m_addSampleTrackButton = new ToolButton( embed::getIconPixmap( - "add_sample_track" ), - tr( "Add sample-track" ), - m_song, SLOT( addSampleTrack() ), - m_toolBar ); - - m_addAutomationTrackButton = new ToolButton( embed::getIconPixmap( - "add_automation" ), - tr( "Add automation-track" ), - m_song, SLOT( addAutomationTrack() ), - m_toolBar ); - - m_drawModeButton = new ToolButton( embed::getIconPixmap( - "edit_draw" ), - tr( "Draw mode" ), - NULL, NULL, m_toolBar ); - m_drawModeButton->setCheckable( true ); - m_drawModeButton->setChecked( true ); - - m_editModeButton = new ToolButton( embed::getIconPixmap( - "edit_select" ), - tr( "Edit mode (select and move)" ), - NULL, NULL, m_toolBar ); - m_editModeButton->setCheckable( true ); - - QButtonGroup * tool_button_group = new QButtonGroup( this ); - tool_button_group->addButton( m_drawModeButton ); - tool_button_group->addButton( m_editModeButton ); - tool_button_group->setExclusive( true ); - -#if 0 -#warning TODO - QWhatsThis::add( m_playButton, tr( "Click here, if you want to play " - "your whole song. Playing will " - "be started at the " - "song-position-marker (green). " - "You can also move it while " - "playing." ) ); - QWhatsThis::add( m_stopButton, tr ( "Click here, if you want to stop " - "playing of your song. The " - "song-position-marker will be " - "set to the start of your song." - ) ); -/* QWhatsThis::add( m_insertBarButton, tr( "If you click here, a " - "bar will " - "be inserted at the " - "current bar." ) ); - QWhatsThis::add( m_removeBarButton, tr( "If you click here, the " - "current bar will be " - "removed." ) );*/ -#endif - - - QLabel * zoom_lbl = new QLabel( m_toolBar ); - zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); - - // setup zooming-stuff - m_zoomingComboBox = new ComboBox( m_toolBar ); - m_zoomingComboBox->setFixedSize( 80, 22 ); - m_zoomingComboBox->move( 580, 4 ); - for( int i = 0; i < 7; ++i ) - { - m_zoomingComboBox->model()->addItem( - QString::number( 25 << i ) + "%" ); - } - m_zoomingComboBox->model()->setInitValue( - m_zoomingComboBox->model()->findText( "100%" ) ); - connect( m_zoomingComboBox->model(), SIGNAL( dataChanged() ), - this, SLOT( zoomingChanged() ) ); - - - tb_layout->addSpacing( 5 ); - tb_layout->addWidget( m_playButton ); - tb_layout->addWidget( m_recordButton ); - tb_layout->addWidget( m_recordAccompanyButton ); - tb_layout->addWidget( m_stopButton ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( m_addBBTrackButton ); - tb_layout->addWidget( m_addSampleTrackButton ); - tb_layout->addWidget( m_addAutomationTrackButton ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( m_drawModeButton ); - tb_layout->addWidget( m_editModeButton ); - tb_layout->addSpacing( 10 ); - m_timeLine->addToolButtons( m_toolBar ); - tb_layout->addSpacing( 15 ); - tb_layout->addWidget( zoom_lbl ); - tb_layout->addSpacing( 5 ); - tb_layout->addWidget( m_zoomingComboBox ); - tb_layout->addStretch(); - + static_cast( layout() )->insertWidget( 0, m_timeLine ); m_leftRightScroll = new QScrollBar( Qt::Horizontal, this ); m_leftRightScroll->setMinimum( 0 ); @@ -389,12 +240,16 @@ SongEditor::SongEditor( Song * _song ) : connect( m_song, SIGNAL( lengthChanged( int ) ), this, SLOT( updateScrollBar( int ) ) ); - - Engine::mainWindow()->workspace()->addSubWindow( this ); - parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); - parentWidget()->resize( 600, 300 ); - parentWidget()->move( 5, 5 ); - parentWidget()->show(); + // Set up zooming model + for( int i = 0; i < 7; ++i ) + { + m_zoomingModel->addItem( + QString::number( 25 << i ) + "%" ); + } + m_zoomingModel->setInitValue( + m_zoomingModel->findText( "100%" ) ); + connect( m_zoomingModel, SIGNAL( dataChanged() ), + this, SLOT( zoomingChanged() ) ); } @@ -426,6 +281,24 @@ void SongEditor::scrolled( int _new_pos ) +void SongEditor::setMode(Mode mode) +{ + m_mode = mode; +} + +void SongEditor::setModeDraw() +{ + setMode(DrawMode); +} + +void SongEditor::setModeEdit() +{ + setMode(EditMode); +} + + + + void SongEditor::setPauseIcon( bool pause ) { if( pause == true ) @@ -549,8 +422,8 @@ void SongEditor::wheelEvent( QWheelEvent * _we ) setPixelsPerTact( (int) pixelsPerTact() / 2 ); } // update combobox with zooming-factor - m_zoomingComboBox->model()->setValue( - m_zoomingComboBox->model()->findText( + m_zoomingModel->setValue( + m_zoomingModel->findText( QString::number( static_cast( pixelsPerTact() * 100 / DEFAULT_PIXELS_PER_TACT ) ) + @@ -759,7 +632,7 @@ void SongEditor::updatePosition( const MidiTime & _t ) void SongEditor::zoomingChanged() { - const QString & zfac = m_zoomingComboBox->model()->currentText(); + const QString & zfac = m_zoomingModel->currentText(); setPixelsPerTact( zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PIXELS_PER_TACT / 100 ); m_song->m_playPos[Song::Mode_PlaySong].m_timeLine-> @@ -788,5 +661,109 @@ void SongEditor::adjustUiAfterProjectLoad() bool SongEditor::allowRubberband() const { - return( m_editModeButton->isChecked() ); + return m_mode == EditMode; +} + + +SongEditorWindow::SongEditorWindow(Song* song) : + Editor(Engine::mixer()->audioDev()->supportsCapture()), + m_editor(new SongEditor(song)) +{ + setWindowTitle( tr( "Song-Editor" ) ); + setWindowIcon( embed::getIconPixmap( "songeditor" ) ); + + setFocusPolicy( Qt::StrongFocus ); + setFocus(); + + setCentralWidget(m_editor); + + // Set up buttons + m_playButton->setToolTip(tr("Play song (Space)")); + connect(m_playButton, SIGNAL(clicked()), m_editor, SLOT(play())); + + if (m_recordButton && m_recordAccompanyButton) + { + m_recordButton->setToolTip(tr("Record samples from Audio-device")); + connect(m_recordButton, SIGNAL(clicked()), m_editor, SLOT(record())); + + m_recordAccompanyButton->setToolTip(tr( "Record samples from Audio-device while playing song or BB track")); + connect(m_recordAccompanyButton, SIGNAL(clicked()), m_editor, SLOT(recordAccompany())); + } + + m_stopButton->setToolTip(tr( "Stop song (Space)" )); + connect(m_stopButton, SIGNAL(clicked()), m_editor, SLOT(stop())); + + m_addBBTrackButton = new ToolButton( + embed::getIconPixmap("add_bb_track"), + tr("Add beat/bassline"), + m_editor->m_song, SLOT(addBBTrack())); + + m_addSampleTrackButton = new ToolButton( + embed::getIconPixmap("add_sample_track" ), + tr( "Add sample-track"), + m_editor->m_song, SLOT(addSampleTrack())); + + m_addAutomationTrackButton = new ToolButton( + embed::getIconPixmap("add_automation" ), + tr( "Add automation-track"), + m_editor->m_song, SLOT(addAutomationTrack())); + + m_drawModeButton = new ToolButton(embed::getIconPixmap("edit_draw"), + tr("Draw mode"), m_editor, SLOT(setModeDraw())); + m_drawModeButton->setCheckable(true); + m_drawModeButton->setChecked(true); + + m_editModeButton = new ToolButton(embed::getIconPixmap("edit_select"), + tr("Edit mode (select and move)"), + m_editor, SLOT(setModeEdit())); + m_editModeButton->setCheckable(true); + + QButtonGroup * tool_button_group = new QButtonGroup(this); + tool_button_group->addButton(m_drawModeButton); + tool_button_group->addButton(m_editModeButton); + tool_button_group->setExclusive(true); + + m_playButton->setWhatsThis( + tr("Click here, if you want to play your whole song. " + "Playing will be started at the song-position-marker (green). " + "You can also move it while playing.")); + m_stopButton->setWhatsThis( + tr("Click here, if you want to stop playing of your song. " + "The song-position-marker will be set to the start of your song.")); + + + QLabel * zoom_lbl = new QLabel( m_toolBar ); + zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); + + // setup zooming-stuff + m_zoomingComboBox = new ComboBox( m_toolBar ); + m_zoomingComboBox->setFixedSize( 80, 22 ); + m_zoomingComboBox->move( 580, 4 ); + m_zoomingComboBox->setModel(m_editor->m_zoomingModel); + + + m_toolBar->addSeparator(); + m_toolBar->addWidget( m_addBBTrackButton ); + m_toolBar->addWidget( m_addSampleTrackButton ); + m_toolBar->addWidget( m_addAutomationTrackButton ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( m_drawModeButton ); + m_toolBar->addWidget( m_editModeButton ); + + QWidget* timeLineButtons = new QWidget(); + timeLineButtons->setFixedHeight(m_toolBar->height()); + timeLineButtons->move(0,0); + QLayout* l = new QHBoxLayout( timeLineButtons ); + l->setSpacing(0); l->setMargin(0); + m_editor->m_timeLine->addToolButtons(timeLineButtons); + + m_toolBar->addSeparator(); + m_toolBar->addWidget( zoom_lbl ); + m_toolBar->addWidget( m_zoomingComboBox ); + + Engine::mainWindow()->workspace()->addSubWindow( this ); + parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); + parentWidget()->resize( 600, 300 ); + parentWidget()->move( 5, 5 ); + parentWidget()->show(); } diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp index 5a76d56a0..f30d59bbe 100644 --- a/src/tracks/BBTrack.cpp +++ b/src/tracks/BBTrack.cpp @@ -310,7 +310,7 @@ void BBTCOView::changeColor() if( isSelected() ) { QVector selected = - Engine::songEditor()->selectedObjects(); + Engine::songEditor()->m_editor->selectedObjects(); for( QVector::iterator it = selected.begin(); it != selected.end(); ++it ) From 86f2c866b6749e5e7eb5c9e8ea110e1c624a77aa Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 7 Dec 2014 18:50:40 +0100 Subject: [PATCH 005/172] Move play, record and stop signals to superclass --- include/Editor.h | 6 ++ include/SongEditor.h | 22 +++----- src/gui/AutomationEditor.cpp | 5 -- src/gui/Editor.cpp | 30 +++++++++- src/gui/SongEditor.cpp | 105 +++++++++++------------------------ 5 files changed, 74 insertions(+), 94 deletions(-) diff --git a/include/Editor.h b/include/Editor.h index ccc4af494..0b4fa96bb 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -41,6 +41,12 @@ class Editor : public QMainWindow public: void setPauseIcon(bool displayPauseIcon=true); +protected slots: + virtual void play(); + virtual void record(); + virtual void recordAccompany(); + virtual void stop(); + signals: protected: diff --git a/include/SongEditor.h b/include/SongEditor.h index b51b22e1c..3fff287a9 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -65,10 +65,7 @@ public: }; SongEditor( Song * _song ); - virtual ~SongEditor(); - - void setPauseIcon( bool pause ); - + ~SongEditor(); public slots: void scrolled( int _new_pos ); @@ -81,11 +78,6 @@ public slots: private slots: void setHighQuality( bool ); - void play(); - void record(); - void recordAccompany(); - void stop(); - void masterVolumeChanged( int _new_val ); void masterVolumePressed(); void masterVolumeMoved( int _new_val ); @@ -114,12 +106,6 @@ private: QScrollBar * m_leftRightScroll; - QWidget * m_toolBar; - - ToolButton * m_playButton; - ToolButton * m_recordButton; - ToolButton * m_recordAccompanyButton; - ToolButton * m_stopButton; LcdSpinBox * m_tempoSpinBox; Timeline * m_timeLine; @@ -152,6 +138,12 @@ public: SongEditor* m_editor; +protected slots: + void play(); + void record(); + void recordAccompany(); + void stop(); + private: ToolButton * m_addBBTrackButton; ToolButton * m_addSampleTrackButton; diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index a80b118d8..491b16eb0 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2040,11 +2040,6 @@ AutomationEditorWindow::AutomationEditorWindow() : tr( "Click here if you want to stop playing of the " "current pattern." ) ); - // Set up signals) - connect(m_playButton, SIGNAL(clicked()), this, SLOT(play())); - connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); - - // Edit mode buttons m_drawButton = new ToolButton(embed::getIconPixmap( "edit_draw" ), diff --git a/src/gui/Editor.cpp b/src/gui/Editor.cpp index e292ced1b..e8b40a091 100644 --- a/src/gui/Editor.cpp +++ b/src/gui/Editor.cpp @@ -39,6 +39,22 @@ void Editor::setPauseIcon(bool displayPauseIcon) m_playButton->setIcon(embed::getIconPixmap("play")); } +void Editor::play() +{ +} + +void Editor::record() +{ +} + +void Editor::recordAccompany() +{ +} + +void Editor::stop() +{ +} + Editor::Editor(bool record) : m_toolBar(new QToolBar(this)), m_playButton(nullptr), @@ -46,6 +62,8 @@ Editor::Editor(bool record) : m_recordAccompanyButton(nullptr), m_stopButton(nullptr) { + m_toolBar->setContextMenuPolicy(Qt::PreventContextMenu); + auto addButton = [this](const char* pixmap_name, QString text, QString objectName) { ToolButton* button = new ToolButton(embed::getIconPixmap(pixmap_name), text); button->setObjectName(objectName); @@ -55,11 +73,12 @@ Editor::Editor(bool record) : // Set up play button m_playButton = addButton("play", tr("Play (Space)"), "playButton"); + m_playButton->setShortcut(Qt::Key_Space); // Set up record buttons if wanted if (record) { - m_recordButton= addButton("record", tr("Record"), "recordButton"); + m_recordButton = addButton("record", tr("Record"), "recordButton"); m_recordAccompanyButton = addButton("record_accompany", tr("Record while playing"), "recordAccompanyButton"); } @@ -68,6 +87,15 @@ Editor::Editor(bool record) : // Add toolbar to window addToolBar(Qt::TopToolBarArea, m_toolBar); + + // Set up connections + connect(m_playButton, SIGNAL(clicked()), this, SLOT(play())); + if (record) + { + connect(m_recordButton, SIGNAL(clicked()), this, SLOT(record())); + connect(m_recordAccompanyButton, SIGNAL(clicked()), this, SLOT(recordAccompany())); + } + connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); } Editor::~Editor() diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index c7a47d55f..cf7f9973c 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -299,61 +299,6 @@ void SongEditor::setModeEdit() -void SongEditor::setPauseIcon( bool pause ) -{ - if( pause == true ) - { - m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); - } - else - { - m_playButton->setIcon( embed::getIconPixmap( "play" ) ); - } -} - - - - -void SongEditor::play() -{ - if( Engine::getSong()->playMode() != Song::Mode_PlaySong ) - { - Engine::getSong()->playSong(); - } - else - { - Engine::getSong()->togglePause(); - } -} - - - - -void SongEditor::record() -{ - m_song->record(); -} - - - - -void SongEditor::recordAccompany() -{ - m_song->playAndRecord(); -} - - - - -void SongEditor::stop() -{ - m_song->stop(); - Engine::pianoRoll()->stopRecording(); -} - - - - void SongEditor::keyPressEvent( QKeyEvent * _ke ) { if( /*_ke->modifiers() & Qt::ShiftModifier*/ @@ -384,17 +329,6 @@ void SongEditor::keyPressEvent( QKeyEvent * _ke ) m_song->setPlayPos( t, Song::Mode_PlaySong ); } } - else if( _ke->key() == Qt::Key_Space ) - { - if( m_song->isPlaying() ) - { - stop(); - } - else - { - play(); - } - } else if( _ke->key() == Qt::Key_Home ) { m_song->setPlayPos( 0, Song::Mode_PlaySong ); @@ -679,19 +613,12 @@ SongEditorWindow::SongEditorWindow(Song* song) : // Set up buttons m_playButton->setToolTip(tr("Play song (Space)")); - connect(m_playButton, SIGNAL(clicked()), m_editor, SLOT(play())); - if (m_recordButton && m_recordAccompanyButton) { m_recordButton->setToolTip(tr("Record samples from Audio-device")); - connect(m_recordButton, SIGNAL(clicked()), m_editor, SLOT(record())); - m_recordAccompanyButton->setToolTip(tr( "Record samples from Audio-device while playing song or BB track")); - connect(m_recordAccompanyButton, SIGNAL(clicked()), m_editor, SLOT(recordAccompany())); } - m_stopButton->setToolTip(tr( "Stop song (Space)" )); - connect(m_stopButton, SIGNAL(clicked()), m_editor, SLOT(stop())); m_addBBTrackButton = new ToolButton( embed::getIconPixmap("add_bb_track"), @@ -767,3 +694,35 @@ SongEditorWindow::SongEditorWindow(Song* song) : parentWidget()->move( 5, 5 ); parentWidget()->show(); } + + +void SongEditorWindow::play() +{ + if( Engine::getSong()->playMode() != Song::Mode_PlaySong ) + { + Engine::getSong()->playSong(); + } + else + { + Engine::getSong()->togglePause(); + } +} + + +void SongEditorWindow::record() +{ + m_editor->m_song->record(); +} + + +void SongEditorWindow::recordAccompany() +{ + m_editor->m_song->playAndRecord(); +} + + +void SongEditorWindow::stop() +{ + m_editor->m_song->stop(); + Engine::pianoRoll()->stopRecording(); +} From d8db8948a80513106572a87d5d7437c6fa7d9355 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 14:47:58 +0100 Subject: [PATCH 006/172] Editor: Don't delete on close --- include/AutomationEditor.h | 2 -- src/core/AutomationPattern.cpp | 1 + src/gui/AutomationEditor.cpp | 16 ---------------- src/gui/Editor.cpp | 7 +++++++ src/gui/SongEditor.cpp | 2 -- 5 files changed, 8 insertions(+), 20 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 856b6177e..8105e63c6 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -267,8 +267,6 @@ public: AutomationEditor* m_editor; - virtual void closeEvent( QCloseEvent * _ce ); - signals: void currentPatternChanged(); diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 9164e733d..76b185d42 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -690,6 +690,7 @@ void AutomationPattern::openInAutomationEditor() { Engine::automationEditor()->setCurrentPattern( this ); Engine::automationEditor()->parentWidget()->show(); + Engine::automationEditor()->show(); Engine::automationEditor()->setFocus(); } diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 491b16eb0..132ad1b11 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2290,9 +2290,7 @@ AutomationEditorWindow::AutomationEditorWindow() : // Add us to workspace if( Engine::mainWindow()->workspace() ) { - Engine::mainWindow()->workspace()->addSubWindow( this ); parentWidget()->resize( INITIAL_WIDTH, INITIAL_HEIGHT ); - parentWidget()->move( 5, 5 ); parentWidget()->hide(); } else @@ -2343,20 +2341,6 @@ int AutomationEditorWindow::quantization() const return m_editor->quantization(); } -void AutomationEditorWindow::closeEvent(QCloseEvent* _ce) -{ - QApplication::restoreOverrideCursor(); - if( parentWidget() ) - { - parentWidget()->hide(); - } - else - { - hide(); - } - _ce->ignore(); -} - void AutomationEditorWindow::play() { m_editor->play(); diff --git a/src/gui/Editor.cpp b/src/gui/Editor.cpp index e8b40a091..57042b623 100644 --- a/src/gui/Editor.cpp +++ b/src/gui/Editor.cpp @@ -24,8 +24,10 @@ #include "Editor.h" +#include "MainWindow.h" #include "embed.h" +#include #include #include @@ -96,6 +98,11 @@ Editor::Editor(bool record) : connect(m_recordAccompanyButton, SIGNAL(clicked()), this, SLOT(recordAccompany())); } connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); + + + // Add editor to main window + Engine::mainWindow()->workspace()->addSubWindow(this); + parentWidget()->setAttribute(Qt::WA_DeleteOnClose, false); } Editor::~Editor() diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index cf7f9973c..ee020cb07 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -688,8 +688,6 @@ SongEditorWindow::SongEditorWindow(Song* song) : m_toolBar->addWidget( zoom_lbl ); m_toolBar->addWidget( m_zoomingComboBox ); - Engine::mainWindow()->workspace()->addSubWindow( this ); - parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->resize( 600, 300 ); parentWidget()->move( 5, 5 ); parentWidget()->show(); From ec9158cda9f85a97b4830a1520aec6fc4d0ff0f9 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 16:48:10 +0100 Subject: [PATCH 007/172] PianoRoll: Use Editor superclass --- include/Engine.h | 6 +- include/PianoRoll.h | 95 +++--- src/core/Engine.cpp | 4 +- src/gui/PianoRoll.cpp | 719 ++++++++++++++++++++--------------------- src/gui/SongEditor.cpp | 6 +- src/tracks/Pattern.cpp | 1 + 6 files changed, 416 insertions(+), 415 deletions(-) diff --git a/include/Engine.h b/include/Engine.h index fb5ad0b5f..509e668af 100644 --- a/include/Engine.h +++ b/include/Engine.h @@ -42,7 +42,7 @@ class FxMixerView; class ProjectJournal; class MainWindow; class Mixer; -class PianoRoll; +class PianoRollWindow; class ProjectNotes; class Song; class SongEditorWindow; @@ -118,7 +118,7 @@ public: return s_bbEditor; } - static PianoRoll* pianoRoll() + static PianoRollWindow* pianoRoll() { return s_pianoRoll; } @@ -190,7 +190,7 @@ private: static SongEditorWindow* s_songEditor; static AutomationEditorWindow * s_automationEditor; static BBEditor * s_bbEditor; - static PianoRoll* s_pianoRoll; + static PianoRollWindow* s_pianoRoll; static ProjectNotes * s_projectNotes; static Ladspa2LMMS * s_ladspaManager; diff --git a/include/PianoRoll.h b/include/PianoRoll.h index bd27bda2e..1d7cd1146 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -30,6 +30,7 @@ #include #include +#include "Editor.h" #include "ComboBoxModel.h" #include "SerializingObject.h" #include "Note.h" @@ -50,7 +51,7 @@ class Pattern; class Timeline; class ToolButton; -class PianoRoll : public QWidget, public SerializingObject +class PianoRoll : public QWidget { Q_OBJECT Q_PROPERTY( QColor gridColor READ gridColor WRITE setGridColor ) @@ -86,17 +87,6 @@ public: Song::PlayModes desiredPlayModeForAccompany() const; int quantization() const; - - - virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); - virtual void loadSettings( const QDomElement & _this ); - - inline virtual QString nodeName() const - { - return "pianoroll"; - } - - void setPauseIcon( bool pause ); // qproperty acces functions QColor gridColor() const; @@ -109,7 +99,6 @@ public: void setBarColor( const QColor & _c ); protected: - virtual void closeEvent( QCloseEvent * _ce ); virtual void keyPressEvent( QKeyEvent * _ke ); virtual void keyReleaseEvent( QKeyEvent * _ke ); virtual void leaveEvent( QEvent * _e ); @@ -264,28 +253,6 @@ private: static TextFloat * s_textFloat; - QWidget * m_toolBar; - - ToolButton * m_playButton; - ToolButton * m_recordButton; - ToolButton * m_recordAccompanyButton; - ToolButton * m_stopButton; - - ToolButton * m_drawButton; - ToolButton * m_eraseButton; - ToolButton * m_selectButton; - ToolButton * m_detuneButton; - - ToolButton * m_cutButton; - ToolButton * m_copyButton; - ToolButton * m_pasteButton; - - ComboBox * m_zoomingComboBox; - ComboBox * m_quantizeComboBox; - ComboBox * m_noteLenComboBox; - ComboBox * m_scaleComboBox; - ComboBox * m_chordComboBox; - ComboBoxModel m_zoomingModel; ComboBoxModel m_quantizeModel; ComboBoxModel m_noteLenModel; @@ -293,7 +260,6 @@ private: ComboBoxModel m_chordModel; - Pattern* m_pattern; QScrollBar * m_leftRightScroll; QScrollBar * m_topBottomScroll; @@ -367,6 +333,7 @@ private: bool m_startedWithShift; friend class Engine; + friend class PianoRollWindow; // qproperty fields QColor m_gridColor; @@ -380,5 +347,61 @@ signals: } ; +class PianoRollWindow : public Editor, SerializingObject +{ + Q_OBJECT +public: + PianoRollWindow(); + + const Pattern* currentPattern() const; + void setCurrentPattern(Pattern* pattern); + + int quantization() const; + + void play(); + void stop(); + void record(); + void recordAccompany(); + void stopRecording(); + + bool isRecording() const; + + /*! \brief Resets settings to default when e.g. creating a new project */ + void reset(); + + using SerializingObject::saveState; + using SerializingObject::restoreState; + virtual void saveSettings(QDomDocument & doc, QDomElement & de ); + virtual void loadSettings( const QDomElement & de ); + + inline virtual QString nodeName() const + { + return "pianoroll"; + } + +signals: + void currentPatternChanged(); + +private: + PianoRoll* m_editor; + + ToolButton * m_drawButton; + ToolButton * m_eraseButton; + ToolButton * m_selectButton; + ToolButton * m_detuneButton; + + ToolButton * m_cutButton; + ToolButton * m_copyButton; + ToolButton * m_pasteButton; + + ComboBox * m_zoomingComboBox; + ComboBox * m_quantizeComboBox; + ComboBox * m_noteLenComboBox; + ComboBox * m_scaleComboBox; + ComboBox * m_chordComboBox; + +}; + + #endif diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index a9d4a65a9..e2ce7ded9 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -58,7 +58,7 @@ Song * Engine::s_song = NULL; SongEditorWindow* Engine::s_songEditor = NULL; AutomationEditorWindow * Engine::s_automationEditor = NULL; BBEditor * Engine::s_bbEditor = NULL; -PianoRoll* Engine::s_pianoRoll = NULL; +PianoRollWindow* Engine::s_pianoRoll = NULL; ProjectNotes * Engine::s_projectNotes = NULL; ProjectJournal * Engine::s_projectJournal = NULL; Ladspa2LMMS * Engine::s_ladspaManager = NULL; @@ -98,7 +98,7 @@ void Engine::init( const bool _has_gui ) s_controllerRackView = new ControllerRackView; s_projectNotes = new ProjectNotes; s_bbEditor = new BBEditor( s_bbTrackContainer ); - s_pianoRoll = new PianoRoll; + s_pianoRoll = new PianoRollWindow(); s_automationEditor = new AutomationEditorWindow; s_mainWindow->finalize(); diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 56bc5b6a0..6b2d5da03 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -95,7 +95,7 @@ const int NOTE_EDIT_RESIZE_BAR = 6; const int NOTE_EDIT_MIN_HEIGHT = 50; const int KEY_AREA_MIN_HEIGHT = 100; const int PR_BOTTOM_MARGIN = SCROLLBAR_SIZE; -const int PR_TOP_MARGIN = 48; +const int PR_TOP_MARGIN = 16; const int PR_RIGHT_MARGIN = SCROLLBAR_SIZE; @@ -291,7 +291,7 @@ PianoRoll::PianoRoll() : setAttribute( Qt::WA_OpaquePaintEvent, true ); // add time-line - m_timeLine = new Timeline( WHITE_KEY_WIDTH, 32, m_ppt, + m_timeLine = new Timeline( WHITE_KEY_WIDTH, 0, m_ppt, Engine::getSong()->getPlayPos( Song::Mode_PlayPattern ), m_currentPosition, this ); @@ -311,64 +311,6 @@ PianoRoll::PianoRoll() : this, SLOT( updatePositionAccompany( const MidiTime & ) ) );*/ - - m_toolBar = new QWidget( this ); - m_toolBar->setFixedHeight( 32 ); - m_toolBar->move( 0, 0 ); - m_toolBar->setAutoFillBackground( true ); - QPalette pal; - pal.setBrush( m_toolBar->backgroundRole(), - embed::getIconPixmap( "toolbar_bg" ) ); - m_toolBar->setPalette( pal ); - - QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); - tb_layout->setMargin( 0 ); - tb_layout->setSpacing( 0 ); - - - // init control-buttons at the top - - m_playButton = new ToolButton( embed::getIconPixmap( "play" ), - tr( "Play/pause current pattern (Space)" ), - this, SLOT( play() ), m_toolBar ); - - m_recordButton = new ToolButton( embed::getIconPixmap( "record" ), - tr( "Record notes from MIDI-device/channel-piano" ), - this, SLOT( record() ), m_toolBar ); - m_recordAccompanyButton = new ToolButton( - embed::getIconPixmap( "record_accompany" ), - tr( "Record notes from MIDI-device/channel-piano while playing song or BB track" ), - this, SLOT( recordAccompany() ), m_toolBar ); - - m_stopButton = new ToolButton( embed::getIconPixmap( "stop" ), - tr( "Stop playing of current pattern (Space)" ), - this, SLOT( stop() ), m_toolBar ); - - m_playButton->setObjectName( "playButton" ); - m_stopButton->setObjectName( "stopButton" ); - m_recordButton->setObjectName( "recordButton" ); - m_recordAccompanyButton->setObjectName( "recordAccompanyButton" ); - - m_playButton->setWhatsThis( - tr( "Click here to play the current pattern. " - "This is useful while editing it. The pattern is " - "automatically looped when its end is reached." ) ); - m_recordButton->setWhatsThis( - tr( "Click here to record notes from a MIDI-" - "device or the virtual test-piano of the according " - "channel-window to the current pattern. When recording " - "all notes you play will be written to this pattern " - "and you can play and edit them afterwards." ) ); - m_recordAccompanyButton->setWhatsThis( - tr( "Click here to record notes from a MIDI-" - "device or the virtual test-piano of the according " - "channel-window to the current pattern. When recording " - "all notes you play will be written to this pattern " - "and you will hear the song or BB track in the background." ) ); - m_stopButton->setWhatsThis( - tr( "Click here to stop playback of current pattern." ) ); - - removeSelection(); // init scrollbars @@ -383,94 +325,6 @@ PianoRoll::PianoRoll() : connect( m_topBottomScroll, SIGNAL( valueChanged( int ) ), this, SLOT( verScrolled( int ) ) ); - // init edit-buttons at the top - m_drawButton = new ToolButton( embed::getIconPixmap( "edit_draw" ), - tr( "Draw mode (Shift+D)" ), - this, SLOT( drawButtonToggled() ), - m_toolBar ); - m_drawButton->setCheckable( true ); - m_drawButton->setChecked( true ); - - m_eraseButton = new ToolButton( embed::getIconPixmap( "edit_erase" ), - tr( "Erase mode (Shift+E)" ), - this, SLOT( eraseButtonToggled() ), - m_toolBar ); - m_eraseButton->setCheckable( true ); - - m_selectButton = new ToolButton( embed::getIconPixmap( - "edit_select" ), - tr( "Select mode (Shift+S)" ), - this, SLOT( selectButtonToggled() ), - m_toolBar ); - m_selectButton->setCheckable( true ); - - m_detuneButton = new ToolButton( embed::getIconPixmap( "automation"), - tr( "Detune mode (Shift+T)" ), - this, SLOT( detuneButtonToggled() ), - m_toolBar ); - m_detuneButton->setCheckable( true ); - - QButtonGroup * tool_button_group = new QButtonGroup( this ); - tool_button_group->addButton( m_drawButton ); - tool_button_group->addButton( m_eraseButton ); - tool_button_group->addButton( m_selectButton ); - tool_button_group->addButton( m_detuneButton ); - tool_button_group->setExclusive( true ); - - m_drawButton->setWhatsThis( - tr( "Click here and draw mode will be activated. In this " - "mode you can add, resize and move notes. This " - "is the default mode which is used most of the time. " - "You can also press 'Shift+D' on your keyboard to " - "activate this mode. In this mode, hold Ctrl to " - "temporarily go into select mode." ) ); - m_eraseButton->setWhatsThis( - tr( "Click here and erase mode will be activated. In this " - "mode you can erase notes. You can also press " - "'Shift+E' on your keyboard to activate this mode." ) ); - m_selectButton->setWhatsThis( - tr( "Click here and select mode will be activated. " - "In this mode you can select notes. Alternatively, " - "you can hold Ctrl in draw mode to temporarily use " - "select mode." ) ); - m_detuneButton->setWhatsThis( - tr( "Click here and detune mode will be activated. " - "In this mode you can click a note to open its " - "automation detuning. You can utilize this to slide " - "notes from one to another. You can also press " - "'Shift+T' on your keyboard to activate this mode." ) ); - - m_cutButton = new ToolButton( embed::getIconPixmap( "edit_cut" ), - tr( "Cut selected notes (Ctrl+X)" ), - this, SLOT( cutSelectedNotes() ), - m_toolBar ); - - m_copyButton = new ToolButton( embed::getIconPixmap( "edit_copy" ), - tr( "Copy selected notes (Ctrl+C)" ), - this, SLOT( copySelectedNotes() ), - m_toolBar ); - - m_pasteButton = new ToolButton( embed::getIconPixmap( "edit_paste" ), - tr( "Paste notes from clipboard " - "(Ctrl+V)" ), - this, SLOT( pasteNotes() ), - m_toolBar ); - - m_cutButton->setWhatsThis( - tr( "Click here and the selected notes will be cut into the " - "clipboard. You can paste them anywhere in any pattern " - "by clicking on the paste button." ) ); - m_copyButton->setWhatsThis( - tr( "Click here and the selected notes will be copied into the " - "clipboard. You can paste them anywhere in any pattern " - "by clicking on the paste button." ) ); - m_pasteButton->setWhatsThis( - tr( "Click here and the notes from the clipboard will be " - "pasted at the first visible measure." ) ); - - QLabel * zoom_lbl = new QLabel( m_toolBar ); - zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); - // setup zooming-stuff for( int i = 0; i < 6; ++i ) { @@ -479,14 +333,8 @@ PianoRoll::PianoRoll() : m_zoomingModel.setValue( m_zoomingModel.findText( "100%" ) ); connect( &m_zoomingModel, SIGNAL( dataChanged() ), this, SLOT( zoomingChanged() ) ); - m_zoomingComboBox = new ComboBox( m_toolBar ); - m_zoomingComboBox->setModel( &m_zoomingModel ); - m_zoomingComboBox->setFixedSize( 64, 22 ); - - // setup quantize-stuff - QLabel * quantize_lbl = new QLabel( m_toolBar ); - quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); + // Set up quantization model m_quantizeModel.addItem( tr( "Note lock" ) ); for( int i = 0; i <= NUM_EVEN_LENGTHS; ++i ) { @@ -498,17 +346,11 @@ PianoRoll::PianoRoll() : } m_quantizeModel.addItem( "1/192" ); m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) ); - m_quantizeComboBox = new ComboBox( m_toolBar ); - m_quantizeComboBox->setModel( &m_quantizeModel ); - m_quantizeComboBox->setFixedSize( 64, 22 ); + connect( &m_quantizeModel, SIGNAL( dataChanged() ), this, SLOT( quantizeChanged() ) ); - - // setup note-len-stuff - QLabel * note_len_lbl = new QLabel( m_toolBar ); - note_len_lbl->setPixmap( embed::getIconPixmap( "note" ) ); - + // Set up note length model m_noteLenModel.addItem( tr( "Last note" ), new PixmapLoader( "edit_draw" ) ); const QString pixmaps[] = { "whole", "half", "quarter", "eighth", @@ -527,20 +369,15 @@ PianoRoll::PianoRoll() : new PixmapLoader( "note_" + pixmaps[i+NUM_EVEN_LENGTHS] ) ); } m_noteLenModel.setValue( 0 ); - m_noteLenComboBox = new ComboBox( m_toolBar ); - m_noteLenComboBox->setModel( &m_noteLenModel ); - m_noteLenComboBox->setFixedSize( 105, 22 ); + // Note length change can cause a redraw if Q is set to lock connect( &m_noteLenModel, SIGNAL( dataChanged() ), this, SLOT( quantizeChanged() ) ); + // Set up scale model const InstrumentFunctionNoteStacking::ChordTable & chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); - // setup scale-stuff - QLabel * scale_lbl = new QLabel( m_toolBar ); - scale_lbl->setPixmap( embed::getIconPixmap( "scale" ) ); - m_scaleModel.addItem( tr("No scale") ); for( int i = 0; i < chord_table.size(); ++i ) { @@ -551,18 +388,11 @@ PianoRoll::PianoRoll() : } m_scaleModel.setValue( 0 ); - m_scaleComboBox = new ComboBox( m_toolBar ); - m_scaleComboBox->setModel( &m_scaleModel ); - m_scaleComboBox->setFixedSize( 105, 22 ); // change can update m_semiToneMarkerMenu connect( &m_scaleModel, SIGNAL( dataChanged() ), - this, SLOT( updateSemiToneMarkerMenu() ) ); - - - // setup chord-stuff - QLabel * chord_lbl = new QLabel( m_toolBar ); - chord_lbl->setPixmap( embed::getIconPixmap( "chord" ) ); + this, SLOT( updateSemiToneMarkerMenu() ) ); + // Set up chord model m_chordModel.addItem( tr("No chord") ); for( int i = 0; i < chord_table.size(); ++i ) { @@ -573,126 +403,17 @@ PianoRoll::PianoRoll() : } m_chordModel.setValue( 0 ); - m_chordComboBox = new ComboBox( m_toolBar ); - m_chordComboBox->setModel( &m_chordModel ); - m_chordComboBox->setFixedSize( 105, 22 ); + // change can update m_semiToneMarkerMenu connect( &m_chordModel, SIGNAL( dataChanged() ), this, SLOT( updateSemiToneMarkerMenu() ) ); - - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_playButton ); - tb_layout->addWidget( m_recordButton ); - tb_layout->addWidget( m_recordAccompanyButton ); - tb_layout->addWidget( m_stopButton ); - tb_layout->addSpacing( 7 ); - tb_layout->addWidget( m_drawButton ); - tb_layout->addWidget( m_eraseButton ); - tb_layout->addWidget( m_selectButton ); - tb_layout->addWidget( m_detuneButton ); - tb_layout->addSpacing( 7 ); - tb_layout->addWidget( m_cutButton ); - tb_layout->addWidget( m_copyButton ); - tb_layout->addWidget( m_pasteButton ); - tb_layout->addSpacing( 7 ); - m_timeLine->addToolButtons( m_toolBar ); - tb_layout->addSpacing( 7 ); - tb_layout->addWidget( zoom_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_zoomingComboBox ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( quantize_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_quantizeComboBox ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( note_len_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_noteLenComboBox ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( scale_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_scaleComboBox ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( chord_lbl ); - tb_layout->addSpacing( 4 ); - tb_layout->addWidget( m_chordComboBox ); - tb_layout->addStretch(); - - m_zoomingComboBox->setWhatsThis( - tr( - "This controls the magnification of an axis. " - "It can be helpful to choose magnification for a specific " - "task. For ordinary editing, the magnification should be " - "fitted to your smallest notes. " - ) ); - - m_quantizeComboBox->setWhatsThis( - tr( - "The 'Q' stands for quantization, and controls the grid size " - "notes and control points snap to. " - "With smaller quantization values, you can draw shorter notes " - "in Piano Roll, and more exact control points in the " - "Automation Editor." - - ) ); - - m_noteLenComboBox->setWhatsThis( - tr( - "This lets you select the length of new notes. " - "'Last Note' means that LMMS will use the note length of " - "the note you last edited" - ) ); - - m_scaleComboBox->setWhatsThis( - tr( - "The feature is directly connected to the context-menu " - "on the virtual keyboard, to the left in Piano Roll. " - "After you have chosen the scale you want " - "in this drop-down menu, " - "you can right click on a desired key in the virtual keyboard, " - "and then choose 'Mark current Scale'. " - "LMMS will highlight all notes that belongs to the chosen scale, " - "and in the key you have selected!" - ) ); - - - m_chordComboBox->setWhatsThis( - tr( - "Let you select a chord which LMMS then can draw or highlight." - "You can find the most common chords in this drop-down menu. " - "After you have selected a chord, click anywhere to place the chord, and right " - "click on the virtual keyboard to open context menu and highlight the chord. " - "To return to single note placement, you need to choose 'No chord' " - "in this drop-down menu." - ) ); - - // setup our actual window setFocusPolicy( Qt::StrongFocus ); setFocus(); - setWindowIcon( embed::getIconPixmap( "piano" ) ); - setCurrentPattern( NULL ); - setMouseTracking( true ); - setMinimumSize( tb_layout->minimumSize().width(), 160 ); - - // add us to workspace - if( Engine::mainWindow()->workspace() ) - { - Engine::mainWindow()->workspace()->addSubWindow( this ); - parentWidget()->setMinimumSize( tb_layout->minimumSize().width()+10, 200 ); - parentWidget()->resize( tb_layout->minimumSize().width()+10, - INITIAL_PIANOROLL_HEIGHT ); - parentWidget()->move( 5, 5 ); - - parentWidget()->hide(); - } - else - { - resize( tb_layout->minimumSize().width(), INITIAL_PIANOROLL_HEIGHT ); - hide(); - } + connect( &m_scaleModel, SIGNAL( dataChanged() ), + this, SLOT( updateSemiToneMarkerMenu() ) ); connect( Engine::getSong(), SIGNAL( timeSignatureChanged( int, int ) ), this, SLOT( update() ) ); @@ -873,34 +594,6 @@ void PianoRoll::hidePattern( Pattern* pattern ) -void PianoRoll::saveSettings( QDomDocument & _doc, QDomElement & _this ) -{ - MainWindow::saveWidgetState( this, _this ); -} - - - - -void PianoRoll::loadSettings( const QDomElement & _this ) -{ - MainWindow::restoreWidgetState( this, _this ); -} - - - - -void PianoRoll::setPauseIcon( bool pause ) -{ - if( pause == true ) - { - m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); - } - else - { - m_playButton->setIcon( embed::getIconPixmap( "play" ) ); - } -} - /** \brief qproperty access implementation */ @@ -1100,23 +793,6 @@ void PianoRoll::clearSelectedNotes() -void PianoRoll::closeEvent( QCloseEvent * _ce ) -{ - QApplication::restoreOverrideCursor(); - if( parentWidget() ) - { - parentWidget()->hide(); - } - else - { - hide(); - } - _ce->ignore(); -} - - - - void PianoRoll::shiftSemiTone( int amount ) // shift notes by amount semitones { bool useAllNotes = ! isSelection(); @@ -1390,38 +1066,6 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) } break; - case Qt::Key_D: - if( event->modifiers() & Qt::ShiftModifier ) - { - event->accept(); - m_drawButton->setChecked( true ); - } - break; - - case Qt::Key_E: - if( event->modifiers() & Qt::ShiftModifier ) - { - event->accept(); - m_eraseButton->setChecked( true ); - } - break; - - case Qt::Key_S: - if( event->modifiers() & Qt::ShiftModifier ) - { - event->accept(); - m_selectButton->setChecked( true ); - } - break; - - case Qt::Key_T: - if( event->modifiers() & Qt::ShiftModifier ) - { - event->accept(); - m_detuneButton->setChecked( true ); - } - break; - case Qt::Key_Delete: deleteSelectedNotes(); event->accept(); @@ -3484,7 +3128,7 @@ void PianoRoll::resizeEvent( QResizeEvent * ) Engine::getSong()->getPlayPos( Song::Mode_PlayPattern ).m_timeLine->setFixedWidth( width() ); - m_toolBar->setFixedWidth( width() ); + update(); } @@ -4085,8 +3729,6 @@ void PianoRoll::pasteNotes() // we only have to do the following lines if we pasted at // least one note... Engine::getSong()->setModified(); - m_ctrlMode = ModeDraw; - m_drawButton->setChecked( true ); update(); Engine::songEditor()->update(); } @@ -4328,3 +3970,338 @@ Note * PianoRoll::noteUnderMouse() + + +PianoRollWindow::PianoRollWindow() : + Editor(true), + m_editor(new PianoRoll()) +{ + setCentralWidget(m_editor); + + m_playButton->setToolTip(tr("Play/pause current pattern (Space)")); + m_recordButton->setToolTip(tr("Record notes from MIDI-device/channel-piano")); + m_recordAccompanyButton->setToolTip(tr("Record notes from MIDI-device/channel-piano while playing song or BB track")); + m_stopButton->setToolTip(tr("Stop playing of current pattern (Space)")); + + m_playButton->setWhatsThis( + tr( "Click here to play the current pattern. " + "This is useful while editing it. The pattern is " + "automatically looped when its end is reached." ) ); + m_recordButton->setWhatsThis( + tr( "Click here to record notes from a MIDI-" + "device or the virtual test-piano of the according " + "channel-window to the current pattern. When recording " + "all notes you play will be written to this pattern " + "and you can play and edit them afterwards." ) ); + m_recordAccompanyButton->setWhatsThis( + tr( "Click here to record notes from a MIDI-" + "device or the virtual test-piano of the according " + "channel-window to the current pattern. When recording " + "all notes you play will be written to this pattern " + "and you will hear the song or BB track in the background." ) ); + m_stopButton->setWhatsThis( + tr( "Click here to stop playback of current pattern." ) ); + + // init edit-buttons at the top + m_drawButton = new ToolButton( embed::getIconPixmap( "edit_draw" ), + tr( "Draw mode (Shift+D)" ), + m_editor, SLOT( drawButtonToggled() ), + m_toolBar ); + m_drawButton->setShortcut(Qt::SHIFT | Qt::Key_D); + m_drawButton->setCheckable( true ); + m_drawButton->setChecked( true ); + + m_eraseButton = new ToolButton( embed::getIconPixmap( "edit_erase" ), + tr( "Erase mode (Shift+E)" ), + m_editor, SLOT( eraseButtonToggled() ), + m_toolBar ); + m_eraseButton->setShortcut(Qt::SHIFT | Qt::Key_E); + m_eraseButton->setCheckable( true ); + + m_selectButton = new ToolButton( embed::getIconPixmap( + "edit_select" ), + tr( "Select mode (Shift+S)" ), + m_editor, SLOT( selectButtonToggled() ), + m_toolBar ); + m_selectButton->setShortcut(Qt::SHIFT | Qt::Key_S); + m_selectButton->setCheckable( true ); + + m_detuneButton = new ToolButton( embed::getIconPixmap( "automation"), + tr( "Detune mode (Shift+T)" ), + m_editor, SLOT( detuneButtonToggled() ), + m_toolBar ); + m_detuneButton->setShortcut(Qt::SHIFT | Qt::Key_T); + m_detuneButton->setCheckable( true ); + + QButtonGroup * tool_button_group = new QButtonGroup( this ); + tool_button_group->addButton( m_drawButton ); + tool_button_group->addButton( m_eraseButton ); + tool_button_group->addButton( m_selectButton ); + tool_button_group->addButton( m_detuneButton ); + tool_button_group->setExclusive( true ); + + m_drawButton->setWhatsThis( + tr( "Click here and draw mode will be activated. In this " + "mode you can add, resize and move notes. This " + "is the default mode which is used most of the time. " + "You can also press 'Shift+D' on your keyboard to " + "activate this mode. In this mode, hold Ctrl to " + "temporarily go into select mode." ) ); + m_eraseButton->setWhatsThis( + tr( "Click here and erase mode will be activated. In this " + "mode you can erase notes. You can also press " + "'Shift+E' on your keyboard to activate this mode." ) ); + m_selectButton->setWhatsThis( + tr( "Click here and select mode will be activated. " + "In this mode you can select notes. Alternatively, " + "you can hold Ctrl in draw mode to temporarily use " + "select mode." ) ); + m_detuneButton->setWhatsThis( + tr( "Click here and detune mode will be activated. " + "In this mode you can click a note to open its " + "automation detuning. You can utilize this to slide " + "notes from one to another. You can also press " + "'Shift+T' on your keyboard to activate this mode." ) ); + + m_cutButton = new ToolButton( embed::getIconPixmap( "edit_cut" ), + tr( "Cut selected notes (Ctrl+X)" ), + m_editor, SLOT( cutSelectedNotes() ), + m_toolBar ); + + m_copyButton = new ToolButton( embed::getIconPixmap( "edit_copy" ), + tr( "Copy selected notes (Ctrl+C)" ), + m_editor, SLOT( copySelectedNotes() ), + m_toolBar ); + + m_pasteButton = new ToolButton( embed::getIconPixmap( "edit_paste" ), + tr( "Paste notes from clipboard " + "(Ctrl+V)" ), + m_editor, SLOT( pasteNotes() ), + m_toolBar ); + + m_cutButton->setWhatsThis( + tr( "Click here and the selected notes will be cut into the " + "clipboard. You can paste them anywhere in any pattern " + "by clicking on the paste button." ) ); + m_copyButton->setWhatsThis( + tr( "Click here and the selected notes will be copied into the " + "clipboard. You can paste them anywhere in any pattern " + "by clicking on the paste button." ) ); + m_pasteButton->setWhatsThis( + tr( "Click here and the notes from the clipboard will be " + "pasted at the first visible measure." ) ); + + QLabel * zoom_lbl = new QLabel( m_toolBar ); + zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); + + m_zoomingComboBox = new ComboBox( m_toolBar ); + m_zoomingComboBox->setModel( &m_editor->m_zoomingModel ); + m_zoomingComboBox->setFixedSize( 64, 22 ); + + // setup quantize-stuff + QLabel * quantize_lbl = new QLabel( m_toolBar ); + quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); + + m_quantizeComboBox = new ComboBox( m_toolBar ); + m_quantizeComboBox->setModel( &m_editor->m_quantizeModel ); + m_quantizeComboBox->setFixedSize( 64, 22 ); + + + // setup note-len-stuff + QLabel * note_len_lbl = new QLabel( m_toolBar ); + note_len_lbl->setPixmap( embed::getIconPixmap( "note" ) ); + + + m_noteLenComboBox = new ComboBox( m_toolBar ); + m_noteLenComboBox->setModel( &m_editor->m_noteLenModel ); + m_noteLenComboBox->setFixedSize( 105, 22 ); + + // setup scale-stuff + QLabel * scale_lbl = new QLabel( m_toolBar ); + scale_lbl->setPixmap( embed::getIconPixmap( "scale" ) ); + + m_scaleComboBox = new ComboBox( m_toolBar ); + m_scaleComboBox->setModel( &m_editor->m_scaleModel ); + m_scaleComboBox->setFixedSize( 105, 22 ); + + // setup chord-stuff + QLabel * chord_lbl = new QLabel( m_toolBar ); + chord_lbl->setPixmap( embed::getIconPixmap( "chord" ) ); + + m_chordComboBox = new ComboBox( m_toolBar ); + m_chordComboBox->setModel( &m_editor->m_chordModel ); + m_chordComboBox->setFixedSize( 105, 22 ); + + + m_toolBar->addSeparator(); + m_toolBar->addWidget( m_drawButton ); + m_toolBar->addWidget( m_eraseButton ); + m_toolBar->addWidget( m_selectButton ); + m_toolBar->addWidget( m_detuneButton ); + + m_toolBar->addSeparator(); + m_toolBar->addWidget( m_cutButton ); + m_toolBar->addWidget( m_copyButton ); + m_toolBar->addWidget( m_pasteButton ); + + m_toolBar->addSeparator(); + QWidget* timeLineButtons = new QWidget(); + timeLineButtons->setFixedHeight(m_toolBar->height()); + timeLineButtons->move(0,0); + QLayout* l = new QHBoxLayout( timeLineButtons ); + l->setSpacing(0); l->setMargin(0); + m_editor->m_timeLine->addToolButtons(timeLineButtons); + m_toolBar->addWidget(timeLineButtons); + + m_toolBar->addSeparator(); + m_toolBar->addWidget( zoom_lbl ); + m_toolBar->addWidget( m_zoomingComboBox ); + + m_toolBar->addSeparator(); + m_toolBar->addWidget( quantize_lbl ); + m_toolBar->addWidget( m_quantizeComboBox ); + + m_toolBar->addSeparator(); + m_toolBar->addWidget( note_len_lbl ); + m_toolBar->addWidget( m_noteLenComboBox ); + + m_toolBar->addSeparator(); + m_toolBar->addWidget( scale_lbl ); + m_toolBar->addWidget( m_scaleComboBox ); + + m_toolBar->addSeparator(); + m_toolBar->addWidget( chord_lbl ); + m_toolBar->addWidget( m_chordComboBox ); + + m_zoomingComboBox->setWhatsThis( + tr( + "This controls the magnification of an axis. " + "It can be helpful to choose magnification for a specific " + "task. For ordinary editing, the magnification should be " + "fitted to your smallest notes. " + ) ); + + m_quantizeComboBox->setWhatsThis( + tr( + "The 'Q' stands for quantization, and controls the grid size " + "notes and control points snap to. " + "With smaller quantization values, you can draw shorter notes " + "in Piano Roll, and more exact control points in the " + "Automation Editor." + + ) ); + + m_noteLenComboBox->setWhatsThis( + tr( + "This lets you select the length of new notes. " + "'Last Note' means that LMMS will use the note length of " + "the note you last edited" + ) ); + + m_scaleComboBox->setWhatsThis( + tr( + "The feature is directly connected to the context-menu " + "on the virtual keyboard, to the left in Piano Roll. " + "After you have chosen the scale you want " + "in this drop-down menu, " + "you can right click on a desired key in the virtual keyboard, " + "and then choose 'Mark current Scale'. " + "LMMS will highlight all notes that belongs to the chosen scale, " + "and in the key you have selected!" + ) ); + + + m_chordComboBox->setWhatsThis( + tr( + "Let you select a chord which LMMS then can draw or highlight." + "You can find the most common chords in this drop-down menu. " + "After you have selected a chord, click anywhere to place the chord, and right " + "click on the virtual keyboard to open context menu and highlight the chord. " + "To return to single note placement, you need to choose 'No chord' " + "in this drop-down menu." + ) ); + + + // setup our actual window + setFocusPolicy( Qt::StrongFocus ); + setFocus(); + setWindowIcon( embed::getIconPixmap( "piano" ) ); + setCurrentPattern( NULL ); + + if( Engine::mainWindow()->workspace() ) + { + parentWidget()->resize(m_toolBar->sizeHint().width()+10, INITIAL_PIANOROLL_HEIGHT); + parentWidget()->move( 5, 5 ); + parentWidget()->hide(); + } + else + { + resize( m_toolBar->sizeHint().width()+10, INITIAL_PIANOROLL_HEIGHT ); + hide(); + } + + // Connections + connect(m_editor, SIGNAL(currentPatternChanged()), this, SIGNAL(currentPatternChanged())); +} + +const Pattern*PianoRollWindow::currentPattern() const +{ + return m_editor->currentPattern(); +} + +void PianoRollWindow::setCurrentPattern(Pattern* pattern) +{ + m_editor->setCurrentPattern(pattern); +} + +bool PianoRollWindow::isRecording() const +{ + return m_editor->isRecording(); +} + +int PianoRollWindow::quantization() const +{ + return m_editor->quantization(); +} + +void PianoRollWindow::play() +{ + m_editor->play(); +} + +void PianoRollWindow::stop() +{ + m_editor->stop(); +} + +void PianoRollWindow::record() +{ + m_editor->record(); +} + +void PianoRollWindow::recordAccompany() +{ + m_editor->recordAccompany(); +} + +void PianoRollWindow::stopRecording() +{ + m_editor->stopRecording(); +} + +void PianoRollWindow::reset() +{ + m_editor->reset(); +} + + +void PianoRollWindow::saveSettings(QDomDocument & doc, QDomElement & de) +{ + MainWindow::saveWidgetState(this, de); +} + + +void PianoRollWindow::loadSettings(const QDomElement & de) +{ + MainWindow::restoreWidgetState(this, de); +} diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index ee020cb07..33e2e8131 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -250,6 +250,9 @@ SongEditor::SongEditor( Song * _song ) : m_zoomingModel->findText( "100%" ) ); connect( m_zoomingModel, SIGNAL( dataChanged() ), this, SLOT( zoomingChanged() ) ); + + setFocusPolicy( Qt::StrongFocus ); + setFocus(); } @@ -606,9 +609,6 @@ SongEditorWindow::SongEditorWindow(Song* song) : setWindowTitle( tr( "Song-Editor" ) ); setWindowIcon( embed::getIconPixmap( "songeditor" ) ); - setFocusPolicy( Qt::StrongFocus ); - setFocus(); - setCentralWidget(m_editor); // Set up buttons diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index 5306b2185..f53c57713 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -670,6 +670,7 @@ void PatternView::openInPianoRoll() { Engine::pianoRoll()->setCurrentPattern( m_pat ); Engine::pianoRoll()->parentWidget()->show(); + Engine::pianoRoll()->show(); Engine::pianoRoll()->setFocus(); } From e9d841dec134b6b38774443af0716ef56ec0f825 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 16:53:31 +0100 Subject: [PATCH 008/172] Migrate Timeline::addToolButtons to QToolBar --- include/Timeline.h | 3 ++- src/core/Timeline.cpp | 10 +++++----- src/gui/AutomationEditor.cpp | 8 +------- src/gui/PianoRoll.cpp | 8 +------- src/gui/SongEditor.cpp | 10 ++-------- 5 files changed, 11 insertions(+), 28 deletions(-) diff --git a/include/Timeline.h b/include/Timeline.h index 78dc00ddc..47f93d4b6 100644 --- a/include/Timeline.h +++ b/include/Timeline.h @@ -32,6 +32,7 @@ class QPixmap; +class QToolBar; class NStateButton; class TextFloat; @@ -111,7 +112,7 @@ public: update(); } - void addToolButtons( QWidget * _tool_bar ); + void addToolButtons(QToolBar* _tool_bar ); virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); diff --git a/src/core/Timeline.cpp b/src/core/Timeline.cpp index d30682d79..c4c39d7bd 100644 --- a/src/core/Timeline.cpp +++ b/src/core/Timeline.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "Timeline.h" @@ -121,7 +122,7 @@ Timeline::~Timeline() -void Timeline::addToolButtons( QWidget * _tool_bar ) +void Timeline::addToolButtons( QToolBar * _tool_bar ) { NStateButton * autoScroll = new NStateButton( _tool_bar ); autoScroll->setGeneralToolTip( tr( "Enable/disable auto-scrolling" ) ); @@ -152,10 +153,9 @@ void Timeline::addToolButtons( QWidget * _tool_bar ) connect( behaviourAtStop, SIGNAL( changedState( int ) ), this, SLOT( toggleBehaviourAtStop( int ) ) ); - QBoxLayout * layout = dynamic_cast( _tool_bar->layout() ); - layout->addWidget( autoScroll ); - layout->addWidget( loopPoints ); - layout->addWidget( behaviourAtStop ); + _tool_bar->addWidget( autoScroll ); + _tool_bar->addWidget( loopPoints ); + _tool_bar->addWidget( behaviourAtStop ); } diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 132ad1b11..46ef53f1b 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2265,13 +2265,7 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addWidget( m_copyButton ); m_toolBar->addWidget( m_pasteButton ); m_toolBar->addSeparator(); - QWidget* timeLineButtons = new QWidget(); - timeLineButtons->setFixedHeight(m_cutButton->height()); - timeLineButtons->move(0,0); - QLayout* l = new QHBoxLayout( timeLineButtons ); - l->setSpacing(0); l->setMargin(0); - m_editor->m_timeLine->addToolButtons(timeLineButtons); - m_toolBar->addWidget(timeLineButtons); + m_editor->m_timeLine->addToolButtons(m_toolBar); m_toolBar->addSeparator(); m_toolBar->addWidget( zoom_x_label ); m_toolBar->addWidget( m_zoomingXComboBox ); diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 6b2d5da03..b6f8e737d 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -4145,13 +4145,7 @@ PianoRollWindow::PianoRollWindow() : m_toolBar->addWidget( m_pasteButton ); m_toolBar->addSeparator(); - QWidget* timeLineButtons = new QWidget(); - timeLineButtons->setFixedHeight(m_toolBar->height()); - timeLineButtons->move(0,0); - QLayout* l = new QHBoxLayout( timeLineButtons ); - l->setSpacing(0); l->setMargin(0); - m_editor->m_timeLine->addToolButtons(timeLineButtons); - m_toolBar->addWidget(timeLineButtons); + m_editor->m_timeLine->addToolButtons(m_toolBar); m_toolBar->addSeparator(); m_toolBar->addWidget( zoom_lbl ); diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index 33e2e8131..43f218957 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -676,14 +676,8 @@ SongEditorWindow::SongEditorWindow(Song* song) : m_toolBar->addSeparator(); m_toolBar->addWidget( m_drawModeButton ); m_toolBar->addWidget( m_editModeButton ); - - QWidget* timeLineButtons = new QWidget(); - timeLineButtons->setFixedHeight(m_toolBar->height()); - timeLineButtons->move(0,0); - QLayout* l = new QHBoxLayout( timeLineButtons ); - l->setSpacing(0); l->setMargin(0); - m_editor->m_timeLine->addToolButtons(timeLineButtons); - + m_toolBar->addSeparator(); + m_editor->m_timeLine->addToolButtons(m_toolBar); m_toolBar->addSeparator(); m_toolBar->addWidget( zoom_lbl ); m_toolBar->addWidget( m_zoomingComboBox ); From 4b275693b6af977d9e4cdfbc746a432e52abb591 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 17:12:38 +0100 Subject: [PATCH 009/172] ToolBar css fixes --- data/themes/default/style.css | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/data/themes/default/style.css b/data/themes/default/style.css index a95abb793..03d9212fa 100644 --- a/data/themes/default/style.css +++ b/data/themes/default/style.css @@ -378,9 +378,17 @@ QWidget#mainToolbar { QToolBar { background: qlineargradient(x1:0, y1:0, x2:1, y2:1, stop:0 #98a2a7, stop:1 #5b646f); + border: none; + padding: 1px; + spacing: 0; } -QToolButton, ToolButton { +QToolBar::separator { + border: none; + width: 5px; +} + +QToolButton { padding: 1px 1px 1px 1px; border-radius: 2px; border: 1px solid rgba(0,0,0,32); @@ -391,12 +399,12 @@ QToolButton, ToolButton { /* separate corner rounding for play and stop buttons! */ -ToolButton#playButton { +QToolButton#playButton { border-top-left-radius: 5px 15px; border-bottom-left-radius: 5px 15px; } -ToolButton#stopButton { +QToolButton#stopButton { border-top-right-radius: 5px 15px; border-bottom-right-radius: 5px 15px; } @@ -405,20 +413,20 @@ ToolButton#stopButton { /* all tool buttons */ -QToolButton:hover, ToolButton:hover { +QToolButton:hover { background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #e0e0e0, stop:0.5 #c9c9c9, stop:1 #969696 ); border: 1px solid rgba(0,0,0,128); color: white; } -QToolButton:pressed, ToolButton:pressed { +QToolButton:pressed { background: qlineargradient(x1:0, y1:0, x2:0, y2:1, stop:0 #969696, stop:0.5 #c9c9c9, stop:1 #969696 ); padding: 2px 1px 0px 1px; border: 1px solid rgba(0,0,0,128); color: white; } -QToolButton:checked, ToolButton:checked { +QToolButton:checked { background: qradialgradient(cx:0.3, cy:0.3, radius:0.8, fx:0.3, fy:0.3, stop:0 #e0e0e0, stop:0.8 #c9c9c9, stop:1 #c0c0c0 ); border-radius: 3px; padding: 2px 1px 0px 1px; From d029c8513a9ccfc60716cf1d5f5927aed7704df5 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 18:23:01 +0100 Subject: [PATCH 010/172] BBEditor: Use Editor superclass --- include/BBEditor.h | 63 ++++++---- include/ComboBox.h | 4 + include/Pattern.h | 2 +- src/core/Song.cpp | 2 +- src/core/Track.cpp | 4 +- src/gui/BBEditor.cpp | 219 ++++++++++++++--------------------- src/gui/widgets/ComboBox.cpp | 20 +++- 7 files changed, 149 insertions(+), 165 deletions(-) diff --git a/include/BBEditor.h b/include/BBEditor.h index 84b99a0da..1e2bda33c 100644 --- a/include/BBEditor.h +++ b/include/BBEditor.h @@ -26,6 +26,7 @@ #ifndef BB_EDITOR_H #define BB_EDITOR_H +#include "Editor.h" #include "TrackContainerView.h" @@ -33,46 +34,60 @@ class BBTrackContainer; class ComboBox; class ToolButton; +class BBTrackContainerView; -class BBEditor : public TrackContainerView +class BBEditor : public Editor { Q_OBJECT public: BBEditor( BBTrackContainer * _tc ); - virtual ~BBEditor(); + ~BBEditor(); - virtual inline bool fixedTCOs() const - { - return( true ); + const BBTrackContainerView* trackContainerView() const { + return m_trackContainerView; + } + BBTrackContainerView* trackContainerView() { + return m_trackContainerView; } - - virtual void dropEvent( QDropEvent * _de ); - - void removeBBView( int _bb ); - - void setPauseIcon( bool pause ); + void removeBBView( int bb ); public slots: void play(); void stop(); - void updatePosition(); - void addAutomationTrack(); - void addSteps(); - void removeSteps(); private: - virtual void keyPressEvent( QKeyEvent * _ke ); - - BBTrackContainer * m_bbtc; - QWidget * m_toolBar; - - ToolButton * m_playButton; - ToolButton * m_stopButton; - + BBTrackContainerView* m_trackContainerView; ComboBox * m_bbComboBox; - } ; + +class BBTrackContainerView : public TrackContainerView +{ + Q_OBJECT +public: + BBTrackContainerView(BBTrackContainer* tc); + + bool fixedTCOs() const + { + return true; + } + + void removeBBView(int bb); + +public slots: + void addSteps(); + void removeSteps(); + void addAutomationTrack(); + +protected slots: + virtual void dropEvent(QDropEvent * de ); + void updatePosition(); + +private: + BBTrackContainer * m_bbtc; +}; + + #endif diff --git a/include/ComboBox.h b/include/ComboBox.h index fdfe12bf3..0c348e53b 100644 --- a/include/ComboBox.h +++ b/include/ComboBox.h @@ -53,6 +53,10 @@ public: virtual QSize sizeHint() const; +public slots: + void selectNext(); + void selectPrevious(); + protected: virtual void contextMenuEvent( QContextMenuEvent* event ); diff --git a/include/Pattern.h b/include/Pattern.h index 163b3429b..840926f51 100644 --- a/include/Pattern.h +++ b/include/Pattern.h @@ -138,7 +138,7 @@ private: int m_steps; friend class PatternView; - friend class BBEditor; + friend class BBTrackContainerView; signals: diff --git a/src/core/Song.cpp b/src/core/Song.cpp index dc19a3d65..a8d3450f8 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -729,7 +729,7 @@ void Song::clearProject() Engine::mixer()->lock(); if( Engine::getBBEditor() ) { - Engine::getBBEditor()->clearAllTracks(); + Engine::getBBEditor()->trackContainerView()->clearAllTracks(); } if( Engine::songEditor() ) { diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 188d57e08..f25623540 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -1134,7 +1134,7 @@ void TrackContentWidget::update() */ void TrackContentWidget::changePosition( const MidiTime & _new_pos ) { - if( m_trackView->trackContainerView() == Engine::getBBEditor() ) + if( m_trackView->trackContainerView() == Engine::getBBEditor()->trackContainerView() ) { const int cur_bb = Engine::getBBTrackContainer()->currentBB(); setUpdatesEnabled( false ); @@ -1466,7 +1466,7 @@ void TrackContentWidget::paintEvent( QPaintEvent * _pe ) int ppt = static_cast( tcv->pixelsPerTact() ); QPainter p( this ); // Don't draw background on BB-Editor - if( m_trackView->trackContainerView() != Engine::getBBEditor() ) + if( m_trackView->trackContainerView() != Engine::getBBEditor()->trackContainerView() ) { p.drawTiledPixmap( rect(), m_background, QPoint( tcv->currentPosition().getTact() * ppt, 0 ) ); diff --git a/src/gui/BBEditor.cpp b/src/gui/BBEditor.cpp index d57da6441..a8d631481 100644 --- a/src/gui/BBEditor.cpp +++ b/src/gui/BBEditor.cpp @@ -22,7 +22,7 @@ * */ - +#include #include #include #include @@ -44,27 +44,13 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : - TrackContainerView( tc ), - m_bbtc( tc ) + Editor(false), + m_trackContainerView( new BBTrackContainerView(tc) ) { - // create toolbar - m_toolBar = new QWidget; - m_toolBar->setFixedHeight( 32 ); - m_toolBar->move( 0, 0 ); - m_toolBar->setAutoFillBackground( true ); - QPalette pal; - pal.setBrush( m_toolBar->backgroundRole(), - embed::getIconPixmap( "toolbar_bg" ) ); - m_toolBar->setPalette( pal ); - static_cast( layout() )->insertWidget( 0, m_toolBar ); - - QHBoxLayout * tb_layout = new QHBoxLayout( m_toolBar ); - tb_layout->setSpacing( 0 ); - tb_layout->setMargin( 0 ); - - setWindowIcon( embed::getIconPixmap( "bb_track_btn" ) ); setWindowTitle( tr( "Beat+Bassline Editor" ) ); + setCentralWidget(m_trackContainerView); + // TODO: Use style sheet if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) @@ -79,16 +65,8 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : } - m_playButton = new ToolButton( embed::getIconPixmap( "play" ), - tr( "Play/pause current beat/bassline (Space)" ), - this, SLOT( play() ), m_toolBar ); - - m_stopButton = new ToolButton( embed::getIconPixmap( "stop" ), - tr( "Stop playback of current beat/bassline (Space)" ), - this, SLOT( stop() ), m_toolBar ); - - m_playButton->setObjectName( "playButton" ); - m_stopButton->setObjectName( "stopButton" ); + m_playButton->setToolTip(tr( "Play/pause current beat/bassline (Space)" )); + m_stopButton->setToolTip(tr( "Stop playback of current beat/bassline (Space)" )); ToolButton * add_bb_track = new ToolButton( embed::getIconPixmap( "add_bb_track" ), @@ -99,18 +77,17 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : ToolButton * add_automation_track = new ToolButton( embed::getIconPixmap( "add_automation" ), tr( "Add automation-track" ), - this, SLOT( addAutomationTrack() ), m_toolBar ); + m_trackContainerView, SLOT( addAutomationTrack() ), m_toolBar ); ToolButton * remove_bar = new ToolButton( embed::getIconPixmap( "step_btn_remove" ), tr( "Remove steps" ), - this, SLOT( removeSteps() ), m_toolBar ); + m_trackContainerView, SLOT( removeSteps() ), m_toolBar ); ToolButton * add_bar = new ToolButton( embed::getIconPixmap( "step_btn_add" ), tr( "Add steps" ), - this, SLOT( addSteps() ), m_toolBar ); - + m_trackContainerView, SLOT( addSteps() ), m_toolBar ); m_playButton->setWhatsThis( @@ -125,30 +102,35 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : m_bbComboBox->setFixedSize( 200, 22 ); m_bbComboBox->setModel( &tc->m_bbComboBoxModel ); - tb_layout->addSpacing( 5 ); - tb_layout->addWidget( m_playButton ); - tb_layout->addWidget( m_stopButton ); - tb_layout->addSpacing( 20 ); - tb_layout->addWidget( m_bbComboBox ); - tb_layout->addSpacing( 10 ); - tb_layout->addWidget( add_bb_track ); - tb_layout->addWidget( add_automation_track ); - tb_layout->addStretch(); - tb_layout->addWidget( remove_bar ); - tb_layout->addWidget( add_bar ); - tb_layout->addSpacing( 15 ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( m_bbComboBox ); + m_toolBar->addSeparator(); + m_toolBar->addWidget( add_bb_track ); + m_toolBar->addWidget( add_automation_track ); + QWidget* stretch = new QWidget(m_toolBar); + stretch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + m_toolBar->addWidget(stretch); + m_toolBar->addWidget( remove_bar ); + m_toolBar->addWidget( add_bar ); + m_toolBar->addSeparator(); - Engine::mainWindow()->workspace()->addSubWindow( this ); - parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->layout()->setSizeConstraint( QLayout::SetMinimumSize ); parentWidget()->resize( minimumWidth(), 300 ); parentWidget()->move( 610, 5 ); parentWidget()->show(); - - setModel( tc ); connect( &tc->m_bbComboBoxModel, SIGNAL( dataChanged() ), - this, SLOT( updatePosition() ) ); + m_trackContainerView, SLOT( updatePosition() ) ); + + QAction* viewNext = new QAction(this); + connect(viewNext, SIGNAL(triggered()), m_bbComboBox, SLOT(selectNext())); + viewNext->setShortcut(Qt::Key_Plus); + addAction(viewNext); + + QAction* viewPrevious = new QAction(this); + connect(viewPrevious, SIGNAL(triggered()), m_bbComboBox, SLOT(selectPrevious())); + viewPrevious->setShortcut(Qt::Key_Minus); + addAction(viewPrevious); } @@ -159,49 +141,11 @@ BBEditor::~BBEditor() } -void BBEditor::dropEvent( QDropEvent * de ) + + +void BBEditor::removeBBView( int bb ) { - QString type = StringPairDrag::decodeKey( de ); - QString value = StringPairDrag::decodeValue( de ); - - if( type.left( 6 ) == "track_" ) - { - DataFile dataFile( value.toUtf8() ); - Track * t = Track::create( dataFile.content().firstChild().toElement(), model() ); - - t->deleteTCOs(); - m_bbtc->updateAfterTrackAdd(); - - de->accept(); - } - else - { - TrackContainerView::dropEvent( de ); - } -} - - -void BBEditor::removeBBView( int _bb ) -{ - foreach( TrackView* view, trackViews() ) - { - view->getTrackContentWidget()->removeTCOView( _bb ); - } -} - - - - -void BBEditor::setPauseIcon( bool pause ) -{ - if( pause == true ) - { - m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); - } - else - { - m_playButton->setIcon( embed::getIconPixmap( "play" ) ); - } + m_trackContainerView->removeBBView(bb); } @@ -230,24 +174,21 @@ void BBEditor::stop() -void BBEditor::updatePosition() + + +BBTrackContainerView::BBTrackContainerView(BBTrackContainer* tc) : + TrackContainerView(tc), + m_bbtc(tc) { - //realignTracks(); - emit positionChanged( m_currentPosition ); + setModel( tc ); } -void BBEditor::addAutomationTrack() -{ - (void) Track::create( Track::AutomationTrack, model() ); -} - - -void BBEditor::addSteps() +void BBTrackContainerView::addSteps() { TrackContainer::TrackList tl = model()->tracks(); @@ -265,7 +206,7 @@ void BBEditor::addSteps() -void BBEditor::removeSteps() +void BBTrackContainerView::removeSteps() { TrackContainer::TrackList tl = model()->tracks(); @@ -283,43 +224,51 @@ void BBEditor::removeSteps() -void BBEditor::keyPressEvent( QKeyEvent * _ke ) +void BBTrackContainerView::addAutomationTrack() { - if ( _ke->key() == Qt::Key_Space ) - { - if( Engine::getSong()->isPlaying() ) - { - stop(); - } - else - { - play(); - } - } - else if ( _ke->key() == Qt::Key_Plus ) - { - if( m_bbtc->currentBB()+ 1 < m_bbtc->numOfBBs() ) - { - m_bbtc->setCurrentBB( m_bbtc->currentBB() + 1 ); - } - } - else if ( _ke->key() == Qt::Key_Minus ) - { - if( m_bbtc->currentBB() > 0 ) - { - m_bbtc->setCurrentBB( m_bbtc->currentBB() - 1 ); - } - } - else - { - // ignore event and pass to parent-widget - _ke->ignore(); - } - + (void) Track::create( Track::AutomationTrack, model() ); } +void BBTrackContainerView::removeBBView(int bb) +{ + foreach( TrackView* view, trackViews() ) + { + view->getTrackContentWidget()->removeTCOView( bb ); + } +} + + +void BBTrackContainerView::dropEvent(QDropEvent* de) +{ + QString type = StringPairDrag::decodeKey( de ); + QString value = StringPairDrag::decodeValue( de ); + + if( type.left( 6 ) == "track_" ) + { + DataFile dataFile( value.toUtf8() ); + Track * t = Track::create( dataFile.content().firstChild().toElement(), model() ); + + t->deleteTCOs(); + m_bbtc->updateAfterTrackAdd(); + + de->accept(); + } + else + { + TrackContainerView::dropEvent( de ); + } +} + + + + +void BBTrackContainerView::updatePosition() +{ + //realignTracks(); + emit positionChanged( m_currentPosition ); +} diff --git a/src/gui/widgets/ComboBox.cpp b/src/gui/widgets/ComboBox.cpp index 950dbf70f..86294a863 100644 --- a/src/gui/widgets/ComboBox.cpp +++ b/src/gui/widgets/ComboBox.cpp @@ -105,6 +105,22 @@ QSize ComboBox::sizeHint() const + +void ComboBox::selectNext() +{ + model()->setInitValue( model()->value() + 1 ); +} + + + + +void ComboBox::selectPrevious() +{ + model()->setInitValue( model()->value() - 1 ); +} + + + void ComboBox::contextMenuEvent( QContextMenuEvent * event ) { if( model() == NULL || event->x() <= width() - CB_ARROW_BTN_WIDTH ) @@ -157,13 +173,13 @@ void ComboBox::mousePressEvent( QMouseEvent* event ) } else if( event->button() == Qt::LeftButton ) { - model()->setInitValue( model()->value() + 1 ); + selectNext(); update(); } } else if( event->button() == Qt::RightButton ) { - model()->setInitValue( model()->value() - 1 ); + selectPrevious(); update(); } else From 11898a5162f32b49431ab4df121cb01f868e040d Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 18:25:10 +0100 Subject: [PATCH 011/172] Move Timeline.cpp to gui directory --- src/{core => gui}/Timeline.cpp | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/{core => gui}/Timeline.cpp (100%) diff --git a/src/core/Timeline.cpp b/src/gui/Timeline.cpp similarity index 100% rename from src/core/Timeline.cpp rename to src/gui/Timeline.cpp From 7a21d699ea1a17c120ca07e27552178fc33ad411 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 18:46:10 +0100 Subject: [PATCH 012/172] SongEditor: Some renames --- include/SongEditor.h | 29 +++++++++++----------- src/gui/SongEditor.cpp | 55 +++++++++++++++++++++--------------------- 2 files changed, 42 insertions(+), 42 deletions(-) diff --git a/include/SongEditor.h b/include/SongEditor.h index 3fff287a9..eb42b1ea4 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -58,10 +58,10 @@ class SongEditor : public TrackContainerView { Q_OBJECT public: - enum Mode + enum EditMode { DrawMode, - EditMode + SelectMode }; SongEditor( Song * _song ); @@ -70,22 +70,23 @@ public: public slots: void scrolled( int _new_pos ); - void setMode(Mode mode); - void setModeDraw(); - void setModeEdit(); + void setEditMode(EditMode mode); + void setEditModeDraw(); + void setEditModeSelect(); private slots: void setHighQuality( bool ); - void masterVolumeChanged( int _new_val ); - void masterVolumePressed(); - void masterVolumeMoved( int _new_val ); - void masterVolumeReleased(); - void masterPitchChanged( int _new_val ); - void masterPitchPressed(); - void masterPitchMoved( int _new_val ); - void masterPitchReleased(); + void setMasterVolume( int _new_val ); + void showMasterVolumeFloat(); + void updateMasterVolumeFloat( int _new_val ); + void hideMasterVolumeFloat(); + + void setMasterPitch( int _new_val ); + void showMasterPitchFloat(); + void updateMasterPitchFloat( int _new_val ); + void hideMasterPitchFloat(); void updateScrollBar( int ); void updatePosition( const MidiTime & _t ); @@ -124,7 +125,7 @@ private: bool m_scrollBack; bool m_smoothScroll; - Mode m_mode; + EditMode m_mode; friend class SongEditorWindow; diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index 43f218957..10c76d4bc 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -163,13 +163,13 @@ SongEditor::SongEditor( Song * _song ) : ToolTip::add( m_masterVolumeSlider, tr( "master volume" ) ); connect( m_masterVolumeSlider, SIGNAL( logicValueChanged( int ) ), this, - SLOT( masterVolumeChanged( int ) ) ); + SLOT( setMasterVolume( int ) ) ); connect( m_masterVolumeSlider, SIGNAL( sliderPressed() ), this, - SLOT( masterVolumePressed() ) ); + SLOT( showMasterVolumeFloat()) ); connect( m_masterVolumeSlider, SIGNAL( logicSliderMoved( int ) ), this, - SLOT( masterVolumeMoved( int ) ) ); + SLOT( updateMasterVolumeFloat( int ) ) ); connect( m_masterVolumeSlider, SIGNAL( sliderReleased() ), this, - SLOT( masterVolumeReleased() ) ); + SLOT( hideMasterVolumeFloat() ) ); m_mvsStatus = new TextFloat; m_mvsStatus->setTitle( tr( "Master volume" ) ); @@ -195,13 +195,13 @@ SongEditor::SongEditor( Song * _song ) : m_masterPitchSlider->setTickInterval( 12 ); ToolTip::add( m_masterPitchSlider, tr( "master pitch" ) ); connect( m_masterPitchSlider, SIGNAL( logicValueChanged( int ) ), this, - SLOT( masterPitchChanged( int ) ) ); + SLOT( setMasterPitch( int ) ) ); connect( m_masterPitchSlider, SIGNAL( sliderPressed() ), this, - SLOT( masterPitchPressed() ) ); + SLOT( showMasterPitchFloat() ) ); connect( m_masterPitchSlider, SIGNAL( logicSliderMoved( int ) ), this, - SLOT( masterPitchMoved( int ) ) ); + SLOT( updateMasterPitchFloat( int ) ) ); connect( m_masterPitchSlider, SIGNAL( sliderReleased() ), this, - SLOT( masterPitchReleased() ) ); + SLOT( hideMasterPitchFloat() ) ); m_mpsStatus = new TextFloat; m_mpsStatus->setTitle( tr( "Master pitch" ) ); @@ -284,19 +284,19 @@ void SongEditor::scrolled( int _new_pos ) -void SongEditor::setMode(Mode mode) +void SongEditor::setEditMode(EditMode mode) { m_mode = mode; } -void SongEditor::setModeDraw() +void SongEditor::setEditModeDraw() { - setMode(DrawMode); + setEditMode(DrawMode); } -void SongEditor::setModeEdit() +void SongEditor::setEditModeSelect() { - setMode(EditMode); + setEditMode(SelectMode); } @@ -387,9 +387,8 @@ void SongEditor::wheelEvent( QWheelEvent * _we ) -void SongEditor::masterVolumeChanged( int _new_val ) +void SongEditor::setMasterVolume( int _new_val ) { - masterVolumeMoved( _new_val ); if( m_mvsStatus->isVisible() == false && m_song->m_loadingProject == false && m_masterVolumeSlider->showStatus() ) { @@ -403,18 +402,18 @@ void SongEditor::masterVolumeChanged( int _new_val ) -void SongEditor::masterVolumePressed( void ) +void SongEditor::showMasterVolumeFloat( void ) { m_mvsStatus->moveGlobal( m_masterVolumeSlider, QPoint( m_masterVolumeSlider->width() + 2, -2 ) ); m_mvsStatus->show(); - masterVolumeMoved( m_song->m_masterVolumeModel.value() ); + updateMasterVolumeFloat( m_song->m_masterVolumeModel.value() ); } -void SongEditor::masterVolumeMoved( int _new_val ) +void SongEditor::updateMasterVolumeFloat( int _new_val ) { m_mvsStatus->setText( tr( "Value: %1%" ).arg( _new_val ) ); } @@ -422,7 +421,7 @@ void SongEditor::masterVolumeMoved( int _new_val ) -void SongEditor::masterVolumeReleased( void ) +void SongEditor::hideMasterVolumeFloat( void ) { m_mvsStatus->hide(); } @@ -430,9 +429,9 @@ void SongEditor::masterVolumeReleased( void ) -void SongEditor::masterPitchChanged( int _new_val ) +void SongEditor::setMasterPitch( int _new_val ) { - masterPitchMoved( _new_val ); + updateMasterPitchFloat( _new_val ); if( m_mpsStatus->isVisible() == false && m_song->m_loadingProject == false && m_masterPitchSlider->showStatus() ) { @@ -445,18 +444,18 @@ void SongEditor::masterPitchChanged( int _new_val ) -void SongEditor::masterPitchPressed( void ) +void SongEditor::showMasterPitchFloat( void ) { m_mpsStatus->moveGlobal( m_masterPitchSlider, QPoint( m_masterPitchSlider->width() + 2, -2 ) ); m_mpsStatus->show(); - masterPitchMoved( m_song->m_masterPitchModel.value() ); + updateMasterPitchFloat( m_song->m_masterPitchModel.value() ); } -void SongEditor::masterPitchMoved( int _new_val ) +void SongEditor::updateMasterPitchFloat( int _new_val ) { m_mpsStatus->setText( tr( "Value: %1 semitones").arg( _new_val ) ); @@ -465,7 +464,7 @@ void SongEditor::masterPitchMoved( int _new_val ) -void SongEditor::masterPitchReleased( void ) +void SongEditor::hideMasterPitchFloat( void ) { m_mpsStatus->hide(); } @@ -598,7 +597,7 @@ void SongEditor::adjustUiAfterProjectLoad() bool SongEditor::allowRubberband() const { - return m_mode == EditMode; + return m_mode == SelectMode; } @@ -636,13 +635,13 @@ SongEditorWindow::SongEditorWindow(Song* song) : m_editor->m_song, SLOT(addAutomationTrack())); m_drawModeButton = new ToolButton(embed::getIconPixmap("edit_draw"), - tr("Draw mode"), m_editor, SLOT(setModeDraw())); + tr("Draw mode"), m_editor, SLOT(setEditModeDraw())); m_drawModeButton->setCheckable(true); m_drawModeButton->setChecked(true); m_editModeButton = new ToolButton(embed::getIconPixmap("edit_select"), tr("Edit mode (select and move)"), - m_editor, SLOT(setModeEdit())); + m_editor, SLOT(setEditModeSelect())); m_editModeButton->setCheckable(true); QButtonGroup * tool_button_group = new QButtonGroup(this); From f131fbd87792b64d3d576aa1f2e23729deb2bd45 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 19:22:52 +0100 Subject: [PATCH 013/172] Editors: Add to workspace in MainWindow class, not in themselves --- include/AutomationEditor.h | 2 ++ include/BBEditor.h | 2 ++ include/PianoRoll.h | 2 ++ include/SongEditor.h | 2 ++ src/gui/AutomationEditor.cpp | 17 +++++------------ src/gui/BBEditor.cpp | 15 ++++----------- src/gui/Editor.cpp | 5 ----- src/gui/MainWindow.cpp | 22 ++++++++++++++++++++++ src/gui/PianoRoll.cpp | 18 +++++------------- src/gui/SongEditor.cpp | 7 ++++--- 10 files changed, 48 insertions(+), 44 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 8105e63c6..d203ac25e 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -267,6 +267,8 @@ public: AutomationEditor* m_editor; + QSize sizeHint() const; + signals: void currentPatternChanged(); diff --git a/include/BBEditor.h b/include/BBEditor.h index 1e2bda33c..d13d1cc45 100644 --- a/include/BBEditor.h +++ b/include/BBEditor.h @@ -43,6 +43,8 @@ public: BBEditor( BBTrackContainer * _tc ); ~BBEditor(); + QSize sizeHint() const; + const BBTrackContainerView* trackContainerView() const { return m_trackContainerView; } diff --git a/include/PianoRoll.h b/include/PianoRoll.h index 1d7cd1146..0d87c752a 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -379,6 +379,8 @@ public: return "pianoroll"; } + QSize sizeHint() const; + signals: void currentPatternChanged(); diff --git a/include/SongEditor.h b/include/SongEditor.h index eb42b1ea4..4f523dbb2 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -137,6 +137,8 @@ class SongEditorWindow : public Editor public: SongEditorWindow(Song* song); + QSize sizeHint() const; + SongEditor* m_editor; protected slots: diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 46ef53f1b..b949b3396 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2280,18 +2280,6 @@ AutomationEditorWindow::AutomationEditorWindow() : setFocusPolicy( Qt::StrongFocus ); setFocus(); setWindowIcon( embed::getIconPixmap( "automation" ) ); - - // Add us to workspace - if( Engine::mainWindow()->workspace() ) - { - parentWidget()->resize( INITIAL_WIDTH, INITIAL_HEIGHT ); - parentWidget()->hide(); - } - else - { - resize( INITIAL_WIDTH, INITIAL_HEIGHT ); - hide(); - } } @@ -2335,6 +2323,11 @@ int AutomationEditorWindow::quantization() const return m_editor->quantization(); } +QSize AutomationEditorWindow::sizeHint() const +{ + return {INITIAL_WIDTH, INITIAL_HEIGHT}; +} + void AutomationEditorWindow::play() { m_editor->play(); diff --git a/src/gui/BBEditor.cpp b/src/gui/BBEditor.cpp index a8d631481..ef3291f32 100644 --- a/src/gui/BBEditor.cpp +++ b/src/gui/BBEditor.cpp @@ -114,11 +114,6 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : m_toolBar->addWidget( add_bar ); m_toolBar->addSeparator(); - parentWidget()->layout()->setSizeConstraint( QLayout::SetMinimumSize ); - parentWidget()->resize( minimumWidth(), 300 ); - parentWidget()->move( 610, 5 ); - parentWidget()->show(); - connect( &tc->m_bbComboBoxModel, SIGNAL( dataChanged() ), m_trackContainerView, SLOT( updatePosition() ) ); @@ -134,13 +129,15 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : } - - BBEditor::~BBEditor() { } +QSize BBEditor::sizeHint() const +{ + return {minimumWidth(), 300}; +} void BBEditor::removeBBView( int bb ) @@ -149,8 +146,6 @@ void BBEditor::removeBBView( int bb ) } - - void BBEditor::play() { if( Engine::getSong()->playMode() != Song::Mode_PlayBB ) @@ -164,8 +159,6 @@ void BBEditor::play() } - - void BBEditor::stop() { Engine::getSong()->stop(); diff --git a/src/gui/Editor.cpp b/src/gui/Editor.cpp index 57042b623..0e911b960 100644 --- a/src/gui/Editor.cpp +++ b/src/gui/Editor.cpp @@ -98,11 +98,6 @@ Editor::Editor(bool record) : connect(m_recordAccompanyButton, SIGNAL(clicked()), this, SLOT(recordAccompany())); } connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); - - - // Add editor to main window - Engine::mainWindow()->workspace()->addSubWindow(this); - parentWidget()->setAttribute(Qt::WA_DeleteOnClose, false); } Editor::~Editor() diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 86a4ea65d..fb99d60bb 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -530,6 +530,28 @@ void MainWindow::finalize() SetupDialog sd( SetupDialog::AudioSettings ); sd.exec(); } + + // Add editor subwindows + for (QWidget* widget : QList{ + Engine::automationEditor(), + Engine::getBBEditor(), + Engine::pianoRoll(), + Engine::songEditor() + }) + { + QMdiSubWindow* window = workspace()->addSubWindow(widget); + window->setWindowIcon(widget->windowIcon()); + window->setAttribute(Qt::WA_DeleteOnClose, false); + window->resize(widget->sizeHint()); + } + + Engine::automationEditor()->parentWidget()->hide(); + Engine::getBBEditor()->parentWidget()->move( 610, 5 ); + Engine::getBBEditor()->parentWidget()->show(); + Engine::pianoRoll()->parentWidget()->move(5, 5); + Engine::pianoRoll()->parentWidget()->hide(); + Engine::songEditor()->parentWidget()->move(5, 5); + Engine::songEditor()->parentWidget()->show(); } diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index b6f8e737d..81cb01ae7 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -4222,18 +4222,6 @@ PianoRollWindow::PianoRollWindow() : setWindowIcon( embed::getIconPixmap( "piano" ) ); setCurrentPattern( NULL ); - if( Engine::mainWindow()->workspace() ) - { - parentWidget()->resize(m_toolBar->sizeHint().width()+10, INITIAL_PIANOROLL_HEIGHT); - parentWidget()->move( 5, 5 ); - parentWidget()->hide(); - } - else - { - resize( m_toolBar->sizeHint().width()+10, INITIAL_PIANOROLL_HEIGHT ); - hide(); - } - // Connections connect(m_editor, SIGNAL(currentPatternChanged()), this, SIGNAL(currentPatternChanged())); } @@ -4294,8 +4282,12 @@ void PianoRollWindow::saveSettings(QDomDocument & doc, QDomElement & de) MainWindow::saveWidgetState(this, de); } - void PianoRollWindow::loadSettings(const QDomElement & de) { MainWindow::restoreWidgetState(this, de); } + +QSize PianoRollWindow::sizeHint() const +{ + return {m_toolBar->sizeHint().width()+10, INITIAL_PIANOROLL_HEIGHT}; +} diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index 10c76d4bc..adb6747c8 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -680,10 +680,11 @@ SongEditorWindow::SongEditorWindow(Song* song) : m_toolBar->addSeparator(); m_toolBar->addWidget( zoom_lbl ); m_toolBar->addWidget( m_zoomingComboBox ); +} - parentWidget()->resize( 600, 300 ); - parentWidget()->move( 5, 5 ); - parentWidget()->show(); +QSize SongEditorWindow::sizeHint() const +{ + return {600, 300}; } From 32da8cb677388a9e2d27f94315505049b7e900dc Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 21:22:52 +0100 Subject: [PATCH 014/172] Editor: Don't use ToolButton --- include/Editor.h | 8 ++++---- src/gui/AutomationEditor.cpp | 8 ++++---- src/gui/BBEditor.cpp | 10 +++++----- src/gui/Editor.cpp | 38 ++++++++++++++++++------------------ src/gui/PianoRoll.cpp | 16 +++++++-------- src/gui/SongEditor.cpp | 14 ++++++------- 6 files changed, 47 insertions(+), 47 deletions(-) diff --git a/include/Editor.h b/include/Editor.h index 0b4fa96bb..ffd2f4ae1 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -60,10 +60,10 @@ protected: QToolBar* m_toolBar; - QAbstractButton* m_playButton; - QAbstractButton* m_recordButton; - QAbstractButton* m_recordAccompanyButton; - QAbstractButton* m_stopButton; + QAction* m_playAction; + QAction* m_recordAction; + QAction* m_recordAccompanyAction; + QAction* m_stopAction; private: }; diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index b949b3396..abf0e3225 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2029,14 +2029,14 @@ AutomationEditorWindow::AutomationEditorWindow() : // Play/stop buttons - m_playButton->setToolTip(tr( "Play/pause current pattern (Space)" )); - m_playButton->setWhatsThis( + m_playAction->setToolTip(tr( "Play/pause current pattern (Space)" )); + m_playAction->setWhatsThis( tr( "Click here if you want to play the current pattern. " "This is useful while editing it. The pattern is " "automatically looped when the end is reached." ) ); - m_stopButton->setToolTip(tr("Stop playing of current pattern (Space)")); - m_stopButton->setWhatsThis( + m_stopAction->setToolTip(tr("Stop playing of current pattern (Space)")); + m_stopAction->setWhatsThis( tr( "Click here if you want to stop playing of the " "current pattern." ) ); diff --git a/src/gui/BBEditor.cpp b/src/gui/BBEditor.cpp index ef3291f32..03499cb87 100644 --- a/src/gui/BBEditor.cpp +++ b/src/gui/BBEditor.cpp @@ -65,8 +65,8 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : } - m_playButton->setToolTip(tr( "Play/pause current beat/bassline (Space)" )); - m_stopButton->setToolTip(tr( "Stop playback of current beat/bassline (Space)" )); + m_playAction->setToolTip(tr( "Play/pause current beat/bassline (Space)" )); + m_stopAction->setToolTip(tr( "Stop playback of current beat/bassline (Space)" )); ToolButton * add_bb_track = new ToolButton( embed::getIconPixmap( "add_bb_track" ), @@ -90,11 +90,11 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : m_trackContainerView, SLOT( addSteps() ), m_toolBar ); - m_playButton->setWhatsThis( + m_playAction->setWhatsThis( tr( "Click here to play the current " "beat/bassline. The beat/bassline is automatically " "looped when its end is reached." ) ); - m_stopButton->setWhatsThis( + m_stopAction->setWhatsThis( tr( "Click here to stop playing of current " "beat/bassline." ) ); @@ -136,7 +136,7 @@ BBEditor::~BBEditor() QSize BBEditor::sizeHint() const { - return {minimumWidth(), 300}; + return {minimumWidth()+10, 300}; } diff --git a/src/gui/Editor.cpp b/src/gui/Editor.cpp index 0e911b960..778a303a9 100644 --- a/src/gui/Editor.cpp +++ b/src/gui/Editor.cpp @@ -36,9 +36,9 @@ void Editor::setPauseIcon(bool displayPauseIcon) { // If we're playing, show a pause icon if (displayPauseIcon) - m_playButton->setIcon(embed::getIconPixmap("pause")); + m_playAction->setIcon(embed::getIconPixmap("pause")); else - m_playButton->setIcon(embed::getIconPixmap("play")); + m_playAction->setIcon(embed::getIconPixmap("play")); } void Editor::play() @@ -59,45 +59,45 @@ void Editor::stop() Editor::Editor(bool record) : m_toolBar(new QToolBar(this)), - m_playButton(nullptr), - m_recordButton(nullptr), - m_recordAccompanyButton(nullptr), - m_stopButton(nullptr) + m_playAction(nullptr), + m_recordAction(nullptr), + m_recordAccompanyAction(nullptr), + m_stopAction(nullptr) { m_toolBar->setContextMenuPolicy(Qt::PreventContextMenu); + m_toolBar->setMovable(false); auto addButton = [this](const char* pixmap_name, QString text, QString objectName) { - ToolButton* button = new ToolButton(embed::getIconPixmap(pixmap_name), text); - button->setObjectName(objectName); - m_toolBar->addWidget(button); - return button; + QAction* action = m_toolBar->addAction(embed::getIconPixmap(pixmap_name), text); + m_toolBar->widgetForAction(action)->setObjectName(objectName); + return action; }; // Set up play button - m_playButton = addButton("play", tr("Play (Space)"), "playButton"); - m_playButton->setShortcut(Qt::Key_Space); + m_playAction = addButton("play", tr("Play (Space)"), "playButton"); + m_playAction->setShortcut(Qt::Key_Space); // Set up record buttons if wanted if (record) { - m_recordButton = addButton("record", tr("Record"), "recordButton"); - m_recordAccompanyButton = addButton("record_accompany", tr("Record while playing"), "recordAccompanyButton"); + m_recordAction = addButton("record", tr("Record"), "recordButton"); + m_recordAccompanyAction = addButton("record_accompany", tr("Record while playing"), "recordAccompanyButton"); } // Set up stop button - m_stopButton = addButton("stop", tr("Stop (Space)"), "stopButton"); + m_stopAction = addButton("stop", tr("Stop (Space)"), "stopButton"); // Add toolbar to window addToolBar(Qt::TopToolBarArea, m_toolBar); // Set up connections - connect(m_playButton, SIGNAL(clicked()), this, SLOT(play())); + connect(m_playAction, SIGNAL(triggered()), this, SLOT(play())); if (record) { - connect(m_recordButton, SIGNAL(clicked()), this, SLOT(record())); - connect(m_recordAccompanyButton, SIGNAL(clicked()), this, SLOT(recordAccompany())); + connect(m_recordAction, SIGNAL(triggered()), this, SLOT(record())); + connect(m_recordAccompanyAction, SIGNAL(triggered()), this, SLOT(recordAccompany())); } - connect(m_stopButton, SIGNAL(clicked()), this, SLOT(stop())); + connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stop())); } Editor::~Editor() diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 81cb01ae7..8c66eb6f8 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -3978,28 +3978,28 @@ PianoRollWindow::PianoRollWindow() : { setCentralWidget(m_editor); - m_playButton->setToolTip(tr("Play/pause current pattern (Space)")); - m_recordButton->setToolTip(tr("Record notes from MIDI-device/channel-piano")); - m_recordAccompanyButton->setToolTip(tr("Record notes from MIDI-device/channel-piano while playing song or BB track")); - m_stopButton->setToolTip(tr("Stop playing of current pattern (Space)")); + m_playAction->setToolTip(tr("Play/pause current pattern (Space)")); + m_recordAction->setToolTip(tr("Record notes from MIDI-device/channel-piano")); + m_recordAccompanyAction->setToolTip(tr("Record notes from MIDI-device/channel-piano while playing song or BB track")); + m_stopAction->setToolTip(tr("Stop playing of current pattern (Space)")); - m_playButton->setWhatsThis( + m_playAction->setWhatsThis( tr( "Click here to play the current pattern. " "This is useful while editing it. The pattern is " "automatically looped when its end is reached." ) ); - m_recordButton->setWhatsThis( + m_recordAction->setWhatsThis( tr( "Click here to record notes from a MIDI-" "device or the virtual test-piano of the according " "channel-window to the current pattern. When recording " "all notes you play will be written to this pattern " "and you can play and edit them afterwards." ) ); - m_recordAccompanyButton->setWhatsThis( + m_recordAccompanyAction->setWhatsThis( tr( "Click here to record notes from a MIDI-" "device or the virtual test-piano of the according " "channel-window to the current pattern. When recording " "all notes you play will be written to this pattern " "and you will hear the song or BB track in the background." ) ); - m_stopButton->setWhatsThis( + m_stopAction->setWhatsThis( tr( "Click here to stop playback of current pattern." ) ); // init edit-buttons at the top diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index adb6747c8..3b63a4bf0 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -611,13 +611,13 @@ SongEditorWindow::SongEditorWindow(Song* song) : setCentralWidget(m_editor); // Set up buttons - m_playButton->setToolTip(tr("Play song (Space)")); - if (m_recordButton && m_recordAccompanyButton) + m_playAction->setToolTip(tr("Play song (Space)")); + if (m_recordAction && m_recordAccompanyAction) { - m_recordButton->setToolTip(tr("Record samples from Audio-device")); - m_recordAccompanyButton->setToolTip(tr( "Record samples from Audio-device while playing song or BB track")); + m_recordAction->setToolTip(tr("Record samples from Audio-device")); + m_recordAccompanyAction->setToolTip(tr( "Record samples from Audio-device while playing song or BB track")); } - m_stopButton->setToolTip(tr( "Stop song (Space)" )); + m_stopAction->setToolTip(tr( "Stop song (Space)" )); m_addBBTrackButton = new ToolButton( embed::getIconPixmap("add_bb_track"), @@ -649,11 +649,11 @@ SongEditorWindow::SongEditorWindow(Song* song) : tool_button_group->addButton(m_editModeButton); tool_button_group->setExclusive(true); - m_playButton->setWhatsThis( + m_playAction->setWhatsThis( tr("Click here, if you want to play your whole song. " "Playing will be started at the song-position-marker (green). " "You can also move it while playing.")); - m_stopButton->setWhatsThis( + m_stopAction->setWhatsThis( tr("Click here, if you want to stop playing of your song. " "The song-position-marker will be set to the start of your song.")); From 968e581844250680f9706ca11264cb49990b3855 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 22:25:52 +0100 Subject: [PATCH 015/172] Editors: Don't use ToolButton --- include/AutomationEditor.h | 21 +++-- include/BBEditor.h | 1 - include/PianoRoll.h | 15 ++-- include/SongEditor.h | 11 ++- src/gui/AutomationEditor.cpp | 144 +++++++++++++++-------------------- src/gui/BBEditor.cpp | 38 +++------ src/gui/PianoRoll.cpp | 109 ++++++++++++-------------- src/gui/SongEditor.cpp | 56 +++++++------- 8 files changed, 168 insertions(+), 227 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index d203ac25e..97ea48572 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -45,7 +45,6 @@ class QScrollBar; class ComboBox; class NotePlayHandle; class Timeline; -class ToolButton; @@ -277,19 +276,19 @@ protected slots: void stop(); private: - QAbstractButton * m_drawButton; - QAbstractButton * m_eraseButton; - QAbstractButton * m_selectButton; - QAbstractButton * m_moveButton; + QAction* m_drawAction; + QAction* m_eraseAction; + QAction* m_selectAction; + QAction* m_moveAction; - ToolButton * m_discreteButton; - ToolButton * m_linearButton; - ToolButton * m_cubicHermiteButton; + QAction* m_discreteAction; + QAction* m_linearAction; + QAction* m_cubicHermiteAction; Knob * m_tensionKnob; - ToolButton * m_cutButton; - ToolButton * m_copyButton; - ToolButton * m_pasteButton; + QAction * m_cutAction; + QAction * m_copyAction; + QAction * m_pasteAction; ComboBox * m_zoomingXComboBox; ComboBox * m_zoomingYComboBox; diff --git a/include/BBEditor.h b/include/BBEditor.h index d13d1cc45..3f9122445 100644 --- a/include/BBEditor.h +++ b/include/BBEditor.h @@ -32,7 +32,6 @@ class BBTrackContainer; class ComboBox; -class ToolButton; class BBTrackContainerView; diff --git a/include/PianoRoll.h b/include/PianoRoll.h index 0d87c752a..0adc98e86 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -49,7 +49,6 @@ class ComboBox; class NotePlayHandle; class Pattern; class Timeline; -class ToolButton; class PianoRoll : public QWidget { @@ -387,14 +386,14 @@ signals: private: PianoRoll* m_editor; - ToolButton * m_drawButton; - ToolButton * m_eraseButton; - ToolButton * m_selectButton; - ToolButton * m_detuneButton; + QAction* m_drawAction; + QAction* m_eraseAction; + QAction* m_selectAction; + QAction* m_detuneAction; - ToolButton * m_cutButton; - ToolButton * m_copyButton; - ToolButton * m_pasteButton; + QAction* m_cutAction; + QAction* m_copyAction; + QAction* m_pasteAction; ComboBox * m_zoomingComboBox; ComboBox * m_quantizeComboBox; diff --git a/include/SongEditor.h b/include/SongEditor.h index 4f523dbb2..44a0c5b2f 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -41,7 +41,6 @@ class MeterDialog; class Song; class TextFloat; class Timeline; -class ToolButton; class positionLine : public QWidget { @@ -148,12 +147,12 @@ protected slots: void stop(); private: - ToolButton * m_addBBTrackButton; - ToolButton * m_addSampleTrackButton; - ToolButton * m_addAutomationTrackButton; + QAction* m_addBBTrackAction; + QAction* m_addSampleTrackAction; + QAction* m_addAutomationTrackAction; - ToolButton * m_drawModeButton; - ToolButton * m_editModeButton; + QAction* m_drawModeAction; + QAction* m_selectModeAction; ComboBox * m_zoomingComboBox; }; diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index abf0e3225..b1d1d49f9 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -57,7 +57,6 @@ #include "gui_templates.h" #include "Timeline.h" #include "ToolTip.h" -#include "ToolButton.h" #include "TextFloat.h" #include "ComboBox.h" #include "BBTrackContainer.h" @@ -2041,17 +2040,19 @@ AutomationEditorWindow::AutomationEditorWindow() : "current pattern." ) ); // Edit mode buttons + QActionGroup * tool_action_group = new QActionGroup(this); - m_drawButton = new ToolButton(embed::getIconPixmap( "edit_draw" ), - tr( "Draw mode (Shift+D)" )); - m_drawButton->setCheckable( true ); - m_drawButton->setChecked( true ); - m_drawButton->setShortcut(Qt::SHIFT | Qt::Key_D); + m_drawAction = new QAction(embed::getIconPixmap("edit_draw"), + tr("Draw mode (Shift+D)"), tool_action_group); + m_drawAction->setCheckable(true); + m_drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); - m_eraseButton = new ToolButton( embed::getIconPixmap( "edit_erase" ), - tr( "Erase mode (Shift+E)" )); - m_eraseButton->setCheckable( true ); - m_eraseButton->setShortcut(Qt::SHIFT | Qt::Key_E); + m_eraseAction = new QAction(embed::getIconPixmap("edit_erase"), + tr("Erase mode (Shift+E)"), tool_action_group); + m_eraseAction->setCheckable(true); + m_eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); + + m_drawAction->setChecked(true); //TODO: m_selectButton and m_moveButton are broken. /*m_selectButton = new ToolButton( embed::getIconPixmap( @@ -2068,32 +2069,30 @@ AutomationEditorWindow::AutomationEditorWindow() : m_moveButton->setCheckable( true );*/ QSignalMapper* signalmapper = new QSignalMapper(this); - signalmapper->setMapping(m_drawButton, AutomationEditor::DRAW); - signalmapper->setMapping(m_eraseButton, AutomationEditor::ERASE); + signalmapper->setMapping(m_drawAction, AutomationEditor::DRAW); + signalmapper->setMapping(m_eraseAction, AutomationEditor::ERASE); // signalmapper->setMapping(m_selectButton, AutomationEditor::SELECT); // signalmapper->setMapping(m_moveButton, AutomationEditor::MOVE); - connect(m_drawButton, SIGNAL(clicked()), signalmapper, SLOT(map())); - connect(m_eraseButton, SIGNAL(clicked()), signalmapper, SLOT(map())); + connect(m_drawAction, SIGNAL(triggered()), signalmapper, SLOT(map())); + connect(m_eraseAction, SIGNAL(triggered()), signalmapper, SLOT(map())); // connect(m_selectButton, SIGNAL(triggered()), signalmapper, SLOT(map())); // connect(m_moveButton, SIGNAL(triggered()), signalmapper, SLOT(map())); connect(signalmapper, SIGNAL(mapped(int)), m_editor, SLOT(setEditMode(int))); - QButtonGroup * tool_button_group = new QButtonGroup(); - tool_button_group->addButton( m_drawButton ); - tool_button_group->addButton( m_eraseButton ); +// tool_action_group->addAction( m_drawButton ); +// tool_action_group->addAction( m_eraseButton ); //tool_button_group->addButton( m_selectButton ); //tool_button_group->addButton( m_moveButton ); - tool_button_group->setExclusive( true ); - m_drawButton->setWhatsThis( + m_drawAction->setWhatsThis( tr( "Click here and draw-mode will be activated. In this " "mode you can add and move single values. This " "is the default mode which is used most of the time. " "You can also press 'Shift+D' on your keyboard to " "activate this mode." ) ); - m_eraseButton->setWhatsThis( + m_eraseAction->setWhatsThis( tr( "Click here and erase-mode will be activated. In this " "mode you can erase single values. You can also press " "'Shift+E' on your keyboard to activate this mode." ) ); @@ -2112,90 +2111,69 @@ AutomationEditorWindow::AutomationEditorWindow() : // Progression type buttons + QActionGroup* progression_type_group = new QActionGroup(this); - m_discreteButton = new ToolButton( embed::getIconPixmap( - "progression_discrete" ), - tr( "Discrete progression" ), - m_editor, SLOT( setProgressionDiscrete() ), - m_toolBar ); - m_discreteButton->setCheckable( true ); - m_discreteButton->setChecked( true ); + m_discreteAction = new QAction(embed::getIconPixmap("progression_discrete"), + tr("Discrete progression"), progression_type_group); + m_linearAction = new QAction(embed::getIconPixmap("progression_linear"), + tr("Linear progression"), progression_type_group); + m_cubicHermiteAction = new QAction(embed::getIconPixmap("progression_cubic_hermite"), + tr( "Cubic Hermite progression"), progression_type_group); - m_linearButton = new ToolButton( embed::getIconPixmap( - "progression_linear" ), - tr( "Linear progression" ), - m_editor, SLOT( setProgressionLinear() ), - m_toolBar ); - m_linearButton->setCheckable( true ); + m_linearAction->setCheckable( true ); + m_cubicHermiteAction->setCheckable( true ); + m_discreteAction->setCheckable( true ); + m_discreteAction->setChecked( true ); - m_cubicHermiteButton = new ToolButton( embed::getIconPixmap( - "progression_cubic_hermite" ), - tr( "Cubic Hermite progression" ), - m_editor, SLOT( - setProgressionHermite() ), - m_toolBar ); - m_cubicHermiteButton->setCheckable( true ); + connect(m_discreteAction, SIGNAL(triggered()), m_editor, SLOT(setProgressionDiscrete())); + connect(m_linearAction, SIGNAL(triggered()), m_editor, SLOT(setProgressionLinear())); + connect(m_cubicHermiteAction, SIGNAL(triggered()), m_editor, SLOT(setProgressionHermite())); // setup tension-stuff m_tensionKnob = new Knob( knobSmall_17, this, "Tension" ); - tool_button_group = new QButtonGroup( this ); - tool_button_group->addButton( m_discreteButton ); - tool_button_group->addButton( m_linearButton ); - tool_button_group->addButton( m_cubicHermiteButton ); - tool_button_group->setExclusive( true ); - - m_discreteButton->setWhatsThis( + m_discreteAction->setWhatsThis( tr( "Click here to choose discrete progressions for this " "automation pattern. The value of the connected " "object will remain constant between control points " "and be set immediately to the new value when each " "control point is reached." ) ); - m_linearButton->setWhatsThis( + m_linearAction->setWhatsThis( tr( "Click here to choose linear progressions for this " "automation pattern. The value of the connected " "object will change at a steady rate over time " "between control points to reach the correct value at " "each control point without a sudden change." ) ); - m_cubicHermiteButton->setWhatsThis( + m_cubicHermiteAction->setWhatsThis( tr( "Click here to choose cubic hermite progressions for this " "automation pattern. The value of the connected " "object will change in a smooth curve and ease in to " "the peaks and valleys." ) ); - - // Copy paste buttons - m_cutButton = new ToolButton( embed::getIconPixmap( "edit_cut" ), - tr( "Cut selected values (Ctrl+X)" ), - m_editor, SLOT( cutSelectedValues() ), - m_toolBar ); + m_cutAction = new QAction(embed::getIconPixmap("edit_cut"), + tr("Cut selected values (Ctrl+X)"), this); + m_copyAction = new QAction(embed::getIconPixmap("edit_copy"), + tr("Copy selected values (Ctrl+C)"), this); + m_pasteAction = new QAction(embed::getIconPixmap("edit_paste"), + tr("Paste values from clipboard Ctrl+V)"), this); - m_copyButton = new ToolButton( embed::getIconPixmap( "edit_copy" ), - tr( "Copy selected values (Ctrl+C)" ), - m_editor, SLOT( copySelectedValues() ), - m_toolBar ); - - m_pasteButton = new ToolButton( embed::getIconPixmap( "edit_paste" ), - tr( "Paste values from clipboard " - "(Ctrl+V)" ), - m_editor, SLOT( pasteValues() ), - m_toolBar ); - - m_cutButton->setWhatsThis( + m_cutAction->setWhatsThis( tr( "Click here and selected values will be cut into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); - m_copyButton->setWhatsThis( + m_copyAction->setWhatsThis( tr( "Click here and selected values will be copied into " "the clipboard. You can paste them anywhere in any " "pattern by clicking on the paste button." ) ); - m_pasteButton->setWhatsThis( + m_pasteAction->setWhatsThis( tr( "Click here and the values from the clipboard will be " "pasted at the first visible measure." ) ); - + connect(m_cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedValues())); + connect(m_copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedValues())); + connect(m_pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteValues())); // Zoom controls @@ -2249,21 +2227,21 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addSeparator();; - m_toolBar->addWidget( m_drawButton ); - m_toolBar->addWidget( m_eraseButton ); - //m_toolBar->addWidget( m_selectButton ); - //m_toolBar->addWidget( m_moveButton ); + m_toolBar->addAction(m_drawAction); + m_toolBar->addAction(m_eraseAction); + //m_toolBar->addAction(m_selectButton); + //m_toolBar->addAction(m_moveButton); m_toolBar->addSeparator(); - m_toolBar->addWidget( m_discreteButton ); - m_toolBar->addWidget( m_linearButton ); - m_toolBar->addWidget( m_cubicHermiteButton ); + m_toolBar->addAction(m_discreteAction); + m_toolBar->addAction(m_linearAction); + m_toolBar->addAction(m_cubicHermiteAction); m_toolBar->addSeparator(); m_toolBar->addWidget( new QLabel( tr("Tension: "), m_toolBar )); m_toolBar->addWidget( m_tensionKnob ); m_toolBar->addSeparator(); - m_toolBar->addWidget( m_cutButton ); - m_toolBar->addWidget( m_copyButton ); - m_toolBar->addWidget( m_pasteButton ); + m_toolBar->addAction( m_cutAction ); + m_toolBar->addAction( m_copyAction ); + m_toolBar->addAction( m_pasteAction ); m_toolBar->addSeparator(); m_editor->m_timeLine->addToolButtons(m_toolBar); m_toolBar->addSeparator(); @@ -2298,13 +2276,13 @@ void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) switch(m_editor->m_pattern->progressionType()) { case AutomationPattern::DiscreteProgression: - m_discreteButton->setChecked(true); + m_discreteAction->setChecked(true); break; case AutomationPattern::LinearProgression: - m_linearButton->setChecked(true); + m_linearAction->setChecked(true); break; case AutomationPattern::CubicHermiteProgression: - m_cubicHermiteButton->setChecked(true); + m_cubicHermiteAction->setChecked(true); break; } diff --git a/src/gui/BBEditor.cpp b/src/gui/BBEditor.cpp index 03499cb87..64a6d1f7c 100644 --- a/src/gui/BBEditor.cpp +++ b/src/gui/BBEditor.cpp @@ -33,7 +33,6 @@ #include "embed.h" #include "MainWindow.h" #include "Song.h" -#include "ToolButton.h" #include "ConfigManager.h" #include "DataFile.h" #include "StringPairDrag.h" @@ -68,28 +67,6 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : m_playAction->setToolTip(tr( "Play/pause current beat/bassline (Space)" )); m_stopAction->setToolTip(tr( "Stop playback of current beat/bassline (Space)" )); - ToolButton * add_bb_track = new ToolButton( - embed::getIconPixmap( "add_bb_track" ), - tr( "Add beat/bassline" ), - Engine::getSong(), SLOT( addBBTrack() ), - m_toolBar ); - - ToolButton * add_automation_track = new ToolButton( - embed::getIconPixmap( "add_automation" ), - tr( "Add automation-track" ), - m_trackContainerView, SLOT( addAutomationTrack() ), m_toolBar ); - - ToolButton * remove_bar = new ToolButton( - embed::getIconPixmap( "step_btn_remove" ), - tr( "Remove steps" ), - m_trackContainerView, SLOT( removeSteps() ), m_toolBar ); - - ToolButton * add_bar = new ToolButton( - embed::getIconPixmap( "step_btn_add" ), - tr( "Add steps" ), - m_trackContainerView, SLOT( addSteps() ), m_toolBar ); - - m_playAction->setWhatsThis( tr( "Click here to play the current " "beat/bassline. The beat/bassline is automatically " @@ -104,14 +81,21 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : m_toolBar->addSeparator(); m_toolBar->addWidget( m_bbComboBox ); + m_toolBar->addSeparator(); - m_toolBar->addWidget( add_bb_track ); - m_toolBar->addWidget( add_automation_track ); + m_toolBar->addAction(embed::getIconPixmap("add_bb_track"), tr("Add beat/bassline"), + Engine::getSong(), SLOT(addBBTrack())); + m_toolBar->addAction(embed::getIconPixmap("add_automation"), tr("Add automation-track"), + m_trackContainerView, SLOT(addAutomationTrack())); + QWidget* stretch = new QWidget(m_toolBar); stretch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_toolBar->addWidget(stretch); - m_toolBar->addWidget( remove_bar ); - m_toolBar->addWidget( add_bar ); + + m_toolBar->addAction(embed::getIconPixmap("step_btn_remove"), tr("Remove steps"), + m_trackContainerView, SLOT(removeSteps())); + m_toolBar->addAction(embed::getIconPixmap("step_btn_add"), tr("Add steps"), + m_trackContainerView, SLOT(addSteps())); m_toolBar->addSeparator(); connect( &tc->m_bbComboBoxModel, SIGNAL( dataChanged() ), diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 8c66eb6f8..6cc05f644 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -66,7 +66,6 @@ #include "templates.h" #include "TextFloat.h" #include "Timeline.h" -#include "ToolButton.h" #include "TextFloat.h" @@ -4003,94 +4002,82 @@ PianoRollWindow::PianoRollWindow() : tr( "Click here to stop playback of current pattern." ) ); // init edit-buttons at the top - m_drawButton = new ToolButton( embed::getIconPixmap( "edit_draw" ), - tr( "Draw mode (Shift+D)" ), - m_editor, SLOT( drawButtonToggled() ), - m_toolBar ); - m_drawButton->setShortcut(Qt::SHIFT | Qt::Key_D); - m_drawButton->setCheckable( true ); - m_drawButton->setChecked( true ); + QActionGroup* tool_button_group = new QActionGroup(this); + m_drawAction = new QAction(embed::getIconPixmap("edit_draw"), + tr( "Draw mode (Shift+D)" ), tool_button_group); + m_drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); + m_drawAction->setCheckable( true ); + m_drawAction->setChecked( true ); - m_eraseButton = new ToolButton( embed::getIconPixmap( "edit_erase" ), - tr( "Erase mode (Shift+E)" ), - m_editor, SLOT( eraseButtonToggled() ), - m_toolBar ); - m_eraseButton->setShortcut(Qt::SHIFT | Qt::Key_E); - m_eraseButton->setCheckable( true ); + m_eraseAction = new QAction(embed::getIconPixmap("edit_erase"), + tr("Erase mode (Shift+E)"), tool_button_group); + m_eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); + m_eraseAction->setCheckable( true ); - m_selectButton = new ToolButton( embed::getIconPixmap( - "edit_select" ), - tr( "Select mode (Shift+S)" ), - m_editor, SLOT( selectButtonToggled() ), - m_toolBar ); - m_selectButton->setShortcut(Qt::SHIFT | Qt::Key_S); - m_selectButton->setCheckable( true ); + m_selectAction = new QAction( embed::getIconPixmap("edit_select"), + tr("Select mode (Shift+S)"), tool_button_group); + m_selectAction->setShortcut(Qt::SHIFT | Qt::Key_S); + m_selectAction->setCheckable( true ); - m_detuneButton = new ToolButton( embed::getIconPixmap( "automation"), - tr( "Detune mode (Shift+T)" ), - m_editor, SLOT( detuneButtonToggled() ), - m_toolBar ); - m_detuneButton->setShortcut(Qt::SHIFT | Qt::Key_T); - m_detuneButton->setCheckable( true ); + m_detuneAction = new QAction(embed::getIconPixmap("automation"), + tr("Detune mode (Shift+T)"), tool_button_group); + m_detuneAction->setShortcut(Qt::SHIFT | Qt::Key_T); + m_detuneAction->setCheckable( true ); - QButtonGroup * tool_button_group = new QButtonGroup( this ); - tool_button_group->addButton( m_drawButton ); - tool_button_group->addButton( m_eraseButton ); - tool_button_group->addButton( m_selectButton ); - tool_button_group->addButton( m_detuneButton ); - tool_button_group->setExclusive( true ); - - m_drawButton->setWhatsThis( + m_drawAction->setWhatsThis( tr( "Click here and draw mode will be activated. In this " "mode you can add, resize and move notes. This " "is the default mode which is used most of the time. " "You can also press 'Shift+D' on your keyboard to " "activate this mode. In this mode, hold Ctrl to " "temporarily go into select mode." ) ); - m_eraseButton->setWhatsThis( + m_eraseAction->setWhatsThis( tr( "Click here and erase mode will be activated. In this " "mode you can erase notes. You can also press " "'Shift+E' on your keyboard to activate this mode." ) ); - m_selectButton->setWhatsThis( + m_selectAction->setWhatsThis( tr( "Click here and select mode will be activated. " "In this mode you can select notes. Alternatively, " "you can hold Ctrl in draw mode to temporarily use " "select mode." ) ); - m_detuneButton->setWhatsThis( + m_detuneAction->setWhatsThis( tr( "Click here and detune mode will be activated. " "In this mode you can click a note to open its " "automation detuning. You can utilize this to slide " "notes from one to another. You can also press " "'Shift+T' on your keyboard to activate this mode." ) ); - m_cutButton = new ToolButton( embed::getIconPixmap( "edit_cut" ), - tr( "Cut selected notes (Ctrl+X)" ), - m_editor, SLOT( cutSelectedNotes() ), - m_toolBar ); + connect(m_drawAction, SIGNAL(triggered()), m_editor, SLOT(drawButtonToggled())); + connect(m_eraseAction, SIGNAL(triggered()), m_editor, SLOT(eraseButtonToggled())); + connect(m_selectAction, SIGNAL(triggered()), m_editor, SLOT(selectButtonToggled())); + connect(m_detuneAction, SIGNAL(triggered()), m_editor, SLOT(detuneButtonToggled())); - m_copyButton = new ToolButton( embed::getIconPixmap( "edit_copy" ), - tr( "Copy selected notes (Ctrl+C)" ), - m_editor, SLOT( copySelectedNotes() ), - m_toolBar ); + // Copy + paste actions + m_cutAction = new QAction(embed::getIconPixmap("edit_cut"), + tr("Cut selected notes (Ctrl+X)"), this); - m_pasteButton = new ToolButton( embed::getIconPixmap( "edit_paste" ), - tr( "Paste notes from clipboard " - "(Ctrl+V)" ), - m_editor, SLOT( pasteNotes() ), - m_toolBar ); + m_copyAction = new QAction(embed::getIconPixmap("edit_copy"), + tr("Copy selected notes (Ctrl+C)"), this); - m_cutButton->setWhatsThis( + m_pasteAction = new QAction(embed::getIconPixmap("edit_paste"), + tr("Paste notes from clipboard (Ctrl+V)"), this); + + m_cutAction->setWhatsThis( tr( "Click here and the selected notes will be cut into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); - m_copyButton->setWhatsThis( + m_copyAction->setWhatsThis( tr( "Click here and the selected notes will be copied into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); - m_pasteButton->setWhatsThis( + m_pasteAction->setWhatsThis( tr( "Click here and the notes from the clipboard will be " "pasted at the first visible measure." ) ); + connect(m_cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedNotes())); + connect(m_copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedNotes())); + connect(m_pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteNotes())); + QLabel * zoom_lbl = new QLabel( m_toolBar ); zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); @@ -4134,15 +4121,15 @@ PianoRollWindow::PianoRollWindow() : m_toolBar->addSeparator(); - m_toolBar->addWidget( m_drawButton ); - m_toolBar->addWidget( m_eraseButton ); - m_toolBar->addWidget( m_selectButton ); - m_toolBar->addWidget( m_detuneButton ); + m_toolBar->addAction( m_drawAction ); + m_toolBar->addAction( m_eraseAction ); + m_toolBar->addAction( m_selectAction ); + m_toolBar->addAction( m_detuneAction ); m_toolBar->addSeparator(); - m_toolBar->addWidget( m_cutButton ); - m_toolBar->addWidget( m_copyButton ); - m_toolBar->addWidget( m_pasteButton ); + m_toolBar->addAction( m_cutAction ); + m_toolBar->addAction( m_copyAction ); + m_toolBar->addAction( m_pasteAction ); m_toolBar->addSeparator(); m_editor->m_timeLine->addToolButtons(m_toolBar); diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index 3b63a4bf0..ebd6842f7 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -46,7 +46,6 @@ #include "MeterDialog.h" #include "TextFloat.h" #include "Timeline.h" -#include "ToolButton.h" #include "ToolTip.h" #include "VisualizationWidget.h" #include "TimeDisplayWidget.h" @@ -619,35 +618,32 @@ SongEditorWindow::SongEditorWindow(Song* song) : } m_stopAction->setToolTip(tr( "Stop song (Space)" )); - m_addBBTrackButton = new ToolButton( - embed::getIconPixmap("add_bb_track"), - tr("Add beat/bassline"), - m_editor->m_song, SLOT(addBBTrack())); + m_addBBTrackAction = new QAction(embed::getIconPixmap("add_bb_track"), + tr("Add beat/bassline"), this); - m_addSampleTrackButton = new ToolButton( - embed::getIconPixmap("add_sample_track" ), - tr( "Add sample-track"), - m_editor->m_song, SLOT(addSampleTrack())); + m_addSampleTrackAction = new QAction(embed::getIconPixmap("add_sample_track"), + tr("Add sample-track"), this); - m_addAutomationTrackButton = new ToolButton( - embed::getIconPixmap("add_automation" ), - tr( "Add automation-track"), - m_editor->m_song, SLOT(addAutomationTrack())); + m_addAutomationTrackAction = new QAction(embed::getIconPixmap("add_automation"), + tr("Add automation-track"), this); - m_drawModeButton = new ToolButton(embed::getIconPixmap("edit_draw"), - tr("Draw mode"), m_editor, SLOT(setEditModeDraw())); - m_drawModeButton->setCheckable(true); - m_drawModeButton->setChecked(true); + connect(m_addBBTrackAction, SIGNAL(triggered()), m_editor->m_song, SLOT(addBBTrack())); + connect(m_addSampleTrackAction, SIGNAL(triggered()), m_editor->m_song, SLOT(addSampleTrack())); + connect(m_addAutomationTrackAction, SIGNAL(triggered()), m_editor->m_song, SLOT(addAutomationTrack())); - m_editModeButton = new ToolButton(embed::getIconPixmap("edit_select"), - tr("Edit mode (select and move)"), - m_editor, SLOT(setEditModeSelect())); - m_editModeButton->setCheckable(true); + QActionGroup* tool_action_group = new QActionGroup(this); + m_drawModeAction = new QAction(embed::getIconPixmap("edit_draw"), + tr("Draw mode"), tool_action_group); + m_drawModeAction->setCheckable(true); + m_drawModeAction->setChecked(true); + + m_selectModeAction = new QAction(embed::getIconPixmap("edit_select"), + tr("Edit mode (select and move)"), tool_action_group); + m_selectModeAction->setCheckable(true); + + connect(m_drawModeAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeDraw())); + connect(m_selectModeAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeSelect())); - QButtonGroup * tool_button_group = new QButtonGroup(this); - tool_button_group->addButton(m_drawModeButton); - tool_button_group->addButton(m_editModeButton); - tool_button_group->setExclusive(true); m_playAction->setWhatsThis( tr("Click here, if you want to play your whole song. " @@ -669,12 +665,12 @@ SongEditorWindow::SongEditorWindow(Song* song) : m_toolBar->addSeparator(); - m_toolBar->addWidget( m_addBBTrackButton ); - m_toolBar->addWidget( m_addSampleTrackButton ); - m_toolBar->addWidget( m_addAutomationTrackButton ); + m_toolBar->addAction( m_addBBTrackAction ); + m_toolBar->addAction( m_addSampleTrackAction ); + m_toolBar->addAction( m_addAutomationTrackAction ); m_toolBar->addSeparator(); - m_toolBar->addWidget( m_drawModeButton ); - m_toolBar->addWidget( m_editModeButton ); + m_toolBar->addAction( m_drawModeAction ); + m_toolBar->addAction( m_selectModeAction ); m_toolBar->addSeparator(); m_editor->m_timeLine->addToolButtons(m_toolBar); m_toolBar->addSeparator(); From b661e0871b7b323696c089f9cacf30f4072a0266 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 22:33:37 +0100 Subject: [PATCH 016/172] PianoRoll: Slot renames --- include/PianoRoll.h | 26 ++++++++++++++------------ src/gui/PianoRoll.cpp | 38 ++++++-------------------------------- 2 files changed, 20 insertions(+), 44 deletions(-) diff --git a/include/PianoRoll.h b/include/PianoRoll.h index 0adc98e86..e190a0e6d 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -58,6 +58,14 @@ class PianoRoll : public QWidget Q_PROPERTY( QColor noteColor READ noteColor WRITE setNoteColor ) Q_PROPERTY( QColor barColor READ barColor WRITE setBarColor ) public: + enum editModes + { + ModeDraw, + ModeErase, + ModeSelect, + ModeEditDetuning, + }; + /*! \brief Resets settings to default when e.g. creating a new project */ void reset(); @@ -97,6 +105,7 @@ public: QColor barColor() const; void setBarColor( const QColor & _c ); + protected: virtual void keyPressEvent( QKeyEvent * _ke ); virtual void keyReleaseEvent( QKeyEvent * _ke ); @@ -131,10 +140,11 @@ protected slots: void horScrolled( int _new_pos ); void verScrolled( int _new_pos ); - void drawButtonToggled(); - void eraseButtonToggled(); - void selectButtonToggled(); - void detuneButtonToggled(); + void setEditMode(editModes mode); + void setEditModeDraw() {setEditMode(ModeDraw); } + void setEditModeErase() {setEditMode(ModeErase); } + void setEditModeSelect() {setEditMode(ModeSelect); } + void setEditModeDetune() {setEditMode(ModeEditDetuning); } void copySelectedNotes(); void cutSelectedNotes(); @@ -162,14 +172,6 @@ signals: private: - enum editModes - { - ModeDraw, - ModeErase, - ModeSelect, - ModeEditDetuning, - }; - enum actions { ActionNone, diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 6cc05f644..e864bfd5d 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -3459,40 +3459,14 @@ void PianoRoll::verScrolled( int _new_pos ) -void PianoRoll::drawButtonToggled() +void PianoRoll::setEditMode(PianoRoll::editModes mode) { - m_editMode = ModeDraw; - update(); + m_editMode = mode; } -void PianoRoll::eraseButtonToggled() -{ - m_editMode = ModeErase; - update(); -} - - - - -void PianoRoll::selectButtonToggled() -{ - m_editMode = ModeSelect; - update(); -} - - - -void PianoRoll::detuneButtonToggled() -{ - m_editMode = ModeEditDetuning; - update(); -} - - - void PianoRoll::selectAll() { if( hasValidPattern() == false ) @@ -4047,10 +4021,10 @@ PianoRollWindow::PianoRollWindow() : "notes from one to another. You can also press " "'Shift+T' on your keyboard to activate this mode." ) ); - connect(m_drawAction, SIGNAL(triggered()), m_editor, SLOT(drawButtonToggled())); - connect(m_eraseAction, SIGNAL(triggered()), m_editor, SLOT(eraseButtonToggled())); - connect(m_selectAction, SIGNAL(triggered()), m_editor, SLOT(selectButtonToggled())); - connect(m_detuneAction, SIGNAL(triggered()), m_editor, SLOT(detuneButtonToggled())); + connect(m_drawAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeDraw())); + connect(m_eraseAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeErase())); + connect(m_selectAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeSelect())); + connect(m_detuneAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeDetune())); // Copy + paste actions m_cutAction = new QAction(embed::getIconPixmap("edit_cut"), From 47cbc9e7f92833ec223061789ed1a68969b1b15c Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 22:58:11 +0100 Subject: [PATCH 017/172] AutomationEditor + PianoRoll: Move Copy/Paste shortcuts --- src/gui/AutomationEditor.cpp | 50 ++++++++---------------------------- src/gui/PianoRoll.cpp | 40 +++-------------------------- 2 files changed, 14 insertions(+), 76 deletions(-) diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index b1d1d49f9..9838140ea 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -324,29 +324,6 @@ void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) _ke->accept(); break; - case Qt::Key_C: - if( _ke->modifiers() & Qt::ControlModifier ) - { - copySelectedValues(); - _ke->accept(); - } - break; - - case Qt::Key_X: - if( _ke->modifiers() & Qt::ControlModifier ) - { - cutSelectedValues(); - _ke->accept(); - } - break; - - case Qt::Key_V: - if( _ke->modifiers() & Qt::ControlModifier ) - { - pasteValues(); - _ke->accept(); - } - break; //TODO: m_selectButton and m_moveButton are broken. /*case Qt::Key_A: if( _ke->modifiers() & Qt::ControlModifier ) @@ -363,18 +340,6 @@ void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) _ke->accept(); break;*/ - case Qt::Key_Space: - if( Engine::getSong()->isPlaying() ) - { - stop(); - } - else - { - play(); - } - _ke->accept(); - break; - case Qt::Key_Home: m_timeLine->pos().setTicks( 0 ); m_timeLine->updatePosition(); @@ -2171,6 +2136,10 @@ AutomationEditorWindow::AutomationEditorWindow() : tr( "Click here and the values from the clipboard will be " "pasted at the first visible measure." ) ); + m_cutAction->setShortcut(Qt::CTRL | Qt::Key_X); + m_copyAction->setShortcut(Qt::CTRL | Qt::Key_C); + m_pasteAction->setShortcut(Qt::CTRL | Qt::Key_V); + connect(m_cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedValues())); connect(m_copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedValues())); connect(m_pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteValues())); @@ -2229,8 +2198,8 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addSeparator();; m_toolBar->addAction(m_drawAction); m_toolBar->addAction(m_eraseAction); - //m_toolBar->addAction(m_selectButton); - //m_toolBar->addAction(m_moveButton); +// m_toolBar->addAction(m_selectButton); +// m_toolBar->addAction(m_moveButton); m_toolBar->addSeparator(); m_toolBar->addAction(m_discreteAction); m_toolBar->addAction(m_linearAction); @@ -2239,9 +2208,10 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addWidget( new QLabel( tr("Tension: "), m_toolBar )); m_toolBar->addWidget( m_tensionKnob ); m_toolBar->addSeparator(); - m_toolBar->addAction( m_cutAction ); - m_toolBar->addAction( m_copyAction ); - m_toolBar->addAction( m_pasteAction ); +// Select is broken +// m_toolBar->addAction( m_cutAction ); +// m_toolBar->addAction( m_copyAction ); +// m_toolBar->addAction( m_pasteAction ); m_toolBar->addSeparator(); m_editor->m_timeLine->addToolButtons(m_toolBar); m_toolBar->addSeparator(); diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index e864bfd5d..d7838b5a9 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -1032,30 +1032,6 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) event->accept(); break; - case Qt::Key_C: - if( event->modifiers() & Qt::ControlModifier ) - { - event->accept(); - copySelectedNotes(); - } - break; - - case Qt::Key_X: - if( event->modifiers() & Qt::ControlModifier ) - { - event->accept(); - cutSelectedNotes(); - } - break; - - case Qt::Key_V: - if( event->modifiers() & Qt::ControlModifier ) - { - event->accept(); - pasteNotes(); - } - break; - case Qt::Key_A: if( event->modifiers() & Qt::ControlModifier ) { @@ -1070,18 +1046,6 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) event->accept(); break; - case Qt::Key_Space: - if( Engine::getSong()->isPlaying() ) - { - stop(); - } - else - { - play(); - } - event->accept(); - break; - case Qt::Key_Home: m_timeLine->pos().setTicks( 0 ); m_timeLine->updatePosition(); @@ -4048,6 +4012,10 @@ PianoRollWindow::PianoRollWindow() : tr( "Click here and the notes from the clipboard will be " "pasted at the first visible measure." ) ); + m_cutAction->setShortcut(Qt::CTRL | Qt::Key_X); + m_copyAction->setShortcut(Qt::CTRL | Qt::Key_C); + m_pasteAction->setShortcut(Qt::CTRL | Qt::Key_V); + connect(m_cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedNotes())); connect(m_copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedNotes())); connect(m_pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteNotes())); From 409e8f2700eddc8287ac47feb056c2923db32749 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 23:36:02 +0100 Subject: [PATCH 018/172] AutomationEditor style updates --- include/AutomationEditor.h | 72 +++++------ src/gui/AutomationEditor.cpp | 224 +++++++++++++++++------------------ 2 files changed, 148 insertions(+), 148 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 97ea48572..6b7b7ae29 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -51,27 +51,27 @@ class Timeline; class AutomationEditor : public QWidget, public JournallingObject { Q_OBJECT - Q_PROPERTY( QColor gridColor READ gridColor WRITE setGridColor ) - Q_PROPERTY( QColor vertexColor READ vertexColor WRITE setVertexColor ) - Q_PROPERTY( QBrush scaleColor READ scaleColor WRITE setScaleColor ) - Q_PROPERTY( QBrush graphColor READ graphColor WRITE setGraphColor ) + Q_PROPERTY(QColor gridColor READ gridColor WRITE setGridColor) + Q_PROPERTY(QColor vertexColor READ vertexColor WRITE setVertexColor) + Q_PROPERTY(QBrush scaleColor READ scaleColor WRITE setScaleColor) + Q_PROPERTY(QBrush graphColor READ graphColor WRITE setGraphColor) public: - void setCurrentPattern( AutomationPattern * _new_pattern ); + void setCurrentPattern(AutomationPattern * new_pattern); inline const AutomationPattern * currentPattern() const { - return( m_pattern ); + return m_pattern; } inline bool validPattern() const { - return( m_pattern != NULL ); + return m_pattern != nullptr; } int quantization() const; - virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); - virtual void loadSettings( const QDomElement & _this ); + virtual void saveSettings(QDomDocument & doc, QDomElement & parent); + virtual void loadSettings(const QDomElement & parent); QString nodeName() const { return "automationeditor"; @@ -82,12 +82,12 @@ public: QBrush graphColor() const; QColor vertexColor() const; QBrush scaleColor() const; - void setGridColor( const QColor & c ); - void setGraphColor( const QBrush & c ); - void setVertexColor( const QColor & c ); - void setScaleColor( const QBrush & c ); + void setGridColor(const QColor& c); + void setGraphColor(const QBrush& c); + void setVertexColor(const QColor& c); + void setScaleColor(const QBrush& c); - enum editModes + enum EditModes { DRAW, ERASE, @@ -103,23 +103,23 @@ public slots: protected: typedef AutomationPattern::timeMap timeMap; - virtual void keyPressEvent( QKeyEvent * _ke ); - virtual void leaveEvent( QEvent * _e ); - virtual void mousePressEvent( QMouseEvent * _me ); - virtual void mouseReleaseEvent( QMouseEvent * _me ); - virtual void mouseMoveEvent( QMouseEvent * _me ); - virtual void paintEvent( QPaintEvent * _pe ); - virtual void resizeEvent( QResizeEvent * _re ); - virtual void wheelEvent( QWheelEvent * _we ); + virtual void keyPressEvent(QKeyEvent * ke); + virtual void leaveEvent(QEvent * e); + virtual void mousePressEvent(QMouseEvent * mouseEvent); + virtual void mouseReleaseEvent(QMouseEvent * mouseEvent); + virtual void mouseMoveEvent(QMouseEvent * mouseEvent); + virtual void paintEvent(QPaintEvent * pe); + virtual void resizeEvent(QResizeEvent * re); + virtual void wheelEvent(QWheelEvent * we); - float getLevel( int _y ); - int xCoordOfTick( int _tick ); - int yCoordOfLevel( float _level ); - inline void drawLevelTick( QPainter & _p, int _tick, - float _value, bool _is_selected ); + float getLevel( int y ); + int xCoordOfTick( int tick ); + int yCoordOfLevel( float level ); + inline void drawLevelTick( QPainter & p, int tick, + float value, bool is_selected ); void removeSelection(); void selectAll(); - void getSelectedValues( timeMap & _selected_values ); + void getSelectedValues(timeMap & selected_values ); void drawLine( int x0, float y0, int x1, float y1 ); @@ -127,10 +127,10 @@ protected slots: void play(); void stop(); - void horScrolled( int _new_pos ); - void verScrolled( int _new_pos ); + void horScrolled( int new_pos ); + void verScrolled( int new_pos ); - void setEditMode(AutomationEditor::editModes mode); + void setEditMode(AutomationEditor::EditModes mode); void setEditMode(int mode); void setProgressionType(AutomationPattern::ProgressionTypes type); @@ -144,7 +144,7 @@ protected slots: void pasteValues(); void deleteSelectedValues(); - void updatePosition( const MidiTime & _t ); + void updatePosition( const MidiTime & t ); void zoomingXChanged(); void zoomingYChanged(); @@ -152,7 +152,7 @@ protected slots: private: - enum actions + enum Actions { NONE, MOVE_VALUE, @@ -201,7 +201,7 @@ private: MidiTime m_currentPosition; - actions m_action; + Actions m_action; tick_t m_selectStartTick; tick_t m_selectedTick; @@ -223,13 +223,13 @@ private: timeMap m_selValuesForMove; - editModes m_editMode; + EditModes m_editMode; Timeline * m_timeLine; bool m_scrollBack; - void drawCross( QPainter & _p ); + void drawCross(QPainter & p ); void drawAutomationPoint( QPainter & p, timeMap::iterator it ); bool inBBEditor(); diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 9838140ea..0599a9119 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -187,10 +187,10 @@ AutomationEditor::~AutomationEditor() -void AutomationEditor::setCurrentPattern( AutomationPattern * _new_pattern ) +void AutomationEditor::setCurrentPattern(AutomationPattern * new_pattern ) { m_patternMutex.lock(); - m_pattern = _new_pattern; + m_pattern = new_pattern; m_patternMutex.unlock(); emit currentPatternChanged(); @@ -199,17 +199,17 @@ void AutomationEditor::setCurrentPattern( AutomationPattern * _new_pattern ) -void AutomationEditor::saveSettings( QDomDocument & _doc, QDomElement & _this ) +void AutomationEditor::saveSettings(QDomDocument & doc, QDomElement & parent ) { - MainWindow::saveWidgetState( this, _this ); + MainWindow::saveWidgetState( this, parent ); } -void AutomationEditor::loadSettings( const QDomElement & _this ) +void AutomationEditor::loadSettings( const QDomElement & parent ) { - MainWindow::restoreWidgetState( this, _this ); + MainWindow::restoreWidgetState( this, parent ); } @@ -293,20 +293,20 @@ void AutomationEditor::removeSelection() -void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) +void AutomationEditor::keyPressEvent(QKeyEvent * ke ) { - switch( _ke->key() ) + switch( ke->key() ) { case Qt::Key_Up: m_topBottomScroll->setValue( m_topBottomScroll->value() - 1 ); - _ke->accept(); + ke->accept(); break; case Qt::Key_Down: m_topBottomScroll->setValue( m_topBottomScroll->value() + 1 ); - _ke->accept(); + ke->accept(); break; case Qt::Key_Left: @@ -315,35 +315,35 @@ void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) m_timeLine->pos().setTicks( 0 ); } m_timeLine->updatePosition(); - _ke->accept(); + ke->accept(); break; case Qt::Key_Right: m_timeLine->pos() += 16; m_timeLine->updatePosition(); - _ke->accept(); + ke->accept(); break; //TODO: m_selectButton and m_moveButton are broken. /*case Qt::Key_A: - if( _ke->modifiers() & Qt::ControlModifier ) + if( ke->modifiers() & Qt::ControlModifier ) { m_selectButton->setChecked( true ); selectAll(); update(); - _ke->accept(); + ke->accept(); } break; case Qt::Key_Delete: deleteSelectedValues(); - _ke->accept(); + ke->accept(); break;*/ case Qt::Key_Home: m_timeLine->pos().setTicks( 0 ); m_timeLine->updatePosition(); - _ke->accept(); + ke->accept(); break; default: @@ -354,23 +354,23 @@ void AutomationEditor::keyPressEvent( QKeyEvent * _ke ) -void AutomationEditor::leaveEvent( QEvent * _e ) +void AutomationEditor::leaveEvent(QEvent * e ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } - QWidget::leaveEvent( _e ); + QWidget::leaveEvent( e ); } -void AutomationEditor::drawLine( int _x0, float _y0, int _x1, float _y1 ) +void AutomationEditor::drawLine( int x0, float y0, int x1, float y1 ) { - int deltax = qRound( qAbs( _x1 - _x0 ) ); - float deltay = qAbs( _y1 - _y0 ); - int x = _x0; - float y = _y0; + int deltax = qRound( qAbs( x1 - x0 ) ); + float deltay = qAbs( y1 - y0 ); + int x = x0; + float y = y0; int xstep; int ystep; @@ -383,7 +383,7 @@ void AutomationEditor::drawLine( int _x0, float _y0, int _x1, float _y1 ) float yscale = deltay / ( deltax ); - if( _x0 < _x1) + if( x0 < x1) { xstep = quantization(); } @@ -392,7 +392,7 @@ void AutomationEditor::drawLine( int _x0, float _y0, int _x1, float _y1 ) xstep = -( quantization() ); } - if( _y0 < _y1 ) + if( y0 < y1 ) { ystep = 1; } @@ -404,7 +404,7 @@ void AutomationEditor::drawLine( int _x0, float _y0, int _x1, float _y1 ) int i = 0; while( i < deltax ) { - y = _y0 + ( ystep * yscale * i ); + y = y0 + ( ystep * yscale * i ); x += xstep; i += 1; @@ -416,7 +416,7 @@ void AutomationEditor::drawLine( int _x0, float _y0, int _x1, float _y1 ) -void AutomationEditor::mousePressEvent( QMouseEvent * _me ) +void AutomationEditor::mousePressEvent( QMouseEvent* mouseEvent ) { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) @@ -424,11 +424,11 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) return; } - if( _me->y() > TOP_MARGIN ) + if( mouseEvent->y() > TOP_MARGIN ) { - float level = getLevel( _me->y() ); + float level = getLevel( mouseEvent->y() ); - int x = _me->x(); + int x = mouseEvent->x(); if( x > VALUES_WIDTH ) { @@ -466,11 +466,11 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) } // left button?? - if( _me->button() == Qt::LeftButton && + if( mouseEvent->button() == Qt::LeftButton && m_editMode == DRAW ) { // Connect the dots - if( _me->modifiers() & Qt::ShiftModifier ) + if( mouseEvent->modifiers() & Qt::ShiftModifier ) { drawLine( m_drawLastTick, m_drawLastLevel, @@ -509,7 +509,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) Engine::getSong()->setModified(); } - else if( ( _me->button() == Qt::RightButton && + else if( ( mouseEvent->button() == Qt::RightButton && m_editMode == DRAW ) || m_editMode == ERASE ) { @@ -521,7 +521,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) } m_action = NONE; } - else if( _me->button() == Qt::LeftButton && + else if( mouseEvent->button() == Qt::LeftButton && m_editMode == SELECT ) { // select an area of values @@ -532,14 +532,14 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) m_selectedLevels = 1; m_action = SELECT_VALUES; } - else if( _me->button() == Qt::RightButton && + else if( mouseEvent->button() == Qt::RightButton && m_editMode == SELECT ) { // when clicking right in select-move, we // switch to move-mode //m_moveButton->setChecked( true ); } - else if( _me->button() == Qt::LeftButton && + else if( mouseEvent->button() == Qt::LeftButton && m_editMode == MOVE ) { // move selection (including selected values) @@ -552,7 +552,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) Engine::getSong()->setModified(); } - else if( _me->button() == Qt::RightButton && + else if( mouseEvent->button() == Qt::RightButton && m_editMode == MOVE ) { // when clicking right in select-move, we @@ -568,7 +568,7 @@ void AutomationEditor::mousePressEvent( QMouseEvent * _me ) -void AutomationEditor::mouseReleaseEvent( QMouseEvent * _me ) +void AutomationEditor::mouseReleaseEvent(QMouseEvent * mouseEvent ) { if( m_editMode == DRAW ) { @@ -585,7 +585,7 @@ void AutomationEditor::mouseReleaseEvent( QMouseEvent * _me ) #include -void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) +void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent ) { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) @@ -594,12 +594,12 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) return; } - if( _me->y() > TOP_MARGIN ) + if( mouseEvent->y() > TOP_MARGIN ) { - float level = getLevel( _me->y() ); - int x = _me->x(); + float level = getLevel( mouseEvent->y() ); + int x = mouseEvent->x(); - if( _me->x() <= VALUES_WIDTH ) + if( mouseEvent->x() <= VALUES_WIDTH ) { update(); return; @@ -612,7 +612,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) int pos_ticks = x * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; - if( _me->buttons() & Qt::LeftButton && m_editMode == DRAW ) + if( mouseEvent->buttons() & Qt::LeftButton && m_editMode == DRAW ) { if( m_action == MOVE_VALUE ) { @@ -638,14 +638,14 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) Engine::getSong()->setModified(); } - else if( ( _me->buttons() & Qt::RightButton && + else if( ( mouseEvent->buttons() & Qt::RightButton && m_editMode == DRAW ) || - ( _me->buttons() & Qt::LeftButton && + ( mouseEvent->buttons() & Qt::LeftButton && m_editMode == ERASE ) ) { m_pattern->removeValue( MidiTime( pos_ticks ) ); } - else if( _me->buttons() & Qt::NoButton && m_editMode == DRAW ) + else if( mouseEvent->buttons() & Qt::NoButton && m_editMode == DRAW ) { // set move- or resize-cursor @@ -702,7 +702,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) } } } - else if( _me->buttons() & Qt::LeftButton && + else if( mouseEvent->buttons() & Qt::LeftButton && m_editMode == SELECT && m_action == SELECT_VALUES ) { @@ -713,7 +713,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) { x = 0; QCursor::setPos( mapToGlobal( QPoint( - VALUES_WIDTH, _me->y() ) ) ); + VALUES_WIDTH, mouseEvent->y() ) ) ); if( m_currentPosition >= 4 ) { m_leftRightScroll->setValue( @@ -728,7 +728,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) { x = width() - VALUES_WIDTH; QCursor::setPos( mapToGlobal( QPoint( width(), - _me->y() ) ) ); + mouseEvent->y() ) ) ); m_leftRightScroll->setValue( m_currentPosition + 4 ); } @@ -748,7 +748,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) --m_selectedLevels; } } - else if( _me->buttons() & Qt::LeftButton && + else if( mouseEvent->buttons() & Qt::LeftButton && m_editMode == MOVE && m_action == MOVE_SELECTION ) { @@ -863,17 +863,17 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) } else { - if( _me->buttons() & Qt::LeftButton && + if( mouseEvent->buttons() & Qt::LeftButton && m_editMode == SELECT && m_action == SELECT_VALUES ) { - int x = _me->x() - VALUES_WIDTH; + int x = mouseEvent->x() - VALUES_WIDTH; if( x < 0 && m_currentPosition > 0 ) { x = 0; QCursor::setPos( mapToGlobal( QPoint( VALUES_WIDTH, - _me->y() ) ) ); + mouseEvent->y() ) ) ); if( m_currentPosition >= 4 ) { m_leftRightScroll->setValue( @@ -888,7 +888,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) { x = width() - VALUES_WIDTH; QCursor::setPos( mapToGlobal( QPoint( width(), - _me->y() ) ) ); + mouseEvent->y() ) ) ); m_leftRightScroll->setValue( m_currentPosition + 4 ); } @@ -905,11 +905,11 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) m_selectedTick = -m_selectStartTick; } - float level = getLevel( _me->y() ); + float level = getLevel( mouseEvent->y() ); if( level <= m_bottomLevel ) { - QCursor::setPos( mapToGlobal( QPoint( _me->x(), + QCursor::setPos( mapToGlobal( QPoint( mouseEvent->x(), height() - SCROLLBAR_SIZE ) ) ); m_topBottomScroll->setValue( @@ -918,7 +918,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) } else if( level >= m_topLevel ) { - QCursor::setPos( mapToGlobal( QPoint( _me->x(), + QCursor::setPos( mapToGlobal( QPoint( mouseEvent->x(), TOP_MARGIN ) ) ); m_topBottomScroll->setValue( m_topBottomScroll->value() - 1 ); @@ -939,7 +939,7 @@ void AutomationEditor::mouseMoveEvent( QMouseEvent * _me ) -inline void AutomationEditor::drawCross( QPainter & _p ) +inline void AutomationEditor::drawCross( QPainter & p ) { QPoint mouse_pos = mapFromGlobal( QCursor::pos() ); float level = getLevel( mouse_pos.y() ); @@ -950,9 +950,9 @@ inline void AutomationEditor::drawCross( QPainter & _p ) / (float)( m_maxLevel - m_minLevel ) ) : grid_bottom - ( level - m_bottomLevel ) * m_y_delta; - _p.setPen( QColor( 0xFF, 0x33, 0x33 ) ); - _p.drawLine( VALUES_WIDTH, (int) cross_y, width(), (int) cross_y ); - _p.drawLine( mouse_pos.x(), TOP_MARGIN, mouse_pos.x(), + p.setPen( QColor( 0xFF, 0x33, 0x33 ) ); + p.drawLine( VALUES_WIDTH, (int) cross_y, width(), (int) cross_y ); + p.drawLine( mouse_pos.x(), TOP_MARGIN, mouse_pos.x(), height() - SCROLLBAR_SIZE ); QPoint tt_pos = QCursor::pos(); tt_pos.ry() -= 64; @@ -977,7 +977,7 @@ inline void AutomationEditor::drawAutomationPoint( QPainter & p, timeMap::iterat -void AutomationEditor::paintEvent( QPaintEvent * _pe ) +void AutomationEditor::paintEvent(QPaintEvent * pe ) { QMutexLocker m( &m_patternMutex ); @@ -1310,27 +1310,27 @@ void AutomationEditor::paintEvent( QPaintEvent * _pe ) -int AutomationEditor::xCoordOfTick( int _tick ) +int AutomationEditor::xCoordOfTick(int tick ) { - return VALUES_WIDTH + ( ( _tick - m_currentPosition ) + return VALUES_WIDTH + ( ( tick - m_currentPosition ) * m_ppt / MidiTime::ticksPerTact() ); } -int AutomationEditor::yCoordOfLevel( float _level ) +int AutomationEditor::yCoordOfLevel(float level ) { int grid_bottom = height() - SCROLLBAR_SIZE - 1; if( m_y_auto ) { return (int)( grid_bottom - ( grid_bottom - TOP_MARGIN ) - * ( _level - m_minLevel ) + * ( level - m_minLevel ) / ( m_maxLevel - m_minLevel ) ); } else { - return (int)( grid_bottom - ( _level - m_bottomLevel ) + return (int)( grid_bottom - ( level - m_bottomLevel ) * m_y_delta ); } } @@ -1338,19 +1338,19 @@ int AutomationEditor::yCoordOfLevel( float _level ) -void AutomationEditor::drawLevelTick( QPainter & _p, int _tick, float _level, - bool _is_selected ) +void AutomationEditor::drawLevelTick(QPainter & p, int tick, float value, + bool is_selected ) { int grid_bottom = height() - SCROLLBAR_SIZE - 1; - const int x = xCoordOfTick( _tick ); - int rect_width = xCoordOfTick( _tick+1 ) - x; + const int x = xCoordOfTick( tick ); + int rect_width = xCoordOfTick( tick+1 ) - x; // is the level in visible area? - if( ( _level >= m_bottomLevel && _level <= m_topLevel ) - || ( _level > m_topLevel && m_topLevel >= 0 ) - || ( _level < m_bottomLevel && m_bottomLevel <= 0 ) ) + if( ( value >= m_bottomLevel && value <= m_topLevel ) + || ( value > m_topLevel && m_topLevel >= 0 ) + || ( value < m_bottomLevel && m_bottomLevel <= 0 ) ) { - int y_start = yCoordOfLevel( _level ); + int y_start = yCoordOfLevel( value ); int rect_height; if( m_y_auto ) @@ -1364,14 +1364,14 @@ void AutomationEditor::drawLevelTick( QPainter & _p, int _tick, float _level, } else { - rect_height = (int)( _level * m_y_delta ); + rect_height = (int)( value * m_y_delta ); } - QBrush currentColor = _is_selected + QBrush currentColor = is_selected ? QBrush( QColor( 0x00, 0x40, 0xC0 ) ) : graphColor(); - _p.fillRect( x, y_start, rect_width, rect_height, currentColor ); + p.fillRect( x, y_start, rect_width, rect_height, currentColor ); } else @@ -1385,7 +1385,7 @@ void AutomationEditor::drawLevelTick( QPainter & _p, int _tick, float _level, // responsible for moving/resizing scrollbars after window-resizing -void AutomationEditor::resizeEvent( QResizeEvent * ) +void AutomationEditor::resizeEvent(QResizeEvent * re) { m_leftRightScroll->setGeometry( VALUES_WIDTH, height() - SCROLLBAR_SIZE, width() - VALUES_WIDTH, @@ -1426,31 +1426,31 @@ void AutomationEditor::resizeEvent( QResizeEvent * ) -void AutomationEditor::wheelEvent( QWheelEvent * _we ) +void AutomationEditor::wheelEvent(QWheelEvent * we ) { - _we->accept(); - if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::ShiftModifier ) + we->accept(); + if( we->modifiers() & Qt::ControlModifier && we->modifiers() & Qt::ShiftModifier ) { int y = m_zoomingYModel.value(); - if( _we->delta() > 0 ) + if( we->delta() > 0 ) { y++; } - if( _we->delta() < 0 ) + if( we->delta() < 0 ) { y--; } y = qBound( 0, y, m_zoomingYModel.size() - 1 ); m_zoomingYModel.setValue( y ); } - else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::AltModifier ) + else if( we->modifiers() & Qt::ControlModifier && we->modifiers() & Qt::AltModifier ) { int q = m_quantizeModel.value(); - if( _we->delta() > 0 ) + if( we->delta() > 0 ) { q--; } - if( _we->delta() < 0 ) + if( we->delta() < 0 ) { q++; } @@ -1458,44 +1458,44 @@ void AutomationEditor::wheelEvent( QWheelEvent * _we ) m_quantizeModel.setValue( q ); update(); } - else if( _we->modifiers() & Qt::ControlModifier ) + else if( we->modifiers() & Qt::ControlModifier ) { int x = m_zoomingXModel.value(); - if( _we->delta() > 0 ) + if( we->delta() > 0 ) { x++; } - if( _we->delta() < 0 ) + if( we->delta() < 0 ) { x--; } x = qBound( 0, x, m_zoomingXModel.size() - 1 ); m_zoomingXModel.setValue( x ); } - else if( _we->modifiers() & Qt::ShiftModifier - || _we->orientation() == Qt::Horizontal ) + else if( we->modifiers() & Qt::ShiftModifier + || we->orientation() == Qt::Horizontal ) { m_leftRightScroll->setValue( m_leftRightScroll->value() - - _we->delta() * 2 / 15 ); + we->delta() * 2 / 15 ); } else { m_topBottomScroll->setValue( m_topBottomScroll->value() - - _we->delta() / 30 ); + we->delta() / 30 ); } } -float AutomationEditor::getLevel( int _y ) +float AutomationEditor::getLevel(int y ) { int level_line_y = height() - SCROLLBAR_SIZE - 1; // pressed level float level = roundf( ( m_bottomLevel + ( m_y_auto ? - ( m_maxLevel - m_minLevel ) * ( level_line_y - _y ) + ( m_maxLevel - m_minLevel ) * ( level_line_y - y ) / (float)( level_line_y - ( TOP_MARGIN + 2 ) ) : - ( level_line_y - _y ) / (float)m_y_delta ) ) / m_step ) * m_step; + ( level_line_y - y ) / (float)m_y_delta ) ) / m_step ) * m_step; // some range-checking-stuff level = qBound( m_bottomLevel, level, m_topLevel ); @@ -1582,9 +1582,9 @@ void AutomationEditor::stop() -void AutomationEditor::horScrolled( int _new_pos ) +void AutomationEditor::horScrolled(int new_pos ) { - m_currentPosition = _new_pos; + m_currentPosition = new_pos; emit positionChanged( m_currentPosition ); update(); } @@ -1592,9 +1592,9 @@ void AutomationEditor::horScrolled( int _new_pos ) -void AutomationEditor::verScrolled( int _new_pos ) +void AutomationEditor::verScrolled(int new_pos ) { - m_scrollLevel = _new_pos; + m_scrollLevel = new_pos; updateTopBottomLevels(); update(); } @@ -1602,7 +1602,7 @@ void AutomationEditor::verScrolled( int _new_pos ) -void AutomationEditor::setEditMode(AutomationEditor::editModes mode) +void AutomationEditor::setEditMode(AutomationEditor::EditModes mode) { if (m_editMode == mode) return; @@ -1626,7 +1626,7 @@ void AutomationEditor::setEditMode(AutomationEditor::editModes mode) void AutomationEditor::setEditMode(int mode) { - setEditMode((AutomationEditor::editModes) mode); + setEditMode((AutomationEditor::EditModes) mode); } @@ -1711,7 +1711,7 @@ void AutomationEditor::selectAll() // returns vector with pointers to all selected values -void AutomationEditor::getSelectedValues( timeMap & _selected_values ) +void AutomationEditor::getSelectedValues( timeMap & selected_values ) { QMutexLocker m( &m_patternMutex ); if( !validPattern() ) @@ -1748,7 +1748,7 @@ void AutomationEditor::getSelectedValues( timeMap & _selected_values ) pos_ticks >= sel_pos_start && pos_ticks + len_ticks <= sel_pos_end ) { - _selected_values[it.key()] = level; + selected_values[it.key()] = level; } } } @@ -1865,7 +1865,7 @@ void AutomationEditor::deleteSelectedValues() -void AutomationEditor::updatePosition( const MidiTime & _t ) +void AutomationEditor::updatePosition(const MidiTime & t ) { if( ( Engine::getSong()->isPlaying() && Engine::getSong()->playMode() == @@ -1873,16 +1873,16 @@ void AutomationEditor::updatePosition( const MidiTime & _t ) m_scrollBack == true ) { const int w = width() - VALUES_WIDTH; - if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt ) + if( t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt ) { - m_leftRightScroll->setValue( _t.getTact() * + m_leftRightScroll->setValue( t.getTact() * MidiTime::ticksPerTact() ); } - else if( _t < m_currentPosition ) + else if( t < m_currentPosition ) { - MidiTime t = qMax( _t - w * MidiTime::ticksPerTact() * + MidiTime t_ = qMax( t - w * MidiTime::ticksPerTact() * MidiTime::ticksPerTact() / m_ppt, 0 ); - m_leftRightScroll->setValue( t.getTact() * + m_leftRightScroll->setValue( t_.getTact() * MidiTime::ticksPerTact() ); } m_scrollBack = false; From 51f59293cee071e7173d4a43c2d5f46cc997e334 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 23:38:38 +0100 Subject: [PATCH 019/172] Rename Timeline to TimeLineWidget --- include/AutomationEditor.h | 4 +-- include/Editor.h | 2 +- include/PianoRoll.h | 4 +-- include/Song.h | 4 +-- include/SongEditor.h | 4 +-- include/{Timeline.h => TimeLineWidget.h} | 8 ++--- src/core/Song.cpp | 14 ++++---- src/gui/AutomationEditor.cpp | 4 +-- src/gui/PianoRoll.cpp | 6 ++-- src/gui/SongEditor.cpp | 6 ++-- src/gui/{Timeline.cpp => TimeLineWidget.cpp} | 38 ++++++++++---------- 11 files changed, 47 insertions(+), 47 deletions(-) rename include/{Timeline.h => TimeLineWidget.h} (93%) rename src/gui/{Timeline.cpp => TimeLineWidget.cpp} (89%) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 6b7b7ae29..2c48ef800 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -44,7 +44,7 @@ class QScrollBar; class ComboBox; class NotePlayHandle; -class Timeline; +class TimeLineWidget; @@ -226,7 +226,7 @@ private: EditModes m_editMode; - Timeline * m_timeLine; + TimeLineWidget * m_timeLine; bool m_scrollBack; void drawCross(QPainter & p ); diff --git a/include/Editor.h b/include/Editor.h index ffd2f4ae1..02a9cbde5 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -28,7 +28,7 @@ #include #include -#include "Timeline.h" +#include "TimeLineWidget.h" #include "ToolButton.h" /// \brief Superclass for editors with a toolbar. diff --git a/include/PianoRoll.h b/include/PianoRoll.h index e190a0e6d..3d1b74ff3 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -48,7 +48,7 @@ class QSignalMapper; class ComboBox; class NotePlayHandle; class Pattern; -class Timeline; +class TimeLineWidget; class PianoRoll : public QWidget { @@ -317,7 +317,7 @@ private: bool m_mouseDownLeft; //true if left click is being held down bool m_mouseDownRight; //true if right click is being held down - Timeline * m_timeLine; + TimeLineWidget * m_timeLine; bool m_scrollBack; void copy_to_clipboard( const NoteVector & _notes ) const; diff --git a/include/Song.h b/include/Song.h index d0dac5a9c..7a140b3d4 100644 --- a/include/Song.h +++ b/include/Song.h @@ -36,7 +36,7 @@ class AutomationTrack; class Pattern; -class Timeline; +class TimeLineWidget; const bpm_t MinTempo = 10; @@ -83,7 +83,7 @@ public: { return m_currentFrame; } - Timeline * m_timeLine; + TimeLineWidget * m_timeLine; bool m_timeLineUpdate; private: diff --git a/include/SongEditor.h b/include/SongEditor.h index 44a0c5b2f..08b41f74b 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -40,7 +40,7 @@ class LcdSpinBox; class MeterDialog; class Song; class TextFloat; -class Timeline; +class TimeLineWidget; class positionLine : public QWidget { @@ -108,7 +108,7 @@ private: LcdSpinBox * m_tempoSpinBox; - Timeline * m_timeLine; + TimeLineWidget * m_timeLine; MeterDialog * m_timeSigDisplay; AutomatableSlider * m_masterVolumeSlider; diff --git a/include/Timeline.h b/include/TimeLineWidget.h similarity index 93% rename from include/Timeline.h rename to include/TimeLineWidget.h index 47f93d4b6..abf622aaf 100644 --- a/include/Timeline.h +++ b/include/TimeLineWidget.h @@ -1,5 +1,5 @@ /* - * Timeline.h - class timeLine, representing a time-line with position marker + * TimeLineWidget.h - class timeLine, representing a time-line with position marker * * Copyright (c) 2004-2008 Tobias Doerffel * @@ -37,7 +37,7 @@ class NStateButton; class TextFloat; -class Timeline : public QWidget, public JournallingObject +class TimeLineWidget : public QWidget, public JournallingObject { Q_OBJECT public: @@ -61,9 +61,9 @@ public: } ; - Timeline( int _xoff, int _yoff, float _ppt, Song::playPos & _pos, + TimeLineWidget( int _xoff, int _yoff, float _ppt, Song::playPos & _pos, const MidiTime & _begin, QWidget * _parent ); - virtual ~Timeline(); + virtual ~TimeLineWidget(); inline Song::playPos & pos() { diff --git a/src/core/Song.cpp b/src/core/Song.cpp index a8d3450f8..1f3f573f8 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -60,7 +60,7 @@ #include "SongEditor.h" #include "templates.h" #include "TextFloat.h" -#include "Timeline.h" +#include "TimeLineWidget.h" #include "PeakController.h" @@ -179,7 +179,7 @@ void Song::setTimeSignature() void Song::savePos() { - Timeline * tl = m_playPos[m_playMode].m_timeLine; + TimeLineWidget * tl = m_playPos[m_playMode].m_timeLine; if( tl != NULL ) { @@ -246,7 +246,7 @@ void Song::processNextBuffer() } // check for looping-mode and act if necessary - Timeline * tl = m_playPos[m_playMode].m_timeLine; + TimeLineWidget * tl = m_playPos[m_playMode].m_timeLine; bool check_loop = tl != NULL && m_exporting == false && tl->loopPointsEnabled(); if( check_loop ) @@ -565,7 +565,7 @@ void Song::stop() return; } - Timeline * tl = m_playPos[m_playMode].m_timeLine; + TimeLineWidget * tl = m_playPos[m_playMode].m_timeLine; m_playing = false; m_paused = false; m_recording = true; @@ -575,12 +575,12 @@ void Song::stop() switch( tl->behaviourAtStop() ) { - case Timeline::BackToZero: + case TimeLineWidget::BackToZero: m_playPos[m_playMode].setTicks( 0 ); m_elapsedMilliSeconds = 0; break; - case Timeline::BackToStart: + case TimeLineWidget::BackToStart: if( tl->savedPos() >= 0 ) { m_playPos[m_playMode].setTicks( tl->savedPos().getTicks() ); @@ -589,7 +589,7 @@ void Song::stop() } break; - case Timeline::KeepStopPosition: + case TimeLineWidget::KeepStopPosition: default: break; } diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 0599a9119..2cd915c30 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -55,7 +55,7 @@ #include "PixmapButton.h" #include "templates.h" #include "gui_templates.h" -#include "Timeline.h" +#include "TimeLineWidget.h" #include "ToolTip.h" #include "TextFloat.h" #include "ComboBox.h" @@ -121,7 +121,7 @@ AutomationEditor::AutomationEditor() : m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) ); // add time-line - m_timeLine = new Timeline( VALUES_WIDTH, 0, m_ppt, + m_timeLine = new TimeLineWidget( VALUES_WIDTH, 0, m_ppt, Engine::getSong()->getPlayPos( Song::Mode_PlayAutomationPattern ), m_currentPosition, this ); diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index d7838b5a9..c2bcca769 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -65,7 +65,7 @@ #include "SongEditor.h" #include "templates.h" #include "TextFloat.h" -#include "Timeline.h" +#include "TimeLineWidget.h" #include "TextFloat.h" @@ -290,7 +290,7 @@ PianoRoll::PianoRoll() : setAttribute( Qt::WA_OpaquePaintEvent, true ); // add time-line - m_timeLine = new Timeline( WHITE_KEY_WIDTH, 0, m_ppt, + m_timeLine = new TimeLineWidget( WHITE_KEY_WIDTH, 0, m_ppt, Engine::getSong()->getPlayPos( Song::Mode_PlayPattern ), m_currentPosition, this ); @@ -3745,7 +3745,7 @@ void PianoRoll::updatePosition( const MidiTime & _t ) if( ( Engine::getSong()->isPlaying() && Engine::getSong()->playMode() == Song::Mode_PlayPattern && - m_timeLine->autoScroll() == Timeline::AutoScrollEnabled ) || + m_timeLine->autoScroll() == TimeLineWidget::AutoScrollEnabled ) || m_scrollBack == true ) { autoScroll( _t ); diff --git a/src/gui/SongEditor.cpp b/src/gui/SongEditor.cpp index ebd6842f7..5d65e9ee3 100644 --- a/src/gui/SongEditor.cpp +++ b/src/gui/SongEditor.cpp @@ -45,7 +45,7 @@ #include "MainWindow.h" #include "MeterDialog.h" #include "TextFloat.h" -#include "Timeline.h" +#include "TimeLineWidget.h" #include "ToolTip.h" #include "VisualizationWidget.h" #include "TimeDisplayWidget.h" @@ -86,7 +86,7 @@ SongEditor::SongEditor( Song * _song ) : "compacttrackbuttons" ).toInt()==1 ? DEFAULT_SETTINGS_WIDGET_WIDTH_COMPACT + TRACK_OP_WIDTH_COMPACT : DEFAULT_SETTINGS_WIDGET_WIDTH + TRACK_OP_WIDTH; - m_timeLine = new Timeline( widgetTotal, 32, + m_timeLine = new TimeLineWidget( widgetTotal, 32, pixelsPerTact(), m_song->m_playPos[Song::Mode_PlaySong], m_currentPosition, this ); @@ -525,7 +525,7 @@ void SongEditor::updatePosition( const MidiTime & _t ) } if( ( m_song->isPlaying() && m_song->m_playMode == Song::Mode_PlaySong - && m_timeLine->autoScroll() == Timeline::AutoScrollEnabled) || + && m_timeLine->autoScroll() == TimeLineWidget::AutoScrollEnabled) || m_scrollBack == true ) { const int w = width() - widgetWidth diff --git a/src/gui/Timeline.cpp b/src/gui/TimeLineWidget.cpp similarity index 89% rename from src/gui/Timeline.cpp rename to src/gui/TimeLineWidget.cpp index c4c39d7bd..624d0df3e 100644 --- a/src/gui/Timeline.cpp +++ b/src/gui/TimeLineWidget.cpp @@ -1,5 +1,5 @@ /* - * Timeline.cpp - class timeLine, representing a time-line with position marker + * TimeLineWidget.cpp - class timeLine, representing a time-line with position marker * * Copyright (c) 2004-2014 Tobias Doerffel * @@ -32,7 +32,7 @@ #include -#include "Timeline.h" +#include "TimeLineWidget.h" #include "embed.h" #include "Engine.h" #include "templates.h" @@ -46,12 +46,12 @@ #endif -QPixmap * Timeline::s_timeLinePixmap = NULL; -QPixmap * Timeline::s_posMarkerPixmap = NULL; -QPixmap * Timeline::s_loopPointBeginPixmap = NULL; -QPixmap * Timeline::s_loopPointEndPixmap = NULL; +QPixmap * TimeLineWidget::s_timeLinePixmap = NULL; +QPixmap * TimeLineWidget::s_posMarkerPixmap = NULL; +QPixmap * TimeLineWidget::s_loopPointBeginPixmap = NULL; +QPixmap * TimeLineWidget::s_loopPointEndPixmap = NULL; -Timeline::Timeline( const int _xoff, const int _yoff, const float _ppt, +TimeLineWidget::TimeLineWidget( const int _xoff, const int _yoff, const float _ppt, Song::playPos & _pos, const MidiTime & _begin, QWidget * _parent ) : QWidget( _parent ), @@ -110,7 +110,7 @@ Timeline::Timeline( const int _xoff, const int _yoff, const float _ppt, -Timeline::~Timeline() +TimeLineWidget::~TimeLineWidget() { if( Engine::songEditor() ) { @@ -122,7 +122,7 @@ Timeline::~Timeline() -void Timeline::addToolButtons( QToolBar * _tool_bar ) +void TimeLineWidget::addToolButtons( QToolBar * _tool_bar ) { NStateButton * autoScroll = new NStateButton( _tool_bar ); autoScroll->setGeneralToolTip( tr( "Enable/disable auto-scrolling" ) ); @@ -161,7 +161,7 @@ void Timeline::addToolButtons( QToolBar * _tool_bar ) -void Timeline::saveSettings( QDomDocument & _doc, QDomElement & _this ) +void TimeLineWidget::saveSettings( QDomDocument & _doc, QDomElement & _this ) { _this.setAttribute( "lp0pos", (int) loopBegin() ); _this.setAttribute( "lp1pos", (int) loopEnd() ); @@ -171,7 +171,7 @@ void Timeline::saveSettings( QDomDocument & _doc, QDomElement & _this ) -void Timeline::loadSettings( const QDomElement & _this ) +void TimeLineWidget::loadSettings( const QDomElement & _this ) { m_loopPos[0] = _this.attribute( "lp0pos" ).toInt(); m_loopPos[1] = _this.attribute( "lp1pos" ).toInt(); @@ -184,7 +184,7 @@ void Timeline::loadSettings( const QDomElement & _this ) -void Timeline::updatePosition( const MidiTime & ) +void TimeLineWidget::updatePosition( const MidiTime & ) { const int new_x = markerX( m_pos ); @@ -200,7 +200,7 @@ void Timeline::updatePosition( const MidiTime & ) -void Timeline::toggleAutoScroll( int _n ) +void TimeLineWidget::toggleAutoScroll( int _n ) { m_autoScroll = static_cast( _n ); } @@ -208,7 +208,7 @@ void Timeline::toggleAutoScroll( int _n ) -void Timeline::toggleLoopPoints( int _n ) +void TimeLineWidget::toggleLoopPoints( int _n ) { m_loopPoints = static_cast( _n ); update(); @@ -217,7 +217,7 @@ void Timeline::toggleLoopPoints( int _n ) -void Timeline::toggleBehaviourAtStop( int _n ) +void TimeLineWidget::toggleBehaviourAtStop( int _n ) { m_behaviourAtStop = static_cast( _n ); } @@ -225,7 +225,7 @@ void Timeline::toggleBehaviourAtStop( int _n ) -void Timeline::paintEvent( QPaintEvent * ) +void TimeLineWidget::paintEvent( QPaintEvent * ) { QPainter p( this ); @@ -274,7 +274,7 @@ void Timeline::paintEvent( QPaintEvent * ) -void Timeline::mousePressEvent( QMouseEvent* event ) +void TimeLineWidget::mousePressEvent( QMouseEvent* event ) { if( event->x() < m_xOffset ) { @@ -332,7 +332,7 @@ void Timeline::mousePressEvent( QMouseEvent* event ) -void Timeline::mouseMoveEvent( QMouseEvent* event ) +void TimeLineWidget::mouseMoveEvent( QMouseEvent* event ) { const MidiTime t = m_begin + static_cast( qMax( event->x() - m_xOffset - m_moveXOff, 0 ) * MidiTime::ticksPerTact() / m_ppt ); @@ -382,7 +382,7 @@ void Timeline::mouseMoveEvent( QMouseEvent* event ) -void Timeline::mouseReleaseEvent( QMouseEvent* event ) +void TimeLineWidget::mouseReleaseEvent( QMouseEvent* event ) { delete m_hint; m_hint = NULL; From b25765ddb842506912320540f4adf91a903c7190 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 8 Dec 2014 23:43:31 +0100 Subject: [PATCH 020/172] Move Editors to src/gui/editors subdirectory --- include/Editor.h | 4 ++-- src/gui/{ => editors}/AutomationEditor.cpp | 0 src/gui/{ => editors}/BBEditor.cpp | 0 src/gui/{ => editors}/Editor.cpp | 0 src/gui/{ => editors}/PianoRoll.cpp | 0 src/gui/{ => editors}/SongEditor.cpp | 0 6 files changed, 2 insertions(+), 2 deletions(-) rename src/gui/{ => editors}/AutomationEditor.cpp (100%) rename src/gui/{ => editors}/BBEditor.cpp (100%) rename src/gui/{ => editors}/Editor.cpp (100%) rename src/gui/{ => editors}/PianoRoll.cpp (100%) rename src/gui/{ => editors}/SongEditor.cpp (100%) diff --git a/include/Editor.h b/include/Editor.h index 02a9cbde5..4da0fdbdb 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -33,8 +33,8 @@ /// \brief Superclass for editors with a toolbar. /// -/// Those editors include the Song Editor, the Automation Editor, -/// B&B Editor, Piano Roll. +/// Those editors include the Song Editor, the Automation Editor, B&B Editor, +/// and the Piano Roll. class Editor : public QMainWindow { Q_OBJECT diff --git a/src/gui/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp similarity index 100% rename from src/gui/AutomationEditor.cpp rename to src/gui/editors/AutomationEditor.cpp diff --git a/src/gui/BBEditor.cpp b/src/gui/editors/BBEditor.cpp similarity index 100% rename from src/gui/BBEditor.cpp rename to src/gui/editors/BBEditor.cpp diff --git a/src/gui/Editor.cpp b/src/gui/editors/Editor.cpp similarity index 100% rename from src/gui/Editor.cpp rename to src/gui/editors/Editor.cpp diff --git a/src/gui/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp similarity index 100% rename from src/gui/PianoRoll.cpp rename to src/gui/editors/PianoRoll.cpp diff --git a/src/gui/SongEditor.cpp b/src/gui/editors/SongEditor.cpp similarity index 100% rename from src/gui/SongEditor.cpp rename to src/gui/editors/SongEditor.cpp From 1d07a91a83dabb4ce8f6a7e2738b273618ae8c4e Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 11 Dec 2014 01:49:59 +0100 Subject: [PATCH 021/172] PianoRoll: Coding style updates --- include/PianoRoll.h | 72 +++--- src/gui/editors/PianoRoll.cpp | 416 +++++++++++++++++----------------- 2 files changed, 244 insertions(+), 244 deletions(-) diff --git a/include/PianoRoll.h b/include/PianoRoll.h index 3d1b74ff3..5ac1a2453 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -58,7 +58,7 @@ class PianoRoll : public QWidget Q_PROPERTY( QColor noteColor READ noteColor WRITE setNoteColor ) Q_PROPERTY( QColor barColor READ barColor WRITE setBarColor ) public: - enum editModes + enum EditModes { ModeDraw, ModeErase, @@ -97,33 +97,33 @@ public: // qproperty acces functions QColor gridColor() const; - void setGridColor( const QColor & _c ); + void setGridColor( const QColor & c ); QColor noteModeColor() const; - void setNoteModeColor( const QColor & _c ); + void setNoteModeColor( const QColor & c ); QColor noteColor() const; - void setNoteColor( const QColor & _c ); + void setNoteColor( const QColor & c ); QColor barColor() const; - void setBarColor( const QColor & _c ); + void setBarColor( const QColor & c ); protected: - virtual void keyPressEvent( QKeyEvent * _ke ); - virtual void keyReleaseEvent( QKeyEvent * _ke ); - virtual void leaveEvent( QEvent * _e ); - virtual void mousePressEvent( QMouseEvent * _me ); - virtual void mouseDoubleClickEvent( QMouseEvent * _me ); - virtual void mouseReleaseEvent( QMouseEvent * _me ); - virtual void mouseMoveEvent( QMouseEvent * _me ); - virtual void paintEvent( QPaintEvent * _pe ); - virtual void resizeEvent( QResizeEvent * _re ); - virtual void wheelEvent( QWheelEvent * _we ); + virtual void keyPressEvent( QKeyEvent * ke ); + virtual void keyReleaseEvent( QKeyEvent * ke ); + virtual void leaveEvent( QEvent * e ); + virtual void mousePressEvent( QMouseEvent * me ); + virtual void mouseDoubleClickEvent( QMouseEvent * me ); + virtual void mouseReleaseEvent( QMouseEvent * me ); + virtual void mouseMoveEvent( QMouseEvent * me ); + virtual void paintEvent( QPaintEvent * pe ); + virtual void resizeEvent( QResizeEvent * re ); + virtual void wheelEvent( QWheelEvent * we ); - int getKey( int _y ) const; - static inline void drawNoteRect( QPainter & _p, int _x, int _y, - int _width, Note * _n, const QColor & noteCol ); + int getKey( int y ) const; + static inline void drawNoteRect( QPainter & p, int x, int y, + int width, Note * n, const QColor & noteCol ); void removeSelection(); void selectAll(); - void getSelectedNotes( NoteVector & _selected_notes ); + void getSelectedNotes( NoteVector & selected_notes ); // for entering values with dblclick in the vol/pan bars void enterValue( NoteVector* nv ); @@ -134,13 +134,13 @@ protected slots: void recordAccompany(); void stop(); - void startRecordNote( const Note & _n ); - void finishRecordNote( const Note & _n ); + void startRecordNote( const Note & n ); + void finishRecordNote( const Note & n ); - void horScrolled( int _new_pos ); - void verScrolled( int _new_pos ); + void horScrolled( int new_pos ); + void verScrolled( int new_pos ); - void setEditMode(editModes mode); + void setEditMode(EditModes mode); void setEditModeDraw() {setEditMode(ModeDraw); } void setEditModeErase() {setEditMode(ModeErase); } void setEditModeSelect() {setEditMode(ModeSelect); } @@ -151,8 +151,8 @@ protected slots: void pasteNotes(); void deleteSelectedNotes(); - void updatePosition( const MidiTime & _t ); - void updatePositionAccompany( const MidiTime & _t ); + void updatePosition(const MidiTime & t ); + void updatePositionAccompany(const MidiTime & t ); void zoomingChanged(); void quantizeChanged(); @@ -172,7 +172,7 @@ signals: private: - enum actions + enum Actions { ActionNone, ActionMoveNote, @@ -182,14 +182,14 @@ private: ActionResizeNoteEditArea }; - enum noteEditMode + enum NoteEditMode { NoteEditVolume, NoteEditPanning, NoteEditCount // make sure this one is always last }; - enum semiToneMarkerAction + enum SemiToneMarkerAction { stmaUnmarkAll, stmaMarkCurrentSemiTone, @@ -214,7 +214,7 @@ private: PianoRoll( const PianoRoll & ); virtual ~PianoRoll(); - void autoScroll( const MidiTime & _t ); + void autoScroll(const MidiTime & t ); MidiTime newNoteLen() const; @@ -224,7 +224,7 @@ private: int selectionCount() const; void testPlayNote( Note * n ); void testPlayKey( int _key, int _vol, int _pan ); - void pauseTestNotes( bool _pause = true ); + void pauseTestNotes(bool pause = true ); inline int noteEditTop() const; inline int keyAreaBottom() const; @@ -270,8 +270,8 @@ private: QList m_recordingNotes; Note * m_currentNote; - actions m_action; - noteEditMode m_noteEditMode; + Actions m_action; + NoteEditMode m_noteEditMode; int m_selectStartTick; int m_selectedTick; @@ -311,8 +311,8 @@ private: int m_startKey; // first key when drawing int m_lastKey; - editModes m_editMode; - editModes m_ctrlMode; // mode they were in before they hit ctrl + EditModes m_editMode; + EditModes m_ctrlMode; // mode they were in before they hit ctrl bool m_mouseDownLeft; //true if left click is being held down bool m_mouseDownRight; //true if right click is being held down @@ -320,7 +320,7 @@ private: TimeLineWidget * m_timeLine; bool m_scrollBack; - void copy_to_clipboard( const NoteVector & _notes ) const; + void copy_to_clipboard(const NoteVector & notes ) const; void drawDetuningInfo( QPainter & _p, Note * _n, int _x, int _y ); bool mouseOverNote(); diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index c2bcca769..0ebc9624b 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -430,7 +430,7 @@ void PianoRoll::reset() void PianoRoll::changeNoteEditMode( int i ) { - m_noteEditMode = (noteEditMode) i; + m_noteEditMode = (NoteEditMode) i; repaint(); } @@ -440,7 +440,7 @@ void PianoRoll::markSemiTone( int i ) const int key = getKey( mapFromGlobal( m_semiToneMarkerMenu->pos() ).y() ); const InstrumentFunctionNoteStacking::Chord * chord = 0; - switch( static_cast( i ) ) + switch( static_cast( i ) ) { case stmaUnmarkAll: m_markedSemiTones.clear(); @@ -622,40 +622,40 @@ void PianoRoll::setBarColor( const QColor & c ) -inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y, - int _width, Note * _n, const QColor & noteCol ) +inline void PianoRoll::drawNoteRect(QPainter & p, int x, int y, + int width, Note * n, const QColor & noteCol ) { - ++_x; - ++_y; - _width -= 2; + ++x; + ++y; + width -= 2; - if( _width <= 0 ) + if( width <= 0 ) { - _width = 2; + width = 2; } - int volVal = qMin( 255, 25 + (int) ( ( (float)( _n->getVolume() - MinVolume ) ) / + int volVal = qMin( 255, 25 + (int) ( ( (float)( n->getVolume() - MinVolume ) ) / ( (float)( MaxVolume - MinVolume ) ) * 230.0f) ); float rightPercent = qMin( 1.0f, - ( (float)( _n->getPanning() - PanningLeft ) ) / + ( (float)( n->getPanning() - PanningLeft ) ) / ( (float)( PanningRight - PanningLeft ) ) * 2.0f ); float leftPercent = qMin( 1.0f, - ( (float)( PanningRight - _n->getPanning() ) ) / + ( (float)( PanningRight - n->getPanning() ) ) / ( (float)( PanningRight - PanningLeft ) ) * 2.0f ); QColor col = QColor( noteCol ); - if( _n->length() < 0 ) + if( n->length() < 0 ) { //step note col.setRgb( 0, 255, 0 ); - _p.fillRect( _x, _y, _width, KEY_LINE_HEIGHT - 2, col ); + p.fillRect( x, y, width, KEY_LINE_HEIGHT - 2, col ); } - else if( _n->selected() ) + else if( n->selected() ) { col.setRgb( 0x00, 0x40, 0xC0 ); - _p.fillRect( _x, _y, _width, KEY_LINE_HEIGHT - 2, col ); + p.fillRect( x, y, width, KEY_LINE_HEIGHT - 2, col ); } else { @@ -667,43 +667,43 @@ inline void PianoRoll::drawNoteRect( QPainter & _p, int _x, int _y, volVal * rightPercent ); col = QColor::fromHsv( col.hue(), col.saturation(), volVal ); - QLinearGradient gradient( _x, _y, _x+_width, - _y+KEY_LINE_HEIGHT ); + QLinearGradient gradient( x, y, x+width, + y+KEY_LINE_HEIGHT ); gradient.setColorAt( 0, lcol ); gradient.setColorAt( 1, rcol ); - _p.setBrush( gradient ); - _p.setPen( Qt::NoPen ); - _p.drawRect( _x, _y, _width, KEY_LINE_HEIGHT-1 ); + p.setBrush( gradient ); + p.setPen( Qt::NoPen ); + p.drawRect( x, y, width, KEY_LINE_HEIGHT-1 ); } // hilighting lines around the note - _p.setPen( Qt::SolidLine ); - _p.setBrush( Qt::NoBrush ); + p.setPen( Qt::SolidLine ); + p.setBrush( Qt::NoBrush ); col = QColor( noteCol ); - _p.setPen( QColor::fromHsv( col.hue(), col.saturation(), + p.setPen( QColor::fromHsv( col.hue(), col.saturation(), qMin( 255, volVal*1.7f ) ) ); - _p.drawLine( _x, _y, _x + _width, _y ); - _p.drawLine( _x, _y, _x, _y + KEY_LINE_HEIGHT - 2 ); + p.drawLine( x, y, x + width, y ); + p.drawLine( x, y, x, y + KEY_LINE_HEIGHT - 2 ); col = QColor( noteCol ); - _p.setPen( QColor::fromHsv( col.hue(), col.saturation(), volVal/1.7 ) ); - _p.drawLine( _x + _width, _y, _x + _width, _y + KEY_LINE_HEIGHT - 2 ); - _p.drawLine( _x, _y + KEY_LINE_HEIGHT - 2, _x + _width, - _y + KEY_LINE_HEIGHT - 2 ); + p.setPen( QColor::fromHsv( col.hue(), col.saturation(), volVal/1.7 ) ); + p.drawLine( x + width, y, x + width, y + KEY_LINE_HEIGHT - 2 ); + p.drawLine( x, y + KEY_LINE_HEIGHT - 2, x + width, + y + KEY_LINE_HEIGHT - 2 ); // that little tab thing on the end hinting at the user // to resize the note - _p.setPen( noteCol.lighter( 200 ) ); - if( _width > 2 ) + p.setPen( noteCol.lighter( 200 ) ); + if( width > 2 ) { - _p.drawLine( _x + _width - 3, _y + 2, _x + _width - 3, - _y + KEY_LINE_HEIGHT - 4 ); + p.drawLine( x + width - 3, y + 2, x + width - 3, + y + KEY_LINE_HEIGHT - 4 ); } - _p.drawLine( _x + _width - 1, _y + 2, _x + _width - 1, - _y + KEY_LINE_HEIGHT - 4 ); - _p.drawLine( _x + _width - 2, _y + 2, _x + _width - 2, - _y + KEY_LINE_HEIGHT - 4 ); + p.drawLine( x + width - 1, y + 2, x + width - 1, + y + KEY_LINE_HEIGHT - 4 ); + p.drawLine( x + width - 2, y + 2, x + width - 2, + y + KEY_LINE_HEIGHT - 4 ); } @@ -885,29 +885,29 @@ int PianoRoll::selectionCount() const // how many notes are selected? -void PianoRoll::keyPressEvent( QKeyEvent* event ) +void PianoRoll::keyPressEvent(QKeyEvent* ke ) { - if( hasValidPattern() && event->modifiers() == Qt::NoModifier ) + if( hasValidPattern() && ke->modifiers() == Qt::NoModifier ) { - const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave; + const int key_num = PianoView::getKeyFromKeyEvent( ke ) + ( DefaultOctave - 1 ) * KeysPerOctave; - if( event->isAutoRepeat() == false && key_num > -1 ) + if( ke->isAutoRepeat() == false && key_num > -1 ) { m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( key_num ); - event->accept(); + ke->accept(); } } - switch( event->key() ) + switch( ke->key() ) { case Qt::Key_Up: - if( ( event->modifiers() & Qt::ControlModifier ) && m_action == ActionNone ) + if( ( ke->modifiers() & Qt::ControlModifier ) && m_action == ActionNone ) { // shift selection up an octave // if nothing selected, shift _everything_ shiftSemiTone( +12 ); } - else if((event->modifiers() & Qt::ShiftModifier) && m_action == ActionNone) + else if((ke->modifiers() & Qt::ShiftModifier) && m_action == ActionNone) { // Move selected notes up by one semitone shiftSemiTone( 1 ); @@ -925,21 +925,21 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, - event->modifiers() & Qt::AltModifier, - event->modifiers() & Qt::ShiftModifier ); + ke->modifiers() & Qt::AltModifier, + ke->modifiers() & Qt::ShiftModifier ); } } - event->accept(); + ke->accept(); break; case Qt::Key_Down: - if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone ) + if( ke->modifiers() & Qt::ControlModifier && m_action == ActionNone ) { // shift selection down an octave // if nothing selected, shift _everything_ shiftSemiTone( -12 ); } - else if((event->modifiers() & Qt::ShiftModifier) && m_action == ActionNone) + else if((ke->modifiers() & Qt::ShiftModifier) && m_action == ActionNone) { // Move selected notes down by one semitone shiftSemiTone( -1 ); @@ -957,23 +957,23 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, - event->modifiers() & Qt::AltModifier, - event->modifiers() & Qt::ShiftModifier ); + ke->modifiers() & Qt::AltModifier, + ke->modifiers() & Qt::ShiftModifier ); } } - event->accept(); + ke->accept(); break; case Qt::Key_Left: - if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone ) + if( ke->modifiers() & Qt::ControlModifier && m_action == ActionNone ) { // Move selected notes by one bar to the left shiftPos( - MidiTime::ticksPerTact() ); } - else if( event->modifiers() & Qt::ShiftModifier && m_action == ActionNone) + else if( ke->modifiers() & Qt::ShiftModifier && m_action == ActionNone) { // move notes - bool quantized = ! ( event->modifiers() & Qt::AltModifier ); + bool quantized = ! ( ke->modifiers() & Qt::AltModifier ); int amt = quantized ? quantization() : 1; shiftPos( -amt ); } @@ -990,24 +990,24 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, - event->modifiers() & Qt::AltModifier, - event->modifiers() & Qt::ShiftModifier ); + ke->modifiers() & Qt::AltModifier, + ke->modifiers() & Qt::ShiftModifier ); } } - event->accept(); + ke->accept(); break; case Qt::Key_Right: - if( event->modifiers() & Qt::ControlModifier && m_action == ActionNone) + if( ke->modifiers() & Qt::ControlModifier && m_action == ActionNone) { // Move selected notes by one bar to the right shiftPos( MidiTime::ticksPerTact() ); } - else if( event->modifiers() & Qt::ShiftModifier && m_action == ActionNone) + else if( ke->modifiers() & Qt::ShiftModifier && m_action == ActionNone) { // move notes - bool quantized = !( event->modifiers() & Qt::AltModifier ); + bool quantized = !( ke->modifiers() & Qt::AltModifier ); int amt = quantized ? quantization() : 1; shiftPos( +amt ); } @@ -1024,18 +1024,18 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) m_action == ActionResizeNote ) { dragNotes( m_lastMouseX, m_lastMouseY, - event->modifiers() & Qt::AltModifier, - event->modifiers() & Qt::ShiftModifier ); + ke->modifiers() & Qt::AltModifier, + ke->modifiers() & Qt::ShiftModifier ); } } - event->accept(); + ke->accept(); break; case Qt::Key_A: - if( event->modifiers() & Qt::ControlModifier ) + if( ke->modifiers() & Qt::ControlModifier ) { - event->accept(); + ke->accept(); selectAll(); update(); } @@ -1043,13 +1043,13 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) case Qt::Key_Delete: deleteSelectedNotes(); - event->accept(); + ke->accept(); break; case Qt::Key_Home: m_timeLine->pos().setTicks( 0 ); m_timeLine->updatePosition(); - event->accept(); + ke->accept(); break; case Qt::Key_0: @@ -1063,20 +1063,20 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) case Qt::Key_8: case Qt::Key_9: { - int len = 1 + event->key() - Qt::Key_0; + int len = 1 + ke->key() - Qt::Key_0; if( len == 10 ) { len = 0; } - if( event->modifiers() & ( Qt::ControlModifier | Qt::KeypadModifier ) ) + if( ke->modifiers() & ( Qt::ControlModifier | Qt::KeypadModifier ) ) { m_noteLenModel.setValue( len ); - event->accept(); + ke->accept(); } - else if( event->modifiers() & Qt::AltModifier ) + else if( ke->modifiers() & Qt::AltModifier ) { m_quantizeModel.setValue( len ); - event->accept(); + ke->accept(); } break; } @@ -1085,7 +1085,7 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) m_ctrlMode = m_editMode; m_editMode = ModeSelect; QApplication::changeOverrideCursor( Qt::ArrowCursor ); - event->accept(); + ke->accept(); break; default: break; @@ -1097,23 +1097,23 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) -void PianoRoll::keyReleaseEvent( QKeyEvent* event ) +void PianoRoll::keyReleaseEvent(QKeyEvent* ke ) { - if( hasValidPattern() && event->modifiers() == Qt::NoModifier ) + if( hasValidPattern() && ke->modifiers() == Qt::NoModifier ) { - const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave; + const int key_num = PianoView::getKeyFromKeyEvent( ke ) + ( DefaultOctave - 1 ) * KeysPerOctave; - if( event->isAutoRepeat() == false && key_num > -1 ) + if( ke->isAutoRepeat() == false && key_num > -1 ) { m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( key_num ); - event->accept(); + ke->accept(); } } - switch( event->key() ) + switch( ke->key() ) { case Qt::Key_Control: - computeSelectedNotes( event->modifiers() & Qt::ShiftModifier); + computeSelectedNotes( ke->modifiers() & Qt::ShiftModifier); m_editMode = m_ctrlMode; update(); break; @@ -1121,7 +1121,7 @@ void PianoRoll::keyReleaseEvent( QKeyEvent* event ) // update after undo/redo case Qt::Key_Z: case Qt::Key_R: - if( hasValidPattern() && event->modifiers() == Qt::ControlModifier ) + if( hasValidPattern() && ke->modifiers() == Qt::ControlModifier ) { update(); } @@ -1134,14 +1134,14 @@ void PianoRoll::keyReleaseEvent( QKeyEvent* event ) -void PianoRoll::leaveEvent( QEvent * _e ) +void PianoRoll::leaveEvent(QEvent * e ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } - QWidget::leaveEvent( _e ); + QWidget::leaveEvent( e ); s_textFloat->hide(); } @@ -1197,9 +1197,9 @@ inline int PianoRoll::keyAreaBottom() const -void PianoRoll::mousePressEvent( QMouseEvent * _me ) +void PianoRoll::mousePressEvent(QMouseEvent * me ) { - m_startedWithShift = _me->modifiers() & Qt::ShiftModifier; + m_startedWithShift = me->modifiers() & Qt::ShiftModifier; if( hasValidPattern() == false ) { @@ -1213,7 +1213,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) } // if holding control, go to selection mode - if( _me->modifiers() & Qt::ControlModifier && m_editMode != ModeSelect ) + if( me->modifiers() & Qt::ControlModifier && m_editMode != ModeSelect ) { m_ctrlMode = m_editMode; m_editMode = ModeSelect; @@ -1222,13 +1222,13 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) } // keep track of the point where the user clicked down - if( _me->button() == Qt::LeftButton ) + if( me->button() == Qt::LeftButton ) { - m_moveStartX = _me->x(); - m_moveStartY = _me->y(); + m_moveStartX = me->x(); + m_moveStartY = me->y(); } - if( _me->y() > keyAreaBottom() && _me->y() < noteEditTop() ) + if( me->y() > keyAreaBottom() && me->y() < noteEditTop() ) { // resizing the note edit area m_action = ActionResizeNoteEditArea; @@ -1236,13 +1236,13 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) return; } - if( _me->y() > PR_TOP_MARGIN ) + if( me->y() > PR_TOP_MARGIN ) { - bool edit_note = ( _me->y() > noteEditTop() ); + bool edit_note = ( me->y() > noteEditTop() ); - int key_num = getKey( _me->y() ); + int key_num = getKey( me->y() ); - int x = _me->x(); + int x = me->x(); if( x > WHITE_KEY_WIDTH ) @@ -1298,11 +1298,11 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) { m_pattern->addJournalCheckPoint(); // scribble note edit changes - mouseMoveEvent( _me ); + mouseMoveEvent( me ); return; } // left button?? - else if( _me->button() == Qt::LeftButton && + else if( me->button() == Qt::LeftButton && m_editMode == ModeDraw ) { // whether this action creates new note(s) or not @@ -1341,7 +1341,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) { // if a chord is selected, create following notes in chord // or arpeggio mode - const bool arpeggio = _me->modifiers() & Qt::ShiftModifier; + const bool arpeggio = me->modifiers() & Qt::ShiftModifier; for( int i = 1; i < chord.size(); i++ ) { if( arpeggio ) @@ -1460,7 +1460,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) // if they're holding shift, copy all selected notes if( //*it != created_new_note && - ! is_new_note && _me->modifiers() & Qt::ShiftModifier ) + ! is_new_note && me->modifiers() & Qt::ShiftModifier ) { // vector to hold new notes until we're through the loop QVector newNotes; @@ -1498,7 +1498,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) Engine::getSong()->setModified(); } - else if( ( _me->buttons() == Qt::RightButton && + else if( ( me->buttons() == Qt::RightButton && m_editMode == ModeDraw ) || m_editMode == ModeErase ) { @@ -1519,7 +1519,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) Engine::getSong()->setModified(); } } - else if( _me->button() == Qt::LeftButton && + else if( me->button() == Qt::LeftButton && m_editMode == ModeSelect ) { // select an area of notes @@ -1533,18 +1533,18 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) // call mousemove to fix glitch where selection // appears in wrong spot on mousedown - mouseMoveEvent( _me ); + mouseMoveEvent( me ); } update(); } - else if( _me->y() < keyAreaBottom() ) + else if( me->y() < keyAreaBottom() ) { // clicked on keyboard on the left - if( _me->buttons() == Qt::RightButton ) + if( me->buttons() == Qt::RightButton ) { // right click, tone marker contextual menu - m_semiToneMarkerMenu->popup( mapToGlobal( QPoint( _me->x(), _me->y() ) ) ); + m_semiToneMarkerMenu->popup( mapToGlobal( QPoint( me->x(), me->y() ) ) ); } else { @@ -1559,20 +1559,20 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) } else { - if( _me->buttons() == Qt::LeftButton ) + if( me->buttons() == Qt::LeftButton ) { // clicked in the box below the keys to the left of note edit area - m_noteEditMode = (noteEditMode)(((int)m_noteEditMode)+1); + m_noteEditMode = (NoteEditMode)(((int)m_noteEditMode)+1); if( m_noteEditMode == NoteEditCount ) { - m_noteEditMode = (noteEditMode)0; + m_noteEditMode = (NoteEditMode)0; } repaint(); } - else if( _me->buttons() == Qt::RightButton ) + else if( me->buttons() == Qt::RightButton ) { // pop menu asking which one they want to edit - m_noteEditMenu->popup( mapToGlobal( QPoint( _me->x(), _me->y() ) ) ); + m_noteEditMenu->popup( mapToGlobal( QPoint( me->x(), me->y() ) ) ); } } } @@ -1581,7 +1581,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) -void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me ) +void PianoRoll::mouseDoubleClickEvent(QMouseEvent * me ) { if( hasValidPattern() == false ) { @@ -1589,12 +1589,12 @@ void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me ) } // if they clicked in the note edit area, enter value for the volume bar - if( _me->x() > noteEditLeft() && _me->x() < noteEditRight() - && _me->y() > noteEditTop() && _me->y() < noteEditBottom() ) + if( me->x() > noteEditLeft() && me->x() < noteEditRight() + && me->y() > noteEditTop() && me->y() < noteEditBottom() ) { // get values for going through notes int pixel_range = 4; - int x = _me->x() - WHITE_KEY_WIDTH; + int x = me->x() - WHITE_KEY_WIDTH; const int ticks_start = ( x-pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; const int ticks_end = ( x+pixel_range/2 ) * @@ -1675,7 +1675,7 @@ void PianoRoll::testPlayNote( Note * n ) -void PianoRoll::pauseTestNotes( bool _pause ) +void PianoRoll::pauseTestNotes( bool pause ) { const NoteVector & notes = m_pattern->notes(); NoteVector::ConstIterator it = notes.begin(); @@ -1683,7 +1683,7 @@ void PianoRoll::pauseTestNotes( bool _pause ) { if( ( *it )->isPlaying() ) { - if( _pause ) + if( pause ) { // stop note m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( ( *it )->key() ); @@ -1799,33 +1799,33 @@ void PianoRoll::computeSelectedNotes(bool shift) -void PianoRoll::mouseReleaseEvent( QMouseEvent * _me ) +void PianoRoll::mouseReleaseEvent(QMouseEvent * me ) { s_textFloat->hide(); bool mustRepaint = false; - if( _me->button() & Qt::LeftButton ) + if( me->button() & Qt::LeftButton ) { m_mouseDownLeft = false; mustRepaint = true; } - if( _me->button() & Qt::RightButton ) + if( me->button() & Qt::RightButton ) { m_mouseDownRight = false; mustRepaint = true; } - if( _me->button() & Qt::LeftButton && + if( me->button() & Qt::LeftButton && m_editMode == ModeSelect && m_action == ActionSelectNotes ) { // select the notes within the selection rectangle and // then destroy the selection rectangle - computeSelectedNotes( _me->modifiers() & Qt::ShiftModifier ); + computeSelectedNotes( me->modifiers() & Qt::ShiftModifier ); } - else if( _me->button() & Qt::LeftButton && + else if( me->button() & Qt::LeftButton && m_action == ActionMoveNote ) { // we moved one or more notes so they have to be @@ -1835,7 +1835,7 @@ void PianoRoll::mouseReleaseEvent( QMouseEvent * _me ) m_pattern->rearrangeAllNotes(); } - if( _me->button() & Qt::LeftButton && + if( me->button() & Qt::LeftButton && ( m_action == ActionMoveNote || m_action == ActionResizeNote ) ) { // if we only moved one note, deselect it so we can @@ -1886,7 +1886,7 @@ void PianoRoll::mouseReleaseEvent( QMouseEvent * _me ) -void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) +void PianoRoll::mouseMoveEvent( QMouseEvent * me ) { if( hasValidPattern() == false ) { @@ -1894,9 +1894,9 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) return; } - if( m_action == ActionNone && _me->buttons() == 0 ) + if( m_action == ActionNone && me->buttons() == 0 ) { - if( _me->y() > keyAreaBottom() && _me->y() < noteEditTop() ) + if( me->y() > keyAreaBottom() && me->y() < noteEditTop() ) { QApplication::setOverrideCursor( QCursor( Qt::SizeVerCursor ) ); @@ -1907,7 +1907,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) { // change m_notesEditHeight and then repaint m_notesEditHeight = tLimit( - m_oldNotesEditHeight - ( _me->y() - m_moveStartY ), + m_oldNotesEditHeight - ( me->y() - m_moveStartY ), NOTE_EDIT_MIN_HEIGHT, height() - PR_TOP_MARGIN - NOTE_EDIT_RESIZE_BAR - PR_BOTTOM_MARGIN - KEY_AREA_MIN_HEIGHT ); @@ -1915,19 +1915,19 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) return; } - if( _me->y() > PR_TOP_MARGIN || m_action != ActionNone ) + if( me->y() > PR_TOP_MARGIN || m_action != ActionNone ) { - bool edit_note = ( _me->y() > noteEditTop() ) + bool edit_note = ( me->y() > noteEditTop() ) && m_action != ActionSelectNotes; - int key_num = getKey( _me->y() ); - int x = _me->x(); + int key_num = getKey( me->y() ); + int x = me->x(); // see if they clicked on the keyboard on the left if( x < WHITE_KEY_WIDTH && m_action == ActionNone && ! edit_note && key_num != m_lastKey - && _me->buttons() & Qt::LeftButton ) + && me->buttons() & Qt::LeftButton ) { // clicked on a key, play the note testPlayKey( key_num, ( (float) x ) / ( (float) WHITE_KEY_WIDTH ) * MidiDefaultVelocity, 0 ); @@ -1937,7 +1937,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) x -= WHITE_KEY_WIDTH; - if( _me->buttons() & Qt::LeftButton + if( me->buttons() & Qt::LeftButton && m_editMode == ModeDraw && (m_action == ActionMoveNote || m_action == ActionResizeNote ) ) { @@ -1945,26 +1945,26 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) bool replay_note = key_num != m_lastKey && m_action == ActionMoveNote; - if( replay_note || ( m_action == ActionMoveNote && ( _me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) ) + if( replay_note || ( m_action == ActionMoveNote && ( me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) ) { pauseTestNotes(); } dragNotes( - _me->x(), - _me->y(), - _me->modifiers() & Qt::AltModifier, - _me->modifiers() & Qt::ShiftModifier + me->x(), + me->y(), + me->modifiers() & Qt::AltModifier, + me->modifiers() & Qt::ShiftModifier ); - if( replay_note && m_action == ActionMoveNote && ! ( ( _me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) ) + if( replay_note && m_action == ActionMoveNote && ! ( ( me->modifiers() & Qt::ShiftModifier ) && ! m_startedWithShift ) ) { pauseTestNotes( false ); } } else if( ( edit_note == true || m_action == ActionChangeNoteProperty ) && - ( _me->buttons() & Qt::LeftButton || _me->buttons() & Qt::MiddleButton - || ( _me->buttons() & Qt::RightButton && _me->modifiers() & Qt::ShiftModifier ) ) ) + ( me->buttons() & Qt::LeftButton || me->buttons() & Qt::MiddleButton + || ( me->buttons() & Qt::RightButton && me->modifiers() & Qt::ShiftModifier ) ) ) { // editing note properties @@ -1987,15 +1987,15 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) volume_t vol; panning_t pan; - if( _me->buttons() & Qt::LeftButton ) + if( me->buttons() & Qt::LeftButton ) { vol = tLimit( MinVolume + - ( ( (float)noteEditBottom() ) - ( (float)_me->y() ) ) / + ( ( (float)noteEditBottom() ) - ( (float)me->y() ) ) / ( (float)( noteEditBottom() - noteEditTop() ) ) * ( MaxVolume - MinVolume ), MinVolume, MaxVolume ); pan = tLimit( PanningLeft + - ( (float)( noteEditBottom() - _me->y() ) ) / + ( (float)( noteEditBottom() - me->y() ) ) / ( (float)( noteEditBottom() - noteEditTop() ) ) * ( (float)( PanningRight - PanningLeft ) ), PanningLeft, PanningRight); @@ -2081,7 +2081,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) // set textfloat visible if we're on a note if( on_note ) { - s_textFloat->moveGlobal( this, QPoint( _me->x() + 4, _me->y() + 16 ) ); + s_textFloat->moveGlobal( this, QPoint( me->x() + 4, me->y() + 16 ) ); s_textFloat->show(); } else @@ -2094,7 +2094,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) } } - else if( _me->buttons() == Qt::NoButton && m_editMode == ModeDraw ) + else if( me->buttons() == Qt::NoButton && m_editMode == ModeDraw ) { // set move- or resize-cursor @@ -2190,7 +2190,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) } } } - else if( _me->buttons() & Qt::LeftButton && + else if( me->buttons() & Qt::LeftButton && m_editMode == ModeSelect && m_action == ActionSelectNotes ) { @@ -2213,7 +2213,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) --m_selectedKeys; } } - else if( m_editMode == ModeDraw && _me->buttons() & Qt::RightButton ) + else if( m_editMode == ModeDraw && me->buttons() & Qt::RightButton ) { // holding down right-click to delete notes @@ -2277,18 +2277,18 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) } else { - if( _me->buttons() & Qt::LeftButton && + if( me->buttons() & Qt::LeftButton && m_editMode == ModeSelect && m_action == ActionSelectNotes ) { - int x = _me->x() - WHITE_KEY_WIDTH; + int x = me->x() - WHITE_KEY_WIDTH; if( x < 0 && m_currentPosition > 0 ) { x = 0; QCursor::setPos( mapToGlobal( QPoint( WHITE_KEY_WIDTH, - _me->y() ) ) ); + me->y() ) ) ); if( m_currentPosition >= 4 ) { m_leftRightScroll->setValue( @@ -2303,7 +2303,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) { x = width() - WHITE_KEY_WIDTH; QCursor::setPos( mapToGlobal( QPoint( width(), - _me->y() ) ) ); + me->y() ) ) ); m_leftRightScroll->setValue( m_currentPosition + 4 ); } @@ -2322,7 +2322,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) } - int key_num = getKey( _me->y() ); + int key_num = getKey( me->y() ); int visible_keys = ( height() - PR_TOP_MARGIN - PR_BOTTOM_MARGIN - m_notesEditHeight ) / @@ -2331,7 +2331,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) if( key_num <= s_key ) { - QCursor::setPos( mapToGlobal( QPoint( _me->x(), + QCursor::setPos( mapToGlobal( QPoint( me->x(), keyAreaBottom() ) ) ); m_topBottomScroll->setValue( m_topBottomScroll->value() + 1 ); @@ -2339,7 +2339,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) } else if( key_num >= s_key + visible_keys ) { - QCursor::setPos( mapToGlobal( QPoint( _me->x(), + QCursor::setPos( mapToGlobal( QPoint( me->x(), PR_TOP_MARGIN ) ) ); m_topBottomScroll->setValue( m_topBottomScroll->value() - 1 ); @@ -2355,8 +2355,8 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) QApplication::restoreOverrideCursor(); } - m_lastMouseX = _me->x(); - m_lastMouseY = _me->y(); + m_lastMouseX = me->x(); + m_lastMouseY = me->y(); update(); } @@ -2554,7 +2554,7 @@ static void printNoteHeights(QPainter& p, int bottom, int width, int startKey) } } -void PianoRoll::paintEvent( QPaintEvent * _pe ) +void PianoRoll::paintEvent(QPaintEvent * pe ) { QColor horizCol = QColor( gridColor() ); QColor vertCol = QColor( gridColor() ); @@ -3065,7 +3065,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) // responsible for moving/resizing scrollbars after window-resizing -void PianoRoll::resizeEvent( QResizeEvent * ) +void PianoRoll::resizeEvent(QResizeEvent * re) { m_leftRightScroll->setGeometry( WHITE_KEY_WIDTH, height() - SCROLLBAR_SIZE, @@ -3098,16 +3098,16 @@ void PianoRoll::resizeEvent( QResizeEvent * ) -void PianoRoll::wheelEvent( QWheelEvent * _we ) +void PianoRoll::wheelEvent(QWheelEvent * we ) { - _we->accept(); + we->accept(); // handle wheel events for note edit area - for editing note vol/pan with mousewheel - if( _we->x() > noteEditLeft() && _we->x() < noteEditRight() - && _we->y() > noteEditTop() && _we->y() < noteEditBottom() ) + if( we->x() > noteEditLeft() && we->x() < noteEditRight() + && we->y() > noteEditTop() && we->y() < noteEditBottom() ) { // get values for going through notes int pixel_range = 8; - int x = _we->x() - WHITE_KEY_WIDTH; + int x = we->x() - WHITE_KEY_WIDTH; int ticks_start = ( x-pixel_range/2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; int ticks_end = ( x+pixel_range/2 ) * @@ -3131,7 +3131,7 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) } if( nv.size() > 0 ) { - const int step = _we->delta() > 0 ? 1.0 : -1.0; + const int step = we->delta() > 0 ? 1.0 : -1.0; if( m_noteEditMode == NoteEditVolume ) { foreach( Note * n, nv ) @@ -3164,7 +3164,7 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) } if( nv.size() == 1 ) { - s_textFloat->moveGlobal( this, QPoint( _we->x() + 4, _we->y() + 16 ) ); + s_textFloat->moveGlobal( this, QPoint( we->x() + 4, we->y() + 16 ) ); s_textFloat->setVisibilityTimeOut( 1000 ); } update(); @@ -3173,42 +3173,42 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) // not in note edit area, so handle scrolling/zooming and quantization change else - if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::AltModifier ) + if( we->modifiers() & Qt::ControlModifier && we->modifiers() & Qt::AltModifier ) { int q = m_quantizeModel.value(); - if( _we->delta() > 0 ) + if( we->delta() > 0 ) { q--; } - if( _we->delta() < 0 ) + if( we->delta() < 0 ) { q++; } q = qBound( 0, q, m_quantizeModel.size() - 1 ); m_quantizeModel.setValue( q ); } - else if( _we->modifiers() & Qt::ControlModifier && _we->modifiers() & Qt::ShiftModifier ) + else if( we->modifiers() & Qt::ControlModifier && we->modifiers() & Qt::ShiftModifier ) { int l = m_noteLenModel.value(); - if( _we->delta() > 0 ) + if( we->delta() > 0 ) { l--; } - if( _we->delta() < 0 ) + if( we->delta() < 0 ) { l++; } l = qBound( 0, l, m_noteLenModel.size() - 1 ); m_noteLenModel.setValue( l ); } - else if( _we->modifiers() & Qt::ControlModifier ) + else if( we->modifiers() & Qt::ControlModifier ) { int z = m_zoomingModel.value(); - if( _we->delta() > 0 ) + if( we->delta() > 0 ) { z++; } - if( _we->delta() < 0 ) + if( we->delta() < 0 ) { z--; } @@ -3216,27 +3216,27 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) // update combobox with zooming-factor m_zoomingModel.setValue( z ); } - else if( _we->modifiers() & Qt::ShiftModifier - || _we->orientation() == Qt::Horizontal ) + else if( we->modifiers() & Qt::ShiftModifier + || we->orientation() == Qt::Horizontal ) { m_leftRightScroll->setValue( m_leftRightScroll->value() - - _we->delta() * 2 / 15 ); + we->delta() * 2 / 15 ); } else { m_topBottomScroll->setValue( m_topBottomScroll->value() - - _we->delta() / 30 ); + we->delta() / 30 ); } } -int PianoRoll::getKey( int _y ) const +int PianoRoll::getKey(int y ) const { int key_line_y = keyAreaBottom() - 1; // pressed key on piano - int key_num = ( key_line_y - _y ) / KEY_LINE_HEIGHT; + int key_num = ( key_line_y - y ) / KEY_LINE_HEIGHT; key_num += m_startKey; // some range-checking-stuff @@ -3345,7 +3345,7 @@ void PianoRoll::stop() -void PianoRoll::startRecordNote( const Note & _n ) +void PianoRoll::startRecordNote(const Note & n ) { if( m_recording == true && hasValidPattern() == true && Engine::getSong()->isPlaying() && @@ -3361,7 +3361,7 @@ void PianoRoll::startRecordNote( const Note & _n ) } Note n( 1, Engine::getSong()->getPlayPos( Engine::getSong()->playMode() ) - sub, - _n.key(), _n.getVolume(), _n.getPanning() ); + n.key(), n.getVolume(), n.getPanning() ); if( n.pos() >= 0 ) { m_recordingNotes << n; @@ -3372,7 +3372,7 @@ void PianoRoll::startRecordNote( const Note & _n ) -void PianoRoll::finishRecordNote( const Note & _n ) +void PianoRoll::finishRecordNote(const Note & n ) { if( m_recording == true && hasValidPattern() == true && Engine::getSong()->isPlaying() && @@ -3384,9 +3384,9 @@ void PianoRoll::finishRecordNote( const Note & _n ) for( QList::Iterator it = m_recordingNotes.begin(); it != m_recordingNotes.end(); ++it ) { - if( it->key() == _n.key() ) + if( it->key() == n.key() ) { - Note n( _n.length(), it->pos(), + Note n( n.length(), it->pos(), it->key(), it->getVolume(), it->getPanning() ); n.quantizeLength( quantization() ); @@ -3402,9 +3402,9 @@ void PianoRoll::finishRecordNote( const Note & _n ) -void PianoRoll::horScrolled( int _new_pos ) +void PianoRoll::horScrolled(int new_pos ) { - m_currentPosition = _new_pos; + m_currentPosition = new_pos; emit positionChanged( m_currentPosition ); update(); } @@ -3412,10 +3412,10 @@ void PianoRoll::horScrolled( int _new_pos ) -void PianoRoll::verScrolled( int _new_pos ) +void PianoRoll::verScrolled( int new_pos ) { // revert value - m_startKey = m_totalKeysToScroll - _new_pos; + m_startKey = m_totalKeysToScroll - new_pos; update(); } @@ -3423,7 +3423,7 @@ void PianoRoll::verScrolled( int _new_pos ) -void PianoRoll::setEditMode(PianoRoll::editModes mode) +void PianoRoll::setEditMode(PianoRoll::EditModes mode) { m_editMode = mode; } @@ -3489,7 +3489,7 @@ void PianoRoll::selectAll() // returns vector with pointers to all selected notes -void PianoRoll::getSelectedNotes( NoteVector & _selected_notes ) +void PianoRoll::getSelectedNotes(NoteVector & selected_notes ) { if( hasValidPattern() == false ) { @@ -3503,7 +3503,7 @@ void PianoRoll::getSelectedNotes( NoteVector & _selected_notes ) { if( ( *it )->selected() ) { - _selected_notes.push_back( *it ); + selected_notes.push_back( *it ); } } } @@ -3554,14 +3554,14 @@ void PianoRoll::enterValue( NoteVector* nv ) } -void PianoRoll::copy_to_clipboard( const NoteVector & _notes ) const +void PianoRoll::copy_to_clipboard( const NoteVector & notes ) const { DataFile dataFile( DataFile::ClipboardData ); QDomElement note_list = dataFile.createElement( "note-list" ); dataFile.content().appendChild( note_list ); - MidiTime start_pos( _notes.front()->pos().getTact(), 0 ); - for( NoteVector::ConstIterator it = _notes.begin(); it != _notes.end(); + MidiTime start_pos( notes.front()->pos().getTact(), 0 ); + for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { Note clip_note( **it ); @@ -3719,19 +3719,19 @@ void PianoRoll::deleteSelectedNotes() -void PianoRoll::autoScroll( const MidiTime & _t ) +void PianoRoll::autoScroll( const MidiTime & t ) { const int w = width() - WHITE_KEY_WIDTH; - if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt ) + if( t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt ) { - m_leftRightScroll->setValue( _t.getTact() * + m_leftRightScroll->setValue( t.getTact() * MidiTime::ticksPerTact() ); } - else if( _t < m_currentPosition ) + else if( t < m_currentPosition ) { - MidiTime t = qMax( _t - w * MidiTime::ticksPerTact() * + MidiTime t2 = qMax( t - w * MidiTime::ticksPerTact() * MidiTime::ticksPerTact() / m_ppt, 0 ); - m_leftRightScroll->setValue( t.getTact() * + m_leftRightScroll->setValue( t2.getTact() * MidiTime::ticksPerTact() ); } m_scrollBack = false; @@ -3740,7 +3740,7 @@ void PianoRoll::autoScroll( const MidiTime & _t ) -void PianoRoll::updatePosition( const MidiTime & _t ) +void PianoRoll::updatePosition( const MidiTime & t ) { if( ( Engine::getSong()->isPlaying() && Engine::getSong()->playMode() == @@ -3748,21 +3748,21 @@ void PianoRoll::updatePosition( const MidiTime & _t ) m_timeLine->autoScroll() == TimeLineWidget::AutoScrollEnabled ) || m_scrollBack == true ) { - autoScroll( _t ); + autoScroll( t ); } } -void PianoRoll::updatePositionAccompany( const MidiTime & _t ) +void PianoRoll::updatePositionAccompany( const MidiTime & t ) { Song * s = Engine::getSong(); if( m_recording && hasValidPattern() && s->playMode() != Song::Mode_PlayPattern ) { - MidiTime pos = _t; + MidiTime pos = t; if( s->playMode() != Song::Mode_PlayBB ) { pos -= m_pattern->startPosition(); From ebbec2f2700a993c59429c4323206e62682944ff Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 11 Dec 2014 02:39:04 +0100 Subject: [PATCH 022/172] Editor: Add edit mode support --- include/Editor.h | 18 +++++++++++ include/PianoRoll.h | 6 +--- src/gui/editors/AutomationEditor.cpp | 46 ++++------------------------ src/gui/editors/Editor.cpp | 40 ++++++++++++++++++++++-- src/gui/editors/PianoRoll.cpp | 26 +++++----------- src/gui/editors/SongEditor.cpp | 9 ++---- 6 files changed, 71 insertions(+), 74 deletions(-) diff --git a/include/Editor.h b/include/Editor.h index 4da0fdbdb..458fc34fe 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -25,12 +25,16 @@ #ifndef EDITOR_COMMON_H #define EDITOR_COMMON_H +#include #include #include #include "TimeLineWidget.h" #include "ToolButton.h" +// Forward declarations +class QActionGroup; + /// \brief Superclass for editors with a toolbar. /// /// Those editors include the Song Editor, the Automation Editor, B&B Editor, @@ -41,12 +45,24 @@ class Editor : public QMainWindow public: void setPauseIcon(bool displayPauseIcon=true); + int editMode() const; + void setEditMode(int mode); + +signals: + void editModeChanged(int); + +protected: + QAction* addEditMode(const QIcon &icon, const QString &text, const QString& whatsThis=QString()); + protected slots: virtual void play(); virtual void record(); virtual void recordAccompany(); virtual void stop(); +private slots: + void setEditModeByAction(QAction* action); + signals: protected: @@ -65,6 +81,8 @@ protected: QAction* m_recordAccompanyAction; QAction* m_stopAction; private: + quint8 m_editMode; + QActionGroup* m_editModeGroup; }; diff --git a/include/PianoRoll.h b/include/PianoRoll.h index 5ac1a2453..7a7a3f094 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -140,11 +140,7 @@ protected slots: void horScrolled( int new_pos ); void verScrolled( int new_pos ); - void setEditMode(EditModes mode); - void setEditModeDraw() {setEditMode(ModeDraw); } - void setEditModeErase() {setEditMode(ModeErase); } - void setEditModeSelect() {setEditMode(ModeSelect); } - void setEditModeDetune() {setEditMode(ModeEditDetuning); } + void setEditMode(int mode); void copySelectedNotes(); void cutSelectedNotes(); diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index 135425abc..7ccf6d286 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -2005,51 +2005,17 @@ AutomationEditorWindow::AutomationEditorWindow() : "current pattern." ) ); // Edit mode buttons - QActionGroup * tool_action_group = new QActionGroup(this); - - m_drawAction = new QAction(embed::getIconPixmap("edit_draw"), - tr("Draw mode (Shift+D)"), tool_action_group); - m_drawAction->setCheckable(true); + m_drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); m_drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); - m_eraseAction = new QAction(embed::getIconPixmap("edit_erase"), - tr("Erase mode (Shift+E)"), tool_action_group); - m_eraseAction->setCheckable(true); + m_eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); m_eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); m_drawAction->setChecked(true); - //TODO: m_selectButton and m_moveButton are broken. - /*m_selectButton = new ToolButton( embed::getIconPixmap( - "edit_select" ), - tr( "Select mode (Shift+S)" ), - this, SLOT( selectButtonToggled() ), - m_toolBar ); - m_selectButton->setCheckable( true ); - - m_moveButton = new ToolButton( embed::getIconPixmap( "edit_move" ), - tr( "Move selection mode (Shift+M)" ), - this, SLOT( moveButtonToggled() ), - m_toolBar ); - m_moveButton->setCheckable( true );*/ - - QSignalMapper* signalmapper = new QSignalMapper(this); - signalmapper->setMapping(m_drawAction, AutomationEditor::DRAW); - signalmapper->setMapping(m_eraseAction, AutomationEditor::ERASE); -// signalmapper->setMapping(m_selectButton, AutomationEditor::SELECT); -// signalmapper->setMapping(m_moveButton, AutomationEditor::MOVE); - - connect(m_drawAction, SIGNAL(triggered()), signalmapper, SLOT(map())); - connect(m_eraseAction, SIGNAL(triggered()), signalmapper, SLOT(map())); -// connect(m_selectButton, SIGNAL(triggered()), signalmapper, SLOT(map())); -// connect(m_moveButton, SIGNAL(triggered()), signalmapper, SLOT(map())); - - connect(signalmapper, SIGNAL(mapped(int)), m_editor, SLOT(setEditMode(int))); - -// tool_action_group->addAction( m_drawButton ); -// tool_action_group->addAction( m_eraseButton ); - //tool_button_group->addButton( m_selectButton ); - //tool_button_group->addButton( m_moveButton ); +// TODO: m_selectButton and m_moveButton are broken. +// m_selectButton = addEditMode(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); +// m_moveButton = addEditMode(embed::getIconPixmap("edit_move"), tr("Move selection mode (Shift+M)")); m_drawAction->setWhatsThis( tr( "Click here and draw-mode will be activated. In this " @@ -2073,7 +2039,7 @@ AutomationEditorWindow::AutomationEditorWindow() : "mode. You can also press 'Shift+M' on your keyboard " "to activate this mode." ) );*/ - + connect(this, SIGNAL(editModeChanged(int)), m_editor, SLOT(setEditMode(int))); // Progression type buttons QActionGroup* progression_type_group = new QActionGroup(this); diff --git a/src/gui/editors/Editor.cpp b/src/gui/editors/Editor.cpp index 778a303a9..48921d6bd 100644 --- a/src/gui/editors/Editor.cpp +++ b/src/gui/editors/Editor.cpp @@ -27,9 +27,9 @@ #include "MainWindow.h" #include "embed.h" -#include #include -#include +#include +#include void Editor::setPauseIcon(bool displayPauseIcon) @@ -41,6 +41,28 @@ void Editor::setPauseIcon(bool displayPauseIcon) m_playAction->setIcon(embed::getIconPixmap("play")); } +int Editor::editMode() const +{ + return m_editMode; +} + +void Editor::setEditMode(int mode) +{ + if (mode <= m_editModeGroup->actions().size()) + { + m_editMode = mode; + } + emit(editModeChanged(mode)); +} + +QAction* Editor::addEditMode(const QIcon& icon, const QString& text, const QString& whatsThis) +{ + QAction* editModeAction = new QAction(icon, text, m_editModeGroup); + editModeAction->setWhatsThis(whatsThis); + editModeAction->setCheckable(true); + return editModeAction; +} + void Editor::play() { } @@ -57,12 +79,21 @@ void Editor::stop() { } +void Editor::setEditModeByAction(QAction* action) +{ + int index = m_editModeGroup->actions().indexOf(action); + if (index != -1) + setEditMode(index); +} + Editor::Editor(bool record) : m_toolBar(new QToolBar(this)), m_playAction(nullptr), m_recordAction(nullptr), m_recordAccompanyAction(nullptr), - m_stopAction(nullptr) + m_stopAction(nullptr), + m_editMode(0), + m_editModeGroup(new QActionGroup(this)) { m_toolBar->setContextMenuPolicy(Qt::PreventContextMenu); m_toolBar->setMovable(false); @@ -98,6 +129,9 @@ Editor::Editor(bool record) : connect(m_recordAccompanyAction, SIGNAL(triggered()), this, SLOT(recordAccompany())); } connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stop())); + + // Connect edit mode + connect(m_editModeGroup, SIGNAL(triggered(QAction*)), this, SLOT(setEditModeByAction(QAction*))); } Editor::~Editor() diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 0ebc9624b..982d4e003 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -3423,9 +3423,9 @@ void PianoRoll::verScrolled( int new_pos ) -void PianoRoll::setEditMode(PianoRoll::EditModes mode) +void PianoRoll::setEditMode(int mode) { - m_editMode = mode; + m_editMode = (EditModes) mode; } @@ -3940,27 +3940,18 @@ PianoRollWindow::PianoRollWindow() : tr( "Click here to stop playback of current pattern." ) ); // init edit-buttons at the top - QActionGroup* tool_button_group = new QActionGroup(this); - m_drawAction = new QAction(embed::getIconPixmap("edit_draw"), - tr( "Draw mode (Shift+D)" ), tool_button_group); + m_drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); m_drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); - m_drawAction->setCheckable( true ); m_drawAction->setChecked( true ); - m_eraseAction = new QAction(embed::getIconPixmap("edit_erase"), - tr("Erase mode (Shift+E)"), tool_button_group); + m_eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); m_eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); - m_eraseAction->setCheckable( true ); - m_selectAction = new QAction( embed::getIconPixmap("edit_select"), - tr("Select mode (Shift+S)"), tool_button_group); + m_selectAction = addEditMode(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); m_selectAction->setShortcut(Qt::SHIFT | Qt::Key_S); - m_selectAction->setCheckable( true ); - m_detuneAction = new QAction(embed::getIconPixmap("automation"), - tr("Detune mode (Shift+T)"), tool_button_group); + m_detuneAction = addEditMode(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); m_detuneAction->setShortcut(Qt::SHIFT | Qt::Key_T); - m_detuneAction->setCheckable( true ); m_drawAction->setWhatsThis( tr( "Click here and draw mode will be activated. In this " @@ -3985,10 +3976,7 @@ PianoRollWindow::PianoRollWindow() : "notes from one to another. You can also press " "'Shift+T' on your keyboard to activate this mode." ) ); - connect(m_drawAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeDraw())); - connect(m_eraseAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeErase())); - connect(m_selectAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeSelect())); - connect(m_detuneAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeDetune())); + connect(this, SIGNAL(editModeChanged(int)), m_editor, SLOT(setEditMode(int))); // Copy + paste actions m_cutAction = new QAction(embed::getIconPixmap("edit_cut"), diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index 5d65e9ee3..4ff5153c0 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -631,15 +631,10 @@ SongEditorWindow::SongEditorWindow(Song* song) : connect(m_addSampleTrackAction, SIGNAL(triggered()), m_editor->m_song, SLOT(addSampleTrack())); connect(m_addAutomationTrackAction, SIGNAL(triggered()), m_editor->m_song, SLOT(addAutomationTrack())); - QActionGroup* tool_action_group = new QActionGroup(this); - m_drawModeAction = new QAction(embed::getIconPixmap("edit_draw"), - tr("Draw mode"), tool_action_group); - m_drawModeAction->setCheckable(true); + m_drawModeAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode")); m_drawModeAction->setChecked(true); - m_selectModeAction = new QAction(embed::getIconPixmap("edit_select"), - tr("Edit mode (select and move)"), tool_action_group); - m_selectModeAction->setCheckable(true); + m_selectModeAction = addEditMode(embed::getIconPixmap("edit_select"), tr("Edit mode (select and move)")); connect(m_drawModeAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeDraw())); connect(m_selectModeAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeSelect())); From 9b6612c396a211f08747dccaeeca0ff1d7fbbb34 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 11 Dec 2014 10:38:04 +0100 Subject: [PATCH 023/172] PianoRoll rename fix --- src/gui/editors/PianoRoll.cpp | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 982d4e003..2e4fbe547 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -3347,24 +3347,22 @@ void PianoRoll::stop() void PianoRoll::startRecordNote(const Note & n ) { - if( m_recording == true && hasValidPattern() == true && - Engine::getSong()->isPlaying() && - ( Engine::getSong()->playMode() == - desiredPlayModeForAccompany() || - Engine::getSong()->playMode() == - Song::Mode_PlayPattern ) ) + if(m_recording && hasValidPattern() && + Engine::getSong()->isPlaying() && + (Engine::getSong()->playMode() == desiredPlayModeForAccompany() || + Engine::getSong()->playMode() == Song::Mode_PlayPattern )) { MidiTime sub; if( Engine::getSong()->playMode() == Song::Mode_PlaySong ) { sub = m_pattern->startPosition(); } - Note n( 1, Engine::getSong()->getPlayPos( + Note n1( 1, Engine::getSong()->getPlayPos( Engine::getSong()->playMode() ) - sub, n.key(), n.getVolume(), n.getPanning() ); - if( n.pos() >= 0 ) + if( n1.pos() >= 0 ) { - m_recordingNotes << n; + m_recordingNotes << n1; } } } From 02869b13dde1b6baa99b41aa177ea698144e0a89 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 11 Dec 2014 11:24:26 +0100 Subject: [PATCH 024/172] Editors: Some cleanups --- include/AutomationEditor.h | 10 +-- include/PianoRoll.h | 9 --- src/gui/editors/AutomationEditor.cpp | 48 ++++++------ src/gui/editors/Editor.cpp | 46 +++++------ src/gui/editors/PianoRoll.cpp | 109 ++++++++++++++------------- src/gui/editors/SongEditor.cpp | 7 +- 6 files changed, 105 insertions(+), 124 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 2c48ef800..ee6fd9842 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -276,19 +276,11 @@ protected slots: void stop(); private: - QAction* m_drawAction; - QAction* m_eraseAction; - QAction* m_selectAction; - QAction* m_moveAction; - QAction* m_discreteAction; QAction* m_linearAction; QAction* m_cubicHermiteAction; - Knob * m_tensionKnob; - QAction * m_cutAction; - QAction * m_copyAction; - QAction * m_pasteAction; + Knob * m_tensionKnob; ComboBox * m_zoomingXComboBox; ComboBox * m_zoomingYComboBox; diff --git a/include/PianoRoll.h b/include/PianoRoll.h index 7a7a3f094..34b6693a0 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -384,15 +384,6 @@ signals: private: PianoRoll* m_editor; - QAction* m_drawAction; - QAction* m_eraseAction; - QAction* m_selectAction; - QAction* m_detuneAction; - - QAction* m_cutAction; - QAction* m_copyAction; - QAction* m_pasteAction; - ComboBox * m_zoomingComboBox; ComboBox * m_quantizeComboBox; ComboBox * m_noteLenComboBox; diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index 7ccf6d286..28beedcf5 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -2005,25 +2005,25 @@ AutomationEditorWindow::AutomationEditorWindow() : "current pattern." ) ); // Edit mode buttons - m_drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); - m_drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); + QAction* drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); + drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); - m_eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); - m_eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); + QAction* eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); + eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); - m_drawAction->setChecked(true); + drawAction->setChecked(true); // TODO: m_selectButton and m_moveButton are broken. // m_selectButton = addEditMode(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); // m_moveButton = addEditMode(embed::getIconPixmap("edit_move"), tr("Move selection mode (Shift+M)")); - m_drawAction->setWhatsThis( + drawAction->setWhatsThis( tr( "Click here and draw-mode will be activated. In this " "mode you can add and move single values. This " "is the default mode which is used most of the time. " "You can also press 'Shift+D' on your keyboard to " "activate this mode." ) ); - m_eraseAction->setWhatsThis( + eraseAction->setWhatsThis( tr( "Click here and erase-mode will be activated. In this " "mode you can erase single values. You can also press " "'Shift+E' on your keyboard to activate this mode." ) ); @@ -2083,32 +2083,32 @@ AutomationEditorWindow::AutomationEditorWindow() : // Copy paste buttons - m_cutAction = new QAction(embed::getIconPixmap("edit_cut"), + QAction* cutAction = new QAction(embed::getIconPixmap("edit_cut"), tr("Cut selected values (Ctrl+X)"), this); - m_copyAction = new QAction(embed::getIconPixmap("edit_copy"), + QAction* copyAction = new QAction(embed::getIconPixmap("edit_copy"), tr("Copy selected values (Ctrl+C)"), this); - m_pasteAction = new QAction(embed::getIconPixmap("edit_paste"), + QAction* pasteAction = new QAction(embed::getIconPixmap("edit_paste"), tr("Paste values from clipboard Ctrl+V)"), this); - m_cutAction->setWhatsThis( + cutAction->setWhatsThis( tr( "Click here and selected values will be cut into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); - m_copyAction->setWhatsThis( + copyAction->setWhatsThis( tr( "Click here and selected values will be copied into " "the clipboard. You can paste them anywhere in any " "pattern by clicking on the paste button." ) ); - m_pasteAction->setWhatsThis( + pasteAction->setWhatsThis( tr( "Click here and the values from the clipboard will be " "pasted at the first visible measure." ) ); - m_cutAction->setShortcut(Qt::CTRL | Qt::Key_X); - m_copyAction->setShortcut(Qt::CTRL | Qt::Key_C); - m_pasteAction->setShortcut(Qt::CTRL | Qt::Key_V); + cutAction->setShortcut(Qt::CTRL | Qt::Key_X); + copyAction->setShortcut(Qt::CTRL | Qt::Key_C); + pasteAction->setShortcut(Qt::CTRL | Qt::Key_V); - connect(m_cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedValues())); - connect(m_copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedValues())); - connect(m_pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteValues())); + connect(cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedValues())); + connect(copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedValues())); + connect(pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteValues())); // Zoom controls @@ -2162,8 +2162,8 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addSeparator();; - m_toolBar->addAction(m_drawAction); - m_toolBar->addAction(m_eraseAction); + m_toolBar->addAction(drawAction); + m_toolBar->addAction(eraseAction); // m_toolBar->addAction(m_selectButton); // m_toolBar->addAction(m_moveButton); m_toolBar->addSeparator(); @@ -2175,9 +2175,9 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addWidget( m_tensionKnob ); m_toolBar->addSeparator(); // Select is broken -// m_toolBar->addAction( m_cutAction ); -// m_toolBar->addAction( m_copyAction ); -// m_toolBar->addAction( m_pasteAction ); +// m_toolBar->addAction( cutAction ); +// m_toolBar->addAction( copyAction ); +// m_toolBar->addAction( pasteAction ); m_toolBar->addSeparator(); m_editor->m_timeLine->addToolButtons(m_toolBar); m_toolBar->addSeparator(); diff --git a/src/gui/editors/Editor.cpp b/src/gui/editors/Editor.cpp index 48921d6bd..81903e488 100644 --- a/src/gui/editors/Editor.cpp +++ b/src/gui/editors/Editor.cpp @@ -98,40 +98,40 @@ Editor::Editor(bool record) : m_toolBar->setContextMenuPolicy(Qt::PreventContextMenu); m_toolBar->setMovable(false); - auto addButton = [this](const char* pixmap_name, QString text, QString objectName) { - QAction* action = m_toolBar->addAction(embed::getIconPixmap(pixmap_name), text); + auto addButton = [this](QAction* action, QString objectName) { + m_toolBar->addAction(action); m_toolBar->widgetForAction(action)->setObjectName(objectName); - return action; }; - // Set up play button - m_playAction = addButton("play", tr("Play (Space)"), "playButton"); + // Set up play and record actions + m_playAction = new QAction(embed::getIconPixmap("play"), tr("Play (Space)"), this); + m_stopAction = new QAction(embed::getIconPixmap("stop"), tr("Stop (Space)"), this); + + m_recordAction = new QAction(embed::getIconPixmap("record"), tr("Record"), this); + m_recordAccompanyAction = new QAction(embed::getIconPixmap("record_accompany"), tr("Record while playing"), this); + m_playAction->setShortcut(Qt::Key_Space); - // Set up record buttons if wanted - if (record) - { - m_recordAction = addButton("record", tr("Record"), "recordButton"); - m_recordAccompanyAction = addButton("record_accompany", tr("Record while playing"), "recordAccompanyButton"); - } - - // Set up stop button - m_stopAction = addButton("stop", tr("Stop (Space)"), "stopButton"); - - // Add toolbar to window - addToolBar(Qt::TopToolBarArea, m_toolBar); - // Set up connections connect(m_playAction, SIGNAL(triggered()), this, SLOT(play())); - if (record) - { - connect(m_recordAction, SIGNAL(triggered()), this, SLOT(record())); - connect(m_recordAccompanyAction, SIGNAL(triggered()), this, SLOT(recordAccompany())); - } + connect(m_recordAction, SIGNAL(triggered()), this, SLOT(record())); + connect(m_recordAccompanyAction, SIGNAL(triggered()), this, SLOT(recordAccompany())); connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stop())); // Connect edit mode connect(m_editModeGroup, SIGNAL(triggered(QAction*)), this, SLOT(setEditModeByAction(QAction*))); + + // Add toolbar to window + addToolBar(Qt::TopToolBarArea, m_toolBar); + + // Add actions to toolbar + addButton(m_playAction, "playButton"); + if (record) + { + addButton(m_recordAction, "recordButton"); + addButton(m_recordAccompanyAction, "recordAccompanyButton"); + } + addButton(m_stopAction, "stopButton"); } Editor::~Editor() diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 2e4fbe547..b4a00a074 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -197,32 +197,33 @@ PianoRoll::PianoRoll() : signalMapper = new QSignalMapper( this ); m_semiToneMarkerMenu = new QMenu( this ); - QAction * act = new QAction( tr("Mark/unmark current semitone"), this ); - connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); - signalMapper->setMapping( act, static_cast( stmaMarkCurrentSemiTone ) ); - m_semiToneMarkerMenu->addAction( act ); + QAction * markSemitoneAction = new QAction( tr("Mark/unmark current semitone"), this ); + QAction* markScaleAction = new QAction( tr("Mark current scale"), this ); + QAction* markChordAction = new QAction( tr("Mark current chord"), this ); + QAction* unmarkAllAction = new QAction( tr("Unmark all"), this ); - act = new QAction( tr("Mark current scale"), this ); - act->setEnabled( false ); - connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); - connect( this, SIGNAL(semiToneMarkerMenuScaleSetEnabled(bool)), act, SLOT(setEnabled(bool)) ); - signalMapper->setMapping( act, static_cast( stmaMarkCurrentScale ) ); - m_semiToneMarkerMenu->addAction( act ); + connect( markSemitoneAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); + connect( markScaleAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); + connect( markChordAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); + connect( unmarkAllAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); - act = new QAction( tr("Mark current chord"), this ); - act->setEnabled( false ); - connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); - connect( this, SIGNAL(semiToneMarkerMenuChordSetEnabled(bool)), act, SLOT(setEnabled(bool)) ); - signalMapper->setMapping( act, static_cast( stmaMarkCurrentChord ) ); - m_semiToneMarkerMenu->addAction( act ); + signalMapper->setMapping( markSemitoneAction, static_cast( stmaMarkCurrentSemiTone ) ); + signalMapper->setMapping( markScaleAction, static_cast( stmaMarkCurrentScale ) ); + signalMapper->setMapping( markChordAction, static_cast( stmaMarkCurrentChord ) ); + signalMapper->setMapping( unmarkAllAction, static_cast( stmaUnmarkAll ) ); - act = new QAction( tr("Unmark all"), this ); - connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); - signalMapper->setMapping( act, static_cast( stmaUnmarkAll ) ); - m_semiToneMarkerMenu->addAction( act ); + markScaleAction->setEnabled( false ); + markChordAction->setEnabled( false ); - connect( signalMapper, SIGNAL(mapped(int)), - this, SLOT(markSemiTone(int)) ); + connect( this, SIGNAL(semiToneMarkerMenuScaleSetEnabled(bool)), markScaleAction, SLOT(setEnabled(bool)) ); + connect( this, SIGNAL(semiToneMarkerMenuChordSetEnabled(bool)), markChordAction, SLOT(setEnabled(bool)) ); + + connect( signalMapper, SIGNAL(mapped(int)), this, SLOT(markSemiTone(int)) ); + + m_semiToneMarkerMenu->addAction( markSemitoneAction ); + m_semiToneMarkerMenu->addAction( markScaleAction ); + m_semiToneMarkerMenu->addAction( markChordAction ); + m_semiToneMarkerMenu->addAction( unmarkAllAction ); // init pixmaps if( s_whiteKeySmallPm == NULL ) @@ -3938,36 +3939,36 @@ PianoRollWindow::PianoRollWindow() : tr( "Click here to stop playback of current pattern." ) ); // init edit-buttons at the top - m_drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); - m_drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); - m_drawAction->setChecked( true ); + QAction* drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); + drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); + drawAction->setChecked( true ); - m_eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); - m_eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); + QAction* eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); + eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); - m_selectAction = addEditMode(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); - m_selectAction->setShortcut(Qt::SHIFT | Qt::Key_S); + QAction* selectAction = addEditMode(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); + selectAction->setShortcut(Qt::SHIFT | Qt::Key_S); - m_detuneAction = addEditMode(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); - m_detuneAction->setShortcut(Qt::SHIFT | Qt::Key_T); + QAction* detuneAction = addEditMode(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); + detuneAction->setShortcut(Qt::SHIFT | Qt::Key_T); - m_drawAction->setWhatsThis( + drawAction->setWhatsThis( tr( "Click here and draw mode will be activated. In this " "mode you can add, resize and move notes. This " "is the default mode which is used most of the time. " "You can also press 'Shift+D' on your keyboard to " "activate this mode. In this mode, hold Ctrl to " "temporarily go into select mode." ) ); - m_eraseAction->setWhatsThis( + eraseAction->setWhatsThis( tr( "Click here and erase mode will be activated. In this " "mode you can erase notes. You can also press " "'Shift+E' on your keyboard to activate this mode." ) ); - m_selectAction->setWhatsThis( + selectAction->setWhatsThis( tr( "Click here and select mode will be activated. " "In this mode you can select notes. Alternatively, " "you can hold Ctrl in draw mode to temporarily use " "select mode." ) ); - m_detuneAction->setWhatsThis( + detuneAction->setWhatsThis( tr( "Click here and detune mode will be activated. " "In this mode you can click a note to open its " "automation detuning. You can utilize this to slide " @@ -3977,34 +3978,34 @@ PianoRollWindow::PianoRollWindow() : connect(this, SIGNAL(editModeChanged(int)), m_editor, SLOT(setEditMode(int))); // Copy + paste actions - m_cutAction = new QAction(embed::getIconPixmap("edit_cut"), + QAction* cutAction = new QAction(embed::getIconPixmap("edit_cut"), tr("Cut selected notes (Ctrl+X)"), this); - m_copyAction = new QAction(embed::getIconPixmap("edit_copy"), + QAction* copyAction = new QAction(embed::getIconPixmap("edit_copy"), tr("Copy selected notes (Ctrl+C)"), this); - m_pasteAction = new QAction(embed::getIconPixmap("edit_paste"), + QAction* pasteAction = new QAction(embed::getIconPixmap("edit_paste"), tr("Paste notes from clipboard (Ctrl+V)"), this); - m_cutAction->setWhatsThis( + cutAction->setWhatsThis( tr( "Click here and the selected notes will be cut into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); - m_copyAction->setWhatsThis( + copyAction->setWhatsThis( tr( "Click here and the selected notes will be copied into the " "clipboard. You can paste them anywhere in any pattern " "by clicking on the paste button." ) ); - m_pasteAction->setWhatsThis( + pasteAction->setWhatsThis( tr( "Click here and the notes from the clipboard will be " "pasted at the first visible measure." ) ); - m_cutAction->setShortcut(Qt::CTRL | Qt::Key_X); - m_copyAction->setShortcut(Qt::CTRL | Qt::Key_C); - m_pasteAction->setShortcut(Qt::CTRL | Qt::Key_V); + cutAction->setShortcut(Qt::CTRL | Qt::Key_X); + copyAction->setShortcut(Qt::CTRL | Qt::Key_C); + pasteAction->setShortcut(Qt::CTRL | Qt::Key_V); - connect(m_cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedNotes())); - connect(m_copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedNotes())); - connect(m_pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteNotes())); + connect(cutAction, SIGNAL(triggered()), m_editor, SLOT(cutSelectedNotes())); + connect(copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedNotes())); + connect(pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteNotes())); QLabel * zoom_lbl = new QLabel( m_toolBar ); zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); @@ -4049,15 +4050,15 @@ PianoRollWindow::PianoRollWindow() : m_toolBar->addSeparator(); - m_toolBar->addAction( m_drawAction ); - m_toolBar->addAction( m_eraseAction ); - m_toolBar->addAction( m_selectAction ); - m_toolBar->addAction( m_detuneAction ); + m_toolBar->addAction( drawAction ); + m_toolBar->addAction( eraseAction ); + m_toolBar->addAction( selectAction ); + m_toolBar->addAction( detuneAction ); m_toolBar->addSeparator(); - m_toolBar->addAction( m_cutAction ); - m_toolBar->addAction( m_copyAction ); - m_toolBar->addAction( m_pasteAction ); + m_toolBar->addAction( cutAction ); + m_toolBar->addAction( copyAction ); + m_toolBar->addAction( pasteAction ); m_toolBar->addSeparator(); m_editor->m_timeLine->addToolButtons(m_toolBar); diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index 4ff5153c0..8be3b69d4 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -611,11 +611,8 @@ SongEditorWindow::SongEditorWindow(Song* song) : // Set up buttons m_playAction->setToolTip(tr("Play song (Space)")); - if (m_recordAction && m_recordAccompanyAction) - { - m_recordAction->setToolTip(tr("Record samples from Audio-device")); - m_recordAccompanyAction->setToolTip(tr( "Record samples from Audio-device while playing song or BB track")); - } + m_recordAction->setToolTip(tr("Record samples from Audio-device")); + m_recordAccompanyAction->setToolTip(tr( "Record samples from Audio-device while playing song or BB track")); m_stopAction->setToolTip(tr( "Stop song (Space)" )); m_addBBTrackAction = new QAction(embed::getIconPixmap("add_bb_track"), From 787788870b2d76ca32dee42b3b3577c9660f8ff3 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 11 Dec 2014 12:56:51 +0100 Subject: [PATCH 025/172] Introduce ActionGroup subclass --- include/ActionGroup.h | 57 ++++++++++++++++++++++++++++ include/AutomationEditor.h | 4 +- include/Editor.h | 26 ++----------- src/gui/ActionGroup.cpp | 55 +++++++++++++++++++++++++++ src/gui/editors/AutomationEditor.cpp | 51 +++++++++---------------- src/gui/editors/Editor.cpp | 52 +------------------------ src/gui/editors/PianoRoll.cpp | 17 +++++---- src/gui/editors/SongEditor.cpp | 8 ++-- 8 files changed, 149 insertions(+), 121 deletions(-) create mode 100644 include/ActionGroup.h create mode 100644 src/gui/ActionGroup.cpp diff --git a/include/ActionGroup.h b/include/ActionGroup.h new file mode 100644 index 000000000..9928e8906 --- /dev/null +++ b/include/ActionGroup.h @@ -0,0 +1,57 @@ +/* + * Editor.h - declaration of Editor class + * + * Copyright (c) 2014 Lukas W + * + * This file is part of LMMS - http://lmms.io + * + * 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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + + +#ifndef ACTION_GROUP_H +#define ACTION_GROUP_H + +#include + +/// \brief Convenience subclass of QActionGroup +/// +/// This class provides the same functionality as QActionGroup, but in addition +/// has the actionTriggered(int) signal. +/// It also sets every added action's checkable property to true. +class ActionGroup : public QActionGroup +{ + Q_OBJECT +public: + ActionGroup(QObject* parent); + + QAction* addAction(QAction *a); + QAction* addAction(const QString &text); + QAction* addAction(const QIcon &icon, const QString &text); + +signals: + /// This signal is emitted when the action at the given index is triggered. + void triggered(int index); + +private slots: + void actionTriggered_(QAction* action); + +private: + QList m_actions; +}; + +#endif diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index ee6fd9842..94798bedd 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -134,9 +134,7 @@ protected slots: void setEditMode(int mode); void setProgressionType(AutomationPattern::ProgressionTypes type); - void setProgressionDiscrete(); - void setProgressionLinear(); - void setProgressionHermite(); + void setProgressionType(int type); void setTension(); void copySelectedValues(); diff --git a/include/Editor.h b/include/Editor.h index 458fc34fe..1070aa649 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -32,9 +32,6 @@ #include "TimeLineWidget.h" #include "ToolButton.h" -// Forward declarations -class QActionGroup; - /// \brief Superclass for editors with a toolbar. /// /// Those editors include the Song Editor, the Automation Editor, B&B Editor, @@ -45,23 +42,11 @@ class Editor : public QMainWindow public: void setPauseIcon(bool displayPauseIcon=true); - int editMode() const; - void setEditMode(int mode); - -signals: - void editModeChanged(int); - -protected: - QAction* addEditMode(const QIcon &icon, const QString &text, const QString& whatsThis=QString()); - protected slots: - virtual void play(); - virtual void record(); - virtual void recordAccompany(); - virtual void stop(); - -private slots: - void setEditModeByAction(QAction* action); + virtual void play() {} + virtual void record() {} + virtual void recordAccompany() {} + virtual void stop() {} signals: @@ -80,9 +65,6 @@ protected: QAction* m_recordAction; QAction* m_recordAccompanyAction; QAction* m_stopAction; -private: - quint8 m_editMode; - QActionGroup* m_editModeGroup; }; diff --git a/src/gui/ActionGroup.cpp b/src/gui/ActionGroup.cpp new file mode 100644 index 000000000..b0f0dbcd3 --- /dev/null +++ b/src/gui/ActionGroup.cpp @@ -0,0 +1,55 @@ +/* + * Editor.h - declaration of Editor class + * + * Copyright (c) 2014 Lukas W + * + * This file is part of LMMS - http://lmms.io + * + * 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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "ActionGroup.h" + +ActionGroup::ActionGroup(QObject* parent) : QActionGroup(parent) +{ + connect(this, SIGNAL(triggered(QAction*)), this, SLOT(actionTriggered_(QAction*))); +} + +QAction* ActionGroup::addAction(QAction* a) +{ + a->setCheckable(true); + + return QActionGroup::addAction(a); +} + +QAction* ActionGroup::addAction(const QString& text) +{ + return addAction(new QAction(text, this)); +} + +QAction* ActionGroup::addAction(const QIcon& icon, const QString& text) +{ + return addAction(new QAction(icon, text, this)); +} + +void ActionGroup::actionTriggered_(QAction* action) +{ + Q_ASSERT(action != 0); + Q_ASSERT(actions().contains(action)); + + emit triggered(actions().indexOf(action)); +} diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index 28beedcf5..ed5a5bb46 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -47,7 +47,7 @@ #include - +#include "ActionGroup.h" #include "SongEditor.h" #include "MainWindow.h" #include "embed.h" @@ -1643,22 +1643,9 @@ void AutomationEditor::setProgressionType(AutomationPattern::ProgressionTypes ty } } - -void AutomationEditor::setProgressionDiscrete() +void AutomationEditor::setProgressionType(int type) { - setProgressionType(AutomationPattern::DiscreteProgression); -} - - -void AutomationEditor::setProgressionLinear() -{ - setProgressionType(AutomationPattern::LinearProgression); -} - - -void AutomationEditor::setProgressionHermite() -{ - setProgressionType(AutomationPattern::CubicHermiteProgression); + setProgressionType((AutomationPattern::ProgressionTypes) type); } @@ -2005,17 +1992,18 @@ AutomationEditorWindow::AutomationEditorWindow() : "current pattern." ) ); // Edit mode buttons - QAction* drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); + ActionGroup* editModeGroup = new ActionGroup(this); + QAction* drawAction = editModeGroup->addAction(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); - QAction* eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); + QAction* eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); drawAction->setChecked(true); // TODO: m_selectButton and m_moveButton are broken. -// m_selectButton = addEditMode(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); -// m_moveButton = addEditMode(embed::getIconPixmap("edit_move"), tr("Move selection mode (Shift+M)")); +// m_selectButton = new QAction(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)"), editModeGroup); +// m_moveButton = new QAction(embed::getIconPixmap("edit_move"), tr("Move selection mode (Shift+M)"), editModeGroup); drawAction->setWhatsThis( tr( "Click here and draw-mode will be activated. In this " @@ -2039,26 +2027,21 @@ AutomationEditorWindow::AutomationEditorWindow() : "mode. You can also press 'Shift+M' on your keyboard " "to activate this mode." ) );*/ - connect(this, SIGNAL(editModeChanged(int)), m_editor, SLOT(setEditMode(int))); + connect(editModeGroup, SIGNAL(triggered(int)), m_editor, SLOT(setEditMode(int))); // Progression type buttons - QActionGroup* progression_type_group = new QActionGroup(this); + ActionGroup* progression_type_group = new ActionGroup(this); - m_discreteAction = new QAction(embed::getIconPixmap("progression_discrete"), - tr("Discrete progression"), progression_type_group); - m_linearAction = new QAction(embed::getIconPixmap("progression_linear"), - tr("Linear progression"), progression_type_group); - m_cubicHermiteAction = new QAction(embed::getIconPixmap("progression_cubic_hermite"), - tr( "Cubic Hermite progression"), progression_type_group); + m_discreteAction = progression_type_group->addAction( + embed::getIconPixmap("progression_discrete"), tr("Discrete progression")); + m_linearAction = progression_type_group->addAction( + embed::getIconPixmap("progression_linear"), tr("Linear progression")); + m_cubicHermiteAction = progression_type_group->addAction( + embed::getIconPixmap("progression_cubic_hermite"), tr( "Cubic Hermite progression")); - m_linearAction->setCheckable( true ); - m_cubicHermiteAction->setCheckable( true ); - m_discreteAction->setCheckable( true ); m_discreteAction->setChecked( true ); - connect(m_discreteAction, SIGNAL(triggered()), m_editor, SLOT(setProgressionDiscrete())); - connect(m_linearAction, SIGNAL(triggered()), m_editor, SLOT(setProgressionLinear())); - connect(m_cubicHermiteAction, SIGNAL(triggered()), m_editor, SLOT(setProgressionHermite())); + connect(progression_type_group, SIGNAL(triggered(int)), m_editor, SLOT(setProgressionType(int))); // setup tension-stuff m_tensionKnob = new Knob( knobSmall_17, this, "Tension" ); diff --git a/src/gui/editors/Editor.cpp b/src/gui/editors/Editor.cpp index 81903e488..8594f1b95 100644 --- a/src/gui/editors/Editor.cpp +++ b/src/gui/editors/Editor.cpp @@ -41,59 +41,12 @@ void Editor::setPauseIcon(bool displayPauseIcon) m_playAction->setIcon(embed::getIconPixmap("play")); } -int Editor::editMode() const -{ - return m_editMode; -} - -void Editor::setEditMode(int mode) -{ - if (mode <= m_editModeGroup->actions().size()) - { - m_editMode = mode; - } - emit(editModeChanged(mode)); -} - -QAction* Editor::addEditMode(const QIcon& icon, const QString& text, const QString& whatsThis) -{ - QAction* editModeAction = new QAction(icon, text, m_editModeGroup); - editModeAction->setWhatsThis(whatsThis); - editModeAction->setCheckable(true); - return editModeAction; -} - -void Editor::play() -{ -} - -void Editor::record() -{ -} - -void Editor::recordAccompany() -{ -} - -void Editor::stop() -{ -} - -void Editor::setEditModeByAction(QAction* action) -{ - int index = m_editModeGroup->actions().indexOf(action); - if (index != -1) - setEditMode(index); -} - Editor::Editor(bool record) : m_toolBar(new QToolBar(this)), m_playAction(nullptr), m_recordAction(nullptr), m_recordAccompanyAction(nullptr), - m_stopAction(nullptr), - m_editMode(0), - m_editModeGroup(new QActionGroup(this)) + m_stopAction(nullptr) { m_toolBar->setContextMenuPolicy(Qt::PreventContextMenu); m_toolBar->setMovable(false); @@ -118,9 +71,6 @@ Editor::Editor(bool record) : connect(m_recordAccompanyAction, SIGNAL(triggered()), this, SLOT(recordAccompany())); connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stop())); - // Connect edit mode - connect(m_editModeGroup, SIGNAL(triggered(QAction*)), this, SLOT(setEditModeByAction(QAction*))); - // Add toolbar to window addToolBar(Qt::TopToolBarArea, m_toolBar); diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index b4a00a074..29ccafcdc 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -45,6 +45,7 @@ #include #include +#include "ActionGroup.h" #include "ConfigManager.h" #include "PianoRoll.h" #include "BBTrackContainer.h" @@ -3939,17 +3940,17 @@ PianoRollWindow::PianoRollWindow() : tr( "Click here to stop playback of current pattern." ) ); // init edit-buttons at the top - QAction* drawAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); - drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); + ActionGroup* editModeGroup = new ActionGroup(this); + QAction* drawAction = editModeGroup->addAction(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); + QAction* eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); + QAction* selectAction = editModeGroup->addAction(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); + QAction* detuneAction = editModeGroup->addAction(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); + drawAction->setChecked( true ); - QAction* eraseAction = addEditMode(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); + drawAction->setShortcut(Qt::SHIFT | Qt::Key_D); eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); - - QAction* selectAction = addEditMode(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); selectAction->setShortcut(Qt::SHIFT | Qt::Key_S); - - QAction* detuneAction = addEditMode(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); detuneAction->setShortcut(Qt::SHIFT | Qt::Key_T); drawAction->setWhatsThis( @@ -3975,7 +3976,7 @@ PianoRollWindow::PianoRollWindow() : "notes from one to another. You can also press " "'Shift+T' on your keyboard to activate this mode." ) ); - connect(this, SIGNAL(editModeChanged(int)), m_editor, SLOT(setEditMode(int))); + connect(editModeGroup, SIGNAL(triggered(int)), m_editor, SLOT(setEditMode(int))); // Copy + paste actions QAction* cutAction = new QAction(embed::getIconPixmap("edit_cut"), diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index 8be3b69d4..afbbb2698 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -35,6 +35,7 @@ #include +#include "ActionGroup.h" #include "SongEditor.h" #include "AutomatableSlider.h" #include "ComboBox.h" @@ -628,10 +629,11 @@ SongEditorWindow::SongEditorWindow(Song* song) : connect(m_addSampleTrackAction, SIGNAL(triggered()), m_editor->m_song, SLOT(addSampleTrack())); connect(m_addAutomationTrackAction, SIGNAL(triggered()), m_editor->m_song, SLOT(addAutomationTrack())); - m_drawModeAction = addEditMode(embed::getIconPixmap("edit_draw"), tr("Draw mode")); - m_drawModeAction->setChecked(true); + ActionGroup* editModeGroup = new ActionGroup(this); + m_drawModeAction = editModeGroup->addAction(embed::getIconPixmap("edit_draw"), tr("Draw mode")); + m_selectModeAction = editModeGroup->addAction(embed::getIconPixmap("edit_select"), tr("Edit mode (select and move)")); - m_selectModeAction = addEditMode(embed::getIconPixmap("edit_select"), tr("Edit mode (select and move)")); + m_drawModeAction->setChecked(true); connect(m_drawModeAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeDraw())); connect(m_selectModeAction, SIGNAL(triggered()), m_editor, SLOT(setEditModeSelect())); From 11cb8b5d68e435343776ca6b8591fe822b5694c2 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Fri, 12 Dec 2014 10:51:15 +0100 Subject: [PATCH 026/172] Automation Editor tension fix --- include/AutomationEditor.h | 3 +++ src/core/AutomationPattern.cpp | 5 ----- src/gui/editors/AutomationEditor.cpp | 24 +++++++++++++++++++----- 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 94798bedd..2aebe45f5 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -266,6 +266,9 @@ public: QSize sizeHint() const; +public slots: + void clearCurrentPattern(); + signals: void currentPatternChanged(); diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 76b185d42..a1c01720a 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -79,11 +79,6 @@ AutomationPattern::AutomationPattern( const AutomationPattern & _pat_to_copy ) : AutomationPattern::~AutomationPattern() { - if( Engine::automationEditor() && - Engine::automationEditor()->currentPattern() == this ) - { - Engine::automationEditor()->setCurrentPattern( NULL ); - } } diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index ed5a5bb46..e7693f5ee 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -584,7 +584,6 @@ void AutomationEditor::mouseReleaseEvent(QMouseEvent * mouseEvent ) -#include void AutomationEditor::mouseMoveEvent(QMouseEvent * mouseEvent ) { QMutexLocker m( &m_patternMutex ); @@ -1999,8 +1998,6 @@ AutomationEditorWindow::AutomationEditorWindow() : QAction* eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); - drawAction->setChecked(true); - // TODO: m_selectButton and m_moveButton are broken. // m_selectButton = new QAction(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)"), editModeGroup); // m_moveButton = new QAction(embed::getIconPixmap("edit_move"), tr("Move selection mode (Shift+M)"), editModeGroup); @@ -2039,12 +2036,19 @@ AutomationEditorWindow::AutomationEditorWindow() : m_cubicHermiteAction = progression_type_group->addAction( embed::getIconPixmap("progression_cubic_hermite"), tr( "Cubic Hermite progression")); - m_discreteAction->setChecked( true ); - connect(progression_type_group, SIGNAL(triggered(int)), m_editor, SLOT(setProgressionType(int))); // setup tension-stuff m_tensionKnob = new Knob( knobSmall_17, this, "Tension" ); + m_tensionKnob->setModel(m_editor->m_tensionModel); + ToolTip::add(m_tensionKnob, tr("Tension value for spline")); + m_tensionKnob->setWhatsThis( + tr("A higher tension value may make a smoother curve " + "but overshoot some values. A low tension " + "value will cause the slope of the curve to " + "level off at each control point.")); + + connect(m_cubicHermiteAction, SIGNAL(toggled(bool)), m_tensionKnob, SLOT(setEnabled(bool))); m_discreteAction->setWhatsThis( tr( "Click here to choose discrete progressions for this " @@ -2173,6 +2177,9 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addWidget( quantize_lbl ); m_toolBar->addWidget( m_quantizeComboBox ); + drawAction->setChecked(true); + m_discreteAction->setChecked(true); + // Setup our actual window setFocusPolicy( Qt::StrongFocus ); setFocus(); @@ -2205,6 +2212,8 @@ void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) break; } + connect(pattern, SIGNAL(destroyed()), this, SLOT(clearCurrentPattern())); + emit currentPatternChanged(); } @@ -2225,6 +2234,11 @@ QSize AutomationEditorWindow::sizeHint() const return {INITIAL_WIDTH, INITIAL_HEIGHT}; } +void AutomationEditorWindow::clearCurrentPattern() +{ + setCurrentPattern(nullptr); +} + void AutomationEditorWindow::play() { m_editor->play(); From 657fb06c4917670ccaebe7dcba95fb3600d9e2b0 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Wed, 17 Dec 2014 11:34:57 +0100 Subject: [PATCH 027/172] More Automation refactoring --- include/AutomationEditor.h | 6 ++-- include/AutomationPattern.h | 28 ++++++------------ include/Note.h | 10 ++----- src/core/AutomationPattern.cpp | 43 +++++++-------------------- src/core/Note.cpp | 8 ----- src/gui/AutomatableModelView.cpp | 6 +++- src/gui/AutomationPatternView.cpp | 2 +- src/gui/editors/AutomationEditor.cpp | 44 ++++++++++++++++++---------- src/gui/editors/PianoRoll.cpp | 5 +++- 9 files changed, 64 insertions(+), 88 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index 2aebe45f5..00b4989fb 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -68,8 +68,6 @@ public: return m_pattern != nullptr; } - int quantization() const; - virtual void saveSettings(QDomDocument & doc, QDomElement & parent); virtual void loadSettings(const QDomElement & parent); QString nodeName() const @@ -147,6 +145,8 @@ protected slots: void zoomingXChanged(); void zoomingYChanged(); + /// Updates the pattern's quantization using the current user selected value. + void setQuantization(); private: @@ -260,7 +260,7 @@ public: void setCurrentPattern(AutomationPattern* pattern); const AutomationPattern* currentPattern(); - int quantization() const; + void open(AutomationPattern* pattern); AutomationEditor* m_editor; diff --git a/include/AutomationPattern.h b/include/AutomationPattern.h index b6259b3c5..66caddf27 100644 --- a/include/AutomationPattern.h +++ b/include/AutomationPattern.h @@ -136,15 +136,8 @@ public: virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); - static inline const QString classNodeName() - { - return "automationpattern"; - } - - inline virtual QString nodeName() const - { - return classNodeName(); - } + static const QString classNodeName() { return "automationpattern"; } + QString nodeName() const { return classNodeName(); } void processMidiTime( const MidiTime & _time ); @@ -156,19 +149,14 @@ public: static AutomationPattern * globalAutomationPattern( AutomatableModel * _m ); static void resolveAllIDs(); - bool isRecording() const - { - return m_isRecording; - } - - void setRecording( const bool b ) - { - m_isRecording = b; - } + bool isRecording() const { return m_isRecording; } + void setRecording( const bool b ) { m_isRecording = b; } + + static int quantization() { return s_quantization; } + static void setQuantization(int q) { s_quantization = q; } public slots: void clear(); - void openInAutomationEditor(); void objectDestroyed( jo_id_t ); private: @@ -192,6 +180,8 @@ private: bool m_isRecording; float m_lastRecordedValue; + static int s_quantization; + static const float DEFAULT_MIN_VALUE; static const float DEFAULT_MAX_VALUE; diff --git a/include/Note.h b/include/Note.h index eb36462a6..cdd5a717e 100644 --- a/include/Note.h +++ b/include/Note.h @@ -202,11 +202,10 @@ public: { return m_detuning; } - - void editDetuningPattern(); - bool hasDetuningInfo() const; + void createDetuning(); + protected: virtual void saveSettings( QDomDocument & _doc, @@ -228,10 +227,7 @@ private: MidiTime m_length; MidiTime m_pos; DetuningHelper * m_detuning; - - void createDetuning(); - -} ; +}; typedef QVector NoteVector; diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index a1c01720a..176dd35f8 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -25,12 +25,9 @@ */ #include -#include -#include #include "AutomationPattern.h" #include "AutomationPatternView.h" -#include "AutomationEditor.h" #include "AutomationTrack.h" #include "ProjectJournal.h" #include "BBTrackContainer.h" @@ -38,7 +35,7 @@ #include "TextFloat.h" #include "embed.h" - +int AutomationPattern::s_quantization = 1; const float AutomationPattern::DEFAULT_MIN_VALUE = 0; const float AutomationPattern::DEFAULT_MAX_VALUE = 1; @@ -181,10 +178,9 @@ MidiTime AutomationPattern::putValue( const MidiTime & _time, { cleanObjects(); - MidiTime newTime = _quant_pos && Engine::automationEditor() ? - Note::quantized( _time, - Engine::automationEditor()->quantization() ) : - _time; + MidiTime newTime = _quant_pos ? + Note::quantized( _time, quantization() ) : + _time; m_timeMap[newTime] = _value; timeMap::const_iterator it = m_timeMap.find( newTime ); @@ -214,10 +210,9 @@ void AutomationPattern::removeValue( const MidiTime & _time, { cleanObjects(); - MidiTime newTime = _quant_pos && Engine::automationEditor() ? - Note::quantized( _time, - Engine::automationEditor()->quantization() ) : - _time; + MidiTime newTime = _quant_pos ? + Note::quantized( _time, quantization() ) : + _time; m_timeMap.remove( newTime ); m_tangents.remove( newTime ); @@ -254,10 +249,9 @@ MidiTime AutomationPattern::setDragValue( const MidiTime & _time, const float _v { if( m_dragging == false ) { - MidiTime newTime = _quant_pos && Engine::automationEditor() ? - Note::quantized( _time, - Engine::automationEditor()->quantization() ) : - _time; + MidiTime newTime = _quant_pos ? + Note::quantized( _time, quantization() ) : + _time; this->removeValue( newTime ); m_oldTimeMap = m_timeMap; m_dragging = true; @@ -670,23 +664,6 @@ void AutomationPattern::clear() m_tangents.clear(); emit dataChanged(); - - if( Engine::automationEditor() && - Engine::automationEditor()->currentPattern() == this ) - { - Engine::automationEditor()->update(); - } -} - - - - -void AutomationPattern::openInAutomationEditor() -{ - Engine::automationEditor()->setCurrentPattern( this ); - Engine::automationEditor()->parentWidget()->show(); - Engine::automationEditor()->show(); - Engine::automationEditor()->setFocus(); } diff --git a/src/core/Note.cpp b/src/core/Note.cpp index fca078587..937f52ac8 100644 --- a/src/core/Note.cpp +++ b/src/core/Note.cpp @@ -209,14 +209,6 @@ void Note::loadSettings( const QDomElement & _this ) -void Note::editDetuningPattern() -{ - createDetuning(); - m_detuning->automationPattern()->openInAutomationEditor(); -} - - - void Note::createDetuning() { diff --git a/src/gui/AutomatableModelView.cpp b/src/gui/AutomatableModelView.cpp index 3a13ed5c7..9485e636d 100644 --- a/src/gui/AutomatableModelView.cpp +++ b/src/gui/AutomatableModelView.cpp @@ -33,6 +33,8 @@ #include "MainWindow.h" #include "StringPairDrag.h" +#include "AutomationEditor.h" + AutomatableModelView::AutomatableModelView( ::Model* model, QWidget* _this ) : @@ -224,7 +226,9 @@ void AutomatableModelViewSlots::removeConnection() void AutomatableModelViewSlots::editSongGlobalAutomation() { - AutomationPattern::globalAutomationPattern( m_amv->modelUntyped() )->openInAutomationEditor(); + Engine::automationEditor()->open( + AutomationPattern::globalAutomationPattern(m_amv->modelUntyped()) + ); } diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index fba27ceb1..cbb3067da 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -203,7 +203,7 @@ void AutomationPatternView::mouseDoubleClickEvent( QMouseEvent * _me ) _me->ignore(); return; } - m_pat->openInAutomationEditor(); + Engine::automationEditor()->open(m_pat); } diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index e7693f5ee..0799bb445 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -118,6 +118,8 @@ AutomationEditor::AutomationEditor() : { m_quantizeModel.addItem( "1/" + QString::number( 1 << i ) ); } + + connect(&m_quantizeModel, SIGNAL(dataChanged()), this, SLOT(setQuantization())); m_quantizeModel.setValue( m_quantizeModel.findText( "1/16" ) ); // add time-line @@ -243,7 +245,6 @@ void AutomationEditor::updateAfterPatternChange() if( !validPattern() ) { - setWindowTitle( tr( "Automation Editor - no pattern" ) ); m_minLevel = m_maxLevel = m_scrollLevel = 0; m_step = 1; resizeEvent( NULL ); @@ -259,8 +260,6 @@ void AutomationEditor::updateAfterPatternChange() // of levels and so on...) resizeEvent( NULL ); - setWindowTitle( tr( "Automation Editor - %1" ).arg( m_pattern->name() ) ); - update(); } @@ -374,22 +373,22 @@ void AutomationEditor::drawLine( int x0, float y0, int x1, float y1 ) int xstep; int ystep; - if( deltax < quantization() ) + if( deltax < AutomationPattern::quantization() ) { return; } - deltax /= quantization(); + deltax /= AutomationPattern::quantization(); float yscale = deltay / ( deltax ); if( x0 < x1) { - xstep = quantization(); + xstep = AutomationPattern::quantization(); } else { - xstep = -( quantization() ); + xstep = -( AutomationPattern::quantization() ); } if( y0 < y1 ) @@ -967,7 +966,7 @@ inline void AutomationEditor::drawAutomationPoint( QPainter & p, timeMap::iterat { int x = xCoordOfTick( it.key() ); int y = yCoordOfLevel( it.value() ); - const int outerRadius = qBound( 2, ( m_ppt * quantization() ) / 576, 5 ); // man, getting this calculation right took forever + const int outerRadius = qBound( 2, ( m_ppt * AutomationPattern::quantization() ) / 576, 5 ); // man, getting this calculation right took forever p.setPen( QPen( vertexColor().lighter( 200 ) ) ); p.setBrush( QBrush( vertexColor() ) ); p.drawEllipse( x - outerRadius, y - outerRadius, outerRadius * 2, outerRadius * 2 ); @@ -1076,10 +1075,10 @@ void AutomationEditor::paintEvent(QPaintEvent * pe ) // 3 independent loops, because quantization might not divide evenly into // exotic denominators (e.g. 7/11 time), which are allowed ATM. // First quantization grid... - for( tick = m_currentPosition - m_currentPosition % quantization(), + for( tick = m_currentPosition - m_currentPosition % AutomationPattern::quantization(), x = xCoordOfTick( tick ); x<=width(); - tick += quantization(), x = xCoordOfTick( tick ) ) + tick += AutomationPattern::quantization(), x = xCoordOfTick( tick ) ) { lineColor.setAlpha( 80 ); p.setPen( lineColor ); @@ -1910,9 +1909,10 @@ void AutomationEditor::zoomingYChanged() -int AutomationEditor::quantization() const +void AutomationEditor::setQuantization() { - return DefaultTicksPerTact / (1 << m_quantizeModel.value()); + int quantization = DefaultTicksPerTact / (1 << m_quantizeModel.value());; + AutomationPattern::setQuantization(quantization); } @@ -2194,10 +2194,20 @@ AutomationEditorWindow::~AutomationEditorWindow() void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) { + if (currentPattern() != nullptr) + { + m_editor->m_pattern->disconnect(this); + } + m_editor->setCurrentPattern(pattern); if (pattern == nullptr) + { + setWindowTitle( tr( "Automation Editor - no pattern" ) ); return; + } + + setWindowTitle( tr( "Automation Editor - %1" ).arg( m_editor->m_pattern->name() ) ); switch(m_editor->m_pattern->progressionType()) { @@ -2212,6 +2222,7 @@ void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) break; } + connect(pattern, SIGNAL(dataChanged()), this, SLOT(update())); connect(pattern, SIGNAL(destroyed()), this, SLOT(clearCurrentPattern())); emit currentPatternChanged(); @@ -2223,10 +2234,12 @@ const AutomationPattern* AutomationEditorWindow::currentPattern() return m_editor->currentPattern(); } - -int AutomationEditorWindow::quantization() const +void AutomationEditorWindow::open(AutomationPattern* pattern) { - return m_editor->quantization(); + setCurrentPattern(pattern); + parentWidget()->show(); + show(); + setFocus(); } QSize AutomationEditorWindow::sizeHint() const @@ -2236,6 +2249,7 @@ QSize AutomationEditorWindow::sizeHint() const void AutomationEditorWindow::clearCurrentPattern() { + m_editor->m_pattern = nullptr; setCurrentPattern(nullptr); } diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 29ccafcdc..93ec5b2ce 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -45,6 +45,7 @@ #include #include +#include "AutomationEditor.h" #include "ActionGroup.h" #include "ConfigManager.h" #include "PianoRoll.h" @@ -1210,7 +1211,9 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) if( m_editMode == ModeEditDetuning && noteUnderMouse() ) { - noteUnderMouse()->editDetuningPattern(); + Note* n = noteUnderMouse(); + if (n->detuning() == NULL) n->createDetuning(); + Engine::automationEditor()->open( noteUnderMouse()->detuning()->automationPattern() ); return; } From 1ee93409d129f8222a509645c31018e93e5373c6 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Wed, 17 Dec 2014 23:25:55 +0100 Subject: [PATCH 028/172] Move Engine' GUI code to new GuiApplication class --- include/AboutDialog.h | 2 +- include/Engine.h | 51 +---------- include/GuiApplication.h | 71 ++++++++++++++++ include/MainWindow.h | 2 +- plugins/MidiImport/MidiImport.cpp | 7 +- .../SpectrumAnalyzerControlDialog.cpp | 3 +- plugins/VstEffect/VstEffectControls.cpp | 3 +- plugins/flp_import/FlpImport.cpp | 5 +- plugins/vestige/vestige.cpp | 3 +- plugins/vst_base/VstPlugin.cpp | 6 +- src/core/Engine.cpp | 39 --------- src/core/Mixer.cpp | 3 +- src/core/Plugin.cpp | 3 +- src/core/Song.cpp | 84 ++++++++++--------- src/core/Track.cpp | 5 +- src/core/TrackContainer.cpp | 4 +- src/core/audio/AudioJack.cpp | 6 +- src/core/main.cpp | 28 ++++--- src/gui/AboutDialog.cpp | 8 +- src/gui/AutomatableModelView.cpp | 5 +- src/gui/AutomationPatternView.cpp | 20 ++--- src/gui/ExportProjectDialog.cpp | 6 +- src/gui/FileBrowser.cpp | 7 +- src/gui/FxMixerView.cpp | 5 +- src/gui/GuiApplication.cpp | 68 +++++++++++++++ src/gui/MainWindow.cpp | 65 +++++++------- src/gui/StringPairDrag.cpp | 6 +- src/gui/TimeLineWidget.cpp | 4 +- src/gui/ToolPluginView.cpp | 3 +- src/gui/editors/AutomationEditor.cpp | 13 +-- src/gui/editors/PianoRoll.cpp | 15 ++-- src/gui/editors/SongEditor.cpp | 46 +++++----- src/gui/widgets/ControllerRackView.cpp | 3 +- src/gui/widgets/ControllerView.cpp | 5 +- src/gui/widgets/EffectView.cpp | 3 +- src/gui/widgets/FxLine.cpp | 7 +- src/gui/widgets/Knob.cpp | 19 +++-- src/gui/widgets/LcdSpinBox.cpp | 3 +- src/gui/widgets/ProjectNotes.cpp | 5 +- src/gui/widgets/TempoSyncKnob.cpp | 13 +-- src/gui/widgets/TextFloat.cpp | 5 +- src/gui/widgets/TimeDisplayWidget.cpp | 3 +- src/gui/widgets/VisualizationWidget.cpp | 5 +- src/tracks/BBTrack.cpp | 11 +-- src/tracks/InstrumentTrack.cpp | 15 ++-- src/tracks/Pattern.cpp | 32 +++---- src/tracks/SampleTrack.cpp | 3 +- 47 files changed, 406 insertions(+), 322 deletions(-) create mode 100644 include/GuiApplication.h create mode 100644 src/gui/GuiApplication.cpp diff --git a/include/AboutDialog.h b/include/AboutDialog.h index 788dc7a11..c07ef6d70 100644 --- a/include/AboutDialog.h +++ b/include/AboutDialog.h @@ -34,7 +34,7 @@ class AboutDialog : public QDialog, public Ui::AboutDialog { public: - AboutDialog( void ); + AboutDialog(QWidget* parent=0); } ; diff --git a/include/Engine.h b/include/Engine.h index 509e668af..322f109c9 100644 --- a/include/Engine.h +++ b/include/Engine.h @@ -97,42 +97,6 @@ public: return s_projectJournal; } - // GUI - static MainWindow * mainWindow() - { - return s_mainWindow; - } - - static FxMixerView * fxMixerView() - { - return s_fxMixerView; - } - - static SongEditorWindow* songEditor() - { - return s_songEditor; - } - - static BBEditor * getBBEditor() - { - return s_bbEditor; - } - - static PianoRollWindow* pianoRoll() - { - return s_pianoRoll; - } - - static ProjectNotes * getProjectNotes() - { - return s_projectNotes; - } - - static AutomationEditorWindow * automationEditor() - { - return s_automationEditor; - } - static Ladspa2LMMS * getLADSPAManager() { return s_ladspaManager; @@ -143,11 +107,6 @@ public: return s_dummyTC; } - static ControllerRackView * getControllerRackView() - { - return s_controllerRackView; - } - static float framesPerTick() { return s_framesPerTick; @@ -182,22 +141,14 @@ private: static BBTrackContainer * s_bbTrackContainer; static ProjectJournal * s_projectJournal; static DummyTrackContainer * s_dummyTC; - static ControllerRackView * s_controllerRackView; - // GUI - static MainWindow * s_mainWindow; - static FxMixerView * s_fxMixerView; - static SongEditorWindow* s_songEditor; - static AutomationEditorWindow * s_automationEditor; - static BBEditor * s_bbEditor; - static PianoRollWindow* s_pianoRoll; - static ProjectNotes * s_projectNotes; static Ladspa2LMMS * s_ladspaManager; static QMap s_pluginFileHandling; static void initPluginFileHandling(); + friend class GuiApplication; } ; diff --git a/include/GuiApplication.h b/include/GuiApplication.h new file mode 100644 index 000000000..c35994e81 --- /dev/null +++ b/include/GuiApplication.h @@ -0,0 +1,71 @@ +/* + * GuiApplication.h + * + * Copyright (c) 2014 Lukas W + * + * This file is part of LMMS - http://lmms.io + * + * 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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#ifndef GUIAPPLICATION_H +#define GUIAPPLICATION_H + +#include "export.h" + +class AutomationEditorWindow; +class BBEditor; +class ControllerRackView; +class FxMixerView; +class MainWindow; +class PianoRollWindow; +class ProjectNotes; +class SongEditorWindow; + +class EXPORT GuiApplication +{ +public: + explicit GuiApplication(); + ~GuiApplication(); + + static GuiApplication* instance(); + + MainWindow* mainWindow() { return m_mainWindow; } + FxMixerView* fxMixerView() { return m_fxMixerView; } + SongEditorWindow* songEditor() { return m_songEditor; } + BBEditor* getBBEditor() { return m_bbEditor; } + PianoRollWindow* pianoRoll() { return m_pianoRoll; } + ProjectNotes* getProjectNotes() { return m_projectNotes; } + AutomationEditorWindow* automationEditor() { return m_automationEditor; } + ControllerRackView* getControllerRackView() { return m_controllerRackView; } + +private: + static GuiApplication* s_instance; + + MainWindow* m_mainWindow; + FxMixerView* m_fxMixerView; + SongEditorWindow* m_songEditor; + AutomationEditorWindow* m_automationEditor; + BBEditor* m_bbEditor; + PianoRollWindow* m_pianoRoll; + ProjectNotes* m_projectNotes; + ControllerRackView* m_controllerRackView; +}; + +#define gui GuiApplication::instance() + +#endif // GUIAPPLICATION_H diff --git a/include/MainWindow.h b/include/MainWindow.h index 9fd9acecd..468a31524 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -178,7 +178,7 @@ private: QList* m_errors; - friend class Engine; + friend class GuiApplication; private slots: diff --git a/plugins/MidiImport/MidiImport.cpp b/plugins/MidiImport/MidiImport.cpp index 853decb32..ec3178d85 100644 --- a/plugins/MidiImport/MidiImport.cpp +++ b/plugins/MidiImport/MidiImport.cpp @@ -37,6 +37,7 @@ #include "ConfigManager.h" #include "Pattern.h" #include "Instrument.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "MidiTime.h" #include "debug.h" @@ -99,7 +100,7 @@ bool MidiImport::tryImport( TrackContainer* tc ) if( Engine::hasGUI() && ConfigManager::inst()->defaultSoundfont().isEmpty() ) { - QMessageBox::information( Engine::mainWindow(), + QMessageBox::information( gui->mainWindow(), tr( "Setup incomplete" ), tr( "You do not have set up a default soundfont in " "the settings dialog (Edit->Settings). " @@ -111,7 +112,7 @@ bool MidiImport::tryImport( TrackContainer* tc ) #else if( Engine::hasGUI() ) { - QMessageBox::information( Engine::mainWindow(), + QMessageBox::information( gui->mainWindow(), tr( "Setup incomplete" ), tr( "You did not compile LMMS with support for " "SoundFont2 player, which is used to add default " @@ -268,7 +269,7 @@ bool MidiImport::readSMF( TrackContainer* tc ) const int preTrackSteps = 2; QProgressDialog pd( TrackContainer::tr( "Importing MIDI-file..." ), - TrackContainer::tr( "Cancel" ), 0, preTrackSteps, Engine::mainWindow() ); + TrackContainer::tr( "Cancel" ), 0, preTrackSteps, gui->mainWindow() ); pd.setWindowTitle( TrackContainer::tr( "Please wait..." ) ); pd.setWindowModality(Qt::WindowModal); pd.setMinimumDuration( 0 ); diff --git a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp index 42aa5ed86..d8b096a3e 100644 --- a/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp +++ b/plugins/SpectrumAnalyzer/SpectrumAnalyzerControlDialog.cpp @@ -27,6 +27,7 @@ #include "SpectrumAnalyzer.h" #include "MainWindow.h" +#include "GuiApplication.h" #include "LedCheckbox.h" #include "embed.h" @@ -59,7 +60,7 @@ public: m_background( PLUGIN_NAME::getIconPixmap( "spectrum_background" ).toImage() ) { setFixedSize( 249, 151 ); - connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); + connect( gui->mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); setAttribute( Qt::WA_OpaquePaintEvent, true ); } diff --git a/plugins/VstEffect/VstEffectControls.cpp b/plugins/VstEffect/VstEffectControls.cpp index 08f8e28ac..8f2594c6a 100644 --- a/plugins/VstEffect/VstEffectControls.cpp +++ b/plugins/VstEffect/VstEffectControls.cpp @@ -28,6 +28,7 @@ #include "VstEffect.h" #include "MainWindow.h" +#include "GuiApplication.h" #include #include @@ -309,7 +310,7 @@ manageVSTEffectView::manageVSTEffectView( VstEffect * _eff, VstEffectControls * m_vi->m_scrollArea = new QScrollArea( widget ); l = new QGridLayout( widget ); - m_vi->m_subWindow = Engine::mainWindow()->workspace()->addSubWindow(new QMdiSubWindow, Qt::SubWindow | + m_vi->m_subWindow = gui->mainWindow()->workspace()->addSubWindow(new QMdiSubWindow, Qt::SubWindow | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint); m_vi->m_subWindow->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::Fixed ); m_vi->m_subWindow->setFixedSize( 960, 300); diff --git a/plugins/flp_import/FlpImport.cpp b/plugins/flp_import/FlpImport.cpp index 8fc869dfc..c23097d2c 100644 --- a/plugins/flp_import/FlpImport.cpp +++ b/plugins/flp_import/FlpImport.cpp @@ -43,6 +43,7 @@ #include "FxMixer.h" #include "FxMixerView.h" #include "GroupBox.h" +#include "GuiApplication.h" #include "Instrument.h" #include "InstrumentTrack.h" #include "EnvelopeAndLfoParameters.h" @@ -1418,7 +1419,7 @@ else { Engine::fxMixer()->createChannel(); } - Engine::fxMixerView()->refreshDisplay(); + gui->fxMixerView()->refreshDisplay(); // set global parameters Engine::getSong()->setMasterVolume( p.mainVolume ); @@ -1426,7 +1427,7 @@ else Engine::getSong()->setTempo( p.tempo ); // set project notes - Engine::getProjectNotes()->setText( p.projectNotes ); + gui->getProjectNotes()->setText( p.projectNotes ); progressDialog.setMaximum( p.maxPatterns + p.channels.size() + diff --git a/plugins/vestige/vestige.cpp b/plugins/vestige/vestige.cpp index f1b9fffd9..4c6870c69 100644 --- a/plugins/vestige/vestige.cpp +++ b/plugins/vestige/vestige.cpp @@ -38,6 +38,7 @@ #include "InstrumentTrack.h" #include "VstPlugin.h" #include "MainWindow.h" +#include "GuiApplication.h" #include "PixmapButton.h" #include "StringPairDrag.h" #include "TextFloat.h" @@ -873,7 +874,7 @@ manageVestigeInstrumentView::manageVestigeInstrumentView( Instrument * _instrume widget = new QWidget(this); l = new QGridLayout( this ); - m_vi->m_subWindow = Engine::mainWindow()->workspace()->addSubWindow(new QMdiSubWindow, Qt::SubWindow | + m_vi->m_subWindow = gui->mainWindow()->workspace()->addSubWindow(new QMdiSubWindow, Qt::SubWindow | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint); m_vi->m_subWindow->setSizePolicy( QSizePolicy::Fixed, QSizePolicy::MinimumExpanding ); m_vi->m_subWindow->setFixedWidth( 960 ); diff --git a/plugins/vst_base/VstPlugin.cpp b/plugins/vst_base/VstPlugin.cpp index 0cc604d63..3f93b0ee5 100644 --- a/plugins/vst_base/VstPlugin.cpp +++ b/plugins/vst_base/VstPlugin.cpp @@ -46,7 +46,7 @@ #endif #include "ConfigManager.h" -#include "Engine.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "Song.h" #include "templates.h" @@ -188,7 +188,7 @@ void VstPlugin::tryLoad( const QString &remoteVstPluginExecutable ) { target->setFixedSize( m_pluginGeometry ); vstSubWin * sw = new vstSubWin( - Engine::mainWindow()->workspace() ); + gui->mainWindow()->workspace() ); sw->setWidget( helper ); helper->setWindowTitle( name() ); m_pluginWidget = helper; @@ -237,7 +237,7 @@ void VstPlugin::showEditor( QWidget * _parent, bool isEffect ) if( _parent == NULL ) { vstSubWin * sw = new vstSubWin( - Engine::mainWindow()->workspace() ); + gui->mainWindow()->workspace() ); if( isEffect ) { sw->setAttribute( Qt::WA_TranslucentBackground ); diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index 8db5d74c4..e569e612e 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -24,24 +24,17 @@ #include "Engine.h" -#include "AutomationEditor.h" -#include "BBEditor.h" #include "BBTrackContainer.h" #include "ConfigManager.h" -#include "ControllerRackView.h" #include "FxMixer.h" -#include "FxMixerView.h" #include "InstrumentTrack.h" #include "Ladspa2LMMS.h" -#include "MainWindow.h" #include "Mixer.h" #include "Pattern.h" -#include "PianoRoll.h" #include "PresetPreviewPlayHandle.h" #include "ProjectJournal.h" #include "ProjectNotes.h" #include "Plugin.h" -#include "SongEditor.h" #include "Song.h" #include "BandLimitedWave.h" @@ -51,19 +44,11 @@ bool Engine::s_suppressMessages = false; float Engine::s_framesPerTick; Mixer* Engine::s_mixer = NULL; FxMixer * Engine::s_fxMixer = NULL; -FxMixerView * Engine::s_fxMixerView = NULL; -MainWindow * Engine::s_mainWindow = NULL; BBTrackContainer * Engine::s_bbTrackContainer = NULL; Song * Engine::s_song = NULL; -SongEditorWindow* Engine::s_songEditor = NULL; -AutomationEditorWindow * Engine::s_automationEditor = NULL; -BBEditor * Engine::s_bbEditor = NULL; -PianoRollWindow* Engine::s_pianoRoll = NULL; -ProjectNotes * Engine::s_projectNotes = NULL; ProjectJournal * Engine::s_projectJournal = NULL; Ladspa2LMMS * Engine::s_ladspaManager = NULL; DummyTrackContainer * Engine::s_dummyTC = NULL; -ControllerRackView * Engine::s_controllerRackView = NULL; QMap Engine::s_pluginFileHandling; @@ -90,20 +75,6 @@ void Engine::init( const bool _has_gui ) s_mixer->initDevices(); - if( s_hasGUI ) - { - s_mainWindow = new MainWindow; - s_songEditor = new SongEditorWindow( s_song ); - s_fxMixerView = new FxMixerView; - s_controllerRackView = new ControllerRackView; - s_projectNotes = new ProjectNotes; - s_bbEditor = new BBEditor( s_bbTrackContainer ); - s_pianoRoll = new PianoRollWindow(); - s_automationEditor = new AutomationEditorWindow; - - s_mainWindow->finalize(); - } - PresetPreviewPlayHandle::init(); s_dummyTC = new DummyTrackContainer; @@ -118,15 +89,7 @@ void Engine::destroy() s_projectJournal->stopAllJournalling(); s_mixer->stopProcessing(); - deleteHelper( &s_projectNotes ); - deleteHelper( &s_songEditor ); - deleteHelper( &s_bbEditor ); - deleteHelper( &s_pianoRoll ); - deleteHelper( &s_automationEditor ); - deleteHelper( &s_fxMixerView ); - PresetPreviewPlayHandle::cleanup(); - InstrumentTrackView::cleanupWindowCache(); s_song->clearProject(); @@ -141,8 +104,6 @@ void Engine::destroy() //delete ConfigManager::inst(); deleteHelper( &s_projectJournal ); - s_mainWindow = NULL; - deleteHelper( &s_song ); delete ConfigManager::inst(); diff --git a/src/core/Mixer.cpp b/src/core/Mixer.cpp index 0630b8e47..b6aff0446 100644 --- a/src/core/Mixer.cpp +++ b/src/core/Mixer.cpp @@ -37,6 +37,7 @@ #include "Engine.h" #include "ConfigManager.h" #include "SamplePlayHandle.h" +#include "GuiApplication.h" #include "PianoRoll.h" // platform-specific audio-interface-classes @@ -323,7 +324,7 @@ const surroundSampleFrame * Mixer::renderNextBuffer() Song::playPos p = Engine::getSong()->getPlayPos( Song::Mode_PlayPattern ); if( Engine::getSong()->playMode() == Song::Mode_PlayPattern && - Engine::pianoRoll()->isRecording() == true && + gui->pianoRoll()->isRecording() == true && p != last_metro_pos ) { if ( p.getTicks() % (MidiTime::ticksPerTact() / 1 ) == 0 ) diff --git a/src/core/Plugin.cpp b/src/core/Plugin.cpp index 769ed04f2..ebfb62cb1 100644 --- a/src/core/Plugin.cpp +++ b/src/core/Plugin.cpp @@ -30,6 +30,7 @@ #include "Plugin.h" #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "Mixer.h" #include "ConfigManager.h" #include "DummyPlugin.h" @@ -127,7 +128,7 @@ Plugin * Plugin::instantiate( const QString & pluginName, Model * parent, void Plugin::collectErrorForUI( QString err_msg ) { - Engine::mainWindow()->collectError( err_msg ); + gui->mainWindow()->collectError( err_msg ); } diff --git a/src/core/Song.cpp b/src/core/Song.cpp index bd6438de6..fc54689d8 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -22,6 +22,8 @@ * */ +#include "Song.h" + #include #include #include @@ -30,7 +32,6 @@ #include -#include "Song.h" #include "AutomationTrack.h" #include "AutomationEditor.h" #include "BBEditor.h" @@ -44,6 +45,7 @@ #include "ExportProjectDialog.h" #include "FxMixer.h" #include "FxMixerView.h" +#include "GuiApplication.h" #include "ImportFilter.h" #include "InstrumentTrack.h" #include "MainWindow.h" @@ -727,17 +729,17 @@ void Song::clearProject() Engine::mixer()->lock(); - if( Engine::getBBEditor() ) + if( gui->getBBEditor() ) { - Engine::getBBEditor()->trackContainerView()->clearAllTracks(); + gui->getBBEditor()->trackContainerView()->clearAllTracks(); } - if( Engine::songEditor() ) + if( gui->songEditor() ) { - Engine::songEditor()->m_editor->clearAllTracks(); + gui->songEditor()->m_editor->clearAllTracks(); } - if( Engine::fxMixerView() ) + if( gui->fxMixerView() ) { - Engine::fxMixerView()->clear(); + gui->fxMixerView()->clear(); } QCoreApplication::sendPostedEvents(); Engine::getBBTrackContainer()->clearAllTracks(); @@ -745,14 +747,14 @@ void Song::clearProject() Engine::fxMixer()->clear(); - if( Engine::automationEditor() ) + if( gui->automationEditor() ) { - Engine::automationEditor()->setCurrentPattern( NULL ); + gui->automationEditor()->setCurrentPattern( NULL ); } - if( Engine::pianoRoll() ) + if( gui->pianoRoll() ) { - Engine::pianoRoll()->reset(); + gui->pianoRoll()->reset(); } m_tempoModel.reset(); @@ -768,9 +770,9 @@ void Song::clearProject() Engine::mixer()->unlock(); - if( Engine::getProjectNotes() ) + if( gui->getProjectNotes() ) { - Engine::getProjectNotes()->clear(); + gui->getProjectNotes()->clear(); } // Move to function @@ -849,9 +851,9 @@ void Song::createNewProject() m_modified = false; - if( Engine::mainWindow() ) + if( gui->mainWindow() ) { - Engine::mainWindow()->resetWindowTitle(); + gui->mainWindow()->resetWindowTitle(); } } @@ -865,9 +867,9 @@ void Song::createNewProjectFromTemplate( const QString & _template ) // saving... m_fileName = m_oldFileName = ""; // update window title - if( Engine::mainWindow() ) + if( gui->mainWindow() ) { - Engine::mainWindow()->resetWindowTitle(); + gui->mainWindow()->resetWindowTitle(); } } @@ -883,7 +885,7 @@ void Song::loadProject( const QString & _file_name ) m_loadingProject = true; Engine::projectJournal()->setJournalling( false ); - Engine::mainWindow()->clearErrors(); + gui->mainWindow()->clearErrors(); m_fileName = _file_name; m_oldFileName = _file_name; @@ -931,7 +933,7 @@ void Song::loadProject( const QString & _file_name ) if( Engine::hasGUI() ) { // refresh FxMixerView - Engine::fxMixerView()->refreshDisplay(); + gui->fxMixerView()->refreshDisplay(); } } @@ -950,21 +952,21 @@ void Song::loadProject( const QString & _file_name ) } else if( Engine::hasGUI() ) { - if( node.nodeName() == Engine::getControllerRackView()->nodeName() ) + if( node.nodeName() == gui->getControllerRackView()->nodeName() ) { - Engine::getControllerRackView()->restoreState( node.toElement() ); + gui->getControllerRackView()->restoreState( node.toElement() ); } - else if( node.nodeName() == Engine::pianoRoll()->nodeName() ) + else if( node.nodeName() == gui->pianoRoll()->nodeName() ) { - Engine::pianoRoll()->restoreState( node.toElement() ); + gui->pianoRoll()->restoreState( node.toElement() ); } - else if( node.nodeName() == Engine::automationEditor()->m_editor->nodeName() ) + else if( node.nodeName() == gui->automationEditor()->m_editor->nodeName() ) { - Engine::automationEditor()->m_editor->restoreState( node.toElement() ); + gui->automationEditor()->m_editor->restoreState( node.toElement() ); } - else if( node.nodeName() == Engine::getProjectNotes()->nodeName() ) + else if( node.nodeName() == gui->getProjectNotes()->nodeName() ) { - Engine::getProjectNotes()->SerializingObject::restoreState( node.toElement() ); + gui->getProjectNotes()->SerializingObject::restoreState( node.toElement() ); } else if( node.nodeName() == m_playPos[Mode_PlaySong].m_timeLine->nodeName() ) { @@ -995,14 +997,14 @@ void Song::loadProject( const QString & _file_name ) emit projectLoaded(); - Engine::mainWindow()->showErrors( tr( "The following errors occured while loading: " ) ); + gui->mainWindow()->showErrors( tr( "The following errors occured while loading: " ) ); m_loadingProject = false; m_modified = false; - if( Engine::mainWindow() ) + if( gui->mainWindow() ) { - Engine::mainWindow()->resetWindowTitle(); + gui->mainWindow()->resetWindowTitle(); } } @@ -1025,10 +1027,10 @@ bool Song::saveProjectFile( const QString & _filename ) Engine::fxMixer()->saveState( dataFile, dataFile.content() ); if( Engine::hasGUI() ) { - Engine::getControllerRackView()->saveState( dataFile, dataFile.content() ); - Engine::pianoRoll()->saveState( dataFile, dataFile.content() ); - Engine::automationEditor()->m_editor->saveState( dataFile, dataFile.content() ); - Engine::getProjectNotes()->SerializingObject::saveState( dataFile, dataFile.content() ); + gui->getControllerRackView()->saveState( dataFile, dataFile.content() ); + gui->pianoRoll()->saveState( dataFile, dataFile.content() ); + gui->automationEditor()->m_editor->saveState( dataFile, dataFile.content() ); + gui->getProjectNotes()->SerializingObject::saveState( dataFile, dataFile.content() ); m_playPos[Mode_PlaySong].m_timeLine->saveState( dataFile, dataFile.content() ); } @@ -1053,7 +1055,7 @@ bool Song::guiSaveProject() 2000 ); ConfigManager::inst()->addRecentlyOpenedProject( m_fileName ); m_modified = false; - Engine::mainWindow()->resetWindowTitle(); + gui->mainWindow()->resetWindowTitle(); } else if( Engine::hasGUI() ) { @@ -1156,7 +1158,7 @@ void Song::exportProject(bool multiExport) { if( isEmpty() ) { - QMessageBox::information( Engine::mainWindow(), + QMessageBox::information( gui->mainWindow(), tr( "Empty project" ), tr( "This project is empty so exporting makes " "no sense. Please put some items into " @@ -1164,7 +1166,7 @@ void Song::exportProject(bool multiExport) return; } - FileDialog efd( Engine::mainWindow() ); + FileDialog efd( gui->mainWindow() ); if (multiExport) { efd.setFileMode( FileDialog::Directory); @@ -1224,7 +1226,7 @@ void Song::exportProject(bool multiExport) } const QString export_file_name = efd.selectedFiles()[0] + suffix; - ExportProjectDialog epd( export_file_name, Engine::mainWindow(), multiExport ); + ExportProjectDialog epd( export_file_name, gui->mainWindow(), multiExport ); epd.exec(); } } @@ -1245,10 +1247,10 @@ void Song::setModified() if( !m_loadingProject ) { m_modified = true; - if( Engine::mainWindow() && - QThread::currentThread() == Engine::mainWindow()->thread() ) + if( Engine::hasGUI() && gui->mainWindow() && + QThread::currentThread() == gui->mainWindow()->thread() ) { - Engine::mainWindow()->resetWindowTitle(); + gui->mainWindow()->resetWindowTitle(); } } } diff --git a/src/core/Track.cpp b/src/core/Track.cpp index a594ffdba..6d1e5dfef 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -56,6 +56,7 @@ #include "Clipboard.h" #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "MainWindow.h" @@ -1134,7 +1135,7 @@ void TrackContentWidget::update() */ void TrackContentWidget::changePosition( const MidiTime & _new_pos ) { - if( m_trackView->trackContainerView() == Engine::getBBEditor()->trackContainerView() ) + if( m_trackView->trackContainerView() == gui->getBBEditor()->trackContainerView() ) { const int cur_bb = Engine::getBBTrackContainer()->currentBB(); setUpdatesEnabled( false ); @@ -1466,7 +1467,7 @@ void TrackContentWidget::paintEvent( QPaintEvent * _pe ) int ppt = static_cast( tcv->pixelsPerTact() ); QPainter p( this ); // Don't draw background on BB-Editor - if( m_trackView->trackContainerView() != Engine::getBBEditor()->trackContainerView() ) + if( m_trackView->trackContainerView() != gui->getBBEditor()->trackContainerView() ) { p.drawTiledPixmap( rect(), m_background, QPoint( tcv->currentPosition().getTact() * ppt, 0 ) ); diff --git a/src/core/TrackContainer.cpp b/src/core/TrackContainer.cpp index 400113b88..2cf02e28c 100644 --- a/src/core/TrackContainer.cpp +++ b/src/core/TrackContainer.cpp @@ -30,7 +30,7 @@ #include "TrackContainer.h" #include "InstrumentTrack.h" -#include "Engine.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "Song.h" @@ -89,7 +89,7 @@ void TrackContainer::loadSettings( const QDomElement & _this ) pd = new QProgressDialog( tr( "Loading project..." ), tr( "Cancel" ), 0, _this.childNodes().count(), - Engine::mainWindow() ); + gui->mainWindow() ); pd->setWindowModality( Qt::ApplicationModal ); pd->setWindowTitle( tr( "Please wait..." ) ); pd->show(); diff --git a/src/core/audio/AudioJack.cpp b/src/core/audio/AudioJack.cpp index 004f1e504..ac594aa06 100644 --- a/src/core/audio/AudioJack.cpp +++ b/src/core/audio/AudioJack.cpp @@ -32,8 +32,8 @@ #include -#include "debug.h" #include "Engine.h" +#include "GuiApplication.h" #include "templates.h" #include "gui_templates.h" #include "ConfigManager.h" @@ -106,7 +106,7 @@ void AudioJack::restartAfterZombified() { m_active = false; startProcessing(); - QMessageBox::information( Engine::mainWindow(), + QMessageBox::information( gui->mainWindow(), tr( "JACK client restarted" ), tr( "LMMS was kicked by JACK for some reason. " "Therefore the JACK backend of LMMS has been " @@ -115,7 +115,7 @@ void AudioJack::restartAfterZombified() } else { - QMessageBox::information( Engine::mainWindow(), + QMessageBox::information( gui->mainWindow(), tr( "JACK server down" ), tr( "The JACK server seems to have been shutdown " "and starting a new instance failed. " diff --git a/src/core/main.cpp b/src/core/main.cpp index 08042ef89..369a580db 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -69,6 +69,7 @@ #include "NotePlayHandle.h" #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "LmmsStyle.h" #include "ImportFilter.h" #include "MainWindow.h" @@ -102,7 +103,7 @@ int main( int argc, char * * argv ) // initialize memory managers MemoryManager::init(); NotePlayHandleManager::init(); - + // intialize RNG srand( getpid() + time( 0 ) ); @@ -437,9 +438,8 @@ int main( int argc, char * * argv ) qApp->processEvents(); // init central engine which handles all components of LMMS - Engine::init(); - - splashScreen.hide(); + Engine::init(false); + new GuiApplication(); // re-intialize RNG - shared libraries might have srand() or // srandom() calls in their init procedure @@ -449,7 +449,7 @@ int main( int argc, char * * argv ) QString recoveryFile = ConfigManager::inst()->recoveryFile(); if( QFileInfo(recoveryFile).exists() && - QMessageBox::question( Engine::mainWindow(), MainWindow::tr( "Project recovery" ), + QMessageBox::question( gui->mainWindow(), MainWindow::tr( "Project recovery" ), MainWindow::tr( "It looks like the last session did not end properly. " "Do you want to recover the project of this session?" ), QMessageBox::Yes | QMessageBox::No ) == QMessageBox::Yes ) @@ -460,10 +460,10 @@ int main( int argc, char * * argv ) // we try to load given file if( !file_to_load.isEmpty() ) { - Engine::mainWindow()->show(); + gui->mainWindow()->show(); if( fullscreen ) { - Engine::mainWindow()->showMaximized(); + gui->mainWindow()->showMaximized(); } if( file_to_load == recoveryFile ) { @@ -482,10 +482,10 @@ int main( int argc, char * * argv ) return 0; } - Engine::mainWindow()->show(); + gui->mainWindow()->show(); if( fullscreen ) { - Engine::mainWindow()->showMaximized(); + gui->mainWindow()->showMaximized(); } } else @@ -494,12 +494,14 @@ int main( int argc, char * * argv ) // [Settel] workaround: showMaximized() doesn't work with // FVWM2 unless the window is already visible -> show() first - Engine::mainWindow()->show(); + gui->mainWindow()->show(); if( fullscreen ) { - Engine::mainWindow()->showMaximized(); + gui->mainWindow()->showMaximized(); } } + + splashScreen.finish(gui->mainWindow()); } else { @@ -536,9 +538,9 @@ int main( int argc, char * * argv ) const int ret = app->exec(); delete app; - + // cleanup memory managers MemoryManager::cleanup(); - + return( ret ); } diff --git a/src/gui/AboutDialog.cpp b/src/gui/AboutDialog.cpp index 5b152e07d..6d39a8e46 100644 --- a/src/gui/AboutDialog.cpp +++ b/src/gui/AboutDialog.cpp @@ -2,7 +2,7 @@ * AboutDialog.cpp - implementation of about-dialog * * Copyright (c) 2004-2008 Tobias Doerffel - * + * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or @@ -26,14 +26,12 @@ #include "lmmsversion.h" #include "AboutDialog.h" #include "embed.h" -#include "Engine.h" -#include "MainWindow.h" #include "versioninfo.h" -AboutDialog::AboutDialog() : - QDialog( Engine::mainWindow() ), +AboutDialog::AboutDialog(QWidget* parent) : + QDialog(parent), Ui::AboutDialog() { setupUi( this ); diff --git a/src/gui/AutomatableModelView.cpp b/src/gui/AutomatableModelView.cpp index 9485e636d..453d7e013 100644 --- a/src/gui/AutomatableModelView.cpp +++ b/src/gui/AutomatableModelView.cpp @@ -30,6 +30,7 @@ #include "ControllerConnectionDialog.h" #include "ControllerConnection.h" #include "embed.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "StringPairDrag.h" @@ -179,7 +180,7 @@ void AutomatableModelViewSlots::execConnectionDialog() AutomatableModel* m = m_amv->modelUntyped(); m->displayName(); - ControllerConnectionDialog d( (QWidget*) Engine::mainWindow(), m ); + ControllerConnectionDialog d( gui->mainWindow(), m ); if( d.exec() == 1 ) { @@ -226,7 +227,7 @@ void AutomatableModelViewSlots::removeConnection() void AutomatableModelViewSlots::editSongGlobalAutomation() { - Engine::automationEditor()->open( + gui->automationEditor()->open( AutomationPattern::globalAutomationPattern(m_amv->modelUntyped()) ); } diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index cbb3067da..e777bdc07 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -30,7 +30,7 @@ #include "AutomationEditor.h" #include "AutomationPattern.h" #include "embed.h" -#include "Engine.h" +#include "GuiApplication.h" #include "gui_templates.h" #include "ProjectJournal.h" #include "RenameDialog.h" @@ -49,7 +49,7 @@ AutomationPatternView::AutomationPatternView( AutomationPattern * _pattern, { connect( m_pat, SIGNAL( dataChanged() ), this, SLOT( update() ) ); - connect( Engine::automationEditor(), SIGNAL( currentPatternChanged() ), + connect( gui->automationEditor(), SIGNAL( currentPatternChanged() ), this, SLOT( update() ) ); setAttribute( Qt::WA_OpaquePaintEvent, true ); @@ -123,9 +123,9 @@ void AutomationPatternView::disconnectObject( QAction * _a ) update(); //If automation editor is opened, update its display after disconnection - if( Engine::automationEditor() ) + if( gui->automationEditor() ) { - Engine::automationEditor()->m_editor->updateAfterPatternChange(); + gui->automationEditor()->m_editor->updateAfterPatternChange(); } //if there is no more connection connected to the AutomationPattern @@ -203,7 +203,7 @@ void AutomationPatternView::mouseDoubleClickEvent( QMouseEvent * _me ) _me->ignore(); return; } - Engine::automationEditor()->open(m_pat); + gui->automationEditor()->open(m_pat); } @@ -242,7 +242,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * ) lingrad.setColorAt( 0, c ); p.setBrush( lingrad ); - if( Engine::automationEditor()->currentPattern() == m_pat ) + if( gui->automationEditor()->currentPattern() == m_pat ) p.setPen( c.lighter( 160 ) ); else p.setPen( c.lighter( 130 ) ); @@ -325,7 +325,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * ) // outer edge p.setBrush( QBrush() ); - if( Engine::automationEditor()->currentPattern() == m_pat ) + if( gui->automationEditor()->currentPattern() == m_pat ) p.setPen( c.lighter( 130 ) ); else p.setPen( c.darker( 300 ) ); @@ -386,10 +386,10 @@ void AutomationPatternView::dropEvent( QDropEvent * _de ) } update(); - if( Engine::automationEditor() && - Engine::automationEditor()->currentPattern() == m_pat ) + if( gui->automationEditor() && + gui->automationEditor()->currentPattern() == m_pat ) { - Engine::automationEditor()->setCurrentPattern( m_pat ); + gui->automationEditor()->setCurrentPattern( m_pat ); } } else diff --git a/src/gui/ExportProjectDialog.cpp b/src/gui/ExportProjectDialog.cpp index 7241216b6..67e13eced 100644 --- a/src/gui/ExportProjectDialog.cpp +++ b/src/gui/ExportProjectDialog.cpp @@ -28,7 +28,7 @@ #include "ExportProjectDialog.h" #include "Song.h" -#include "Engine.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "BBTrackContainer.h" #include "BBTrack.h" @@ -278,7 +278,7 @@ void ExportProjectDialog::render( ProjectRenderer* renderer ) connect( renderer, SIGNAL( progressChanged( int ) ), progressBar, SLOT( setValue( int ) ) ); connect( renderer, SIGNAL( progressChanged( int ) ), this, SLOT( updateTitleBar( int ) )) ; connect( renderer, SIGNAL( finished() ), this, SLOT( accept() ) ); - connect( renderer, SIGNAL( finished() ), Engine::mainWindow(), SLOT( resetWindowTitle() ) ); + connect( renderer, SIGNAL( finished() ), gui->mainWindow(), SLOT( resetWindowTitle() ) ); renderer->startProcessing(); } @@ -337,6 +337,6 @@ void ExportProjectDialog::startBtnClicked() void ExportProjectDialog::updateTitleBar( int _prog ) { - Engine::mainWindow()->setWindowTitle( + gui->mainWindow()->setWindowTitle( tr( "Rendering: %1%" ).arg( _prog ) ); } diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index ac84e404a..e8effe9fb 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -38,6 +38,7 @@ #include "debug.h" #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "gui_templates.h" #include "ImportFilter.h" #include "Instrument.h" @@ -549,7 +550,7 @@ void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it ) switch( f->handling() ) { case FileItem::LoadAsProject: - if( Engine::mainWindow()->mayChangeProject() ) + if( gui->mainWindow()->mayChangeProject() ) { Engine::getSong()->loadProject( f->fullName() ); } @@ -580,7 +581,7 @@ void FileBrowserTreeWidget::handleFile(FileItem * f, InstrumentTrack * it ) case FileItem::ImportAsProject: if( f->type() == FileItem::FlpFile && - !Engine::mainWindow()->mayChangeProject() ) + !gui->mainWindow()->mayChangeProject() ) { break; } @@ -663,7 +664,7 @@ void FileBrowserTreeWidget::sendToActiveInstrumentTrack( void ) { // get all windows opened in the workspace QList pl = - Engine::mainWindow()->workspace()-> + gui->mainWindow()->workspace()-> subWindowList( QMdiArea::StackingOrder ); QListIterator w( pl ); w.toBack(); diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index aefdcf274..cb87ad84b 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -41,6 +41,7 @@ #include "Knob.h" #include "Engine.h" #include "embed.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "gui_templates.h" #include "InstrumentTrack.h" @@ -141,13 +142,13 @@ FxMixerView::FxMixerView() : updateGeometry(); // timer for updating faders - connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), + connect( gui->mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( updateFaders() ) ); // add ourself to workspace QMdiSubWindow * subWin = - Engine::mainWindow()->workspace()->addSubWindow( this ); + gui->mainWindow()->workspace()->addSubWindow( this ); Qt::WindowFlags flags = subWin->windowFlags(); flags &= ~Qt::WindowMaximizeButtonHint; subWin->setWindowFlags( flags ); diff --git a/src/gui/GuiApplication.cpp b/src/gui/GuiApplication.cpp new file mode 100644 index 000000000..ef62b2b57 --- /dev/null +++ b/src/gui/GuiApplication.cpp @@ -0,0 +1,68 @@ +/* + * GuiApplication.cpp + * + * Copyright (c) 2014 Lukas W + * + * This file is part of LMMS - http://lmms.io + * + * 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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "GuiApplication.h" + +#include "AutomationEditor.h" +#include "BBEditor.h" +#include "ControllerRackView.h" +#include "FxMixerView.h" +#include "InstrumentTrack.h" +#include "MainWindow.h" +#include "PianoRoll.h" +#include "ProjectNotes.h" +#include "SongEditor.h" + +#include "QApplication" + +GuiApplication* GuiApplication::s_instance = nullptr; + +GuiApplication* GuiApplication::instance() +{ + return s_instance; +} + +GuiApplication::GuiApplication() +{ + s_instance = this; + + m_mainWindow = new MainWindow; + + m_songEditor = new SongEditorWindow(Engine::getSong()); + m_fxMixerView = new FxMixerView; + m_controllerRackView = new ControllerRackView; + m_projectNotes = new ProjectNotes; + m_bbEditor = new BBEditor(Engine::getBBTrackContainer()); + m_pianoRoll = new PianoRollWindow(); + m_automationEditor = new AutomationEditorWindow; + + m_mainWindow->finalize(); + + Engine::s_hasGUI = true; +} + +GuiApplication::~GuiApplication() +{ + InstrumentTrackView::cleanupWindowCache(); +} diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 6e45f37f1..296d27b63 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -22,6 +22,7 @@ * */ +#include "MainWindow.h" #include #include @@ -36,7 +37,7 @@ #include #include "lmmsversion.h" -#include "MainWindow.h" +#include "GuiApplication.h" #include "BBEditor.h" #include "SongEditor.h" #include "Song.h" @@ -533,10 +534,10 @@ void MainWindow::finalize() // Add editor subwindows for (QWidget* widget : QList{ - Engine::automationEditor(), - Engine::getBBEditor(), - Engine::pianoRoll(), - Engine::songEditor() + gui->automationEditor(), + gui->getBBEditor(), + gui->pianoRoll(), + gui->songEditor() }) { QMdiSubWindow* window = workspace()->addSubWindow(widget); @@ -545,13 +546,13 @@ void MainWindow::finalize() window->resize(widget->sizeHint()); } - Engine::automationEditor()->parentWidget()->hide(); - Engine::getBBEditor()->parentWidget()->move( 610, 5 ); - Engine::getBBEditor()->parentWidget()->show(); - Engine::pianoRoll()->parentWidget()->move(5, 5); - Engine::pianoRoll()->parentWidget()->hide(); - Engine::songEditor()->parentWidget()->move(5, 5); - Engine::songEditor()->parentWidget()->show(); + gui->automationEditor()->parentWidget()->hide(); + gui->getBBEditor()->parentWidget()->move( 610, 5 ); + gui->getBBEditor()->parentWidget()->show(); + gui->pianoRoll()->parentWidget()->move(5, 5); + gui->pianoRoll()->parentWidget()->hide(); + gui->songEditor()->parentWidget()->move(5, 5); + gui->songEditor()->parentWidget()->show(); } @@ -866,7 +867,7 @@ void MainWindow::showSettingsDialog() void MainWindow::aboutLMMS() { - AboutDialog().exec(); + AboutDialog(this).exec(); } @@ -923,10 +924,10 @@ void MainWindow::refocus() { QList editors; editors - << Engine::songEditor()->parentWidget() - << Engine::getBBEditor()->parentWidget() - << Engine::pianoRoll()->parentWidget() - << Engine::automationEditor()->parentWidget(); + << gui->songEditor()->parentWidget() + << gui->getBBEditor()->parentWidget() + << gui->pianoRoll()->parentWidget() + << gui->automationEditor()->parentWidget(); bool found = false; QList::Iterator editor; @@ -948,7 +949,7 @@ void MainWindow::refocus() void MainWindow::toggleBBEditorWin( bool forceShow ) { - toggleWindow( Engine::getBBEditor(), forceShow ); + toggleWindow( gui->getBBEditor(), forceShow ); } @@ -956,7 +957,7 @@ void MainWindow::toggleBBEditorWin( bool forceShow ) void MainWindow::toggleSongEditorWin() { - toggleWindow( Engine::songEditor() ); + toggleWindow( gui->songEditor() ); } @@ -964,7 +965,7 @@ void MainWindow::toggleSongEditorWin() void MainWindow::toggleProjectNotesWin() { - toggleWindow( Engine::getProjectNotes() ); + toggleWindow( gui->getProjectNotes() ); } @@ -972,7 +973,7 @@ void MainWindow::toggleProjectNotesWin() void MainWindow::togglePianoRollWin() { - toggleWindow( Engine::pianoRoll() ); + toggleWindow( gui->pianoRoll() ); } @@ -980,7 +981,7 @@ void MainWindow::togglePianoRollWin() void MainWindow::toggleAutomationEditorWin() { - toggleWindow( Engine::automationEditor() ); + toggleWindow( gui->automationEditor() ); } @@ -988,7 +989,7 @@ void MainWindow::toggleAutomationEditorWin() void MainWindow::toggleFxMixerWin() { - toggleWindow( Engine::fxMixerView() ); + toggleWindow( gui->fxMixerView() ); } @@ -996,7 +997,7 @@ void MainWindow::toggleFxMixerWin() void MainWindow::toggleControllerRack() { - toggleWindow( Engine::getControllerRackView() ); + toggleWindow( gui->getControllerRackView() ); } @@ -1004,29 +1005,29 @@ void MainWindow::toggleControllerRack() void MainWindow::updatePlayPauseIcons() { - Engine::songEditor()->setPauseIcon( false ); - Engine::automationEditor()->setPauseIcon( false ); - Engine::getBBEditor()->setPauseIcon( false ); - Engine::pianoRoll()->setPauseIcon( false ); + gui->songEditor()->setPauseIcon( false ); + gui->automationEditor()->setPauseIcon( false ); + gui->getBBEditor()->setPauseIcon( false ); + gui->pianoRoll()->setPauseIcon( false ); if( Engine::getSong()->isPlaying() ) { switch( Engine::getSong()->playMode() ) { case Song::Mode_PlaySong: - Engine::songEditor()->setPauseIcon( true ); + gui->songEditor()->setPauseIcon( true ); break; case Song::Mode_PlayAutomationPattern: - Engine::automationEditor()->setPauseIcon( true ); + gui->automationEditor()->setPauseIcon( true ); break; case Song::Mode_PlayBB: - Engine::getBBEditor()->setPauseIcon( true ); + gui->getBBEditor()->setPauseIcon( true ); break; case Song::Mode_PlayPattern: - Engine::pianoRoll()->setPauseIcon( true ); + gui->pianoRoll()->setPauseIcon( true ); break; default: diff --git a/src/gui/StringPairDrag.cpp b/src/gui/StringPairDrag.cpp index ac0347530..244362a70 100644 --- a/src/gui/StringPairDrag.cpp +++ b/src/gui/StringPairDrag.cpp @@ -31,7 +31,7 @@ #include "StringPairDrag.h" -#include "Engine.h" +#include "GuiApplication.h" #include "MainWindow.h" @@ -64,9 +64,9 @@ StringPairDrag::~StringPairDrag() { // during a drag, we might have lost key-press-events, so reset // modifiers of main-win - if( Engine::mainWindow() ) + if( gui->mainWindow() ) { - Engine::mainWindow()->clearKeyModifiers(); + gui->mainWindow()->clearKeyModifiers(); } } diff --git a/src/gui/TimeLineWidget.cpp b/src/gui/TimeLineWidget.cpp index 624d0df3e..5966e7d51 100644 --- a/src/gui/TimeLineWidget.cpp +++ b/src/gui/TimeLineWidget.cpp @@ -37,7 +37,7 @@ #include "Engine.h" #include "templates.h" #include "NStateButton.h" -#include "MainWindow.h" +#include "GuiApplication.h" #include "TextFloat.h" @@ -112,7 +112,7 @@ TimeLineWidget::TimeLineWidget( const int _xoff, const int _yoff, const float _p TimeLineWidget::~TimeLineWidget() { - if( Engine::songEditor() ) + if( gui->songEditor() ) { m_pos.m_timeLine = NULL; } diff --git a/src/gui/ToolPluginView.cpp b/src/gui/ToolPluginView.cpp index 72953c82c..8426c146e 100644 --- a/src/gui/ToolPluginView.cpp +++ b/src/gui/ToolPluginView.cpp @@ -31,13 +31,14 @@ #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "MainWindow.h" ToolPluginView::ToolPluginView( ToolPlugin * _toolPlugin ) : PluginView( _toolPlugin, NULL ) { - Engine::mainWindow()->workspace()->addSubWindow( this ); + gui->mainWindow()->workspace()->addSubWindow( this ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); setWindowTitle( _toolPlugin->displayName() ); diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index 0799bb445..e97a3eaea 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -50,6 +50,7 @@ #include "ActionGroup.h" #include "SongEditor.h" #include "MainWindow.h" +#include "GuiApplication.h" #include "embed.h" #include "Engine.h" #include "PixmapButton.h" @@ -274,7 +275,7 @@ void AutomationEditor::update() // Note detuning? if( m_pattern && !m_pattern->getTrack() ) { - Engine::pianoRoll()->update(); + gui->pianoRoll()->update(); } } @@ -1527,7 +1528,7 @@ void AutomationEditor::play() if( Engine::getSong()->playMode() != Song::Mode_PlayPattern ) { Engine::getSong()->stop(); - Engine::getSong()->playPattern( Engine::pianoRoll()->currentPattern() ); + Engine::getSong()->playPattern( gui->pianoRoll()->currentPattern() ); } else if( Engine::getSong()->isStopped() == false ) { @@ -1535,7 +1536,7 @@ void AutomationEditor::play() } else { - Engine::getSong()->playPattern( Engine::pianoRoll()->currentPattern() ); + Engine::getSong()->playPattern( gui->pianoRoll()->currentPattern() ); } } else if( inBBEditor() ) @@ -1791,7 +1792,7 @@ void AutomationEditor::cutSelectedValues() } update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } @@ -1813,7 +1814,7 @@ void AutomationEditor::pasteValues() // least one value... Engine::getSong()->setModified(); update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } } @@ -1843,7 +1844,7 @@ void AutomationEditor::deleteSelectedValues() { Engine::getSong()->setModified(); update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } } diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index d989cb85d..567833800 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -55,6 +55,7 @@ #include "debug.h" #include "DetuningHelper.h" #include "embed.h" +#include "GuiApplication.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "MainWindow.h" @@ -817,7 +818,7 @@ void PianoRoll::shiftSemiTone( int amount ) // shift notes by amount semitones // we modified the song update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } @@ -853,7 +854,7 @@ void PianoRoll::shiftPos( int amount ) //shift notes pos by amount // we modified the song update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } @@ -1218,7 +1219,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) { Note* n = noteUnderMouse(); if (n->detuning() == NULL) n->createDetuning(); - Engine::automationEditor()->open( noteUnderMouse()->detuning()->automationPattern() ); + gui->automationEditor()->open( noteUnderMouse()->detuning()->automationPattern() ); return; } @@ -1498,7 +1499,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) // added new notes, so must update engine, song, etc Engine::getSong()->setModified(); update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } } @@ -3626,7 +3627,7 @@ void PianoRoll::cutSelectedNotes() } update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } @@ -3675,7 +3676,7 @@ void PianoRoll::pasteNotes() // least one note... Engine::getSong()->setModified(); update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } } @@ -3719,7 +3720,7 @@ void PianoRoll::deleteSelectedNotes() { Engine::getSong()->setModified(); update(); - Engine::songEditor()->update(); + gui->songEditor()->update(); } } diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index afbbb2698..bf3be5d63 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -22,6 +22,8 @@ * */ +#include "SongEditor.h" + #include #include #include @@ -36,12 +38,12 @@ #include #include "ActionGroup.h" -#include "SongEditor.h" #include "AutomatableSlider.h" #include "ComboBox.h" #include "ConfigManager.h" #include "CPULoadWidget.h" #include "embed.h" +#include "GuiApplication.h" #include "LcdSpinBox.h" #include "MainWindow.h" #include "MeterDialog.h" @@ -108,9 +110,9 @@ SongEditor::SongEditor( Song * _song ) : // add some essential widgets to global tool-bar - QWidget * tb = Engine::mainWindow()->toolBar(); + QWidget * tb = gui->mainWindow()->toolBar(); - Engine::mainWindow()->addSpacingToToolBar( 10 ); + gui->mainWindow()->addSpacingToToolBar( 10 ); m_tempoSpinBox = new LcdSpinBox( 3, tb, tr( "Tempo" ) ); m_tempoSpinBox->setModel( &m_song->m_tempoModel ); @@ -125,7 +127,7 @@ SongEditor::SongEditor( Song * _song ) : "should be played within a minute (or how many measures " "should be played within four minutes)." ) ); - int tempoSpinBoxCol = Engine::mainWindow()->addWidgetToToolBar( m_tempoSpinBox, 0 ); + int tempoSpinBoxCol = gui->mainWindow()->addWidgetToToolBar( m_tempoSpinBox, 0 ); #if 0 toolButton * hq_btn = new toolButton( embed::getIconPixmap( "hq_mode" ), @@ -135,18 +137,18 @@ SongEditor::SongEditor( Song * _song ) : connect( hq_btn, SIGNAL( toggled( bool ) ), this, SLOT( setHighQuality( bool ) ) ); hq_btn->setFixedWidth( 42 ); - Engine::mainWindow()->addWidgetToToolBar( hq_btn, 1, col ); + gui->mainWindow()->addWidgetToToolBar( hq_btn, 1, col ); #endif - Engine::mainWindow()->addWidgetToToolBar( new TimeDisplayWidget, 1, tempoSpinBoxCol ); + gui->mainWindow()->addWidgetToToolBar( new TimeDisplayWidget, 1, tempoSpinBoxCol ); - Engine::mainWindow()->addSpacingToToolBar( 10 ); + gui->mainWindow()->addSpacingToToolBar( 10 ); m_timeSigDisplay = new MeterDialog( this, true ); m_timeSigDisplay->setModel( &m_song->m_timeSigModel ); - Engine::mainWindow()->addWidgetToToolBar( m_timeSigDisplay ); + gui->mainWindow()->addWidgetToToolBar( m_timeSigDisplay ); - Engine::mainWindow()->addSpacingToToolBar( 10 ); + gui->mainWindow()->addSpacingToToolBar( 10 ); QLabel * master_vol_lbl = new QLabel( tb ); @@ -175,11 +177,11 @@ SongEditor::SongEditor( Song * _song ) : m_mvsStatus->setTitle( tr( "Master volume" ) ); m_mvsStatus->setPixmap( embed::getIconPixmap( "master_volume" ) ); - Engine::mainWindow()->addWidgetToToolBar( master_vol_lbl ); - Engine::mainWindow()->addWidgetToToolBar( m_masterVolumeSlider ); + gui->mainWindow()->addWidgetToToolBar( master_vol_lbl ); + gui->mainWindow()->addWidgetToToolBar( m_masterVolumeSlider ); - Engine::mainWindow()->addSpacingToToolBar( 10 ); + gui->mainWindow()->addSpacingToToolBar( 10 ); QLabel * master_pitch_lbl = new QLabel( tb ); @@ -207,10 +209,10 @@ SongEditor::SongEditor( Song * _song ) : m_mpsStatus->setTitle( tr( "Master pitch" ) ); m_mpsStatus->setPixmap( embed::getIconPixmap( "master_pitch" ) ); - Engine::mainWindow()->addWidgetToToolBar( master_pitch_lbl ); - Engine::mainWindow()->addWidgetToToolBar( m_masterPitchSlider ); + gui->mainWindow()->addWidgetToToolBar( master_pitch_lbl ); + gui->mainWindow()->addWidgetToToolBar( m_masterPitchSlider ); - Engine::mainWindow()->addSpacingToToolBar( 10 ); + gui->mainWindow()->addSpacingToToolBar( 10 ); // create widget for visualization- and cpu-load-widget QWidget * vc_w = new QWidget( tb ); @@ -225,7 +227,7 @@ SongEditor::SongEditor( Song * _song ) : vcw_layout->addWidget( new CPULoadWidget( vc_w ) ); vcw_layout->addStretch(); - Engine::mainWindow()->addWidgetToToolBar( vc_w ); + gui->mainWindow()->addWidgetToToolBar( vc_w ); static_cast( layout() )->insertWidget( 0, m_timeLine ); @@ -305,13 +307,13 @@ void SongEditor::setEditModeSelect() void SongEditor::keyPressEvent( QKeyEvent * _ke ) { if( /*_ke->modifiers() & Qt::ShiftModifier*/ - Engine::mainWindow()->isShiftPressed() == true && + gui->mainWindow()->isShiftPressed() == true && _ke->key() == Qt::Key_Insert ) { m_song->insertBar(); } else if(/* _ke->modifiers() & Qt::ShiftModifier &&*/ - Engine::mainWindow()->isShiftPressed() == true && + gui->mainWindow()->isShiftPressed() == true && _ke->key() == Qt::Key_Delete ) { m_song->removeBar(); @@ -347,7 +349,7 @@ void SongEditor::keyPressEvent( QKeyEvent * _ke ) void SongEditor::wheelEvent( QWheelEvent * _we ) { - if( Engine::mainWindow()->isCtrlPressed() == true ) + if( gui->mainWindow()->isCtrlPressed() == true ) { if( _we->delta() > 0 ) { @@ -371,7 +373,7 @@ void SongEditor::wheelEvent( QWheelEvent * _we ) // and make sure, all TCO's are resized and relocated realignTracks(); } - else if( Engine::mainWindow()->isShiftPressed() == true ) + else if( gui->mainWindow()->isShiftPressed() == true ) { m_leftRightScroll->setValue( m_leftRightScroll->value() - _we->delta() / 30 ); @@ -586,7 +588,7 @@ void SongEditor::adjustUiAfterProjectLoad() // make sure to bring us to front as the song editor is the central // widget in a song and when just opening a song in order to listen to // it, it's very annyoing to manually bring up the song editor each time - Engine::mainWindow()->workspace()->setActiveSubWindow( + gui->mainWindow()->workspace()->setActiveSubWindow( qobject_cast( parentWidget() ) ); } scrolled( 0 ); @@ -706,5 +708,5 @@ void SongEditorWindow::recordAccompany() void SongEditorWindow::stop() { m_editor->m_song->stop(); - Engine::pianoRoll()->stopRecording(); + gui->pianoRoll()->stopRecording(); } diff --git a/src/gui/widgets/ControllerRackView.cpp b/src/gui/widgets/ControllerRackView.cpp index 7ec3ab711..0c6690335 100644 --- a/src/gui/widgets/ControllerRackView.cpp +++ b/src/gui/widgets/ControllerRackView.cpp @@ -34,6 +34,7 @@ #include "Song.h" #include "embed.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "GroupBox.h" #include "ControllerRackView.h" @@ -75,7 +76,7 @@ ControllerRackView::ControllerRackView( ) : this->setLayout( layout ); QMdiSubWindow * subWin = - Engine::mainWindow()->workspace()->addSubWindow( this ); + gui->mainWindow()->workspace()->addSubWindow( this ); // No maximize button Qt::WindowFlags flags = subWin->windowFlags(); diff --git a/src/gui/widgets/ControllerView.cpp b/src/gui/widgets/ControllerView.cpp index aaaa3ef1a..8b618a3e1 100644 --- a/src/gui/widgets/ControllerView.cpp +++ b/src/gui/widgets/ControllerView.cpp @@ -39,6 +39,7 @@ #include "gui_templates.h" #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "LedCheckbox.h" #include "MainWindow.h" #include "ToolTip.h" @@ -62,9 +63,9 @@ ControllerView::ControllerView( Controller * _model, QWidget * _parent ) : connect( ctls_btn, SIGNAL( clicked() ), this, SLOT( editControls() ) ); - m_controllerDlg = getController()->createDialog( Engine::mainWindow()->workspace() ); + m_controllerDlg = getController()->createDialog( gui->mainWindow()->workspace() ); - m_subWindow = Engine::mainWindow()->workspace()->addSubWindow( + m_subWindow = gui->mainWindow()->workspace()->addSubWindow( m_controllerDlg ); Qt::WindowFlags flags = m_subWindow->windowFlags(); diff --git a/src/gui/widgets/EffectView.cpp b/src/gui/widgets/EffectView.cpp index 6214747d5..64463caed 100644 --- a/src/gui/widgets/EffectView.cpp +++ b/src/gui/widgets/EffectView.cpp @@ -37,6 +37,7 @@ #include "EffectControlDialog.h" #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "gui_templates.h" #include "Knob.h" #include "LedCheckbox.h" @@ -109,7 +110,7 @@ EffectView::EffectView( Effect * _model, QWidget * _parent ) : m_controlView = effect()->controls()->createView(); if( m_controlView ) { - m_subWindow = Engine::mainWindow()->workspace()->addSubWindow( + m_subWindow = gui->mainWindow()->workspace()->addSubWindow( m_controlView, Qt::SubWindow | Qt::CustomizeWindowHint | Qt::WindowTitleHint | Qt::WindowSystemMenuHint ); diff --git a/src/gui/widgets/FxLine.cpp b/src/gui/widgets/FxLine.cpp index 36baa782f..9703c4ba9 100644 --- a/src/gui/widgets/FxLine.cpp +++ b/src/gui/widgets/FxLine.cpp @@ -35,6 +35,7 @@ #include "FxMixerView.h" #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "SendButtonIndicator.h" #include "gui_templates.h" #include "CaptionMenu.h" @@ -224,21 +225,21 @@ void FxLine::renameChannel() void FxLine::removeChannel() { - FxMixerView * mix = Engine::fxMixerView(); + FxMixerView * mix = gui->fxMixerView(); mix->deleteChannel( m_channelIndex ); } void FxLine::moveChannelLeft() { - FxMixerView * mix = Engine::fxMixerView(); + FxMixerView * mix = gui->fxMixerView(); mix->moveChannelLeft( m_channelIndex ); } void FxLine::moveChannelRight() { - FxMixerView * mix = Engine::fxMixerView(); + FxMixerView * mix = gui->fxMixerView(); mix->moveChannelRight( m_channelIndex ); } diff --git a/src/gui/widgets/Knob.cpp b/src/gui/widgets/Knob.cpp index e5d8be854..75732679d 100644 --- a/src/gui/widgets/Knob.cpp +++ b/src/gui/widgets/Knob.cpp @@ -43,6 +43,7 @@ #include "embed.h" #include "Engine.h" #include "gui_templates.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "ProjectJournal.h" #include "Song.h" @@ -458,15 +459,15 @@ float Knob::getValue( const QPoint & _p ) { float value; - // arcane mathemagicks for calculating knob movement + // arcane mathemagicks for calculating knob movement value = ( ( _p.y() + _p.y() * qMin( qAbs( _p.y() / 2.5f ), 6.0f ) ) ) / 12.0f; - + // if shift pressed we want slower movement - if( Engine::mainWindow()->isShiftPressed() ) + if( gui->mainWindow()->isShiftPressed() ) { value /= 4.0f; value = qBound( -4.0f, value, 4.0f ); - } + } return value * pageSize(); } @@ -483,7 +484,7 @@ void Knob::contextMenuEvent( QContextMenuEvent * ) CaptionMenu contextMenu( model()->displayName(), this ); addDefaultActions( &contextMenu ); - contextMenu.addAction( QPixmap(), + contextMenu.addAction( QPixmap(), model()->isScaleLogarithmic() ? tr( "Set linear" ) : tr( "Set logarithmic" ), this, SLOT( toggleScale() ) ); contextMenu.addSeparator(); @@ -561,7 +562,7 @@ void Knob::mousePressEvent( QMouseEvent * _me ) m_buttonPressed = true; } else if( _me->button() == Qt::LeftButton && - Engine::mainWindow()->isShiftPressed() == true ) + gui->mainWindow()->isShiftPressed() == true ) { new StringPairDrag( "float_value", QString::number( model()->value() ), @@ -681,7 +682,7 @@ void Knob::setPosition( const QPoint & _p ) if( model()->isScaleLogarithmic() ) // logarithmic code { - const float pos = model()->minValue() < 0 + const float pos = model()->minValue() < 0 ? oldValue / qMax( qAbs( model()->maxValue() ), qAbs( model()->minValue() ) ) : ( oldValue - model()->minValue() ) / model()->range(); const float ratio = 0.1f + qAbs( pos ) * 15.f; @@ -697,11 +698,11 @@ void Knob::setPosition( const QPoint & _p ) } } - + else // linear code { if( qAbs( value ) >= step ) - { + { model()->setValue( oldValue - value ); m_leftOver = 0.0f; } diff --git a/src/gui/widgets/LcdSpinBox.cpp b/src/gui/widgets/LcdSpinBox.cpp index afdf85943..73534f5c7 100644 --- a/src/gui/widgets/LcdSpinBox.cpp +++ b/src/gui/widgets/LcdSpinBox.cpp @@ -35,6 +35,7 @@ #include "CaptionMenu.h" #include "Engine.h" #include "embed.h" +#include "GuiApplication.h" #include "gui_templates.h" #include "templates.h" #include "MainWindow.h" @@ -126,7 +127,7 @@ void LcdSpinBox::mouseMoveEvent( QMouseEvent* event ) if( m_mouseMoving ) { int dy = event->globalY() - m_origMousePos.y(); - if( Engine::mainWindow()->isShiftPressed() ) + if( gui->mainWindow()->isShiftPressed() ) dy = qBound( -4, dy/4, 4 ); if( dy > 1 || dy < -1 ) { diff --git a/src/gui/widgets/ProjectNotes.cpp b/src/gui/widgets/ProjectNotes.cpp index bc6908f50..b4dcf8e27 100644 --- a/src/gui/widgets/ProjectNotes.cpp +++ b/src/gui/widgets/ProjectNotes.cpp @@ -39,13 +39,14 @@ #include "embed.h" #include "Engine.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "Song.h" ProjectNotes::ProjectNotes() : - QMainWindow( Engine::mainWindow()->workspace() ) + QMainWindow( gui->mainWindow()->workspace() ) { m_edit = new QTextEdit( this ); m_edit->setAutoFillBackground( true ); @@ -70,7 +71,7 @@ ProjectNotes::ProjectNotes() : setWindowTitle( tr( "Project notes" ) ); setWindowIcon( embed::getIconPixmap( "project_notes" ) ); - Engine::mainWindow()->workspace()->addSubWindow( this ); + gui->mainWindow()->workspace()->addSubWindow( this ); parentWidget()->setAttribute( Qt::WA_DeleteOnClose, false ); parentWidget()->move( 700, 10 ); parentWidget()->resize( 400, 300 ); diff --git a/src/gui/widgets/TempoSyncKnob.cpp b/src/gui/widgets/TempoSyncKnob.cpp index 0022691e0..598cfc062 100644 --- a/src/gui/widgets/TempoSyncKnob.cpp +++ b/src/gui/widgets/TempoSyncKnob.cpp @@ -30,6 +30,7 @@ #include "Engine.h" #include "CaptionMenu.h" #include "embed.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "MeterDialog.h" #include "Song.h" @@ -86,10 +87,10 @@ void TempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) CaptionMenu contextMenu( model()->displayName(), this ); addDefaultActions( &contextMenu ); contextMenu.addSeparator(); - + float limit = 60000.0f / ( Engine::getSong()->getTempo() * model()->m_scale ); - + QMenu * syncMenu = contextMenu.addMenu( m_tempoSyncIcon, m_tempoSyncDescription ); if( limit / 8.0f <= model()->maxValue() ) @@ -149,7 +150,7 @@ void TempoSyncKnob::contextMenuEvent( QContextMenuEvent * ) contextMenu.addHelpAction(); contextMenu.exec( QCursor::pos() ); - + delete syncMenu; } @@ -163,7 +164,7 @@ void TempoSyncKnob::updateDescAndIcon() switch( model()->m_tempoSyncMode ) { case TempoSyncKnobModel::SyncCustom: - m_tempoSyncDescription = tr( "Custom " ) + + m_tempoSyncDescription = tr( "Custom " ) + "(" + QString::number( model()->m_custom.numeratorModel().value() ) + "/" + @@ -291,8 +292,8 @@ void TempoSyncKnob::showCustom() { if( m_custom == NULL ) { - m_custom = new MeterDialog( Engine::mainWindow()->workspace() ); - Engine::mainWindow()->workspace()->addSubWindow( m_custom ); + m_custom = new MeterDialog( gui->mainWindow()->workspace() ); + gui->mainWindow()->workspace()->addSubWindow( m_custom ); m_custom->setWindowTitle( "Meter" ); m_custom->setModel( &model()->m_custom ); } diff --git a/src/gui/widgets/TextFloat.cpp b/src/gui/widgets/TextFloat.cpp index 9947b09cd..99d990699 100644 --- a/src/gui/widgets/TextFloat.cpp +++ b/src/gui/widgets/TextFloat.cpp @@ -28,13 +28,14 @@ #include "TextFloat.h" #include "gui_templates.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "Engine.h" TextFloat::TextFloat() : - QWidget( Engine::mainWindow(), Qt::ToolTip ), + QWidget( gui->mainWindow(), Qt::ToolTip ), m_title(), m_text(), m_pixmap() @@ -89,7 +90,7 @@ void TextFloat::setVisibilityTimeOut( int _msecs ) TextFloat * TextFloat::displayMessage( const QString & _msg, int _timeout, QWidget * _parent, int _add_y_margin ) { - QWidget * mw = Engine::mainWindow(); + QWidget * mw = gui->mainWindow(); TextFloat * tf = new TextFloat; if( _parent != NULL ) { diff --git a/src/gui/widgets/TimeDisplayWidget.cpp b/src/gui/widgets/TimeDisplayWidget.cpp index d2afe9240..a06a1c3fb 100644 --- a/src/gui/widgets/TimeDisplayWidget.cpp +++ b/src/gui/widgets/TimeDisplayWidget.cpp @@ -25,6 +25,7 @@ #include #include "TimeDisplayWidget.h" +#include "GuiApplication.h" #include "MainWindow.h" #include "Engine.h" #include "ToolTip.h" @@ -53,7 +54,7 @@ TimeDisplayWidget::TimeDisplayWidget() : // update labels of LCD spinboxes setDisplayMode( m_displayMode ); - connect( Engine::mainWindow(), SIGNAL( periodicUpdate() ), + connect( gui->mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( updateTime() ) ); } diff --git a/src/gui/widgets/VisualizationWidget.cpp b/src/gui/widgets/VisualizationWidget.cpp index e7e21d589..734defc68 100644 --- a/src/gui/widgets/VisualizationWidget.cpp +++ b/src/gui/widgets/VisualizationWidget.cpp @@ -27,6 +27,7 @@ #include #include "VisualizationWidget.h" +#include "GuiApplication.h" #include "gui_templates.h" #include "MainWindow.h" #include "embed.h" @@ -90,7 +91,7 @@ void VisualizationWidget::setActive( bool _active ) m_active = _active; if( m_active ) { - connect( Engine::mainWindow(), + connect( gui->mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); connect( Engine::mixer(), @@ -99,7 +100,7 @@ void VisualizationWidget::setActive( bool _active ) } else { - disconnect( Engine::mainWindow(), + disconnect( gui->mainWindow(), SIGNAL( periodicUpdate() ), this, SLOT( update() ) ); disconnect( Engine::mixer(), diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp index f30d59bbe..b3f494255 100644 --- a/src/tracks/BBTrack.cpp +++ b/src/tracks/BBTrack.cpp @@ -34,6 +34,7 @@ #include "Engine.h" #include "gui_templates.h" #include "MainWindow.h" +#include "GuiApplication.h" #include "Mixer.h" #include "RenameDialog.h" #include "Song.h" @@ -275,7 +276,7 @@ void BBTCOView::openInBBEditor() { Engine::getBBTrackContainer()->setCurrentBB( m_bbTCO->bbTrackIndex() ); - Engine::mainWindow()->toggleBBEditorWin( true ); + gui->mainWindow()->toggleBBEditorWin( true ); } @@ -310,7 +311,7 @@ void BBTCOView::changeColor() if( isSelected() ) { QVector selected = - Engine::songEditor()->m_editor->selectedObjects(); + gui->songEditor()->m_editor->selectedObjects(); for( QVector::iterator it = selected.begin(); it != selected.end(); ++it ) @@ -599,7 +600,7 @@ BBTrackView::BBTrackView( BBTrack * _bbt, TrackContainerView* tcv ) : BBTrackView::~BBTrackView() { - Engine::getBBEditor()->removeBBView( BBTrack::s_infoMap[m_bbTrack] ); + gui->getBBEditor()->removeBBView( BBTrack::s_infoMap[m_bbTrack] ); } @@ -607,7 +608,7 @@ BBTrackView::~BBTrackView() bool BBTrackView::close() { - Engine::getBBEditor()->removeBBView( BBTrack::s_infoMap[m_bbTrack] ); + gui->getBBEditor()->removeBBView( BBTrack::s_infoMap[m_bbTrack] ); return TrackView::close(); } @@ -617,7 +618,7 @@ bool BBTrackView::close() void BBTrackView::clickedTrackLabel() { Engine::getBBTrackContainer()->setCurrentBB( m_bbTrack->index() ); - Engine::getBBEditor()->show(); + gui->getBBEditor()->show(); /* foreach( bbTrackView * tv, trackContainerView()->findChildren() ) { diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 06219b942..0466d9152 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -52,6 +52,7 @@ #include "FileBrowser.h" #include "FxMixer.h" #include "FxMixerView.h" +#include "GuiApplication.h" #include "InstrumentSoundShaping.h" #include "InstrumentSoundShapingView.h" #include "FadeButton.h" @@ -935,7 +936,7 @@ InstrumentTrackWindow * InstrumentTrackView::topLevelInstrumentTrackWindow() { InstrumentTrackWindow * w = NULL; foreach( QMdiSubWindow * sw, - Engine::mainWindow()->workspace()->subWindowList( + gui->mainWindow()->workspace()->subWindowList( QMdiArea::ActivationHistoryOrder ) ) { if( sw->isVisible() && sw->widget()->inherits( "InstrumentTrackWindow" ) ) @@ -1129,10 +1130,10 @@ class fxLineLcdSpinBox : public LcdSpinBox protected: virtual void mouseDoubleClickEvent ( QMouseEvent * _me ) { - Engine::fxMixerView()->setCurrentFxLine( model()->value() ); + gui->fxMixerView()->setCurrentFxLine( model()->value() ); - Engine::fxMixerView()->show();// show fxMixer window - Engine::fxMixerView()->setFocus();// set focus to fxMixer window + gui->fxMixerView()->show();// show fxMixer window + gui->fxMixerView()->setFocus();// set focus to fxMixer window //engine::getFxMixerView()->raise(); } }; @@ -1274,7 +1275,7 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) : setFixedWidth( INSTRUMENT_WIDTH ); resize( sizeHint() ); - QMdiSubWindow * subWin = Engine::mainWindow()->workspace()->addSubWindow( this ); + QMdiSubWindow * subWin = gui->mainWindow()->workspace()->addSubWindow( this ); Qt::WindowFlags flags = subWin->windowFlags(); flags |= Qt::MSWindowsFixedSizeDialogHint; flags &= ~Qt::WindowMaximizeButtonHint; @@ -1300,7 +1301,7 @@ InstrumentTrackWindow::~InstrumentTrackWindow() delete m_instrumentView; - if( Engine::mainWindow()->workspace() ) + if( gui->mainWindow()->workspace() ) { parentWidget()->hide(); parentWidget()->deleteLater(); @@ -1466,7 +1467,7 @@ void InstrumentTrackWindow::closeEvent( QCloseEvent* event ) { event->ignore(); - if( Engine::mainWindow()->workspace() ) + if( gui->mainWindow()->workspace() ) { parentWidget()->hide(); } diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index f53c57713..5bdab5e3d 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -38,7 +38,7 @@ #include "templates.h" #include "gui_templates.h" #include "embed.h" -#include "Engine.h" +#include "GuiApplication.h" #include "PianoRoll.h" #include "TrackContainer.h" #include "RenameDialog.h" @@ -170,9 +170,9 @@ MidiTime Pattern::beatPatternLength() const Note * Pattern::addNote( const Note & _new_note, const bool _quant_pos ) { Note * new_note = new Note( _new_note ); - if( _quant_pos && Engine::pianoRoll() ) + if( _quant_pos && gui->pianoRoll() ) { - new_note->quantizePos( Engine::pianoRoll()->quantization() ); + new_note->quantizePos( gui->pianoRoll()->quantization() ); } instrumentTrack()->lock(); @@ -539,9 +539,9 @@ void Pattern::updateBBTrack() Engine::getBBTrackContainer()->updateBBTrack( this ); } - if( Engine::pianoRoll() && Engine::pianoRoll()->currentPattern() == this ) + if( gui->pianoRoll() && gui->pianoRoll()->currentPattern() == this ) { - Engine::pianoRoll()->update(); + gui->pianoRoll()->update(); } } @@ -607,7 +607,7 @@ PatternView::PatternView( Pattern* pattern, TrackView* parent ) : m_paintPixmap(), m_needsUpdate( true ) { - connect( Engine::pianoRoll(), SIGNAL( currentPatternChanged() ), + connect( gui->pianoRoll(), SIGNAL( currentPatternChanged() ), this, SLOT( update() ) ); if( s_stepBtnOn == NULL ) @@ -668,10 +668,10 @@ void PatternView::update() void PatternView::openInPianoRoll() { - Engine::pianoRoll()->setCurrentPattern( m_pat ); - Engine::pianoRoll()->parentWidget()->show(); - Engine::pianoRoll()->show(); - Engine::pianoRoll()->setFocus(); + gui->pianoRoll()->setCurrentPattern( m_pat ); + gui->pianoRoll()->parentWidget()->show(); + gui->pianoRoll()->show(); + gui->pianoRoll()->setFocus(); } @@ -802,9 +802,9 @@ void PatternView::mousePressEvent( QMouseEvent * _me ) Engine::getSong()->setModified(); update(); - if( Engine::pianoRoll()->currentPattern() == m_pat ) + if( gui->pianoRoll()->currentPattern() == m_pat ) { - Engine::pianoRoll()->update(); + gui->pianoRoll()->update(); } } else @@ -863,9 +863,9 @@ void PatternView::wheelEvent( QWheelEvent * _we ) Engine::getSong()->setModified(); update(); - if( Engine::pianoRoll()->currentPattern() == m_pat ) + if( gui->pianoRoll()->currentPattern() == m_pat ) { - Engine::pianoRoll()->update(); + gui->pianoRoll()->update(); } } _we->accept(); @@ -925,7 +925,7 @@ void PatternView::paintEvent( QPaintEvent * ) } p.setBrush( lingrad ); - if( Engine::pianoRoll()->currentPattern() == m_pat && m_pat->m_patternType != Pattern::BeatPattern ) + if( gui->pianoRoll()->currentPattern() == m_pat && m_pat->m_patternType != Pattern::BeatPattern ) p.setPen( c.lighter( 130 ) ); else p.setPen( c.darker( 300 ) ); @@ -934,7 +934,7 @@ void PatternView::paintEvent( QPaintEvent * ) p.setBrush( QBrush() ); if( m_pat->m_patternType != Pattern::BeatPattern ) { - if( Engine::pianoRoll()->currentPattern() == m_pat ) + if( gui->pianoRoll()->currentPattern() == m_pat ) p.setPen( c.lighter( 160 ) ); else p.setPen( c.lighter( 130 ) ); diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 49d59f66c..4312fd1e2 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -44,6 +44,7 @@ #include "StringPairDrag.h" #include "Knob.h" #include "MainWindow.h" +#include "GuiApplication.h" #include "EffectRackView.h" #include "TrackLabelButton.h" #include "ConfigManager.h" @@ -553,7 +554,7 @@ SampleTrackView::SampleTrackView( SampleTrack * _t, TrackContainerView* tcv ) : m_effectRack = new EffectRackView( _t->audioPort()->effects() ); m_effectRack->setFixedSize( 240, 242 ); - m_effWindow = Engine::mainWindow()->workspace()->addSubWindow( m_effectRack ); + m_effWindow = gui->mainWindow()->workspace()->addSubWindow( m_effectRack ); m_effWindow->setAttribute( Qt::WA_DeleteOnClose, false ); m_effWindow->layout()->setSizeConstraint( QLayout::SetFixedSize ); m_effWindow->setWindowTitle( _t->name() ); From 41b756776f8cb2ac5a90f5da444d7db3f5760286 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Thu, 25 Dec 2014 20:54:18 +0100 Subject: [PATCH 029/172] Add choose language option --- include/SetupDialog.h | 4 ++++ src/core/main.cpp | 11 ++++++++--- src/gui/SetupDialog.cpp | 31 +++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 96d865f40..a03829a6b 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -112,6 +112,8 @@ private slots: void toggleDisplayWaveform( bool en ); void toggleDisableAutoquit( bool en ); + void setLanguage( int lang ); + private: TabBar * m_tabBar; @@ -125,6 +127,8 @@ private: bool m_displaydBV; bool m_MMPZ; bool m_hqAudioDev; + QString m_lang; + QStringList m_languages; QLineEdit * m_wdLineEdit; diff --git a/src/core/main.cpp b/src/core/main.cpp index 08042ef89..12ed9da66 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -383,7 +383,14 @@ int main( int argc, char * * argv ) } - QString pos = QLocale::system().name().left( 2 ); + ConfigManager::inst()->loadConfigFile(); + + // set language + QString pos = ConfigManager::inst()->value( "app", "language" ); + if( pos.isEmpty() ) + { + pos = QLocale::system().name().left( 2 ); + } #ifdef LMMS_BUILD_WIN32 #undef QT_TRANSLATIONS_DIR @@ -414,8 +421,6 @@ int main( int argc, char * * argv ) #endif #endif - ConfigManager::inst()->loadConfigFile(); - if( render_out.isEmpty() ) { // init style and palette diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index a29114f8b..bf79b3ab2 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -96,6 +96,8 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : m_MMPZ( !ConfigManager::inst()->value( "app", "nommpz" ).toInt() ), m_hqAudioDev( ConfigManager::inst()->value( "mixer", "hqaudio" ).toInt() ), + m_lang( ConfigManager::inst()->value( "app", + "language" ) ), m_workingDir( ConfigManager::inst()->workingDir() ), m_vstDir( ConfigManager::inst()->vstDir() ), m_artworkDir( ConfigManager::inst()->artworkDir() ), @@ -302,10 +304,33 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : misc_tw->setFixedHeight( YDelta*labelNumber + HeaderSize ); + TabWidget * lang_tw = new TabWidget( tr( "LANGUAGE" ), general ); + lang_tw->setFixedHeight( 48 ); + QComboBox * changeLang = new QComboBox( lang_tw ); + changeLang->move( XDelta, YDelta ); + + QDir dir( ConfigManager::inst()->localeDir() ); + QStringList fileNames = dir.entryList( QStringList( "*.qm" ) ); + for( int i = 0; i < fileNames.size(); ++i ) + { + // get locale extracted by filename + fileNames[i].truncate( fileNames[i].lastIndexOf( '.' ) ); + m_languages.append( fileNames[i] ); + QString lang = QLocale( m_languages.last() ).nativeLanguageName(); + changeLang->addItem( lang ); + if( m_lang == m_languages.last() ) + { + changeLang->setCurrentIndex( i ); + } + } + connect( changeLang, SIGNAL( currentIndexChanged( int ) ), + this, SLOT( setLanguage( int ) ) ); gen_layout->addWidget( bufsize_tw ); gen_layout->addSpacing( 10 ); gen_layout->addWidget( misc_tw ); + gen_layout->addSpacing( 10 ); + gen_layout->addWidget( lang_tw ); gen_layout->addStretch(); @@ -826,6 +851,7 @@ void SetupDialog::accept() QString::number( m_displayWaveform ) ); ConfigManager::inst()->setValue( "ui", "disableautoquit", QString::number( m_disableAutoQuit ) ); + ConfigManager::inst()->setValue( "app", "language", m_lang ); ConfigManager::inst()->setWorkingDir( m_workingDir ); @@ -1026,6 +1052,11 @@ void SetupDialog::toggleOneInstrumentTrackWindow( bool _enabled ) m_oneInstrumentTrackWindow = _enabled; } +void SetupDialog::setLanguage( int lang ) +{ + m_lang = m_languages[lang]; +} + From cee287116bfe1fc183addc15d403c2520d72206a Mon Sep 17 00:00:00 2001 From: Dave French Date: Fri, 26 Dec 2014 11:00:26 +0000 Subject: [PATCH 030/172] Proposed fix for 1150 Preset Browser: division between factory and user files fails if factory has folders --- include/FileBrowser.h | 2 ++ src/gui/FileBrowser.cpp | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/include/FileBrowser.h b/include/FileBrowser.h index 97e20f4bc..4f9b78c48 100644 --- a/include/FileBrowser.h +++ b/include/FileBrowser.h @@ -161,6 +161,8 @@ private: QStringList m_directories; QString m_filter; + int m_dirCount; + } ; diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index ac84e404a..7a7780a44 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -708,7 +708,8 @@ Directory::Directory(const QString & filename, const QString & path, const QString & filter ) : QTreeWidgetItem( QStringList( filename ), TypeDirectoryItem ), m_directories( path ), - m_filter( filter ) + m_filter( filter ), + m_dirCount( 0 ) { initPixmaps(); @@ -762,6 +763,7 @@ void Directory::update( void ) setIcon( 0, *s_folderOpenedPixmap ); if( !childCount() ) { + m_dirCount = 0; for( QStringList::iterator it = m_directories.begin(); it != m_directories.end(); ++it ) { @@ -776,7 +778,7 @@ void Directory::update( void ) "--- Factory files ---" ) ); sep->setIcon( 0, embed::getIconPixmap( "factory_files" ) ); - insertChild( top_index, sep ); + insertChild( m_dirCount + top_index - 1, sep ); } } } @@ -814,6 +816,7 @@ bool Directory::addItems(const QString & path ) insertChild( i, new Directory( cur_file, path, m_filter ) ); orphan = false; + m_dirCount++; break; } else if( cur_file == d->text( 0 ) ) @@ -827,6 +830,7 @@ bool Directory::addItems(const QString & path ) { addChild( new Directory( cur_file, path, m_filter ) ); + m_dirCount++; } added_something = true; From 25a3bc63ee8322f0c5af0536a2f06d7cf23619e5 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Thu, 1 Jan 2015 00:06:32 +0100 Subject: [PATCH 031/172] Fallback to system default or English, if language unset --- src/gui/SetupDialog.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index bf79b3ab2..4e58d7d0d 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -318,14 +318,33 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : m_languages.append( fileNames[i] ); QString lang = QLocale( m_languages.last() ).nativeLanguageName(); changeLang->addItem( lang ); - if( m_lang == m_languages.last() ) - { - changeLang->setCurrentIndex( i ); - } } connect( changeLang, SIGNAL( currentIndexChanged( int ) ), this, SLOT( setLanguage( int ) ) ); + //If language unset, fallback to system language when available + if( m_lang == "" ) + { + QString tmp = QLocale::system().name().left( 2 ); + if( m_languages.contains( tmp ) ) + { + m_lang = tmp; + } + else + { + m_lang = "en"; + } + } + + for( int i = 0; i < changeLang->count(); ++i ) + { + if( m_lang == m_languages.at( i ) ) + { + changeLang->setCurrentIndex( i ); + break; + } + } + gen_layout->addWidget( bufsize_tw ); gen_layout->addSpacing( 10 ); gen_layout->addWidget( misc_tw ); From 74bd58162e52ca473aaec1e2792bb105b1d56aea Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sat, 3 Jan 2015 13:53:49 +0100 Subject: [PATCH 032/172] Make saving of .bak files configurable --- include/SetupDialog.h | 2 ++ src/core/DataFile.cpp | 16 ++++++++++++---- src/gui/SetupDialog.cpp | 21 +++++++++++++++++++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/include/SetupDialog.h b/include/SetupDialog.h index 96d865f40..0bdaffaa6 100644 --- a/include/SetupDialog.h +++ b/include/SetupDialog.h @@ -91,6 +91,7 @@ private slots: void toggleWarnAfterSetup( bool _enabled ); void toggleDisplaydBV( bool _enabled ); void toggleMMPZ( bool _enabled ); + void toggleDisableBackup( bool _enabled ); void toggleHQAudioDev( bool _enabled ); void openWorkingDir(); @@ -124,6 +125,7 @@ private: bool m_warnAfterSetup; bool m_displaydBV; bool m_MMPZ; + bool m_disableBackup; bool m_hqAudioDev; diff --git a/src/core/DataFile.cpp b/src/core/DataFile.cpp index ff0bf0d9b..7bf47ed67 100644 --- a/src/core/DataFile.cpp +++ b/src/core/DataFile.cpp @@ -248,10 +248,18 @@ bool DataFile::writeFile( const QString& filename ) // make sure the file has been written correctly if( QFileInfo( outfile.fileName() ).size() > 0 ) { - // remove old backup file - QFile::remove( fullNameBak ); - // move current file to backup file - QFile::rename( fullName, fullNameBak ); + if( ConfigManager::inst()->value( "app", "disablebackup" ).toInt() ) + { + // remove current file + QFile::remove( fullName ); + } + else + { + // remove old backup file + QFile::remove( fullNameBak ); + // move current file to backup file + QFile::rename( fullName, fullNameBak ); + } // move temporary file to current file QFile::rename( fullNameTemp, fullName ); diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index a29114f8b..7f6c3391b 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -94,6 +94,8 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : m_displaydBV( ConfigManager::inst()->value( "app", "displaydbv" ).toInt() ), m_MMPZ( !ConfigManager::inst()->value( "app", "nommpz" ).toInt() ), + m_disableBackup( !ConfigManager::inst()->value( "app", + "disablebackup" ).toInt() ), m_hqAudioDev( ConfigManager::inst()->value( "mixer", "hqaudio" ).toInt() ), m_workingDir( ConfigManager::inst()->workingDir() ), @@ -300,6 +302,15 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : connect( disableAutoquit, SIGNAL( toggled( bool ) ), this, SLOT( toggleDisableAutoquit( bool ) ) ); + LedCheckBox * disableBackup = new LedCheckBox( + tr( "Create backup file when saving a project" ), + misc_tw ); + labelNumber++; + disableBackup->move( XDelta, YDelta*labelNumber ); + disableBackup->setChecked( m_disableBackup ); + connect( disableBackup, SIGNAL( toggled( bool ) ), + this, SLOT( toggleDisableBackup( bool ) ) ); + misc_tw->setFixedHeight( YDelta*labelNumber + HeaderSize ); @@ -806,6 +817,8 @@ void SetupDialog::accept() QString::number( m_displaydBV ) ); ConfigManager::inst()->setValue( "app", "nommpz", QString::number( !m_MMPZ ) ); + ConfigManager::inst()->setValue( "app", "disablebackup", + QString::number( !m_disableBackup ) ); ConfigManager::inst()->setValue( "mixer", "hqaudio", QString::number( m_hqAudioDev ) ); ConfigManager::inst()->setValue( "ui", "smoothscroll", @@ -958,6 +971,14 @@ void SetupDialog::toggleMMPZ( bool _enabled ) +void SetupDialog::toggleDisableBackup( bool _enabled ) +{ + m_disableBackup = _enabled; +} + + + + void SetupDialog::toggleHQAudioDev( bool _enabled ) { m_hqAudioDev = _enabled; From 8b83dad22c45feac47e75193213d2b8489954f35 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 4 Jan 2015 17:19:32 +0000 Subject: [PATCH 033/172] EQ Removed DBvModel --- plugins/Eq/CMakeLists.txt | 4 ++-- plugins/Eq/DBvModel.cpp | 14 -------------- plugins/Eq/DBvModel.h | 31 ------------------------------- plugins/Eq/EqControls.h | 6 +++--- plugins/Eq/EqEffect.cpp | 16 +++++++++++++--- plugins/Eq/EqEffect.h | 3 +++ 6 files changed, 21 insertions(+), 53 deletions(-) delete mode 100644 plugins/Eq/DBvModel.cpp delete mode 100644 plugins/Eq/DBvModel.h diff --git a/plugins/Eq/CMakeLists.txt b/plugins/Eq/CMakeLists.txt index 75c9b2911..3cd4b8885 100644 --- a/plugins/Eq/CMakeLists.txt +++ b/plugins/Eq/CMakeLists.txt @@ -2,5 +2,5 @@ INCLUDE(BuildPlugin) INCLUDE_DIRECTORIES(${FFTW3F_INCLUDE_DIRS}) LINK_DIRECTORIES(${FFTW3F_LIBRARY_DIRS}) LINK_LIBRARIES(${FFTW3F_LIBRARIES}) -BUILD_PLUGIN(eq EqEffect.cpp EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h DBvModel.cpp DBvModel.h -MOCFILES EqControls.h EqParameterWidget.h EqFader.h DBvModel.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") +BUILD_PLUGIN(eq EqEffect.cpp EqControls.cpp EqControlsDialog.cpp EqFilter.h EqParameterWidget.cpp EqFader.h EqSpectrumView.h +MOCFILES EqControls.h EqParameterWidget.h EqFader.h EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") diff --git a/plugins/Eq/DBvModel.cpp b/plugins/Eq/DBvModel.cpp deleted file mode 100644 index 3bd128ea6..000000000 --- a/plugins/Eq/DBvModel.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "DBvModel.h" - -DBvModel::DBvModel(float val, float min, float max, float step, - Model *parent, const QString &displayName, - bool defaultConstructed) : - FloatModel( val, min, max, step, parent, displayName, defaultConstructed ) -{ - connect(this, SIGNAL( dataChanged() ), this,SLOT( calcAmp() ) ); -} - -void DBvModel::calcAmp() -{ - m_amp = dbvToAmp( value() ); -} diff --git a/plugins/Eq/DBvModel.h b/plugins/Eq/DBvModel.h deleted file mode 100644 index ef6d80a03..000000000 --- a/plugins/Eq/DBvModel.h +++ /dev/null @@ -1,31 +0,0 @@ -#ifndef DBVMODEL -#define DBVMODEL - -#include "AutomatableModel.h" - - -class DBvModel : public FloatModel -{ - Q_OBJECT -public: - DBvModel( float val = 0, float min = 0, float max = 0, float step = 0, - Model * parent = NULL, - const QString& displayName = QString(), - bool defaultConstructed = false ); - inline float getAmp() const - { - return m_amp; - } - -private slots: - void calcAmp(); - -private: - float m_amp; -}; - - - - -#endif // DBVMODEL - diff --git a/plugins/Eq/EqControls.h b/plugins/Eq/EqControls.h index dfb75287e..5218b6a9f 100644 --- a/plugins/Eq/EqControls.h +++ b/plugins/Eq/EqControls.h @@ -28,7 +28,7 @@ #include "EffectControls.h" #include "EqControlsDialog.h" #include "Knob.h" -#include "DBvModel.h" + class EqEffect; @@ -83,8 +83,8 @@ public: private: EqEffect* m_effect; - DBvModel m_inGainModel; - DBvModel m_outGainModel; + FloatModel m_inGainModel; + FloatModel m_outGainModel; FloatModel m_lowShelfGainModel; FloatModel m_para1GainModel; FloatModel m_para2GainModel; diff --git a/plugins/Eq/EqEffect.cpp b/plugins/Eq/EqEffect.cpp index 3407c7953..885eebe2a 100644 --- a/plugins/Eq/EqEffect.cpp +++ b/plugins/Eq/EqEffect.cpp @@ -52,7 +52,9 @@ Plugin::Descriptor PLUGIN_EXPORT eq_plugin_descriptor = EqEffect::EqEffect(Model *parent, const Plugin::Descriptor::SubPluginFeatures::Key *key) : Effect( &eq_plugin_descriptor, parent, key ), - m_eqControls( this ) + m_eqControls( this ), + m_inGain( 1.0 ), + m_outGain( 1.0 ) { } @@ -73,13 +75,21 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { return( false ); } + if( m_eqControls.m_outGainModel.isValueChanged() ) + { + m_outGain = dbvToAmp(m_eqControls.m_outGainModel.value()); + } + if( m_eqControls.m_inGainModel.isValueChanged() ) + { + m_inGain = dbvToAmp(m_eqControls.m_inGainModel.value()); + } m_eqControls.m_inProgress = true; double outSum = 0.0; for( fpp_t f = 0; f < frames; ++f ) { outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1]; } - const float outGain = m_eqControls.m_outGainModel.getAmp(); + const float outGain = m_outGain; const int sampleRate = Engine::mixer()->processingSampleRate(); sampleFrame m_inPeak = { 0, 0 }; @@ -91,7 +101,7 @@ bool EqEffect::processAudioBuffer(sampleFrame *buf, const fpp_t frames) { m_eqControls.m_inFftBands.clear(); } - gain(buf , frames, m_eqControls.m_inGainModel.getAmp() , &m_inPeak ); + gain(buf , frames, m_inGain , &m_inPeak ); m_eqControls.m_inPeakL = m_eqControls.m_inPeakL < m_inPeak[0] ? m_inPeak[0] : m_eqControls.m_inPeakL; m_eqControls.m_inPeakR = m_eqControls.m_inPeakR < m_inPeak[1] ? m_inPeak[1] : m_eqControls.m_inPeakR; diff --git a/plugins/Eq/EqEffect.h b/plugins/Eq/EqEffect.h index 654ae5bd2..63f76f3dd 100644 --- a/plugins/Eq/EqEffect.h +++ b/plugins/Eq/EqEffect.h @@ -85,6 +85,9 @@ private: EqLp12Filter m_lp480; EqLp12Filter m_lp481; + float m_inGain; + float m_outGain; + From 6e1e73b41f55e750fba33b3361002d13a18c1658 Mon Sep 17 00:00:00 2001 From: Spekular Date: Wed, 31 Dec 2014 18:03:49 +0100 Subject: [PATCH 034/172] Removes unnecessary cleanObject() calls and commented out code --- src/core/AutomationPattern.cpp | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 02566b65c..7420645e9 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -446,23 +446,15 @@ void AutomationPattern::flipX( int length ) for( int i = 0; i <= numPoints; i++ ) { tempValue = valueAt( ( iterate + i ).key() ); - cleanObjects(); MidiTime newTime = MidiTime( length - ( iterate + i ).key() ); tempMap[newTime] = tempValue; } } else { - //for ( int i = 0; ( iterate + i ).key() < length ; i++ ) - //{ - // tempValue = valueAt( ( iterate + i ).key() ); - //} - //putValue( MidiTime( length ) , tempValue, false); - //numPoints++; for( int i = 0; i <= numPoints; i++ ) { tempValue = valueAt( ( iterate + i ).key() ); - cleanObjects(); MidiTime newTime; if ( ( iterate + i ).key() <= length ) From 2818bd736a8ec6e7d5a609e5694cc5dc2c8686fd Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Mon, 5 Jan 2015 17:40:14 +0200 Subject: [PATCH 035/172] Looks like locking the mutex in SF2 player is needed around a few more operations than before, at least while importing MIDI. Should fix #1544 --- plugins/sf2_player/sf2_player.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/sf2_player/sf2_player.cpp b/plugins/sf2_player/sf2_player.cpp index 91d9d6e8f..f2acd2f07 100644 --- a/plugins/sf2_player/sf2_player.cpp +++ b/plugins/sf2_player/sf2_player.cpp @@ -649,14 +649,19 @@ void sf2Instrument::play( sampleFrame * _working_buffer ) if( m_lastMidiPitch != currentMidiPitch ) { m_lastMidiPitch = currentMidiPitch; + m_synthMutex.lock(); fluid_synth_pitch_bend( m_synth, m_channel, m_lastMidiPitch ); + m_synthMutex.unlock(); + } const int currentMidiPitchRange = instrumentTrack()->midiPitchRange(); if( m_lastMidiPitchRange != currentMidiPitchRange ) { m_lastMidiPitchRange = currentMidiPitchRange; + m_synthMutex.lock(); fluid_synth_pitch_wheel_sens( m_synth, m_channel, m_lastMidiPitchRange ); + m_synthMutex.unlock(); } // if we have no new noteons/noteoffs, just render a period and call it a day if( m_playingNotes.isEmpty() ) From 7588f235ee158f782bf3f687bce53dc9ad079d95 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 5 Jan 2015 18:39:44 +0000 Subject: [PATCH 036/172] Proposed fix for 1352 Mk2, move the loaded instrument to the parent thread --- include/TrackContainerView.h | 14 ++++++++++++++ src/gui/TrackContainerView.cpp | 20 +++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h index 7e9dee437..3431289b1 100644 --- a/include/TrackContainerView.h +++ b/include/TrackContainerView.h @@ -33,6 +33,7 @@ #include "Track.h" #include "JournallingObject.h" +#include "InstrumentTrack.h" class QVBoxLayout; @@ -182,6 +183,19 @@ signals: } ; +class InstrumentLoaderThread : public QThread +{ + Q_OBJECT +public: + InstrumentLoaderThread( QObject *parent = 0, InstrumentTrack *it = 0, + QString name = "" ); + void run(); + +private: + InstrumentTrack *m_it; + QString m_name; + QThread *m_containerThread; +}; #endif diff --git a/src/gui/TrackContainerView.cpp b/src/gui/TrackContainerView.cpp index 94c72d278..a2d3ce12b 100644 --- a/src/gui/TrackContainerView.cpp +++ b/src/gui/TrackContainerView.cpp @@ -325,7 +325,9 @@ void TrackContainerView::dropEvent( QDropEvent * _de ) InstrumentTrack * it = dynamic_cast( Track::create( Track::InstrumentTrack, m_tc ) ); - it->loadInstrument( value ); + InstrumentLoaderThread *ilt = new InstrumentLoaderThread( + this, it, value ); + ilt->start(); //it->toggledInstrumentTrackButton( true ); _de->accept(); } @@ -453,6 +455,22 @@ void TrackContainerView::scrollArea::wheelEvent( QWheelEvent * _we ) +InstrumentLoaderThread::InstrumentLoaderThread( QObject *parent, InstrumentTrack *it, QString name ) : + QThread( parent ), + m_it( it ), + m_name( name ) +{ + m_containerThread = thread(); +} + +void InstrumentLoaderThread::run() +{ + Instrument *i = m_it->loadInstrument( m_name ); + QObject *parent = i->parent(); + i->setParent( 0 ); + i->moveToThread( m_containerThread ); + i->setParent( parent ); +} From 3c44012defec2ece54209251bf7970e46f9d091e Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 5 Jan 2015 21:41:48 +0000 Subject: [PATCH 037/172] Proposed fix for 1522 Noise at the end of Sample previews --- src/core/SamplePlayHandle.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/core/SamplePlayHandle.cpp b/src/core/SamplePlayHandle.cpp index a881a5f8e..1bcf6691e 100644 --- a/src/core/SamplePlayHandle.cpp +++ b/src/core/SamplePlayHandle.cpp @@ -98,14 +98,15 @@ SamplePlayHandle::~SamplePlayHandle() void SamplePlayHandle::play( sampleFrame * buffer ) { + const fpp_t fpp = Engine::mixer()->framesPerPeriod(); //play( 0, _try_parallelizing ); if( framesDone() >= totalFrames() ) { + memset( buffer, 0, sizeof( sampleFrame ) * fpp ); return; } sampleFrame * workingBuffer = buffer; - const fpp_t fpp = Engine::mixer()->framesPerPeriod(); f_cnt_t frames = fpp; // apply offset for the first period From f57d98fb0b249fb5e42d05814128620cc0237c6f Mon Sep 17 00:00:00 2001 From: Dave French Date: Tue, 6 Jan 2015 00:09:08 +0000 Subject: [PATCH 038/172] Proposed fix for 1350 Minimized Song_Editor & BB_Editor tracks should not allow graphics to be cut off. --- include/Track.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/Track.h b/include/Track.h index f6218c53d..800524a9e 100644 --- a/include/Track.h +++ b/include/Track.h @@ -67,7 +67,7 @@ const int TRACK_OP_WIDTH_COMPACT = 60; * Tracks can be resized by shift-dragging anywhere inside the track * display. This sets the minimum size in pixels for a track. */ -const int MINIMAL_TRACK_HEIGHT = 8; +const int MINIMAL_TRACK_HEIGHT = 32; const int DEFAULT_TRACK_HEIGHT = 32; const int TCO_BORDER_WIDTH = 2; From 0df3998f956978a2d63490f63555cc810ddbf233 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 6 Jan 2015 15:59:15 +0100 Subject: [PATCH 039/172] Move some gui initialization to GuiApplication's constructor --- src/core/main.cpp | 21 --------------------- src/gui/GuiApplication.cpp | 29 ++++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/src/core/main.cpp b/src/core/main.cpp index 369a580db..cfa7ae5d0 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -419,26 +419,6 @@ int main( int argc, char * * argv ) if( render_out.isEmpty() ) { - // init style and palette - LmmsStyle * lmmsstyle = new LmmsStyle(); - QApplication::setStyle( lmmsstyle ); - - LmmsPalette * lmmspal = new LmmsPalette( NULL, lmmsstyle ); - QPalette lpal = lmmspal->palette(); - - QApplication::setPalette( lpal ); - LmmsStyle::s_palette = &lpal; - - - // show splash screen - QSplashScreen splashScreen( embed::getIconPixmap( "splash" ) ); - splashScreen.show(); - splashScreen.showMessage( MainWindow::tr( "Version %1" ).arg( LMMS_VERSION ), - Qt::AlignRight | Qt::AlignBottom, Qt::white ); - qApp->processEvents(); - - // init central engine which handles all components of LMMS - Engine::init(false); new GuiApplication(); // re-intialize RNG - shared libraries might have srand() or @@ -501,7 +481,6 @@ int main( int argc, char * * argv ) } } - splashScreen.finish(gui->mainWindow()); } else { diff --git a/src/gui/GuiApplication.cpp b/src/gui/GuiApplication.cpp index ef62b2b57..5801e52f6 100644 --- a/src/gui/GuiApplication.cpp +++ b/src/gui/GuiApplication.cpp @@ -24,6 +24,11 @@ #include "GuiApplication.h" +#include "lmmsversion.h" + +#include "LmmsStyle.h" +#include "LmmsPalette.h" + #include "AutomationEditor.h" #include "BBEditor.h" #include "ControllerRackView.h" @@ -34,7 +39,8 @@ #include "ProjectNotes.h" #include "SongEditor.h" -#include "QApplication" +#include +#include GuiApplication* GuiApplication::s_instance = nullptr; @@ -47,6 +53,26 @@ GuiApplication::GuiApplication() { s_instance = this; + // Init style and palette + LmmsStyle* lmmsstyle = new LmmsStyle(); + QApplication::setStyle(lmmsstyle); + + LmmsPalette* lmmspal = new LmmsPalette(nullptr, lmmsstyle); + QPalette* lpal = new QPalette(lmmspal->palette()); + + QApplication::setPalette( *lpal ); + LmmsStyle::s_palette = lpal; + + // Show splash screen + QSplashScreen splashScreen( embed::getIconPixmap( "splash" ) ); + splashScreen.show(); + splashScreen.showMessage( MainWindow::tr( "Version %1" ).arg( LMMS_VERSION ), + Qt::AlignRight | Qt::AlignBottom, Qt::white ); + qApp->processEvents(); + + // Init central engine which handles all components of LMMS + Engine::init(false); + m_mainWindow = new MainWindow; m_songEditor = new SongEditorWindow(Engine::getSong()); @@ -58,6 +84,7 @@ GuiApplication::GuiApplication() m_automationEditor = new AutomationEditorWindow; m_mainWindow->finalize(); + splashScreen.finish(m_mainWindow); Engine::s_hasGUI = true; } From 74407945978ec57a0b1c74a4eceaa866c2c19540 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Tue, 6 Jan 2015 18:18:16 +0100 Subject: [PATCH 040/172] Don't display resize cursor for non-resizable TCOs --- include/Track.h | 13 +++++++++++-- include/TrackContainer.h | 17 +++++++++++++++++ src/core/AutomationPattern.cpp | 23 +++++++++++++++++++++++ src/core/BBTrackContainer.cpp | 1 + src/core/Song.cpp | 1 + src/core/Track.cpp | 18 ++---------------- src/gui/AutomationPatternView.cpp | 1 - src/tracks/BBTrack.cpp | 1 + src/tracks/Pattern.cpp | 12 +++++++++++- src/tracks/SampleTrack.cpp | 10 ++++++++++ 10 files changed, 77 insertions(+), 20 deletions(-) diff --git a/include/Track.h b/include/Track.h index 800524a9e..d09b955fc 100644 --- a/include/Track.h +++ b/include/Track.h @@ -121,6 +121,16 @@ public: return m_length; } + inline void setAutoResize( const bool _r ) + { + m_autoResize = _r; + } + + inline const bool getAutoResize() const + { + return m_autoResize; + } + virtual void movePosition( const MidiTime & _pos ); virtual void changeLength( const MidiTime & _length ); @@ -165,6 +175,7 @@ private: BoolModel m_mutedModel; BoolModel m_soloModel; + bool m_autoResize; bool m_selectViewOnCreate; @@ -216,7 +227,6 @@ protected: virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); - void setAutoResizeEnabled( bool _e = false ); float pixelsPerTact(); inline TrackView * getTrackView() @@ -248,7 +258,6 @@ private: TrackContentObject * m_tco; TrackView * m_trackView; Actions m_action; - bool m_autoResize; QPoint m_initialMousePos; QPoint m_initialMouseGlobalPos; diff --git a/include/TrackContainer.h b/include/TrackContainer.h index d932f32dd..2e31e0814 100644 --- a/include/TrackContainer.h +++ b/include/TrackContainer.h @@ -42,6 +42,11 @@ class EXPORT TrackContainer : public Model, public JournallingObject Q_OBJECT public: typedef QVector TrackList; + enum TrackContainerTypes + { + BBContainer, + SongContainer + } ; TrackContainer(); virtual ~TrackContainer(); @@ -78,6 +83,16 @@ public: return "trackcontainer"; } + inline void setType( TrackContainerTypes newType ) + { + m_TrackContainerType = newType; + } + + inline TrackContainerTypes type() const + { + return m_TrackContainerType; + } + signals: void trackAdded( Track * _track ); @@ -88,6 +103,8 @@ protected: private: TrackList m_tracks; + TrackContainerTypes m_TrackContainerType; + friend class TrackContainerView; friend class Track; diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 02566b65c..714906058 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -54,6 +54,19 @@ AutomationPattern::AutomationPattern( AutomationTrack * _auto_track ) : m_lastRecordedValue( 0 ) { changeLength( MidiTime( 1, 0 ) ); + if( getTrack() ) + { + switch( getTrack()->trackContainer()->type() ) + { + case TrackContainer::BBContainer: + setAutoResize( true ); + break; + + case TrackContainer::SongContainer: + setAutoResize( false ); + break; + } + } } @@ -72,6 +85,16 @@ AutomationPattern::AutomationPattern( const AutomationPattern & _pat_to_copy ) : m_timeMap[it.key()] = it.value(); m_tangents[it.key()] = _pat_to_copy.m_tangents[it.key()]; } + switch( getTrack()->trackContainer()->type() ) + { + case TrackContainer::BBContainer: + setAutoResize( true ); + break; + + case TrackContainer::SongContainer: + setAutoResize( false ); + break; + } } diff --git a/src/core/BBTrackContainer.cpp b/src/core/BBTrackContainer.cpp index 7bf59f1d7..839e40994 100644 --- a/src/core/BBTrackContainer.cpp +++ b/src/core/BBTrackContainer.cpp @@ -42,6 +42,7 @@ BBTrackContainer::BBTrackContainer() : // not change upon setCurrentBB()-call connect( &m_bbComboBoxModel, SIGNAL( dataUnchanged() ), this, SLOT( currentBBChanged() ) ); + setType( BBContainer ); } diff --git a/src/core/Song.cpp b/src/core/Song.cpp index e15533cdf..c4cc905d8 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -114,6 +114,7 @@ Song::Song() : this, SLOT( masterPitchChanged() ) );*/ qRegisterMetaType( "note" ); + setType( SongContainer ); } diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 5acbb6477..486667b14 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -248,7 +248,6 @@ TrackContentObjectView::TrackContentObjectView( TrackContentObject * _tco, m_tco( _tco ), m_trackView( _tv ), m_action( NoAction ), - m_autoResize( false ), m_initialMousePos( QPoint( 0, 0 ) ), m_initialMouseGlobalPos( QPoint( 0, 0 ) ), m_hint( NULL ), @@ -656,7 +655,7 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) "a copy." ), embed::getIconPixmap( "hint" ), 0 ); } - else if( m_autoResize == false ) + else if( !m_tco->getAutoResize() ) { m_action = Resize; m_oldTime = m_tco->length(); @@ -846,7 +845,7 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) } else { - if( _me->x() > width() - RESIZE_GRIP_WIDTH && !_me->buttons() ) + if( _me->x() > width() - RESIZE_GRIP_WIDTH && !_me->buttons() && !m_tco->getAutoResize() ) { if( QApplication::overrideCursor() != NULL && QApplication::overrideCursor()->shape() != @@ -957,19 +956,6 @@ float TrackContentObjectView::pixelsPerTact() -/*! \brief Set whether this trackContentObjectView can resize. - * - * \param _e The boolean state of whether this track content object view - * is allowed to resize. - */ -void TrackContentObjectView::setAutoResizeEnabled( bool _e ) -{ - m_autoResize = _e; -} - - - - /*! \brief Detect whether the mouse moved more than n pixels on screen. * * \param _me The QMouseEvent. diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 1c404e6ef..3792724ce 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -54,7 +54,6 @@ AutomationPatternView::AutomationPatternView( AutomationPattern * _pattern, setAttribute( Qt::WA_OpaquePaintEvent, true ); setFixedHeight( parentWidget()->height() - 2 ); - setAutoResizeEnabled( false ); ToolTip::add( this, tr( "double-click to open this pattern in " "automation editor" ) ); diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp index 5a76d56a0..50d57bef6 100644 --- a/src/tracks/BBTrack.cpp +++ b/src/tracks/BBTrack.cpp @@ -58,6 +58,7 @@ BBTCO::BBTCO( Track * _track ) : changeLength( MidiTime( t, 0 ) ); restoreJournallingState(); } + setAutoResize( false ); } diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index 727fbd948..de76f7761 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -66,6 +66,7 @@ Pattern::Pattern( InstrumentTrack * _instrument_track ) : { setName( _instrument_track->name() ); init(); + setAutoResize( true ); } @@ -83,6 +84,16 @@ Pattern::Pattern( const Pattern& other ) : } init(); + switch( getTrack()->trackContainer()->type() ) + { + case TrackContainer::BBContainer: + setAutoResize( true ); + break; + + case TrackContainer::SongContainer: + setAutoResize( false ); + break; + } } @@ -635,7 +646,6 @@ PatternView::PatternView( Pattern* pattern, TrackView* parent ) : } setFixedHeight( parentWidget()->height() - 2 ); - setAutoResizeEnabled( false ); ToolTip::add( this, tr( "double-click to open this pattern in piano-roll\n" diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 891790af2..633f41c69 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -62,6 +62,16 @@ SampleTCO::SampleTCO( Track * _track ) : // change length of this TCO connect( Engine::getSong(), SIGNAL( tempoChanged( bpm_t ) ), this, SLOT( updateLength( bpm_t ) ) ); + switch( getTrack()->trackContainer()->type() ) + { + case TrackContainer::BBContainer: + setAutoResize( true ); + break; + + case TrackContainer::SongContainer: + setAutoResize( false ); + break; + } } From 01fac0d342512fb0b21e864ee74a509d2359ff7a Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Tue, 6 Jan 2015 18:50:51 +0100 Subject: [PATCH 041/172] Add default behaviour to switch --- src/core/AutomationPattern.cpp | 4 ++++ src/tracks/Pattern.cpp | 2 ++ src/tracks/SampleTrack.cpp | 2 ++ 3 files changed, 8 insertions(+) diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 714906058..fb3cace93 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -63,6 +63,8 @@ AutomationPattern::AutomationPattern( AutomationTrack * _auto_track ) : break; case TrackContainer::SongContainer: + // move down + default: setAutoResize( false ); break; } @@ -92,6 +94,8 @@ AutomationPattern::AutomationPattern( const AutomationPattern & _pat_to_copy ) : break; case TrackContainer::SongContainer: + // move down + default: setAutoResize( false ); break; } diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index de76f7761..280d24036 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -91,6 +91,8 @@ Pattern::Pattern( const Pattern& other ) : break; case TrackContainer::SongContainer: + // move down + default: setAutoResize( false ); break; } diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 633f41c69..b438b985a 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -69,6 +69,8 @@ SampleTCO::SampleTCO( Track * _track ) : break; case TrackContainer::SongContainer: + // move down + default: setAutoResize( false ); break; } From 13357e57c43644cb82413da2d2abac3da1fe4f51 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 6 Jan 2015 23:07:28 +0100 Subject: [PATCH 042/172] Change default build type * Remove hard-coded compile flags (-O2 and -g) * Make Release the default build type Fixes #1552 --- CMakeLists.txt | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8fa4f7ff..e84ff400f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -368,9 +368,17 @@ IF (CMAKE_COMPILER_IS_GNUCXX AND ((CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.8 SET(WERROR_FLAGS "${WERROR_FLAGS} -Wno-array-bounds") ENDIF() -SET(CMAKE_C_FLAGS "-O2 -g ${WERROR_FLAGS} ${CMAKE_C_FLAGS}") -SET(CMAKE_CXX_FLAGS "-O2 -g -fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}") -SET(CMAKE_C_FLAGS_DEBUG "-DLMMS_DEBUG") +IF(NOT CMAKE_BUILD_TYPE) + message(STATUS "Setting build type to 'Release' as none was specified.") + set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build." FORCE) + # Set the possible values of build type for cmake-gui + SET_PROPERTY(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release" + "MinSizeRel" "RelWithDebInfo") +ENDIF() + +SET(CMAKE_C_FLAGS "${WERROR_FLAGS} ${CMAKE_C_FLAGS}") +SET(CMAKE_CXX_FLAGS "-fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}") +SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DLMMS_DEBUG") # people simply updating git will still have this and mess up build with it From 0c4833ca4a007187a807b3eb5e3d187bf158e79a Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 6 Jan 2015 23:40:14 +0100 Subject: [PATCH 043/172] Adjust automation editor flip implementation --- include/AutomationEditor.h | 7 ++-- include/AutomationPattern.h | 1 + src/core/AutomationPattern.cpp | 8 +++++ src/gui/editors/AutomationEditor.cpp | 50 +++++++++++----------------- 4 files changed, 31 insertions(+), 35 deletions(-) diff --git a/include/AutomationEditor.h b/include/AutomationEditor.h index a96c8ae71..64cfeb718 100644 --- a/include/AutomationEditor.h +++ b/include/AutomationEditor.h @@ -131,9 +131,6 @@ protected slots: void setEditMode(AutomationEditor::EditModes mode); void setEditMode(int mode); - void flipYButtonPressed(); - void flipXButtonPressed(); - void setProgressionType(AutomationPattern::ProgressionTypes type); void setProgressionType(int type); void setTension(); @@ -286,8 +283,8 @@ private: QAction* m_linearAction; QAction* m_cubicHermiteAction; - ToolButton * m_flipYButton; - ToolButton * m_flipXButton; + QAction* m_flipYAction; + QAction* m_flipXAction; Knob * m_tensionKnob; diff --git a/include/AutomationPattern.h b/include/AutomationPattern.h index 231b73836..5257cecab 100644 --- a/include/AutomationPattern.h +++ b/include/AutomationPattern.h @@ -159,6 +159,7 @@ public slots: void clear(); void objectDestroyed( jo_id_t ); void flipY( int min, int max ); + void flipY(); void flipX( int length = -1 ); private: diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 7564a46f0..ac69b6539 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -408,6 +408,14 @@ void AutomationPattern::flipY( int min, int max ) +void AutomationPattern::flipY() +{ + flipY(getMin(), getMax()); +} + + + + void AutomationPattern::flipX( int length ) { timeMap tempMap; diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index 897acfbff..57f0bae86 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -1645,21 +1645,6 @@ void AutomationEditor::setEditMode(AutomationEditor::EditModes mode) -void AutomationEditor::flipYButtonPressed() -{ - m_pattern->flipY( m_minLevel, m_maxLevel ); -} - - - - -void AutomationEditor::flipXButtonPressed() -{ - m_pattern->flipX(); -} - - - void AutomationEditor::setEditMode(int mode) { setEditMode((AutomationEditor::EditModes) mode); @@ -2036,20 +2021,13 @@ AutomationEditorWindow::AutomationEditorWindow() : QAction* eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); eraseAction->setShortcut(Qt::SHIFT | Qt::Key_E); - m_flipYButton = new ToolButton( embed::getIconPixmap( "flip_y" ), - tr( "Flip Vertically" ), - m_editor, SLOT( flipYButtonPressed() ), - m_toolBar ); + m_flipYAction = new QAction(embed::getIconPixmap("flip_y"), tr("Flip vertically"), this); + m_flipXAction = new QAction(embed::getIconPixmap("flip_x"), tr("Flip horizontally"), this); - m_flipXButton = new ToolButton( embed::getIconPixmap( "flip_x" ), - tr( "Flip Horizontally" ), - m_editor, SLOT( flipXButtonPressed() ), - m_toolBar ); - - m_flipYButton->setWhatsThis( + m_flipYAction->setWhatsThis( tr( "Click here and the pattern will be inverted." "The points are flipped in the y direction. " ) ); - m_flipXButton->setWhatsThis( + m_flipXAction->setWhatsThis( tr( "Click here and the pattern will be reversed. " "The points are flipped in the x direction." ) ); @@ -2208,8 +2186,8 @@ AutomationEditorWindow::AutomationEditorWindow() : m_toolBar->addAction(eraseAction); // m_toolBar->addAction(m_selectButton); // m_toolBar->addAction(m_moveButton); - m_toolBar->addWidget(m_flipXButton); - m_toolBar->addWidget(m_flipYButton); + m_toolBar->addAction(m_flipXAction); + m_toolBar->addAction(m_flipYAction); m_toolBar->addSeparator(); m_toolBar->addAction(m_discreteAction); m_toolBar->addAction(m_linearAction); @@ -2251,13 +2229,17 @@ AutomationEditorWindow::~AutomationEditorWindow() void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) { + // Disconnect our old pattern if (currentPattern() != nullptr) { m_editor->m_pattern->disconnect(this); + m_flipXAction->disconnect(); + m_flipYAction->disconnect(); } m_editor->setCurrentPattern(pattern); + // Set our window's title if (pattern == nullptr) { setWindowTitle( tr( "Automation Editor - no pattern" ) ); @@ -2266,6 +2248,7 @@ void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) setWindowTitle( tr( "Automation Editor - %1" ).arg( m_editor->m_pattern->name() ) ); + switch(m_editor->m_pattern->progressionType()) { case AutomationPattern::DiscreteProgression: @@ -2279,8 +2262,15 @@ void AutomationEditorWindow::setCurrentPattern(AutomationPattern* pattern) break; } - connect(pattern, SIGNAL(dataChanged()), this, SLOT(update())); - connect(pattern, SIGNAL(destroyed()), this, SLOT(clearCurrentPattern())); + // Connect new pattern + if (pattern) + { + connect(pattern, SIGNAL(dataChanged()), this, SLOT(update())); + connect(pattern, SIGNAL(destroyed()), this, SLOT(clearCurrentPattern())); + + connect(m_flipXAction, SIGNAL(triggered()), pattern, SLOT(flipX())); + connect(m_flipYAction, SIGNAL(triggered()), pattern, SLOT(flipY())); + } emit currentPatternChanged(); } From e0dbfa696ed9f96e27c15c291b167af025e697e9 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Wed, 7 Jan 2015 00:22:40 +0100 Subject: [PATCH 044/172] Remove Engine's has_gui option --- include/Engine.h | 12 ++++-------- src/core/Engine.cpp | 12 ++++++++---- src/core/main.cpp | 2 +- src/gui/GuiApplication.cpp | 9 ++++----- 4 files changed, 17 insertions(+), 18 deletions(-) diff --git a/include/Engine.h b/include/Engine.h index 322f109c9..5106222dc 100644 --- a/include/Engine.h +++ b/include/Engine.h @@ -53,13 +53,10 @@ class ControllerRackView; class EXPORT Engine { public: - static void init( const bool _has_gui = true ); + static void init(); static void destroy(); - static bool hasGUI() - { - return s_hasGUI; - } + static bool hasGUI(); static void setSuppressMessages( bool _on ) { @@ -68,7 +65,7 @@ public: static bool suppressMessages() { - return !s_hasGUI || s_suppressMessages; + return !hasGUI() || s_suppressMessages; } // core @@ -130,7 +127,6 @@ private: delete tmp; } - static bool s_hasGUI; static bool s_suppressMessages; static float s_framesPerTick; @@ -149,7 +145,7 @@ private: static void initPluginFileHandling(); friend class GuiApplication; -} ; +}; diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index e569e612e..cbe826bed 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -38,8 +38,9 @@ #include "Song.h" #include "BandLimitedWave.h" +#include "GuiApplication.h" + -bool Engine::s_hasGUI = true; bool Engine::s_suppressMessages = false; float Engine::s_framesPerTick; Mixer* Engine::s_mixer = NULL; @@ -54,10 +55,8 @@ QMap Engine::s_pluginFileHandling; -void Engine::init( const bool _has_gui ) +void Engine::init() { - s_hasGUI = _has_gui; - // generate (load from file) bandlimited wavetables BandLimitedWave::generateWaves(); @@ -109,6 +108,11 @@ void Engine::destroy() delete ConfigManager::inst(); } +bool Engine::hasGUI() +{ + return gui != nullptr; +} + diff --git a/src/core/main.cpp b/src/core/main.cpp index cfa7ae5d0..d3f98d909 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -485,7 +485,7 @@ int main( int argc, char * * argv ) else { // we're going to render our song - Engine::init( false ); + Engine::init(); printf( "loading project...\n" ); Engine::getSong()->loadProject( file_to_load ); diff --git a/src/gui/GuiApplication.cpp b/src/gui/GuiApplication.cpp index 5801e52f6..78cf609ef 100644 --- a/src/gui/GuiApplication.cpp +++ b/src/gui/GuiApplication.cpp @@ -51,8 +51,6 @@ GuiApplication* GuiApplication::instance() GuiApplication::GuiApplication() { - s_instance = this; - // Init style and palette LmmsStyle* lmmsstyle = new LmmsStyle(); QApplication::setStyle(lmmsstyle); @@ -71,7 +69,9 @@ GuiApplication::GuiApplication() qApp->processEvents(); // Init central engine which handles all components of LMMS - Engine::init(false); + Engine::init(); + + s_instance = this; m_mainWindow = new MainWindow; @@ -85,11 +85,10 @@ GuiApplication::GuiApplication() m_mainWindow->finalize(); splashScreen.finish(m_mainWindow); - - Engine::s_hasGUI = true; } GuiApplication::~GuiApplication() { InstrumentTrackView::cleanupWindowCache(); + s_instance = nullptr; } From 421c071ab06fb1dc902b47ed55c9d88fe77132d9 Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Wed, 7 Jan 2015 15:55:58 -0200 Subject: [PATCH 045/172] Fix muted track not highlighted on selection Fix #1239 --- src/gui/AutomationPatternView.cpp | 11 ++++++++--- src/tracks/BBTrack.cpp | 6 +++--- src/tracks/Pattern.cpp | 8 ++++++-- src/tracks/SampleTrack.cpp | 11 ++++++++--- 4 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 1c404e6ef..7885905f7 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -259,11 +259,16 @@ void AutomationPatternView::paintEvent( QPaintEvent * ) QLinearGradient lingrad( 0, 0, 0, height() ); QColor c; + if( !( m_pat->getTrack()->isMuted() || m_pat->isMuted() ) ) - c = isSelected() ? QColor( 0, 0, 224 ) - : styleColor; + c = styleColor; else - c = QColor( 80,80,80 ); + c = QColor( 80, 80, 80 ); + + if( isSelected() == true ) + { + c = QColor( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); + } lingrad.setColorAt( 1, c.darker( 300 ) ); lingrad.setColorAt( 0, c ); diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp index 5a76d56a0..011e5e826 100644 --- a/src/tracks/BBTrack.cpp +++ b/src/tracks/BBTrack.cpp @@ -215,7 +215,7 @@ void BBTCOView::paintEvent( QPaintEvent * ) { QPainter p( this ); - QColor col = m_bbTCO->m_useStyleColor + QColor col = m_bbTCO->m_useStyleColor ? p.pen().brush().color() : m_bbTCO->colorObj(); @@ -223,10 +223,10 @@ void BBTCOView::paintEvent( QPaintEvent * ) { col = QColor( 160, 160, 160 ); } + if( isSelected() == true ) { - col = QColor( qMax( col.red() - 128, 0 ), - qMax( col.green() - 128, 0 ), 255 ); + col = QColor( qMax( col.red() - 128, 0 ), qMax( col.green() - 128, 0 ), 255 ); } QLinearGradient lingrad( 0, 0, 0, height() ); diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index 727fbd948..dc61aa6d7 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -907,11 +907,15 @@ void PatternView::paintEvent( QPaintEvent * ) if(( m_pat->m_patternType != Pattern::BeatPattern ) && !( m_pat->getTrack()->isMuted() || m_pat->isMuted() )) - c = isSelected() ? QColor( 0, 0, 224 ) - : styleColor; + c = styleColor; else c = QColor( 80, 80, 80 ); + if( isSelected() == true ) + { + c = QColor( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); + } + if( m_pat->m_patternType != Pattern::BeatPattern ) { lingrad.setColorAt( 1, c.darker( 300 ) ); diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 891790af2..7e3be4f4c 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -340,9 +340,14 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe ) QColor c; if( !( m_tco->getTrack()->isMuted() || m_tco->isMuted() ) ) - c = isSelected() ? QColor( 0, 0, 224 ) - : styleColor; - else c = QColor( 80, 80, 80 ); + c = styleColor; + else + c = QColor( 80, 80, 80 ); + + if( isSelected() == true ) + { + c = QColor( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); + } QLinearGradient grad( 0, 0, 0, height() ); From c0fc56eaea272a37bc82ef81fd97cc7d49bd7db5 Mon Sep 17 00:00:00 2001 From: Dave French Date: Wed, 7 Jan 2015 20:08:18 +0000 Subject: [PATCH 046/172] Proposed fix 888 Bar, Beat and Tick should follow dragged timeline --- src/gui/widgets/TimeDisplayWidget.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/gui/widgets/TimeDisplayWidget.cpp b/src/gui/widgets/TimeDisplayWidget.cpp index d2afe9240..01b447d92 100644 --- a/src/gui/widgets/TimeDisplayWidget.cpp +++ b/src/gui/widgets/TimeDisplayWidget.cpp @@ -106,12 +106,13 @@ void TimeDisplayWidget::updateTime() break; case BarsTicks: - m_majorLCD.setValue( s->getTacts() + 1 ); - m_minorLCD.setValue( ( s->getTicks() % s->ticksPerTact() ) / - ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) +1 ); -; - m_milliSecondsLCD.setValue( ( s->getTicks() % s->ticksPerTact() ) % - ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) ); + int tick; + tick = ( s->getMilliseconds() * s->getTempo() * 48 ) / 60000 ; + m_majorLCD.setValue( (int)(tick / s->ticksPerTact() ) + 1); + m_minorLCD.setValue( ( tick % s->ticksPerTact() ) / + ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) +1 ); + m_milliSecondsLCD.setValue( ( tick % s->ticksPerTact() ) % + ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) ); break; default: break; From db6f3e6e50b925ec2da383719a1d80a8259b724c Mon Sep 17 00:00:00 2001 From: tresf Date: Wed, 7 Jan 2015 23:28:16 -0500 Subject: [PATCH 047/172] Fix nes array bounds error --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e84ff400f..583a6e0fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -364,7 +364,7 @@ IF(NOT LMMS_BUILD_APPLE) ENDIF() # Due to a regression in gcc-4.8.X, we need to disable array-bounds check -IF (CMAKE_COMPILER_IS_GNUCXX AND ((CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.8.0") OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.0"))) +IF (CMAKE_COMPILER_IS_GNUCXX AND ((CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL "4.8.0") OR (CMAKE_CXX_COMPILER_VERSION VERSION_GREATER "4.8.0") OR LMMS_BUILD_WIN32)) SET(WERROR_FLAGS "${WERROR_FLAGS} -Wno-array-bounds") ENDIF() From 7b3e4265b8ffe28820b460c5265b8c15f9af1918 Mon Sep 17 00:00:00 2001 From: Dave French Date: Thu, 8 Jan 2015 06:15:18 +0000 Subject: [PATCH 048/172] Proposed fix 1388 Remove auto-naming of copied blocks --- src/core/Track.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 5acbb6477..7ee6c1f59 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -1402,6 +1402,11 @@ bool TrackContentWidget::pasteSelection( MidiTime tcoPos, QDropEvent * _de ) { tco->selectViewOnCreate( true ); } + //check tco name, if the same as source track name dont copy + if( tco->name() == tracks[trackIndex]->name() ) + { + tco->setName( "" ); + } } AutomationPattern::resolveAllIDs(); From 736c44ab8d6ef9cd7a3174a040f5b8dd0aba397e Mon Sep 17 00:00:00 2001 From: Dave French Date: Thu, 8 Jan 2015 08:37:07 +0000 Subject: [PATCH 049/172] 888 changed 48 to DefaultTicksPerTact/4 --- src/gui/widgets/TimeDisplayWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/widgets/TimeDisplayWidget.cpp b/src/gui/widgets/TimeDisplayWidget.cpp index 01b447d92..981af4b43 100644 --- a/src/gui/widgets/TimeDisplayWidget.cpp +++ b/src/gui/widgets/TimeDisplayWidget.cpp @@ -107,7 +107,7 @@ void TimeDisplayWidget::updateTime() case BarsTicks: int tick; - tick = ( s->getMilliseconds() * s->getTempo() * 48 ) / 60000 ; + tick = ( s->getMilliseconds() * s->getTempo() * (DefaultTicksPerTact / 4 ) ) / 60000 ; m_majorLCD.setValue( (int)(tick / s->ticksPerTact() ) + 1); m_minorLCD.setValue( ( tick % s->ticksPerTact() ) / ( s->ticksPerTact() / s->getTimeSigModel().getNumerator() ) +1 ); From a43a6bb3babc1f80d001280ebfdd809414253925 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 8 Jan 2015 10:07:27 +0100 Subject: [PATCH 050/172] Travis: Make verbose output --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6d79557ce..93ad9ea4b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ script: - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && make -j4 VERBOSE=1; fi - - if [ $TARGET_OS != linux ]; then make; fi + - if [ $TARGET_OS != linux ]; then make VERBOSE=1; fi before_deploy: make package deploy: provider: releases From 78350045a2cc21898415f15a6a34106503e85083 Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Wed, 7 Jan 2015 08:14:48 +0200 Subject: [PATCH 051/172] Fix things that won't build if -DLMMS_DEBUG is in CXX_FLAGS. --- src/core/EffectChain.cpp | 2 +- src/core/SampleRecordHandle.cpp | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/core/EffectChain.cpp b/src/core/EffectChain.cpp index f7a15bcf7..5890566a3 100644 --- a/src/core/EffectChain.cpp +++ b/src/core/EffectChain.cpp @@ -221,7 +221,7 @@ bool EffectChain::processAudioBuffer( sampleFrame * _buf, const fpp_t _frames, b it = m_effects.end()-1; printf( "numerical overflow after processing " "plugin \"%s\"\n", ( *it )-> - publicName().toUtf8().constData() ); + descriptor()->name); break; } } diff --git a/src/core/SampleRecordHandle.cpp b/src/core/SampleRecordHandle.cpp index dc850cb70..233e12561 100644 --- a/src/core/SampleRecordHandle.cpp +++ b/src/core/SampleRecordHandle.cpp @@ -30,7 +30,9 @@ #include "Pattern.h" #include "SampleBuffer.h" #include "SampleTrack.h" - +#ifdef LMMS_DEBUG +#include +#endif SampleRecordHandle::SampleRecordHandle( SampleTCO* tco ) : From 2954ea3b43fcfa9ee11828d7e04478bd57430a36 Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Wed, 7 Jan 2015 08:20:48 +0200 Subject: [PATCH 052/172] ...and prefer "debug.h" to a straight include of --- src/core/SampleRecordHandle.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/core/SampleRecordHandle.cpp b/src/core/SampleRecordHandle.cpp index 233e12561..590333492 100644 --- a/src/core/SampleRecordHandle.cpp +++ b/src/core/SampleRecordHandle.cpp @@ -30,9 +30,7 @@ #include "Pattern.h" #include "SampleBuffer.h" #include "SampleTrack.h" -#ifdef LMMS_DEBUG -#include -#endif +#include "debug.h" SampleRecordHandle::SampleRecordHandle( SampleTCO* tco ) : From b5da3bf1ee0d45db731f7928c771718134a3fc69 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 8 Jan 2015 10:21:54 +0100 Subject: [PATCH 053/172] Mailmap entries --- .mailmap | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.mailmap b/.mailmap index 067e8929c..59e5ec6f8 100644 --- a/.mailmap +++ b/.mailmap @@ -1,4 +1,6 @@ +Alexandre Almeida Tobias Doerffel +Dave French Paul Giblock Paul Giblock Andrew Kelley @@ -6,6 +8,14 @@ Andrew Kelley Janne Sinisalo Raine M. Ekman Raine M. Ekman -Lukas W +Lukas W Vesa +Vesa +Tres Finocchiaro +Tres Finocchiaro +Tres Finocchiaro +Rüdiger Ranft <_rdi_@web.de> +Spekular +unfa +mikobuntu Jonathan Aquilina From 94a779f3c6826d5704ae3d5148a552c62eca297f Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Wed, 7 Jan 2015 22:02:23 +0200 Subject: [PATCH 054/172] Add -DLMMS_DEBUG to CMAKE_CXX_FLAGS_DEBUG --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 583a6e0fa..8e1d1b5d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -379,6 +379,7 @@ ENDIF() SET(CMAKE_C_FLAGS "${WERROR_FLAGS} ${CMAKE_C_FLAGS}") SET(CMAKE_CXX_FLAGS "-fno-exceptions ${WERROR_FLAGS} ${CMAKE_CXX_FLAGS}") SET(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DLMMS_DEBUG") +SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLMMS_DEBUG") # people simply updating git will still have this and mess up build with it From 471cb04dc9e5028ebc74ab6d7cb60afd3839117c Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Thu, 8 Jan 2015 09:28:57 +0200 Subject: [PATCH 055/172] Removed #ifdefs around assert()s. --- src/core/SampleRecordHandle.cpp | 4 ++-- src/core/audio/AudioDevice.cpp | 4 ++-- src/core/audio/AudioSampleRecorder.cpp | 4 ++-- src/gui/AutomationEditor.cpp | 4 ++-- src/gui/PianoRoll.cpp | 4 ++-- src/gui/SetupDialog.cpp | 4 ++-- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/core/SampleRecordHandle.cpp b/src/core/SampleRecordHandle.cpp index 590333492..a16f56330 100644 --- a/src/core/SampleRecordHandle.cpp +++ b/src/core/SampleRecordHandle.cpp @@ -116,9 +116,9 @@ void SampleRecordHandle::createSampleBuffer( SampleBuffer** sampleBuf ) // make sure buffer is cleaned up properly at the end... sampleFrame * data_ptr = data; -#ifdef LMMS_DEBUG + assert( data != NULL ); -#endif + // now copy all buffers into big buffer for( bufferList::const_iterator it = m_buffers.begin(); it != m_buffers.end(); ++it ) diff --git a/src/core/audio/AudioDevice.cpp b/src/core/audio/AudioDevice.cpp index 68b475cf7..7acbdbbf1 100644 --- a/src/core/audio/AudioDevice.cpp +++ b/src/core/audio/AudioDevice.cpp @@ -237,9 +237,9 @@ int AudioDevice::convertToS16( const surroundSampleFrame * _ab, void AudioDevice::clearS16Buffer( int_sample_t * _outbuf, const fpp_t _frames ) { -#ifdef LMMS_DEBUG + assert( _outbuf != NULL ); -#endif + memset( _outbuf, 0, _frames * channels() * BYTES_PER_INT_SAMPLE ); } diff --git a/src/core/audio/AudioSampleRecorder.cpp b/src/core/audio/AudioSampleRecorder.cpp index e239c7bb1..01d1091ac 100644 --- a/src/core/audio/AudioSampleRecorder.cpp +++ b/src/core/audio/AudioSampleRecorder.cpp @@ -76,9 +76,9 @@ void AudioSampleRecorder::createSampleBuffer( SampleBuffer** sampleBuf ) // make sure buffer is cleaned up properly at the end... sampleFrame * data_ptr = data; -#ifdef LMMS_DEBUG + assert( data != NULL ); -#endif + // now copy all buffers into big buffer for( BufferList::ConstIterator it = m_buffers.begin(); it != m_buffers.end(); ++it ) diff --git a/src/gui/AutomationEditor.cpp b/src/gui/AutomationEditor.cpp index 2d28bd8f1..474402be5 100644 --- a/src/gui/AutomationEditor.cpp +++ b/src/gui/AutomationEditor.cpp @@ -2385,9 +2385,9 @@ void AutomationEditor::zoomingXChanged() { const QString & zfac = m_zoomingXModel.currentText(); m_ppt = zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PPT / 100; -#ifdef LMMS_DEBUG + assert( m_ppt > 0 ); -#endif + m_timeLine->setPixelsPerTact( m_ppt ); update(); } diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index 97842c405..cfa98bc23 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -4194,9 +4194,9 @@ void PianoRoll::zoomingChanged() { const QString & zfac = m_zoomingModel.currentText(); m_ppt = zfac.left( zfac.length() - 1 ).toInt() * DEFAULT_PR_PPT / 100; -#ifdef LMMS_DEBUG + assert( m_ppt > 0 ); -#endif + m_timeLine->setPixelsPerTact( m_ppt ); update(); diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index 7f6c3391b..83bd357b7 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -73,9 +73,9 @@ inline void labelWidget( QWidget * _w, const QString & _txt ) f.setBold( true ); title->setFont( pointSize<12>( f ) ); -#ifdef LMMS_DEBUG + assert( dynamic_cast( _w->layout() ) != NULL ); -#endif + dynamic_cast( _w->layout() )->addSpacing( 5 ); dynamic_cast( _w->layout() )->addWidget( title ); dynamic_cast( _w->layout() )->addSpacing( 10 ); From 1dbc44a7f0dbf5f26f3ec2fedfa7dc2c3163594b Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Thu, 8 Jan 2015 14:37:10 -0200 Subject: [PATCH 056/172] Refactor redundant pattern color assignment Instead of creating a new QColor for each condition just use the `setRgb` method or fix the conditions order. --- src/gui/AutomationPatternView.cpp | 2 +- src/tracks/BBTrack.cpp | 15 ++++++++++----- src/tracks/Pattern.cpp | 9 ++++++--- src/tracks/SampleTrack.cpp | 6 +++++- 4 files changed, 22 insertions(+), 10 deletions(-) diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 7885905f7..1e96839f3 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -267,7 +267,7 @@ void AutomationPatternView::paintEvent( QPaintEvent * ) if( isSelected() == true ) { - c = QColor( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); + c.setRgb( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); } lingrad.setColorAt( 1, c.darker( 300 ) ); diff --git a/src/tracks/BBTrack.cpp b/src/tracks/BBTrack.cpp index 011e5e826..435fdb5b7 100644 --- a/src/tracks/BBTrack.cpp +++ b/src/tracks/BBTrack.cpp @@ -215,18 +215,23 @@ void BBTCOView::paintEvent( QPaintEvent * ) { QPainter p( this ); - QColor col = m_bbTCO->m_useStyleColor - ? p.pen().brush().color() - : m_bbTCO->colorObj(); - + QColor col; if( m_bbTCO->getTrack()->isMuted() || m_bbTCO->isMuted() ) { col = QColor( 160, 160, 160 ); } + else if ( m_bbTCO->m_useStyleColor ) + { + col = p.pen().brush().color(); + } + else + { + col = m_bbTCO->colorObj(); + } if( isSelected() == true ) { - col = QColor( qMax( col.red() - 128, 0 ), qMax( col.green() - 128, 0 ), 255 ); + col.setRgb( qMax( col.red() - 128, 0 ), qMax( col.green() - 128, 0 ), 255 ); } QLinearGradient lingrad( 0, 0, 0, height() ); diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index dc61aa6d7..b934733c5 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -904,16 +904,19 @@ void PatternView::paintEvent( QPaintEvent * ) QLinearGradient lingrad( 0, 0, 0, height() ); QColor c; - if(( m_pat->m_patternType != Pattern::BeatPattern ) && - !( m_pat->getTrack()->isMuted() || m_pat->isMuted() )) + !( m_pat->getTrack()->isMuted() || m_pat->isMuted() )) + { c = styleColor; + } else + { c = QColor( 80, 80, 80 ); + } if( isSelected() == true ) { - c = QColor( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); + c.setRgb( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); } if( m_pat->m_patternType != Pattern::BeatPattern ) diff --git a/src/tracks/SampleTrack.cpp b/src/tracks/SampleTrack.cpp index 7e3be4f4c..9ef5f981c 100644 --- a/src/tracks/SampleTrack.cpp +++ b/src/tracks/SampleTrack.cpp @@ -340,13 +340,17 @@ void SampleTCOView::paintEvent( QPaintEvent * _pe ) QColor c; if( !( m_tco->getTrack()->isMuted() || m_tco->isMuted() ) ) + { c = styleColor; + } else + { c = QColor( 80, 80, 80 ); + } if( isSelected() == true ) { - c = QColor( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); + c.setRgb( qMax( c.red() - 128, 0 ), qMax( c.green() - 128, 0 ), 255 ); } QLinearGradient grad( 0, 0, 0, height() ); From d5c9b78178c52897c56bed9a96bf8013414bc617 Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Thu, 8 Jan 2015 16:13:15 -0200 Subject: [PATCH 057/172] Collect error for non existing samples --- data/locale/ca.ts | 4 ++++ data/locale/cs.ts | 4 ++++ data/locale/de.ts | 4 ++++ data/locale/en.ts | 4 ++++ data/locale/es.ts | 4 ++++ data/locale/fa.ts | 4 ++++ data/locale/fr.ts | 4 ++++ data/locale/gl.ts | 4 ++++ data/locale/it.ts | 4 ++++ data/locale/ja.ts | 4 ++++ data/locale/ko.ts | 4 ++++ data/locale/nl.ts | 4 ++++ data/locale/pl.ts | 4 ++++ data/locale/pt.ts | 4 ++++ data/locale/ru.ts | 4 ++++ data/locale/sv.ts | 4 ++++ data/locale/zh.ts | 4 ++++ plugins/audio_file_processor/audio_file_processor.cpp | 8 ++++++++ 18 files changed, 76 insertions(+) diff --git a/data/locale/ca.ts b/data/locale/ca.ts index 4035efb53..9cd6ae404 100644 --- a/data/locale/ca.ts +++ b/data/locale/ca.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/cs.ts b/data/locale/cs.ts index 9b0a8e9fe..6aa7e566b 100644 --- a/data/locale/cs.ts +++ b/data/locale/cs.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/de.ts b/data/locale/de.ts index 167686614..c193d646f 100644 --- a/data/locale/de.ts +++ b/data/locale/de.ts @@ -203,6 +203,10 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder With this knob you can set the point where the loop starts. Mit diesem Regler können Sie festlegen, wo die Wiederholung beginnt. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/en.ts b/data/locale/en.ts index ad6b6829c..76e145ebc 100644 --- a/data/locale/en.ts +++ b/data/locale/en.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/es.ts b/data/locale/es.ts index 1c62562c5..bd89815ea 100644 --- a/data/locale/es.ts +++ b/data/locale/es.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/fa.ts b/data/locale/fa.ts index b8628bdff..e38e2d970 100644 --- a/data/locale/fa.ts +++ b/data/locale/fa.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/fr.ts b/data/locale/fr.ts index 730db5a5b..6dcf0a8b8 100644 --- a/data/locale/fr.ts +++ b/data/locale/fr.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/gl.ts b/data/locale/gl.ts index 061fac646..96b19ccd6 100644 --- a/data/locale/gl.ts +++ b/data/locale/gl.ts @@ -195,6 +195,10 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/it.ts b/data/locale/it.ts index ad6de8a1f..a046d158a 100644 --- a/data/locale/it.ts +++ b/data/locale/it.ts @@ -196,6 +196,10 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s With this knob you can set the point where the loop starts. Con questa modalità puoi impostare il punto dove la ripetizione comincia: la parte del suono tra il LoopBack e il punto di fine è quella che verà ripetuta. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/ja.ts b/data/locale/ja.ts index 43c8cf233..49f272525 100644 --- a/data/locale/ja.ts +++ b/data/locale/ja.ts @@ -195,6 +195,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/ko.ts b/data/locale/ko.ts index 76377dca3..aeee0b941 100644 --- a/data/locale/ko.ts +++ b/data/locale/ko.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/nl.ts b/data/locale/nl.ts index c2a8971b9..1b98f5417 100644 --- a/data/locale/nl.ts +++ b/data/locale/nl.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/pl.ts b/data/locale/pl.ts index fe28d3ce8..fec62d198 100644 --- a/data/locale/pl.ts +++ b/data/locale/pl.ts @@ -199,6 +199,10 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/pt.ts b/data/locale/pt.ts index 4e0724c46..defb1e561 100644 --- a/data/locale/pt.ts +++ b/data/locale/pt.ts @@ -197,6 +197,10 @@ Esteban Viveros With this knob you can set the point where the loop starts. + + Sample not found: %1 + Amostra não encontrada: %1 + AudioFileProcessorWaveView diff --git a/data/locale/ru.ts b/data/locale/ru.ts index 6acc4186a..ce01e3d40 100644 --- a/data/locale/ru.ts +++ b/data/locale/ru.ts @@ -197,6 +197,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/sv.ts b/data/locale/sv.ts index 80f960d76..c170ed0d4 100644 --- a/data/locale/sv.ts +++ b/data/locale/sv.ts @@ -193,6 +193,10 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/data/locale/zh.ts b/data/locale/zh.ts index a4993226a..d1df46aee 100644 --- a/data/locale/zh.ts +++ b/data/locale/zh.ts @@ -201,6 +201,10 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com With this knob you can set the point where the loop starts. 调节此旋钮,以设置循环开始的地方。 + + Sample not found: %1 + + AudioFileProcessorWaveView diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp index 570908d85..be7519179 100644 --- a/plugins/audio_file_processor/audio_file_processor.cpp +++ b/plugins/audio_file_processor/audio_file_processor.cpp @@ -234,6 +234,14 @@ void audioFileProcessor::loadSettings( const QDomElement & _this ) if( _this.attribute( "src" ) != "" ) { setAudioFile( _this.attribute( "src" ), false ); + + QString absolutePath = m_sampleBuffer.tryToMakeAbsolute( m_sampleBuffer.audioFile() ); + if ( !QFileInfo( absolutePath ).exists() ) + { + QString message = tr( "Sample not found: %1" ).arg( m_sampleBuffer.audioFile() ); + + Engine::getSong()->collectError( message ); + } } else if( _this.attribute( "sampledata" ) != "" ) { From fc9efc6f5862cb796a10d6c2b8df5952b4ca7e28 Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Thu, 8 Jan 2015 17:47:39 -0200 Subject: [PATCH 058/172] Fix error collection on Song instead of MainWindow --- plugins/audio_file_processor/audio_file_processor.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp index be7519179..08ef28857 100644 --- a/plugins/audio_file_processor/audio_file_processor.cpp +++ b/plugins/audio_file_processor/audio_file_processor.cpp @@ -34,6 +34,7 @@ #include "audio_file_processor.h" #include "Engine.h" #include "Song.h" +#include "MainWindow.h" #include "InstrumentTrack.h" #include "NotePlayHandle.h" #include "interpolation.h" @@ -240,7 +241,7 @@ void audioFileProcessor::loadSettings( const QDomElement & _this ) { QString message = tr( "Sample not found: %1" ).arg( m_sampleBuffer.audioFile() ); - Engine::getSong()->collectError( message ); + Engine::mainWindow()->collectError( message ); } } else if( _this.attribute( "sampledata" ) != "" ) From f0e7ea6fd1793b6c4681834e7f6453fd264cc73e Mon Sep 17 00:00:00 2001 From: tresf Date: Thu, 8 Jan 2015 23:53:19 -0500 Subject: [PATCH 059/172] Expose major, minor, release and build values parsed from a project version --- include/ProjectVersion.h | 28 +++++++++++++++++-------- src/core/ProjectVersion.cpp | 41 ++++++++++--------------------------- 2 files changed, 31 insertions(+), 38 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index 7326ce3c3..adac28f7a 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -27,27 +27,39 @@ #define PROJECT_VERSION_H #include - +#include "export.h" class ProjectVersion : public QString { public: - ProjectVersion( const QString & _s ) : - QString( _s ) + ProjectVersion( const QString & s ) : + QString( s ), + major( section( '.', 0, 0 ).toInt() ) , + minor( section( '.', 1, 1 ).toInt() ) , + release( section( '.', 2 ).section( '-', 0, 0 ).toInt() ) , + build( section( '.', 2 ).section( '-', 1 ) ) { } - static int compare( const ProjectVersion & _v1, - const ProjectVersion & _v2 ); - + static int compare( const ProjectVersion & v1, + const ProjectVersion & v2 ); + const int majorVersion() const { return major; } + const int minorVersion() const { return minor; } + const int releaseVersion() const { return release; } + const QString buildVersion() const { return build; } +private: + const int major; + const int minor; + const int release; + const QString build; } ; -inline bool operator<( const ProjectVersion & _v1, const char * _str ) +inline bool operator<( const ProjectVersion & v1, const char * str ) { - return ProjectVersion::compare( _v1, ProjectVersion( _str ) ) < 0; + return ProjectVersion::compare( v1, ProjectVersion( str ) ) < 0; } diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 58e5ac541..6d5b1bd53 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -29,54 +29,35 @@ #include "ProjectVersion.h" - - -int ProjectVersion::compare( const ProjectVersion & _v1, - const ProjectVersion & _v2 ) +int ProjectVersion::compare( const ProjectVersion & v1, + const ProjectVersion & v2 ) { - int n1, n2; - - // Major - n1 = _v1.section( '.', 0, 0 ).toInt(); - n2 = _v2.section( '.', 0, 0 ).toInt(); - if( n1 != n2 ) + if( v1.majorVersion() != v2.majorVersion() ) { - return n1 - n2; + return v1.majorVersion() - v2.majorVersion(); } - // Minor - n1 = _v1.section( '.', 1, 1 ).toInt(); - n2 = _v2.section( '.', 1, 1 ).toInt(); - if( n1 != n2 ) + if( v1.minorVersion() != v2.minorVersion() ) { - return n1 - n2; + return v1.minorVersion() - v2.minorVersion(); } - // Release - n1 = _v1.section( '.', 2 ).section( '-', 0, 0 ).toInt(); - n2 = _v2.section( '.', 2 ).section( '-', 0, 0 ).toInt(); - if( n1 != n2 ) + if( v1.releaseVersion() != v2.releaseVersion() ) { - return n1 - n2; + return v1.releaseVersion() - v2.releaseVersion(); } - // Build - const QString b1 = _v1.section( '.', 2 ).section( '-', 1 ); - const QString b2 = _v2.section( '.', 2 ).section( '-', 1 ); - // make sure 0.x.y > 0.x.y-patch - if( b1.isEmpty() ) + if( v1.buildVersion().isEmpty() ) { return 1; } - if( b2.isEmpty() ) + if( v2.buildVersion().isEmpty() ) { return -1; } - return QString::compare( b1, b2 ); + return QString::compare( v1.buildVersion(), v2.buildVersion() ); } - - From d192df081d0a49b39ce858810a32531480c0dddd Mon Sep 17 00:00:00 2001 From: tresf Date: Fri, 9 Jan 2015 00:05:13 -0500 Subject: [PATCH 060/172] Formatting cleanup --- include/ProjectVersion.h | 32 ++++++++++++++++---------------- src/core/ProjectVersion.cpp | 15 +++++++-------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index adac28f7a..3e5502a9d 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -32,26 +32,26 @@ class ProjectVersion : public QString { public: - ProjectVersion( const QString & s ) : - QString( s ), - major( section( '.', 0, 0 ).toInt() ) , - minor( section( '.', 1, 1 ).toInt() ) , - release( section( '.', 2 ).section( '-', 0, 0 ).toInt() ) , - build( section( '.', 2 ).section( '-', 1 ) ) + ProjectVersion(const QString & s) : + QString(s), + m_major(section( '.', 0, 0 ).toInt()) , + m_minor(section( '.', 1, 1 ).toInt()) , + m_release(section( '.', 2 ).section( '-', 0, 0 ).toInt()) , + m_build(section( '.', 2 ).section( '-', 1 )) { } - static int compare( const ProjectVersion & v1, - const ProjectVersion & v2 ); - const int majorVersion() const { return major; } - const int minorVersion() const { return minor; } - const int releaseVersion() const { return release; } - const QString buildVersion() const { return build; } + static int compare(const ProjectVersion & v1, const ProjectVersion & v2); + const int majorVersion() const { return m_major; } + const int minorVersion() const { return m_minor; } + const int releaseVersion() const { return m_release; } + const QString buildVersion() const { return m_build; } + private: - const int major; - const int minor; - const int release; - const QString build; + const int m_major; + const int m_minor; + const int m_release; + const QString m_build; } ; diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 6d5b1bd53..4e7ed5a5d 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -29,35 +29,34 @@ #include "ProjectVersion.h" -int ProjectVersion::compare( const ProjectVersion & v1, - const ProjectVersion & v2 ) +int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2) { - if( v1.majorVersion() != v2.majorVersion() ) + if(v1.majorVersion() != v2.majorVersion()) { return v1.majorVersion() - v2.majorVersion(); } - if( v1.minorVersion() != v2.minorVersion() ) + if(v1.minorVersion() != v2.minorVersion()) { return v1.minorVersion() - v2.minorVersion(); } - if( v1.releaseVersion() != v2.releaseVersion() ) + if(v1.releaseVersion() != v2.releaseVersion()) { return v1.releaseVersion() - v2.releaseVersion(); } // make sure 0.x.y > 0.x.y-patch - if( v1.buildVersion().isEmpty() ) + if(v1.buildVersion().isEmpty()) { return 1; } - if( v2.buildVersion().isEmpty() ) + if(v2.buildVersion().isEmpty()) { return -1; } - return QString::compare( v1.buildVersion(), v2.buildVersion() ); + return QString::compare(v1.buildVersion(), v2.buildVersion()); } From 407fc18d8245960861cd129d2a02021a11420857 Mon Sep 17 00:00:00 2001 From: tresf Date: Fri, 9 Jan 2015 00:12:19 -0500 Subject: [PATCH 061/172] Remove unused import --- include/ProjectVersion.h | 1 - 1 file changed, 1 deletion(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index 3e5502a9d..cb2e30de2 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -27,7 +27,6 @@ #define PROJECT_VERSION_H #include -#include "export.h" class ProjectVersion : public QString { From d20e83e2f7356ae5376b6479e456a0bf86c2cb89 Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Fri, 9 Jan 2015 04:15:20 -0200 Subject: [PATCH 062/172] Fix exporting class for windows build --- include/MainWindow.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/include/MainWindow.h b/include/MainWindow.h index 9fd9acecd..f82a5db02 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -30,6 +30,8 @@ #include #include +#include "export.h" + class QAction; class QDomElement; class QGridLayout; @@ -40,7 +42,7 @@ class PluginView; class ToolButton; -class MainWindow : public QMainWindow +class EXPORT MainWindow : public QMainWindow { Q_OBJECT public: From 4a55e1c46a4c1599c5ed12a730bed532f83284b6 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 9 Jan 2015 20:17:07 +0100 Subject: [PATCH 063/172] Performance and other fixes --- include/MainWindow.h | 4 ++-- include/PlayHandle.h | 2 ++ plugins/LadspaEffect/LadspaControlDialog.cpp | 2 +- plugins/LadspaEffect/calf/src/organ.cpp | 2 +- plugins/LadspaEffect/calf/src/synth.cpp | 12 ++++++------ plugins/LadspaEffect/calf/src/utils.cpp | 2 +- plugins/ladspa_browser/ladspa_description.cpp | 2 +- src/core/AutomationPattern.cpp | 6 +++--- src/core/Ladspa2LMMS.cpp | 2 +- src/core/LadspaManager.cpp | 2 +- src/core/Track.cpp | 4 ++-- src/core/audio/AudioFileOgg.cpp | 1 + src/gui/MainWindow.cpp | 4 ++-- src/gui/PluginBrowser.cpp | 4 ++-- 14 files changed, 26 insertions(+), 23 deletions(-) diff --git a/include/MainWindow.h b/include/MainWindow.h index f82a5db02..dd12c05a7 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -98,9 +98,9 @@ public: static void restoreWidgetState( QWidget * _w, const QDomElement & _de ); void collectErrors( const QList* errors ); - void collectError( const QString error ); + void collectError( const QString & error ); void clearErrors(); - void showErrors( const QString reason ); + void showErrors( const QString & reason ); public slots: diff --git a/include/PlayHandle.h b/include/PlayHandle.h index b96ec55ad..ea66cc65c 100644 --- a/include/PlayHandle.h +++ b/include/PlayHandle.h @@ -55,6 +55,8 @@ public: m_type = p.m_type; m_offset = p.m_offset; m_affinity = p.m_affinity; + m_usesBuffer = p.m_usesBuffer; + m_audioPort = p.m_audioPort; return *this; } diff --git a/plugins/LadspaEffect/LadspaControlDialog.cpp b/plugins/LadspaEffect/LadspaControlDialog.cpp index b84fc9b0b..2ea15f1f7 100644 --- a/plugins/LadspaEffect/LadspaControlDialog.cpp +++ b/plugins/LadspaEffect/LadspaControlDialog.cpp @@ -107,7 +107,7 @@ void LadspaControlDialog::updateEffectView( LadspaControls * _ctl ) grouper->setAlignment( Qt::Vertical ); for( control_list_t::iterator it = controls.begin(); - it != controls.end(); it++ ) + it != controls.end(); ++it ) { if( (*it)->port()->proc == proc ) { diff --git a/plugins/LadspaEffect/calf/src/organ.cpp b/plugins/LadspaEffect/calf/src/organ.cpp index fad15edb5..c90fc50bd 100644 --- a/plugins/LadspaEffect/calf/src/organ.cpp +++ b/plugins/LadspaEffect/calf/src/organ.cpp @@ -983,7 +983,7 @@ bool drawbar_organ::check_percussion() { void drawbar_organ::pitch_bend(int amt) { parameters->pitch_bend = pow(2.0, (amt * parameters->pitch_bend_range) / (1200.0 * 8192.0)); - for (list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + for (list::iterator i = active_voices.begin(); i != active_voices.end(); ++i) { organ_voice *v = dynamic_cast(*i); v->update_pitch(); diff --git a/plugins/LadspaEffect/calf/src/synth.cpp b/plugins/LadspaEffect/calf/src/synth.cpp index fcda18b22..d7074a7c3 100644 --- a/plugins/LadspaEffect/calf/src/synth.cpp +++ b/plugins/LadspaEffect/calf/src/synth.cpp @@ -25,7 +25,7 @@ using namespace std; void basic_synth::kill_note(int note, int vel, bool just_one) { - for (list::iterator it = active_voices.begin(); it != active_voices.end(); it++) { + for (list::iterator it = active_voices.begin(); it != active_voices.end(); ++it) { // preserve sostenuto notes if ((*it)->get_current_note() == note && !(sostenuto && (*it)->sostenuto)) { (*it)->note_off(vel); @@ -58,7 +58,7 @@ dsp::voice *basic_synth::steal_voice() std::list::iterator found = active_voices.end(); float priority = 10000; //int idx = 0; - for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); ++i) { //printf("Voice %d priority %f at %p\n", idx++, (*i)->get_priority(), *i); if ((*i)->get_priority() < priority) @@ -79,7 +79,7 @@ void basic_synth::trim_voices() { // count stealable voices unsigned int count = 0; - for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + for(std::list::iterator i = active_voices.begin(); i != active_voices.end(); ++i) { if ((*i)->get_priority() < 10000) count++; @@ -118,7 +118,7 @@ void basic_synth::note_off(int note, int vel) kill_note(note, vel, false); } -#define for_all_voices(iter) for (std::list::iterator iter = active_voices.begin(); iter != active_voices.end(); iter++) +#define for_all_voices(iter) for (std::list::iterator iter = active_voices.begin(); iter != active_voices.end(); ++iter) void basic_synth::on_pedal_release() { @@ -204,7 +204,7 @@ void basic_synth::render_to(float (*output)[2], int nsamples) unused_voices.push(v); continue; } - i++; + ++i; } } @@ -214,7 +214,7 @@ basic_synth::~basic_synth() delete unused_voices.top(); unused_voices.pop(); } - for (list::iterator i = active_voices.begin(); i != active_voices.end(); i++) + for (list::iterator i = active_voices.begin(); i != active_voices.end(); ++i) delete *i; } diff --git a/plugins/LadspaEffect/calf/src/utils.cpp b/plugins/LadspaEffect/calf/src/utils.cpp index c1c3eaff2..5d5f33b87 100644 --- a/plugins/LadspaEffect/calf/src/utils.cpp +++ b/plugins/LadspaEffect/calf/src/utils.cpp @@ -33,7 +33,7 @@ string encode_map(const dictionary &data) osctl::string_buffer sb; osc_stream str(sb); str << (uint32_t)data.size(); - for(dictionary::const_iterator i = data.begin(); i != data.end(); i++) + for(dictionary::const_iterator i = data.begin(); i != data.end(); ++i) { str << i->first << i->second; } diff --git a/plugins/ladspa_browser/ladspa_description.cpp b/plugins/ladspa_browser/ladspa_description.cpp index 76efcb182..fd00fb587 100644 --- a/plugins/ladspa_browser/ladspa_description.cpp +++ b/plugins/ladspa_browser/ladspa_description.cpp @@ -70,7 +70,7 @@ ladspaDescription::ladspaDescription( QWidget * _parent, QList pluginNames; for( l_sortable_plugin_t::iterator it = plugins.begin(); - it != plugins.end(); it++ ) + it != plugins.end(); ++it ) { if( _type != VALID || manager->getDescription( ( *it ).second )->inputChannels diff --git a/src/core/AutomationPattern.cpp b/src/core/AutomationPattern.cpp index 7420645e9..9185839a4 100644 --- a/src/core/AutomationPattern.cpp +++ b/src/core/AutomationPattern.cpp @@ -195,7 +195,7 @@ MidiTime AutomationPattern::putValue( const MidiTime & _time, timeMap::const_iterator it = m_timeMap.find( newTime ); if( it != m_timeMap.begin() ) { - it--; + --it; } generateTangents(it, 3); @@ -229,7 +229,7 @@ void AutomationPattern::removeValue( const MidiTime & _time, timeMap::const_iterator it = m_timeMap.lowerBound( newTime ); if( it != m_timeMap.begin() ) { - it--; + --it; } generateTangents(it, 3); @@ -271,7 +271,7 @@ MidiTime AutomationPattern::setDragValue( const MidiTime & _time, const float _v //Restore to the state before it the point were being dragged m_timeMap = m_oldTimeMap; - for( timeMap::const_iterator it = m_timeMap.begin(); it != m_timeMap.end(); it++ ) + for( timeMap::const_iterator it = m_timeMap.begin(); it != m_timeMap.end(); ++it ) { generateTangents(it, 3); } diff --git a/src/core/Ladspa2LMMS.cpp b/src/core/Ladspa2LMMS.cpp index 08489beff..7f8e4d67f 100644 --- a/src/core/Ladspa2LMMS.cpp +++ b/src/core/Ladspa2LMMS.cpp @@ -32,7 +32,7 @@ Ladspa2LMMS::Ladspa2LMMS() l_sortable_plugin_t plugins = getSortedPlugins(); for( l_sortable_plugin_t::iterator it = plugins.begin(); - it != plugins.end(); it++ ) + it != plugins.end(); ++it ) { ladspa_key_t key = (*it).second; ladspaManagerDescription * desc = getDescription( key ); diff --git a/src/core/LadspaManager.cpp b/src/core/LadspaManager.cpp index 50e791b9e..8dcb20158 100644 --- a/src/core/LadspaManager.cpp +++ b/src/core/LadspaManager.cpp @@ -96,7 +96,7 @@ LadspaManager::LadspaManager() l_ladspa_key_t keys = m_ladspaManagerMap.keys(); for( l_ladspa_key_t::iterator it = keys.begin(); - it != keys.end(); it++ ) + it != keys.end(); ++it ) { m_sortedPlugins.append( qMakePair( getName( *it ), *it ) ); } diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 7ee6c1f59..63fe1729c 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -1774,7 +1774,7 @@ void TrackOperationsWidget::recordingOn() if( atv ) { const Track::tcoVector & tcov = atv->getTrack()->getTCOs(); - for( Track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); it++ ) + for( Track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); ++it ) { AutomationPattern * ap = dynamic_cast( *it ); if( ap ) { ap->setRecording( true ); } @@ -1790,7 +1790,7 @@ void TrackOperationsWidget::recordingOff() if( atv ) { const Track::tcoVector & tcov = atv->getTrack()->getTCOs(); - for( Track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); it++ ) + for( Track::tcoVector::const_iterator it = tcov.begin(); it != tcov.end(); ++it ) { AutomationPattern * ap = dynamic_cast( *it ); if( ap ) { ap->setRecording( false ); } diff --git a/src/core/audio/AudioFileOgg.cpp b/src/core/audio/AudioFileOgg.cpp index 72efe883c..798418bf2 100644 --- a/src/core/audio/AudioFileOgg.cpp +++ b/src/core/audio/AudioFileOgg.cpp @@ -120,6 +120,7 @@ bool AudioFileOgg::startEncoding() printf( "Mode initialization failed: invalid parameters for " "bitrate\n" ); vorbis_info_clear( &m_vi ); + delete[] user_comments; return false; } diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index e5d00f35c..13f98d74b 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -1211,7 +1211,7 @@ void MainWindow::collectErrors(const QList* errors ) -void MainWindow::collectError( const QString error ) +void MainWindow::collectError( const QString & error ) { m_errors->append( error ); } @@ -1225,7 +1225,7 @@ void MainWindow::clearErrors() -void MainWindow::showErrors( const QString message ) +void MainWindow::showErrors( const QString & message ) { if ( m_errors->length() != 0 ) { QString* errors = new QString(); diff --git a/src/gui/PluginBrowser.cpp b/src/gui/PluginBrowser.cpp index e87eac326..5c10dd368 100644 --- a/src/gui/PluginBrowser.cpp +++ b/src/gui/PluginBrowser.cpp @@ -99,8 +99,8 @@ PluginDescList::PluginDescList(QWidget *parent) : std::sort(m_pluginDescriptors.begin(), m_pluginDescriptors.end(), pluginBefore); - for(Plugin::DescriptorList::const_iterator it = m_pluginDescriptors.constBegin(); - it != m_pluginDescriptors.constEnd(); it++) + for( Plugin::DescriptorList::const_iterator it = m_pluginDescriptors.constBegin(); + it != m_pluginDescriptors.constEnd(); ++it ) { if( it->type == Plugin::Instrument ) { From 4ad1cd607bd4a6de223b86a73614c363366f0e4f Mon Sep 17 00:00:00 2001 From: Dave French Date: Fri, 9 Jan 2015 19:28:26 +0000 Subject: [PATCH 064/172] Eq fix incorrect memory allocation --- plugins/Eq/EqParameterWidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/Eq/EqParameterWidget.cpp b/plugins/Eq/EqParameterWidget.cpp index d7318de3b..64e87b8da 100644 --- a/plugins/Eq/EqParameterWidget.cpp +++ b/plugins/Eq/EqParameterWidget.cpp @@ -234,7 +234,7 @@ EqBand* EqParameterWidget::selectNearestHandle( const int x, const int y ) { selectedModel = &m_bands[shortestBand]; } - delete distanceToHandles; + delete[] distanceToHandles; return selectedModel; } From 21c532adc0ced20a321db865f86c8b1ae1053456 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Fri, 9 Jan 2015 16:25:07 -0500 Subject: [PATCH 065/172] Add internal support for major/minor/build comparator --- include/ProjectVersion.h | 24 +++++++++++++++--------- src/core/ProjectVersion.cpp | 33 ++++++++++++++++++++++++--------- 2 files changed, 39 insertions(+), 18 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index cb2e30de2..7ee861892 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -2,6 +2,7 @@ * ProjectVersion.h - version compared in import upgrades * * Copyright (c) 2007 Javier Serrano Polo + * Copyright (c) 2015 Tres Finocchiaro * * This file is part of LMMS - http://lmms.io * @@ -28,34 +29,39 @@ #include +enum CompareType { Major, Minor, Release, Build }; + class ProjectVersion : public QString { public: - ProjectVersion(const QString & s) : + ProjectVersion(const QString & s, const CompareType c = CompareType::Build) : QString(s), m_major(section( '.', 0, 0 ).toInt()) , m_minor(section( '.', 1, 1 ).toInt()) , m_release(section( '.', 2 ).section( '-', 0, 0 ).toInt()) , - m_build(section( '.', 2 ).section( '-', 1 )) + m_build(section( '.', 2 ).section( '-', 1 )), + m_compareType(c) { } - static int compare(const ProjectVersion & v1, const ProjectVersion & v2); - const int majorVersion() const { return m_major; } - const int minorVersion() const { return m_minor; } - const int releaseVersion() const { return m_release; } - const QString buildVersion() const { return m_build; } + static int compare(const ProjectVersion & v1, const ProjectVersion & v2); + + const int getMajor() const { return m_major; } + const int getMinor() const { return m_minor; } + const int getRelease() const { return m_release; } + const QString getBuild() const { return m_build; } + const CompareType getCompareType() const { return m_compareType; } + private: const int m_major; const int m_minor; const int m_release; const QString m_build; + const CompareType m_compareType; } ; - - inline bool operator<( const ProjectVersion & v1, const char * str ) { return ProjectVersion::compare( v1, ProjectVersion( str ) ) < 0; diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 4e7ed5a5d..9caf25472 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -3,6 +3,7 @@ * * Copyright (c) 2007 Javier Serrano Polo * Copyright (c) 2008 Tobias Doerffel + * Copyright (c) 2015 Tres Finocchiaro * * This file is part of LMMS - http://lmms.io * @@ -31,32 +32,46 @@ int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2) { - if(v1.majorVersion() != v2.majorVersion()) + if(v1.getMajor() != v2.getMajor()) { - return v1.majorVersion() - v2.majorVersion(); + return v1.getMajor() - v2.getMajor(); + } + + // return prematurely for Major comparison + if(v1.getCompareType() == CompareType::Major || + v1.getCompareType() == CompareType::Major) + { + return 0; } - if(v1.minorVersion() != v2.minorVersion()) + if(v1.getMinor() != v2.getMinor()) { - return v1.minorVersion() - v2.minorVersion(); + return v1.getMinor() - v2.getMinor(); } - if(v1.releaseVersion() != v2.releaseVersion()) + // return prematurely for Minor comparison + if(v1.getCompareType() == CompareType::Minor || + v1.getCompareType() == CompareType::Minor) + + if(v1.getRelease() != v2.getRelease()) { - return v1.releaseVersion() - v2.releaseVersion(); + return v1.getRelease() - v2.getRelease(); } + if(v1.getCompareType() == CompareType::Build || + v1.getCompareType() == CompareType::Build) + // make sure 0.x.y > 0.x.y-patch - if(v1.buildVersion().isEmpty()) + if(v1.getBuild().isEmpty()) { return 1; } - if(v2.buildVersion().isEmpty()) + if(v2.getBuild().isEmpty()) { return -1; } - return QString::compare(v1.buildVersion(), v2.buildVersion()); + return QString::compare(v1.getBuild(), v2.getBuild()); } From 180c02aedc5de6652a29b98d7af4d3cc8e6c7e07 Mon Sep 17 00:00:00 2001 From: Dave French Date: Fri, 9 Jan 2015 21:25:41 +0000 Subject: [PATCH 066/172] Proposed fix for issue 300, preview vst crashes --- src/core/PresetPreviewPlayHandle.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/core/PresetPreviewPlayHandle.cpp b/src/core/PresetPreviewPlayHandle.cpp index dceb5b0d2..832159a7f 100644 --- a/src/core/PresetPreviewPlayHandle.cpp +++ b/src/core/PresetPreviewPlayHandle.cpp @@ -147,9 +147,17 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, else { DataFile dataFile( _preset_file ); - s_previewTC->previewInstrumentTrack()-> - loadTrackSpecificSettings( - dataFile.content().firstChild().toElement() ); + if(dataFile.content().elementsByTagName( "vestige" ).length() == 0 ) + { + s_previewTC->previewInstrumentTrack()-> + loadTrackSpecificSettings( + dataFile.content().firstChild().toElement() ); + } + else + { + s_previewTC->previewInstrumentTrack()->loadInstrument("tripleoscillator"); + s_previewTC->previewInstrumentTrack()->setVolume( 0 ); + } } Engine::setSuppressMessages( false ); From 25448d3f216bfc6bd9a4c80fbe8e66870120f32e Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Fri, 9 Jan 2015 18:12:46 -0500 Subject: [PATCH 067/172] Add explanation for #1587 changes --- src/core/PresetPreviewPlayHandle.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/core/PresetPreviewPlayHandle.cpp b/src/core/PresetPreviewPlayHandle.cpp index 832159a7f..69b550fdc 100644 --- a/src/core/PresetPreviewPlayHandle.cpp +++ b/src/core/PresetPreviewPlayHandle.cpp @@ -147,6 +147,8 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, else { DataFile dataFile( _preset_file ); + // vestige previews are bug prone; fallback on 3xosc with volume of 0 + // without an instrument in preview track, it will segfault if(dataFile.content().elementsByTagName( "vestige" ).length() == 0 ) { s_previewTC->previewInstrumentTrack()-> From 1284b6e9000c60ab1a6b3aeadf04877406851544 Mon Sep 17 00:00:00 2001 From: Umcaruje Date: Sat, 10 Jan 2015 00:57:48 +0100 Subject: [PATCH 068/172] Update README --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e451275cb..614b3bf72 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -![LMMS Logo](http://lmms.sourceforge.net/Lmms_logo.png) LMMS +#![LMMS Logo](http://lmms.sourceforge.net/Lmms_logo.png) LMMS [![Build Status](https://travis-ci.org/LMMS/lmms.png)](https://travis-ci.org/LMMS/lmms) What is LMMS? @@ -25,13 +25,17 @@ Features * Compatible with many standards such as SoundFont2, VST(i), LADSPA, GUS Patches, and full MIDI support * Import of MIDI and FLP (FL Studio®/Fruityloops® Project) files -[Latest Stable Release (1.0.3)](https://github.com/LMMS/lmms/releases/tag/v1.0.3) +[Latest Stable Release (1.1.0)](https://github.com/LMMS/lmms/releases/tag/v1.1.0) --------------------- -* Fix zyn GUI crash on win32 -* Fix SF2 note volume -* Localization updates -* Updated LADSPA search paths -* Bugfixes in plugins +* New FX Mixer +* New Instruments +* Instrument Enhancements +* Improved Demos/Presets +* UI Improvements +* Enabled toggling of knob scale in context menu (Linear/Logarithmic) +* Added ability to record automations +* Added support for undo/redo in Piano Roll +* Bug Fixes Building --------- From 5178ecd3a2e513cf8da44c3ea0826bcd3ac84525 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 10 Jan 2015 12:40:53 +0000 Subject: [PATCH 069/172] update 1211 solo nolonger mutes master --- src/core/FxMixer.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/FxMixer.cpp b/src/core/FxMixer.cpp index 358e31171..e6d1767ff 100644 --- a/src/core/FxMixer.cpp +++ b/src/core/FxMixer.cpp @@ -230,7 +230,7 @@ int FxMixer::createChannel() void FxMixer::activateSolo() { - for (int i = 0; i < m_fxChannels.size(); ++i) + for (int i = 1; i < m_fxChannels.size(); ++i) { m_fxChannels[i]->m_muteBeforeSolo = m_fxChannels[i]->m_muteModel.value(); m_fxChannels[i]->m_muteModel.setValue( true ); @@ -239,7 +239,7 @@ void FxMixer::activateSolo() void FxMixer::deactivateSolo() { - for (int i = 0; i < m_fxChannels.size(); ++i) + for (int i = 1; i < m_fxChannels.size(); ++i) { m_fxChannels[i]->m_muteModel.setValue( m_fxChannels[i]->m_muteBeforeSolo ); } From 1444902a2d6c8ebd8658fe7eaccdc1e6055531c7 Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Sat, 10 Jan 2015 17:43:32 +0100 Subject: [PATCH 070/172] Enable GigPlayer Windows build --- .travis.yml | 4 ++-- plugins/GigPlayer/CMakeLists.txt | 10 ++++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 93ad9ea4b..a8bb8c652 100644 --- a/.travis.yml +++ b/.travis.yml @@ -9,8 +9,8 @@ before_install: - sudo apt-get update -qq install: - if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi - - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime; fi - - if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime; fi + - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig; fi + - if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime mingw64-x-libgig; fi - if [ $TARGET_OS == linux ]; then sudo apt-get install -y libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev libgig-dev; fi before_script: - mkdir build && cd build diff --git a/plugins/GigPlayer/CMakeLists.txt b/plugins/GigPlayer/CMakeLists.txt index 4be4dff82..24db813bd 100644 --- a/plugins/GigPlayer/CMakeLists.txt +++ b/plugins/GigPlayer/CMakeLists.txt @@ -6,8 +6,14 @@ if(LMMS_HAVE_GIG) SET(GCC_COVERAGE_COMPILE_FLAGS "-fexceptions") add_definitions(${GCC_COVERAGE_COMPILE_FLAGS}) - LINK_DIRECTORIES(${GIG_LIBRARY_DIRS}) - LINK_LIBRARIES(${GIG_LIBRARIES}) + # disable deprecated check for mingw-x-libgig + if(LMMS_BUILD_WIN32) + SET(GCC_GIG_COMPILE_FLAGS "-Wno-deprecated") + add_definitions(${GCC_GIG_COMPILE_FLAGS}) + endif(LMMS_BUILD_WIN32) + + LINK_DIRECTORIES(${GIG_LIBRARY_DIRS} ${SAMPLERATE_LIBRARY_DIRS}) + LINK_LIBRARIES(${GIG_LIBRARIES} ${SAMPLERATE_LIBRARIES}) BUILD_PLUGIN(gigplayer GigPlayer.cpp GigPlayer.h PatchesDialog.cpp PatchesDialog.h PatchesDialog.ui MOCFILES GigPlayer.h PatchesDialog.h UICFILES PatchesDialog.ui EMBEDDED_RESOURCES "${CMAKE_CURRENT_SOURCE_DIR}/*.png") endif(LMMS_HAVE_GIG) From af22d396128d1becd487fa451bff4aee39535da7 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 10 Jan 2015 17:11:17 +0000 Subject: [PATCH 071/172] Proposed fix for 1345 Exclude Tracks from master pitch --- include/InstrumentTrack.h | 3 +++ src/core/NotePlayHandle.cpp | 3 ++- src/tracks/InstrumentTrack.cpp | 16 +++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h index 8bb9bd526..1264eb038 100644 --- a/include/InstrumentTrack.h +++ b/include/InstrumentTrack.h @@ -56,6 +56,7 @@ class DataFile; class PluginView; class TabWidget; class TrackLabelButton; +class LedCheckBox; class EXPORT InstrumentTrack : public Track, public MidiEventProcessor @@ -250,6 +251,7 @@ private: FloatModel m_pitchModel; IntModel m_pitchRangeModel; IntModel m_effectChannelModel; + BoolModel m_useMasterPitchModel; FadeButton *m_fb; @@ -414,6 +416,7 @@ private: Knob * m_pitchKnob; LcdSpinBox* m_pitchRangeSpinBox; LcdSpinBox * m_effectChannelNumber; + LedCheckBox * m_useMasterPitchBox; // tab-widget with all children diff --git a/src/core/NotePlayHandle.cpp b/src/core/NotePlayHandle.cpp index e2d3e743d..19ec0517a 100644 --- a/src/core/NotePlayHandle.cpp +++ b/src/core/NotePlayHandle.cpp @@ -509,10 +509,11 @@ bool NotePlayHandle::operator==( const NotePlayHandle & _nph ) const void NotePlayHandle::updateFrequency() { + int mp = m_instrumentTrack->m_useMasterPitchModel.value() ? Engine::getSong()->masterPitch() : 0; const float pitch = ( key() - m_instrumentTrack->baseNoteModel()->value() + - Engine::getSong()->masterPitch() + + mp + m_baseDetuning->value() ) / 12.0f; m_frequency = BaseFreq * powf( 2.0f, pitch + m_instrumentTrack->pitchModel()->value() / ( 100 * 12.0f ) ); diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index f2e14fee5..810eba2a8 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -109,6 +109,7 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) : m_pitchModel( 0, MinPitchDefault, MaxPitchDefault, 1, this, tr( "Pitch" ) ), m_pitchRangeModel( 1, 1, 24, this, tr( "Pitch range" ) ), m_effectChannelModel( 0, 0, 0, this, tr( "FX channel" ) ), + m_useMasterPitchModel( true, this, tr( "Master Pitch") ), m_instrument( NULL ), m_soundShaping( this ), m_arpeggio( this ), @@ -139,7 +140,9 @@ InstrumentTrack::InstrumentTrack( TrackContainer* tc ) : int InstrumentTrack::baseNote() const { - return m_baseNoteModel.value() - Engine::getSong()->masterPitch(); + int mp = m_useMasterPitchModel.value() ? Engine::getSong()->masterPitch() : 0; + + return m_baseNoteModel.value() - mp; } @@ -550,6 +553,7 @@ void InstrumentTrack::updatePitchRange() int InstrumentTrack::masterKey( int _midi_key ) const { + int key = baseNote(); return tLimit( _midi_key - ( key - DefaultKey ), 0, NumKeys ); } @@ -700,6 +704,7 @@ void InstrumentTrack::saveTrackSpecificSettings( QDomDocument& doc, QDomElement m_effectChannelModel.saveSettings( doc, thisElement, "fxch" ); m_baseNoteModel.saveSettings( doc, thisElement, "basenote" ); + m_useMasterPitchModel.saveSettings( doc, thisElement, "usemasterpitch"); if( m_instrument != NULL ) { @@ -731,6 +736,7 @@ void InstrumentTrack::loadTrackSpecificSettings( const QDomElement & thisElement m_effectChannelModel.setRange( 0, Engine::fxMixer()->numChannels()-1 ); m_effectChannelModel.loadSettings( thisElement, "fxch" ); m_baseNoteModel.loadSettings( thisElement, "basenote" ); + m_useMasterPitchModel.loadSettings( thisElement, "usemasterpitch"); // clear effect-chain just in case we load an old preset without FX-data m_audioPort.effects()->clear(); @@ -1211,6 +1217,14 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) : basicControlsLayout->addWidget( m_pitchRangeSpinBox ); basicControlsLayout->addStretch(); + //setup checkbox for use master pitch + m_useMasterPitchBox = new LedCheckBox( this, tr( "Use master pitch" ),LedCheckBox::Green ); + m_useMasterPitchBox->setModel( &m_track->m_useMasterPitchModel ); + m_useMasterPitchBox->setToolTip( "Master Pitch" ); + + basicControlsLayout->addWidget( m_useMasterPitchBox ); + basicControlsLayout->addStretch(); + // setup spinbox for selecting FX-channel m_effectChannelNumber = new fxLineLcdSpinBox( 2, NULL, tr( "FX channel" ) ); m_effectChannelNumber->setLabel( tr( "FX" ) ); From 83baea6605b6d6f74f599b7ca862d14f56f7c94e Mon Sep 17 00:00:00 2001 From: Dave French Date: Sat, 10 Jan 2015 19:05:40 +0000 Subject: [PATCH 072/172] 1345 moved LedCheckBox to MISC tab --- include/InstrumentMidiIOView.h | 14 +++++++++++ include/InstrumentTrack.h | 6 ++++- src/gui/widgets/InstrumentMidiIOView.cpp | 30 +++++++++++++++++++++++- src/tracks/InstrumentTrack.cpp | 12 ++++------ 4 files changed, 53 insertions(+), 9 deletions(-) diff --git a/include/InstrumentMidiIOView.h b/include/InstrumentMidiIOView.h index d9bcf3843..c45dbfa5f 100644 --- a/include/InstrumentMidiIOView.h +++ b/include/InstrumentMidiIOView.h @@ -34,6 +34,8 @@ class GroupBox; class LcdSpinBox; class QToolButton; +class LedCheckBox; +class InstrumentTrack; class InstrumentMidiIOView : public QWidget, public ModelView @@ -63,4 +65,16 @@ private: } ; +class InstrumentMiscView : public QWidget +{ + Q_OBJECT +public: + InstrumentMiscView( InstrumentTrack *it, QWidget* parent ); + ~InstrumentMiscView(); + +private: + LedCheckBox * m_useMasterPitchBox; + +}; + #endif diff --git a/include/InstrumentTrack.h b/include/InstrumentTrack.h index 1264eb038..16536c081 100644 --- a/include/InstrumentTrack.h +++ b/include/InstrumentTrack.h @@ -49,6 +49,7 @@ class FadeButton; class Instrument; class InstrumentTrackWindow; class InstrumentMidiIOView; +class InstrumentMiscView; class Knob; class LcdSpinBox; class midiPortMenu; @@ -268,6 +269,7 @@ private: friend class InstrumentTrackWindow; friend class NotePlayHandle; friend class FlpImport; + friend class InstrumentMiscView; } ; @@ -416,7 +418,7 @@ private: Knob * m_pitchKnob; LcdSpinBox* m_pitchRangeSpinBox; LcdSpinBox * m_effectChannelNumber; - LedCheckBox * m_useMasterPitchBox; + // tab-widget with all children @@ -427,6 +429,8 @@ private: InstrumentFunctionArpeggioView* m_arpeggioView; InstrumentMidiIOView * m_midiView; EffectRackView * m_effectView; + InstrumentMiscView *m_miscView; + // test-piano at the bottom of every instrument-settings-window PianoView * m_pianoView; diff --git a/src/gui/widgets/InstrumentMidiIOView.cpp b/src/gui/widgets/InstrumentMidiIOView.cpp index 212610110..6b330a707 100644 --- a/src/gui/widgets/InstrumentMidiIOView.cpp +++ b/src/gui/widgets/InstrumentMidiIOView.cpp @@ -37,7 +37,9 @@ #include "MidiClient.h" #include "Mixer.h" #include "ToolTip.h" - +#include "InstrumentTrack.h" +#include "LedCheckbox.h" +#include "QLabel" InstrumentMidiIOView::InstrumentMidiIOView( QWidget* parent ) : @@ -201,3 +203,29 @@ void InstrumentMidiIOView::modelChanged() } } + + +InstrumentMiscView::InstrumentMiscView(InstrumentTrack *it, QWidget *parent) : + QWidget( parent ) +{ + QVBoxLayout* layout = new QVBoxLayout( this ); + layout->setMargin( 5 ); + + QHBoxLayout* masterPitchLayout = new QHBoxLayout( this ); + + //setup checkbox for use master pitch + m_useMasterPitchBox = new LedCheckBox( this, tr( "Use master pitch" ),LedCheckBox::Green ); + m_useMasterPitchBox->setModel( &it->m_useMasterPitchModel ); + m_useMasterPitchBox->setToolTip( "Master Pitch" ); + masterPitchLayout->addWidget( m_useMasterPitchBox ); + + QLabel *label = new QLabel ( tr ("Use Master Pitch " ), this ); + masterPitchLayout->addWidget( label ); + layout->addLayout( masterPitchLayout ); + layout->addStretch(); +} + +InstrumentMiscView::~InstrumentMiscView() +{ + +} diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 810eba2a8..cb28142eb 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -1217,13 +1217,6 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) : basicControlsLayout->addWidget( m_pitchRangeSpinBox ); basicControlsLayout->addStretch(); - //setup checkbox for use master pitch - m_useMasterPitchBox = new LedCheckBox( this, tr( "Use master pitch" ),LedCheckBox::Green ); - m_useMasterPitchBox->setModel( &m_track->m_useMasterPitchModel ); - m_useMasterPitchBox->setToolTip( "Master Pitch" ); - - basicControlsLayout->addWidget( m_useMasterPitchBox ); - basicControlsLayout->addStretch(); // setup spinbox for selecting FX-channel m_effectChannelNumber = new fxLineLcdSpinBox( 2, NULL, tr( "FX channel" ) ); @@ -1273,10 +1266,15 @@ InstrumentTrackWindow::InstrumentTrackWindow( InstrumentTrackView * _itv ) : // FX tab m_effectView = new EffectRackView( m_track->m_audioPort.effects(), m_tabWidget ); + // MISC tab + m_miscView = new InstrumentMiscView( m_track, m_tabWidget ); + + m_tabWidget->addTab( m_ssView, tr( "ENV/LFO" ), 1 ); m_tabWidget->addTab( instrumentFunctions, tr( "FUNC" ), 2 ); m_tabWidget->addTab( m_effectView, tr( "FX" ), 3 ); m_tabWidget->addTab( m_midiView, tr( "MIDI" ), 4 ); + m_tabWidget->addTab( m_miscView, tr( "MISC" ), 5 ); // setup piano-widget m_pianoView = new PianoView( this ); From 925122545ec2b975809fd0ba48202e862de71265 Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Sat, 10 Jan 2015 21:23:14 +0200 Subject: [PATCH 073/172] Fix issue #1292, beautify code a bit, and revert an initialization change I can't grasp the reason for. --- plugins/opl2/opl2instrument.cpp | 53 +++++++++++++++++++-------------- plugins/opl2/opl2instrument.h | 7 +++-- 2 files changed, 36 insertions(+), 24 deletions(-) diff --git a/plugins/opl2/opl2instrument.cpp b/plugins/opl2/opl2instrument.cpp index d1613a1aa..0b8084349 100644 --- a/plugins/opl2/opl2instrument.cpp +++ b/plugins/opl2/opl2instrument.cpp @@ -56,6 +56,7 @@ #include "embed.cpp" #include "math.h" +#include "debug.h" #include "Knob.h" #include "LcdSpinBox.h" @@ -92,7 +93,7 @@ Plugin * PLUGIN_EXPORT lmms_plugin_main( Model *, void * _data ) QMutex opl2instrument::emulatorMutex; // Weird ordering of voice parameters -const unsigned int adlib_opadd[9] = {0x00, 0x01, 0x02, 0x08, 0x09, 0x0A, 0x10, 0x11, 0x12}; +const unsigned int adlib_opadd[OPL2_VOICES] = {0x00, 0x01, 0x02, 0x08, 0x09, 0x0A, 0x10, 0x11, 0x12}; opl2instrument::opl2instrument( InstrumentTrack * _instrument_track ) : Instrument( _instrument_track, &OPL2_plugin_descriptor ), @@ -141,9 +142,6 @@ opl2instrument::opl2instrument( InstrumentTrack * _instrument_track ) : InstrumentPlayHandle * iph = new InstrumentPlayHandle( this, _instrument_track ); Engine::mixer()->addPlayHandle( iph ); - // Voices are laid out in a funny way... - // adlib_opadd = {0x00, 0x01, 0x02, 0x08, 0x09, 0x0A, 0x10, 0x11, 0x12}; - // Create an emulator - samplerate, 16 bit, mono emulatorMutex.lock(); theEmulator = new CTemuopl(Engine::mixer()->processingSampleRate(), true, false); @@ -153,9 +151,9 @@ opl2instrument::opl2instrument( InstrumentTrack * _instrument_track ) : emulatorMutex.unlock(); //Initialize voice values - voiceNote[0] = 0; - voiceLRU[0] = 0; - for(int i=1; i<9; ++i) { + // voiceNote[0] = 0; + // voiceLRU[0] = 0; + for(int i=0; iinit(); theEmulator->write(0x01,0x20); emulatorMutex.unlock(); - for(int i=1; i<9; ++i) { + for(int i=0; i0; --i) { if( voiceLRU[i-1] != OPL2_NO_VOICE ) { break; } } voiceLRU[i] = v; +#ifdef false + printf("%d %d %d %d %d %d %d %d %d <-- \n", voiceLRU[0],voiceLRU[1],voiceLRU[2], + voiceLRU[3],voiceLRU[4],voiceLRU[5],voiceLRU[6],voiceLRU[7],voiceLRU[8]); +#endif return i; } @@ -307,11 +314,11 @@ bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& ti break; case MidiNoteOff: key = event.key() +12; - for(voice=0; voice<9; ++voice) { + for(voice=0; voicewrite(0xA0+voice, fnums[key] & 0xff); theEmulator->write(0xB0+voice, (fnums[key] & 0x1f00) >> 8 ); - voiceNote[voice] = OPL2_VOICE_FREE; + voiceNote[voice] |= OPL2_VOICE_FREE; pushVoice(voice); } } @@ -323,7 +330,7 @@ bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& ti if( velocities[key] != 0) { velocities[key] = vel; } - for(voice=0; voice<9; ++voice) { + for(voice=0; voicewrite(0xA0+v, fnums[voiceNote[v] ] & 0xff); - theEmulator->write(0xB0+v, 32 + ((fnums[voiceNote[v]] & 0x1f00) >> 8) ); - } + // Update pitch of all voices (also released ones) + for( int v=0; vwrite(0xA0+v, fnums[vn] & 0xff); + theEmulator->write(0xB0+v, (playing ? 32 : 0) + ((fnums[vn] & 0x1f00) >> 8) ); } break; case MidiControlChange: @@ -363,7 +370,9 @@ bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& ti } break; default: +#ifdef LMMS_DEBUG printf("Midi CC %02x %02x\n", event.controllerNumber(), event.controllerValue() ); +#endif break; } break; @@ -476,7 +485,7 @@ void opl2instrument::loadSettings( const QDomElement & _this ) } // Load a patch into the emulator -void opl2instrument::loadPatch(unsigned char inst[14]) { +void opl2instrument::loadPatch(const unsigned char inst[14]) { emulatorMutex.lock(); for(int v=0; v<9; ++v) { theEmulator->write(0x20+adlib_opadd[v],inst[0]); // op1 AM/VIB/EG/KSR/Multiplier @@ -526,7 +535,7 @@ void opl2instrument::loadGMPatch() { // Update patch from the models to the chip emulation void opl2instrument::updatePatch() { - unsigned char *inst = midi_fm_instruments[0]; + unsigned char inst[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; inst[0] = ( op1_trem_mdl.value() ? 128 : 0 ) + ( op1_vib_mdl.value() ? 64 : 0 ) + ( op1_perc_mdl.value() ? 0 : 32 ) + // NB. This envelope mode is "perc", not "sus" @@ -564,7 +573,7 @@ void opl2instrument::updatePatch() { // have to do this, as the level knobs might've changed for( int voice = 0; voice < 9 ; ++voice) { - if(voiceNote[voice]!=OPL2_VOICE_FREE) { + if(voiceNote[voice] && OPL2_VOICE_FREE == 0) { setVoiceVelocity(voice, velocities[voiceNote[voice]] ); } } diff --git a/plugins/opl2/opl2instrument.h b/plugins/opl2/opl2instrument.h index 7cd644942..f42ff7352 100644 --- a/plugins/opl2/opl2instrument.h +++ b/plugins/opl2/opl2instrument.h @@ -33,8 +33,11 @@ #include "Knob.h" #include "PixmapButton.h" -#define OPL2_VOICE_FREE 255 +// This one is a flag, MIDI notes take 7 low bits +#define OPL2_VOICE_FREE 128 #define OPL2_NO_VOICE 255 +#define OPL2_VOICES 9 + // The "normal" range for LMMS pitchbends #define DEFAULT_BEND_CENTS 100 @@ -58,7 +61,7 @@ public: void saveSettings( QDomDocument & _doc, QDomElement & _this ); void loadSettings( const QDomElement & _this ); - void loadPatch(unsigned char inst[14]); + void loadPatch(const unsigned char inst[14]); void tuneEqual(int center, float Hz); IntModel m_patchModel; From 60f34788fba05cf55beabc36da09692e3ac31253 Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Sat, 10 Jan 2015 23:52:57 -0800 Subject: [PATCH 074/172] Remove unused variable --- src/gui/PianoRoll.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index cfa98bc23..deeb70d7c 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -78,9 +78,6 @@ typedef AutomationPattern::timeMap timeMap; -extern Keys whiteKeys[]; // defined in piano_widget.cpp - - // some constants... const int INITIAL_PIANOROLL_HEIGHT = 480; From 87e597510cac8b02e65d7205a81a7f8d80598ad8 Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Sat, 10 Jan 2015 23:59:06 -0800 Subject: [PATCH 075/172] Minor refactorings and codestyle cleanup. --- include/MidiTime.h | 3 +- include/Note.h | 6 +- include/PianoRoll.h | 2 +- src/gui/PianoRoll.cpp | 464 ++++++++++++++++++++--------------------- src/tracks/Pattern.cpp | 21 +- 5 files changed, 247 insertions(+), 249 deletions(-) diff --git a/include/MidiTime.h b/include/MidiTime.h index 5c49f780d..788e6fb57 100644 --- a/include/MidiTime.h +++ b/include/MidiTime.h @@ -137,7 +137,8 @@ public: static int stepsPerTact() { - return qMax( 1, ticksPerTact() / DefaultBeatsPerTact ); + int steps = ticksPerTact() / DefaultBeatsPerTact; + return qMax( 1, steps ); } static void setTicksPerTact( tick_t _tpt ) diff --git a/include/Note.h b/include/Note.h index eb36462a6..d179ba939 100644 --- a/include/Note.h +++ b/include/Note.h @@ -91,9 +91,9 @@ public: virtual ~Note(); // used by GUI - inline void setSelected( const bool _selected ){ m_selected = _selected; } - inline void setOldKey( const int _oldKey ){ m_oldKey = _oldKey; } - inline void setOldPos( const MidiTime & _oldPos ){ m_oldPos = _oldPos; } + inline void setSelected( const bool _selected ) { m_selected = _selected; } + inline void setOldKey( const int _oldKey ) { m_oldKey = _oldKey; } + inline void setOldPos( const MidiTime & _oldPos ) { m_oldPos = _oldPos; } inline void setOldLength( const MidiTime & _oldLength ) { m_oldLength = _oldLength; diff --git a/include/PianoRoll.h b/include/PianoRoll.h index bd27bda2e..84a8ffee8 100644 --- a/include/PianoRoll.h +++ b/include/PianoRoll.h @@ -341,7 +341,7 @@ private: volume_t m_lastNoteVolume; panning_t m_lastNotePanning; - int m_startKey; // first key when drawing + int m_startKey; // first key when drawing int m_lastKey; editModes m_editMode; diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp index deeb70d7c..980b24396 100644 --- a/src/gui/PianoRoll.cpp +++ b/src/gui/PianoRoll.cpp @@ -809,7 +809,7 @@ void PianoRoll::setCurrentPattern( Pattern* newPattern ) m_currentNote = NULL; m_startKey = INITIAL_START_KEY; - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { //resizeEvent( NULL ); setWindowTitle( tr( "Piano-Roll - no pattern" ) ); @@ -823,16 +823,17 @@ void PianoRoll::setCurrentPattern( Pattern* newPattern ) const NoteVector & notes = m_pattern->notes(); int central_key = 0; - if( notes.empty() == false ) + if( ! notes.empty() ) { // determine the central key so that we can scroll to it int total_notes = 0; for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) { - if( ( *it )->length() > 0 ) + Note *note = *it; + if( note->length() > 0 ) { - central_key += ( *it )->key(); + central_key += note->key(); ++total_notes; } } @@ -893,7 +894,7 @@ void PianoRoll::loadSettings( const QDomElement & _this ) void PianoRoll::setPauseIcon( bool pause ) { - if( pause == true ) + if( pause ) { m_playButton->setIcon( embed::getIconPixmap( "pause" ) ); } @@ -1056,8 +1057,6 @@ void PianoRoll::removeSelection() m_selectedTick = 0; m_selectStartKey = 0; m_selectedKeys = 0; - - } @@ -1071,12 +1070,10 @@ void PianoRoll::clearSelectedNotes() const NoteVector & notes = m_pattern->notes(); // will be our iterator in the following loop - NoteVector::ConstIterator it = notes.begin(); - while( it != notes.end() ) - { - ( *it )->setSelected( false ); - - ++it; + NoteVector::ConstIterator it; + for( it = notes.begin(); it != notes.end(); ++it ) { + Note *note = *it; + note->setSelected( false ); } } } @@ -1105,21 +1102,21 @@ void PianoRoll::shiftSemiTone( int amount ) // shift notes by amount semitones { bool useAllNotes = ! isSelection(); const NoteVector & notes = m_pattern->notes(); - for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); - ++it ) + NoteVector::ConstIterator it; + for( it = notes.begin(); it != notes.end(); ++it ) { + Note *note = *it; // if none are selected, move all notes, otherwise // only move selected notes - if( useAllNotes || ( *it )->selected() ) + if( useAllNotes || note->selected() ) { - ( *it )->setKey( ( *it )->key() + amount ); + note->setKey( note->key() + amount ); } } // we modified the song update(); Engine::songEditor()->update(); - } @@ -1129,26 +1126,27 @@ void PianoRoll::shiftPos( int amount ) //shift notes pos by amount { bool useAllNotes = ! isSelection(); const NoteVector & notes = m_pattern->notes(); + NoteVector::ConstIterator it; bool first = true; - for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); - ++it ) + for( it = notes.begin(); it != notes.end(); ++it ) { + Note *note = *it; // if none are selected, move all notes, otherwise // only move selected notes - if( ( *it )->selected() || (useAllNotes && ( *it )->length() > 0) ) + if( note->selected() || (useAllNotes && note->length() > 0) ) { // don't let notes go to out of bounds if( first ) { - m_moveBoundaryLeft = ( *it )->pos(); + m_moveBoundaryLeft = note->pos(); if( m_moveBoundaryLeft + amount < 0 ) { amount += 0 - (amount + m_moveBoundaryLeft); } first = false; } - ( *it )->setPos( ( *it )->pos() + amount ); + note->setPos( note->pos() + amount ); } } @@ -1163,9 +1161,11 @@ void PianoRoll::shiftPos( int amount ) //shift notes pos by amount bool PianoRoll::isSelection() const // are any notes selected? { const NoteVector & notes = m_pattern->notes(); - for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) + NoteVector::ConstIterator it; + for( it = notes.begin(); it != notes.end(); ++it ) { - if( ( *it )->selected() ) + Note *note = *it; + if( note->selected() ) { return true; } @@ -1181,9 +1181,11 @@ int PianoRoll::selectionCount() const // how many notes are selected? int sum = 0; const NoteVector & notes = m_pattern->notes(); - for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) + NoteVector::ConstIterator it; + for( it = notes.begin(); it != notes.end(); ++it ) { - if( ( *it )->selected() ) + Note *note = *it; + if( note->selected() ) { ++sum; } @@ -1200,7 +1202,7 @@ void PianoRoll::keyPressEvent( QKeyEvent* event ) { const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave; - if( event->isAutoRepeat() == false && key_num > -1 ) + if( ! event->isAutoRepeat() && key_num > -1 ) { m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( key_num ); event->accept(); @@ -1483,7 +1485,7 @@ void PianoRoll::keyReleaseEvent( QKeyEvent* event ) { const int key_num = PianoView::getKeyFromKeyEvent( event ) + ( DefaultOctave - 1 ) * KeysPerOctave; - if( event->isAutoRepeat() == false && key_num > -1 ) + if( ! event->isAutoRepeat() && key_num > -1 ) { m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( key_num ); event->accept(); @@ -1581,7 +1583,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) { m_startedWithShift = _me->modifiers() & Qt::ShiftModifier; - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } @@ -1645,22 +1647,23 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) // loop through whole note-vector... for( int i = 0; i < notes.size(); ++i ) { - MidiTime len = ( *it )->length(); + Note *note = *it; + MidiTime len = note->length(); if( len < 0 ) { len = 4; } // and check whether the user clicked on an // existing note or an edit-line - if( pos_ticks >= ( *it )->pos() && + if( pos_ticks >= note->pos() && len > 0 && ( - ( edit_note == false && - pos_ticks <= ( *it )->pos() + len && - ( *it )->key() == key_num ) + ( ! edit_note && + pos_ticks <= note->pos() + len && + note->key() == key_num ) || - ( edit_note == true && - pos_ticks <= ( *it )->pos() + + ( edit_note && + pos_ticks <= note->pos() + NE_LINE_WIDTH * MidiTime::ticksPerTact() / m_ppt ) @@ -1674,7 +1677,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) // first check whether the user clicked in note-edit- // area - if( edit_note == true ) + if( edit_note ) { m_pattern->addJournalCheckPoint(); // scribble note edit changes @@ -1744,58 +1747,55 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) { ++it; } - - } - m_currentNote = *it; - m_lastNotePanning = ( *it )->getPanning(); - m_lastNoteVolume = ( *it )->getVolume(); - m_lenOfNewNotes = ( *it )->length(); + Note *current_note = *it; + m_currentNote = current_note; + m_lastNotePanning = current_note->getPanning(); + m_lastNoteVolume = current_note->getVolume(); + m_lenOfNewNotes = current_note->length(); // remember which key and tick we started with m_mouseDownKey = m_startKey; m_mouseDownTick = m_currentPosition; bool first = true; - it = notes.begin(); - while( it != notes.end() ) + for( it = notes.begin(); it != notes.end(); ++it ) { + Note *note = *it; // remember note starting positions - ( *it )->setOldKey( ( *it )->key() ); - ( *it )->setOldPos( ( *it )->pos() ); - ( *it )->setOldLength( ( *it )->length() ); + note->setOldKey( note->key() ); + note->setOldPos( note->pos() ); + note->setOldLength( note->length() ); - if( ( *it )->selected() ) + if( note->selected() ) { // figure out the bounding box of all the selected notes if( first ) { - m_moveBoundaryLeft = ( *it )->pos().getTicks(); - m_moveBoundaryRight = ( *it )->pos() + ( *it )->length(); - m_moveBoundaryBottom = ( *it )->key(); - m_moveBoundaryTop = ( *it )->key(); + m_moveBoundaryLeft = note->pos().getTicks(); + m_moveBoundaryRight = note->pos() + note->length(); + m_moveBoundaryBottom = note->key(); + m_moveBoundaryTop = note->key(); first = false; } else { m_moveBoundaryLeft = qMin( - ( *it )->pos().getTicks(), - m_moveBoundaryLeft ); - m_moveBoundaryRight = qMax( ( *it )->pos() + - ( *it )->length(), + note->pos().getTicks(), + (tick_t) m_moveBoundaryLeft ); + m_moveBoundaryRight = qMax( note->pos() + + note->length(), m_moveBoundaryRight ); - m_moveBoundaryBottom = qMin( ( *it )->key(), + m_moveBoundaryBottom = qMin( note->key(), m_moveBoundaryBottom ); - m_moveBoundaryTop = qMax( ( *it )->key(), + m_moveBoundaryTop = qMax( note->key(), m_moveBoundaryTop ); } } - - ++it; } // if clicked on an unselected note, remove selection @@ -1812,8 +1812,8 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) // clicked at the "tail" of the note? - if( pos_ticks*m_ppt/MidiTime::ticksPerTact() > - ( m_currentNote->pos() + m_currentNote->length() )*m_ppt/ MidiTime::ticksPerTact() - RESIZE_AREA_WIDTH && + if( pos_ticks * m_ppt/MidiTime::ticksPerTact() > + ( m_currentNote->pos() + m_currentNote->length() ) * m_ppt/ MidiTime::ticksPerTact() - RESIZE_AREA_WIDTH && m_currentNote->length() > 0 ) { m_pattern->addJournalCheckPoint(); @@ -1839,18 +1839,18 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) QApplication::setOverrideCursor( c ); // if they're holding shift, copy all selected notes - if( //*it != created_new_note && - ! is_new_note && _me->modifiers() & Qt::ShiftModifier ) + if( ! is_new_note && _me->modifiers() & Qt::ShiftModifier ) { // vector to hold new notes until we're through the loop QVector newNotes; it = notes.begin(); while( it != notes.end() ) { - if( ( *it )->selected() ) + Note *note = *it; + if( note->selected() ) { // copy this note - Note noteCopy( (Note) **it ); + Note noteCopy( *note ); newNotes.push_back( noteCopy ); } ++it; @@ -1859,7 +1859,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) if( newNotes.size() != 0 ) { //put notes from vector into piano roll - for( int i=0; iaddNote( newNotes[i] ); newNote->setSelected( false ); @@ -1886,14 +1886,15 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) m_mouseDownRight = true; if( it != notes.begin()-1 ) { + Note *note = *it; m_pattern->addJournalCheckPoint(); - if( ( *it )->length() > 0 ) + if( note->length() > 0 ) { - m_pattern->removeNote( *it ); + m_pattern->removeNote( note ); } else { - ( *it )->setLength( 0 ); + note->setLength( 0 ); m_pattern->dataChanged(); } Engine::getSong()->setModified(); @@ -1910,7 +1911,6 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) m_selectedKeys = 1; m_action = ActionSelectNotes; - // call mousemove to fix glitch where selection // appears in wrong spot on mousedown mouseMoveEvent( _me ); @@ -1930,11 +1930,8 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) { // left click - play the note m_lastKey = key_num; - //if( ! m_recording && ! engine::getSong()->isPlaying() ) - { - int v = ( (float) x ) / ( (float) WHITE_KEY_WIDTH ) * MidiDefaultVelocity; - m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( key_num, v ); - } + int v = ( (float) x ) / ( (float) WHITE_KEY_WIDTH ) * MidiDefaultVelocity; + m_pattern->instrumentTrack()->pianoModel()->handleKeyPress( key_num, v ); } } else @@ -1945,7 +1942,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) m_noteEditMode = (noteEditMode)(((int)m_noteEditMode)+1); if( m_noteEditMode == NoteEditCount ) { - m_noteEditMode = (noteEditMode)0; + m_noteEditMode = (noteEditMode) 0; } repaint(); } @@ -1963,7 +1960,7 @@ void PianoRoll::mousePressEvent( QMouseEvent * _me ) void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me ) { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } @@ -2014,7 +2011,8 @@ void PianoRoll::mouseDoubleClickEvent( QMouseEvent * _me ) NoteVector::Iterator it = nv.begin(); while( it != nv.end() ) { - if( ( *it )->pos().getTicks() != closest->pos().getTicks() ) + Note *note = *it; + if( note->pos().getTicks() != closest->pos().getTicks() ) { it = nv.erase( it ); } @@ -2036,7 +2034,7 @@ void PianoRoll::testPlayNote( Note * n ) { m_lastKey = n->key(); - if( n->isPlaying() == false && m_recording == false ) + if( ! n->isPlaying() && ! m_recording ) { n->setIsPlaying( true ); @@ -2061,18 +2059,19 @@ void PianoRoll::pauseTestNotes( bool _pause ) NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { - if( ( *it )->isPlaying() ) + Note *note = *it; + if( note->isPlaying() ) { if( _pause ) { // stop note - m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( ( *it )->key() ); + m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( note->key() ); } else { // start note - ( *it )->setIsPlaying( false ); - testPlayNote( *it ); + note->setIsPlaying( false ); + testPlayNote( note ); } } @@ -2125,20 +2124,21 @@ void PianoRoll::computeSelectedNotes(bool shift) } //int y_base = noteEditTop() - 1; - if( hasValidPattern() == true ) + if( hasValidPattern() ) { const NoteVector & notes = m_pattern->notes(); + NoteVector::ConstIterator it; - for( NoteVector::ConstIterator it = notes.begin(); - it != notes.end(); ++it ) + for( it = notes.begin(); it != notes.end(); ++it ) { + Note *note = *it; // make a new selection unless they're holding shift if( ! shift ) { - ( *it )->setSelected( false ); + note->setSelected( false ); } - int len_ticks = ( *it )->length(); + int len_ticks = note->length(); if( len_ticks == 0 ) { @@ -2149,9 +2149,9 @@ void PianoRoll::computeSelectedNotes(bool shift) len_ticks = 4; } - const int key = ( *it )->key() - m_startKey + 1; + const int key = note->key() - m_startKey + 1; - int pos_ticks = ( *it )->pos(); + int pos_ticks = note->pos(); // if the selection even barely overlaps the note if( key > sel_key_start && @@ -2160,14 +2160,8 @@ void PianoRoll::computeSelectedNotes(bool shift) pos_ticks < sel_pos_end ) { // remove from selection when holding shift - if( shift && ( *it )->selected() ) - { - ( *it )->setSelected(false); - } - else - { - ( *it )->setSelected(true); - } + bool selected = shift && note->selected(); + note->setSelected( ! selected); } } } @@ -2227,7 +2221,7 @@ void PianoRoll::mouseReleaseEvent( QMouseEvent * _me ) } - if( hasValidPattern() == true ) + if( hasValidPattern() ) { // turn off all notes that are playing const NoteVector & notes = m_pattern->notes(); @@ -2235,10 +2229,11 @@ void PianoRoll::mouseReleaseEvent( QMouseEvent * _me ) NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { - if( ( *it )->isPlaying() ) + Note *note = *it; + if( note->isPlaying() ) { - m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( ( *it )->key() ); - ( *it )->setIsPlaying( false ); + m_pattern->instrumentTrack()->pianoModel()->handleKeyRelease( note->key() ); + note->setIsPlaying( false ); } ++it; @@ -2268,7 +2263,7 @@ void PianoRoll::mouseReleaseEvent( QMouseEvent * _me ) void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { update(); return; @@ -2342,7 +2337,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) pauseTestNotes( false ); } } - else if( ( edit_note == true || m_action == ActionChangeNoteProperty ) && + else if( ( edit_note || m_action == ActionChangeNoteProperty ) && ( _me->buttons() & Qt::LeftButton || _me->buttons() & Qt::MiddleButton || ( _me->buttons() & Qt::RightButton && _me->modifiers() & Qt::ShiftModifier ) ) ) { @@ -2491,13 +2486,14 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) // loop through whole note-vector... for( int i = 0; i < notes.size(); ++i ) { + Note *note = *it; // and check whether the cursor is over an // existing note - if( pos_ticks >= ( *it )->pos() && - pos_ticks <= ( *it )->pos() + - ( *it )->length() && - ( *it )->key() == key_num && - ( *it )->length() > 0 ) + if( pos_ticks >= note->pos() && + pos_ticks <= note->pos() + + note->length() && + note->key() == key_num && + note->length() > 0 ) { break; } @@ -2508,12 +2504,13 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) // no note?? if( it != notes.begin()-1 ) { + Note *note = *it; // cursor at the "tail" of the note? - if( ( *it )->length() > 0 && + if( note->length() > 0 && pos_ticks*m_ppt / MidiTime::ticksPerTact() > - ( ( *it )->pos() + - ( *it )->length() )*m_ppt/ + ( note->pos() + + note->length() )*m_ppt/ MidiTime::ticksPerTact()- RESIZE_AREA_WIDTH ) { @@ -2611,22 +2608,23 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) // loop through whole note-vector... while( it != notes.end() ) { - MidiTime len = ( *it )->length(); + Note *note = *it; + MidiTime len = note->length(); if( len < 0 ) { len = 4; } // and check whether the user clicked on an // existing note or an edit-line - if( pos_ticks >= ( *it )->pos() && + if( pos_ticks >= note->pos() && len > 0 && ( - ( edit_note == false && - pos_ticks <= ( *it )->pos() + len && - ( *it )->key() == key_num ) + ( ! edit_note && + pos_ticks <= note->pos() + len && + note->key() == key_num ) || - ( edit_note == true && - pos_ticks <= ( *it )->pos() + + ( edit_note && + pos_ticks <= note->pos() + NE_LINE_WIDTH * MidiTime::ticksPerTact() / m_ppt ) @@ -2636,13 +2634,13 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * _me ) // delete this note if( it != notes.end() ) { - if( ( *it )->length() > 0 ) + if( note->length() > 0 ) { - m_pattern->removeNote( *it ); + m_pattern->removeNote( note ); } else { - ( *it )->setLength( 0 ); + note->setLength( 0 ); m_pattern->dataChanged(); } Engine::getSong()->setModified(); @@ -2792,50 +2790,41 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift ) NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { - const int pos = ( *it )->pos().getTicks(); + Note *note = *it; + const int pos = note->pos().getTicks(); // when resizing a note and holding shift: shift the following // notes to preserve the melody if( m_action == ActionResizeNote && shift ) { - int shifted_pos = ( *it )->oldPos().getTicks() + shift_offset; + int shifted_pos = note->oldPos().getTicks() + shift_offset; if( shifted_pos && pos == shift_ref_pos ) { shifted_pos -= off_ticks; } - ( *it )->setPos( MidiTime( shifted_pos ) ); + note->setPos( MidiTime( shifted_pos ) ); } - if( ( *it )->selected() ) + if( note->selected() ) { if( m_action == ActionMoveNote && ! ( shift && ! m_startedWithShift ) ) { // moving note - int pos_ticks = ( *it )->oldPos().getTicks() - + off_ticks; - int key_num = ( *it )->oldKey() + off_key; + int pos_ticks = note->oldPos().getTicks() + off_ticks; + int key_num = note->oldKey() + off_key; - if( pos_ticks < 0 ) - { - pos_ticks = 0; - } + // ticks can't be negative + pos_ticks = qMax(0, pos_ticks); // upper/lower bound checks on key_num - if( key_num < 0 ) - { - key_num = 0; - } - else if( key_num > NumKeys ) - { - key_num = NumKeys; - } + key_num = qMax(0, key_num); + key_num = qMin(key_num, NumKeys); - ( *it )->setPos( MidiTime( pos_ticks ) ); - ( *it )->setKey( key_num ); + note->setPos( MidiTime( pos_ticks ) ); + note->setKey( key_num ); } else if( m_action == ActionResizeNote ) { // resizing note - int ticks_new = ( *it )->oldLength().getTicks() - + off_ticks; + int ticks_new = note->oldLength().getTicks() + off_ticks; if( ticks_new <= 0 ) { ticks_new = 1; @@ -2850,20 +2839,20 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift ) shift_ref_pos = pos; } } - ( *it )->setLength( MidiTime( ticks_new ) ); + note->setLength( MidiTime( ticks_new ) ); - m_lenOfNewNotes = ( *it )->length(); + m_lenOfNewNotes = note->length(); } else if( m_action == ActionMoveNote && ( shift && ! m_startedWithShift ) ) { // quick resize, toggled by holding shift after starting a note move, but not before - int ticks_new = ( *it )->oldLength().getTicks() + off_ticks; + int ticks_new = note->oldLength().getTicks() + off_ticks; if( ticks_new <= 0 ) { ticks_new = 1; } - ( *it )->setLength( MidiTime( ticks_new ) ); - m_lenOfNewNotes = ( *it )->length(); + note->setLength( MidiTime( ticks_new ) ); + m_lenOfNewNotes = note->length(); } } ++it; @@ -2876,7 +2865,9 @@ void PianoRoll::dragNotes( int x, int y, bool alt, bool shift ) static QString calculateNoteLabel(QString note, int octave) { if(note.isEmpty()) + { return ""; + } return note + QString::number(octave); } @@ -2910,7 +2901,7 @@ static void printNoteHeights(QPainter& p, int bottom, int width, int startKey) y -= KEY_LINE_HEIGHT, key++) { const unsigned note = key % KeysPerOctave; - assert( note < ( sizeof( labels ) / sizeof( *labels) )); + assert( note < ( sizeof( labels ) / sizeof( labels[0] ) )); const KeyLabel& noteLabel( labels[note] ); const int octave = key / KeysPerOctave; const KeyLabel notes = { @@ -2919,7 +2910,6 @@ static void printNoteHeights(QPainter& p, int bottom, int width, int startKey) calculateNoteLabel(noteLabel.major, octave), }; - const int drawWidth( width - WHITE_KEY_WIDTH ); const int hspace = 300; const int columnCount = drawWidth/hspace + 1; @@ -2947,7 +2937,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) QBrush bgColor = p.background(); // fill with bg color - p.fillRect( 0,0, width(), height(), bgColor ); + p.fillRect( 0, 0, width(), height(), bgColor ); // set font-size to 8 p.setFont( pointSize<8>( p.font() ) ); @@ -2958,8 +2948,8 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) // calculate y_offset according to first key switch( prKeyOrder[m_startKey % KeysPerOctave] ) { - case PR_BLACK_KEY: y_offset = KEY_LINE_HEIGHT/4; break; - case PR_WHITE_KEY_BIG: y_offset = KEY_LINE_HEIGHT/2; break; + case PR_BLACK_KEY: y_offset = KEY_LINE_HEIGHT / 4; break; + case PR_WHITE_KEY_BIG: y_offset = KEY_LINE_HEIGHT / 2; break; case PR_WHITE_KEY_SMALL: if( prKeyOrder[( ( m_startKey + 1 ) % KeysPerOctave)] != PR_BLACK_KEY ) @@ -2990,7 +2980,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) break; } - p.fillRect( WHITE_KEY_WIDTH+1, y-KEY_LINE_HEIGHT/2, + p.fillRect( WHITE_KEY_WIDTH + 1, y - KEY_LINE_HEIGHT / 2, width() - 10, KEY_LINE_HEIGHT, QColor( 0, 80 - ( key_num % KeysPerOctave ) * 3, 64 + key_num / 2) ); } @@ -3034,8 +3024,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) y -= WHITE_KEY_SMALL_HEIGHT; } - else if( prKeyOrder[key % KeysPerOctave] == - PR_WHITE_KEY_BIG ) + else if( prKeyOrder[key % KeysPerOctave] == PR_WHITE_KEY_BIG ) { // draw a big one while checking if it is pressed or not if( hasValidPattern() && m_pattern->instrumentTrack()->pianoModel()->isKeyPressed( key ) ) @@ -3060,7 +3049,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) { const QString cLabel = "C" + QString::number( static_cast( key / KeysPerOctave ) ); p.setPen( QColor( 240, 240, 240 ) ); - p.drawText( C_KEY_LABEL_X + 1, y+14, cLabel ); + p.drawText( C_KEY_LABEL_X + 1, y + 14, cLabel ); p.setPen( QColor( 0, 0, 0 ) ); p.drawText( C_KEY_LABEL_X, y + 13, cLabel ); horizCol.setAlpha( 192 ); @@ -3148,7 +3137,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) // erase the area below the piano, because there might be keys that // should be only half-visible p.fillRect( QRect( 0, keyAreaBottom(), - WHITE_KEY_WIDTH, noteEditBottom()-keyAreaBottom() ), bgColor ); + WHITE_KEY_WIDTH, noteEditBottom() - keyAreaBottom() ), bgColor ); // display note editing info QFont f = p.font(); @@ -3212,7 +3201,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) p.setPen( vertCol ); } - p.drawLine( (int)x, PR_TOP_MARGIN, (int)x, height() - + p.drawLine( (int) x, PR_TOP_MARGIN, (int) x, height() - PR_BOTTOM_MARGIN ); // extra 32nd's line @@ -3220,8 +3209,8 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) { vertCol.setAlpha( 80 ); p.setPen( vertCol ); - p.drawLine( (int)(x + pp16th/2) , PR_TOP_MARGIN, - (int)(x + pp16th/2), height() - + p.drawLine( (int)(x + pp16th / 2) , PR_TOP_MARGIN, + (int)(x + pp16th / 2), height() - PR_BOTTOM_MARGIN ); } } @@ -3248,7 +3237,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) } int y_base = keyAreaBottom() - 1; - if( hasValidPattern() == true ) + if( hasValidPattern() ) { p.setClipRect( WHITE_KEY_WIDTH, PR_TOP_MARGIN, width() - WHITE_KEY_WIDTH, @@ -3260,11 +3249,12 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) KEY_LINE_HEIGHT + 2; QPolygon editHandles; + NoteVector::ConstIterator it; - for( NoteVector::ConstIterator it = notes.begin(); - it != notes.end(); ++it ) + for( it = notes.begin(); it != notes.end(); ++it ) { - int len_ticks = ( *it )->length(); + Note *note = *it; + int len_ticks = note->length(); if( len_ticks == 0 ) { @@ -3275,17 +3265,15 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) len_ticks = 4; } - const int key = ( *it )->key() - m_startKey + 1; + const int key = note->key() - m_startKey + 1; - int pos_ticks = ( *it )->pos(); + int pos_ticks = note->pos(); - int note_width = len_ticks * m_ppt / - MidiTime::ticksPerTact(); + int note_width = len_ticks * m_ppt / MidiTime::ticksPerTact(); const int x = ( pos_ticks - m_currentPosition ) * m_ppt / MidiTime::ticksPerTact(); // skip this note if not in visible area at all - if( !( x + note_width >= 0 && - x <= width() - WHITE_KEY_WIDTH ) ) + if( !( x + note_width >= 0 && x <= width() - WHITE_KEY_WIDTH ) ) { continue; } @@ -3298,22 +3286,22 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) // note drawNoteRect( p, x + WHITE_KEY_WIDTH, y_base - key * KEY_LINE_HEIGHT, - note_width, *it, noteColor() ); + note_width, note, noteColor() ); } // draw note editing stuff int editHandleTop = 0; if( m_noteEditMode == NoteEditVolume ) { - QColor color = barColor().lighter( 30 + ( ( *it )->getVolume() * 90 / MaxVolume ) ); - if( ( *it )->selected() ) + QColor color = barColor().lighter( 30 + ( note->getVolume() * 90 / MaxVolume ) ); + if( note->selected() ) { color.setRgb( 0x00, 0x40, 0xC0 ); } p.setPen( QPen( color, NE_LINE_WIDTH ) ); editHandleTop = noteEditBottom() - - ( (float)( ( *it )->getVolume() - MinVolume ) ) / + ( (float)( note->getVolume() - MinVolume ) ) / ( (float)( MaxVolume - MinVolume ) ) * ( (float)( noteEditBottom() - noteEditTop() ) ); @@ -3324,7 +3312,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) else if( m_noteEditMode == NoteEditPanning ) { QColor color( noteColor() ); - if( ( *it )->selected() ) + if( note->selected() ) { color.setRgb( 0x00, 0x40, 0xC0 ); } @@ -3332,7 +3320,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) p.setPen( QPen( color, NE_LINE_WIDTH ) ); editHandleTop = noteEditBottom() - - ( (float)( ( *it )->getPanning() - PanningLeft ) ) / + ( (float)( note->getPanning() - PanningLeft ) ) / ( (float)( (PanningRight - PanningLeft ) ) ) * ( (float)( noteEditBottom() - noteEditTop() ) ); @@ -3343,7 +3331,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) editHandles << QPoint( x + noteEditLeft(), editHandleTop+1 ); - if( ( *it )->hasDetuningInfo() ) + if( note->hasDetuningInfo() ) { drawDetuningInfo( p, *it, x + WHITE_KEY_WIDTH, @@ -3383,7 +3371,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) p.drawRect( x + WHITE_KEY_WIDTH, y, w, h ); // TODO: Get this out of paint event - int l = ( hasValidPattern() == true )? (int) m_pattern->length() : 0; + int l = ( hasValidPattern() )? (int) m_pattern->length() : 0; // reset scroll-range if( m_leftRightScroll->maximum() != l ) @@ -3396,7 +3384,7 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) horizCol.setAlpha( 64 ); // horizontal line for the key under the cursor - if( hasValidPattern() == true ) + if( hasValidPattern() ) { int key_num = getKey( mapFromGlobal( QCursor::pos() ).y() ); p.fillRect( 10, keyAreaBottom() + 3 - KEY_LINE_HEIGHT * @@ -3448,7 +3436,8 @@ void PianoRoll::paintEvent( QPaintEvent * _pe ) // responsible for moving/resizing scrollbars after window-resizing void PianoRoll::resizeEvent( QResizeEvent * ) { - m_leftRightScroll->setGeometry( WHITE_KEY_WIDTH, height() - + m_leftRightScroll->setGeometry( WHITE_KEY_WIDTH, + height() - SCROLLBAR_SIZE, width()-WHITE_KEY_WIDTH, SCROLLBAR_SIZE ); @@ -3489,9 +3478,9 @@ void PianoRoll::wheelEvent( QWheelEvent * _we ) // get values for going through notes int pixel_range = 8; int x = _we->x() - WHITE_KEY_WIDTH; - int ticks_start = ( x-pixel_range/2 ) * + int ticks_start = ( x - pixel_range / 2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; - int ticks_end = ( x+pixel_range/2 ) * + int ticks_end = ( x + pixel_range / 2 ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // get note-vector of current pattern @@ -3652,7 +3641,7 @@ Song::PlayModes PianoRoll::desiredPlayModeForAccompany() const void PianoRoll::play() { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } @@ -3676,7 +3665,7 @@ void PianoRoll::record() { stop(); } - if( m_recording == true || hasValidPattern() == false ) + if( m_recording || ! hasValidPattern() ) { return; } @@ -3695,7 +3684,7 @@ void PianoRoll::recordAccompany() { stop(); } - if( m_recording == true || hasValidPattern() == false ) + if( m_recording || ! hasValidPattern() ) { return; } @@ -3728,7 +3717,7 @@ void PianoRoll::stop() void PianoRoll::startRecordNote( const Note & _n ) { - if( m_recording == true && hasValidPattern() == true && + if( m_recording && hasValidPattern() && Engine::getSong()->isPlaying() && ( Engine::getSong()->playMode() == desiredPlayModeForAccompany() || @@ -3755,7 +3744,7 @@ void PianoRoll::startRecordNote( const Note & _n ) void PianoRoll::finishRecordNote( const Note & _n ) { - if( m_recording == true && hasValidPattern() == true && + if( m_recording && hasValidPattern() && Engine::getSong()->isPlaying() && ( Engine::getSong()->playMode() == desiredPlayModeForAccompany() || @@ -3840,7 +3829,7 @@ void PianoRoll::detuneButtonToggled() void PianoRoll::selectAll() { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } @@ -3849,16 +3838,18 @@ void PianoRoll::selectAll() // if first_time = true, we HAVE to set the vars for select bool first_time = true; + NoteVector::ConstIterator it; - for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); ++it ) + for( it = notes.begin(); it != notes.end(); ++it ) { - int len_ticks = ( *it )->length(); + Note *note = *it; + int len_ticks = note->length(); if( len_ticks > 0 ) { - const int key = ( *it )->key(); + const int key = note->key(); - int pos_ticks = ( *it )->pos(); + int pos_ticks = note->pos(); if( key <= m_selectStartKey || first_time ) { // if we move start-key down, we have to add @@ -3898,19 +3889,20 @@ void PianoRoll::selectAll() // returns vector with pointers to all selected notes void PianoRoll::getSelectedNotes( NoteVector & _selected_notes ) { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } const NoteVector & notes = m_pattern->notes(); + NoteVector::ConstIterator it; - for( NoteVector::ConstIterator it = notes.begin(); it != notes.end(); - ++it ) + for( it = notes.begin(); it != notes.end(); ++it ) { - if( ( *it )->selected() ) + Note *note = *it; + if( note->selected() ) { - _selected_notes.push_back( *it ); + _selected_notes.push_back( note ); } } } @@ -3990,7 +3982,7 @@ void PianoRoll::copySelectedNotes() NoteVector selected_notes; getSelectedNotes( selected_notes ); - if( selected_notes.empty() == false ) + if( ! selected_notes.empty() ) { copy_to_clipboard( selected_notes ); } @@ -4001,7 +3993,7 @@ void PianoRoll::copySelectedNotes() void PianoRoll::cutSelectedNotes() { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } @@ -4009,18 +4001,19 @@ void PianoRoll::cutSelectedNotes() NoteVector selected_notes; getSelectedNotes( selected_notes ); - if( selected_notes.empty() == false ) + if( ! selected_notes.empty() ) { copy_to_clipboard( selected_notes ); Engine::getSong()->setModified(); + NoteVector::Iterator it; - for( NoteVector::Iterator it = selected_notes.begin(); - it != selected_notes.end(); ++it ) + for( it = selected_notes.begin(); it != selected_notes.end(); ++it ) { + Note *note = *it; // note (the memory of it) is also deleted by // pattern::removeNote(...) so we don't have to do that - m_pattern->removeNote( *it ); + m_pattern->removeNote( note ); } } @@ -4033,7 +4026,7 @@ void PianoRoll::cutSelectedNotes() void PianoRoll::pasteNotes() { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } @@ -4042,7 +4035,7 @@ void PianoRoll::pasteNotes() ->mimeData( QClipboard::Clipboard ) ->data( Clipboard::mimeType() ); - if( !value.isEmpty() ) + if( ! value.isEmpty() ) { DataFile dataFile( value.toUtf8() ); @@ -4051,12 +4044,12 @@ void PianoRoll::pasteNotes() // remove selection and select the newly pasted notes clearSelectedNotes(); - if( !list.isEmpty() ) + if( ! list.isEmpty() ) { m_pattern->addJournalCheckPoint(); } - for( int i = 0; !list.item( i ).isNull(); ++i ) + for( int i = 0; ! list.item( i ).isNull(); ++i ) { // create the note Note cur_note; @@ -4085,7 +4078,7 @@ void PianoRoll::pasteNotes() void PianoRoll::deleteSelectedNotes() { - if( hasValidPattern() == false ) + if( ! hasValidPattern() ) { return; } @@ -4101,10 +4094,11 @@ void PianoRoll::deleteSelectedNotes() NoteVector::ConstIterator it = notes.begin(); while( it != notes.end() ) { - if( ( *it )->selected() ) + Note *note = *it; + if( note->selected() ) { // delete this note - m_pattern->removeNote( ( *it ) ); + m_pattern->removeNote( note ); update_after_delete = true; // start over, make sure we get all the notes @@ -4116,7 +4110,7 @@ void PianoRoll::deleteSelectedNotes() } } - if( update_after_delete == true ) + if( update_after_delete ) { Engine::getSong()->setModified(); update(); @@ -4133,15 +4127,13 @@ void PianoRoll::autoScroll( const MidiTime & _t ) const int w = width() - WHITE_KEY_WIDTH; if( _t > m_currentPosition + w * MidiTime::ticksPerTact() / m_ppt ) { - m_leftRightScroll->setValue( _t.getTact() * - MidiTime::ticksPerTact() ); + m_leftRightScroll->setValue( _t.getTact() * MidiTime::ticksPerTact() ); } else if( _t < m_currentPosition ) { MidiTime t = qMax( _t - w * MidiTime::ticksPerTact() * - MidiTime::ticksPerTact() / m_ppt, 0 ); - m_leftRightScroll->setValue( t.getTact() * - MidiTime::ticksPerTact() ); + MidiTime::ticksPerTact() / m_ppt, (tick_t) 0 ); + m_leftRightScroll->setValue( t.getTact() * MidiTime::ticksPerTact() ); } m_scrollBack = false; } @@ -4151,11 +4143,10 @@ void PianoRoll::autoScroll( const MidiTime & _t ) void PianoRoll::updatePosition( const MidiTime & _t ) { - if( ( Engine::getSong()->isPlaying() && - Engine::getSong()->playMode() == - Song::Mode_PlayPattern && - m_timeLine->autoScroll() == Timeline::AutoScrollEnabled ) || - m_scrollBack == true ) + if( ( Engine::getSong()->isPlaying() + && Engine::getSong()->playMode() == Song::Mode_PlayPattern + && m_timeLine->autoScroll() == Timeline::AutoScrollEnabled + ) || m_scrollBack ) { autoScroll( _t ); } @@ -4196,7 +4187,6 @@ void PianoRoll::zoomingChanged() m_timeLine->setPixelsPerTact( m_ppt ); update(); - } @@ -4222,8 +4212,7 @@ int PianoRoll::quantization() const } } return DefaultTicksPerTact / m_quantizeModel.currentText().right( - m_quantizeModel.currentText().length() - - 2 ).toInt(); + m_quantizeModel.currentText().length() - 2 ).toInt(); } @@ -4251,8 +4240,7 @@ MidiTime PianoRoll::newNoteLen() const return m_lenOfNewNotes; } return DefaultTicksPerTact / m_noteLenModel.currentText().right( - m_noteLenModel.currentText().length() - - 2 ).toInt(); + m_noteLenModel.currentText().length() - 2 ).toInt(); } @@ -4285,17 +4273,19 @@ Note * PianoRoll::noteUnderMouse() MidiTime::ticksPerTact() / m_ppt + m_currentPosition; // will be our iterator in the following loop - NoteVector::ConstIterator it = notes.begin()+notes.size()-1; + NoteVector::ConstIterator it = notes.end() - 1; + Note *note = *it; // loop through whole note-vector... int i; for( i = 0; i < notes.size(); ++i ) { + note = *it; // and check whether the cursor is over an // existing note - if( pos_ticks >= ( *it )->pos() && - pos_ticks <= ( *it )->pos() + ( *it )->length() && - ( *it )->key() == key_num && ( *it )->length() > 0 ) + if( pos_ticks >= note->pos() && + pos_ticks <= note->endPos() && + note->key() == key_num && note->length() > 0 ) { break; } @@ -4307,5 +4297,5 @@ Note * PianoRoll::noteUnderMouse() return NULL; } - return *it; + return note; } diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index e527acd03..4c95aa6fc 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -499,12 +499,15 @@ void Pattern::ensureBeatNotes() for( int i = 0; i < m_steps; ++i ) { bool found = false; - for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ++it ) + NoteVector::Iterator it; + + for( it = m_notes.begin(); it != m_notes.end(); ++it ) { + Note *note = *it; // if a note in this position is the one we want - if( ( *it )->pos() == + if( note->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() - && ( *it )->length() <= 0 ) + && note->length() <= 0 ) { found = true; break; @@ -524,10 +527,12 @@ void Pattern::ensureBeatNotes() for( NoteVector::Iterator it = m_notes.begin(); it != m_notes.end(); ) { bool needed = false; + Note *note = *it; + for( int i = 0; i < m_steps; ++i ) { - if( ( *it )->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() - || ( *it )->length() != 0 ) + if( note->pos() == ( i * MidiTime::ticksPerTact() ) / MidiTime::stepsPerTact() + || note->length() != 0 ) { needed = true; break; @@ -535,10 +540,12 @@ void Pattern::ensureBeatNotes() } if( needed == false ) { - delete *it; + delete note; it = m_notes.erase( it ); } - else ++it; + else { + ++it; + } } } From 23dbe95e80b2386be1f3f7d08d8942d2f717b585 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 11 Jan 2015 13:05:44 +0100 Subject: [PATCH 076/172] Stop on second space key press --- include/Editor.h | 4 ++++ src/gui/editors/Editor.cpp | 12 ++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/include/Editor.h b/include/Editor.h index 1070aa649..e4da281dc 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -48,6 +48,10 @@ protected slots: virtual void recordAccompany() {} virtual void stop() {} +private slots: + /// Called by pressing the space key. Plays or stops. + void togglePlayStop(); + signals: protected: diff --git a/src/gui/editors/Editor.cpp b/src/gui/editors/Editor.cpp index 8594f1b95..985d22f40 100644 --- a/src/gui/editors/Editor.cpp +++ b/src/gui/editors/Editor.cpp @@ -30,6 +30,7 @@ #include #include #include +#include void Editor::setPauseIcon(bool displayPauseIcon) @@ -41,6 +42,14 @@ void Editor::setPauseIcon(bool displayPauseIcon) m_playAction->setIcon(embed::getIconPixmap("play")); } +void Editor::togglePlayStop() +{ + if (Engine::getSong()->isPlaying()) + stop(); + else + play(); +} + Editor::Editor(bool record) : m_toolBar(new QToolBar(this)), m_playAction(nullptr), @@ -63,13 +72,12 @@ Editor::Editor(bool record) : m_recordAction = new QAction(embed::getIconPixmap("record"), tr("Record"), this); m_recordAccompanyAction = new QAction(embed::getIconPixmap("record_accompany"), tr("Record while playing"), this); - m_playAction->setShortcut(Qt::Key_Space); - // Set up connections connect(m_playAction, SIGNAL(triggered()), this, SLOT(play())); connect(m_recordAction, SIGNAL(triggered()), this, SLOT(record())); connect(m_recordAccompanyAction, SIGNAL(triggered()), this, SLOT(recordAccompany())); connect(m_stopAction, SIGNAL(triggered()), this, SLOT(stop())); + new QShortcut(Qt::Key_Space, this, SLOT(togglePlayStop())); // Add toolbar to window addToolBar(Qt::TopToolBarArea, m_toolBar); From 94ede26496c744f20d9a6322a937250d222c1382 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 11 Jan 2015 14:33:41 +0000 Subject: [PATCH 077/172] 1345 redesigned Misc tab using GroupBox --- include/InstrumentMidiIOView.h | 3 ++- src/gui/widgets/InstrumentMidiIOView.cpp | 19 +++++++------------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/include/InstrumentMidiIOView.h b/include/InstrumentMidiIOView.h index c45dbfa5f..a8208424f 100644 --- a/include/InstrumentMidiIOView.h +++ b/include/InstrumentMidiIOView.h @@ -73,7 +73,8 @@ public: ~InstrumentMiscView(); private: - LedCheckBox * m_useMasterPitchBox; + + GroupBox * m_pitchGroupBox; }; diff --git a/src/gui/widgets/InstrumentMidiIOView.cpp b/src/gui/widgets/InstrumentMidiIOView.cpp index 6b330a707..f2747fe7d 100644 --- a/src/gui/widgets/InstrumentMidiIOView.cpp +++ b/src/gui/widgets/InstrumentMidiIOView.cpp @@ -210,18 +210,13 @@ InstrumentMiscView::InstrumentMiscView(InstrumentTrack *it, QWidget *parent) : { QVBoxLayout* layout = new QVBoxLayout( this ); layout->setMargin( 5 ); - - QHBoxLayout* masterPitchLayout = new QHBoxLayout( this ); - - //setup checkbox for use master pitch - m_useMasterPitchBox = new LedCheckBox( this, tr( "Use master pitch" ),LedCheckBox::Green ); - m_useMasterPitchBox->setModel( &it->m_useMasterPitchModel ); - m_useMasterPitchBox->setToolTip( "Master Pitch" ); - masterPitchLayout->addWidget( m_useMasterPitchBox ); - - QLabel *label = new QLabel ( tr ("Use Master Pitch " ), this ); - masterPitchLayout->addWidget( label ); - layout->addLayout( masterPitchLayout ); + m_pitchGroupBox = new GroupBox( tr ( "MASTER PITCH" ) ); + layout->addWidget( m_pitchGroupBox ); + QHBoxLayout* masterPitchLayout = new QHBoxLayout( m_pitchGroupBox ); + masterPitchLayout->setContentsMargins( 8, 18, 8, 8 ); + QLabel *tlabel = new QLabel(tr( "Enables the use of Master Pitch" ) ); + m_pitchGroupBox->setModel( &it->m_useMasterPitchModel ); + masterPitchLayout->addWidget( tlabel ); layout->addStretch(); } From ee3a99853b84d089fa99d4985d9d0b145d22bfb8 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 11 Jan 2015 16:33:57 +0100 Subject: [PATCH 078/172] CMake use explicit source file specifying --- CMakeLists.txt | 134 +-------------------------------- src/CMakeLists.txt | 152 ++++++++++++++++++++++++++++++++++++++ src/core/CMakeLists.txt | 88 ++++++++++++++++++++++ src/gui/CMakeLists.txt | 93 +++++++++++++++++++++++ src/tracks/CMakeLists.txt | 10 +++ 5 files changed, 346 insertions(+), 131 deletions(-) create mode 100644 src/CMakeLists.txt create mode 100644 src/core/CMakeLists.txt create mode 100644 src/gui/CMakeLists.txt create mode 100644 src/tracks/CMakeLists.txt diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e1d1b5d4..ed9d943e5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -385,11 +385,7 @@ SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DLMMS_DEBUG") # people simply updating git will still have this and mess up build with it FILE(REMOVE include/lmmsconfig.h) -FILE(GLOB lmms_INCLUDES "${CMAKE_SOURCE_DIR}/include/*.h") -FILE(GLOB lmms_UI "${CMAKE_SOURCE_DIR}/src/gui/dialogs/*.ui" "${CMAKE_SOURCE_DIR}/src/gui/Forms/*.ui") -FILE(GLOB_RECURSE lmms_SOURCES "${CMAKE_SOURCE_DIR}/src/*.cpp") - -SET(lmms_MOC ${lmms_INCLUDES}) +FILE(GLOB LMMS_INCLUDES "${CMAKE_SOURCE_DIR}/include/*.h") # Get list of all committers from git history, ordered by number of commits FIND_PACKAGE(Git) @@ -405,14 +401,6 @@ ENDIF(GIT_FOUND) SET(lmms_EMBEDDED_RESOURCES "${CMAKE_SOURCE_DIR}/AUTHORS" "${CMAKE_SOURCE_DIR}/COPYING" "${CONTRIBUTORS}") -IF(QT5) - QT5_WRAP_CPP(lmms_MOC_out ${lmms_MOC} OPTIONS -nw -I${CMAKE_BINARY_DIR}) - QT5_WRAP_UI(lmms_UI_out ${lmms_UI}) -ELSE() - QT4_WRAP_CPP(lmms_MOC_out ${lmms_MOC} OPTIONS -nw -I${CMAKE_BINARY_DIR}) - QT4_WRAP_UI(lmms_UI_out ${lmms_UI}) -ENDIF() - # embedded resources stuff IF(WIN32 OR WIN64) # compile buildtools native @@ -462,126 +450,14 @@ SET(MACOSX_BUNDLE_PROJECT_URL "http://lmms.io") ADD_SUBDIRECTORY(plugins) ADD_SUBDIRECTORY(data) ADD_SUBDIRECTORY(doc) - -# Enable C++11 -ADD_DEFINITIONS("-std=c++0x") - -# -# build LMMS-binary -# -IF(LMMS_BUILD_WIN32) - SET(EXTRA_LIBRARIES "-lwinmm") -ENDIF() - -# Paths relative to lmms executable -FILE(RELATIVE_PATH LIB_DIR_RELATIVE "/${BIN_DIR}" "/${LIB_DIR}") -FILE(RELATIVE_PATH PLUGIN_DIR_RELATIVE "/${BIN_DIR}" "/${PLUGIN_DIR}") -ADD_DEFINITIONS(-D'LIB_DIR="${LIB_DIR_RELATIVE}/"' -D'PLUGIN_DIR="${PLUGIN_DIR_RELATIVE}/"' ${PULSEAUDIO_DEFINITIONS} ${PORTAUDIO_DEFINITIONS}) -INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}" - "${CMAKE_BINARY_DIR}/include" - "${CMAKE_SOURCE_DIR}" - "${CMAKE_SOURCE_DIR}/include" - ${JACK_INCLUDE_DIRS} - ${SAMPLERATE_INCLUDE_DIRS} - ${SNDFILE_INCLUDE_DIRS}) - -IF(NOT ("${SDL_INCLUDE_DIR}" STREQUAL "")) - INCLUDE_DIRECTORIES("${SDL_INCLUDE_DIR}") -ENDIF() - -IF(NOT ("${PORTAUDIO_INCLUDE_DIR}" STREQUAL "")) - INCLUDE_DIRECTORIES("${PORTAUDIO_INCLUDE_DIR}") -ENDIF() - -IF(NOT ("${PULSEAUDIO_INCLUDE_DIR}" STREQUAL "")) - INCLUDE_DIRECTORIES("${PULSEAUDIO_INCLUDE_DIR}") -ENDIF() - -IF(NOT ("${OGGVORBIS_INCLUDE_DIR}" STREQUAL "")) - INCLUDE_DIRECTORIES("${OGGVORBIS_INCLUDE_DIR}") -ENDIF() +ADD_SUBDIRECTORY(src) ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz" COMMAND gzip -c "\"${CMAKE_SOURCE_DIR}/lmms.1\"" > "\"${CMAKE_BINARY_DIR}/lmms.1.gz\"" DEPENDS "${CMAKE_SOURCE_DIR}/lmms.1" COMMENT "Generating lmms.1.gz") -ADD_EXECUTABLE(lmms ${lmms_SOURCES} ${lmms_INCLUDES} ${lmms_MOC_out} "${LMMS_ER_H}" ${lmms_UI_out} lmmsconfig.h lmmsversion.h "${WINRC}" "${CMAKE_BINARY_DIR}/lmms.1.gz") - -TARGET_LINK_LIBRARIES(lmms ${CMAKE_THREAD_LIBS_INIT} ${QT_LIBRARIES} ${ASOUND_LIBRARY} ${SDL_LIBRARY} ${PORTAUDIO_LIBRARIES} ${PULSEAUDIO_LIBRARIES} ${JACK_LIBRARIES} ${OGGVORBIS_LIBRARIES} ${SAMPLERATE_LIBRARIES} ${SNDFILE_LIBRARIES} ${EXTRA_LIBRARIES}) - -IF(QT5) - TARGET_LINK_LIBRARIES(lmms Qt5::Widgets Qt5::Xml) -ENDIF() - -IF(LMMS_BUILD_WIN32) - - SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows") - ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_BINARY_DIR}/lmms.exe\"") - - INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") - INSTALL(FILES - "${MINGW_PREFIX}/bin/QtCore4.dll" - "${MINGW_PREFIX}/bin/QtGui4.dll" - "${MINGW_PREFIX}/bin/QtSvg4.dll" - "${MINGW_PREFIX}/bin/QtXml4.dll" - "${MINGW_PREFIX}/bin/libsamplerate-0.dll" - "${MINGW_PREFIX}/bin/libsndfile-1.dll" - "${MINGW_PREFIX}/bin/libvorbis-0.dll" - "${MINGW_PREFIX}/bin/libvorbisenc-2.dll" - "${MINGW_PREFIX}/bin/libvorbisfile-3.dll" - "${MINGW_PREFIX}/bin/libjpeg-9.dll" - "${MINGW_PREFIX}/bin/libogg-0.dll" - "${MINGW_PREFIX}/lib/libfltk.dll" - "${MINGW_PREFIX}/bin/libfluidsynth.dll" - "${MINGW_PREFIX}/bin/libfftw3f-3.dll" - "${MINGW_PREFIX}/bin/libFLAC-8.dll" - "${MINGW_PREFIX}/bin/libportaudio-2.dll" - "${MINGW_PREFIX}/bin/libpng16-16.dll" - "${MINGW_PREFIX}/bin/SDL.dll" - "${MINGW_PREFIX}/bin/libglib-2.0-0.dll" - "${MINGW_PREFIX}/bin/libgthread-2.0-0.dll" - "${MINGW_PREFIX}/bin/zlib1.dll" - "${MINGW_PREFIX}/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32/bin/libwinpthread-1.dll" - DESTINATION .) - -ELSE(LMMS_BUILD_WIN32) - IF(NOT LMMS_BUILD_APPLE) - SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Wl,-E") - ENDIF(NOT LMMS_BUILD_APPLE) - - INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") - INSTALL(FILES "${CMAKE_BINARY_DIR}/lmms.1.gz" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1/" PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) - -ENDIF(LMMS_BUILD_WIN32) - -# -# rules for building localizations -# -FILE(GLOB lmms_LOCALES data/locale/*.ts) -SET(ts_targets "") -SET(qm_targets "") -FOREACH(_ts_file ${lmms_LOCALES}) - STRING(REPLACE "${CMAKE_SOURCE_DIR}/data/locale/" "" _ts_target "${_ts_file}") - STRING(REPLACE ".ts" ".qm" _qm_file "${_ts_file}") - STRING(REPLACE ".ts" ".qm" _qm_target "${_ts_target}") - ADD_CUSTOM_TARGET(${_ts_target} COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${lmms_SOURCES} ${lmms_INCLUDES} ${lmms_UI} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp' -or -name '*.h'` -ts "\"${_ts_file}\"") - ADD_CUSTOM_TARGET(${_qm_target} COMMAND "${QT_LRELEASE_EXECUTABLE}" "\"${_ts_file}\"" -qm "\"${_qm_file}\"") - LIST(APPEND ts_targets "${_ts_target}") - LIST(APPEND qm_targets "${_qm_target}") -ENDFOREACH(_ts_file ${lmms_LOCALES}) - -ADD_CUSTOM_TARGET(update-locales) -FOREACH(_item ${ts_targets}) - ADD_DEPENDENCIES(update-locales "${_item}") -ENDFOREACH(_item ${ts_targets}) - -ADD_CUSTOM_TARGET(finalize-locales ALL) -FOREACH(_item ${qm_targets}) - ADD_DEPENDENCIES(finalize-locales "${_item}") -ENDFOREACH(_item ${qm_targets}) - # install headers IF(LMMS_BUILD_LINUX) - INSTALL(FILES ${lmms_INCLUDES} + INSTALL(FILES ${LMMS_INCLUDES} "${CMAKE_BINARY_DIR}/lmmsconfig.h" "${CMAKE_BINARY_DIR}/lmmsversion.h" "${CMAKE_SOURCE_DIR}/src/gui/embed.cpp" @@ -620,10 +496,6 @@ ADD_CUSTOM_TARGET(dist COMMAND tar cjf lmms-${VERSION}-src.tar.bz2 "${TMP}" COMMAND rm -rf "${TMP}") - -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${lmms_MOC_out} ${lmms_UI_out} lmmsconfig.h lmms.1.gz") - - # # display configuration information # diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt new file mode 100644 index 000000000..4746264ea --- /dev/null +++ b/src/CMakeLists.txt @@ -0,0 +1,152 @@ +SET(LMMS_SRCS "") +SET(LMMS_UIS "") + +SET(CMAKE_AUTOMOC ON) +#SET(CMAKE_AUTOMOC_MOC_OPTIONS -I${CMAKE_BINARY_DIR}) + +ADD_SUBDIRECTORY(core) +ADD_SUBDIRECTORY(gui) +ADD_SUBDIRECTORY(tracks) + +IF(QT5) + #QT5_WRAP_UI(LMMS_UI_OUT ${LMMS_UIS}) +ELSE() + #QT4_WRAP_CPP(LMMS_MOC_OUT ${LMMS_INCLUDES} OPTIONS -nw -I${CMAKE_BINARY_DIR}) + #QT4_WRAP_UI(LMMS_UI_OUT ${LMMS_UIS}) +ENDIF() + +# Paths relative to lmms executable +FILE(RELATIVE_PATH LIB_DIR_RELATIVE "/${BIN_DIR}" "/${LIB_DIR}") +FILE(RELATIVE_PATH PLUGIN_DIR_RELATIVE "/${BIN_DIR}" "/${PLUGIN_DIR}") +ADD_DEFINITIONS(-D'LIB_DIR="${LIB_DIR_RELATIVE}/"' -D'PLUGIN_DIR="${PLUGIN_DIR_RELATIVE}/"' ${PULSEAUDIO_DEFINITIONS} ${PORTAUDIO_DEFINITIONS}) +INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/include" + "${CMAKE_SOURCE_DIR}" + "${CMAKE_SOURCE_DIR}/include" + ${JACK_INCLUDE_DIRS} + ${SAMPLERATE_INCLUDE_DIRS} + ${SNDFILE_INCLUDE_DIRS}) + +IF(NOT ("${SDL_INCLUDE_DIR}" STREQUAL "")) + INCLUDE_DIRECTORIES("${SDL_INCLUDE_DIR}") +ENDIF() + +IF(NOT ("${PORTAUDIO_INCLUDE_DIR}" STREQUAL "")) + INCLUDE_DIRECTORIES("${PORTAUDIO_INCLUDE_DIR}") +ENDIF() + +IF(NOT ("${PULSEAUDIO_INCLUDE_DIR}" STREQUAL "")) + INCLUDE_DIRECTORIES("${PULSEAUDIO_INCLUDE_DIR}") +ENDIF() + +IF(NOT ("${OGGVORBIS_INCLUDE_DIR}" STREQUAL "")) + INCLUDE_DIRECTORIES("${OGGVORBIS_INCLUDE_DIR}") +ENDIF() + +# Enable C++11 +ADD_DEFINITIONS("-std=c++0x") + +ADD_EXECUTABLE(lmms + ${LMMS_SRCS} + ${LMMS_INCLUDES} + ${LMMS_UI_OUT} + ${LMMS_MOC_OUT} + "${WINRC}" +) + +#SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_out} lmmsconfig.h lmms.1.gz") + +IF(LMMS_BUILD_WIN32) + SET(EXTRA_LIBRARIES "-lwinmm") +ENDIF() + +TARGET_LINK_LIBRARIES(lmms + ${CMAKE_THREAD_LIBS_INIT} + ${QT_LIBRARIES} + ${ASOUND_LIBRARY} + ${SDL_LIBRARY} + ${PORTAUDIO_LIBRARIES} + ${PULSEAUDIO_LIBRARIES} + ${JACK_LIBRARIES} + ${OGGVORBIS_LIBRARIES} + ${SAMPLERATE_LIBRARIES} + ${SNDFILE_LIBRARIES} + ${EXTRA_LIBRARIES} +) + +IF(QT5) + TARGET_LINK_LIBRARIES(lmms + Qt5::Widgets + Qt5::Xml +) +ENDIF() + + + +# +# rules for building localizations +# +FILE(GLOB lmms_LOCALES data/locale/*.ts) +SET(ts_targets "") +SET(qm_targets "") +FOREACH(_ts_file ${lmms_LOCALES}) + STRING(REPLACE "${CMAKE_SOURCE_DIR}/data/locale/" "" _ts_target "${_ts_file}") + STRING(REPLACE ".ts" ".qm" _qm_file "${_ts_file}") + STRING(REPLACE ".ts" ".qm" _qm_target "${_ts_target}") + ADD_CUSTOM_TARGET(${_ts_target} COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UIS} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp' -or -name '*.h'` -ts "\"${_ts_file}\"") + ADD_CUSTOM_TARGET(${_qm_target} COMMAND "${QT_LRELEASE_EXECUTABLE}" "\"${_ts_file}\"" -qm "\"${_qm_file}\"") + LIST(APPEND ts_targets "${_ts_target}") + LIST(APPEND qm_targets "${_qm_target}") +ENDFOREACH(_ts_file ${lmms_LOCALES}) + +ADD_CUSTOM_TARGET(update-locales) +FOREACH(_item ${ts_targets}) + ADD_DEPENDENCIES(update-locales "${_item}") +ENDFOREACH(_item ${ts_targets}) + +ADD_CUSTOM_TARGET(finalize-locales ALL) +FOREACH(_item ${qm_targets}) + ADD_DEPENDENCIES(finalize-locales "${_item}") +ENDFOREACH(_item ${qm_targets}) + +# Install +IF(LMMS_BUILD_WIN32) + + SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows") + ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_BINARY_DIR}/lmms.exe\"") + + INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") + INSTALL(FILES + "${MINGW_PREFIX}/bin/QtCore4.dll" + "${MINGW_PREFIX}/bin/QtGui4.dll" + "${MINGW_PREFIX}/bin/QtSvg4.dll" + "${MINGW_PREFIX}/bin/QtXml4.dll" + "${MINGW_PREFIX}/bin/libsamplerate-0.dll" + "${MINGW_PREFIX}/bin/libsndfile-1.dll" + "${MINGW_PREFIX}/bin/libvorbis-0.dll" + "${MINGW_PREFIX}/bin/libvorbisenc-2.dll" + "${MINGW_PREFIX}/bin/libvorbisfile-3.dll" + "${MINGW_PREFIX}/bin/libjpeg-9.dll" + "${MINGW_PREFIX}/bin/libogg-0.dll" + "${MINGW_PREFIX}/lib/libfltk.dll" + "${MINGW_PREFIX}/bin/libfluidsynth.dll" + "${MINGW_PREFIX}/bin/libfftw3f-3.dll" + "${MINGW_PREFIX}/bin/libFLAC-8.dll" + "${MINGW_PREFIX}/bin/libportaudio-2.dll" + "${MINGW_PREFIX}/bin/libpng16-16.dll" + "${MINGW_PREFIX}/bin/SDL.dll" + "${MINGW_PREFIX}/bin/libglib-2.0-0.dll" + "${MINGW_PREFIX}/bin/libgthread-2.0-0.dll" + "${MINGW_PREFIX}/bin/zlib1.dll" + "${MINGW_PREFIX}/${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32/bin/libwinpthread-1.dll" + DESTINATION .) + +ELSE(LMMS_BUILD_WIN32) + IF(NOT LMMS_BUILD_APPLE) + SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -Wl,-E") + ENDIF(NOT LMMS_BUILD_APPLE) + + INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") + INSTALL(FILES "${CMAKE_BINARY_DIR}/lmms.1.gz" DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1/" PERMISSIONS OWNER_READ GROUP_READ WORLD_READ) + +ENDIF(LMMS_BUILD_WIN32) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt new file mode 100644 index 000000000..c59cd6680 --- /dev/null +++ b/src/core/CMakeLists.txt @@ -0,0 +1,88 @@ +set(LMMS_SRCS + ${LMMS_SRCS} + core/AutomatableModel.cpp + core/AutomationPattern.cpp + core/BandLimitedWave.cpp + core/base64.cpp + core/BBTrackContainer.cpp + core/BufferManager.cpp + core/Clipboard.cpp + core/ComboBoxModel.cpp + core/ConfigManager.cpp + core/Controller.cpp + core/ControllerConnection.cpp + core/DataFile.cpp + core/DrumSynth.cpp + core/Effect.cpp + core/EffectChain.cpp + core/Engine.cpp + core/EnvelopeAndLfoParameters.cpp + core/fft_helpers.cpp + core/FxMixer.cpp + core/ImportFilter.cpp + core/InlineAutomation.cpp + core/Instrument.cpp + core/InstrumentFunctions.cpp + core/InstrumentPlayHandle.cpp + core/InstrumentSoundShaping.cpp + core/JournallingObject.cpp + core/Ladspa2LMMS.cpp + core/LadspaControl.cpp + core/LadspaManager.cpp + core/LfoController.cpp + core/main.cpp + core/MemoryHelper.cpp + core/MemoryManager.cpp + core/MeterModel.cpp + core/Mixer.cpp + core/MixerProfiler.cpp + core/MixerWorkerThread.cpp + core/MixHelpers.cpp + core/Model.cpp + core/Note.cpp + core/NotePlayHandle.cpp + core/Oscillator.cpp + core/PeakController.cpp + core/Piano.cpp + core/PlayHandle.cpp + core/Plugin.cpp + core/PresetPreviewPlayHandle.cpp + core/ProjectJournal.cpp + core/ProjectRenderer.cpp + core/ProjectVersion.cpp + core/RemotePlugin.cpp + core/RingBuffer.cpp + core/SampleBuffer.cpp + core/SamplePlayHandle.cpp + core/SampleRecordHandle.cpp + core/SerializingObject.cpp + core/Song.cpp + core/TempoSyncKnobModel.cpp + core/ToolPlugin.cpp + core/Track.cpp + core/TrackContainer.cpp + core/VstSyncController.cpp + + core/audio/AudioAlsa.cpp + core/audio/AudioDevice.cpp + core/audio/AudioFileDevice.cpp + core/audio/AudioFileOgg.cpp + core/audio/AudioFileWave.cpp + core/audio/AudioJack.cpp + core/audio/AudioOss.cpp + core/audio/AudioPort.cpp + core/audio/AudioPortAudio.cpp + core/audio/AudioPulseAudio.cpp + core/audio/AudioSampleRecorder.cpp + core/audio/AudioSdl.cpp + + core/midi/MidiAlsaRaw.cpp + core/midi/MidiAlsaSeq.cpp + core/midi/MidiClient.cpp + core/midi/MidiController.cpp + core/midi/MidiOss.cpp + core/midi/MidiPort.cpp + core/midi/MidiWinMM.cpp + + PARENT_SCOPE +) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt new file mode 100644 index 000000000..96aae3ee5 --- /dev/null +++ b/src/gui/CMakeLists.txt @@ -0,0 +1,93 @@ +SET(LMMS_SRCS + ${LMMS_SRCS} + gui/AboutDialog.cpp + gui/ActionGroup.cpp + gui/AutomatableModelView.cpp + gui/AutomationPatternView.cpp + gui/ControllerConnectionDialog.cpp + gui/ControllerDialog.cpp + gui/EffectControlDialog.cpp + gui/EffectSelectDialog.cpp + gui/embed.cpp + gui/ExportProjectDialog.cpp + gui/FileBrowser.cpp + gui/FxMixerView.cpp + gui/GuiApplication.cpp + gui/InstrumentView.cpp + gui/LfoControllerDialog.cpp + gui/LmmsPalette.cpp + gui/LmmsStyle.cpp + gui/MainWindow.cpp + gui/ModelView.cpp + gui/PeakControllerDialog.cpp + gui/PianoView.cpp + gui/PluginBrowser.cpp + gui/SetupDialog.cpp + gui/StringPairDrag.cpp + gui/TimeLineWidget.cpp + gui/ToolPluginView.cpp + gui/TrackContainerView.cpp + + gui/dialogs/FileDialog.cpp + gui/dialogs/VersionedSaveDialog.cpp + + gui/editors/AutomationEditor.cpp + gui/editors/BBEditor.cpp + gui/editors/Editor.cpp + gui/editors/PianoRoll.cpp + gui/editors/SongEditor.cpp + + gui/widgets/AutomatableButton.cpp + gui/widgets/AutomatableSlider.cpp + gui/widgets/CaptionMenu.cpp + gui/widgets/ComboBox.cpp + gui/widgets/ControllerRackView.cpp + gui/widgets/ControllerView.cpp + gui/widgets/CPULoadWidget.cpp + gui/widgets/EffectRackView.cpp + gui/widgets/EffectView.cpp + gui/widgets/EnvelopeAndLfoView.cpp + gui/widgets/FadeButton.cpp + gui/widgets/Fader.cpp + gui/widgets/FxLine.cpp + gui/widgets/Graph.cpp + gui/widgets/GroupBox.cpp + gui/widgets/InstrumentFunctionViews.cpp + gui/widgets/InstrumentMidiIOView.cpp + gui/widgets/InstrumentSoundShapingView.cpp + gui/widgets/Knob.cpp + gui/widgets/LadspaControlView.cpp + gui/widgets/LcdSpinBox.cpp + gui/widgets/LcdWidget.cpp + gui/widgets/LedCheckbox.cpp + gui/widgets/MeterDialog.cpp + gui/widgets/MidiPortMenu.cpp + gui/widgets/NStateButton.cpp + gui/widgets/PixmapButton.cpp + gui/widgets/ProjectNotes.cpp + gui/widgets/RenameDialog.cpp + gui/widgets/Rubberband.cpp + gui/widgets/SendButtonIndicator.cpp + gui/widgets/SideBar.cpp + gui/widgets/SideBarWidget.cpp + gui/widgets/TabBar.cpp + gui/widgets/TabWidget.cpp + gui/widgets/TempoSyncKnob.cpp + gui/widgets/TextFloat.cpp + gui/widgets/TimeDisplayWidget.cpp + gui/widgets/ToolButton.cpp + gui/widgets/ToolTip.cpp + gui/widgets/TrackLabelButton.cpp + gui/widgets/VisualizationWidget.cpp + + PARENT_SCOPE +) + +set(LMMS_UIS + gui/dialogs/about_dialog.ui + gui/dialogs/export_project.ui + + gui/Forms/EffectSelectDialog.ui + + PARENT_SCOPE +) diff --git a/src/tracks/CMakeLists.txt b/src/tracks/CMakeLists.txt new file mode 100644 index 000000000..158588318 --- /dev/null +++ b/src/tracks/CMakeLists.txt @@ -0,0 +1,10 @@ +set(LMMS_SRCS + ${LMMS_SRCS} + tracks/AutomationTrack.cpp + tracks/BBTrack.cpp + tracks/InstrumentTrack.cpp + tracks/Pattern.cpp + tracks/SampleTrack.cpp + + PARENT_SCOPE +) From 9b25c5adbbd3a6a6534fd04e6e638d0ac010bc5e Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 11 Jan 2015 17:41:09 +0100 Subject: [PATCH 079/172] Try to fix win build --- CMakeLists.txt | 13 ------------- src/CMakeLists.txt | 22 ++++++++++++++++------ src/gui/CMakeLists.txt | 1 + 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ed9d943e5..0e84c600c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -419,19 +419,6 @@ ADD_FILE_DEPENDENCIES("${CMAKE_BINARY_DIR}/lmmsconfig.h") ADD_CUSTOM_COMMAND(OUTPUT "${LMMS_ER_H}" COMMAND "${BIN2RES}" ARGS ${lmms_EMBEDDED_RESOURCES} > "\"${LMMS_ER_H}\"" DEPENDS "${BIN2RES}") -IF(WIN32) - SET(WINRC "${CMAKE_BINARY_DIR}/lmmsrc.obj") - ADD_CUSTOM_COMMAND(OUTPUT "${WINRC}" - COMMAND "${WINDRES}" - "-I\"${CMAKE_SOURCE_DIR}\"" - "-o\"${CMAKE_BINARY_DIR}/lmmsrc.obj\"" - "-i\"${CMAKE_BINARY_DIR}/lmms.rc\"" - DEPENDS "${CMAKE_BINARY_DIR}/lmms.rc") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") -ELSE(WIN32) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC") -ENDIF(WIN32) - # set up apple vars before traversing into data/scripts SET(MACOSX_BUNDLE_ICON_FILE "lmms.icns") SET(MACOSX_BUNDLE_GUI_IDENTIFIER "LMMS") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 4746264ea..bcddade20 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,19 +2,30 @@ SET(LMMS_SRCS "") SET(LMMS_UIS "") SET(CMAKE_AUTOMOC ON) -#SET(CMAKE_AUTOMOC_MOC_OPTIONS -I${CMAKE_BINARY_DIR}) ADD_SUBDIRECTORY(core) ADD_SUBDIRECTORY(gui) ADD_SUBDIRECTORY(tracks) IF(QT5) - #QT5_WRAP_UI(LMMS_UI_OUT ${LMMS_UIS}) + QT5_WRAP_UI(LMMS_UI_OUT ${LMMS_UIS}) ELSE() - #QT4_WRAP_CPP(LMMS_MOC_OUT ${LMMS_INCLUDES} OPTIONS -nw -I${CMAKE_BINARY_DIR}) - #QT4_WRAP_UI(LMMS_UI_OUT ${LMMS_UIS}) + QT4_WRAP_UI(LMMS_UI_OUT ${LMMS_UIS}) ENDIF() +IF(WIN32) + SET(WINRC "${CMAKE_BINARY_DIR}/lmmsrc.obj") + ADD_CUSTOM_COMMAND(OUTPUT "${WINRC}" + COMMAND "${WINDRES}" + "-I\"${CMAKE_SOURCE_DIR}\"" + "-o\"${CMAKE_BINARY_DIR}/lmmsrc.obj\"" + "-i\"${CMAKE_BINARY_DIR}/lmms.rc\"" + DEPENDS "${CMAKE_BINARY_DIR}/lmms.rc") + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") +ELSE(WIN32) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC") +ENDIF(WIN32) + # Paths relative to lmms executable FILE(RELATIVE_PATH LIB_DIR_RELATIVE "/${BIN_DIR}" "/${LIB_DIR}") FILE(RELATIVE_PATH PLUGIN_DIR_RELATIVE "/${BIN_DIR}" "/${PLUGIN_DIR}") @@ -50,11 +61,10 @@ ADD_EXECUTABLE(lmms ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UI_OUT} - ${LMMS_MOC_OUT} "${WINRC}" ) -#SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_out} lmmsconfig.h lmms.1.gz") +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_out} lmmsconfig.h lmms.1.gz") IF(LMMS_BUILD_WIN32) SET(EXTRA_LIBRARIES "-lwinmm") diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 96aae3ee5..548e4ad14 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -84,6 +84,7 @@ SET(LMMS_SRCS ) set(LMMS_UIS + ${LMMS_UIS} gui/dialogs/about_dialog.ui gui/dialogs/export_project.ui From 63e23e015878b00b3ea20acee5546027e508a92f Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Sun, 11 Jan 2015 19:19:52 +0200 Subject: [PATCH 080/172] Added loading of SBI files. (e.g. from http://cd.textfiles.com/soundsensations/SYNTH/SBINS/ ) --- plugins/opl2/opl2instrument.cpp | 124 ++++++++++++++++++++++++++++---- plugins/opl2/opl2instrument.h | 2 + 2 files changed, 114 insertions(+), 12 deletions(-) diff --git a/plugins/opl2/opl2instrument.cpp b/plugins/opl2/opl2instrument.cpp index 0b8084349..ecf5f251d 100644 --- a/plugins/opl2/opl2instrument.cpp +++ b/plugins/opl2/opl2instrument.cpp @@ -50,6 +50,9 @@ #include "InstrumentTrack.h" #include +#include +#include +#include #include "opl.h" #include "temuopl.h" @@ -76,7 +79,7 @@ Plugin::Descriptor PLUGIN_EXPORT OPL2_plugin_descriptor = 0x0100, Plugin::Instrument, new PluginPixmapLoader( "logo" ), - NULL, + "sbi", NULL }; @@ -158,6 +161,8 @@ opl2instrument::opl2instrument( InstrumentTrack * _instrument_track ) : voiceLRU[i] = i; } + storedname = displayName(); + updatePatch(); // Can the buffer size change suddenly? I bet that would break lots of stuff @@ -166,7 +171,7 @@ opl2instrument::opl2instrument( InstrumentTrack * _instrument_track ) : // Some kind of sane defaults pitchbend = 0; - pitchBendRange = 100; + pitchBendRange = 100; // cents RPNcoarse = RPNfine = 255; tuneEqual(69, 440); @@ -338,10 +343,8 @@ bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& ti break; case MidiPitchBend: // Update fnumber table - // Pitchbend should be in the range 0...16383 but the new range knob gets it wrong. - // tmp_pb = (2*BEND_CENTS)*((float)event.m_data.m_param[0]/16383)-BEND_CENTS; - // Something like 100 cents = 8192, but offset by 8192 so the +/-100 cents range goes from 0...16383? + // Neutral = 8192, full downbend = 0, full upbend = 16383 tmp_pb = ( event.pitchBend()-8192 ) * pitchBendRange / 8192; if( tmp_pb != pitchbend ) { @@ -377,7 +380,10 @@ bool opl2instrument::handleMidiEvent( const MidiEvent& event, const MidiTime& ti } break; default: +#ifdef LMMS_DEBUG printf("Midi event type %d\n",event.type()); +#endif + break; } emulatorMutex.unlock(); return true; @@ -528,11 +534,6 @@ void opl2instrument::loadGMPatch() { loadPatch(inst); } -// -/* void opl2instrument::loadSBIFile() { - - } */ - // Update patch from the models to the chip emulation void opl2instrument::updatePatch() { unsigned char inst[14] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; @@ -546,9 +547,9 @@ void opl2instrument::updatePatch() { ( op2_perc_mdl.value() ? 0 : 32 ) + // NB. This envelope mode is "perc", not "sus" ( op2_ksr_mdl.value() ? 16 : 0 ) + ((int)op2_mul_mdl.value() & 0x0f); - inst[2] = ( (int)op1_scale_mdl.value() & 0x03 << 6 ) + + inst[2] = ( ((int)op1_scale_mdl.value() & 0x03) << 6 ) + (63 - ( (int)op1_lvl_mdl.value() & 0x3f ) ); - inst[3] = ( (int)op2_scale_mdl.value() & 0x03 << 6 ) + + inst[3] = ( ((int)op2_scale_mdl.value() & 0x03) << 6 ) + (63 - ( (int)op2_lvl_mdl.value() & 0x3f ) ); inst[4] = ((15 - ((int)op1_a_mdl.value() & 0x0f ) ) << 4 )+ (15 - ( (int)op1_d_mdl.value() & 0x0f ) ); @@ -577,9 +578,108 @@ void opl2instrument::updatePatch() { setVoiceVelocity(voice, velocities[voiceNote[voice]] ); } } +#ifdef LMMS_DEBUG + printf("UPD: %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x\n", + inst[0], inst[1], inst[2], inst[3], inst[4], + inst[5], inst[6], inst[7], inst[8], inst[9], inst[10]); +#endif + + loadPatch(inst); } +// Load an SBI file into the knob models +void opl2instrument::loadFile( const QString& file ) { + // http://cd.textfiles.com/soundsensations/SYNTH/SBINS/ + // http://cd.textfiles.com/soundsensations/SYNTH/SBI1198/1198SBI.ZIP + if( !file.isEmpty() && QFileInfo( file ).exists() ) + { + QFile sbifile(file); + if (!sbifile.open(QIODevice::ReadOnly )) { + printf("Can't open file\n"); + return; + } + + QByteArray sbidata = sbifile.read(52); + if( !sbidata.startsWith("SBI\0x1a") ) { + printf("No SBI signature\n"); + return; + } + if( sbidata.size() != 52 ) { + printf("SBI size error: expected 52, got %d\n",sbidata.size() ); + } + + // Minimum size of SBI if we ignore "reserved" bytes at end + // https://courses.engr.illinois.edu/ece390/resources/sound/cmf.txt.html + if( sbidata.size() < 47 ) { + return; + } + + + // If user has changed track name... let's hope my logic is valid. + QString sbiname = sbidata.mid(4, 32); + if( instrumentTrack()->displayName() == storedname ) { + instrumentTrack()->setName(sbiname); + storedname = sbiname; + } + +#ifdef LMMS_DEBUG + printf("SBI: %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x\n", + (unsigned char)sbidata[36], (unsigned char)sbidata[37], (unsigned char)sbidata[38], (unsigned char)sbidata[39], (unsigned char)sbidata[40], + (unsigned char)sbidata[41], (unsigned char)sbidata[42], (unsigned char)sbidata[43], (unsigned char)sbidata[44], (unsigned char)sbidata[45], (unsigned char)sbidata[46]); +#endif + // Modulator Sound Characteristic (Mult, KSR, EG, VIB, AM) + op1_trem_mdl.setValue( (sbidata[36] & 0x80 ) == 0x80 ? true : false ); + op1_vib_mdl.setValue( (sbidata[36] & 0x40 ) == 0x40 ? true : false ); + op1_perc_mdl.setValue( (sbidata[36] & 0x20 ) == 0x20 ? false : true ); + op1_ksr_mdl.setValue( (sbidata[36] & 0x10 ) == 0x10 ? true : false ); + op1_mul_mdl.setValue( sbidata[36] & 0x0f ); + + // Carrier Sound Characteristic + op2_trem_mdl.setValue( (sbidata[37] & 0x80 ) == 0x80 ? true : false ); + op2_vib_mdl.setValue( (sbidata[37] & 0x40 ) == 0x40 ? true : false ); + op2_perc_mdl.setValue( (sbidata[37] & 0x20 ) == 0x20 ? false : true ); + op2_ksr_mdl.setValue( (sbidata[37] & 0x10 ) == 0x10 ? true : false ); + op2_mul_mdl.setValue( sbidata[37] & 0x0f ); + + // Modulator Scaling/Output Level + op1_scale_mdl.setValue( (sbidata[38] & 0xc0 ) >> 6 ); + op1_lvl_mdl.setValue( 63 - (sbidata[38] & 0x3f) ); + + // Carrier Scaling/Output Level + op2_scale_mdl.setValue( (sbidata[39] & 0xc0) >> 6 ); + op2_lvl_mdl.setValue( 63 - (sbidata[39] & 0x3f) ); + + // Modulator Attack/Decay + op1_a_mdl.setValue( 15 - ( ( sbidata[40] & 0xf0 ) >> 4 ) ); + op1_d_mdl.setValue( 15 - ( sbidata[40] & 0x0f ) ); + + // Carrier Attack/Decay + op2_a_mdl.setValue( 15 - ( ( sbidata[41] & 0xf0 ) >> 4 ) ); + op2_d_mdl.setValue( 15 - ( sbidata[41] & 0x0f ) ); + + // Modulator Sustain/Release + op1_s_mdl.setValue( 15 - ( ( sbidata[42] & 0xf0 ) >> 4 ) ); + op1_r_mdl.setValue( 15 - ( sbidata[42] & 0x0f ) ); + + // Carrier Sustain/Release + op2_s_mdl.setValue( 15 - ( ( sbidata[43] & 0xf0 ) >> 4 ) ); + op2_r_mdl.setValue( 15 - ( sbidata[43] & 0x0f ) ); + + // Modulator Wave Select + op1_waveform_mdl.setValue( sbidata[44] & 0x03 ); + + // Carrier Wave Select + op2_waveform_mdl.setValue( sbidata[45] & 0x03 ); + + // Feedback/Connection + fm_mdl.setValue( (sbidata[46] & 0x01) == 0x01 ? false : true ); + feedback_mdl.setValue( ( (sbidata[46] & 0x0e ) >> 1 ) ); + } +} + + + opl2instrumentView::opl2instrumentView( Instrument * _instrument, diff --git a/plugins/opl2/opl2instrument.h b/plugins/opl2/opl2instrument.h index f42ff7352..b1cce9c3b 100644 --- a/plugins/opl2/opl2instrument.h +++ b/plugins/opl2/opl2instrument.h @@ -63,6 +63,7 @@ public: void loadSettings( const QDomElement & _this ); void loadPatch(const unsigned char inst[14]); void tuneEqual(int center, float Hz); + virtual void loadFile( const QString& file ); IntModel m_patchModel; @@ -114,6 +115,7 @@ private slots: private: Copl *theEmulator; + QString storedname; fpp_t frameCount; short *renderbuffer; int voiceNote[9]; From f3b0c8091f969207f567c28c077c551468318819 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 11 Jan 2015 18:33:55 +0100 Subject: [PATCH 081/172] Fix build again --- CMakeLists.txt | 5 +++++ src/CMakeLists.txt | 26 ++++++++++++++------------ 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e84c600c..dcac2ce1d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -432,6 +432,11 @@ SET(MACOSX_BUNDLE_MIMETYPE_ICON "project.icns") SET(MACOSX_BUNDLE_MIMETYPE_ID "net.sourceforge.lmms") SET(MACOSX_BUNDLE_PROJECT_URL "http://lmms.io") +IF(WIN32) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") +ELSE(WIN32) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC") +ENDIF(WIN32) # make sub-directories ADD_SUBDIRECTORY(plugins) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index bcddade20..a39271d21 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -12,6 +12,13 @@ IF(QT5) ELSE() QT4_WRAP_UI(LMMS_UI_OUT ${LMMS_UIS}) ENDIF() +INCLUDE_DIRECTORIES( + "${CMAKE_CURRENT_BINARY_DIR}" + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/include" + "${CMAKE_SOURCE_DIR}" + "${CMAKE_SOURCE_DIR}/include" +) IF(WIN32) SET(WINRC "${CMAKE_BINARY_DIR}/lmmsrc.obj") @@ -21,22 +28,17 @@ IF(WIN32) "-o\"${CMAKE_BINARY_DIR}/lmmsrc.obj\"" "-i\"${CMAKE_BINARY_DIR}/lmms.rc\"" DEPENDS "${CMAKE_BINARY_DIR}/lmms.rc") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-attributes") -ELSE(WIN32) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC -DPIC") -ENDIF(WIN32) +ENDIF() # Paths relative to lmms executable FILE(RELATIVE_PATH LIB_DIR_RELATIVE "/${BIN_DIR}" "/${LIB_DIR}") FILE(RELATIVE_PATH PLUGIN_DIR_RELATIVE "/${BIN_DIR}" "/${PLUGIN_DIR}") ADD_DEFINITIONS(-D'LIB_DIR="${LIB_DIR_RELATIVE}/"' -D'PLUGIN_DIR="${PLUGIN_DIR_RELATIVE}/"' ${PULSEAUDIO_DEFINITIONS} ${PORTAUDIO_DEFINITIONS}) -INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}" - "${CMAKE_BINARY_DIR}/include" - "${CMAKE_SOURCE_DIR}" - "${CMAKE_SOURCE_DIR}/include" - ${JACK_INCLUDE_DIRS} - ${SAMPLERATE_INCLUDE_DIRS} - ${SNDFILE_INCLUDE_DIRS}) +INCLUDE_DIRECTORIES( + ${JACK_INCLUDE_DIRS} + ${SAMPLERATE_INCLUDE_DIRS} + ${SNDFILE_INCLUDE_DIRS} +) IF(NOT ("${SDL_INCLUDE_DIR}" STREQUAL "")) INCLUDE_DIRECTORIES("${SDL_INCLUDE_DIR}") @@ -64,7 +66,7 @@ ADD_EXECUTABLE(lmms "${WINRC}" ) -SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_out} lmmsconfig.h lmms.1.gz") +SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_OUT} lmmsconfig.h lmms.1.gz") IF(LMMS_BUILD_WIN32) SET(EXTRA_LIBRARIES "-lwinmm") From 4cfed0434ce805e2cf2cf0fe37e3aa8b813635af Mon Sep 17 00:00:00 2001 From: "Raine M. Ekman" Date: Sun, 11 Jan 2015 20:51:22 +0200 Subject: [PATCH 082/172] ...and don't name the track after the name in the SBI file if it's empty. --- plugins/opl2/opl2instrument.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/plugins/opl2/opl2instrument.cpp b/plugins/opl2/opl2instrument.cpp index ecf5f251d..b84edf0b9 100644 --- a/plugins/opl2/opl2instrument.cpp +++ b/plugins/opl2/opl2instrument.cpp @@ -578,7 +578,7 @@ void opl2instrument::updatePatch() { setVoiceVelocity(voice, velocities[voiceNote[voice]] ); } } -#ifdef LMMS_DEBUG +#ifdef false printf("UPD: %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x\n", inst[0], inst[1], inst[2], inst[3], inst[4], inst[5], inst[6], inst[7], inst[8], inst[9], inst[10]); @@ -615,15 +615,14 @@ void opl2instrument::loadFile( const QString& file ) { return; } - - // If user has changed track name... let's hope my logic is valid. QString sbiname = sbidata.mid(4, 32); - if( instrumentTrack()->displayName() == storedname ) { + // If user has changed track name... let's hope my logic is valid. + if( sbiname.size() > 0 && instrumentTrack()->displayName() == storedname ) { instrumentTrack()->setName(sbiname); storedname = sbiname; } -#ifdef LMMS_DEBUG +#ifdef false printf("SBI: %02x %02x %02x %02x %02x -- %02x %02x %02x %02x %02x %02x\n", (unsigned char)sbidata[36], (unsigned char)sbidata[37], (unsigned char)sbidata[38], (unsigned char)sbidata[39], (unsigned char)sbidata[40], (unsigned char)sbidata[41], (unsigned char)sbidata[42], (unsigned char)sbidata[43], (unsigned char)sbidata[44], (unsigned char)sbidata[45], (unsigned char)sbidata[46]); From ffde891cfbf895f0db48a1982bd767845c0f2e1c Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 11 Jan 2015 20:15:30 +0000 Subject: [PATCH 083/172] Proposed fix 1526 Watsyn shows wrong Osc --- plugins/watsyn/Watsyn.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugins/watsyn/Watsyn.cpp b/plugins/watsyn/Watsyn.cpp index 3331ec975..5567e9dcc 100644 --- a/plugins/watsyn/Watsyn.cpp +++ b/plugins/watsyn/Watsyn.cpp @@ -748,6 +748,8 @@ WatsynView::WatsynView( Instrument * _instrument, m_selectedGraphGroup -> addButton( a2_selectButton ); m_selectedGraphGroup -> addButton( b1_selectButton ); m_selectedGraphGroup -> addButton( b2_selectButton ); + WatsynInstrument * w = castModel(); + m_selectedGraphGroup -> setModel( &w -> m_selectedGraph); // A-modulation button group pixmapButton * amod_mixButton = new pixmapButton( this, NULL ); From a1dce66ca8721757da5a48719d0544893a7e90b3 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 11 Jan 2015 21:10:32 +0000 Subject: [PATCH 084/172] Proposed fix 1492 Nescaline crash when playing very high note --- plugins/nes/Nes.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/nes/Nes.cpp b/plugins/nes/Nes.cpp index b60f07a47..b1b6c4e5a 100644 --- a/plugins/nes/Nes.cpp +++ b/plugins/nes/Nes.cpp @@ -234,7 +234,7 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) // update framecounters m_ch1Counter++; - m_ch1Counter = m_ch1Counter % m_wlen1; + m_ch1Counter = m_wlen1 ? m_ch1Counter % m_wlen1 : 0; m_ch1EnvCounter++; if( m_ch1EnvCounter >= ch1EnvLen ) @@ -287,7 +287,7 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) // update framecounters m_ch2Counter++; - m_ch2Counter = m_ch2Counter % m_wlen2; + m_ch2Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0; m_ch2EnvCounter++; if( m_ch2EnvCounter >= ch2EnvLen ) @@ -310,13 +310,13 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) //////////////////////////////// // make sure we don't overflow - m_ch3Counter %= m_wlen3; + m_ch3Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0; // render triangle wave if( m_wlen3 <= m_maxWlen && ch3Enabled ) { ch3Level = static_cast( m_parent->m_ch3Volume.value() ); - ch3 = TRIANGLE_WAVETABLE[ ( m_ch3Counter * 32 ) / m_wlen3 ]; + ch3 = m_wlen3 ? TRIANGLE_WAVETABLE[ ( m_ch3Counter * 32 ) / m_wlen3 ] : 0; ch3 = ( ch3 * ch3Level ) / 15; } else ch3 = ch3Level = 0; From 49b3f36a5704ed6d998f15048633dc102f5e4f93 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 11 Jan 2015 21:23:30 +0000 Subject: [PATCH 085/172] 1492 fixed type on line 313 --- plugins/nes/Nes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/nes/Nes.cpp b/plugins/nes/Nes.cpp index b1b6c4e5a..84f08c6b4 100644 --- a/plugins/nes/Nes.cpp +++ b/plugins/nes/Nes.cpp @@ -310,7 +310,7 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) //////////////////////////////// // make sure we don't overflow - m_ch3Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0; + m_ch3Counter = m_wlen3 ? m_ch3Counter % m_wlen3 : 0; // render triangle wave if( m_wlen3 <= m_maxWlen && ch3Enabled ) From 38f544f9a0741dd8166012d29d8cf494b819e72e Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 11 Jan 2015 22:59:27 +0100 Subject: [PATCH 086/172] Fix embedded resources --- CMakeLists.txt | 10 ++------ cmake/modules/BuildPlugin.cmake | 41 ++++++++++++++++++--------------- src/CMakeLists.txt | 14 +++++++---- 3 files changed, 34 insertions(+), 31 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dcac2ce1d..30b5ee220 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -399,26 +399,20 @@ IF(GIT_FOUND) TIMEOUT 1) ENDIF(GIT_FOUND) -SET(lmms_EMBEDDED_RESOURCES "${CMAKE_SOURCE_DIR}/AUTHORS" "${CMAKE_SOURCE_DIR}/COPYING" "${CONTRIBUTORS}") - # embedded resources stuff IF(WIN32 OR WIN64) # compile buildtools native SET(BIN2RES_CPP "${CMAKE_SOURCE_DIR}/buildtools/bin2res.cpp") SET(BIN2RES "${CMAKE_BINARY_DIR}/bin2res") - ADD_CUSTOM_COMMAND(OUTPUT "${BIN2RES}" COMMAND g++ ARGS "\"${BIN2RES_CPP}\"" -o "\"${BIN2RES}\"" DEPENDS "${BIN2RES_CPP}") + ADD_CUSTOM_TARGET(bin2res COMMAND g++ "\"${BIN2RES_CPP}\"" -o "\"${BIN2RES}\"" DEPENDS "${BIN2RES_CPP}") ELSE(WIN32 OR WIN64) ADD_EXECUTABLE(bin2res buildtools/bin2res.cpp) GET_TARGET_PROPERTY(BIN2RES bin2res LOCATION) ENDIF(WIN32 OR WIN64) -SET(LMMS_ER_H "${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h") - # we somehow have to make LMMS-binary depend on MOC-files ADD_FILE_DEPENDENCIES("${CMAKE_BINARY_DIR}/lmmsconfig.h") -ADD_CUSTOM_COMMAND(OUTPUT "${LMMS_ER_H}" COMMAND "${BIN2RES}" ARGS ${lmms_EMBEDDED_RESOURCES} > "\"${LMMS_ER_H}\"" DEPENDS "${BIN2RES}") - # set up apple vars before traversing into data/scripts SET(MACOSX_BUNDLE_ICON_FILE "lmms.icns") SET(MACOSX_BUNDLE_GUI_IDENTIFIER "LMMS") @@ -439,10 +433,10 @@ ELSE(WIN32) ENDIF(WIN32) # make sub-directories +ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(plugins) ADD_SUBDIRECTORY(data) ADD_SUBDIRECTORY(doc) -ADD_SUBDIRECTORY(src) ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz" COMMAND gzip -c "\"${CMAKE_SOURCE_DIR}/lmms.1\"" > "\"${CMAKE_BINARY_DIR}/lmms.1.gz\"" DEPENDS "${CMAKE_SOURCE_DIR}/lmms.1" COMMENT "Generating lmms.1.gz") diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index ea53486be..b12d05b5a 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -23,28 +23,28 @@ ENDMACRO(LIST_CONTAINS) MACRO(PARSE_ARGUMENTS prefix arg_names option_names) SET(DEFAULT_ARGS) FOREACH(arg_name ${arg_names}) - SET(${prefix}_${arg_name}) + SET(${prefix}_${arg_name}) ENDFOREACH(arg_name) FOREACH(option ${option_names}) - SET(${prefix}_${option} FALSE) + SET(${prefix}_${option} FALSE) ENDFOREACH(option) SET(current_arg_name DEFAULT_ARGS) SET(current_arg_list) FOREACH(arg ${ARGN}) - LIST_CONTAINS(is_arg_name ${arg} ${arg_names}) - IF (is_arg_name) - SET(${prefix}_${current_arg_name} ${current_arg_list}) - SET(current_arg_name ${arg}) - SET(current_arg_list) - ELSE (is_arg_name) - LIST_CONTAINS(is_option ${arg} ${option_names}) - IF (is_option) + LIST_CONTAINS(is_arg_name ${arg} ${arg_names}) + IF (is_arg_name) + SET(${prefix}_${current_arg_name} ${current_arg_list}) + SET(current_arg_name ${arg}) + SET(current_arg_list) + ELSE (is_arg_name) + LIST_CONTAINS(is_option ${arg} ${option_names}) + IF (is_option) SET(${prefix}_${arg} TRUE) - ELSE (is_option) + ELSE (is_option) SET(current_arg_list ${current_arg_list} ${arg}) - ENDIF (is_option) - ENDIF (is_arg_name) + ENDIF (is_option) + ENDIF (is_arg_name) ENDFOREACH(arg) SET(${prefix}_${current_arg_name} ${current_arg_list}) ENDMACRO(PARSE_ARGUMENTS) @@ -64,7 +64,7 @@ MACRO(BUILD_PLUGIN) ADD_CUSTOM_COMMAND(OUTPUT ${ER_H} COMMAND ${BIN2RES} ARGS ${PLUGIN_EMBEDDED_RESOURCES} > ${ER_H} - DEPENDS ${BIN2RES}) + DEPENDS bin2res) ENDIF(ER_LEN) IF(QT5) @@ -80,18 +80,21 @@ MACRO(BUILD_PLUGIN) ENDFOREACH(f) IF(LMMS_BUILD_APPLE) - LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) - LINK_LIBRARIES(${QT_LIBRARIES}) + LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) + LINK_LIBRARIES(${QT_LIBRARIES}) ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) - LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) - LINK_LIBRARIES(-llmms ${QT_LIBRARIES}) + LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) + LINK_LIBRARIES(${QT_LIBRARIES}) ENDIF(LMMS_BUILD_WIN32) ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES} ${plugin_MOC_out}) IF(QT5) - TARGET_LINK_LIBRARIES(${PLUGIN_NAME} Qt5::Widgets Qt5::Xml) + TARGET_LINK_LIBRARIES(${PLUGIN_NAME} Qt5::Widgets Qt5::Xml) ENDIF() + IF(LMMS_BUILD_WIN32) + TARGET_LINK_LIBRARIES(${PLUGIN_NAME} lmms) + ENDIF(LMMS_BUILD_WIN32) INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index a39271d21..3446bc3e5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,7 @@ SET(LMMS_SRCS "") SET(LMMS_UIS "") SET(CMAKE_AUTOMOC ON) +SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) ADD_SUBDIRECTORY(core) ADD_SUBDIRECTORY(gui) @@ -30,6 +31,10 @@ IF(WIN32) DEPENDS "${CMAKE_BINARY_DIR}/lmms.rc") ENDIF() +SET(lmms_EMBEDDED_RESOURCES "${CMAKE_SOURCE_DIR}/AUTHORS" "${CMAKE_SOURCE_DIR}/COPYING" "${CONTRIBUTORS}") +SET(LMMS_ER_H "${CMAKE_CURRENT_BINARY_DIR}/embedded_resources.h") +ADD_CUSTOM_COMMAND(OUTPUT "${LMMS_ER_H}" COMMAND "${BIN2RES}" ARGS ${lmms_EMBEDDED_RESOURCES} > "\"${LMMS_ER_H}\"" DEPENDS bin2res) + # Paths relative to lmms executable FILE(RELATIVE_PATH LIB_DIR_RELATIVE "/${BIN_DIR}" "/${LIB_DIR}") FILE(RELATIVE_PATH PLUGIN_DIR_RELATIVE "/${BIN_DIR}" "/${PLUGIN_DIR}") @@ -63,6 +68,7 @@ ADD_EXECUTABLE(lmms ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UI_OUT} + ${LMMS_ER_H} "${WINRC}" ) @@ -94,7 +100,6 @@ IF(QT5) ENDIF() - # # rules for building localizations # @@ -123,9 +128,10 @@ ENDFOREACH(_item ${qm_targets}) # Install IF(LMMS_BUILD_WIN32) - - SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows") - ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "\"${CMAKE_BINARY_DIR}/lmms.exe\"") + SET_TARGET_PROPERTIES(lmms PROPERTIES + LINK_FLAGS "${LINK_FLAGS} -mwindows" + ENABLE_EXPORTS ON) + ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "$") INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") INSTALL(FILES From 572a989e9509e6119ef88a3ad1b95b547561f663 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Sun, 11 Jan 2015 23:57:50 +0100 Subject: [PATCH 087/172] Bump CMake version to 2.8.7 --- CMakeLists.txt | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 30b5ee220..ff9e94442 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.4.5) +CMAKE_MINIMUM_REQUIRED(VERSION 2.8.7) PROJECT(lmms) @@ -116,17 +116,16 @@ ELSE() SET(QT_MIN_VERSION "4.6.0" COMPONENTS QtCore QtGui QtXml) FIND_PACKAGE(Qt4 REQUIRED) SET(QT_USE_QTXML 1) - EXEC_PROGRAM(${QT_QMAKE_EXECUTABLE} ARGS "-query QT_INSTALL_TRANSLATIONS" OUTPUT_VARIABLE QT_TRANSLATIONS_DIR) IF(WIN32) SET(QT_TRANSLATIONS_DIR "${MINGW_PREFIX}/share/qt4/translations/") ENDIF(WIN32) IF(EXISTS "${QT_TRANSLATIONS_DIR}") MESSAGE("-- Found Qt translations in ${QT_TRANSLATIONS_DIR}") ADD_DEFINITIONS(-D'QT_TRANSLATIONS_DIR="${QT_TRANSLATIONS_DIR}"') - ENDIF(EXISTS "${QT_TRANSLATIONS_DIR}") + ENDIF() IF(NOT WIN32) STRING(REPLACE "-DQT_DLL" "" QT_DEFINITIONS "${QT_DEFINITIONS}") - ENDIF(NOT WIN32) + ENDIF() INCLUDE("${QT_USE_FILE}") ENDIF() From 95ee5d0b909dbb3dec63a453405fa07f1150c3d2 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 00:46:36 +0100 Subject: [PATCH 088/172] Travis Win: Multithreaded make --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index a8bb8c652..ffea19182 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,7 +18,7 @@ script: - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && make -j4 VERBOSE=1; fi - - if [ $TARGET_OS != linux ]; then make VERBOSE=1; fi + - if [ $TARGET_OS != linux ]; then make -j4 VERBOSE=1; fi before_deploy: make package deploy: provider: releases From 807c59d3b32a78f9666801de03509eb47ad901ef Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 00:53:35 +0100 Subject: [PATCH 089/172] Travis: Simplify .travis.yml --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ffea19182..b4ba74a56 100644 --- a/.travis.yml +++ b/.travis.yml @@ -17,8 +17,8 @@ before_script: script: - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. && make -j4 VERBOSE=1; fi - - if [ $TARGET_OS != linux ]; then make -j4 VERBOSE=1; fi + - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi + - make -j4 VERBOSE=1 before_deploy: make package deploy: provider: releases From 7dd086cde7a07c25a201c72bb5822f83898aff5b Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Sun, 11 Jan 2015 21:14:32 -0800 Subject: [PATCH 090/172] Generate manpage as part of a build --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ff9e94442..82c906b54 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -437,7 +437,13 @@ ADD_SUBDIRECTORY(plugins) ADD_SUBDIRECTORY(data) ADD_SUBDIRECTORY(doc) -ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz" COMMAND gzip -c "\"${CMAKE_SOURCE_DIR}/lmms.1\"" > "\"${CMAKE_BINARY_DIR}/lmms.1.gz\"" DEPENDS "${CMAKE_SOURCE_DIR}/lmms.1" COMMENT "Generating lmms.1.gz") +ADD_CUSTOM_COMMAND(OUTPUT "${CMAKE_BINARY_DIR}/lmms.1.gz" + COMMAND gzip -c "\"${CMAKE_SOURCE_DIR}/lmms.1\"" > "\"${CMAKE_BINARY_DIR}/lmms.1.gz\"" + DEPENDS "${CMAKE_SOURCE_DIR}/lmms.1" + COMMENT "Generating lmms.1.gz") + +ADD_CUSTOM_TARGET(manpage ALL + DEPENDS "${CMAKE_BINARY_DIR}/lmms.1.gz") # install headers From a363e7a16aa9fd6d684e51e4e39a609429860069 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 12 Jan 2015 00:22:50 -0500 Subject: [PATCH 091/172] More comparitors --- include/ProjectVersion.h | 68 ++++++++++++++++++++++++++++++++++--- src/core/ProjectVersion.cpp | 1 - 2 files changed, 63 insertions(+), 6 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index 7ee861892..8916d745b 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -31,6 +31,10 @@ enum CompareType { Major, Minor, Release, Build }; +/*! \brief Version number parsing and comparison utility + * + * Parses and compares version information. i.e. "1.0.3" < "1.0.10" + */ class ProjectVersion : public QString { public: @@ -44,7 +48,7 @@ public: { } - static int compare(const ProjectVersion & v1, const ProjectVersion & v2); + static int compare(const ProjectVersion & v1, const ProjectVersion & v2); const int getMajor() const { return m_major; } const int getMinor() const { return m_minor; } @@ -54,20 +58,74 @@ public: private: + static int compStr(const ProjectVersion & v1, const char * v2); + static int compStr(const ProjectVersion & v1, const QString & v2); + const int m_major; const int m_minor; const int m_release; - const QString m_build; - const CompareType m_compareType; + const QString & m_build; + const CompareType & m_compareType; } ; -inline bool operator<( const ProjectVersion & v1, const char * str ) + + +inline int compStr(const ProjectVersion & v1, const char * v2) { - return ProjectVersion::compare( v1, ProjectVersion( str ) ) < 0; + return ProjectVersion::compare(v1, ProjectVersion(v2)); } +inline int compStr(const ProjectVersion & v1, const QString & v2) +{ + return ProjectVersion::compare(v1, ProjectVersion(v2)); +} + +/* + * ProjectVersion v. char[] + */ +inline bool operator<(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) < 0; } +inline bool operator>(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) > 0; } +inline bool operator<=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) <= 0; } +inline bool operator>=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) >= 0; } +inline bool operator==(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) == 0; } +inline bool operator!=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) != 0; } + +inline bool operator<(const char * v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } +inline bool operator>(const char * v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } +inline bool operator<=(const char * v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } +inline bool operator>=(const char * v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } +inline bool operator==(const char * v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } +inline bool operator!=(const char * v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } + +/* + * ProjectVersion v. QString + */ +inline bool operator<(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) < 0; } +inline bool operator>(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) > 0; } +inline bool operator<=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) <= 0; } +inline bool operator>=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) >= 0; } +inline bool operator==(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) == 0; } +inline bool operator!=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) != 0; } + +inline bool operator<(const QString & v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } +inline bool operator>(const QString & v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } +inline bool operator<=(const QString & v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } +inline bool operator>=(const QString & v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } +inline bool operator==(const QString & v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } +inline bool operator!=(const QString & v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } + +/* + * ProjectVersion v. ProjectVersion + */ +inline bool operator<(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) < 0; } +inline bool operator>(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) > 0; } +inline bool operator<=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) <= 0; } +inline bool operator>=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) >= 0; } +inline bool operator==(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) == 0; } +inline bool operator!=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) != 0; } + #endif diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 9caf25472..5256b40e1 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -29,7 +29,6 @@ #include "ProjectVersion.h" - int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2) { if(v1.getMajor() != v2.getMajor()) From 300e44620ac55a171facfd5e8ee25f14c76dbc13 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 12 Jan 2015 00:38:17 -0500 Subject: [PATCH 092/172] Remove address for CompareType --- include/ProjectVersion.h | 54 ++++++++++++++++++++++++++-------------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index 8916d745b..2d49c095b 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -31,7 +31,7 @@ enum CompareType { Major, Minor, Release, Build }; -/*! \brief Version number parsing and comparison utility +/*! \brief Version number parsing and comparison * * Parses and compares version information. i.e. "1.0.3" < "1.0.10" */ @@ -40,10 +40,10 @@ class ProjectVersion : public QString public: ProjectVersion(const QString & s, const CompareType c = CompareType::Build) : QString(s), - m_major(section( '.', 0, 0 ).toInt()) , - m_minor(section( '.', 1, 1 ).toInt()) , - m_release(section( '.', 2 ).section( '-', 0, 0 ).toInt()) , - m_build(section( '.', 2 ).section( '-', 1 )), + m_major(s.section( '.', 0, 0 ).toInt()) , + m_minor(s.section( '.', 1, 1 ).toInt()) , + m_release(s.section( '.', 2 ).section( '-', 0, 0 ).toInt()) , + m_build(s.section( '.', 2 ).section( '-', 1 )), m_compareType(c) { } @@ -64,8 +64,8 @@ private: const int m_major; const int m_minor; const int m_release; - const QString & m_build; - const CompareType & m_compareType; + const QString m_build; + const CompareType m_compareType; } ; @@ -83,6 +83,22 @@ inline int compStr(const ProjectVersion & v1, const QString & v2) return ProjectVersion::compare(v1, ProjectVersion(v2)); } + + +inline int compStr(const char * v1, const ProjectVersion & v2) +{ + return ProjectVersion::compare(ProjectVersion(v1), v2); +} + + + +inline int compStr(const QString & v1, const ProjectVersion & v2) +{ + return ProjectVersion::compare(ProjectVersion(v1), v2); +} + + + /* * ProjectVersion v. char[] */ @@ -93,12 +109,12 @@ inline bool operator>=(const ProjectVersion & v1, const char * v2) { return comp inline bool operator==(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) == 0; } inline bool operator!=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) != 0; } -inline bool operator<(const char * v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } -inline bool operator>(const char * v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } -inline bool operator<=(const char * v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } -inline bool operator>=(const char * v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } -inline bool operator==(const char * v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } -inline bool operator!=(const char * v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } +inline bool operator<(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) < 0; } +inline bool operator>(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) > 0; } +inline bool operator<=(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) <= 0; } +inline bool operator>=(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) >= 0; } +inline bool operator==(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) == 0; } +inline bool operator!=(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) != 0; } /* * ProjectVersion v. QString @@ -110,12 +126,12 @@ inline bool operator>=(const ProjectVersion & v1, const QString & v2) { return c inline bool operator==(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) == 0; } inline bool operator!=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) != 0; } -inline bool operator<(const QString & v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } -inline bool operator>(const QString & v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } -inline bool operator<=(const QString & v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } -inline bool operator>=(const QString & v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } -inline bool operator==(const QString & v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } -inline bool operator!=(const QString & v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } +inline bool operator<(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) < 0; } +inline bool operator>(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) > 0; } +inline bool operator<=(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) <= 0; } +inline bool operator>=(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) >= 0; } +inline bool operator==(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) == 0; } +inline bool operator!=(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) != 0; } /* * ProjectVersion v. ProjectVersion From 8e5af67ec0db1ff5b2bbba4cfd8da6a3ca7dab6a Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 12 Jan 2015 01:00:02 -0500 Subject: [PATCH 093/172] Fix typo in .cpp, remove unecessary changes --- include/ProjectVersion.h | 41 +++++++++++-------------------------- src/core/ProjectVersion.cpp | 8 +++----- 2 files changed, 15 insertions(+), 34 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index 2d49c095b..d9c93ca6e 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -58,9 +58,6 @@ public: private: - static int compStr(const ProjectVersion & v1, const char * v2); - static int compStr(const ProjectVersion & v1, const QString & v2); - const int m_major; const int m_minor; const int m_release; @@ -85,20 +82,6 @@ inline int compStr(const ProjectVersion & v1, const QString & v2) -inline int compStr(const char * v1, const ProjectVersion & v2) -{ - return ProjectVersion::compare(ProjectVersion(v1), v2); -} - - - -inline int compStr(const QString & v1, const ProjectVersion & v2) -{ - return ProjectVersion::compare(ProjectVersion(v1), v2); -} - - - /* * ProjectVersion v. char[] */ @@ -109,12 +92,12 @@ inline bool operator>=(const ProjectVersion & v1, const char * v2) { return comp inline bool operator==(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) == 0; } inline bool operator!=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) != 0; } -inline bool operator<(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) < 0; } -inline bool operator>(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) > 0; } -inline bool operator<=(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) <= 0; } -inline bool operator>=(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) >= 0; } -inline bool operator==(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) == 0; } -inline bool operator!=(const char * v1, const ProjectVersion & v2) { return compStr(v1, v2) != 0; } +inline bool operator<(const char * v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } +inline bool operator>(const char * v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } +inline bool operator<=(const char * v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } +inline bool operator>=(const char * v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } +inline bool operator==(const char * v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } +inline bool operator!=(const char * v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } /* * ProjectVersion v. QString @@ -126,12 +109,12 @@ inline bool operator>=(const ProjectVersion & v1, const QString & v2) { return c inline bool operator==(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) == 0; } inline bool operator!=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) != 0; } -inline bool operator<(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) < 0; } -inline bool operator>(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) > 0; } -inline bool operator<=(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) <= 0; } -inline bool operator>=(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) >= 0; } -inline bool operator==(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) == 0; } -inline bool operator!=(const QString & v1, const ProjectVersion & v2) { return compStr(v1, v2) != 0; } +inline bool operator<(const QString & v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } +inline bool operator>(const QString & v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } +inline bool operator<=(const QString & v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } +inline bool operator>=(const QString & v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } +inline bool operator==(const QString & v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } +inline bool operator!=(const QString & v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } /* * ProjectVersion v. ProjectVersion diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 5256b40e1..22014a442 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -25,8 +25,6 @@ */ - - #include "ProjectVersion.h" int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2) @@ -38,7 +36,7 @@ int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2 // return prematurely for Major comparison if(v1.getCompareType() == CompareType::Major || - v1.getCompareType() == CompareType::Major) + v2.getCompareType() == CompareType::Major) { return 0; } @@ -50,7 +48,7 @@ int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2 // return prematurely for Minor comparison if(v1.getCompareType() == CompareType::Minor || - v1.getCompareType() == CompareType::Minor) + v2.getCompareType() == CompareType::Minor) if(v1.getRelease() != v2.getRelease()) { @@ -58,7 +56,7 @@ int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2 } if(v1.getCompareType() == CompareType::Build || - v1.getCompareType() == CompareType::Build) + v2.getCompareType() == CompareType::Build) // make sure 0.x.y > 0.x.y-patch if(v1.getBuild().isEmpty()) From 4f03575786c4d96b04af387b7cd05dcdf47cdbd3 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 12 Jan 2015 01:14:31 -0500 Subject: [PATCH 094/172] Fix more typos --- src/core/ProjectVersion.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 22014a442..325c39631 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -49,14 +49,19 @@ int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2 // return prematurely for Minor comparison if(v1.getCompareType() == CompareType::Minor || v2.getCompareType() == CompareType::Minor) + { + return 0; + } if(v1.getRelease() != v2.getRelease()) { return v1.getRelease() - v2.getRelease(); } - if(v1.getCompareType() == CompareType::Build || - v2.getCompareType() == CompareType::Build) + if(v1.getCompareType() == CompareType::Release || + v2.getCompareType() == CompareType::Release) { + return 0; + } // make sure 0.x.y > 0.x.y-patch if(v1.getBuild().isEmpty()) From 58507c28ecc73469ec37c073c6321124a99a2f85 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 11:03:49 +0100 Subject: [PATCH 095/172] Fix piano roll detuning redraw --- src/gui/editors/PianoRoll.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index c4e4bdcb8..8c5acca5e 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -1201,9 +1201,19 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) if( m_editMode == ModeEditDetuning && noteUnderMouse() ) { + static AutomationPattern* detuningPattern = nullptr; + if (detuningPattern != nullptr) + { + detuningPattern->disconnect(this); + } Note* n = noteUnderMouse(); - if (n->detuning() == NULL) n->createDetuning(); - gui->automationEditor()->open( noteUnderMouse()->detuning()->automationPattern() ); + if (n->detuning() == nullptr) + { + n->createDetuning(); + } + detuningPattern = n->detuning()->automationPattern(); + connect(detuningPattern, SIGNAL(dataChanged()), this, SLOT(update())); + gui->automationEditor()->open(detuningPattern); return; } From b90bacab6ef6e0bc3a340f6c35f204234186b32c Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Mon, 12 Jan 2015 13:09:10 +0100 Subject: [PATCH 096/172] Fix locale generation --- src/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 3446bc3e5..596f3b270 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -103,7 +103,7 @@ ENDIF() # # rules for building localizations # -FILE(GLOB lmms_LOCALES data/locale/*.ts) +FILE(GLOB lmms_LOCALES ${CMAKE_SOURCE_DIR}/data/locale/*.ts) SET(ts_targets "") SET(qm_targets "") FOREACH(_ts_file ${lmms_LOCALES}) From 22f51eefb695708f8b184474b28af6645b3a5cf3 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 12 Jan 2015 16:40:42 +0000 Subject: [PATCH 097/172] proposed fix 1502 incorrect slash in windows --- src/gui/SetupDialog.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/gui/SetupDialog.cpp b/src/gui/SetupDialog.cpp index 692ed233d..b3450e700 100644 --- a/src/gui/SetupDialog.cpp +++ b/src/gui/SetupDialog.cpp @@ -100,18 +100,18 @@ SetupDialog::SetupDialog( ConfigTabs _tab_to_open ) : "hqaudio" ).toInt() ), m_lang( ConfigManager::inst()->value( "app", "language" ) ), - m_workingDir( ConfigManager::inst()->workingDir() ), - m_vstDir( ConfigManager::inst()->vstDir() ), - m_artworkDir( ConfigManager::inst()->artworkDir() ), - m_flDir( ConfigManager::inst()->flDir() ), - m_ladDir( ConfigManager::inst()->ladspaDir() ), + m_workingDir( QDir::toNativeSeparators( ConfigManager::inst()->workingDir() ) ), + m_vstDir( QDir::toNativeSeparators( ConfigManager::inst()->vstDir() ) ), + m_artworkDir( QDir::toNativeSeparators( ConfigManager::inst()->artworkDir() ) ), + m_flDir( QDir::toNativeSeparators( ConfigManager::inst()->flDir() ) ), + m_ladDir( QDir::toNativeSeparators( ConfigManager::inst()->ladspaDir() ) ), #ifdef LMMS_HAVE_FLUIDSYNTH - m_defaultSoundfont( ConfigManager::inst()->defaultSoundfont() ), + m_defaultSoundfont( QDir::toNativeSeparators( ConfigManager::inst()->defaultSoundfont() ) ), #endif #ifdef LMMS_HAVE_STK - m_stkDir( ConfigManager::inst()->stkDir() ), + m_stkDir( QDir::toNativeSeparators( ConfigManager::inst()->stkDir() ) ), #endif - m_backgroundArtwork( ConfigManager::inst()->backgroundArtwork() ), + m_backgroundArtwork( QDir::toNativeSeparators( ConfigManager::inst()->backgroundArtwork() ) ), m_smoothScroll( ConfigManager::inst()->value( "ui", "smoothscroll" ).toInt() ), m_enableAutoSave( ConfigManager::inst()->value( "ui", "enableautosave" ).toInt() ), m_oneInstrumentTrackWindow( ConfigManager::inst()->value( "ui", From 30bc86e2e71bf84b2cae84a863053c108ba1bdb2 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 22:45:28 +0100 Subject: [PATCH 098/172] Fix opening automation patterns per context menu --- include/AutomationPatternView.h | 4 +++- src/gui/AutomationPatternView.cpp | 19 +++++++++++++------ 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/include/AutomationPatternView.h b/include/AutomationPatternView.h index 76b2e1a47..714eaed53 100644 --- a/include/AutomationPatternView.h +++ b/include/AutomationPatternView.h @@ -43,6 +43,8 @@ public: virtual ~AutomationPatternView(); public slots: + /// Opens this view's pattern in the global automation editor + void openInAutomationEditor(); virtual void update(); @@ -56,7 +58,7 @@ protected slots: protected: virtual void constructContextMenu( QMenu * ); - virtual void mouseDoubleClickEvent( QMouseEvent * _me ); + virtual void mouseDoubleClickEvent(QMouseEvent * me ); virtual void paintEvent( QPaintEvent * _pe ); virtual void resizeEvent( QResizeEvent * _re ) { diff --git a/src/gui/AutomationPatternView.cpp b/src/gui/AutomationPatternView.cpp index 34bc81dfe..166552a39 100644 --- a/src/gui/AutomationPatternView.cpp +++ b/src/gui/AutomationPatternView.cpp @@ -73,6 +73,14 @@ AutomationPatternView::~AutomationPatternView() +void AutomationPatternView::openInAutomationEditor() +{ + if(gui) gui->automationEditor()->open(m_pat); +} + + + + void AutomationPatternView::update() { @@ -170,8 +178,7 @@ void AutomationPatternView::constructContextMenu( QMenu * _cm ) QAction * a = new QAction( embed::getIconPixmap( "automation" ), tr( "Open in Automation editor" ), _cm ); _cm->insertAction( _cm->actions()[0], a ); - connect( a, SIGNAL( triggered( bool ) ), - m_pat, SLOT( openInAutomationEditor() ) ); + connect(a, SIGNAL(triggered()), this, SLOT(openInAutomationEditor())); _cm->insertSeparator( _cm->actions()[1] ); _cm->addSeparator(); @@ -222,14 +229,14 @@ void AutomationPatternView::constructContextMenu( QMenu * _cm ) -void AutomationPatternView::mouseDoubleClickEvent( QMouseEvent * _me ) +void AutomationPatternView::mouseDoubleClickEvent( QMouseEvent * me ) { - if( _me->button() != Qt::LeftButton ) + if(me->button() != Qt::LeftButton) { - _me->ignore(); + me->ignore(); return; } - gui->automationEditor()->open(m_pat); + openInAutomationEditor(); } From 4206705ed216f4ec0418f5343ee84c14a79f3951 Mon Sep 17 00:00:00 2001 From: Dave French Date: Mon, 12 Jan 2015 22:10:15 +0000 Subject: [PATCH 099/172] Proposed fix 760 Improve search field --- include/FileBrowser.h | 3 ++- src/gui/FileBrowser.cpp | 40 +++++++++++++++++++++++++++++++--------- src/gui/MainWindow.cpp | 8 ++++---- 3 files changed, 37 insertions(+), 14 deletions(-) diff --git a/include/FileBrowser.h b/include/FileBrowser.h index 4f9b78c48..f9bc34820 100644 --- a/include/FileBrowser.h +++ b/include/FileBrowser.h @@ -50,7 +50,7 @@ class FileBrowser : public SideBarWidget public: FileBrowser( const QString & directories, const QString & filter, const QString & title, const QPixmap & pm, - QWidget * parent, bool dirs_as_items = false ); + QWidget * parent, bool dirs_as_items = false, bool recurse = false ); virtual ~FileBrowser(); @@ -73,6 +73,7 @@ private: QString m_filter; bool m_dirsAsItems; + bool m_recurse; } ; diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index 80390293f..fd86ffc84 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -63,11 +63,12 @@ enum TreeWidgetItemTypes FileBrowser::FileBrowser(const QString & directories, const QString & filter, const QString & title, const QPixmap & pm, - QWidget * parent, bool dirs_as_items ) : + QWidget * parent, bool dirs_as_items, bool recurse ) : SideBarWidget( title, pm, parent ), m_directories( directories ), m_filter( filter ), - m_dirsAsItems( dirs_as_items ) + m_dirsAsItems( dirs_as_items ), + m_recurse( recurse ) { setWindowTitle( tr( "Browser" ) ); m_l = new FileBrowserTreeWidget( contentParent() ); @@ -234,6 +235,19 @@ void FileBrowser::reloadTree( void ) { addItems( *it ); } + for(int i = 0; i < m_l->topLevelItemCount(); ++i) + { + if ( m_recurse ) + { + m_l->topLevelItem( i )->setExpanded( true); + } + Directory *d = dynamic_cast ( m_l->topLevelItem( i ) ); + if( d ) + { + d->update(); + d->setExpanded( false ); + } + } m_filterEdit->setText( text ); filterItems( text ); } @@ -245,8 +259,7 @@ void FileBrowser::addItems(const QString & path ) { if( m_dirsAsItems ) { - m_l->addTopLevelItem( new Directory( path, - QString::null, m_filter ) ); + m_l->addTopLevelItem( new Directory( path, QString::null, m_filter ) ); return; } @@ -265,23 +278,27 @@ void FileBrowser::addItems(const QString & path ) m_l->topLevelItem( i ) ); if( d == NULL || cur_file < d->text( 0 ) ) { - m_l->insertTopLevelItem( i, - new Directory( cur_file, path, - m_filter ) ); + Directory *dd = new Directory( cur_file, path, + m_filter ); + m_l->insertTopLevelItem( i,dd ); + dd->update(); orphan = false; break; } else if( cur_file == d->text( 0 ) ) { d->addDirectory( path ); + d->update(); orphan = false; break; } } if( orphan ) { - m_l->addTopLevelItem( new Directory( cur_file, - path, m_filter ) ); + Directory *d = new Directory( cur_file, + path, m_filter ); + d->update(); + m_l->addTopLevelItem( d ); } } } @@ -348,6 +365,7 @@ FileBrowserTreeWidget::FileBrowserTreeWidget(QWidget * parent ) : SLOT( updateDirectory( QTreeWidgetItem * ) ) ); connect( this, SIGNAL( itemExpanded( QTreeWidgetItem * ) ), SLOT( updateDirectory( QTreeWidgetItem * ) ) ); + } @@ -818,6 +836,8 @@ bool Directory::addItems(const QString & path ) path, m_filter ) ); orphan = false; m_dirCount++; + //recurse for each dir + addItems( path + cur_file + QDir::separator() ); break; } else if( cur_file == d->text( 0 ) ) @@ -832,6 +852,8 @@ bool Directory::addItems(const QString & path ) addChild( new Directory( cur_file, path, m_filter ) ); m_dirCount++; + //recurse for each dir + addItems( path + cur_file + QDir::separator() ); } added_something = true; diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 7211bd2e1..2cc035ed8 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -102,24 +102,24 @@ MainWindow::MainWindow() : "*.mmp *.mmpz *.xml *.mid *.flp", tr( "My Projects" ), embed::getIconPixmap( "project_file" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter, false, true ) ); sideBar->appendTab( new FileBrowser( ConfigManager::inst()->userSamplesDir() + "*" + ConfigManager::inst()->factorySamplesDir(), "*", tr( "My Samples" ), embed::getIconPixmap( "sample_file" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter, false, true ) ); sideBar->appendTab( new FileBrowser( ConfigManager::inst()->userPresetsDir() + "*" + ConfigManager::inst()->factoryPresetsDir(), "*.xpf *.cs.xml *.xiz", tr( "My Presets" ), embed::getIconPixmap( "preset_file" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter , false, true ) ); sideBar->appendTab( new FileBrowser( QDir::homePath(), "*", tr( "My Home" ), embed::getIconPixmap( "home" ).transformed( QTransform().rotate( 90 ) ), - splitter ) ); + splitter, false, true ) ); QStringList root_paths; #ifdef LMMS_BUILD_APPLE From a94ccb851592e12f3f8f9cc355159388bb5e3c0b Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 23:22:21 +0100 Subject: [PATCH 100/172] Fix blank AutomationEditor on loading projects --- src/gui/editors/AutomationEditor.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/editors/AutomationEditor.cpp b/src/gui/editors/AutomationEditor.cpp index c5da787a3..f839eb5a6 100644 --- a/src/gui/editors/AutomationEditor.cpp +++ b/src/gui/editors/AutomationEditor.cpp @@ -224,17 +224,17 @@ void AutomationEditor::setCurrentPattern(AutomationPattern * new_pattern ) -void AutomationEditor::saveSettings(QDomDocument & doc, QDomElement & parent ) +void AutomationEditor::saveSettings(QDomDocument & doc, QDomElement & dom_parent) { - MainWindow::saveWidgetState( this, parent ); + MainWindow::saveWidgetState(parentWidget(), dom_parent); } -void AutomationEditor::loadSettings( const QDomElement & parent ) +void AutomationEditor::loadSettings( const QDomElement & dom_parent) { - MainWindow::restoreWidgetState( this, parent ); + MainWindow::restoreWidgetState(parentWidget(), dom_parent); } From 227a1c0e8746249a84e8b145ddf566a5ab8248cf Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 23:28:50 +0100 Subject: [PATCH 101/172] Rename Project menu to File, rearrange save actions Closes #1608 --- src/gui/MainWindow.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 7211bd2e1..aaea509a1 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -233,7 +233,7 @@ void MainWindow::finalize() // project-popup-menu QMenu * project_menu = new QMenu( this ); - menuBar()->addMenu( project_menu )->setText( tr( "&Project" ) ); + menuBar()->addMenu( project_menu )->setText( tr( "&File" ) ); project_menu->addAction( embed::getIconPixmap( "project_new" ), tr( "&New" ), this, SLOT( createNewProject() ), @@ -256,15 +256,14 @@ void MainWindow::finalize() tr( "&Save" ), this, SLOT( saveProject() ), Qt::CTRL + Qt::Key_S ); - - project_menu->addAction( embed::getIconPixmap( "project_save" ), - tr( "Save as New &Version" ), - this, SLOT( saveProjectAsNewVersion() ), - Qt::CTRL + Qt::ALT + Qt::Key_S ); project_menu->addAction( embed::getIconPixmap( "project_saveas" ), tr( "Save &As..." ), this, SLOT( saveProjectAs() ), Qt::CTRL + Qt::SHIFT + Qt::Key_S ); + project_menu->addAction( embed::getIconPixmap( "project_save" ), + tr( "Save as New &Version" ), + this, SLOT( saveProjectAsNewVersion() ), + Qt::CTRL + Qt::ALT + Qt::Key_S ); project_menu->addSeparator(); project_menu->addAction( embed::getIconPixmap( "project_import" ), tr( "Import..." ), From ebad5296f55747d03c714a66de04245dbad85a35 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 23:38:27 +0100 Subject: [PATCH 102/172] Fix cmake locale update --- src/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 596f3b270..bf85e1c68 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -110,8 +110,12 @@ FOREACH(_ts_file ${lmms_LOCALES}) STRING(REPLACE "${CMAKE_SOURCE_DIR}/data/locale/" "" _ts_target "${_ts_file}") STRING(REPLACE ".ts" ".qm" _qm_file "${_ts_file}") STRING(REPLACE ".ts" ".qm" _qm_target "${_ts_target}") - ADD_CUSTOM_TARGET(${_ts_target} COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UIS} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp' -or -name '*.h'` -ts "\"${_ts_file}\"") - ADD_CUSTOM_TARGET(${_qm_target} COMMAND "${QT_LRELEASE_EXECUTABLE}" "\"${_ts_file}\"" -qm "\"${_qm_file}\"") + ADD_CUSTOM_TARGET(${_ts_target} + COMMAND "${QT_LUPDATE_EXECUTABLE}" -locations none -no-obsolete -I ${CMAKE_SOURCE_DIR}/include/ ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UIS} `find "\"${CMAKE_SOURCE_DIR}/plugins/\"" -type f -name '*.cpp' -or -name '*.h'` -ts "\"${_ts_file}\"" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) + ADD_CUSTOM_TARGET(${_qm_target} + COMMAND "${QT_LRELEASE_EXECUTABLE}" "\"${_ts_file}\"" -qm "\"${_qm_file}\"" + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) LIST(APPEND ts_targets "${_ts_target}") LIST(APPEND qm_targets "${_qm_target}") ENDFOREACH(_ts_file ${lmms_LOCALES}) From 5641465a3a5a4887f232d6516d1648e2232084ae Mon Sep 17 00:00:00 2001 From: Lukas W Date: Mon, 12 Jan 2015 23:58:34 +0100 Subject: [PATCH 103/172] Add a testing framework --- CMakeLists.txt | 1 + src/CMakeLists.txt | 6 +++++- src/core/CMakeLists.txt | 1 - tests/CMakeLists.txt | 15 +++++++++++++++ tests/QTestSuite.cpp | 19 +++++++++++++++++++ tests/QTestSuite.h | 21 +++++++++++++++++++++ tests/main.cpp | 13 +++++++++++++ 7 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 tests/CMakeLists.txt create mode 100644 tests/QTestSuite.cpp create mode 100644 tests/QTestSuite.h create mode 100644 tests/main.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 82c906b54..4cb740777 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -434,6 +434,7 @@ ENDIF(WIN32) # make sub-directories ADD_SUBDIRECTORY(src) ADD_SUBDIRECTORY(plugins) +ADD_SUBDIRECTORY(tests) ADD_SUBDIRECTORY(data) ADD_SUBDIRECTORY(doc) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 596f3b270..93b9f8bdd 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,13 +64,17 @@ ENDIF() # Enable C++11 ADD_DEFINITIONS("-std=c++0x") -ADD_EXECUTABLE(lmms +ADD_LIBRARY(lmmslib STATIC ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UI_OUT} ${LMMS_ER_H} +) +ADD_EXECUTABLE(lmms + core/main.cpp "${WINRC}" ) +TARGET_LINK_LIBRARIES(lmms lmmslib) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_OUT} lmmsconfig.h lmms.1.gz") diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index c59cd6680..ae23ae6d9 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -30,7 +30,6 @@ set(LMMS_SRCS core/LadspaControl.cpp core/LadspaManager.cpp core/LfoController.cpp - core/main.cpp core/MemoryHelper.cpp core/MemoryManager.cpp core/MeterModel.cpp diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 000000000..1c29996e2 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,15 @@ +INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}") +INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") +INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") + +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11") + +SET(CMAKE_AUTOMOC ON) + +ADD_EXECUTABLE(tests + EXCLUDE_FROM_ALL + main.cpp + QTestSuite +) +TARGET_LINK_LIBRARIES(tests ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY}) +TARGET_LINK_LIBRARIES(tests lmmslib) diff --git a/tests/QTestSuite.cpp b/tests/QTestSuite.cpp new file mode 100644 index 000000000..a5a49fd20 --- /dev/null +++ b/tests/QTestSuite.cpp @@ -0,0 +1,19 @@ +#include "QTestSuite.h" + +QList QTestSuite::m_suites; + +QTestSuite::QTestSuite(QObject *parent) : QObject(parent) +{ + m_suites << this; +} + +QTestSuite::~QTestSuite() +{ + m_suites.removeAll(this); +} + +QList QTestSuite::suites() +{ + return m_suites; +} + diff --git a/tests/QTestSuite.h b/tests/QTestSuite.h new file mode 100644 index 000000000..05ae1fb66 --- /dev/null +++ b/tests/QTestSuite.h @@ -0,0 +1,21 @@ +#ifndef QTESTSUITE_H +#define QTESTSUITE_H + +#include +#include +#include + +class QTestSuite : public QObject +{ + Q_OBJECT +public: + explicit QTestSuite(QObject *parent = 0); + ~QTestSuite(); + + static QList suites(); + +private: + static QList m_suites; +}; + +#endif // QTESTSUITE_H diff --git a/tests/main.cpp b/tests/main.cpp new file mode 100644 index 000000000..1f3e95355 --- /dev/null +++ b/tests/main.cpp @@ -0,0 +1,13 @@ +#include "QTestSuite.h" + +#include + +#include + +int main(int argc, char* argv[]) +{ + for (QTestSuite*& suite : QTestSuite::suites()) + { + QTest::qExec(suite, argc, argv); + } +} From cb10b5aabefa58f56714da40a31dffa896772e43 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 13 Jan 2015 01:13:14 +0100 Subject: [PATCH 104/172] Try fixing windows build --- src/CMakeLists.txt | 12 ++++++------ tests/CMakeLists.txt | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 93b9f8bdd..308726e95 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,17 +64,17 @@ ENDIF() # Enable C++11 ADD_DEFINITIONS("-std=c++0x") -ADD_LIBRARY(lmmslib STATIC +ADD_EXECUTABLE(lmms + core/main.cpp ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UI_OUT} ${LMMS_ER_H} -) -ADD_EXECUTABLE(lmms - core/main.cpp "${WINRC}" ) -TARGET_LINK_LIBRARIES(lmms lmmslib) +SET_TARGET_PROPERTIES(lmms PROPERTIES + ENABLE_EXPORTS ON +) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_OUT} lmmsconfig.h lmms.1.gz") @@ -134,7 +134,7 @@ ENDFOREACH(_item ${qm_targets}) IF(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows" - ENABLE_EXPORTS ON) + ) ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "$") INSTALL(TARGETS lmms RUNTIME DESTINATION "${BIN_DIR}") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1c29996e2..377063751 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -12,4 +12,4 @@ ADD_EXECUTABLE(tests QTestSuite ) TARGET_LINK_LIBRARIES(tests ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY}) -TARGET_LINK_LIBRARIES(tests lmmslib) +TARGET_LINK_LIBRARIES(tests lmms) From ce5398414c0017ca0c31f4405782c53bc03c5200 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 13 Jan 2015 01:21:40 +0100 Subject: [PATCH 105/172] Clean BuildPlugin.cmake --- cmake/modules/BuildPlugin.cmake | 69 ++++++--------------------------- 1 file changed, 11 insertions(+), 58 deletions(-) diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index b12d05b5a..0fba9e829 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -3,56 +3,9 @@ # description: build LMMS-plugin # usage: BUILD_PLUGIN( MOCFILES EMBEDDED_RESOURCES UICFILES ) -MACRO(CAR var) - SET(${var} ${ARGV1}) -ENDMACRO(CAR) - -MACRO(CDR var junk) - SET(${var} ${ARGN}) -ENDMACRO(CDR) - -MACRO(LIST_CONTAINS var value) - SET(${var}) - FOREACH (value2 ${ARGN}) - IF (${value} STREQUAL ${value2}) - SET(${var} TRUE) - ENDIF (${value} STREQUAL ${value2}) - ENDFOREACH (value2) -ENDMACRO(LIST_CONTAINS) - -MACRO(PARSE_ARGUMENTS prefix arg_names option_names) - SET(DEFAULT_ARGS) - FOREACH(arg_name ${arg_names}) - SET(${prefix}_${arg_name}) - ENDFOREACH(arg_name) - FOREACH(option ${option_names}) - SET(${prefix}_${option} FALSE) - ENDFOREACH(option) - - SET(current_arg_name DEFAULT_ARGS) - SET(current_arg_list) - FOREACH(arg ${ARGN}) - LIST_CONTAINS(is_arg_name ${arg} ${arg_names}) - IF (is_arg_name) - SET(${prefix}_${current_arg_name} ${current_arg_list}) - SET(current_arg_name ${arg}) - SET(current_arg_list) - ELSE (is_arg_name) - LIST_CONTAINS(is_option ${arg} ${option_names}) - IF (is_option) - SET(${prefix}_${arg} TRUE) - ELSE (is_option) - SET(current_arg_list ${current_arg_list} ${arg}) - ENDIF (is_option) - ENDIF (is_arg_name) - ENDFOREACH(arg) - SET(${prefix}_${current_arg_name} ${current_arg_list}) -ENDMACRO(PARSE_ARGUMENTS) - -MACRO(BUILD_PLUGIN) - PARSE_ARGUMENTS(PLUGIN "MOCFILES;EMBEDDED_RESOURCES;UICFILES" "" ${ARGN} ) - CAR(PLUGIN_NAME ${PLUGIN_DEFAULT_ARGS}) - CDR(PLUGIN_SOURCES ${PLUGIN_DEFAULT_ARGS}) +MACRO(BUILD_PLUGIN PLUGIN_NAME) + CMAKE_PARSE_ARGUMENTS(PLUGIN "" "" "MOCFILES;EMBEDDED_RESOURCES;UICFILES" ${ARGN}) + SET(PLUGIN_SOURCES ${PLUGIN_UNPARSED_ARGUMENTS}) INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src/gui) @@ -68,11 +21,11 @@ MACRO(BUILD_PLUGIN) ENDIF(ER_LEN) IF(QT5) - QT5_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES}) - QT5_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES}) + QT5_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES}) + QT5_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES}) ELSE() - QT4_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES}) - QT4_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES}) + QT4_WRAP_CPP(plugin_MOC_out ${PLUGIN_MOCFILES}) + QT4_WRAP_UI(plugin_UIC_out ${PLUGIN_UICFILES}) ENDIF() FOREACH(f ${PLUGIN_SOURCES}) @@ -80,12 +33,12 @@ MACRO(BUILD_PLUGIN) ENDFOREACH(f) IF(LMMS_BUILD_APPLE) - LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) - LINK_LIBRARIES(${QT_LIBRARIES}) + LINK_DIRECTORIES(${CMAKE_BINARY_DIR}) + LINK_LIBRARIES(${QT_LIBRARIES}) ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) - LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) - LINK_LIBRARIES(${QT_LIBRARIES}) + LINK_DIRECTORIES(${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}) + LINK_LIBRARIES(${QT_LIBRARIES}) ENDIF(LMMS_BUILD_WIN32) ADD_LIBRARY(${PLUGIN_NAME} MODULE ${PLUGIN_SOURCES} ${plugin_MOC_out}) From 7da4efda0fc1a18ea52a8e7504ba8c5ed55cf76e Mon Sep 17 00:00:00 2001 From: Lee Avital Date: Sun, 4 Jan 2015 17:58:18 -0500 Subject: [PATCH 106/172] Implement 1429 -- move to next and previous pattern --- include/Pattern.h | 6 ++++++ src/gui/editors/PianoRoll.cpp | 15 +++++++++++++++ src/tracks/Pattern.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 47 insertions(+) diff --git a/include/Pattern.h b/include/Pattern.h index 840926f51..511dd6cd3 100644 --- a/include/Pattern.h +++ b/include/Pattern.h @@ -94,6 +94,10 @@ public: void checkType(); + // next/previous track based on position in the containing track + Pattern * previousPattern() const; + Pattern * nextPattern() const; + // settings-management virtual void saveSettings( QDomDocument & _doc, QDomElement & _parent ); virtual void loadSettings( const QDomElement & _this ); @@ -137,6 +141,8 @@ private: NoteVector m_notes; int m_steps; + Pattern * adjacentPatternByOffset(int offset) const; + friend class PatternView; friend class BBTrackContainerView; diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 8c5acca5e..b1b682bca 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -967,6 +967,14 @@ void PianoRoll::keyPressEvent(QKeyEvent* ke ) int amt = quantized ? quantization() : 1; shiftPos( -amt ); } + else if( ke->modifiers() & Qt::AltModifier) + { + Pattern * p = m_pattern->previousPattern(); + if(p != NULL) + { + setCurrentPattern(p); + } + } else { // scroll @@ -1001,6 +1009,13 @@ void PianoRoll::keyPressEvent(QKeyEvent* ke ) int amt = quantized ? quantization() : 1; shiftPos( +amt ); } + else if( ke->modifiers() & Qt::AltModifier) { + Pattern * p = m_pattern->nextPattern(); + if(p != NULL) + { + setCurrentPattern(p); + } + } else { // scroll diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index b5d2da75b..c36418eef 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -434,6 +434,32 @@ void Pattern::loadSettings( const QDomElement & _this ) +Pattern * Pattern::previousPattern() const +{ + return adjacentPatternByOffset(-1); +} + + + + +Pattern * Pattern::nextPattern() const +{ + return adjacentPatternByOffset(1); +} + + + + +Pattern * Pattern::adjacentPatternByOffset(int offset) const +{ + QVector tcos = m_instrumentTrack->getTCOs(); + int tcoNum = m_instrumentTrack->getTCONum(this); + return dynamic_cast(tcos.value(tcoNum + offset, NULL)); +} + + + + void Pattern::clear() { addJournalCheckPoint(); From 3dd1da4e2504bbc8d8593a6635fcac38a3a6899a Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Mon, 29 Dec 2014 00:27:11 -0200 Subject: [PATCH 107/172] Collect effects errors to show on summary window --- include/Engine.h | 12 +----------- plugins/LadspaEffect/LadspaEffect.cpp | 10 +++++----- src/core/Engine.cpp | 3 +-- src/core/PresetPreviewPlayHandle.cpp | 4 ---- 4 files changed, 7 insertions(+), 22 deletions(-) diff --git a/include/Engine.h b/include/Engine.h index 5106222dc..03314a5d8 100644 --- a/include/Engine.h +++ b/include/Engine.h @@ -58,16 +58,6 @@ public: static bool hasGUI(); - static void setSuppressMessages( bool _on ) - { - s_suppressMessages = _on; - } - - static bool suppressMessages() - { - return !hasGUI() || s_suppressMessages; - } - // core static Mixer *mixer() { @@ -127,7 +117,7 @@ private: delete tmp; } - static bool s_suppressMessages; + static bool s_hasGUI; static float s_framesPerTick; // core diff --git a/plugins/LadspaEffect/LadspaEffect.cpp b/plugins/LadspaEffect/LadspaEffect.cpp index 9dc3774bc..8906b9578 100644 --- a/plugins/LadspaEffect/LadspaEffect.cpp +++ b/plugins/LadspaEffect/LadspaEffect.cpp @@ -39,6 +39,7 @@ #include "ControllerConnection.h" #include "MemoryManager.h" #include "ValueBuffer.h" +#include "MainWindow.h" #include "embed.cpp" @@ -74,12 +75,11 @@ LadspaEffect::LadspaEffect( Model * _parent, Ladspa2LMMS * manager = Engine::getLADSPAManager(); if( manager->getDescription( m_key ) == NULL ) { - if( !Engine::suppressMessages() ) + if ( Engine::hasGUI() ) { - QMessageBox::warning( 0, tr( "Effect" ), - tr( "Unknown LADSPA plugin %1 requested." ). - arg( m_key.second ), - QMessageBox::Ok, QMessageBox::NoButton ); + Engine::mainWindow()->collectError( + tr( "Unknown LADSPA plugin %1 requested." ).arg( + m_key.second ) ); } setOkay( false ); return; diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index cbe826bed..2f2b3ba1c 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -40,8 +40,7 @@ #include "GuiApplication.h" - -bool Engine::s_suppressMessages = false; +bool Engine::s_hasGUI = true; float Engine::s_framesPerTick; Mixer* Engine::s_mixer = NULL; FxMixer * Engine::s_fxMixer = NULL; diff --git a/src/core/PresetPreviewPlayHandle.cpp b/src/core/PresetPreviewPlayHandle.cpp index 69b550fdc..09ebaca16 100644 --- a/src/core/PresetPreviewPlayHandle.cpp +++ b/src/core/PresetPreviewPlayHandle.cpp @@ -126,8 +126,6 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, const bool j = Engine::projectJournal()->isJournalling(); Engine::projectJournal()->setJournalling( false ); - Engine::setSuppressMessages( true ); - if( _load_by_plugin ) { Instrument * i = s_previewTC->previewInstrumentTrack()->instrument(); @@ -162,8 +160,6 @@ PresetPreviewPlayHandle::PresetPreviewPlayHandle( const QString & _preset_file, } } - Engine::setSuppressMessages( false ); - // make sure, our preset-preview-track does not appear in any MIDI- // devices list, so just disable receiving/sending MIDI-events at all s_previewTC->previewInstrumentTrack()-> From edebf5d7da416b07ce77c7b465049b71e68df4e2 Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Mon, 29 Dec 2014 03:56:46 -0200 Subject: [PATCH 108/172] Refactor loading song errors notification --- include/Engine.h | 1 - include/MainWindow.h | 13 +---- include/Song.h | 6 +++ plugins/LadspaEffect/LadspaEffect.cpp | 10 ++-- .../audio_file_processor.cpp | 4 +- src/core/Engine.cpp | 1 - src/core/Plugin.cpp | 4 +- src/core/Song.cpp | 54 ++++++++++++++++--- src/gui/MainWindow.cpp | 42 --------------- 9 files changed, 60 insertions(+), 75 deletions(-) diff --git a/include/Engine.h b/include/Engine.h index 03314a5d8..55dd9021e 100644 --- a/include/Engine.h +++ b/include/Engine.h @@ -117,7 +117,6 @@ private: delete tmp; } - static bool s_hasGUI; static float s_framesPerTick; // core diff --git a/include/MainWindow.h b/include/MainWindow.h index d02b68494..82f3cd365 100644 --- a/include/MainWindow.h +++ b/include/MainWindow.h @@ -30,8 +30,6 @@ #include #include -#include "export.h" - class QAction; class QDomElement; class QGridLayout; @@ -42,7 +40,7 @@ class PluginView; class ToolButton; -class EXPORT MainWindow : public QMainWindow +class MainWindow : public QMainWindow { Q_OBJECT public: @@ -97,12 +95,6 @@ public: static void saveWidgetState( QWidget * _w, QDomElement & _de ); static void restoreWidgetState( QWidget * _w, const QDomElement & _de ); - void collectErrors( const QList* errors ); - void collectError( const QString & error ); - void clearErrors(); - void showErrors( const QString & reason ); - - public slots: void resetWindowTitle(); @@ -178,8 +170,6 @@ private: QBasicTimer m_updateTimer; QTimer m_autoSaveTimer; - QList* m_errors; - friend class GuiApplication; @@ -199,4 +189,3 @@ signals: } ; #endif - diff --git a/include/Song.h b/include/Song.h index 90f29cf24..5da09818a 100644 --- a/include/Song.h +++ b/include/Song.h @@ -65,6 +65,10 @@ public: Mode_Count } ; + void clearErrors(); + void collectError( const QString error ); + bool hasErrors(); + QString* errorSummary(); class playPos : public MidiTime { @@ -344,6 +348,8 @@ private: bool m_loadingProject; + QList * m_errors; + PlayModes m_playMode; playPos m_playPos[Mode_Count]; tact_t m_length; diff --git a/plugins/LadspaEffect/LadspaEffect.cpp b/plugins/LadspaEffect/LadspaEffect.cpp index 8906b9578..5fb89df2d 100644 --- a/plugins/LadspaEffect/LadspaEffect.cpp +++ b/plugins/LadspaEffect/LadspaEffect.cpp @@ -39,7 +39,7 @@ #include "ControllerConnection.h" #include "MemoryManager.h" #include "ValueBuffer.h" -#include "MainWindow.h" +#include "Song.h" #include "embed.cpp" @@ -75,12 +75,8 @@ LadspaEffect::LadspaEffect( Model * _parent, Ladspa2LMMS * manager = Engine::getLADSPAManager(); if( manager->getDescription( m_key ) == NULL ) { - if ( Engine::hasGUI() ) - { - Engine::mainWindow()->collectError( - tr( "Unknown LADSPA plugin %1 requested." ).arg( - m_key.second ) ); - } + Engine::getSong()->collectError(tr( "Unknown LADSPA plugin %1 requested." ).arg( + m_key.second ) ); setOkay( false ); return; } diff --git a/plugins/audio_file_processor/audio_file_processor.cpp b/plugins/audio_file_processor/audio_file_processor.cpp index 2caf210ae..be7519179 100644 --- a/plugins/audio_file_processor/audio_file_processor.cpp +++ b/plugins/audio_file_processor/audio_file_processor.cpp @@ -34,8 +34,6 @@ #include "audio_file_processor.h" #include "Engine.h" #include "Song.h" -#include "MainWindow.h" -#include "GuiApplication.h" #include "InstrumentTrack.h" #include "NotePlayHandle.h" #include "interpolation.h" @@ -242,7 +240,7 @@ void audioFileProcessor::loadSettings( const QDomElement & _this ) { QString message = tr( "Sample not found: %1" ).arg( m_sampleBuffer.audioFile() ); - gui->mainWindow()->collectError( message ); + Engine::getSong()->collectError( message ); } } else if( _this.attribute( "sampledata" ) != "" ) diff --git a/src/core/Engine.cpp b/src/core/Engine.cpp index 2f2b3ba1c..b11ad1e47 100644 --- a/src/core/Engine.cpp +++ b/src/core/Engine.cpp @@ -40,7 +40,6 @@ #include "GuiApplication.h" -bool Engine::s_hasGUI = true; float Engine::s_framesPerTick; Mixer* Engine::s_mixer = NULL; FxMixer * Engine::s_fxMixer = NULL; diff --git a/src/core/Plugin.cpp b/src/core/Plugin.cpp index ebfb62cb1..abdc44a96 100644 --- a/src/core/Plugin.cpp +++ b/src/core/Plugin.cpp @@ -35,7 +35,7 @@ #include "ConfigManager.h" #include "DummyPlugin.h" #include "AutomatableModel.h" -#include "MainWindow.h" +#include "Song.h" static PixmapLoader __dummy_loader; @@ -128,7 +128,7 @@ Plugin * Plugin::instantiate( const QString & pluginName, Model * parent, void Plugin::collectErrorForUI( QString err_msg ) { - gui->mainWindow()->collectError( err_msg ); + Engine::getSong()->collectError( err_msg ); } diff --git a/src/core/Song.cpp b/src/core/Song.cpp index 07d55a0dd..4c62a1062 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -23,7 +23,7 @@ */ #include "Song.h" - +#include #include #include #include @@ -90,6 +90,7 @@ Song::Song() : m_playing( false ), m_paused( false ), m_loadingProject( false ), + m_errors( new QList() ), m_playMode( Mode_None ), m_length( 0 ), m_trackToPlay( NULL ), @@ -914,10 +915,6 @@ void Song::loadProject( const QString & _file_name ) m_loadingProject = true; Engine::projectJournal()->setJournalling( false ); - if( gui ) - { - gui->mainWindow()->clearErrors(); - } m_fileName = _file_name; m_oldFileName = _file_name; @@ -932,6 +929,8 @@ void Song::loadProject( const QString & _file_name ) clearProject(); + clearErrors(); + DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeLoad ); Engine::mixer()->lock(); @@ -1029,9 +1028,17 @@ void Song::loadProject( const QString & _file_name ) emit projectLoaded(); - if( gui ) + if ( hasErrors()) { - gui->mainWindow()->showErrors( tr( "The following errors occured while loading: " ) ); + if ( Engine::hasGUI() ) + { + QMessageBox::warning( NULL, "LMMS Error report", *errorSummary(), + QMessageBox::Ok ); + } + else + { + QTextStream(stderr) << *Engine::getSong()->errorSummary() << endl; + } } m_loadingProject = false; @@ -1322,5 +1329,38 @@ void Song::removeController( Controller * _controller ) +void Song::clearErrors() +{ + m_errors->clear(); +} + +void Song::collectError( const QString error ) +{ + m_errors->append( error ); +} + + + +bool Song::hasErrors() +{ + return ( m_errors->length() > 0 ); +} + + + +QString* Song::errorSummary() +{ + QString* errors = new QString(); + + for ( int i = 0 ; i < m_errors->length() ; i++ ) + { + errors->append( m_errors->value( i ) + "\n" ); + } + + errors->prepend( "\n\n" ); + errors->prepend( tr( "The following errors occured while loading: " ) ); + + return errors; +} diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 7211bd2e1..048476a4d 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -190,8 +190,6 @@ MainWindow::MainWindow() : vbox->addWidget( w ); setCentralWidget( main_widget ); - m_errors = new QList(); - m_updateTimer.start( 1000 / 20, this ); // 20 fps if( ConfigManager::inst()->value( "ui", "enableautosave" ).toInt() ) @@ -1225,43 +1223,3 @@ void MainWindow::autoSave() QTimer::singleShot( 10*1000, this, SLOT( autoSave() ) ); } } - - - -void MainWindow::collectErrors(const QList* errors ) -{ - m_errors->append( *errors ); -} - - - -void MainWindow::collectError( const QString & error ) -{ - m_errors->append( error ); -} - - - -void MainWindow::clearErrors() -{ - m_errors->clear(); -} - - - -void MainWindow::showErrors( const QString & message ) -{ - if ( m_errors->length() != 0 ) - { QString* errors = new QString(); - for ( int i = 0 ; i < m_errors->length() ; i++ ) - { - errors->append( m_errors->value( i ) + "\n" ); - } - errors->prepend( "\n\n" ); - errors->prepend( message ); - QMessageBox::warning( NULL, - "LMMS Error report", - *errors, - QMessageBox::Ok ); - } -} From 2eb420cb9239b766fc4d8f034b1bc3bd4ba374ac Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Thu, 8 Jan 2015 00:59:51 -0200 Subject: [PATCH 109/172] Add "Assign to FX Channel" context button to track --- data/locale/ca.ts | 8 ++++++ data/locale/cs.ts | 8 ++++++ data/locale/de.ts | 8 ++++++ data/locale/en.ts | 8 ++++++ data/locale/es.ts | 8 ++++++ data/locale/fa.ts | 8 ++++++ data/locale/fr.ts | 8 ++++++ data/locale/gl.ts | 8 ++++++ data/locale/it.ts | 8 ++++++ data/locale/ja.ts | 8 ++++++ data/locale/ko.ts | 8 ++++++ data/locale/nl.ts | 8 ++++++ data/locale/pl.ts | 8 ++++++ data/locale/pt.ts | 8 ++++++ data/locale/ru.ts | 8 ++++++ data/locale/sv.ts | 8 ++++++ data/locale/zh.ts | 8 ++++++ include/FxMixer.h | 5 ++++ include/FxMixerView.h | 4 ++- include/Track.h | 3 +++ src/core/Track.cpp | 56 ++++++++++++++++++++++++++++++++++++++--- src/gui/FxMixerView.cpp | 4 ++- 22 files changed, 202 insertions(+), 6 deletions(-) diff --git a/data/locale/ca.ts b/data/locale/ca.ts index 9cd6ae404..0553f7c78 100644 --- a/data/locale/ca.ts +++ b/data/locale/ca.ts @@ -7930,6 +7930,14 @@ Latència: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/cs.ts b/data/locale/cs.ts index 6aa7e566b..2c1ba596f 100644 --- a/data/locale/cs.ts +++ b/data/locale/cs.ts @@ -7932,6 +7932,14 @@ Zpoždění %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/de.ts b/data/locale/de.ts index c193d646f..d5c525e78 100644 --- a/data/locale/de.ts +++ b/data/locale/de.ts @@ -8177,6 +8177,14 @@ Latenz: %2 ms Clear this track Diese Spur leeren + + Assign to new FX Channel + + + + FX %1: %2 + + vestigeInstrument diff --git a/data/locale/en.ts b/data/locale/en.ts index 76e145ebc..23e8eb58d 100644 --- a/data/locale/en.ts +++ b/data/locale/en.ts @@ -7969,6 +7969,14 @@ Latency: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/es.ts b/data/locale/es.ts index bd89815ea..050707a5c 100644 --- a/data/locale/es.ts +++ b/data/locale/es.ts @@ -7912,6 +7912,14 @@ Latency: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/fa.ts b/data/locale/fa.ts index e38e2d970..38be790a8 100644 --- a/data/locale/fa.ts +++ b/data/locale/fa.ts @@ -7911,6 +7911,14 @@ Latency: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/fr.ts b/data/locale/fr.ts index 6dcf0a8b8..c589c2ad0 100644 --- a/data/locale/fr.ts +++ b/data/locale/fr.ts @@ -7946,6 +7946,14 @@ Latence : %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/gl.ts b/data/locale/gl.ts index 96b19ccd6..45235e766 100644 --- a/data/locale/gl.ts +++ b/data/locale/gl.ts @@ -7945,6 +7945,14 @@ Latencia: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/it.ts b/data/locale/it.ts index a046d158a..e04e8ebdc 100644 --- a/data/locale/it.ts +++ b/data/locale/it.ts @@ -7970,6 +7970,14 @@ Latenza: %2 ms Clear this track Pulisci questa traccia + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on Accendi tutti i processi di registrazione diff --git a/data/locale/ja.ts b/data/locale/ja.ts index 49f272525..584ce118d 100644 --- a/data/locale/ja.ts +++ b/data/locale/ja.ts @@ -7947,6 +7947,14 @@ Latency: %2 ms Clear this track このトラックをクリア + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/ko.ts b/data/locale/ko.ts index aeee0b941..9565f543d 100644 --- a/data/locale/ko.ts +++ b/data/locale/ko.ts @@ -7916,6 +7916,14 @@ Latency: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/nl.ts b/data/locale/nl.ts index 1b98f5417..c6f83b30d 100644 --- a/data/locale/nl.ts +++ b/data/locale/nl.ts @@ -7915,6 +7915,14 @@ Vertraging: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/pl.ts b/data/locale/pl.ts index fec62d198..57cae23cc 100644 --- a/data/locale/pl.ts +++ b/data/locale/pl.ts @@ -7951,6 +7951,14 @@ Latencja: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/pt.ts b/data/locale/pt.ts index defb1e561..973ec3cb7 100644 --- a/data/locale/pt.ts +++ b/data/locale/pt.ts @@ -7949,6 +7949,14 @@ Latência: %2 ms Clear this track + + Assign to new FX Channel + Associar a um novo Mixer de Efeitos + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/ru.ts b/data/locale/ru.ts index ce01e3d40..a85d474e3 100644 --- a/data/locale/ru.ts +++ b/data/locale/ru.ts @@ -7984,6 +7984,14 @@ Latency: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/sv.ts b/data/locale/sv.ts index c170ed0d4..59b7f6cce 100644 --- a/data/locale/sv.ts +++ b/data/locale/sv.ts @@ -7914,6 +7914,14 @@ Latency: %2 ms Clear this track + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on diff --git a/data/locale/zh.ts b/data/locale/zh.ts index d1df46aee..57d591c6c 100644 --- a/data/locale/zh.ts +++ b/data/locale/zh.ts @@ -7924,6 +7924,14 @@ Latency: %2 ms Clear this track 清除此轨道 + + Assign to new FX Channel + + + + FX %1: %2 + + Turn all recording on 打开所有录制 diff --git a/include/FxMixer.h b/include/FxMixer.h index 7c18e019a..ddc2b7434 100644 --- a/include/FxMixer.h +++ b/include/FxMixer.h @@ -194,6 +194,11 @@ public: return m_fxChannels.size(); } + inline QVector fxChannels() const + { + return m_fxChannels; + } + FxRouteVector m_fxRoutes; private: diff --git a/include/FxMixerView.h b/include/FxMixerView.h index 0bb5796e0..66a9143b4 100644 --- a/include/FxMixerView.h +++ b/include/FxMixerView.h @@ -103,12 +103,14 @@ public: // useful for loading projects void refreshDisplay(); +public slots: + int addNewChannel(); + protected: virtual void closeEvent( QCloseEvent * _ce ); private slots: void updateFaders(); - void addNewChannel(); void toggledSolo(); private: diff --git a/include/Track.h b/include/Track.h index d09b955fc..b766b6056 100644 --- a/include/Track.h +++ b/include/Track.h @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -390,6 +391,8 @@ private slots: void recordingOn(); void recordingOff(); void clearTrack(); + void assignFxLine( int channelIndex ); + void createFxLine(); private: static QPixmap * s_grip; diff --git a/src/core/Track.cpp b/src/core/Track.cpp index ad25f979c..426676f0e 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -57,6 +57,7 @@ #include "embed.h" #include "Engine.h" #include "GuiApplication.h" +#include "FxMixerView.h" #include "gui_templates.h" #include "InstrumentTrack.h" #include "MainWindow.h" @@ -1706,6 +1707,29 @@ void TrackOperationsWidget::clearTrack() +/*! \brief Create and assign a new FX Channel for this track */ +void TrackOperationsWidget::createFxLine() +{ + int channelIndex = gui->fxMixerView()->addNewChannel(); + + Engine::fxMixer()->effectChannel( channelIndex )->m_name = m_trackView->getTrack()->name(); + + assignFxLine(channelIndex); +} + + + +/*! \brief Assign a specific FX Channel for this track */ +void TrackOperationsWidget::assignFxLine(int channelIndex) +{ + Track * track = m_trackView->getTrack(); + dynamic_cast( track )->effectChannelModel()->setValue( channelIndex ); + + gui->fxMixerView()->setCurrentFxLine( channelIndex ); +} + + + /*! \brief Remove this track from the track list * */ @@ -1740,12 +1764,36 @@ void TrackOperationsWidget::updateMenu() { to_menu->addAction( tr( "Clear this track" ), this, SLOT( clearTrack() ) ); } - - if( dynamic_cast( m_trackView ) ) + if( InstrumentTrackView * trackView = dynamic_cast( m_trackView ) ) { + int channelIndex = trackView->model()->effectChannelModel()->value(); + + FxChannel * fxChannel = Engine::fxMixer()->effectChannel( channelIndex ); + + QMenu * fxMenu = new QMenu( tr( "FX %1: %2" ).arg( channelIndex ).arg( fxChannel->m_name ), to_menu ); + QSignalMapper * fxMenuSignalMapper = new QSignalMapper(this); + + fxMenu->addAction("Assign to new FX Channel" , this, SLOT( createFxLine() ) ); + fxMenu->addSeparator(); + + + for (int i = 0; i < Engine::fxMixer()->fxChannels().size(); ++i) + { + FxChannel * currentChannel = Engine::fxMixer()->fxChannels()[i]; + + if ( currentChannel != fxChannel ) + { + QString label = tr( "FX %1: %2" ).arg( currentChannel->m_channelIndex ).arg( currentChannel->m_name ); + QAction * action = fxMenu->addAction( label, fxMenuSignalMapper, SLOT( map() ) ); + fxMenuSignalMapper->setMapping(action, currentChannel->m_channelIndex); + } + } + + to_menu->addMenu(fxMenu); + connect(fxMenuSignalMapper, SIGNAL(mapped(int)), this, SLOT(assignFxLine(int))); + to_menu->addSeparator(); - to_menu->addMenu( dynamic_cast( - m_trackView )->midiMenu() ); + to_menu->addMenu( trackView->midiMenu() ); } if( dynamic_cast( m_trackView ) ) { diff --git a/src/gui/FxMixerView.cpp b/src/gui/FxMixerView.cpp index 2267cbe8e..141a37619 100644 --- a/src/gui/FxMixerView.cpp +++ b/src/gui/FxMixerView.cpp @@ -172,7 +172,7 @@ FxMixerView::~FxMixerView() -void FxMixerView::addNewChannel() +int FxMixerView::addNewChannel() { // add new fx mixer channel and redraw the form. FxMixer * mix = Engine::fxMixer(); @@ -186,6 +186,8 @@ void FxMixerView::addNewChannel() updateFxLine(newChannelIndex); updateMaxChannelSelector(); + + return newChannelIndex; } From f0b2d8b0aff0dbea89d222fb2fa3c1b4a9b7224e Mon Sep 17 00:00:00 2001 From: Amadeus Folego Date: Tue, 13 Jan 2015 01:51:27 -0200 Subject: [PATCH 110/172] Fix export crashes adding gui checks --- src/core/Song.cpp | 15 ++++++++------- src/tracks/Pattern.cpp | 2 +- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/core/Song.cpp b/src/core/Song.cpp index 4c62a1062..3dfa1fbd0 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -759,15 +759,16 @@ void Song::clearProject() Engine::mixer()->lock(); - if( gui->getBBEditor() ) + + if( gui && gui->getBBEditor() ) { gui->getBBEditor()->trackContainerView()->clearAllTracks(); } - if( gui->songEditor() ) + if( gui && gui->songEditor() ) { gui->songEditor()->m_editor->clearAllTracks(); } - if( gui->fxMixerView() ) + if( gui && gui->fxMixerView() ) { gui->fxMixerView()->clear(); } @@ -777,12 +778,12 @@ void Song::clearProject() Engine::fxMixer()->clear(); - if( gui->automationEditor() ) + if( gui && gui->automationEditor() ) { gui->automationEditor()->setCurrentPattern( NULL ); } - if( gui->pianoRoll() ) + if( gui && gui->pianoRoll() ) { gui->pianoRoll()->reset(); } @@ -800,7 +801,7 @@ void Song::clearProject() Engine::mixer()->unlock(); - if( gui->getProjectNotes() ) + if( gui && gui->getProjectNotes() ) { gui->getProjectNotes()->clear(); } @@ -1044,7 +1045,7 @@ void Song::loadProject( const QString & _file_name ) m_loadingProject = false; m_modified = false; - if( gui->mainWindow() ) + if( gui && gui->mainWindow() ) { gui->mainWindow()->resetWindowTitle(); } diff --git a/src/tracks/Pattern.cpp b/src/tracks/Pattern.cpp index c36418eef..10ce2bca1 100644 --- a/src/tracks/Pattern.cpp +++ b/src/tracks/Pattern.cpp @@ -585,7 +585,7 @@ void Pattern::updateBBTrack() Engine::getBBTrackContainer()->updateBBTrack( this ); } - if( gui->pianoRoll() && gui->pianoRoll()->currentPattern() == this ) + if( gui && gui->pianoRoll() && gui->pianoRoll()->currentPattern() == this ) { gui->pianoRoll()->update(); } From 377cf68ee773173e3b8b59ad5aa2a2a5e8f6d432 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Mon, 12 Jan 2015 23:13:11 -0500 Subject: [PATCH 111/172] Make QMenu::separator visible. Fixes #1615 --- data/themes/default/style.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/themes/default/style.css b/data/themes/default/style.css index 03d9212fa..f54b63589 100644 --- a/data/themes/default/style.css +++ b/data/themes/default/style.css @@ -68,7 +68,7 @@ QMenu { QMenu::separator { height: 1px; - background: #c9c9c9; + background: #8d8d8d; margin-left: 5px; margin-right: 5px; } From 4107572115a28ffc37a1fd53584ba708d36b481c Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Sun, 11 Jan 2015 14:44:40 -0800 Subject: [PATCH 112/172] Put on one line what comfortably fits into 80 chars. --- src/gui/editors/PianoRoll.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index b1b682bca..c9ff4d975 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -263,28 +263,23 @@ PianoRoll::PianoRoll() : } if( s_toolDraw == NULL ) { - s_toolDraw = new QPixmap( embed::getIconPixmap( - "edit_draw" ) ); + s_toolDraw = new QPixmap( embed::getIconPixmap( "edit_draw" ) ); } if( s_toolErase == NULL ) { - s_toolErase= new QPixmap( embed::getIconPixmap( - "edit_erase" ) ); + s_toolErase= new QPixmap( embed::getIconPixmap( "edit_erase" ) ); } if( s_toolSelect == NULL ) { - s_toolSelect = new QPixmap( embed::getIconPixmap( - "edit_select" ) ); + s_toolSelect = new QPixmap( embed::getIconPixmap( "edit_select" ) ); } if( s_toolMove == NULL ) { - s_toolMove = new QPixmap( embed::getIconPixmap( - "edit_move" ) ); + s_toolMove = new QPixmap( embed::getIconPixmap( "edit_move" ) ); } if( s_toolOpen == NULL ) { - s_toolOpen = new QPixmap( embed::getIconPixmap( - "automation" ) ); + s_toolOpen = new QPixmap( embed::getIconPixmap( "automation" ) ); } // init text-float From ddfc3b3ee3f8da3ab548b2fe8672cf6c5111c106 Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Mon, 12 Jan 2015 20:33:03 -0800 Subject: [PATCH 113/172] Remove redundant switch breaks. --- include/BasicFilters.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/include/BasicFilters.h b/include/BasicFilters.h index e6dfbcbe3..58c811c6f 100644 --- a/include/BasicFilters.h +++ b/include/BasicFilters.h @@ -398,7 +398,6 @@ public: out *= 0.25f; m_last[_chnl] = _in0; return out; - break; } // 4-pole state-variant lowpass filter, adapted from Nekobee source code @@ -425,7 +424,6 @@ public: return m_type == Lowpass_SV ? m_delay4[_chnl] : m_delay3[_chnl]; - break; } case Highpass_SV: @@ -440,7 +438,6 @@ public: } return hp; - break; } case Notch_SV: @@ -460,7 +457,6 @@ public: /* mix filter output into output buffer */ return m_delay4[_chnl] + hp1; - break; } @@ -492,7 +488,6 @@ public: m_rcbp0[_chnl] = bp; } return lp; - break; } case Highpass_RC12: case Bandpass_RC12: @@ -514,7 +509,6 @@ public: m_rcbp0[_chnl] = bp; } return m_type == Highpass_RC12 ? hp : bp; - break; } case Lowpass_RC24: @@ -559,7 +553,6 @@ public: m_rchp1[_chnl] = hp; } return lp; - break; } case Highpass_RC24: case Bandpass_RC24: @@ -599,7 +592,6 @@ public: m_rcbp1[_chnl] = bp; } return m_type == Highpass_RC24 ? hp : bp; - break; } case Formantfilter: @@ -697,7 +689,6 @@ public: out += bp; } return m_type == FastFormant ? out * 2.0f : out * 0.5f; - break; } default: From 75cd1f4f3849a79132b81cda6c688060d1f244f1 Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Mon, 12 Jan 2015 21:53:49 -0800 Subject: [PATCH 114/172] More minor refactorings --- src/gui/editors/PianoRoll.cpp | 177 +++++++++++++++------------------- 1 file changed, 77 insertions(+), 100 deletions(-) diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index c9ff4d975..3e4b8595a 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -107,7 +107,7 @@ const int PR_RIGHT_MARGIN = SCROLLBAR_SIZE; const int RESIZE_AREA_WIDTH = 4; // width of line for setting volume/panning of note -const int NE_LINE_WIDTH = 3; +const int NOTE_EDIT_LINE_WIDTH = 3; // key where to start const int INITIAL_START_KEY = Key_C + Octave_4 * KeysPerOctave; @@ -186,12 +186,12 @@ PianoRoll::PianoRoll() : m_nemStr.push_back( tr( "Note Volume" ) ); m_nemStr.push_back( tr( "Note Panning" ) ); - QSignalMapper * signalMapper = new QSignalMapper( this ); + QSignalMapper *signalMapper = new QSignalMapper( this ); m_noteEditMenu = new QMenu( this ); m_noteEditMenu->clear(); - for( int i=0; isetMapping( act, i ); m_noteEditMenu->addAction( act ); @@ -202,10 +202,10 @@ PianoRoll::PianoRoll() : signalMapper = new QSignalMapper( this ); m_semiToneMarkerMenu = new QMenu( this ); - QAction * markSemitoneAction = new QAction( tr("Mark/unmark current semitone"), this ); - QAction* markScaleAction = new QAction( tr("Mark current scale"), this ); - QAction* markChordAction = new QAction( tr("Mark current chord"), this ); - QAction* unmarkAllAction = new QAction( tr("Unmark all"), this ); + QAction *markSemitoneAction = new QAction( tr("Mark/unmark current semitone"), this ); + QAction *markScaleAction = new QAction( tr("Mark current scale"), this ); + QAction *markChordAction = new QAction( tr("Mark current chord"), this ); + QAction *unmarkAllAction = new QAction( tr("Unmark all"), this ); connect( markSemitoneAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); connect( markScaleAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); @@ -360,13 +360,13 @@ PianoRoll::PianoRoll() : for( int i = 0; i < NUM_EVEN_LENGTHS; ++i ) { - m_noteLenModel.addItem( "1/" + QString::number( 1 << i ), - new PixmapLoader( "note_" + pixmaps[i] ) ); + PixmapLoader *loader = new PixmapLoader( "note_" + pixmaps[i] ); + m_noteLenModel.addItem( "1/" + QString::number( 1 << i ), loader ); } for( int i = 0; i < NUM_TRIPLET_LENGTHS; ++i ) { - m_noteLenModel.addItem( "1/" + QString::number( (1 << i) * 3 ), - new PixmapLoader( "note_" + pixmaps[i+NUM_EVEN_LENGTHS] ) ); + PixmapLoader *loader = new PixmapLoader( "note_" + pixmaps[i+NUM_EVEN_LENGTHS] ); + m_noteLenModel.addItem( "1/" + QString::number( (1 << i) * 3 ), loader ); } m_noteLenModel.setValue( 0 ); @@ -375,15 +375,14 @@ PianoRoll::PianoRoll() : this, SLOT( quantizeChanged() ) ); // Set up scale model - - const InstrumentFunctionNoteStacking::ChordTable & chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); + const auto& chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); m_scaleModel.addItem( tr("No scale") ); - for( int i = 0; i < chord_table.size(); ++i ) + for( const InstrumentFunctionNoteStacking::Chord& chord : chord_table ) { - if( chord_table[i].isScale() ) + if( chord.isScale() ) { - m_scaleModel.addItem( chord_table[i].getName() ); + m_scaleModel.addItem( chord.getName() ); } } @@ -394,11 +393,11 @@ PianoRoll::PianoRoll() : // Set up chord model m_chordModel.addItem( tr("No chord") ); - for( int i = 0; i < chord_table.size(); ++i ) + for( const InstrumentFunctionNoteStacking::Chord& chord : chord_table ) { - if( ! chord_table[i].isScale() ) + if( ! chord.isScale() ) { - m_chordModel.addItem( chord_table[i].getName() ); + m_chordModel.addItem( chord.getName() ); } } @@ -439,7 +438,7 @@ void PianoRoll::changeNoteEditMode( int i ) void PianoRoll::markSemiTone( int i ) { const int key = getKey( mapFromGlobal( m_semiToneMarkerMenu->pos() ).y() ); - const InstrumentFunctionNoteStacking::Chord * chord = 0; + const InstrumentFunctionNoteStacking::Chord * chord = nullptr; switch( static_cast( i ) ) { @@ -448,10 +447,10 @@ void PianoRoll::markSemiTone( int i ) break; case stmaMarkCurrentSemiTone: { - QList::iterator i = qFind( m_markedSemiTones.begin(), m_markedSemiTones.end(), key ); - if( i != m_markedSemiTones.end() ) + QList::iterator it = qFind( m_markedSemiTones.begin(), m_markedSemiTones.end(), key ); + if( it != m_markedSemiTones.end() ) { - m_markedSemiTones.erase( i ); + m_markedSemiTones.erase( it ); } else { @@ -485,7 +484,6 @@ void PianoRoll::markSemiTone( int i ) for( int i = first; i <= last; i++ ) { - //if( chord->hasSemiTone( std::abs( key - i ) % cap ) ) if( chord->hasSemiTone( ( i + cap - ( key % cap ) ) % cap ) ) { m_markedSemiTones.push_back( i ); @@ -546,10 +544,8 @@ void PianoRoll::setCurrentPattern( Pattern* newPattern ) { // determine the central key so that we can scroll to it int total_notes = 0; - for( NoteVector::ConstIterator it = notes.begin(); - it != notes.end(); ++it ) + for( const Note * const& note : notes ) { - Note *note = *it; if( note->length() > 0 ) { central_key += note->key(); @@ -560,12 +556,11 @@ void PianoRoll::setCurrentPattern( Pattern* newPattern ) if( total_notes > 0 ) { central_key = central_key / total_notes - - ( KeysPerOctave * NumOctaves - - m_totalKeysToScroll ) / 2; - m_startKey = tLimit( central_key, 0, - NumOctaves * KeysPerOctave ); + ( KeysPerOctave * NumOctaves - m_totalKeysToScroll ) / 2; + m_startKey = tLimit( central_key, 0, NumOctaves * KeysPerOctave ); } } + // resizeEvent() does the rest for us (scrolling, range-checking // of start-notes and so on...) resizeEvent( NULL ); @@ -714,7 +709,7 @@ inline void PianoRoll::drawDetuningInfo( QPainter & _p, Note * _n, int _x, const float level = it.value(); - int pos_y = (int)( middle_y - level * KEY_LINE_HEIGHT ); + int pos_y = middle_y - level * KEY_LINE_HEIGHT; if( old_x != 0 && old_y != 0 ) { @@ -1297,9 +1292,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) || ( edit_note && pos_ticks <= note->pos() + - NE_LINE_WIDTH * - MidiTime::ticksPerTact() / - m_ppt ) + NOTE_EDIT_LINE_WIDTH * MidiTime::ticksPerTact() / m_ppt ) ) ) { @@ -1409,7 +1402,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) if( first ) { m_moveBoundaryLeft = note->pos().getTicks(); - m_moveBoundaryRight = note->pos() + note->length(); + m_moveBoundaryRight = note->endPos(); m_moveBoundaryBottom = note->key(); m_moveBoundaryTop = note->key(); @@ -1420,8 +1413,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) m_moveBoundaryLeft = qMin( note->pos().getTicks(), (tick_t) m_moveBoundaryLeft ); - m_moveBoundaryRight = qMax( note->pos() + - note->length(), + m_moveBoundaryRight = qMax( (int) note->endPos(), m_moveBoundaryRight ); m_moveBoundaryBottom = qMin( note->key(), m_moveBoundaryBottom ); @@ -1438,16 +1430,16 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) clearSelectedNotes(); m_currentNote->setSelected( true ); m_moveBoundaryLeft = m_currentNote->pos().getTicks(); - m_moveBoundaryRight = m_currentNote->pos() + m_currentNote->length(); + m_moveBoundaryRight = m_currentNote->endPos(); m_moveBoundaryBottom = m_currentNote->key(); m_moveBoundaryTop = m_currentNote->key(); } // clicked at the "tail" of the note? - if( pos_ticks * m_ppt/MidiTime::ticksPerTact() > - ( m_currentNote->pos() + m_currentNote->length() ) * m_ppt/ MidiTime::ticksPerTact() - RESIZE_AREA_WIDTH && - m_currentNote->length() > 0 ) + if( pos_ticks * m_ppt / MidiTime::ticksPerTact() > + m_currentNote->endPos() * m_ppt / MidiTime::ticksPerTact() - RESIZE_AREA_WIDTH + && m_currentNote->length() > 0 ) { m_pattern->addJournalCheckPoint(); // then resize the note @@ -1459,7 +1451,7 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) } else { - if( !created_new_note ) + if( ! created_new_note ) { m_pattern->addJournalCheckPoint(); } @@ -1476,10 +1468,8 @@ void PianoRoll::mousePressEvent(QMouseEvent * me ) { // vector to hold new notes until we're through the loop QVector newNotes; - it = notes.begin(); - while( it != notes.end() ) + for( Note* const& note : notes ) { - Note *note = *it; if( note->selected() ) { // copy this note @@ -2258,7 +2248,7 @@ void PianoRoll::mouseMoveEvent( QMouseEvent * me ) || ( edit_note && pos_ticks <= note->pos() + - NE_LINE_WIDTH * + NOTE_EDIT_LINE_WIDTH * MidiTime::ticksPerTact() / m_ppt ) ) @@ -2931,7 +2921,7 @@ void PianoRoll::paintEvent(QPaintEvent * pe ) { color.setRgb( 0x00, 0x40, 0xC0 ); } - p.setPen( QPen( color, NE_LINE_WIDTH ) ); + p.setPen( QPen( color, NOTE_EDIT_LINE_WIDTH ) ); editHandleTop = noteEditBottom() - ( (float)( note->getVolume() - MinVolume ) ) / @@ -2950,7 +2940,7 @@ void PianoRoll::paintEvent(QPaintEvent * pe ) color.setRgb( 0x00, 0x40, 0xC0 ); } - p.setPen( QPen( color, NE_LINE_WIDTH ) ); + p.setPen( QPen( color, NOTE_EDIT_LINE_WIDTH ) ); editHandleTop = noteEditBottom() - ( (float)( note->getPanning() - PanningLeft ) ) / @@ -2972,7 +2962,7 @@ void PianoRoll::paintEvent(QPaintEvent * pe ) } } - p.setPen( QPen( noteColor(), NE_LINE_WIDTH+2 ) ); + p.setPen( QPen( noteColor(), NOTE_EDIT_LINE_WIDTH+2 ) ); p.drawPoints( editHandles ); } @@ -3814,8 +3804,9 @@ int PianoRoll::quantization() const return DefaultTicksPerTact / 16; } } - return DefaultTicksPerTact / m_quantizeModel.currentText().right( - m_quantizeModel.currentText().length() - 2 ).toInt(); + + QString text = m_quantizeModel.currentText(); + return DefaultTicksPerTact / text.right( text.length() - 2 ).toInt(); } @@ -3823,11 +3814,11 @@ int PianoRoll::quantization() const void PianoRoll::updateSemiToneMarkerMenu() { - const InstrumentFunctionNoteStacking::Chord & scale = InstrumentFunctionNoteStacking::ChordTable::getInstance() - .getScaleByName( m_scaleModel.currentText() ); - - const InstrumentFunctionNoteStacking::Chord & chord = InstrumentFunctionNoteStacking::ChordTable::getInstance() - .getChordByName( m_chordModel.currentText() ); + auto chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); + const InstrumentFunctionNoteStacking::Chord& scale = + chord_table.getScaleByName( m_scaleModel.currentText() ); + const InstrumentFunctionNoteStacking::Chord& chord = + chord_table.getChordByName( m_chordModel.currentText() ); emit semiToneMarkerMenuScaleSetEnabled( ! scale.isEmpty() ); emit semiToneMarkerMenuChordSetEnabled( ! chord.isEmpty() ); @@ -3842,8 +3833,9 @@ MidiTime PianoRoll::newNoteLen() const { return m_lenOfNewNotes; } - return DefaultTicksPerTact / m_noteLenModel.currentText().right( - m_noteLenModel.currentText().length() - 2 ).toInt(); + + QString text = m_noteLenModel.currentText(); + return DefaultTicksPerTact / text.right( text.length() - 2 ).toInt(); } @@ -3864,7 +3856,8 @@ Note * PianoRoll::noteUnderMouse() // get note-vector of current pattern const NoteVector & notes = m_pattern->notes(); - if( pos.x() <= WHITE_KEY_WIDTH || pos.x() > width() - SCROLLBAR_SIZE + if( pos.x() <= WHITE_KEY_WIDTH + || pos.x() > width() - SCROLLBAR_SIZE || pos.y() < PR_TOP_MARGIN || pos.y() > keyAreaBottom() ) { @@ -3875,42 +3868,26 @@ Note * PianoRoll::noteUnderMouse() int pos_ticks = ( pos.x() - WHITE_KEY_WIDTH ) * MidiTime::ticksPerTact() / m_ppt + m_currentPosition; - // will be our iterator in the following loop - NoteVector::ConstIterator it = notes.end() - 1; - Note *note = *it; - // loop through whole note-vector... - int i; - for( i = 0; i < notes.size(); ++i ) + for( Note* const& note : notes ) { - note = *it; // and check whether the cursor is over an // existing note - if( pos_ticks >= note->pos() && - pos_ticks <= note->endPos() && - note->key() == key_num && note->length() > 0 ) + if( pos_ticks >= note->pos() + && pos_ticks <= note->endPos() + && note->key() == key_num + && note->length() > 0 ) { - break; + return note; } - --it; } - if( i == notes.size() ) - { - return NULL; - } - - return note; + return NULL; } - - - - - PianoRollWindow::PianoRollWindow() : Editor(true), m_editor(new PianoRoll()) @@ -3942,11 +3919,11 @@ PianoRollWindow::PianoRollWindow() : tr( "Click here to stop playback of current pattern." ) ); // init edit-buttons at the top - ActionGroup* editModeGroup = new ActionGroup(this); - QAction* drawAction = editModeGroup->addAction(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); - QAction* eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); - QAction* selectAction = editModeGroup->addAction(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); - QAction* detuneAction = editModeGroup->addAction(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); + ActionGroup *editModeGroup = new ActionGroup(this); + QAction *drawAction = editModeGroup->addAction(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); + QAction *eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); + QAction *selectAction = editModeGroup->addAction(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); + QAction *detuneAction = editModeGroup->addAction(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); drawAction->setChecked( true ); @@ -3981,13 +3958,13 @@ PianoRollWindow::PianoRollWindow() : connect(editModeGroup, SIGNAL(triggered(int)), m_editor, SLOT(setEditMode(int))); // Copy + paste actions - QAction* cutAction = new QAction(embed::getIconPixmap("edit_cut"), + QAction *cutAction = new QAction(embed::getIconPixmap("edit_cut"), tr("Cut selected notes (Ctrl+X)"), this); - QAction* copyAction = new QAction(embed::getIconPixmap("edit_copy"), + QAction *copyAction = new QAction(embed::getIconPixmap("edit_copy"), tr("Copy selected notes (Ctrl+C)"), this); - QAction* pasteAction = new QAction(embed::getIconPixmap("edit_paste"), + QAction *pasteAction = new QAction(embed::getIconPixmap("edit_paste"), tr("Paste notes from clipboard (Ctrl+V)"), this); cutAction->setWhatsThis( @@ -4010,7 +3987,7 @@ PianoRollWindow::PianoRollWindow() : connect(copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedNotes())); connect(pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteNotes())); - QLabel * zoom_lbl = new QLabel( m_toolBar ); + QLabel *zoom_lbl = new QLabel( m_toolBar ); zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); m_zoomingComboBox = new ComboBox( m_toolBar ); @@ -4018,7 +3995,7 @@ PianoRollWindow::PianoRollWindow() : m_zoomingComboBox->setFixedSize( 64, 22 ); // setup quantize-stuff - QLabel * quantize_lbl = new QLabel( m_toolBar ); + QLabel *quantize_lbl = new QLabel( m_toolBar ); quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); m_quantizeComboBox = new ComboBox( m_toolBar ); @@ -4027,7 +4004,7 @@ PianoRollWindow::PianoRollWindow() : // setup note-len-stuff - QLabel * note_len_lbl = new QLabel( m_toolBar ); + QLabel *note_len_lbl = new QLabel( m_toolBar ); note_len_lbl->setPixmap( embed::getIconPixmap( "note" ) ); @@ -4036,7 +4013,7 @@ PianoRollWindow::PianoRollWindow() : m_noteLenComboBox->setFixedSize( 105, 22 ); // setup scale-stuff - QLabel * scale_lbl = new QLabel( m_toolBar ); + QLabel *scale_lbl = new QLabel( m_toolBar ); scale_lbl->setPixmap( embed::getIconPixmap( "scale" ) ); m_scaleComboBox = new ComboBox( m_toolBar ); @@ -4044,7 +4021,7 @@ PianoRollWindow::PianoRollWindow() : m_scaleComboBox->setFixedSize( 105, 22 ); // setup chord-stuff - QLabel * chord_lbl = new QLabel( m_toolBar ); + QLabel *chord_lbl = new QLabel( m_toolBar ); chord_lbl->setPixmap( embed::getIconPixmap( "chord" ) ); m_chordComboBox = new ComboBox( m_toolBar ); @@ -4145,12 +4122,12 @@ PianoRollWindow::PianoRollWindow() : connect(m_editor, SIGNAL(currentPatternChanged()), this, SIGNAL(currentPatternChanged())); } -const Pattern*PianoRollWindow::currentPattern() const +const Pattern* PianoRollWindow::currentPattern() const { return m_editor->currentPattern(); } -void PianoRollWindow::setCurrentPattern(Pattern* pattern) +void PianoRollWindow::setCurrentPattern(Pattern *pattern) { m_editor->setCurrentPattern(pattern); } @@ -4208,5 +4185,5 @@ void PianoRollWindow::loadSettings(const QDomElement & de) QSize PianoRollWindow::sizeHint() const { - return {m_toolBar->sizeHint().width()+10, INITIAL_PIANOROLL_HEIGHT}; + return {m_toolBar->sizeHint().width() + 10, INITIAL_PIANOROLL_HEIGHT}; } From 293bb931734f2fb804c9c0c424ee4c6c3f359632 Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Mon, 12 Jan 2015 22:01:56 -0800 Subject: [PATCH 115/172] Match code style of other declaration further down --- src/gui/editors/PianoRoll.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index 3e4b8595a..f1244dc88 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -3814,7 +3814,7 @@ int PianoRoll::quantization() const void PianoRoll::updateSemiToneMarkerMenu() { - auto chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); + const auto& chord_table = InstrumentFunctionNoteStacking::ChordTable::getInstance(); const InstrumentFunctionNoteStacking::Chord& scale = chord_table.getScaleByName( m_scaleModel.currentText() ); const InstrumentFunctionNoteStacking::Chord& chord = From 85fb0aca82379b51287855f770300d2eb63e5c8d Mon Sep 17 00:00:00 2001 From: Locale updater <> Date: Tue, 13 Jan 2015 16:06:36 +0100 Subject: [PATCH 116/172] Update locales --- data/locale/ca.ts | 2904 ++++++++++++++++++++++++++++--------------- data/locale/cs.ts | 2936 ++++++++++++++++++++++++++++--------------- data/locale/de.ts | 2754 ++++++++++++++++++++++++++--------------- data/locale/en.ts | 2871 +++++++++++++++++++++++++++--------------- data/locale/es.ts | 2899 ++++++++++++++++++++++++++++--------------- data/locale/fa.ts | 2899 ++++++++++++++++++++++++++++--------------- data/locale/fr.ts | 3002 +++++++++++++++++++++++++++++--------------- data/locale/gl.ts | 2936 ++++++++++++++++++++++++++++--------------- data/locale/it.ts | 3020 +++++++++++++++++++++++++++++---------------- data/locale/ja.ts | 2992 +++++++++++++++++++++++++++++--------------- data/locale/ko.ts | 2921 ++++++++++++++++++++++++++++--------------- data/locale/nl.ts | 2902 ++++++++++++++++++++++++++++--------------- data/locale/pl.ts | 2970 +++++++++++++++++++++++++++++--------------- data/locale/pt.ts | 3006 ++++++++++++++++++++++++++++---------------- data/locale/ru.ts | 3014 ++++++++++++++++++++++++++++---------------- data/locale/sv.ts | 2907 ++++++++++++++++++++++++++++--------------- data/locale/zh.ts | 2958 +++++++++++++++++++++++++++++--------------- 17 files changed, 32843 insertions(+), 17048 deletions(-) diff --git a/data/locale/ca.ts b/data/locale/ca.ts index 0553f7c78..f59930462 100644 --- a/data/locale/ca.ts +++ b/data/locale/ca.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME NOM-CLIENT @@ -324,18 +325,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + Per favor, obre un patró d'automatització amb el menú contextual d'un control! + + + Values copied + Valors copiats + + + All selected values were copied to the clipboard. + Tots els valors seleccionats s'han copiat al portapapers. + + + + AutomationEditorWindow Play/pause current pattern (Space) Reprodueix/pausa el patró actual (Espai) - - Stop playing of current pattern (Space) - Atura la reproducció del patró actual (Espai) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + + Stop playing of current pattern (Space) + Atura la reproducció del patró actual (Espai) + Click here if you want to stop playing of the current pattern. @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) Mode esborrar (Maj+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - - Cut selected values (Ctrl+X) - Talla els valors seleccionats (Ctrl+X) - - - Copy selected values (Ctrl+C) - Copia els valors seleccionats (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Enganxa valors des del portapapers (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the values from the clipboard will be pasted at the first visible measure. - - - - Automation Editor - no pattern - Editor d'Automatització - sense patró - - - Automation Editor - %1 - Editor d'Automatització - %1 - - - Please open an automation pattern with the context menu of a control! - Per favor, obre un patró d'automatització amb el menú contextual d'un control! - - - Values copied - Valors copiats - - - All selected values were copied to the clipboard. - Tots els valors seleccionats s'han copiat al portapapers. - Discrete progression @@ -413,7 +401,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -429,13 +421,41 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) + Talla els valors seleccionats (Ctrl+X) + + + Copy selected values (Ctrl+C) + Copia els valors seleccionats (Ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the values from the clipboard will be pasted at the first visible measure. + + + + Tension: + + + + Automation Editor - no pattern + Editor d'Automatització - sense patró + + + Automation Editor - %1 + Editor d'Automatització - %1 + AutomationPattern @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp + + BBEditor + + Beat+Bassline Editor + Editor de Ritme Base + + + Play/pause current beat/bassline (Space) + Reprodueix/pausa el ritme base actual (Espai) + + + Stop playback of current beat/bassline (Space) + + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + + + + Click here to stop playing of current beat/bassline. + + + + Add beat/bassline + + + + Add automation-track + Afegeix pista d'automatització + + + Remove steps + Elimina passos + + + Add steps + Afegeix passos + + + + BBTCOView + + Open in Beat+Bassline-Editor + Obre a l'Editor de Ritme Base + + + Reset name + Restaura nom + + + Change name + Canvia nom + + + Change color + Canvia color + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Ritme base %1 + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp Proporció + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + GUANY + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Taxa + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &Ajuda + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin &Treu aquest connector + + + CrossoverEQControlDialog - &Help - &Ajuda + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Taxa + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -907,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin &Treu aquest connector - - &Help - &Ajuda - EnvelopeAndLfoParameters @@ -1150,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Guany + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Freqüència: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1288,6 +1898,43 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + No es pot obrir el fitxer + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + No es pot obrir el fitxer %1 per a escriure. +Per favor, assegura't que tens permís d'escriptura per al fitxer i el directori que el conté i torna-ho a provar! + + + Export project to %1 + Exporta projecte a %1 + + + Error + Error + + + Error while determining file-encoder device. Please try to choose a different output format. + Error determinant el dispositiu de codificació de fitxer. Per favor, prova amb un format de sortida diferent. + + + Rendering: %1% + Representant: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Per favor, introdueix un nou valor entre %1 i %2: + FileBrowser @@ -1323,6 +1970,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + + + + White Noise Amount: + + + FxLine @@ -1356,8 +2073,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - &Ajuda + Remove &unused channels + @@ -1385,9 +2102,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer Mesclador FX - - - FxMixerView::FxChannelView FX Fader %1 @@ -1400,6 +2114,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel + + Solo + Solo + + + Solo FX channel + + FxRoute @@ -1408,6 +2130,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + Banc + + + Patch + Pedaç + + + Gain + Guany + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Escull el pedaç + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Guany + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1999,6 +2783,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2097,6 +2892,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2187,6 +3010,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2321,6 +3148,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + MISC + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Per favor, introdueix un nou valor entre -96,0 dBV i 6,0 dBV: + + + Please enter a new value between %1 and %2: + Per favor, introdueix un nou valor entre %1 i %2: + LadspaControl @@ -2357,10 +3207,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. @@ -2482,10 +3328,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2499,6 +3341,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2520,10 +3366,6 @@ Please make sure you have write-access to the file and try again. No s'ha pogut desar el fitxer de configuració %1. Per favor, comprova que tens permís d'escriptura per a aquest fitxer i torna-ho a provar. - - &Project - &Projecte - &New &Nou @@ -2568,10 +3410,6 @@ Per favor, comprova que tens permís d'escriptura per a aquest fitxer i tor &Help &Ajuda - - Online help - Ajuda en línia - Help Ajuda @@ -2676,14 +3514,6 @@ Per favor, comprova que tens permís d'escriptura per a aquest fitxer i tor The current project was modified since last saving. Do you want to save it now? El projecte actual ha estat modificat des del darrer desament. Vols desar-lo ara? - - Open project - Obre projecte - - - Save project - Desa projecte - Help not available Ajuda no disponible @@ -2694,38 +3524,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Actualment no hi ha ajuda disponible a LMMS. Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2734,14 +3532,6 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS.Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2754,10 +3544,6 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS.Volumes - - &Recently opened projects - - Undo @@ -2770,6 +3556,62 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS.LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2805,7 +3647,7 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE DISPOSITIU @@ -3273,6 +4115,98 @@ Per favor, visita http://lmms.sf.net/wiki per a documentació sobre LMMS.Sub3-LFO2 + + Sine wave + Ona sinusoïdal + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + Ona triangular + + + Saw wave + Ona de serra + + + Ramp wave + + + + Square wave + Ona quadrada + + + Moog saw wave + + + + Abs. sine wave + + + + Random + + + + Random smooth + + MonstroView @@ -3445,6 +4379,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3723,6 +4692,14 @@ usa la roda del ratolí per a ajustar el volum d'un pas DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3754,29 +4731,13 @@ usa la roda del ratolí per a ajustar el volum d'un pas Amount Multiplicator + + Treshold + + PianoRoll - - Cut selected notes (Ctrl+X) - Talla les notes seleccionades (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Copia les notes seleccionades (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Enganxa notes des del portapapers (Ctrl+V) - - - Play/pause current pattern (Space) - Reprodueix/pausa el patró actual (Espai) - - - Stop playing of current pattern (Space) - Atura la reproducció del patró actual (Espai) - Piano-Roll - no pattern Rotlle de Piano - sense patró @@ -3789,58 +4750,10 @@ usa la roda del ratolí per a ajustar el volum d'un pas Piano-Roll - %1 Rotlle de Piano - %1 - - Record notes from MIDI-device/channel-piano - Enregistra notes des d'un dispositiu MIDI o piano de canal - Last note Darrera nota - - Draw mode (Shift+D) - Mode dibuixar (Maj+D) - - - Erase mode (Shift+E) - Mode esborrar (Maj+E) - - - Select mode (Shift+S) - Mode seleccionar (Maj+S) - - - Record notes from MIDI-device/channel-piano while playing song or BB track - Enregistra notes des d'un dispositiu MIDI o piano de canal mentre es reprodueix la cançó o pista RB - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock @@ -3853,26 +4766,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3897,26 +4790,6 @@ usa la roda del ratolí per a ajustar el volum d'un pas No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3938,6 +4811,117 @@ usa la roda del ratolí per a ajustar el volum d'un pas Per favor, introdueix un nou valor entre %1 i %2: + + PianoRollWindow + + Play/pause current pattern (Space) + Reprodueix/pausa el patró actual (Espai) + + + Record notes from MIDI-device/channel-piano + Enregistra notes des d'un dispositiu MIDI o piano de canal + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Enregistra notes des d'un dispositiu MIDI o piano de canal mentre es reprodueix la cançó o pista RB + + + Stop playing of current pattern (Space) + Atura la reproducció del patró actual (Espai) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + Mode dibuixar (Maj+D) + + + Erase mode (Shift+E) + Mode esborrar (Maj+E) + + + Select mode (Shift+S) + Mode seleccionar (Maj+S) + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + Talla les notes seleccionades (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Copia les notes seleccionades (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Enganxa notes des del portapapers (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3969,6 +4953,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + Connectors d'instrument + + + Instrument browser + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + ProjectNotes + + Project notes + Notes del projecte + + + Put down your project notes here. + Escriu aquí les teves notes del projecte. + + + Edit Actions + Accions d'Editar + + + &Undo + &Desfés + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Refés + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Copia + + + Ctrl+C + Ctrl+C + + + Cu&t + &Talla + + + Ctrl+X + Ctrl+X + + + &Paste + &Enganxa + + + Ctrl+V + Ctrl+V + + + Format Actions + Accions de Format + + + &Bold + &Negreta + + + Ctrl+B + Ctrl+B + + + &Italic + Curs&iva + + + Ctrl+I + Ctrl+I + + + &Underline + &Subratllat + + + Ctrl+U + Ctrl+U + + + &Left + &Esquerra + + + Ctrl+L + Ctrl+L + + + C&enter + Cen&tre + + + Ctrl+E + Ctrl+E + + + &Right + &Dreta + + + Ctrl+R + Ctrl+R + + + &Justify + &Justifica + + + Ctrl+J + Ctrl+J + + + &Color... + &Color... + + ProjectRenderer @@ -4119,6 +5237,13 @@ Reason: "%2" + + RenameDialog + + Rename... + Canvia el nom... + + SampleBuffer @@ -4207,6 +5332,10 @@ Reason: "%2" Volume Volum + + Panning + Panorama + SampleTrackView @@ -4222,13 +5351,309 @@ Reason: "%2" VOL VOL + + Panning + Panorama + + + Panning: + Panorama: + + + PAN + PAN + + + + SetupDialog + + Setup LMMS + Configuració de LMMS + + + General settings + Configuració general + + + BUFFER SIZE + MIDA DE MEMÒRIA INTERMÈDIA + + + Reset to default-value + Restaura al valor per defecte + + + MISC + MISC + + + Enable tooltips + Activa els avisos d'eina + + + Show restart warning after changing settings + Mostra l'avís de reinici després de canviar la configuració + + + Display volume as dBV + Mostra el volum en dBV + + + Compress project files per default + Comprimeix per defecte els fitxers de projecte + + + One instrument track window mode + + + + HQ-mode for output audio-device + Mode AQ per al dispositiu de sortida d'àudio + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + + + + LMMS working directory + Directori de treball de LMMS + + + VST-plugin directory + Directori de connectors VST + + + Artwork directory + Directori de material gràfic + + + Background artwork + + + + FL Studio installation directory + Directori d'instal·lació de FL Studio + + + LADSPA plugin paths + + + + STK rawwave directory + Directori d'ones crues STK + + + Default Soundfont File + + + + Performance settings + Configuració de rendiment + + + UI effects vs. performance + Efectes UI vs. rendiment + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + Configuració d'àudio + + + AUDIO INTERFACE + INTERFÍCIE D'ÀUDIO + + + MIDI settings + Configuració MIDI + + + MIDI INTERFACE + INTERFÍCIE MIDI + + + OK + D'acord + + + Cancel + Cancel·la + + + Restart LMMS + Reinicia LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Per favor, tingues en compte que la majoria de canvis no s'aplicaran fins que reiniciïs LMMS! + + + Frames: %1 +Latency: %2 ms + Marcs: %1 +Latència: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Aquí pots configurar la mida de la memòria intermèdia interna usada per LMMS. Els valors més petits donen menor latència però també poden causar so inservible o baix rendiment, especialment a ordinadors antics o sistemes amb un nucli sense temps real. + + + Choose LMMS working directory + Escull el directori de treball de LMMS + + + Choose your VST-plugin directory + Escull el teu directori de connectors VST + + + Choose artwork-theme directory + Escull el directori de material gràfic + + + Choose FL Studio installation directory + Escull el directori d'instal·lació de FL Studio + + + Choose LADSPA plugin directory + Escull un directori de connectors LADSPA + + + Choose STK rawwave directory + Escull el directori d'ones crues STK + + + Choose default SoundFont + + + + Choose background artwork + + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Aquí pots seleccionar la teva interfície d'àudio preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, JACK, OSS i altres. Abaix pots veure una caixa amb controls per a configurar la interfície d'àudio seleccionada. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Aquí pots seleccionar la teva interfície MIDI preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, OSS i més. Abaix pots veure una caixa amb controls per a configurar la interfície MIDI seleccionada. + + + + Song + + Tempo + Tempo + + + Master volume + Volum mestre + + + Master pitch + To mestre + + + Project saved + Projecte desat + + + The project %1 is now saved. + El projecte %1 està desat. + + + Project NOT saved. + Projecte NO desat. + + + The project %1 was not saved! + El projecte %1 no està desat! + + + Import file + Importa fitxer + + + MIDI sequences + + + + FL Studio projects + + + + Hydrogen projects + + + + All file types + + + + Empty project + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + Select directory for writing exported tracks... + + + + untitled + sense títol + + + Select file for project-export... + Selecciona fitxer per a exportar projecte... + + + The following errors occured while loading: + + SongEditor - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Pica aquí si vols aturar la reproducció de la cançó. El marcador de posició de cançó serà col·locat a l'inici de la cançó. - Could not open file No es pot obrir el fitxer @@ -4237,50 +5662,6 @@ Reason: "%2" Could not write file No es pot escriure el fitxer - - Song-Editor - Editor de Cançó - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Pica aquí si vols reproduir la cançó sencera. La reproducció començarà al marcador de posició de cançó (verd). També pots moure'l mentre es reprodueix. - - - Play song (Space) - Reprodueix cançó (Espai) - - - Stop song (Space) - Atura cançó (Espai) - - - Add beat/bassline - Afegeix ritme base - - - Add sample-track - Afegeix pista de mostra - - - Draw mode - Mode dibuixar - - - Edit mode (select and move) - Mode editar (selecciona i mou) - - - Add automation-track - Afegeix pista d'automatització - - - Record samples from Audio-device - - - - Record samples from Audio-device while playing song or BB track - - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4343,6 +5724,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + Editor de Cançó + + + Play song (Space) + Reprodueix cançó (Espai) + + + Record samples from Audio-device + + + + Record samples from Audio-device while playing song or BB track + + + + Stop song (Space) + Atura cançó (Espai) + + + Add beat/bassline + + + + Add sample-track + Afegeix pista de mostra + + + Add automation-track + Afegeix pista d'automatització + + + Draw mode + Mode dibuixar + + + Edit mode (select and move) + Mode editar (selecciona i mou) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Pica aquí si vols reproduir la cançó sencera. La reproducció començarà al marcador de posició de cançó (verd). També pots moure'l mentre es reprodueix. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Pica aquí si vols aturar la reproducció de la cançó. El marcador de posició de cançó serà col·locat a l'inici de la cançó. + + SpectrumAnalyzerControlDialog @@ -4369,6 +5801,13 @@ Reason: "%2" Mode del canal + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4411,10 +5850,6 @@ Reason: "%2" Custom... Personalitzat... - - &Help - &Ajuda - Custom Personalitzat @@ -4455,6 +5890,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + Activa/desactiva autodesplaçament + + + Enable/disable loop-points + Activa/desactiva punts de bucle + + + After stopping go back to begin + Després d'aturar torna al començament + + + After stopping go back to position at which playing was started + Després d'aturar torna a la posició on va començar la reproducció + + + After stopping keep position + Després d'aturar manté la posició + + + Hint + Consell + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + + + + Solo + Solo + + TrackContainer @@ -4498,6 +5979,107 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct Important fitxer FLP... + + TrackContentObject + + Muted + + + + + TrackContentObjectView + + Current position + Posició actual + + + Hint + Consell + + + Press <Ctrl> and drag to make a copy. + Pitja <Ctrl> i arrossega per a fer una còpia. + + + Current length + Longitud actual + + + Press <Ctrl> for free resizing. + Pitja <Ctrl> per a redimensionar lliurement. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 a %5:%6) + + + Delete (middle mousebutton) + Esborra (botó del mig del ratolí) + + + Cut + Talla + + + Copy + Copia + + + Paste + Enganxa + + + Mute/unmute (<Ctrl> + middle click) + Apaga/encén (<Ctrl> + clic del mig) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Pitja <Ctrl> quan piquis el control de moviment per a iniciar una nova acció d'arrossegar i amollar. + + + Actions for this track + Accions per a aquesta pista + + + Mute + Apaga + + + Solo + Solo + + + Mute this track + Apaga aquesta pista + + + Clone this track + Clona aquesta pista + + + Remove this track + Elimina aquesta pista + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4641,17 +6223,6 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4754,6 +6325,17 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct + + VisualizationWidget + + click to enable/disable visualization of master-output + pica per a activar/desactivar la visualització de la sortida mestra + + + Click to enable + + + VstEffectControlDialog @@ -4860,11 +6442,7 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5270,77 +6848,8 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct Sinc - - - bbEditor - Play/pause current beat/bassline (Space) - Reprodueix/pausa el ritme base actual (Espai) - - - Beat+Bassline Editor - Editor de Ritme Base - - - Add beat/bassline - Afegeix ritme de base - - - Add automation-track - Afegeix pista d'automatització - - - Stop playback of current beat/bassline (Space) - - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - - - - Click here to stop playing of current beat/bassline. - - - - Remove steps - Elimina passos - - - Add steps - Afegeix passos - - - - bbTCOView - - Open in Beat+Bassline-Editor - Obre a l'Editor de Ritme Base - - - Reset name - Restaura nom - - - Change name - Canvia nom - - - Change color - Canvia color - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - Ritme base %1 - - - Clone of %1 + Sample not found: %1 @@ -5540,42 +7049,6 @@ Per favor, assegura't que tens permís de lectura per al fitxer i el direct - - exportProjectDialog - - Could not open file - No es pot obrir el fitxer - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - No es pot obrir el fitxer %1 per a escriure. -Per favor, assegura't que tens permís d'escriptura per al fitxer i el directori que el conté i torna-ho a provar! - - - Error - Error - - - Error while determining file-encoder device. Please try to choose a different output format. - Error determinant el dispositiu de codificació de fitxer. Per favor, prova amb un format de sortida diferent. - - - Rendering: %1% - Representant: %1% - - - Export project to %1 - Exporta projecte a %1 - - - - fader - - Please enter a new value between %1 and %2: - Per favor, introdueix un nou valor entre %1 i %2: - - graphModel @@ -5677,21 +7150,6 @@ Per favor, assegura't que tens permís d'escriptura per al fitxer i el - - knob - - &Help - &Ajuda - - - Please enter a new value between %1 and %2: - Per favor, introdueix un nou valor entre %1 i %2: - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Per favor, introdueix un nou valor entre -96,0 dBV i 6,0 dBV: - - ladspaBrowserView @@ -6425,13 +7883,6 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports. - - nineButtonSelector - - &Help - &Ajuda - - opl2instrument @@ -6885,10 +8336,6 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports.no description sense descripció - - Instrument plugins - Connectors d'instrument - Vibrating string modeler Modelador de corda vibrant @@ -6941,14 +8388,6 @@ Fent doble clic a qualsevol connector mostrarà informació sobre els ports.Plugin for controlling knobs with sound peaks Connector per a controlar rodes amb pics de so - - Instrument browser - - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7038,335 +8477,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Put down your project notes here. - Escriu aquí les teves notes del projecte. + Player for GIG files + - Project notes - Notes del projecte + A multitap echo delay plugin + - Edit Actions - Accions d'Editar + A native flanger plugin + - &Undo - &Desfés + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - &Refés + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &Copia - - - Ctrl+C - Ctrl+C - - - Cu&t - &Talla - - - Ctrl+X - Ctrl+X - - - &Paste - &Enganxa - - - Ctrl+V - Ctrl+V - - - Format Actions - Accions de Format - - - &Bold - &Negreta - - - Ctrl+B - Ctrl+B - - - &Italic - Curs&iva - - - Ctrl+I - Ctrl+I - - - &Underline - &Subratllat - - - Ctrl+U - Ctrl+U - - - &Left - &Esquerra - - - Ctrl+L - Ctrl+L - - - C&enter - Cen&tre - - - Ctrl+E - Ctrl+E - - - &Right - &Dreta - - - Ctrl+R - Ctrl+R - - - &Justify - &Justifica - - - Ctrl+J - Ctrl+J - - - &Color... - &Color... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Canvia el nom... - - - - setupDialog - - Setup LMMS - Configuració de LMMS - - - General settings - Configuració general - - - BUFFER SIZE - MIDA DE MEMÒRIA INTERMÈDIA - - - Reset to default-value - Restaura al valor per defecte - - - MISC - MISC - - - Display volume as dBV - Mostra el volum en dBV - - - LMMS working directory - Directori de treball de LMMS - - - VST-plugin directory - Directori de connectors VST - - - Artwork directory - Directori de material gràfic - - - FL Studio installation directory - Directori d'instal·lació de FL Studio - - - Performance settings - Configuració de rendiment - - - UI effects vs. performance - Efectes UI vs. rendiment - - - Audio settings - Configuració d'àudio - - - AUDIO INTERFACE - INTERFÍCIE D'ÀUDIO - - - MIDI settings - Configuració MIDI - - - MIDI INTERFACE - INTERFÍCIE MIDI - - - OK - D'acord - - - Cancel - Cancel·la - - - Restart LMMS - Reinicia LMMS - - - Please note that most changes won't take effect until you restart LMMS! - Per favor, tingues en compte que la majoria de canvis no s'aplicaran fins que reiniciïs LMMS! - - - Frames: %1 -Latency: %2 ms - Marcs: %1 -Latència: %2 ms - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Aquí pots configurar la mida de la memòria intermèdia interna usada per LMMS. Els valors més petits donen menor latència però també poden causar so inservible o baix rendiment, especialment a ordinadors antics o sistemes amb un nucli sense temps real. - - - Choose LMMS working directory - Escull el directori de treball de LMMS - - - Choose your VST-plugin directory - Escull el teu directori de connectors VST - - - Choose artwork-theme directory - Escull el directori de material gràfic - - - Choose FL Studio installation directory - Escull el directori d'instal·lació de FL Studio - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Aquí pots seleccionar la teva interfície d'àudio preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, JACK, OSS i altres. Abaix pots veure una caixa amb controls per a configurar la interfície d'àudio seleccionada. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Aquí pots seleccionar la teva interfície MIDI preferida. Depenent de la configuració del teu sistema durant el temps de compilació, pots escollir entre ALSA, OSS i més. Abaix pots veure una caixa amb controls per a configurar la interfície MIDI seleccionada. - - - STK rawwave directory - Directori d'ones crues STK - - - Choose LADSPA plugin directory - Escull un directori de connectors LADSPA - - - Choose STK rawwave directory - Escull el directori d'ones crues STK - - - Enable tooltips - Activa els avisos d'eina - - - Show restart warning after changing settings - Mostra l'avís de reinici després de canviar la configuració - - - Compress project files per default - Comprimeix per defecte els fitxers de projecte - - - HQ-mode for output audio-device - Mode AQ per al dispositiu de sortida d'àudio - - - Paths + JACK (JACK Audio Connection Kit) - LADSPA plugin paths + OSS Raw-MIDI (Open Sound System) - Default Soundfont File + SDL (Simple DirectMedia Layer) - Background artwork + PulseAudio (bad latency!) - Choose default SoundFont + Dummy (no MIDI support) - Choose background artwork + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - One instrument track window mode + PortAudio - Compact track buttons + Dummy (no sound output) - Sync VST plugins to host playback + ALSA (Advanced Linux Sound Architecture) - Enable note labels in piano roll + OSS (Open Sound System) - Enable waveform display by default + WinMM MIDI - Smooth scroll in Song Editor - - - - Enable auto save feature - - - - Show playback cursor in AudioFileProcessor - - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7424,6 +8611,10 @@ Latència: %2 ms Chorus Depth Profunditat de Cor + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7669,77 +8860,6 @@ Latència: %2 ms - - song - - Project saved - Projecte desat - - - The project %1 is now saved. - El projecte %1 està desat. - - - Project NOT saved. - Projecte NO desat. - - - The project %1 was not saved! - El projecte %1 no està desat! - - - Import file - Importa fitxer - - - untitled - sense títol - - - Select file for project-export... - Selecciona fitxer per a exportar projecte... - - - Tempo - Tempo - - - Master volume - Volum mestre - - - Master pitch - To mestre - - - Empty project - - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - - - - MIDI sequences - - - - FL Studio projects - - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7796,157 +8916,6 @@ Latència: %2 ms Dreta a Dreta - - timeLine - - Enable/disable auto-scrolling - Activa/desactiva autodesplaçament - - - Enable/disable loop-points - Activa/desactiva punts de bucle - - - After stopping go back to begin - Després d'aturar torna al començament - - - After stopping go back to position at which playing was started - Després d'aturar torna a la posició on va començar la reproducció - - - After stopping keep position - Després d'aturar manté la posició - - - Hint - Consell - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - - - - Solo - Solo - - - - trackContentObject - - Muted - - - - - trackContentObjectView - - Current position - Posició actual - - - Hint - Consell - - - Press <Ctrl> and drag to make a copy. - Pitja <Ctrl> i arrossega per a fer una còpia. - - - Current length - Longitud actual - - - Press <Ctrl> for free resizing. - Pitja <Ctrl> per a redimensionar lliurement. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 a %5:%6) - - - Delete (middle mousebutton) - Esborra (botó del mig del ratolí) - - - Cut - Talla - - - Copy - Copia - - - Paste - Enganxa - - - Mute/unmute (<Ctrl> + middle click) - Apaga/encén (<Ctrl> + clic del mig) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Pitja <Ctrl> quan piquis el control de moviment per a iniciar una nova acció d'arrossegar i amollar. - - - Clone this track - Clona aquesta pista - - - Remove this track - Elimina aquesta pista - - - Actions for this track - Accions per a aquesta pista - - - Mute - Apaga - - - Mute this track - Apaga aquesta pista - - - Solo - Solo - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7957,16 +8926,6 @@ Latència: %2 ms Please wait while loading VST-plugin... Per favor, espera mentre es carrega el connector VST... - - Failed loading VST-plugin - Ha fallat la càrrega del connector VST - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - El connector VST %1 no s'ha pogut carregar per alguna raó. -Si funciona amb altre programari VST sota Linux, per favor contacta amb un desenvolupador de LMMS! - vibed @@ -8193,10 +9152,6 @@ El LED a la cantonada dreta baixa de l'editor de forma d'ona determina Click here to normalize waveform. Pica aquí per a normalitzar la forma d'ona. - - &Help - &Ajuda - Use a sine-wave for current oscillator. @@ -8222,17 +9177,6 @@ El LED a la cantonada dreta baixa de l'editor de forma d'ona determina - - visualizationWidget - - click to enable/disable visualization of master-output - pica per a activar/desactivar la visualització de la sortida mestra - - - Click to enable - - - voiceObject diff --git a/data/locale/cs.ts b/data/locale/cs.ts index 2c1ba596f..12bc754bb 100644 --- a/data/locale/cs.ts +++ b/data/locale/cs.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME JMÉNO-KLIENTA @@ -324,18 +325,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + Otevřete prosím automatizační pattern pomocí kontextového menu ovládání! + + + Values copied + Hodnoty zkopírovány + + + All selected values were copied to the clipboard. + Všechny označené hodnoty byly zkopírovány do schránky. + + + + AutomationEditorWindow Play/pause current pattern (Space) Přehrát nebo pozastavit přehrávání aktuálního patternu (mezerník) - - Stop playing of current pattern (Space) - Zastavit přehrávání aktuálního patternu (mezerník) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci, neboť pattern je automaticky přehráván ve smyčce. + + Stop playing of current pattern (Space) + Zastavit přehrávání aktuálního patternu (mezerník) + Click here if you want to stop playing of the current pattern. Klikněte zde, pokud chcete zastavit přehrávání aktuálního patternu. @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) Režim mazání (Shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. Klikněte zde, pokud chcete aktivovat režim kreslení. V tomto výchozím a nejčastěji užívaném režimu lze přidávat a přesunovat jednotlivé hodnoty. Pro aktivaci můžete využít též klávesové zkratky Shift+D. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. Klikněte zde, pokud chcete aktivovat režim mazání. V tomto režimu lze mazat jednotlivé hodnoty. Pro aktivaci můžete využít též klávesové zkratky Shift+E. - - Cut selected values (Ctrl+X) - Vyjmout označené hodnoty (Ctrl+X) - - - Copy selected values (Ctrl+C) - Kopírovat označené hodnoty (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Vložit hodnoty ze schránky (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klikněte zde, pokud chcete označené hodnoty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit. - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klikněte zde, pokud chcete označené hodnoty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit. - - - Click here and the values from the clipboard will be pasted at the first visible measure. - Kliknete-li zde, budou hodnoty ze schránky vloženy do prvního viditelného taktu. - - - Automation Editor - no pattern - Automatizační editor - žádný pattern - - - Automation Editor - %1 - Automatizační editor - %1 - - - Please open an automation pattern with the context menu of a control! - Otevřete prosím automatizační pattern pomocí kontextového menu ovládání! - - - Values copied - Hodnoty zkopírovány - - - All selected values were copied to the clipboard. - Všechny označené hodnoty byly zkopírovány do schránky. - Discrete progression Oddělený vývoj @@ -413,8 +401,12 @@ If you're interested in translating LMMS in another language or want to imp Cubic Hermite vývoj - Tension: - Napětí: + Tension value for spline + Hodnota napětí pro spline + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. @@ -429,12 +421,40 @@ If you're interested in translating LMMS in another language or want to imp Kliknutím sem vyberte cubic hermite vývoj pro tento automatizační pattern. Hodnota připojeného objektu se změní po plynulé křivce a lehce přejde do vrchních a spodních bodů. - Tension value for spline - Hodnota napětí pro spline + Cut selected values (Ctrl+X) + Vyjmout označené hodnoty (Ctrl+X) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. - Větší hodnota napětí vytvoří plynulejší křivku ale překročí některé hodnoty. Malá hodnota napětí způsobí vyrovnání sklonu křivky na každém ovládacím bodě. + Copy selected values (Ctrl+C) + Kopírovat označené hodnoty (Ctrl+C) + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klikněte zde, pokud chcete označené hodnoty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit. + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klikněte zde, pokud chcete označené hodnoty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit. + + + Click here and the values from the clipboard will be pasted at the first visible measure. + Kliknete-li zde, budou hodnoty ze schránky vloženy do prvního viditelného taktu. + + + Tension: + Napětí: + + + Automation Editor - no pattern + Automatizační editor - žádný pattern + + + Automation Editor - %1 + Automatizační editor - %1 @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record Nastav/vyčisti záznam + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp Automatizační stopa + + BBEditor + + Beat+Bassline Editor + Beat+Baseline Editor + + + Play/pause current beat/bassline (Space) + Přehrát nebo pozastavit přehrávání (mezerník) + + + Stop playback of current beat/bassline (Space) + Zastavit přehrávání aktuální beat/bassline (mezerník) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Klikněte zde, pokud chcete přehrát aktuální beat/baseline. Beat/baseline je automaticky přehráván ve smyčce. + + + Click here to stop playing of current beat/bassline. + Klikněte zde, pokud chcete zastavit přehrávání aktuální beat/bassline. + + + Add beat/bassline + + + + Add automation-track + Přidat automatizační stopu + + + Remove steps + Odstranit kroky + + + Add steps + Přidat kroky + + + + BBTCOView + + Open in Beat+Bassline-Editor + Otevřít v Beat+Bassline editoru + + + Reset name + Resetovat jméno + + + Change name + Změnit jméno + + + Change color + Změnit barvu + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Beat/Bassline %1 + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp Poměr + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Rychlost + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin &Odstranit tento plugin + + + CrossoverEQControlDialog - &Help - Nápověda + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Rychlost + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -907,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin &Odstranit tento plugin - - &Help - Nápověda - EnvelopeAndLfoParameters @@ -1150,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Zisk + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Frekvence: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1288,6 +1898,43 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + Nemohu otevřít soubor + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Nemohu uložit soubor %1 pro zápis. +Přesvědčte se prosím, že máte právo zápisu do tohoto souboru a příslušného adresáře a zkuste to znovu! + + + Export project to %1 + Exportovat projekt do %1 + + + Error + Chyba + + + Error while determining file-encoder device. Please try to choose a different output format. + Chyba při určení souboru zařízení enkodéru. Zkuste prosím vybrat jiný výstupní formát. + + + Rendering: %1% + Renderuji: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Vložte prosím novou hodnotu mezi %1 a %2: + FileBrowser @@ -1323,6 +1970,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + + + + White Noise Amount: + + + FxLine @@ -1356,7 +2073,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help + Remove &unused channels @@ -1385,9 +2102,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1400,6 +2114,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel Ztlumit tento FX kanál + + Solo + Sólo + + + Solo FX channel + + FxRoute @@ -1408,6 +2130,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + + + + Patch + + + + Gain + Zisk + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Zisk + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1999,6 +2783,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2097,6 +2892,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2187,6 +3010,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2321,6 +3148,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Vložte prosím novou hodnotu mezi -96.0 dBV a 6.0 dBV: + + + Please enter a new value between %1 and %2: + Vložte prosím novou hodnotu mezi %1 a %2: + LadspaControl @@ -2357,10 +3207,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. @@ -2482,10 +3328,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. Klikněte zde pro pravoúhlou vlnu. - - Click here for a a moog saw-wave. - Klikněte zde pro pilovitou vlnu typu Moog. - Click here for an exponential wave. Klikněte zde pro exponenciální vlnu. @@ -2499,6 +3341,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2520,10 +3366,6 @@ Please make sure you have write-access to the file and try again. Nemohu uložit konfigurační soubor %1. Pravděpodobně nemáte právo k zápisu do tohoto souboru. Ujistěte se prosím, že máte k souboru právo zápisu a zkuste to znovu. - - &Project - &Projekt - &New &Nový @@ -2568,10 +3410,6 @@ Ujistěte se prosím, že máte k souboru právo zápisu a zkuste to znovu.&Help - - Online help - Nápověda online - Help Nápověda @@ -2676,14 +3514,6 @@ Ujistěte se prosím, že máte k souboru právo zápisu a zkuste to znovu.The current project was modified since last saving. Do you want to save it now? Aktuální projekt byl od posledního uložení změněn. Chcete jej nyní uložit? - - Open project - Otevřít projekt - - - Save project - Uložit projekt - Help not available Nápověda není dostupná @@ -2694,30 +3524,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. V současnosti není v LMMS nápověda dostupná. Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/wiki. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - LMMS (*.mmp *.mmpz) @@ -2726,14 +3532,6 @@ Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/w Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2746,18 +3544,6 @@ Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/w Volumes - - &Recently opened projects - - - - Save as new &version - - - - E&xport tracks... - - Undo @@ -2770,6 +3556,62 @@ Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/w LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2805,7 +3647,7 @@ Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/w - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE ZAŘÍZENÍ @@ -3273,6 +4115,98 @@ Navštivte prosím stránku s dokumentací k LMMS na adrese http://lmms.sf.net/w Sub3-LFO2 + + Sine wave + Sinusová vlna + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + Trianglová vlna + + + Saw wave + Pilovitá vlna + + + Ramp wave + + + + Square wave + Pravoúhlá (square) vlna + + + Moog saw wave + + + + Abs. sine wave + + + + Random + Náhodně + + + Random smooth + + MonstroView @@ -3445,6 +4379,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3723,6 +4692,14 @@ k nastavení zesílení kroku použijte kolečko myši DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3754,45 +4731,13 @@ k nastavení zesílení kroku použijte kolečko myši Amount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - Přehrát nebo pozastavit přehrávání aktuálního patternu (mezerník) - - - Record notes from MIDI-device/channel-piano - Nahrávat noty z MIDI-zařízení/piano kanálu - - - Stop playing of current pattern (Space) - Zastavit přehrávání aktuálního patternu (mezerník) - - - Draw mode (Shift+D) - Režim kreslení (Shift+D) - - - Erase mode (Shift+E) - Režim mazání (Shift+E) - - - Select mode (Shift+S) - Režim výběru (Shift+S) - - - Cut selected notes (Ctrl+X) - Vyjmout označené noty (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Kopírovat označené noty (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Vložit noty ze schránky (Ctrl+V) - Last note Trvání noty @@ -3809,38 +4754,6 @@ k nastavení zesílení kroku použijte kolečko myši Please open a pattern by double-clicking on it! Otevřete prosím pattern jeho dvojitým poklepáním! - - Record notes from MIDI-device/channel-piano while playing song or BB track - Nahrávat tóny z MIDI zařízení / kanálu piána při přehrávání skladby nebo BB stopy - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci. Pattern je automaticky přehráván ve smyčce. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu, následně si je můžete přehrát nebo upravit. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu a na pozadí uslyšíte skladbu nebo BB stopu. - - - Click here to stop playback of current pattern. - Klikněte zde, pokud chcete zastavit přehrávání aktuálního patternu. - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klikněte zde pokud chcete označené noty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit. - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klikněte zde pokud chcete označené noty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit. - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - Kliknete-li zde, budou noty ze schránky vloženy do prvního viditelného taktu. - Note lock Zámek noty @@ -3853,26 +4766,6 @@ k nastavení zesílení kroku použijte kolečko myši Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3897,26 +4790,6 @@ k nastavení zesílení kroku použijte kolečko myši No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3938,6 +4811,117 @@ k nastavení zesílení kroku použijte kolečko myši Vložte prosím novou hodnotu mezi %1 a %2: + + PianoRollWindow + + Play/pause current pattern (Space) + Přehrát nebo pozastavit přehrávání aktuálního patternu (mezerník) + + + Record notes from MIDI-device/channel-piano + Nahrávat noty z MIDI-zařízení/piano kanálu + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Nahrávat tóny z MIDI zařízení / kanálu piána při přehrávání skladby nebo BB stopy + + + Stop playing of current pattern (Space) + Zastavit přehrávání aktuálního patternu (mezerník) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Klikněte zde, pokud chcete přehrát aktuální pattern. To je šikovné při editaci. Pattern je automaticky přehráván ve smyčce. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu, následně si je můžete přehrát nebo upravit. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Klikněte zde pokud chcete nahrávat z MIDI zařízení nebo virtuálního testovacího piána příslušného kanálového okna do aktuálního patternu. Při nahrávání zaznamenáte všechny zahrané noty do tohoto patternu a na pozadí uslyšíte skladbu nebo BB stopu. + + + Click here to stop playback of current pattern. + Klikněte zde, pokud chcete zastavit přehrávání aktuálního patternu. + + + Draw mode (Shift+D) + Režim kreslení (Shift+D) + + + Erase mode (Shift+E) + Režim mazání (Shift+E) + + + Select mode (Shift+S) + Režim výběru (Shift+S) + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + Vyjmout označené noty (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Kopírovat označené noty (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Vložit noty ze schránky (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klikněte zde pokud chcete označené noty vyjmout a uložit do schránky. Vložit je pak můžete kdekoliv v libovolném patternu pomocí tlačítka Vložit. + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klikněte zde pokud chcete označené noty zkopírovat do schránky. Vložit je pak můžete kdekoliv v libovolného patternu pomocí tlačítka Vložit. + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + Kliknete-li zde, budou noty ze schránky vloženy do prvního viditelného taktu. + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3970,6 +4954,140 @@ Důvod: "%2" + + PluginBrowser + + Instrument plugins + Pluginy nástrojů + + + Instrument browser + Prohlížeč nástrojů + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + Nástroj přetáhněte buď do Editoru skladby, Beat+Bassline Editoru nebo do existující nástrojové stopy. + + + + ProjectNotes + + Project notes + Poznámky k projektu + + + Put down your project notes here. + Do tohoto okna můžete vkládat Vaše poznámky k projektu. + + + Edit Actions + Editace + + + &Undo + &Zpět + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Znovu + + + Ctrl+Y + Ctrl+Z + + + &Copy + &Kopírovat + + + Ctrl+C + Ctrl+C + + + Cu&t + &Vyjmout + + + Ctrl+X + Ctrl+X + + + &Paste + V&ložit + + + Ctrl+V + Ctrl+V + + + Format Actions + Formátování + + + &Bold + &Tučné + + + Ctrl+B + Ctrl+B + + + &Italic + &Kurzíva + + + Ctrl+I + Ctrl+I + + + &Underline + &Podtržené + + + Ctrl+U + Ctrl+U + + + &Left + Zarovnat &vlevo + + + Ctrl+L + Ctrl+L + + + C&enter + Zarovnat &na střed + + + Ctrl+E + Ctrl+E + + + &Right + Zarovnat v&pravo + + + Ctrl+R + Ctrl+R + + + &Justify + Zarovnat &do bloku + + + Ctrl+J + Ctrl+R + + + &Color... + &Barva... + + ProjectRenderer @@ -4120,6 +5238,13 @@ Důvod: "%2" + + RenameDialog + + Rename... + Přejmenovat... + + SampleBuffer @@ -4208,6 +5333,10 @@ Důvod: "%2" Volume Hlasitost + + Panning + + SampleTrackView @@ -4223,45 +5352,309 @@ Důvod: "%2" VOL VOL + + Panning + + + + Panning: + + + + PAN + + + + + SetupDialog + + Setup LMMS + Nastavit LMMS + + + General settings + Hlavní nastavení + + + BUFFER SIZE + VELIKOST VYR. PAMĚTI + + + Reset to default-value + Nastavit výchozí hodnoty + + + MISC + + + + Enable tooltips + Aktivovat nástrojové tipy + + + Show restart warning after changing settings + Vyzvat k restartu po změně nastavení + + + Display volume as dBV + Zobrazovat hlasitost jako dBV + + + Compress project files per default + Komprimovat soubory s projekty + + + One instrument track window mode + Režim jedné stopy pro nástroje + + + HQ-mode for output audio-device + HQ režim pro výstup audio zařízení + + + Compact track buttons + Malá tlačítka u stop + + + Sync VST plugins to host playback + Synchronizace VST pluginů s hostujícím přehráváním + + + Enable note labels in piano roll + Povolit názvy tónů v piano rollu + + + Enable waveform display by default + Povolit zobrazení waveformu ve výchozím nastavení + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Cesty + + + LMMS working directory + Pracovní adresář pro LMMS + + + VST-plugin directory + Adresář pro VST pluginy + + + Artwork directory + Adresář pro témata + + + Background artwork + Obrázek na pozadí + + + FL Studio installation directory + Instalační adresář FL Studia + + + LADSPA plugin paths + Cesty k LADSPA pluginům + + + STK rawwave directory + Adresář pro STK rawwave + + + Default Soundfont File + Výchozí Soundfont soubor + + + Performance settings + Nastavení výkonu + + + UI effects vs. performance + Efekty uživatelského rozhraní vs. výkon + + + Smooth scroll in Song Editor + Plynulé posouvání v Song Editoru + + + Enable auto save feature + Povolit automatické ukládání + + + Show playback cursor in AudioFileProcessor + Zobrazit přehrávací kurzor v AudioFileProcessoru + + + Audio settings + Audio nastavení + + + AUDIO INTERFACE + AUDIO ROZHRANÍ + + + MIDI settings + MIDI nastavení + + + MIDI INTERFACE + MIDI ROZHRANÍ + + + OK + OK + + + Cancel + Zrušit + + + Restart LMMS + Restartovat LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Mnohé změny nastavení se projeví až po restartu LMMS! + + + Frames: %1 +Latency: %2 ms + Rámce: %1 +Zpoždění %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Zde můžete nastavit interní velikost vyrovnávací paměti, která je užívána LMMS. Nízké hodnoty vedou k menšímu zpoždění, ale také způsobují nepoužitelný zvuk nebo špatný výkon, zejména na starých počítačích či systémech s jádrem nepodporujícím real time. + + + Choose LMMS working directory + Vyberte pro LMMS pracovní adresář + + + Choose your VST-plugin directory + Vyberte adresář pro VST pluginy + + + Choose artwork-theme directory + Vyberte adresář s tématy + + + Choose FL Studio installation directory + Vyberte instalační adresář FL Studia + + + Choose LADSPA plugin directory + Vyberte adresář pro LADSPA pluginy + + + Choose STK rawwave directory + Vyberte adresář pro STK rawwave + + + Choose default SoundFont + Vyberte výchozí SoundFont + + + Choose background artwork + Vyberte obrázek na pozadí + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Zde vyberte preferované audio rozhraní. V závislosti na konfiguraci Vašeho systému při kompilaci můžete volit mezi ALSA, JACK, OSS a dalšími. Níže vidíte políčko, které nabízí možnost nastavení vybraného audio rozhraní. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Zde vyberte preferované MIDI rozhraní. V závislosti na konfiguraci Vašeho systému při kompilaci můžete volit mezi ALSA OSS a dalšími. Níže vidíte políčko, které nabízí možnost nastavení vybraného MIDI rozhraní. + + + + Song + + Tempo + Tempo + + + Master volume + Hlavní hlasitost + + + Master pitch + Hlavní ladění (pitch) + + + Project saved + Projekt uložen + + + The project %1 is now saved. + Projekt %1 je nyní uložen. + + + Project NOT saved. + Projekt NENÍ uložen. + + + The project %1 was not saved! + Projekt %1 nebyl uložen! + + + Import file + Importovat soubor + + + MIDI sequences + MIDI sekvence + + + FL Studio projects + FL Studio projekt + + + Hydrogen projects + + + + All file types + + + + Empty project + Prázdný projekt + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + Tento projekt je prázdný, jeho exportování nemá smysl. Nejdříve prosím vložte nějaké položky do Editoru skladby! + + + Select directory for writing exported tracks... + + + + untitled + nepojmenovaný + + + Select file for project-export... + Zvolte soubor pro export projektu... + + + The following errors occured while loading: + + SongEditor - - Song-Editor - Editor skladby - - - Play song (Space) - Přehrát skladbu (mezerník) - - - Stop song (Space) - Zastavit přehrávání skladby (mezerník) - - - Add beat/bassline - Přidat beat/bassline - - - Add sample-track - Přidat stopu samplů - - - Draw mode - Režim kreslení - - - Edit mode (select and move) - Režim editace (označit a přesunout) - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Klikněte zde, pokud chcete přehrát celou skladbu. Přehrávání začne v místě kde se nalézá zelený označovač pozice se kterým lze též při přehrávání pohybovat. - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Klikněte zde, pokud chcete zastavit přehrávání skladby. Označovač pozice bude odeslán na začátek skladby. - Could not open file Nemohu otevřít soubor @@ -4270,18 +5663,6 @@ Důvod: "%2" Could not write file Nemohu zapsat soubor - - Add automation-track - Přidat automatizační stopu - - - Record samples from Audio-device - Nahrát samply z audio zařízení - - - Record samples from Audio-device while playing song or BB track - Nahrát samply z audio zařízení při přehrávání skladby nebo BB stopy - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4345,6 +5726,57 @@ Důvod: "%2" Nelze zapisovat do souboru %1. Pravděpodobně nemáte oprávnění zapisovat do tohoto souboru. Ujistěte se prosím, že máte oprávnění zapisovat do tohoto souboru a zkuse to znovu. + + SongEditorWindow + + Song-Editor + Editor skladby + + + Play song (Space) + Přehrát skladbu (mezerník) + + + Record samples from Audio-device + Nahrát samply z audio zařízení + + + Record samples from Audio-device while playing song or BB track + Nahrát samply z audio zařízení při přehrávání skladby nebo BB stopy + + + Stop song (Space) + Zastavit přehrávání skladby (mezerník) + + + Add beat/bassline + + + + Add sample-track + Přidat stopu samplů + + + Add automation-track + Přidat automatizační stopu + + + Draw mode + Režim kreslení + + + Edit mode (select and move) + Režim editace (označit a přesunout) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Klikněte zde, pokud chcete přehrát celou skladbu. Přehrávání začne v místě kde se nalézá zelený označovač pozice se kterým lze též při přehrávání pohybovat. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Klikněte zde, pokud chcete zastavit přehrávání skladby. Označovač pozice bude odeslán na začátek skladby. + + SpectrumAnalyzerControlDialog @@ -4371,6 +5803,13 @@ Důvod: "%2" Režim kanálu + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4413,10 +5852,6 @@ Důvod: "%2" Custom... Vlastní... - - &Help - - Custom Vlastní @@ -4457,6 +5892,52 @@ Důvod: "%2" kliknutí změní časové jednotky + + TimeLineWidget + + Enable/disable auto-scrolling + Povolit/zakázat automatický posun + + + Enable/disable loop-points + Povolit/zakázat body pro přehrávání ve smyčce + + + After stopping go back to begin + Po skončení jdi zpět na začátek + + + After stopping go back to position at which playing was started + Po skončení jdi zpět na pozici ze které přehrávání začalo + + + After stopping keep position + Po skončení udržuj pozici + + + Hint + Rada + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + Ztlumený + + + Solo + Sólo + + TrackContainer @@ -4500,6 +5981,107 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu Importuji FLP soubor... + + TrackContentObject + + Muted + Ztlumený + + + + TrackContentObjectView + + Current position + Aktuální pozice + + + Hint + Rada + + + Press <Ctrl> and drag to make a copy. + K vytvoření kopie stiskněte <Ctrl> a táhněte myší. + + + Current length + Aktuální délka + + + Press <Ctrl> for free resizing. + Stiskněte <Ctrl> pro volné měnění velikosti. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 do %5:%6) + + + Delete (middle mousebutton) + Smazat (prostřední tlačítko myši) + + + Cut + Vyjmout + + + Copy + Kopírovat + + + Paste + Vložit + + + Mute/unmute (<Ctrl> + middle click) + Ztlumit/neztlumit (<Ctrl> + prostřední klik) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + + + + Actions for this track + Akce pro tuto stopu + + + Mute + Ztlumit + + + Solo + Sólo + + + Mute this track + Ztlumit tuto stopu + + + Clone this track + Klonovat tuto stopu + + + Remove this track + Odstranit tuto stopu + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4643,17 +6225,6 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4756,6 +6327,17 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu + + VisualizationWidget + + click to enable/disable visualization of master-output + Kliknutí zapíná/vypíná vizualizaci hlavního výstupu + + + Click to enable + + + VstEffectControlDialog @@ -4862,11 +6444,7 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5272,77 +6850,8 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu Sinc - - - bbEditor - Play/pause current beat/bassline (Space) - Přehrát nebo pozastavit přehrávání (mezerník) - - - Add beat/bassline - Přidat beat/basovou linku - - - Beat+Bassline Editor - Beat+Baseline Editor - - - Add automation-track - Přidat automatizační stopu - - - Stop playback of current beat/bassline (Space) - Zastavit přehrávání aktuální beat/bassline (mezerník) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Klikněte zde, pokud chcete přehrát aktuální beat/baseline. Beat/baseline je automaticky přehráván ve smyčce. - - - Click here to stop playing of current beat/bassline. - Klikněte zde, pokud chcete zastavit přehrávání aktuální beat/bassline. - - - Remove steps - Odstranit kroky - - - Add steps - Přidat kroky - - - - bbTCOView - - Open in Beat+Bassline-Editor - Otevřít v Beat+Bassline editoru - - - Reset name - Resetovat jméno - - - Change name - Změnit jméno - - - Change color - Změnit barvu - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - Beat/Bassline %1 - - - Clone of %1 + Sample not found: %1 @@ -5542,42 +7051,6 @@ Přesvědčte se prosím, že máte právo ke čtení tohoto souboru a příslu - - exportProjectDialog - - Could not open file - Nemohu otevřít soubor - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Nemohu uložit soubor %1 pro zápis. -Přesvědčte se prosím, že máte právo zápisu do tohoto souboru a příslušného adresáře a zkuste to znovu! - - - Error - Chyba - - - Error while determining file-encoder device. Please try to choose a different output format. - Chyba při určení souboru zařízení enkodéru. Zkuste prosím vybrat jiný výstupní formát. - - - Rendering: %1% - Renderuji: %1% - - - Export project to %1 - Exportovat projekt do %1 - - - - fader - - Please enter a new value between %1 and %2: - Vložte prosím novou hodnotu mezi %1 a %2: - - graphModel @@ -5679,21 +7152,6 @@ Přesvědčte se prosím, že máte právo zápisu do tohoto souboru a příslu - - knob - - &Help - Nápověd&a - - - Please enter a new value between %1 and %2: - Vložte prosím novou hodnotu mezi %1 a %2: - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Vložte prosím novou hodnotu mezi -96.0 dBV a 6.0 dBV: - - ladspaBrowserView @@ -6427,13 +7885,6 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech. - - nineButtonSelector - - &Help - &Nápověda - - opl2instrument @@ -6887,10 +8338,6 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech.no description bez popisu - - Instrument plugins - Pluginy nástrojů - Filter for importing MIDI-files into LMMS Filtr pro import MIDI souborů do LMMS @@ -6935,14 +8382,6 @@ Dvojitým kliknutím na kterýkoli z modulů se zobrazí informace o portech.Tuneful things to bang on Libozvučná klepátka - - Instrument browser - Prohlížeč nástrojů - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - Nástroj přetáhněte buď do Editoru skladby, Beat+Bassline Editoru nebo do existující nástrojové stopy. - Plugin for freely manipulating stereo output @@ -7040,335 +8479,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Project notes - Poznámky k projektu - - - Put down your project notes here. - Do tohoto okna můžete vkládat Vaše poznámky k projektu. - - - Edit Actions - Editace - - - &Undo - &Zpět - - - Ctrl+Z - Ctrl+Z - - - &Redo - &Znovu - - - Ctrl+Y - Ctrl+Z - - - &Copy - &Kopírovat - - - Ctrl+C - Ctrl+C - - - Cu&t - &Vyjmout - - - Ctrl+X - Ctrl+X - - - &Paste - V&ložit - - - Ctrl+V - Ctrl+V - - - Format Actions - Formátování - - - &Bold - &Tučné - - - Ctrl+B - Ctrl+B - - - &Italic - &Kurzíva - - - Ctrl+I - Ctrl+I - - - &Underline - &Podtržené - - - Ctrl+U - Ctrl+U - - - &Left - Zarovnat &vlevo - - - Ctrl+L - Ctrl+L - - - C&enter - Zarovnat &na střed - - - Ctrl+E - Ctrl+E - - - &Right - Zarovnat v&pravo - - - Ctrl+R - Ctrl+R - - - &Justify - Zarovnat &do bloku - - - Ctrl+J - Ctrl+R - - - &Color... - &Barva... - - - - renameDialog - - Rename... - Přejmenovat... - - - - setupDialog - - Setup LMMS - Nastavit LMMS - - - General settings - Hlavní nastavení - - - BUFFER SIZE - VELIKOST VYR. PAMĚTI - - - Reset to default-value - Nastavit výchozí hodnoty - - - MISC + Player for GIG files - Enable tooltips - Aktivovat nástrojové tipy + A multitap echo delay plugin + - Show restart warning after changing settings - Vyzvat k restartu po změně nastavení + A native flanger plugin + - Display volume as dBV - Zobrazovat hlasitost jako dBV + A native delay plugin + - Compress project files per default - Komprimovat soubory s projekty + An oversampling bitcrusher + - LMMS working directory - Pracovní adresář pro LMMS + A native eq plugin + - VST-plugin directory - Adresář pro VST pluginy + A 4-band Crossover Equalizer + + + + + setupWidget + + JACK (JACK Audio Connection Kit) + - Artwork directory - Adresář pro témata + OSS Raw-MIDI (Open Sound System) + - FL Studio installation directory - Instalační adresář FL Studia + SDL (Simple DirectMedia Layer) + - STK rawwave directory - Adresář pro STK rawwave + PulseAudio (bad latency!) + - Performance settings - Nastavení výkonu + Dummy (no MIDI support) + - UI effects vs. performance - Efekty uživatelského rozhraní vs. výkon + ALSA Raw-MIDI (Advanced Linux Sound Architecture) + - Audio settings - Audio nastavení + PortAudio + - AUDIO INTERFACE - AUDIO ROZHRANÍ + Dummy (no sound output) + - MIDI settings - MIDI nastavení + ALSA (Advanced Linux Sound Architecture) + - MIDI INTERFACE - MIDI ROZHRANÍ + OSS (Open Sound System) + - OK - OK + WinMM MIDI + - Cancel - Zrušit - - - Restart LMMS - Restartovat LMMS - - - Please note that most changes won't take effect until you restart LMMS! - Mnohé změny nastavení se projeví až po restartu LMMS! - - - Frames: %1 -Latency: %2 ms - Rámce: %1 -Zpoždění %2 ms - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Zde můžete nastavit interní velikost vyrovnávací paměti, která je užívána LMMS. Nízké hodnoty vedou k menšímu zpoždění, ale také způsobují nepoužitelný zvuk nebo špatný výkon, zejména na starých počítačích či systémech s jádrem nepodporujícím real time. - - - Choose LMMS working directory - Vyberte pro LMMS pracovní adresář - - - Choose your VST-plugin directory - Vyberte adresář pro VST pluginy - - - Choose artwork-theme directory - Vyberte adresář s tématy - - - Choose FL Studio installation directory - Vyberte instalační adresář FL Studia - - - Choose LADSPA plugin directory - Vyberte adresář pro LADSPA pluginy - - - Choose STK rawwave directory - Vyberte adresář pro STK rawwave - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Zde vyberte preferované audio rozhraní. V závislosti na konfiguraci Vašeho systému při kompilaci můžete volit mezi ALSA, JACK, OSS a dalšími. Níže vidíte políčko, které nabízí možnost nastavení vybraného audio rozhraní. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Zde vyberte preferované MIDI rozhraní. V závislosti na konfiguraci Vašeho systému při kompilaci můžete volit mezi ALSA OSS a dalšími. Níže vidíte políčko, které nabízí možnost nastavení vybraného MIDI rozhraní. - - - HQ-mode for output audio-device - HQ režim pro výstup audio zařízení - - - Paths - Cesty - - - Background artwork - Obrázek na pozadí - - - LADSPA plugin paths - Cesty k LADSPA pluginům - - - Default Soundfont File - Výchozí Soundfont soubor - - - Choose default SoundFont - Vyberte výchozí SoundFont - - - Choose background artwork - Vyberte obrázek na pozadí - - - One instrument track window mode - Režim jedné stopy pro nástroje - - - Compact track buttons - Malá tlačítka u stop - - - Sync VST plugins to host playback - Synchronizace VST pluginů s hostujícím přehráváním - - - Enable note labels in piano roll - Povolit názvy tónů v piano rollu - - - Enable waveform display by default - Povolit zobrazení waveformu ve výchozím nastavení - - - Smooth scroll in Song Editor - Plynulé posouvání v Song Editoru - - - Enable auto save feature - Povolit automatické ukládání - - - Show playback cursor in AudioFileProcessor - Zobrazit přehrávací kurzor v AudioFileProcessoru - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7426,6 +8613,10 @@ Zpoždění %2 ms Chorus Depth + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7671,77 +8862,6 @@ Zpoždění %2 ms - - song - - Tempo - Tempo - - - Master volume - Hlavní hlasitost - - - Master pitch - Hlavní ladění (pitch) - - - Project saved - Projekt uložen - - - The project %1 is now saved. - Projekt %1 je nyní uložen. - - - Project NOT saved. - Projekt NENÍ uložen. - - - The project %1 was not saved! - Projekt %1 nebyl uložen! - - - Import file - Importovat soubor - - - untitled - nepojmenovaný - - - Select file for project-export... - Zvolte soubor pro export projektu... - - - MIDI sequences - MIDI sekvence - - - FL Studio projects - FL Studio projekt - - - Empty project - Prázdný projekt - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - Tento projekt je prázdný, jeho exportování nemá smysl. Nejdříve prosím vložte nějaké položky do Editoru skladby! - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7798,157 +8918,6 @@ Zpoždění %2 ms - - timeLine - - Enable/disable auto-scrolling - Povolit/zakázat automatický posun - - - Enable/disable loop-points - Povolit/zakázat body pro přehrávání ve smyčce - - - After stopping go back to begin - Po skončení jdi zpět na začátek - - - After stopping go back to position at which playing was started - Po skončení jdi zpět na pozici ze které přehrávání začalo - - - After stopping keep position - Po skončení udržuj pozici - - - Hint - Rada - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - Ztlumený - - - Solo - Sólo - - - - trackContentObject - - Muted - Ztlumený - - - - trackContentObjectView - - Current position - Aktuální pozice - - - Hint - Rada - - - Press <Ctrl> and drag to make a copy. - K vytvoření kopie stiskněte <Ctrl> a táhněte myší. - - - Current length - Aktuální délka - - - Press <Ctrl> for free resizing. - Stiskněte <Ctrl> pro volné měnění velikosti. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 do %5:%6) - - - Delete (middle mousebutton) - Smazat (prostřední tlačítko myši) - - - Cut - Vyjmout - - - Copy - Kopírovat - - - Paste - Vložit - - - Mute/unmute (<Ctrl> + middle click) - Ztlumit/neztlumit (<Ctrl> + prostřední klik) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - - - - Actions for this track - Akce pro tuto stopu - - - Mute - Ztlumit - - - Clone this track - Klonovat tuto stopu - - - Remove this track - Odstranit tuto stopu - - - Mute this track - Ztlumit tuto stopu - - - Solo - Sólo - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7959,16 +8928,6 @@ Zpoždění %2 ms Please wait while loading VST-plugin... Prosím čekejte dokud se nenačte VST plugin... - - Failed loading VST-plugin - Chyba načítání VST pluginu - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - VST plugin %1 nemohl být z určitých důvodů načten. -Jestliže tento plugin funguje v Linuxu v jiném VST softwaru, kontaktujte prosím LMMS vývojáře! - vibed @@ -8203,21 +9162,6 @@ The LED in the lower right corner of the waveform editor determines whether the Use a user-defined waveform for current oscillator. - - &Help - - - - - visualizationWidget - - click to enable/disable visualization of master-output - Kliknutí zapíná/vypíná vizualizaci hlavního výstupu - - - Click to enable - - voiceObject diff --git a/data/locale/de.ts b/data/locale/de.ts index d5c525e78..f6f4194cd 100644 --- a/data/locale/de.ts +++ b/data/locale/de.ts @@ -203,10 +203,6 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder With this knob you can set the point where the loop starts. Mit diesem Regler können Sie festlegen, wo die Wiederholung beginnt. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -331,70 +327,6 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder AutomationEditor - - Play/pause current pattern (Space) - Aktuellen Pattern abspielen/pausieren (Leertaste) - - - Stop playing of current pattern (Space) - Abspielen des aktuellen Patterns stoppen (Leertaste) - - - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Klicken Sie hier, wenn Sie den aktuellen Pattern spielen wollen. Das ist nützlich beim Bearbeiten. Der Pattern wird automatisch wiederholt, wenn das Ende erreicht ist. - - - Click here if you want to stop playing of the current pattern. - Klicken Sie hier, wenn Sie das Abspielen des aktuellen Patterns stoppen wollen. - - - Draw mode (Shift+D) - Zeichnenmodus (Umschalt+D) - - - Erase mode (Shift+E) - Radiermodus (Umschalt+E) - - - Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie einzelne Werte hinzufügen und verschieben. Das ist der Standard-Modus, der meistens benutzt wird. Sie können auch »Umschalt+D« auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen. - - - Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Werte löschen. Sie können auch »Umschalt+E« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. - - - Cut selected values (Ctrl+X) - Ausgewählte Werte ausschneiden (Strg+X) - - - Copy selected values (Ctrl+C) - Ausgewählte Werte kopieren (Strg+C) - - - Paste values from clipboard (Ctrl+V) - Werte aus Zwischenablage einfügen (Strg+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klicken Sie hier, um die markierten Werte auszuschneiden und in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klicken Sie hier, um die markierten Werte in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. - - - Click here and the values from the clipboard will be pasted at the first visible measure. - Klicken Sie hier, um die Werte in der Zwischenablage im ersten sichtbaren Takt einzufügen. - - - Automation Editor - no pattern - Automation-Editor - Kein Pattern - - - Automation Editor - %1 - Automation-Editor - %1 - Please open an automation pattern with the context menu of a control! Bitte öffnen Sie einen Automation-Pattern mit Hilfe des Kontextmenüs eines Steuerelements! @@ -407,41 +339,124 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder All selected values were copied to the clipboard. Alle ausgewählten Werte wurden in die Zwischenablage kopiert. + + + AutomationEditorWindow + + Play/pause current pattern (Space) + Aktuellen Pattern abspielen/pausieren (Leertaste) + + + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + Klicken Sie hier, wenn Sie den aktuellen Pattern spielen wollen. Das ist nützlich beim Bearbeiten. Der Pattern wird automatisch wiederholt, wenn das Ende erreicht ist. + + + Stop playing of current pattern (Space) + Abspielen des aktuellen Patterns stoppen (Leertaste) + + + Click here if you want to stop playing of the current pattern. + Klicken Sie hier, wenn Sie das Abspielen des aktuellen Patterns stoppen wollen. + + + Draw mode (Shift+D) + Zeichnenmodus (Umschalt+D) + + + Erase mode (Shift+E) + Radiermodus (Umschalt+E) + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. + Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie einzelne Werte hinzufügen und verschieben. Das ist der Standard-Modus, der meistens benutzt wird. Sie können auch »Umschalt+D« auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen. + + + Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. + Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Werte löschen. Sie können auch »Umschalt+E« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. + Discrete progression - Diskretes Fortschreiten + Diskretes Fortschreiten Linear progression - Lineares Fortschreiten + Lineares Fortschreiten Cubic Hermite progression - Kubisches, hermetisches Fortschrieten - - - Tension: - Spannung: - - - Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. - Klicken Sie hier, um diskretes Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts bleibt konstant zwischen den Kontrollpunkten und wird sofort auf den neuen Wert gesetzt, wenn ein Kontrollpunkt erreicht wird. - - - Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. - Klicken Sie hier, um lineares Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts wird über die Zeit kontinuierlich zwischen Kontrollpunkten auf den korrekten Wert am jeweiligen Kontrollpunkt geändert, ohne plötzliche Änderungen. - - - Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. - Klicken Sie hier, um kubisches, hermetisches Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts wird in einer nahtlosen Kurve geändert und in Spitzen und Täler übergehen. + Kubisches, hermetisches Fortschrieten Tension value for spline - Spannungswert für Spline + Spannungswert für Spline - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. - Ein höherer Spannungswert erzeugt möglicherweise eine nahtlosere Kurve, aber überschwingt einige Werte. Ein niedrigerer Spannungswert wird ein Abfallen und dann Abflachen der Kurve an jedem Kontrollpunkt verursachen. + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + + + + Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. + Klicken Sie hier, um diskretes Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts bleibt konstant zwischen den Kontrollpunkten und wird sofort auf den neuen Wert gesetzt, wenn ein Kontrollpunkt erreicht wird. + + + Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. + Klicken Sie hier, um lineares Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts wird über die Zeit kontinuierlich zwischen Kontrollpunkten auf den korrekten Wert am jeweiligen Kontrollpunkt geändert, ohne plötzliche Änderungen. + + + Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. + Klicken Sie hier, um kubisches, hermetisches Fortschreiten als Automationsmuster auszuwählen. Der Wert des verbundenen Objekts wird in einer nahtlosen Kurve geändert und in Spitzen und Täler übergehen. + + + Cut selected values (Ctrl+X) + Ausgewählte Werte ausschneiden (Strg+X) + + + Copy selected values (Ctrl+C) + Ausgewählte Werte kopieren (Strg+C) + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klicken Sie hier, um die markierten Werte auszuschneiden und in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klicken Sie hier, um die markierten Werte in die Zwischenablage zu kopieren. Sie können diese dann überall, auch in einem anderen Pattern, wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. + + + Click here and the values from the clipboard will be pasted at the first visible measure. + Klicken Sie hier, um die Werte in der Zwischenablage im ersten sichtbaren Takt einzufügen. + + + Tension: + Spannung: + + + Automation Editor - no pattern + Automation-Editor - Kein Pattern + + + Automation Editor - %1 + Automation-Editor - %1 @@ -489,6 +504,14 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder Set/clear record Aufnahme setzen/löschen + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -497,6 +520,79 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder Automation-Spur + + BBEditor + + Beat+Bassline Editor + Beat+Bassline Editor + + + Play/pause current beat/bassline (Space) + Aktuellen Beat/Bassline abspielen/pausieren (Leertaste) + + + Stop playback of current beat/bassline (Space) + Abspielen des aktuellen Beats/Bassline stoppen (Leertaste) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Klicken Sie hier, um den aktuelle Beat/Bassline abzuspielen. Der Beat/Bassline wird am Ende automatisch wiederholt. + + + Click here to stop playing of current beat/bassline. + Klicken Sie hier, um das Abspielen des aktuellen Beats/Bassline zu stoppen (Leertaste). + + + Add beat/bassline + Beat/Bassline hinzufügen + + + Add automation-track + Automation-Spur hinzufügen + + + Remove steps + Schritte entfernen + + + Add steps + Schritte hinzufügen + + + + BBTCOView + + Open in Beat+Bassline-Editor + Im Beat+Bassline-Editor öffnen + + + Reset name + Name zurücksetzen + + + Change name + Name ändern + + + Change color + Farbe ändern + + + Reset color to default + Farbe auf Standard zurücksetzen + + + + BBTrack + + Beat/Bassline %1 + Beat/Bassline %1 + + + Clone of %1 + Klon von %1 + + BassBoosterControlDialog @@ -539,6 +635,100 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder Verhältnis + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + GAIN + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Rate + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &Hilfe + + + Help (not available) + Hilfe (nicht verfügbar) + + CarlaInstrumentView @@ -658,6 +848,69 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder Plugin entfe&rnen + + CrossoverEQControlDialog + + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + DelayControls @@ -840,6 +1093,34 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder Vocal Formant Filter Vokalformant-Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + DummyEffect @@ -848,6 +1129,25 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder NICHT GEFUNDEN + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + + Effect @@ -1225,6 +1525,255 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte Klick für eine zufällige Welle. + + EqControls + + Input gain + Eingangsverstärkung + + + Output gain + Ausgabeverstärkung + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Frequenz: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1363,6 +1912,43 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte Export as loop (remove end silence) Als Schleife exportieren (Stille am Ende entfernen) + + Export between loop markers + + + + Could not open file + Konnte Datei nicht öffnen + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Die Datei %1 konnte nicht zum Schreiben geöffnet werden. +Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeichnis, das diese Datei enthält, besitzen und versuchen es erneut! + + + Export project to %1 + Projekt nach %1 exportieren + + + Error + Fehler + + + Error while determining file-encoder device. Please try to choose a different output format. + Fehler beim Bestimmen des Datei-Enkoder-Geräts. Bitte wählen Sie ein anderes Ausgabeformat. + + + Rendering: %1% + Rendere: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: + FileBrowser @@ -1398,6 +1984,76 @@ Ein Recktsklick öffnet ein Kontextmenü, in dem Sie die Reihenfolge der Effekte --- Mitgelieferte Dateien --- + + FlangerControls + + Delay Samples + Samples verzögern + + + Lfo Frequency + LFO-Frequenz + + + Seconds + + + + Regen + + + + Noise + Rauschen + + + Invert + Invertieren + + + + FlangerControlsDialog + + Delay + Verzögerung + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + Rauschen + + + White Noise Amount: + + + FxLine @@ -1436,6 +2092,10 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch R&emove channel Kanal &Entfernen + + Remove &unused channels + + FxMixer @@ -1474,6 +2134,14 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch Mute this FX channel Diesen FX-Kanal stummschalten + + Solo + Solo + + + Solo FX channel + + FxRoute @@ -1482,6 +2150,68 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch Anteil, der von Kanal %1 zu Kanal %2 gesendet werden soll + + GigInstrument + + Bank + Bank + + + Patch + Patch + + + Gain + + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Patch wählen + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2073,6 +2803,17 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch GRUNDLAUTSTÄRKE + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2171,6 +2912,34 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch Vocal Formant Filter Vokalformant-Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2261,6 +3030,10 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch Pitch range Tonhöhenbereich + + Master Pitch + + InstrumentTrackView @@ -2395,6 +3168,29 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. Klicken Sie hier, wenn Sie die aktuellen Instrumentenspur-Einstellungen in einer Presetdatei speichern möchten. Sie können dieses Preset später durch Doppelklicken auf die Datei im Preset-Browser öffnen. + + MISC + VERSCHIEDENES + + + + Knob + + Set linear + Linear einstellen + + + Set logarithmic + Logarithmisch einstellen + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Bitte geben Sie einen Wert zwischen -96.0 dBV und 6.0 dBV ein: + + + Please enter a new value between %1 and %2: + Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: + LadspaControl @@ -2431,10 +3227,6 @@ Sie können FX Kanäle im Kontextmenü entfernen und verschieben, welches durch LadspaEffect - - Effect - Effekt - Unknown LADSPA plugin %1 requested. Unbekanntes LADSPA-Plugin %1 angefordert. @@ -2595,10 +3387,6 @@ Please make sure you have write-access to the file and try again. Konnte die Konfigurationsdatei %1 nicht speichern. Sie haben möglicherweise keine Schreibrechte auf diese Datei. Bitte überprüfen Sie Ihre Rechte und versuchen es erneut. - - &Project - &Projekt - &New &Neu @@ -2607,10 +3395,6 @@ Bitte überprüfen Sie Ihre Rechte und versuchen es erneut. &Open... Ö&ffnen... - - Recently opened projects - Zuletzt geöffnete Projekte - &Save &Speichern @@ -2647,10 +3431,6 @@ Bitte überprüfen Sie Ihre Rechte und versuchen es erneut. &Help &Hilfe - - Online help - Online-Hilfe - Help Hilfe @@ -2755,14 +3535,6 @@ Bitte überprüfen Sie Ihre Rechte und versuchen es erneut. The current project was modified since last saving. Do you want to save it now? Das aktuelle Projekt wurde seit dem letzten Speichern geändert. Wollen Sie es jetzt speichern? - - Open project - Projekt öffnen - - - Save project - Projekt speichern - Help not available Hilfe nicht verfügbar @@ -2773,38 +3545,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Derzeit ist in LMMS keine Hilfe verfügbar. Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS. - - My projects - Meine Projekte - - - My samples - Meine Samples - - - My presets - Meine Presets - - - My home - Persönlicher Ordner - - - My computer - Mein Computer - - - Root directory - Wurzelverzeichnis - - - Project recovery - Projektwiederherstellung - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - Es sieht so aus, als ob die letzte Sitzung nicht ordentlich beendet wurde. Möchten Sie das Projekt dieser Sitzung wiederherstellen? - Configuration file Konfigurationsdatei @@ -2813,14 +3553,6 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.Error while parsing configuration file at line %1:%2: %3 Fehler beim Parsen der Konfigurationsdatei in Zeile %1:%2: %3 - - Save as new &version - Als neue &Version speichern - - - E&xport tracks... - Spuren E&xportieren… - LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) @@ -2845,6 +3577,62 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.Volumes Volumes + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -3628,6 +4416,41 @@ PM bedeutet Phasen-Modulation: Die Phase von Oszillator 3 wird durch Oszillator Der Neigung-Regler kontrolliert die Kurve oder Form der Hüllkurve. Ein Wert von 0 erzeugt einen direkten Anstieg und Abfall. Negative Werte erzeugen Kurven, die langsam starten, schnell die Spitze erreichen und wieder langsam abfallen. Positive Werte erzeugen Kurven, die schnell starten und enden und länger in der Nähe der Spitze bleiben. + + MultitapEchoControlDialog + + Length + Länge + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3906,6 +4729,14 @@ Lautstärke eines Schritts kann mit dem Mausrad geändert werden DCAY DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3937,29 +4768,13 @@ Lautstärke eines Schritts kann mit dem Mausrad geändert werden Amount Multiplicator Stärkenmultiplikator + + Treshold + + PianoRoll - - Cut selected notes (Ctrl+X) - Ausgewählte Noten ausschneiden (Strg+X) - - - Copy selected notes (Ctrl+C) - Ausgewählte Noten kopieren (Strg+C) - - - Paste notes from clipboard (Ctrl+V) - Noten aus Zwischenablage einfügen (Strg+V) - - - Play/pause current pattern (Space) - Aktuellen Pattern abspielen/pausieren (Leertaste) - - - Stop playing of current pattern (Space) - Abspielen des aktuellen Patterns stoppen (Leertaste) - Piano-Roll - %1 Piano-Roll - %1 @@ -3972,58 +4787,10 @@ Lautstärke eines Schritts kann mit dem Mausrad geändert werden Please open a pattern by double-clicking on it! Bitte öffnen Sie einen Pattern, indem Sie ihn doppelklicken! - - Record notes from MIDI-device/channel-piano - Noten von MIDI-Gerät/Kanal-Klavier aufnehmen - Last note Letzte Note - - Draw mode (Shift+D) - Zeichnenmodus (Umschalt+D) - - - Erase mode (Shift+E) - Radiermodus (Umschalt+E) - - - Select mode (Shift+S) - Auswahl-Modus (Umschalt+S) - - - Record notes from MIDI-device/channel-piano while playing song or BB track - Noten vom MIDI-Gerät/Kanal-Klavier aufnehmen während der Song oder BB-Track abgespielt wird - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Klicken Sie hier, um den aktuellen Pattern abzuspielen. Das ist nützlich beim Bearbeiten. Der Pattern wird automatisch wiederholt, wenn sein Ende erreicht ist. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Klicken Sie hier, um Noten von einem MIDI-Gerät oder dem virtuellen Test-Klavier des zugehörigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und hinterher können Sie diese abspielen und bearbeiten. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Klicken Sie hier, um Noten von einem MIDI-Gerät oder dem virtuellen Test-Klavier des zugehörigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und Sie werden den Song oder die BB-Spur im Hintergrund hören. - - - Click here to stop playback of current pattern. - Klicken Sie hier, um die Wiedergabe des aktuellen Patterns zu stoppen. - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klicken Sie hier, um die markierten Noten in die Zwischenablage auszuschneiden. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Klicken Sie hier, um die markierten Noten in die Zwischenablage zu kopieren. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - Klicken Sie hier, um die Noten aus der Zwischenablage im ersten sichtbaren Takt einzufügen. - Note lock Notenraster @@ -4036,26 +4803,6 @@ Lautstärke eines Schritts kann mit dem Mausrad geändert werden Note Panning Noten-Balance - - Detune mode (Shift+T) - Verstimmungsmodus (Shift+T) - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie Noten hinzufügen, in der Länge ändern und verschieben. Das ist der Standardmodus, der meistens benutzt wird. Sie können auch »Umschalt+D« auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen. Halten Sie in diesem Modus Strg gedrückt, um vorübergehend in den Auswahlmodus zu wechslen. - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Noten löschen. Sie können auch »Umschalt+E« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - Klicken Sie hier, um den Auswahlmodus zu aktivieren. In diesem Modus können Sie einzelne Noten auswählen. Alternativ können Sie auch Strg im Zeichnenmodus gedrückt halten, um vorrübergehend den Auswahlmodus zu benutzen. - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - Klicken Sie hier und der Verstimmungmodus wird aktivert. In diesem Modus können Sie auf eine Note klicken, um die Automations-Verstimmung zu öffnen. Sie können diese benutzen, um von einer Note in eine andere zu rutschen. Sie können auch »Umschalt+T« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. - Mark/unmark current semitone Aktuellen Halbton markieren/demarkieren @@ -4100,25 +4847,116 @@ Lautstärke eines Schritts kann mit dem Mausrad geändert werden Please enter a new value between %1 and %2: Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: + + + PianoRollWindow + + Play/pause current pattern (Space) + Aktuellen Pattern abspielen/pausieren (Leertaste) + + + Record notes from MIDI-device/channel-piano + Noten von MIDI-Gerät/Kanal-Klavier aufnehmen + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Noten vom MIDI-Gerät/Kanal-Klavier aufnehmen während der Song oder BB-Track abgespielt wird + + + Stop playing of current pattern (Space) + Abspielen des aktuellen Patterns stoppen (Leertaste) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Klicken Sie hier, um den aktuellen Pattern abzuspielen. Das ist nützlich beim Bearbeiten. Der Pattern wird automatisch wiederholt, wenn sein Ende erreicht ist. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Klicken Sie hier, um Noten von einem MIDI-Gerät oder dem virtuellen Test-Klavier des zugehörigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und hinterher können Sie diese abspielen und bearbeiten. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Klicken Sie hier, um Noten von einem MIDI-Gerät oder dem virtuellen Test-Klavier des zugehörigen Kanal-Fensters in den aktuellen Pattern aufzunehmen. Beim Aufnehmen werden alle Noten, die Sie spielen, in diesen Pattern geschrieben und Sie werden den Song oder die BB-Spur im Hintergrund hören. + + + Click here to stop playback of current pattern. + Klicken Sie hier, um die Wiedergabe des aktuellen Patterns zu stoppen. + + + Draw mode (Shift+D) + Zeichnenmodus (Umschalt+D) + + + Erase mode (Shift+E) + Radiermodus (Umschalt+E) + + + Select mode (Shift+S) + Auswahl-Modus (Umschalt+S) + + + Detune mode (Shift+T) + Verstimmungsmodus (Shift+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + Klicken Sie hier, um den Zeichnenmodus zu aktivieren. In diesem Modus können Sie Noten hinzufügen, in der Länge ändern und verschieben. Das ist der Standardmodus, der meistens benutzt wird. Sie können auch »Umschalt+D« auf Ihrer Tastatur drücken, um in diesen Modus zu gelangen. Halten Sie in diesem Modus Strg gedrückt, um vorübergehend in den Auswahlmodus zu wechslen. + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + Klicken Sie hier, um den Radiermodus zu aktivieren. In diesem Modus können Sie einzelne Noten löschen. Sie können auch »Umschalt+E« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + Klicken Sie hier, um den Auswahlmodus zu aktivieren. In diesem Modus können Sie einzelne Noten auswählen. Alternativ können Sie auch Strg im Zeichnenmodus gedrückt halten, um vorrübergehend den Auswahlmodus zu benutzen. + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + Klicken Sie hier und der Verstimmungmodus wird aktivert. In diesem Modus können Sie auf eine Note klicken, um die Automations-Verstimmung zu öffnen. Sie können diese benutzen, um von einer Note in eine andere zu rutschen. Sie können auch »Umschalt+T« auf Ihrer Tastatur drücken, um diesen Modus zu aktivieren. + + + Cut selected notes (Ctrl+X) + Ausgewählte Noten ausschneiden (Strg+X) + + + Copy selected notes (Ctrl+C) + Ausgewählte Noten kopieren (Strg+C) + + + Paste notes from clipboard (Ctrl+V) + Noten aus Zwischenablage einfügen (Strg+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klicken Sie hier, um die markierten Noten in die Zwischenablage auszuschneiden. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Klicken Sie hier, um die markierten Noten in die Zwischenablage zu kopieren. Sie können sie überall in einem beliebigen Pattern wieder einfügen, indem Sie auf den Einfügen-Knopf klicken. + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + Klicken Sie hier, um die Noten aus der Zwischenablage im ersten sichtbaren Takt einzufügen. + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - Dies kontrolliert die Vergrößerung einer Axe. Es kann hilfreich für bestimmte Aufgaben sein, eine Vergrößerung auszuwählen. Für normales Bearbeiten, sollte die Vergrößerung an Ihre kleinsten Noten angepasst sein. + Dies kontrolliert die Vergrößerung einer Axe. Es kann hilfreich für bestimmte Aufgaben sein, eine Vergrößerung auszuwählen. Für normales Bearbeiten, sollte die Vergrößerung an Ihre kleinsten Noten angepasst sein. The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - Das »Q« steht für Quantisierung und kontrolliert die Rastergröße an denen Noten und Kontrollpunkte einrasten. Mit kleineren Quantisierungswerten können Sie kleinere Noten im Piano Roll und exaktere Kontrollpunkte im Automation-Editor eintragen. + Das »Q« steht für Quantisierung und kontrolliert die Rastergröße an denen Noten und Kontrollpunkte einrasten. Mit kleineren Quantisierungswerten können Sie kleinere Noten im Piano Roll und exaktere Kontrollpunkte im Automation-Editor eintragen. This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - Dies lässt Sie die Länge von neuen Noten auswählen. »Letzte Note« bedeutet, dass LMMS die Länge der Note benutz, die Sie als letzes bearbeitet haben. + Dies lässt Sie die Länge von neuen Noten auswählen. »Letzte Note« bedeutet, dass LMMS die Länge der Note benutz, die Sie als letzes bearbeitet haben. The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - Diese Funktion ist direkt mit dem Kontextmenü auf dem virtuellen Keyboard, links im Piano Roll, verbunden. Nachdem Sie die Tonleiter ausgewählt haben, die Sie im Aufklapp-Menü haben möchten, können Sie auf eine gewünschte Taste auf dem virtuellen Keyboard einen Rechtsklick machen und »Aktuelle Tonleiter markieren« auswählen. LMMS markiert dann alle Noten, die zu dieser Tonleiter und Taste gehören, die Sie ausgewählt haben! + Diese Funktion ist direkt mit dem Kontextmenü auf dem virtuellen Keyboard, links im Piano Roll, verbunden. Nachdem Sie die Tonleiter ausgewählt haben, die Sie im Aufklapp-Menü haben möchten, können Sie auf eine gewünschte Taste auf dem virtuellen Keyboard einen Rechtsklick machen und »Aktuelle Tonleiter markieren« auswählen. LMMS markiert dann alle Noten, die zu dieser Tonleiter und Taste gehören, die Sie ausgewählt haben! Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - Lässt Sie einen Akkord auswählen, den LMMS dann eintragen oder markieren kann. Sie können die am häufigsten benutzten Akkorde in diesem Aufklapp-Menü finden. Nachdem Sie einen Akkord ausgewählt haben, klicken Sie irgendwo hin, um den Akkord dort zu platzieren oder machen Sie einen Rechtsklick auf dem virtuellen Keyboard, um das Kontextmenü zu öffnen und den Akkord zu makieren. Um Noten wieder einzeln einzutragen, müssen Sie »Kein Akkord« in diesem Aufklapp-Menü auswählen. + Lässt Sie einen Akkord auswählen, den LMMS dann eintragen oder markieren kann. Sie können die am häufigsten benutzten Akkorde in diesem Aufklapp-Menü finden. Nachdem Sie einen Akkord ausgewählt haben, klicken Sie irgendwo hin, um den Akkord dort zu platzieren oder machen Sie einen Rechtsklick auf dem virtuellen Keyboard, um das Kontextmenü zu öffnen und den Akkord zu makieren. Um Noten wieder einzeln einzutragen, müssen Sie »Kein Akkord« in diesem Aufklapp-Menü auswählen. @@ -4168,6 +5006,125 @@ Grund: »%2« Ziehen Sie ein Instrument entweder in den Song-Editor, den Beat+Bassline-Editor oder in eine existierende Instrumentspur. + + ProjectNotes + + Project notes + Projekt-Notizen + + + Put down your project notes here. + Schreiben Sie hier Ihre Projekt-Notizen auf. + + + Edit Actions + Bearbeiten + + + &Undo + &Rückgängig + + + Ctrl+Z + Strg+Z + + + &Redo + Wiede&rholen + + + Ctrl+Y + Strg+Y + + + &Copy + &Kopieren + + + Ctrl+C + Strg+C + + + Cu&t + A&usschneiden + + + Ctrl+X + Strg+X + + + &Paste + &Einfügen + + + Ctrl+V + Strg+V + + + Format Actions + Formatierung + + + &Bold + &Fett + + + Ctrl+B + Strg+F + + + &Italic + &Kursiv + + + Ctrl+I + Strg+K + + + &Underline + &Unterstrichen + + + Ctrl+U + Strg+U + + + &Left + &Links + + + Ctrl+L + Strg+L + + + C&enter + Z&entriert + + + Ctrl+E + Strg+Z + + + &Right + &Rechts + + + Ctrl+R + Strg+R + + + &Justify + &Blocksatz + + + Ctrl+J + Strg+J + + + &Color... + &Farbe... + + ProjectRenderer @@ -4318,6 +5275,13 @@ Grund: »%2« Datei: %1 + + RenameDialog + + Rename... + Umbenennen... + + SampleBuffer @@ -4406,6 +5370,10 @@ Grund: »%2« Volume Lautstärke + + Panning + Balance + SampleTrackView @@ -4421,13 +5389,309 @@ Grund: »%2« VOL VOL + + Panning + Balance + + + Panning: + Balance: + + + PAN + PAN + + + + SetupDialog + + Setup LMMS + Einrichtung von LMMS + + + General settings + Allgemeine Einstellungen + + + BUFFER SIZE + PUFFERGRÖSSE + + + Reset to default-value + Auf Standardwert zurücksetzen + + + MISC + VERSCHIEDENES + + + Enable tooltips + Tooltips aktivieren + + + Show restart warning after changing settings + Meldung nach Schließen dieses Dialogs zeigen + + + Display volume as dBV + Lautstärke in dBV anzeigen + + + Compress project files per default + Projektdateien standardmäßig komprimieren + + + One instrument track window mode + Instrumente im Ein-Fenster-Modus + + + HQ-mode for output audio-device + HQ-Modus für Ausgabe-Audiogerät + + + Compact track buttons + Kompakte Spur-Knöpfe + + + Sync VST plugins to host playback + VST Plugins mit der Host-Wiedergabe synchronisieren + + + Enable note labels in piano roll + Notenbeschriftung in Piano-Roll aktivieren + + + Enable waveform display by default + Wellenform standardmäßig anzeigen + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Pfade + + + LMMS working directory + LMMS-Arbeitsverzeichnis + + + VST-plugin directory + VST-Plugin-Verzeichnis + + + Artwork directory + Artwork-Verzeichnis + + + Background artwork + Hintergrundbild + + + FL Studio installation directory + FL Studio Installationsverzeichnis + + + LADSPA plugin paths + LADSPA-Pluginpfade + + + STK rawwave directory + STK RawWave-Verzeichnis + + + Default Soundfont File + Standard SoundFont-Datei + + + Performance settings + Performance-Einstellungen + + + UI effects vs. performance + UI-Effekte vs. Performance + + + Smooth scroll in Song Editor + Weiches Scrollen im Song-Editor + + + Enable auto save feature + Automatisches Speichern aktivieren + + + Show playback cursor in AudioFileProcessor + Wiedergabe-Courser im AudioFileProcessor anzeigen + + + Audio settings + Audio-Einstellungen + + + AUDIO INTERFACE + AUDIO-SCHNITTSTELLE + + + MIDI settings + MIDI-Einstellungen + + + MIDI INTERFACE + MIDI-SCHNITTSTELLE + + + OK + OK + + + Cancel + Abbrechen + + + Restart LMMS + LMMS neustarten + + + Please note that most changes won't take effect until you restart LMMS! + Bitte beachten Sie, dass die meisten Änderungen erst wirksam werden, nachdem Sie LMMS neugestartet haben! + + + Frames: %1 +Latency: %2 ms + Frames: %1 +Latenz: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Hier können Sie die interne Puffergröße einstellen, die von LMMS genutzt wird. Kleinere Werte machen sich in einer geringeren Latenz bemerkbar, können aber auch zu unbrauchbarem Sound oder schlechter Performance führen, vor allem auf älteren Computern oder Systemen mit einem Nicht-Echtzeit-Kernel. + + + Choose LMMS working directory + LMMS-Arbeitsverzeichnis wählen + + + Choose your VST-plugin directory + Wählen Sie Ihre VST-Plugin-Verzeichnis + + + Choose artwork-theme directory + Artwork-Verzeichnis wählen + + + Choose FL Studio installation directory + FL Studio Installationsverzeichnis wählen + + + Choose LADSPA plugin directory + Wählen Sie Ihr LADSPA-Plugin-Verzeichnis + + + Choose STK rawwave directory + Wählen Sie Ihr STK-RawWave-Verzeichnis + + + Choose default SoundFont + Standard-Soundfont wählen + + + Choose background artwork + Hintergrundbild wählen + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Hier können Sie Ihre bevorzugte Audio-Schnittstelle auswählen. Abhängig von der Konfiguration Ihres Systems während der Compilierung können Sie zwischen ALSA, JACK, OSS und mehr wählen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewählte Audio-Schnittstelle einzurichten. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Hier können Sie Ihre bevorzugte MIDI-Schnittstelle auswählen. Abhängig von der Konfiguration Ihres Systems während der Compilierung können Sie zwischen ALSA, OSS und mehr wählen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewählte MIDI-Schnittstelle einzurichten. + + + + Song + + Tempo + Tempo + + + Master volume + Master-Lautstärke + + + Master pitch + Master-Tonhöhe + + + Project saved + Projekt gespeichert + + + The project %1 is now saved. + Das Projekt %1 ist nun gespeichert. + + + Project NOT saved. + Projekt NICHT gespeichert. + + + The project %1 was not saved! + Das Projekt %1 wurde nicht gespeichert! + + + Import file + Datei importieren + + + MIDI sequences + MIDI-Dateien + + + FL Studio projects + FL Studio Projekte + + + Hydrogen projects + Hydrogen-Projekte + + + All file types + Alle Dateitypen + + + Empty project + Leeres Projekt + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + DIeses Projekt ist leer, weshalb das Exportieren keinen Sinn macht. Bitte erstellen Sie erst ein paar Einträge im Song-Editor! + + + Select directory for writing exported tracks... + Wählen Sie einen Ordner zum schreiben der exportierten Spuren aus… + + + untitled + unbenannt + + + Select file for project-export... + Datei für Projekt-Export wählen... + + + The following errors occured while loading: + + SongEditor - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Klicken Sie hier, wenn Sie das Abspielen des Songs stoppen wollen. Der Song-Positions-Marker wird automatisch auf den Song-Anfang zurückgesetzt. - Could not open file Konnte Datei nicht öffnen @@ -4436,50 +5700,6 @@ Grund: »%2« Could not write file Konnte Datei nicht schreiben - - Song-Editor - Song-Editor - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Klicken Sie hier, wenn Sie Ihren ganzen Song abspielen wollen. Das Abspielen wird am Song-Positions-Marker (grün) gestartet. Sie können diesen auch während des Abspielens verschieben. - - - Play song (Space) - Song abspielen (Leertaste) - - - Stop song (Space) - Abspielen des Songs stoppen (Leertaste) - - - Add beat/bassline - Beat/Bassline hinzufügen - - - Add sample-track - Sample-Spur hinzufügen - - - Draw mode - Zeichenmodus - - - Edit mode (select and move) - Editier-Modus (auswählen und verschieben) - - - Add automation-track - Automation-Spur hinzufügen - - - Record samples from Audio-device - Samples vom Audiogerät aufnehmen - - - Record samples from Audio-device while playing song or BB track - Samples vom Audiogerät während der Wiedergabe des Songs oder BB-Tracks aufnehmen - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4542,6 +5762,57 @@ Grund: »%2« Konnte %1 nicht zum Schreiben öffnen. Sie sind wahrscheinlich nicht dazu berechtigt in diese Datei zu schreiben. Bitte stellen Sie sicher, dass Sie Schreibrechte für diese Datei haben und versuchen Sie es erneut. + + SongEditorWindow + + Song-Editor + Song-Editor + + + Play song (Space) + Song abspielen (Leertaste) + + + Record samples from Audio-device + Samples vom Audiogerät aufnehmen + + + Record samples from Audio-device while playing song or BB track + Samples vom Audiogerät während der Wiedergabe des Songs oder BB-Tracks aufnehmen + + + Stop song (Space) + Abspielen des Songs stoppen (Leertaste) + + + Add beat/bassline + Beat/Bassline hinzufügen + + + Add sample-track + Sample-Spur hinzufügen + + + Add automation-track + Automation-Spur hinzufügen + + + Draw mode + Zeichenmodus + + + Edit mode (select and move) + Editier-Modus (auswählen und verschieben) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Klicken Sie hier, wenn Sie Ihren ganzen Song abspielen wollen. Das Abspielen wird am Song-Positions-Marker (grün) gestartet. Sie können diesen auch während des Abspielens verschieben. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Klicken Sie hier, wenn Sie das Abspielen des Songs stoppen wollen. Der Song-Positions-Marker wird automatisch auf den Song-Anfang zurückgesetzt. + + SpectrumAnalyzerControlDialog @@ -4568,6 +5839,13 @@ Grund: »%2« Kanalmodus + + TabWidget + + Settings for %1 + Einstellungen für %1 + + TempoSyncKnob @@ -4650,6 +5928,52 @@ Grund: »%2« Klicken Sie hier, um die Zeiteinheit zu ändern + + TimeLineWidget + + Enable/disable auto-scrolling + Automatisches Scrollen aktivieren/deaktivieren + + + Enable/disable loop-points + Loop-Punkte aktivieren/deaktivieren + + + After stopping go back to begin + Nach Stop zum Anfang zurückkehren + + + After stopping go back to position at which playing was started + Nach Stop zur Position zurückkehren, an der es los ging + + + After stopping keep position + Nach Stop Position beibehalten + + + Hint + Tipp + + + Press <Ctrl> to disable magnetic loop points. + Drücken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren. + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + Halten Sie <Umschalt>, um den Anfangs-Loop-Punkt zu verschieben; Drücken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren. + + + + Track + + Muted + Stumm + + + Solo + Solo + + TrackContainer @@ -4693,6 +6017,107 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich Importiere FLP-Datei… + + TrackContentObject + + Muted + Stumm + + + + TrackContentObjectView + + Current position + Aktuelle Position + + + Hint + Tipp + + + Press <Ctrl> and drag to make a copy. + <Strg> drücken und ziehen, um eine Kopie zu erstellen. + + + Current length + Aktuelle Länge + + + Press <Ctrl> for free resizing. + Drücken Sie <Strg> für freie Größenänderung. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 bis %5:%6) + + + Delete (middle mousebutton) + Löschen (mittlere Maustaste) + + + Cut + Ausschneiden + + + Copy + Kopieren + + + Paste + Einfügen + + + Mute/unmute (<Ctrl> + middle click) + Stumm/Laut schalten (<Strg> + Mittelklick) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Drücken Sie <Strg> während des Klicks auf den Verschiebe-Griff, um eine neue Klicken und Ziehen-Aktion zu beginnen. + + + Actions for this track + Aktionen für diese Spur + + + Mute + Stumm + + + Solo + Solo + + + Mute this track + Diese Spur stummschalten + + + Clone this track + Diese Spur klonen + + + Remove this track + Diese Spur entfernen + + + Clear this track + Diese Spur leeren + + + FX %1: %2 + + + + Turn all recording on + Alle Aufnahmen einschalten + + + Turn all recording off + Alle Aufnahmen ausschalten + + TripleOscillatorView @@ -4938,6 +6363,17 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich - VST Plugin Controller + + VisualizationWidget + + click to enable/disable visualization of master-output + klicken, um Visualisierung des Masterausgangs an-/auszuschalten + + + Click to enable + Klick zur Aktivierung + + VstEffectControlDialog @@ -5044,12 +6480,8 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich Bitte warten, während das VST-Plugin geladen wird… - Failed loading VST plugin - Laden des VST-Plugins fehlgeschlagen - - - The VST plugin %1 could not be loaded for some reason. - Das VST-Plugin %1 konnte aus irgend einem Grund nicht geladen werden. + The VST plugin %1 could not be loaded. + @@ -5454,78 +6886,9 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich Sinc Sinc - - - bbEditor - Play/pause current beat/bassline (Space) - Aktuellen Beat/Bassline abspielen/pausieren (Leertaste) - - - Beat+Bassline Editor - Beat+Bassline Editor - - - Add beat/bassline - Beat/Bassline hinzufügen - - - Add automation-track - Automation-Spur hinzufügen - - - Stop playback of current beat/bassline (Space) - Abspielen des aktuellen Beats/Bassline stoppen (Leertaste) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Klicken Sie hier, um den aktuelle Beat/Bassline abzuspielen. Der Beat/Bassline wird am Ende automatisch wiederholt. - - - Click here to stop playing of current beat/bassline. - Klicken Sie hier, um das Abspielen des aktuellen Beats/Bassline zu stoppen (Leertaste). - - - Remove steps - Schritte entfernen - - - Add steps - Schritte hinzufügen - - - - bbTCOView - - Open in Beat+Bassline-Editor - Im Beat+Bassline-Editor öffnen - - - Reset name - Name zurücksetzen - - - Change name - Name ändern - - - Change color - Farbe ändern - - - Reset color to default - Farbe auf Standard zurücksetzen - - - - bbTrack - - Beat/Bassline %1 - Beat/Bassline %1 - - - Clone of %1 - Klon von %1 + Sample not found: %1 + @@ -5610,17 +6973,6 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich Klick für eine benutzerdefinierte Wellenform. - - captionMenu - - &Help - &Hilfe - - - Help (not available) - Hilfe (nicht verfügbar) - - dynProcControlDialog @@ -5735,42 +7087,6 @@ Bitte stellen Sie sicher, dass Sie Leserechte auf diese Datei sowie das Verzeich Stereomodus - - exportProjectDialog - - Could not open file - Konnte Datei nicht öffnen - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Die Datei %1 konnte nicht zum Schreiben geöffnet werden. -Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeichnis, das diese Datei enthält, besitzen und versuchen es erneut! - - - Error - Fehler - - - Error while determining file-encoder device. Please try to choose a different output format. - Fehler beim Bestimmen des Datei-Enkoder-Geräts. Bitte wählen Sie ein anderes Ausgabeformat. - - - Rendering: %1% - Rendere: %1% - - - Export project to %1 - Projekt nach %1 exportieren - - - - fader - - Please enter a new value between %1 and %2: - Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: - - graphModel @@ -5872,25 +7188,6 @@ Bitte stellen Sie sicher, dass Sie Schreibrechte auf diese Datei und das Verzeic Verzerrungsende: - - knob - - Please enter a new value between %1 and %2: - Bitte geben Sie einen neuen Wert zwischen %1 und %2 ein: - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Bitte geben Sie einen Wert zwischen -96.0 dBV und 6.0 dBV ein: - - - Set linear - Linear einstellen - - - Set logarithmic - Logarithmisch einstellen - - ladspaBrowserView @@ -7223,332 +8520,29 @@ Dieser Chip wurde in Commodore 64 Computern genutzt. A native delay plugin Ein natives Verzögerung-Plugin - - - projectNotes - Put down your project notes here. - Schreiben Sie hier Ihre Projekt-Notizen auf. + Player for GIG files + - Project notes - Projekt-Notizen + A multitap echo delay plugin + - Edit Actions - Bearbeiten + A native flanger plugin + - &Undo - &Rückgängig + An oversampling bitcrusher + - Ctrl+Z - Strg+Z + A native eq plugin + - &Redo - Wiede&rholen - - - Ctrl+Y - Strg+Y - - - &Copy - &Kopieren - - - Ctrl+C - Strg+C - - - Cu&t - A&usschneiden - - - Ctrl+X - Strg+X - - - &Paste - &Einfügen - - - Ctrl+V - Strg+V - - - Format Actions - Formatierung - - - &Bold - &Fett - - - Ctrl+B - Strg+F - - - &Italic - &Kursiv - - - Ctrl+I - Strg+K - - - &Underline - &Unterstrichen - - - Ctrl+U - Strg+U - - - &Left - &Links - - - Ctrl+L - Strg+L - - - C&enter - Z&entriert - - - Ctrl+E - Strg+Z - - - &Right - &Rechts - - - Ctrl+R - Strg+R - - - &Justify - &Blocksatz - - - Ctrl+J - Strg+J - - - &Color... - &Farbe... - - - - renameDialog - - Rename... - Umbenennen... - - - - setupDialog - - Setup LMMS - Einrichtung von LMMS - - - General settings - Allgemeine Einstellungen - - - BUFFER SIZE - PUFFERGRÖSSE - - - Reset to default-value - Auf Standardwert zurücksetzen - - - MISC - VERSCHIEDENES - - - Audio settings - Audio-Einstellungen - - - AUDIO INTERFACE - AUDIO-SCHNITTSTELLE - - - MIDI settings - MIDI-Einstellungen - - - MIDI INTERFACE - MIDI-SCHNITTSTELLE - - - OK - OK - - - Cancel - Abbrechen - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Hier können Sie die interne Puffergröße einstellen, die von LMMS genutzt wird. Kleinere Werte machen sich in einer geringeren Latenz bemerkbar, können aber auch zu unbrauchbarem Sound oder schlechter Performance führen, vor allem auf älteren Computern oder Systemen mit einem Nicht-Echtzeit-Kernel. - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Hier können Sie Ihre bevorzugte Audio-Schnittstelle auswählen. Abhängig von der Konfiguration Ihres Systems während der Compilierung können Sie zwischen ALSA, JACK, OSS und mehr wählen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewählte Audio-Schnittstelle einzurichten. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Hier können Sie Ihre bevorzugte MIDI-Schnittstelle auswählen. Abhängig von der Konfiguration Ihres Systems während der Compilierung können Sie zwischen ALSA, OSS und mehr wählen. Unterhalb sehen Sie eine Box, welche Kontrollelemente anbietet, um die gewählte MIDI-Schnittstelle einzurichten. - - - Restart LMMS - LMMS neustarten - - - Please note that most changes won't take effect until you restart LMMS! - Bitte beachten Sie, dass die meisten Änderungen erst wirksam werden, nachdem Sie LMMS neugestartet haben! - - - LMMS working directory - LMMS-Arbeitsverzeichnis - - - VST-plugin directory - VST-Plugin-Verzeichnis - - - Choose LMMS working directory - LMMS-Arbeitsverzeichnis wählen - - - Choose your VST-plugin directory - Wählen Sie Ihre VST-Plugin-Verzeichnis - - - Performance settings - Performance-Einstellungen - - - UI effects vs. performance - UI-Effekte vs. Performance - - - Frames: %1 -Latency: %2 ms - Frames: %1 -Latenz: %2 ms - - - Artwork directory - Artwork-Verzeichnis - - - Choose artwork-theme directory - Artwork-Verzeichnis wählen - - - Display volume as dBV - Lautstärke in dBV anzeigen - - - FL Studio installation directory - FL Studio Installationsverzeichnis - - - Choose FL Studio installation directory - FL Studio Installationsverzeichnis wählen - - - STK rawwave directory - STK RawWave-Verzeichnis - - - Choose LADSPA plugin directory - Wählen Sie Ihr LADSPA-Plugin-Verzeichnis - - - Choose STK rawwave directory - Wählen Sie Ihr STK-RawWave-Verzeichnis - - - Enable tooltips - Tooltips aktivieren - - - Show restart warning after changing settings - Meldung nach Schließen dieses Dialogs zeigen - - - Compress project files per default - Projektdateien standardmäßig komprimieren - - - HQ-mode for output audio-device - HQ-Modus für Ausgabe-Audiogerät - - - Paths - Pfade - - - LADSPA plugin paths - LADSPA-Pluginpfade - - - Default Soundfont File - Standard SoundFont-Datei - - - Background artwork - Hintergrundbild - - - Choose default SoundFont - Standard-Soundfont wählen - - - Choose background artwork - Hintergrundbild wählen - - - One instrument track window mode - Instrumente im Ein-Fenster-Modus - - - Compact track buttons - Kompakte Spur-Knöpfe - - - Smooth scroll in Song Editor - Weiches Scrollen im Song-Editor - - - Sync VST plugins to host playback - VST Plugins mit der Host-Wiedergabe synchronisieren - - - Enable note labels in piano roll - Notenbeschriftung in Piano-Roll aktivieren - - - Enable waveform display by default - Wellenform standardmäßig anzeigen - - - Enable auto save feature - Automatisches Speichern aktivieren - - - Show playback cursor in AudioFileProcessor - Wiedergabe-Courser im AudioFileProcessor anzeigen + A 4-band Crossover Equalizer + @@ -7656,6 +8650,10 @@ Latenz: %2 ms Chorus Depth Chorus/Tiefe + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7901,77 +8899,6 @@ Latenz: %2 ms Test, wenn aktiviert, wird Oszillator %1 zurückgesetzt und auf Null gesperrt, bis Test ausgeschaltet wird. - - song - - Project saved - Projekt gespeichert - - - The project %1 is now saved. - Das Projekt %1 ist nun gespeichert. - - - Project NOT saved. - Projekt NICHT gespeichert. - - - The project %1 was not saved! - Das Projekt %1 wurde nicht gespeichert! - - - Import file - Datei importieren - - - untitled - unbenannt - - - Select file for project-export... - Datei für Projekt-Export wählen... - - - Tempo - Tempo - - - Master volume - Master-Lautstärke - - - Master pitch - Master-Tonhöhe - - - Empty project - Leeres Projekt - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - DIeses Projekt ist leer, weshalb das Exportieren keinen Sinn macht. Bitte erstellen Sie erst ein paar Einträge im Song-Editor! - - - MIDI sequences - MIDI-Dateien - - - FL Studio projects - FL Studio Projekte - - - All file types - Alle Dateitypen - - - Hydrogen projects - Hydrogen-Projekte - - - Select directory for writing exported tracks... - Wählen Sie einen Ordner zum schreiben der exportierten Spuren aus… - - stereoEnhancerControlDialog @@ -8028,176 +8955,8 @@ Latenz: %2 ms Rechts-nach-rechts - - tabWidget - - Settings for %1 - Einstellungen für %1 - - - - timeLine - - Enable/disable auto-scrolling - Automatisches Scrollen aktivieren/deaktivieren - - - Enable/disable loop-points - Loop-Punkte aktivieren/deaktivieren - - - After stopping go back to begin - Nach Stop zum Anfang zurückkehren - - - After stopping go back to position at which playing was started - Nach Stop zur Position zurückkehren, an der es los ging - - - After stopping keep position - Nach Stop Position beibehalten - - - Hint - Tipp - - - Press <Ctrl> to disable magnetic loop points. - Drücken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren. - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - Halten Sie <Umschalt>, um den Anfangs-Loop-Punkt zu verschieben; Drücken Sie <Strg>, um magnetische Loop-Punkte zu deaktivieren. - - - - track - - Muted - Stumm - - - Solo - Solo - - - - trackContentObject - - Muted - Stumm - - - - trackContentObjectView - - Current position - Aktuelle Position - - - Hint - Tipp - - - Current length - Aktuelle Länge - - - Press <Ctrl> for free resizing. - Drücken Sie <Strg> für freie Größenänderung. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 bis %5:%6) - - - Delete (middle mousebutton) - Löschen (mittlere Maustaste) - - - Cut - Ausschneiden - - - Copy - Kopieren - - - Paste - Einfügen - - - Mute/unmute (<Ctrl> + middle click) - Stumm/Laut schalten (<Strg> + Mittelklick) - - - Press <Ctrl> and drag to make a copy. - <Strg> drücken und ziehen, um eine Kopie zu erstellen. - - - - trackOperationsWidget - - Clone this track - Diese Spur klonen - - - Remove this track - Diese Spur entfernen - - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Drücken Sie <Strg> während des Klicks auf den Verschiebe-Griff, um eine neue Klicken und Ziehen-Aktion zu beginnen. - - - Actions for this track - Aktionen für diese Spur - - - Mute - Stumm - - - Mute this track - Diese Spur stummschalten - - - Solo - Solo - - - Turn all recording on - Alle Aufnahmen einschalten - - - Turn all recording off - Alle Aufnahmen ausschalten - - - Clear this track - Diese Spur leeren - - - Assign to new FX Channel - - - - FX %1: %2 - - - vestigeInstrument - - Failed loading VST-plugin - Laden des VST-Plugins fehlgeschlagen - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - Das VST-Plugin %1 konnte aus irgendeinem Grund nicht geladen werden. -Wenn es mit anderer VST-software unter Linux funktioniert, kontaktieren Sie bitte einen LMMS-Entwickler! - Loading plugin Lade Plugin @@ -8457,17 +9216,6 @@ Die LED rechts unterhalb der Wellenform gibt an, ob die Saite aktiviert ist.Benutzerdefinierte Wellenform für aktuellen Oszillator nutzen. - - visualizationWidget - - click to enable/disable visualization of master-output - klicken, um Visualisierung des Masterausgangs an-/auszuschalten - - - Click to enable - Klick zur Aktivierung - - voiceObject diff --git a/data/locale/en.ts b/data/locale/en.ts index 23e8eb58d..49f9dcbd3 100644 --- a/data/locale/en.ts +++ b/data/locale/en.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME @@ -324,16 +325,31 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + + + + Values copied + + + + All selected values were copied to the clipboard. + + + + + AutomationEditorWindow Play/pause current pattern (Space) - Stop playing of current pattern (Space) + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + Stop playing of current pattern (Space) @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - - Cut selected values (Ctrl+X) - - - - Copy selected values (Ctrl+C) - - - - Paste values from clipboard (Ctrl+V) - - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the values from the clipboard will be pasted at the first visible measure. - - - - Automation Editor - no pattern - - - - Automation Editor - %1 - - - - Please open an automation pattern with the context menu of a control! - - - - Values copied - - - - All selected values were copied to the clipboard. - - Discrete progression @@ -413,7 +401,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -429,11 +421,39 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Copy selected values (Ctrl+C) + + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the values from the clipboard will be pasted at the first visible measure. + + + + Tension: + + + + Automation Editor - no pattern + + + + Automation Editor - %1 @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp + + BBEditor + + Beat+Bassline Editor + + + + Play/pause current beat/bassline (Space) + + + + Stop playback of current beat/bassline (Space) + + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + + + + Click here to stop playing of current beat/bassline. + + + + Add beat/bassline + + + + Add automation-track + + + + Remove steps + + + + Add steps + + + + + BBTCOView + + Open in Beat+Bassline-Editor + + + + Reset name + + + + Change name + + + + Change color + + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + + + + Help (not available) + + + CarlaInstrumentView @@ -650,8 +845,67 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin + + + CrossoverEQControlDialog - &Help + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 @@ -670,34 +924,14 @@ If you're interested in translating LMMS in another language or want to imp - Lfo Amount + Lfo Amount DelayControlsDialog - Delay - - - - Delay Time Samples: - - - - Feedback - - - - Feedback Amount: - - - - Lfo Hz - - - - Lfo Hz: + Delay @@ -705,7 +939,30 @@ If you're interested in translating LMMS in another language or want to imp - Lfo Amt: + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + + DetuningHelper + + Note detuning @@ -834,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -961,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin - - &Help - - EnvelopeAndLfoParameters @@ -1204,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1342,6 +1898,42 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + + + + Export project to %1 + + + + Error + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + Rendering: %1% + + + + + Fader + + Please enter a new value between %1 and %2: + + FileBrowser @@ -1377,6 +1969,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + + + + White Noise Amount: + + + FxLine @@ -1410,7 +2072,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help + Remove &unused channels @@ -1439,9 +2101,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1454,6 +2113,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel + + Solo + + + + Solo FX channel + + FxRoute @@ -1462,6 +2129,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + + + + Patch + + + + Gain + + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2053,6 +2782,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2151,6 +2891,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2241,6 +3009,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2375,6 +3147,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + + + + Please enter a new value between %1 and %2: + + LadspaControl @@ -2411,10 +3206,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. @@ -2536,10 +3327,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2553,6 +3340,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2573,10 +3364,6 @@ Double click to pick a file. Please make sure you have write-access to the file and try again. - - &Project - - &New @@ -2621,10 +3408,6 @@ Please make sure you have write-access to the file and try again. &Help - - Online help - - Help @@ -2729,14 +3512,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? - - Open project - - - - Save project - - Help not available @@ -2746,38 +3521,6 @@ Please make sure you have write-access to the file and try again. Please visit http://lmms.sf.net/wiki for documentation on LMMS. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2786,14 +3529,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2806,10 +3541,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes - - &Recently opened projects - - Undo @@ -2822,6 +3553,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2857,7 +3644,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE @@ -3325,6 +4112,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + + + + Saw wave + + + + Ramp wave + + + + Square wave + + + + Moog saw wave + + + + Abs. sine wave + + + + Random + + + + Random smooth + + MonstroView @@ -3497,6 +4376,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3774,6 +4688,14 @@ use mouse wheel to set volume of a step DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3805,29 +4727,13 @@ use mouse wheel to set volume of a step Amount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - - - - Stop playing of current pattern (Space) - - - - Cut selected notes (Ctrl+X) - - - - Copy selected notes (Ctrl+C) - - - - Paste notes from clipboard (Ctrl+V) - - Piano-Roll - no pattern @@ -3840,58 +4746,10 @@ use mouse wheel to set volume of a step Please open a pattern by double-clicking on it! - - Record notes from MIDI-device/channel-piano - - - - Record notes from MIDI-device/channel-piano while playing song or BB track - - - - Draw mode (Shift+D) - - - - Erase mode (Shift+E) - - - - Select mode (Shift+S) - - Last note - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock @@ -3904,26 +4762,6 @@ use mouse wheel to set volume of a step Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3948,26 +4786,6 @@ use mouse wheel to set volume of a step No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3989,6 +4807,117 @@ use mouse wheel to set volume of a step + + PianoRollWindow + + Play/pause current pattern (Space) + + + + Record notes from MIDI-device/channel-piano + + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + Stop playing of current pattern (Space) + + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + + + + Erase mode (Shift+E) + + + + Select mode (Shift+S) + + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + + + + Copy selected notes (Ctrl+C) + + + + Paste notes from clipboard (Ctrl+V) + + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -4020,6 +4949,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + + + + Instrument browser + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + ProjectNotes + + Project notes + + + + Put down your project notes here. + + + + Edit Actions + + + + &Undo + + + + Ctrl+Z + + + + &Redo + + + + Ctrl+Y + + + + &Copy + + + + Ctrl+C + + + + Cu&t + + + + Ctrl+X + + + + &Paste + + + + Ctrl+V + + + + Format Actions + + + + &Bold + + + + Ctrl+B + + + + &Italic + + + + Ctrl+I + + + + &Underline + + + + Ctrl+U + + + + &Left + + + + Ctrl+L + + + + C&enter + + + + Ctrl+E + + + + &Right + + + + Ctrl+R + + + + &Justify + + + + Ctrl+J + + + + &Color... + + + ProjectRenderer @@ -4170,6 +5233,13 @@ Reason: "%2" + + RenameDialog + + Rename... + + + SampleBuffer @@ -4258,6 +5328,10 @@ Reason: "%2" Volume + + Panning + + SampleTrackView @@ -4273,37 +5347,308 @@ Reason: "%2" VOL + + Panning + + + + Panning: + + + + PAN + + + + + SetupDialog + + Setup LMMS + + + + General settings + + + + BUFFER SIZE + + + + Reset to default-value + + + + MISC + + + + Enable tooltips + + + + Show restart warning after changing settings + + + + Display volume as dBV + + + + Compress project files per default + + + + One instrument track window mode + + + + HQ-mode for output audio-device + + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + + + + LMMS working directory + + + + VST-plugin directory + + + + Artwork directory + + + + Background artwork + + + + FL Studio installation directory + + + + LADSPA plugin paths + + + + STK rawwave directory + + + + Default Soundfont File + + + + Performance settings + + + + UI effects vs. performance + + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + + + + AUDIO INTERFACE + + + + MIDI settings + + + + MIDI INTERFACE + + + + OK + + + + Cancel + + + + Restart LMMS + + + + Please note that most changes won't take effect until you restart LMMS! + + + + Frames: %1 +Latency: %2 ms + + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + + + + Choose LMMS working directory + + + + Choose your VST-plugin directory + + + + Choose artwork-theme directory + + + + Choose FL Studio installation directory + + + + Choose LADSPA plugin directory + + + + Choose STK rawwave directory + + + + Choose default SoundFont + + + + Choose background artwork + + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + + + + + Song + + Tempo + + + + Master volume + + + + Master pitch + + + + Project saved + + + + The project %1 is now saved. + + + + Project NOT saved. + + + + The project %1 was not saved! + + + + Import file + + + + MIDI sequences + + + + FL Studio projects + + + + Hydrogen projects + + + + All file types + + + + Empty project + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + Select directory for writing exported tracks... + + + + untitled + + + + Select file for project-export... + + + + The following errors occured while loading: + + SongEditor - - Song-Editor - - - - Play song (Space) - - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - - - - Stop song (Space) - - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - - - - Add beat/bassline - - - - Add sample-track - - Could not open file @@ -4312,26 +5657,6 @@ Reason: "%2" Could not write file - - Add automation-track - - - - Draw mode - - - - Edit mode (select and move) - - - - Record samples from Audio-device - - - - Record samples from Audio-device while playing song or BB track - - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4394,6 +5719,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + + + + Play song (Space) + + + + Record samples from Audio-device + + + + Record samples from Audio-device while playing song or BB track + + + + Stop song (Space) + + + + Add beat/bassline + + + + Add sample-track + + + + Add automation-track + + + + Draw mode + + + + Edit mode (select and move) + + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + + + SpectrumAnalyzerControlDialog @@ -4420,6 +5796,13 @@ Reason: "%2" + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4462,10 +5845,6 @@ Reason: "%2" Custom... - - &Help - - Custom @@ -4506,6 +5885,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + + + + Enable/disable loop-points + + + + After stopping go back to begin + + + + After stopping go back to position at which playing was started + + + + After stopping keep position + + + + Hint + + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + + + + Solo + + + TrackContainer @@ -4547,6 +5972,107 @@ Please make sure you have read-permission to the file and the directory containi + + TrackContentObject + + Muted + + + + + TrackContentObjectView + + Current position + + + + Hint + + + + Press <Ctrl> and drag to make a copy. + + + + Current length + + + + Press <Ctrl> for free resizing. + + + + %1:%2 (%3:%4 to %5:%6) + + + + Delete (middle mousebutton) + + + + Cut + + + + Copy + + + + Paste + + + + Mute/unmute (<Ctrl> + middle click) + + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + + + + Actions for this track + + + + Mute + + + + Solo + + + + Mute this track + + + + Clone this track + + + + Remove this track + + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4690,17 +6216,6 @@ Please make sure you have read-permission to the file and the directory containi - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4803,6 +6318,17 @@ Please make sure you have read-permission to the file and the directory containi + + VisualizationWidget + + click to enable/disable visualization of master-output + + + + Click to enable + + + VstEffectControlDialog @@ -4909,11 +6435,7 @@ Please make sure you have read-permission to the file and the directory containi - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5319,77 +6841,8 @@ Please make sure you have read-permission to the file and the directory containi Sinc - - - bbEditor - Beat+Bassline Editor - - - - Play/pause current beat/bassline (Space) - - - - Add beat/bassline - - - - Add automation-track - - - - Stop playback of current beat/bassline (Space) - - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - - - - Click here to stop playing of current beat/bassline. - - - - Remove steps - - - - Add steps - - - - - bbTCOView - - Open in Beat+Bassline-Editor - - - - Reset name - - - - Change name - - - - Change color - - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - - - - Clone of %1 + Sample not found: %1 @@ -5589,41 +7042,6 @@ Please make sure you have read-permission to the file and the directory containi - - exportProjectDialog - - Could not open file - - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - - - - Error - - - - Error while determining file-encoder device. Please try to choose a different output format. - - - - Rendering: %1% - - - - Export project to %1 - - - - - fader - - Please enter a new value between %1 and %2: - - - graphModel @@ -5725,21 +7143,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - - - - Please enter a new value between %1 and %2: - - - ladspaBrowserView @@ -6461,13 +7864,6 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - - - opl2instrument @@ -6921,10 +8317,6 @@ Double clicking any of the plugins will bring up information on the ports.no description - - Instrument plugins - - Incomplete monophonic imitation tb303 @@ -6977,14 +8369,6 @@ Double clicking any of the plugins will bring up information on the ports.Filter for importing MIDI-files into LMMS - - Instrument browser - - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7078,334 +8462,79 @@ This chip was used in the Commodore 64 computer. A native delay plugin - - - projectNotes - Project notes + Player for GIG files - Put down your project notes here. + A multitap echo delay plugin - Edit Actions + A native flanger plugin - &Undo + An oversampling bitcrusher - Ctrl+Z + A native eq plugin - &Redo - - - - Ctrl+Y - - - - &Copy - - - - Ctrl+C - - - - Cu&t - - - - Ctrl+X - - - - &Paste - - - - Ctrl+V - - - - Format Actions - - - - &Bold - - - - Ctrl+B - - - - &Italic - - - - Ctrl+I - - - - &Underline - - - - Ctrl+U - - - - &Left - - - - Ctrl+L - - - - C&enter - - - - Ctrl+E - - - - &Right - - - - Ctrl+R - - - - &Justify - - - - Ctrl+J - - - - &Color... + A 4-band Crossover Equalizer - renameDialog + setupWidget - Rename... - - - - - setupDialog - - Setup LMMS + JACK (JACK Audio Connection Kit) - General settings + OSS Raw-MIDI (Open Sound System) - BUFFER SIZE + SDL (Simple DirectMedia Layer) - Reset to default-value + PulseAudio (bad latency!) - MISC + Dummy (no MIDI support) - Enable tooltips + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Show restart warning after changing settings + PortAudio - Display volume as dBV + Dummy (no sound output) - Compress project files per default + ALSA (Advanced Linux Sound Architecture) - HQ-mode for output audio-device + OSS (Open Sound System) - LMMS working directory + WinMM MIDI - VST-plugin directory - - - - Artwork directory - - - - FL Studio installation directory - - - - STK rawwave directory - - - - Performance settings - - - - UI effects vs. performance - - - - Audio settings - - - - AUDIO INTERFACE - - - - MIDI settings - - - - MIDI INTERFACE - - - - OK - - - - Cancel - - - - Restart LMMS - - - - Please note that most changes won't take effect until you restart LMMS! - - - - Frames: %1 -Latency: %2 ms - - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - - - - Choose LMMS working directory - - - - Choose your VST-plugin directory - - - - Choose artwork-theme directory - - - - Choose FL Studio installation directory - - - - Choose LADSPA plugin directory - - - - Choose STK rawwave directory - - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - - - - Paths - - - - LADSPA plugin paths - - - - Default Soundfont File - - - - Background artwork - - - - Choose default SoundFont - - - - Choose background artwork - - - - One instrument track window mode - - - - Compact track buttons - - - - Sync VST plugins to host playback - - - - Enable note labels in piano roll - - - - Enable waveform display by default - - - - Smooth scroll in Song Editor - - - - Enable auto save feature - - - - Show playback cursor in AudioFileProcessor - - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7463,6 +8592,10 @@ Latency: %2 ms Chorus Depth + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7708,77 +8841,6 @@ Latency: %2 ms - - song - - Tempo - - - - Master volume - - - - Master pitch - - - - Project saved - - - - The project %1 is now saved. - - - - Project NOT saved. - - - - The project %1 was not saved! - - - - Import file - - - - untitled - - - - Select file for project-export... - - - - Empty project - - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - - - - MIDI sequences - - - - FL Studio projects - - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7835,157 +8897,6 @@ Latency: %2 ms - - timeLine - - Enable/disable auto-scrolling - - - - Enable/disable loop-points - - - - After stopping go back to begin - - - - After stopping go back to position at which playing was started - - - - After stopping keep position - - - - Hint - - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - - - - Solo - - - - - trackContentObject - - Muted - - - - - trackContentObjectView - - Current position - - - - Hint - - - - Press <Ctrl> and drag to make a copy. - - - - Current length - - - - Press <Ctrl> for free resizing. - - - - %1:%2 (%3:%4 to %5:%6) - - - - Delete (middle mousebutton) - - - - Cut - - - - Copy - - - - Paste - - - - Mute/unmute (<Ctrl> + middle click) - - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - - - - Actions for this track - - - - Mute - - - - Mute this track - - - - Solo - - - - Clone this track - - - - Remove this track - - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7996,15 +8907,6 @@ Latency: %2 ms Please wait while loading VST-plugin... - - Failed loading VST-plugin - - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - - vibed @@ -8215,10 +9117,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. - - &Help - - Use a sine-wave for current oscillator. @@ -8244,17 +9142,6 @@ The LED in the lower right corner of the waveform editor determines whether the - - visualizationWidget - - click to enable/disable visualization of master-output - - - - Click to enable - - - voiceObject diff --git a/data/locale/es.ts b/data/locale/es.ts index 050707a5c..5394c8973 100644 --- a/data/locale/es.ts +++ b/data/locale/es.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME @@ -324,18 +325,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + + + + Values copied + + + + All selected values were copied to the clipboard. + + + + + AutomationEditorWindow Play/pause current pattern (Space) Reproducir/Pausar el patrón actual (Espaciador) - - Stop playing of current pattern (Space) - Detener la reproducción del patrón actual (Espaciador) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + + Stop playing of current pattern (Space) + Detener la reproducción del patrón actual (Espaciador) + Click here if you want to stop playing of the current pattern. @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - - Cut selected values (Ctrl+X) - - - - Copy selected values (Ctrl+C) - - - - Paste values from clipboard (Ctrl+V) - - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the values from the clipboard will be pasted at the first visible measure. - - - - Automation Editor - no pattern - - - - Automation Editor - %1 - - - - Please open an automation pattern with the context menu of a control! - - - - Values copied - - - - All selected values were copied to the clipboard. - - Discrete progression @@ -413,7 +401,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -429,11 +421,39 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Copy selected values (Ctrl+C) + + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the values from the clipboard will be pasted at the first visible measure. + + + + Tension: + + + + Automation Editor - no pattern + + + + Automation Editor - %1 @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp + + BBEditor + + Beat+Bassline Editor + Editor Ritmo+Línea base + + + Play/pause current beat/bassline (Space) + Reproducir/pausar el ritmo base actual (espacio) + + + Stop playback of current beat/bassline (Space) + + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + + + + Click here to stop playing of current beat/bassline. + + + + Add beat/bassline + Agregar beat/bassline + + + Add automation-track + + + + Remove steps + + + + Add steps + + + + + BBTCOView + + Open in Beat+Bassline-Editor + Abrir en Editor de Ritmo Base + + + Reset name + + + + Change name + Cambiar nombre + + + Change color + Cambiar color + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Ritmo base %1 + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &Ayuda + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin + + + CrossoverEQControlDialog - &Help - &Ayuda + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -907,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin - - &Help - &Ayuda - EnvelopeAndLfoParameters @@ -1150,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1288,6 +1898,42 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + No se puede abrir el archivo + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + + + + Export project to %1 + Exportar proyecto a %1 + + + Error + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + Rendering: %1% + + + + + Fader + + Please enter a new value between %1 and %2: + + FileBrowser @@ -1323,6 +1969,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + + + + White Noise Amount: + + + FxLine @@ -1356,8 +2072,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - &Ayuda + Remove &unused channels + @@ -1385,9 +2101,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1400,6 +2113,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel + + Solo + + + + Solo FX channel + + FxRoute @@ -1408,6 +2129,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + + + + Patch + + + + Gain + + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1999,6 +2782,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2097,6 +2891,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2187,6 +3009,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2321,6 +3147,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + + + + Please enter a new value between %1 and %2: + + LadspaControl @@ -2357,10 +3206,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. @@ -2482,10 +3327,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2499,6 +3340,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2519,10 +3364,6 @@ Double click to pick a file. Please make sure you have write-access to the file and try again. - - &Project - &Proyecto - &New &Nuevo @@ -2567,10 +3408,6 @@ Please make sure you have write-access to the file and try again. &Help &Ayuda - - Online help - - Help Ayuda @@ -2675,14 +3512,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? El proyecto actual ha sido modificado desde la ultima vez que se guardo. Desea usted guardarlo ahora? - - Open project - Abrir Proyecto - - - Save project - Guardar proyecto - Help not available @@ -2692,38 +3521,6 @@ Please make sure you have write-access to the file and try again. Please visit http://lmms.sf.net/wiki for documentation on LMMS. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2732,14 +3529,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2752,10 +3541,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes - - &Recently opened projects - - Undo @@ -2768,6 +3553,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2803,7 +3644,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE @@ -3271,6 +4112,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + + + + Saw wave + + + + Ramp wave + + + + Square wave + + + + Moog saw wave + + + + Abs. sine wave + + + + Random + + + + Random smooth + + MonstroView @@ -3443,6 +4376,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3720,6 +4688,14 @@ use mouse wheel to set volume of a step DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3751,29 +4727,13 @@ use mouse wheel to set volume of a step Amount Multiplicator + + Treshold + + PianoRoll - - Cut selected notes (Ctrl+X) - Cortar las notas seleccionadas (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Copiar las notas seleccionadas (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Pegar notas desde el portapapeles (Ctrl+V) - - - Play/pause current pattern (Space) - Reproducir/Pausar el patrón actual (Espaciador) - - - Stop playing of current pattern (Space) - Detener la reproducción del patrón actual (Espaciador) - Piano-Roll - no pattern Piano Roll - ningún patrón @@ -3786,58 +4746,10 @@ use mouse wheel to set volume of a step Piano-Roll - %1 Piano-Roll - %1 - - Record notes from MIDI-device/channel-piano - - - - Record notes from MIDI-device/channel-piano while playing song or BB track - - - - Draw mode (Shift+D) - - - - Erase mode (Shift+E) - - - - Select mode (Shift+S) - - Last note - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock @@ -3850,26 +4762,6 @@ use mouse wheel to set volume of a step Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3894,26 +4786,6 @@ use mouse wheel to set volume of a step No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3935,6 +4807,117 @@ use mouse wheel to set volume of a step + + PianoRollWindow + + Play/pause current pattern (Space) + Reproducir/Pausar el patrón actual (Espaciador) + + + Record notes from MIDI-device/channel-piano + + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + Stop playing of current pattern (Space) + Detener la reproducción del patrón actual (Espaciador) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + + + + Erase mode (Shift+E) + + + + Select mode (Shift+S) + + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + Cortar las notas seleccionadas (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Copiar las notas seleccionadas (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Pegar notas desde el portapapeles (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3966,6 +4949,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + + + + Instrument browser + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + ProjectNotes + + Project notes + Notas del Proyecto + + + Put down your project notes here. + Coloque aquí sus notas del proyecto + + + Edit Actions + Editar Acciones + + + &Undo + &Deshacer + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Rehacer + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Copiar + + + Ctrl+C + Ctrl+C + + + Cu&t + Cortar(&X) + + + Ctrl+X + Ctrl+X + + + &Paste + &Pegar + + + Ctrl+V + Ctrl+V + + + Format Actions + Acciones de formato + + + &Bold + &Negrita + + + Ctrl+B + Ctrl+B + + + &Italic + &Cursiva + + + Ctrl+I + Ctrl+I + + + &Underline + &Subrayado + + + Ctrl+U + Ctrl+U + + + &Left + &Izquierda + + + Ctrl+L + Ctrl+L + + + C&enter + C&entrar + + + Ctrl+E + Ctrl+E + + + &Right + &Derecha + + + Ctrl+R + Ctrl+R + + + &Justify + &Justificar + + + Ctrl+J + Ctrl+J + + + &Color... + &Color... + + ProjectRenderer @@ -4116,6 +5233,13 @@ Reason: "%2" + + RenameDialog + + Rename... + Renombrar... + + SampleBuffer @@ -4204,6 +5328,10 @@ Reason: "%2" Volume + + Panning + + SampleTrackView @@ -4219,13 +5347,308 @@ Reason: "%2" VOL + + Panning + + + + Panning: + + + + PAN + + + + + SetupDialog + + Setup LMMS + Configuración de LMMS + + + General settings + + + + BUFFER SIZE + + + + Reset to default-value + + + + MISC + + + + Enable tooltips + + + + Show restart warning after changing settings + + + + Display volume as dBV + + + + Compress project files per default + + + + One instrument track window mode + + + + HQ-mode for output audio-device + + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + + + + LMMS working directory + + + + VST-plugin directory + + + + Artwork directory + + + + Background artwork + + + + FL Studio installation directory + + + + LADSPA plugin paths + + + + STK rawwave directory + + + + Default Soundfont File + + + + Performance settings + + + + UI effects vs. performance + + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + + + + AUDIO INTERFACE + + + + MIDI settings + + + + MIDI INTERFACE + + + + OK + + + + Cancel + Cancelar + + + Restart LMMS + + + + Please note that most changes won't take effect until you restart LMMS! + + + + Frames: %1 +Latency: %2 ms + + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + + + + Choose LMMS working directory + + + + Choose your VST-plugin directory + + + + Choose artwork-theme directory + + + + Choose FL Studio installation directory + + + + Choose LADSPA plugin directory + + + + Choose STK rawwave directory + + + + Choose default SoundFont + + + + Choose background artwork + + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + + + + + Song + + Tempo + + + + Master volume + + + + Master pitch + + + + Project saved + + + + The project %1 is now saved. + + + + Project NOT saved. + Proyecto NO guardado. + + + The project %1 was not saved! + + + + Import file + Importar archivo + + + MIDI sequences + + + + FL Studio projects + + + + Hydrogen projects + + + + All file types + + + + Empty project + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + Select directory for writing exported tracks... + + + + untitled + Sin título + + + Select file for project-export... + Seleccione archivo para exportar proyecto + + + The following errors occured while loading: + + SongEditor - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Click aquí si usted desea detener la reproducción de su canción. El marcador de posición de la canción va a ser puesta al inicio de la canción. - Could not open file No se puede abrir el archivo @@ -4234,50 +5657,6 @@ Reason: "%2" Could not write file No se puede escribir en el archivo - - Song-Editor - Editor de canción - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Click aquí, si usted desea reproducir su canción completa. La reproducción se iniciara en el marcador de posición (verde). Usted puede también moverla mientras se reproduce. - - - Play song (Space) - Reproducir canción (Espaciador) - - - Stop song (Space) - Detener canción (Espaciador) - - - Add beat/bassline - Agregar beat/bassline - - - Add sample-track - Agregar pista de ejemplo. - - - Add automation-track - - - - Draw mode - - - - Edit mode (select and move) - - - - Record samples from Audio-device - - - - Record samples from Audio-device while playing song or BB track - - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4340,6 +5719,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + Editor de canción + + + Play song (Space) + Reproducir canción (Espaciador) + + + Record samples from Audio-device + + + + Record samples from Audio-device while playing song or BB track + + + + Stop song (Space) + Detener canción (Espaciador) + + + Add beat/bassline + Agregar beat/bassline + + + Add sample-track + Agregar pista de ejemplo. + + + Add automation-track + + + + Draw mode + + + + Edit mode (select and move) + + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Click aquí, si usted desea reproducir su canción completa. La reproducción se iniciara en el marcador de posición (verde). Usted puede también moverla mientras se reproduce. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Click aquí si usted desea detener la reproducción de su canción. El marcador de posición de la canción va a ser puesta al inicio de la canción. + + SpectrumAnalyzerControlDialog @@ -4366,6 +5796,13 @@ Reason: "%2" + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4408,10 +5845,6 @@ Reason: "%2" Custom... - - &Help - &Ayuda - Custom @@ -4452,6 +5885,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + + + + Enable/disable loop-points + + + + After stopping go back to begin + + + + After stopping go back to position at which playing was started + + + + After stopping keep position + + + + Hint + + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + + + + Solo + + + TrackContainer @@ -4493,6 +5972,107 @@ Please make sure you have read-permission to the file and the directory containi + + TrackContentObject + + Muted + + + + + TrackContentObjectView + + Current position + + + + Hint + + + + Press <Ctrl> and drag to make a copy. + + + + Current length + + + + Press <Ctrl> for free resizing. + + + + %1:%2 (%3:%4 to %5:%6) + + + + Delete (middle mousebutton) + + + + Cut + Cortar + + + Copy + Copiar + + + Paste + Pegar + + + Mute/unmute (<Ctrl> + middle click) + + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + + + + Actions for this track + + + + Mute + + + + Solo + + + + Mute this track + + + + Clone this track + Clonar esta pista + + + Remove this track + + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4637,17 +6217,6 @@ La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4750,6 +6319,17 @@ La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es + + VisualizationWidget + + click to enable/disable visualization of master-output + click, para activar/desactivar visualización de la salida principal + + + Click to enable + + + VstEffectControlDialog @@ -4856,11 +6436,7 @@ La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5266,77 +6842,8 @@ La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es Sinc - - - bbEditor - Play/pause current beat/bassline (Space) - Reproducir/pausar el ritmo base actual (espacio) - - - Beat+Bassline Editor - Editor Ritmo+Línea base - - - Add beat/bassline - Agregar beat/bassline - - - Add automation-track - - - - Stop playback of current beat/bassline (Space) - - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - - - - Click here to stop playing of current beat/bassline. - - - - Remove steps - - - - Add steps - - - - - bbTCOView - - Open in Beat+Bassline-Editor - Abrir en Editor de Ritmo Base - - - Reset name - - - - Change name - Cambiar nombre - - - Change color - Cambiar color - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - Ritmo base %1 - - - Clone of %1 + Sample not found: %1 @@ -5536,41 +7043,6 @@ La desintonización fina esta comprendida entre -100 cents y +100 cents. Esto es - - exportProjectDialog - - Could not open file - No se puede abrir el archivo - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - - - - Error - - - - Error while determining file-encoder device. Please try to choose a different output format. - - - - Rendering: %1% - - - - Export project to %1 - Exportar proyecto a %1 - - - - fader - - Please enter a new value between %1 and %2: - - - graphModel @@ -5672,21 +7144,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - &Ayuda - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - - - - Please enter a new value between %1 and %2: - - - ladspaBrowserView @@ -6408,13 +7865,6 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - &Ayuda - - opl2instrument @@ -6868,10 +8318,6 @@ Double clicking any of the plugins will bring up information on the ports.no description - - Instrument plugins - - Incomplete monophonic imitation tb303 @@ -6924,14 +8370,6 @@ Double clicking any of the plugins will bring up information on the ports.Filter for importing MIDI-files into LMMS - - Instrument browser - - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7021,334 +8459,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Put down your project notes here. - Coloque aquí sus notas del proyecto + Player for GIG files + - Project notes - Notas del Proyecto + A multitap echo delay plugin + - Edit Actions - Editar Acciones + A native flanger plugin + - &Undo - &Deshacer + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - &Rehacer + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &Copiar - - - Ctrl+C - Ctrl+C - - - Cu&t - Cortar(&X) - - - Ctrl+X - Ctrl+X - - - &Paste - &Pegar - - - Ctrl+V - Ctrl+V - - - Format Actions - Acciones de formato - - - &Bold - &Negrita - - - Ctrl+B - Ctrl+B - - - &Italic - &Cursiva - - - Ctrl+I - Ctrl+I - - - &Underline - &Subrayado - - - Ctrl+U - Ctrl+U - - - &Left - &Izquierda - - - Ctrl+L - Ctrl+L - - - C&enter - C&entrar - - - Ctrl+E - Ctrl+E - - - &Right - &Derecha - - - Ctrl+R - Ctrl+R - - - &Justify - &Justificar - - - Ctrl+J - Ctrl+J - - - &Color... - &Color... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Renombrar... - - - - setupDialog - - Setup LMMS - Configuración de LMMS - - - General settings + JACK (JACK Audio Connection Kit) - BUFFER SIZE + OSS Raw-MIDI (Open Sound System) - Reset to default-value + SDL (Simple DirectMedia Layer) - MISC + PulseAudio (bad latency!) - Enable tooltips + Dummy (no MIDI support) - Show restart warning after changing settings + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Display volume as dBV + PortAudio - Compress project files per default + Dummy (no sound output) - HQ-mode for output audio-device + ALSA (Advanced Linux Sound Architecture) - LMMS working directory + OSS (Open Sound System) - VST-plugin directory + WinMM MIDI - Artwork directory - - - - FL Studio installation directory - - - - STK rawwave directory - - - - Performance settings - - - - UI effects vs. performance - - - - Audio settings - - - - AUDIO INTERFACE - - - - MIDI settings - - - - MIDI INTERFACE - - - - OK - - - - Cancel - Cancelar - - - Restart LMMS - - - - Please note that most changes won't take effect until you restart LMMS! - - - - Frames: %1 -Latency: %2 ms - - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - - - - Choose LMMS working directory - - - - Choose your VST-plugin directory - - - - Choose artwork-theme directory - - - - Choose FL Studio installation directory - - - - Choose LADSPA plugin directory - - - - Choose STK rawwave directory - - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - - - - Paths - - - - LADSPA plugin paths - - - - Default Soundfont File - - - - Background artwork - - - - Choose default SoundFont - - - - Choose background artwork - - - - One instrument track window mode - - - - Compact track buttons - - - - Sync VST plugins to host playback - - - - Enable note labels in piano roll - - - - Enable waveform display by default - - - - Smooth scroll in Song Editor - - - - Enable auto save feature - - - - Show playback cursor in AudioFileProcessor - - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7406,6 +8593,10 @@ Latency: %2 ms Chorus Depth + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7651,77 +8842,6 @@ Latency: %2 ms - - song - - Tempo - - - - Master volume - - - - Master pitch - - - - Project saved - - - - The project %1 is now saved. - - - - Project NOT saved. - Proyecto NO guardado. - - - The project %1 was not saved! - - - - Import file - Importar archivo - - - untitled - Sin título - - - Select file for project-export... - Seleccione archivo para exportar proyecto - - - Empty project - - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - - - - MIDI sequences - - - - FL Studio projects - - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7778,157 +8898,6 @@ Latency: %2 ms - - timeLine - - Enable/disable auto-scrolling - - - - Enable/disable loop-points - - - - After stopping go back to begin - - - - After stopping go back to position at which playing was started - - - - After stopping keep position - - - - Hint - - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - - - - Solo - - - - - trackContentObject - - Muted - - - - - trackContentObjectView - - Current position - - - - Hint - - - - Press <Ctrl> and drag to make a copy. - - - - Current length - - - - Press <Ctrl> for free resizing. - - - - %1:%2 (%3:%4 to %5:%6) - - - - Delete (middle mousebutton) - - - - Cut - Cortar - - - Copy - Copiar - - - Paste - Pegar - - - Mute/unmute (<Ctrl> + middle click) - - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - - - - Actions for this track - - - - Mute - - - - Mute this track - - - - Solo - - - - Clone this track - Clonar esta pista - - - Remove this track - - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7939,15 +8908,6 @@ Latency: %2 ms Please wait while loading VST-plugin... - - Failed loading VST-plugin - - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - - vibed @@ -8158,10 +9118,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. - - &Help - &Ayuda - Use a sine-wave for current oscillator. @@ -8187,17 +9143,6 @@ The LED in the lower right corner of the waveform editor determines whether the - - visualizationWidget - - click to enable/disable visualization of master-output - click, para activar/desactivar visualización de la salida principal - - - Click to enable - - - voiceObject diff --git a/data/locale/fa.ts b/data/locale/fa.ts index 38be790a8..50b3a3fad 100644 --- a/data/locale/fa.ts +++ b/data/locale/fa.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME @@ -324,18 +325,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + + + + Values copied + + + + All selected values were copied to the clipboard. + + + + + AutomationEditorWindow Play/pause current pattern (Space) پخش/مکث الگوی جاری (فاصله) - - Stop playing of current pattern (Space) - توقف پخش الگوی جاری (فاصله) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + + Stop playing of current pattern (Space) + توقف پخش الگوی جاری (فاصله) + Click here if you want to stop playing of the current pattern. @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - - Cut selected values (Ctrl+X) - - - - Copy selected values (Ctrl+C) - - - - Paste values from clipboard (Ctrl+V) - - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the values from the clipboard will be pasted at the first visible measure. - - - - Automation Editor - no pattern - - - - Automation Editor - %1 - - - - Please open an automation pattern with the context menu of a control! - - - - Values copied - - - - All selected values were copied to the clipboard. - - Discrete progression @@ -413,7 +401,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -429,11 +421,39 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Copy selected values (Ctrl+C) + + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the values from the clipboard will be pasted at the first visible measure. + + + + Tension: + + + + Automation Editor - no pattern + + + + Automation Editor - %1 @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp + + BBEditor + + Beat+Bassline Editor + ویرایشگر خط-بم/تپش + + + Play/pause current beat/bassline (Space) + پخش/درنگ خط-بم/تپش جاری(فاصله) + + + Stop playback of current beat/bassline (Space) + + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + + + + Click here to stop playing of current beat/bassline. + + + + Add beat/bassline + اضافه ی خط بم/تپش (beat/baseline) + + + Add automation-track + + + + Remove steps + + + + Add steps + + + + + BBTCOView + + Open in Beat+Bassline-Editor + در ویرایشگر خط-بم/تپش باز کن + + + Reset name + باز نشانی نام + + + Change name + تغییر نام + + + Change color + تغییر رنگ + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + خط-بم/تپش %1 + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &راهنما + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin + + + CrossoverEQControlDialog - &Help - &راهنما + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -907,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin - - &Help - &راهنما - EnvelopeAndLfoParameters @@ -1150,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1288,6 +1898,42 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + پرونده باز نشد + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + + + + Export project to %1 + استخراج پرونده به %1 + + + Error + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + Rendering: %1% + + + + + Fader + + Please enter a new value between %1 and %2: + + FileBrowser @@ -1323,6 +1969,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + + + + White Noise Amount: + + + FxLine @@ -1356,8 +2072,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - &راهنما + Remove &unused channels + @@ -1385,9 +2101,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1400,6 +2113,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel + + Solo + + + + Solo FX channel + + FxRoute @@ -1408,6 +2129,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + + + + Patch + + + + Gain + + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1999,6 +2782,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2097,6 +2891,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2187,6 +3009,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2321,6 +3147,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + + + + Please enter a new value between %1 and %2: + + LadspaControl @@ -2357,10 +3206,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. @@ -2482,10 +3327,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2499,6 +3340,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2519,10 +3364,6 @@ Double click to pick a file. Please make sure you have write-access to the file and try again. - - &Project - &پروژه - &New &جدید @@ -2567,10 +3408,6 @@ Please make sure you have write-access to the file and try again. &Help &راهنما - - Online help - - Help راهنما @@ -2675,14 +3512,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? پروژه جاری بعد از آخرین ذخیره تغییر یافته است.آیا اکنون مایل به ذخیره ی آن هستید؟ - - Open project - باز کردن پروژه - - - Save project - ذخیره ی پروژه - Help not available @@ -2692,38 +3521,6 @@ Please make sure you have write-access to the file and try again. Please visit http://lmms.sf.net/wiki for documentation on LMMS. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2732,14 +3529,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2752,10 +3541,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes - - &Recently opened projects - - Undo @@ -2768,6 +3553,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2803,7 +3644,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE @@ -3271,6 +4112,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + + + + Saw wave + + + + Ramp wave + + + + Square wave + + + + Moog saw wave + + + + Abs. sine wave + + + + Random + + + + Random smooth + + MonstroView @@ -3443,6 +4376,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3720,6 +4688,14 @@ use mouse wheel to set volume of a step DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3751,29 +4727,13 @@ use mouse wheel to set volume of a step Amount Multiplicator + + Treshold + + PianoRoll - - Cut selected notes (Ctrl+X) - برش نت های انتخاب شده(Ctrl+X) - - - Copy selected notes (Ctrl+C) - کپی نت های انتخاب شده(Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - چسباندن نت ها از حافظه ی موقت(Ctrl+V) - - - Play/pause current pattern (Space) - پخش/مکث الگوی جاری (فاصله) - - - Stop playing of current pattern (Space) - توقف پخش الگوی جاری (فاصله) - Piano-Roll - %1 غلتک پیانو - %1 @@ -3786,58 +4746,10 @@ use mouse wheel to set volume of a step Please open a pattern by double-clicking on it! لطفا یک الگو را با دوبار کلیک روی أن باز کنید! - - Record notes from MIDI-device/channel-piano - - - - Record notes from MIDI-device/channel-piano while playing song or BB track - - - - Draw mode (Shift+D) - - - - Erase mode (Shift+E) - - - - Select mode (Shift+S) - - Last note - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock @@ -3850,26 +4762,6 @@ use mouse wheel to set volume of a step Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3894,26 +4786,6 @@ use mouse wheel to set volume of a step No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3935,6 +4807,117 @@ use mouse wheel to set volume of a step + + PianoRollWindow + + Play/pause current pattern (Space) + پخش/مکث الگوی جاری (فاصله) + + + Record notes from MIDI-device/channel-piano + + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + Stop playing of current pattern (Space) + توقف پخش الگوی جاری (فاصله) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + + + + Erase mode (Shift+E) + + + + Select mode (Shift+S) + + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + برش نت های انتخاب شده(Ctrl+X) + + + Copy selected notes (Ctrl+C) + کپی نت های انتخاب شده(Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + چسباندن نت ها از حافظه ی موقت(Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3966,6 +4949,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + + + + Instrument browser + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + ProjectNotes + + Project notes + یادداشت های پروژه + + + Put down your project notes here. + یادداشت های پروژه ی خود را اینجا قرار دهید. + + + Edit Actions + ویرایش کنش ها + + + &Undo + &واچینی + + + Ctrl+Z + Ctrl+Z + + + &Redo + &بازچینی + + + Ctrl+Y + Ctrl+Y + + + &Copy + &کپی + + + Ctrl+C + Ctrl+C + + + Cu&t + &برش + + + Ctrl+X + Ctrl+X + + + &Paste + &چسباندن + + + Ctrl+V + Ctrl+V + + + Format Actions + قالب بندی کنش ها + + + &Bold + &برجسته + + + Ctrl+B + Ctrl+B + + + &Italic + &خوابیده + + + Ctrl+I + Ctrl+I + + + &Underline + &زیرخط + + + Ctrl+U + Ctrl+U + + + &Left + &چپ + + + Ctrl+L + Ctrl+L + + + C&enter + &مرکز + + + Ctrl+E + Ctrl+E + + + &Right + &راست + + + Ctrl+R + Ctrl+R + + + &Justify + &تراز + + + Ctrl+J + Ctrl+J + + + &Color... + &رنگ... + + ProjectRenderer @@ -4116,6 +5233,13 @@ Reason: "%2" + + RenameDialog + + Rename... + تغییر نام... + + SampleBuffer @@ -4204,6 +5328,10 @@ Reason: "%2" Volume + + Panning + + SampleTrackView @@ -4219,13 +5347,308 @@ Reason: "%2" VOL + + Panning + + + + Panning: + + + + PAN + + + + + SetupDialog + + Setup LMMS + برپایی LMMS + + + General settings + + + + BUFFER SIZE + + + + Reset to default-value + + + + MISC + + + + Enable tooltips + + + + Show restart warning after changing settings + + + + Display volume as dBV + + + + Compress project files per default + + + + One instrument track window mode + + + + HQ-mode for output audio-device + + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + + + + LMMS working directory + + + + VST-plugin directory + + + + Artwork directory + + + + Background artwork + + + + FL Studio installation directory + + + + LADSPA plugin paths + + + + STK rawwave directory + + + + Default Soundfont File + + + + Performance settings + + + + UI effects vs. performance + + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + + + + AUDIO INTERFACE + + + + MIDI settings + + + + MIDI INTERFACE + + + + OK + + + + Cancel + لغو + + + Restart LMMS + + + + Please note that most changes won't take effect until you restart LMMS! + + + + Frames: %1 +Latency: %2 ms + + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + + + + Choose LMMS working directory + + + + Choose your VST-plugin directory + + + + Choose artwork-theme directory + + + + Choose FL Studio installation directory + + + + Choose LADSPA plugin directory + + + + Choose STK rawwave directory + + + + Choose default SoundFont + + + + Choose background artwork + + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + + + + + Song + + Tempo + + + + Master volume + + + + Master pitch + + + + Project saved + + + + The project %1 is now saved. + + + + Project NOT saved. + پروژه ذخیره نشد. + + + The project %1 was not saved! + + + + Import file + وارد کردن پرونده + + + MIDI sequences + + + + FL Studio projects + + + + Hydrogen projects + + + + All file types + + + + Empty project + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + Select directory for writing exported tracks... + + + + untitled + بدون نام + + + Select file for project-export... + پرونده را برای استخراج پروژه مشخص کنید... + + + The following errors occured while loading: + + SongEditor - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - اگر می خواهید پخش ترانه ی خود را متوقف کنید اینجا را کلیک کنید.سازنده موقعیت ترانه به شروع ترانه تنظیم خواهد شد. - Could not open file پرونده باز نشد @@ -4234,50 +5657,6 @@ Reason: "%2" Could not write file پرونده نوشته نشد - - Song-Editor - ویرایشگر ترانه - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - اگر می خواهید تمام ترانه ی خود را پخش کنید اینجا را کلیک کنید.پخش از محل سازنده ی موقعیت شروع خواهد شد(سبز).همچنین می توانید در حال پخش آن را جابجا کنید. - - - Play song (Space) - پخش ترانه(فاصله) - - - Stop song (Space) - توقف ترانه (فاصله) - - - Add beat/bassline - اضافه ی خط بم/تپش (beat/baseline) - - - Add sample-track - اضافه ی باریکه ی نمونه - - - Add automation-track - - - - Draw mode - - - - Edit mode (select and move) - - - - Record samples from Audio-device - - - - Record samples from Audio-device while playing song or BB track - - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4340,6 +5719,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + ویرایشگر ترانه + + + Play song (Space) + پخش ترانه(فاصله) + + + Record samples from Audio-device + + + + Record samples from Audio-device while playing song or BB track + + + + Stop song (Space) + توقف ترانه (فاصله) + + + Add beat/bassline + اضافه ی خط بم/تپش (beat/baseline) + + + Add sample-track + اضافه ی باریکه ی نمونه + + + Add automation-track + + + + Draw mode + + + + Edit mode (select and move) + + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + اگر می خواهید تمام ترانه ی خود را پخش کنید اینجا را کلیک کنید.پخش از محل سازنده ی موقعیت شروع خواهد شد(سبز).همچنین می توانید در حال پخش آن را جابجا کنید. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + اگر می خواهید پخش ترانه ی خود را متوقف کنید اینجا را کلیک کنید.سازنده موقعیت ترانه به شروع ترانه تنظیم خواهد شد. + + SpectrumAnalyzerControlDialog @@ -4366,6 +5796,13 @@ Reason: "%2" + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4408,10 +5845,6 @@ Reason: "%2" Custom... - - &Help - &راهنما - Custom @@ -4452,6 +5885,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + + + + Enable/disable loop-points + + + + After stopping go back to begin + + + + After stopping go back to position at which playing was started + + + + After stopping keep position + + + + Hint + + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + + + + Solo + + + TrackContainer @@ -4493,6 +5972,107 @@ Please make sure you have read-permission to the file and the directory containi + + TrackContentObject + + Muted + + + + + TrackContentObjectView + + Current position + + + + Hint + + + + Press <Ctrl> and drag to make a copy. + + + + Current length + + + + Press <Ctrl> for free resizing. + + + + %1:%2 (%3:%4 to %5:%6) + + + + Delete (middle mousebutton) + + + + Cut + برش + + + Copy + کپی + + + Paste + چسباندن + + + Mute/unmute (<Ctrl> + middle click) + + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + + + + Actions for this track + + + + Mute + + + + Solo + + + + Mute this track + + + + Clone this track + تکثیر این تراک + + + Remove this track + + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4636,17 +6216,6 @@ Please make sure you have read-permission to the file and the directory containi - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4749,6 +6318,17 @@ Please make sure you have read-permission to the file and the directory containi + + VisualizationWidget + + click to enable/disable visualization of master-output + برای فعال / غیرفعال کردن تصور خروجی اصلی کلیک کنید + + + Click to enable + + + VstEffectControlDialog @@ -4855,11 +6435,7 @@ Please make sure you have read-permission to the file and the directory containi - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5265,77 +6841,8 @@ Please make sure you have read-permission to the file and the directory containi Sinc - - - bbEditor - Play/pause current beat/bassline (Space) - پخش/درنگ خط-بم/تپش جاری(فاصله) - - - Beat+Bassline Editor - ویرایشگر خط-بم/تپش - - - Add beat/bassline - اضافه ی خط بم/تپش (beat/baseline) - - - Add automation-track - - - - Stop playback of current beat/bassline (Space) - - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - - - - Click here to stop playing of current beat/bassline. - - - - Remove steps - - - - Add steps - - - - - bbTCOView - - Open in Beat+Bassline-Editor - در ویرایشگر خط-بم/تپش باز کن - - - Reset name - باز نشانی نام - - - Change name - تغییر نام - - - Change color - تغییر رنگ - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - خط-بم/تپش %1 - - - Clone of %1 + Sample not found: %1 @@ -5535,41 +7042,6 @@ Please make sure you have read-permission to the file and the directory containi - - exportProjectDialog - - Could not open file - پرونده باز نشد - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - - - - Error - - - - Error while determining file-encoder device. Please try to choose a different output format. - - - - Rendering: %1% - - - - Export project to %1 - استخراج پرونده به %1 - - - - fader - - Please enter a new value between %1 and %2: - - - graphModel @@ -5671,21 +7143,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - &راهنما - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - - - - Please enter a new value between %1 and %2: - - - ladspaBrowserView @@ -6407,13 +7864,6 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - &راهنما - - opl2instrument @@ -6867,10 +8317,6 @@ Double clicking any of the plugins will bring up information on the ports.no description - - Instrument plugins - - Incomplete monophonic imitation tb303 @@ -6923,14 +8369,6 @@ Double clicking any of the plugins will bring up information on the ports.Filter for importing MIDI-files into LMMS - - Instrument browser - - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7020,334 +8458,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Put down your project notes here. - یادداشت های پروژه ی خود را اینجا قرار دهید. + Player for GIG files + - Project notes - یادداشت های پروژه + A multitap echo delay plugin + - Edit Actions - ویرایش کنش ها + A native flanger plugin + - &Undo - &واچینی + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - &بازچینی + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &کپی - - - Ctrl+C - Ctrl+C - - - Cu&t - &برش - - - Ctrl+X - Ctrl+X - - - &Paste - &چسباندن - - - Ctrl+V - Ctrl+V - - - Format Actions - قالب بندی کنش ها - - - &Bold - &برجسته - - - Ctrl+B - Ctrl+B - - - &Italic - &خوابیده - - - Ctrl+I - Ctrl+I - - - &Underline - &زیرخط - - - Ctrl+U - Ctrl+U - - - &Left - &چپ - - - Ctrl+L - Ctrl+L - - - C&enter - &مرکز - - - Ctrl+E - Ctrl+E - - - &Right - &راست - - - Ctrl+R - Ctrl+R - - - &Justify - &تراز - - - Ctrl+J - Ctrl+J - - - &Color... - &رنگ... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - تغییر نام... - - - - setupDialog - - Setup LMMS - برپایی LMMS - - - General settings + JACK (JACK Audio Connection Kit) - BUFFER SIZE + OSS Raw-MIDI (Open Sound System) - Reset to default-value + SDL (Simple DirectMedia Layer) - MISC + PulseAudio (bad latency!) - Enable tooltips + Dummy (no MIDI support) - Show restart warning after changing settings + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Display volume as dBV + PortAudio - Compress project files per default + Dummy (no sound output) - HQ-mode for output audio-device + ALSA (Advanced Linux Sound Architecture) - LMMS working directory + OSS (Open Sound System) - VST-plugin directory + WinMM MIDI - Artwork directory - - - - FL Studio installation directory - - - - STK rawwave directory - - - - Performance settings - - - - UI effects vs. performance - - - - Audio settings - - - - AUDIO INTERFACE - - - - MIDI settings - - - - MIDI INTERFACE - - - - OK - - - - Cancel - لغو - - - Restart LMMS - - - - Please note that most changes won't take effect until you restart LMMS! - - - - Frames: %1 -Latency: %2 ms - - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - - - - Choose LMMS working directory - - - - Choose your VST-plugin directory - - - - Choose artwork-theme directory - - - - Choose FL Studio installation directory - - - - Choose LADSPA plugin directory - - - - Choose STK rawwave directory - - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - - - - Paths - - - - LADSPA plugin paths - - - - Default Soundfont File - - - - Background artwork - - - - Choose default SoundFont - - - - Choose background artwork - - - - One instrument track window mode - - - - Compact track buttons - - - - Sync VST plugins to host playback - - - - Enable note labels in piano roll - - - - Enable waveform display by default - - - - Smooth scroll in Song Editor - - - - Enable auto save feature - - - - Show playback cursor in AudioFileProcessor - - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7405,6 +8592,10 @@ Latency: %2 ms Chorus Depth + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7650,77 +8841,6 @@ Latency: %2 ms - - song - - Tempo - - - - Master volume - - - - Master pitch - - - - Project saved - - - - The project %1 is now saved. - - - - Project NOT saved. - پروژه ذخیره نشد. - - - The project %1 was not saved! - - - - Import file - وارد کردن پرونده - - - untitled - بدون نام - - - Select file for project-export... - پرونده را برای استخراج پروژه مشخص کنید... - - - Empty project - - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - - - - MIDI sequences - - - - FL Studio projects - - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7777,157 +8897,6 @@ Latency: %2 ms - - timeLine - - Enable/disable auto-scrolling - - - - Enable/disable loop-points - - - - After stopping go back to begin - - - - After stopping go back to position at which playing was started - - - - After stopping keep position - - - - Hint - - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - - - - Solo - - - - - trackContentObject - - Muted - - - - - trackContentObjectView - - Current position - - - - Hint - - - - Press <Ctrl> and drag to make a copy. - - - - Current length - - - - Press <Ctrl> for free resizing. - - - - %1:%2 (%3:%4 to %5:%6) - - - - Delete (middle mousebutton) - - - - Cut - برش - - - Copy - کپی - - - Paste - چسباندن - - - Mute/unmute (<Ctrl> + middle click) - - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - - - - Actions for this track - - - - Mute - - - - Mute this track - - - - Solo - - - - Clone this track - تکثیر این تراک - - - Remove this track - - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7938,15 +8907,6 @@ Latency: %2 ms Please wait while loading VST-plugin... - - Failed loading VST-plugin - - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - - vibed @@ -8157,10 +9117,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. - - &Help - &راهنما - Use a sine-wave for current oscillator. @@ -8186,17 +9142,6 @@ The LED in the lower right corner of the waveform editor determines whether the - - visualizationWidget - - click to enable/disable visualization of master-output - برای فعال / غیرفعال کردن تصور خروجی اصلی کلیک کنید - - - Click to enable - - - voiceObject diff --git a/data/locale/fr.ts b/data/locale/fr.ts index c589c2ad0..b2570b07c 100644 --- a/data/locale/fr.ts +++ b/data/locale/fr.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS LMMS + + Involved + Impliqué + + + Contributors ordered by number of commits: + Contributeurs classés par nombre de commits: + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,16 +227,13 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Le serveur JACK semble avoir été arrêté et le démarrage d'une nouvelle instance a échoué. Par conséquent LMMS ne peut pas continuer. Vous devriez enregistrer votre projet puis redémarrer JACK et LMMS. - - - AudioJack::setupWidget CLIENT-NAME - NOM DU CLIENT + NOM DU CLIENT CHANNELS - CANAUX + CANAUX @@ -324,70 +325,6 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor - - Play/pause current pattern (Space) - Jouer/Mettre en pause le motif (Barre d'espace) - - - Stop playing of current pattern (Space) - Arrêter de jouer le motif courant (Barre d'espace) - - - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Cliquez ici si vous souhaitez jouer le motif courant. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. - - - Click here if you want to stop playing of the current pattern. - Cliquez ici si vous souhaitez arrêter de jouer le motif courant. - - - Draw mode (Shift+D) - Mode dessin (Shift+D) - - - Erase mode (Shift+E) - Mode effacement (Shift+E) - - - Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter et déplacer des valeurs particulières. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. - - - Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des valeurs particulières. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode. - - - Cut selected values (Ctrl+X) - Couper les valeurs sélectionnées (Ctrl+X) - - - Copy selected values (Ctrl+C) - Copier les valeurs sélectionnées (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Coller les valeurs sélectionnées (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. - - - Click here and the values from the clipboard will be pasted at the first visible measure. - Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible. - - - Automation Editor - no pattern - Éditeur d'automation - pas de motif - - - Automation Editor - %1 - Éditeur d'automation - %1 - Please open an automation pattern with the context menu of a control! Veuillez ouvrir un motif d'automation avec le menu contextuel d'un contrôle ! @@ -400,41 +337,124 @@ If you're interested in translating LMMS in another language or want to imp All selected values were copied to the clipboard. Toutes les valeurs ont été copiées dans le presse-papier. + + + AutomationEditorWindow + + Play/pause current pattern (Space) + Jouer/Mettre en pause le motif (Barre d'espace) + + + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + Cliquez ici si vous souhaitez jouer le motif courant. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. + + + Stop playing of current pattern (Space) + + + + Click here if you want to stop playing of the current pattern. + Cliquez ici si vous souhaitez arrêter de jouer le motif courant. + + + Draw mode (Shift+D) + Mode dessin (Shift+D) + + + Erase mode (Shift+E) + Mode effacement (Shift+E) + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. + Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter et déplacer des valeurs particulières. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. + + + Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. + Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des valeurs particulières. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode. + Discrete progression - Progression discrète + Progression discrète Linear progression - Progression linéaire + Progression linéaire Cubic Hermite progression - Progression cubique de Hermite - - - Tension: - Tension : - - - Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. - Cliquez ici pour choisir la progression discrète pour ce motif d'automation. La valeur de l'objet connecté restera contante entre les points de contrôle et se verra affecter immédiatement une nouvelle valeur quand un point de contrôle est atteint. - - - Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. - Cliquez ici pour choisir la progression linéaire pour ce motif d'automation. La valeur de l'objet connecté changera à un taux contant entre les points de contrôle et atteindra la valeur correcte à chaque point de contrôle sans changement soudain. - - - Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. - Cliquez ici pour choisir la progression cubique de Hermite pour ce motif d'automation. La valeur de l'objet connecté changera suivant une courbe lisse. + Progression cubique de Hermite Tension value for spline - Valeur de tension pour la spline + Valeur de tension pour la spline - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. - Une valeur de tension élevée donne une courbe plus lisse mais introduit des dépassements pour certaines valeurs. Une valeur de tension basse fera que la pente de la courbe se stabilisera à chaque point de contrôle. + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + + + + Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. + Cliquez ici pour choisir la progression discrète pour ce motif d'automation. La valeur de l'objet connecté restera contante entre les points de contrôle et se verra affecter immédiatement une nouvelle valeur quand un point de contrôle est atteint. + + + Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. + Cliquez ici pour choisir la progression linéaire pour ce motif d'automation. La valeur de l'objet connecté changera à un taux contant entre les points de contrôle et atteindra la valeur correcte à chaque point de contrôle sans changement soudain. + + + Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. + Cliquez ici pour choisir la progression cubique de Hermite pour ce motif d'automation. La valeur de l'objet connecté changera suivant une courbe lisse. + + + Cut selected values (Ctrl+X) + Couper les valeurs sélectionnées (Ctrl+X) + + + Copy selected values (Ctrl+C) + Copier les valeurs sélectionnées (Ctrl+C) + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. + + + Click here and the values from the clipboard will be pasted at the first visible measure. + Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible. + + + Tension: + Tension : + + + Automation Editor - no pattern + Éditeur d'automation - pas de motif + + + Automation Editor - %1 + Éditeur d'automation - %1 @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record Régler/Effacer l'enregistrement + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp Piste d'automation + + BBEditor + + Beat+Bassline Editor + Éditeur de rythme et de ligne de basse + + + Play/pause current beat/bassline (Space) + Jouer/Mettre en pause le rythme ou la ligne de basse (Barre d'espace) + + + Stop playback of current beat/bassline (Space) + Arrêter de jouer le rythme ou la ligne de basse (Barre d'espace) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Cliquez ici pour jouer le rythme ou la ligne de basse. Le rythme ou la ligne de basse est rejoué lorsque sa fin est atteinte. + + + Click here to stop playing of current beat/bassline. + Cliquez ici pour arrêter de jouer le rythme ou la ligne de basse. + + + Add beat/bassline + + + + Add automation-track + Ajouter une piste d'automation + + + Remove steps + Supprimer des pas + + + Add steps + Ajouter des pas + + + + BBTCOView + + Open in Beat+Bassline-Editor + Ouvrir dans l'éditeur de rythme et de ligne de basse + + + Reset name + Réinitialiser le nom + + + Change name + Changer le nom + + + Change color + Changer la couleur + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Ryhtme ou ligne de basse %1 + + + Clone of %1 + Clone de %1 + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp Rapport + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + GAIN + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Vitesse + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + Aid&e + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin Supp&rimer ce greffon + + + CrossoverEQControlDialog - &Help - Aid&e + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Vitesse + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter Filtre Formant Vocal + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -919,10 +1284,6 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo &Remove this plugin Supp&rimer ce greffon - - &Help - Aid&e - EnvelopeAndLfoParameters @@ -1162,6 +1523,255 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Gain + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Fréquence : + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1300,6 +1910,43 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo Export as loop (remove end silence) Exporter sous la forme d'une boucle (supprime le silence de fin) + + Export between loop markers + + + + Could not open file + Le fichier n'a pas pu être ouvert + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Le fichier %1 ne peut pas être ouvert en écriture. +Veuillez vérifier que vous avez les droits d'accès en écriture pour ce fichier et le répertoire qui contient ce fichier et réessayez ! + + + Export project to %1 + Exporter le projet vers %1 + + + Error + Erreur + + + Error while determining file-encoder device. Please try to choose a different output format. + Erreur pendant la détection du périphérique d'encodage du fichier. Veuillez essayer de choisir un format de sortie différent. + + + Rendering: %1% + Encodage : %1% + + + + Fader + + Please enter a new value between %1 and %2: + Veuillez entrer un valeur entre %1 et %2 : + FileBrowser @@ -1335,6 +1982,76 @@ Un clic-droit fera apparaître un menu contextuel où vous pourrez changer l&apo --- Fichiers usine --- + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + Bruit + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + Bruit + + + White Noise Amount: + + + FxLine @@ -1368,8 +2085,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - Aid&e + Remove &unused channels + @@ -1397,9 +2114,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer Mélangeur d'effets - - - FxMixerView::FxChannelView FX Fader %1 Curseur d'effet %1 @@ -1412,6 +2126,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel Couper ce canal d'effet + + Solo + + + + Solo FX channel + + FxRoute @@ -1420,6 +2142,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + Banque + + + Patch + Son + + + Gain + Gain + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Choisir un son + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Gain + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2011,6 +2795,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2109,6 +2904,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter Filtre Formant Vocal + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2199,6 +3022,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range Plage de hauteur + + Master Pitch + + InstrumentTrackView @@ -2333,6 +3160,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + DIVERS + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Veuillez entrer un nouvelle valeur entre -96,0 dBV et 6,0 dBV : + + + Please enter a new value between %1 and %2: + Veuillez entrer un valeur entre %1 et %2 : + LadspaControl @@ -2369,10 +3219,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - Effet - Unknown LADSPA plugin %1 requested. Le greffon LDASPA %1 demandé est inconnu. @@ -2494,10 +3340,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. Cliquez ici pour une onde carrée. - - Click here for a a moog saw-wave. - Cliquez ici pour une onde Moog en dent de scie. - Click here for an exponential wave. Cliquez ici pour une onde exponentielle. @@ -2512,6 +3354,10 @@ Double click to pick a file. Cliquez ici pour une forme définie par l'utilisateur. Double cliquez pour choisir un fichier. + + Click here for a moog saw-wave. + + MainWindow @@ -2533,10 +3379,6 @@ Please make sure you have write-access to the file and try again. Le fichier de configuration %1 n'a pas pu être écrit. Vous n'avez probablement pas le droit d'écrire dans ce fichier. Veuillez vérifier que vous avez les droits d'accès en écriture pour ce fichier et le répertoire qui contient ce fichier et réessayez. - - &Project - &Projet - &New &Nouveau @@ -2581,10 +3423,6 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f &Help Aid&e - - Online help - Aide en ligne - Help Aide @@ -2689,14 +3527,6 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f The current project was modified since last saving. Do you want to save it now? Ce projet à été modifié depuis son dernier enregistrement. Souhaitez-vous l'enregistrer maintenant ? - - Open project - Ouvrir un projet - - - Save project - Enregistrer le projet - Help not available L'aide n'est pas disponible @@ -2707,38 +3537,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Il n'y a pour l'instant pas de d'aide dans LMMS. Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. - - My projects - Mes projets - - - My samples - Mes échantillons - - - My presets - Mes préréglages - - - My home - Mon dossier - - - My computer - Mon ordinateur - - - Root directory - Répertoire principal - - - Save as new &version - Enregistrer comme nouvelle &version - - - E&xport tracks... - E&xporter les pistes... - LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) @@ -2747,14 +3545,6 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.Version %1 Version %1 - - Project recovery - Récupération de projet - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - Il semble que la dernière session ne se soit pas terminée correctement. Voulez-vous récupérer le projet de cette session? - Configuration file Fichier de configuration @@ -2767,10 +3557,6 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.Volumes - - &Recently opened projects - - Undo @@ -2783,6 +3569,62 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2818,10 +3660,10 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE - PÉRIPHÉRIQUE + PÉRIPHÉRIQUE @@ -3286,6 +4128,98 @@ Veuillez visiter http://lmms.sf.net/wiki pour la documentation de LMMS.Sub3-LFO2 + + Sine wave + Onde sinusoïdale + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + Onde triangulaire + + + Saw wave + Onde en dent de scie + + + Ramp wave + + + + Square wave + Onde carrée + + + Moog saw wave + + + + Abs. sine wave + + + + Random + Aléatoire + + + Random smooth + + MonstroView @@ -3458,6 +4392,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3736,6 +4705,14 @@ utilisez la molette de la souris pour régler le volume d'un pasDCAY DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3767,29 +4744,13 @@ utilisez la molette de la souris pour régler le volume d'un pasAmount Multiplicator Multiplicateur de quantité + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - Jouer/Mettre en pause le motif (Barre d'espace) - - - Stop playing of current pattern (Space) - Arrêter de jouer le motif (Barre d'espace) - - - Cut selected notes (Ctrl+X) - Couper les notes sélectionnées (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Copier les notes sélectionnées (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Coller les notes se trouvant dans le presse-papier (Ctrl+V) - Piano-Roll - no pattern Piano virtuel - pas de motif @@ -3802,58 +4763,10 @@ utilisez la molette de la souris pour régler le volume d'un pasPlease open a pattern by double-clicking on it! Veuillez ouvrir un motif en double-cliquant dessus ! - - Record notes from MIDI-device/channel-piano - Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano - - - Record notes from MIDI-device/channel-piano while playing song or BB track - Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano pendant l'écoute d'un morceau ou bien d'une piste de rythme ou de ligne de basse - - - Draw mode (Shift+D) - Mode dessin (Shift+D) - - - Erase mode (Shift+E) - Mode effacement (Shift+E) - - - Select mode (Shift+S) - Mode sélection (Shift+S) - Last note Dernière note - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Cliquez ici pour jouer le motif. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous pourrez ensuite les jouer et les éditer. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous entendrez le morceau ou bien le rythme ou la ligne de basse en fond sonore. - - - Click here to stop playback of current pattern. - Cliquez ici pour arrêter de jouer le motif. - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible. - Note lock Vérouiller la note @@ -3866,26 +4779,6 @@ utilisez la molette de la souris pour régler le volume d'un pasNote Panning Panoramique de la note - - Detune mode (Shift+T) - Mode désaccordage (Shift+T) - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter, redimensionner et déplacer des notes. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. Dans ce mode, appuyez sur Ctrl pour passer temporairement dans le mode sélection. - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des notes. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode. - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - Cliquez ici et le mode sélection sera activé. Dans ce mode vous pourrez sélectionner des notes. Dans ce mode, appuyez appuyer sur Ctrl pour passer temporairement en mode dessin. - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - Cliquez ici et le mode désaccordage sera activé. Dans ce mode vous pourrer cliquer sur une note pour accéder à l'automation de son désaccordage. Vous pouvez utiliser ceci pour lier des notes entre-elles. Vous pouvez aussi appuyer sur les touches 'Shift+T' de votre clavier pour activer ce mode. - Mark/unmark current semitone Cocher/décocher le demi-ton courant @@ -3910,26 +4803,6 @@ utilisez la molette de la souris pour régler le volume d'un pasNo chord Pas d'accord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3951,6 +4824,117 @@ utilisez la molette de la souris pour régler le volume d'un pasVeuillez entrer un valeur entre %1 et %2 : + + PianoRollWindow + + Play/pause current pattern (Space) + Jouer/Mettre en pause le motif (Barre d'espace) + + + Record notes from MIDI-device/channel-piano + Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Enregistrez des notes à partir d'un périphérique MIDI ou d'un canal du piano pendant l'écoute d'un morceau ou bien d'une piste de rythme ou de ligne de basse + + + Stop playing of current pattern (Space) + + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Cliquez ici pour jouer le motif. Ceci est utile pendant son édition. Le motif est automatiquement rejoué lorsque sa fin est atteinte. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous pourrez ensuite les jouer et les éditer. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Cliquez ici pour enregistrer des notes à partir d'un périphérique MIDI ou du piano de test virtuel de la fenêtre correspondant au canal du motif. Lors de l'enregistrement toutes les notes seront écrites dans ce motif et vous entendrez le morceau ou bien le rythme ou la ligne de basse en fond sonore. + + + Click here to stop playback of current pattern. + Cliquez ici pour arrêter de jouer le motif. + + + Draw mode (Shift+D) + Mode dessin (Shift+D) + + + Erase mode (Shift+E) + Mode effacement (Shift+E) + + + Select mode (Shift+S) + Mode sélection (Shift+S) + + + Detune mode (Shift+T) + Mode désaccordage (Shift+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + Cliquez ici et le mode dessin sera activé. Dans ce mode vous pourrez ajouter, redimensionner et déplacer des notes. Ceci est le mode par défaut qui est utilisé la plupart du temps. Vous pouvez aussi appuyer sur les touches 'Shift+D' de votre clavier pour activer ce mode. Dans ce mode, appuyez sur Ctrl pour passer temporairement dans le mode sélection. + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + Cliquez ici et le mode effacement sera activé. Dans ce mode vous pourrez effacer des notes. Vous pouvez aussi appuyer sur les touches 'Shift+E' de votre clavier pour activer ce mode. + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + Cliquez ici et le mode sélection sera activé. Dans ce mode vous pourrez sélectionner des notes. Dans ce mode, appuyez appuyer sur Ctrl pour passer temporairement en mode dessin. + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + Cliquez ici et le mode désaccordage sera activé. Dans ce mode vous pourrer cliquer sur une note pour accéder à l'automation de son désaccordage. Vous pouvez utiliser ceci pour lier des notes entre-elles. Vous pouvez aussi appuyer sur les touches 'Shift+T' de votre clavier pour activer ce mode. + + + Cut selected notes (Ctrl+X) + Couper les notes sélectionnées (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Copier les notes sélectionnées (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Coller les notes se trouvant dans le presse-papier (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliquez ici et les valeurs sélectionnées seront coupées et copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliquez ici et les valeurs sélectionnées seront copiées dans le presse-papier. Vous pourrez les coller n'importe où dans n'importe quel motif en cliquant sur le bouton coller. + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + Cliquez ici et les valeurs se trouvant dans le presse-papier seront collées sur la première mesure visible. + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3983,6 +4967,140 @@ Raison : "%2" + + PluginBrowser + + Instrument plugins + Greffons d'instrument + + + Instrument browser + Sélecteur d'instruments + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + Faites glisser un instrument dans l'éditeur de morceau, dans l'éditeur de rythme et de ligne de basse, ou dans une piste d'instrument existante. + + + + ProjectNotes + + Project notes + Notes du projet + + + Put down your project notes here. + Ici vous pouvez prendre des notes concernant votre projet. + + + Edit Actions + Édition + + + &Undo + &Défaire + + + Ctrl+Z + + + + &Redo + &Refaire + + + Ctrl+Y + + + + &Copy + &Copier + + + Ctrl+C + + + + Cu&t + Cou&per + + + Ctrl+X + + + + &Paste + Co&ller + + + Ctrl+V + + + + Format Actions + Format + + + &Bold + Gr&as + + + Ctrl+B + + + + &Italic + &Italique + + + Ctrl+I + + + + &Underline + &Souligné + + + Ctrl+U + + + + &Left + &Gauche + + + Ctrl+L + + + + C&enter + C&entrer + + + Ctrl+E + + + + &Right + D&roite + + + Ctrl+R + + + + &Justify + &Justifier + + + Ctrl+J + + + + &Color... + C&ouleurs... + + ProjectRenderer @@ -4133,6 +5251,13 @@ Raison : "%2" + + RenameDialog + + Rename... + Renommer... + + SampleBuffer @@ -4221,6 +5346,10 @@ Raison : "%2" Volume Volume + + Panning + Panoramique + SampleTrackView @@ -4236,37 +5365,309 @@ Raison : "%2" VOL VOL + + Panning + Panoramique + + + Panning: + Panoramique : + + + PAN + PAN + + + + SetupDialog + + Setup LMMS + Configuration de LMMS + + + General settings + Configuration générale + + + BUFFER SIZE + TAILLE DE LA MÉMOIRE TAMPON + + + Reset to default-value + Réinitialiser à la valeur par défaut + + + MISC + DIVERS + + + Enable tooltips + Activer les info-bulles + + + Show restart warning after changing settings + Afficher l'invitation à redémarrer après la modification de le configuration + + + Display volume as dBV + Afficher le volume en dBV + + + Compress project files per default + Compresser par défaut les fichiers de projet + + + One instrument track window mode + Mode fenêtre une piste d'instrument + + + HQ-mode for output audio-device + Périphérique de sortie audio en mode HQ + + + Compact track buttons + Boutons de piste compacte + + + Sync VST plugins to host playback + Sync les greffons VST à la lecture de l'hôte + + + Enable note labels in piano roll + Activer les étiquettes de note dans le piano virtuel + + + Enable waveform display by default + Activer l'affichage de forme d'onde par défaut + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Chemins d'accès + + + LMMS working directory + Répertoire de travail de LMMS + + + VST-plugin directory + Répertoire des greffons VST + + + Artwork directory + Répertoire des thèmes graphiques + + + Background artwork + Thème graphique d'arrière-plan + + + FL Studio installation directory + Répertoire d'installation de Fruity Loops Studio + + + LADSPA plugin paths + Chemin d'accès aux greffons LADSPA + + + STK rawwave directory + Répertoire de STK + + + Default Soundfont File + Fichier SoundFont par défaut + + + Performance settings + Configuration des performances + + + UI effects vs. performance + Effets graphique vs Perfomances + + + Smooth scroll in Song Editor + Déplacement fluide dans l'Editeur de Chanson + + + Enable auto save feature + Activer la fonction de sauvegarde automatique + + + Show playback cursor in AudioFileProcessor + Afficher le curseur de lecture dans AudioFileProcessor + + + Audio settings + Configuration audio + + + AUDIO INTERFACE + INTERFACE AUDIO + + + MIDI settings + Configuration MIDI + + + MIDI INTERFACE + INTERFACE MIDI + + + OK + OK + + + Cancel + Annuler + + + Restart LMMS + Redémarrer LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Veuillez noter que la plupart des modifications ne prendront pas effet tant n'aurez pas redémarré LMMS ! + + + Frames: %1 +Latency: %2 ms + Trames : %1 +Latence : %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Ici vous pouvez régler la taille de la mémoire tampon interne utilisée par LMMS. Les valeurs faibles réduisent la latence mais peuvent aussi rendre le son inutilisable ou induire de mauvaises performances, en particulier sur des ordinateurs anciens ou des système sans noyau temps-réel. + + + Choose LMMS working directory + Choisissez le répertoire de travail de LMMS + + + Choose your VST-plugin directory + Choisissez le répertoire des greffons VST + + + Choose artwork-theme directory + Choisissez le répertoire des thèmes graphiques + + + Choose FL Studio installation directory + Choisissez le répertoire d'installation de Fruity Loops Studio + + + Choose LADSPA plugin directory + Choisissez le répertoire des greffons LADSPA + + + Choose STK rawwave directory + Choisissez le répertoire de STK + + + Choose default SoundFont + Choisissez la SoundFont par défaut + + + Choose background artwork + Choisissez le thème graphique d'arrière-plan + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Ici vous pouvez choisir l'interface audio que vous préférez. En fonction de la configuration de votre système au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fenêtres contenant des contrôles pour régler l'interface audio choisie. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Ici vous pouvez choisir l'interface MIDI que vous préférez. En fonction de la configuration de votre système au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fenêtres contenant des contrôles pour régler l'interface MIDI choisie. + + + + Song + + Tempo + Tempo + + + Master volume + Volume général + + + Master pitch + Tonalité générale + + + Project saved + Le projet a été enregistré + + + The project %1 is now saved. + Le projet %1 est maintenant enregistré. + + + Project NOT saved. + Projet NON enregistré. + + + The project %1 was not saved! + Le projet %1 n'a pas été enregistré ! + + + Import file + Importer un fichier + + + MIDI sequences + Séquences MIDI + + + FL Studio projects + Projets Fruity Loops Studio + + + Hydrogen projects + Projets Hydrogen + + + All file types + Tous les types de fichier + + + Empty project + Le projet est vide + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + L'exportation n'a pas de sens car ce projet est vide. Veuillez d'abord mettre quelques éléments dans l'éditeur de morceau ! + + + Select directory for writing exported tracks... + Sélectionnez un répertoire pour écrire les pistes exportées... + + + untitled + sans titre + + + Select file for project-export... + Sélectionnez un fichier vers lequel exporter le projet... + + + The following errors occured while loading: + + SongEditor - - Song-Editor - Éditeur de morceau - - - Play song (Space) - Jouer le morceau (Barre d'espace) - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Cliquez ici si vous souhaitez jouer le morceau en entier. L'écoute commencera à partir du marquer (vert) de position dans le morceau. Vous pouvez aussi déplacer ce curseur pendant l'écoute. - - - Stop song (Space) - Arrêter de jouer le morceau (Barre d'espace) - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Cliquez ici si vous souhaitez ne plus jouer le morceau. Le curseur de position sera placé au début du morceau. - - - Add beat/bassline - Ajouter une piste de rythme ou de ligne de basse - - - Add sample-track - Ajouter une piste d'échantillon - Could not open file Le fichier n'a pas pu être ouvert @@ -4275,26 +5676,6 @@ Raison : "%2" Could not write file Le fichier n'a pas pu être écrit - - Add automation-track - Ajouter une piste d'automation - - - Draw mode - Mode dessin - - - Edit mode (select and move) - Mode édition (Sélectionner et déplacer) - - - Record samples from Audio-device - Enregistrer des échantillons à partir d'un périphérique audio - - - Record samples from Audio-device while playing song or BB track - Enregistrer des échantillons à partir d'un périphérique audio pendant l'écoute d'un morceau ou bien d'un rythme ou d'une ligne de basse - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4358,6 +5739,57 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Ne peux pas ouvrir %1 en écriture. Vous n'avez probablement pas les droits pour écrire dans ce fichier. Assurez vous que vous avez les droits d'accès en écriture pour ce fichier et essayez à nouveau. + + SongEditorWindow + + Song-Editor + Éditeur de morceau + + + Play song (Space) + Jouer le morceau (Barre d'espace) + + + Record samples from Audio-device + Enregistrer des échantillons à partir d'un périphérique audio + + + Record samples from Audio-device while playing song or BB track + Enregistrer des échantillons à partir d'un périphérique audio pendant l'écoute d'un morceau ou bien d'un rythme ou d'une ligne de basse + + + Stop song (Space) + Arrêter de jouer le morceau (Barre d'espace) + + + Add beat/bassline + + + + Add sample-track + Ajouter une piste d'échantillon + + + Add automation-track + Ajouter une piste d'automation + + + Draw mode + Mode dessin + + + Edit mode (select and move) + Mode édition (Sélectionner et déplacer) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Cliquez ici si vous souhaitez jouer le morceau en entier. L'écoute commencera à partir du marquer (vert) de position dans le morceau. Vous pouvez aussi déplacer ce curseur pendant l'écoute. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Cliquez ici si vous souhaitez ne plus jouer le morceau. Le curseur de position sera placé au début du morceau. + + SpectrumAnalyzerControlDialog @@ -4384,6 +5816,13 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Mode du canal + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4426,10 +5865,6 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Custom... Personnalisé... - - &Help - Aid&e - Custom Personnalisé @@ -4470,6 +5905,52 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré cliquez pour changer les unités de temps + + TimeLineWidget + + Enable/disable auto-scrolling + Activer/Désactiver l'auto-défilement + + + Enable/disable loop-points + Activer/Désactiver les marqueurs de jeu en boucle + + + After stopping go back to begin + Revenir au début après l'arrêt + + + After stopping go back to position at which playing was started + Revenir à la position de départ après l'arrêt + + + After stopping keep position + Ne rien faire après l'arrêt + + + Hint + Astuce + + + Press <Ctrl> to disable magnetic loop points. + Appuyez sur <Ctrl> pour désactiver les marqueur magnétiques de jeu en boucle. + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + Maintenez <Shift> pour déplacer le marqueur de début de jeu en boucle. Appuyez sur <Ctrl> pour désactiver les marqueurs magnétiques de jeu en boucle. + + + + Track + + Muted + Coupée + + + Solo + + + TrackContainer @@ -4513,6 +5994,107 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Importation du fichier FLP... + + TrackContentObject + + Muted + Coupée + + + + TrackContentObjectView + + Current position + Position + + + Hint + Astuce + + + Press <Ctrl> and drag to make a copy. + Appuyez sur <Ctrl> et glissez pour faire une copie. + + + Current length + Longueur + + + Press <Ctrl> for free resizing. + Appuyez sur <Ctrl> pour un redimensionnement libre. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 vers %5:%6) + + + Delete (middle mousebutton) + Supprimer (bouton du milieu de la souris) + + + Cut + Couper + + + Copy + Copier + + + Paste + Coller + + + Mute/unmute (<Ctrl> + middle click) + Couper/Jouer (<Ctrl> + clic-milieu) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Appuyez sur <Ctrl> en cliquant sur la poignée de déplacement pour commencer un nouveau glisser/déposer. + + + Actions for this track + Actions pour cette piste + + + Mute + Couper + + + Solo + + + + Mute this track + Couper cette piste + + + Clone this track + Cloner cette piste + + + Remove this track + Supprimer cette piste + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4656,17 +6238,6 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Utiliser une onde définie par l'utilisateur pour cet oscillateur. - - Ui - - Contributors ordered by number of commits: - Contributeurs classés par nombre de commits: - - - Involved - Impliqué - - VersionedSaveDialog @@ -4769,6 +6340,17 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré - contrôle de greffon VST + + VisualizationWidget + + click to enable/disable visualization of master-output + Cliquez pour activer/désactiver la visualisation de la sortie générale + + + Click to enable + Cliquez pour activer + + VstEffectControlDialog @@ -4875,11 +6457,7 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5286,80 +6864,11 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré Sinc - - - bbEditor - Beat+Bassline Editor - Éditeur de rythme et de ligne de basse - - - Play/pause current beat/bassline (Space) - Jouer/Mettre en pause le rythme ou la ligne de basse (Barre d'espace) - - - Add beat/bassline - Ajouter un ryhtme ou une ligne de basse - - - Add automation-track - Ajouter une piste d'automation - - - Stop playback of current beat/bassline (Space) - Arrêter de jouer le rythme ou la ligne de basse (Barre d'espace) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Cliquez ici pour jouer le rythme ou la ligne de basse. Le rythme ou la ligne de basse est rejoué lorsque sa fin est atteinte. - - - Click here to stop playing of current beat/bassline. - Cliquez ici pour arrêter de jouer le rythme ou la ligne de basse. - - - Remove steps - Supprimer des pas - - - Add steps - Ajouter des pas - - - - bbTCOView - - Open in Beat+Bassline-Editor - Ouvrir dans l'éditeur de rythme et de ligne de basse - - - Reset name - Réinitialiser le nom - - - Change name - Changer le nom - - - Change color - Changer la couleur - - - Reset color to default + Sample not found: %1 - - bbTrack - - Beat/Bassline %1 - Ryhtme ou ligne de basse %1 - - - Clone of %1 - Clone de %1 - - bitInvader @@ -5556,42 +7065,6 @@ Veuillez vérifier que vous avez les droits en lecture pour ce fichier et le ré - - exportProjectDialog - - Could not open file - Le fichier n'a pas pu être ouvert - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Le fichier %1 ne peut pas être ouvert en écriture. -Veuillez vérifier que vous avez les droits d'accès en écriture pour ce fichier et le répertoire qui contient ce fichier et réessayez ! - - - Error - Erreur - - - Error while determining file-encoder device. Please try to choose a different output format. - Erreur pendant la détection du périphérique d'encodage du fichier. Veuillez essayer de choisir un format de sortie différent. - - - Rendering: %1% - Encodage : %1% - - - Export project to %1 - Exporter le projet vers %1 - - - - fader - - Please enter a new value between %1 and %2: - Veuillez entrer un valeur entre %1 et %2 : - - graphModel @@ -5693,21 +7166,6 @@ Veuillez vérifier que vous avez les droits d'accès en écriture pour ce f - - knob - - &Help - Aid&e - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Veuillez entrer un nouvelle valeur entre -96,0 dBV et 6,0 dBV : - - - Please enter a new value between %1 and %2: - Veuillez entrer un valeur entre %1 et %2 : - - ladspaBrowserView @@ -6441,13 +7899,6 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Fermer la fenêtre des boutons contrôleurs des effets VST. - - nineButtonSelector - - &Help - Aid&e - - opl2instrument @@ -6901,10 +8352,6 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur no description pas de description - - Instrument plugins - Greffons d'instrument - Incomplete monophonic imitation tb303 Imitation incomplète de TB303 monophonique @@ -6957,14 +8404,6 @@ En double-cliquant sur ces greffons vous ferez apparaître des informations sur Filter for importing MIDI-files into LMMS Filtre pour l'importation de fichiers MIDI dans LMMS - - Instrument browser - Sélecteur d'instruments - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - Faites glisser un instrument dans l'éditeur de morceau, dans l'éditeur de rythme et de ligne de basse, ou dans une piste d'instrument existante. - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7054,335 +8493,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Project notes - Notes du projet + Player for GIG files + - Put down your project notes here. - Ici vous pouvez prendre des notes concernant votre projet. + A multitap echo delay plugin + - Edit Actions - Édition + A native flanger plugin + - &Undo - &Défaire + A native delay plugin + - Ctrl+Z - + An oversampling bitcrusher + - &Redo - &Refaire + A native eq plugin + - Ctrl+Y - - - - &Copy - &Copier - - - Ctrl+C - - - - Cu&t - Cou&per - - - Ctrl+X - - - - &Paste - Co&ller - - - Ctrl+V - - - - Format Actions - Format - - - &Bold - Gr&as - - - Ctrl+B - - - - &Italic - &Italique - - - Ctrl+I - - - - &Underline - &Souligné - - - Ctrl+U - - - - &Left - &Gauche - - - Ctrl+L - - - - C&enter - C&entrer - - - Ctrl+E - - - - &Right - D&roite - - - Ctrl+R - - - - &Justify - &Justifier - - - Ctrl+J - - - - &Color... - C&ouleurs... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Renommer... - - - - setupDialog - - Setup LMMS - Configuration de LMMS + JACK (JACK Audio Connection Kit) + - General settings - Configuration générale + OSS Raw-MIDI (Open Sound System) + - BUFFER SIZE - TAILLE DE LA MÉMOIRE TAMPON + SDL (Simple DirectMedia Layer) + - Reset to default-value - Réinitialiser à la valeur par défaut + PulseAudio (bad latency!) + - MISC - DIVERS + Dummy (no MIDI support) + - Enable tooltips - Activer les info-bulles + ALSA Raw-MIDI (Advanced Linux Sound Architecture) + - Show restart warning after changing settings - Afficher l'invitation à redémarrer après la modification de le configuration + PortAudio + - Display volume as dBV - Afficher le volume en dBV + Dummy (no sound output) + - Compress project files per default - Compresser par défaut les fichiers de projet + ALSA (Advanced Linux Sound Architecture) + - HQ-mode for output audio-device - Périphérique de sortie audio en mode HQ + OSS (Open Sound System) + - LMMS working directory - Répertoire de travail de LMMS + WinMM MIDI + - VST-plugin directory - Répertoire des greffons VST - - - Artwork directory - Répertoire des thèmes graphiques - - - FL Studio installation directory - Répertoire d'installation de Fruity Loops Studio - - - STK rawwave directory - Répertoire de STK - - - Performance settings - Configuration des performances - - - UI effects vs. performance - Effets graphique vs Perfomances - - - Audio settings - Configuration audio - - - AUDIO INTERFACE - INTERFACE AUDIO - - - MIDI settings - Configuration MIDI - - - MIDI INTERFACE - INTERFACE MIDI - - - OK - OK - - - Cancel - Annuler - - - Restart LMMS - Redémarrer LMMS - - - Please note that most changes won't take effect until you restart LMMS! - Veuillez noter que la plupart des modifications ne prendront pas effet tant n'aurez pas redémarré LMMS ! - - - Frames: %1 -Latency: %2 ms - Trames : %1 -Latence : %2 ms - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Ici vous pouvez régler la taille de la mémoire tampon interne utilisée par LMMS. Les valeurs faibles réduisent la latence mais peuvent aussi rendre le son inutilisable ou induire de mauvaises performances, en particulier sur des ordinateurs anciens ou des système sans noyau temps-réel. - - - Choose LMMS working directory - Choisissez le répertoire de travail de LMMS - - - Choose your VST-plugin directory - Choisissez le répertoire des greffons VST - - - Choose artwork-theme directory - Choisissez le répertoire des thèmes graphiques - - - Choose FL Studio installation directory - Choisissez le répertoire d'installation de Fruity Loops Studio - - - Choose LADSPA plugin directory - Choisissez le répertoire des greffons LADSPA - - - Choose STK rawwave directory - Choisissez le répertoire de STK - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Ici vous pouvez choisir l'interface audio que vous préférez. En fonction de la configuration de votre système au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fenêtres contenant des contrôles pour régler l'interface audio choisie. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Ici vous pouvez choisir l'interface MIDI que vous préférez. En fonction de la configuration de votre système au moment de la compilation, vous pouvez choisir entre ALSA, JACK, OSS et d'autres. Vous voyez ci-dessous une fenêtres contenant des contrôles pour régler l'interface MIDI choisie. - - - Paths - Chemins d'accès - - - LADSPA plugin paths - Chemin d'accès aux greffons LADSPA - - - Default Soundfont File - Fichier SoundFont par défaut - - - Background artwork - Thème graphique d'arrière-plan - - - Choose default SoundFont - Choisissez la SoundFont par défaut - - - Choose background artwork - Choisissez le thème graphique d'arrière-plan - - - One instrument track window mode - Mode fenêtre une piste d'instrument - - - Compact track buttons - Boutons de piste compacte - - - Sync VST plugins to host playback - Sync les greffons VST à la lecture de l'hôte - - - Enable note labels in piano roll - Activer les étiquettes de note dans le piano virtuel - - - Enable waveform display by default - Activer l'affichage de forme d'onde par défaut - - - Smooth scroll in Song Editor - Déplacement fluide dans l'Editeur de Chanson - - - Enable auto save feature - Activer la fonction de sauvegarde automatique - - - Show playback cursor in AudioFileProcessor - Afficher le curseur de lecture dans AudioFileProcessor - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7440,6 +8627,10 @@ Latence : %2 ms Chorus Depth Profondeur de chorus + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7685,77 +8876,6 @@ Latence : %2 ms Lorsqu'il est activé, Test réinitialise et vérouille l'oscillateur %1 à zéro jusqu'à ce que Test soit désactivé. - - song - - Tempo - - - - Master volume - Volume général - - - Master pitch - Tonalité générale - - - Project saved - Le projet a été enregistré - - - The project %1 is now saved. - Le projet %1 est maintenant enregistré. - - - Project NOT saved. - Projet NON enregistré. - - - The project %1 was not saved! - Le projet %1 n'a pas été enregistré ! - - - Import file - Importer un fichier - - - untitled - sans titre - - - Select file for project-export... - Sélectionnez un fichier vers lequel exporter le projet... - - - Empty project - Le projet est vide - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - L'exportation n'a pas de sens car ce projet est vide. Veuillez d'abord mettre quelques éléments dans l'éditeur de morceau ! - - - MIDI sequences - Séquences MIDI - - - FL Studio projects - Projets Fruity Loops Studio - - - All file types - Tous les types de fichier - - - Hydrogen projects - Projets Hydrogen - - - Select directory for writing exported tracks... - Sélectionnez un répertoire pour écrire les pistes exportées... - - stereoEnhancerControlDialog @@ -7812,157 +8932,6 @@ Latence : %2 ms Droite à droite - - timeLine - - Enable/disable auto-scrolling - Activer/Désactiver l'auto-défilement - - - Enable/disable loop-points - Activer/Désactiver les marqueurs de jeu en boucle - - - After stopping go back to begin - Revenir au début après l'arrêt - - - After stopping go back to position at which playing was started - Revenir à la position de départ après l'arrêt - - - After stopping keep position - Ne rien faire après l'arrêt - - - Hint - Astuce - - - Press <Ctrl> to disable magnetic loop points. - Appuyez sur <Ctrl> pour désactiver les marqueur magnétiques de jeu en boucle. - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - Maintenez <Shift> pour déplacer le marqueur de début de jeu en boucle. Appuyez sur <Ctrl> pour désactiver les marqueurs magnétiques de jeu en boucle. - - - - track - - Muted - Coupée - - - Solo - Jouée en solo - - - - trackContentObject - - Muted - Coupée - - - - trackContentObjectView - - Current position - Position - - - Hint - Astuce - - - Press <Ctrl> and drag to make a copy. - Appuyez sur <Ctrl> et glissez pour faire une copie. - - - Current length - Longueur - - - Press <Ctrl> for free resizing. - Appuyez sur <Ctrl> pour un redimensionnement libre. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 vers %5:%6) - - - Delete (middle mousebutton) - Supprimer (bouton du milieu de la souris) - - - Cut - Couper - - - Copy - Copier - - - Paste - Coller - - - Mute/unmute (<Ctrl> + middle click) - Couper/Jouer (<Ctrl> + clic-milieu) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Appuyez sur <Ctrl> en cliquant sur la poignée de déplacement pour commencer un nouveau glisser/déposer. - - - Actions for this track - Actions pour cette piste - - - Mute - Couper - - - Mute this track - Couper cette piste - - - Solo - Jouer en solo - - - Clone this track - Cloner cette piste - - - Remove this track - Supprimer cette piste - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7973,16 +8942,6 @@ Latence : %2 ms Please wait while loading VST-plugin... Veuillez patienter pendant le chargement du greffon VST... - - Failed loading VST-plugin - Le chargement du greffon VST a échoué - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - Le greffon VST %1 n'a pas pu être chargé pour une raison quelconque. -S'il fonctionne avec d'autres logiciels VST sous Linux, merci de contacter un développeur LMMS ! - vibed @@ -8209,10 +9168,6 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Click here to normalize waveform. Cliquez ici pour normaliser la forme d'onde. - - &Help - Aid&e - Use a sine-wave for current oscillator. Utiliser une onde sinusoïdale pour cet oscillateur. @@ -8238,17 +9193,6 @@ Le LED situé dans le coin en bas à droite de l'éditeur de forme d'o Utiliser une onde définie par l'utilisateur pour cet oscillateur. - - visualizationWidget - - click to enable/disable visualization of master-output - Cliquez pour activer/désactiver la visualisation de la sortie générale - - - Click to enable - Cliquez pour activer - - voiceObject diff --git a/data/locale/gl.ts b/data/locale/gl.ts index 45235e766..c06249d2d 100644 --- a/data/locale/gl.ts +++ b/data/locale/gl.ts @@ -51,6 +51,14 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións LMMS LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -195,10 +203,6 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -225,16 +229,13 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Semella que o servidor de JACK foi apagado e non foi posíbel iniciar unha instancia nova. En consecuencia, o LMMS non pode preseguir. Hai que gravar este proxecto e reiniciar o JACK e o LMMS. - - - AudioJack::setupWidget CLIENT-NAME - CLINTE-NOME + CLINTE-NOME CHANNELS - CANLES + CANLES @@ -326,42 +327,6 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións AutomationEditor - - Play/pause current pattern (Space) - Reproducir/Deter o padrón actual (Espazo) - - - Stop playing of current pattern (Space) - Parar a execución do padrón actual (Espazo) - - - Draw mode (Shift+D) - Modo de debuxo (Maiúsculas+D) - - - Erase mode (Shift+E) - Modo de borrado (Maiúsculas+E) - - - Cut selected values (Ctrl+X) - Recortar os valores escollidos (Ctrl+X) - - - Copy selected values (Ctrl+C) - Copiar os valores escollidos (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Apegar os valores do porta-retallos (Ctrl+V) - - - Automation Editor - no pattern - Editor de automatización - non hai ningún padrón - - - Automation Editor - %1 - Editor de automatización - %1 - Please open an automation pattern with the context menu of a control! Abra un padrón de automatización co menú de contexto dun control! @@ -374,33 +339,56 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións All selected values were copied to the clipboard. Copiáronse todos os valores escollidos no porta-retallos. + + + AutomationEditorWindow + + Play/pause current pattern (Space) + Reproducir/Deter o padrón actual (Espazo) + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Prema aquí se desexa reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final. + Prema aquí se desexa reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final. + + + Stop playing of current pattern (Space) + Parar a execución do padrón actual (Espazo) Click here if you want to stop playing of the current pattern. - Prema aquí se desexa parar a reprodución deste padrón. + Prema aquí se desexa parar a reprodución deste padrón. + + + Draw mode (Shift+D) + Modo de debuxo (Maiúsculas+D) + + + Erase mode (Shift+E) + Modo de borrado (Maiúsculas+E) + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. + Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo. - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. - - - Click here and the values from the clipboard will be pasted at the first visible measure. - Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel. + Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo. Discrete progression @@ -415,7 +403,11 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -431,13 +423,41 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións - Tension value for spline + Cut selected values (Ctrl+X) + Recortar os valores escollidos (Ctrl+X) + + + Copy selected values (Ctrl+C) + Copiar os valores escollidos (Ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. + + + Click here and the values from the clipboard will be pasted at the first visible measure. + Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel. + + + Tension: + + Automation Editor - no pattern + Editor de automatización - non hai ningún padrón + + + Automation Editor - %1 + Editor de automatización - %1 + AutomationPattern @@ -484,6 +504,14 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións Set/clear record Indicar/Limpar a gravación + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -492,6 +520,79 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións Pista de automatización + + BBEditor + + Beat+Bassline Editor + Editor de ritmos e liña do baixo + + + Play/pause current beat/bassline (Space) + Reproducir/Deter o ritmo/a liña do baixo actual (Espazo) + + + Stop playback of current beat/bassline (Space) + Parar a reprodución do ritmo/da liña do baixo actual (Espazo) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Prema aquí para reproducir o ritmo/liña do baixo actual. O ritmo/liña do baixo repítese en bucle automaticamente ao chegar ao final. + + + Click here to stop playing of current beat/bassline. + Prema aquí para parar a reprodución do ritmo/liña do baixo actual. + + + Add beat/bassline + Engadir un ritmo/liña do baixo + + + Add automation-track + + + + Remove steps + Eliminar pasos + + + Add steps + Engadir pasos + + + + BBTCOView + + Open in Beat+Bassline-Editor + Abrir no editor de ritmos e liña do baixo + + + Reset name + Restaurar o nome + + + Change name + Mudar o nome + + + Change color + Mudar a cor + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Ritmo/Liña do baixo %1 + + + Clone of %1 + + + BassBoosterControlDialog @@ -534,6 +635,100 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións Taxa + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + GAIN + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Taxa + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &Axuda + + + Help (not available) + + + CarlaInstrumentView @@ -652,9 +847,125 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións &Remove this plugin Elimina&r este engadido + + + CrossoverEQControlDialog - &Help - &Axuda + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Taxa + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -782,6 +1093,60 @@ Se lle interesa traducir o LMMS a outro idioma ou desexa mellorar as traducións Vocal Formant Filter Filtro de formante vocal + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -921,10 +1286,6 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar &Remove this plugin Elimina&r este engadido - - &Help - &Axuda - EnvelopeAndLfoParameters @@ -1164,6 +1525,255 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Ganancia + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Frecuencia: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1302,6 +1912,43 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + Non foi posíbel abrir o ficheiro + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Non foi posíbel abrir o ficheiro %1 para escribir nel. +Asegúrese de ter permisos sobre o ficheiro e o directorio que o contén e tente de novo! + + + Export project to %1 + Exportar o proxecto a %1 + + + Error + Erro + + + Error while determining file-encoder device. Please try to choose a different output format. + Produciuse un erro ao determinar o dispositivo codificador do ficheiro. Tente escollendo un formato de saída diferente. + + + Rendering: %1% + A renderizar: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Introduza un valor novo entre %1 e %2: + FileBrowser @@ -1337,6 +1984,76 @@ Ao premer co botón dereito aparece un menú de contexto no que se pode cambiar + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + Ruído + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + Ruído + + + White Noise Amount: + + + FxLine @@ -1370,8 +2087,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - &Axuda + Remove &unused channels + @@ -1399,9 +2116,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer Mesturador de efectos especiais - - - FxMixerView::FxChannelView FX Fader %1 Fader de efectos %1 @@ -1414,6 +2128,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel Silenciar esta canle de efectos especiais + + Solo + Solo + + + Solo FX channel + + FxRoute @@ -1422,6 +2144,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + Banco + + + Patch + Parche + + + Gain + Ganancia + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Escoller o parche + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Ganancia + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2013,6 +2797,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2111,6 +2906,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter Filtro de formante vocal + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2201,6 +3024,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2335,6 +3162,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + DIVERSOS + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Introduza un valor novo entre -96,0 dBV e 6,0 dBV: + + + Please enter a new value between %1 and %2: + Introduza un valor novo entre %1 e %2: + LadspaControl @@ -2371,10 +3221,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - Efecto - Unknown LADSPA plugin %1 requested. Solicitouse un engadido de LADSPA, %1, que é descoñecido. @@ -2496,10 +3342,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. Prema aquí para unha onda cadrada. - - Click here for a a moog saw-wave. - Prema aquí para unha onda de dente de serra tipo Moog. - Click here for an exponential wave. Prema aquí para unha onda exponencial. @@ -2513,6 +3355,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2533,10 +3379,6 @@ Double click to pick a file. Please make sure you have write-access to the file and try again. Non foi posíbel gravar o ficheiro de configuración %1. Probabelmente non se lle permita escribir neste ficheiro. Asegúrese de dispor de acceso para escribir neste ficheiro e ténteo de novo. - - &Project - &Proxecto - &New &Novo @@ -2581,10 +3423,6 @@ Please make sure you have write-access to the file and try again. &Help &Axuda - - Online help - Axuda na Internet - Help Axuda @@ -2689,14 +3527,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? Este proxecto foi modificado desde que se gardou a última vez. Desexa gardalo agora? - - Open project - Abrir un proxecto - - - Save project - Gardar o proxecto - Help not available Non hai axuda dispoñíbel @@ -2707,42 +3537,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. De momento non hai axuda dispoñíbel no LMMS. Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - E&xport tracks... - - - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2751,10 +3545,6 @@ Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS. Error while parsing configuration file at line %1:%2: %3 - - Save as new &version - - LMMS (*.mmp *.mmpz) @@ -2767,10 +3557,6 @@ Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS. Volumes - - &Recently opened projects - - Undo @@ -2783,6 +3569,62 @@ Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2818,10 +3660,10 @@ Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE - DISPOSITIVO + DISPOSITIVO @@ -3286,6 +4128,98 @@ Visitehttp://lmms.sf.net/wiki para documentación sobre o LMMS. Sub3-LFO2 + + Sine wave + Onda senoidal + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + Onda triangular + + + Saw wave + Onda de dente de serra + + + Ramp wave + + + + Square wave + Onda cadrada + + + Moog saw wave + + + + Abs. sine wave + + + + Random + Aleatorio + + + Random smooth + + MonstroView @@ -3458,6 +4392,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3736,6 +4705,14 @@ empregue a roda do rato para modificar o volume un paso DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3767,29 +4744,13 @@ empregue a roda do rato para modificar o volume un paso Amount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - Reproducir/Deter o padrón actual (Espazo) - - - Stop playing of current pattern (Space) - Parar a execución do padrón actual (Espazo) - - - Cut selected notes (Ctrl+X) - Recortar as notas escollidas (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Copiar as notas escollidas (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Apegar as notas do porta-retallos (Ctrl+V) - Piano-Roll - no pattern Pianola - non hai ningún padrón @@ -3802,58 +4763,10 @@ empregue a roda do rato para modificar o volume un paso Please open a pattern by double-clicking on it! Abra un padrón facendo duplo clic nel! - - Record notes from MIDI-device/channel-piano - Gravar notas dun dispositivo MIDI/piano de canle - - - Record notes from MIDI-device/channel-piano while playing song or BB track - Gravar notas dun dispositivo MIDI/piano de canle mentres se reproduce a canción ou pista de ritmos/liña do baixo - - - Draw mode (Shift+D) - Modo de debuxo (Maiúsculas+D) - - - Erase mode (Shift+E) - Modo de borrado (Maiúsculas+E) - - - Select mode (Shift+S) - Modo de selección (Maiúscula+S) - Last note Última nota - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Prema aquí para reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e despois pódense editar. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e escóitase a canción ou pista de ritmos/liña do baixo no fondo. - - - Click here to stop playback of current pattern. - Prema aquí para parar a reprodución deste padrón. - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel. - Note lock Bloqueo de notas @@ -3866,26 +4779,6 @@ empregue a roda do rato para modificar o volume un paso Note Panning Panormámica das notas - - Detune mode (Shift+T) - Modo de desafinación (Maiúsculas+T) - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. Neste modo, manteña Ctrl para ir temporalmente ao modo de selección. - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo. - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Como alternativa pode premer Ctrl no modo de debuxo para empregar temporalmente o modo de selección. - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - Prema aquí e actívase o modo de desafinación.Neste modo pódese premer unhanota para abrir a súa desafinación de automatización. Pódese empregar isto para escorregar entre as notas. Tamén se pode premer «Maiúsculas+T» no teclado para activar este mdo. - Mark/unmark current semitone @@ -3910,26 +4803,6 @@ empregue a roda do rato para modificar o volume un paso No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3951,6 +4824,117 @@ empregue a roda do rato para modificar o volume un paso Introduza un valor novo entre %1 e %2: + + PianoRollWindow + + Play/pause current pattern (Space) + Reproducir/Deter o padrón actual (Espazo) + + + Record notes from MIDI-device/channel-piano + Gravar notas dun dispositivo MIDI/piano de canle + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Gravar notas dun dispositivo MIDI/piano de canle mentres se reproduce a canción ou pista de ritmos/liña do baixo + + + Stop playing of current pattern (Space) + Parar a execución do padrón actual (Espazo) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Prema aquí para reproducir este padrón. Isto é útil mentres se edita. O padrón repítese en bucle automaticamente ao chegar ao final. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e despois pódense editar. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Prema aquí para gravar notas desde un dispositivo MIDI ou desde o piano de proba virtual da xanela da canle correspondente no padrón actual. As notas tocadas ao gravar escríbense neste padrón e escóitase a canción ou pista de ritmos/liña do baixo no fondo. + + + Click here to stop playback of current pattern. + Prema aquí para parar a reprodución deste padrón. + + + Draw mode (Shift+D) + Modo de debuxo (Maiúsculas+D) + + + Erase mode (Shift+E) + Modo de borrado (Maiúsculas+E) + + + Select mode (Shift+S) + Modo de selección (Maiúscula+S) + + + Detune mode (Shift+T) + Modo de desafinación (Maiúsculas+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + Prema aquí e o activarase o modo de debuxo. Neste modo pode engadir e mover valores individuais. Este é o modo por omisión que se emprega a maior parte do tempo. Tamén pode premer «Maiúsculas+D» no teclado para activar este modo. Neste modo, manteña Ctrl para ir temporalmente ao modo de selección. + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Tamén pode premer «Maiúsculas+E» no teclado para activar este modo. + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + Prema aquí e activarase o modo de borrado. Neste modo pódense borrar valores individuais. Como alternativa pode premer Ctrl no modo de debuxo para empregar temporalmente o modo de selección. + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + Prema aquí e actívase o modo de desafinación.Neste modo pódese premer unhanota para abrir a súa desafinación de automatización. Pódese empregar isto para escorregar entre as notas. Tamén se pode premer «Maiúsculas+T» no teclado para activar este mdo. + + + Cut selected notes (Ctrl+X) + Recortar as notas escollidas (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Copiar as notas escollidas (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Apegar as notas do porta-retallos (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Prema aquí e os valores escollidos recórtanse e van para o porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Prema aquí e os valores escollidos cópianse no porta-retallos. Pódeos apegar en calquera lugar de calquera padrón premendo o botón de apegar. + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + Prema aquí e os valores do porta-retallos apegaranse no primeiro compás visíbel. + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3983,6 +4967,140 @@ Razón: «%2» + + PluginBrowser + + Instrument plugins + Engadidos de instrumento + + + Instrument browser + Navegador de instrumentos + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + Arrastre un instrumento para o Editor de cancións, o Editor de ritmos+liña do baixo ou para unha pista de instrumento existente. + + + + ProjectNotes + + Project notes + Notas do proxecto + + + Put down your project notes here. + Anote aquí as súas notas sobre o proxecto. + + + Edit Actions + Editar as accións + + + &Undo + Desfa&cer + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Refacer + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Copiar + + + Ctrl+C + Ctrl+C + + + Cu&t + Cor&tar + + + Ctrl+X + Ctrl+X + + + &Paste + A&pegar + + + Ctrl+V + Ctrl+V + + + Format Actions + Accións de formato + + + &Bold + &Negrita + + + Ctrl+B + Ctrl+B + + + &Italic + Cursi&va + + + Ctrl+I + Ctrl+I + + + &Underline + S&ubliñado + + + Ctrl+U + Ctrl+U + + + &Left + &Esquerda + + + Ctrl+L + Ctrl+L + + + C&enter + C&entro + + + Ctrl+E + Ctrl+E + + + &Right + De&reita + + + Ctrl+R + Ctrl+R + + + &Justify + &Xustificar + + + Ctrl+J + Ctrl+J + + + &Color... + &Cor... + + ProjectRenderer @@ -4133,6 +5251,13 @@ Razón: «%2» + + RenameDialog + + Rename... + Mudar o nome... + + SampleBuffer @@ -4221,6 +5346,10 @@ Razón: «%2» Volume Volume + + Panning + Panorámica + SampleTrackView @@ -4236,37 +5365,309 @@ Razón: «%2» VOL VOL + + Panning + Panorámica + + + Panning: + Panorámica: + + + PAN + PAN + + + + SetupDialog + + Setup LMMS + Configuración do LMMS + + + General settings + Configuración xeral + + + BUFFER SIZE + TAMAÑO DO BÚFER + + + Reset to default-value + Restaurar o valor por omisión + + + MISC + DIVERSOS + + + Enable tooltips + Activar as axudiñas + + + Show restart warning after changing settings + Mostrar o aviso sobre o reinicio despois de cambiar a configuración + + + Display volume as dBV + Mostrar o volume como dBV + + + Compress project files per default + Comprimir os ficheiros dos proxectos por omisión + + + One instrument track window mode + + + + HQ-mode for output audio-device + Modo de calidade alta para o dispositivo de son de saída + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Rutas + + + LMMS working directory + Directorio de traballo do LMMS + + + VST-plugin directory + Directorio dos engadidos de VST + + + Artwork directory + Directorio do material gráfico + + + Background artwork + Gráficos do fondo + + + FL Studio installation directory + Directorio de instalación do FL Studio + + + LADSPA plugin paths + Rutas aos engadidos de LADSPA + + + STK rawwave directory + Directorio de ondas cruas de STK + + + Default Soundfont File + Ficheiro Soundfont por omisión + + + Performance settings + Configuración do desempeño + + + UI effects vs. performance + Efectos da interface fronte a desempeño + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + Configuración do son + + + AUDIO INTERFACE + INTERFACE DO SON + + + MIDI settings + Configuración do MIDI + + + MIDI INTERFACE + INTERFACE MIDI + + + OK + Aceptar + + + Cancel + Cancelar + + + Restart LMMS + Reiniciar o LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Teña en conta que a maioría dos cambios non serán efectivos até que se reinicie o LMMS! + + + Frames: %1 +Latency: %2 ms + Cadencia: %1 +Latencia: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Aquí pódese configurar o tamaño do búfer interno empregado polo LMMS. Valores máis pequenos resultan nunha latencia menor mais poden tamén causar son non usábel ou desempeño inadecuado, especialmente en computadores vellos ou en sistemas cun kernel que non sexa de tempo real. + + + Choose LMMS working directory + Escoller o directorio de traballo do LMMS + + + Choose your VST-plugin directory + Escoller o directorio dos engadidos de VST + + + Choose artwork-theme directory + Escoller o directorio do material gráfico + + + Choose FL Studio installation directory + Escoller o directorio de instalación do FL Studio + + + Choose LADSPA plugin directory + Escoller o directorio dos engadidos de LADSPA + + + Choose STK rawwave directory + Escoller o directorio de ondas cruas de STK + + + Choose default SoundFont + Escoller a SoundFont por omisión + + + Choose background artwork + Escoller os gráficos do fondo + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Aquí pódese escoller a interface de son preferida. Dependendo da configuración do sistema durante a compilación pódese escoller entre ALSA, JACK, OSS e máis. Embaixo vese unha caixa que oferece controles para configurar a interface de son escollida. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Aquí pódese escoller a interface de MIDI preferida. Dependendo da configuración do sistema durante a compilación pódese escoller entre ALSA, OSS e máis. Embaixo vese unha caixa que oferece controles para configurar a interface de MIDI escollida. + + + + Song + + Tempo + Tempo + + + Master volume + Volume global + + + Master pitch + Altura global + + + Project saved + Proxecto gravado + + + The project %1 is now saved. + O proxecto %1 xa está gravado. + + + Project NOT saved. + O proxecto NON está gravado. + + + The project %1 was not saved! + O proxecto %1 no nestá gravado! + + + Import file + Importar un ficheiro + + + MIDI sequences + Secuencias de MIDI + + + FL Studio projects + Proxectos de FL Studio + + + Hydrogen projects + + + + All file types + Todos os tipos de ficheiro + + + Empty project + Proxecto baleiro + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + Este proxecto está baleiro, polo que exportalo non ten xeito. Poña algo primeiro no Editor de cancións! + + + Select directory for writing exported tracks... + + + + untitled + sen título + + + Select file for project-export... + Escolla o ficheiro para a exportación do proxecto... + + + The following errors occured while loading: + + SongEditor - - Song-Editor - Editor de cancións - - - Play song (Space) - Reproducir unha canción (Espazo) - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Prema aquí se desexa reproducir a canción enteira. A reprodución comeza no marcador de posición da canción (verde). Tamén se pode mover durante a reprodución. - - - Stop song (Space) - Parar a canción (Espazo) - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Prema aquí se desexa parar a reprodución da canción. O marcador de posición da canción irá para o principio da canción. - - - Add beat/bassline - Engadir un ritmo/liña do baixo - - - Add sample-track - Engadir unha pista de mostra - Could not open file Non foi posíbel abrir o ficheiro @@ -4275,26 +5676,6 @@ Razón: «%2» Could not write file Non foi posíbel escribir no ficheiro - - Add automation-track - Engaidr unha pista de automatización - - - Draw mode - Modo de debuxo - - - Edit mode (select and move) - Modo de edición (escoller e mover) - - - Record samples from Audio-device - Gravar mostras dun dispositivo de son - - - Record samples from Audio-device while playing song or BB track - Gravar mostras dun dispositivo de son mentres se reproduce a canción ou pista de ritmos/liña do baixo - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4357,6 +5738,57 @@ Razón: «%2» + + SongEditorWindow + + Song-Editor + Editor de cancións + + + Play song (Space) + Reproducir unha canción (Espazo) + + + Record samples from Audio-device + Gravar mostras dun dispositivo de son + + + Record samples from Audio-device while playing song or BB track + Gravar mostras dun dispositivo de son mentres se reproduce a canción ou pista de ritmos/liña do baixo + + + Stop song (Space) + Parar a canción (Espazo) + + + Add beat/bassline + Engadir un ritmo/liña do baixo + + + Add sample-track + Engadir unha pista de mostra + + + Add automation-track + + + + Draw mode + Modo de debuxo + + + Edit mode (select and move) + Modo de edición (escoller e mover) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Prema aquí se desexa reproducir a canción enteira. A reprodución comeza no marcador de posición da canción (verde). Tamén se pode mover durante a reprodución. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Prema aquí se desexa parar a reprodución da canción. O marcador de posición da canción irá para o principio da canción. + + SpectrumAnalyzerControlDialog @@ -4383,6 +5815,13 @@ Razón: «%2» Modo da canle + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4425,10 +5864,6 @@ Razón: «%2» Custom... Personalizada... - - &Help - &Axuda - Custom Personalizada @@ -4469,6 +5904,52 @@ Razón: «%2» + + TimeLineWidget + + Enable/disable auto-scrolling + Activar/Desactivar o desprazamento automático + + + Enable/disable loop-points + Activar/Desactivar os puntos de bucle + + + After stopping go back to begin + Despois de parar voltar ao principio + + + After stopping go back to position at which playing was started + Despois de parar voltar á posición na que se iniciou a reprodución + + + After stopping keep position + Despois de parar manter a posición + + + Hint + Suxestión + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + Silenciado + + + Solo + Solo + + TrackContainer @@ -4512,6 +5993,107 @@ Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o cont A importar un ficheiro FLP... + + TrackContentObject + + Muted + Silenciado + + + + TrackContentObjectView + + Current position + Posición actual + + + Hint + Suxestión + + + Press <Ctrl> and drag to make a copy. + Prema <Ctrl> e arrastre para facer unha copia. + + + Current length + Duración actual + + + Press <Ctrl> for free resizing. + Prema <Ctrl> para modificar o tamaño libremente + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 a %5:%6) + + + Delete (middle mousebutton) + Eliminar (botón do medio do rato) + + + Cut + Recortar + + + Copy + Copiar + + + Paste + Apegar + + + Mute/unmute (<Ctrl> + middle click) + Silenciar/Darlle volume (<Ctrl> + botón central do rato) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Prema <Ctrl> mentres ten a asa de mover premida para iniciar unha acción de arrastrar e soltar. + + + Actions for this track + Accións para esta pista + + + Mute + Silenciar + + + Solo + Solo + + + Mute this track + Silenciar esta pista + + + Clone this track + Clonar esta pista + + + Remove this track + Eliminar esta pista + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4655,17 +6237,6 @@ Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o cont Empregar unha forma de onda predefinida para este oscilador. - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4768,6 +6339,17 @@ Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o cont + + VisualizationWidget + + click to enable/disable visualization of master-output + Prema para des/activar a visualización da saída global + + + Click to enable + Prema para activar + + VstEffectControlDialog @@ -4874,11 +6456,7 @@ Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o cont - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5284,77 +6862,8 @@ Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o cont Sinc - - - bbEditor - Beat+Bassline Editor - Editor de ritmos e liña do baixo - - - Play/pause current beat/bassline (Space) - Reproducir/Deter o ritmo/a liña do baixo actual (Espazo) - - - Add beat/bassline - Engadir un ritmo/liña do baixo - - - Add automation-track - Engadir unha pista de automatización - - - Stop playback of current beat/bassline (Space) - Parar a reprodución do ritmo/da liña do baixo actual (Espazo) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Prema aquí para reproducir o ritmo/liña do baixo actual. O ritmo/liña do baixo repítese en bucle automaticamente ao chegar ao final. - - - Click here to stop playing of current beat/bassline. - Prema aquí para parar a reprodución do ritmo/liña do baixo actual. - - - Remove steps - Eliminar pasos - - - Add steps - Engadir pasos - - - - bbTCOView - - Open in Beat+Bassline-Editor - Abrir no editor de ritmos e liña do baixo - - - Reset name - Restaurar o nome - - - Change name - Mudar o nome - - - Change color - Mudar a cor - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - Ritmo/Liña do baixo %1 - - - Clone of %1 + Sample not found: %1 @@ -5554,42 +7063,6 @@ Asegúrese de ter permiso de lectura sobre o ficheiro e o directorio que o cont - - exportProjectDialog - - Export project to %1 - Exportar o proxecto a %1 - - - Error - Erro - - - Error while determining file-encoder device. Please try to choose a different output format. - Produciuse un erro ao determinar o dispositivo codificador do ficheiro. Tente escollendo un formato de saída diferente. - - - Rendering: %1% - A renderizar: %1% - - - Could not open file - Non foi posíbel abrir o ficheiro - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Non foi posíbel abrir o ficheiro %1 para escribir nel. -Asegúrese de ter permisos sobre o ficheiro e o directorio que o contén e tente de novo! - - - - fader - - Please enter a new value between %1 and %2: - Introduza un valor novo entre %1 e %2: - - graphModel @@ -5691,21 +7164,6 @@ Asegúrese de ter permisos sobre o ficheiro e o directorio que o contén e tente - - knob - - &Help - &Axuda - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Introduza un valor novo entre -96,0 dBV e 6,0 dBV: - - - Please enter a new value between %1 and %2: - Introduza un valor novo entre %1 e %2: - - ladspaBrowserView @@ -6439,13 +7897,6 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por - - nineButtonSelector - - &Help - &Axuda - - opl2instrument @@ -6899,10 +8350,6 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por no description sen descrición - - Instrument plugins - Engadidos de instrumento - Incomplete monophonic imitation tb303 Imitación monofónica incompleta tb303 @@ -6955,14 +8402,6 @@ Facendo duplo clic sobre calquera dos engadidos mostra información sobre os por Filter for importing MIDI-files into LMMS Filtro para importar ficheiros MIDI ao LMMS - - Instrument browser - Navegador de instrumentos - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - Arrastre un instrumento para o Editor de cancións, o Editor de ritmos+liña do baixo ou para unha pista de instrumento existente. - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7053,335 +8492,83 @@ Este chip empregábase no computador Commodore 64. A NES-like synthesizer - - - projectNotes - Project notes - Notas do proxecto + Player for GIG files + - Put down your project notes here. - Anote aquí as súas notas sobre o proxecto. + A multitap echo delay plugin + - Edit Actions - Editar as accións + A native flanger plugin + - &Undo - Desfa&cer + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - &Refacer + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &Copiar - - - Ctrl+C - Ctrl+C - - - Cu&t - Cor&tar - - - Ctrl+X - Ctrl+X - - - &Paste - A&pegar - - - Ctrl+V - Ctrl+V - - - Format Actions - Accións de formato - - - &Bold - &Negrita - - - Ctrl+B - Ctrl+B - - - &Italic - Cursi&va - - - Ctrl+I - Ctrl+I - - - &Underline - S&ubliñado - - - Ctrl+U - Ctrl+U - - - &Left - &Esquerda - - - Ctrl+L - Ctrl+L - - - C&enter - C&entro - - - Ctrl+E - Ctrl+E - - - &Right - De&reita - - - Ctrl+R - Ctrl+R - - - &Justify - &Xustificar - - - Ctrl+J - Ctrl+J - - - &Color... - &Cor... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Mudar o nome... - - - - setupDialog - - Setup LMMS - Configuración do LMMS - - - General settings - Configuración xeral - - - BUFFER SIZE - TAMAÑO DO BÚFER - - - Reset to default-value - Restaurar o valor por omisión - - - MISC - DIVERSOS - - - Enable tooltips - Activar as axudiñas - - - Show restart warning after changing settings - Mostrar o aviso sobre o reinicio despois de cambiar a configuración - - - Display volume as dBV - Mostrar o volume como dBV - - - Compress project files per default - Comprimir os ficheiros dos proxectos por omisión - - - HQ-mode for output audio-device - Modo de calidade alta para o dispositivo de son de saída - - - LMMS working directory - Directorio de traballo do LMMS - - - VST-plugin directory - Directorio dos engadidos de VST - - - Artwork directory - Directorio do material gráfico - - - FL Studio installation directory - Directorio de instalación do FL Studio - - - STK rawwave directory - Directorio de ondas cruas de STK - - - Performance settings - Configuración do desempeño - - - UI effects vs. performance - Efectos da interface fronte a desempeño - - - Audio settings - Configuración do son - - - AUDIO INTERFACE - INTERFACE DO SON - - - MIDI settings - Configuración do MIDI - - - MIDI INTERFACE - INTERFACE MIDI - - - OK - Aceptar - - - Cancel - Cancelar - - - Restart LMMS - Reiniciar o LMMS - - - Please note that most changes won't take effect until you restart LMMS! - Teña en conta que a maioría dos cambios non serán efectivos até que se reinicie o LMMS! - - - Frames: %1 -Latency: %2 ms - Cadencia: %1 -Latencia: %2 ms - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Aquí pódese configurar o tamaño do búfer interno empregado polo LMMS. Valores máis pequenos resultan nunha latencia menor mais poden tamén causar son non usábel ou desempeño inadecuado, especialmente en computadores vellos ou en sistemas cun kernel que non sexa de tempo real. - - - Choose LMMS working directory - Escoller o directorio de traballo do LMMS - - - Choose your VST-plugin directory - Escoller o directorio dos engadidos de VST - - - Choose artwork-theme directory - Escoller o directorio do material gráfico - - - Choose FL Studio installation directory - Escoller o directorio de instalación do FL Studio - - - Choose LADSPA plugin directory - Escoller o directorio dos engadidos de LADSPA - - - Choose STK rawwave directory - Escoller o directorio de ondas cruas de STK - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Aquí pódese escoller a interface de son preferida. Dependendo da configuración do sistema durante a compilación pódese escoller entre ALSA, JACK, OSS e máis. Embaixo vese unha caixa que oferece controles para configurar a interface de son escollida. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Aquí pódese escoller a interface de MIDI preferida. Dependendo da configuración do sistema durante a compilación pódese escoller entre ALSA, OSS e máis. Embaixo vese unha caixa que oferece controles para configurar a interface de MIDI escollida. - - - Paths - Rutas - - - LADSPA plugin paths - Rutas aos engadidos de LADSPA - - - Default Soundfont File - Ficheiro Soundfont por omisión - - - Background artwork - Gráficos do fondo - - - Choose default SoundFont - Escoller a SoundFont por omisión - - - Choose background artwork - Escoller os gráficos do fondo - - - One instrument track window mode + JACK (JACK Audio Connection Kit) - Compact track buttons + OSS Raw-MIDI (Open Sound System) - Sync VST plugins to host playback + SDL (Simple DirectMedia Layer) - Smooth scroll in Song Editor + PulseAudio (bad latency!) - Enable auto save feature + Dummy (no MIDI support) - Show playback cursor in AudioFileProcessor + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Enable note labels in piano roll + PortAudio - Enable waveform display by default + Dummy (no sound output) - Keep effects running even without input + ALSA (Advanced Linux Sound Architecture) + + + + OSS (Open Sound System) + + + + WinMM MIDI + + + + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7439,6 +8626,10 @@ Latencia: %2 ms Chorus Depth Profundidade do coro + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7684,77 +8875,6 @@ Latencia: %2 ms Proba, cando escollido, restaura e bloquea o oscilador %1 a cero até que remate a proba. - - song - - Tempo - Tempo - - - Master volume - Volume global - - - Master pitch - Altura global - - - Project saved - Proxecto gravado - - - The project %1 is now saved. - O proxecto %1 xa está gravado. - - - Project NOT saved. - O proxecto NON está gravado. - - - The project %1 was not saved! - O proxecto %1 no nestá gravado! - - - Import file - Importar un ficheiro - - - untitled - sen título - - - Select file for project-export... - Escolla o ficheiro para a exportación do proxecto... - - - Empty project - Proxecto baleiro - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - Este proxecto está baleiro, polo que exportalo non ten xeito. Poña algo primeiro no Editor de cancións! - - - MIDI sequences - Secuencias de MIDI - - - FL Studio projects - Proxectos de FL Studio - - - All file types - Todos os tipos de ficheiro - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7811,157 +8931,6 @@ Latencia: %2 ms Dereita para dereita - - timeLine - - Enable/disable auto-scrolling - Activar/Desactivar o desprazamento automático - - - Enable/disable loop-points - Activar/Desactivar os puntos de bucle - - - After stopping go back to begin - Despois de parar voltar ao principio - - - After stopping go back to position at which playing was started - Despois de parar voltar á posición na que se iniciou a reprodución - - - After stopping keep position - Despois de parar manter a posición - - - Hint - Suxestión - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - Silenciado - - - Solo - Solo - - - - trackContentObject - - Muted - Silenciado - - - - trackContentObjectView - - Current position - Posición actual - - - Hint - Suxestión - - - Press <Ctrl> and drag to make a copy. - Prema <Ctrl> e arrastre para facer unha copia. - - - Current length - Duración actual - - - Press <Ctrl> for free resizing. - Prema <Ctrl> para modificar o tamaño libremente - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 a %5:%6) - - - Delete (middle mousebutton) - Eliminar (botón do medio do rato) - - - Cut - Recortar - - - Copy - Copiar - - - Paste - Apegar - - - Mute/unmute (<Ctrl> + middle click) - Silenciar/Darlle volume (<Ctrl> + botón central do rato) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Prema <Ctrl> mentres ten a asa de mover premida para iniciar unha acción de arrastrar e soltar. - - - Actions for this track - Accións para esta pista - - - Mute - Silenciar - - - Mute this track - Silenciar esta pista - - - Solo - Solo - - - Clone this track - Clonar esta pista - - - Remove this track - Eliminar esta pista - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7972,16 +8941,6 @@ Latencia: %2 ms Please wait while loading VST-plugin... Agarde mentres se carga o engadido de VST... - - Failed loading VST-plugin - Fallou a carga do engadido de VST - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - Non foi posíbel cargar o engadido de VST %1 por algunha razón. -Se funciona con outro software de VST en Linux, contacte cun desenvolvedor do LMMS! - vibed @@ -8208,10 +9167,6 @@ O LED do recanto inferior dereito do editor da forma da onda determina se a cord Click here to normalize waveform. Prema aquí para normalizar a forma da onda. - - &Help - &Axuda - Use a sine-wave for current oscillator. Empregar unha onda senoidal para este oscilador. @@ -8237,17 +9192,6 @@ O LED do recanto inferior dereito do editor da forma da onda determina se a cord Empregar unha forma de onda predefinida para este oscilador. - - visualizationWidget - - click to enable/disable visualization of master-output - Prema para des/activar a visualización da saída global - - - Click to enable - Prema para activar - - voiceObject diff --git a/data/locale/it.ts b/data/locale/it.ts index e04e8ebdc..fe49348ab 100644 --- a/data/locale/it.ts +++ b/data/locale/it.ts @@ -7,10 +7,6 @@ About LMMS About LMMS - - LMMS (Linux MultiMedia Studio) - LMMS (Linux MultiMedia Studio) - Version %1 (%2/%3, Qt %4, %5) Versione %1 (%2/%3, Qt %4, %5) @@ -52,6 +48,18 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> <html><head/><body><p><a href="http://lmms.io"><span style=" text-decoration: underline; color:#0000ff;">http://lmms.io</span></a></p></body></html> + + LMMS + LMMS + + + Involved + Coinvolti + + + Contributors ordered by number of commits: + Hanno collaborato (ordinati per numero di contributi): + AmplifierControlDialog @@ -196,10 +204,6 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s With this knob you can set the point where the loop starts. Con questa modalità puoi impostare il punto dove la ripetizione comincia: la parte del suono tra il LoopBack e il punto di fine è quella che verà ripetuta. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -226,16 +230,13 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Il server JACK sembra essere stato spento e non sono partite nuove istanze. Quindi LMMS non è in grado di procedere. Salva il progetto attivo e fai ripartire JACK ed LMMS. - - - AudioJack::setupWidget CLIENT-NAME - NOME DEL CLIENT + NOME DEL CLIENT CHANNELS - CANALI + CANALI @@ -327,70 +328,6 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s AutomationEditor - - Play/pause current pattern (Space) - Riproduci/metti in pausa questo pattern (Barra Spaziatrice) - - - Stop playing of current pattern (Space) - Ferma la riproduzione di questo pattern (Barra Spaziatrice) - - - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce. - - - Click here if you want to stop playing of the current pattern. - Cliccando qui si ferma la riproduzione del pattern. - - - Draw mode (Shift+D) - Modalità disegno (Shift+D) - - - Erase mode (Shift+E) - Modalità cancella (Shift+E) - - - Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. - - - Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'. - - - Cut selected values (Ctrl+X) - Taglia i valori selezionati (Ctrl+X) - - - Copy selected values (Ctrl+C) - Copia i valori selezionati (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Incolla i valori selezionati (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliccando qui i valori selezionati vengono spostati nella clipboard. È possibile incollarli ovunque, in qualsiasi pattern, cliccando il pulsante Incolla. - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliccando qui i valori selezionati vengono copiati della clipboard. È possibile incollarli ovunque, in qualsiasi pattern, cliccando il pulsante Incolla. - - - Click here and the values from the clipboard will be pasted at the first visible measure. - Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile. - - - Automation Editor - no pattern - Editor dell'automazione - nessun pattern - - - Automation Editor - %1 - Editor dell'automazione - %1 - Please open an automation pattern with the context menu of a control! È necessario aprire un pattern di automazione con il menu contestuale di un controllo! @@ -403,41 +340,124 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s All selected values were copied to the clipboard. Tutti i valori sono stati copiati nella clipboard. + + + AutomationEditorWindow + + Play/pause current pattern (Space) + + + + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce. + + + Stop playing of current pattern (Space) + + + + Click here if you want to stop playing of the current pattern. + Cliccando qui si ferma la riproduzione del pattern. + + + Draw mode (Shift+D) + Modalità disegno (Shift+D) + + + Erase mode (Shift+E) + + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. + Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. + + + Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. + Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'. + Discrete progression - Progressione discreta + Progressione discreta Linear progression - Progressione lineare + Progressione lineare Cubic Hermite progression - Progressione a cubica di Hermite - - - Tension: - tensione: - - - Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. - Clicca qui per scegliere il metodo di progressione discreta per questo pattern di automazione. Il valore della variabile connessa rimarrà costante tra i punti disegnati, cambierà immediatamente non appena raggiunto ogni punto. - - - Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. - Clicca qui per scegliere il metodo di progressione lineare per questo pattern di automazione. Il valore della variabile connessa cambierà in modo costante nel tempo tra i punti disegnati per arrivare al valore di ogni punto senza cambiamenti bruschi. - - - Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. - Clicca qui per scegliere il metodo di progressione a cubica di Hermite per questo pattern di automazione. Il valore della variabile connessa cambierà seguendo una curva morbida. + Progressione a cubica di Hermite Tension value for spline - Valore di tensione per la spline + Valore di tensione per la spline - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. - Un'alta tensione può creare una curva più morbida, ma potrebbe non eseguire alcuni valori con precisione. Una bassa tensione farà stabilizzare la pendenza della curva verso i valori dei punti disegnati. + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + + + + Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. + Clicca qui per scegliere il metodo di progressione discreta per questo pattern di automazione. Il valore della variabile connessa rimarrà costante tra i punti disegnati, cambierà immediatamente non appena raggiunto ogni punto. + + + Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. + Clicca qui per scegliere il metodo di progressione lineare per questo pattern di automazione. Il valore della variabile connessa cambierà in modo costante nel tempo tra i punti disegnati per arrivare al valore di ogni punto senza cambiamenti bruschi. + + + Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. + Clicca qui per scegliere il metodo di progressione a cubica di Hermite per questo pattern di automazione. Il valore della variabile connessa cambierà seguendo una curva morbida. + + + Cut selected values (Ctrl+X) + Taglia i valori selezionati (Ctrl+X) + + + Copy selected values (Ctrl+C) + Copia i valori selezionati (Ctrl+C) + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliccando qui i valori selezionati vengono spostati nella clipboard. È possibile incollarli ovunque, in qualsiasi pattern, cliccando il pulsante Incolla. + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliccando qui i valori selezionati vengono copiati della clipboard. È possibile incollarli ovunque, in qualsiasi pattern, cliccando il pulsante Incolla. + + + Click here and the values from the clipboard will be pasted at the first visible measure. + Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile. + + + Tension: + tensione: + + + Automation Editor - no pattern + Editor dell'automazione - nessun pattern + + + Automation Editor - %1 + Editor dell'automazione - %1 @@ -485,6 +505,14 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Set/clear record Accendi/spegni registrazione + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -493,6 +521,79 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Traccia di automazione + + BBEditor + + Beat+Bassline Editor + Beat+Bassline Editor + + + Play/pause current beat/bassline (Space) + Riproduci/metti in pausa il beat/bassline selezionato (Spazio) + + + Stop playback of current beat/bassline (Space) + Ferma il beat/bassline attuale (Spazio) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Cliccando qui si riprodurre il beat/bassline selezionato. Il beat/bassline ricomincia automaticamente quando finisce. + + + Click here to stop playing of current beat/bassline. + Cliccando qui si ferma la riproduzione del beat/bassline attivo. + + + Add beat/bassline + Aggiungi beat/bassline + + + Add automation-track + Aggiungi una traccia di automazione + + + Remove steps + Elimina note + + + Add steps + Aggiungi note + + + + BBTCOView + + Open in Beat+Bassline-Editor + Apri nell'editor di Beat+Bassline + + + Reset name + + + + Change name + + + + Change color + Cambia colore + + + Reset color to default + Reimposta il colore a default + + + + BBTrack + + Beat/Bassline %1 + Beat/Bassline %1 + + + Clone of %1 + Clone di %1 + + BassBoosterControlDialog @@ -535,6 +636,100 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Rapporto dinamico + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + GUAD + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Frequenza + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &Aiuto + + + Help (not available) + + + CarlaInstrumentView @@ -653,9 +848,125 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s &Remove this plugin &Elimina questo plugin + + + CrossoverEQControlDialog - &Help - &Aiuto + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Frequenza + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -783,6 +1094,60 @@ Se sei interessato a tradurre LMMS o vuoi migliorare una traduzione esistente, s Vocal Formant Filter Filtro a Formante di Voce + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -922,10 +1287,6 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o &Remove this plugin &Elimina questo plugin - - &Help - &Aiuto - EnvelopeAndLfoParameters @@ -1165,6 +1526,255 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o Clicca qui per un'onda randomica. + + EqControls + + Input gain + Guadagno in input + + + Output gain + Guadagno in output + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Guadagno + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Frequenza: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1303,6 +1913,43 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o Export as loop (remove end silence) Esporta come loop (rimuove il silenzio finale) + + Export between loop markers + + + + Could not open file + Non è stato possibile aprire il file + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Impossibile aprire in scrittura il file %1. +Assicurarsi di avere i permessi in scrittura per il file e per la directory contenente il file e riprovare! + + + Export project to %1 + Esporta il progetto in %1 + + + Error + Errore + + + Error while determining file-encoder device. Please try to choose a different output format. + Si è verificato un errore nel tentativo di determinare il dispositivo per la codifica del file. Si prega di selezionare un formato differente. + + + Rendering: %1% + Renderizzazione: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Inserire un valore compreso tra %1 e %2: + FileBrowser @@ -1338,6 +1985,76 @@ Con il click destro si apre un menu conestuale che permette di cambiare l'o --- File di fabbrica --- + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + Rumore + + + Invert + Inverti + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + Rumore + + + White Noise Amount: + + + FxLine @@ -1376,8 +2093,8 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas R&imuovi canale - &Help - &Aiuto + Remove &unused channels + @@ -1405,20 +2122,25 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas FX-Mixer Mixer FX - - - FxMixerView::FxChannelView FX Fader %1 - Volume FX %1 + Volume FX %1 Mute - Muto + Muto Mute this FX channel - Silenzia questo canale FX + Silenzia questo canale FX + + + Solo + Solo + + + Solo FX channel + @@ -1428,6 +2150,68 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Quantità da mandare dal canale %1 al canale %2 + + GigInstrument + + Bank + Banco + + + Patch + Patch + + + Gain + Guadagno + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Seleziona il patch + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Guadagno + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2019,6 +2803,17 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas VELOCITY BASE + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2117,6 +2912,34 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Vocal Formant Filter Filtro a Formante di Voce + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2207,6 +3030,10 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Pitch range Estenzione dell'altezza + + Master Pitch + + InstrumentTrackView @@ -2341,6 +3168,29 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. Clicca qui per salvare lo strumento corrente come preset. Al prossimo avvio, questo preset sarà visibile nel preset browser ("I miei preset"). + + MISC + VARIE + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Inserire un nuovo valore tra -96.0 dBV e 6.0 dBV: + + + Please enter a new value between %1 and %2: + Inserire un valore compreso tra %1 e %2: + LadspaControl @@ -2377,10 +3227,6 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas LadspaEffect - - Effect - Effetto - Unknown LADSPA plugin %1 requested. Il plugin LADSPA %1 richiesto è sconosciuto. @@ -2502,10 +3348,6 @@ Puoi rimuovere e muovere i canali con il menù contestuale, cliccando con il tas Click here for a square-wave. Cliccando qui si ottiene un'onda quadra. - - Click here for a a moog saw-wave. - Cliccando qui si ha un'onda a dente di sega moog. - Click here for an exponential wave. Cliccando qui si ha un'onda esponenziale. @@ -2520,6 +3362,10 @@ Double click to pick a file. Cliccando qui si usa un'onda definita dall'utente. Fare doppio click per scegliere il file dell'onda. + + Click here for a moog saw-wave. + + MainWindow @@ -2541,10 +3387,6 @@ Please make sure you have write-access to the file and try again. Non è stato possibile salvare il file di configurazione %1. Probabilmente non hai i permessi di scrittura per questo file. Assicurati di avere i permessi in scrittura per il file e riprova. - - &Project - &Progetto - &New &Nuovo @@ -2589,10 +3431,6 @@ Assicurati di avere i permessi in scrittura per il file e riprova. &Help &Aiuto - - Online help - Aiuto in linea - Help Aiuto @@ -2697,14 +3535,6 @@ Assicurati di avere i permessi in scrittura per il file e riprova. The current project was modified since last saving. Do you want to save it now? Questo progetto è stato modificato dopo l'ultimo salvataggio. Vuoi salvarlo adesso? - - Open project - Apri progetto - - - Save project - Salva progetto - Help not available Aiuto non disponibile @@ -2715,38 +3545,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Al momento non è disponibile alcun aiuto in LMMS. Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. - - My projects - I miei progetti - - - My samples - I miei campioni - - - My presets - I miei preset - - - My home - Cartelle utente - - - My computer - Cartelle computer - - - Root directory - Directory principale - - - Save as new &version - Salva come nuova &versione - - - E&xport tracks... - E&sporta tracce... - LMMS (*.mmp *.mmpz) @@ -2755,14 +3553,6 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. Version %1 Versione %1 - - Project recovery - Recupero del progetto - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - Sembra che l'ultima sessione non sia stata chiusa correttamente. Vuoi recuperare il progetto di quella sessione? - Configuration file File di configurazione @@ -2775,10 +3565,6 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. Volumes Volumi - - &Recently opened projects - - Undo Annulla @@ -2791,6 +3577,62 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) Progetto LMMS (*mmpz *.mmp);;Progetto Template LMMS (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2826,10 +3668,10 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE - PERIFERICA + PERIFERICA @@ -3294,6 +4136,98 @@ Visitare http://lmms.sf.net/wiki per la documentazione di LMMS. Sub3-LFO2 + + Sine wave + Onda sinusoidale + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + Onda triangolare + + + Saw wave + Onda a dente di sega + + + Ramp wave + + + + Square wave + Onda quadra + + + Moog saw wave + + + + Abs. sine wave + + + + Random + Casuale + + + Random smooth + + MonstroView @@ -3482,6 +4416,41 @@ Vi sono due forme speciali: "Random" e "Random morbido" sono SLOPE, o inclinazione, controlla la curva (o la forma) dell'inviluppo. Un valore pari a 0 lascia le salite e le discese come linee dritte. Valori negativi creeranno dei movimenti che partono lentamente, arrivano a un picco ripido, e poi terminano di nuovo lentamente. Valori positivi daranno curve che salgono e scendono velocemente, ma si fermano ai picchi. + + MultitapEchoControlDialog + + Length + Lunghezza + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3760,6 +4729,14 @@ la rotellina del mouse impostare il volume delle note DCAY DCAD + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3791,33 +4768,13 @@ la rotellina del mouse impostare il volume delle note Amount Multiplicator Moltiplicatore della quantità + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - Riproduci/metti in pausa questo pattern (Spazio) - - - Record notes from MIDI-device/channel-piano - Registra note da una periferica/canale piano MIDI - - - Stop playing of current pattern (Space) - Ferma la riproduzione di questo pattern (Spazio) - - - Cut selected notes (Ctrl+X) - Taglia le note selezionate (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Copia le note selezionate (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Incolla le note selezionate (Ctrl+V) - Piano-Roll - no pattern Piano-Roll - nessun pattern @@ -3834,50 +4791,6 @@ la rotellina del mouse impostare il volume delle note Last note Ultima nota - - Record notes from MIDI-device/channel-piano while playing song or BB track - Registra note da una periferica MIDI/canale piano mentre la traccia o la BB track è in riproduzione - - - Draw mode (Shift+D) - Modalità disegno (Shift+D) - - - Erase mode (Shift+E) - Modalità cancellazione (Shift+E) - - - Select mode (Shift+S) - Modalità selezione (Shift+S) - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern e in seguito le si potrà riprodurre e modificare. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern, sentendo contemporaneamente la canzone o la traccia BB in sottofondo. - - - Click here to stop playback of current pattern. - Cliccando qui si ferma la riproduzione del pattern attivo. - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliccando qui le note selezionate verranno spostate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla. - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Cliccando qui le note selezionate verranno copiate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla. - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile. - Note lock Note lock @@ -3890,26 +4803,6 @@ la rotellina del mouse impostare il volume delle note Note Panning Panning Note - - Detune mode (Shift+T) - Modalità intonanzione (Shift+T) - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. Tieni premuto Ctfl per andare temporaneamente in modalità selezione. - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'. - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - Cliccando qui viene attivata la modalità selezione. Puoi selezionare le note. Puoi anche tenere premuto Ctrl durante la modalità disegno per usare la modalità selezione temporaneamente. - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - Cliccando qui viene attivata la modalità intonazione. Puoi cliccare una nota per aprire la finestra di automazione dell'intonazione. Puoi usare questa modalità per fare uno slide da una nota ad un'altra. Puoi anche premere Shift+T per attivare questa modalità. - Mark/unmark current semitone Evidenza (o togli evidenziazione) questo semitono @@ -3934,26 +4827,6 @@ la rotellina del mouse impostare il volume delle note No chord - Accordi - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - Controlla l'ingrandimento di un asse. Normalmente, l'ingrandimento dev'essere adatto alle note più piccole che si sta scrivendo. - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - la 'Q' sta per quantizzazione, e controlla la lunghezza minima di modifica della nota. Con quantità minori, puoi scrivere note più piccole nel Piano Roll, o punti di controllo più precisi nell'Editor di Automazione. - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - Puoi selezionare la grandezza delle nuove note. 'Ultima nota' significa che LMMS userà la lunghezza dell'ultima nota modificata - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - Questa funzionalità è connessa al menù contestuale della tastiera viruale a sinistra. Dopo aver scelto la scala in questo menù a tendina, puoi cliccare con il tasto destro sulla nota desiderata nella tastiera, e selezionare 'Evidenza la scala corrente'. LMMS evidenzierà tutte le note che compongono la scala selezionata partendo dalla nota selezionata come tonica! - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - Ti permette di selezionare un accordo che LMMS può scriviere o evidenziare. Trovi tutti gli accordi più comuni in questo menù a tendina. Dopo averne selezionato uno, clicca dove vuoi per posizionarlo, oppure fai tasto destro sulla tastiera virtuale per evidenziare l'accordo. Per tornare alla scrittura per singola nota, devi selezionare '-Accordi' in questo menù. - Volume: %1% Volume: %1% @@ -3975,6 +4848,117 @@ la rotellina del mouse impostare il volume delle note Inserire un valore compreso tra %1 e %2: + + PianoRollWindow + + Play/pause current pattern (Space) + + + + Record notes from MIDI-device/channel-piano + Registra note da una periferica/canale piano MIDI + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Registra note da una periferica MIDI/canale piano mentre la traccia o la BB track è in riproduzione + + + Stop playing of current pattern (Space) + + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Cliccando qui si riproduce il pattern selezionato. Questo è utile mentre lo si modifica. Il pattern viene automaticamente ripetuto quando finisce. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern e in seguito le si potrà riprodurre e modificare. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Cliccando qui si registrano nel pattern note da una periferica MIDI o dal piano di prova virtuale nella finestra del canale corrispondente. Mentre si registra, tutte le note eseguite vengono scritte in questo pattern, sentendo contemporaneamente la canzone o la traccia BB in sottofondo. + + + Click here to stop playback of current pattern. + Cliccando qui si ferma la riproduzione del pattern attivo. + + + Draw mode (Shift+D) + Modalità disegno (Shift+D) + + + Erase mode (Shift+E) + + + + Select mode (Shift+S) + Modalità selezione (Shift+S) + + + Detune mode (Shift+T) + Modalità intonanzione (Shift+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + Cliccando qui si attiva la modalità disegno. In questa modalità è possibile aggiungere e spostare singoli valori. Questa è la modalità predefinita, che viene usata la maggior parte del tempo. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+D'. Tieni premuto Ctfl per andare temporaneamente in modalità selezione. + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + Cliccando qui si attiva la modalità cancellazione. In questa modalità è possibile cancellare singoli valori. Questa modalità si attiva anche premendo la combinazione di tasti 'Shift+E'. + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + Cliccando qui viene attivata la modalità selezione. Puoi selezionare le note. Puoi anche tenere premuto Ctrl durante la modalità disegno per usare la modalità selezione temporaneamente. + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + Cliccando qui viene attivata la modalità intonazione. Puoi cliccare una nota per aprire la finestra di automazione dell'intonazione. Puoi usare questa modalità per fare uno slide da una nota ad un'altra. Puoi anche premere Shift+T per attivare questa modalità. + + + Cut selected notes (Ctrl+X) + Taglia le note selezionate (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Copia le note selezionate (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Incolla le note selezionate (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliccando qui le note selezionate verranno spostate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla. + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Cliccando qui le note selezionate verranno copiate negli appunti. È possibile incollarle in un punto qualsiasi del pattern cliccando sul tasto incolla. + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + Cliccando qui i valori nella clipboard vengono incollati alla prima battuta visibile. + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + Controlla l'ingrandimento di un asse. Normalmente, l'ingrandimento dev'essere adatto alle note più piccole che si sta scrivendo. + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + la 'Q' sta per quantizzazione, e controlla la lunghezza minima di modifica della nota. Con quantità minori, puoi scrivere note più piccole nel Piano Roll, o punti di controllo più precisi nell'Editor di Automazione. + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + Puoi selezionare la grandezza delle nuove note. 'Ultima nota' significa che LMMS userà la lunghezza dell'ultima nota modificata + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + Questa funzionalità è connessa al menù contestuale della tastiera viruale a sinistra. Dopo aver scelto la scala in questo menù a tendina, puoi cliccare con il tasto destro sulla nota desiderata nella tastiera, e selezionare 'Evidenza la scala corrente'. LMMS evidenzierà tutte le note che compongono la scala selezionata partendo dalla nota selezionata come tonica! + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + Ti permette di selezionare un accordo che LMMS può scriviere o evidenziare. Trovi tutti gli accordi più comuni in questo menù a tendina. Dopo averne selezionato uno, clicca dove vuoi per posizionarlo, oppure fai tasto destro sulla tastiera virtuale per evidenziare l'accordo. Per tornare alla scrittura per singola nota, devi selezionare '-Accordi' in questo menù. + + PianoView @@ -4007,6 +4991,140 @@ Motivo: "%2" Il plugin LMMS %1 non ha una descrizione chiamata %2! + + PluginBrowser + + Instrument plugins + Plugin strumentali + + + Instrument browser + Navigatore degli strumenti + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + È possibile trascinare uno strumento nel Song-Editor, nel Beat+Bassline Editor o direttamente in un canale esistente. + + + + ProjectNotes + + Project notes + Note del progetto + + + Put down your project notes here. + Scrivi qui le note per il tuo progetto. + + + Edit Actions + Modifica azioni + + + &Undo + &Annulla operazione + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Ripeti operazione + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Copia + + + Ctrl+C + Ctrl+C + + + Cu&t + &Taglia + + + Ctrl+X + Ctrl+X + + + &Paste + &Incolla + + + Ctrl+V + Ctrl+V + + + Format Actions + Formatta azioni + + + &Bold + &Grassetto + + + Ctrl+B + Ctrl+B + + + &Italic + &Corsivo + + + Ctrl+I + Ctrl+I + + + &Underline + &Sottolineato + + + Ctrl+U + Ctrl+U + + + &Left + &Sinistra + + + Ctrl+L + Ctrl+L + + + C&enter + &Centro + + + Ctrl+E + Ctrl+E + + + &Right + &Destra + + + Ctrl+R + Ctrl+R + + + &Justify + &Giustifica + + + Ctrl+J + Ctrl+J + + + &Color... + &Colore... + + ProjectRenderer @@ -4157,6 +5275,13 @@ Motivo: "%2" File: %1 + + RenameDialog + + Rename... + Rinomina... + + SampleBuffer @@ -4245,6 +5370,10 @@ Motivo: "%2" Volume Volume + + Panning + + SampleTrackView @@ -4260,37 +5389,309 @@ Motivo: "%2" VOL VOL + + Panning + + + + Panning: + + + + PAN + + + + + SetupDialog + + Setup LMMS + Cofigura LMMS + + + General settings + Impostazioni generali + + + BUFFER SIZE + DIMENSIONE DEL BUFFER + + + Reset to default-value + Reimposta al valore predefinito + + + MISC + VARIE + + + Enable tooltips + Abilita i suggerimenti + + + Show restart warning after changing settings + Dopo aver modificato le impostazioni, mostra un avviso al riavvio + + + Display volume as dBV + Mostra il volume in dBV + + + Compress project files per default + Per impostazione predefinita, comprimi i file di progetto + + + One instrument track window mode + Modalità finestra ad una traccia strumento + + + HQ-mode for output audio-device + Modalità alta qualità per l'uscita audio + + + Compact track buttons + Pulsanti della traccia compatti + + + Sync VST plugins to host playback + Sincronizza i plugin VST al playback dell'host + + + Enable note labels in piano roll + Abilita i nomi delle note nel piano-roll + + + Enable waveform display by default + Abilità il display della forma d'onda per default + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Percorsi + + + LMMS working directory + Directory di lavoro di LMMS + + + VST-plugin directory + Directory dei plugin VST + + + Artwork directory + DIrectory del tema grafico + + + Background artwork + Grafica dello sfondo + + + FL Studio installation directory + Directory di installazione di FL Studio + + + LADSPA plugin paths + Percorsi dei plugin LADSPA + + + STK rawwave directory + Directory per i file rawwave STK + + + Default Soundfont File + File SoundFont predefinito + + + Performance settings + Impostazioni prestazioni + + + UI effects vs. performance + Effetti UI (interfaccia grafica) vs. prestazioni + + + Smooth scroll in Song Editor + Scorrimento morbido nel Song-Editor + + + Enable auto save feature + Abilita la funzione di salvataggio automatico + + + Show playback cursor in AudioFileProcessor + Mostra il cursore di riproduzione dentro AudioFileProcessor + + + Audio settings + Impostazioni audio + + + AUDIO INTERFACE + INTERFACCIA AUDIO + + + MIDI settings + Impostazioni MIDI + + + MIDI INTERFACE + INTERFACCIA MIDI + + + OK + OK + + + Cancel + Annulla + + + Restart LMMS + Riavvia LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Si prega di notare che la maggior parte delle modifiche non avrà effetto fino al riavvio di LMMS! + + + Frames: %1 +Latency: %2 ms + Frames: %1 +Latenza: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Qui è possibile impostare la dimensione del buffer interno usato da LMMS. Valori più piccoli danno come risultato una latenza più bassa ma possono causare una qualità audio inutilizzabile o cattive prestazioni, specialmente su computer datati o sistemi con kernel non-realtime. + + + Choose LMMS working directory + Seleziona la directory di lavoro di LMMS + + + Choose your VST-plugin directory + Seleziona la tua directory dei plugin VST + + + Choose artwork-theme directory + Seleziona la directory del tema grafico + + + Choose FL Studio installation directory + Seleziona la directory di installazione di FL Studio + + + Choose LADSPA plugin directory + Seleziona le directory dei plugin LADSPA + + + Choose STK rawwave directory + Seleziona le directory dei file rawwave STK + + + Choose default SoundFont + Scegliere il SoundFont predefinito + + + Choose background artwork + Scegliere la grafica dello sfondo + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Qui è possibile selezionare l'interfaccia audio. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, JACK, OSS e altri. Sotto trovi una casella che offre dei controlli per l'interfaccia audio selezionata. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Qui è possibile selezionare l'interfaccia MIDI. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, OSS e altri. Sotto si trova una casella che offre dei controlli per l'interfaccia MIDI selezionata. + + + + Song + + Tempo + Tempo + + + Master volume + Volume principale + + + Master pitch + Altezza principale + + + Project saved + Progeto salvato + + + The project %1 is now saved. + Il progetto %1 è stato salvato. + + + Project NOT saved. + Il progetto NON è stato salvato. + + + The project %1 was not saved! + Il progetto %1 non è stato salvato! + + + Import file + Importa file + + + MIDI sequences + Sequenze MIDI + + + FL Studio projects + Progetti FL Studio + + + Hydrogen projects + Progetti Hydrogen + + + All file types + Tutti i tipi di file + + + Empty project + Empty project + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + Questo progetto è vuoto, pertanto non c'è nulla da esportare. Prima di esportare è necessario inserire alcuni elementi nel Song Editor! + + + Select directory for writing exported tracks... + Seleziona una directory per le tracce esportate... + + + untitled + senza_nome + + + Select file for project-export... + Scegliere il file per l'esportazione del progetto... + + + The following errors occured while loading: + + SongEditor - - Song-Editor - Song-Editor - - - Play song (Space) - Riproduci la canzone (Spazio) - - - Stop song (Space) - Ferma la riproduzione della canzone (Spazio) - - - Add beat/bassline - Aggiungi beat/bassline - - - Add sample-track - Aggiungi traccia di campione - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Cliccando qui si riproduce l'intera canzone. La riproduzione inizierà alla posizione attuale del segnaposto (verde). È possibile spostarlo anche durante la riproduzione. - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Cliccando qui si ferma la riproduzione della canzone. Il segnaposto verrà portato all'inizio della canzone. - Could not open file Non è stato possibile aprire il file @@ -4299,26 +5700,6 @@ Motivo: "%2" Could not write file Impossibile scrivere il file - - Draw mode - Modalità disegno - - - Edit mode (select and move) - Modalità modifica (seleziona e sposta) - - - Add automation-track - Aggiungi una traccia di automazione - - - Record samples from Audio-device - Registra campioni da una periferica audio - - - Record samples from Audio-device while playing song or BB track - Registra campioni da una periferica audio mentre la canzone o la BB track sono in riproduzione - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4382,6 +5763,57 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.Impossibile aprire il file %1 per la scrittura. Probabilmente non disponi dei permessi necessari alla scrittura di questo file. Assicurati di avere tali permessi e prova di nuovo. + + SongEditorWindow + + Song-Editor + Song-Editor + + + Play song (Space) + Riproduci la canzone (Spazio) + + + Record samples from Audio-device + Registra campioni da una periferica audio + + + Record samples from Audio-device while playing song or BB track + Registra campioni da una periferica audio mentre la canzone o la BB track sono in riproduzione + + + Stop song (Space) + Ferma la riproduzione della canzone (Spazio) + + + Add beat/bassline + Aggiungi beat/bassline + + + Add sample-track + Aggiungi traccia di campione + + + Add automation-track + Aggiungi una traccia di automazione + + + Draw mode + Modalità disegno + + + Edit mode (select and move) + Modalità modifica (seleziona e sposta) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Cliccando qui si riproduce l'intera canzone. La riproduzione inizierà alla posizione attuale del segnaposto (verde). È possibile spostarlo anche durante la riproduzione. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Cliccando qui si ferma la riproduzione della canzone. Il segnaposto verrà portato all'inizio della canzone. + + SpectrumAnalyzerControlDialog @@ -4408,6 +5840,13 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.Modalità del canale + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4450,10 +5889,6 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.Custom... Personalizzato... - - &Help - &Aiuto - Custom Personalizzato @@ -4494,6 +5929,52 @@ Assicurati di avere almeno i permessi di lettura del file e prova di nuovo.Clicca per cambiare l'unità di tempo visualizzata + + TimeLineWidget + + Enable/disable auto-scrolling + Abilita/disabilita lo scorrimento automatico + + + Enable/disable loop-points + Abilita/disabilita i punti di ripetizione + + + After stopping go back to begin + Una volta fermata la riproduzione, torna all'inizio + + + After stopping go back to position at which playing was started + Una volta fermata la riproduzione, torna alla posizione da cui si è partiti + + + After stopping keep position + Una volta fermata la riproduzione, mantieni la posizione + + + Hint + Suggerimento + + + Press <Ctrl> to disable magnetic loop points. + Premi <Ctrl> per disabilitare i punti di loop magnetici. + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + Tieni premuto <Shift> per spostare l'inizio del punto di loop; premi <Ctrl> per disabilitare i punti di loop magnetici. + + + + Track + + Muted + Muto + + + Solo + Solo + + TrackContainer @@ -4537,6 +6018,107 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Importazione del file FLP... + + TrackContentObject + + Muted + Muto + + + + TrackContentObjectView + + Current position + Posizione attuale + + + Hint + Suggerimento + + + Press <Ctrl> and drag to make a copy. + Premere <Ctrl>, cliccare e trascinare per copiare. + + + Current length + Lunghezza attuale + + + Press <Ctrl> for free resizing. + Premere <Ctrl> per ridimensionare liberamente. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (da %3:%4 a %5:%6) + + + Delete (middle mousebutton) + Elimina (tasto centrale del mouse) + + + Cut + Taglia + + + Copy + Copia + + + Paste + Incolla + + + Mute/unmute (<Ctrl> + middle click) + Attiva/disattiva la modalità muta (<Ctrl> + tasto centrale) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Premere <Ctrl> mentre si clicca sulla maniglia per lo spostamento per iniziare una nuova azione di drag'n'drop. + + + Actions for this track + Azioni per questa traccia + + + Mute + Muto + + + Solo + Solo + + + Mute this track + Metti questa traccia in modalità muta + + + Clone this track + Clona questa traccia + + + Remove this track + Elimina questa traccia + + + Clear this track + Pulisci questa traccia + + + FX %1: %2 + + + + Turn all recording on + Accendi tutti i processi di registrazione + + + Turn all recording off + Spegni tutti i processi di registrazione + + TripleOscillatorView @@ -4680,17 +6262,6 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Utilizzare un'onda personalizzata per questo oscillatore. - - Ui - - Contributors ordered by number of commits: - Hanno collaborato (ordinati per numero di contributi): - - - Involved - Coinvolti - - VersionedSaveDialog @@ -4793,6 +6364,17 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo - Controllo del plugin VST + + VisualizationWidget + + click to enable/disable visualization of master-output + cliccando si abilita/disabilita la visualizzazione dell'uscita principale + + + Click to enable + Clicca per abilitare + + VstEffectControlDialog @@ -4899,12 +6481,8 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Sto caricando il plugin VST... - Failed loading VST plugin - Caricamento del VST fallito - - - The VST plugin %1 could not be loaded for some reason. - Il VST %1 non è stato caricato correttamente per qualche ragione. + The VST plugin %1 could not be loaded. + @@ -5309,78 +6887,9 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Sinc Sincronizzata - - - bbEditor - Play/pause current beat/bassline (Space) - Riproduci/metti in pausa il beat/bassline selezionato (Spazio) - - - Beat+Bassline Editor - Beat+Bassline Editor - - - Add beat/bassline - Aggiungi beat/bassline - - - Add automation-track - Aggiungi una traccia di automazione - - - Stop playback of current beat/bassline (Space) - Ferma il beat/bassline attuale (Spazio) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Cliccando qui si riprodurre il beat/bassline selezionato. Il beat/bassline ricomincia automaticamente quando finisce. - - - Click here to stop playing of current beat/bassline. - Cliccando qui si ferma la riproduzione del beat/bassline attivo. - - - Remove steps - Elimina note - - - Add steps - Aggiungi note - - - - bbTCOView - - Open in Beat+Bassline-Editor - Apri nell'editor di Beat+Bassline - - - Reset name - Reimposta nome - - - Change name - Cambia nome - - - Change color - Cambia colore - - - Reset color to default - Reimposta il colore a default - - - - bbTrack - - Beat/Bassline %1 - Beat/Bassline %1 - - - Clone of %1 - Clone di %1 + Sample not found: %1 + @@ -5579,42 +7088,6 @@ Assicurarsi di avere i permessi in lettura per il file e per la directory che lo Modalità stereo - - exportProjectDialog - - Could not open file - Non è stato possibile aprire il file - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Impossibile aprire in scrittura il file %1. -Assicurarsi di avere i permessi in scrittura per il file e per la directory contenente il file e riprovare! - - - Error - Errore - - - Error while determining file-encoder device. Please try to choose a different output format. - Si è verificato un errore nel tentativo di determinare il dispositivo per la codifica del file. Si prega di selezionare un formato differente. - - - Rendering: %1% - Renderizzazione: %1% - - - Export project to %1 - Esporta il progetto in %1 - - - - fader - - Please enter a new value between %1 and %2: - Inserire un valore compreso tra %1 e %2: - - graphModel @@ -5716,21 +7189,6 @@ Assicurarsi di avere i permessi in scrittura per il file e per la directory cont Distorsione finale: - - knob - - &Help - &Aiuto - - - Please enter a new value between %1 and %2: - Inserire un valore compreso tra %1 e %2: - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Inserire un nuovo valore tra -96.0 dBV e 6.0 dBV: - - ladspaBrowserView @@ -6464,13 +7922,6 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por Chiudi la finestra delle manopole del plugin VST. - - nineButtonSelector - - &Help - &Aiuto - - opl2instrument @@ -6920,10 +8371,6 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por pluginBrowser - - Instrument plugins - Plugin strumentali - no description nessuna descrizione @@ -6980,14 +8427,6 @@ Facendo doppio click sui plugin verranno fornite informazioni sulle relative por List installed LADSPA plugins Elenca i plugin LADSPA installati - - Instrument browser - Navigatore degli strumenti - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - È possibile trascinare uno strumento nel Song-Editor, nel Beat+Bassline Editor o direttamente in un canale esistente. - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7078,335 +8517,83 @@ Questo chip era utilizzato nel Commode 64. A NES-like synthesizer Un sintetizzatore che imita i suoni del Nintendo Entertainment System - - - projectNotes - Project notes - Note del progetto + Player for GIG files + - Put down your project notes here. - Scrivi qui le note per il tuo progetto. + A multitap echo delay plugin + - Edit Actions - Modifica azioni + A native flanger plugin + - &Undo - &Annulla operazione + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - &Ripeti operazione + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &Copia - - - Ctrl+C - Ctrl+C - - - Cu&t - &Taglia - - - Ctrl+X - Ctrl+X - - - &Paste - &Incolla - - - Ctrl+V - Ctrl+V - - - Format Actions - Formatta azioni - - - &Bold - &Grassetto - - - Ctrl+B - Ctrl+B - - - &Italic - &Corsivo - - - Ctrl+I - Ctrl+I - - - &Underline - &Sottolineato - - - Ctrl+U - Ctrl+U - - - &Left - &Sinistra - - - Ctrl+L - Ctrl+L - - - C&enter - &Centro - - - Ctrl+E - Ctrl+E - - - &Right - &Destra - - - Ctrl+R - Ctrl+R - - - &Justify - &Giustifica - - - Ctrl+J - Ctrl+J - - - &Color... - &Colore... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Rinomina... - - - - setupDialog - - Setup LMMS - Cofigura LMMS + JACK (JACK Audio Connection Kit) + - General settings - Impostazioni generali + OSS Raw-MIDI (Open Sound System) + - BUFFER SIZE - DIMENSIONE DEL BUFFER + SDL (Simple DirectMedia Layer) + - Reset to default-value - Reimposta al valore predefinito + PulseAudio (bad latency!) + - MISC - VARIE + Dummy (no MIDI support) + - Audio settings - Impostazioni audio + ALSA Raw-MIDI (Advanced Linux Sound Architecture) + - AUDIO INTERFACE - INTERFACCIA AUDIO + PortAudio + - MIDI settings - Impostazioni MIDI + Dummy (no sound output) + - MIDI INTERFACE - INTERFACCIA MIDI + ALSA (Advanced Linux Sound Architecture) + - OK - OK + OSS (Open Sound System) + - Cancel - Annulla + WinMM MIDI + - Restart LMMS - Riavvia LMMS - - - Please note that most changes won't take effect until you restart LMMS! - Si prega di notare che la maggior parte delle modifiche non avrà effetto fino al riavvio di LMMS! - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Qui è possibile impostare la dimensione del buffer interno usato da LMMS. Valori più piccoli danno come risultato una latenza più bassa ma possono causare una qualità audio inutilizzabile o cattive prestazioni, specialmente su computer datati o sistemi con kernel non-realtime. - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Qui è possibile selezionare l'interfaccia audio. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, JACK, OSS e altri. Sotto trovi una casella che offre dei controlli per l'interfaccia audio selezionata. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Qui è possibile selezionare l'interfaccia MIDI. A seconda della configurazione del tuo sistema in fase di compilazione puoi scegliere tra ALSA, OSS e altri. Sotto si trova una casella che offre dei controlli per l'interfaccia MIDI selezionata. - - - Display volume as dBV - Mostra il volume in dBV - - - LMMS working directory - Directory di lavoro di LMMS - - - VST-plugin directory - Directory dei plugin VST - - - Artwork directory - DIrectory del tema grafico - - - FL Studio installation directory - Directory di installazione di FL Studio - - - Performance settings - Impostazioni prestazioni - - - UI effects vs. performance - Effetti UI (interfaccia grafica) vs. prestazioni - - - Frames: %1 -Latency: %2 ms - Frames: %1 -Latenza: %2 ms - - - Choose LMMS working directory - Seleziona la directory di lavoro di LMMS - - - Choose your VST-plugin directory - Seleziona la tua directory dei plugin VST - - - Choose artwork-theme directory - Seleziona la directory del tema grafico - - - Choose FL Studio installation directory - Seleziona la directory di installazione di FL Studio - - - Enable tooltips - Abilita i suggerimenti - - - Show restart warning after changing settings - Dopo aver modificato le impostazioni, mostra un avviso al riavvio - - - Compress project files per default - Per impostazione predefinita, comprimi i file di progetto - - - HQ-mode for output audio-device - Modalità alta qualità per l'uscita audio - - - STK rawwave directory - Directory per i file rawwave STK - - - Choose LADSPA plugin directory - Seleziona le directory dei plugin LADSPA - - - Choose STK rawwave directory - Seleziona le directory dei file rawwave STK - - - Paths - Percorsi - - - LADSPA plugin paths - Percorsi dei plugin LADSPA - - - Default Soundfont File - File SoundFont predefinito - - - Background artwork - Grafica dello sfondo - - - Choose default SoundFont - Scegliere il SoundFont predefinito - - - Choose background artwork - Scegliere la grafica dello sfondo - - - One instrument track window mode - Modalità finestra ad una traccia strumento - - - Compact track buttons - Pulsanti della traccia compatti - - - Sync VST plugins to host playback - Sincronizza i plugin VST al playback dell'host - - - Enable note labels in piano roll - Abilita i nomi delle note nel piano-roll - - - Enable waveform display by default - Abilità il display della forma d'onda per default - - - Smooth scroll in Song Editor - Scorrimento morbido nel Song-Editor - - - Enable auto save feature - Abilita la funzione di salvataggio automatico - - - Show playback cursor in AudioFileProcessor - Mostra il cursore di riproduzione dentro AudioFileProcessor - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7464,6 +8651,10 @@ Latenza: %2 ms Chorus Chorus + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7709,77 +8900,6 @@ Latenza: %2 ms Quando Test è attivo, e finché non viene spento, reimposta e blocca l'oscillatore %1 a zero. - - song - - Project saved - Progeto salvato - - - The project %1 is now saved. - Il progetto %1 è stato salvato. - - - Project NOT saved. - Il progetto NON è stato salvato. - - - The project %1 was not saved! - Il progetto %1 non è stato salvato! - - - Import file - Importa file - - - untitled - senza_nome - - - Select file for project-export... - Scegliere il file per l'esportazione del progetto... - - - Tempo - Tempo - - - Master volume - Volume principale - - - Master pitch - Altezza principale - - - Empty project - Empty project - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - Questo progetto è vuoto, pertanto non c'è nulla da esportare. Prima di esportare è necessario inserire alcuni elementi nel Song Editor! - - - MIDI sequences - Sequenze MIDI - - - FL Studio projects - Progetti FL Studio - - - All file types - Tutti i tipi di file - - - Hydrogen projects - Progetti Hydrogen - - - Select directory for writing exported tracks... - Seleziona una directory per le tracce esportate... - - stereoEnhancerControlDialog @@ -7836,157 +8956,6 @@ Latenza: %2 ms Da Destra a Destra - - timeLine - - Enable/disable auto-scrolling - Abilita/disabilita lo scorrimento automatico - - - Enable/disable loop-points - Abilita/disabilita i punti di ripetizione - - - After stopping go back to begin - Una volta fermata la riproduzione, torna all'inizio - - - After stopping go back to position at which playing was started - Una volta fermata la riproduzione, torna alla posizione da cui si è partiti - - - After stopping keep position - Una volta fermata la riproduzione, mantieni la posizione - - - Hint - Suggerimento - - - Press <Ctrl> to disable magnetic loop points. - Premi <Ctrl> per disabilitare i punti di loop magnetici. - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - Tieni premuto <Shift> per spostare l'inizio del punto di loop; premi <Ctrl> per disabilitare i punti di loop magnetici. - - - - track - - Muted - Muto - - - Solo - Solo - - - - trackContentObject - - Muted - Muto - - - - trackContentObjectView - - Current position - Posizione attuale - - - Hint - Suggerimento - - - Press <Ctrl> and drag to make a copy. - Premere <Ctrl>, cliccare e trascinare per copiare. - - - Current length - Lunghezza attuale - - - Press <Ctrl> for free resizing. - Premere <Ctrl> per ridimensionare liberamente. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (da %3:%4 a %5:%6) - - - Delete (middle mousebutton) - Elimina (tasto centrale del mouse) - - - Cut - Taglia - - - Copy - Copia - - - Paste - Incolla - - - Mute/unmute (<Ctrl> + middle click) - Attiva/disattiva la modalità muta (<Ctrl> + tasto centrale) - - - - trackOperationsWidget - - Clone this track - Clona questa traccia - - - Remove this track - Elimina questa traccia - - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Premere <Ctrl> mentre si clicca sulla maniglia per lo spostamento per iniziare una nuova azione di drag'n'drop. - - - Actions for this track - Azioni per questa traccia - - - Mute - Muto - - - Mute this track - Metti questa traccia in modalità muta - - - Solo - Solo - - - Clear this track - Pulisci questa traccia - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - Accendi tutti i processi di registrazione - - - Turn all recording off - Spegni tutti i processi di registrazione - - vestigeInstrument @@ -7997,16 +8966,6 @@ Latenza: %2 ms Please wait while loading VST-plugin... Prego attendere, caricamento del plugin VST... - - Failed loading VST-plugin - Errore nel caricamento del plugin VST - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - Non è stato possibile caricare il plugin VST %1 a causa di alcuni errori. -Se, con altre applicazioni GNU/Linux il plugin funziona, si prega di contattare uno sviluppatore di LMMS! - vibed @@ -8233,10 +9192,6 @@ Il LED nell'angolo in basso a destra sull'editor della forma d'on Click here to normalize waveform. Cliccando qui la forma d'onda viene normalizzata. - - &Help - &Aiuto - Use a sine-wave for current oscillator. Utilizzare un'onda sinusoidale per questo oscillatore. @@ -8262,17 +9217,6 @@ Il LED nell'angolo in basso a destra sull'editor della forma d'on Utilizzare un'onda personalizzata per questo oscillatore. - - visualizationWidget - - click to enable/disable visualization of master-output - cliccando si abilita/disabilita la visualizzazione dell'uscita principale - - - Click to enable - Clicca per abilitare - - voiceObject diff --git a/data/locale/ja.ts b/data/locale/ja.ts index 584ce118d..a568ffbbf 100644 --- a/data/locale/ja.ts +++ b/data/locale/ja.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS + LMMS + + + Involved + + + + Contributors ordered by number of commits: @@ -195,10 +203,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -225,27 +229,24 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME CHANNELS - + チャンネル AudioOss::setupWidget DEVICE - + デバイス CHANNELS - + チャンネル @@ -256,25 +257,25 @@ If you're interested in translating LMMS in another language or want to imp DEVICE - + デバイス AudioPulseAudio::setupWidget DEVICE - + デバイス CHANNELS - + チャンネル AudioSdl::setupWidget DEVICE - + デバイス @@ -326,18 +327,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + コントロールのコンテキストメニューでオートメーションパターンを選択してください! + + + Values copied + 値をコピーしました + + + All selected values were copied to the clipboard. + 選択された値はすべてクリップボードにコピーされました。 + + + + AutomationEditorWindow Play/pause current pattern (Space) 現在のパターンの再生/一時停止 (Space) - - Stop playing of current pattern (Space) - 現在のパターンの演奏停止 (Space) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. クリックすると現在のパターンを演奏します。パターン編集中の演奏に便利です。終了位置にくるとパターンは自動的にループされます。 + + Stop playing of current pattern (Space) + + Click here if you want to stop playing of the current pattern. クリックすると現在のパターンの演奏を停止します。 @@ -350,6 +366,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) 消去モード (shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. クリックするとドローモードをONにします。ドローモードではひとつの値を追加したり移動したりします。このモードがデフォルトで普段つかいます。 'Shift+D' をおしてもドローモードをONにできます。 @@ -358,50 +390,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. クリックすると消去モードをONにします。消去モードではひとつの値を消去できます。 'Shift+E' をおしても消去モードをONにできます。 - - Cut selected values (Ctrl+X) - 選択した値を切り取り (Shift+M) - - - Copy selected values (Ctrl+C) - 選択した値をコピー (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - クリップボードから値を貼り付け (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - クリックすると選択した値をクリップボードにカットします。その値はペーストボタンを押すと任意のパタンの任意の場所にペーストできます。 - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - クリックすると選択した値をクリップボードにコピーします。その値はペーストボタンを押すと任意のパタンの任意の場所にペーストできます。 - - - Click here and the values from the clipboard will be pasted at the first visible measure. - クリックするとクリップボードから値が最初の可視状態の小節にペーストされます。 - - - Automation Editor - no pattern - - - - Automation Editor - %1 - - - - Please open an automation pattern with the context menu of a control! - コントロールのコンテキストメニューでオートメーションパターンを選択してください! - - - Values copied - 値をコピーしました - - - All selected values were copied to the clipboard. - 選択された値はすべてクリップボードにコピーされました。 - Discrete progression @@ -415,7 +403,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -431,11 +423,39 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) + 選択した値を切り取り (Shift+M) + + + Copy selected values (Ctrl+C) + 選択した値をコピー (Ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + クリックすると選択した値をクリップボードにカットします。その値はペーストボタンを押すと任意のパタンの任意の場所にペーストできます。 + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + クリックすると選択した値をクリップボードにコピーします。その値はペーストボタンを押すと任意のパタンの任意の場所にペーストできます。 + + + Click here and the values from the clipboard will be pasted at the first visible measure. + クリックするとクリップボードから値が最初の可視状態の小節にペーストされます。 + + + Tension: + + + + Automation Editor - no pattern + + + + Automation Editor - %1 @@ -484,6 +504,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record 録音をセット/クリア + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -492,6 +520,79 @@ If you're interested in translating LMMS in another language or want to imp Automation track + + BBEditor + + Beat+Bassline Editor + Beat+Bassline-Editor + + + Play/pause current beat/bassline (Space) + 現在の beat/bassline を 再生/一時停止 (Space) + + + Stop playback of current beat/bassline (Space) + beat/bassline の再生を停止 (Space) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + クリックすると現在の beat/bassline を演奏します。 beat/bassline は終了位置にくると自動的にループされます。 + + + Click here to stop playing of current beat/bassline. + クリックすると現在の beat/bassline の演奏を停止します。 + + + Add beat/bassline + + + + Add automation-track + + + + Remove steps + ステップ除去 + + + Add steps + ステップ追加 + + + + BBTCOView + + Open in Beat+Bassline-Editor + Beat+Bassline-Editor を開く + + + Reset name + 名前をリセット + + + Change name + + + + Change color + 色を変更 + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + beat/bassline %1 + + + Clone of %1 + + + BassBoosterControlDialog @@ -534,11 +635,105 @@ If you're interested in translating LMMS in another language or want to imp 比率 + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + ヘルプ(&H) + + + Help (not available) + + + CarlaInstrumentView Show GUI - + GUI を表示 Click here to show or hide the graphical user interface (GUI) of Carla. @@ -652,9 +847,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin このプラグインを削除(&R) + + + CrossoverEQControlDialog - &Help - ヘルプ(&H) + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -782,6 +1093,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -899,7 +1264,7 @@ Right clicking will bring up a context menu where you can change the order in wh On/Off スイッチでいつでも指定したプラグインをバイパスすることができます。 -Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエフェクトシグナルのバランスをコントロールします。ステージの入力とは一つ前のステージからの出力です。そのため連鎖の下の方のエフェクトの 'dry'シグナルはそれまでのエフェクトをすべて含んでいます。 +Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエフェクトシグナルのバランスをコントロールします。ステージの入力とは一つ前のステージからの出力です。そのため連鎖の下の方のエフェクトの 'dry'シグナルはそれまでのエフェクトをすべて含んでいます。 ディケイつまみでは、ノートのリリース後に処理されるシグナルの長さをコントロールします。与えられた時間内に与えられた閾値以下に音量が落ちたときにエフェクトは処理を停止します。このつまみで”与えられた時間”を設定します。この時間を長くするほどCPUを必要とするので、多くのエフェクトでは小さい値を指定するべきでしょう。ディレイのような長時間の沈黙が発生するエフェクトの場合は値を増やす必要があります。 @@ -922,10 +1287,6 @@ Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエ &Remove this plugin このプラグインを削除(&R) - - &Help - ヘルプ(&H) - EnvelopeAndLfoParameters @@ -1165,6 +1526,255 @@ Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエ + + EqControls + + Input gain + 入力ゲイン + + + Output gain + 出力ゲイン + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + ゲイン + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + 周波数: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1303,6 +1913,43 @@ Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエ Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + ファイル %1 を書き込み用にオープンできません。 +このファイルとファイルを含むディレクトリの書き込み権限があるかを確認して再度書き込んでください。 + + + Export project to %1 + プロジェクトを %1 にエクスポート + + + Error + エラー + + + Error while determining file-encoder device. Please try to choose a different output format. + ファイルエンコーダデバイスを決定する際のエラー。異なる出力フォーマットを選んでください。 + + + Rendering: %1% + レンダリング: %1% + + + + Fader + + Please enter a new value between %1 and %2: + %1 と %2 の間の新しい値を入力してください: + FileBrowser @@ -1338,6 +1985,76 @@ Wet/Dry つまみでは、エフェクトの出力中の入力シグナルとエ + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + ノイズ + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + ノイズ + + + White Noise Amount: + + + FxLine @@ -1371,8 +2088,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - ヘルプ(&H) + Remove &unused channels + @@ -1400,9 +2117,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1415,6 +2129,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel このFXチャンネルをミュート + + Solo + ソロ + + + Solo FX channel + + FxRoute @@ -1423,6 +2145,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + バンク + + + Patch + パッチ + + + Gain + ゲイン + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + パッチを選択 + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + ゲイン + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1479,7 +2263,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Sync - + 同期 Down and up @@ -2014,6 +2798,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2038,7 +2833,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Resonance - + レゾナンス Envelopes/LFOs @@ -2046,7 +2841,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Filter type - + フィルターの種類 Q/Resonance @@ -2112,6 +2907,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2145,7 +2968,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Resonance: - + レゾナンス: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. @@ -2202,6 +3025,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2211,7 +3038,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Volume: - + 音量: VOL @@ -2239,7 +3066,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Output - + 出力 @@ -2254,7 +3081,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Volume: - + 音量: VOL @@ -2336,6 +3163,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + その他 + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + -96.0 dBV と 6.0 dBV の間の新しい値を入力してください: + + + Please enter a new value between %1 and %2: + %1 と %2 の間の新しい値を入力してください: + LadspaControl @@ -2372,10 +3222,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. 不明なLADSPA プラグイン %1 @@ -2459,7 +3305,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Modulation amount: - + モジュレーション量: Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. @@ -2497,10 +3343,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - クリックで moog のこぎり波 - Click here for an exponential wave. クリックで指数波形 @@ -2514,6 +3356,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2535,10 +3381,6 @@ Please make sure you have write-access to the file and try again. 設定ファイル %1 をセーブできません。 多分 ファイルへの書き込み許可がありません。 このファイルの書き込み許可ががあることを確認して再度書き込んでください。 - - &Project - プロジェクト(&P) - &New 新規(&N) @@ -2583,10 +3425,6 @@ Please make sure you have write-access to the file and try again. &Help ヘルプ(&H) - - Online help - オンラインヘルプ - Help ヘルプ @@ -2597,7 +3435,7 @@ Please make sure you have write-access to the file and try again. About - + LMMS について Create new project @@ -2692,14 +3530,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? 現在のプロジェクトは最後セーブしてから変更されています。今セーブしますか? - - Open project - プロジェクトを開く - - - Save project - プロジェクトを保存 - Help not available ヘルプはありません @@ -2710,38 +3540,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. 今のところ LMMSの中にヘルプはありません。 http://lmms.sf.net/wiki に LMMSのドキュメントがあります。 - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2750,14 +3548,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2770,10 +3560,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes - - &Recently opened projects - - Undo @@ -2786,6 +3572,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2821,7 +3663,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE デバイス @@ -2846,7 +3688,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. You do not have set up a default soundfont in the settings dialog (Edit->Settings). Therefore no sound will be played back after importing this MIDI file. You should download a General MIDI soundfont, specify it in settings dialog and try again. - 設定ダイアログ (編集->設定)でデフォルトのサウンドフォントを設定していません。そのため、MIDIファイルをインポート後に音声が再生されません。一般的なMIDI サウンドフォントダウンロードして設定ダイアログにて設定を行い、その後で再試行してください。 + 設定ダイアログ (編集->設定)でデフォルトのサウンドフォントを設定していません。そのため、MIDIファイルをインポート後に音声が再生されません。一般的なMIDI サウンドフォントダウンロードして設定ダイアログにて設定を行い、その後で再試行してください。 You did not compile LMMS with support for SoundFont2 player, which is used to add default sound to imported MIDI files. Therefore no sound will be played back after importing this MIDI file. @@ -2857,7 +3699,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. MidiOss::setupWidget DEVICE - + デバイス @@ -3289,6 +4131,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + + + + Saw wave + + + + Ramp wave + + + + Square wave + + + + Moog saw wave + + + + Abs. sine wave + + + + Random + + + + Random smooth + + MonstroView @@ -3461,6 +4395,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3709,15 +4678,15 @@ use mouse wheel to set volume of a step Modulation amount: - + モジュレーション量: Attack: - + アタック: Release: - + リリース: AMNT @@ -3739,6 +4708,14 @@ use mouse wheel to set volume of a step DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3756,11 +4733,11 @@ use mouse wheel to set volume of a step Attack - + アタック Release - + リリース Abs Value @@ -3770,29 +4747,13 @@ use mouse wheel to set volume of a step Amount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - 現在のパターンの再生/一時停止 (Space) - - - Stop playing of current pattern (Space) - 現在のパターンの再生を停止 (Space) - - - Cut selected notes (Ctrl+X) - 選択したノートの切り取り (Ctrl+X) - - - Copy selected notes (Ctrl+C) - 選択したノートのコピー (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - クリップボードからノートを貼り付け (Ctrl+V) - Piano-Roll - no pattern @@ -3805,58 +4766,10 @@ use mouse wheel to set volume of a step Please open a pattern by double-clicking on it! パターン上でダブルクリックして、パターンを開いてください! - - Record notes from MIDI-device/channel-piano - MIDI-デバイス/チャンネル-ピアノからノートを録音 - - - Record notes from MIDI-device/channel-piano while playing song or BB track - 曲やBBトラックを再生中に MIDI-デバイス/チャンネル-ピアノからノートを録音 - - - Draw mode (Shift+D) - ドローモード (shift+D) - - - Erase mode (Shift+E) - 消去モード (shift+E) - - - Select mode (Shift+S) - 選択モード (Shift+S) - Last note 最後に使用したノート - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - ここをクリックすると現在のパターンを再生します。これはパターン編集する際に便利です。パターンの最後で自動的にループします。 - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - ここをクリックすると、MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノからノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。書き込まれたノートは後から再生/編集できます。 - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - ここをクリックすると MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノから、ノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。曲またはBBトラックがバックグラウンドで演奏されます。 - - - Click here to stop playback of current pattern. - ここをクリックすると現在のパターンの録音再生を停止します。 - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - ここをクリックすると選択しているノートをクリップボードへ切り取ります。貼り付けボタンを押すと任意のパターンの任意の場所に切り取ったノートを貼り付けることができます。 - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - ここをクリックすると選択しているノートをクリップボードへコピーします。貼り付けボタンを押すと任意のパターンの任意の場所にコピーしたノートを貼り付けることができます。 - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - ここをクリックするとクリップボード内のノートが最初に表示されている小節に貼り付けられます。 - Note lock ノートをロック @@ -3869,26 +4782,6 @@ use mouse wheel to set volume of a step Note Panning ノートのパンニング - - Detune mode (Shift+T) - ディチューン モード (Shift+T) - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - ここをクリックするとドローモードになります。ドローモードでは個々のノートを追加・リサイズ・移動することができます。普段このモードをデフォルトで使用します。'Shift+D' を押してもこのモードになります。このモードではCtrlを長押しすることで一時的に選択モードにすることができます。 - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - ここをクリックすると消去モードになります。消去モードでは個々のノートを消去することができます。'Shift+E' を押してもこのモードにすることができます。 - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - ここをクリックすると選択モードになります。選択モードでは個々のノートを選択することができます。また、ドローモード中にCtrlを長押しすることで一時的に選択モードを使用することができます。 - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3913,26 +4806,6 @@ use mouse wheel to set volume of a step No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3954,6 +4827,117 @@ use mouse wheel to set volume of a step %1 と %2 の間の新しい値を入力してください: + + PianoRollWindow + + Play/pause current pattern (Space) + 現在のパターンの再生/一時停止 (Space) + + + Record notes from MIDI-device/channel-piano + MIDI-デバイス/チャンネル-ピアノからノートを録音 + + + Record notes from MIDI-device/channel-piano while playing song or BB track + 曲やBBトラックを再生中に MIDI-デバイス/チャンネル-ピアノからノートを録音 + + + Stop playing of current pattern (Space) + + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + ここをクリックすると現在のパターンを再生します。これはパターン編集する際に便利です。パターンの最後で自動的にループします。 + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + ここをクリックすると、MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノからノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。書き込まれたノートは後から再生/編集できます。 + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + ここをクリックすると MIDIデバイスまたは対応するチャンネルウィンドウのバーチャルテストピアノから、ノートを現在のパターンに録音します。録音の際、再生したすべてのノートは現在のパターンに書き込まれます。曲またはBBトラックがバックグラウンドで演奏されます。 + + + Click here to stop playback of current pattern. + ここをクリックすると現在のパターンの録音再生を停止します。 + + + Draw mode (Shift+D) + ドローモード (shift+D) + + + Erase mode (Shift+E) + 消去モード (shift+E) + + + Select mode (Shift+S) + 選択モード (Shift+S) + + + Detune mode (Shift+T) + ディチューン モード (Shift+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + ここをクリックするとドローモードになります。ドローモードでは個々のノートを追加・リサイズ・移動することができます。普段このモードをデフォルトで使用します。'Shift+D' を押してもこのモードになります。このモードではCtrlを長押しすることで一時的に選択モードにすることができます。 + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + ここをクリックすると消去モードになります。消去モードでは個々のノートを消去することができます。'Shift+E' を押してもこのモードにすることができます。 + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + ここをクリックすると選択モードになります。選択モードでは個々のノートを選択することができます。また、ドローモード中にCtrlを長押しすることで一時的に選択モードを使用することができます。 + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + 選択したノートの切り取り (Ctrl+X) + + + Copy selected notes (Ctrl+C) + 選択したノートのコピー (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + クリップボードからノートを貼り付け (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + ここをクリックすると選択しているノートをクリップボードへ切り取ります。貼り付けボタンを押すと任意のパターンの任意の場所に切り取ったノートを貼り付けることができます。 + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + ここをクリックすると選択しているノートをクリップボードへコピーします。貼り付けボタンを押すと任意のパターンの任意の場所にコピーしたノートを貼り付けることができます。 + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + ここをクリックするとクリップボード内のノートが最初に表示されている小節に貼り付けられます。 + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3986,6 +4970,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + Instrument Plugins + + + Instrument browser + Instrument Browser + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + インストゥルメントをSong-EditorやBeat+Bassline Editorまたは存在する Instrument Trackにドラッグしてください。 + + + + ProjectNotes + + Project notes + + + + Put down your project notes here. + ここにプロジェクトに関するメモを記入してください。 + + + Edit Actions + 編集機能 + + + &Undo + 元に戻す(&U) + + + Ctrl+Z + + + + &Redo + やり直し(&R) + + + Ctrl+Y + + + + &Copy + コピー(&C) + + + Ctrl+C + + + + Cu&t + 切り取り(&t) + + + Ctrl+X + + + + &Paste + 貼り付け(&P) + + + Ctrl+V + + + + Format Actions + フォーマット機能 + + + &Bold + 太字(&B) + + + Ctrl+B + + + + &Italic + 斜体(&I) + + + Ctrl+I + + + + &Underline + 下線(&U) + + + Ctrl+U + + + + &Left + 左揃え(&L) + + + Ctrl+L + + + + C&enter + 中央揃え(&e) + + + Ctrl+E + + + + &Right + 右揃え(&R) + + + Ctrl+R + + + + &Justify + 両端揃え(&J) + + + Ctrl+J + + + + &Color... + 文字の色(&C)... + + ProjectRenderer @@ -4136,6 +5254,13 @@ Reason: "%2" ファイル: %1 + + RenameDialog + + Rename... + 名前の変更... + + SampleBuffer @@ -4224,6 +5349,10 @@ Reason: "%2" Volume 音量 + + Panning + + SampleTrackView @@ -4239,37 +5368,309 @@ Reason: "%2" VOL - - - SongEditor - Song-Editor + Panning - Play song (Space) - 曲を再生 (Space) + Panning: + - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - ここをクリックすると曲全体を再生します。ソングポジションマーカー(緑色)の位置から再生開始します。再生中にマーカーを移動させることもできます。 + PAN + + + + + SetupDialog + + Setup LMMS + LMMS 設定 - Stop song (Space) - 曲を停止 (Space) + General settings + 一般設定 - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - ここをクリックすると曲の再生を停止します。再生後、ソングポジションマーカーは曲の最初にセットされます。 + BUFFER SIZE + バッファ サイズ - Add beat/bassline - Beat/Bassline を追加 + Reset to default-value + デフォルト値にリセット - Add sample-track - Sample-Track を追加 + MISC + その他 + + Enable tooltips + ツールチップを有効にする + + + Show restart warning after changing settings + 設定変更後に「再起動警告」を表示する + + + Display volume as dBV + 音量を dBV で表示する + + + Compress project files per default + プロジェクト ファイルの圧縮をデフォルトにする + + + One instrument track window mode + + + + HQ-mode for output audio-device + 出力オーディオデバイスを高品質モードにする + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + デフォルトで波形表示を有効にする + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + パス + + + LMMS working directory + LMMS作業ディレクトリー + + + VST-plugin directory + VST-プラグイン ディレクトリー + + + Artwork directory + アートワーク ディレクトリー + + + Background artwork + 背景用アートワーク + + + FL Studio installation directory + FL Studio のディレクトリー + + + LADSPA plugin paths + LADSAPA プラグインのパス + + + STK rawwave directory + STK rawwave のディレクトリー + + + Default Soundfont File + デフォルト サウンドフォントファイル + + + Performance settings + パフォーマンス設定 + + + UI effects vs. performance + UI エフェクト vs. パフォーマンス + + + Smooth scroll in Song Editor + Song Editor でスムーズ スクロールする + + + Enable auto save feature + 自動保存機能を有効にする + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + オーディオ設定 + + + AUDIO INTERFACE + オーディオ インターフェース + + + MIDI settings + MIDI 設定 + + + MIDI INTERFACE + MIDI インターフェース + + + OK + OK + + + Cancel + キャンセル + + + Restart LMMS + LMMS の再起動 + + + Please note that most changes won't take effect until you restart LMMS! + 変更した設定の大部分は、LMMSの再起動後に有効になります! + + + Frames: %1 +Latency: %2 ms + フレーム: %1 +レイテンシー: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + ここではLMMSで使用する内部バッファサイズを指定します。値が小さいとレイテンシーが小さくなるだけでなく、特に古いコンピュータやリアルタイムカーネルではないシステムでは酷い音やパフォーマンスの低下を引き起こします。 + + + Choose LMMS working directory + LMMSの作業ディレクトリーを選択してください + + + Choose your VST-plugin directory + VSTプラグインディレクトリーを選択してください + + + Choose artwork-theme directory + アートワークテーマディレクトリーを選択してください + + + Choose FL Studio installation directory + FL Studioがインストールされているディレクトリーを選択してください + + + Choose LADSPA plugin directory + LADSPAプラグインのディレクトリーを選択してください + + + Choose STK rawwave directory + STK rawwave のディレクトリーを選択してください + + + Choose default SoundFont + デフォルトのサウンドフォントを選択してください + + + Choose background artwork + 背景用アートワークを選択してください + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + ここでは優先するオーディオインターフェースを選択することができます。コンパイル時のシステム設定によってALSA,JACK, OSS 等を選択することができます。選択したオーディオインターフェースのコントロール設定項目は下部にあります。 + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + ここではMIDI インターフェースを選択することができます。コンパイル時のシステム設定によって、ALSAやOSS等を選択することができます。選択したMIDIインターフェースのコントロール設定項目は下部にあります。 + + + + Song + + Tempo + テンポ + + + Master volume + + + + Master pitch + マスターピッチ + + + Project saved + プロジェクトを保存しました + + + The project %1 is now saved. + プロジェクト %1 を保存しました + + + Project NOT saved. + プロジェクトは保存されていません。 + + + The project %1 was not saved! + プロジェクト %1 は保存されませんでした! + + + Import file + ファイルのインポート + + + MIDI sequences + MIDI シーケンス + + + FL Studio projects + FL Studio プロジェクト + + + Hydrogen projects + Hydrogen プロジェクト + + + All file types + すべてのファイル + + + Empty project + 空のプロジェクト + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + プロジェクトが空なのでエクスポートは無効です。Song Editor にアイテムを置いてからエクスポートしてください! + + + Select directory for writing exported tracks... + + + + untitled + + + + Select file for project-export... + プロジェクトをエクスポートするファイルを選択してください... + + + The following errors occured while loading: + + + + + SongEditor Could not open file ファイルを開くことができませんでした @@ -4278,26 +5679,6 @@ Reason: "%2" Could not write file ファイルに書き込むことができませんでした - - Add automation-track - Automation-Track を追加 - - - Draw mode - ドローモード - - - Edit mode (select and move) - 編集モード (選択と移動) - - - Record samples from Audio-device - オーディオデバイスからサンプルを録音 - - - Record samples from Audio-device while playing song or BB track - 曲またはBBトラックを再生中にオーディオデバイスからサンプルを録音 - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4361,6 +5742,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + + + + Play song (Space) + 曲を再生 (Space) + + + Record samples from Audio-device + オーディオデバイスからサンプルを録音 + + + Record samples from Audio-device while playing song or BB track + 曲またはBBトラックを再生中にオーディオデバイスからサンプルを録音 + + + Stop song (Space) + 曲を停止 (Space) + + + Add beat/bassline + + + + Add sample-track + Sample-Track を追加 + + + Add automation-track + + + + Draw mode + ドローモード + + + Edit mode (select and move) + 編集モード (選択と移動) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + ここをクリックすると曲全体を再生します。ソングポジションマーカー(緑色)の位置から再生開始します。再生中にマーカーを移動させることもできます。 + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + ここをクリックすると曲の再生を停止します。再生後、ソングポジションマーカーは曲の最初にセットされます。 + + SpectrumAnalyzerControlDialog @@ -4387,6 +5819,13 @@ Reason: "%2" + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4429,10 +5868,6 @@ Reason: "%2" Custom... カスタム... - - &Help - ヘルプ(&H) - Custom カスタム @@ -4473,6 +5908,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + オートスクロールを有効/無効 + + + Enable/disable loop-points + ループポイントを有効/無効 + + + After stopping go back to begin + 終了後、開始位置に戻る + + + After stopping go back to position at which playing was started + 終了後、再生が開始された位置に戻る + + + After stopping keep position + 終了後、位置を保持する + + + Hint + ヒント + + + Press <Ctrl> to disable magnetic loop points. + マグネティック ループポイントを無効化するには<Ctrl>を押してください。 + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + ミュート + + + Solo + ソロ + + TrackContainer @@ -4516,6 +5997,107 @@ Please make sure you have read-permission to the file and the directory containi FLP-ファイルをインポートしています... + + TrackContentObject + + Muted + ミュート + + + + TrackContentObjectView + + Current position + 現在位置 + + + Hint + ヒント + + + Press <Ctrl> and drag to make a copy. + コピーするには<Ctl>+ドラッグをしてください。 + + + Current length + 現在の長さ + + + Press <Ctrl> for free resizing. + フリーズ解除には<Ctrl>を押してください。 + + + %1:%2 (%3:%4 to %5:%6) + + + + Delete (middle mousebutton) + + + + Cut + 切り取り + + + Copy + コピー + + + Paste + 貼り付け + + + Mute/unmute (<Ctrl> + middle click) + ミュート/ミュート解除(<Ctrl> + 中ボタンクリック) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + 新しいドラッグ&ドロップアクションを開始するには、移動グリップをクリック中に <Ctrl>を押してください。 + + + Actions for this track + このトラックのアクション + + + Mute + ミュート + + + Solo + ソロ + + + Mute this track + このトラックをミュート + + + Clone this track + このトラックを複製 + + + Remove this track + このトラックを削除 + + + Clear this track + このトラックをクリア + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4659,17 +6241,6 @@ Please make sure you have read-permission to the file and the directory containi ユーザー定義波形を現在のオシレータで使用 - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4772,6 +6343,17 @@ Please make sure you have read-permission to the file and the directory containi + + VisualizationWidget + + click to enable/disable visualization of master-output + ここをクリックするとマスター出力の表示/非表示を切り替えます + + + Click to enable + 有効にするにはここをクリック + + VstEffectControlDialog @@ -4878,11 +6460,7 @@ Please make sure you have read-permission to the file and the directory containi - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5085,7 +6663,7 @@ Please make sure you have read-permission to the file and the directory containi Normalize - + ノーマライズ Click to normalize @@ -5101,7 +6679,7 @@ Please make sure you have read-permission to the file and the directory containi Smooth - + 平滑化 Click to smooth @@ -5288,77 +6866,8 @@ Please make sure you have read-permission to the file and the directory containi Sinc - - - bbEditor - Beat+Bassline Editor - Beat+Bassline-Editor - - - Play/pause current beat/bassline (Space) - 現在の beat/bassline を 再生/一時停止 (Space) - - - Add beat/bassline - beat/bassline を追加 - - - Add automation-track - オートメーショントラックを追加 - - - Stop playback of current beat/bassline (Space) - beat/bassline の再生を停止 (Space) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - クリックすると現在の beat/bassline を演奏します。 beat/bassline は終了位置にくると自動的にループされます。 - - - Click here to stop playing of current beat/bassline. - クリックすると現在の beat/bassline の演奏を停止します。 - - - Remove steps - ステップ除去 - - - Add steps - ステップ追加 - - - - bbTCOView - - Open in Beat+Bassline-Editor - Beat+Bassline-Editor を開く - - - Reset name - 名前をリセット - - - Change name - 名前を変更 - - - Change color - 色を変更 - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - beat/bassline %1 - - - Clone of %1 + Sample not found: %1 @@ -5393,15 +6902,15 @@ Please make sure you have read-permission to the file and the directory containi White noise wave - + ホワイトノイズ波形 User defined wave - + ユーザー定義波形 Smooth - + 平滑化 Click here to smooth waveform. @@ -5413,7 +6922,7 @@ Please make sure you have read-permission to the file and the directory containi Normalize - + ノーマライズ Draw your own waveform here by dragging your mouse on this graph. @@ -5558,42 +7067,6 @@ Please make sure you have read-permission to the file and the directory containi - - exportProjectDialog - - Could not open file - ファイルをオープンできません - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - ファイル %1 を書き込み用にオープンできません。 -このファイルとファイルを含むディレクトリの書き込み権限があるかを確認して再度書き込んでください。 - - - Error - エラー - - - Error while determining file-encoder device. Please try to choose a different output format. - ファイルエンコーダデバイスを決定する際のエラー。異なる出力フォーマットを選んでください。 - - - Rendering: %1% - レンダリング: %1% - - - Export project to %1 - プロジェクトを %1 にエクスポート - - - - fader - - Please enter a new value between %1 and %2: - %1 と %2 の間の新しい値を入力してください: - - graphModel @@ -5613,7 +7086,7 @@ Please make sure you have write-permission to the file and the directory contain Gain - + ゲイン Length @@ -5633,7 +7106,7 @@ Please make sure you have write-permission to the file and the directory contain Noise - + ノイズ Click @@ -5664,7 +7137,7 @@ Please make sure you have write-permission to the file and the directory contain Gain: - + ゲイン: Frequency Slope: @@ -5695,21 +7168,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - ヘルプ(&H) - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - -96.0 dBV と 6.0 dBV の間の新しい値を入力してください: - - - Please enter a new value between %1 and %2: - %1 と %2 の間の新しい値を入力してください: - - ladspaBrowserView @@ -5822,7 +7280,7 @@ Double clicking any of the plugins will bring up information on the ports. Output - + 出力 Toggled @@ -5896,7 +7354,7 @@ Double clicking any of the plugins will bring up information on the ports. Resonance: - + レゾナンス: Env Mod: @@ -5904,7 +7362,7 @@ Double clicking any of the plugins will bring up information on the ports. Decay: - + ディケイ: 303-es-que, 24dB/octave, 3 pole filter @@ -5968,7 +7426,7 @@ Double clicking any of the plugins will bring up information on the ports. White noise wave - + ホワイトノイズ波形 Click here for an exponential wave. @@ -6070,7 +7528,7 @@ Double clicking any of the plugins will bring up information on the ports. Resonance: - + レゾナンス: RES @@ -6086,7 +7544,7 @@ Double clicking any of the plugins will bring up information on the ports. Decay: - + ディケイ: DEC @@ -6441,18 +7899,11 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - ヘルプ(&H) - - opl2instrument Patch - + パッチ Op 1 Attack @@ -6586,7 +8037,7 @@ Double clicking any of the plugins will bring up information on the ports. Volume: - + 音量: Randomise @@ -6901,10 +8352,6 @@ Double clicking any of the plugins will bring up information on the ports.no description 説明なし - - Instrument plugins - Instrument Plugins - Incomplete monophonic imitation tb303 不完全なモノフォニック イミテーション tb303 @@ -6957,14 +8404,6 @@ Double clicking any of the plugins will bring up information on the ports.Filter for importing MIDI-files into LMMS MIDI ファイルを LMMS にインポートするためのフィルター - - Instrument browser - Instrument Browser - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - インストゥルメントをSong-EditorやBeat+Bassline Editorまたは存在する Instrument Trackにドラッグしてください。 - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7055,335 +8494,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Project notes + Player for GIG files - Put down your project notes here. - ここにプロジェクトに関するメモを記入してください。 - - - Edit Actions - 編集機能 - - - &Undo - 元に戻す(&U) - - - Ctrl+Z + A multitap echo delay plugin - &Redo - やり直し(&R) - - - Ctrl+Y + A native flanger plugin - &Copy - コピー(&C) - - - Ctrl+C + A native delay plugin - Cu&t - 切り取り(&t) - - - Ctrl+X + An oversampling bitcrusher - &Paste - 貼り付け(&P) - - - Ctrl+V + A native eq plugin - Format Actions - フォーマット機能 - - - &Bold - 太字(&B) - - - Ctrl+B + A 4-band Crossover Equalizer - - &Italic - 斜体(&I) - - - Ctrl+I - - - - &Underline - 下線(&U) - - - Ctrl+U - - - - &Left - 左揃え(&L) - - - Ctrl+L - - - - C&enter - 中央揃え(&e) - - - Ctrl+E - - - - &Right - 右揃え(&R) - - - Ctrl+R - - - - &Justify - 両端揃え(&J) - - - Ctrl+J - - - - &Color... - 文字の色(&C)... - - renameDialog + setupWidget - Rename... - 名前の変更... - - - - setupDialog - - Setup LMMS - LMMS 設定 - - - General settings - 一般設定 - - - BUFFER SIZE - バッファ サイズ - - - Reset to default-value - デフォルト値にリセット - - - MISC - その他 - - - Enable tooltips - ツールチップを有効にする - - - Show restart warning after changing settings - 設定変更後に「再起動警告」を表示する - - - Display volume as dBV - 音量を dBV で表示する - - - Compress project files per default - プロジェクト ファイルの圧縮をデフォルトにする - - - HQ-mode for output audio-device - 出力オーディオデバイスを高品質モードにする - - - LMMS working directory - LMMS作業ディレクトリー - - - VST-plugin directory - VST-プラグイン ディレクトリー - - - Artwork directory - アートワーク ディレクトリー - - - FL Studio installation directory - FL Studio のディレクトリー - - - STK rawwave directory - STK rawwave のディレクトリー - - - Performance settings - パフォーマンス設定 - - - UI effects vs. performance - UI エフェクト vs. パフォーマンス - - - Audio settings - オーディオ設定 - - - AUDIO INTERFACE - オーディオ インターフェース - - - MIDI settings - MIDI 設定 - - - MIDI INTERFACE - MIDI インターフェース - - - OK + JACK (JACK Audio Connection Kit) - Cancel - キャンセル - - - Restart LMMS - LMMS の再起動 - - - Please note that most changes won't take effect until you restart LMMS! - 変更した設定の大部分は、LMMSの再起動後に有効になります! - - - Frames: %1 -Latency: %2 ms - フレーム: %1 -レイテンシー: %2 ms - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - ここではLMMSで使用する内部バッファサイズを指定します。値が小さいとレイテンシーが小さくなるだけでなく、特に古いコンピュータやリアルタイムカーネルではないシステムでは酷い音やパフォーマンスの低下を引き起こします。 - - - Choose LMMS working directory - LMMSの作業ディレクトリーを選択してください - - - Choose your VST-plugin directory - VSTプラグインディレクトリーを選択してください - - - Choose artwork-theme directory - アートワークテーマディレクトリーを選択してください - - - Choose FL Studio installation directory - FL Studioがインストールされているディレクトリーを選択してください - - - Choose LADSPA plugin directory - LADSPAプラグインのディレクトリーを選択してください - - - Choose STK rawwave directory - STK rawwave のディレクトリーを選択してください - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - ここでは優先するオーディオインターフェースを選択することができます。コンパイル時のシステム設定によってALSA,JACK, OSS 等を選択することができます。選択したオーディオインターフェースのコントロール設定項目は下部にあります。 - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - ここではMIDI インターフェースを選択することができます。コンパイル時のシステム設定によって、ALSAやOSS等を選択することができます。選択したMIDIインターフェースのコントロール設定項目は下部にあります。 - - - Paths - パス - - - LADSPA plugin paths - LADSAPA プラグインのパス - - - Default Soundfont File - デフォルト サウンドフォントファイル - - - Background artwork - 背景用アートワーク - - - Choose default SoundFont - デフォルトのサウンドフォントを選択してください - - - Choose background artwork - 背景用アートワークを選択してください - - - One instrument track window mode + OSS Raw-MIDI (Open Sound System) - Compact track buttons + SDL (Simple DirectMedia Layer) - Sync VST plugins to host playback + PulseAudio (bad latency!) - Enable note labels in piano roll + Dummy (no MIDI support) - Enable waveform display by default - デフォルトで波形表示を有効にする - - - Smooth scroll in Song Editor - Song Editor でスムーズ スクロールする - - - Enable auto save feature - 自動保存機能を有効にする - - - Show playback cursor in AudioFileProcessor + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Keep effects running even without input + PortAudio + + + + Dummy (no sound output) + + + + ALSA (Advanced Linux Sound Architecture) + + + + OSS (Open Sound System) + + + + WinMM MIDI + + + + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7441,6 +8628,10 @@ Latency: %2 ms Chorus Depth + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7686,77 +8877,6 @@ Latency: %2 ms Test オシレータ %1 を セット・リセット・ロックしたとき Test が停止されるまでの間 ゼロです。 - - song - - Tempo - テンポ - - - Master volume - マスター音量 - - - Master pitch - マスターピッチ - - - Project saved - プロジェクトを保存しました - - - The project %1 is now saved. - プロジェクト %1 を保存しました - - - Project NOT saved. - プロジェクトは保存されていません。 - - - The project %1 was not saved! - プロジェクト %1 は保存されませんでした! - - - Import file - ファイルのインポート - - - untitled - - - - Select file for project-export... - プロジェクトをエクスポートするファイルを選択してください... - - - Empty project - 空のプロジェクト - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - プロジェクトが空なのでエクスポートは無効です。Song Editor にアイテムを置いてからエクスポートしてください! - - - MIDI sequences - MIDI シーケンス - - - FL Studio projects - FL Studio プロジェクト - - - All file types - すべてのファイル - - - Hydrogen projects - Hydrogen プロジェクト - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7813,157 +8933,6 @@ Latency: %2 ms - - timeLine - - Enable/disable auto-scrolling - オートスクロールを有効/無効 - - - Enable/disable loop-points - ループポイントを有効/無効 - - - After stopping go back to begin - 終了後、開始位置に戻る - - - After stopping go back to position at which playing was started - 終了後、再生が開始された位置に戻る - - - After stopping keep position - 終了後、位置を保持する - - - Hint - ヒント - - - Press <Ctrl> to disable magnetic loop points. - マグネティック ループポイントを無効化するには<Ctrl>を押してください。 - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - ミュート - - - Solo - ソロ - - - - trackContentObject - - Muted - ミュート - - - - trackContentObjectView - - Current position - 現在位置 - - - Hint - ヒント - - - Press <Ctrl> and drag to make a copy. - コピーするには<Ctl>+ドラッグをしてください。 - - - Current length - 現在の長さ - - - Press <Ctrl> for free resizing. - フリーズ解除には<Ctrl>を押してください。 - - - %1:%2 (%3:%4 to %5:%6) - - - - Delete (middle mousebutton) - 消去(マウス中ボタン) - - - Cut - 切り取り - - - Copy - コピー - - - Paste - 貼り付け - - - Mute/unmute (<Ctrl> + middle click) - ミュート/ミュート解除(<Ctrl> + 中ボタンクリック) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - 新しいドラッグ&ドロップアクションを開始するには、移動グリップをクリック中に <Ctrl>を押してください。 - - - Actions for this track - このトラックのアクション - - - Mute - ミュート - - - Mute this track - このトラックをミュート - - - Solo - ソロ - - - Clone this track - このトラックを複製 - - - Remove this track - このトラックを削除 - - - Clear this track - このトラックをクリア - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7974,16 +8943,6 @@ Latency: %2 ms Please wait while loading VST-plugin... VST-プラグインを読み込む間お待ちください... - - Failed loading VST-plugin - VST-プラグインの読み込みに失敗しました - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - VST-plugin %1 がいくつかの理由で読み込みできませんでした。 -もしその VST が Linuxの他のVST-ソフトウェアで動作するならば LMMS の開発者に連絡してください! - vibed @@ -8108,7 +9067,7 @@ If it runs with other VST-software under Linux, please contact an LMMS-developer The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. - オクターブセレクタは、ストリングをノートのどの倍音で鳴らすかを選択するために使用します。例えば、'-2'は基音の2オクターブ下まで鳴ることを意味し、'F'は、ストリングが基音で鳴ることを意味します。そして'6'は、ストリングが基本から6オクターブ上で鳴ることを意味します。 + オクターブセレクタは、ストリングをノートのどの倍音で鳴らすかを選択するために使用します。例えば、'-2'は基音の2オクターブ下まで鳴ることを意味し、'F'は、ストリングが基音で鳴ることを意味します。そして'6'は、ストリングが基本から6オクターブ上で鳴ることを意味します。 Impulse Editor @@ -8122,7 +9081,7 @@ The waveform can also be drawn in the graph. The 'S' button will smooth the waveform. The 'N' button will normalize the waveform. - 波形エディターは、ストリングの振動開始時に使われる初期状態またはインパルスのコントロールに使用します。グラフの右側のボタンで波形を選択した種類に初期化します。'?' ボタンでファイルから波形を--最初の128個のサンプルのみ読み込みます。 + 波形エディターは、ストリングの振動開始時に使われる初期状態またはインパルスのコントロールに使用します。グラフの右側のボタンで波形を選択した種類に初期化します。'?' ボタンでファイルから波形を--最初の128個のサンプルのみ読み込みます。 波形はグラフ内に描くこともできます。 @@ -8142,7 +9101,7 @@ The 'V' knob controls the volume. The 'S' knob controls the The 'Length' knob controls the length of the string. The LED in the lower right corner of the waveform editor determines whether the string is active in the current instrument. - Vibed は独立して振動しているストリングを9つまでモデル化します。'String'セレクタでは、現在編集しているストリングを選ぶことができます。'Imp' セレクタでは、インパルスと、ストリングの初期状態のどちらをグラフで表すのかを選択します。'Octave' セレクタでは、どの倍音でストリングを振動させるのかを選択します。 + Vibed は独立して振動しているストリングを9つまでモデル化します。'String'セレクタでは、現在編集しているストリングを選ぶことができます。'Imp' セレクタでは、インパルスと、ストリングの初期状態のどちらをグラフで表すのかを選択します。'Octave' セレクタでは、どの倍音でストリングを振動させるのかを選択します。 グラフでは、動作中のストリングを設定する際に使用する、初期状態またはインパルスをコントールすることができます。 @@ -8210,10 +9169,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. ここをクリックすると波形をノーマライズ化します。 - - &Help - ヘルプ(&H) - Use a sine-wave for current oscillator. サイン波形を現在のオシレータで使用する。 @@ -8239,17 +9194,6 @@ The LED in the lower right corner of the waveform editor determines whether the ユーザー定義波形を現在のオシレータで使用する。 - - visualizationWidget - - click to enable/disable visualization of master-output - ここをクリックするとマスター出力の表示/非表示を切り替えます - - - Click to enable - 有効にするにはここをクリック - - voiceObject @@ -8305,7 +9249,7 @@ The LED in the lower right corner of the waveform editor determines whether the Input gain: - + 入力ゲイン: OUTPUT @@ -8313,11 +9257,11 @@ The LED in the lower right corner of the waveform editor determines whether the Output gain: - + 出力ゲイン: Reset waveform - + 波形をリセット Click here to reset the wavegraph back to default diff --git a/data/locale/ko.ts b/data/locale/ko.ts index 9565f543d..ad7ee413f 100644 --- a/data/locale/ko.ts +++ b/data/locale/ko.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME 클라이언트명 @@ -324,18 +325,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + 제어 문맥 메뉴를 가진 자동화 패턴으로 열어주세요! + + + Values copied + 복사된 값 + + + All selected values were copied to the clipboard. + 전체 선택된 값을 클립보드로 복사했습니다. + + + + AutomationEditorWindow Play/pause current pattern (Space) 현재 패턴 재생/잠시 중지 (Space) - - Stop playing of current pattern (Space) - 현재 패턴 재생을 중지 (Space) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + + Stop playing of current pattern (Space) + 현재 패턴 재생을 중지 (Space) + Click here if you want to stop playing of the current pattern. 현재 패턴의 재생을 중지하려면 여기를 누르세요 @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) 지우기 모드 (Shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - - Cut selected values (Ctrl+X) - 선택된 값 잘라내기 (Ctrl+X) - - - Copy selected values (Ctrl+C) - 선택된 값 복사 (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - 클립보드에서 값 붙여넣기 (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the values from the clipboard will be pasted at the first visible measure. - - - - Automation Editor - no pattern - 자동화 편집기 - 패턴 없음 - - - Automation Editor - %1 - 자동화 편집기 - %1 - - - Please open an automation pattern with the context menu of a control! - 제어 문맥 메뉴를 가진 자동화 패턴으로 열어주세요! - - - Values copied - 복사된 값 - - - All selected values were copied to the clipboard. - 전체 선택된 값을 클립보드로 복사했습니다. - Discrete progression @@ -413,7 +401,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -429,13 +421,41 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) + 선택된 값 잘라내기 (Ctrl+X) + + + Copy selected values (Ctrl+C) + 선택된 값 복사 (Ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the values from the clipboard will be pasted at the first visible measure. + + + + Tension: + + + + Automation Editor - no pattern + 자동화 편집기 - 패턴 없음 + + + Automation Editor - %1 + 자동화 편집기 - %1 + AutomationPattern @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record 녹음 설정/해제 + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp 자동화 트랙 + + BBEditor + + Beat+Bassline Editor + Beat+Bassline 편집기 + + + Play/pause current beat/bassline (Space) + 현재 beat/bassline 재생/잠시 정지(Space) + + + Stop playback of current beat/bassline (Space) + 현재 beat/bassline 재생 중지 (Space) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + 현재 beat/bassline를 재생하기 위하여 여기를 클릭. beat/bassline은 끝에 도달시 자동으로 반복됩니다. + + + Click here to stop playing of current beat/bassline. + 현재 beat/bassline 재생을 정지하기 위하여 여기를 클릭. + + + Add beat/bassline + beat/bassline 더하기 + + + Add automation-track + 자동화 트랙 더하기 + + + Remove steps + 단계 제거 + + + Add steps + 단계 더하기 + + + + BBTCOView + + Open in Beat+Bassline-Editor + Beat+Bassline 편집기에서 ㅇ려기 + + + Reset name + 이름 초기화 + + + Change name + 이름 변경 + + + Change color + 색상 변경 + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + 이득 + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + 도움말(&H) + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin 이 플러그인 제거(&R) + + + CrossoverEQControlDialog - &Help - 도움말(&H) + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -907,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin 이 플러그인 제거(&R) - - &Help - 도움말(&H) - EnvelopeAndLfoParameters @@ -1150,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + 이득 + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + 주파수: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1288,6 +1898,42 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + 파일을 열 수 없음 + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + + + + Export project to %1 + %1로 프로젝트 내보내기 + + + Error + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + Rendering: %1% + + + + + Fader + + Please enter a new value between %1 and %2: + %1 과 %2 사이 새로운 값을 입력하시오: + FileBrowser @@ -1323,6 +1969,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + 잡음 + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + 잡음 + + + White Noise Amount: + + + FxLine @@ -1356,8 +2072,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - 도움말(&H) + Remove &unused channels + @@ -1385,9 +2101,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1400,6 +2113,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel + + Solo + 솔로 + + + Solo FX channel + + FxRoute @@ -1408,6 +2129,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + 뱅크 + + + Patch + 패치 + + + Gain + 이득 + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + 패치 선택 + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + 이득 + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1999,6 +2782,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2097,6 +2891,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2187,6 +3009,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2321,6 +3147,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + 기타 + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + -96.0 dBV 과 6.0 dBV 사이 새로운 값을 입력하시오: + + + Please enter a new value between %1 and %2: + %1 과 %2 사이 새로운 값을 입력하시오: + LadspaControl @@ -2357,10 +3206,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - 효과 - Unknown LADSPA plugin %1 requested. 요청된 미지의 LADSPA 플러그인 %1 @@ -2482,10 +3327,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2499,6 +3340,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2519,10 +3364,6 @@ Double click to pick a file. Please make sure you have write-access to the file and try again. - - &Project - 프로젝트(&P) - &New 새로(&N) @@ -2567,10 +3408,6 @@ Please make sure you have write-access to the file and try again. &Help 도움말(&H) - - Online help - 온라인 도움말 - Help 도움말 @@ -2675,14 +3512,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? 마지막 저장 후 현재 프로젝트가 수정되었습니다. 지금 저장하겠습니까? - - Open project - 프로젝트 열기 - - - Save project - 프로젝트 저장 - Help not available 도움말을 이용할 수 없습니다 @@ -2693,38 +3522,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. 현재 LMMS에 사용할 수 있는 도움말이 없습니다. LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2733,14 +3530,6 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요. Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2753,10 +3542,6 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요. Volumes - - &Recently opened projects - - Undo @@ -2769,6 +3554,62 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2804,7 +3645,7 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE 기기 @@ -3272,6 +4113,98 @@ LMMS 문서는 http://lmms.sf.net/wiki를 방문하세요. Sub3-LFO2 + + Sine wave + 사인 파형 + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + 삼각 파형 + + + Saw wave + 톱니 파형 + + + Ramp wave + + + + Square wave + 사각 파형 + + + Moog saw wave + + + + Abs. sine wave + + + + Random + 무작위 + + + Random smooth + + MonstroView @@ -3444,6 +4377,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3722,6 +4690,14 @@ use mouse wheel to set volume of a step DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3753,29 +4729,13 @@ use mouse wheel to set volume of a step Amount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - 현재 패턴 재생/잠시 중지 (Space) - - - Stop playing of current pattern (Space) - 현재 패턴 재생을 중지 (Space) - - - Cut selected notes (Ctrl+X) - 선택 박자를 잘라내기 (Ctrl+X) - - - Copy selected notes (Ctrl+C) - 선택 박자를 복사 (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - 클립보드에서 박자 붙여넣기 (Ctrl+V) - Piano-Roll - no pattern 피아노-롤 - 패턴 없음 @@ -3788,58 +4748,10 @@ use mouse wheel to set volume of a step Please open a pattern by double-clicking on it! 이것을 이중 클릭을 함으로서 패턴을 열어주세요. - - Record notes from MIDI-device/channel-piano - 미디 기기/채널 피아노에서 박자 기록 - - - Record notes from MIDI-device/channel-piano while playing song or BB track - 노래 또는 BB 트랙 재생시 미디 기기/채널에서 박자 기록 - - - Draw mode (Shift+D) - 그리기 모드 (Shift+D) - - - Erase mode (Shift+E) - 지우기 모드 (Shift+E) - - - Select mode (Shift+S) - 선택 모드 (Shift+S) - Last note 마지막 박자 - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock 박자 잠금 @@ -3852,26 +4764,6 @@ use mouse wheel to set volume of a step Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3896,26 +4788,6 @@ use mouse wheel to set volume of a step No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3937,6 +4809,117 @@ use mouse wheel to set volume of a step %1 과 %2 사이 새로운 값을 입력하시오: + + PianoRollWindow + + Play/pause current pattern (Space) + 현재 패턴 재생/잠시 중지 (Space) + + + Record notes from MIDI-device/channel-piano + 미디 기기/채널 피아노에서 박자 기록 + + + Record notes from MIDI-device/channel-piano while playing song or BB track + 노래 또는 BB 트랙 재생시 미디 기기/채널에서 박자 기록 + + + Stop playing of current pattern (Space) + 현재 패턴 재생을 중지 (Space) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + 그리기 모드 (Shift+D) + + + Erase mode (Shift+E) + 지우기 모드 (Shift+E) + + + Select mode (Shift+S) + 선택 모드 (Shift+S) + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + 선택 박자를 잘라내기 (Ctrl+X) + + + Copy selected notes (Ctrl+C) + 선택 박자를 복사 (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + 클립보드에서 박자 붙여넣기 (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3969,6 +4952,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + 기기 플러그인 + + + Instrument browser + 기기 브라우저 + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + 각 노래 편집기, Beat+Bassline 편집기 또는 기존 기기 트랙으로 끌기 + + + + ProjectNotes + + Project notes + 프로젝트 박자 + + + Put down your project notes here. + 프로젝트 박자를 여기에 두시오. + + + Edit Actions + 작업 편집 + + + &Undo + 작업 취소(&U) + + + Ctrl+Z + + + + &Redo + 작업 재실행(&R) + + + Ctrl+Y + + + + &Copy + 복사(&C) + + + Ctrl+C + + + + Cu&t + 잘라내기(&T) + + + Ctrl+X + + + + &Paste + 붙여넣기(&P) + + + Ctrl+V + + + + Format Actions + 형식 작업 + + + &Bold + 진하게(&B) + + + Ctrl+B + + + + &Italic + 기울임(&I) + + + Ctrl+I + + + + &Underline + 밑줄(&U) + + + Ctrl+U + + + + &Left + 왼쪽(&L) + + + Ctrl+L + + + + C&enter + 중앙(&E) + + + Ctrl+E + + + + &Right + 오른쪽(&R) + + + Ctrl+R + + + + &Justify + 양쪽 배분(&J) + + + Ctrl+J + + + + &Color... + 색상(&C)... + + ProjectRenderer @@ -4119,6 +5236,13 @@ Reason: "%2" + + RenameDialog + + Rename... + 다른 이름으로... + + SampleBuffer @@ -4207,6 +5331,10 @@ Reason: "%2" Volume 볼륨 + + Panning + 패닝 + SampleTrackView @@ -4222,33 +5350,310 @@ Reason: "%2" VOL 볼륨 + + Panning + 패닝 + + + Panning: + 패닝: + + + PAN + 패닝 + + + + SetupDialog + + Setup LMMS + LMMS 설정 + + + General settings + 일반 설정 + + + BUFFER SIZE + 버퍼 크기 + + + Reset to default-value + 기본값으로 초기화 + + + MISC + 기타 + + + Enable tooltips + 도구 도움말 가능 + + + Show restart warning after changing settings + 설정 변경후 재실행 경고 보이기 + + + Display volume as dBV + dBV로 볼륨 보이기 + + + Compress project files per default + 기본 당 프로젝트 파일 압축 + + + One instrument track window mode + + + + HQ-mode for output audio-device + 출력 오디오 기기의 HQ 모드 + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + 경로 + + + LMMS working directory + LMMS 작업 폴더 + + + VST-plugin directory + VST-플러그인 폴더 + + + Artwork directory + 아트작업 폴더 + + + Background artwork + 배경 아트워크 + + + FL Studio installation directory + FL Studio 설치 폴더 + + + LADSPA plugin paths + LADSPA 플러그인 폴더 + + + STK rawwave directory + STK 원시 파형 폴더 + + + Default Soundfont File + 기본 사운드글꼴 파일 + + + Performance settings + 실행 설정 + + + UI effects vs. performance + UI 효과 대 실행 + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + 오디오 설정 + + + AUDIO INTERFACE + 오디오 인터페이스 + + + MIDI settings + 미디 설정 + + + MIDI INTERFACE + 미디 인터페이스 + + + OK + 확인 + + + Cancel + 취소 + + + Restart LMMS + LMMS 재실행 + + + Please note that most changes won't take effect until you restart LMMS! + LMMS 재실행 전까지는 변경이 영향을 미치지 않습니다. + + + Frames: %1 +Latency: %2 ms + + 프레임: %1 +래턴시: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + + + + Choose LMMS working directory + LMMS 작업 폴더 선택 + + + Choose your VST-plugin directory + VST 플러그인 폴더 선택 + + + Choose artwork-theme directory + 아트워크 테마 폴더 선택 + + + Choose FL Studio installation directory + FL Studio 설치 폴더 선택 + + + Choose LADSPA plugin directory + LADSPA 플러그인 폴더 선택 + + + Choose STK rawwave directory + STK 원시 파형 폴더 선택 + + + Choose default SoundFont + 기본 사운드글꼴 선택 + + + Choose background artwork + 배경 아트워크 선택 + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + + + + + Song + + Tempo + 탬포 + + + Master volume + 마스터 볼륨 + + + Master pitch + 마스터 피치 + + + Project saved + 저장된 프로젝트 + + + The project %1 is now saved. + 프로젝트 %1 이 지금 저장됨. + + + Project NOT saved. + 프로젝트가 저장 안됨 + + + The project %1 was not saved! + 프로젝트 %1이 저장되지 않음! + + + Import file + 파일 읽어오기 + + + MIDI sequences + 미디 시퀀스 + + + FL Studio projects + FL Studio 프로젝트 + + + Hydrogen projects + + + + All file types + + + + Empty project + 빈 프로젝트 + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + 이 프로젝트가 비어있어 내보내기가 무의미함. 몇 항목을 노래 편집기에 우선 두세요! + + + Select directory for writing exported tracks... + + + + untitled + 무제 + + + Select file for project-export... + 내보내기 위한 프로젝트 파일 선택... + + + The following errors occured while loading: + + SongEditor - - Song-Editor - 노래-편집기 - - - Play song (Space) - 노래 재생 (Space) - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - - - - Stop song (Space) - 노래 정지 (Space) - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - - - - Add sample-track - 샘플 트랙 더하기 - Could not open file 파일을 열 수 없음 @@ -4257,26 +5662,6 @@ Reason: "%2" Could not write file 파일을 쓸 수 없음 - - Add automation-track - 자동화 트랙 더하기 - - - Draw mode - 그리기 모드 - - - Edit mode (select and move) - 편집 모드(선택 및 이동) - - - Record samples from Audio-device - 오디오 기기에서 샘플 녹음 - - - Record samples from Audio-device while playing song or BB track - 노래 재생 또는 BB트랙 동안 오디오 기기에서 샘플 녹음 - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4290,10 +5675,6 @@ Reason: "%2" The file %1 seems to contain errors and therefore can't be loaded. - - Add beat/bassline - beat/bassline 더하기 - Tempo 탬포 @@ -4343,6 +5724,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + 노래-편집기 + + + Play song (Space) + 노래 재생 (Space) + + + Record samples from Audio-device + 오디오 기기에서 샘플 녹음 + + + Record samples from Audio-device while playing song or BB track + 노래 재생 또는 BB트랙 동안 오디오 기기에서 샘플 녹음 + + + Stop song (Space) + 노래 정지 (Space) + + + Add beat/bassline + beat/bassline 더하기 + + + Add sample-track + 샘플 트랙 더하기 + + + Add automation-track + 자동화 트랙 더하기 + + + Draw mode + 그리기 모드 + + + Edit mode (select and move) + 편집 모드(선택 및 이동) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + + + SpectrumAnalyzerControlDialog @@ -4369,6 +5801,13 @@ Reason: "%2" 채널 모드 + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4411,10 +5850,6 @@ Reason: "%2" Custom... 사용자... - - &Help - 도움말(&H) - Custom 사용자 @@ -4455,6 +5890,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + 자동 스크롤링 가능/불가능 + + + Enable/disable loop-points + 순환 점 가능/불가능 + + + After stopping go back to begin + 중지 후 처음으로 뒤로 이동 + + + After stopping go back to position at which playing was started + 중지 후 재생을 시작한 위치로 뒤로 이동 + + + After stopping keep position + 중지 후 위치 유지 + + + Hint + 힌트 + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + 무음 + + + Solo + 솔로 + + TrackContainer @@ -4496,6 +5977,107 @@ Please make sure you have read-permission to the file and the directory containi FLP 파일 읽어오는 중... + + TrackContentObject + + Muted + 무음 + + + + TrackContentObjectView + + Current position + 현재 위치 + + + Hint + 힌트 + + + Press <Ctrl> and drag to make a copy. + <Ctrl> 누르고 복사본을 만들기 위하여 끌기 + + + Current length + 현재 길이 + + + Press <Ctrl> for free resizing. + 자유 크기 재조정하기 위하여 <Ctrl> 누르기 + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 를 %5:%6 로) + + + Delete (middle mousebutton) + 삭제 (중간 마우스버튼) + + + Cut + 잘라내기 + + + Copy + 복사 + + + Paste + 붙여넣기 + + + Mute/unmute (<Ctrl> + middle click) + 무음/무음해제 (<Ctrl> + 중간 클릭) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + + + + Actions for this track + 이 트랙의 작업 + + + Mute + 무음 + + + Solo + 솔로 + + + Mute this track + 이 트랙을 무음 + + + Clone this track + 이 트랙을 복제 + + + Remove this track + 이 트랙을 제거 + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4639,17 +6221,6 @@ Please make sure you have read-permission to the file and the directory containi - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4752,6 +6323,17 @@ Please make sure you have read-permission to the file and the directory containi + + VisualizationWidget + + click to enable/disable visualization of master-output + + + + Click to enable + + + VstEffectControlDialog @@ -4858,11 +6440,7 @@ Please make sure you have read-permission to the file and the directory containi - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5268,77 +6846,8 @@ Please make sure you have read-permission to the file and the directory containi Sinc - - - bbEditor - Beat+Bassline Editor - Beat+Bassline 편집기 - - - Play/pause current beat/bassline (Space) - 현재 beat/bassline 재생/잠시 정지(Space) - - - Add beat/bassline - beat/bassline 더하기 - - - Add automation-track - 자동화 트랙 더하기 - - - Stop playback of current beat/bassline (Space) - 현재 beat/bassline 재생 중지 (Space) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - 현재 beat/bassline를 재생하기 위하여 여기를 클릭. beat/bassline은 끝에 도달시 자동으로 반복됩니다. - - - Click here to stop playing of current beat/bassline. - 현재 beat/bassline 재생을 정지하기 위하여 여기를 클릭. - - - Remove steps - 단계 제거 - - - Add steps - 단계 더하기 - - - - bbTCOView - - Open in Beat+Bassline-Editor - Beat+Bassline 편집기에서 ㅇ려기 - - - Reset name - 이름 초기화 - - - Change name - 이름 변경 - - - Change color - 색상 변경 - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - - - - Clone of %1 + Sample not found: %1 @@ -5538,41 +7047,6 @@ Please make sure you have read-permission to the file and the directory containi - - exportProjectDialog - - Could not open file - 파일을 열 수 없음 - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - - - - Error - - - - Error while determining file-encoder device. Please try to choose a different output format. - - - - Rendering: %1% - - - - Export project to %1 - %1로 프로젝트 내보내기 - - - - fader - - Please enter a new value between %1 and %2: - %1 과 %2 사이 새로운 값을 입력하시오: - - graphModel @@ -5674,21 +7148,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - 도움말(&H) - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - -96.0 dBV 과 6.0 dBV 사이 새로운 값을 입력하시오: - - - Please enter a new value between %1 and %2: - %1 과 %2 사이 새로운 값을 입력하시오: - - ladspaBrowserView @@ -6410,13 +7869,6 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - - - opl2instrument @@ -6870,10 +8322,6 @@ Double clicking any of the plugins will bring up information on the ports.no description 요약 없음 - - Instrument plugins - 기기 플러그인 - Incomplete monophonic imitation tb303 @@ -6926,14 +8374,6 @@ Double clicking any of the plugins will bring up information on the ports.Filter for importing MIDI-files into LMMS 미디 파일을 LMMS로 읽어오기 위한 필터 - - Instrument browser - 기기 브라우저 - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - 각 노래 편집기, Beat+Bassline 편집기 또는 기존 기기 트랙으로 끌기 - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7023,336 +8463,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Project notes - 프로젝트 박자 + Player for GIG files + - Put down your project notes here. - 프로젝트 박자를 여기에 두시오. + A multitap echo delay plugin + - Edit Actions - 작업 편집 + A native flanger plugin + - &Undo - 작업 취소(&U) + A native delay plugin + - Ctrl+Z - + An oversampling bitcrusher + - &Redo - 작업 재실행(&R) + A native eq plugin + - Ctrl+Y - - - - &Copy - 복사(&C) - - - Ctrl+C - - - - Cu&t - 잘라내기(&T) - - - Ctrl+X - - - - &Paste - 붙여넣기(&P) - - - Ctrl+V - - - - Format Actions - 형식 작업 - - - &Bold - 진하게(&B) - - - Ctrl+B - - - - &Italic - 기울임(&I) - - - Ctrl+I - - - - &Underline - 밑줄(&U) - - - Ctrl+U - - - - &Left - 왼쪽(&L) - - - Ctrl+L - - - - C&enter - 중앙(&E) - - - Ctrl+E - - - - &Right - 오른쪽(&R) - - - Ctrl+R - - - - &Justify - 양쪽 배분(&J) - - - Ctrl+J - - - - &Color... - 색상(&C)... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - 다른 이름으로... - - - - setupDialog - - Setup LMMS - LMMS 설정 - - - General settings - 일반 설정 - - - BUFFER SIZE - 버퍼 크기 - - - Reset to default-value - 기본값으로 초기화 - - - MISC - 기타 - - - Enable tooltips - 도구 도움말 가능 - - - Show restart warning after changing settings - 설정 변경후 재실행 경고 보이기 - - - Display volume as dBV - dBV로 볼륨 보이기 - - - Compress project files per default - 기본 당 프로젝트 파일 압축 - - - HQ-mode for output audio-device - 출력 오디오 기기의 HQ 모드 - - - LMMS working directory - LMMS 작업 폴더 - - - VST-plugin directory - VST-플러그인 폴더 - - - Artwork directory - 아트작업 폴더 - - - FL Studio installation directory - FL Studio 설치 폴더 - - - STK rawwave directory - STK 원시 파형 폴더 - - - Performance settings - 실행 설정 - - - UI effects vs. performance - UI 효과 대 실행 - - - Audio settings - 오디오 설정 - - - AUDIO INTERFACE - 오디오 인터페이스 - - - MIDI settings - 미디 설정 - - - MIDI INTERFACE - 미디 인터페이스 - - - OK - 확인 - - - Cancel - 취소 - - - Restart LMMS - LMMS 재실행 - - - Please note that most changes won't take effect until you restart LMMS! - LMMS 재실행 전까지는 변경이 영향을 미치지 않습니다. - - - Frames: %1 -Latency: %2 ms - - 프레임: %1 -래턴시: %2 ms - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - - - - Choose LMMS working directory - LMMS 작업 폴더 선택 - - - Choose your VST-plugin directory - VST 플러그인 폴더 선택 - - - Choose artwork-theme directory - 아트워크 테마 폴더 선택 - - - Choose FL Studio installation directory - FL Studio 설치 폴더 선택 - - - Choose LADSPA plugin directory - LADSPA 플러그인 폴더 선택 - - - Choose STK rawwave directory - STK 원시 파형 폴더 선택 - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - - - - Paths - 경로 - - - LADSPA plugin paths - LADSPA 플러그인 폴더 - - - Default Soundfont File - 기본 사운드글꼴 파일 - - - Background artwork - 배경 아트워크 - - - Choose default SoundFont - 기본 사운드글꼴 선택 - - - Choose background artwork - 배경 아트워크 선택 - - - One instrument track window mode + JACK (JACK Audio Connection Kit) - Compact track buttons + OSS Raw-MIDI (Open Sound System) - Sync VST plugins to host playback + SDL (Simple DirectMedia Layer) - Enable note labels in piano roll + PulseAudio (bad latency!) - Enable waveform display by default + Dummy (no MIDI support) - Smooth scroll in Song Editor + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Enable auto save feature + PortAudio - Show playback cursor in AudioFileProcessor + Dummy (no sound output) - Keep effects running even without input + ALSA (Advanced Linux Sound Architecture) + + + + OSS (Open Sound System) + + + + WinMM MIDI + + + + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7410,6 +8597,10 @@ Latency: %2 ms Chorus Depth 코러스 깊이 + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7655,77 +8846,6 @@ Latency: %2 ms - - song - - Tempo - 탬포 - - - Master volume - 마스터 볼륨 - - - Master pitch - 마스터 피치 - - - Project saved - 저장된 프로젝트 - - - The project %1 is now saved. - 프로젝트 %1 이 지금 저장됨. - - - Project NOT saved. - 프로젝트가 저장 안됨 - - - The project %1 was not saved! - 프로젝트 %1이 저장되지 않음! - - - Import file - 파일 읽어오기 - - - untitled - 무제 - - - Select file for project-export... - 내보내기 위한 프로젝트 파일 선택... - - - Empty project - 빈 프로젝트 - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - 이 프로젝트가 비어있어 내보내기가 무의미함. 몇 항목을 노래 편집기에 우선 두세요! - - - MIDI sequences - 미디 시퀀스 - - - FL Studio projects - FL Studio 프로젝트 - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7782,157 +8902,6 @@ Latency: %2 ms 오른쪽에서 오른쪽 - - timeLine - - Enable/disable auto-scrolling - 자동 스크롤링 가능/불가능 - - - Enable/disable loop-points - 순환 점 가능/불가능 - - - After stopping go back to begin - 중지 후 처음으로 뒤로 이동 - - - After stopping go back to position at which playing was started - 중지 후 재생을 시작한 위치로 뒤로 이동 - - - After stopping keep position - 중지 후 위치 유지 - - - Hint - 힌트 - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - 무음 - - - Solo - 솔로 - - - - trackContentObject - - Muted - 무음 - - - - trackContentObjectView - - Current position - 현재 위치 - - - Hint - 힌트 - - - Press <Ctrl> and drag to make a copy. - <Ctrl> 누르고 복사본을 만들기 위하여 끌기 - - - Current length - 현재 길이 - - - Press <Ctrl> for free resizing. - 자유 크기 재조정하기 위하여 <Ctrl> 누르기 - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 를 %5:%6 로) - - - Delete (middle mousebutton) - 삭제 (중간 마우스버튼) - - - Cut - 잘라내기 - - - Copy - 복사 - - - Paste - 붙여넣기 - - - Mute/unmute (<Ctrl> + middle click) - 무음/무음해제 (<Ctrl> + 중간 클릭) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - - - - Actions for this track - 이 트랙의 작업 - - - Mute - 무음 - - - Mute this track - 이 트랙을 무음 - - - Solo - 솔로 - - - Clone this track - 이 트랙을 복제 - - - Remove this track - 이 트랙을 제거 - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7943,15 +8912,6 @@ Latency: %2 ms Please wait while loading VST-plugin... VST 플러그인 읽은 동안 잠시 대기... - - Failed loading VST-plugin - VST 플러그인 읽는 중 오류 - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - - vibed @@ -8162,10 +9122,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. - - &Help - - Use a sine-wave for current oscillator. @@ -8191,17 +9147,6 @@ The LED in the lower right corner of the waveform editor determines whether the - - visualizationWidget - - click to enable/disable visualization of master-output - - - - Click to enable - - - voiceObject diff --git a/data/locale/nl.ts b/data/locale/nl.ts index c6f83b30d..e77143ee9 100644 --- a/data/locale/nl.ts +++ b/data/locale/nl.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME CLIENT-NAAM @@ -324,18 +325,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + Open aub een automation pattern met het context menu van een controller! + + + Values copied + Waarden gekopieerd + + + All selected values were copied to the clipboard. + Alle geselecteerde waarden zijn naar het klembord gekopieerd. + + + + AutomationEditorWindow Play/pause current pattern (Space) Huidige pattern afspelen/pauseren (Spatie) - - Stop playing of current pattern (Space) - Afspelen huidige pattern stoppen (Spatie) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + + Stop playing of current pattern (Space) + Afspelen huidige pattern stoppen (Spatie) + Click here if you want to stop playing of the current pattern. @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) Wis modus (Shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - - Cut selected values (Ctrl+X) - Knip geselecteerde waarden (Ctrl+X) - - - Copy selected values (Ctrl+C) - Kopieer geselecteerde waarden (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Plak waarden van klembord (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the values from the clipboard will be pasted at the first visible measure. - - - - Automation Editor - no pattern - Automation-Editor - geen Pattern - - - Automation Editor - %1 - Automation-Editor - %1 - - - Please open an automation pattern with the context menu of a control! - Open aub een automation pattern met het context menu van een controller! - - - Values copied - Waarden gekopieerd - - - All selected values were copied to the clipboard. - Alle geselecteerde waarden zijn naar het klembord gekopieerd. - Discrete progression @@ -413,7 +401,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -429,13 +421,41 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) + Knip geselecteerde waarden (Ctrl+X) + + + Copy selected values (Ctrl+C) + Kopieer geselecteerde waarden (Ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the values from the clipboard will be pasted at the first visible measure. + + + + Tension: + + + + Automation Editor - no pattern + Automation-Editor - geen Pattern + + + Automation Editor - %1 + Automation-Editor - %1 + AutomationPattern @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp + + BBEditor + + Beat+Bassline Editor + Beat+Bassline Editor + + + Play/pause current beat/bassline (Space) + Huidige beat/bassline afspelen/pauseren (Spatie) + + + Stop playback of current beat/bassline (Space) + + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + + + + Click here to stop playing of current beat/bassline. + + + + Add beat/bassline + Beat/Bassline toevoegen + + + Add automation-track + + + + Remove steps + Steps verwijderen + + + Add steps + Steps toevoegen + + + + BBTCOView + + Open in Beat+Bassline-Editor + In Beat+Bassline-Editor openen + + + Reset name + Naam herstellen + + + Change name + + + + Change color + Kleur veranderen + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Beat/Bassline %1 + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &Help + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin + + + CrossoverEQControlDialog - &Help - &Help + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -907,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin - - &Help - &Help - EnvelopeAndLfoParameters @@ -1150,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1288,6 +1898,42 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + Kan bestand niet openen + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + + + + Export project to %1 + Exporteer project naar %1 + + + Error + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + Rendering: %1% + + + + + Fader + + Please enter a new value between %1 and %2: + Voer aub. een waarde in tussen %1 en %2 in: + FileBrowser @@ -1323,6 +1969,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + + + + White Noise Amount: + + + FxLine @@ -1356,8 +2072,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - &Help + Remove &unused channels + @@ -1385,9 +2101,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1400,6 +2113,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel + + Solo + + + + Solo FX channel + + FxRoute @@ -1408,6 +2129,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + + + + Patch + + + + Gain + + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1999,6 +2782,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2097,6 +2891,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2187,6 +3009,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2321,6 +3147,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + VERSCHILLENDE INSTELLINGEN + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Voer aub. een waarde tussen -96.0 dBV en 6.0 dBV in: + + + Please enter a new value between %1 and %2: + Voer aub. een waarde in tussen %1 en %2 in: + LadspaControl @@ -2357,10 +3206,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. @@ -2482,10 +3327,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2499,6 +3340,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2519,10 +3364,6 @@ Double click to pick a file. Please make sure you have write-access to the file and try again. - - &Project - &Project - &New &Nieuw @@ -2567,10 +3408,6 @@ Please make sure you have write-access to the file and try again. &Help &Help - - Online help - - Help Help @@ -2675,14 +3512,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? Het huidige project is gewijzigd sinds de laatste keer dat het is opgeslagen. Wil je het nu opslaan? - - Open project - Open project - - - Save project - Sla project op - Help not available Hulp niet beschikbaar @@ -2692,38 +3521,6 @@ Please make sure you have write-access to the file and try again. Please visit http://lmms.sf.net/wiki for documentation on LMMS. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2732,14 +3529,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2752,10 +3541,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes - - &Recently opened projects - - Undo @@ -2768,6 +3553,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2803,7 +3644,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE APPARAAT @@ -3271,6 +4112,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + Sinus golf + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + Driehoeks golf + + + Saw wave + Zaagtand golf + + + Ramp wave + + + + Square wave + Vierkants golf + + + Moog saw wave + + + + Abs. sine wave + + + + Random + + + + Random smooth + + MonstroView @@ -3443,6 +4376,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3721,6 +4689,14 @@ volume van de steps is met het muiswiel te veranderen DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3752,29 +4728,13 @@ volume van de steps is met het muiswiel te veranderen Amount Multiplicator + + Treshold + + PianoRoll - - Cut selected notes (Ctrl+X) - Knip geselecteerde noten (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Kopieer geselecteerde noten (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Plak noten van klembord (Ctrl+V) - - - Play/pause current pattern (Space) - Huidige pattern afspelen/pauseren (Spatie) - - - Stop playing of current pattern (Space) - Afspelen huidige pattern stoppen (Spatie) - Piano-Roll - %1 Piano-Roll - %1 @@ -3787,58 +4747,10 @@ volume van de steps is met het muiswiel te veranderen Please open a pattern by double-clicking on it! Open aub. een pattern door er op te dubbel-klikken! - - Record notes from MIDI-device/channel-piano - Noten van MIDI-apparaat/kanaal-piano opnemen - Last note Laatste noot - - Draw mode (Shift+D) - Teken modus (Shift+D) - - - Erase mode (Shift+E) - Wis modus (Shift+E) - - - Select mode (Shift+S) - Selecteer modus (Shift+S) - - - Record notes from MIDI-device/channel-piano while playing song or BB track - - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock @@ -3851,26 +4763,6 @@ volume van de steps is met het muiswiel te veranderen Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3895,26 +4787,6 @@ volume van de steps is met het muiswiel te veranderen No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3936,6 +4808,117 @@ volume van de steps is met het muiswiel te veranderen Voer aub. een waarde in tussen %1 en %2 in: + + PianoRollWindow + + Play/pause current pattern (Space) + Huidige pattern afspelen/pauseren (Spatie) + + + Record notes from MIDI-device/channel-piano + Noten van MIDI-apparaat/kanaal-piano opnemen + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + Stop playing of current pattern (Space) + Afspelen huidige pattern stoppen (Spatie) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + Teken modus (Shift+D) + + + Erase mode (Shift+E) + Wis modus (Shift+E) + + + Select mode (Shift+S) + Selecteer modus (Shift+S) + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + Knip geselecteerde noten (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Kopieer geselecteerde noten (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Plak noten van klembord (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3967,6 +4950,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + Instrument Plugins + + + Instrument browser + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + ProjectNotes + + Project notes + Project notities + + + Put down your project notes here. + Plaats hier je Project notities. + + + Edit Actions + Bewerken + + + &Undo + &Ongedaan maken + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Herstellen + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Kopieren + + + Ctrl+C + Ctrl+C + + + Cu&t + K&nippen + + + Ctrl+X + Ctrl+X + + + &Paste + &Plakken + + + Ctrl+V + Ctrl+V + + + Format Actions + Opmaak + + + &Bold + &Vet + + + Ctrl+B + Ctrl+B + + + &Italic + &Cursief + + + Ctrl+I + Ctrl+I + + + &Underline + &Onderstrepen + + + Ctrl+U + Ctrl+U + + + &Left + &Links + + + Ctrl+L + Ctrl+L + + + C&enter + C&entreren + + + Ctrl+E + Ctrl+E + + + &Right + &Rechts + + + Ctrl+R + Ctrl+R + + + &Justify + &Uitgevuld + + + Ctrl+J + Ctrl+J + + + &Color... + &Kleur... + + ProjectRenderer @@ -4117,6 +5234,13 @@ Reason: "%2" + + RenameDialog + + Rename... + Hernoemen... + + SampleBuffer @@ -4205,6 +5329,10 @@ Reason: "%2" Volume Volume + + Panning + + SampleTrackView @@ -4220,13 +5348,309 @@ Reason: "%2" VOL + + Panning + + + + Panning: + + + + PAN + + + + + SetupDialog + + Setup LMMS + LMMS instellen + + + General settings + Algemene instellingen + + + BUFFER SIZE + BUFFERGROOTTE + + + Reset to default-value + Terugzetten naar standaardwaarden + + + MISC + VERSCHILLENDE INSTELLINGEN + + + Enable tooltips + + + + Show restart warning after changing settings + + + + Display volume as dBV + Volume in dBV tonen + + + Compress project files per default + + + + One instrument track window mode + + + + HQ-mode for output audio-device + + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + + + + LMMS working directory + LMMS werkmap + + + VST-plugin directory + VST-Plugin map + + + Artwork directory + Artwork map + + + Background artwork + + + + FL Studio installation directory + FL Studio installatie map + + + LADSPA plugin paths + + + + STK rawwave directory + + + + Default Soundfont File + + + + Performance settings + Performance instellingen + + + UI effects vs. performance + UI effecten vs. performance + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + Audio instellingen + + + AUDIO INTERFACE + AUDIO INTERFACE + + + MIDI settings + MIDI Instellingen + + + MIDI INTERFACE + MIDI INTERFACE + + + OK + OK + + + Cancel + Annuleren + + + Restart LMMS + LMMS herstarten + + + Please note that most changes won't take effect until you restart LMMS! + Houd er rekening mee dat je LMMS opnieuw moet opstarten om sommige instellingen te activeren! + + + Frames: %1 +Latency: %2 ms + Frames: %1 +Vertraging: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Hier kun je de interne buffer-grootte instellen welke door LMMS gebruikt zal worden. Lagere waarden zorgen voor een lagere latency (vertraging) maar kunnen de geluidskwaliteit en de performance wel negatief beinvloeden. Dit geld zeker voor oudere computers en systemen zonder realtime-kernel. + + + Choose LMMS working directory + Kies LMMS-werkmap + + + Choose your VST-plugin directory + Kies je VST-Plugin map + + + Choose artwork-theme directory + Artwork-thema map kiezen + + + Choose FL Studio installation directory + Kies FL Studio installatie map + + + Choose LADSPA plugin directory + + + + Choose STK rawwave directory + + + + Choose default SoundFont + + + + Choose background artwork + + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Hier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, JACK, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Hier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen. + + + + Song + + Tempo + Tempo + + + Master volume + Master volume + + + Master pitch + Master toonhoogte + + + Project saved + Project opgeslagen + + + The project %1 is now saved. + Het project %1 is nu opgeslagen. + + + Project NOT saved. + Project NIET opgeslagen. + + + The project %1 was not saved! + Het project %1 werd niet opgeslagen! + + + Import file + Bestand importeren + + + MIDI sequences + + + + FL Studio projects + + + + Hydrogen projects + + + + All file types + + + + Empty project + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + Select directory for writing exported tracks... + + + + untitled + naamloos + + + Select file for project-export... + Selecteer bestand voor exporteren project... + + + The following errors occured while loading: + + SongEditor - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Klik hier, wanneer je het afspelen van de song wilt stoppen. De song-position-marker zal weer naar het begin van je song worden gezet. - Could not open file Kan bestand niet openen @@ -4235,50 +5659,6 @@ Reason: "%2" Could not write file Kan bestand niet schrijven - - Song-Editor - Song-Editor - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Klik hier, als je de gehele song wil afspelen. Het afspelen start bij de song-positie-marker (groen). Je kunt ook verplaatsen tijdens het afspelen. - - - Play song (Space) - Song afspelen (Spatie) - - - Stop song (Space) - Stop afspelen song (Spatie) - - - Add beat/bassline - Beat/Bassline toevoegen - - - Add sample-track - Sample spoor toevoegen - - - Draw mode - Teken modus - - - Edit mode (select and move) - Bewerk modus (selecteren en verplaatsen) - - - Add automation-track - - - - Record samples from Audio-device - - - - Record samples from Audio-device while playing song or BB track - - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4341,6 +5721,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + Song-Editor + + + Play song (Space) + Song afspelen (Spatie) + + + Record samples from Audio-device + + + + Record samples from Audio-device while playing song or BB track + + + + Stop song (Space) + Stop afspelen song (Spatie) + + + Add beat/bassline + Beat/Bassline toevoegen + + + Add sample-track + Sample spoor toevoegen + + + Add automation-track + + + + Draw mode + Teken modus + + + Edit mode (select and move) + Bewerk modus (selecteren en verplaatsen) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Klik hier, als je de gehele song wil afspelen. Het afspelen start bij de song-positie-marker (groen). Je kunt ook verplaatsen tijdens het afspelen. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Klik hier, wanneer je het afspelen van de song wilt stoppen. De song-position-marker zal weer naar het begin van je song worden gezet. + + SpectrumAnalyzerControlDialog @@ -4367,6 +5798,13 @@ Reason: "%2" + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4409,10 +5847,6 @@ Reason: "%2" Custom... - - &Help - &Help - Custom @@ -4453,6 +5887,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + Automatisch scrollen in-/uitschakelen + + + Enable/disable loop-points + Loop-punten in-/uitschakelen + + + After stopping go back to begin + Na stoppen terug naar begin + + + After stopping go back to position at which playing was started + Na stoppen terug naar positie waar afspelen werd gestart + + + After stopping keep position + Na stoppen op positie blijven + + + Hint + Tip + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + + + + Solo + + + TrackContainer @@ -4496,6 +5976,107 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob Importeren FLP-bestand... + + TrackContentObject + + Muted + + + + + TrackContentObjectView + + Current position + Huidige positie + + + Hint + Tip + + + Press <Ctrl> and drag to make a copy. + + + + Current length + Huidige lengte + + + Press <Ctrl> for free resizing. + Druk <Ctrl> voor vrije grootteverandering. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 tot %5:%6) + + + Delete (middle mousebutton) + Verwijderen (middelste muisknop) + + + Cut + Knippen + + + Copy + Kopieren + + + Paste + Plakken + + + Mute/unmute (<Ctrl> + middle click) + Dempen/geluid aan (<Ctrl> + middelklik) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Druk <Ctrl> tijdens klikken op move-grip om een nieuwe drag'n'drop-actie te starten. + + + Actions for this track + Acties voor dit spoor + + + Mute + Dempen + + + Solo + + + + Mute this track + + + + Clone this track + Dit spoor klonen + + + Remove this track + Dit spoor verwijderen + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4639,17 +6220,6 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4752,6 +6322,17 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob + + VisualizationWidget + + click to enable/disable visualization of master-output + Klik om de master-output visuallisatie in- of uit te schakelen + + + Click to enable + + + VstEffectControlDialog @@ -4858,11 +6439,7 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5268,77 +6845,8 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob Sinc - - - bbEditor - Play/pause current beat/bassline (Space) - Huidige beat/bassline afspelen/pauseren (Spatie) - - - Beat+Bassline Editor - Beat+Bassline Editor - - - Add beat/bassline - Beat/Bassline toevoegen - - - Add automation-track - - - - Stop playback of current beat/bassline (Space) - - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - - - - Click here to stop playing of current beat/bassline. - - - - Remove steps - Steps verwijderen - - - Add steps - Steps toevoegen - - - - bbTCOView - - Open in Beat+Bassline-Editor - In Beat+Bassline-Editor openen - - - Reset name - Naam herstellen - - - Change name - - - - Change color - Kleur veranderen - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - Beat/Bassline %1 - - - Clone of %1 + Sample not found: %1 @@ -5538,41 +7046,6 @@ Zorg ervoor dat je schrijf-bevoegdheid hebt voor deze bestanden en mapen en prob - - exportProjectDialog - - Could not open file - Kan bestand niet openen - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - - - - Error - - - - Error while determining file-encoder device. Please try to choose a different output format. - - - - Rendering: %1% - - - - Export project to %1 - Exporteer project naar %1 - - - - fader - - Please enter a new value between %1 and %2: - Voer aub. een waarde in tussen %1 en %2 in: - - graphModel @@ -5674,21 +7147,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - &Help - - - Please enter a new value between %1 and %2: - Voer aub. een waarde in tussen %1 en %2 in: - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Voer aub. een waarde tussen -96.0 dBV en 6.0 dBV in: - - ladspaBrowserView @@ -6410,13 +7868,6 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - &Help - - opl2instrument @@ -6866,10 +8317,6 @@ Double clicking any of the plugins will bring up information on the ports. pluginBrowser - - Instrument plugins - Instrument Plugins - VST-host for using VST(i)-plugins within LMMS VST-Host voor bebruik van VST(i)-Plugins binnen LMMS @@ -6926,14 +8373,6 @@ Double clicking any of the plugins will bring up information on the ports.plugin for using arbitrary LADSPA-effects inside LMMS. - - Instrument browser - - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7023,335 +8462,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Put down your project notes here. - Plaats hier je Project notities. + Player for GIG files + - Project notes - Project notities + A multitap echo delay plugin + - Edit Actions - Bewerken + A native flanger plugin + - &Undo - &Ongedaan maken + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - &Herstellen + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &Kopieren - - - Ctrl+C - Ctrl+C - - - Cu&t - K&nippen - - - Ctrl+X - Ctrl+X - - - &Paste - &Plakken - - - Ctrl+V - Ctrl+V - - - Format Actions - Opmaak - - - &Bold - &Vet - - - Ctrl+B - Ctrl+B - - - &Italic - &Cursief - - - Ctrl+I - Ctrl+I - - - &Underline - &Onderstrepen - - - Ctrl+U - Ctrl+U - - - &Left - &Links - - - Ctrl+L - Ctrl+L - - - C&enter - C&entreren - - - Ctrl+E - Ctrl+E - - - &Right - &Rechts - - - Ctrl+R - Ctrl+R - - - &Justify - &Uitgevuld - - - Ctrl+J - Ctrl+J - - - &Color... - &Kleur... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Hernoemen... - - - - setupDialog - - Setup LMMS - LMMS instellen - - - General settings - Algemene instellingen - - - BUFFER SIZE - BUFFERGROOTTE - - - Reset to default-value - Terugzetten naar standaardwaarden - - - MISC - VERSCHILLENDE INSTELLINGEN - - - Audio settings - Audio instellingen - - - AUDIO INTERFACE - AUDIO INTERFACE - - - MIDI settings - MIDI Instellingen - - - MIDI INTERFACE - MIDI INTERFACE - - - OK - OK - - - Cancel - Annuleren - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Hier kun je de interne buffer-grootte instellen welke door LMMS gebruikt zal worden. Lagere waarden zorgen voor een lagere latency (vertraging) maar kunnen de geluidskwaliteit en de performance wel negatief beinvloeden. Dit geld zeker voor oudere computers en systemen zonder realtime-kernel. - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Hier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, JACK, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Hier kun je je audio-interface instellen. Afhankelijk van de configuratie van je systeem gedurende de compilering, kun je kiezen tussen ALSA, OSS en meer. Hieronder vind je een gedeelte waar je de instellingen van de betreffende interface kunt wijzigen. - - - Restart LMMS - LMMS herstarten - - - Please note that most changes won't take effect until you restart LMMS! - Houd er rekening mee dat je LMMS opnieuw moet opstarten om sommige instellingen te activeren! - - - LMMS working directory - LMMS werkmap - - - VST-plugin directory - VST-Plugin map - - - Choose LMMS working directory - Kies LMMS-werkmap - - - Choose your VST-plugin directory - Kies je VST-Plugin map - - - Performance settings - Performance instellingen - - - UI effects vs. performance - UI effecten vs. performance - - - Frames: %1 -Latency: %2 ms - Frames: %1 -Vertraging: %2 ms - - - Artwork directory - Artwork map - - - Choose artwork-theme directory - Artwork-thema map kiezen - - - Display volume as dBV - Volume in dBV tonen - - - FL Studio installation directory - FL Studio installatie map - - - Choose FL Studio installation directory - Kies FL Studio installatie map - - - Enable tooltips + JACK (JACK Audio Connection Kit) - Show restart warning after changing settings + OSS Raw-MIDI (Open Sound System) - Compress project files per default + SDL (Simple DirectMedia Layer) - HQ-mode for output audio-device + PulseAudio (bad latency!) - STK rawwave directory + Dummy (no MIDI support) - Choose LADSPA plugin directory + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Choose STK rawwave directory + PortAudio - Paths + Dummy (no sound output) - LADSPA plugin paths + ALSA (Advanced Linux Sound Architecture) - Default Soundfont File + OSS (Open Sound System) - Background artwork + WinMM MIDI - Choose default SoundFont - - - - Choose background artwork - - - - One instrument track window mode - - - - Compact track buttons - - - - Sync VST plugins to host playback - - - - Enable note labels in piano roll - - - - Enable waveform display by default - - - - Smooth scroll in Song Editor - - - - Enable auto save feature - - - - Show playback cursor in AudioFileProcessor - - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7409,6 +8596,10 @@ Vertraging: %2 ms Chorus Depth + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7654,77 +8845,6 @@ Vertraging: %2 ms - - song - - Tempo - Tempo - - - Master volume - Master volume - - - Master pitch - Master toonhoogte - - - Project saved - Project opgeslagen - - - The project %1 is now saved. - Het project %1 is nu opgeslagen. - - - Project NOT saved. - Project NIET opgeslagen. - - - The project %1 was not saved! - Het project %1 werd niet opgeslagen! - - - Import file - Bestand importeren - - - untitled - naamloos - - - Select file for project-export... - Selecteer bestand voor exporteren project... - - - Empty project - - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - - - - MIDI sequences - - - - FL Studio projects - - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7781,169 +8901,8 @@ Vertraging: %2 ms - - timeLine - - Enable/disable auto-scrolling - Automatisch scrollen in-/uitschakelen - - - Enable/disable loop-points - Loop-punten in-/uitschakelen - - - After stopping go back to begin - Na stoppen terug naar begin - - - After stopping go back to position at which playing was started - Na stoppen terug naar positie waar afspelen werd gestart - - - After stopping keep position - Na stoppen op positie blijven - - - Hint - Tip - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - - - - Solo - - - - - trackContentObject - - Muted - - - - - trackContentObjectView - - Current position - Huidige positie - - - Hint - Tip - - - Press <Ctrl> and drag to make a copy. - - - - Current length - Huidige lengte - - - Press <Ctrl> for free resizing. - Druk <Ctrl> voor vrije grootteverandering. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 tot %5:%6) - - - Delete (middle mousebutton) - Verwijderen (middelste muisknop) - - - Cut - Knippen - - - Copy - Kopieren - - - Paste - Plakken - - - Mute/unmute (<Ctrl> + middle click) - Dempen/geluid aan (<Ctrl> + middelklik) - - - - trackOperationsWidget - - Clone this track - Dit spoor klonen - - - Remove this track - Dit spoor verwijderen - - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Druk <Ctrl> tijdens klikken op move-grip om een nieuwe drag'n'drop-actie te starten. - - - Actions for this track - Acties voor dit spoor - - - Mute - Dempen - - - Mute this track - - - - Solo - - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument - - Failed loading VST-plugin - VST-plugin laden mislukt - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - De VST-plugin %1 kan om onbekende reden niet worden geladen. -Als het wel werkt met andere VST-software onder Linux, neem dan contact op met een LMMS-ontwikkelaar! - Loading plugin Plugin laden @@ -8181,10 +9140,6 @@ De LED in de rechter benedenhoek van de golfvorm bewerker geeft aan of de snaar Click here to normalize waveform. Klik hier, om de golfvorm te normaliseren. - - &Help - &Help - Use a sine-wave for current oscillator. @@ -8210,17 +9165,6 @@ De LED in de rechter benedenhoek van de golfvorm bewerker geeft aan of de snaar - - visualizationWidget - - click to enable/disable visualization of master-output - Klik om de master-output visuallisatie in- of uit te schakelen - - - Click to enable - - - voiceObject diff --git a/data/locale/pl.ts b/data/locale/pl.ts index 57cae23cc..9cab92906 100644 --- a/data/locale/pl.ts +++ b/data/locale/pl.ts @@ -55,6 +55,14 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: LMMS LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -199,10 +207,6 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -229,16 +233,13 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Wydaje się, że serwer JACK został wyłączony i uruchomienie nowej instancji nie powiodło się więc LMMS nie może kontynuować pracy. Należy zapisać projekt i uruchomić serwer JACK i LMMSa ponownie. - - - AudioJack::setupWidget CLIENT-NAME - NAZWA-KLIENTA + NAZWA-KLIENTA CHANNELS - KANAŁY + KANAŁY @@ -330,70 +331,6 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: AutomationEditor - - Play/pause current pattern (Space) - Odtwórz/zatrzymaj aktualny pattern (Spacja) - - - Stop playing of current pattern (Space) - Zatrzymaj odtwarzanie aktualnego patternu (Spacja) - - - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Kliknij tutaj jeśli chcesz odtworzyć aktualny pattern. Ta opcja jest przydatna przy edytowaniu patternu - zostanie on automatycznie zapętlony. - - - Click here if you want to stop playing of the current pattern. - Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie aktualnego patternu. - - - Draw mode (Shift+D) - Tryb rysowania (Shift+D) - - - Erase mode (Shift+E) - Tryb wymazywania (Shift+E) - - - Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - Kliknij tutaj aby przejść do trybu rysowania. W tym trybie możesz dodawać i przemieszczać pojedyńcze wartości. To domyślny tryb, który będziesz wykorzystywać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. - - - Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - Kliknij tutaj aby przejść do trybu kasowania. W tym trybie możesz usuwać pojedyńcze wartości. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'. - - - Cut selected values (Ctrl+X) - Wytnij zaznaczone elementy (Ctrl+X) - - - Copy selected values (Ctrl+C) - Skopiuj zaznaczone elementy (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Wklej zaznaczone elementy (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Kliknij tutaj a zaznaczone elementy zostaną wycięte i umieszczone w schowku. Możesz je wkleić gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Kliknij tutaj a zaznaczone elementy zostaną skopiowane do schowka. Możesz je wkleić gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. - - - Click here and the values from the clipboard will be pasted at the first visible measure. - Kliknij tutaj a elementy ze schowka zostaną przeklejone w miejsce zaznaczenia. - - - Automation Editor - no pattern - Edytor automatyki - brak patternu - - - Automation Editor - %1 - Edytor Automatyki - %1 - Please open an automation pattern with the context menu of a control! Otwórz pattern automatyki za pomocą menu kontekstowego regulatora! @@ -406,6 +343,57 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: All selected values were copied to the clipboard. Wszystkie zaznaczone wartości zostały skopiowane do schowka. + + + AutomationEditorWindow + + Play/pause current pattern (Space) + Odtwórz/zatrzymaj aktualny pattern (Spacja) + + + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + Kliknij tutaj jeśli chcesz odtworzyć aktualny pattern. Ta opcja jest przydatna przy edytowaniu patternu - zostanie on automatycznie zapętlony. + + + Stop playing of current pattern (Space) + + + + Click here if you want to stop playing of the current pattern. + Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie aktualnego patternu. + + + Draw mode (Shift+D) + Tryb rysowania (Shift+D) + + + Erase mode (Shift+E) + Tryb wymazywania (Shift+E) + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. + Kliknij tutaj aby przejść do trybu rysowania. W tym trybie możesz dodawać i przemieszczać pojedyńcze wartości. To domyślny tryb, który będziesz wykorzystywać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. + + + Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. + Kliknij tutaj aby przejść do trybu kasowania. W tym trybie możesz usuwać pojedyńcze wartości. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'. + Discrete progression @@ -419,7 +407,11 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -435,13 +427,41 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: - Tension value for spline + Cut selected values (Ctrl+X) + Wytnij zaznaczone elementy (Ctrl+X) + + + Copy selected values (Ctrl+C) + Skopiuj zaznaczone elementy (Ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Kliknij tutaj a zaznaczone elementy zostaną wycięte i umieszczone w schowku. Możesz je wkleić gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Kliknij tutaj a zaznaczone elementy zostaną skopiowane do schowka. Możesz je wkleić gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. + + + Click here and the values from the clipboard will be pasted at the first visible measure. + Kliknij tutaj a elementy ze schowka zostaną przeklejone w miejsce zaznaczenia. + + + Tension: + + Automation Editor - no pattern + Edytor automatyki - brak patternu + + + Automation Editor - %1 + Edytor Automatyki - %1 + AutomationPattern @@ -488,6 +508,14 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: Set/clear record Ustaw/wyczyść nagranie + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -496,6 +524,79 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: Ścieżka automatyki + + BBEditor + + Beat+Bassline Editor + Edytor Perkusji i Basu + + + Play/pause current beat/bassline (Space) + Odtwórz/Zapałzuj bieżącą linię perkusyjną/basową (Spacja) + + + Stop playback of current beat/bassline (Space) + Zatrzymaj odtwarzanie bieżącej linii perkusyjnej/basowej (Spacja) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Kliknij tutaj, aby odtworzyć bieżącą linię perkusyjną/basową. Zostanie ona automatycznie zapętlona. + + + Click here to stop playing of current beat/bassline. + Kliknij tutaj, aby zatrzymać odtwarzanie bieżącej linii perkusyjnej/basowej. + + + Add beat/bassline + + + + Add automation-track + Dodaj ścieżkę automatyki + + + Remove steps + Usuń kroki + + + Add steps + Dodaj kroki + + + + BBTCOView + + Open in Beat+Bassline-Editor + Otwórz w Edytorze Perkusji i Basu + + + Reset name + Zresetuj nazwę + + + Change name + Zmień nazwę + + + Change color + Zmień kolor + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Perkusja/Bas %1 + + + Clone of %1 + Duplikat %1 + + BassBoosterControlDialog @@ -538,6 +639,100 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: Współczynnik + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + GAIN + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Tempo + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + + + + Help (not available) + + + CarlaInstrumentView @@ -656,9 +851,125 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: &Remove this plugin &Usuń tę wtyczkę + + + CrossoverEQControlDialog - &Help - &Pomoc + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Tempo + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -786,6 +1097,60 @@ Zauważone błędy i propozycje zmian tłumaczenia proszę zgłaszać na e-mail: Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -925,10 +1290,6 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek &Remove this plugin &Usuń tę wtyczkę - - &Help - &Pomoc - EnvelopeAndLfoParameters @@ -1168,6 +1529,255 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Wzmocnienie + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Częstotliwość: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1306,6 +1916,43 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + Nie można otworzyć pliku + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Nie da się otworzyć pliku %1 do zapisu. +Upewnij się, że masz uprawnienia zapisu do tego pliku i katalogu w którym się znajduje a następnie spróbuj ponownie! + + + Export project to %1 + Eksport projektu do %1 + + + Error + Błąd + + + Error while determining file-encoder device. Please try to choose a different output format. + Wystąpił błąd podczas określania enkodera. Spróbuj wybrać inny format wyjściowy. + + + Rendering: %1% + Rendering: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Wprowadź nową wartość pomiędzy %1 a %2: + FileBrowser @@ -1341,6 +1988,76 @@ Prawoklik otwiera menu kontekstowe z pomocą którego można zmienić porządek --- Pliki preinstalowane --- + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + Szum + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + Szum + + + White Noise Amount: + + + FxLine @@ -1374,7 +2091,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help + Remove &unused channels @@ -1403,9 +2120,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 FX Fader %1 @@ -1418,6 +2132,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel Wycisz ten kanał efektowy + + Solo + Solo + + + Solo FX channel + + FxRoute @@ -1426,6 +2148,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + Bank + + + Patch + Próbka + + + Gain + Wzmocnienie + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Wybierz próbkę + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Wzmocnienie + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2017,6 +2801,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2115,6 +2910,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2205,6 +3028,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2339,6 +3166,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + DODATKOWE + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Wprowadź nową wartość pomiędzy -96.0 dBV a 6.0 dBV: + + + Please enter a new value between %1 and %2: + Wprowadź nową wartość pomiędzy %1 a %2: + LadspaControl @@ -2375,10 +3225,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - Efekt - Unknown LADSPA plugin %1 requested. Nieznana wtyczka LADSPA %1 żądanie. @@ -2500,10 +3346,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. Kliknij tutaj aby przestawić kształt fali na prostokątny. - - Click here for a a moog saw-wave. - Kliknij tutaj aby przestawić kształt fali na piłę Moog'a. - Click here for an exponential wave. Kliknij tutaj aby przestawić kształt fali na wykładniczy. @@ -2517,6 +3359,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2538,10 +3384,6 @@ Please make sure you have write-access to the file and try again. Nie można zapisać pliku konfiguracyjnego %1. Prawdopodobnie nie masz uprawnień zapisu do tego pliku. Upewnij się, że masz prawo zapisu do tego pliku i spróbuj ponownie. - - &Project - &Projekt - &New &Nowy @@ -2586,10 +3428,6 @@ Upewnij się, że masz prawo zapisu do tego pliku i spróbuj ponownie.&Help &Pomoc - - Online help - Pomoc on-line - Help Pomoc @@ -2694,14 +3532,6 @@ Upewnij się, że masz prawo zapisu do tego pliku i spróbuj ponownie.The current project was modified since last saving. Do you want to save it now? Bieżący projekt został zmodyfikowany od ostatniego zapisu. Czy chcesz go zapisać teraz? - - Open project - Otwórz projekt - - - Save project - Zapisz projekt - Help not available Pomoc niedostępna @@ -2712,38 +3542,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Aktualnie pomoc dla LMMS jest niedostępna. Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS. - - My projects - Projekty - - - My samples - Sample - - - My presets - Presety - - - My home - Katalog domowy - - - My computer - Mój komputer - - - Root directory - Katalog główny - - - Project recovery - Odzyskiwanie projektu - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - Wygląda na to, że ostatnia sesja nie została zakończona poprawnie. Czy chcesz ją teraz przywrócić? - Configuration file Plik konfiguracyjny @@ -2752,14 +3550,6 @@ Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS.Error while parsing configuration file at line %1:%2: %3 Błąd podczas parsowania pliku konfiguracyjnego w linii %1:%2: %3 - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2772,10 +3562,6 @@ Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS.Volumes - - &Recently opened projects - - Undo @@ -2788,6 +3574,62 @@ Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS.LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2823,10 +3665,10 @@ Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE - URZĄDZENIE + URZĄDZENIE @@ -3291,6 +4133,98 @@ Odwiedź witrynę http://lmms.sf.net/wiki for documentation on LMMS.Sub3-LFO2 + + Sine wave + + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + + + + Saw wave + + + + Ramp wave + + + + Square wave + + + + Moog saw wave + + + + Abs. sine wave + + + + Random + Losowo + + + Random smooth + + MonstroView @@ -3463,6 +4397,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3741,6 +4710,14 @@ użyj kółka myszy aby ustawić głośność poszczególnych krokówDCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3772,29 +4749,13 @@ użyj kółka myszy aby ustawić głośność poszczególnych krokówAmount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - Odtwórz/zatrzymaj aktualny pattern (Spacja) - - - Stop playing of current pattern (Space) - Zatrzymaj odtwarzanie bieżącego patternu (Spacja) - - - Cut selected notes (Ctrl+X) - Wytnij zaznaczone nuty (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Skopiuj zaznaczone nuty (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - Wklej nuty ze schowka (Ctrl+V) - Piano-Roll - no pattern Edytor Pianolowy - brak patternu @@ -3807,58 +4768,10 @@ użyj kółka myszy aby ustawić głośność poszczególnych krokówPlease open a pattern by double-clicking on it! Otwórz pattern podwójnym kliknięciem! - - Record notes from MIDI-device/channel-piano - Nagraj nuty za pomocą zewnętrznego kontrolera MIDI - - - Record notes from MIDI-device/channel-piano while playing song or BB track - Nagraj nuty za pomocą zewnętrznego kontrolera MIDI w trakcie odtwarzania podkładu dźwiękowego - - - Draw mode (Shift+D) - Tryb rysowania (Shift+D) - - - Erase mode (Shift+E) - Tryb wymazywania (Shift+E) - - - Select mode (Shift+S) - Tryb zaznaczania (Shift+S) - Last note Ostatnia nuta - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Kliknij tutaj jeśli chcesz odtworzyć bieżący pattern. Pattern zostanie automatycznie zapętlony. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania wszystkie nuty które zagrasz zostaną zapisane na pattern i będziesz mógł odtworzyć i edytować je później. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania będziesz słyszeć utwór lub linię perkusyjną/basową a wszystkie nuty które zagrasz zostaną zapisane na pattern. - - - Click here to stop playback of current pattern. - Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie bieżącego patternu. - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Kliknij tutaj a zaznaczone nuty zostaną wycięte i umieszczone w schowku. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Kliknij tutaj a zaznaczone nuty zostaną skopiowane do schowka. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - Kliknij tutaj a nuty ze schowka zostaną przeklejone w miejsce zaznaczenia. - Note lock Blokada nuty @@ -3871,26 +4784,6 @@ użyj kółka myszy aby ustawić głośność poszczególnych krokówNote Panning Panoramowanie Nuty - - Detune mode (Shift+T) - Tryb odstrojenia (Shift+T) - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - Kliknij tutaj, aby przejść do trybu rysowania. W tym trybie możesz dodawać, przemieszczać i zmieniać rozmiar nut To domyślny tryb, który będziesz używać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. Przytrzymaj klawisz 'Ctrl' aby czasowo przejść do trybu zaznaczenia. - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - Kliknij tutaj, aby przejść do trybu kasowania. W tym trybie możesz usuwać nuty. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'. - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - Kliknij tutaj, aby przejść do trybu zaznaczania. W tym trybie możesz zaznaczać pojedyncze nuty lub całe ich grupy. Alternatywnie możesz przytrzymać klawisz 'Ctrl' w trybie rysowania aby tymczasowo przejść do trybu zaznaczania. - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - Kliknij tutaj, aby przejść do trybu odstrojenia. W tym trybie możesz odstrajać nuty w oknie, które otworzy się po kliknięciu na nich. Ten tryb możesz aktywować z poziomu klawiatury przez wciśnięcie kombinacji 'Shift+T'. - Mark/unmark current semitone @@ -3915,26 +4808,6 @@ użyj kółka myszy aby ustawić głośność poszczególnych krokówNo chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3956,6 +4829,117 @@ użyj kółka myszy aby ustawić głośność poszczególnych krokówWprowadź nową wartość pomiędzy %1 a %2: + + PianoRollWindow + + Play/pause current pattern (Space) + Odtwórz/zatrzymaj aktualny pattern (Spacja) + + + Record notes from MIDI-device/channel-piano + Nagraj nuty za pomocą zewnętrznego kontrolera MIDI + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Nagraj nuty za pomocą zewnętrznego kontrolera MIDI w trakcie odtwarzania podkładu dźwiękowego + + + Stop playing of current pattern (Space) + + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Kliknij tutaj jeśli chcesz odtworzyć bieżący pattern. Pattern zostanie automatycznie zapętlony. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania wszystkie nuty które zagrasz zostaną zapisane na pattern i będziesz mógł odtworzyć i edytować je później. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Kliknij tutaj, aby nagrać nuty z kontrolera MIDI lub wirtualnego pianina przypisanego do tego kanału. Podczas nagrywania będziesz słyszeć utwór lub linię perkusyjną/basową a wszystkie nuty które zagrasz zostaną zapisane na pattern. + + + Click here to stop playback of current pattern. + Kliknij tutaj jeśli chcesz zatrzymać odtwarzanie bieżącego patternu. + + + Draw mode (Shift+D) + Tryb rysowania (Shift+D) + + + Erase mode (Shift+E) + Tryb wymazywania (Shift+E) + + + Select mode (Shift+S) + Tryb zaznaczania (Shift+S) + + + Detune mode (Shift+T) + Tryb odstrojenia (Shift+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + Kliknij tutaj, aby przejść do trybu rysowania. W tym trybie możesz dodawać, przemieszczać i zmieniać rozmiar nut To domyślny tryb, który będziesz używać przez większość czasu. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+D'. Przytrzymaj klawisz 'Ctrl' aby czasowo przejść do trybu zaznaczenia. + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + Kliknij tutaj, aby przejść do trybu kasowania. W tym trybie możesz usuwać nuty. Możesz go aktywować z poziomu klawiatury za pomocą skrótu 'Shift+E'. + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + Kliknij tutaj, aby przejść do trybu zaznaczania. W tym trybie możesz zaznaczać pojedyncze nuty lub całe ich grupy. Alternatywnie możesz przytrzymać klawisz 'Ctrl' w trybie rysowania aby tymczasowo przejść do trybu zaznaczania. + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + Kliknij tutaj, aby przejść do trybu odstrojenia. W tym trybie możesz odstrajać nuty w oknie, które otworzy się po kliknięciu na nich. Ten tryb możesz aktywować z poziomu klawiatury przez wciśnięcie kombinacji 'Shift+T'. + + + Cut selected notes (Ctrl+X) + Wytnij zaznaczone nuty (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Skopiuj zaznaczone nuty (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Wklej nuty ze schowka (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Kliknij tutaj a zaznaczone nuty zostaną wycięte i umieszczone w schowku. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Kliknij tutaj a zaznaczone nuty zostaną skopiowane do schowka. Możesz wkleić je gdziekolwiek w dowolnym patternie za pomocą przycisku 'Wklej'. + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + Kliknij tutaj a nuty ze schowka zostaną przeklejone w miejsce zaznaczenia. + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3988,6 +4972,140 @@ Powód: "%2" + + PluginBrowser + + Instrument plugins + Instrumenty wtyczkowe + + + Instrument browser + Przeglądarka instrumentów + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + Przeciągnij instrument do Edytora Piosenki, Edytora Perkusji i Basu lub na wybraną ścieżkę. + + + + ProjectNotes + + Project notes + Notatki projektu + + + Put down your project notes here. + Umieść tutaj swoje zapiski dotyczące projektu. + + + Edit Actions + Edytuj Akcje + + + &Undo + Cofnij [&U] + + + Ctrl+Z + Ctrl+Z + + + &Redo + Powtórz [&R] + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Kopiuj + + + Ctrl+C + Ctrl+C + + + Cu&t + Wy&tnij + + + Ctrl+X + Ctrl+X + + + &Paste + &Wklej + + + Ctrl+V + Ctrl+V + + + Format Actions + Formatowanie + + + &Bold + Wytłuść [&B] + + + Ctrl+B + Ctrl+B + + + &Italic + Kursywa [&I] + + + Ctrl+I + Ctrl+I + + + &Underline + Podkreślenie [&U] + + + Ctrl+U + Ctrl+U + + + &Left + Lewo [&L] + + + Ctrl+L + Ctrl+L + + + C&enter + Centrowanie [&E] + + + Ctrl+E + Ctrl+E + + + &Right + Prawo [&R] + + + Ctrl+R + Ctrl+R + + + &Justify + Justowanie [&J] + + + Ctrl+J + Ctrl+J + + + &Color... + Kolor... + + ProjectRenderer @@ -4138,6 +5256,13 @@ Powód: "%2" + + RenameDialog + + Rename... + Zmień nazwę... + + SampleBuffer @@ -4226,6 +5351,10 @@ Powód: "%2" Volume Głośność + + Panning + Panoramowanie + SampleTrackView @@ -4241,37 +5370,309 @@ Powód: "%2" VOL VOL + + Panning + Panoramowanie + + + Panning: + Panoramowanie: + + + PAN + PAN + + + + SetupDialog + + Setup LMMS + Konfiguracja LMMS + + + General settings + Podstawowe ustawienia + + + BUFFER SIZE + ROZMIAR BUFORA + + + Reset to default-value + Zresetuj do wartości domyślnej + + + MISC + DODATKOWE + + + Enable tooltips + Włącz podpowiedzi + + + Show restart warning after changing settings + Ostrzeżenie o konieczności restartu po zmianie parametrów + + + Display volume as dBV + Głośność w dBV + + + Compress project files per default + Domyślnie kompresuj pliki projektu + + + One instrument track window mode + Tryb jednego, wspólnego okna dla wszystkich instrumentów + + + HQ-mode for output audio-device + Tryb wysokiej jakości wyjścia urządzenia audio + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Ścieżki + + + LMMS working directory + Katalog roboczy LMMS + + + VST-plugin directory + Katalog wtyczek VST + + + Artwork directory + Katalog z grafiką + + + Background artwork + Grafika tła + + + FL Studio installation directory + Katalog instalacji FL Studio + + + LADSPA plugin paths + Ścieżki do wtyczek LADSPA + + + STK rawwave directory + Katalog STK rawwave + + + Default Soundfont File + Domyślny plik Soundfont + + + Performance settings + Ustawienia wydajności + + + UI effects vs. performance + Efekty interfejsu vs wydajność + + + Smooth scroll in Song Editor + Płynne przewijanie w Edytorze Piosenki + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + Ustawienia audio + + + AUDIO INTERFACE + INTERFEJS AUDIO + + + MIDI settings + Ustawienia MIDI + + + MIDI INTERFACE + INTERFEJS MIDI + + + OK + OK + + + Cancel + Anuluj + + + Restart LMMS + Restart LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Większość zmian da efekt dopiero po zrestartowaniu LMMS! + + + Frames: %1 +Latency: %2 ms + Ramki: %1 +Latencja: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Tutaj możesz ustawić rozmiar wewnętrznego bufora używanego przez LMMS. Niższe wartości skutkują mniejszą latencją ale mogą powodować zniekształcenia dźwięku lub kiepską wydajność, zwłaszcza na starszych komputerach lub kernelach bez obsługi czasu rzeczywistego. + + + Choose LMMS working directory + Wybierz katalog roboczy LMMS + + + Choose your VST-plugin directory + Wybierz katalog wtyczek VST + + + Choose artwork-theme directory + Wybierz katalog z grafiką + + + Choose FL Studio installation directory + Wybierz katalog z instalacją FL Studio + + + Choose LADSPA plugin directory + Wybierz katalog wtyczek LADSPA + + + Choose STK rawwave directory + Wybierz katalog STK rawwave + + + Choose default SoundFont + Wybierz domyślny SoundFont + + + Choose background artwork + Wybierz grafikę tła + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Tutaj możesz wybrać preferowany interfejs audio. W zależności od konfiguracji Twojego systemu podczas kompilacji możesz wybierać pomiędzy ALSA, JACK, OSS i innymi. Poniżej znajduje się sekcja w której możesz zmienić ustawienia wybranego interfejsu. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Tutaj możesz wybrać preferowany interfejs MIDI. W zależności od konfiguracji systemu podczas kompilacji możesz wybierać pomiędzy ALSA, OSS i innymi. Poniżej znajduje się sekcja w której możesz zmienić ustawienia wybranego interfejsu. + + + + Song + + Tempo + Tempo + + + Master volume + + + + Master pitch + + + + Project saved + Projekt zapisany + + + The project %1 is now saved. + Projekt %1 został właśnie zapisany. + + + Project NOT saved. + Projekt NIE JEST zapisany. + + + The project %1 was not saved! + Projekt %1 nie jest zapisany! + + + Import file + Importuj plik + + + MIDI sequences + sekwencje MIDI + + + FL Studio projects + projekty FL Studio + + + Hydrogen projects + + + + All file types + wszystkie pliki + + + Empty project + Pusty projekt + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + Ten projekt jest pusty więc eksportowanie go nie ma najmniejszego sensu. Najpierw umieść kilka elementów w Edytorze Piosenki! + + + Select directory for writing exported tracks... + + + + untitled + niezatytułowane + + + Select file for project-export... + Wybierz plik aby wyeksportować projekt... + + + The following errors occured while loading: + + SongEditor - - Song-Editor - Edytor Kompozycji - - - Play song (Space) - Odtwórz piosenkę (Spacja) - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Kliknij tutaj, jeśli chcesz odtworzyć całą piosenkę. Odtwarzanie rozpocznie się od zielonego znacznika pozycji. Możesz go przemieszczać w trakcie odtwarzania. - - - Stop song (Space) - Zatrzymaj odtwarzanie piosenki (Spacja) - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Kliknij tutaj, jeśli chcesz zatrzymać odtwarzanie piosenki. Znacznik pozycji zostanie ustawiony na początek utworu. - - - Add beat/bassline - Dodaj linię basową/perkusyjną - - - Add sample-track - Dodaj ścieżkę z samplami - Could not open file Nie można otworzyć pliku @@ -4280,26 +5681,6 @@ Powód: "%2" Could not write file Nie można zapisać pliku - - Add automation-track - Dodaj ścieżkę automatyki - - - Draw mode - Tryb rysowania - - - Edit mode (select and move) - Tryb edycji (zaznaczanie i przemieszczanie) - - - Record samples from Audio-device - Nagraj sample z urządzenia audio - - - Record samples from Audio-device while playing song or BB track - Nagrywa sample z urządzenia audio podczas odtwarzania piosenki lub ścieżki perkusji/basu - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4363,6 +5744,57 @@ Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie + + SongEditorWindow + + Song-Editor + Edytor Kompozycji + + + Play song (Space) + Odtwórz piosenkę (Spacja) + + + Record samples from Audio-device + Nagraj sample z urządzenia audio + + + Record samples from Audio-device while playing song or BB track + Nagrywa sample z urządzenia audio podczas odtwarzania piosenki lub ścieżki perkusji/basu + + + Stop song (Space) + Zatrzymaj odtwarzanie piosenki (Spacja) + + + Add beat/bassline + + + + Add sample-track + Dodaj ścieżkę z samplami + + + Add automation-track + Dodaj ścieżkę automatyki + + + Draw mode + Tryb rysowania + + + Edit mode (select and move) + Tryb edycji (zaznaczanie i przemieszczanie) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Kliknij tutaj, jeśli chcesz odtworzyć całą piosenkę. Odtwarzanie rozpocznie się od zielonego znacznika pozycji. Możesz go przemieszczać w trakcie odtwarzania. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Kliknij tutaj, jeśli chcesz zatrzymać odtwarzanie piosenki. Znacznik pozycji zostanie ustawiony na początek utworu. + + SpectrumAnalyzerControlDialog @@ -4389,6 +5821,13 @@ Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie Tryb kanału + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4431,10 +5870,6 @@ Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie Custom... Własne... - - &Help - &Pomoc - Custom Własne @@ -4475,6 +5910,52 @@ Upewnij się, że masz przynajmniej uprawnienia odczytu tego pliku a następnie + + TimeLineWidget + + Enable/disable auto-scrolling + Włącz/wyłącz autoprzewijanie + + + Enable/disable loop-points + Włącz/wyłącz znaczniki pętli + + + After stopping go back to begin + Po zatrzymaniu powróć do początku + + + After stopping go back to position at which playing was started + Po zatrzymaniu powróć do pozycji z której rozpoczęto odtwarzanie + + + After stopping keep position + Po zatrzymaniu utrzymaj pozycję + + + Hint + Wskazówka + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + Wyciszone + + + Solo + Solo + + TrackContainer @@ -4518,6 +5999,107 @@ Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierające Importowanie pliku FLP... + + TrackContentObject + + Muted + Wyciszone + + + + TrackContentObjectView + + Current position + Bieżąca pozycja + + + Hint + Wskazówka + + + Press <Ctrl> and drag to make a copy. + Naciśnij <Ctrl> i przeciągnij aby stworzyć kopię. + + + Current length + Aktualna długość + + + Press <Ctrl> for free resizing. + Naciśnij <Ctrl> aby zmienić rozmiar. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 do %5:%6) + + + Delete (middle mousebutton) + Kasuj (naciśnij rolkę myszy) + + + Cut + Wytnij + + + Copy + Kopiuj + + + Paste + Wklej + + + Mute/unmute (<Ctrl> + middle click) + Wycisz/anuluj wyciszenie (<Ctrl> + kliknięcie rolką myszy) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Naciśnij <Ctrl> podczas przeciągania elementu kursorem aby rozpocząć nową akcję 'przeciągnij i upuść'. + + + Actions for this track + Akcje dla tej ścieżki + + + Mute + Wyciszenie + + + Solo + Solo + + + Mute this track + Wycisz tę ścieżkę + + + Clone this track + Klonuj tę ścieżkę + + + Remove this track + Usuń tę ścieżkę + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4661,17 +6243,6 @@ Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierające Użyj fali zdefiniowanej przez użytkownika. - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4774,6 +6345,17 @@ Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierające + + VisualizationWidget + + click to enable/disable visualization of master-output + Kliknij tutaj, aby włączyć/wyłączyć wizualizację kanału master + + + Click to enable + Kliknij aby włączyć + + VstEffectControlDialog @@ -4880,11 +6462,7 @@ Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierające - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5290,80 +6868,11 @@ Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierające Sinc - - - bbEditor - Beat+Bassline Editor - Edytor Perkusji i Basu - - - Play/pause current beat/bassline (Space) - Odtwórz/Zapałzuj bieżącą linię perkusyjną/basową (Spacja) - - - Add beat/bassline - Dodaj linię perkusyjną/basową - - - Add automation-track - Dodaj ścieżkę automatyki - - - Stop playback of current beat/bassline (Space) - Zatrzymaj odtwarzanie bieżącej linii perkusyjnej/basowej (Spacja) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Kliknij tutaj, aby odtworzyć bieżącą linię perkusyjną/basową. Zostanie ona automatycznie zapętlona. - - - Click here to stop playing of current beat/bassline. - Kliknij tutaj, aby zatrzymać odtwarzanie bieżącej linii perkusyjnej/basowej. - - - Remove steps - Usuń kroki - - - Add steps - Dodaj kroki - - - - bbTCOView - - Open in Beat+Bassline-Editor - Otwórz w Edytorze Perkusji i Basu - - - Reset name - Zresetuj nazwę - - - Change name - Zmień nazwę - - - Change color - Zmień kolor - - - Reset color to default + Sample not found: %1 - - bbTrack - - Beat/Bassline %1 - Perkusja/Bas %1 - - - Clone of %1 - Duplikat %1 - - bitInvader @@ -5560,42 +7069,6 @@ Upewnij się, że masz uprawnienia do odczytu tego pliku i katalogu zawierające - - exportProjectDialog - - Could not open file - Nie można otworzyć pliku - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Nie da się otworzyć pliku %1 do zapisu. -Upewnij się, że masz uprawnienia zapisu do tego pliku i katalogu w którym się znajduje a następnie spróbuj ponownie! - - - Error - Błąd - - - Error while determining file-encoder device. Please try to choose a different output format. - Wystąpił błąd podczas określania enkodera. Spróbuj wybrać inny format wyjściowy. - - - Rendering: %1% - Rendering: %1% - - - Export project to %1 - Eksport projektu do %1 - - - - fader - - Please enter a new value between %1 and %2: - Wprowadź nową wartość pomiędzy %1 a %2: - - graphModel @@ -5697,21 +7170,6 @@ Upewnij się, że masz uprawnienia zapisu do tego pliku i katalogu w którym si - - knob - - &Help - &Pomoc - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Wprowadź nową wartość pomiędzy -96.0 dBV a 6.0 dBV: - - - Please enter a new value between %1 and %2: - Wprowadź nową wartość pomiędzy %1 a %2: - - ladspaBrowserView @@ -6445,13 +7903,6 @@ Podwójne kliknięcie na którejkolwiek wtyczce otworzy okienko z informacjami o - - nineButtonSelector - - &Help - Pomoc [&H] - - opl2instrument @@ -6905,10 +8356,6 @@ Podwójne kliknięcie na którejkolwiek wtyczce otworzy okienko z informacjami o no description brak opisu - - Instrument plugins - Instrumenty wtyczkowe - Incomplete monophonic imitation tb303 Niezupełna monofoniczna emulacja syntezatora tb303. @@ -6961,14 +8408,6 @@ Podwójne kliknięcie na którejkolwiek wtyczce otworzy okienko z informacjami o Filter for importing MIDI-files into LMMS Filtr do importowania plików MIDI do LMMS. - - Instrument browser - Przeglądarka instrumentów - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - Przeciągnij instrument do Edytora Piosenki, Edytora Perkusji i Basu lub na wybraną ścieżkę. - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7059,335 +8498,83 @@ Te układy scalone były stosowane w komputerach Commodore 64. A NES-like synthesizer - - - projectNotes - Project notes - Notatki projektu + Player for GIG files + - Put down your project notes here. - Umieść tutaj swoje zapiski dotyczące projektu. + A multitap echo delay plugin + - Edit Actions - Edytuj Akcje + A native flanger plugin + - &Undo - Cofnij [&U] + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - Powtórz [&R] + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &Kopiuj - - - Ctrl+C - Ctrl+C - - - Cu&t - Wy&tnij - - - Ctrl+X - Ctrl+X - - - &Paste - &Wklej - - - Ctrl+V - Ctrl+V - - - Format Actions - Formatowanie - - - &Bold - Wytłuść [&B] - - - Ctrl+B - Ctrl+B - - - &Italic - Kursywa [&I] - - - Ctrl+I - Ctrl+I - - - &Underline - Podkreślenie [&U] - - - Ctrl+U - Ctrl+U - - - &Left - Lewo [&L] - - - Ctrl+L - Ctrl+L - - - C&enter - Centrowanie [&E] - - - Ctrl+E - Ctrl+E - - - &Right - Prawo [&R] - - - Ctrl+R - Ctrl+R - - - &Justify - Justowanie [&J] - - - Ctrl+J - Ctrl+J - - - &Color... - Kolor... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Zmień nazwę... - - - - setupDialog - - Setup LMMS - Konfiguracja LMMS - - - General settings - Podstawowe ustawienia - - - BUFFER SIZE - ROZMIAR BUFORA - - - Reset to default-value - Zresetuj do wartości domyślnej - - - MISC - DODATKOWE - - - Enable tooltips - Włącz podpowiedzi - - - Show restart warning after changing settings - Ostrzeżenie o konieczności restartu po zmianie parametrów - - - Display volume as dBV - Głośność w dBV - - - Compress project files per default - Domyślnie kompresuj pliki projektu - - - HQ-mode for output audio-device - Tryb wysokiej jakości wyjścia urządzenia audio - - - LMMS working directory - Katalog roboczy LMMS - - - VST-plugin directory - Katalog wtyczek VST - - - Artwork directory - Katalog z grafiką - - - FL Studio installation directory - Katalog instalacji FL Studio - - - STK rawwave directory - Katalog STK rawwave - - - Performance settings - Ustawienia wydajności - - - UI effects vs. performance - Efekty interfejsu vs wydajność - - - Audio settings - Ustawienia audio - - - AUDIO INTERFACE - INTERFEJS AUDIO - - - MIDI settings - Ustawienia MIDI - - - MIDI INTERFACE - INTERFEJS MIDI - - - OK - OK - - - Cancel - Anuluj - - - Restart LMMS - Restart LMMS - - - Please note that most changes won't take effect until you restart LMMS! - Większość zmian da efekt dopiero po zrestartowaniu LMMS! - - - Frames: %1 -Latency: %2 ms - Ramki: %1 -Latencja: %2 ms - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Tutaj możesz ustawić rozmiar wewnętrznego bufora używanego przez LMMS. Niższe wartości skutkują mniejszą latencją ale mogą powodować zniekształcenia dźwięku lub kiepską wydajność, zwłaszcza na starszych komputerach lub kernelach bez obsługi czasu rzeczywistego. - - - Choose LMMS working directory - Wybierz katalog roboczy LMMS - - - Choose your VST-plugin directory - Wybierz katalog wtyczek VST - - - Choose artwork-theme directory - Wybierz katalog z grafiką - - - Choose FL Studio installation directory - Wybierz katalog z instalacją FL Studio - - - Choose LADSPA plugin directory - Wybierz katalog wtyczek LADSPA - - - Choose STK rawwave directory - Wybierz katalog STK rawwave - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Tutaj możesz wybrać preferowany interfejs audio. W zależności od konfiguracji Twojego systemu podczas kompilacji możesz wybierać pomiędzy ALSA, JACK, OSS i innymi. Poniżej znajduje się sekcja w której możesz zmienić ustawienia wybranego interfejsu. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Tutaj możesz wybrać preferowany interfejs MIDI. W zależności od konfiguracji systemu podczas kompilacji możesz wybierać pomiędzy ALSA, OSS i innymi. Poniżej znajduje się sekcja w której możesz zmienić ustawienia wybranego interfejsu. - - - Paths - Ścieżki - - - LADSPA plugin paths - Ścieżki do wtyczek LADSPA - - - Default Soundfont File - Domyślny plik Soundfont - - - Background artwork - Grafika tła - - - Choose default SoundFont - Wybierz domyślny SoundFont - - - Choose background artwork - Wybierz grafikę tła - - - One instrument track window mode - Tryb jednego, wspólnego okna dla wszystkich instrumentów - - - Smooth scroll in Song Editor - Płynne przewijanie w Edytorze Piosenki - - - Compact track buttons + JACK (JACK Audio Connection Kit) - Sync VST plugins to host playback + OSS Raw-MIDI (Open Sound System) - Enable note labels in piano roll + SDL (Simple DirectMedia Layer) - Enable waveform display by default + PulseAudio (bad latency!) - Enable auto save feature + Dummy (no MIDI support) - Show playback cursor in AudioFileProcessor + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - Keep effects running even without input + PortAudio + + + + Dummy (no sound output) + + + + ALSA (Advanced Linux Sound Architecture) + + + + OSS (Open Sound System) + + + + WinMM MIDI + + + + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7445,6 +8632,10 @@ Latencja: %2 ms Chorus Depth Głębokość chorusu + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7690,77 +8881,6 @@ Latencja: %2 ms Kiedy włączony jest Test, oscylator %1 zostanie czasowo zresetowany i zablokowany. - - song - - Tempo - Tempo - - - Master volume - Główna głośność - - - Master pitch - Główne odstrojenie - - - Project saved - Projekt zapisany - - - The project %1 is now saved. - Projekt %1 został właśnie zapisany. - - - Project NOT saved. - Projekt NIE JEST zapisany. - - - The project %1 was not saved! - Projekt %1 nie jest zapisany! - - - Import file - Importuj plik - - - untitled - niezatytułowane - - - Select file for project-export... - Wybierz plik aby wyeksportować projekt... - - - Empty project - Pusty projekt - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - Ten projekt jest pusty więc eksportowanie go nie ma najmniejszego sensu. Najpierw umieść kilka elementów w Edytorze Piosenki! - - - MIDI sequences - sekwencje MIDI - - - FL Studio projects - projekty FL Studio - - - All file types - wszystkie pliki - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7817,157 +8937,6 @@ Latencja: %2 ms Prawy IN >> Prawy OUT - - timeLine - - Enable/disable auto-scrolling - Włącz/wyłącz autoprzewijanie - - - Enable/disable loop-points - Włącz/wyłącz znaczniki pętli - - - After stopping go back to begin - Po zatrzymaniu powróć do początku - - - After stopping go back to position at which playing was started - Po zatrzymaniu powróć do pozycji z której rozpoczęto odtwarzanie - - - After stopping keep position - Po zatrzymaniu utrzymaj pozycję - - - Hint - Wskazówka - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - Wyciszone - - - Solo - Solo - - - - trackContentObject - - Muted - Wyciszone - - - - trackContentObjectView - - Current position - Bieżąca pozycja - - - Hint - Wskazówka - - - Press <Ctrl> and drag to make a copy. - Naciśnij <Ctrl> i przeciągnij aby stworzyć kopię. - - - Current length - Aktualna długość - - - Press <Ctrl> for free resizing. - Naciśnij <Ctrl> aby zmienić rozmiar. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 do %5:%6) - - - Delete (middle mousebutton) - Kasuj (naciśnij rolkę myszy) - - - Cut - Wytnij - - - Copy - Kopiuj - - - Paste - Wklej - - - Mute/unmute (<Ctrl> + middle click) - Wycisz/anuluj wyciszenie (<Ctrl> + kliknięcie rolką myszy) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Naciśnij <Ctrl> podczas przeciągania elementu kursorem aby rozpocząć nową akcję 'przeciągnij i upuść'. - - - Actions for this track - Akcje dla tej ścieżki - - - Mute - Wyciszenie - - - Mute this track - Wycisz tę ścieżkę - - - Solo - Solo - - - Clone this track - Klonuj tę ścieżkę - - - Remove this track - Usuń tę ścieżkę - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7978,16 +8947,6 @@ Latencja: %2 ms Please wait while loading VST-plugin... Ładowanie wtyczki VST. Proszę czekać... - - Failed loading VST-plugin - Ładowanie wtyczki VST nie powiodło się - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - Wtyczka VST %1 nie może zostać załadowana z jakiegoś powodu. -Jeśli pracuje normalnie z innym oprogramowaniem VST pod Linuksem proszę koniecznie skontaktować się z developerami LMMS! - vibed @@ -8214,10 +9173,6 @@ Kontrolka LED w prawym dolnym rogu edytora kształtu fali pokazuje, czy wybrana Click here to normalize waveform. Kliknij tutaj, aby znormalizować przebieg. - - &Help - &Pomoc - Use a sine-wave for current oscillator. Użyj fali sinusoidalnej dla bieżącego oscylatora. @@ -8243,17 +9198,6 @@ Kontrolka LED w prawym dolnym rogu edytora kształtu fali pokazuje, czy wybrana Użyj fali zdefiniowanej przez użytkownika dla bieżącego oscylatora. - - visualizationWidget - - click to enable/disable visualization of master-output - Kliknij tutaj, aby włączyć/wyłączyć wizualizację kanału master - - - Click to enable - Kliknij aby włączyć - - voiceObject diff --git a/data/locale/pt.ts b/data/locale/pt.ts index 973ec3cb7..ecc6bfab7 100644 --- a/data/locale/pt.ts +++ b/data/locale/pt.ts @@ -53,6 +53,14 @@ Esteban Viveros LMMS LMMS + + Involved + Envolvidos + + + Contributors ordered by number of commits: + Colaboradores ordenados por ordem de contribuição: + AmplifierControlDialog @@ -197,10 +205,6 @@ Esteban Viveros With this knob you can set the point where the loop starts. - - Sample not found: %1 - Amostra não encontrada: %1 - AudioFileProcessorWaveView @@ -227,16 +231,13 @@ Esteban Viveros The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. O servidor de áudio JACK parece ter caído e ao reiniciar uma nova instância falhou. De qualquer maneira LMMS é capaz de prosseguir. Certifique-se de salvar seu projeto e reiniciar primeiro o JACK depois o LMMS. - - - AudioJack::setupWidget CLIENT-NAME - NOME-DO-CLIENTE + NOME-DO-CLIENTE CHANNELS - CANAIS + CANAIS @@ -328,10 +329,6 @@ Esteban Viveros AutomationEditor - - Automation Editor - %1 - Editor de Automação - %1 - All selected values were copied to the clipboard. Todos os valores selecionados foram copiados para a área de transferência. @@ -340,105 +337,128 @@ Esteban Viveros Please open an automation pattern with the context menu of a control! Por favor, abra o sequenciador de automação com o menu de contexto do controle! - - Draw mode (Shift+D) - Lápis (Shift+D) - - - Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. - Clique aqui para selecionar progressão cúbica hermite-progressions para este sequenciador de automação. O valor do objeto conectado irá mudar em curva e suavemente entre picos e vales. - - - Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis. - - - Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Clique aqui para cortar valores para a área de transferência. Você pode colar os valores em qualquer sequência utilizando o botão de colar. - - - Erase mode (Shift+E) - Borracha (Shift+E) - - - Automation Editor - no pattern - Editor de Automação - sem sequência - - - Cut selected values (Ctrl+X) - Cortar (Ctrl+X) - - - Copy selected values (Ctrl+C) - Copiar (Ctrl+C) - - - Tension: - Tensão: - - - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Clique aqui se você quiser tocar a sequência atual. Isto é útil enquanto se está editando. A sequência entra em loop automaticamente quando chega ao fim. - - - Play/pause current pattern (Space) - Tocar/pausar a sequência atual (Espaço) - - - Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. - Clique aqui para selecionar progressões discretas para este sequenciador de automação. O valor do objeto conectado permanecerá constante entre os pontos de controle e será substituido por um novo valor assim que um novo ponto de controle for assinalado. - - - Click here and the values from the clipboard will be pasted at the first visible measure. - Clique aqui e os valores na área de transferência serão colados no primeiro limite visível. - - - Linear progression - Progressão linear - - - Click here if you want to stop playing of the current pattern. - Clique aqui se você que parar a reprodução da sequência atual. - Values copied Valores copiados + + + AutomationEditorWindow - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Clique aqui para copiar valores para a área de transferência. Você pode copiar os valores de qualquer sequência utilizando o botão de colar. + Play/pause current pattern (Space) + - Cubic Hermite progression - Cúbica - Hermite progression - - - Tension value for spline - Valor de tensão para os estriados - - - Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. - Clique aqui para selecionar progressões lineares para este sequenciador de automação. O valor do objeto conectado variará de forma constante entre os pontos de controle assinalados. + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + Clique aqui se você quiser tocar a sequência atual. Isto é útil enquanto se está editando. A sequência entra em loop automaticamente quando chega ao fim. Stop playing of current pattern (Space) - Parar de tocar a sequência atual (Espaço) + Parar de tocar a sequência atual (Espaço) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. - Um valor de tensão alto irá fazer suave a curva mas também extrapolará alguns valores. Um valor de tensão baixa irá causar um declive na curva de volume para cada ponto de controle. + Click here if you want to stop playing of the current pattern. + Clique aqui se você que parar a reprodução da sequência atual. - Paste values from clipboard (Ctrl+V) - Colar (Ctrl+V) + Draw mode (Shift+D) + Lápis (Shift+D) + + + Erase mode (Shift+E) + Borracha (Shift+E) + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. + Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis. + + + Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. + Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Discrete progression - Progressão discreta + Progressão discreta + + + Linear progression + Progressão linear + + + Cubic Hermite progression + Cúbica - Hermite progression + + + Tension value for spline + Valor de tensão para os estriados + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + + + + Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. + Clique aqui para selecionar progressões discretas para este sequenciador de automação. O valor do objeto conectado permanecerá constante entre os pontos de controle e será substituido por um novo valor assim que um novo ponto de controle for assinalado. + + + Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. + Clique aqui para selecionar progressões lineares para este sequenciador de automação. O valor do objeto conectado variará de forma constante entre os pontos de controle assinalados. + + + Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. + Clique aqui para selecionar progressão cúbica hermite-progressions para este sequenciador de automação. O valor do objeto conectado irá mudar em curva e suavemente entre picos e vales. + + + Cut selected values (Ctrl+X) + Cortar (Ctrl+X) + + + Copy selected values (Ctrl+C) + Copiar (Ctrl+C) + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Clique aqui para cortar valores para a área de transferência. Você pode colar os valores em qualquer sequência utilizando o botão de colar. + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Clique aqui para copiar valores para a área de transferência. Você pode copiar os valores de qualquer sequência utilizando o botão de colar. + + + Click here and the values from the clipboard will be pasted at the first visible measure. + Clique aqui e os valores na área de transferência serão colados no primeiro limite visível. + + + Tension: + Tensão: + + + Automation Editor - no pattern + Editor de Automação - sem sequência + + + Automation Editor - %1 + Editor de Automação - %1 @@ -486,6 +506,14 @@ Esteban Viveros Set/clear record Armar/desarmar gravação + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -494,6 +522,79 @@ Esteban Viveros Pista de Automação + + BBEditor + + Beat+Bassline Editor + Editor de Bases + + + Play/pause current beat/bassline (Space) + Tocar/pausar a base atual (Espaço) + + + Stop playback of current beat/bassline (Space) + Parar reprodução da base atual (Espaço) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Clique aqui se você quiser tocar a base atual. A base entra em loop automaticamente quando chega ao fim. + + + Click here to stop playing of current beat/bassline. + Clique aqui para parar a base atual. + + + Add beat/bassline + + + + Add automation-track + Adicionar pista de automação + + + Remove steps + + + + Add steps + + + + + BBTCOView + + Open in Beat+Bassline-Editor + Abrir no editor de Bases + + + Reset name + Restaurar nome + + + Change name + Mudar nome + + + Change color + Mudar cor + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Base %1 + + + Clone of %1 + Clone de %1 + + BassBoosterControlDialog @@ -536,6 +637,100 @@ Esteban Viveros Razão + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + GANHO + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Taxa + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + Aj&uda + + + Help (not available) + + + CarlaInstrumentView @@ -634,10 +829,6 @@ Esteban Viveros ControllerView - - &Help - Aj&uda - Controls Controles @@ -659,6 +850,126 @@ Esteban Viveros &Remova este plugin + + CrossoverEQControlDialog + + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Taxa + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + + + DualFilterControlDialog @@ -784,6 +1095,60 @@ Esteban Viveros Vocal Formant Filter Filtro de Formante Vocal + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -843,10 +1208,6 @@ Esteban Viveros GATE PORTAL - - &Help - Aj&uda - DECAY DEC @@ -1166,6 +1527,255 @@ Clicar com o botão direito no mouse irá exibir um menu de contexto onde você + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Ganho + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Frequência: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1304,6 +1914,43 @@ Clicar com o botão direito no mouse irá exibir um menu de contexto onde você Quality settings Configurações de qualidade + + Export between loop markers + + + + Could not open file + Não é possível abrir o arquivo + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Não é possível abrir o arquivo %1 para gravação. +Por favor certifique-se que você tem permissão para gravação no arquivo e se o arquivo se encontra no diretório e tente novamente! + + + Export project to %1 + Exportar projeto para %1 + + + Error + Erro + + + Error while determining file-encoder device. Please try to choose a different output format. + Erro ao determinar o dispositivo codificador de arquivo. Por favor tente um formato de saída diferente. + + + Rendering: %1% + Renderizando: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Por favor entre com um novo valor entre %1 e %2: + FileBrowser @@ -1339,6 +1986,76 @@ Clicar com o botão direito no mouse irá exibir um menu de contexto onde você --- Arquivos de fábrica --- + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + Ruído + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + Ruído + + + White Noise Amount: + + + FxLine @@ -1372,8 +2089,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - Aj&uda + Remove &unused channels + @@ -1401,9 +2118,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer Mixer de Efeitos - - - FxMixerView::FxChannelView FX Fader %1 Fader de Efeito %1 @@ -1416,6 +2130,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel Deixar mudo este Canal de Efeitos + + Solo + + + + Solo FX channel + + FxRoute @@ -1424,6 +2146,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + Banco + + + Patch + Programação + + + Gain + Ganho + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Escolher o patch + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Ganho + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2015,6 +2799,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2113,6 +2908,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri RC LowPass 12dB RC PassaBaixa 12dB + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2203,6 +3026,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Default preset Pré configuração padrão + + Master Pitch + + InstrumentTrackView @@ -2337,6 +3164,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + VÁRIOS + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Por favor entre um novo valor entre -96.0 dBV e 6.0 dBV: + + + Please enter a new value between %1 and %2: + Por favor entre com um novo valor entre %1 e %2: + LadspaControl @@ -2373,10 +3223,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - Efeito - Unknown LADSPA plugin %1 requested. Plugin LADSPA %1 desconhecido requisitado. @@ -2507,14 +3353,14 @@ Double click to pick a file. With this knob you can set the phase offset of the LFO. That means you can move the point within an oscillation where the oscillator begins to oscillate. For example if you have a sine-wave and have a phase-offset of 180 degrees the wave will first go down. It's the same with a square-wave. Com este botão você pode mudar a posição da fase da onda de LFO. Fase é em que ponto a onda inicia o processo de oscilação, desta maneira você pode definir onde você quer que comece o processo de oscilação. Por exemplo, se você tiver uma onda senoidal com defasamento de 180 graus, ela vai começar para baixo. O mesmo acontece com outras formas de onda, como a dente de serra por exemplo. - - Click here for a a moog saw-wave. - Clique aqui para usar uma onda dente-de-serra moog. - Click here for a triangle-wave. Clique aqui para usar uma onda triangular. + + Click here for a moog saw-wave. + + MainWindow @@ -2574,18 +3420,10 @@ Double click to pick a file. Open existing project Abrir projeto existente - - E&xport tracks... - Re&nderizar pistas... - Show/hide Piano-Roll Mostrar/esconder Editor de Notas MIDI - - Save project - Salvar projeto - &Tools &Ferramentas @@ -2594,26 +3432,14 @@ Double click to pick a file. Save &As... Salvar &como... - - Open project - Abrir projeto - LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) - - Save as new &version - Salvar como nova &versão - Click here to show or hide the Piano-Roll. With the help of the Piano-Roll you can edit melodies in an easy way. Clique aqui para mostrar ou esconder o Editor de Notas MIDI. Com ele você pode editar melodias facilmente. - - Online help - Ajuda Online - Show/hide project notes Mostrar/esconder comentários do projeto @@ -2634,10 +3460,6 @@ Double click to pick a file. Click here to show or hide the project notes window. In this window you can put down your project notes. Clique aqui para mostrar ou esconder a janela com comentários do projeto. Nela você pode escrever comentários e observações sobre o seu projeto. - - My home - Minha pasta - Click here to show or hide the FX Mixer. The FX Mixer is a very powerful tool for managing effects for your song. You can insert effects into different effect-channels. Clique aqui para mostrar ou esconder o Mixer de Efeitos. O Mixer de Efeitos é uma poderosa ferramenta para gerenciar os efeitos utilizados na sua música. Você pode inserir efeitos em diferentes canais de efeito. @@ -2650,10 +3472,6 @@ Double click to pick a file. Untitled Sem_nome - - My computer - Meu computador - &Open... &Abrir... @@ -2688,14 +3506,6 @@ Por favor visite http://lmms.sf.net/wiki para ter acesso a mais infromações so E&xport... &Renderizar... - - My presets - Minhas pré definições - - - &Project - &Projeto - Could not save config-file O arquivo de configuração não pode ser salvo @@ -2708,14 +3518,6 @@ Por favor visite http://lmms.sf.net/wiki para ter acesso a mais infromações so Export current project Exportar projeto atual - - My projects - Meus projetos - - - My samples - Minhas amostras - Click here to show or hide the Automation Editor. With the help of the Automation Editor you can edit dynamic values in an easy way. Clique aqui para mostrar ou esconder o Editor de Automação. Com ele você pode editar os valores dinâmicos de automação facilmente. @@ -2730,10 +3532,6 @@ Please make sure you have write-access to the file and try again. O arquivo de configuração %1 não pode ser salvo. Provavelmente voc6e não tem permissão de escrita para este arquivo. Por favor certifique-se que você tem permissão de escrita para este arquivo e tente novamente. - - Project recovery - Recuperação de projeto - Settings Opções @@ -2750,14 +3548,6 @@ Por favor certifique-se que você tem permissão de escrita para este arquivo e Show/hide Beat+Bassline Editor Mostrar/esconder Editor de Bases - - Root directory - Diretório raiz - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - Parece que a última sessão não foi encerrada corretamente. Você quer recuperar o projeto da última sessão? - By pressing this button, you can show or hide the Beat+Bassline Editor. The Beat+Bassline Editor is needed for creating beats, and for opening, adding, and removing channels, and for cutting, copying and pasting beat and bassline-patterns, and for other things like that. Pressionando este botão você pode mostrar ou esconder o Editor de Bases. No Editor de Bases você pode criar as batidas e a linha de baixo para sua base adicionando ou removendo canais, copiando e colando sequências de batidas e/ou sequências de linha de baixo, ou o que mais você quiser. @@ -2770,10 +3560,6 @@ Por favor certifique-se que você tem permissão de escrita para este arquivo e Volumes - - &Recently opened projects - - Undo @@ -2786,6 +3572,62 @@ Por favor certifique-se que você tem permissão de escrita para este arquivo e LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2821,10 +3663,10 @@ Por favor certifique-se que você tem permissão de escrita para este arquivo e - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE - DISPOSITIVO + DISPOSITIVO @@ -3289,6 +4131,98 @@ Por favor certifique-se que você tem permissão de escrita para este arquivo e Sub3-LFO2 + + Sine wave + Onda senoidal + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + Onda triangular + + + Saw wave + Onda dente de serra + + + Ramp wave + + + + Square wave + Onda quadrada + + + Moog saw wave + + + + Abs. sine wave + + + + Random + Aleatório + + + Random smooth + + MonstroView @@ -3461,6 +4395,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3739,6 +4708,14 @@ use a roda do mouse para midificar o volume de cada passo Release: Relaxamento: + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3770,21 +4747,13 @@ use a roda do mouse para midificar o volume de cada passo Release Relaxamento + + Treshold + + PianoRoll - - Detune mode (Shift+T) - Automação para Afinação (Shift+T) - - - Cut selected notes (Ctrl+X) - Recortar notas selecionadas (Ctrl+X) - - - Draw mode (Shift+D) - Lápis (Shift+D) - No chord Sem acorde @@ -3793,46 +4762,14 @@ use a roda do mouse para midificar o volume de cada passo No scale Sem escala - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - Clique aqui e a automação para afinação será ativada. Nela você pode clicar na nota para abrir sua automação de afinação. Você pode utilizar esta ferramenta para fazer glissandos de uma altura para outra. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode ouvir a música feita no editor de arranjo ou no editor de batida tocando atrás. - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Clique aqui para tocar a sequência atual. Isto é útil enquanto se edita. A sequência irá entrar em loop automaticamente quando chegar ao fim. - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis. - Note Panning Panorâmico da nota - - Erase mode (Shift+E) - Borracha (Shift+E) - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Clique aqui e as notas selecionadas serão cortadas para dentro da área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência usando o botão de colar. - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - Clique aqui e as notas na área de transferência serão coladas no primeira grade visível. - Note Volume Volume da nota - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. - Piano-Roll - no pattern Editor de Notas MIDI - nenhuma sequência @@ -3841,18 +4778,6 @@ use a roda do mouse para midificar o volume de cada passo Mark/unmark current semitone Marcar/desmarcar o semitom atual - - Click here to stop playback of current pattern. - Clique aqui para parar a reprodução da sequência atual. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode editá-las depois. - - - Play/pause current pattern (Space) - Tocar/pausar sequência atual (Espaço) - Unmark all Desmarcar tudo @@ -3865,10 +4790,6 @@ use a roda do mouse para midificar o volume de cada passo Mark current chord Marcar o acorde atual - - Select mode (Shift+S) - Modo de Seleção (Shift+S) - Last note Última nota @@ -3881,58 +4802,10 @@ use a roda do mouse para midificar o volume de cada passo Piano-Roll - %1 Editor de Notas MIDI - %1 - - Paste notes from clipboard (Ctrl+V) - Colar notas da área de transferência (Ctrl+V) - - - Record notes from MIDI-device/channel-piano - Gravar notas do dispositivo MIDI ou Editor de Notas MIDI - - - Copy selected notes (Ctrl+C) - Copiar notas selecionadas (Ctrl+C) - - - Stop playing of current pattern (Space) - Parar de tocar a sequência atual (Espaço) - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - Clique aqui e modo de seleção será ativado. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Este modo torna possível a seleção de notas. Alternativamente você pode pressionar Crtl enquanto estiver usando o lápis para utilizar o modo de seleção temporariamente. - Please open a pattern by double-clicking on it! Por favor abra um a sequência com um duplo clique sobre ela! - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - Clique aqui e as notas selecionadas serão copiadas para a área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência clicando no botão de colar. - - - Record notes from MIDI-device/channel-piano while playing song or BB track - Gravar notas a partir do dispositivo MIDI ou do Editor de Notas MIDI enquanto toca o Arranjo ou uma Base - - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3954,6 +4827,117 @@ use a roda do mouse para midificar o volume de cada passo Por favor entre com um novo valor entre %1 e %2: + + PianoRollWindow + + Play/pause current pattern (Space) + + + + Record notes from MIDI-device/channel-piano + Gravar notas do dispositivo MIDI ou Editor de Notas MIDI + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Gravar notas a partir do dispositivo MIDI ou do Editor de Notas MIDI enquanto toca o Arranjo ou uma Base + + + Stop playing of current pattern (Space) + Parar de tocar a sequência atual (Espaço) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Clique aqui para tocar a sequência atual. Isto é útil enquanto se edita. A sequência irá entrar em loop automaticamente quando chegar ao fim. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode editá-las depois. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Clique aqui para gravar notas a partir de um dispositivo MIDI ou de um piano virtual de teste de acordo com o canal (janela) do programa correspondente. Quando estiver gravando, todas as notas que você tocar serão escritas nesta sequência e você ainda pode ouvir a música feita no editor de arranjo ou no editor de batida tocando atrás. + + + Click here to stop playback of current pattern. + Clique aqui para parar a reprodução da sequência atual. + + + Draw mode (Shift+D) + Lápis (Shift+D) + + + Erase mode (Shift+E) + Borracha (Shift+E) + + + Select mode (Shift+S) + Modo de Seleção (Shift+S) + + + Detune mode (Shift+T) + Automação para Afinação (Shift+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + Clique aqui e o lápis será ativado. O lápis serve para adicionar ou mover valores simples. Ele estará ativado previamente e será utilizado a maior parte do tempo. Você pode usar 'Shift+D' no teclado para ativar o lápis. + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + Clique aqui e a borracha será ativada. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + Clique aqui e modo de seleção será ativado. A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha.A borracha serve para apagar valores simples. Você pode usar 'Shif+E' no teclado para utilizar a borracha. Este modo torna possível a seleção de notas. Alternativamente você pode pressionar Crtl enquanto estiver usando o lápis para utilizar o modo de seleção temporariamente. + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + Clique aqui e a automação para afinação será ativada. Nela você pode clicar na nota para abrir sua automação de afinação. Você pode utilizar esta ferramenta para fazer glissandos de uma altura para outra. + + + Cut selected notes (Ctrl+X) + Recortar notas selecionadas (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Copiar notas selecionadas (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + Colar notas da área de transferência (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Clique aqui e as notas selecionadas serão cortadas para dentro da área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência usando o botão de colar. + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + Clique aqui e as notas selecionadas serão copiadas para a área de transferência. Você pode colá-las em qualquer lugar de qualquer sequência clicando no botão de colar. + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + Clique aqui e as notas na área de transferência serão coladas no primeira grade visível. + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3986,6 +4970,140 @@ Motivo: "%2" + + PluginBrowser + + Instrument plugins + Plugins de Instrumentos + + + Instrument browser + Navegador de instrumentos + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + Arraste um instrumento para uma pista existente no Editor de Arranjo ou no Editor de Bases. + + + + ProjectNotes + + Project notes + Notas do projeto + + + Put down your project notes here. + Faça suas anotações aqui. + + + Edit Actions + Ações de edição + + + &Undo + Des&fazer + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Refazer + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Copiar + + + Ctrl+C + Ctrl+C + + + Cu&t + Recor&tar + + + Ctrl+X + Ctrl+X + + + &Paste + C&olar + + + Ctrl+V + Ctrl+V + + + Format Actions + Ações de formatação + + + &Bold + &Negrito + + + Ctrl+B + Ctrl+B + + + &Italic + &Itálico + + + Ctrl+I + Ctrl+I + + + &Underline + S&ublinhado + + + Ctrl+U + Ctrl+U + + + &Left + &Esquerda + + + Ctrl+L + Ctrl+L + + + C&enter + C&entro + + + Ctrl+E + Ctrl+E + + + &Right + Di&reita + + + Ctrl+R + Ctrl+R + + + &Justify + &Justificar + + + Ctrl+J + Ctrl+J + + + &Color... + &Cor... + + ProjectRenderer @@ -4136,6 +5254,13 @@ Motivo: "%2" + + RenameDialog + + Rename... + Renomear... + + SampleBuffer @@ -4224,6 +5349,10 @@ Motivo: "%2" Volume Volume + + Panning + Panorâmico + SampleTrackView @@ -4239,37 +5368,317 @@ Motivo: "%2" Channel volume: Volume do canal: + + Panning + Panorâmico + + + Panning: + Panorâmico: + + + PAN + PAN + + + + SetupDialog + + Setup LMMS + Configurar LMMS + + + General settings + Opções gerais + + + BUFFER SIZE + TAMANHO DO BUFFER + + + Reset to default-value + Restaurar o valor padrão + + + MISC + VÁRIOS + + + Enable tooltips + Habilitar dicas + + + Show restart warning after changing settings + Mostrar aviso de reinicialização depois de mudança de configuração + + + Display volume as dBV + Mostrar volume em dBV + + + Compress project files per default + Sempre compactar arquivos de projeto + + + One instrument track window mode + Modo janela com uma pista de instrumento + + + HQ-mode for output audio-device + Modo de Alta Qualidade para a Saída do dispositivo de áudio + + + Compact track buttons + Botões de pista compactos + + + Sync VST plugins to host playback + Sincronizar plugins VST no hospedeiro (host) de reprodução + + + Enable note labels in piano roll + Habilitar camadas de notas no editor de notas MIDI + + + Enable waveform display by default + Habilitar visualizador de forma de onda por padrão + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Locais + + + LMMS working directory + Pasta de trabalho do LMMS + + + VST-plugin directory + Pasta com plugins VST + + + Artwork directory + Pasta com Temas para LMMS + + + Background artwork + Papel de parede + + + FL Studio installation directory + Pasta de instalação do FL Studio + + + LADSPA plugin paths + Locais de plugins LADSPA + + + STK rawwave directory + Pasta de STK rawwave + + + Default Soundfont File + Arquivo padrão de Soundfont + + + Performance settings + Opções de desempenho + + + UI effects vs. performance + Efeitos Visuais X Desempenho + + + Smooth scroll in Song Editor + Rolagem suave no Editor de Arranjo + + + Enable auto save feature + Habilitar a função de salvamento automático + + + Show playback cursor in AudioFileProcessor + Mostrar o cursor de reprodução dentro do AudioFileProcessor + + + Audio settings + Configurações de Áudio + + + AUDIO INTERFACE + INTERFACE DE ÁUDIO + + + MIDI settings + Configurações do MIDI + + + MIDI INTERFACE + INTERFACE DO MIDI + + + OK + OK + + + Cancel + Cancelar + + + Restart LMMS + Reiniciar LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Por favor note que a maioria das mudanças não terão efeito antes de reiniciar o LMMS! + + + Frames: %1 +Latency: %2 ms + Amostras: %1 +Latência: %2 ms + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Aqui você pode ajustar o tamanho do buffer interno usado pelo LMMS. Valores menores resultam em menor latência (atraso ao usar as teclas ou um controlador midi) mas podem provocar sons não desejados como plocs e bips ou má performance, esses problemas acontecem especialmente em computadores antigos ou sistema com kernel não compilado para trabalhar com processamento em tempo real. + + + Choose LMMS working directory + Escolher a pasta de trabalho do LMMS + + + Choose your VST-plugin directory + Escolher a pasta com plugins VST + + + Choose artwork-theme directory + Escolher a pasta com Temas para LMMS + + + Choose FL Studio installation directory + Escolher a pasta de instalação do FL Studio + + + Choose LADSPA plugin directory + Escolher a pasta com os plugins LADSPA + + + Choose STK rawwave directory + Escolher a pasta de STK rawwave + + + Choose default SoundFont + Escolher SoundFont padrão + + + Choose background artwork + Escolher Papel de Parede do LMMS + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Aqui você pode selecionar sua interface de áudio preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, JACK, OSS e outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de áudio selecionada. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Aqui você pode selecionar sua interface de MIDI preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, OSS entre outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de MIDI selecionada. + + + + Song + + Tempo + Andamento + + + Master volume + Volume Final + + + Master pitch + Altura Final + + + Project saved + Projeto salvo + + + The project %1 is now saved. + O projeto %1 está salvo agora. + + + Project NOT saved. + Projeto NÃO salvo. + + + The project %1 was not saved! + O projeto %1 não foi salvo! + + + Import file + Importar arquivo + + + MIDI sequences + Sequências MIDI + + + FL Studio projects + Projetos do FL Studio + + + Hydrogen projects + Projetos do Hydrogen + + + All file types + Todos os tipos de arquivo + + + Empty project + Projeto vazio + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + Este projeto está vazio, então exportá-lo não faz sentido. Por favor, coloque alguns itens dentro do Editor de Arranjo primeiro! + + + Select directory for writing exported tracks... + Selecionar pasta para escrita de pistas renderizadas... + + + untitled + sem nome + + + Select file for project-export... + Selecione o arquivo para exportar o projeto... + + + The following errors occured while loading: + + SongEditor - - Add beat/bassline - Adicionar Base - Tempo Andamento - - Record samples from Audio-device - Gravar amostras do Dispositivo de Áudio - - - Add automation-track - Adicionar pista de automação - Master pitch Altura Final - - Add sample-track - Adicionar pista de amostra - - - Song-Editor - Editor de Arranjo - TEMPO/BPM ANDAMENTO/BPM @@ -4278,10 +5687,6 @@ Motivo: "%2" master pitch altura final - - Record samples from Audio-device while playing song or BB track - Gravar amostras a partir do dispositivo de Áudio enquanto reproduz o arranjo ou base - master volume volume final @@ -4298,30 +5703,10 @@ Motivo: "%2" Could not open file Não é possível abrir o arquivo - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Clique aqui se você quer parar de tocar a música. O marcador de posição (verde), será ajustado para o início da música. - The tempo of a song is specified in beats per minute (BPM). If you want to change the tempo of your song, change this value. Every measure has four beats, so the tempo in BPM specifies, how many measures / 4 should be played within a minute (or how many measures should be played within four minutes). o andamento de uma música é especificado em batidas por minuto (BPM). Se voc6e precisar mudar o andamento de sua música, mude esse valor. Todo compasso tem 4 batidas, logo o andamento em BPM especificara a quantidade de batidas dividida por 4. - - Draw mode - Lápis - - - Stop song (Space) - Parar música (Espaço) - - - Play song (Space) - Tocar música (Espaço) - - - Edit mode (select and move) - Modo de Edição (seleciona e move) - Could not write file Não é possivel salvar o arquivo @@ -4348,10 +5733,6 @@ Motivo: "%2" Value: %1 semitones Valor: %1 semitons - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Clique aqui se você quer tocar toda a música. A música iniciará no posição do marcador (verde). Você pode move-lo enquanto estiver tocando. - The file %1 seems to contain errors and therefore can't be loaded. O arquivo %1 parece conter erros e por isso não pode ser carregado. @@ -4361,6 +5742,57 @@ Motivo: "%2" andamento da música + + SongEditorWindow + + Song-Editor + Editor de Arranjo + + + Play song (Space) + Tocar música (Espaço) + + + Record samples from Audio-device + Gravar amostras do Dispositivo de Áudio + + + Record samples from Audio-device while playing song or BB track + Gravar amostras a partir do dispositivo de Áudio enquanto reproduz o arranjo ou base + + + Stop song (Space) + Parar música (Espaço) + + + Add beat/bassline + + + + Add sample-track + Adicionar pista de amostra + + + Add automation-track + Adicionar pista de automação + + + Draw mode + Lápis + + + Edit mode (select and move) + Modo de Edição (seleciona e move) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Clique aqui se você quer tocar toda a música. A música iniciará no posição do marcador (verde). Você pode move-lo enquanto estiver tocando. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Clique aqui se você quer parar de tocar a música. O marcador de posição (verde), será ajustado para o início da música. + + SpectrumAnalyzerControlDialog @@ -4388,11 +5820,14 @@ Motivo: "%2" - TempoSyncKnob + TabWidget - &Help - Aj&uda + Settings for %1 + + + + TempoSyncKnob Synced to Quarter Note Sincronizado com 1/4 de Nota @@ -4473,6 +5908,52 @@ Motivo: "%2" clique para mudar as unidades de tempo + + TimeLineWidget + + Enable/disable auto-scrolling + Ativa/desativa auto-rolagem + + + Enable/disable loop-points + Ativa/desativa pontos de loop + + + After stopping go back to begin + Quando parar volta para o começo + + + After stopping go back to position at which playing was started + Quando parar volta para a posição que estava quando começou a tocar + + + After stopping keep position + Quando parar mantém a posição + + + Hint + Sugestão + + + Press <Ctrl> to disable magnetic loop points. + Pressione <Ctrl> para desabilitar os pontos de loop magnéticos. + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + Pressione <Shift> para mover o começo do ponto de loop; Pressione <Ctrl> para desabilitar os pontos de loop magnéticos. + + + + Track + + Muted + Mudo + + + Solo + + + TrackContainer @@ -4516,6 +5997,107 @@ Por favor certifique-se que você tem permissões de leitura para o arquivo e pa Por favor aguarde... + + TrackContentObject + + Muted + Mudo + + + + TrackContentObjectView + + Current position + Posição atual + + + Hint + Sugestão + + + Press <Ctrl> and drag to make a copy. + Pressione <Ctrl> e arraste para fazer uma cópia. + + + Current length + Tamanho atual + + + Press <Ctrl> for free resizing. + Pressione <Ctrl> para redimensionar livremente. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 até %5:%6) + + + Delete (middle mousebutton) + + + + Cut + Recortar + + + Copy + Copiar + + + Paste + Colar + + + Mute/unmute (<Ctrl> + middle click) + + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Pressione <Ctrl> enquanto clica em mover-grip para o começo, uma ação de arrastar. + + + Actions for this track + Ações para esta pista + + + Mute + Mudo + + + Solo + + + + Mute this track + Deixar esta pista muda + + + Clone this track + Clonar esta pista + + + Remove this track + Remover esta pista + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4659,17 +6241,6 @@ Por favor certifique-se que você tem permissões de leitura para o arquivo e pa Use uma onda triangular no oscilador atual. - - Ui - - Contributors ordered by number of commits: - Colaboradores ordenados por ordem de contribuição: - - - Involved - Envolvidos - - VersionedSaveDialog @@ -4772,6 +6343,17 @@ Por favor certifique-se que você tem permissões de leitura para o arquivo e pa Nenhum plugin VST carregado + + VisualizationWidget + + click to enable/disable visualization of master-output + Clique para habilitar/desabilitar a visualização da saída final + + + Click to enable + Clique para habilitar + + VstEffectControlDialog @@ -4878,11 +6460,7 @@ Por favor certifique-se que você tem permissões de leitura para o arquivo e pa - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5288,78 +6866,9 @@ Por favor certifique-se que você tem permissões de leitura para o arquivo e pa Sinc - - - bbEditor - Add beat/bassline - Adicionar base - - - Click here to stop playing of current beat/bassline. - Clique aqui para parar a base atual. - - - Add automation-track - Adicionar pista de automação - - - Stop playback of current beat/bassline (Space) - Parar reprodução da base atual (Espaço) - - - Remove steps - Remover passos - - - Beat+Bassline Editor - Editor de Bases - - - Add steps - Adicionar passos - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Clique aqui se você quiser tocar a base atual. A base entra em loop automaticamente quando chega ao fim. - - - Play/pause current beat/bassline (Space) - Tocar/pausar a base atual (Espaço) - - - - bbTCOView - - Open in Beat+Bassline-Editor - Abrir no editor de Bases - - - Change color - Mudar cor - - - Reset name - Restaurar nome - - - Change name - Mudar nome - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - Base %1 - - - Clone of %1 - Clone de %1 + Sample not found: %1 + Amostra não encontrada: %1 @@ -5558,42 +7067,6 @@ Por favor certifique-se que você tem permissões de leitura para o arquivo e pa - - exportProjectDialog - - Error - Erro - - - Could not open file - Não é possível abrir o arquivo - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Não é possível abrir o arquivo %1 para gravação. -Por favor certifique-se que você tem permissão para gravação no arquivo e se o arquivo se encontra no diretório e tente novamente! - - - Error while determining file-encoder device. Please try to choose a different output format. - Erro ao determinar o dispositivo codificador de arquivo. Por favor tente um formato de saída diferente. - - - Rendering: %1% - Renderizando: %1% - - - Export project to %1 - Exportar projeto para %1 - - - - fader - - Please enter a new value between %1 and %2: - Por favor entre com um novo valor entre %1 e %2: - - graphModel @@ -5695,21 +7168,6 @@ Por favor certifique-se que você tem permissão para gravação no arquivo e se - - knob - - &Help - Aj&uda - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Por favor entre um novo valor entre -96.0 dBV e 6.0 dBV: - - - Please enter a new value between %1 and %2: - Por favor entre com um novo valor entre %1 e %2: - - ladspaBrowserView @@ -6443,13 +7901,6 @@ Clicando duas vezes com o mouse em qualquer plugin, voc6e terá informações so Clique aqui para exibir somente os parâmetros automatizados. - - nineButtonSelector - - &Help - Aj&uda - - opl2instrument @@ -6927,10 +8378,6 @@ Clicando duas vezes com o mouse em qualquer plugin, voc6e terá informações so Player for SoundFont files Tocador de arquivos de SounFont - - Instrument browser - Navegador de instrumentos - Filter for importing FL Studio projects into LMMS Filtro para importação de projetos do FL Studio para o LMMS @@ -6955,10 +8402,6 @@ Clicando duas vezes com o mouse em qualquer plugin, voc6e terá informações so Vibrating string modeler Modelador de Cordas vibrantes - - Instrument plugins - Plugins de Instrumentos - VST-host for using VST(i)-plugins within LMMS Servidor (host) VST para usar plugins VST(i) com o LMMS @@ -6981,10 +8424,6 @@ Este chip foi utilizado no computador Commodore 64. Emulation of GameBoy (TM) APU Emulação do GameBoy (TM) APU - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - Arraste um instrumento para uma pista existente no Editor de Arranjo ou no Editor de Bases. - Incomplete monophonic imitation tb303 Imitação monofônica incompleta de tb303 @@ -7057,335 +8496,83 @@ Este chip foi utilizado no computador Commodore 64. A NES-like synthesizer - - - projectNotes - Cu&t - Recor&tar + Player for GIG files + - &Bold - &Negrito + A multitap echo delay plugin + - &Copy - &Copiar + A native flanger plugin + - &Left - &Esquerda + A native delay plugin + - &Redo - &Refazer + An oversampling bitcrusher + - &Undo - Des&fazer + A native eq plugin + - Format Actions - Ações de formatação - - - &Justify - &Justificar - - - Project notes - Notas do projeto - - - &Paste - C&olar - - - &Right - Di&reita - - - Edit Actions - Ações de edição - - - Ctrl+B - Ctrl+B - - - Ctrl+C - Ctrl+C - - - Ctrl+E - Ctrl+E - - - Ctrl+I - Ctrl+I - - - Ctrl+J - Ctrl+J - - - Ctrl+L - Ctrl+L - - - Ctrl+R - Ctrl+R - - - Ctrl+U - Ctrl+U - - - Ctrl+V - Ctrl+V - - - Ctrl+X - Ctrl+X - - - Ctrl+Y - Ctrl+Y - - - Ctrl+Z - Ctrl+Z - - - Put down your project notes here. - Faça suas anotações aqui. - - - C&enter - C&entro - - - &Color... - &Cor... - - - &Underline - S&ublinhado - - - &Italic - &Itálico + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Renomear... - - - - setupDialog - - OK - OK + JACK (JACK Audio Connection Kit) + - MISC - VÁRIOS + OSS Raw-MIDI (Open Sound System) + - General settings - Opções gerais + SDL (Simple DirectMedia Layer) + - AUDIO INTERFACE - INTERFACE DE ÁUDIO + PulseAudio (bad latency!) + - Paths - Locais + Dummy (no MIDI support) + - Performance settings - Opções de desempenho + ALSA Raw-MIDI (Advanced Linux Sound Architecture) + - Choose background artwork - Escolher Papel de Parede do LMMS + PortAudio + - FL Studio installation directory - Pasta de instalação do FL Studio + Dummy (no sound output) + - Enable waveform display by default - Habilitar visualizador de forma de onda por padrão + ALSA (Advanced Linux Sound Architecture) + - Reset to default-value - Restaurar o valor padrão + OSS (Open Sound System) + - One instrument track window mode - Modo janela com uma pista de instrumento + WinMM MIDI + - Choose LADSPA plugin directory - Escolher a pasta com os plugins LADSPA - - - LMMS working directory - Pasta de trabalho do LMMS - - - Choose default SoundFont - Escolher SoundFont padrão - - - Please note that most changes won't take effect until you restart LMMS! - Por favor note que a maioria das mudanças não terão efeito antes de reiniciar o LMMS! - - - Enable tooltips - Habilitar dicas - - - Show restart warning after changing settings - Mostrar aviso de reinicialização depois de mudança de configuração - - - Cancel - Cancelar - - - Smooth scroll in Song Editor - Rolagem suave no Editor de Arranjo - - - Frames: %1 -Latency: %2 ms - Amostras: %1 -Latência: %2 ms - - - MIDI INTERFACE - INTERFACE DO MIDI - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Aqui você pode ajustar o tamanho do buffer interno usado pelo LMMS. Valores menores resultam em menor latência (atraso ao usar as teclas ou um controlador midi) mas podem provocar sons não desejados como plocs e bips ou má performance, esses problemas acontecem especialmente em computadores antigos ou sistema com kernel não compilado para trabalhar com processamento em tempo real. - - - Background artwork - Papel de parede - - - Compact track buttons - Botões de pista compactos - - - Choose FL Studio installation directory - Escolher a pasta de instalação do FL Studio - - - Audio settings - Configurações de Áudio - - - UI effects vs. performance - Efeitos Visuais X Desempenho - - - LADSPA plugin paths - Locais de plugins LADSPA - - - Choose artwork-theme directory - Escolher a pasta com Temas para LMMS - - - Show playback cursor in AudioFileProcessor - Mostrar o cursor de reprodução dentro do AudioFileProcessor - - - Enable auto save feature - Habilitar a função de salvamento automático - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Aqui você pode selecionar sua interface de áudio preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, JACK, OSS e outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de áudio selecionada. - - - Compress project files per default - Sempre compactar arquivos de projeto - - - HQ-mode for output audio-device - Modo de Alta Qualidade para a Saída do dispositivo de áudio - - - BUFFER SIZE - TAMANHO DO BUFFER - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Aqui você pode selecionar sua interface de MIDI preferida. Dependendo das configurações do sistema durante a compilação, você poderá escolher entre ALSA, OSS entre outros. Abaixo você verá uma caixa que oferece controles para ajustar a interface de MIDI selecionada. - - - Display volume as dBV - Mostrar volume em dBV - - - Choose STK rawwave directory - Escolher a pasta de STK rawwave - - - Default Soundfont File - Arquivo padrão de Soundfont - - - Sync VST plugins to host playback - Sincronizar plugins VST no hospedeiro (host) de reprodução - - - Setup LMMS - Configurar LMMS - - - Choose your VST-plugin directory - Escolher a pasta com plugins VST - - - Choose LMMS working directory - Escolher a pasta de trabalho do LMMS - - - Restart LMMS - Reiniciar LMMS - - - STK rawwave directory - Pasta de STK rawwave - - - VST-plugin directory - Pasta com plugins VST - - - MIDI settings - Configurações do MIDI - - - Artwork directory - Pasta com Temas para LMMS - - - Enable note labels in piano roll - Habilitar camadas de notas no editor de notas MIDI - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7443,6 +8630,10 @@ Latência: %2 ms Reverb Roomsize Tamanho da sala em Reverberação + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7688,77 +8879,6 @@ Latência: %2 ms Filtro Passa Alta - - song - - Tempo - Andamento - - - Master pitch - Altura Final - - - Project saved - Projeto salvo - - - Master volume - Volume Final - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - Este projeto está vazio, então exportá-lo não faz sentido. Por favor, coloque alguns itens dentro do Editor de Arranjo primeiro! - - - MIDI sequences - Sequências MIDI - - - All file types - Todos os tipos de arquivo - - - untitled - sem nome - - - Select file for project-export... - Selecione o arquivo para exportar o projeto... - - - FL Studio projects - Projetos do FL Studio - - - Project NOT saved. - Projeto NÃO salvo. - - - Import file - Importar arquivo - - - The project %1 is now saved. - O projeto %1 está salvo agora. - - - Select directory for writing exported tracks... - Selecionar pasta para escrita de pistas renderizadas... - - - Empty project - Projeto vazio - - - The project %1 was not saved! - O projeto %1 não foi salvo! - - - Hydrogen projects - Projetos do Hydrogen - - stereoEnhancerControlDialog @@ -7815,157 +8935,6 @@ Latência: %2 ms Dir para Dir - - timeLine - - Hint - Sugestão - - - After stopping go back to begin - Quando parar volta para o começo - - - Press <Ctrl> to disable magnetic loop points. - Pressione <Ctrl> para desabilitar os pontos de loop magnéticos. - - - Enable/disable auto-scrolling - Ativa/desativa auto-rolagem - - - After stopping go back to position at which playing was started - Quando parar volta para a posição que estava quando começou a tocar - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - Pressione <Shift> para mover o começo do ponto de loop; Pressione <Ctrl> para desabilitar os pontos de loop magnéticos. - - - After stopping keep position - Quando parar mantém a posição - - - Enable/disable loop-points - Ativa/desativa pontos de loop - - - - track - - Solo - - - - Muted - Mudo - - - - trackContentObject - - Muted - Mudo - - - - trackContentObjectView - - Cut - Recortar - - - Copy - Copiar - - - Hint - Sugestão - - - Paste - Colar - - - Press <Ctrl> for free resizing. - Pressione <Ctrl> para redimensionar livremente. - - - Delete (middle mousebutton) - Apagar (botão do meio do mouse) - - - Press <Ctrl> and drag to make a copy. - Pressione <Ctrl> e arraste para fazer uma cópia. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 até %5:%6) - - - Current length - Tamanho atual - - - Mute/unmute (<Ctrl> + middle click) - Mudo/não mudo (<Ctrl> + botão do meio) - - - Current position - Posição atual - - - - trackOperationsWidget - - Mute - Mudo - - - Solo - - - - Clone this track - Clonar esta pista - - - Actions for this track - Ações para esta pista - - - Remove this track - Remover esta pista - - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Pressione <Ctrl> enquanto clica em mover-grip para o começo, uma ação de arrastar. - - - Mute this track - Deixar esta pista muda - - - Clear this track - - - - Assign to new FX Channel - Associar a um novo Mixer de Efeitos - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7976,16 +8945,6 @@ Latência: %2 ms Please wait while loading VST-plugin... Por favor, espere enquanto carrego o plugin VST... - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - O plugin VST %1 não pode ser carregado por alguma razão. -Se ele rodar com outro programa VST no Linux, por favor entre em contato com um desenvolvedor do LMMS! - - - Failed loading VST-plugin - Falha ao carregar plugin VST - vibed @@ -8036,10 +8995,6 @@ Se ele rodar com outro programa VST no Linux, por favor entre em contato com um Pan: - - &Help - Aj&uda - The Octave selector is used to choose which harmonic of the note the string will ring at. For example, '-2' means the string will ring two octaves below the fundamental, 'F' means the string will ring at the fundamental, and '6' means the string will ring six octaves above the fundamental. O seletor "Octave" é usado para escolher que harmônico da nota na corda irá soar mais. Por exemplo, "-2" significa que a corda vibrará duas oitavas abaixo da Fundamental, "F" significa que a corda vibrará na frequência Fundamental e "6" significa que a corda vai vibrar 6 oitavas acima da fundamental. @@ -8241,17 +9196,6 @@ O LED no canto direito inferior do editor de forma de onda determina que a corda Habilitar forma de onda - - visualizationWidget - - click to enable/disable visualization of master-output - Clique para habilitar/desabilitar a visualização da saída final - - - Click to enable - Clique para habilitar - - voiceObject diff --git a/data/locale/ru.ts b/data/locale/ru.ts index a85d474e3..a59fe4814 100644 --- a/data/locale/ru.ts +++ b/data/locale/ru.ts @@ -52,6 +52,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS ЛММС + + Involved + Участники + + + Contributors ordered by number of commits: + Разработчики сортированные по числу коммитов: + AmplifierControlDialog @@ -197,10 +205,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -227,16 +231,13 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. Возможно JACK-сервер был выключен и запуск нового процесса не удался, поэтому ЛММС не может продолжить работу. Вам следует сохранить проект и перезапустить JACK и LMMS. - - - AudioJack::setupWidget CLIENT-NAME - ИМЯ КЛИЕНТА + ИМЯ КЛИЕНТА CHANNELS - КАНАЛЫ + КАНАЛЫ @@ -329,72 +330,6 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor - - Play/pause current pattern (Space) - Игра/Пауза текущего шаблона (Пробел) - - - Stop playing of current pattern (Space) - Остановить проигрывание текущего шаблона (Пробел) - - - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. Шаблон автоматически закольцуется при достижении конца. - - - Click here if you want to stop playing of the current pattern. - Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона. - - - Draw mode (Shift+D) - Режим рисования (Shift+D) - - - Erase mode (Shift+E) - Режим стирания (Shift+E) - - - Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - При нажатии на эту кнопку активируется режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это основной режим и используется большую часть времени. -Для включения этого режима можно использовать комбинацию клавиш Shift+D. - - - Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - При нажатии на эту кнопку активируется режим стирания. В этом режиме вы можете стирать ноты по одной. -Для включения этого режима можно использовать комбинацию клавиш Shift+E. - - - Cut selected values (Ctrl+X) - Вырезать выбранные ноты (Ctrl+X) - - - Copy selected values (Ctrl+C) - Копировать выбранные ноты в буфер (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Вставить значения из буфера (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". - - - Click here and the values from the clipboard will be pasted at the first visible measure. - При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. - - - Automation Editor - no pattern - Редактор автоматизаци — нет шаблона - - - Automation Editor - %1 - Редактор автоматизации — %1 - Please open an automation pattern with the context menu of a control! Откройте редатор автоматизации через контекстное меню регулятора! @@ -407,41 +342,126 @@ If you're interested in translating LMMS in another language or want to imp All selected values were copied to the clipboard. Все выбранные значения скопированы в буфер обмена. + + + AutomationEditorWindow + + Play/pause current pattern (Space) + + + + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. Шаблон автоматически закольцуется при достижении конца. + + + Stop playing of current pattern (Space) + + + + Click here if you want to stop playing of the current pattern. + Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона. + + + Draw mode (Shift+D) + Режим рисования (Shift+D) + + + Erase mode (Shift+E) + + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. + При нажатии на эту кнопку активируется режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это основной режим и используется большую часть времени. +Для включения этого режима можно использовать комбинацию клавиш Shift+D. + + + Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. + При нажатии на эту кнопку активируется режим стирания. В этом режиме вы можете стирать ноты по одной. +Для включения этого режима можно использовать комбинацию клавиш Shift+E. + Discrete progression - Дискретная прогрессия + Дискретная прогрессия Linear progression - Линейная прогрессия + Линейная прогрессия Cubic Hermite progression - Кубическая Эрмитова прогрессия - - - Tension: - Напряжение: - - - Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. - Выбор дискретной прогрессии для этого шаблона автоматизации. Кол-во подсоединенных объектов будет оставаться постоянным между управляющими точками и будет установлено на новое значение сразу по достижении каждой управляющей точки. - - - Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. - Выбор линейной прогрессии для этого шаблона автоматизации. Кол-во подсоединенных объектов будет меняться с постоянной скоростью во времени между управляющими точками для достижения точного значения в каждой управляющей точки без внезапных изменений. - - - Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. - Кубическая Эрмитова прогрессия для этого шаблона автоматизации. Кол-во подсоединенных объектов изменится по сглаженной кривой и смягчится на пиках и спадах. + Кубическая Эрмитова прогрессия Tension value for spline - Величина напряжения для сплайна + Величина напряжения для сплайна - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. - Высокое напряжение может смягчить кривую, но перегрузить некоторые значение. Низкое напряжение может подкосить кривую до низкого уровня в каждой управляющей точке. + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + + + + Click here to choose discrete progressions for this automation pattern. The value of the connected object will remain constant between control points and be set immediately to the new value when each control point is reached. + Выбор дискретной прогрессии для этого шаблона автоматизации. Кол-во подсоединенных объектов будет оставаться постоянным между управляющими точками и будет установлено на новое значение сразу по достижении каждой управляющей точки. + + + Click here to choose linear progressions for this automation pattern. The value of the connected object will change at a steady rate over time between control points to reach the correct value at each control point without a sudden change. + Выбор линейной прогрессии для этого шаблона автоматизации. Кол-во подсоединенных объектов будет меняться с постоянной скоростью во времени между управляющими точками для достижения точного значения в каждой управляющей точки без внезапных изменений. + + + Click here to choose cubic hermite progressions for this automation pattern. The value of the connected object will change in a smooth curve and ease in to the peaks and valleys. + Кубическая Эрмитова прогрессия для этого шаблона автоматизации. Кол-во подсоединенных объектов изменится по сглаженной кривой и смягчится на пиках и спадах. + + + Cut selected values (Ctrl+X) + Вырезать выбранные ноты (Ctrl+X) + + + Copy selected values (Ctrl+C) + Копировать выбранные ноты в буфер (Ctrl+C) + + + Paste values from clipboard Ctrl+V) + + + + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". + + + Click here and the values from the clipboard will be pasted at the first visible measure. + При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. + + + Tension: + Напряжение: + + + Automation Editor - no pattern + Редактор автоматизаци — нет шаблона + + + Automation Editor - %1 + Редактор автоматизации — %1 @@ -489,6 +509,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record Установить/очистить запись + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -497,6 +525,79 @@ If you're interested in translating LMMS in another language or want to imp Дорожка автоматизации + + BBEditor + + Beat+Bassline Editor + Ритм Басс Редактор + + + Play/pause current beat/bassline (Space) + Игра/пауза текущей линии ритма/басса (<Space>) + + + Stop playback of current beat/bassline (Space) + Остановить воспроизведение текущей линии ритм-басса (ПРОБЕЛ) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + Нажмите чтобы проиграть текущую линию ритм-басса. Она будет закольцована по достижении окончания. + + + Click here to stop playing of current beat/bassline. + Остановить воспроизведение (Пробел). + + + Add beat/bassline + + + + Add automation-track + Добавить дорожку автоматизации + + + Remove steps + + + + Add steps + + + + + BBTCOView + + Open in Beat+Bassline-Editor + Открыть в редакторе ритма и басса + + + Reset name + Сбросить название + + + Change name + Переименовать + + + Change color + Изменить цвет + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + Ритм-Басс Линия %1 + + + Clone of %1 + Копия %1 + + BassBoosterControlDialog @@ -539,6 +640,100 @@ If you're interested in translating LMMS in another language or want to imp Отношение + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + УСИЛ + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + Частота выборки + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &H Справка + + + Help (not available) + + + CarlaInstrumentView @@ -657,9 +852,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin &R Убрать этот фильтр + + + CrossoverEQControlDialog - &Help - &H Справка + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + Частота выборки + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -787,6 +1098,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter Фильтр Вокальной форманты + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -931,10 +1296,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin &R Убрать фильтр - - &Help - &H Справка - EnvelopeAndLfoParameters @@ -1174,6 +1535,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + Усиление + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + Частота: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1312,6 +1922,43 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) Экспортировать как петлю (убрать тишину в конце) + + Export between loop markers + + + + Could not open file + Не могу открыть файл + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + Не могу открыть файл %1 для записи. +Проверьте, обладаете ли вы правами на запись в выбранный файл и содержащий его каталог и попробуйте снова! + + + Export project to %1 + Экспорт проекта в %1 + + + Error + Ошибка + + + Error while determining file-encoder device. Please try to choose a different output format. + Ошибка при определении кодека файла. Попробуйте выбрать другой формат вывода. + + + Rendering: %1% + Обработка: %1% + + + + Fader + + Please enter a new value between %1 and %2: + Введите новое значение от %1 до %2: + FileBrowser @@ -1347,6 +1994,76 @@ Right clicking will bring up a context menu where you can change the order in wh --- Заводские файлы --- + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + Шум + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + Шум + + + White Noise Amount: + + + FxLine @@ -1380,8 +2097,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - &H Справка + Remove &unused channels + @@ -1409,9 +2126,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer Микшер Эффектов - - - FxMixerView::FxChannelView FX Fader %1 Ползунок Эффекта %1 @@ -1424,6 +2138,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel Тишина на этом канале Эффекта + + Solo + Соло + + + Solo FX channel + + FxRoute @@ -1432,6 +2154,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + Банк + + + Patch + Патч + + + Gain + Усиление + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + Выбрать патч + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + Усиление + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2024,6 +2808,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2123,6 +2918,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter Фильтр Вокальной форманты + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2214,6 +3037,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range Диапазон тональности + + Master Pitch + + InstrumentTrackView @@ -2348,6 +3175,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + РАЗНОЕ + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Введите новое значение от –96,0 дБВ до 6,0 дБВ: + + + Please enter a new value between %1 and %2: + Введите новое значение от %1 до %2: + LadspaControl @@ -2384,10 +3234,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - Эффект - Unknown LADSPA plugin %1 requested. Запрошен неизвестный модуль LADSPA «%1». @@ -2513,11 +3359,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Сгенерировать меандр. Квадрат. - - Click here for a a moog saw-wave. - Генерировать пилообразный сигнал как moog. - Муг зигзаг. - Click here for an exponential wave. Генерировать экспоненциальный сигнал. @@ -2533,6 +3374,10 @@ Double click to pick a file. Нажмите здесь для определения своей формы. Двойное нажатие для выбора файла. + + Click here for a moog saw-wave. + + MainWindow @@ -2554,10 +3399,6 @@ Please make sure you have write-access to the file and try again. Не могу записать настройки в файл %1. Возможно, вы не обладаете правами на запись в него. Пожалуйста, проверьте свои права и попробуйте снова. - - &Project - &P Проект - &New &N Новый @@ -2602,10 +3443,6 @@ Please make sure you have write-access to the file and try again. &Help &H Справка - - Online help - Справка в сети - Help Справка @@ -2711,14 +3548,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? Проект был изменён. Сохранить его сейчас? - - Open project - Открыть проект - - - Save project - Сохранить проект - Help not available Справка недоступна @@ -2729,38 +3558,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Пока что справка для LMMS не написана. Вероятно, Вы сможете найти нужные материалы на http://lmms.sf.net/wiki . - - My projects - Мои проекты - - - My samples - Мои записи - - - My presets - Мои предустановки - - - My home - Домой - - - My computer - Мой компьютер - - - Root directory - Корневая папка - - - Save as new &version - &V Сохранить как новую версию - - - E&xport tracks... - &X экспортировать дорожки... - LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) @@ -2769,14 +3566,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 Версия %1 - - Project recovery - Восстановление проекта - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - Кажется, последняя сессия была неправильно закрыта. Хотите восстановить проект этой сессии? - Configuration file Файл настроек @@ -2789,10 +3578,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes - - &Recently opened projects - - Undo @@ -2805,6 +3590,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2842,10 +3683,10 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE - УСТРОЙСТВО + УСТРОЙСТВО @@ -3311,6 +4152,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + Синусоида + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + + + + Saw wave + Зигзаг + + + Ramp wave + + + + Square wave + + + + Moog saw wave + + + + Abs. sine wave + + + + Random + Случайно + + + Random smooth + + MonstroView @@ -3483,6 +4416,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3761,6 +4729,14 @@ use mouse wheel to set volume of a step DCAY СПАД + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3792,29 +4768,13 @@ use mouse wheel to set volume of a step Amount Multiplicator Величина множителя + + Treshold + + PianoRoll - - Cut selected notes (Ctrl+X) - Переместить выделенные ноты в буфер (Ctrl+X) - - - Copy selected notes (Ctrl+C) - Копировать выделенные ноты в буфер (Ctrl+X) - - - Paste notes from clipboard (Ctrl+V) - Вставить ноты из буфера (Ctrl+V) - - - Play/pause current pattern (Space) - Воспроизведение текущего шаблона/пауза (Пробел) - - - Stop playing of current pattern (Space) - Остановить воспроизвдение шаблона (Пробел) - Piano-Roll - no pattern Нотный редактор - без шаблона @@ -3827,58 +4787,10 @@ use mouse wheel to set volume of a step Please open a pattern by double-clicking on it! Откройте шаблон с помощью двойного щелчка мышью! - - Record notes from MIDI-device/channel-piano - Записать ноты с цифрового музыкального инструмента (MIDI) - Last note По посл. ноте - - Draw mode (Shift+D) - Режим рисования (Shift+D) - - - Erase mode (Shift+E) - Режим стирания нот (Shift+E) - - - Select mode (Shift+S) - Режим выбора нот (Shift+S) - - - Record notes from MIDI-device/channel-piano while playing song or BB track - Записать ноты с цифрового музыкального инструмента (MIDI) во время воспроизведения композиции или дорожки Ритм-Басса - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. По окончании шаблона воспроизведение начнётся сначала. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Позже вы сможете отредактировать записанный шаблон. - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Во время записи все ноты записываются в этот шаблон, и вы будете слышать композицию или РБ дорожку на заднем плане. - - - Click here to stop playback of current pattern. - Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона. - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. - Note lock Фиксация нот @@ -3891,27 +4803,6 @@ use mouse wheel to set volume of a step Note Panning Стереофония нот - - Detune mode (Shift+T) - Режим подстраивания (Shift+T) - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - Режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это режим по умолчанию и используется большую часть времени. -Для включения этого режима можно использовать комбинацию клавиш Shift+D, удерживайте Ctrl для временного переключения в режим выбора. - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - Режим стирания. В этом режиме вы можете стирать ноты. Для включения этого режима можно использовать комбинацию клавиш Shift+E. - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - Режим выделения. В этом режиме можно выделять ноты, можно также удерживать Ctrl в режиме рисования, чтобы можно было на время войти в режим выделения. - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - Режим подстройки. В этом режиме можно выбирать ноты для автоматизации их подстраивания. Можно использовать это для переходов нот от одной к другой. Для активации с клавиатуры <Shift+T>. - Mark/unmark current semitone Отметить/Снять отметку с текущего полутона @@ -3936,26 +4827,6 @@ use mouse wheel to set volume of a step No chord Убрать аккорды - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3977,6 +4848,118 @@ use mouse wheel to set volume of a step Введите новое значение от %1 до %2: + + PianoRollWindow + + Play/pause current pattern (Space) + + + + Record notes from MIDI-device/channel-piano + Записать ноты с цифрового музыкального инструмента (MIDI) + + + Record notes from MIDI-device/channel-piano while playing song or BB track + Записать ноты с цифрового музыкального инструмента (MIDI) во время воспроизведения композиции или дорожки Ритм-Басса + + + Stop playing of current pattern (Space) + + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + Нажмите здесь чтобы проиграть текущий шаблон. Это может пригодиться при его редактировании. По окончании шаблона воспроизведение начнётся сначала. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Позже вы сможете отредактировать записанный шаблон. + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + Нажмите эту кнопку, если вы хотите записать ноты с устройства MIDI или виртуального синтезатора соответствующего канала. Во время записи все ноты записываются в этот шаблон, и вы будете слышать композицию или РБ дорожку на заднем плане. + + + Click here to stop playback of current pattern. + Нажмите здесь, если вы хотите остановить воспроизведение текущего шаблона. + + + Draw mode (Shift+D) + Режим рисования (Shift+D) + + + Erase mode (Shift+E) + + + + Select mode (Shift+S) + Режим выбора нот (Shift+S) + + + Detune mode (Shift+T) + Режим подстраивания (Shift+T) + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + Режим рисования нот, в нём вы можете добавлять/перемещать и изменять длительность одиночных нот. Это режим по умолчанию и используется большую часть времени. +Для включения этого режима можно использовать комбинацию клавиш Shift+D, удерживайте Ctrl для временного переключения в режим выбора. + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + Режим стирания. В этом режиме вы можете стирать ноты. Для включения этого режима можно использовать комбинацию клавиш Shift+E. + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + Режим выделения. В этом режиме можно выделять ноты, можно также удерживать Ctrl в режиме рисования, чтобы можно было на время войти в режим выделения. + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + Режим подстройки. В этом режиме можно выбирать ноты для автоматизации их подстраивания. Можно использовать это для переходов нот от одной к другой. Для активации с клавиатуры <Shift+T>. + + + Cut selected notes (Ctrl+X) + Переместить выделенные ноты в буфер (Ctrl+X) + + + Copy selected notes (Ctrl+C) + Копировать выделенные ноты в буфер (Ctrl+X) + + + Paste notes from clipboard (Ctrl+V) + Вставить ноты из буфера (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + При нажатии на эту кнопку выделеные ноты будут вырезаны в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + При нажатии на эту кнопку выделеные ноты будут скопированы в буфер. Позже вы можете вставить их в любое место любого шаблона с помощью кнопки "Вставить". + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + При нажатии на эту кнопку ноты из буфера будут вставлены в первый видимый такт. + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -4009,6 +4992,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + Инструменты + + + Instrument browser + Обзор инструментов + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + Вы можете переносить нужные вам инструменты из этой панели в музыкальный, ритм-басс редактор или в существующую дорожку инструмента. + + + + ProjectNotes + + Project notes + Заметки к проекту + + + Put down your project notes here. + Здесь вы можете держать заметки к своему проекту. + + + Edit Actions + Правка + + + &Undo + &U Отменить + + + Ctrl+Z + Ctrl+Z + + + &Redo + &R Повторить + + + Ctrl+Y + Ctrl+Y + + + &Copy + &C Копировать + + + Ctrl+C + Ctrl+C + + + Cu&t + &t Вырезать + + + Ctrl+X + Ctrl+X + + + &Paste + &P Вставить + + + Ctrl+V + Ctrl+V + + + Format Actions + Форматирование + + + &Bold + Полу&жирный + + + Ctrl+B + Ctrl+B + + + &Italic + &Курсив + + + Ctrl+I + + + + &Underline + &Подчеркнуть + + + Ctrl+U + + + + &Left + По &левому краю + + + Ctrl+L + + + + C&enter + По &центру + + + Ctrl+E + + + + &Right + По &правому краю + + + Ctrl+R + + + + &Justify + По &ширине + + + Ctrl+J + + + + &Color... + &Цвет... + + ProjectRenderer @@ -4159,6 +5276,13 @@ Reason: "%2" + + RenameDialog + + Rename... + Переименовать... + + SampleBuffer @@ -4248,6 +5372,10 @@ Reason: "%2" Volume Громкость + + Panning + + SampleTrackView @@ -4263,13 +5391,309 @@ Reason: "%2" VOL ГРОМ + + Panning + + + + Panning: + + + + PAN + БАЛ + + + + SetupDialog + + Setup LMMS + Настройка LMMS + + + General settings + Общие параметры + + + BUFFER SIZE + РАЗМЕР БУФЕРА + + + Reset to default-value + Восстановить значение по умолчанию + + + MISC + РАЗНОЕ + + + Enable tooltips + Включить подсказки + + + Show restart warning after changing settings + Показывать предупреждение о перезапуске при изменении настроек + + + Display volume as dBV + Отображать громкости в децибелах (напр.) + + + Compress project files per default + По умолчанию сжимать файлы проектов + + + One instrument track window mode + Режим окна одной инструментальной дорожки + + + HQ-mode for output audio-device + Режим высокого качества для вывода звука + + + Compact track buttons + Ужать кнопки дорожки + + + Sync VST plugins to host playback + Синхронизировать VST плагины с хостом воспроизведения + + + Enable note labels in piano roll + Включить обозначение нот в музыкальном редакторе + + + Enable waveform display by default + Включить отображение формы звуков по умолчанию + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + Пути + + + LMMS working directory + Рабочий каталог LMMS + + + VST-plugin directory + Каталог модулей VST + + + Artwork directory + Каталог с элементами оформления + + + Background artwork + Фоновое изображение + + + FL Studio installation directory + Каталог установки FL Studio + + + LADSPA plugin paths + Пути модулей LADSPA + + + STK rawwave directory + Каталог STK rawwave + + + Default Soundfont File + Основной Soundfont файл + + + Performance settings + Параметры производительности + + + UI effects vs. performance + Визуальные эффекты/производительность + + + Smooth scroll in Song Editor + Плавная прокрутка в музыкальном редакторе + + + Enable auto save feature + Включить функцию авто-сохранения + + + Show playback cursor in AudioFileProcessor + Показывать указатель воспроизведения в процессоре аудио файлов + + + Audio settings + Параметры звука + + + AUDIO INTERFACE + ЗВУКОВАЯ СИСТЕМА + + + MIDI settings + Параметры MIDI + + + MIDI INTERFACE + ИНТЕРФЕЙС MIDI + + + OK + ОГА + + + Cancel + Отменить + + + Restart LMMS + Перезапустите LMMS + + + Please note that most changes won't take effect until you restart LMMS! + Учтите, что большинство настроек не вступят в силу до перезапуска программы! + + + Frames: %1 +Latency: %2 ms + Фрагментов: %1 +Отклик: %2 + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + Здесь вы можете настроить размер внутреннего звукового буфера LMMS. Меньшие значения дают меньшее время отклика программы, но повышают потребление ресурсов - это особенно заметно на старых машинах и системах, ядро которых не поддерживает приоритета реального времени. Если наблюдается прерывистый звук, попробуйте увеличить размер буфера. + + + Choose LMMS working directory + Выбор рабочего каталога LMMS + + + Choose your VST-plugin directory + Выбор своего каталога для модулей VST + + + Choose artwork-theme directory + Выбор каталога с темой оформления для LMMS + + + Choose FL Studio installation directory + Выбор каталога установленной FL Studio + + + Choose LADSPA plugin directory + Выбор каталога с модулями LADSPA + + + Choose STK rawwave directory + Выбор каталога STK rawwave + + + Choose default SoundFont + Выбрать главный SoundFont + + + Choose background artwork + Выбрать фоновое изображение + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + Пожалуйста, выберите звуковую систему. В зависимости от конфигурации во время компилирования программы, вы можете использовать ALSA, JACK, OSS и другие. В нижней части окна настройки можно задать специфические параметры выбранной системы. + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + Пожалуйста, выберите интерфейс MIDI. В зависимости от конфигурации во время компилирования программы, вы можете использовать ALSA, OSS и другие. В нижней части окна настройки можно задать специфические параметры выбранного интерфейса. + + + + Song + + Tempo + Темп + + + Master volume + + + + Master pitch + + + + Project saved + Проект сохранён + + + The project %1 is now saved. + Проект %1 сохранён. + + + Project NOT saved. + Проект НЕ СОХРАНЁН. + + + The project %1 was not saved! + Проект %1 не сохранён! + + + Import file + Импорт файла + + + MIDI sequences + MiDi последовательности + + + FL Studio projects + FL Studio проекты + + + Hydrogen projects + Hydrogen проекты + + + All file types + Все типы файлов + + + Empty project + Проект пуст + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + Проект ничего не содержит, так что и экспортировать нечего. Сначала добавьте хотя бы одну дорожку с помощью музыкального редактора! + + + Select directory for writing exported tracks... + Выберите папку для записи экспортированных дорожек... + + + untitled + Неназванное + + + Select file for project-export... + Выбор файла для экспорта проекта... + + + The following errors occured while loading: + + SongEditor - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - Нажмите сюда, если вы хотите остановить воспроизведение мелодии. Курсор при этом будет установлен на начало композиции. - Could not open file Не могу открыть файл @@ -4278,50 +5702,6 @@ Reason: "%2" Could not write file Не могу записать файл - - Song-Editor - Музыкальный редактор - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - Нажмите, чтобы прослушать созданную мелодию. Воспроизведение начнётся с позиции курсора (зелёный треугольник); вы можете двигать его во время проигрывания. - - - Play song (Space) - Начать воспроизведение (Пробел) - - - Stop song (Space) - Остановить воспроизведение (Пробел) - - - Add beat/bassline - Добавить ритм/басс - - - Add sample-track - Добавить дорожку записи - - - Draw mode - Режим рисования - - - Edit mode (select and move) - Правка (выделение/перемещение) - - - Record samples from Audio-device - Записать сэмпл со звукового устройства - - - Record samples from Audio-device while playing song or BB track - Записать сэмпл с аудио-устройства во время воспроизведения в музыкальном или ритм/басс редакторе - - - Add automation-track - Добавить дорожку автоматизации - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4385,6 +5765,57 @@ Reason: "%2" Невозможно открыть %1 для записи, возможно, нет разрешений на запись в этот файл, пж. удостоверьтесь, что есть доступ к этому файлу и попробуйте снова. + + SongEditorWindow + + Song-Editor + Музыкальный редактор + + + Play song (Space) + Начать воспроизведение (Пробел) + + + Record samples from Audio-device + Записать сэмпл со звукового устройства + + + Record samples from Audio-device while playing song or BB track + Записать сэмпл с аудио-устройства во время воспроизведения в музыкальном или ритм/басс редакторе + + + Stop song (Space) + Остановить воспроизведение (Пробел) + + + Add beat/bassline + + + + Add sample-track + Добавить дорожку записи + + + Add automation-track + Добавить дорожку автоматизации + + + Draw mode + Режим рисования + + + Edit mode (select and move) + Правка (выделение/перемещение) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + Нажмите, чтобы прослушать созданную мелодию. Воспроизведение начнётся с позиции курсора (зелёный треугольник); вы можете двигать его во время проигрывания. + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + Нажмите сюда, если вы хотите остановить воспроизведение мелодии. Курсор при этом будет установлен на начало композиции. + + SpectrumAnalyzerControlDialog @@ -4411,6 +5842,13 @@ Reason: "%2" Режим канала + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4453,10 +5891,6 @@ Reason: "%2" Custom... Своя... - - &Help - &H Справка - Custom Своя @@ -4497,6 +5931,52 @@ Reason: "%2" нажми для изменения единиц времени + + TimeLineWidget + + Enable/disable auto-scrolling + Вкл/выкл автопрокрутку + + + Enable/disable loop-points + Вкл/выкл точки кольцевания + + + After stopping go back to begin + После остановки переходить к началу + + + After stopping go back to position at which playing was started + После остановки переходить к месту, с которого началось воспроизведение + + + After stopping keep position + Оставаться на месте остановки + + + Hint + Подсказка + + + Press <Ctrl> to disable magnetic loop points. + Нажмите <Ctrl>, чтобы убрать прилипание точек цикла + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + Зажмите <Shift> чтобы сдвинуть начало точек цикла; Нажмите <Ctrl>, чтобы убрать прилипание точек цикла + + + + Track + + Muted + Тихо + + + Solo + Соло + + TrackContainer @@ -4540,6 +6020,107 @@ Please make sure you have read-permission to the file and the directory containi Импортирую файл FLP... + + TrackContentObject + + Muted + Тихо + + + + TrackContentObjectView + + Current position + Позиция + + + Hint + Подсказка + + + Press <Ctrl> and drag to make a copy. + Нажмите <Ctrl> и перетащите, чтобы создать копию. + + + Current length + Длительность + + + Press <Ctrl> for free resizing. + Для свободного изменения размера нажмите <Ctrl>. + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (от %3:%4 до %5:%6) + + + Delete (middle mousebutton) + Удалить (средняя кнопка мыши) + + + Cut + Вырезать + + + Copy + Копировать + + + Paste + Вставить + + + Mute/unmute (<Ctrl> + middle click) + + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + Зажмите <Сtrl> и нажимайте мышь во время движения, чтобы начать новую переброску. + + + Actions for this track + Действия для этой дорожки + + + Mute + Заглушить + + + Solo + Соло + + + Mute this track + Отключить дорожку + + + Clone this track + Клонировать дорожку + + + Remove this track + Удалить дорожку + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4683,17 +6264,6 @@ Please make sure you have read-permission to the file and the directory containi Задать форму сигнала. - - Ui - - Contributors ordered by number of commits: - Разработчики сортированные по числу коммитов: - - - Involved - Участники - - VersionedSaveDialog @@ -4796,6 +6366,17 @@ Please make sure you have read-permission to the file and the directory containi - управление VST плагином + + VisualizationWidget + + click to enable/disable visualization of master-output + Нажмите, чтобы включить/выключить визуализацию главного вывода + + + Click to enable + Нажать для включения + + VstEffectControlDialog @@ -4902,11 +6483,7 @@ Please make sure you have read-permission to the file and the directory containi - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5312,81 +6889,11 @@ Please make sure you have read-permission to the file and the directory containi Sinc - - - bbEditor - Play/pause current beat/bassline (Space) - Игра/пауза текущей линии ритма/басса (<Space>) - - - Add beat/bassline - Добавить ритм/лейтмотив - - - Beat+Bassline Editor - Ритм Басс Редактор - - - Stop playback of current beat/bassline (Space) - Остановить воспроизведение текущей линии ритм-басса (ПРОБЕЛ) - - - Add automation-track - Добавить дорожку автоматизации - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - Нажмите чтобы проиграть текущую линию ритм-басса. Она будет закольцована по достижении окончания. - - - Click here to stop playing of current beat/bassline. - Остановить воспроизведение (Пробел). - - - Remove steps - Удалить такты - - - Add steps - Добавить такты - - - - bbTCOView - - Open in Beat+Bassline-Editor - Открыть в пошаговом секвенсоре - Открыть в редакторе ритма и басса - - - Reset name - Сбросить название - - - Change name - Переименовать - - - Change color - Изменить цвет - - - Reset color to default + Sample not found: %1 - - bbTrack - - Beat/Bassline %1 - Ритм-Басс Линия %1 - - - Clone of %1 - Копия %1 - - bitInvader @@ -5583,44 +7090,6 @@ Please make sure you have read-permission to the file and the directory containi - - exportProjectDialog - - Could not open file - Не могу открыть файл - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - Не могу открыть файл %1 для записи. -Проверьте, обладаете ли вы правами на запись в выбранный файл и содержащий его каталог и попробуйте снова! - - - Error - Ошибка - - - Error while determining file-encoder device. Please try to choose a different output format. - Ошибка при определении кодировщика файла. Попробуйте выбрать другой целевой формат. - Ошибка при определении кодека файла. Попробуйте выбрать другой формат вывода. - - - Rendering: %1% - Обработка: %1% - - - Export project to %1 - Экспорт композиции в файл %1 - Экспорт проекта в %1 - - - - fader - - Please enter a new value between %1 and %2: - Введите новое значение от %1 до %2: - - graphModel @@ -5722,22 +7191,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - &H Справка - - - Please enter a new value between %1 and %2: - Введите новое значение от %1 до %2: - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Введите новое значение между –96,0 дБ и 6,0 дБ (по напряжению): - Введите новое значение от –96,0 дБВ до 6,0 дБВ: - - ladspaBrowserView @@ -6476,13 +7929,6 @@ Double clicking any of the plugins will bring up information on the ports.Закрыть окно управления регуляторами VST плагина. - - nineButtonSelector - - &Help - &H Справка - - opl2instrument @@ -6932,10 +8378,6 @@ Double clicking any of the plugins will bring up information on the ports. pluginBrowser - - Instrument plugins - Инструменты - no description описание отсутствует @@ -6972,14 +8414,6 @@ Double clicking any of the plugins will bring up information on the ports.Incomplete monophonic imitation tb303 Незавершённая монофоническая имитация tb303 - - Instrument browser - Обзор инструментов - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - Вы можете переносить нужные вам инструменты из этой панели в музыкальный, ритм-басс редактор или в существующую дорожку инструмента. - Plugin for enhancing stereo separation of a stereo input file Модуль, усиливающий разницу между каналами стереозаписи @@ -7090,335 +8524,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Put down your project notes here. - Здесь вы можете держать заметки к своему проекту. + Player for GIG files + - Project notes - Заметки к проекту + A multitap echo delay plugin + - Edit Actions - Правка + A native flanger plugin + - &Undo - &U Отменить + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - &R Повторить + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - &C Копировать - - - Ctrl+C - Ctrl+C - - - Cu&t - &t Вырезать - - - Ctrl+X - Ctrl+X - - - &Paste - &P Вставить - - - Ctrl+V - Ctrl+V - - - Format Actions - Форматирование - - - &Bold - Полу&жирный - - - Ctrl+B - Ctrl+B - - - &Italic - &Курсив - - - Ctrl+I - - - - &Underline - &Подчеркнуть - - - Ctrl+U - - - - &Left - По &левому краю - - - Ctrl+L - - - - C&enter - По &центру - - - Ctrl+E - - - - &Right - По &правому краю - - - Ctrl+R - - - - &Justify - По &ширине - - - Ctrl+J - - - - &Color... - &Цвет... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Переименовать... - - - - setupDialog - - Setup LMMS - Настройка LMMS + JACK (JACK Audio Connection Kit) + - General settings - Общие параметры + OSS Raw-MIDI (Open Sound System) + - BUFFER SIZE - РАЗМЕР БУФЕРА + SDL (Simple DirectMedia Layer) + - Reset to default-value - Восстановить значение по умолчанию + PulseAudio (bad latency!) + - MISC - РАЗНОЕ + Dummy (no MIDI support) + - Audio settings - Параметры звука + ALSA Raw-MIDI (Advanced Linux Sound Architecture) + - AUDIO INTERFACE - ЗВУКОВАЯ СИСТЕМА + PortAudio + - MIDI settings - Параметры MIDI + Dummy (no sound output) + - MIDI INTERFACE - ИНТЕРФЕЙС MIDI + ALSA (Advanced Linux Sound Architecture) + - OK - + OSS (Open Sound System) + - Cancel - Отменить + WinMM MIDI + - Restart LMMS - Перезапустите LMMS - - - Please note that most changes won't take effect until you restart LMMS! - Учтите, что большинство настроек не вступят в силу до перезапуска программы! - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - Здесь вы можете настроить размер внутреннего звукового буфера LMMS. Меньшие значения дают меньшее время отклика программы, но повышают потребление ресурсов - это особенно заметно на старых машинах и системах, ядро которых не поддерживает приоритета реального времени. Если наблюдается прерывистый звук, попробуйте увеличить размер буфера. - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - Пожалуйста, выберите звуковую систему. В зависимости от конфигурации во время компилирования программы, вы можете использовать ALSA, JACK, OSS и другие. В нижней части окна настройки можно задать специфические параметры выбранной системы. - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - Пожалуйста, выберите интерфейс MIDI. В зависимости от конфигурации во время компилирования программы, вы можете использовать ALSA, OSS и другие. В нижней части окна настройки можно задать специфические параметры выбранного интерфейса. - - - LMMS working directory - Рабочий каталог LMMS - - - VST-plugin directory - Каталог модулей VST - - - Choose LMMS working directory - Выбор рабочего каталога LMMS - - - Choose your VST-plugin directory - Выбор своего каталога для модулей VST - - - Performance settings - Параметры производительности - - - UI effects vs. performance - Визуальные эффекты/производительность - - - Frames: %1 -Latency: %2 ms - Фрагментов: %1 -Отклик: %2 - - - Artwork directory - Каталог с элементами оформления - - - Choose artwork-theme directory - Выбор каталога с темой оформления для LMMS - - - Display volume as dBV - Отображать громкости в децибелах (напр.) - - - FL Studio installation directory - Каталог установки FL Studio - - - STK rawwave directory - Каталог STK rawwave - - - Choose FL Studio installation directory - Выбор каталога установленной FL Studio - - - Choose LADSPA plugin directory - Выбор каталога с модулями LADSPA - - - Choose STK rawwave directory - Выбор каталога STK rawwave - - - Enable tooltips - Включить подсказки - - - Show restart warning after changing settings - Показывать предупреждение о перезапуске при изменении настроек - - - Compress project files per default - По умолчанию сжимать файлы проектов - - - HQ-mode for output audio-device - Режим высокого качества для вывода звука - - - Paths - Пути - - - LADSPA plugin paths - Пути модулей LADSPA - - - Default Soundfont File - Основной Soundfont файл - - - Background artwork - Фоновое изображение - - - Choose default SoundFont - Выбрать главный SoundFont - - - Choose background artwork - Выбрать фоновое изображение - - - One instrument track window mode - Режим окна одной инструментальной дорожки - - - Compact track buttons - Ужать кнопки дорожки - - - Sync VST plugins to host playback - Синхронизировать VST плагины с хостом воспроизведения - - - Enable note labels in piano roll - Включить обозначение нот в музыкальном редакторе - - - Enable waveform display by default - Включить отображение формы звуков по умолчанию - - - Smooth scroll in Song Editor - Плавная прокрутка в музыкальном редакторе - - - Enable auto save feature - Включить функцию авто-сохранения - - - Show playback cursor in AudioFileProcessor - Показывать указатель воспроизведения в процессоре аудио файлов - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7476,6 +8658,10 @@ Latency: %2 ms Chorus Depth Глубина хора + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7722,77 +8908,6 @@ Latency: %2 ms Если «флажок» установлен, то %1-й осциллятор выдаёт нулевой сигнал (пока флажок не снимется). - - song - - Tempo - Темп - - - Master volume - Общая громкость - - - Master pitch - Общая тональность - - - Project saved - Проект сохранён - - - The project %1 is now saved. - Проект %1 сохранён. - - - Project NOT saved. - Проект НЕ СОХРАНЁН. - - - The project %1 was not saved! - Проект %1 не сохранён! - - - Import file - Импорт файла - - - Empty project - Проект пуст - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - Проект ничего не содержит, так что и экспортировать нечего. Сначала добавьте хотя бы одну дорожку с помощью музыкального редактора! - - - untitled - Неназванное - - - Select file for project-export... - Выбор файла для экспорта проекта... - - - MIDI sequences - MiDi последовательности - - - FL Studio projects - FL Studio проекты - - - All file types - Все типы файлов - - - Hydrogen projects - Hydrogen проекты - - - Select directory for writing exported tracks... - Выберите папку для записи экспортированных дорожек... - - stereoEnhancerControlDialog @@ -7849,170 +8964,8 @@ Latency: %2 ms От правого на правый - - timeLine - - Enable/disable auto-scrolling - Вкл/выкл автопрокрутку - - - Enable/disable loop-points - Вкл/выкл точки кольцевания - - - After stopping go back to begin - После остановки переходить к началу - - - After stopping go back to position at which playing was started - После остановки переходить к месту, с которого началось воспроизведение - - - After stopping keep position - Оставаться на месте остановки - - - Hint - Подсказка - - - Press <Ctrl> to disable magnetic loop points. - Нажмите <Ctrl>, чтобы убрать прилипание точек цикла - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - примагничивание? - Зажмите <Shift> чтобы сдвинуть начало точек цикла; Нажмите <Ctrl>, чтобы убрать прилипание точек цикла - - - - track - - Muted - Тихо - - - Solo - Соло - - - - trackContentObject - - Muted - Тихо - - - - trackContentObjectView - - Current position - Позиция - - - Hint - Подсказка - - - Press <Ctrl> and drag to make a copy. - Нажмите <Ctrl> и перетащите, чтобы создать копию. - - - Current length - Длительность - - - Press <Ctrl> for free resizing. - Для свободного изменения размера нажмите <Ctrl>. - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (от %3:%4 до %5:%6) - - - Delete (middle mousebutton) - Удалить (средняя кнопка мыши) - - - Cut - Вырезать - - - Copy - Копировать - - - Paste - Вставить - - - Mute/unmute (<Ctrl> + middle click) - Заглушить/включить (Crl + средняя кнопка мыши) - - - - trackOperationsWidget - - Clone this track - Клонировать дорожку - - - Remove this track - Удалить дорожку - - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - Зажмите <Сtrl> и нажимайте мышь во время движения, чтобы начать новую переброску. - - - Actions for this track - Действия для этой дорожки - - - Mute - Заглушить - - - Mute this track - Отключить дорожку - - - Solo - Соло - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument - - Failed loading VST-plugin - Не смог загрузить модуль VST - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - Отчего-то модуль VST %1 не мог быть загружен. -Если другое программное обеспечение VST работает у Вас под Linux'ом, свяжитесь с разработчиком LMMS! - Loading plugin Загрузка модуля @@ -8278,21 +9231,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. Нажмите, чтобы нормализовать сигнал. - - &Help - &H Справка - - - - visualizationWidget - - click to enable/disable visualization of master-output - Нажмите, чтобы включить/выключить визуализацию главного вывода - - - Click to enable - Нажать для включения - voiceObject diff --git a/data/locale/sv.ts b/data/locale/sv.ts index 59b7f6cce..6f57e6f6f 100644 --- a/data/locale/sv.ts +++ b/data/locale/sv.ts @@ -49,6 +49,14 @@ If you're interested in translating LMMS in another language or want to imp LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -193,10 +201,6 @@ If you're interested in translating LMMS in another language or want to imp With this knob you can set the point where the loop starts. - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -223,9 +227,6 @@ If you're interested in translating LMMS in another language or want to imp The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. - - - AudioJack::setupWidget CLIENT-NAME KLIENT-NAMN @@ -324,18 +325,33 @@ If you're interested in translating LMMS in another language or want to imp AutomationEditor + + Please open an automation pattern with the context menu of a control! + + + + Values copied + Värden kopierade + + + All selected values were copied to the clipboard. + Alla valda värden blev kopierade till urklipp. + + + + AutomationEditorWindow Play/pause current pattern (Space) Spela/pausa aktuellt mönster (mellanslag) - - Stop playing of current pattern (Space) - Sluta spela aktuellt mönster (mellanslag) - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + + Stop playing of current pattern (Space) + Sluta spela aktuellt mönster (mellanslag) + Click here if you want to stop playing of the current pattern. @@ -348,6 +364,22 @@ If you're interested in translating LMMS in another language or want to imp Erase mode (Shift+E) + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. @@ -356,50 +388,6 @@ If you're interested in translating LMMS in another language or want to imp Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - - Cut selected values (Ctrl+X) - klipp ut valda värden (ctrl+X) - - - Copy selected values (Ctrl+C) - Kopiera valda värden (ctrl+C) - - - Paste values from clipboard (Ctrl+V) - Klistra in värden från urklipp(ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the values from the clipboard will be pasted at the first visible measure. - - - - Automation Editor - no pattern - - - - Automation Editor - %1 - - - - Please open an automation pattern with the context menu of a control! - - - - Values copied - Värden kopierade - - - All selected values were copied to the clipboard. - Alla valda värden blev kopierade till urklipp. - Discrete progression @@ -413,7 +401,11 @@ If you're interested in translating LMMS in another language or want to imp - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -429,11 +421,39 @@ If you're interested in translating LMMS in another language or want to imp - Tension value for spline + Cut selected values (Ctrl+X) + klipp ut valda värden (ctrl+X) + + + Copy selected values (Ctrl+C) + Kopiera valda värden (ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the values from the clipboard will be pasted at the first visible measure. + + + + Tension: + + + + Automation Editor - no pattern + + + + Automation Editor - %1 @@ -482,6 +502,14 @@ If you're interested in translating LMMS in another language or want to imp Set/clear record + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -490,6 +518,79 @@ If you're interested in translating LMMS in another language or want to imp + + BBEditor + + Beat+Bassline Editor + + + + Play/pause current beat/bassline (Space) + + + + Stop playback of current beat/bassline (Space) + + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + + + + Click here to stop playing of current beat/bassline. + + + + Add beat/bassline + + + + Add automation-track + + + + Remove steps + + + + Add steps + + + + + BBTCOView + + Open in Beat+Bassline-Editor + + + + Reset name + Nollställ namn + + + Change name + Byt namn + + + Change color + Byt färg + + + Reset color to default + + + + + BBTrack + + Beat/Bassline %1 + + + + Clone of %1 + + + BassBoosterControlDialog @@ -532,6 +633,100 @@ If you're interested in translating LMMS in another language or want to imp + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + &Hjälp + + + Help (not available) + + + CarlaInstrumentView @@ -650,9 +845,125 @@ If you're interested in translating LMMS in another language or want to imp &Remove this plugin &Ta bort denna pluginen + + + CrossoverEQControlDialog - &Help - &Hjälp + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -780,6 +1091,60 @@ If you're interested in translating LMMS in another language or want to imp Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -907,10 +1272,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin &Ta bort denna pluginen - - &Help - &Hjälp - EnvelopeAndLfoParameters @@ -1150,6 +1511,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + + + + Output gain + + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1288,6 +1898,42 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) + + Export between loop markers + + + + Could not open file + kunde inte öppna fil + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + + + + Export project to %1 + Exportera projekt till %1 + + + Error + + + + Error while determining file-encoder device. Please try to choose a different output format. + + + + Rendering: %1% + + + + + Fader + + Please enter a new value between %1 and %2: + SKriv ett nytt värde mellan %1 och %2: + FileBrowser @@ -1323,6 +1969,76 @@ Right clicking will bring up a context menu where you can change the order in wh + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + + + + White Noise Amount: + + + FxLine @@ -1356,8 +2072,8 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help - &Hjälp + Remove &unused channels + @@ -1385,9 +2101,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer - - - FxMixerView::FxChannelView FX Fader %1 @@ -1400,6 +2113,14 @@ You can remove and move FX channels in the context menu, which is accessed by ri Mute this FX channel + + Solo + + + + Solo FX channel + + FxRoute @@ -1408,6 +2129,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + GigInstrument + + Bank + + + + Patch + + + + Gain + + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -1999,6 +2782,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2097,6 +2891,34 @@ You can remove and move FX channels in the context menu, which is accessed by ri Vocal Formant Filter + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2187,6 +3009,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range + + Master Pitch + + InstrumentTrackView @@ -2321,6 +3147,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + Skriv in ett nytt värde mellan -96.0 dBV och 6.0 dBV: + + + Please enter a new value between %1 and %2: + SKriv ett nytt värde mellan %1 och %2: + LadspaControl @@ -2357,10 +3206,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - - Unknown LADSPA plugin %1 requested. @@ -2482,10 +3327,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2499,6 +3340,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2519,10 +3364,6 @@ Double click to pick a file. Please make sure you have write-access to the file and try again. - - &Project - &Projekt - &New &Ny @@ -2567,10 +3408,6 @@ Please make sure you have write-access to the file and try again. &Help &Hjälp - - Online help - - Help Hjälp @@ -2675,14 +3512,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? - - Open project - Öppna projekt - - - Save project - Spara projekt - Help not available Hjälp inte tillgänglig @@ -2692,38 +3521,6 @@ Please make sure you have write-access to the file and try again. Please visit http://lmms.sf.net/wiki for documentation on LMMS. - - My projects - - - - My samples - - - - My presets - - - - My home - - - - My computer - - - - Root directory - - - - Save as new &version - - - - E&xport tracks... - - LMMS (*.mmp *.mmpz) @@ -2732,14 +3529,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 - - Project recovery - - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - - Configuration file @@ -2752,10 +3541,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes - - &Recently opened projects - - Undo @@ -2768,6 +3553,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS Project (*.mmpz *.mmp);;LMMS Project Template (*.mpt) + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2803,7 +3644,7 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE ENHET @@ -3271,6 +4112,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + Sinusvåg + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + triganelvåg + + + Saw wave + + + + Ramp wave + + + + Square wave + Fyrkantsvåg + + + Moog saw wave + + + + Abs. sine wave + + + + Random + + + + Random smooth + + MonstroView @@ -3443,6 +4376,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3720,6 +4688,14 @@ use mouse wheel to set volume of a step DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3751,45 +4727,13 @@ use mouse wheel to set volume of a step Amount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - Spela/pausa aktuellt mönster (mellanslag) - - - Record notes from MIDI-device/channel-piano - - - - Stop playing of current pattern (Space) - Sluta spela aktuellt mönster (mellanslag) - - - Draw mode (Shift+D) - - - - Erase mode (Shift+E) - - - - Select mode (Shift+S) - Markeringsläge (shift+s) - - - Cut selected notes (Ctrl+X) - Klipp ut valda noter(Ctrl+X) - - - Copy selected notes (Ctrl+C) - - - - Paste notes from clipboard (Ctrl+V) - - Last note Senaste noten @@ -3806,38 +4750,6 @@ use mouse wheel to set volume of a step Please open a pattern by double-clicking on it! - - Record notes from MIDI-device/channel-piano while playing song or BB track - - - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock @@ -3850,26 +4762,6 @@ use mouse wheel to set volume of a step Note Panning - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3894,26 +4786,6 @@ use mouse wheel to set volume of a step No chord - - This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. - - - - The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. - - - - This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited - - - - The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! - - - - Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. - - Volume: %1% @@ -3935,6 +4807,117 @@ use mouse wheel to set volume of a step SKriv ett nytt värde mellan %1 och %2: + + PianoRollWindow + + Play/pause current pattern (Space) + Spela/pausa aktuellt mönster (mellanslag) + + + Record notes from MIDI-device/channel-piano + + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + Stop playing of current pattern (Space) + Sluta spela aktuellt mönster (mellanslag) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + + + + Erase mode (Shift+E) + + + + Select mode (Shift+S) + Markeringsläge (shift+s) + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + Klipp ut valda noter(Ctrl+X) + + + Copy selected notes (Ctrl+C) + + + + Paste notes from clipboard (Ctrl+V) + + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. + + + + The 'Q' stands for quantization, and controls the grid size notes and control points snap to. With smaller quantization values, you can draw shorter notes in Piano Roll, and more exact control points in the Automation Editor. + + + + This lets you select the length of new notes. 'Last Note' means that LMMS will use the note length of the note you last edited + + + + The feature is directly connected to the context-menu on the virtual keyboard, to the left in Piano Roll. After you have chosen the scale you want in this drop-down menu, you can right click on a desired key in the virtual keyboard, and then choose 'Mark current Scale'. LMMS will highlight all notes that belongs to the chosen scale, and in the key you have selected! + + + + Let you select a chord which LMMS then can draw or highlight.You can find the most common chords in this drop-down menu. After you have selected a chord, click anywhere to place the chord, and right click on the virtual keyboard to open context menu and highlight the chord. To return to single note placement, you need to choose 'No chord' in this drop-down menu. + + + PianoView @@ -3966,6 +4949,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + Instrument plugin + + + Instrument browser + + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + ProjectNotes + + Project notes + Projekt anteckningar + + + Put down your project notes here. + Skriv ner dina projekt anteckningar här. + + + Edit Actions + Editera händelser + + + &Undo + &Ångra + + + Ctrl+Z + Ctrl+Z + + + &Redo + &Återställ + + + Ctrl+Y + Ctrl+Y + + + &Copy + &Kopiera + + + Ctrl+C + Ctrl+C + + + Cu&t + Klipp& ut + + + Ctrl+X + Ctrl+X + + + &Paste + &Klistra in + + + Ctrl+V + Ctrl+V + + + Format Actions + + + + &Bold + &Fet + + + Ctrl+B + Ctrl+B + + + &Italic + &Kursiv + + + Ctrl+I + Ctrl+I + + + &Underline + &Understruken + + + Ctrl+U + Ctrl+U + + + &Left + &Vänster + + + Ctrl+L + Ctrl+L + + + C&enter + C&entrera + + + Ctrl+E + Ctrl+E + + + &Right + &Höger + + + Ctrl+R + Ctrl+R + + + &Justify + + + + Ctrl+J + Ctrl+J + + + &Color... + &Färger... + + ProjectRenderer @@ -4116,6 +5233,13 @@ Reason: "%2" + + RenameDialog + + Rename... + Byt namn... + + SampleBuffer @@ -4205,6 +5329,10 @@ Reason: "%2" Volume Volym + + Panning + + SampleTrackView @@ -4220,45 +5348,308 @@ Reason: "%2" VOL VOL + + Panning + + + + Panning: + + + + PAN + + + + + SetupDialog + + Setup LMMS + Ställ in LMMS + + + General settings + + + + BUFFER SIZE + + + + Reset to default-value + + + + MISC + + + + Enable tooltips + + + + Show restart warning after changing settings + + + + Display volume as dBV + Visa volym i dBV + + + Compress project files per default + + + + One instrument track window mode + + + + HQ-mode for output audio-device + + + + Compact track buttons + + + + Sync VST plugins to host playback + + + + Enable note labels in piano roll + + + + Enable waveform display by default + + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + + + + LMMS working directory + LMMS arbetskatalog + + + VST-plugin directory + + + + Artwork directory + + + + Background artwork + + + + FL Studio installation directory + + + + LADSPA plugin paths + + + + STK rawwave directory + + + + Default Soundfont File + + + + Performance settings + + + + UI effects vs. performance + + + + Smooth scroll in Song Editor + + + + Enable auto save feature + + + + Show playback cursor in AudioFileProcessor + + + + Audio settings + Ljudinställningar + + + AUDIO INTERFACE + + + + MIDI settings + MIDI inställningar + + + MIDI INTERFACE + + + + OK + + + + Cancel + Avbryt + + + Restart LMMS + starta om LMMS + + + Please note that most changes won't take effect until you restart LMMS! + + + + Frames: %1 +Latency: %2 ms + + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + + + + Choose LMMS working directory + + + + Choose your VST-plugin directory + + + + Choose artwork-theme directory + + + + Choose FL Studio installation directory + + + + Choose LADSPA plugin directory + + + + Choose STK rawwave directory + + + + Choose default SoundFont + + + + Choose background artwork + + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + + + + + Song + + Tempo + Tempo + + + Master volume + Huvudvolym + + + Master pitch + + + + Project saved + Projekt sparad + + + The project %1 is now saved. + Projektet %1 är nu sparad. + + + Project NOT saved. + Projekt INTE sparat. + + + The project %1 was not saved! + Projektet %1 sparades inte! + + + Import file + Importera fil + + + MIDI sequences + + + + FL Studio projects + + + + Hydrogen projects + + + + All file types + + + + Empty project + + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + + + + Select directory for writing exported tracks... + + + + untitled + namnlös + + + Select file for project-export... + + + + The following errors occured while loading: + + SongEditor - - Song-Editor - Sång-Editor - - - Play song (Space) - Spela sång (mellanslag) - - - Stop song (Space) - - - - Add beat/bassline - - - - Add sample-track - - - - Draw mode - - - - Edit mode (select and move) - - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - - Could not open file kunde inte öppna fil @@ -4267,18 +5658,6 @@ Reason: "%2" Could not write file - - Add automation-track - - - - Record samples from Audio-device - - - - Record samples from Audio-device while playing song or BB track - - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4341,6 +5720,57 @@ Reason: "%2" + + SongEditorWindow + + Song-Editor + Sång-Editor + + + Play song (Space) + Spela sång (mellanslag) + + + Record samples from Audio-device + + + + Record samples from Audio-device while playing song or BB track + + + + Stop song (Space) + + + + Add beat/bassline + + + + Add sample-track + + + + Add automation-track + + + + Draw mode + + + + Edit mode (select and move) + + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + + + SpectrumAnalyzerControlDialog @@ -4367,6 +5797,13 @@ Reason: "%2" + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4409,10 +5846,6 @@ Reason: "%2" Custom... - - &Help - &Hjälp - Custom @@ -4453,6 +5886,52 @@ Reason: "%2" + + TimeLineWidget + + Enable/disable auto-scrolling + + + + Enable/disable loop-points + + + + After stopping go back to begin + Efter att ha stoppat gå tillbaka till början + + + After stopping go back to position at which playing was started + + + + After stopping keep position + + + + Hint + Ledtråd + + + Press <Ctrl> to disable magnetic loop points. + + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + + + + + Track + + Muted + + + + Solo + + + TrackContainer @@ -4496,6 +5975,107 @@ Se till att du har läsningsrättigheter för filen och katalogen som innehålle Importerar FLP-file... + + TrackContentObject + + Muted + + + + + TrackContentObjectView + + Current position + Aktuell position + + + Hint + Ledtråd + + + Press <Ctrl> and drag to make a copy. + + + + Current length + Aktuell längd + + + Press <Ctrl> for free resizing. + + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 to %5:%6) + + + Delete (middle mousebutton) + Ta bort (musens mittenknapp) + + + Cut + Klipp ut + + + Copy + Kopiera + + + Paste + Klistra in + + + Mute/unmute (<Ctrl> + middle click) + + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + + + + Actions for this track + + + + Mute + + + + Solo + + + + Mute this track + + + + Clone this track + Klona detta spåret + + + Remove this track + Ta bort detta spåret + + + Clear this track + + + + FX %1: %2 + + + + Turn all recording on + + + + Turn all recording off + + + TripleOscillatorView @@ -4639,17 +6219,6 @@ Se till att du har läsningsrättigheter för filen och katalogen som innehålle - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4752,6 +6321,17 @@ Se till att du har läsningsrättigheter för filen och katalogen som innehålle + + VisualizationWidget + + click to enable/disable visualization of master-output + + + + Click to enable + + + VstEffectControlDialog @@ -4858,11 +6438,7 @@ Se till att du har läsningsrättigheter för filen och katalogen som innehålle - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5268,77 +6844,8 @@ Se till att du har läsningsrättigheter för filen och katalogen som innehålle Sinc - - - bbEditor - Beat+Bassline Editor - - - - Play/pause current beat/bassline (Space) - - - - Add beat/bassline - - - - Add automation-track - - - - Stop playback of current beat/bassline (Space) - - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - - - - Click here to stop playing of current beat/bassline. - - - - Remove steps - - - - Add steps - - - - - bbTCOView - - Open in Beat+Bassline-Editor - - - - Reset name - Nollställ namn - - - Change name - Byt namn - - - Change color - Byt färg - - - Reset color to default - - - - - bbTrack - - Beat/Bassline %1 - - - - Clone of %1 + Sample not found: %1 @@ -5538,41 +7045,6 @@ Se till att du har läsningsrättigheter för filen och katalogen som innehålle - - exportProjectDialog - - Could not open file - kunde inte öppna fil - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - - - - Error - - - - Error while determining file-encoder device. Please try to choose a different output format. - - - - Rendering: %1% - - - - Export project to %1 - Exportera projekt till %1 - - - - fader - - Please enter a new value between %1 and %2: - SKriv ett nytt värde mellan %1 och %2: - - graphModel @@ -5674,21 +7146,6 @@ Please make sure you have write-permission to the file and the directory contain - - knob - - &Help - &Hjälp - - - Please enter a new value between %1 and %2: - SKriv ett nytt värde mellan %1 och %2: - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - Skriv in ett nytt värde mellan -96.0 dBV och 6.0 dBV: - - ladspaBrowserView @@ -6410,13 +7867,6 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - &Hjälp - - opl2instrument @@ -6870,10 +8320,6 @@ Double clicking any of the plugins will bring up information on the ports.no description ingen beskrivning - - Instrument plugins - Instrument plugin - Filter for importing FL Studio projects into LMMS Filter för att importera FL Studio projekt till LMMS @@ -6926,14 +8372,6 @@ Double clicking any of the plugins will bring up information on the ports.plugin for using arbitrary LADSPA-effects inside LMMS. - - Instrument browser - - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7023,334 +8461,83 @@ This chip was used in the Commodore 64 computer. A NES-like synthesizer - - - projectNotes - Project notes - Projekt anteckningar - - - Put down your project notes here. - Skriv ner dina projekt anteckningar här. - - - Edit Actions - Editera händelser - - - &Undo - &Ångra - - - Ctrl+Z - Ctrl+Z - - - &Redo - &Återställ - - - Ctrl+Y - Ctrl+Y - - - &Copy - &Kopiera - - - Ctrl+C - Ctrl+C - - - Cu&t - Klipp& ut - - - Ctrl+X - Ctrl+X - - - &Paste - &Klistra in - - - Ctrl+V - Ctrl+V - - - Format Actions + Player for GIG files - &Bold - &Fet - - - Ctrl+B - Ctrl+B - - - &Italic - &Kursiv - - - Ctrl+I - Ctrl+I - - - &Underline - &Understruken - - - Ctrl+U - Ctrl+U - - - &Left - &Vänster - - - Ctrl+L - Ctrl+L - - - C&enter - C&entrera - - - Ctrl+E - Ctrl+E - - - &Right - &Höger - - - Ctrl+R - Ctrl+R - - - &Justify + A multitap echo delay plugin - Ctrl+J - Ctrl+J + A native flanger plugin + - &Color... - &Färger... + A native delay plugin + + + + An oversampling bitcrusher + + + + A native eq plugin + + + + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - Byt namn... - - - - setupDialog - - Setup LMMS - Ställ in LMMS - - - General settings + JACK (JACK Audio Connection Kit) - BUFFER SIZE + OSS Raw-MIDI (Open Sound System) - Reset to default-value + SDL (Simple DirectMedia Layer) - MISC + PulseAudio (bad latency!) - Display volume as dBV - Visa volym i dBV - - - LMMS working directory - LMMS arbetskatalog - - - VST-plugin directory + Dummy (no MIDI support) - Artwork directory + ALSA Raw-MIDI (Advanced Linux Sound Architecture) - FL Studio installation directory + PortAudio - Performance settings + Dummy (no sound output) - UI effects vs. performance + ALSA (Advanced Linux Sound Architecture) - Audio settings - Ljudinställningar - - - AUDIO INTERFACE + OSS (Open Sound System) - MIDI settings - MIDI inställningar - - - MIDI INTERFACE + WinMM MIDI - OK - - - - Cancel - Avbryt - - - Restart LMMS - starta om LMMS - - - Please note that most changes won't take effect until you restart LMMS! - - - - Frames: %1 -Latency: %2 ms - - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - - - - Choose LMMS working directory - - - - Choose your VST-plugin directory - - - - Choose artwork-theme directory - - - - Choose FL Studio installation directory - - - - Choose LADSPA plugin directory - - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. - - - - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. - - - - Enable tooltips - - - - Show restart warning after changing settings - - - - Compress project files per default - - - - HQ-mode for output audio-device - - - - STK rawwave directory - - - - Choose STK rawwave directory - - - - Paths - - - - LADSPA plugin paths - - - - Default Soundfont File - - - - Background artwork - - - - Choose default SoundFont - - - - Choose background artwork - - - - One instrument track window mode - - - - Compact track buttons - - - - Sync VST plugins to host playback - - - - Enable note labels in piano roll - - - - Enable waveform display by default - - - - Smooth scroll in Song Editor - - - - Enable auto save feature - - - - Show playback cursor in AudioFileProcessor - - - - Keep effects running even without input + ALSA-Sequencer (Advanced Linux Sound Architecture) @@ -7408,6 +8595,10 @@ Latency: %2 ms Chorus Depth + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7653,77 +8844,6 @@ Latency: %2 ms - - song - - Tempo - Tempo - - - Master volume - Huvudvolym - - - Master pitch - - - - Project saved - Projekt sparad - - - The project %1 is now saved. - Projektet %1 är nu sparad. - - - Project NOT saved. - Projekt INTE sparat. - - - The project %1 was not saved! - Projektet %1 sparades inte! - - - Import file - Importera fil - - - untitled - namnlös - - - Select file for project-export... - - - - Empty project - - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - - - - MIDI sequences - - - - FL Studio projects - - - - All file types - - - - Hydrogen projects - - - - Select directory for writing exported tracks... - - - stereoEnhancerControlDialog @@ -7780,157 +8900,6 @@ Latency: %2 ms - - timeLine - - Enable/disable auto-scrolling - - - - Enable/disable loop-points - - - - After stopping go back to begin - Efter att ha stoppat gå tillbaka till början - - - After stopping go back to position at which playing was started - - - - After stopping keep position - - - - Hint - Ledtråd - - - Press <Ctrl> to disable magnetic loop points. - - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - - - - - track - - Muted - - - - Solo - - - - - trackContentObject - - Muted - - - - - trackContentObjectView - - Current position - Aktuell position - - - Hint - Ledtråd - - - Press <Ctrl> and drag to make a copy. - - - - Current length - Aktuell längd - - - Press <Ctrl> for free resizing. - - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 to %5:%6) - - - Delete (middle mousebutton) - Ta bort (musens mittenknapp) - - - Cut - Klipp ut - - - Copy - Kopiera - - - Paste - Klistra in - - - Mute/unmute (<Ctrl> + middle click) - - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - - - - Actions for this track - - - - Mute - - - - Clone this track - Klona detta spåret - - - Remove this track - Ta bort detta spåret - - - Mute this track - - - - Solo - - - - Clear this track - - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - - - - Turn all recording off - - - vestigeInstrument @@ -7941,15 +8910,6 @@ Latency: %2 ms Please wait while loading VST-plugin... Vänta medans VST-plugin läses in... - - Failed loading VST-plugin - Misslyckades med att läsa in VST_plugin - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - - vibed @@ -8160,10 +9120,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. - - &Help - &Hjälp - Use a sine-wave for current oscillator. @@ -8189,17 +9145,6 @@ The LED in the lower right corner of the waveform editor determines whether the - - visualizationWidget - - click to enable/disable visualization of master-output - - - - Click to enable - - - voiceObject diff --git a/data/locale/zh.ts b/data/locale/zh.ts index 57d591c6c..48e18d2bf 100644 --- a/data/locale/zh.ts +++ b/data/locale/zh.ts @@ -57,6 +57,14 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com LMMS LMMS + + Involved + + + + Contributors ordered by number of commits: + + AmplifierControlDialog @@ -201,10 +209,6 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com With this knob you can set the point where the loop starts. 调节此旋钮,以设置循环开始的地方。 - - Sample not found: %1 - - AudioFileProcessorWaveView @@ -231,16 +235,13 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com The JACK server seems to have been shutdown and starting a new instance failed. Therefore LMMS is unable to proceed. You should save your project and restart JACK and LMMS. JACK服务好像崩溃了,而且未能正常启动。 LMMS不能正常工作,你需要保存你的工作然后重启JACK和LMMS。 - - - AudioJack::setupWidget CLIENT-NAME - 客户端名称 + 客户端名称 CHANNELS - 声道数 + 声道数 @@ -332,70 +333,6 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com AutomationEditor - - Play/pause current pattern (Space) - 播放/暂停当前片段(空格) - - - Stop playing of current pattern (Space) - 停止当前片段(空格) - - - Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. - 点击这里播放片段。编辑时很有用,片段会自动循环播放。 - - - Click here if you want to stop playing of the current pattern. - 点击这里停止播放片段。 - - - Draw mode (Shift+D) - 绘制模式 (Shift+D) - - - Erase mode (Shift+E) - 擦除模式 (Shift+E) - - - Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. - 点击这里启用绘制模式。在此模式下你可以增加或移动单个值。 大部分时间下默认使用此模式。你也可以按键盘上的 ‘Shift+D’激活此模式。 - - - Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. - 点击启用擦除模式。此模式下你可以擦除单个值。你可以按键盘上的 'Shift+E' 启用此模式。 - - - Cut selected values (Ctrl+X) - 剪切选定值 (Ctrl+X) - - - Copy selected values (Ctrl+C) - 复制选定值 (Ctrl+C) - - - Paste values from clipboard (Ctrl+V) - 从剪贴板粘贴值 (Ctrl+V) - - - Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - 点击这里,选择的值将会被剪切到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 - - - Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - 点击这里,选择的值将会被复制到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 - - - Click here and the values from the clipboard will be pasted at the first visible measure. - 点击这里,选择的值将从剪贴板粘贴到第一个可见的小节。 - - - Automation Editor - no pattern - 自动控制编辑器 - 没有片段 - - - Automation Editor - %1 - 自动控制编辑器 - %1 - Please open an automation pattern with the context menu of a control! @@ -408,6 +345,57 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com All selected values were copied to the clipboard. 所有选中的值已复制。 + + + AutomationEditorWindow + + Play/pause current pattern (Space) + 播放/暂停当前片段(空格) + + + Click here if you want to play the current pattern. This is useful while editing it. The pattern is automatically looped when the end is reached. + 点击这里播放片段。编辑时很有用,片段会自动循环播放。 + + + Stop playing of current pattern (Space) + 停止当前片段(空格) + + + Click here if you want to stop playing of the current pattern. + 点击这里停止播放片段。 + + + Draw mode (Shift+D) + 绘制模式 (Shift+D) + + + Erase mode (Shift+E) + 擦除模式 (Shift+E) + + + Flip vertically + + + + Flip horizontally + + + + Click here and the pattern will be inverted.The points are flipped in the y direction. + + + + Click here and the pattern will be reversed. The points are flipped in the x direction. + + + + Click here and draw-mode will be activated. In this mode you can add and move single values. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. + 点击这里启用绘制模式。在此模式下你可以增加或移动单个值。 大部分时间下默认使用此模式。你也可以按键盘上的 ‘Shift+D’激活此模式。 + + + Click here and erase-mode will be activated. In this mode you can erase single values. You can also press 'Shift+E' on your keyboard to activate this mode. + 点击启用擦除模式。此模式下你可以擦除单个值。你可以按键盘上的 'Shift+E' 启用此模式。 + Discrete progression @@ -421,7 +409,11 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com - Tension: + Tension value for spline + + + + A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. @@ -437,13 +429,41 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com - Tension value for spline + Cut selected values (Ctrl+X) + 剪切选定值 (Ctrl+X) + + + Copy selected values (Ctrl+C) + 复制选定值 (Ctrl+C) + + + Paste values from clipboard Ctrl+V) - A higher tension value may make a smoother curve but overshoot some values. A low tension value will cause the slope of the curve to level off at each control point. + Click here and selected values will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + 点击这里,选择的值将会被剪切到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 + + + Click here and selected values will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + 点击这里,选择的值将会被复制到剪切板。你可以使用粘贴按钮将它们粘贴到任意地方,存为任意片段。 + + + Click here and the values from the clipboard will be pasted at the first visible measure. + 点击这里,选择的值将从剪贴板粘贴到第一个可见的小节。 + + + Tension: + + Automation Editor - no pattern + 自动控制编辑器 - 没有片段 + + + Automation Editor - %1 + 自动控制编辑器 - %1 + AutomationPattern @@ -490,6 +510,14 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com Set/clear record 设置/清除录制 + + Flip Vertically (Visible) + + + + Flip Horizontally (Visible) + + AutomationTrack @@ -498,6 +526,79 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com 自动控制轨道 + + BBEditor + + Beat+Bassline Editor + 节拍+低音线编辑器 + + + Play/pause current beat/bassline (Space) + 播放/暂停当前节拍/低音线(空格) + + + Stop playback of current beat/bassline (Space) + 停止播放当前节拍/低音线(空格) + + + Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. + 点击这里停止播放当前节拍/低音线。当结束时节拍/低音线会自动循环播放。 + + + Click here to stop playing of current beat/bassline. + 点击这里停止播发当前节拍/低音线。 + + + Add beat/bassline + 添加节拍/低音线 + + + Add automation-track + + + + Remove steps + 移除音阶 + + + Add steps + 添加音阶 + + + + BBTCOView + + Open in Beat+Bassline-Editor + 在节拍+低音线编辑器中打开 + + + Reset name + 重置名称 + + + Change name + 修改名称 + + + Change color + 改变颜色 + + + Reset color to default + 重置颜色 + + + + BBTrack + + Beat/Bassline %1 + 节拍/低音线 %1 + + + Clone of %1 + %1 的副本 + + BassBoosterControlDialog @@ -540,6 +641,100 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com 比率 + + BitcrushControlDialog + + IN + + + + OUT + + + + GAIN + 增益 + + + Input Gain: + + + + NOIS + + + + Input Noise: + + + + Output Gain: + + + + CLIP + + + + Output Clip: + + + + Rate + + + + Rate Enabled + + + + Enable samplerate-crushing + + + + Depth + + + + Depth Enabled + + + + Enable bitdepth-crushing + + + + Sample rate: + + + + STD + + + + Stereo difference: + + + + Levels + + + + Levels: + + + + + CaptionMenu + + &Help + + + + Help (not available) + + + CarlaInstrumentView @@ -658,9 +853,125 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com &Remove this plugin 删除这个插件(&R) + + + CrossoverEQControlDialog - &Help - 帮助(&H) + Band 1/2 Crossover: + + + + Band 2/3 Crossover: + + + + Band 3/4 Crossover: + + + + Band 1 Gain: + + + + Band 2 Gain: + + + + Band 3 Gain: + + + + Band 4 Gain: + + + + Band 1 Mute + + + + Mute Band 1 + + + + Band 2 Mute + + + + Mute Band 2 + + + + Band 3 Mute + + + + Mute Band 3 + + + + Band 4 Mute + + + + Mute Band 4 + + + + + DelayControls + + Delay Samples + + + + Feedback + + + + Lfo Frequency + + + + Lfo Amount + + + + + DelayControlsDialog + + Delay + + + + Delay Time + + + + Regen + + + + Feedback Amount + + + + Rate + + + + Lfo + + + + Lfo Amt + + + + + DetuningHelper + + Note detuning + @@ -788,6 +1099,60 @@ Jeff Bai,邮箱:jeffbaichina@gmail.com Vocal Formant Filter 人声移除过滤器 + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + + + + DummyEffect + + NOT FOUND + + + + + Editor + + Play (Space) + + + + Stop (Space) + + + + Record + + + + Record while playing + + Effect @@ -915,10 +1280,6 @@ Right clicking will bring up a context menu where you can change the order in wh &Remove this plugin 移除此插件 (&R) - - &Help - 帮助(&H) - EnvelopeAndLfoParameters @@ -1158,6 +1519,255 @@ Right clicking will bring up a context menu where you can change the order in wh + + EqControls + + Input gain + 输入增益 + + + Output gain + 输出增益 + + + Low shelf gain + + + + Peak 1 gain + + + + Peak 2 gain + + + + Peak 3 gain + + + + Peak 4 gain + + + + High Shelf gain + + + + HP res + + + + Low Shelf res + + + + Peak 1 BW + + + + Peak 2 BW + + + + Peak 3 BW + + + + Peak 4 BW + + + + High Shelf res + + + + LP res + + + + HP freq + + + + Low Shelf freq + + + + Peak 1 freq + + + + Peak 2 freq + + + + Peak 3 freq + + + + Peak 4 freq + + + + High shelf freq + + + + LP freq + + + + HP active + + + + Low shelf active + + + + Peak 1 active + + + + Peak 2 active + + + + Peak 3 active + + + + Peak 4 active + + + + High shelf active + + + + LP active + + + + LP 12 + + + + LP 24 + + + + LP 48 + + + + HP 12 + + + + HP 24 + + + + HP 48 + + + + low pass type + + + + high pass type + + + + + EqControlsDialog + + HP + + + + Low Shelf + + + + Peak 1 + + + + Peak 2 + + + + Peak 3 + + + + Peak 4 + + + + High Shelf + + + + LP + + + + In Gain + + + + Gain + 增益 + + + Out Gain + + + + Bandwidth: + + + + Resonance : + + + + Frequency: + 频率: + + + 12dB + + + + 24dB + + + + 48dB + + + + lp grp + + + + hp grp + + + + + EqParameterWidget + + Hz + + + ExportProjectDialog @@ -1296,6 +1906,43 @@ Right clicking will bring up a context menu where you can change the order in wh Export as loop (remove end silence) 导出为回环loop(移除结尾的静音) + + Export between loop markers + + + + Could not open file + 无法打开文件 + + + Could not open file %1 for writing. +Please make sure you have write-permission to the file and the directory containing the file and try again! + 无法打开文件 %1 写入数据。 +请确保你拥有对文件以及存储文件的目录的写权限,然后重试! + + + Export project to %1 + 导出项目到 %1 + + + Error + 错误 + + + Error while determining file-encoder device. Please try to choose a different output format. + 寻找文件编码设备时出错。请使用另外一种输出格式。 + + + Rendering: %1% + 渲染中:%1% + + + + Fader + + Please enter a new value between %1 and %2: + + FileBrowser @@ -1331,6 +1978,76 @@ Right clicking will bring up a context menu where you can change the order in wh ---软件自带文件--- + + FlangerControls + + Delay Samples + + + + Lfo Frequency + + + + Seconds + + + + Regen + + + + Noise + 噪音 + + + Invert + + + + + FlangerControlsDialog + + Delay + + + + Delay Time: + + + + Lfo Hz + + + + Lfo: + + + + Amt + + + + Amt: + + + + Regen + + + + Feedback Amount: + + + + Noise + 噪音 + + + White Noise Amount: + + + FxLine @@ -1364,7 +2081,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri - &Help + Remove &unused channels @@ -1393,20 +2110,25 @@ You can remove and move FX channels in the context menu, which is accessed by ri FX-Mixer 效果混合器 - - - FxMixerView::FxChannelView FX Fader %1 - FX 衰减器 %1 + FX 衰减器 %1 Mute - 静音 + 静音 Mute this FX channel - 静音此效果通道 + 静音此效果通道 + + + Solo + 独奏 + + + Solo FX channel + @@ -1416,6 +2138,68 @@ You can remove and move FX channels in the context menu, which is accessed by ri 从通道 %1 发送到通道 %2 的量 + + GigInstrument + + Bank + + + + Patch + + + + Gain + 增益 + + + + GigInstrumentView + + Open other GIG file + + + + Click here to open another GIG file + + + + Choose the patch + 选择路径 + + + Click here to change which patch of the GIG file to use + + + + Change which instrument of the GIG file is being played + + + + Which GIG file is currently being used + + + + Which patch of the GIG file is currently being used + + + + Gain + 增益 + + + Factor to multiply samples by + + + + Open GIG file + + + + GIG Files (*.gig) + + + InstrumentFunctionArpeggio @@ -2007,6 +2791,17 @@ You can remove and move FX channels in the context menu, which is accessed by ri + + InstrumentMiscView + + MASTER PITCH + + + + Enables the use of Master Pitch + + + InstrumentSoundShaping @@ -2075,36 +2870,64 @@ You can remove and move FX channels in the context menu, which is accessed by ri 2x LowPass - + 2 个低通串联 RC LowPass 12dB - + RC 低通(12dB) RC BandPass 12dB - + RC 带通(12dB) RC HighPass 12dB - + RC 高通(12dB) RC LowPass 24dB - + RC 低通(24dB) RC BandPass 24dB - + RC 带通(24dB) RC HighPass 24dB - + RC 高通(24dB) Vocal Formant Filter 人声移除过滤器 + + 2x Moog + + + + SV LowPass + + + + SV BandPass + + + + SV HighPass + + + + SV Notch + + + + Fast Formant + + + + Tripole + + InstrumentSoundShapingView @@ -2138,7 +2961,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Resonance: - + 共鸣: Use this knob for setting Q/Resonance for the selected filter. Q/Resonance tells the filter how much it should amplify frequencies near Cutoff-frequency. @@ -2146,7 +2969,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri FREQ - + 频率 cutoff frequency: @@ -2195,6 +3018,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Pitch range 音域范围 + + Master Pitch + + InstrumentTrackView @@ -2329,6 +3156,29 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here, if you want to save current instrument track settings in a preset file. Later you can load this preset by double-clicking it in the preset-browser. + + MISC + 杂项 + + + + Knob + + Set linear + + + + Set logarithmic + + + + Please enter a new value between -96.0 dBV and 6.0 dBV: + 请输入介于96.0 dBV 和 6.0 dBV之间的值: + + + Please enter a new value between %1 and %2: + + LadspaControl @@ -2365,10 +3215,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri LadspaEffect - - Effect - 效果器 - Unknown LADSPA plugin %1 requested. 已请求未知 LADSPA 插件 %1. @@ -2452,7 +3298,7 @@ You can remove and move FX channels in the context menu, which is accessed by ri Modulation amount: - + 调制量 Use this knob for setting modulation amount of the LFO. The bigger this value, the more the connected control (e.g. volume or cutoff-frequency) will be influenced by the LFO. @@ -2490,10 +3336,6 @@ You can remove and move FX channels in the context menu, which is accessed by ri Click here for a square-wave. - - Click here for a a moog saw-wave. - - Click here for an exponential wave. @@ -2507,6 +3349,10 @@ You can remove and move FX channels in the context menu, which is accessed by ri Double click to pick a file. + + Click here for a moog saw-wave. + + MainWindow @@ -2528,10 +3374,6 @@ Please make sure you have write-access to the file and try again. 不能保存配置文件%1,你可能没有写权限。 请确保你可以写入这个文件并重试。 - - &Project - 工程(&P) - &New 新建(&N) @@ -2540,10 +3382,6 @@ Please make sure you have write-access to the file and try again. &Open... 打开(&O)... - - Recently opened projects - 最近打开的工程 - &Save 保存(&S)... @@ -2580,10 +3418,6 @@ Please make sure you have write-access to the file and try again. &Help 帮助(&H) - - Online help - 在线帮助 - Help 帮助 @@ -2688,14 +3522,6 @@ Please make sure you have write-access to the file and try again. The current project was modified since last saving. Do you want to save it now? 此工程自上次保存后有了修改,你想保存吗? - - Open project - 打开工程 - - - Save project - 保存工程 - Help not available 帮助不可用 @@ -2706,38 +3532,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. LMMS现在没有可用的帮助 请访问 http://lmms.sf.net/wiki 了解LMMS的相关文档。 - - My projects - 我的工程 - - - My samples - 我的采样 - - - My presets - 我的预置 - - - My home - 我的主目录 - - - My computer - 我的电脑 - - - Root directory - 根目录 - - - Save as new &version - 保存为新版本(&V) - - - E&xport tracks... - 导出音轨(&E)... - LMMS (*.mmp *.mmpz) LMMS (*.mmp *.mmpz) @@ -2746,14 +3540,6 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Version %1 版本 %1 - - Project recovery - 工程恢复 - - - It looks like the last session did not end properly. Do you want to recover the project of this session? - 好像上次会话未能正常退出,你想要恢复上次会话未保存的工程吗? - Configuration file 配置文件 @@ -2778,6 +3564,62 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Volumes + + My Projects + + + + My Samples + + + + My Presets + + + + My Home + + + + My Computer + + + + Root Directory + + + + &File + + + + &Recently Opened Projects + + + + Save as New &Version + + + + E&xport Tracks... + + + + Online Help + + + + What's This? + + + + Open Project + + + + Save Project + + MeterDialog @@ -2813,10 +3655,10 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. - MidiAlsaSeq::setupWidget + MidiAlsaSeq DEVICE - 设备 + 设备 @@ -3281,6 +4123,98 @@ Please visit http://lmms.sf.net/wiki for documentation on LMMS. Sub3-LFO2 + + Sine wave + + + + Bandlimited Triangle wave + + + + Bandlimited Saw wave + + + + Bandlimited Ramp wave + + + + Bandlimited Square wave + + + + Bandlimited Moog saw wave + + + + Soft square wave + + + + Absolute sine wave + + + + Exponential wave + + + + White noise + + + + Digital Triangle wave + + + + Digital Saw wave + + + + Digital Ramp wave + + + + Digital Square wave + + + + Digital Moog saw wave + + + + Triangle wave + + + + Saw wave + 锯齿波 + + + Ramp wave + + + + Square wave + 方波 + + + Moog saw wave + + + + Abs. sine wave + + + + Random + 随机 + + + Random smooth + + MonstroView @@ -3453,6 +4387,41 @@ PM means phase modulation: Oscillator 3's phase is modulated by oscillator + + MultitapEchoControlDialog + + Length + 长度 + + + Step length: + + + + Dry + + + + Dry Gain: + + + + Stages + + + + Lowpass stages: + + + + Swap inputs + + + + Swap left and right input channel for reflections + + + NesInstrument @@ -3701,7 +4670,7 @@ use mouse wheel to set volume of a step Modulation amount: - + 调制量 Attack: @@ -3731,6 +4700,14 @@ use mouse wheel to set volume of a step DCAY + + TRES + + + + Treshold: + + PeakControllerEffectControls @@ -3762,29 +4739,13 @@ use mouse wheel to set volume of a step Amount Multiplicator + + Treshold + + PianoRoll - - Play/pause current pattern (Space) - 播放/暂停当前片段(空格) - - - Stop playing of current pattern (Space) - 停止当前片段(空格) - - - Cut selected notes (Ctrl+X) - 剪切选定音符 (Ctrl+X) - - - Copy selected notes (Ctrl+C) - 复制选定音符 (Ctrl+C) - - - Paste notes from clipboard (Ctrl+V) - 从剪贴板粘贴音符 (Ctrl+V) - Piano-Roll - no pattern 钢琴窗 - 没有片段 @@ -3797,58 +4758,10 @@ use mouse wheel to set volume of a step Please open a pattern by double-clicking on it! 双击打开片段! - - Record notes from MIDI-device/channel-piano - 从 MIDI 设备/通道钢琴(channel-piano) 录制音符 - - - Record notes from MIDI-device/channel-piano while playing song or BB track - - - - Draw mode (Shift+D) - 绘制模式 (Shift+D) - - - Erase mode (Shift+E) - 擦除模式 (Shift+E) - - - Select mode (Shift+S) - 选择模式 (Shift+S) - Last note 上一个音符 - - Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. - - - - Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. - - - - Click here to stop playback of current pattern. - - - - Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. - - - - Click here and the notes from the clipboard will be pasted at the first visible measure. - - Note lock @@ -3861,26 +4774,6 @@ use mouse wheel to set volume of a step Note Panning 音符声相偏移 - - Detune mode (Shift+T) - - - - Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. - - - - Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. - - - - Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. - - - - Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. - - Mark/unmark current semitone @@ -3925,6 +4818,97 @@ use mouse wheel to set volume of a step Please enter a new value between %1 and %2: 请输入一个介于 %1 和 %2 的值: + + + PianoRollWindow + + Play/pause current pattern (Space) + 播放/暂停当前片段(空格) + + + Record notes from MIDI-device/channel-piano + 从 MIDI 设备/通道钢琴(channel-piano) 录制音符 + + + Record notes from MIDI-device/channel-piano while playing song or BB track + + + + Stop playing of current pattern (Space) + 停止当前片段(空格) + + + Click here to play the current pattern. This is useful while editing it. The pattern is automatically looped when its end is reached. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you can play and edit them afterwards. + + + + Click here to record notes from a MIDI-device or the virtual test-piano of the according channel-window to the current pattern. When recording all notes you play will be written to this pattern and you will hear the song or BB track in the background. + + + + Click here to stop playback of current pattern. + + + + Draw mode (Shift+D) + 绘制模式 (Shift+D) + + + Erase mode (Shift+E) + 擦除模式 (Shift+E) + + + Select mode (Shift+S) + 选择模式 (Shift+S) + + + Detune mode (Shift+T) + + + + Click here and draw mode will be activated. In this mode you can add, resize and move notes. This is the default mode which is used most of the time. You can also press 'Shift+D' on your keyboard to activate this mode. In this mode, hold Ctrl to temporarily go into select mode. + + + + Click here and erase mode will be activated. In this mode you can erase notes. You can also press 'Shift+E' on your keyboard to activate this mode. + + + + Click here and select mode will be activated. In this mode you can select notes. Alternatively, you can hold Ctrl in draw mode to temporarily use select mode. + + + + Click here and detune mode will be activated. In this mode you can click a note to open its automation detuning. You can utilize this to slide notes from one to another. You can also press 'Shift+T' on your keyboard to activate this mode. + + + + Cut selected notes (Ctrl+X) + 剪切选定音符 (Ctrl+X) + + + Copy selected notes (Ctrl+C) + 复制选定音符 (Ctrl+C) + + + Paste notes from clipboard (Ctrl+V) + 从剪贴板粘贴音符 (Ctrl+V) + + + Click here and the selected notes will be cut into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the selected notes will be copied into the clipboard. You can paste them anywhere in any pattern by clicking on the paste button. + + + + Click here and the notes from the clipboard will be pasted at the first visible measure. + + This controls the magnification of an axis. It can be helpful to choose magnification for a specific task. For ordinary editing, the magnification should be fitted to your smallest notes. @@ -3978,6 +4962,140 @@ Reason: "%2" + + PluginBrowser + + Instrument plugins + 乐器插件 + + + Instrument browser + 乐器浏览器 + + + Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. + + + + + ProjectNotes + + Project notes + 工程注释 + + + Put down your project notes here. + 在这里写下你的工程注释。 + + + Edit Actions + 编辑功能 + + + &Undo + 撤销(&U) + + + Ctrl+Z + Ctrl+Z + + + &Redo + 重做(&R) + + + Ctrl+Y + Ctrl+Y + + + &Copy + 复制(&C) + + + Ctrl+C + Ctrl+C + + + Cu&t + 剪切(&T) + + + Ctrl+X + Ctrl+X + + + &Paste + 粘贴(&P) + + + Ctrl+V + Ctrl+V + + + Format Actions + 格式功能 + + + &Bold + 加粗(&B) + + + Ctrl+B + Ctrl+B + + + &Italic + 斜体(&I) + + + Ctrl+I + Ctrl+I + + + &Underline + 下划线(&U) + + + Ctrl+U + Ctrl+U + + + &Left + 左对齐(&L) + + + Ctrl+L + Ctrl+L + + + C&enter + 居中(&E) + + + Ctrl+E + Ctrl+E + + + &Right + 右对齐(&R) + + + Ctrl+R + Ctrl+R + + + &Justify + 匀齐(&J) + + + Ctrl+J + Ctrl+J + + + &Color... + 颜色(&C)... + + ProjectRenderer @@ -4128,6 +5246,13 @@ Reason: "%2" 文件:%1 + + RenameDialog + + Rename... + 重命名... + + SampleBuffer @@ -4216,6 +5341,10 @@ Reason: "%2" Volume 音量 + + Panning + 声相 + SampleTrackView @@ -4231,37 +5360,309 @@ Reason: "%2" VOL VOL + + Panning + 声相 + + + Panning: + 声相: + + + PAN + PAN + + + + SetupDialog + + Setup LMMS + 设置LMMS + + + General settings + 常规设置 + + + BUFFER SIZE + 缓冲区大小 + + + Reset to default-value + 重置为默认值 + + + MISC + 杂项 + + + Enable tooltips + 启用工具提示 + + + Show restart warning after changing settings + 在改变设置后显示重启警告 + + + Display volume as dBV + 音量显示为dBV + + + Compress project files per default + 默认压缩项目文件 + + + One instrument track window mode + + + + HQ-mode for output audio-device + + + + Compact track buttons + 紧凑化轨道图标 + + + Sync VST plugins to host playback + 同步 VST 插件和主机回放 + + + Enable note labels in piano roll + 在钢琴窗中显示音号 + + + Enable waveform display by default + 默认启用波形图 + + + Keep effects running even without input + + + + Create backup file when saving a project + + + + LANGUAGE + + + + Paths + 路径 + + + LMMS working directory + LMMS工作目录 + + + VST-plugin directory + VST插件目录 + + + Artwork directory + 插图目录 + + + Background artwork + 背景图片 + + + FL Studio installation directory + FL Studio安装目录 + + + LADSPA plugin paths + LADSPA 插件路径 + + + STK rawwave directory + STK rawwave 目录 + + + Default Soundfont File + 默认 SoundFont 文件 + + + Performance settings + 性能设置 + + + UI effects vs. performance + 界面特效 vs 性能 + + + Smooth scroll in Song Editor + 歌曲编辑器中启用平滑滚动 + + + Enable auto save feature + 启用自动保存功能 + + + Show playback cursor in AudioFileProcessor + 在 AudioFileProcessor 中显示回放光标 + + + Audio settings + 音频设置 + + + AUDIO INTERFACE + 音频接口 + + + MIDI settings + MIDI设置 + + + MIDI INTERFACE + MIDI接口 + + + OK + 确定 + + + Cancel + 取消 + + + Restart LMMS + 重启LMMS + + + Please note that most changes won't take effect until you restart LMMS! + 请注意很多设置需要重启LMMS才可生效! + + + Frames: %1 +Latency: %2 ms + 帧数: %1 +延迟: %2 毫秒 + + + Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. + 在这里,你可以设置 LMMS 所用缓冲区的大小。缓冲区越小,延迟越小,但声音质量和性能可能会受影响。 + + + Choose LMMS working directory + 选择 LMMS 工作目录 + + + Choose your VST-plugin directory + 选择 VST 插件目录 + + + Choose artwork-theme directory + 选择插图目录 + + + Choose FL Studio installation directory + 选择 FL Studio 安装目录 + + + Choose LADSPA plugin directory + 选择 LADSPA 插件目录 + + + Choose STK rawwave directory + 选择 STK rawwave 目录 + + + Choose default SoundFont + 选择默认的 SoundFont + + + Choose background artwork + 选择背景图片 + + + Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + + + + Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + + + + + Song + + Tempo + 节奏 + + + Master volume + 主音量 + + + Master pitch + 主音高 + + + Project saved + 工程已保存 + + + The project %1 is now saved. + 工程 %1 已保存。 + + + Project NOT saved. + 工程 **没有** 保存。 + + + The project %1 was not saved! + 工程%1没有保存! + + + Import file + 导入文件 + + + MIDI sequences + MIDI 音序器 + + + FL Studio projects + FL Studio 工程 + + + Hydrogen projects + Hydrogen工程 + + + All file types + 所有类型 + + + Empty project + 空工程 + + + This project is empty so exporting makes no sense. Please put some items into Song Editor first! + 这个工程是空的所以就算导出也没有意义,请在歌曲编辑器中加入一点声音吧! + + + Select directory for writing exported tracks... + 选择写入导出音轨的目录... + + + untitled + 有标题 + + + Select file for project-export... + 为工程导出选择文件... + + + The following errors occured while loading: + + SongEditor - - Song-Editor - 歌曲编辑器 - - - Play song (Space) - 播放歌曲(空格) - - - Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. - 点击这里完整播放歌曲。将从绿色歌曲标记开始播放。在播放的同时可以对它进行移动。 - - - Stop song (Space) - 停止歌曲(空格) - - - Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. - 点击这里停止播放,歌曲位置标记会跳到歌曲的开头。 - - - Add beat/bassline - 添加节拍/低音线 - - - Add sample-track - 添加采样轨道 - Could not open file 无法打开文件 @@ -4270,26 +5671,6 @@ Reason: "%2" Could not write file 无法写入文件 - - Add automation-track - 添加自动化轨道 - - - Draw mode - 绘制模式 - - - Edit mode (select and move) - 编辑模式(选定和移动) - - - Record samples from Audio-device - 从音频设备录制样本 - - - Record samples from Audio-device while playing song or BB track - 在播放歌曲或BB轨道时从音频设备录入样本 - Could not open file %1. You probably have no permissions to read this file. Please make sure to have at least read permissions to the file and try again. @@ -4353,6 +5734,57 @@ Reason: "%2" 无法打开 %1 写入数据。或许没有权限修改此文件。请确保您拥有对此文件的写权限,然后重试。 + + SongEditorWindow + + Song-Editor + 歌曲编辑器 + + + Play song (Space) + 播放歌曲(空格) + + + Record samples from Audio-device + 从音频设备录制样本 + + + Record samples from Audio-device while playing song or BB track + 在播放歌曲或BB轨道时从音频设备录入样本 + + + Stop song (Space) + 停止歌曲(空格) + + + Add beat/bassline + 添加节拍/低音线 + + + Add sample-track + 添加采样轨道 + + + Add automation-track + + + + Draw mode + 绘制模式 + + + Edit mode (select and move) + 编辑模式(选定和移动) + + + Click here, if you want to play your whole song. Playing will be started at the song-position-marker (green). You can also move it while playing. + 点击这里完整播放歌曲。将从绿色歌曲标记开始播放。在播放的同时可以对它进行移动。 + + + Click here, if you want to stop playing of your song. The song-position-marker will be set to the start of your song. + 点击这里停止播放,歌曲位置标记会跳到歌曲的开头。 + + SpectrumAnalyzerControlDialog @@ -4379,6 +5811,13 @@ Reason: "%2" + + TabWidget + + Settings for %1 + + + TempoSyncKnob @@ -4421,10 +5860,6 @@ Reason: "%2" Custom... - - &Help - - Custom @@ -4465,6 +5900,52 @@ Reason: "%2" 点击改变时间单位 + + TimeLineWidget + + Enable/disable auto-scrolling + 启用/禁用自动滚动 + + + Enable/disable loop-points + 启用/禁用循环点 + + + After stopping go back to begin + 停止后前往开头 + + + After stopping go back to position at which playing was started + 停止后前往播放开始的地方 + + + After stopping keep position + 停止后保持位置不变 + + + Hint + 提示 + + + Press <Ctrl> to disable magnetic loop points. + 按住 <Ctrl> 禁用磁性吸附。 + + + Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. + 按住 <Shift> 移动起始循环点;按住 <Ctrl> 禁用磁性吸附。 + + + + Track + + Muted + 静音 + + + Solo + 独奏 + + TrackContainer @@ -4506,6 +5987,107 @@ Please make sure you have read-permission to the file and the directory containi + + TrackContentObject + + Muted + 静音 + + + + TrackContentObjectView + + Current position + 当前位置 + + + Hint + 提示 + + + Press <Ctrl> and drag to make a copy. + 按住 <Ctrl> 并拖动以创建副本。 + + + Current length + 当前长度 + + + Press <Ctrl> for free resizing. + 按住 <Ctrl> 自由调整大小。 + + + %1:%2 (%3:%4 to %5:%6) + %1:%2 (%3:%4 到 %5:%6) + + + Delete (middle mousebutton) + 删除 (鼠标中键) + + + Cut + 剪切 + + + Copy + 复制 + + + Paste + 粘贴 + + + Mute/unmute (<Ctrl> + middle click) + 静音/取消静音 (<Ctrl> + 鼠标中键) + + + + TrackOperationsWidget + + Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. + 按住 <Ctrl> 的同时拖动移动柄复制并移动此轨道。 + + + Actions for this track + 对此轨道可进行的操作 + + + Mute + 静音 + + + Solo + 独奏 + + + Mute this track + 静音此轨道 + + + Clone this track + 克隆此轨道 + + + Remove this track + 移除此轨道 + + + Clear this track + 清除此轨道 + + + FX %1: %2 + + + + Turn all recording on + 打开所有录制 + + + Turn all recording off + 关闭所有录制 + + TripleOscillatorView @@ -4649,17 +6231,6 @@ Please make sure you have read-permission to the file and the directory containi - - Ui - - Contributors ordered by number of commits: - - - - Involved - - - VersionedSaveDialog @@ -4762,6 +6333,17 @@ Please make sure you have read-permission to the file and the directory containi + + VisualizationWidget + + click to enable/disable visualization of master-output + 点击启用/禁用视觉化主输出 + + + Click to enable + 点击启用 + + VstEffectControlDialog @@ -4868,11 +6450,7 @@ Please make sure you have read-permission to the file and the directory containi - Failed loading VST plugin - - - - The VST plugin %1 could not be loaded for some reason. + The VST plugin %1 could not be loaded. @@ -5165,7 +6743,7 @@ Please make sure you have read-permission to the file and the directory containi ZynAddSubFxView Show GUI - + 显示图形界面 Click here to show or hide the graphical user interface (GUI) of ZynAddSubFX. @@ -5185,7 +6763,7 @@ Please make sure you have read-permission to the file and the directory containi FREQ - + 频率 Filter Resonance: @@ -5278,78 +6856,9 @@ Please make sure you have read-permission to the file and the directory containi Sinc - - - bbEditor - Beat+Bassline Editor - 节拍+低音线编辑器 - - - Play/pause current beat/bassline (Space) - 播放/暂停当前节拍/低音线(空格) - - - Add beat/bassline - 添加节拍/低音线 - - - Add automation-track - 添加自动轨道 - - - Stop playback of current beat/bassline (Space) - 停止播放当前节拍/低音线(空格) - - - Click here to play the current beat/bassline. The beat/bassline is automatically looped when its end is reached. - 点击这里停止播放当前节拍/低音线。当结束时节拍/低音线会自动循环播放。 - - - Click here to stop playing of current beat/bassline. - 点击这里停止播发当前节拍/低音线。 - - - Remove steps - 移除音阶 - - - Add steps - 添加音阶 - - - - bbTCOView - - Open in Beat+Bassline-Editor - 在节拍+低音线编辑器中打开 - - - Reset name - 重置名称 - - - Change name - 修改名称 - - - Change color - 改变颜色 - - - Reset color to default - 重置颜色 - - - - bbTrack - - Beat/Bassline %1 - 节拍/低音线 %1 - - - Clone of %1 - %1 的副本 + Sample not found: %1 + @@ -5548,42 +7057,6 @@ Please make sure you have read-permission to the file and the directory containi - - exportProjectDialog - - Could not open file - 无法打开文件 - - - Could not open file %1 for writing. -Please make sure you have write-permission to the file and the directory containing the file and try again! - 无法打开文件 %1 写入数据。 -请确保你拥有对文件以及存储文件的目录的写权限,然后重试! - - - Error - 错误 - - - Error while determining file-encoder device. Please try to choose a different output format. - 寻找文件编码设备时出错。请使用另外一种输出格式。 - - - Rendering: %1% - 渲染中:%1% - - - Export project to %1 - 导出项目到 %1 - - - - fader - - Please enter a new value between %1 and %2: - 请输入一个介于 %1 和 %2 之间的值: - - graphModel @@ -5685,21 +7158,6 @@ Please make sure you have write-permission to the file and the directory contain 结束失真度: - - knob - - &Help - 帮助(&H) - - - Please enter a new value between -96.0 dBV and 6.0 dBV: - 请输入介于96.0 dBV 和 6.0 dBV之间的值: - - - Please enter a new value between %1 and %2: - 请输入介于%1和%2之间的值: - - ladspaBrowserView @@ -5876,7 +7334,7 @@ Double clicking any of the plugins will bring up information on the ports. Resonance: - + 共鸣: Env Mod: @@ -6050,7 +7508,7 @@ Double clicking any of the plugins will bring up information on the ports. Resonance: - + 共鸣: RES @@ -6070,7 +7528,7 @@ Double clicking any of the plugins will bring up information on the ports. DEC - + 衰减 303-es-que, 24dB/octave, 3 pole filter @@ -6421,13 +7879,6 @@ Double clicking any of the plugins will bring up information on the ports. - - nineButtonSelector - - &Help - - - opl2instrument @@ -6881,10 +8332,6 @@ Double clicking any of the plugins will bring up information on the ports.no description 没有描述 - - Instrument plugins - 乐器插件 - Incomplete monophonic imitation tb303 @@ -6937,14 +8384,6 @@ Double clicking any of the plugins will bring up information on the ports.Filter for importing MIDI-files into LMMS - - Instrument browser - 乐器浏览器 - - - Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track. - - Emulation of the MOS6581 and MOS8580 SID. This chip was used in the Commodore 64 computer. @@ -7034,332 +8473,84 @@ This chip was used in the Commodore 64 computer. Carla Patchbay Instrument - - - projectNotes - Project notes - 工程注释 + Player for GIG files + - Put down your project notes here. - 在这里写下你的工程注释。 + A multitap echo delay plugin + - Edit Actions - 编辑功能 + A native flanger plugin + - &Undo - 撤销(&U) + A native delay plugin + - Ctrl+Z - Ctrl+Z + An oversampling bitcrusher + - &Redo - 重做(&R) + A native eq plugin + - Ctrl+Y - Ctrl+Y - - - &Copy - 复制(&C) - - - Ctrl+C - Ctrl+C - - - Cu&t - 剪切(&T) - - - Ctrl+X - Ctrl+X - - - &Paste - 粘贴(&P) - - - Ctrl+V - Ctrl+V - - - Format Actions - 格式功能 - - - &Bold - 加粗(&B) - - - Ctrl+B - Ctrl+B - - - &Italic - 斜体(&I) - - - Ctrl+I - Ctrl+I - - - &Underline - 下划线(&U) - - - Ctrl+U - Ctrl+U - - - &Left - 左对齐(&L) - - - Ctrl+L - Ctrl+L - - - C&enter - 居中(&E) - - - Ctrl+E - Ctrl+E - - - &Right - 右对齐(&R) - - - Ctrl+R - Ctrl+R - - - &Justify - 匀齐(&J) - - - Ctrl+J - Ctrl+J - - - &Color... - 颜色(&C)... + A 4-band Crossover Equalizer + - renameDialog + setupWidget - Rename... - 重命名... - - - - setupDialog - - Setup LMMS - 设置LMMS - - - General settings - 常规设置 - - - BUFFER SIZE - 缓冲区大小 - - - Reset to default-value - 重置为默认值 - - - MISC - 杂项 - - - Enable tooltips - 启用工具提示 - - - Show restart warning after changing settings - 在改变设置后显示重启警告 - - - Display volume as dBV - 音量显示为dBV - - - Compress project files per default - 默认压缩项目文件 - - - HQ-mode for output audio-device + JACK (JACK Audio Connection Kit) - LMMS working directory - LMMS工作目录 - - - VST-plugin directory - VST插件目录 - - - Artwork directory - 插图目录 - - - FL Studio installation directory - FL Studio安装目录 - - - STK rawwave directory - STK rawwave 目录 - - - Performance settings - 性能设置 - - - UI effects vs. performance - 界面特效 vs 性能 - - - Audio settings - 音频设置 - - - AUDIO INTERFACE - 音频接口 - - - MIDI settings - MIDI设置 - - - MIDI INTERFACE - MIDI接口 - - - OK - 确定 - - - Cancel - 取消 - - - Restart LMMS - 重启LMMS - - - Please note that most changes won't take effect until you restart LMMS! - 请注意很多设置需要重启LMMS才可生效! - - - Frames: %1 -Latency: %2 ms - 帧数: %1 -延迟: %2 毫秒 - - - Here you can setup the internal buffer-size used by LMMS. Smaller values result in a lower latency but also may cause unusable sound or bad performance, especially on older computers or systems with a non-realtime kernel. - 在这里,你可以设置 LMMS 所用缓冲区的大小。缓冲区越小,延迟越小,但声音质量和性能可能会受影响。 - - - Choose LMMS working directory - 选择 LMMS 工作目录 - - - Choose your VST-plugin directory - 选择 VST 插件目录 - - - Choose artwork-theme directory - 选择插图目录 - - - Choose FL Studio installation directory - 选择 FL Studio 安装目录 - - - Choose LADSPA plugin directory - 选择 LADSPA 插件目录 - - - Choose STK rawwave directory - 选择 STK rawwave 目录 - - - Here you can select your preferred audio-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, JACK, OSS and more. Below you see a box which offers controls to setup the selected audio-interface. + OSS Raw-MIDI (Open Sound System) - Here you can select your preferred MIDI-interface. Depending on the configuration of your system during compilation time you can choose between ALSA, OSS and more. Below you see a box which offers controls to setup the selected MIDI-interface. + SDL (Simple DirectMedia Layer) - Paths - 路径 - - - LADSPA plugin paths - LADSPA 插件路径 - - - Default Soundfont File - 默认 SoundFont 文件 - - - Background artwork - 背景图片 - - - Choose default SoundFont - 选择默认的 SoundFont - - - Choose background artwork - 选择背景图片 - - - One instrument track window mode + PulseAudio (bad latency!) - Compact track buttons - 紧凑化轨道图标 + Dummy (no MIDI support) + - Sync VST plugins to host playback - 同步 VST 插件和主机回放 + ALSA Raw-MIDI (Advanced Linux Sound Architecture) + - Enable note labels in piano roll - 在钢琴窗中显示音号 + PortAudio + - Enable waveform display by default - 默认启用波形图 + Dummy (no sound output) + - Smooth scroll in Song Editor - 歌曲编辑器中启用平滑滚动 + ALSA (Advanced Linux Sound Architecture) + - Enable auto save feature - 启用自动保存功能 + OSS (Open Sound System) + - Show playback cursor in AudioFileProcessor - 在 AudioFileProcessor 中显示回放光标 + WinMM MIDI + + + + ALSA-Sequencer (Advanced Linux Sound Architecture) + @@ -7416,6 +8607,10 @@ Latency: %2 ms Chorus Depth 合唱深度 + + A soundfont %1 could not be loaded. + + sf2InstrumentView @@ -7661,77 +8856,6 @@ Latency: %2 ms - - song - - Tempo - 节奏 - - - Master volume - 主音量 - - - Master pitch - 主音高 - - - Project saved - 工程已保存 - - - The project %1 is now saved. - 工程 %1 已保存。 - - - Project NOT saved. - 工程 **没有** 保存。 - - - The project %1 was not saved! - 工程%1没有保存! - - - Import file - 导入文件 - - - untitled - 有标题 - - - Select file for project-export... - 为工程导出选择文件... - - - Empty project - 空工程 - - - This project is empty so exporting makes no sense. Please put some items into Song Editor first! - 这个工程是空的所以就算导出也没有意义,请在歌曲编辑器中加入一点声音吧! - - - MIDI sequences - MIDI 音序器 - - - FL Studio projects - FL Studio 工程 - - - All file types - 所有类型 - - - Hydrogen projects - Hydrogen工程 - - - Select directory for writing exported tracks... - 选择写入导出音轨的目录... - - stereoEnhancerControlDialog @@ -7788,159 +8912,6 @@ Latency: %2 ms 从右到右 - - timeLine - - Enable/disable auto-scrolling - 启用/禁用自动滚动 - - - Enable/disable loop-points - 启用/禁用循环点 - - - After stopping go back to begin - 停止后前往开头 - - - After stopping go back to position at which playing was started - 停止后前往播放开始的地方 - - - After stopping keep position - 停止后保持位置不变 - - - Hint - 提示 - - - Press <Ctrl> to disable magnetic loop points. - 磁性吸附是指在一个完整音符的边缘吸附。 - 按住 <Ctrl> 禁用磁性吸附。 - - - Hold <Shift> to move the begin loop point; Press <Ctrl> to disable magnetic loop points. - 按住 <Shift> 移动起始循环点;按住 <Ctrl> 禁用磁性吸附。 - - - - track - - Muted - 静音 - - - Solo - 独奏 - - - - trackContentObject - - Muted - 静音 - - - - trackContentObjectView - - Current position - 当前位置 - - - Hint - 提示 - - - Press <Ctrl> and drag to make a copy. - 按住 <Ctrl> 并拖动以创建副本。 - - - Current length - 当前长度 - - - Press <Ctrl> for free resizing. - 按住 <Ctrl> 自由调整大小。 - - - %1:%2 (%3:%4 to %5:%6) - %1:%2 (%3:%4 到 %5:%6) - - - Delete (middle mousebutton) - 删除 (鼠标中键) - - - Cut - 剪切 - - - Copy - 复制 - - - Paste - 粘贴 - - - Mute/unmute (<Ctrl> + middle click) - 静音/取消静音 (<Ctrl> + 鼠标中键) - - - - trackOperationsWidget - - Press <Ctrl> while clicking on move-grip to begin a new drag'n'drop-action. - 未按照原文翻译,因为实际操作就是按住ctrl复制并移动此通道 - 按住 <Ctrl> 的同时拖动移动柄复制并移动此轨道。 - - - Actions for this track - 对此轨道可进行的操作 - - - Mute - 静音 - - - Mute this track - 静音此轨道 - - - Solo - 独奏 - - - Clone this track - 克隆此轨道 - - - Remove this track - 移除此轨道 - - - Clear this track - 清除此轨道 - - - Assign to new FX Channel - - - - FX %1: %2 - - - - Turn all recording on - 打开所有录制 - - - Turn all recording off - 关闭所有录制 - - vestigeInstrument @@ -7951,16 +8922,6 @@ Latency: %2 ms Please wait while loading VST-plugin... 请等待VST插件加载完成... - - Failed loading VST-plugin - 加载VST插件失败 - - - The VST-plugin %1 could not be loaded for some reason. -If it runs with other VST-software under Linux, please contact an LMMS-developer! - VST插件%1由于某些原因不能加载 -如果它在Linux下的其他VST宿主中运行正常,请联系LMMS开发者! - vibed @@ -8171,10 +9132,6 @@ The LED in the lower right corner of the waveform editor determines whether the Click here to normalize waveform. 点击这里标准化波形。 - - &Help - 帮助(&H) - Use a sine-wave for current oscillator. @@ -8200,17 +9157,6 @@ The LED in the lower right corner of the waveform editor determines whether the - - visualizationWidget - - click to enable/disable visualization of master-output - 点击启用/禁用视觉化主输出 - - - Click to enable - 点击启用 - - voiceObject From f640769ff03c34acd3df9fda1e686eca12fdfb70 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 13 Jan 2015 17:29:19 +0100 Subject: [PATCH 117/172] SongEditor and BBEditor: Accept drops in toolbar --- include/Editor.h | 21 ++++++++++++++++++++- include/TrackContainerView.h | 4 ++-- src/gui/editors/BBEditor.cpp | 5 +++++ src/gui/editors/Editor.cpp | 20 +++++++++++++++++++- src/gui/editors/SongEditor.cpp | 4 ++++ 5 files changed, 50 insertions(+), 4 deletions(-) diff --git a/include/Editor.h b/include/Editor.h index e4da281dc..c97065813 100644 --- a/include/Editor.h +++ b/include/Editor.h @@ -32,6 +32,8 @@ #include "TimeLineWidget.h" #include "ToolButton.h" +class DropToolBar; + /// \brief Superclass for editors with a toolbar. /// /// Those editors include the Song Editor, the Automation Editor, B&B Editor, @@ -63,7 +65,7 @@ protected: virtual ~Editor(); - QToolBar* m_toolBar; + DropToolBar* m_toolBar; QAction* m_playAction; QAction* m_recordAction; @@ -72,4 +74,21 @@ protected: }; +/// Small helper class: A QToolBar that accepts and exposes drop events as signals +class DropToolBar : public QToolBar +{ + Q_OBJECT +public: + DropToolBar(QWidget* parent=0); + +signals: + void dragEntered(QDragEnterEvent* event); + void dropped(QDropEvent* event); + +protected: + void dragEnterEvent(QDragEnterEvent* event); + void dropEvent(QDropEvent* event); +}; + + #endif diff --git a/include/TrackContainerView.h b/include/TrackContainerView.h index 3431289b1..fdf28be91 100644 --- a/include/TrackContainerView.h +++ b/include/TrackContainerView.h @@ -124,6 +124,8 @@ public slots: void createTrackView( Track * _t ); void deleteTrackView( TrackView * _tv ); + virtual void dropEvent( QDropEvent * _de ); + virtual void dragEnterEvent( QDragEnterEvent * _dee ); protected: static const int DEFAULT_PIXELS_PER_TACT = 16; @@ -133,8 +135,6 @@ protected: return( m_trackViews ); } - virtual void dragEnterEvent( QDragEnterEvent * _dee ); - virtual void dropEvent( QDropEvent * _de ); virtual void mousePressEvent( QMouseEvent * _me ); virtual void mouseMoveEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); diff --git a/src/gui/editors/BBEditor.cpp b/src/gui/editors/BBEditor.cpp index 21949fe73..667b88545 100644 --- a/src/gui/editors/BBEditor.cpp +++ b/src/gui/editors/BBEditor.cpp @@ -50,6 +50,11 @@ BBEditor::BBEditor( BBTrackContainer* tc ) : setWindowTitle( tr( "Beat+Bassline Editor" ) ); setCentralWidget(m_trackContainerView); + setAcceptDrops(true); + m_toolBar->setAcceptDrops(true); + connect(m_toolBar, SIGNAL(dragEntered(QDragEnterEvent*)), m_trackContainerView, SLOT(dragEnterEvent(QDragEnterEvent*))); + connect(m_toolBar, SIGNAL(dropped(QDropEvent*)), m_trackContainerView, SLOT(dropEvent(QDropEvent*))); + // TODO: Use style sheet if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) diff --git a/src/gui/editors/Editor.cpp b/src/gui/editors/Editor.cpp index 985d22f40..a4f277ac0 100644 --- a/src/gui/editors/Editor.cpp +++ b/src/gui/editors/Editor.cpp @@ -51,7 +51,7 @@ void Editor::togglePlayStop() } Editor::Editor(bool record) : - m_toolBar(new QToolBar(this)), + m_toolBar(new DropToolBar(this)), m_playAction(nullptr), m_recordAction(nullptr), m_recordAccompanyAction(nullptr), @@ -96,3 +96,21 @@ Editor::~Editor() { } + + + + +DropToolBar::DropToolBar(QWidget* parent) : QToolBar(parent) +{ + setAcceptDrops(true); +} + +void DropToolBar::dragEnterEvent(QDragEnterEvent* event) +{ + dragEntered(event); +} + +void DropToolBar::dropEvent(QDropEvent* event) +{ + dropped(event); +} diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index 1a2e71194..5d754c3cc 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -626,6 +626,10 @@ SongEditorWindow::SongEditorWindow(Song* song) : setWindowIcon( embed::getIconPixmap( "songeditor" ) ); setCentralWidget(m_editor); + setAcceptDrops(true); + m_toolBar->setAcceptDrops(true); + connect(m_toolBar, SIGNAL(dragEntered(QDragEnterEvent*)), m_editor, SLOT(dragEnterEvent(QDragEnterEvent*))); + connect(m_toolBar, SIGNAL(dropped(QDropEvent*)), m_editor, SLOT(dropEvent(QDropEvent*))); // Set up buttons m_playAction->setToolTip(tr("Play song (Space)")); From 05d21e0b57adb8bb3cc29a9c4e9660970a000d9e Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 13 Jan 2015 17:34:17 +0100 Subject: [PATCH 118/172] Travis: Run test binary --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index b4ba74a56..ae32605cb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,8 @@ script: - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi - make -j4 VERBOSE=1 + - make tests + - ./tests/tests before_deploy: make package deploy: provider: releases From 260694077db4c64050c8b94bc398c209da39aeb3 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Tue, 13 Jan 2015 11:35:46 -0500 Subject: [PATCH 119/172] Misc ProjectVersion improvments --- include/ProjectVersion.h | 98 +++++++++++++++---------------------- src/core/ProjectVersion.cpp | 2 +- 2 files changed, 41 insertions(+), 59 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index d9c93ca6e..a253a18a4 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -35,96 +35,78 @@ enum CompareType { Major, Minor, Release, Build }; * * Parses and compares version information. i.e. "1.0.3" < "1.0.10" */ -class ProjectVersion : public QString +class ProjectVersion { public: - ProjectVersion(const QString & s, const CompareType c = CompareType::Build) : - QString(s), - m_major(s.section( '.', 0, 0 ).toInt()) , - m_minor(s.section( '.', 1, 1 ).toInt()) , - m_release(s.section( '.', 2 ).section( '-', 0, 0 ).toInt()) , - m_build(s.section( '.', 2 ).section( '-', 1 )), + ProjectVersion(QString version, CompareType c = CompareType::Build) : + m_version(version), + m_major(version.section( '.', 0, 0 ).toInt()) , + m_minor(version.section( '.', 1, 1 ).toInt()) , + m_release(version.section( '.', 2 ).section( '-', 0, 0 ).toInt()) , + m_build(version.section( '.', 2 ).section( '-', 1 )), m_compareType(c) { } - static int compare(const ProjectVersion & v1, const ProjectVersion & v2); + static int compare(ProjectVersion v1, ProjectVersion v2); - const int getMajor() const { return m_major; } - const int getMinor() const { return m_minor; } - const int getRelease() const { return m_release; } - const QString getBuild() const { return m_build; } - const CompareType getCompareType() const { return m_compareType; } + int getMajor() { return m_major; } + int getMinor() { return m_minor; } + int getRelease() { return m_release; } + QString getBuild() { return m_build; } + CompareType getCompareType() { return m_compareType; } + void setCompareType(CompareType compareType) { m_compareType = compareType; } private: - const int m_major; - const int m_minor; - const int m_release; - const QString m_build; - const CompareType m_compareType; + QString m_version; + int m_major; + int m_minor; + int m_release; + QString m_build; + CompareType m_compareType; } ; -inline int compStr(const ProjectVersion & v1, const char * v2) +inline int compare(ProjectVersion v1, QString v2) { return ProjectVersion::compare(v1, ProjectVersion(v2)); } -inline int compStr(const ProjectVersion & v1, const QString & v2) -{ - return ProjectVersion::compare(v1, ProjectVersion(v2)); -} - - /* * ProjectVersion v. char[] */ -inline bool operator<(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) < 0; } -inline bool operator>(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) > 0; } -inline bool operator<=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) <= 0; } -inline bool operator>=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) >= 0; } -inline bool operator==(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) == 0; } -inline bool operator!=(const ProjectVersion & v1, const char * v2) { return compStr(v1, v2) != 0; } +inline bool operator<(ProjectVersion v1, QString v2) { return compare(v1, v2) < 0; } +inline bool operator>(ProjectVersion v1, QString v2) { return compare(v1, v2) > 0; } +inline bool operator<=(ProjectVersion v1, QString v2) { return compare(v1, v2) <= 0; } +inline bool operator>=(ProjectVersion v1, QString v2) { return compare(v1, v2) >= 0; } +inline bool operator==(ProjectVersion v1, QString v2) { return compare(v1, v2) == 0; } +inline bool operator!=(ProjectVersion v1, QString v2) { return compare(v1, v2) != 0; } + +inline bool operator<(QString v1, ProjectVersion v2) { return 0 < compare(v2, v1); } +inline bool operator>(QString v1, ProjectVersion v2) { return 0 > compare(v2, v1); } +inline bool operator<=(QString v1, ProjectVersion v2) { return 0 <= compare(v2, v1); } +inline bool operator>=(QString v1, ProjectVersion v2) { return 0 >= compare(v2, v1); } +inline bool operator==(QString v1, ProjectVersion v2) { return 0 == compare(v2, v1); } +inline bool operator!=(QString v1, ProjectVersion v2) { return 0 != compare(v2, v1); } -inline bool operator<(const char * v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } -inline bool operator>(const char * v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } -inline bool operator<=(const char * v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } -inline bool operator>=(const char * v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } -inline bool operator==(const char * v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } -inline bool operator!=(const char * v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } -/* - * ProjectVersion v. QString - */ -inline bool operator<(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) < 0; } -inline bool operator>(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) > 0; } -inline bool operator<=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) <= 0; } -inline bool operator>=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) >= 0; } -inline bool operator==(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) == 0; } -inline bool operator!=(const ProjectVersion & v1, const QString & v2) { return compStr(v1, v2) != 0; } -inline bool operator<(const QString & v1, const ProjectVersion & v2) { return 0 < compStr(v2, v1); } -inline bool operator>(const QString & v1, const ProjectVersion & v2) { return 0 > compStr(v2, v1); } -inline bool operator<=(const QString & v1, const ProjectVersion & v2) { return 0 <= compStr(v2, v1); } -inline bool operator>=(const QString & v1, const ProjectVersion & v2) { return 0 >= compStr(v2, v1); } -inline bool operator==(const QString & v1, const ProjectVersion & v2) { return 0 == compStr(v2, v1); } -inline bool operator!=(const QString & v1, const ProjectVersion & v2) { return 0 != compStr(v2, v1); } /* * ProjectVersion v. ProjectVersion */ -inline bool operator<(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) < 0; } -inline bool operator>(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) > 0; } -inline bool operator<=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) <= 0; } -inline bool operator>=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) >= 0; } -inline bool operator==(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) == 0; } -inline bool operator!=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) != 0; } +inline bool operator<(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) < 0; } +inline bool operator>(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) > 0; } +inline bool operator<=(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) <= 0; } +inline bool operator>=(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) >= 0; } +inline bool operator==(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) == 0; } +inline bool operator!=(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) != 0; } #endif diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 325c39631..e9d29edca 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -27,7 +27,7 @@ #include "ProjectVersion.h" -int ProjectVersion::compare(const ProjectVersion & v1, const ProjectVersion & v2) +int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) { if(v1.getMajor() != v2.getMajor()) { From 17f32f344fdd8a75af0e4cf8e77fdfb8a3e95c85 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Tue, 13 Jan 2015 11:38:17 -0500 Subject: [PATCH 120/172] Better switching of comparators, char[] constructor --- include/ProjectVersion.h | 43 ++++++++++++++++++++++++++++--------- src/core/ProjectVersion.cpp | 1 - 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index a253a18a4..c41d2ae08 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -31,6 +31,24 @@ enum CompareType { Major, Minor, Release, Build }; + +static inline int parseMajor(QString & version) { + return version.section( '.', 0, 0 ).toInt(); +} + +static inline int parseMinor(QString & version) { + return version.section( '.', 1, 1 ).toInt(); +} + +static inline int parseRelease(QString & version) { + return version.section( '.', 2 ).section( '-', 0, 0 ).toInt(); +} + +static inline QString parseBuild(QString & version) { + return version.section( '.', 2 ).section( '-', 1 ); +} + + /*! \brief Version number parsing and comparison * * Parses and compares version information. i.e. "1.0.3" < "1.0.10" @@ -40,10 +58,20 @@ class ProjectVersion public: ProjectVersion(QString version, CompareType c = CompareType::Build) : m_version(version), - m_major(version.section( '.', 0, 0 ).toInt()) , - m_minor(version.section( '.', 1, 1 ).toInt()) , - m_release(version.section( '.', 2 ).section( '-', 0, 0 ).toInt()) , - m_build(version.section( '.', 2 ).section( '-', 1 )), + m_major(parseMajor(m_version)), + m_minor(parseMinor(m_version)), + m_release(parseRelease(m_version)) , + m_build(parseBuild(m_version)), + m_compareType(c) + { + } + + ProjectVersion(const char * version, CompareType c = CompareType::Build) : + m_version(QString(version)), + m_major(parseMajor(m_version)), + m_minor(parseMinor(m_version)), + m_release(parseRelease(m_version)) , + m_build(parseBuild(m_version)), m_compareType(c) { } @@ -55,7 +83,7 @@ public: int getRelease() { return m_release; } QString getBuild() { return m_build; } CompareType getCompareType() { return m_compareType; } - void setCompareType(CompareType compareType) { m_compareType = compareType; } + ProjectVersion setCompareType(CompareType compareType) { m_compareType = compareType; return * this; } private: @@ -67,17 +95,12 @@ private: CompareType m_compareType; } ; - - - inline int compare(ProjectVersion v1, QString v2) { return ProjectVersion::compare(v1, ProjectVersion(v2)); } - - /* * ProjectVersion v. char[] */ diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index e9d29edca..df7b5bd46 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -76,4 +76,3 @@ int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) return QString::compare(v1.getBuild(), v2.getBuild()); } - From 697fc4dd0f993b022ceb725a134d3b1d8f669477 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Tue, 13 Jan 2015 11:50:11 -0500 Subject: [PATCH 121/172] Fix typo in comments --- include/ProjectVersion.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index c41d2ae08..d181ba49a 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -102,7 +102,7 @@ inline int compare(ProjectVersion v1, QString v2) /* - * ProjectVersion v. char[] + * ProjectVersion v. QString */ inline bool operator<(ProjectVersion v1, QString v2) { return compare(v1, v2) < 0; } inline bool operator>(ProjectVersion v1, QString v2) { return compare(v1, v2) > 0; } From e3a29d0ad7a0fb2078b0fb066f26a9b9440c3eb0 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 13 Jan 2015 18:04:13 +0100 Subject: [PATCH 122/172] Fix Travis build --- tests/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 377063751..f74c5a4b2 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -2,7 +2,7 @@ INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}") INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11") +SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++0x") SET(CMAKE_AUTOMOC ON) From 37d89720c89b93ffca7d677953dcbb1847fa9a33 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 13 Jan 2015 18:19:10 +0100 Subject: [PATCH 123/172] Travis: Disable tests on Windows --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ae32605cb..88701e719 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,8 +19,7 @@ script: - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi - make -j4 VERBOSE=1 - - make tests - - ./tests/tests + - if [ $TARGET_OS == linux ]; make tests && ./tests/tests; fi before_deploy: make package deploy: provider: releases From c5fbd3e643138139bd78400b3fd729e1cf45852d Mon Sep 17 00:00:00 2001 From: Lukas W Date: Tue, 13 Jan 2015 18:31:18 +0100 Subject: [PATCH 124/172] Travis: Fix .travis.yml typo --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 88701e719..a1276790c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,7 +19,7 @@ script: - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi - make -j4 VERBOSE=1 - - if [ $TARGET_OS == linux ]; make tests && ./tests/tests; fi + - if [ $TARGET_OS == linux ]; then make tests && ./tests/tests; fi before_deploy: make package deploy: provider: releases From 0dcd293ce11ca64fc056cad6aca5d7398d00f77f Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Tue, 13 Jan 2015 21:33:41 -0800 Subject: [PATCH 125/172] Undo some pointer declaration changes. --- src/gui/editors/PianoRoll.cpp | 44 +++++++++++++++++------------------ 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/gui/editors/PianoRoll.cpp b/src/gui/editors/PianoRoll.cpp index f1244dc88..d837292b7 100644 --- a/src/gui/editors/PianoRoll.cpp +++ b/src/gui/editors/PianoRoll.cpp @@ -186,12 +186,12 @@ PianoRoll::PianoRoll() : m_nemStr.push_back( tr( "Note Volume" ) ); m_nemStr.push_back( tr( "Note Panning" ) ); - QSignalMapper *signalMapper = new QSignalMapper( this ); + QSignalMapper * signalMapper = new QSignalMapper( this ); m_noteEditMenu = new QMenu( this ); m_noteEditMenu->clear(); for( int i = 0; i < m_nemStr.size(); ++i ) { - QAction *act = new QAction( m_nemStr.at(i), this ); + QAction * act = new QAction( m_nemStr.at(i), this ); connect( act, SIGNAL(triggered()), signalMapper, SLOT(map()) ); signalMapper->setMapping( act, i ); m_noteEditMenu->addAction( act ); @@ -202,10 +202,10 @@ PianoRoll::PianoRoll() : signalMapper = new QSignalMapper( this ); m_semiToneMarkerMenu = new QMenu( this ); - QAction *markSemitoneAction = new QAction( tr("Mark/unmark current semitone"), this ); - QAction *markScaleAction = new QAction( tr("Mark current scale"), this ); - QAction *markChordAction = new QAction( tr("Mark current chord"), this ); - QAction *unmarkAllAction = new QAction( tr("Unmark all"), this ); + QAction* markSemitoneAction = new QAction( tr("Mark/unmark current semitone"), this ); + QAction* markScaleAction = new QAction( tr("Mark current scale"), this ); + QAction* markChordAction = new QAction( tr("Mark current chord"), this ); + QAction* unmarkAllAction = new QAction( tr("Unmark all"), this ); connect( markSemitoneAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); connect( markScaleAction, SIGNAL(triggered()), signalMapper, SLOT(map()) ); @@ -544,7 +544,7 @@ void PianoRoll::setCurrentPattern( Pattern* newPattern ) { // determine the central key so that we can scroll to it int total_notes = 0; - for( const Note * const& note : notes ) + for( const Note* const& note : notes ) { if( note->length() > 0 ) { @@ -2962,7 +2962,7 @@ void PianoRoll::paintEvent(QPaintEvent * pe ) } } - p.setPen( QPen( noteColor(), NOTE_EDIT_LINE_WIDTH+2 ) ); + p.setPen( QPen( noteColor(), NOTE_EDIT_LINE_WIDTH + 2 ) ); p.drawPoints( editHandles ); } @@ -3919,11 +3919,11 @@ PianoRollWindow::PianoRollWindow() : tr( "Click here to stop playback of current pattern." ) ); // init edit-buttons at the top - ActionGroup *editModeGroup = new ActionGroup(this); - QAction *drawAction = editModeGroup->addAction(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); - QAction *eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); - QAction *selectAction = editModeGroup->addAction(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); - QAction *detuneAction = editModeGroup->addAction(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); + ActionGroup* editModeGroup = new ActionGroup(this); + QAction* drawAction = editModeGroup->addAction(embed::getIconPixmap("edit_draw"), tr("Draw mode (Shift+D)")); + QAction* eraseAction = editModeGroup->addAction(embed::getIconPixmap("edit_erase"), tr("Erase mode (Shift+E)")); + QAction* selectAction = editModeGroup->addAction(embed::getIconPixmap("edit_select"), tr("Select mode (Shift+S)")); + QAction* detuneAction = editModeGroup->addAction(embed::getIconPixmap("automation"), tr("Detune mode (Shift+T)")); drawAction->setChecked( true ); @@ -3958,13 +3958,13 @@ PianoRollWindow::PianoRollWindow() : connect(editModeGroup, SIGNAL(triggered(int)), m_editor, SLOT(setEditMode(int))); // Copy + paste actions - QAction *cutAction = new QAction(embed::getIconPixmap("edit_cut"), + QAction* cutAction = new QAction(embed::getIconPixmap("edit_cut"), tr("Cut selected notes (Ctrl+X)"), this); - QAction *copyAction = new QAction(embed::getIconPixmap("edit_copy"), + QAction* copyAction = new QAction(embed::getIconPixmap("edit_copy"), tr("Copy selected notes (Ctrl+C)"), this); - QAction *pasteAction = new QAction(embed::getIconPixmap("edit_paste"), + QAction* pasteAction = new QAction(embed::getIconPixmap("edit_paste"), tr("Paste notes from clipboard (Ctrl+V)"), this); cutAction->setWhatsThis( @@ -3987,7 +3987,7 @@ PianoRollWindow::PianoRollWindow() : connect(copyAction, SIGNAL(triggered()), m_editor, SLOT(copySelectedNotes())); connect(pasteAction, SIGNAL(triggered()), m_editor, SLOT(pasteNotes())); - QLabel *zoom_lbl = new QLabel( m_toolBar ); + QLabel * zoom_lbl = new QLabel( m_toolBar ); zoom_lbl->setPixmap( embed::getIconPixmap( "zoom" ) ); m_zoomingComboBox = new ComboBox( m_toolBar ); @@ -3995,7 +3995,7 @@ PianoRollWindow::PianoRollWindow() : m_zoomingComboBox->setFixedSize( 64, 22 ); // setup quantize-stuff - QLabel *quantize_lbl = new QLabel( m_toolBar ); + QLabel * quantize_lbl = new QLabel( m_toolBar ); quantize_lbl->setPixmap( embed::getIconPixmap( "quantize" ) ); m_quantizeComboBox = new ComboBox( m_toolBar ); @@ -4004,7 +4004,7 @@ PianoRollWindow::PianoRollWindow() : // setup note-len-stuff - QLabel *note_len_lbl = new QLabel( m_toolBar ); + QLabel * note_len_lbl = new QLabel( m_toolBar ); note_len_lbl->setPixmap( embed::getIconPixmap( "note" ) ); @@ -4013,7 +4013,7 @@ PianoRollWindow::PianoRollWindow() : m_noteLenComboBox->setFixedSize( 105, 22 ); // setup scale-stuff - QLabel *scale_lbl = new QLabel( m_toolBar ); + QLabel * scale_lbl = new QLabel( m_toolBar ); scale_lbl->setPixmap( embed::getIconPixmap( "scale" ) ); m_scaleComboBox = new ComboBox( m_toolBar ); @@ -4021,7 +4021,7 @@ PianoRollWindow::PianoRollWindow() : m_scaleComboBox->setFixedSize( 105, 22 ); // setup chord-stuff - QLabel *chord_lbl = new QLabel( m_toolBar ); + QLabel * chord_lbl = new QLabel( m_toolBar ); chord_lbl->setPixmap( embed::getIconPixmap( "chord" ) ); m_chordComboBox = new ComboBox( m_toolBar ); @@ -4127,7 +4127,7 @@ const Pattern* PianoRollWindow::currentPattern() const return m_editor->currentPattern(); } -void PianoRollWindow::setCurrentPattern(Pattern *pattern) +void PianoRollWindow::setCurrentPattern(Pattern* pattern) { m_editor->setCurrentPattern(pattern); } From 26592907e6f1b1fd4f5d4fe0908ace7450748ad0 Mon Sep 17 00:00:00 2001 From: dnl-music Date: Wed, 14 Jan 2015 17:06:07 +0500 Subject: [PATCH 126/172] Update Monstro.cpp --- plugins/monstro/Monstro.cpp | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/plugins/monstro/Monstro.cpp b/plugins/monstro/Monstro.cpp index 3f0869b68..a521bb286 100644 --- a/plugins/monstro/Monstro.cpp +++ b/plugins/monstro/Monstro.cpp @@ -784,7 +784,7 @@ inline void MonstroSynth::updateModulators( float * env1, float * env2, float * } else if( m_env_phase[i] < 2.0f ) // attack phase { - env[i][f] = calcSlope1( fraction( m_env_phase[i] ) ); + env[i][f] = calcSlope( i, fraction( m_env_phase[i] ) ); m_env_phase[i] = qMin( 2.0f, m_env_phase[i] + m_env_att[i] ); } else if( m_env_phase[i] < 3.0f ) // hold phase @@ -794,7 +794,7 @@ inline void MonstroSynth::updateModulators( float * env1, float * env2, float * } else if( m_env_phase[i] < 4.0f ) // decay phase { - const sample_t s = calcSlope1( 1.0f - fraction( m_env_phase[i] ) ); + const sample_t s = calcSlope( i, 1.0f - fraction( m_env_phase[i] ) ); if( s <= m_env_sus[i] ) { env[i][f] = m_env_sus[i]; @@ -808,7 +808,7 @@ inline void MonstroSynth::updateModulators( float * env1, float * env2, float * } else if( m_env_phase[i] < 5.0f ) // release phase { - env[i][f] = calcSlope1( 1.0f - fraction( m_env_phase[i] ) ); + env[i][f] = calcSlope( i, 1.0f - fraction( m_env_phase[i] ) ); m_env_phase[i] += m_env_rel[i]; } else env[i][f] = 0.0f; @@ -817,11 +817,20 @@ inline void MonstroSynth::updateModulators( float * env1, float * env2, float * } -inline sample_t MonstroSynth::calcSlope1( sample_t s ) +inline sample_t MonstroSynth::calcSlope( int slope, sample_t s ) { - if( m_parent->m_slope1 == 1.0f ) return s; - if( s == 0.0f ) return s; - return fastPow( s, m_parent->m_slope1 ); + if(slope==0) + { + if( m_parent->m_slope1 == 1.0f ) return s; + if( s == 0.0f ) return s; + return fastPow( s, m_parent->m_slope1 ); + } + else if(slope==1) + { + if( m_parent->m_slope2 == 1.0f ) return s; + if( s == 0.0f ) return s; + return fastPow( s, m_parent->m_slope2 ); + } } inline sample_t MonstroSynth::calcSlope2( sample_t s ) From e3ebef08a933fd700eafc083c25f170f9ad22cb2 Mon Sep 17 00:00:00 2001 From: dnl-music Date: Wed, 14 Jan 2015 17:09:38 +0500 Subject: [PATCH 127/172] Update Monstro.h --- plugins/monstro/Monstro.h | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/plugins/monstro/Monstro.h b/plugins/monstro/Monstro.h index 95dfa2933..769271f48 100644 --- a/plugins/monstro/Monstro.h +++ b/plugins/monstro/Monstro.h @@ -178,10 +178,7 @@ private: return s1 + ( s2 - s1 ) * x; }*/ // using interpolation.h from now on - inline sample_t calcSlope1( sample_t s ); - - inline sample_t calcSlope2( sample_t s ); - + inline sample_t calcSlope( int slope, sample_t s ); // checks for lower bound for phase, upper bound is already checked by oscillator-functions in both // oscillator.h and bandlimitedwave.h so we save some cpu by only checking lower bound From 2f7820a6d90bfdbd603c5c5a6617bf5fa81b9bd8 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Wed, 14 Jan 2015 19:54:48 +0100 Subject: [PATCH 128/172] CMake: Change the way tests links lmms --- src/CMakeLists.txt | 19 +++++++++++++------ tests/CMakeLists.txt | 5 ++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index e739f36aa..5e4dc2fe4 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,16 +64,16 @@ ENDIF() # Enable C++11 ADD_DEFINITIONS("-std=c++0x") -ADD_EXECUTABLE(lmms - core/main.cpp +ADD_LIBRARY(lmmsobjs OBJECT ${LMMS_SRCS} ${LMMS_INCLUDES} ${LMMS_UI_OUT} ${LMMS_ER_H} - "${WINRC}" ) -SET_TARGET_PROPERTIES(lmms PROPERTIES - ENABLE_EXPORTS ON +ADD_EXECUTABLE(lmms + $ + core/main.cpp + "${WINRC}" ) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_OUT} lmmsconfig.h lmms.1.gz") @@ -82,7 +82,7 @@ IF(LMMS_BUILD_WIN32) SET(EXTRA_LIBRARIES "-lwinmm") ENDIF() -TARGET_LINK_LIBRARIES(lmms +SET(LMMS_REQUIRED_LIBS ${CMAKE_THREAD_LIBS_INIT} ${QT_LIBRARIES} ${ASOUND_LIBRARY} @@ -95,6 +95,12 @@ TARGET_LINK_LIBRARIES(lmms ${SNDFILE_LIBRARIES} ${EXTRA_LIBRARIES} ) +# Expose required libs for tests binary +SET(LMMS_REQUIRED_LIBS ${LMMS_REQUIRED_LIBS} PARENT_SCOPE) + +TARGET_LINK_LIBRARIES(lmms + ${LMMS_REQUIRED_LIBS} +) IF(QT5) TARGET_LINK_LIBRARIES(lmms @@ -138,6 +144,7 @@ ENDFOREACH(_item ${qm_targets}) IF(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(lmms PROPERTIES LINK_FLAGS "${LINK_FLAGS} -mwindows" + ENABLE_EXPORTS ON ) ADD_CUSTOM_COMMAND(TARGET lmms POST_BUILD COMMAND "${STRIP}" "$") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index f74c5a4b2..0a42b2729 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,7 @@ INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}") INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") +INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++0x") @@ -10,6 +11,8 @@ ADD_EXECUTABLE(tests EXCLUDE_FROM_ALL main.cpp QTestSuite + + $ ) TARGET_LINK_LIBRARIES(tests ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY}) -TARGET_LINK_LIBRARIES(tests lmms) +TARGET_LINK_LIBRARIES(tests ${LMMS_REQUIRED_LIBS}) From d89b54d768b62a2e12041ab8b4cb8f6064d813e0 Mon Sep 17 00:00:00 2001 From: Tres Finocchiaro Date: Wed, 14 Jan 2015 14:33:21 -0500 Subject: [PATCH 129/172] Add CPU prioritization support for Windows --- plugins/vst_base/RemoteVstPlugin.cpp | 7 +++++++ src/core/main.cpp | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/plugins/vst_base/RemoteVstPlugin.cpp b/plugins/vst_base/RemoteVstPlugin.cpp index fdea04b5c..234b89acd 100644 --- a/plugins/vst_base/RemoteVstPlugin.cpp +++ b/plugins/vst_base/RemoteVstPlugin.cpp @@ -1877,6 +1877,13 @@ int main( int _argc, char * * _argv ) #endif #endif +#ifdef LMMS_BUILD_WIN32 + if( !SetPriorityClass( GetCurrentProcess(), HIGH_PRIORITY_CLASS ) ) + { + printf( "Notice: could not set high priority.\n" ); + } +#endif + // constructor automatically will process messages until it receives // a IdVstLoadPlugin message and processes it __plugin = new RemoteVstPlugin( atoi( _argv[1] ), atoi( _argv[2] ) ); diff --git a/src/core/main.cpp b/src/core/main.cpp index b191b9c7c..e9f691f51 100644 --- a/src/core/main.cpp +++ b/src/core/main.cpp @@ -48,6 +48,10 @@ #include #include +#ifdef LMMS_BUILD_WIN32 +#include +#endif + #ifdef LMMS_HAVE_SCHED_H #include #endif @@ -422,6 +426,13 @@ int main( int argc, char * * argv ) #endif #endif +#ifdef LMMS_BUILD_WIN32 + if( !SetPriorityClass( GetCurrentProcess(), HIGH_PRIORITY_CLASS ) ) + { + printf( "Notice: could not set high priority.\n" ); + } +#endif + if( render_out.isEmpty() ) { new GuiApplication(); From ff882e021e1ef1430fc89fd8cdc93460051dc999 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 15:57:50 +0100 Subject: [PATCH 130/172] Disable tests for CMake <2.8.8 --- src/CMakeLists.txt | 37 ++++++++++++++++++++++++++----------- tests/CMakeLists.txt | 7 +++++++ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 5e4dc2fe4..d0f8760a1 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -64,17 +64,32 @@ ENDIF() # Enable C++11 ADD_DEFINITIONS("-std=c++0x") -ADD_LIBRARY(lmmsobjs OBJECT - ${LMMS_SRCS} - ${LMMS_INCLUDES} - ${LMMS_UI_OUT} - ${LMMS_ER_H} -) -ADD_EXECUTABLE(lmms - $ - core/main.cpp - "${WINRC}" -) +# ADD_LIBRARY's OBJECT is only supported in CMake >=2.8.8 +IF(CMAKE_MAJOR_VERSION GREATER 2 OR + CMAKE_MINOR_VERSION GREATER 8 OR + CMAKE_PATCH_VERSION GREATER 7) + + ADD_LIBRARY(lmmsobjs OBJECT + ${LMMS_SRCS} + ${LMMS_INCLUDES} + ${LMMS_UI_OUT} + ${LMMS_ER_H} + ) + ADD_EXECUTABLE(lmms + core/main.cpp + $ + "${WINRC}" + ) +ELSE() + ADD_EXECUTABLE(lmms + core/main.cpp + ${LMMS_SRCS} + ${LMMS_INCLUDES} + ${LMMS_UI_OUT} + ${LMMS_ER_H} + "${WINRC}" + ) +ENDIF() SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${LMMS_ER_H} ${LMMS_UI_OUT} lmmsconfig.h lmms.1.gz") diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0a42b2729..612e8639f 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,3 +1,10 @@ +IF(CMAKE_MAJOR_VERSION LESS 2 OR + CMAKE_MINOR_VERSION LESS 8 OR + CMAKE_PATCH_VERSION LESS 8) + MESSAGE("-- Unit tests are only available in CMake >=2.8.8. You have ${CMAKE_VERSION}") + RETURN() +ENDIF() + INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}") INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}") INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include") From b90ee93d0c13dfb8ce8c7046691bb299db0f988b Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 16:03:52 +0100 Subject: [PATCH 131/172] Travis: Upgrade CMake from PPA --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index a1276790c..1b25b0f60 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,10 @@ env: - TARGET_OS=win64 before_install: - if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi + # Travis only has CMake 2.8.7, we need >=2.8.8: + - if [ $TARGET_OS == linux ]; then sudo add-apt-repository ppa:kalakris/cmake -y; fi - sudo apt-get update -qq + - if [ $TARGET_OS == linux ]; then sudo apt-get install -y cmake; fi install: - if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig; fi From c0932bd75e0311ee847e46ec1f31848b709028d5 Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 15 Jan 2015 17:14:50 +0200 Subject: [PATCH 132/172] Fix monstro slopes properly --- plugins/monstro/Monstro.cpp | 24 ++++-------------------- plugins/monstro/Monstro.h | 3 +-- 2 files changed, 5 insertions(+), 22 deletions(-) diff --git a/plugins/monstro/Monstro.cpp b/plugins/monstro/Monstro.cpp index a521bb286..1ef89c16b 100644 --- a/plugins/monstro/Monstro.cpp +++ b/plugins/monstro/Monstro.cpp @@ -819,25 +819,9 @@ inline void MonstroSynth::updateModulators( float * env1, float * env2, float * inline sample_t MonstroSynth::calcSlope( int slope, sample_t s ) { - if(slope==0) - { - if( m_parent->m_slope1 == 1.0f ) return s; - if( s == 0.0f ) return s; - return fastPow( s, m_parent->m_slope1 ); - } - else if(slope==1) - { - if( m_parent->m_slope2 == 1.0f ) return s; - if( s == 0.0f ) return s; - return fastPow( s, m_parent->m_slope2 ); - } -} - -inline sample_t MonstroSynth::calcSlope2( sample_t s ) -{ - if( m_parent->m_slope2 == 1.0f ) return s; + if( m_parent->m_slope[slope] == 1.0f ) return s; if( s == 0.0f ) return s; - return fastPow( s, m_parent->m_slope2 ); + return fastPow( s, m_parent->m_slope[slope] ); } @@ -1449,14 +1433,14 @@ void MonstroInstrument::updateSamplerate() void MonstroInstrument::updateSlope1() { const float slope = m_env1Slope.value(); - m_slope1 = exp10f( slope * -1.0f ); + m_slope[0] = exp10f( slope * -1.0f ); } void MonstroInstrument::updateSlope2() { const float slope = m_env2Slope.value(); - m_slope2 = exp10f( slope * -1.0f ); + m_slope[1] = exp10f( slope * -1.0f ); } diff --git a/plugins/monstro/Monstro.h b/plugins/monstro/Monstro.h index 769271f48..7061551be 100644 --- a/plugins/monstro/Monstro.h +++ b/plugins/monstro/Monstro.h @@ -409,8 +409,7 @@ protected: f_cnt_t m_env1_relF; f_cnt_t m_env2_relF; - float m_slope1; - float m_slope2; + float m_slope [2]; f_cnt_t m_lfo1_att; f_cnt_t m_lfo2_att; From e33645f9aba8dc4e007dc02f94c8084bfc4eba74 Mon Sep 17 00:00:00 2001 From: Vesa Date: Thu, 15 Jan 2015 17:17:33 +0200 Subject: [PATCH 133/172] Fix monstro slopes --- plugins/monstro/Monstro.cpp | 17 +++++------------ plugins/monstro/Monstro.h | 8 ++------ 2 files changed, 7 insertions(+), 18 deletions(-) diff --git a/plugins/monstro/Monstro.cpp b/plugins/monstro/Monstro.cpp index 1d0d25812..dc5161959 100644 --- a/plugins/monstro/Monstro.cpp +++ b/plugins/monstro/Monstro.cpp @@ -817,18 +817,11 @@ inline void MonstroSynth::updateModulators( float * env1, float * env2, float * } -inline sample_t MonstroSynth::calcSlope1( sample_t s ) +inline sample_t MonstroSynth::calcSlope( int slope, sample_t s ) { - if( m_parent->m_slope1 == 1.0f ) return s; + if( m_parent->m_slope[slope] == 1.0f ) return s; if( s == 0.0f ) return s; - return fastPow( s, m_parent->m_slope1 ); -} - -inline sample_t MonstroSynth::calcSlope2( sample_t s ) -{ - if( m_parent->m_slope2 == 1.0f ) return s; - if( s == 0.0f ) return s; - return fastPow( s, m_parent->m_slope2 ); + return fastPow( s, m_parent->m_slope[slope] ); } @@ -1439,14 +1432,14 @@ void MonstroInstrument::updateSamplerate() void MonstroInstrument::updateSlope1() { const float slope = m_env1Slope.value(); - m_slope1 = exp10f( slope * -1.0f ); + m_slope[0] = exp10f( slope * -1.0f ); } void MonstroInstrument::updateSlope2() { const float slope = m_env2Slope.value(); - m_slope2 = exp10f( slope * -1.0f ); + m_slope[1] = exp10f( slope * -1.0f ); } diff --git a/plugins/monstro/Monstro.h b/plugins/monstro/Monstro.h index 478e25956..197efb911 100644 --- a/plugins/monstro/Monstro.h +++ b/plugins/monstro/Monstro.h @@ -177,10 +177,7 @@ private: return s1 + ( s2 - s1 ) * x; }*/ // using interpolation.h from now on - inline sample_t calcSlope1( sample_t s ); - - inline sample_t calcSlope2( sample_t s ); - + inline sample_t calcSlope( int slope, sample_t s ); // checks for lower bound for phase, upper bound is already checked by oscillator-functions in both // oscillator.h and bandlimitedwave.h so we save some cpu by only checking lower bound @@ -411,8 +408,7 @@ protected: f_cnt_t m_env1_relF; f_cnt_t m_env2_relF; - float m_slope1; - float m_slope2; + float m_slope [2]; f_cnt_t m_lfo1_att; f_cnt_t m_lfo2_att; From a52e4724cf4ce6f780e5693e50b39549e587b570 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 16:29:19 +0100 Subject: [PATCH 134/172] Some small SongEditor fixes --- include/SongEditor.h | 8 ++++--- src/gui/editors/SongEditor.cpp | 44 +++++++++++++++++----------------- 2 files changed, 27 insertions(+), 25 deletions(-) diff --git a/include/SongEditor.h b/include/SongEditor.h index 9b2e6cd94..12f20de1b 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -66,6 +66,9 @@ public: SongEditor( Song * _song ); ~SongEditor(); + void saveSettings(QDomDocument& doc, QDomElement& element); + void loadSettings(QDomElement& element); + public slots: void scrolled( int _new_pos ); @@ -94,9 +97,6 @@ private slots: void zoomingChanged(); - void adjustUiAfterProjectLoad(); - - private: virtual void keyPressEvent( QKeyEvent * _ke ); virtual void wheelEvent( QWheelEvent * _we ); @@ -148,6 +148,8 @@ protected slots: void recordAccompany(); void stop(); + void adjustUiAfterProjectLoad(); + private: QAction* m_addBBTrackAction; QAction* m_addSampleTrackAction; diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index 5d754c3cc..900b936a5 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -104,11 +104,6 @@ SongEditor::SongEditor( Song * _song ) : static_cast( layout() )->insertWidget( 1, m_timeLine ); - // let's get notified when loading a project - connect( m_song, SIGNAL( projectLoaded() ), - this, SLOT( adjustUiAfterProjectLoad() ) ); - - // add some essential widgets to global tool-bar QWidget * tb = gui->mainWindow()->toolBar(); @@ -264,6 +259,16 @@ SongEditor::~SongEditor() { } +void SongEditor::saveSettings(QDomDocument& doc, QDomElement& element) +{ + MainWindow::saveWidgetState(parentWidget(), element); +} + +void SongEditor::loadSettings(QDomElement& element) +{ + MainWindow::restoreWidgetState(parentWidget(), element); +} + @@ -595,23 +600,6 @@ void SongEditor::zoomingChanged() - -void SongEditor::adjustUiAfterProjectLoad() -{ - //if( isMaximized() ) - { - // make sure to bring us to front as the song editor is the central - // widget in a song and when just opening a song in order to listen to - // it, it's very annyoing to manually bring up the song editor each time - gui->mainWindow()->workspace()->setActiveSubWindow( - qobject_cast( parentWidget() ) ); - } - scrolled( 0 ); -} - - - - bool SongEditor::allowRubberband() const { return m_mode == SelectMode; @@ -691,6 +679,8 @@ SongEditorWindow::SongEditorWindow(Song* song) : m_toolBar->addSeparator(); m_toolBar->addWidget( zoom_lbl ); m_toolBar->addWidget( m_zoomingComboBox ); + + connect(song, SIGNAL(projectLoaded()), this, SLOT(adjustUiAfterProjectLoad())); } QSize SongEditorWindow::sizeHint() const @@ -729,3 +719,13 @@ void SongEditorWindow::stop() m_editor->m_song->stop(); gui->pianoRoll()->stopRecording(); } + +void SongEditorWindow::adjustUiAfterProjectLoad() +{ + // make sure to bring us to front as the song editor is the central + // widget in a song and when just opening a song in order to listen to + // it, it's very annyoing to manually bring up the song editor each time + gui->mainWindow()->workspace()->setActiveSubWindow( + qobject_cast( parentWidget() ) ); + m_editor->scrolled(0); +} From a18f86bde7aebdc9477f59558b1fed90d07403a4 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 16:52:44 +0100 Subject: [PATCH 135/172] ProjectVersion: Clean up a bit, add a test --- include/ProjectVersion.h | 78 ++++----------------------- src/core/ProjectVersion.cpp | 48 ++++++++++++++--- tests/CMakeLists.txt | 3 +- tests/main.cpp | 1 + tests/src/core/ProjectVersionTest.cpp | 43 +++++++++++++++ 5 files changed, 98 insertions(+), 75 deletions(-) create mode 100644 tests/src/core/ProjectVersionTest.cpp diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index d181ba49a..f4a2fc101 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -32,49 +32,16 @@ enum CompareType { Major, Minor, Release, Build }; -static inline int parseMajor(QString & version) { - return version.section( '.', 0, 0 ).toInt(); -} - -static inline int parseMinor(QString & version) { - return version.section( '.', 1, 1 ).toInt(); -} - -static inline int parseRelease(QString & version) { - return version.section( '.', 2 ).section( '-', 0, 0 ).toInt(); -} - -static inline QString parseBuild(QString & version) { - return version.section( '.', 2 ).section( '-', 1 ); -} - - -/*! \brief Version number parsing and comparison +/*! \brief Version number parsing and comparison * * Parses and compares version information. i.e. "1.0.3" < "1.0.10" */ class ProjectVersion { public: - ProjectVersion(QString version, CompareType c = CompareType::Build) : - m_version(version), - m_major(parseMajor(m_version)), - m_minor(parseMinor(m_version)), - m_release(parseRelease(m_version)) , - m_build(parseBuild(m_version)), - m_compareType(c) - { - } + ProjectVersion(QString version, CompareType c = CompareType::Build); - ProjectVersion(const char * version, CompareType c = CompareType::Build) : - m_version(QString(version)), - m_major(parseMajor(m_version)), - m_minor(parseMinor(m_version)), - m_release(parseRelease(m_version)) , - m_build(parseBuild(m_version)), - m_compareType(c) - { - } + ProjectVersion(const char * version, CompareType c = CompareType::Build); static int compare(ProjectVersion v1, ProjectVersion v2); @@ -84,7 +51,7 @@ public: QString getBuild() { return m_build; } CompareType getCompareType() { return m_compareType; } ProjectVersion setCompareType(CompareType compareType) { m_compareType = compareType; return * this; } - + private: QString m_version; @@ -95,41 +62,16 @@ private: CompareType m_compareType; } ; -inline int compare(ProjectVersion v1, QString v2) -{ - return ProjectVersion::compare(v1, ProjectVersion(v2)); -} - - -/* - * ProjectVersion v. QString - */ -inline bool operator<(ProjectVersion v1, QString v2) { return compare(v1, v2) < 0; } -inline bool operator>(ProjectVersion v1, QString v2) { return compare(v1, v2) > 0; } -inline bool operator<=(ProjectVersion v1, QString v2) { return compare(v1, v2) <= 0; } -inline bool operator>=(ProjectVersion v1, QString v2) { return compare(v1, v2) >= 0; } -inline bool operator==(ProjectVersion v1, QString v2) { return compare(v1, v2) == 0; } -inline bool operator!=(ProjectVersion v1, QString v2) { return compare(v1, v2) != 0; } - -inline bool operator<(QString v1, ProjectVersion v2) { return 0 < compare(v2, v1); } -inline bool operator>(QString v1, ProjectVersion v2) { return 0 > compare(v2, v1); } -inline bool operator<=(QString v1, ProjectVersion v2) { return 0 <= compare(v2, v1); } -inline bool operator>=(QString v1, ProjectVersion v2) { return 0 >= compare(v2, v1); } -inline bool operator==(QString v1, ProjectVersion v2) { return 0 == compare(v2, v1); } -inline bool operator!=(QString v1, ProjectVersion v2) { return 0 != compare(v2, v1); } - - - /* * ProjectVersion v. ProjectVersion */ -inline bool operator<(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) < 0; } -inline bool operator>(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) > 0; } -inline bool operator<=(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) <= 0; } -inline bool operator>=(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) >= 0; } -inline bool operator==(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) == 0; } -inline bool operator!=(ProjectVersion & v1, ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) != 0; } +inline bool operator<(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) < 0; } +inline bool operator>(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) > 0; } +inline bool operator<=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) <= 0; } +inline bool operator>=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) >= 0; } +inline bool operator==(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) == 0; } +inline bool operator!=(const ProjectVersion & v1, const ProjectVersion & v2) { return ProjectVersion::compare(v1, v2) != 0; } #endif diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index df7b5bd46..3db29c418 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -4,7 +4,7 @@ * Copyright (c) 2007 Javier Serrano Polo * Copyright (c) 2008 Tobias Doerffel * Copyright (c) 2015 Tres Finocchiaro - * + * * This file is part of LMMS - http://lmms.io * * This program is free software; you can redistribute it and/or @@ -27,16 +27,52 @@ #include "ProjectVersion.h" +int parseMajor(QString & version) { + return version.section( '.', 0, 0 ).toInt(); +} + +int parseMinor(QString & version) { + return version.section( '.', 1, 1 ).toInt(); +} + +int parseRelease(QString & version) { + return version.section( '.', 2 ).section( '-', 0, 0 ).toInt(); +} + +QString parseBuild(QString & version) { + return version.section( '.', 2 ).section( '-', 1 ); +} + +ProjectVersion::ProjectVersion(QString version, CompareType c) : + m_version(version), + m_major(parseMajor(m_version)), + m_minor(parseMinor(m_version)), + m_release(parseRelease(m_version)) , + m_build(parseBuild(m_version)), + m_compareType(c) +{ +} + +ProjectVersion::ProjectVersion(const char* version, CompareType c) : + m_version(QString(version)), + m_major(parseMajor(m_version)), + m_minor(parseMinor(m_version)), + m_release(parseRelease(m_version)) , + m_build(parseBuild(m_version)), + m_compareType(c) +{ +} + int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) { if(v1.getMajor() != v2.getMajor()) { return v1.getMajor() - v2.getMajor(); } - + // return prematurely for Major comparison - if(v1.getCompareType() == CompareType::Major || - v2.getCompareType() == CompareType::Major) + if(v1.getCompareType() == CompareType::Major || + v2.getCompareType() == CompareType::Major) { return 0; } @@ -47,7 +83,7 @@ int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) } // return prematurely for Minor comparison - if(v1.getCompareType() == CompareType::Minor || + if(v1.getCompareType() == CompareType::Minor || v2.getCompareType() == CompareType::Minor) { return 0; @@ -58,7 +94,7 @@ int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) return v1.getRelease() - v2.getRelease(); } - if(v1.getCompareType() == CompareType::Release || + if(v1.getCompareType() == CompareType::Release || v2.getCompareType() == CompareType::Release) { return 0; } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 612e8639f..56520dd89 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -18,8 +18,9 @@ ADD_EXECUTABLE(tests EXCLUDE_FROM_ALL main.cpp QTestSuite - $ + + src/core/ProjectVersionTest.cpp ) TARGET_LINK_LIBRARIES(tests ${QT_LIBRARIES} ${QT_QTTEST_LIBRARY}) TARGET_LINK_LIBRARIES(tests ${LMMS_REQUIRED_LIBS}) diff --git a/tests/main.cpp b/tests/main.cpp index 1f3e95355..bfc053ad8 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -6,6 +6,7 @@ int main(int argc, char* argv[]) { + qDebug() << ">> Will run" << QTestSuite::suites().size() << "test suites"; for (QTestSuite*& suite : QTestSuite::suites()) { QTest::qExec(suite, argc, argv); diff --git a/tests/src/core/ProjectVersionTest.cpp b/tests/src/core/ProjectVersionTest.cpp new file mode 100644 index 000000000..7e6d981ea --- /dev/null +++ b/tests/src/core/ProjectVersionTest.cpp @@ -0,0 +1,43 @@ +/* + * ProjectVersionTest.cpp + * + * Copyright (c) 2015 Lukas W + * + * This file is part of LMMS - http://lmms.io + * + * 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; either + * 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 (see COPYING); if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA. + * + */ + +#include "QTestSuite.h" + +#include "ProjectVersion.h" + +class ProjectVersionTest : QTestSuite +{ + Q_OBJECT +private slots: + void test() + { + Q_ASSERT(ProjectVersion("1.1.0", CompareType::Minor) > "1.0.3"); + Q_ASSERT(ProjectVersion("1.1.0", CompareType::Major) < "2.1.0"); + Q_ASSERT(ProjectVersion("1.1.0", CompareType::Release) > "0.2.1"); + Q_ASSERT(ProjectVersion("1.1.4", CompareType::Release) < "1.1.10"); + Q_ASSERT(ProjectVersion("1.1.0", CompareType::Minor) == "1.1.5"); + } +} instance; + +#include "ProjectVersionTest.moc" From ebf68d57a9e64f7af11fde3b3374f0cc56e671fa Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 17:26:55 +0100 Subject: [PATCH 136/172] ProjectVersion: Some refactoring --- include/ProjectVersion.h | 15 +++++++------- src/core/ProjectVersion.cpp | 40 ++++++++++++++++++------------------- 2 files changed, 26 insertions(+), 29 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index f4a2fc101..37cc83565 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -40,18 +40,17 @@ class ProjectVersion { public: ProjectVersion(QString version, CompareType c = CompareType::Build); - ProjectVersion(const char * version, CompareType c = CompareType::Build); - static int compare(ProjectVersion v1, ProjectVersion v2); - - int getMajor() { return m_major; } - int getMinor() { return m_minor; } - int getRelease() { return m_release; } - QString getBuild() { return m_build; } - CompareType getCompareType() { return m_compareType; } + int getMajor() const { return m_major; } + int getMinor() const { return m_minor; } + int getRelease() const { return m_release; } + QString getBuild() const { return m_build; } + CompareType getCompareType() const { return m_compareType; } ProjectVersion setCompareType(CompareType compareType) { m_compareType = compareType; return * this; } + static int compare(const ProjectVersion& a, const ProjectVersion& b, CompareType c); + static int compare(ProjectVersion v1, ProjectVersion v2); private: QString m_version; diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 3db29c418..7fc602c67 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -63,52 +63,50 @@ ProjectVersion::ProjectVersion(const char* version, CompareType c) : { } -int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) +int ProjectVersion::compare(const ProjectVersion& a, const ProjectVersion& b, CompareType c) { - if(v1.getMajor() != v2.getMajor()) + if (a.getMajor() != b.getMajor()) { - return v1.getMajor() - v2.getMajor(); + return a.getMajor() - b.getMajor(); } - - // return prematurely for Major comparison - if(v1.getCompareType() == CompareType::Major || - v2.getCompareType() == CompareType::Major) + else if (c == CompareType::Major) { return 0; } - if(v1.getMinor() != v2.getMinor()) + if (a.getMinor() != b.getMinor()) { - return v1.getMinor() - v2.getMinor(); + return a.getMinor() - b.getMinor(); } - - // return prematurely for Minor comparison - if(v1.getCompareType() == CompareType::Minor || - v2.getCompareType() == CompareType::Minor) + else if (c == CompareType::Minor) { return 0; } - if(v1.getRelease() != v2.getRelease()) + if (a.getRelease() != b.getRelease()) { - return v1.getRelease() - v2.getRelease(); + return a.getRelease() - b.getRelease(); } - - if(v1.getCompareType() == CompareType::Release || - v2.getCompareType() == CompareType::Release) { + else if (c == CompareType::Release) + { return 0; } // make sure 0.x.y > 0.x.y-patch - if(v1.getBuild().isEmpty()) + if(a.getBuild().isEmpty()) { return 1; } - if(v2.getBuild().isEmpty()) + if(b.getBuild().isEmpty()) { return -1; } - return QString::compare(v1.getBuild(), v2.getBuild()); + return QString::compare(a.getBuild(), b.getBuild()); +} + +int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) +{ + return compare(v1, v2, std::min(v1.getCompareType(), v2.getCompareType())); } From b862b34a9a9eaf68c8e3b65d44ec4b45a29f0cf9 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 20:38:53 +0100 Subject: [PATCH 137/172] Travis: Enable OSX --- .travis.yml | 52 +++++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 17 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1b25b0f60..86d9e43df 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,28 +1,46 @@ language: cpp compiler: gcc -env: - - TARGET_OS=linux - - TARGET_OS=win32 - - TARGET_OS=win64 +matrix: + include: + - os: linux + env: TARGET_OS=linux + - os: linux + env: TARGET_OS=win32 + - os: linux + env: TARGET_OS=win64 + - os: osx before_install: - - if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi - # Travis only has CMake 2.8.7, we need >=2.8.8: - - if [ $TARGET_OS == linux ]; then sudo add-apt-repository ppa:kalakris/cmake -y; fi - - sudo apt-get update -qq - - if [ $TARGET_OS == linux ]; then sudo apt-get install -y cmake; fi + - if [ $TRAVIS_OS_NAME == linux ]; then + if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi + if [ $TARGET_OS == linux ]; then sudo add-apt-repository ppa:kalakris/cmake -y; fi + sudo apt-get update -qq; + fi + - if [ $TRAVIS_OS_NAME == osx ]; then brew update; fi install: - - if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi - - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig; fi - - if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime mingw64-x-libgig; fi - - if [ $TARGET_OS == linux ]; then sudo apt-get install -y libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev libgig-dev; fi + - if [ $TRAVIS_OS_NAME == linux ]; then + if [ $TARGET_OS == linux ]; then + sudo apt-get install -y cmake libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev libgig-dev; + fi + if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi + if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig; fi + if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime mingw64-x-libgig; fi; + fi + - if [ $TRAVIS_OS_NAME == osx ]; then + brew upgrade qt libsndfile fftw libvorbis libogg jack sdl libsamplerate stk fluid-synth portaudio fltk + fi before_script: - mkdir build && cd build script: - - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi - - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi - - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi + - if [ $TRAVIS_OS_NAME == linux ]; then + if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi + if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi + if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi + fi + - if [ $TRAVIS_OS_NAME == osx ]; then + cmake .. + fi - make -j4 VERBOSE=1 - - if [ $TARGET_OS == linux ]; then make tests && ./tests/tests; fi + - if [ $TARGET_OS == linux ]; then make tests && ./tests/tests; fi; before_deploy: make package deploy: provider: releases From bb24f610428889d75ff6b93c5e9407e6dc80609a Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 20:44:56 +0100 Subject: [PATCH 138/172] Travis: Fix yml syntax errors --- .travis.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/.travis.yml b/.travis.yml index 86d9e43df..3c3a71ae8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,8 @@ matrix: - os: osx before_install: - if [ $TRAVIS_OS_NAME == linux ]; then - if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi - if [ $TARGET_OS == linux ]; then sudo add-apt-repository ppa:kalakris/cmake -y; fi + if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi; + if [ $TARGET_OS == linux ]; then sudo add-apt-repository ppa:kalakris/cmake -y; fi; sudo apt-get update -qq; fi - if [ $TRAVIS_OS_NAME == osx ]; then brew update; fi @@ -20,24 +20,24 @@ install: - if [ $TRAVIS_OS_NAME == linux ]; then if [ $TARGET_OS == linux ]; then sudo apt-get install -y cmake libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev libgig-dev; - fi - if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig; fi + fi; + if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi; + if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig; fi; if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime mingw64-x-libgig; fi; fi - if [ $TRAVIS_OS_NAME == osx ]; then - brew upgrade qt libsndfile fftw libvorbis libogg jack sdl libsamplerate stk fluid-synth portaudio fltk + brew upgrade qt libsndfile fftw libvorbis libogg jack sdl libsamplerate stk fluid-synth portaudio fltk; fi before_script: - mkdir build && cd build script: - if [ $TRAVIS_OS_NAME == linux ]; then - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi + if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi; + if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi; if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi fi - if [ $TRAVIS_OS_NAME == osx ]; then - cmake .. + cmake ..; fi - make -j4 VERBOSE=1 - if [ $TARGET_OS == linux ]; then make tests && ./tests/tests; fi; From f15f8ce3df7939d6088b2fb4f54c5a0c497d0345 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 20:51:15 +0100 Subject: [PATCH 139/172] Travis: Fix brew --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 3c3a71ae8..5fb64b32f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ language: cpp compiler: gcc matrix: + exclude: + - os: linux include: - os: linux env: TARGET_OS=linux @@ -26,7 +28,7 @@ install: if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime mingw64-x-libgig; fi; fi - if [ $TRAVIS_OS_NAME == osx ]; then - brew upgrade qt libsndfile fftw libvorbis libogg jack sdl libsamplerate stk fluid-synth portaudio fltk; + brew install qt libsndfile fftw libvorbis libogg jack sdl libsamplerate stk fluid-synth portaudio fltk; fi before_script: - mkdir build && cd build From 4cfba53f71ca90347d5b72cf5ea3ddedd2a93d2e Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 21:22:33 +0100 Subject: [PATCH 140/172] Travis update Try removing that unnecessary linux job --- .travis.yml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5fb64b32f..9f74a9087 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,12 +4,9 @@ matrix: exclude: - os: linux include: - - os: linux - env: TARGET_OS=linux - - os: linux - env: TARGET_OS=win32 - - os: linux - env: TARGET_OS=win64 + - env: TARGET_OS=linux + - env: TARGET_OS=win32 + - env: TARGET_OS=win64 - os: osx before_install: - if [ $TRAVIS_OS_NAME == linux ]; then From c7e3ab3d46cc083dd2946b749416ac754ba295ae Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 21:24:09 +0100 Subject: [PATCH 141/172] Don't use QList's initializer_list constructor (compat commit) --- src/gui/MainWindow.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 57b82a49a..3e2135391 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -530,12 +530,12 @@ void MainWindow::finalize() } // Add editor subwindows - for (QWidget* widget : QList{ - gui->automationEditor(), - gui->getBBEditor(), - gui->pianoRoll(), - gui->songEditor() - }) + for (QWidget* widget : QList() + << gui->automationEditor() + << gui->getBBEditor() + << gui->pianoRoll() + << gui->songEditor() + ) { QMdiSubWindow* window = workspace()->addSubWindow(widget); window->setWindowIcon(widget->windowIcon()); From d4d26a61384505bd54ef7bcbe61ee4397f1d7337 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 21:35:46 +0100 Subject: [PATCH 142/172] OSX fix --- cmake/modules/BuildPlugin.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index 0fba9e829..bd3a0f411 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -52,7 +52,7 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME) INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") IF(LMMS_BUILD_APPLE) - SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader ${CMAKE_BINARY_DIR}/lmms") + SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader $") ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "") From bd4a93c1d7436b10dedac47d5977501445e56775 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 22:05:10 +0100 Subject: [PATCH 143/172] Travis: Outsource build scripts --- .travis.yml | 33 ++++----------------------- .travis/linux..before_install.sh | 2 ++ .travis/linux..install.sh | 4 ++++ .travis/linux..script.sh | 1 + .travis/linux.win32.before_install.sh | 2 ++ .travis/linux.win32.install.sh | 7 ++++++ .travis/linux.win32.script.sh | 1 + .travis/linux.win64.before_install.sh | 1 + .travis/linux.win64.install.sh | 7 ++++++ .travis/linux.win64.script.sh | 1 + .travis/osx..before_install.sh | 1 + .travis/osx..install.sh | 1 + .travis/osx..script.sh | 1 + 13 files changed, 33 insertions(+), 29 deletions(-) create mode 100644 .travis/linux..before_install.sh create mode 100644 .travis/linux..install.sh create mode 100644 .travis/linux..script.sh create mode 100644 .travis/linux.win32.before_install.sh create mode 100644 .travis/linux.win32.install.sh create mode 100644 .travis/linux.win32.script.sh create mode 100644 .travis/linux.win64.before_install.sh create mode 100644 .travis/linux.win64.install.sh create mode 100644 .travis/linux.win64.script.sh create mode 100644 .travis/osx..before_install.sh create mode 100644 .travis/osx..install.sh create mode 100644 .travis/osx..script.sh diff --git a/.travis.yml b/.travis.yml index 9f74a9087..52e6cc645 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,45 +1,20 @@ language: cpp compiler: gcc matrix: - exclude: - - os: linux include: - - env: TARGET_OS=linux - env: TARGET_OS=win32 - env: TARGET_OS=win64 - os: osx before_install: - - if [ $TRAVIS_OS_NAME == linux ]; then - if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi; - if [ $TARGET_OS == linux ]; then sudo add-apt-repository ppa:kalakris/cmake -y; fi; - sudo apt-get update -qq; - fi - - if [ $TRAVIS_OS_NAME == osx ]; then brew update; fi + - sh ./travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh install: - - if [ $TRAVIS_OS_NAME == linux ]; then - if [ $TARGET_OS == linux ]; then - sudo apt-get install -y cmake libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib libfltk1.3-dev libgig-dev; - fi; - if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi; - if [ $TARGET_OS != linux ]; then sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig; fi; - if [ $TARGET_OS == win64 ]; then sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc mingw64-x-runtime mingw64-x-libgig; fi; - fi - - if [ $TRAVIS_OS_NAME == osx ]; then - brew install qt libsndfile fftw libvorbis libogg jack sdl libsamplerate stk fluid-synth portaudio fltk; - fi + - sh ./travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh before_script: - mkdir build && cd build script: - - if [ $TRAVIS_OS_NAME == linux ]; then - if [ $TARGET_OS == win32 ]; then ../build_mingw32 || ../build_mingw32; fi; - if [ $TARGET_OS == win64 ]; then ../build_mingw64 || ../build_mingw64; fi; - if [ $TARGET_OS == linux ]; then cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo ..; fi - fi - - if [ $TRAVIS_OS_NAME == osx ]; then - cmake ..; - fi + - sh ./travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh - make -j4 VERBOSE=1 - - if [ $TARGET_OS == linux ]; then make tests && ./tests/tests; fi; + - if [[ $TARGET_OS != win* ]]; then make tests && ./tests/tests; fi; before_deploy: make package deploy: provider: releases diff --git a/.travis/linux..before_install.sh b/.travis/linux..before_install.sh new file mode 100644 index 000000000..233bd784f --- /dev/null +++ b/.travis/linux..before_install.sh @@ -0,0 +1,2 @@ +sudo add-apt-repository ppa:kalakris/cmake -y; +sudo apt-get update -qq diff --git a/.travis/linux..install.sh b/.travis/linux..install.sh new file mode 100644 index 000000000..49a6ea466 --- /dev/null +++ b/.travis/linux..install.sh @@ -0,0 +1,4 @@ +sudo apt-get install -y cmake libqt4-dev libsndfile-dev fftw3-dev libvorbis-dev \ + libogg-dev libasound2-dev libjack-dev libsdl-dev libsamplerate0-dev \ + libstk0-dev libfluidsynth-dev portaudio19-dev wine-dev g++-multilib \ + libfltk1.3-dev libgig-dev diff --git a/.travis/linux..script.sh b/.travis/linux..script.sh new file mode 100644 index 000000000..d89b130db --- /dev/null +++ b/.travis/linux..script.sh @@ -0,0 +1 @@ +cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. diff --git a/.travis/linux.win32.before_install.sh b/.travis/linux.win32.before_install.sh new file mode 100644 index 000000000..02a9be79d --- /dev/null +++ b/.travis/linux.win32.before_install.sh @@ -0,0 +1,2 @@ +sudo add-apt-repository ppa:tobydox/mingw -y +sudo apt-get update -qq diff --git a/.travis/linux.win32.install.sh b/.travis/linux.win32.install.sh new file mode 100644 index 000000000..86babb1b7 --- /dev/null +++ b/.travis/linux.win32.install.sh @@ -0,0 +1,7 @@ +sudo apt-get install -y nsis cloog-isl libmpc2 mingw32 + +sudo apt-get install -y mingw32-x-qt mingw32-x-sdl mingw32-x-libvorbis \ + mingw32-x-fluidsynth mingw32-x-stk mingw32-x-glib2 mingw32-x-portaudio \ + mingw32-x-libsndfile mingw32-x-fftw mingw32-x-flac mingw32-x-fltk \ + mingw32-x-libsamplerate mingw32-x-pkgconfig mingw32-x-binutils \ + mingw32-x-gcc mingw32-x-runtime mingw32-x-libgig diff --git a/.travis/linux.win32.script.sh b/.travis/linux.win32.script.sh new file mode 100644 index 000000000..3831a842f --- /dev/null +++ b/.travis/linux.win32.script.sh @@ -0,0 +1 @@ +../build_mingw32 || ../build_mingw32 diff --git a/.travis/linux.win64.before_install.sh b/.travis/linux.win64.before_install.sh new file mode 100644 index 000000000..a598ff1ca --- /dev/null +++ b/.travis/linux.win64.before_install.sh @@ -0,0 +1 @@ +sh .travis/linux.win32.before_install.sh diff --git a/.travis/linux.win64.install.sh b/.travis/linux.win64.install.sh new file mode 100644 index 000000000..75cc3bcf1 --- /dev/null +++ b/.travis/linux.win64.install.sh @@ -0,0 +1,7 @@ +sh .travis/linux.win32.install.sh + +sudo apt-get install -y mingw64-x-qt mingw64-x-sdl mingw64-x-libvorbis \ + mingw64-x-fluidsynth mingw64-x-stk mingw64-x-glib2 mingw64-x-portaudio \ + mingw64-x-libsndfile mingw64-x-fftw mingw64-x-flac mingw64-x-fltk \ + mingw64-x-libsamplerate mingw64-x-pkgconfig mingw64-x-binutils mingw64-x-gcc\ + mingw64-x-runtime mingw64-x-libgig diff --git a/.travis/linux.win64.script.sh b/.travis/linux.win64.script.sh new file mode 100644 index 000000000..7c6c4f96a --- /dev/null +++ b/.travis/linux.win64.script.sh @@ -0,0 +1 @@ +../build_mingw64 || ../build_mingw64 diff --git a/.travis/osx..before_install.sh b/.travis/osx..before_install.sh new file mode 100644 index 000000000..3387d7dcf --- /dev/null +++ b/.travis/osx..before_install.sh @@ -0,0 +1 @@ +brew update diff --git a/.travis/osx..install.sh b/.travis/osx..install.sh new file mode 100644 index 000000000..af530b225 --- /dev/null +++ b/.travis/osx..install.sh @@ -0,0 +1 @@ +brew install qt libsndfile fftw libvorbis libogg jack sdl libsamplerate stk fluid-synth portaudio fltk diff --git a/.travis/osx..script.sh b/.travis/osx..script.sh new file mode 100644 index 000000000..d89b130db --- /dev/null +++ b/.travis/osx..script.sh @@ -0,0 +1 @@ +cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo .. From 4c0705359ab7e9b25498ba1eb8ab3ab7005eb00d Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 22:23:26 +0100 Subject: [PATCH 144/172] OSX fix try #2 --- cmake/modules/BuildPlugin.cmake | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cmake/modules/BuildPlugin.cmake b/cmake/modules/BuildPlugin.cmake index bd3a0f411..3add78661 100644 --- a/cmake/modules/BuildPlugin.cmake +++ b/cmake/modules/BuildPlugin.cmake @@ -52,7 +52,8 @@ MACRO(BUILD_PLUGIN PLUGIN_NAME) INSTALL(TARGETS ${PLUGIN_NAME} LIBRARY DESTINATION "${PLUGIN_DIR}") IF(LMMS_BUILD_APPLE) - SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader $") + SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES LINK_FLAGS "-bundle_loader ${CMAKE_BINARY_DIR}/lmms") + ADD_DEPENDENCIES(${PLUGIN_NAME} lmms) ENDIF(LMMS_BUILD_APPLE) IF(LMMS_BUILD_WIN32) SET_TARGET_PROPERTIES(${PLUGIN_NAME} PROPERTIES PREFIX "") From eea616f08059d96104f44dea9638b1b5cca196cc Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 22:26:04 +0100 Subject: [PATCH 145/172] Travis: Disable linux builds (temporarily) --- .travis.yml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 52e6cc645..b796e97c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,19 @@ language: cpp compiler: gcc -matrix: - include: - - env: TARGET_OS=win32 - - env: TARGET_OS=win64 - - os: osx +os: osx +#matrix: +# include: +# - env: TARGET_OS=win32 +# - env: TARGET_OS=win64 +# - os: osx before_install: - - sh ./travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh + - sh ./.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh install: - - sh ./travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh + - sh ./.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh before_script: - mkdir build && cd build script: - - sh ./travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh + - sh ./.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh - make -j4 VERBOSE=1 - if [[ $TARGET_OS != win* ]]; then make tests && ./tests/tests; fi; before_deploy: make package From 7e43541fe58548fdf509f943a8f19dd5de6d7c18 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 22:34:51 +0100 Subject: [PATCH 146/172] Travis: Fix script path error --- .travis.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index b796e97c1..8be09df37 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,13 +7,13 @@ os: osx # - env: TARGET_OS=win64 # - os: osx before_install: - - sh ./.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh + - sh ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh install: - - sh ./.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh + - sh ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.install.sh before_script: - mkdir build && cd build script: - - sh ./.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh + - sh ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.script.sh - make -j4 VERBOSE=1 - if [[ $TARGET_OS != win* ]]; then make tests && ./tests/tests; fi; before_deploy: make package From 85d7843c9888a14b9cbd8990e9212a05260668d5 Mon Sep 17 00:00:00 2001 From: Lukas W Date: Thu, 15 Jan 2015 23:10:28 +0100 Subject: [PATCH 147/172] Tests: Fix CMake version check --- tests/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 56520dd89..9b77a02f9 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,5 @@ -IF(CMAKE_MAJOR_VERSION LESS 2 OR - CMAKE_MINOR_VERSION LESS 8 OR +IF(CMAKE_MAJOR_VERSION LESS 2 AND + CMAKE_MINOR_VERSION LESS 8 AND CMAKE_PATCH_VERSION LESS 8) MESSAGE("-- Unit tests are only available in CMake >=2.8.8. You have ${CMAKE_VERSION}") RETURN() From b5019e53d185d6891ff93a1549a6c6e66e88d2ed Mon Sep 17 00:00:00 2001 From: Lukas W Date: Fri, 16 Jan 2015 00:04:09 +0100 Subject: [PATCH 148/172] Travis: Re-enable linux builds --- .travis.yml | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8be09df37..390f7f0b6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,11 +1,10 @@ language: cpp compiler: gcc -os: osx -#matrix: -# include: -# - env: TARGET_OS=win32 -# - env: TARGET_OS=win64 -# - os: osx +matrix: + include: + - env: TARGET_OS=win32 + - env: TARGET_OS=win64 + - os: osx before_install: - sh ${TRAVIS_BUILD_DIR}/.travis/${TRAVIS_OS_NAME}.${TARGET_OS}.before_install.sh install: From 59513f9a49af89fb9a9b47e19f121773a9b115fb Mon Sep 17 00:00:00 2001 From: Lukas W Date: Fri, 16 Jan 2015 00:25:10 +0100 Subject: [PATCH 149/172] Fix that CMake version check again --- tests/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9b77a02f9..0a2df0256 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,6 +1,6 @@ -IF(CMAKE_MAJOR_VERSION LESS 2 AND - CMAKE_MINOR_VERSION LESS 8 AND - CMAKE_PATCH_VERSION LESS 8) +IF(NOT (CMAKE_MAJOR_VERSION GREATER 2 OR + CMAKE_MINOR_VERSION GREATER 8 OR + CMAKE_PATCH_VERSION GREATER 7)) MESSAGE("-- Unit tests are only available in CMake >=2.8.8. You have ${CMAKE_VERSION}") RETURN() ENDIF() From f492a8ab0e5502c019931b977b55760b674d2aab Mon Sep 17 00:00:00 2001 From: Lukas W Date: Fri, 16 Jan 2015 01:15:02 +0100 Subject: [PATCH 150/172] Detect failed tests --- tests/main.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/tests/main.cpp b/tests/main.cpp index bfc053ad8..5a842dc0b 100644 --- a/tests/main.cpp +++ b/tests/main.cpp @@ -6,9 +6,13 @@ int main(int argc, char* argv[]) { - qDebug() << ">> Will run" << QTestSuite::suites().size() << "test suites"; + int numsuites = QTestSuite::suites().size(); + qDebug() << ">> Will run" << numsuites << "test suites"; + int failed = 0; for (QTestSuite*& suite : QTestSuite::suites()) { - QTest::qExec(suite, argc, argv); + failed += QTest::qExec(suite, argc, argv); } + qDebug() << "<<" << failed << "out of"< Date: Fri, 16 Jan 2015 19:57:31 +0100 Subject: [PATCH 151/172] Fix a segfault --- src/gui/MainWindow.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3e2135391..612a7409e 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -530,12 +530,12 @@ void MainWindow::finalize() } // Add editor subwindows - for (QWidget* widget : QList() - << gui->automationEditor() - << gui->getBBEditor() - << gui->pianoRoll() - << gui->songEditor() - ) + for (QWidget* widget : std::list{ + gui->automationEditor(), + gui->getBBEditor(), + gui->pianoRoll(), + gui->songEditor() + }) { QMdiSubWindow* window = workspace()->addSubWindow(widget); window->setWindowIcon(widget->windowIcon()); From 9c8e2b195c893a6ce0e177ad216b0d23039c10da Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Fri, 16 Jan 2015 20:24:24 +0100 Subject: [PATCH 152/172] Use delete[] instead of delete for sampleFrame Fixes warning: 'delete' applied to a pointer-to-array type 'sampleFrame *' (aka 'sample_t (*)[2]') treated as delete[] in mac os build --- plugins/delay/stereodelay.cpp | 4 ++-- src/core/RingBuffer.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/plugins/delay/stereodelay.cpp b/plugins/delay/stereodelay.cpp index 27fe026ad..9bdf29fdb 100644 --- a/plugins/delay/stereodelay.cpp +++ b/plugins/delay/stereodelay.cpp @@ -48,7 +48,7 @@ StereoDelay::~StereoDelay() { if( m_buffer ) { - delete m_buffer; + delete[] m_buffer; } } @@ -84,7 +84,7 @@ void StereoDelay::setSampleRate( int sampleRate ) { if( m_buffer ) { - delete m_buffer; + delete[] m_buffer; } int bufferSize = ( int )( sampleRate * m_maxTime ); diff --git a/src/core/RingBuffer.cpp b/src/core/RingBuffer.cpp index ae06acc61..474c1f527 100644 --- a/src/core/RingBuffer.cpp +++ b/src/core/RingBuffer.cpp @@ -75,7 +75,7 @@ void RingBuffer::changeSize( f_cnt_t size ) m_buffer = new sampleFrame[ m_size ]; memset( m_buffer, 0, m_size * sizeof( sampleFrame ) ); m_position = 0; - delete tmp; + delete[] tmp; } From 018457340e736d86ae95361018a0abe26acf9854 Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Sun, 18 Jan 2015 12:47:43 -0800 Subject: [PATCH 153/172] Bump version number in README --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index 5969f40c2..b6c8e8fb7 100644 --- a/README +++ b/README @@ -1,4 +1,4 @@ -LMMS 1.0.93 +LMMS 1.1.0 =========== Copyright (c) 2004-2014 by LMMS developers From a4536c43a52d893adfcab0797532c5d5a5d1689b Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Sun, 18 Jan 2015 12:48:03 -0800 Subject: [PATCH 154/172] Format and slightly reword READMEs --- README | 24 +++++++++++++++--------- README.md | 23 ++++++++++++++++++----- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/README b/README index b6c8e8fb7..da4bfad76 100644 --- a/README +++ b/README @@ -23,7 +23,11 @@ with this program; if not, write to the Free Software Foundation, Inc., What is LMMS? -------------- -LMMS is a free cross-platform alternative to commercial programs like FL Studio (R), which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface. +LMMS is a free cross-platform alternative to commercial programs like FL Studio +(R), which allow you to produce music with your computer. This includes the +creation of melodies and beats, the synthesis and mixing of sounds, and +arranging of samples. You can have fun with your MIDI-keyboard and much more; +all in a user-friendly and modern interface. Features @@ -83,11 +87,11 @@ See INSTALL for information on how to build LMMS. Join LMMS-development ---------------------- -If you are interested in LMMS, it's programming, artwork, testing, writing -demo-songs, (and improving this README...) or something like that, -you're welcome to participate on the development of LMMS! +If you are interested in LMMS, its programming, artwork, testing, writing +demo songs, (and improving this README...) or something like that, +you're welcome to participate in the development of LMMS! -The project-homepage of LMMS, mailingslists and a list of things you can do +The project homepage of LMMS, mailing lists and a list of things you can do can be found at http://lmms.io/ @@ -97,8 +101,10 @@ Details on development can be found in the Wiki: https://github.com/LMMS/lmms/wiki -Before coding a new big feature, please ALWAYS post your idea and suggestions -about your feature and about the intended implementation to the -LMMS-devel-mailinglist (lmms-devel@lists.sourceforge.net) and wait for replies! -Maybe there're different ideas, improvements, hints or maybe your feature is + +Before coding a new big feature, please ALWAYS file an issue at +https://github.com/LMMS/lmms/issues/new for your idea and suggestions about your +feature and about the intended implementation or post to the LMMS developers +mailing list (lmms-devel@lists.sourceforge.net) and wait for replies! +Maybe there are different ideas, improvements, hints or maybe your feature is not welcome/needed at the moment. diff --git a/README.md b/README.md index 614b3bf72..5c623eafc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,11 @@ What is LMMS? -------------- -LMMS is a free cross-platform alternative to commercial programs like FL Studio®, which allow you to produce music with your computer. This includes the creation of melodies and beats, the synthesis and mixing of sounds, and arranging of samples. You can have fun with your MIDI-keyboard and much more; all in a user-friendly and modern interface. +LMMS is a free cross-platform alternative to commercial programs like +FL Studio®, which allow you to produce music with your computer. This includes +the creation of melodies and beats, the synthesis and mixing of sounds, and +arranging of samples. You can have fun with your MIDI-keyboard and much more; +all in a user-friendly and modern interface. [Homepage](http://lmms.io)
[Downloads/Releases](https://github.com/LMMS/lmms/releases)
@@ -40,14 +44,23 @@ Features Building --------- -See [Compiling LMMS](https://github.com/LMMS/lmms/wiki/Compiling-lmms) on our wiki for information on how to build LMMS. +See [Compiling LMMS](https://github.com/LMMS/lmms/wiki/Compiling-lmms) on our +wiki for information on how to build LMMS. Join LMMS-development ---------------------- -If you are interested in LMMS, it's programming, artwork, testing, writing demo-songs, (and improving this readme…) or something like that, you're welcome to participate on the development of LMMS! +If you are interested in LMMS, its programming, artwork, testing, writing demo +songs, (and improving this README...) or something like that, you're welcome +to participate in the development of LMMS! -Information about what you can do and how can be found in the [wiki](https://github.com/LMMS/lmms/wiki). +Information about what you can do and how can be found in the +[wiki](https://github.com/LMMS/lmms/wiki). -Before coding a new big feature, please _always_ [file an issue](https://github.com/LMMS/lmms/issues/new) for your idea and suggestions about your feature and about the intended implementation on GitHub or post to the LMMS-devel-mailinglist (lmms-devel@lists.sourceforge.net) and wait for replies! Maybe there're different ideas, improvements, hints or maybe your feature is not welcome/needed at the moment. +Before coding a new big feature, please _always_ +[file an issue](https://github.com/LMMS/lmms/issues/new) for your idea and +suggestions about your feature and about the intended implementation on GitHub +or post to the LMMS developers mailinglist (lmms-devel@lists.sourceforge.net) +and wait for replies! Maybe there are different ideas, improvements, hints or +maybe your feature is not welcome/needed at the moment. From 746ea39afb63a5595fa56396d20b46659de1905f Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 18 Jan 2015 21:39:09 +0000 Subject: [PATCH 155/172] Proposed fix 818 Merge file name and preset name. Remove double naming --- src/tracks/InstrumentTrack.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 6ce5613be..cd598529e 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -1403,6 +1403,8 @@ void InstrumentTrackWindow::saveSettingsBtnClicked() sfd.setAcceptMode( FileDialog::AcceptSave ); sfd.setDirectory( presetRoot + m_track->instrumentName() ); sfd.setFileMode( FileDialog::AnyFile ); + QString fname = m_track->name(); + sfd.selectFile(fname.remove(QRegExp("[^a-zA-Z0-9\\d\\s]")).toLower().replace( " ", "_" ) ); if( sfd.exec() == QDialog::Accepted && !sfd.selectedFiles().isEmpty() && From 4e92243508a2ea5187cd4bdb69ccb382e1c8da63 Mon Sep 17 00:00:00 2001 From: Jonas Trappenberg Date: Sun, 18 Jan 2015 14:08:13 -0800 Subject: [PATCH 156/172] Update copyright year --- README | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README b/README index da4bfad76..990719f9a 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ LMMS 1.1.0 =========== -Copyright (c) 2004-2014 by LMMS developers +Copyright (c) 2004-2015 by LMMS developers This program is free software; you can redistribute it and/or modify From a3e5a65957570b032c58532fede9b984777439bb Mon Sep 17 00:00:00 2001 From: Daniel Winzen Date: Mon, 19 Jan 2015 15:32:16 +0100 Subject: [PATCH 157/172] Fix SongEditorWindow resize when a project loads --- include/SongEditor.h | 4 ++-- src/gui/editors/SongEditor.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/include/SongEditor.h b/include/SongEditor.h index 12f20de1b..4280540ce 100644 --- a/include/SongEditor.h +++ b/include/SongEditor.h @@ -66,8 +66,8 @@ public: SongEditor( Song * _song ); ~SongEditor(); - void saveSettings(QDomDocument& doc, QDomElement& element); - void loadSettings(QDomElement& element); + void saveSettings( QDomDocument& doc, QDomElement& element ); + void loadSettings( const QDomElement& element ); public slots: void scrolled( int _new_pos ); diff --git a/src/gui/editors/SongEditor.cpp b/src/gui/editors/SongEditor.cpp index 900b936a5..a513485f3 100644 --- a/src/gui/editors/SongEditor.cpp +++ b/src/gui/editors/SongEditor.cpp @@ -259,12 +259,12 @@ SongEditor::~SongEditor() { } -void SongEditor::saveSettings(QDomDocument& doc, QDomElement& element) +void SongEditor::saveSettings( QDomDocument& doc, QDomElement& element ) { MainWindow::saveWidgetState(parentWidget(), element); } -void SongEditor::loadSettings(QDomElement& element) +void SongEditor::loadSettings( const QDomElement& element ) { MainWindow::restoreWidgetState(parentWidget(), element); } From b0cf5ba289fee13af0f401b158541285ebe7472d Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Mon, 5 Jan 2015 20:45:07 -0200 Subject: [PATCH 158/172] Update coding conventions on Note.cpp --- src/core/Note.cpp | 107 +++++++++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 54 deletions(-) diff --git a/src/core/Note.cpp b/src/core/Note.cpp index 937f52ac8..b973bb4e9 100644 --- a/src/core/Note.cpp +++ b/src/core/Note.cpp @@ -35,24 +35,24 @@ -Note::Note( const MidiTime & _length, const MidiTime & _pos, - int _key, volume_t _volume, panning_t _panning, - DetuningHelper * _detuning ) : +Note::Note( const MidiTime & length, const MidiTime & pos, + int key, volume_t volume, panning_t panning, + DetuningHelper * detuning ) : m_selected( false ), - m_oldKey( qBound( 0, _key, NumKeys ) ), - m_oldPos( _pos ), - m_oldLength( _length ), + m_oldKey( qBound( 0, key, NumKeys ) ), + m_oldPos( pos ), + m_oldLength( length ), m_isPlaying( false ), - m_key( qBound( 0, _key, NumKeys ) ), - m_volume( qBound( MinVolume, _volume, MaxVolume ) ), - m_panning( qBound( PanningLeft, _panning, PanningRight ) ), - m_length( _length ), - m_pos( _pos ), + m_key( qBound( 0, key, NumKeys ) ), + m_volume( qBound( MinVolume, volume, MaxVolume ) ), + m_panning( qBound( PanningLeft, panning, PanningRight ) ), + m_length( length ), + m_pos( pos ), m_detuning( NULL ) { - if( _detuning ) + if( detuning ) { - m_detuning = sharedObject::ref( _detuning ); + m_detuning = sharedObject::ref( detuning ); } else { @@ -63,23 +63,23 @@ Note::Note( const MidiTime & _length, const MidiTime & _pos, -Note::Note( const Note & _note ) : - SerializingObject( _note ), - m_selected( _note.m_selected ), - m_oldKey( _note.m_oldKey ), - m_oldPos( _note.m_oldPos ), - m_oldLength( _note.m_oldLength ), - m_isPlaying( _note.m_isPlaying ), - m_key( _note.m_key), - m_volume( _note.m_volume ), - m_panning( _note.m_panning ), - m_length( _note.m_length ), - m_pos( _note.m_pos ), +Note::Note( const Note & note ) : + SerializingObject( note ), + m_selected( note.m_selected ), + m_oldKey( note.m_oldKey ), + m_oldPos( note.m_oldPos ), + m_oldLength( note.m_oldLength ), + m_isPlaying( note.m_isPlaying ), + m_key( note.m_key), + m_volume( note.m_volume ), + m_panning( note.m_panning ), + m_length( note.m_length ), + m_pos( note.m_pos ), m_detuning( NULL ) { - if( _note.m_detuning ) + if( note.m_detuning ) { - m_detuning = sharedObject::ref( _note.m_detuning ); + m_detuning = sharedObject::ref( note.m_detuning ); } } @@ -97,93 +97,93 @@ Note::~Note() -void Note::setLength( const MidiTime & _length ) +void Note::setLength( const MidiTime & length ) { - m_length = _length; + m_length = length; } -void Note::setPos( const MidiTime & _pos ) +void Note::setPos( const MidiTime & pos ) { - m_pos = _pos; + m_pos = pos; } -void Note::setKey( const int _key ) +void Note::setKey( const int key ) { - const int k = qBound( 0, _key, NumKeys ); + const int k = qBound( 0, key, NumKeys ); m_key = k; } -void Note::setVolume( volume_t _volume ) +void Note::setVolume( volume_t volume ) { - const volume_t v = qBound( MinVolume, _volume, MaxVolume ); + const volume_t v = qBound( MinVolume, volume, MaxVolume ); m_volume = v; } -void Note::setPanning( panning_t _panning ) +void Note::setPanning( panning_t panning ) { - const panning_t p = qBound( PanningLeft, _panning, PanningRight ); + const panning_t p = qBound( PanningLeft, panning, PanningRight ); m_panning = p; } -MidiTime Note::quantized( const MidiTime & _m, const int _q_grid ) +MidiTime Note::quantized( const MidiTime & m, const int qGrid ) { - float p = ( (float) _m / _q_grid ); + float p = ( (float) m / qGrid ); if( p - floorf( p ) < 0.5f ) { - return( static_cast( p ) * _q_grid ); + return static_cast( p ) * qGrid; } - return( static_cast( p + 1 ) * _q_grid ); + return static_cast( p + 1 ) * qGrid; } -void Note::quantizeLength( const int _q_grid ) +void Note::quantizeLength( const int qGrid ) { - setLength( quantized( length(), _q_grid ) ); + setLength( quantized( length(), qGrid ) ); if( length() == 0 ) { - setLength( _q_grid ); + setLength( qGrid ); } } -void Note::quantizePos( const int _q_grid ) +void Note::quantizePos( const int qGrid ) { - setPos( quantized( pos(), _q_grid ) ); + setPos( quantized( pos(), qGrid ) ); } -void Note::saveSettings( QDomDocument & _doc, QDomElement & _this ) +void Note::saveSettings( QDomDocument & doc, QDomElement & parent ) { - _this.setAttribute( "key", m_key ); - _this.setAttribute( "vol", m_volume ); - _this.setAttribute( "pan", m_panning ); - _this.setAttribute( "len", m_length ); - _this.setAttribute( "pos", m_pos ); + parent.setAttribute( "key", m_key ); + parent.setAttribute( "vol", m_volume ); + parent.setAttribute( "pan", m_panning ); + parent.setAttribute( "len", m_length ); + parent.setAttribute( "pos", m_pos ); if( m_detuning && m_length ) { - m_detuning->saveSettings( _doc, _this ); + m_detuning->saveSettings( doc, parent ); } } @@ -231,4 +231,3 @@ bool Note::hasDetuningInfo() const - From d04076f44d3b37d4f5c64fa3daf39fee0ca70092 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Mon, 5 Jan 2015 20:45:46 -0200 Subject: [PATCH 159/172] Update coding conventions on Note.h --- include/Note.h | 46 ++++++++++++++++++++++------------------------ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/include/Note.h b/include/Note.h index d5cc0363e..990a22a59 100644 --- a/include/Note.h +++ b/include/Note.h @@ -81,36 +81,36 @@ const float MaxDetuning = 4 * 12.0f; class EXPORT Note : public SerializingObject { public: - Note( const MidiTime & _length = MidiTime( 0 ), - const MidiTime & _pos = MidiTime( 0 ), + Note( const MidiTime & length = MidiTime( 0 ), + const MidiTime & pos = MidiTime( 0 ), int key = DefaultKey, - volume_t _volume = DefaultVolume, - panning_t _panning = DefaultPanning, - DetuningHelper * _detuning = NULL ); - Note( const Note & _note ); + volume_t volume = DefaultVolume, + panning_t panning = DefaultPanning, + DetuningHelper * detuning = NULL ); + Note( const Note & note ); virtual ~Note(); // used by GUI - inline void setSelected( const bool _selected ) { m_selected = _selected; } - inline void setOldKey( const int _oldKey ) { m_oldKey = _oldKey; } - inline void setOldPos( const MidiTime & _oldPos ) { m_oldPos = _oldPos; } - inline void setOldLength( const MidiTime & _oldLength ) + inline void setSelected( const bool selected ) { m_selected = selected; } + inline void setOldKey( const int oldKey ) { m_oldKey = oldKey; } + inline void setOldPos( const MidiTime & oldPos ) { m_oldPos = oldPos; } + inline void setOldLength( const MidiTime & oldLength ) { - m_oldLength = _oldLength; + m_oldLength = oldLength; } - inline void setIsPlaying( const bool _isPlaying ) + inline void setIsPlaying( const bool isPlaying ) { - m_isPlaying = _isPlaying; + m_isPlaying = isPlaying; } - void setLength( const MidiTime & _length ); - void setPos( const MidiTime & _pos ); - void setKey( const int _key ); + void setLength( const MidiTime & length ); + void setPos( const MidiTime & pos ); + void setKey( const int key ); virtual void setVolume( volume_t volume ); virtual void setPanning( panning_t panning ); - void quantizeLength( const int _q_grid ); - void quantizePos( const int _q_grid ); + void quantizeLength( const int qGrid ); + void quantizePos( const int qGrid ); static inline bool lessThan( Note * &lhs, Note * &rhs ) { @@ -160,9 +160,9 @@ public: return m_pos; } - inline MidiTime pos( MidiTime _base_pos ) const + inline MidiTime pos( MidiTime basePos ) const { - const int bp = _base_pos; + const int bp = basePos; return m_pos - bp; } @@ -196,7 +196,7 @@ public: return classNodeName(); } - static MidiTime quantized( const MidiTime & _m, const int _q_grid ); + static MidiTime quantized( const MidiTime & m, const int qGrid ); DetuningHelper * detuning() const { @@ -208,8 +208,7 @@ public: protected: - virtual void saveSettings( QDomDocument & _doc, - QDomElement & _parent ); + virtual void saveSettings( QDomDocument & doc, QDomElement & parent ); virtual void loadSettings( const QDomElement & _this ); @@ -234,4 +233,3 @@ typedef QVector NoteVector; #endif - From 118127a3bcc9ed2fbd08ebbb64ecf7c3ef80543d Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Mon, 5 Jan 2015 22:10:09 -0200 Subject: [PATCH 160/172] Update coding conventions --- src/core/Track.cpp | 617 +++++++++++++++++++++++---------------------- 1 file changed, 317 insertions(+), 300 deletions(-) diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 426676f0e..1c64531a8 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -101,9 +101,9 @@ TextFloat * TrackContentObjectView::s_textFloat = NULL; * * \param _track The track that will contain the new object */ -TrackContentObject::TrackContentObject( Track * _track ) : - Model( _track ), - m_track( _track ), +TrackContentObject::TrackContentObject( Track * track ) : + Model( track ), + m_track( track ), m_name( QString::null ), m_startPosition(), m_length(), @@ -148,11 +148,11 @@ TrackContentObject::~TrackContentObject() * * \param _pos The new position of the track content object. */ -void TrackContentObject::movePosition( const MidiTime & _pos ) +void TrackContentObject::movePosition( const MidiTime & pos ) { - if( m_startPosition != _pos ) + if( m_startPosition != pos ) { - m_startPosition = _pos; + m_startPosition = pos; Engine::getSong()->updateLength(); } emit positionChanged(); @@ -168,11 +168,11 @@ void TrackContentObject::movePosition( const MidiTime & _pos ) * * \param _length The new length of the track content object. */ -void TrackContentObject::changeLength( const MidiTime & _length ) +void TrackContentObject::changeLength( const MidiTime & length ) { - if( m_length != _length ) + if( m_length != length ) { - m_length = _length; + m_length = length; Engine::getSong()->updateLength(); } emit lengthChanged(); @@ -243,12 +243,12 @@ void TrackContentObject::toggleMute() * \param _tco The track content object to be displayed * \param _tv The track view that will contain the new object */ -TrackContentObjectView::TrackContentObjectView( TrackContentObject * _tco, - TrackView * _tv ) : - selectableObject( _tv->getTrackContentWidget() ), +TrackContentObjectView::TrackContentObjectView( TrackContentObject * tco, + TrackView * tv ) : + selectableObject( tv->getTrackContentWidget() ), ModelView( NULL, this ), - m_tco( _tco ), - m_trackView( _tv ), + m_tco( tco ), + m_trackView( tv ), m_action( NoAction ), m_initialMousePos( QPoint( 0, 0 ) ), m_initialMouseGlobalPos( QPoint( 0, 0 ) ), @@ -269,7 +269,7 @@ TrackContentObjectView::TrackContentObjectView( TrackContentObject * _tco, move( 0, 1 ); show(); - setFixedHeight( _tv->getTrackContentWidget()->height() - 2 ); + setFixedHeight( tv->getTrackContentWidget()->height() - 2 ); setAcceptDrops( true ); setMouseTracking( true ); @@ -329,12 +329,12 @@ QColor TrackContentObjectView::textColor() const { return m_textColor; } //! \brief CSS theming qproperty access method -void TrackContentObjectView::setFgColor( const QColor & _c ) -{ m_fgColor = QColor( _c ); } +void TrackContentObjectView::setFgColor( const QColor & c ) +{ m_fgColor = QColor( c ); } //! \brief CSS theming qproperty access method -void TrackContentObjectView::setTextColor( const QColor & _c ) -{ m_textColor = QColor( _c ); } +void TrackContentObjectView::setTextColor( const QColor & c ) +{ m_textColor = QColor( c ); } /*! \brief Close a trackContentObjectView @@ -435,19 +435,19 @@ void TrackContentObjectView::updatePosition() * We need to notify Qt to change our display if something being * dragged has entered our 'airspace'. * - * \param _dee The QDragEnterEvent to watch. + * \param dee The QDragEnterEvent to watch. */ -void TrackContentObjectView::dragEnterEvent( QDragEnterEvent * _dee ) +void TrackContentObjectView::dragEnterEvent( QDragEnterEvent * dee ) { TrackContentWidget * tcw = getTrackView()->getTrackContentWidget(); MidiTime tcoPos = MidiTime( m_tco->startPosition().getTact(), 0 ); - if( tcw->canPasteSelection( tcoPos, _dee->mimeData() ) == false ) + if( tcw->canPasteSelection( tcoPos, dee->mimeData() ) == false ) { - _dee->ignore(); + dee->ignore(); } else { - StringPairDrag::processDragEnterEvent( _dee, "tco_" + + StringPairDrag::processDragEnterEvent( dee, "tco_" + QString::number( m_tco->getTrack()->type() ) ); } } @@ -462,12 +462,12 @@ void TrackContentObjectView::dragEnterEvent( QDragEnterEvent * _dee ) * to take the xml of the track content object and turn it into something * we can write over our current state. * - * \param _de The QDropEvent to handle. + * \param de The QDropEvent to handle. */ -void TrackContentObjectView::dropEvent( QDropEvent * _de ) +void TrackContentObjectView::dropEvent( QDropEvent * de ) { - QString type = StringPairDrag::decodeKey( _de ); - QString value = StringPairDrag::decodeValue( _de ); + QString type = StringPairDrag::decodeKey( de ); + QString value = StringPairDrag::decodeValue( de ); // Track must be the same type to paste into if( type != ( "tco_" + QString::number( m_tco->getTrack()->type() ) ) ) @@ -480,15 +480,15 @@ void TrackContentObjectView::dropEvent( QDropEvent * _de ) { TrackContentWidget * tcw = getTrackView()->getTrackContentWidget(); MidiTime tcoPos = MidiTime( m_tco->startPosition().getTact(), 0 ); - if( tcw->pasteSelection( tcoPos, _de ) == true ) + if( tcw->pasteSelection( tcoPos, de ) == true ) { - _de->accept(); + de->accept(); } return; } // Don't allow pasting a tco into itself. - QObject* qwSource = _de->source(); + QObject* qwSource = de->source(); if( qwSource != NULL && dynamic_cast( qwSource ) == this ) { @@ -502,7 +502,7 @@ void TrackContentObjectView::dropEvent( QDropEvent * _de ) m_tco->restoreState( tcos.firstChildElement().firstChildElement() ); m_tco->movePosition( pos ); AutomationPattern::resolveAllIDs(); - _de->accept(); + de->accept(); } @@ -510,17 +510,17 @@ void TrackContentObjectView::dropEvent( QDropEvent * _de ) /*! \brief Handle a dragged selection leaving our 'airspace'. * - * \param _e The QEvent to watch. + * \param e The QEvent to watch. */ -void TrackContentObjectView::leaveEvent( QEvent * _e ) +void TrackContentObjectView::leaveEvent( QEvent * e ) { while( QApplication::overrideCursor() != NULL ) { QApplication::restoreOverrideCursor(); } - if( _e != NULL ) + if( e != NULL ) { - QWidget::leaveEvent( _e ); + QWidget::leaveEvent( e ); } } @@ -586,20 +586,20 @@ DataFile TrackContentObjectView::createTCODataFiles( * * or if ctrl-middle button, mute the track content object * * or if middle button, maybe delete the track content object. * - * \param _me The QMouseEvent to handle. + * \param me The QMouseEvent to handle. */ -void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) +void TrackContentObjectView::mousePressEvent( QMouseEvent * me ) { - setInitialMousePos( _me->pos() ); + setInitialMousePos( me->pos() ); if( m_trackView->trackContainerView()->allowRubberband() == true && - _me->button() == Qt::LeftButton ) + me->button() == Qt::LeftButton ) { if( m_trackView->trackContainerView()->rubberBandActive() == true ) { // Propagate to trackView for rubberbanding - selectableObject::mousePressEvent( _me ); + selectableObject::mousePressEvent( me ); } - else if ( _me->modifiers() & Qt::ControlModifier ) + else if ( me->modifiers() & Qt::ControlModifier ) { if( isSelected() == true ) { @@ -610,7 +610,7 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) m_action = ToggleSelected; } } - else if( !_me->modifiers() ) + else if( !me->modifiers() ) { if( isSelected() == true ) { @@ -618,8 +618,8 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) } } } - else if( _me->button() == Qt::LeftButton && - _me->modifiers() & Qt::ControlModifier ) + else if( me->button() == Qt::LeftButton && + me->modifiers() & Qt::ControlModifier ) { // start drag-action QVector tcoViews; @@ -633,7 +633,7 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) m_tco->getTrack()->type() ), dataFile.toString(), thumbnail, this ); } - else if( _me->button() == Qt::LeftButton && + else if( me->button() == Qt::LeftButton && /* engine::mainWindow()->isShiftPressed() == false &&*/ fixedTCOs() == false ) { @@ -642,9 +642,9 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) // move or resize m_tco->setJournalling( false ); - setInitialMousePos( _me->pos() ); + setInitialMousePos( me->pos() ); - if( _me->x() < width() - RESIZE_GRIP_WIDTH ) + if( me->x() < width() - RESIZE_GRIP_WIDTH ) { m_action = Move; m_oldTime = m_tco->startPosition(); @@ -672,23 +672,23 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) } // s_textFloat->reparent( this ); // setup text-float as if TCO was already moved/resized - mouseMoveEvent( _me ); + mouseMoveEvent( me ); s_textFloat->show(); } - else if( _me->button() == Qt::RightButton ) + else if( me->button() == Qt::RightButton ) { - if( _me->modifiers() & Qt::ControlModifier ) + if( me->modifiers() & Qt::ControlModifier ) { m_tco->toggleMute(); } - else if( _me->modifiers() & Qt::ShiftModifier && fixedTCOs() == false ) + else if( me->modifiers() & Qt::ShiftModifier && fixedTCOs() == false ) { remove(); } } - else if( _me->button() == Qt::MidButton ) + else if( me->button() == Qt::MidButton ) { - if( _me->modifiers() & Qt::ControlModifier ) + if( me->modifiers() & Qt::ControlModifier ) { m_tco->toggleMute(); } @@ -712,17 +712,17 @@ void TrackContentObjectView::mousePressEvent( QMouseEvent * _me ) * * or if in resize mode, resize ourselves, * * otherwise ??? * - * \param _me The QMouseEvent to handle. + * \param me The QMouseEvent to handle. * \todo what does the final else case do here? */ -void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) +void TrackContentObjectView::mouseMoveEvent( QMouseEvent * me ) { if( m_action == CopySelection ) { - if( mouseMovedDistance( _me, 2 ) == true && + if( mouseMovedDistance( me, 2 ) == true && m_trackView->trackContainerView()->allowRubberband() == true && m_trackView->trackContainerView()->rubberBandActive() == false && - ( _me->modifiers() & Qt::ControlModifier ) ) + ( me->modifiers() & Qt::ControlModifier ) ) { // Clear the action here because mouseReleaseEvent will not get // triggered once we go into drag. @@ -757,7 +757,7 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) } } - if( _me->modifiers() & Qt::ControlModifier ) + if( me->modifiers() & Qt::ControlModifier ) { delete m_hint; m_hint = NULL; @@ -766,13 +766,13 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) const float ppt = m_trackView->trackContainerView()->pixelsPerTact(); if( m_action == Move ) { - const int x = mapToParent( _me->pos() ).x() - m_initialMousePos.x(); + const int x = mapToParent( me->pos() ).x() - m_initialMousePos.x(); MidiTime t = qMax( 0, (int) m_trackView->trackContainerView()->currentPosition()+ static_cast( x * MidiTime::ticksPerTact() / ppt ) ); - if( ! ( _me->modifiers() & Qt::ControlModifier ) - && _me->button() == Qt::NoButton ) + if( ! ( me->modifiers() & Qt::ControlModifier ) + && me->button() == Qt::NoButton ) { t = t.toNearestTact(); } @@ -787,7 +787,7 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) } else if( m_action == MoveSelection ) { - const int dx = _me->x() - m_initialMousePos.x(); + const int dx = me->x() - m_initialMousePos.x(); QVector so = m_trackView->trackContainerView()->selectedObjects(); QVector tcos; @@ -816,8 +816,8 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) t = ( *it )->startPosition() + static_cast( dx *MidiTime::ticksPerTact() / ppt )-smallest_pos; - if( ! ( _me->modifiers() & Qt::AltModifier ) - && _me->button() == Qt::NoButton ) + if( ! ( me->modifiers() & Qt::AltModifier ) + && me->button() == Qt::NoButton ) { t = t.toNearestTact(); } @@ -826,8 +826,8 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) } else if( m_action == Resize ) { - MidiTime t = qMax( MidiTime::ticksPerTact() / 16, static_cast( _me->x() * MidiTime::ticksPerTact() / ppt ) ); - if( ! ( _me->modifiers() & Qt::ControlModifier ) && _me->button() == Qt::NoButton ) + MidiTime t = qMax( MidiTime::ticksPerTact() / 16, static_cast( me->x() * MidiTime::ticksPerTact() / ppt ) ); + if( ! ( me->modifiers() & Qt::ControlModifier ) && me->button() == Qt::NoButton ) { t = qMax( MidiTime::ticksPerTact(), t.toNearestTact() ); } @@ -847,7 +847,7 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) } else { - if( _me->x() > width() - RESIZE_GRIP_WIDTH && !_me->buttons() && !m_tco->getAutoResize() ) + if( me->x() > width() - RESIZE_GRIP_WIDTH && !me->buttons() && !m_tco->getAutoResize() ) { if( QApplication::overrideCursor() != NULL && QApplication::overrideCursor()->shape() != @@ -876,16 +876,16 @@ void TrackContentObjectView::mouseMoveEvent( QMouseEvent * _me ) * If we're in move or resize mode, journal the change as appropriate. * Then tidy up. * - * \param _me The QMouseEvent to handle. + * \param me The QMouseEvent to handle. */ -void TrackContentObjectView::mouseReleaseEvent( QMouseEvent * _me ) +void TrackContentObjectView::mouseReleaseEvent( QMouseEvent * me ) { // If the CopySelection was chosen as the action due to mouse movement, // it will have been cleared. At this point Toggle is the desired action. // An active StringPairDrag will prevent this method from being called, // so a real CopySelection would not have occurred. if( m_action == CopySelection || - ( m_action == ToggleSelected && mouseMovedDistance( _me, 2 ) == false ) ) + ( m_action == ToggleSelected && mouseMovedDistance( me, 2 ) == false ) ) { setSelected( !isSelected() ); } @@ -899,7 +899,7 @@ void TrackContentObjectView::mouseReleaseEvent( QMouseEvent * _me ) m_hint = NULL; s_textFloat->hide(); leaveEvent( NULL ); - selectableObject::mouseReleaseEvent( _me ); + selectableObject::mouseReleaseEvent( me ); } @@ -910,11 +910,11 @@ void TrackContentObjectView::mouseReleaseEvent( QMouseEvent * _me ) * Set up the various context menu events that can apply to a * track content object view. * - * \param _cme The QContextMenuEvent to add the actions to. + * \param cme The QContextMenuEvent to add the actions to. */ -void TrackContentObjectView::contextMenuEvent( QContextMenuEvent * _cme ) +void TrackContentObjectView::contextMenuEvent( QContextMenuEvent * cme ) { - if( _cme->modifiers() ) + if( cme->modifiers() ) { return; } @@ -958,14 +958,30 @@ float TrackContentObjectView::pixelsPerTact() +<<<<<<< HEAD +======= +/*! \brief Set whether this trackContentObjectView can resize. + * + * \param e The boolean state of whether this track content object view + * is allowed to resize. + */ +void TrackContentObjectView::setAutoResizeEnabled( bool e ) +{ + m_autoResize = e; +} + + + + +>>>>>>> Update coding conventions /*! \brief Detect whether the mouse moved more than n pixels on screen. * * \param _me The QMouseEvent. * \param distance The threshold distance that the mouse has moved to return true. */ -bool TrackContentObjectView::mouseMovedDistance( QMouseEvent * _me, int distance ) +bool TrackContentObjectView::mouseMovedDistance( QMouseEvent * me, int distance ) { - QPoint dPos = mapToGlobal( _me->pos() ) - m_initialMouseGlobalPos; + QPoint dPos = mapToGlobal( me->pos() ) - m_initialMouseGlobalPos; const int pixelsMoved = dPos.manhattanLength(); return ( pixelsMoved > distance || pixelsMoved < -distance ); } @@ -982,17 +998,17 @@ bool TrackContentObjectView::mouseMovedDistance( QMouseEvent * _me, int distance * The content widget comprises the 'grip bar' and the 'tools' button * for the track's context menu. * - * \param _track The parent track. + * \param parent The parent track. */ -TrackContentWidget::TrackContentWidget( TrackView * _parent ) : - QWidget( _parent ), - m_trackView( _parent ), +TrackContentWidget::TrackContentWidget( TrackView * parent ) : + QWidget( parent ), + m_trackView( parent ), m_darkerColor( Qt::SolidPattern ), m_lighterColor( Qt::SolidPattern ) { setAcceptDrops( true ); - connect( _parent->trackContainerView(), + connect( parent->trackContainerView(), SIGNAL( positionChanged( const MidiTime & ) ), this, SLOT( changePosition( const MidiTime & ) ) ); @@ -1062,13 +1078,13 @@ void TrackContentWidget::updateBackground() * Adds a(nother) trackContentObjectView to our list of views. We also * check that our position is up-to-date. * - * \param _tcov The trackContentObjectView to add. + * \param tcov The trackContentObjectView to add. */ -void TrackContentWidget::addTCOView( TrackContentObjectView * _tcov ) +void TrackContentWidget::addTCOView( TrackContentObjectView * tcov ) { - TrackContentObject * tco = _tcov->getTrackContentObject(); + TrackContentObject * tco = tcov->getTrackContentObject(); - m_tcoViews.push_back( _tcov ); + m_tcoViews.push_back( tcov ); tco->saveJournallingState( false ); changePosition(); @@ -1082,13 +1098,13 @@ void TrackContentWidget::addTCOView( TrackContentObjectView * _tcov ) * * Removes the given trackContentObjectView from our list of views. * - * \param _tcov The trackContentObjectView to add. + * \param tcov The trackContentObjectView to add. */ -void TrackContentWidget::removeTCOView( TrackContentObjectView * _tcov ) +void TrackContentWidget::removeTCOView( TrackContentObjectView * tcov ) { tcoViewVector::iterator it = qFind( m_tcoViews.begin(), m_tcoViews.end(), - _tcov ); + tcov ); if( it != m_tcoViews.end() ) { m_tcoViews.erase( it ); @@ -1120,13 +1136,13 @@ void TrackContentWidget::update() // change of visible viewport /*! \brief Move the trackContentWidget to a new place in time * - * \param _new_pos The MIDI time to move to. + * \param newPos The MIDI time to move to. */ -void TrackContentWidget::changePosition( const MidiTime & _new_pos ) +void TrackContentWidget::changePosition( const MidiTime & newPos ) { if( m_trackView->trackContainerView() == gui->getBBEditor()->trackContainerView() ) { - const int cur_bb = Engine::getBBTrackContainer()->currentBB(); + const int curBB = Engine::getBBTrackContainer()->currentBB(); setUpdatesEnabled( false ); // first show TCO for current BB... @@ -1134,7 +1150,7 @@ void TrackContentWidget::changePosition( const MidiTime & _new_pos ) it != m_tcoViews.end(); ++it ) { if( ( *it )->getTrackContentObject()-> - startPosition().getTact() == cur_bb ) + startPosition().getTact() == curBB ) { ( *it )->move( 0, ( *it )->y() ); ( *it )->raise(); @@ -1150,7 +1166,7 @@ void TrackContentWidget::changePosition( const MidiTime & _new_pos ) it != m_tcoViews.end(); ++it ) { if( ( *it )->getTrackContentObject()-> - startPosition().getTact() != cur_bb ) + startPosition().getTact() != curBB ) { ( *it )->hide(); } @@ -1159,7 +1175,7 @@ void TrackContentWidget::changePosition( const MidiTime & _new_pos ) return; } - MidiTime pos = _new_pos; + MidiTime pos = newPos; if( pos < 0 ) { pos = m_trackView->trackContainerView()->currentPosition(); @@ -1208,13 +1224,13 @@ void TrackContentWidget::changePosition( const MidiTime & _new_pos ) /*! \brief Return the position of the trackContentWidget in Tacts. * - * \param _mouse_x the mouse's current X position in pixels. + * \param mouseX the mouse's current X position in pixels. */ -MidiTime TrackContentWidget::getPosition( int _mouse_x ) +MidiTime TrackContentWidget::getPosition( int mouseX ) { TrackContainerView * tv = m_trackView->trackContainerView(); return MidiTime( tv->currentPosition() + - _mouse_x * + mouseX * MidiTime::ticksPerTact() / static_cast( tv->pixelsPerTact() ) ); } @@ -1224,18 +1240,18 @@ MidiTime TrackContentWidget::getPosition( int _mouse_x ) /*! \brief Respond to a drag enter event on the trackContentWidget * - * \param _dee the Drag Enter Event to respond to + * \param dee the Drag Enter Event to respond to */ -void TrackContentWidget::dragEnterEvent( QDragEnterEvent * _dee ) +void TrackContentWidget::dragEnterEvent( QDragEnterEvent * dee ) { - MidiTime tcoPos = MidiTime( getPosition( _dee->pos().x() ).getTact(), 0 ); - if( canPasteSelection( tcoPos, _dee->mimeData() ) == false ) + MidiTime tcoPos = MidiTime( getPosition( dee->pos().x() ).getTact(), 0 ); + if( canPasteSelection( tcoPos, dee->mimeData() ) == false ) { - _dee->ignore(); + dee->ignore(); } else { - StringPairDrag::processDragEnterEvent( _dee, "tco_" + + StringPairDrag::processDragEnterEvent( dee, "tco_" + QString::number( getTrack()->type() ) ); } } @@ -1246,7 +1262,7 @@ void TrackContentWidget::dragEnterEvent( QDragEnterEvent * _dee ) /*! \brief Returns whether a selection of TCOs can be pasted into this * * \param tcoPos the position of the TCO slot being pasted on - * \param _de the DropEvent generated + * \param de the DropEvent generated */ bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QMimeData * mimeData ) { @@ -1289,7 +1305,7 @@ bool TrackContentWidget::canPasteSelection( MidiTime tcoPos, const QMimeData * m QDomNodeList tcoNodes = tcoParent.childNodes(); // Determine if all the TCOs will land on a valid track - for( int i = 0; imimeData() ) == false ) + if( canPasteSelection( tcoPos, de->mimeData() ) == false ) { return false; } - QString type = StringPairDrag::decodeKey( _de ); - QString value = StringPairDrag::decodeValue( _de ); + QString type = StringPairDrag::decodeKey( de ); + QString value = StringPairDrag::decodeValue( de ); getTrack()->addJournalCheckPoint(); @@ -1405,14 +1421,14 @@ bool TrackContentWidget::pasteSelection( MidiTime tcoPos, QDropEvent * _de ) /*! \brief Respond to a drop event on the trackContentWidget * - * \param _de the Drop Event to respond to + * \param de the Drop Event to respond to */ -void TrackContentWidget::dropEvent( QDropEvent * _de ) +void TrackContentWidget::dropEvent( QDropEvent * de ) { - MidiTime tcoPos = MidiTime( getPosition( _de->pos().x() ).getTact(), 0 ); - if( pasteSelection( tcoPos, _de ) == true ) + MidiTime tcoPos = MidiTime( getPosition( de->pos().x() ).getTact(), 0 ); + if( pasteSelection( tcoPos, de ) == true ) { - _de->accept(); + de->accept(); } } @@ -1421,29 +1437,28 @@ void TrackContentWidget::dropEvent( QDropEvent * _de ) /*! \brief Respond to a mouse press on the trackContentWidget * - * \param _me the mouse press event to respond to + * \param me the mouse press event to respond to */ -void TrackContentWidget::mousePressEvent( QMouseEvent * _me ) +void TrackContentWidget::mousePressEvent( QMouseEvent * me ) { if( m_trackView->trackContainerView()->allowRubberband() == true ) { - QWidget::mousePressEvent( _me ); + QWidget::mousePressEvent( me ); } - else if( _me->modifiers() & Qt::ShiftModifier ) + else if( me->modifiers() & Qt::ShiftModifier ) { - QWidget::mousePressEvent( _me ); + QWidget::mousePressEvent( me ); } - else if( _me->button() == Qt::LeftButton && + else if( me->button() == Qt::LeftButton && !m_trackView->trackContainerView()->fixedTCOs() ) { - const MidiTime pos = getPosition( _me->x() ).getTact() * + const MidiTime pos = getPosition( me->x() ).getTact() * MidiTime::ticksPerTact(); TrackContentObject * tco = getTrack()->createTCO( pos ); tco->saveJournallingState( false ); tco->movePosition( pos ); tco->restoreJournallingState(); - } } @@ -1452,9 +1467,9 @@ void TrackContentWidget::mousePressEvent( QMouseEvent * _me ) /*! \brief Repaint the trackContentWidget on command * - * \param _pe the Paint Event to respond to + * \param pe the Paint Event to respond to */ -void TrackContentWidget::paintEvent( QPaintEvent * _pe ) +void TrackContentWidget::paintEvent( QPaintEvent * pe ) { // Assume even-pixels-per-tact. Makes sense, should be like this anyways const TrackContainerView * tcv = m_trackView->trackContainerView(); @@ -1499,13 +1514,13 @@ Track * TrackContentWidget::getTrack() /*! \brief Return the end position of the trackContentWidget in Tacts. * - * \param _pos_start the starting position of the Widget (from getPosition()) + * \param posStart the starting position of the Widget (from getPosition()) */ -MidiTime TrackContentWidget::endPosition( const MidiTime & _pos_start ) +MidiTime TrackContentWidget::endPosition( const MidiTime & posStart ) { const float ppt = m_trackView->trackContainerView()->pixelsPerTact(); const int w = width(); - return _pos_start + static_cast( w * MidiTime::ticksPerTact() / ppt ); + return posStart + static_cast( w * MidiTime::ticksPerTact() / ppt ); } @@ -1542,11 +1557,11 @@ QPixmap * TrackOperationsWidget::s_grip = NULL; /*!< grip pixmap */ * * The trackOperationsWidget is the grip and the mute button of a track. * - * \param _parent the trackView to contain this widget + * \param parent the trackView to contain this widget */ -TrackOperationsWidget::TrackOperationsWidget( TrackView * _parent ) : - QWidget( _parent ), /*!< The parent widget */ - m_trackView( _parent ) /*!< The parent track view */ +TrackOperationsWidget::TrackOperationsWidget( TrackView * parent ) : + QWidget( parent ), /*!< The parent widget */ + m_trackView( parent ) /*!< The parent track view */ { if( s_grip == NULL ) { @@ -1557,9 +1572,9 @@ TrackOperationsWidget::TrackOperationsWidget( TrackView * _parent ) : ToolTip::add( this, tr( "Press while clicking on move-grip " "to begin a new drag'n'drop-action." ) ); - QMenu * to_menu = new QMenu( this ); - to_menu->setFont( pointSize<9>( to_menu->font() ) ); - connect( to_menu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); + QMenu * toMenu = new QMenu( this ); + toMenu->setFont( pointSize<9>( toMenu->font() ) ); + connect( toMenu, SIGNAL( aboutToShow() ), this, SLOT( updateMenu() ) ); setObjectName( "automationEnabled" ); @@ -1568,7 +1583,7 @@ TrackOperationsWidget::TrackOperationsWidget( TrackView * _parent ) : m_trackOps = new QPushButton( this ); m_trackOps->move( 12, 1 ); m_trackOps->setFocusPolicy( Qt::NoFocus ); - m_trackOps->setMenu( to_menu ); + m_trackOps->setMenu( toMenu ); ToolTip::add( m_trackOps, tr( "Actions for this track" ) ); @@ -1627,12 +1642,12 @@ TrackOperationsWidget::~TrackOperationsWidget() * * Otherwise, ignore all other events. * - * \param _me The mouse event to respond to. + * \param me The mouse event to respond to. */ -void TrackOperationsWidget::mousePressEvent( QMouseEvent * _me ) +void TrackOperationsWidget::mousePressEvent( QMouseEvent * me ) { - if( _me->button() == Qt::LeftButton && - _me->modifiers() & Qt::ControlModifier && + if( me->button() == Qt::LeftButton && + me->modifiers() & Qt::ControlModifier && m_trackView->getTrack()->type() != Track::BBTrack ) { DataFile dataFile( DataFile::DragNDropData ); @@ -1643,17 +1658,16 @@ void TrackOperationsWidget::mousePressEvent( QMouseEvent * _me ) m_trackView->getTrackSettingsWidget() ), this ); } - else if( _me->button() == Qt::LeftButton ) + else if( me->button() == Qt::LeftButton ) { // track-widget (parent-widget) initiates track-move - _me->ignore(); + me->ignore(); } } - /*! \brief Repaint the trackOperationsWidget * * If we're not moving, and in the Beat+Bassline Editor, then turn @@ -1663,9 +1677,9 @@ void TrackOperationsWidget::mousePressEvent( QMouseEvent * _me ) * Otherwise, hide ourselves. * * \todo Flesh this out a bit - is it correct? - * \param _pe The paint event to respond to + * \param pe The paint event to respond to */ -void TrackOperationsWidget::paintEvent( QPaintEvent * _pe ) +void TrackOperationsWidget::paintEvent( QPaintEvent * pe ) { QPainter p( this ); p.fillRect( rect(), palette().brush(QPalette::Background) ); @@ -1751,21 +1765,22 @@ void TrackOperationsWidget::removeTrack() */ void TrackOperationsWidget::updateMenu() { - QMenu * to_menu = m_trackOps->menu(); - to_menu->clear(); - to_menu->addAction( embed::getIconPixmap( "edit_copy", 16, 16 ), + QMenu * toMenu = m_trackOps->menu(); + toMenu->clear(); + toMenu->addAction( embed::getIconPixmap( "edit_copy", 16, 16 ), tr( "Clone this track" ), this, SLOT( cloneTrack() ) ); - to_menu->addAction( embed::getIconPixmap( "cancel", 16, 16 ), + toMenu->addAction( embed::getIconPixmap( "cancel", 16, 16 ), tr( "Remove this track" ), this, SLOT( removeTrack() ) ); if( ! m_trackView->trackContainerView()->fixedTCOs() ) { - to_menu->addAction( tr( "Clear this track" ), this, SLOT( clearTrack() ) ); + toMenu->addAction( tr( "Clear this track" ), this, SLOT( clearTrack() ) ); } if( InstrumentTrackView * trackView = dynamic_cast( m_trackView ) ) { +<<<<<<< HEAD int channelIndex = trackView->model()->effectChannelModel()->value(); FxChannel * fxChannel = Engine::fxMixer()->effectChannel( channelIndex ); @@ -1794,11 +1809,16 @@ void TrackOperationsWidget::updateMenu() to_menu->addSeparator(); to_menu->addMenu( trackView->midiMenu() ); +======= + toMenu->addSeparator(); + toMenu->addMenu( dynamic_cast( + m_trackView )->midiMenu() ); +>>>>>>> Update coding conventions } if( dynamic_cast( m_trackView ) ) { - to_menu->addAction( tr( "Turn all recording on" ), this, SLOT( recordingOn() ) ); - to_menu->addAction( tr( "Turn all recording off" ), this, SLOT( recordingOff() ) ); + toMenu->addAction( tr( "Turn all recording on" ), this, SLOT( recordingOn() ) ); + toMenu->addAction( tr( "Turn all recording off" ), this, SLOT( recordingOff() ) ); } } @@ -1844,15 +1864,15 @@ void TrackOperationsWidget::recordingOff() * The track object is the whole track, linking its contents, its * automation, name, type, and so forth. * - * \param _type The type of track (Song Editor or Beat+Bassline Editor) - * \param _tc The track Container object to encapsulate in this track. + * \param type The type of track (Song Editor or Beat+Bassline Editor) + * \param tc The track Container object to encapsulate in this track. * * \todo check the definitions of all the properties - are they OK? */ -Track::Track( TrackTypes _type, TrackContainer * _tc ) : - Model( _tc ), /*!< The track Model */ - m_trackContainer( _tc ), /*!< The track container object */ - m_type( _type ), /*!< The track type */ +Track::Track( TrackTypes type, TrackContainer * tc ) : + Model( tc ), /*!< The track Model */ + m_trackContainer( tc ), /*!< The track container object */ + m_type( type ), /*!< The track type */ m_name(), /*!< The track's name */ m_mutedModel( false, this, tr( "Muted" ) ), /*!< For controlling track muting */ @@ -1897,27 +1917,27 @@ Track::~Track() /*! \brief Create a track based on the given track type and container. * - * \param _tt The type of track to create - * \param _tc The track container to attach to + * \param tt The type of track to create + * \param tc The track container to attach to */ -Track * Track::create( TrackTypes _tt, TrackContainer * _tc ) +Track * Track::create( TrackTypes tt, TrackContainer * tc ) { Track * t = NULL; - switch( _tt ) + switch( tt ) { - case InstrumentTrack: t = new ::InstrumentTrack( _tc ); break; - case BBTrack: t = new ::BBTrack( _tc ); break; - case SampleTrack: t = new ::SampleTrack( _tc ); break; + case InstrumentTrack: t = new ::InstrumentTrack( tc ); break; + case BBTrack: t = new ::BBTrack( tc ); break; + case SampleTrack: t = new ::SampleTrack( tc ); break; // case EVENT_TRACK: // case VIDEO_TRACK: - case AutomationTrack: t = new ::AutomationTrack( _tc ); break; + case AutomationTrack: t = new ::AutomationTrack( tc ); break; case HiddenAutomationTrack: - t = new ::AutomationTrack( _tc, true ); break; + t = new ::AutomationTrack( tc, true ); break; default: break; } - _tc->updateAfterTrackAdd(); + tc->updateAfterTrackAdd(); return t; } @@ -1927,17 +1947,17 @@ Track * Track::create( TrackTypes _tt, TrackContainer * _tc ) /*! \brief Create a track inside TrackContainer from track type in a QDomElement and restore state from XML * - * \param _this The QDomElement containing the type of track to create - * \param _tc The track container to attach to + * \param element The QDomElement containing the type of track to create + * \param tc The track container to attach to */ -Track * Track::create( const QDomElement & _this, TrackContainer * _tc ) +Track * Track::create( const QDomElement & element, TrackContainer * tc ) { Track * t = create( - static_cast( _this.attribute( "type" ).toInt() ), - _tc ); + static_cast( element.attribute( "type" ).toInt() ), + tc ); if( t != NULL ) { - t->restoreState( _this ); + t->restoreState( element ); } return t; } @@ -1967,31 +1987,31 @@ void Track::clone() * specific settings. Then we iterate through the trackContentObjects * and save all their states in turn. * - * \param _doc The QDomDocument to use to save - * \param _this The The QDomElement to save into + * \param doc The QDomDocument to use to save + * \param element The The QDomElement to save into * \todo Does this accurately describe the parameters? I think not!? * \todo Save the track height */ -void Track::saveSettings( QDomDocument & _doc, QDomElement & _this ) +void Track::saveSettings( QDomDocument & doc, QDomElement & element ) { if( !m_simpleSerializingMode ) { - _this.setTagName( "track" ); + element.setTagName( "track" ); } - _this.setAttribute( "type", type() ); - _this.setAttribute( "name", name() ); - _this.setAttribute( "muted", isMuted() ); - _this.setAttribute( "solo", isSolo() ); + element.setAttribute( "type", type() ); + element.setAttribute( "name", name() ); + element.setAttribute( "muted", isMuted() ); + element.setAttribute( "solo", isSolo() ); if( m_height >= MINIMAL_TRACK_HEIGHT ) { - _this.setAttribute( "height", m_height ); + element.setAttribute( "height", m_height ); } - QDomElement ts_de = _doc.createElement( nodeName() ); + QDomElement tsDe = doc.createElement( nodeName() ); // let actual track (InstrumentTrack, bbTrack, sampleTrack etc.) save // its settings - _this.appendChild( ts_de ); - saveTrackSpecificSettings( _doc, ts_de ); + element.appendChild( tsDe ); + saveTrackSpecificSettings( doc, tsDe ); if( m_simpleSerializingMode ) { @@ -2003,7 +2023,7 @@ void Track::saveSettings( QDomDocument & _doc, QDomElement & _this ) for( tcoVector::const_iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) { - ( *it )->saveState( _doc, _this ); + ( *it )->saveState( doc, element ); } } @@ -2019,26 +2039,26 @@ void Track::saveSettings( QDomDocument & _doc, QDomElement & _this ) * track-specific settings and trackContentObjects states from it * one at a time. * - * \param _this the QDomElement to load track settings from + * \param element the QDomElement to load track settings from * \todo Load the track height. */ -void Track::loadSettings( const QDomElement & _this ) +void Track::loadSettings( const QDomElement & element ) { - if( _this.attribute( "type" ).toInt() != type() ) + if( element.attribute( "type" ).toInt() != type() ) { qWarning( "Current track-type does not match track-type of " "settings-node!\n" ); } - setName( _this.hasAttribute( "name" ) ? _this.attribute( "name" ) : - _this.firstChild().toElement().attribute( "name" ) ); + setName( element.hasAttribute( "name" ) ? element.attribute( "name" ) : + element.firstChild().toElement().attribute( "name" ) ); - setMuted( _this.attribute( "muted" ).toInt() ); - setSolo( _this.attribute( "solo" ).toInt() ); + setMuted( element.attribute( "muted" ).toInt() ); + setSolo( element.attribute( "solo" ).toInt() ); if( m_simpleSerializingMode ) { - QDomNode node = _this.firstChild(); + QDomNode node = element.firstChild(); while( !node.isNull() ) { if( node.isElement() && node.nodeName() == nodeName() ) @@ -2058,7 +2078,7 @@ void Track::loadSettings( const QDomElement & _this ) // m_trackContentObjects.erase( m_trackContentObjects.begin() ); } - QDomNode node = _this.firstChild(); + QDomNode node = element.firstChild(); while( !node.isNull() ) { if( node.isElement() ) @@ -2080,10 +2100,10 @@ void Track::loadSettings( const QDomElement & _this ) node = node.nextSibling(); } - if( _this.attribute( "height" ).toInt() >= MINIMAL_TRACK_HEIGHT && - _this.attribute( "height" ).toInt() <= DEFAULT_TRACK_HEIGHT ) // workaround for #3585927, tobydox/2012-11-11 + if( element.attribute( "height" ).toInt() >= MINIMAL_TRACK_HEIGHT && + element.attribute( "height" ).toInt() <= DEFAULT_TRACK_HEIGHT ) // workaround for #3585927, tobydox/2012-11-11 { - m_height = _this.attribute( "height" ).toInt(); + m_height = element.attribute( "height" ).toInt(); } } @@ -2092,15 +2112,15 @@ void Track::loadSettings( const QDomElement & _this ) /*! \brief Add another TrackContentObject into this track * - * \param _tco The TrackContentObject to attach to this track. + * \param tco The TrackContentObject to attach to this track. */ -TrackContentObject * Track::addTCO( TrackContentObject * _tco ) +TrackContentObject * Track::addTCO( TrackContentObject * tco ) { - m_trackContentObjects.push_back( _tco ); + m_trackContentObjects.push_back( tco ); - emit trackContentObjectAdded( _tco ); + emit trackContentObjectAdded( tco ); - return _tco; // just for convenience + return tco; // just for convenience } @@ -2108,13 +2128,13 @@ TrackContentObject * Track::addTCO( TrackContentObject * _tco ) /*! \brief Remove a given TrackContentObject from this track * - * \param _tco The TrackContentObject to remove from this track. + * \param tco The TrackContentObject to remove from this track. */ -void Track::removeTCO( TrackContentObject * _tco ) +void Track::removeTCO( TrackContentObject * tco ) { tcoVector::iterator it = qFind( m_trackContentObjects.begin(), m_trackContentObjects.end(), - _tco ); + tco ); if( it != m_trackContentObjects.end() ) { m_trackContentObjects.erase( it ); @@ -2155,21 +2175,21 @@ int Track::numOfTCOs() * numbered object from the array. Otherwise we warn the user that * we've somehow requested a TCO that is too large, and create a new * TCO for them. - * \param _tco_number The number of the TrackContentObject to fetch. + * \param tcoNum The number of the TrackContentObject to fetch. * \return the given TrackContentObject or a new one if out of range. * \todo reject TCO numbers less than zero. * \todo if we create a TCO here, should we somehow attach it to the * track? */ -TrackContentObject * Track::getTCO( int _tco_num ) +TrackContentObject * Track::getTCO( int tcoNum ) { - if( _tco_num < m_trackContentObjects.size() ) + if( tcoNum < m_trackContentObjects.size() ) { - return m_trackContentObjects[_tco_num]; + return m_trackContentObjects[tcoNum]; } printf( "called Track::getTCO( %d ), " - "but TCO %d doesn't exist\n", _tco_num, _tco_num ); - return createTCO( _tco_num * MidiTime::ticksPerTact() ); + "but TCO %d doesn't exist\n", tcoNum, tcoNum ); + return createTCO( tcoNum * MidiTime::ticksPerTact() ); } @@ -2178,15 +2198,15 @@ TrackContentObject * Track::getTCO( int _tco_num ) /*! \brief Determine the given TrackContentObject's number in our array. * - * \param _tco The TrackContentObject to search for. + * \param tco The TrackContentObject to search for. * \return its number in our array. */ -int Track::getTCONum( const TrackContentObject * _tco ) +int Track::getTCONum( const TrackContentObject * tco ) { // for( int i = 0; i < getTrackContentWidget()->numOfTCOs(); ++i ) tcoVector::iterator it = qFind( m_trackContentObjects.begin(), m_trackContentObjects.end(), - _tco ); + tco ); if( it != m_trackContentObjects.end() ) { /* if( getTCO( i ) == _tco ) @@ -2211,31 +2231,31 @@ int Track::getTCONum( const TrackContentObject * _tco ) * * We return the TCOs we find in order by time, earliest TCOs first. * - * \param _tco_c The list to contain the found trackContentObjects. - * \param _start The MIDI start time of the range. - * \param _end The MIDI endi time of the range. + * \param tcoV The list to contain the found trackContentObjects. + * \param start The MIDI start time of the range. + * \param end The MIDI endi time of the range. */ -void Track::getTCOsInRange( tcoVector & _tco_v, const MidiTime & _start, - const MidiTime & _end ) +void Track::getTCOsInRange( tcoVector & tcoV, const MidiTime & start, + const MidiTime & end ) { - for( tcoVector::iterator it_o = m_trackContentObjects.begin(); - it_o != m_trackContentObjects.end(); ++it_o ) + for( tcoVector::iterator itO = m_trackContentObjects.begin(); + itO != m_trackContentObjects.end(); ++itO ) { - TrackContentObject * tco = ( *it_o ); + TrackContentObject * tco = ( *itO ); int s = tco->startPosition(); int e = tco->endPosition(); - if( ( s <= _end ) && ( e >= _start ) ) + if( ( s <= end ) && ( e >= start ) ) { // ok, TCO is posated within given range // now let's search according position for TCO in list // -> list is ordered by TCO's position afterwards bool inserted = false; - for( tcoVector::iterator it = _tco_v.begin(); - it != _tco_v.end(); ++it ) + for( tcoVector::iterator it = tcoV.begin(); + it != tcoV.end(); ++it ) { if( ( *it )->startPosition() >= s ) { - _tco_v.insert( it, tco ); + tcoV.insert( it, tco ); inserted = true; break; } @@ -2243,7 +2263,7 @@ void Track::getTCOsInRange( tcoVector & _tco_v, const MidiTime & _start, if( inserted == false ) { // no TCOs found posated behind current TCO... - _tco_v.push_back( tco ); + tcoV.push_back( tco ); } } } @@ -2257,19 +2277,19 @@ void Track::getTCOsInRange( tcoVector & _tco_v, const MidiTime & _start, * First, we arrange to swap the positions of the two TCOs in the * trackContentObjects list. Then we swap their start times as well. * - * \param _tco_num1 The first TrackContentObject to swap. - * \param _tco_num2 The second TrackContentObject to swap. + * \param tcoNum1 The first TrackContentObject to swap. + * \param tcoNum2 The second TrackContentObject to swap. */ -void Track::swapPositionOfTCOs( int _tco_num1, int _tco_num2 ) +void Track::swapPositionOfTCOs( int tcoNum1, int tcoNum2 ) { - qSwap( m_trackContentObjects[_tco_num1], - m_trackContentObjects[_tco_num2] ); + qSwap( m_trackContentObjects[tcoNum1], + m_trackContentObjects[tcoNum2] ); - const MidiTime pos = m_trackContentObjects[_tco_num1]->startPosition(); + const MidiTime pos = m_trackContentObjects[tcoNum1]->startPosition(); - m_trackContentObjects[_tco_num1]->movePosition( - m_trackContentObjects[_tco_num2]->startPosition() ); - m_trackContentObjects[_tco_num2]->movePosition( pos ); + m_trackContentObjects[tcoNum1]->movePosition( + m_trackContentObjects[tcoNum2]->startPosition() ); + m_trackContentObjects[tcoNum2]->movePosition( pos ); } @@ -2277,19 +2297,19 @@ void Track::swapPositionOfTCOs( int _tco_num1, int _tco_num2 ) /*! \brief Move all the trackContentObjects after a certain time later by one bar. * - * \param _pos The time at which we want to insert the bar. + * \param pos The time at which we want to insert the bar. * \todo if we stepped through this list last to first, and the list was * in ascending order by TCO time, once we hit a TCO that was earlier * than the insert time, we could fall out of the loop early. */ -void Track::insertTact( const MidiTime & _pos ) +void Track::insertTact( const MidiTime & pos ) { - // we'll increase the position of every TCO, positioned behind _pos, by + // we'll increase the position of every TCO, positioned behind pos, by // one tact for( tcoVector::iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) { - if( ( *it )->startPosition() >= _pos ) + if( ( *it )->startPosition() >= pos ) { ( *it )->movePosition( (*it)->startPosition() + MidiTime::ticksPerTact() ); @@ -2302,16 +2322,16 @@ void Track::insertTact( const MidiTime & _pos ) /*! \brief Move all the trackContentObjects after a certain time earlier by one bar. * - * \param _pos The time at which we want to remove the bar. + * \param pos The time at which we want to remove the bar. */ -void Track::removeTact( const MidiTime & _pos ) +void Track::removeTact( const MidiTime & pos ) { - // we'll decrease the position of every TCO, positioned behind _pos, by + // we'll decrease the position of every TCO, positioned behind pos, by // one tact for( tcoVector::iterator it = m_trackContentObjects.begin(); it != m_trackContentObjects.end(); ++it ) { - if( ( *it )->startPosition() >= _pos ) + if( ( *it )->startPosition() >= pos ) { ( *it )->movePosition( qMax( ( *it )->startPosition() - MidiTime::ticksPerTact(), 0 ) ); @@ -2357,7 +2377,7 @@ void Track::toggleSolo() { const TrackContainer::TrackList & tl = m_trackContainer->tracks(); - bool solo_before = false; + bool soloBefore = false; for( TrackContainer::TrackList::const_iterator it = tl.begin(); it != tl.end(); ++it ) { @@ -2365,7 +2385,7 @@ void Track::toggleSolo() { if( ( *it )->m_soloModel.value() ) { - solo_before = true; + soloBefore = true; break; } } @@ -2378,7 +2398,7 @@ void Track::toggleSolo() if( solo ) { // save mute-state in case no track was solo before - if( !solo_before ) + if( !soloBefore ) { ( *it )->m_mutedBeforeSolo = ( *it )->isMuted(); } @@ -2388,7 +2408,7 @@ void Track::toggleSolo() ( *it )->m_soloModel.setValue( false ); } } - else if( !solo_before ) + else if( !soloBefore ) { ( *it )->setMuted( ( *it )->m_mutedBeforeSolo ); } @@ -2409,15 +2429,15 @@ void Track::toggleSolo() * The track View is handles the actual display of the track, including * displaying its various widgets and the track segments. * - * \param _track The track to display. - * \param _tcv The track Container View for us to be displayed in. + * \param track The track to display. + * \param tcv The track Container View for us to be displayed in. * \todo Is my description of these properties correct? */ -TrackView::TrackView( Track * _track, TrackContainerView * _tcv ) : - QWidget( _tcv->contentWidget() ), /*!< The Track Container View's content widget. */ +TrackView::TrackView( Track * track, TrackContainerView * tcv ) : + QWidget( tcv->contentWidget() ), /*!< The Track Container View's content widget. */ ModelView( NULL, this ), /*!< The model view of this track */ - m_track( _track ), /*!< The track we're displaying */ - m_trackContainerView( _tcv ), /*!< The track Container View we're displayed in */ + m_track( track ), /*!< The track we're displaying */ + m_trackContainerView( tcv ), /*!< The track Container View we're displayed in */ m_trackOperationsWidget( this ), /*!< Our trackOperationsWidget */ m_trackSettingsWidget( this ), /*!< Our trackSettingsWidget */ m_trackContentWidget( this ), /*!< Our trackContentWidget */ @@ -2481,9 +2501,9 @@ TrackView::~TrackView() /*! \brief Resize this track View. * - * \param _re the Resize Event to handle. + * \param re the Resize Event to handle. */ -void TrackView::resizeEvent( QResizeEvent * _re ) +void TrackView::resizeEvent( QResizeEvent * re ) { if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) @@ -2549,11 +2569,11 @@ void TrackView::modelChanged() /*! \brief Start a drag event on this track View. * - * \param _dee the DragEnterEvent to start. + * \param dee the DragEnterEvent to start. */ -void TrackView::dragEnterEvent( QDragEnterEvent * _dee ) +void TrackView::dragEnterEvent( QDragEnterEvent * dee ) { - StringPairDrag::processDragEnterEvent( _dee, "track_" + + StringPairDrag::processDragEnterEvent( dee, "track_" + QString::number( m_track->type() ) ); } @@ -2566,12 +2586,12 @@ void TrackView::dragEnterEvent( QDragEnterEvent * _dee ) * If so, we decode the data from the drop event by just feeding it * back into the engine as a state. * - * \param _de the DropEvent to handle. + * \param de the DropEvent to handle. */ -void TrackView::dropEvent( QDropEvent * _de ) +void TrackView::dropEvent( QDropEvent * de ) { - QString type = StringPairDrag::decodeKey( _de ); - QString value = StringPairDrag::decodeValue( _de ); + QString type = StringPairDrag::decodeKey( de ); + QString value = StringPairDrag::decodeValue( de ); if( type == ( "track_" + QString::number( m_track->type() ) ) ) { // value contains our XML-data so simply create a @@ -2580,7 +2600,7 @@ void TrackView::dropEvent( QDropEvent * _de ) m_track->lock(); m_track->restoreState( dataFile.content().firstChild().toElement() ); m_track->unlock(); - _de->accept(); + de->accept(); } } @@ -2598,14 +2618,14 @@ void TrackView::dropEvent( QDropEvent * _de ) * * Otherwise we let the widget handle the mouse event as normal. * - * \param _me the MouseEvent to handle. + * \param me the MouseEvent to handle. */ -void TrackView::mousePressEvent( QMouseEvent * _me ) +void TrackView::mousePressEvent( QMouseEvent * me ) { // If previously dragged too small, restore on shift-leftclick if( height() < DEFAULT_TRACK_HEIGHT && - _me->modifiers() & Qt::ShiftModifier && - _me->button() == Qt::LeftButton ) + me->modifiers() & Qt::ShiftModifier && + me->button() == Qt::LeftButton ) { setFixedHeight( DEFAULT_TRACK_HEIGHT ); m_track->setHeight( DEFAULT_TRACK_HEIGHT ); @@ -2614,14 +2634,14 @@ void TrackView::mousePressEvent( QMouseEvent * _me ) if( m_trackContainerView->allowRubberband() == true ) { - QWidget::mousePressEvent( _me ); + QWidget::mousePressEvent( me ); } - else if( _me->button() == Qt::LeftButton ) + else if( me->button() == Qt::LeftButton ) { - if( _me->modifiers() & Qt::ShiftModifier ) + if( me->modifiers() & Qt::ShiftModifier ) { m_action = ResizeTrack; - QCursor::setPos( mapToGlobal( QPoint( _me->x(), + QCursor::setPos( mapToGlobal( QPoint( me->x(), height() ) ) ); QCursor c( Qt::SizeVerCursor); QApplication::setOverrideCursor( c ); @@ -2637,11 +2657,11 @@ void TrackView::mousePressEvent( QMouseEvent * _me ) m_trackOperationsWidget.update(); } - _me->accept(); + me->accept(); } else { - QWidget::mousePressEvent( _me ); + QWidget::mousePressEvent( me ); } } @@ -2662,29 +2682,30 @@ void TrackView::mousePressEvent( QMouseEvent * _me ) * Likewise if we've started a resize process, handle this too, making * sure that we never go below the minimum track height. * - * \param _me the MouseEvent to handle. + * \param me the MouseEvent to handle. */ -void TrackView::mouseMoveEvent( QMouseEvent * _me ) +void TrackView::mouseMoveEvent( QMouseEvent * me ) { if( m_trackContainerView->allowRubberband() == true ) { - QWidget::mouseMoveEvent( _me ); + QWidget::mouseMoveEvent( me ); } else if( m_action == MoveTrack ) { // look which track-widget the mouse-cursor is over - const int y_pos = m_trackContainerView->contentWidget()->mapFromGlobal( _me->globalPos() ).y(); - const TrackView * track_at_y = m_trackContainerView->trackViewAt( y_pos ); + const int yPos = + m_trackContainerView->contentWidget()->mapFromGlobal( me->globalPos() ).y(); + const TrackView * trackAtY = m_trackContainerView->trackViewAt( yPos ); // debug code -// qDebug( "y position %d", y_pos ); +// qDebug( "y position %d", yPos ); // a track-widget not equal to ourself? - if( track_at_y != NULL && track_at_y != this ) + if( trackAtY != NULL && trackAtY != this ) { // then move us up/down there! - if( _me->y() < 0 ) + if( me->y() < 0 ) { m_trackContainerView->moveTrackViewUp( this ); } @@ -2696,7 +2717,7 @@ void TrackView::mouseMoveEvent( QMouseEvent * _me ) } else if( m_action == ResizeTrack ) { - setFixedHeight( qMax( _me->y(), MINIMAL_TRACK_HEIGHT ) ); + setFixedHeight( qMax( me->y(), MINIMAL_TRACK_HEIGHT ) ); m_trackContainerView->realignTracks(); m_track->setHeight( height() ); } @@ -2711,9 +2732,9 @@ void TrackView::mouseMoveEvent( QMouseEvent * _me ) /*! \brief Handle a mouse release event on this track View. * - * \param _me the MouseEvent to handle. + * \param me the MouseEvent to handle. */ -void TrackView::mouseReleaseEvent( QMouseEvent * _me ) +void TrackView::mouseReleaseEvent( QMouseEvent * me ) { m_action = NoAction; while( QApplication::overrideCursor() != NULL ) @@ -2722,7 +2743,7 @@ void TrackView::mouseReleaseEvent( QMouseEvent * _me ) } m_trackOperationsWidget.update(); - QWidget::mouseReleaseEvent( _me ); + QWidget::mouseReleaseEvent( me ); } @@ -2730,9 +2751,9 @@ void TrackView::mouseReleaseEvent( QMouseEvent * _me ) /*! \brief Repaint this track View. * - * \param _pe the PaintEvent to start. + * \param pe the PaintEvent to start. */ -void TrackView::paintEvent( QPaintEvent * _pe ) +void TrackView::paintEvent( QPaintEvent * pe ) { QStyleOption opt; opt.initFrom( this ); @@ -2745,22 +2766,18 @@ void TrackView::paintEvent( QPaintEvent * _pe ) /*! \brief Create a TrackContentObject View in this track View. * - * \param _tco the TrackContentObject to create the view for. + * \param tco the TrackContentObject to create the view for. * \todo is this a good description for what this method does? */ -void TrackView::createTCOView( TrackContentObject * _tco ) +void TrackView::createTCOView( TrackContentObject * tco ) { - TrackContentObjectView * tv = _tco->createView( this ); - if( _tco->getSelectViewOnCreate() == true ) + TrackContentObjectView * tv = tco->createView( this ); + if( tco->getSelectViewOnCreate() == true ) { tv->setSelected( true ); } - _tco->selectViewOnCreate( false ); + tco->selectViewOnCreate( false ); } - - - - From c398769020ef83bbe62acc1250daebd05baa6c6b Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Mon, 5 Jan 2015 22:11:23 -0200 Subject: [PATCH 161/172] Update coding conventions --- include/Track.h | 178 +++++++++++++++++++++++++----------------------- 1 file changed, 93 insertions(+), 85 deletions(-) diff --git a/include/Track.h b/include/Track.h index b766b6056..4d4b221fc 100644 --- a/include/Track.h +++ b/include/Track.h @@ -81,7 +81,7 @@ class TrackContentObject : public Model, public JournallingObject mapPropertyFromModel(bool,isMuted,setMuted,m_mutedModel); mapPropertyFromModel(bool,isSolo,setSolo,m_soloModel); public: - TrackContentObject( Track * _track ); + TrackContentObject( Track * track ); virtual ~TrackContentObject(); inline Track * getTrack() const @@ -94,9 +94,9 @@ public: return m_name; } - inline void setName( const QString & _name ) + inline void setName( const QString & name ) { - m_name = _name; + m_name = name; emit dataChanged(); } @@ -122,9 +122,9 @@ public: return m_length; } - inline void setAutoResize( const bool _r ) + inline void setAutoResize( const bool r ) { - m_autoResize = _r; + m_autoResize = r; } inline const bool getAutoResize() const @@ -132,10 +132,10 @@ public: return m_autoResize; } - virtual void movePosition( const MidiTime & _pos ); - virtual void changeLength( const MidiTime & _length ); + virtual void movePosition( const MidiTime & pos ); + virtual void changeLength( const MidiTime & length ); - virtual TrackContentObjectView * createView( TrackView * _tv ) = 0; + virtual TrackContentObjectView * createView( TrackView * tv ) = 0; inline void selectViewOnCreate( bool select ) { @@ -195,7 +195,7 @@ class TrackContentObjectView : public selectableObject, public ModelView Q_PROPERTY( QColor textColor READ textColor WRITE setTextColor ) public: - TrackContentObjectView( TrackContentObject * _tco, TrackView * _tv ); + TrackContentObjectView( TrackContentObject * tco, TrackView * tv ); virtual ~TrackContentObjectView(); bool fixedTCOs(); @@ -207,8 +207,8 @@ public: // qproperty access func QColor fgColor() const; QColor textColor() const; - void setFgColor( const QColor & _c ); - void setTextColor( const QColor & _c ); + void setFgColor( const QColor & c ); + void setTextColor( const QColor & c ); public slots: virtual bool close(); @@ -220,14 +220,18 @@ protected: { } - virtual void contextMenuEvent( QContextMenuEvent * _cme ); - virtual void dragEnterEvent( QDragEnterEvent * _dee ); - virtual void dropEvent( QDropEvent * _de ); - virtual void leaveEvent( QEvent * _e ); - virtual void mousePressEvent( QMouseEvent * _me ); - virtual void mouseMoveEvent( QMouseEvent * _me ); - virtual void mouseReleaseEvent( QMouseEvent * _me ); + virtual void contextMenuEvent( QContextMenuEvent * cme ); + virtual void dragEnterEvent( QDragEnterEvent * dee ); + virtual void dropEvent( QDropEvent * de ); + virtual void leaveEvent( QEvent * e ); + virtual void mousePressEvent( QMouseEvent * me ); + virtual void mouseMoveEvent( QMouseEvent * me ); + virtual void mouseReleaseEvent( QMouseEvent * me ); +<<<<<<< HEAD +======= + void setAutoResizeEnabled( bool e = false ); +>>>>>>> Update coding conventions float pixelsPerTact(); inline TrackView * getTrackView() @@ -276,7 +280,7 @@ private: m_initialMouseGlobalPos = mapToGlobal( pos ); } - bool mouseMovedDistance( QMouseEvent * _me, int distance ); + bool mouseMovedDistance( QMouseEvent * me, int distance ); } ; @@ -293,46 +297,46 @@ class TrackContentWidget : public QWidget, public JournallingObject Q_PROPERTY( QBrush lighterColor READ lighterColor WRITE setLighterColor ) public: - TrackContentWidget( TrackView * _parent ); + TrackContentWidget( TrackView * parent ); virtual ~TrackContentWidget(); /*! \brief Updates the background tile pixmap. */ void updateBackground(); - void addTCOView( TrackContentObjectView * _tcov ); - void removeTCOView( TrackContentObjectView * _tcov ); - void removeTCOView( int _tco_num ) + void addTCOView( TrackContentObjectView * tcov ); + void removeTCOView( TrackContentObjectView * tcov ); + void removeTCOView( int tcoNum ) { - if( _tco_num >= 0 && _tco_num < m_tcoViews.size() ) + if( tcoNum >= 0 && tcoNum < m_tcoViews.size() ) { - removeTCOView( m_tcoViews[_tco_num] ); + removeTCOView( m_tcoViews[tcoNum] ); } } bool canPasteSelection( MidiTime tcoPos, const QMimeData * mimeData ); - bool pasteSelection( MidiTime tcoPos, QDropEvent * _de ); + bool pasteSelection( MidiTime tcoPos, QDropEvent * de ); - MidiTime endPosition( const MidiTime & _pos_start ); + MidiTime endPosition( const MidiTime & posStart ); // qproperty access methods QBrush darkerColor() const; QBrush lighterColor() const; - void setDarkerColor( const QBrush & _c ); - void setLighterColor( const QBrush & _c ); + void setDarkerColor( const QBrush & c ); + void setLighterColor( const QBrush & c ); public slots: void update(); - void changePosition( const MidiTime & _new_pos = MidiTime( -1 ) ); + void changePosition( const MidiTime & newPos = MidiTime( -1 ) ); protected: - virtual void dragEnterEvent( QDragEnterEvent * _dee ); - virtual void dropEvent( QDropEvent * _de ); - virtual void mousePressEvent( QMouseEvent * _me ); - virtual void paintEvent( QPaintEvent * _pe ); - virtual void resizeEvent( QResizeEvent * _re ); + virtual void dragEnterEvent( QDragEnterEvent * dee ); + virtual void dropEvent( QDropEvent * de ); + virtual void mousePressEvent( QMouseEvent * me ); + virtual void paintEvent( QPaintEvent * pe ); + virtual void resizeEvent( QResizeEvent * re ); virtual QString nodeName() const { @@ -353,7 +357,7 @@ protected: private: Track * getTrack(); - MidiTime getPosition( int _mouse_x ); + MidiTime getPosition( int mouseX ); TrackView * m_trackView; @@ -375,13 +379,13 @@ class TrackOperationsWidget : public QWidget { Q_OBJECT public: - TrackOperationsWidget( TrackView * _parent ); + TrackOperationsWidget( TrackView * parent ); ~TrackOperationsWidget(); protected: - virtual void mousePressEvent( QMouseEvent * _me ); - virtual void paintEvent( QPaintEvent * _pe ); + virtual void mousePressEvent( QMouseEvent * me ); + virtual void paintEvent( QPaintEvent * pe ); private slots: @@ -407,7 +411,7 @@ private: friend class TrackView; signals: - void trackRemovalScheduled( TrackView * _t ); + void trackRemovalScheduled( TrackView * t ); } ; @@ -437,12 +441,12 @@ public: NumTrackTypes } ; - Track( TrackTypes _type, TrackContainer * _tc ); + Track( TrackTypes type, TrackContainer * tc ); virtual ~Track(); - static Track * create( TrackTypes _tt, TrackContainer * _tc ); - static Track * create( const QDomElement & _this, - TrackContainer * _tc ); + static Track * create( TrackTypes tt, TrackContainer * tc ); + static Track * create( const QDomElement & element, + TrackContainer * tc ); void clone(); @@ -452,20 +456,20 @@ public: return m_type; } - virtual bool play( const MidiTime & _start, const fpp_t _frames, - const f_cnt_t _frame_base, int _tco_num = -1 ) = 0; + virtual bool play( const MidiTime & start, const fpp_t frames, + const f_cnt_t frameBase, int tcoNum = -1 ) = 0; - virtual TrackView * createView( TrackContainerView * _view ) = 0; - virtual TrackContentObject * createTCO( const MidiTime & _pos ) = 0; + virtual TrackView * createView( TrackContainerView * view ) = 0; + virtual TrackContentObject * createTCO( const MidiTime & pos ) = 0; - virtual void saveTrackSpecificSettings( QDomDocument & _doc, - QDomElement & _parent ) = 0; - virtual void loadTrackSpecificSettings( const QDomElement & _this ) = 0; + virtual void saveTrackSpecificSettings( QDomDocument & doc, + QDomElement & parent ) = 0; + virtual void loadTrackSpecificSettings( const QDomElement & element ) = 0; - virtual void saveSettings( QDomDocument & _doc, QDomElement & _this ); - virtual void loadSettings( const QDomElement & _this ); + virtual void saveSettings( QDomDocument & doc, QDomElement & element ); + virtual void loadSettings( const QDomElement & element ); void setSimpleSerializing() { @@ -473,26 +477,26 @@ public: } // -- for usage by TrackContentObject only --------------- - TrackContentObject * addTCO( TrackContentObject * _tco ); - void removeTCO( TrackContentObject * _tco ); + TrackContentObject * addTCO( TrackContentObject * tco ); + void removeTCO( TrackContentObject * tco ); // ------------------------------------------------------- void deleteTCOs(); int numOfTCOs(); - TrackContentObject * getTCO( int _tco_num ); - int getTCONum(const TrackContentObject* _tco ); + TrackContentObject * getTCO( int tcoNum ); + int getTCONum(const TrackContentObject* tco ); const tcoVector & getTCOs() const { - return( m_trackContentObjects ); + return m_trackContentObjects; } - void getTCOsInRange( tcoVector & _tco_v, const MidiTime & _start, - const MidiTime & _end ); - void swapPositionOfTCOs( int _tco_num1, int _tco_num2 ); + void getTCOsInRange( tcoVector & tcoV, const MidiTime & start, + const MidiTime & end ); + void swapPositionOfTCOs( int tcoNum1, int tcoNum2 ); - void insertTact( const MidiTime & _pos ); - void removeTact( const MidiTime & _pos ); + void insertTact( const MidiTime & pos ); + void removeTact( const MidiTime & pos ); tact_t length() const; @@ -505,21 +509,25 @@ public: // name-stuff virtual const QString & name() const { - return( m_name ); + return m_name; } virtual QString displayName() const { - return( name() ); + return name(); } using Model::dataChanged; - inline int getHeight() { - return ( m_height >= MINIMAL_TRACK_HEIGHT ? m_height : DEFAULT_TRACK_HEIGHT ); + inline int getHeight() + { + return m_height >= MINIMAL_TRACK_HEIGHT + ? m_height + : DEFAULT_TRACK_HEIGHT; } - inline void setHeight( int _height ) { - m_height = _height; + inline void setHeight( int height ) + { + m_height = height; } void lock() @@ -536,9 +544,9 @@ public: } public slots: - virtual void setName( const QString & _new_name ) + virtual void setName( const QString & newName ) { - m_name = _new_name; + m_name = newName; emit nameChanged(); } @@ -585,12 +593,12 @@ public: inline const Track * getTrack() const { - return( m_track ); + return m_track; } inline Track * getTrack() { - return( m_track ); + return m_track; } inline TrackContainerView* trackContainerView() @@ -600,22 +608,22 @@ public: inline TrackOperationsWidget * getTrackOperationsWidget() { - return( &m_trackOperationsWidget ); + return &m_trackOperationsWidget; } inline trackSettingsWidget * getTrackSettingsWidget() { - return( &m_trackSettingsWidget ); + return &m_trackSettingsWidget; } inline TrackContentWidget * getTrackContentWidget() { - return( &m_trackContentWidget ); + return &m_trackContentWidget; } bool isMovingTrack() const { - return( m_action == MoveTrack ); + return m_action == MoveTrack; } virtual void update(); @@ -645,13 +653,13 @@ protected: } - virtual void dragEnterEvent( QDragEnterEvent * _dee ); - virtual void dropEvent( QDropEvent * _de ); - virtual void mousePressEvent( QMouseEvent * _me ); - virtual void mouseMoveEvent( QMouseEvent * _me ); - virtual void mouseReleaseEvent( QMouseEvent * _me ); - virtual void paintEvent( QPaintEvent * _pe ); - virtual void resizeEvent( QResizeEvent * _re ); + virtual void dragEnterEvent( QDragEnterEvent * dee ); + virtual void dropEvent( QDropEvent * de ); + virtual void mousePressEvent( QMouseEvent * me ); + virtual void mouseMoveEvent( QMouseEvent * me ); + virtual void mouseReleaseEvent( QMouseEvent * me ); + virtual void paintEvent( QPaintEvent * pe ); + virtual void resizeEvent( QResizeEvent * re ); private: @@ -676,7 +684,7 @@ private: private slots: - void createTCOView( TrackContentObject * _tco ); + void createTCOView( TrackContentObject * tco ); } ; From 21425e3477e2ed18445b44cc1aa933d9f0301906 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:11:42 -0200 Subject: [PATCH 162/172] Update Song.cpp --- src/core/Song.cpp | 231 +++++++++++++++++++++++++--------------------- 1 file changed, 127 insertions(+), 104 deletions(-) diff --git a/src/core/Song.cpp b/src/core/Song.cpp index 3dfa1fbd0..3bd0da7f7 100644 --- a/src/core/Song.cpp +++ b/src/core/Song.cpp @@ -144,7 +144,7 @@ void Song::masterVolumeChanged() void Song::setTempo() { Engine::mixer()->lockPlayHandleRemoval(); - const bpm_t tempo = (bpm_t) m_tempoModel.value(); + const bpm_t tempo = ( bpm_t ) m_tempoModel.value(); PlayHandleList & playHandles = Engine::mixer()->playHandles(); for( PlayHandleList::Iterator it = playHandles.begin(); it != playHandles.end(); ++it ) @@ -176,7 +176,8 @@ void Song::setTimeSignature() emit dataChanged(); m_oldTicksPerTact = ticksPerTact(); - m_vstSyncController.setTimeSignature( getTimeSigModel().getNumerator(), getTimeSigModel().getDenominator() ); + m_vstSyncController.setTimeSignature( + getTimeSigModel().getNumerator(), getTimeSigModel().getDenominator() ); } @@ -202,13 +203,13 @@ void Song::processNextBuffer() return; } - TrackList track_list; - int tco_num = -1; + TrackList trackList; + int tcoNum = -1; switch( m_playMode ) { case Mode_PlaySong: - track_list = tracks(); + trackList = tracks(); // at song-start we have to reset the LFOs if( m_playPos[Mode_PlaySong] == 0 ) { @@ -217,25 +218,25 @@ void Song::processNextBuffer() break; case Mode_PlayTrack: - track_list.push_back( m_trackToPlay ); + trackList.push_back( m_trackToPlay ); break; case Mode_PlayBB: if( Engine::getBBTrackContainer()->numOfBBs() > 0 ) { - tco_num = Engine::getBBTrackContainer()-> + tcoNum = Engine::getBBTrackContainer()-> currentBB(); - track_list.push_back( BBTrack::findBBTrack( - tco_num ) ); + trackList.push_back( BBTrack::findBBTrack( + tcoNum ) ); } break; case Mode_PlayPattern: if( m_patternToPlay != NULL ) { - tco_num = m_patternToPlay->getTrack()-> + tcoNum = m_patternToPlay->getTrack()-> getTCONum( m_patternToPlay ); - track_list.push_back( + trackList.push_back( m_patternToPlay->getTrack() ); } break; @@ -245,41 +246,44 @@ void Song::processNextBuffer() } - if( track_list.empty() == true ) + if( trackList.empty() == true ) { return; } // check for looping-mode and act if necessary TimeLineWidget * tl = m_playPos[m_playMode].m_timeLine; - bool check_loop = tl != NULL && m_exporting == false && + bool checkLoop = tl != NULL && m_exporting == false && tl->loopPointsEnabled(); - if( check_loop ) + + if( checkLoop ) { if( m_playPos[m_playMode] < tl->loopBegin() || m_playPos[m_playMode] >= tl->loopEnd() ) { - m_elapsedMilliSeconds = (tl->loopBegin().getTicks()*60*1000/48)/getTempo(); + m_elapsedMilliSeconds = + ( tl->loopBegin().getTicks() * 60 * 1000 / 48 ) / getTempo(); m_playPos[m_playMode].setTicks( tl->loopBegin().getTicks() ); } } - f_cnt_t total_frames_played = 0; - const float frames_per_tick = Engine::framesPerTick(); + f_cnt_t totalFramesPlayed = 0; + const float framesPerTick = Engine::framesPerTick(); - while( total_frames_played - < Engine::mixer()->framesPerPeriod() ) + while( totalFramesPlayed < Engine::mixer()->framesPerPeriod() ) { m_vstSyncController.update(); - f_cnt_t played_frames = Engine::mixer()->framesPerPeriod() - total_frames_played; + f_cnt_t playedFrames = Engine::mixer()->framesPerPeriod() - + totalFramesPlayed; - float current_frame = m_playPos[m_playMode].currentFrame(); + float currentFrame = m_playPos[m_playMode].currentFrame(); // did we play a tick? - if( current_frame >= frames_per_tick ) + if( currentFrame >= framesPerTick ) { - int ticks = m_playPos[m_playMode].getTicks() + (int)( current_frame / frames_per_tick ); + int ticks = m_playPos[m_playMode].getTicks() + + ( int )( currentFrame / framesPerTick ); m_vstSyncController.setAbsolutePosition( ticks ); @@ -289,14 +293,14 @@ void Song::processNextBuffer() // per default we just continue playing even if // there's no more stuff to play // (song-play-mode) - int max_tact = m_playPos[m_playMode].getTact() + int maxTact = m_playPos[m_playMode].getTact() + 2; // then decide whether to go over to next tact // or to loop back to first tact if( m_playMode == Mode_PlayBB ) { - max_tact = Engine::getBBTrackContainer() + maxTact = Engine::getBBTrackContainer() ->lengthOfCurrentBB(); } else if( m_playMode == Mode_PlayPattern && @@ -304,34 +308,39 @@ void Song::processNextBuffer() tl != NULL && tl->loopPointsEnabled() == false ) { - max_tact = m_patternToPlay->length() + maxTact = m_patternToPlay->length() .getTact(); } // end of played object reached? if( m_playPos[m_playMode].getTact() + 1 - >= max_tact ) + >= maxTact ) { // then start from beginning and keep // offset - ticks = ticks % ( max_tact * MidiTime::ticksPerTact() ); + ticks %= ( maxTact * MidiTime::ticksPerTact() ); // wrap milli second counter - m_elapsedMilliSeconds = ( ticks * 60 * 1000 / 48 ) / getTempo(); + m_elapsedMilliSeconds = + ( ticks * 60 * 1000 / 48 ) / getTempo(); m_vstSyncController.setAbsolutePosition( ticks ); } } m_playPos[m_playMode].setTicks( ticks ); - if( check_loop ) + if( checkLoop ) { - m_vstSyncController.startCycle( tl->loopBegin().getTicks(), tl->loopEnd().getTicks() ); + m_vstSyncController.startCycle( + tl->loopBegin().getTicks(), tl->loopEnd().getTicks() ); if( m_playPos[m_playMode] >= tl->loopEnd() ) { m_playPos[m_playMode].setTicks( tl->loopBegin().getTicks() ); - m_elapsedMilliSeconds = ((tl->loopBegin().getTicks())*60*1000/48)/getTempo(); + + m_elapsedMilliSeconds = + ( ( tl->loopBegin().getTicks() ) * 60 * 1000 / 48 ) / + getTempo(); } } else @@ -339,55 +348,57 @@ void Song::processNextBuffer() m_vstSyncController.stopCycle(); } - current_frame = fmodf( current_frame, frames_per_tick ); - m_playPos[m_playMode].setCurrentFrame( current_frame ); + currentFrame = fmodf( currentFrame, framesPerTick ); + m_playPos[m_playMode].setCurrentFrame( currentFrame ); } - f_cnt_t last_frames = (f_cnt_t)frames_per_tick - - (f_cnt_t) current_frame; + f_cnt_t lastFrames = ( f_cnt_t )framesPerTick - + ( f_cnt_t )currentFrame; // skip last frame fraction - if( last_frames == 0 ) + if( lastFrames == 0 ) { - ++total_frames_played; - m_playPos[m_playMode].setCurrentFrame( current_frame + ++totalFramesPlayed; + m_playPos[m_playMode].setCurrentFrame( currentFrame + 1.0f ); continue; } // do we have some samples left in this tick but these are // less then samples we have to play? - if( last_frames < played_frames ) + if( lastFrames < playedFrames ) { // then set played_samples to remaining samples, the // rest will be played in next loop - played_frames = last_frames; + playedFrames = lastFrames; } - if( (f_cnt_t) current_frame == 0 ) + if( ( f_cnt_t ) currentFrame == 0 ) { if( m_playMode == Mode_PlaySong ) { m_globalAutomationTrack->play( m_playPos[m_playMode], - played_frames, - total_frames_played, tco_num ); + playedFrames, + totalFramesPlayed, tcoNum ); } // loop through all tracks and play them - for( int i = 0; i < track_list.size(); ++i ) + for( int i = 0; i < trackList.size(); ++i ) { - track_list[i]->play( m_playPos[m_playMode], - played_frames, - total_frames_played, tco_num ); + trackList[i]->play( m_playPos[m_playMode], + playedFrames, + totalFramesPlayed, tcoNum ); } } // update frame-counters - total_frames_played += played_frames; - m_playPos[m_playMode].setCurrentFrame( played_frames + - current_frame ); - m_elapsedMilliSeconds += (((played_frames/frames_per_tick)*60*1000/48)/getTempo()); + totalFramesPlayed += playedFrames; + m_playPos[m_playMode].setCurrentFrame( playedFrames + + currentFrame ); + m_elapsedMilliSeconds += + ( ( playedFrames / framesPerTick ) * 60 * 1000 / 48 ) + / getTempo(); m_elapsedTacts = m_playPos[Mode_PlaySong].getTact(); - m_elapsedTicks = (m_playPos[Mode_PlaySong].getTicks()%ticksPerTact())/48; + m_elapsedTicks = ( m_playPos[Mode_PlaySong].getTicks() % ticksPerTact() ) / 48; } } @@ -396,17 +407,21 @@ bool Song::isExportDone() const if ( m_renderBetweenMarkers ) { return m_exporting == true && - m_playPos[Mode_PlaySong].getTicks() >= m_playPos[Mode_PlaySong].m_timeLine->loopEnd().getTicks(); + m_playPos[Mode_PlaySong].getTicks() >= + m_playPos[Mode_PlaySong].m_timeLine->loopEnd().getTicks(); } + if( m_exportLoop) { return m_exporting == true && - m_playPos[Mode_PlaySong].getTicks() >= length() * ticksPerTact(); + m_playPos[Mode_PlaySong].getTicks() >= + length() * ticksPerTact(); } else { return m_exporting == true && - m_playPos[Mode_PlaySong].getTicks() >= ( length() + 1 ) * ticksPerTact(); + m_playPos[Mode_PlaySong].getTicks() >= + ( length() + 1 ) * ticksPerTact(); } } @@ -454,13 +469,13 @@ void Song::playAndRecord() -void Song::playTrack( Track * _trackToPlay ) +void Song::playTrack( Track * trackToPlay ) { if( isStopped() == false ) { stop(); } - m_trackToPlay = _trackToPlay; + m_trackToPlay = trackToPlay; m_playMode = Mode_PlayTrack; m_playing = true; @@ -497,7 +512,7 @@ void Song::playBB() -void Song::playPattern( const Pattern* patternToPlay, bool _loop ) +void Song::playPattern( const Pattern* patternToPlay, bool loop ) { if( isStopped() == false ) { @@ -505,7 +520,7 @@ void Song::playPattern( const Pattern* patternToPlay, bool _loop ) } m_patternToPlay = patternToPlay; - m_loopPattern = _loop; + m_loopPattern = loop; if( m_patternToPlay != NULL ) { @@ -543,12 +558,14 @@ void Song::updateLength() -void Song::setPlayPos( tick_t _ticks, PlayModes _play_mode ) +void Song::setPlayPos( tick_t ticks, PlayModes playMode ) { - m_elapsedTicks += m_playPos[_play_mode].getTicks() - _ticks; - m_elapsedMilliSeconds += (((( _ticks - m_playPos[_play_mode].getTicks()))*60*1000/48)/getTempo()); - m_playPos[_play_mode].setTicks( _ticks ); - m_playPos[_play_mode].setCurrentFrame( 0.0f ); + m_elapsedTicks += m_playPos[playMode].getTicks() - ticks; + m_elapsedMilliSeconds += + ( ( ( ( ticks - m_playPos[playMode].getTicks() ) ) * 60 * 1000 / 48) / + getTempo() ); + m_playPos[playMode].setTicks( ticks ); + m_playPos[playMode].setCurrentFrame( 0.0f ); // send a signal if playposition changes during playback if( isPlaying() ) @@ -608,7 +625,9 @@ void Song::stop() if( tl->savedPos() >= 0 ) { m_playPos[m_playMode].setTicks( tl->savedPos().getTicks() ); - m_elapsedMilliSeconds = (((tl->savedPos().getTicks())*60*1000/48)/getTempo()); + m_elapsedMilliSeconds = + ( ( ( tl->savedPos().getTicks() ) * 60 * 1000 / 48 ) / + getTempo() ); tl->savePos( -1 ); } break; @@ -713,7 +732,7 @@ void Song::addBBTrack() void Song::addSampleTrack() { - (void) Track::create( Track::SampleTrack, this ); + ( void )Track::create( Track::SampleTrack, this ); } @@ -721,7 +740,7 @@ void Song::addSampleTrack() void Song::addAutomationTrack() { - (void) Track::create( Track::AutomationTrack, this ); + ( void )Track::create( Track::AutomationTrack, this ); } @@ -729,7 +748,7 @@ void Song::addAutomationTrack() bpm_t Song::getTempo() { - return (bpm_t) m_tempoModel.value(); + return ( bpm_t )m_tempoModel.value(); } @@ -824,24 +843,23 @@ void Song::clearProject() - // create new file void Song::createNewProject() { - QString default_template = ConfigManager::inst()->userProjectsDir() + QString defaultTemplate = ConfigManager::inst()->userProjectsDir() + "templates/default.mpt"; - if( QFile::exists( default_template ) ) + if( QFile::exists( defaultTemplate ) ) { - createNewProjectFromTemplate( default_template ); + createNewProjectFromTemplate( defaultTemplate ); return; } - default_template = ConfigManager::inst()->factoryProjectsDir() + defaultTemplate = ConfigManager::inst()->factoryProjectsDir() + "templates/default.mpt"; - if( QFile::exists( default_template ) ) + if( QFile::exists( defaultTemplate ) ) { - createNewProjectFromTemplate( default_template ); + createNewProjectFromTemplate( defaultTemplate ); return; } @@ -891,9 +909,9 @@ void Song::createNewProject() -void Song::createNewProjectFromTemplate( const QString & _template ) +void Song::createNewProjectFromTemplate( const QString & templ ) { - loadProject( _template ); + loadProject( templ ); // clear file-name so that user doesn't overwrite template when // saving... m_fileName = m_oldFileName = ""; @@ -909,7 +927,7 @@ void Song::createNewProjectFromTemplate( const QString & _template ) // load given song -void Song::loadProject( const QString & _file_name ) +void Song::loadProject( const QString & fileName ) { QDomNode node; @@ -917,8 +935,8 @@ void Song::loadProject( const QString & _file_name ) Engine::projectJournal()->setJournalling( false ); - m_fileName = _file_name; - m_oldFileName = _file_name; + m_fileName = fileName; + m_oldFileName = fileName; DataFile dataFile( m_fileName ); // if file could not be opened, head-node is null and we create @@ -1023,7 +1041,7 @@ void Song::loadProject( const QString & _file_name ) Engine::mixer()->unlock(); - ConfigManager::inst()->addRecentlyOpenedProject( _file_name ); + ConfigManager::inst()->addRecentlyOpenedProject( fileName ); Engine::projectJournal()->setJournalling( true ); @@ -1053,7 +1071,7 @@ void Song::loadProject( const QString & _file_name ) // only save current song as _filename and do nothing else -bool Song::saveProjectFile( const QString & _filename ) +bool Song::saveProjectFile( const QString & filename ) { DataFile::LocaleHelper localeHelper( DataFile::LocaleHelper::ModeSave ); @@ -1079,7 +1097,7 @@ bool Song::saveProjectFile( const QString & _filename ) saveControllerStates( dataFile, dataFile.content() ); - return dataFile.writeFile( _filename ); + return dataFile.writeFile( filename ); } @@ -1157,23 +1175,23 @@ void Song::importProject() -void Song::saveControllerStates( QDomDocument & _doc, QDomElement & _this ) +void Song::saveControllerStates( QDomDocument & doc, QDomElement & element ) { // save settings of controllers - QDomElement controllersNode =_doc.createElement( "controllers" ); - _this.appendChild( controllersNode ); + QDomElement controllersNode = doc.createElement( "controllers" ); + element.appendChild( controllersNode ); for( int i = 0; i < m_controllers.size(); ++i ) { - m_controllers[i]->saveState( _doc, controllersNode ); + m_controllers[i]->saveState( doc, controllersNode ); } } -void Song::restoreControllerStates( const QDomElement & _this ) +void Song::restoreControllerStates( const QDomElement & element ) { - QDomNode node = _this.firstChild(); + QDomNode node = element.firstChild(); while( !node.isNull() ) { Controller * c = Controller::create( node.toElement(), this ); @@ -1194,10 +1212,10 @@ void Song::restoreControllerStates( const QDomElement & _this ) void Song::exportProjectTracks() { - exportProject(true); + exportProject( true ); } -void Song::exportProject(bool multiExport) +void Song::exportProject( bool multiExport ) { if( isEmpty() ) { @@ -1210,7 +1228,7 @@ void Song::exportProject(bool multiExport) } FileDialog efd( gui->mainWindow() ); - if (multiExport) + if ( multiExport ) { efd.setFileMode( FileDialog::Directory); efd.setWindowTitle( tr( "Select directory for writing exported tracks..." ) ); @@ -1230,18 +1248,18 @@ void Song::exportProject(bool multiExport) ++idx; } efd.setNameFilters( types ); - QString base_filename; + QString baseFilename; if( !m_fileName.isEmpty() ) { efd.setDirectory( QFileInfo( m_fileName ).absolutePath() ); - base_filename = QFileInfo( m_fileName ).completeBaseName(); + baseFilename = QFileInfo( m_fileName ).completeBaseName(); } else { efd.setDirectory( ConfigManager::inst()->userProjectsDir() ); - base_filename = tr( "untitled" ); + baseFilename = tr( "untitled" ); } - efd.selectFile( base_filename + __fileEncodeDevices[0].m_extension ); + efd.selectFile( baseFilename + __fileEncodeDevices[0].m_extension ); efd.setWindowTitle( tr( "Select file for project-export..." ) ); } @@ -1268,8 +1286,8 @@ void Song::exportProject(bool multiExport) } } - const QString export_file_name = efd.selectedFiles()[0] + suffix; - ExportProjectDialog epd( export_file_name, gui->mainWindow(), multiExport ); + const QString exportFileName = efd.selectedFiles()[0] + suffix; + ExportProjectDialog epd( exportFileName, gui->mainWindow(), multiExport ); epd.exec(); } } @@ -1301,11 +1319,11 @@ void Song::setModified() -void Song::addController( Controller * _c ) +void Song::addController( Controller * c ) { - if( _c != NULL && !m_controllers.contains( _c ) ) + if( c != NULL && m_controllers.contains( c ) == false ) { - m_controllers.append( _c ); + m_controllers.append( c ); emit dataChanged(); } } @@ -1313,9 +1331,9 @@ void Song::addController( Controller * _c ) -void Song::removeController( Controller * _controller ) +void Song::removeController( Controller * controller ) { - int index = m_controllers.indexOf( _controller ); + int index = m_controllers.indexOf( controller ); if( index != -1 ) { m_controllers.remove( index ); @@ -1330,6 +1348,7 @@ void Song::removeController( Controller * _controller ) + void Song::clearErrors() { m_errors->clear(); @@ -1365,3 +1384,7 @@ QString* Song::errorSummary() return errors; } + + + + From abe05af49a6599f5243f062a2aaa60cfbc4b7af4 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:12:17 -0200 Subject: [PATCH 163/172] Update Mixer.cpp --- src/core/Mixer.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/core/Mixer.cpp b/src/core/Mixer.cpp index b6aff0446..6f0b9557a 100644 --- a/src/core/Mixer.cpp +++ b/src/core/Mixer.cpp @@ -319,9 +319,9 @@ const surroundSampleFrame * Mixer::renderNextBuffer() { m_profiler.startPeriod(); - static Song::playPos last_metro_pos = -1; + static Song::PlayPos last_metro_pos = -1; - Song::playPos p = Engine::getSong()->getPlayPos( + Song::PlayPos p = Engine::getSong()->getPlayPos( Song::Mode_PlayPattern ); if( Engine::getSong()->playMode() == Song::Mode_PlayPattern && gui->pianoRoll()->isRecording() == true && @@ -969,6 +969,3 @@ void Mixer::fifoWriter::run() - - - From 92f9fd92ec67222cc3b205e82a6c32745ab51e72 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:12:50 -0200 Subject: [PATCH 164/172] Update Timeline.cpp --- src/gui/TimeLineWidget.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/gui/TimeLineWidget.cpp b/src/gui/TimeLineWidget.cpp index 5966e7d51..7de1a9b46 100644 --- a/src/gui/TimeLineWidget.cpp +++ b/src/gui/TimeLineWidget.cpp @@ -51,8 +51,8 @@ QPixmap * TimeLineWidget::s_posMarkerPixmap = NULL; QPixmap * TimeLineWidget::s_loopPointBeginPixmap = NULL; QPixmap * TimeLineWidget::s_loopPointEndPixmap = NULL; -TimeLineWidget::TimeLineWidget( const int _xoff, const int _yoff, const float _ppt, - Song::playPos & _pos, const MidiTime & _begin, +TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt, + Song::playPos & pos, const MidiTime & begin, QWidget * _parent ) : QWidget( _parent ), m_autoScroll( AutoScrollEnabled ), @@ -391,7 +391,3 @@ void TimeLineWidget::mouseReleaseEvent( QMouseEvent* event ) - - - - From 9e1a35e3276ac702da0104d269f6920decded497 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:13:27 -0200 Subject: [PATCH 165/172] Update ProjectRenderer.cpp --- src/core/ProjectRenderer.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/core/ProjectRenderer.cpp b/src/core/ProjectRenderer.cpp index 727cb630c..e8a91c77d 100644 --- a/src/core/ProjectRenderer.cpp +++ b/src/core/ProjectRenderer.cpp @@ -163,7 +163,7 @@ void ProjectRenderer::run() //skip first empty buffer Engine::mixer()->nextBuffer(); - Song::playPos & pp = Engine::getSong()->getPlayPos( + Song::PlayPos & pp = Engine::getSong()->getPlayPos( Song::Mode_PlaySong ); m_progress = 0; const int sl = ( Engine::getSong()->length() + 1 ) * 192; @@ -230,5 +230,3 @@ void ProjectRenderer::updateConsoleProgress() - - From 77ceda9385f61e387c6953e0d1ec04def8af9aaf Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:14:29 -0200 Subject: [PATCH 166/172] Update Song.h --- include/Song.h | 71 +++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/include/Song.h b/include/Song.h index 5da09818a..1d31428d0 100644 --- a/include/Song.h +++ b/include/Song.h @@ -49,10 +49,9 @@ const tick_t MaxSongLength = 9999 * DefaultTicksPerTact; class EXPORT Song : public TrackContainer { Q_OBJECT - mapPropertyFromModel(int,getTempo,setTempo,m_tempoModel); - mapPropertyFromModel(int,masterPitch,setMasterPitch,m_masterPitchModel); - mapPropertyFromModel(int,masterVolume,setMasterVolume, - m_masterVolumeModel); + mapPropertyFromModel( int,getTempo,setTempo,m_tempoModel ); + mapPropertyFromModel( int,masterPitch,setMasterPitch,m_masterPitchModel ); + mapPropertyFromModel( int,masterVolume,setMasterVolume, m_masterVolumeModel ); public: enum PlayModes { @@ -70,19 +69,19 @@ public: bool hasErrors(); QString* errorSummary(); - class playPos : public MidiTime + class PlayPos : public MidiTime { public: - playPos( const int _abs = 0 ) : - MidiTime( _abs ), + PlayPos( const int abs = 0 ) : + MidiTime( abs ), m_timeLine( NULL ), m_timeLineUpdate( true ), m_currentFrame( 0.0f ) { } - inline void setCurrentFrame( const float _f ) + inline void setCurrentFrame( const float f ) { - m_currentFrame = _f; + m_currentFrame = f; } inline float currentFrame() const { @@ -104,9 +103,9 @@ public: { return m_elapsedMilliSeconds; } - inline void setMilliSeconds( float _ellapsedMilliSeconds ) + inline void setMilliSeconds( float ellapsedMilliSeconds ) { - m_elapsedMilliSeconds = (_ellapsedMilliSeconds); + m_elapsedMilliSeconds = ellapsedMilliSeconds; } inline int getTacts() const { @@ -123,14 +122,14 @@ public: // Returns the beat position inside the bar, 0-based inline int getBeat() const { - return (currentTick() - currentTact()*ticksPerTact()) / - (ticksPerTact() / m_timeSigModel.getNumerator() ); + return ( currentTick() - currentTact() * ticksPerTact() ) / + ( ticksPerTact() / m_timeSigModel.getNumerator() ); } // the remainder after bar and beat are removed inline int getBeatTicks() const { - return (currentTick() - currentTact()*ticksPerTact()) % - (ticksPerTact() / m_timeSigModel.getNumerator() ); + return ( currentTick() - currentTact() * ticksPerTact() ) % + ( ticksPerTact() / m_timeSigModel.getNumerator() ); } inline int getTicks() const { @@ -151,7 +150,7 @@ public: inline bool isPlaying() const { - return m_playing && m_exporting == false; + return m_playing == true && m_exporting == false; } inline bool isStopped() const @@ -186,9 +185,9 @@ public: return m_playMode; } - inline playPos & getPlayPos( PlayModes _pm ) + inline PlayPos & getPlayPos( PlayModes pm ) { - return m_playPos[_pm]; + return m_playPos[pm]; } void updateLength(); @@ -208,11 +207,11 @@ public: // file management void createNewProject(); - void createNewProjectFromTemplate( const QString & _template ); - void loadProject( const QString & _filename ); + void createNewProjectFromTemplate( const QString & templ ); + void loadProject( const QString & filename ); bool guiSaveProject(); - bool guiSaveProjectAs( const QString & _filename ); - bool saveProjectFile( const QString & _filename ); + bool guiSaveProjectAs( const QString & filename ); + bool saveProjectFile( const QString & filename ); const QString & projectFileName() const { @@ -239,8 +238,8 @@ public: return false; } - void addController( Controller * _c ); - void removeController( Controller * _c ); + void addController( Controller * c ); + void removeController( Controller * c ); const ControllerVector & controllers() const @@ -259,14 +258,14 @@ public slots: void playSong(); void record(); void playAndRecord(); - void playTrack( Track * _trackToPlay ); + void playTrack( Track * trackToPlay ); void playBB(); - void playPattern(const Pattern* patternToPlay, bool _loop = true ); + void playPattern( const Pattern * patternToPlay, bool loop = true ); void togglePause(); void stop(); void importProject(); - void exportProject(bool multiExport=false); + void exportProject( bool multiExport = false ); void exportProjectTracks(); void startExport(); @@ -315,13 +314,14 @@ private: inline f_cnt_t currentFrame() const { - return m_playPos[m_playMode].getTicks() * Engine::framesPerTick() + m_playPos[m_playMode].currentFrame(); + return m_playPos[m_playMode].getTicks() * Engine::framesPerTick() + + m_playPos[m_playMode].currentFrame(); } - void setPlayPos( tick_t _ticks, PlayModes _play_mode ); + void setPlayPos( tick_t ticks, PlayModes playMode ); - void saveControllerStates( QDomDocument & _doc, QDomElement & _this ); - void restoreControllerStates( const QDomElement & _this ); + void saveControllerStates( QDomDocument & doc, QDomElement & element ); + void restoreControllerStates( const QDomElement & element ); AutomationTrack * m_globalAutomationTrack; @@ -351,7 +351,7 @@ private: QList * m_errors; PlayModes m_playMode; - playPos m_playPos[Mode_Count]; + PlayPos m_playPos[Mode_Count]; tact_t m_length; Track * m_trackToPlay; @@ -374,10 +374,9 @@ signals: void projectLoaded(); void playbackStateChanged(); void playbackPositionChanged(); - void lengthChanged( int _tacts ); - void tempoChanged( bpm_t _new_bpm ); - void timeSignatureChanged( int _old_ticks_per_tact, - int _ticks_per_tact ); + void lengthChanged( int tacts ); + void tempoChanged( bpm_t newBPM ); + void timeSignatureChanged( int oldTicksPerTact, int ticksPerTact ); } ; From 4d6d937cf2809f893478377c28a204b4836a5359 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:14:55 -0200 Subject: [PATCH 167/172] Update Timeline.h --- include/TimeLineWidget.h | 8 ++++---- src/gui/TimeLineWidget.cpp | 20 ++++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/include/TimeLineWidget.h b/include/TimeLineWidget.h index abf622aaf..f8395ec37 100644 --- a/include/TimeLineWidget.h +++ b/include/TimeLineWidget.h @@ -61,11 +61,11 @@ public: } ; - TimeLineWidget( int _xoff, int _yoff, float _ppt, Song::playPos & _pos, - const MidiTime & _begin, QWidget * _parent ); + TimeLineWidget( int xoff, int yoff, float ppt, Song::playPos & pos, + const MidiTime & begin, QWidget * parent ); virtual ~TimeLineWidget(); - inline Song::playPos & pos() + inline Song::PlayPos & pos() { return( m_pos ); } @@ -163,7 +163,7 @@ private: int m_xOffset; int m_posMarkerX; float m_ppt; - Song::playPos & m_pos; + Song::PlayPos & m_pos; const MidiTime & m_begin; MidiTime m_loopPos[2]; diff --git a/src/gui/TimeLineWidget.cpp b/src/gui/TimeLineWidget.cpp index 7de1a9b46..bf5db2ed9 100644 --- a/src/gui/TimeLineWidget.cpp +++ b/src/gui/TimeLineWidget.cpp @@ -53,17 +53,17 @@ QPixmap * TimeLineWidget::s_loopPointEndPixmap = NULL; TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt, Song::playPos & pos, const MidiTime & begin, - QWidget * _parent ) : - QWidget( _parent ), + QWidget * parent ) : + QWidget( parent ), m_autoScroll( AutoScrollEnabled ), m_loopPoints( LoopPointsDisabled ), m_behaviourAtStop( BackToZero ), m_changedPosition( true ), - m_xOffset( _xoff ), + m_xOffset( xoff ), m_posMarkerX( 0 ), - m_ppt( _ppt ), - m_pos( _pos ), - m_begin( _begin ), + m_ppt( ppt ), + m_pos( pos ), + m_begin( begin ), m_savedPos( -1 ), m_hint( NULL ), m_action( NoAction ), @@ -94,17 +94,17 @@ TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt, } setAttribute( Qt::WA_OpaquePaintEvent, true ); - move( 0, _yoff ); + move( 0, yoff ); setFixedHeight( s_timeLinePixmap->height() ); m_xOffset -= s_posMarkerPixmap->width() / 2; m_pos.m_timeLine = this; - QTimer * update_timer = new QTimer( this ); - connect( update_timer, SIGNAL( timeout() ), + QTimer * updateTimer = new QTimer( this ); + connect( updateTimer, SIGNAL( timeout() ), this, SLOT( updatePosition() ) ); - update_timer->start( 50 ); + updateTimer->start( 50 ); } From 9e370ff12151f67ea4799491819af3d5d33dabdb Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:44:48 -0200 Subject: [PATCH 168/172] Update Plugin.cpp --- src/core/Plugin.cpp | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/core/Plugin.cpp b/src/core/Plugin.cpp index abdc44a96..49aa41e25 100644 --- a/src/core/Plugin.cpp +++ b/src/core/Plugin.cpp @@ -38,9 +38,9 @@ #include "Song.h" -static PixmapLoader __dummy_loader; +static PixmapLoader __dummyLoader; -static Plugin::Descriptor dummy_plugin_descriptor = +static Plugin::Descriptor dummyPluginDescriptor = { "dummy", "dummy", @@ -48,21 +48,21 @@ static Plugin::Descriptor dummy_plugin_descriptor = "Tobias Doerffel ", 0x0100, Plugin::Undefined, - &__dummy_loader, + &__dummyLoader, NULL } ; -Plugin::Plugin( const Descriptor * _descriptor, Model * parent ) : +Plugin::Plugin( const Descriptor * descriptor, Model * parent ) : Model( parent ), JournallingObject(), - m_descriptor( _descriptor ) + m_descriptor( descriptor ) { if( m_descriptor == NULL ) { - m_descriptor = &dummy_plugin_descriptor; + m_descriptor = &dummyPluginDescriptor; } } @@ -109,7 +109,7 @@ Plugin * Plugin::instantiate( const QString & pluginName, Model * parent, return new DummyPlugin(); } - InstantiationHook instantiationHook = ( InstantiationHook ) pluginLibrary.resolve( "lmms_plugin_main" ); + InstantiationHook instantiationHook = ( InstantiationHook )pluginLibrary.resolve( "lmms_plugin_main" ); if( instantiationHook == NULL ) { if( Engine::hasGUI() ) @@ -126,13 +126,17 @@ Plugin * Plugin::instantiate( const QString & pluginName, Model * parent, return inst; } -void Plugin::collectErrorForUI( QString err_msg ) + + + +void Plugin::collectErrorForUI( QString errMsg ) { - Engine::getSong()->collectError( err_msg ); + Engine::getSong()->collectError( errMsg ); } + void Plugin::getDescriptorsOfAvailPlugins( DescriptorList& pluginDescriptors ) { QDir directory( ConfigManager::inst()->pluginDir() ); @@ -189,13 +193,13 @@ PluginView * Plugin::createView( QWidget * parent ) -Plugin::Descriptor::SubPluginFeatures::Key::Key( - const QDomElement & _key ) : + +Plugin::Descriptor::SubPluginFeatures::Key::Key( const QDomElement & key ) : desc( NULL ), - name( _key.attribute( "key" ) ), + name( key.attribute( "key" ) ), attributes() { - QDomNodeList l = _key.elementsByTagName( "attribute" ); + QDomNodeList l = key.elementsByTagName( "attribute" ); for( int i = 0; !l.item( i ).isNull(); ++i ) { QDomElement e = l.item( i ).toElement(); @@ -208,13 +212,13 @@ Plugin::Descriptor::SubPluginFeatures::Key::Key( QDomElement Plugin::Descriptor::SubPluginFeatures::Key::saveXML( - QDomDocument & _doc ) const + QDomDocument & doc ) const { - QDomElement e = _doc.createElement( "key" ); - for( AttributeMap::ConstIterator it = attributes.begin(); - it != attributes.end(); ++it ) + QDomElement e = doc.createElement( "key" ); + for( AttributeMap::ConstIterator it = attributes.begin(); + it != attributes.end(); ++it ) { - QDomElement a = _doc.createElement( "attribute" ); + QDomElement a = doc.createElement( "attribute" ); a.setAttribute( "name", it.key() ); a.setAttribute( "value", it.value() ); e.appendChild( a ); @@ -222,3 +226,5 @@ QDomElement Plugin::Descriptor::SubPluginFeatures::Key::saveXML( return e; } + + From 38799f80afd7322cd84bd259fcf4f88396cf9e20 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:46:02 -0200 Subject: [PATCH 169/172] Update Plugin.h --- include/Plugin.h | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/include/Plugin.h b/include/Plugin.h index b73238ab5..5efcf68b7 100644 --- a/include/Plugin.h +++ b/include/Plugin.h @@ -85,19 +85,19 @@ public: { typedef QMap AttributeMap; - inline Key( const Plugin::Descriptor * _desc = NULL, - const QString & _name = QString(), - const AttributeMap & _am = AttributeMap() ) + inline Key( const Plugin::Descriptor * desc = NULL, + const QString & name = QString(), + const AttributeMap & am = AttributeMap() ) : - desc( _desc ), - name( _name ), - attributes( _am ) + desc( desc ), + name( name ), + attributes( am ) { } - Key( const QDomElement & _key ); + Key( const QDomElement & key ); - QDomElement saveXML( QDomDocument & _doc ) const; + QDomElement saveXML( QDomDocument & doc ) const; inline bool isValid() const { @@ -142,13 +142,15 @@ public: typedef QList DescriptorList; // contructor of a plugin - Plugin( const Descriptor* descriptor, Model* parent ); + Plugin( const Descriptor * descriptor, Model * parent ); virtual ~Plugin(); // returns display-name out of descriptor virtual QString displayName() const { - return Model::displayName().isEmpty() ? m_descriptor->displayName : Model::displayName(); + return Model::displayName().isEmpty() + ? m_descriptor->displayName + : Model::displayName(); } // return plugin-type @@ -158,41 +160,41 @@ public: } // return plugin-descriptor for further information - inline const Descriptor* descriptor() const + inline const Descriptor * descriptor() const { return m_descriptor; } // can be called if a file matching supportedFileTypes should be // loaded/processed with the help of this plugin - virtual void loadFile( const QString& file ); + virtual void loadFile( const QString & file ); // Called if external source needs to change something but we cannot // reference the class header. Should return null if not key not found. - virtual AutomatableModel* childModel( const QString& modelName ); + virtual AutomatableModel* childModel( const QString & modelName ); // returns an instance of a plugin whose name matches to given one // if specified plugin couldn't be loaded, it creates a dummy-plugin static Plugin * instantiate( const QString& pluginName, Model * parent, void * data ); // fills given list with descriptors of all available plugins - static void getDescriptorsOfAvailPlugins( DescriptorList& pluginDescriptors ); + static void getDescriptorsOfAvailPlugins( DescriptorList & pluginDescriptors ); // create a view for the model - PluginView * createView( QWidget* parent ); + PluginView * createView( QWidget * parent ); protected: // create a view for the model - virtual PluginView* instantiateView( QWidget* ) = 0; - void collectErrorForUI( QString err_msg ); + virtual PluginView* instantiateView( QWidget * ) = 0; + void collectErrorForUI( QString errMsg ); private: - const Descriptor* m_descriptor; + const Descriptor * m_descriptor; // pointer to instantiation-function in plugin - typedef Plugin * ( * InstantiationHook )( Model*, void* ); + typedef Plugin * ( * InstantiationHook )( Model * , void * ); } ; From 2e7732a7f5fcf6d0fd1242d387b3bc88bc580161 Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:50:26 -0200 Subject: [PATCH 170/172] Update ProjectVersion.h --- include/ProjectVersion.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/include/ProjectVersion.h b/include/ProjectVersion.h index 37cc83565..2148d5d60 100644 --- a/include/ProjectVersion.h +++ b/include/ProjectVersion.h @@ -39,8 +39,8 @@ enum CompareType { Major, Minor, Release, Build }; class ProjectVersion { public: - ProjectVersion(QString version, CompareType c = CompareType::Build); - ProjectVersion(const char * version, CompareType c = CompareType::Build); + ProjectVersion( QString version, CompareType c = CompareType::Build ); + ProjectVersion( const char * version, CompareType c = CompareType::Build ); int getMajor() const { return m_major; } int getMinor() const { return m_minor; } @@ -61,7 +61,6 @@ private: CompareType m_compareType; } ; - /* * ProjectVersion v. ProjectVersion */ From a34faeca712fa04238cac283cf884ad31e77b74f Mon Sep 17 00:00:00 2001 From: Alexandre Almeida Date: Wed, 7 Jan 2015 21:50:57 -0200 Subject: [PATCH 171/172] Update ProjectVersion.cpp --- src/core/ProjectVersion.cpp | 41 ++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 19 deletions(-) diff --git a/src/core/ProjectVersion.cpp b/src/core/ProjectVersion.cpp index 7fc602c67..d1347bc79 100644 --- a/src/core/ProjectVersion.cpp +++ b/src/core/ProjectVersion.cpp @@ -53,60 +53,63 @@ ProjectVersion::ProjectVersion(QString version, CompareType c) : { } -ProjectVersion::ProjectVersion(const char* version, CompareType c) : - m_version(QString(version)), - m_major(parseMajor(m_version)), - m_minor(parseMinor(m_version)), - m_release(parseRelease(m_version)) , - m_build(parseBuild(m_version)), - m_compareType(c) +ProjectVersion::ProjectVersion( const char* version, CompareType c ) : + m_version( QString( version ) ), + m_major(parseMajor( m_version ) ), + m_minor(parseMinor( m_version ) ), + m_release(parseRelease( m_version ) ), + m_build(parseBuild( m_version ) ), + m_compareType( c ) { } -int ProjectVersion::compare(const ProjectVersion& a, const ProjectVersion& b, CompareType c) +int ProjectVersion::compare( const ProjectVersion & a, const ProjectVersion & b, CompareType c ) { - if (a.getMajor() != b.getMajor()) + if( a.getMajor() != b.getMajor() ) { return a.getMajor() - b.getMajor(); } - else if (c == CompareType::Major) + else if( c == CompareType::Major ) { return 0; } - if (a.getMinor() != b.getMinor()) + if( a.getMinor() != b.getMinor() ) { return a.getMinor() - b.getMinor(); } - else if (c == CompareType::Minor) + else if( c == CompareType::Minor ) { return 0; } - if (a.getRelease() != b.getRelease()) + if( a.getRelease() != b.getRelease() ) { return a.getRelease() - b.getRelease(); } - else if (c == CompareType::Release) + else if( c == CompareType::Release ) { return 0; } // make sure 0.x.y > 0.x.y-patch - if(a.getBuild().isEmpty()) + if( a.getBuild().isEmpty() ) { return 1; } - if(b.getBuild().isEmpty()) + if( b.getBuild().isEmpty() ) { return -1; } - return QString::compare(a.getBuild(), b.getBuild()); + return QString::compare( a.getBuild(), b.getBuild() ); } -int ProjectVersion::compare(ProjectVersion v1, ProjectVersion v2) +int ProjectVersion::compare( ProjectVersion v1, ProjectVersion v2 ) { - return compare(v1, v2, std::min(v1.getCompareType(), v2.getCompareType())); + return compare( v1, v2, std::min( v1.getCompareType(), v2.getCompareType() ) ); } + + + From 2834bd17f4d1681bdcadf44e1b46b935cb673c71 Mon Sep 17 00:00:00 2001 From: Alexandre Date: Tue, 20 Jan 2015 00:00:58 -0200 Subject: [PATCH 172/172] Coding conventions update --- include/TimeLineWidget.h | 2 +- include/Track.h | 4 ---- src/core/Track.cpp | 28 +++------------------------- src/gui/TimeLineWidget.cpp | 2 +- 4 files changed, 5 insertions(+), 31 deletions(-) diff --git a/include/TimeLineWidget.h b/include/TimeLineWidget.h index f8395ec37..417ceb530 100644 --- a/include/TimeLineWidget.h +++ b/include/TimeLineWidget.h @@ -61,7 +61,7 @@ public: } ; - TimeLineWidget( int xoff, int yoff, float ppt, Song::playPos & pos, + TimeLineWidget( int xoff, int yoff, float ppt, Song::PlayPos & pos, const MidiTime & begin, QWidget * parent ); virtual ~TimeLineWidget(); diff --git a/include/Track.h b/include/Track.h index 4d4b221fc..227abf135 100644 --- a/include/Track.h +++ b/include/Track.h @@ -228,10 +228,6 @@ protected: virtual void mouseMoveEvent( QMouseEvent * me ); virtual void mouseReleaseEvent( QMouseEvent * me ); -<<<<<<< HEAD -======= - void setAutoResizeEnabled( bool e = false ); ->>>>>>> Update coding conventions float pixelsPerTact(); inline TrackView * getTrackView() diff --git a/src/core/Track.cpp b/src/core/Track.cpp index 1c64531a8..dd003a6f2 100644 --- a/src/core/Track.cpp +++ b/src/core/Track.cpp @@ -958,22 +958,6 @@ float TrackContentObjectView::pixelsPerTact() -<<<<<<< HEAD -======= -/*! \brief Set whether this trackContentObjectView can resize. - * - * \param e The boolean state of whether this track content object view - * is allowed to resize. - */ -void TrackContentObjectView::setAutoResizeEnabled( bool e ) -{ - m_autoResize = e; -} - - - - ->>>>>>> Update coding conventions /*! \brief Detect whether the mouse moved more than n pixels on screen. * * \param _me The QMouseEvent. @@ -1780,12 +1764,11 @@ void TrackOperationsWidget::updateMenu() } if( InstrumentTrackView * trackView = dynamic_cast( m_trackView ) ) { -<<<<<<< HEAD int channelIndex = trackView->model()->effectChannelModel()->value(); FxChannel * fxChannel = Engine::fxMixer()->effectChannel( channelIndex ); - QMenu * fxMenu = new QMenu( tr( "FX %1: %2" ).arg( channelIndex ).arg( fxChannel->m_name ), to_menu ); + QMenu * fxMenu = new QMenu( tr( "FX %1: %2" ).arg( channelIndex ).arg( fxChannel->m_name ), toMenu ); QSignalMapper * fxMenuSignalMapper = new QSignalMapper(this); fxMenu->addAction("Assign to new FX Channel" , this, SLOT( createFxLine() ) ); @@ -1804,16 +1787,11 @@ void TrackOperationsWidget::updateMenu() } } - to_menu->addMenu(fxMenu); + toMenu->addMenu(fxMenu); connect(fxMenuSignalMapper, SIGNAL(mapped(int)), this, SLOT(assignFxLine(int))); - to_menu->addSeparator(); - to_menu->addMenu( trackView->midiMenu() ); -======= toMenu->addSeparator(); - toMenu->addMenu( dynamic_cast( - m_trackView )->midiMenu() ); ->>>>>>> Update coding conventions + toMenu->addMenu( trackView->midiMenu() ); } if( dynamic_cast( m_trackView ) ) { diff --git a/src/gui/TimeLineWidget.cpp b/src/gui/TimeLineWidget.cpp index bf5db2ed9..953a9cd0b 100644 --- a/src/gui/TimeLineWidget.cpp +++ b/src/gui/TimeLineWidget.cpp @@ -52,7 +52,7 @@ QPixmap * TimeLineWidget::s_loopPointBeginPixmap = NULL; QPixmap * TimeLineWidget::s_loopPointEndPixmap = NULL; TimeLineWidget::TimeLineWidget( const int xoff, const int yoff, const float ppt, - Song::playPos & pos, const MidiTime & begin, + Song::PlayPos & pos, const MidiTime & begin, QWidget * parent ) : QWidget( parent ), m_autoScroll( AutoScrollEnabled ),