Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
7e55bfb
Extend LMMS note range to match MIDI specification (fixes #1857)
he29-net Dec 17, 2019
67fc3a6
Update src/core/midi/MidiClient.cpp
he29-net Dec 19, 2019
8319133
Apply suggestions from code review
he29-net Dec 19, 2019
3dea4b9
Formatting changes
he29-net Dec 19, 2019
9dc7985
Remove useless Note.h includes, fix basenote and octave offsets in Hy…
he29-net Dec 19, 2019
1e35331
Migrate all presets to new basenote; remove offset from OpulenZ
he29-net Dec 20, 2019
d5b94f8
Implement upgrade routine for affected instruments; replace c-style c…
he29-net Dec 20, 2019
a2aebb5
WIP, initial GUI mockup
he29-net Dec 21, 2019
8aea594
Basic Microtuner skeleton; implement note boundary settings and checks
he29-net Dec 23, 2019
f499328
Draw disabled PianoView keys with lower contrast; WIP the same for Pi…
he29-net Dec 23, 2019
4778b8e
Finish range grey-out for PianoRoll after rebase
he29-net Dec 24, 2019
0255e6d
Checkpoint before nuking the in-instrument scale setup widgets
he29-net Dec 25, 2019
bc61c89
Erradicate BaseFreq, get a basic frequency retuning working.
he29-net Dec 25, 2019
d979313
WIP, repo sync
he29-net Dec 28, 2019
36dcb3e
Checkpoint before nuking WIP interpolating note detune
he29-net Jan 4, 2020
3906d6d
Key to frequency translation working, native instruments can use pre-…
he29-net Jan 4, 2020
2c95fbe
Remove scale / keymap editor from instrument window; add a project-wi…
he29-net May 8, 2020
d692376
WIP before potentially nuking the LUT approach; working Scale→freq ta…
he29-net May 10, 2020
418174e
Moved from LUT approach to on-demand frequency calculation, added bas…
he29-net May 19, 2020
d668090
Keyboard mapping probably kinda working
he29-net May 24, 2020
233d37e
Validation of user entered scale and keymap data
he29-net May 24, 2020
52f066a
Draft of LcdFloatSpinBox; range spinboxes connected to dummy models
he29-net May 25, 2020
d5eb119
Finish LcdFloatSpinBox
he29-net May 26, 2020
f5a5d6b
Scale and keymap storage migrated to shared_ptr; changes from config …
he29-net May 28, 2020
39d12a3
Update scale and keymap lists in clients when an element is changed
he29-net May 29, 2020
ca96392
Mostly GUI tweaks
he29-net May 29, 2020
847ac55
Implement save / load functionality; various other small fixes and ch…
he29-net May 31, 2020
1fac892
Add a few scales and mappings to the default template; update drawing…
he29-net May 31, 2020
fa2483a
Add missing <memory> include
he29-net May 31, 2020
5217dcf
Implement .scl and .kbm save and load functionality
he29-net Jun 5, 2020
b55dbe5
Allow empty keymap, treat it as "all keys, 1:1"
he29-net Jun 6, 2020
2bfd2ed
Propagate keymap updates to PianoRoll and PianoView; fix segfault in …
he29-net Jun 6, 2020
2b51902
GUI tweaks (don't show microtuner options for MIDI-based instruments;…
he29-net Jun 6, 2020
afd06b3
Cleanup pass (code style, dead / debug code, old comments, ..)
he29-net Jun 6, 2020
ef13dc9
Apply suggestions from code review
he29-net Jun 7, 2020
0cbeec1
Change formatting of the Keymap constructor
he29-net Jun 14, 2020
e958de9
Add an explicit QPainterPath include since MacOS suddenly does not bu…
he29-net Jun 14, 2020
b931977
Merge remote-tracking branch 'upstream/master' into microtonal
he29-net Jul 25, 2020
4951321
Merge remote-tracking branch 'upstream/master' into microtonal
he29-net Oct 17, 2020
22e6ed6
Bug fixes after the merge
he29-net Oct 17, 2020
750a547
Fix font metric margin addition
he29-net Oct 19, 2020
a9f7930
Formatting and NULL → nullptr changes from suggestions
he29-net Oct 19, 2020
be82613
Update formatting in src/tracks/InstrumentTrack.cpp
he29-net Oct 19, 2020
7598334
Merge branch 'master' into microtonal
he29-net Oct 19, 2020
0176e99
Update formatting in src/gui/editors/PianoRoll.cpp
he29-net Oct 20, 2020
e714cee
Update formatting in PianoRoll.cpp
he29-net Oct 20, 2020
0009986
Fix octave wrapping for empty scale, remove dead code
he29-net Oct 24, 2020
8077547
Fix note descriptions in Xpressive; request change in model before re…
he29-net Nov 13, 2020
6e03859
Apply suggestions from code review
he29-net Nov 13, 2020
7a5375d
Batch of simple changes suggested in review
he29-net Nov 13, 2020
dd566f5
Batch of fixes and tweaks
he29-net Nov 15, 2020
68f36d7
Apply suggestions from code review
he29-net Nov 15, 2020
b0c5e70
PianoView tweaks
he29-net Nov 15, 2020
ff463a4
Fix Hydrogen import, rewrite upgrade routine
he29-net Nov 26, 2020
b504a6b
Merge branch 'master' into microtonal
he29-net Dec 1, 2020
b606900
Fix merge error
he29-net Dec 1, 2020
6af2964
Oopsie
he29-net Dec 5, 2020
89c2cd4
Merge branch 'master' into microtonal
he29-net Dec 5, 2020
d961a3e
Changes from review (comment update, range based loop, lv2instrument)
he29-net Dec 11, 2020
be245cc
Merge branch 'master' into microtonal
he29-net Dec 11, 2020
1d0b82c
Fix the upgrade routine
he29-net Dec 13, 2020
97470ce
Batch of implemented suggestions from review
he29-net Dec 25, 2020
49176ad
Refactor Scale class (constructors + ratio caching)
he29-net Dec 26, 2020
5f2ab6b
Pass QStrings and vectors in Keymap and Scale using references, remov…
he29-net Dec 28, 2020
c83281e
More accurate PianoView scrolling; fix velocity from height; move bla…
he29-net Dec 28, 2020
18d4a8d
Merge enabled() condition into keyRangeImport(); add missing update t…
he29-net Dec 28, 2020
58be1b6
Remove deprecated bitmaps
he29-net Dec 28, 2020
7d18486
Separate LcdFloatSpinBox to another PR (step 1)
he29-net Dec 28, 2020
9af416b
Separate LcdFloatSpinBox to another PR (step 2)
he29-net Dec 28, 2020
3fcf65b
Merge remote-tracking branch 'upstream/master' into microtonal
he29-net Mar 15, 2021
29c92d8
Replace the placeholder base frequency knob with LcdFloatSpinBox
he29-net Mar 16, 2021
4032005
Merge remote-tracking branch 'upstream/master' into microtonal
he29-net Apr 23, 2021
05f82cf
Cherry pick and modify "The Great Purge (and a modified preset upgrad…
he29-net Apr 23, 2021
2a42b83
Fix kicker basenote in default template; small formatting changes
he29-net Apr 24, 2021
9dcf2ad
Apply suggestions from code review
he29-net Jun 15, 2021
41650d7
Make Microtuner Config window resizable; do not save unnecessary inte…
Jun 15, 2021
8b4ca5b
Move some functions from Microtuner to InstrumentTrack, remove Instru…
he29-net Jun 18, 2021
c0f80f1
Fix forgotten microtuner calls in sfxr and AFP
he29-net Jun 19, 2021
c7024dc
Revert "Pass QStrings and vectors in Keymap and Scale using reference…
he29-net Jul 1, 2021
fe44d15
Revert reverted piece of Keymap.h formatting
he29-net Jul 1, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 163 additions & 0 deletions data/projects/templates/default.mpt
Original file line number Diff line number Diff line change
Expand Up @@ -81,5 +81,168 @@
<projectnotes width="640" x="700" y="10" maximized="0" height="400" visible="0" minimized="0"></projectnotes>
<timeline lp1pos="192" lp0pos="0" lpstate="0"/>
<controllers/>
<scales>
<scale description="12-tone EDO (default)">
<interval num="1" den="1"/>
<interval cents="100"/>
<interval cents="200"/>
<interval cents="300"/>
<interval cents="400"/>
<interval cents="500"/>
<interval cents="600"/>
<interval cents="700"/>
<interval cents="800"/>
<interval cents="900"/>
<interval cents="1000"/>
<interval cents="1100"/>
<interval num="2" den="1"/>
</scale>
<scale description="24-tone EDO">
<interval num="1" den="1"/>
<interval cents="50"/>
<interval cents="100"/>
<interval cents="150"/>
<interval cents="200"/>
<interval cents="250"/>
<interval cents="300"/>
<interval cents="350"/>
<interval cents="400"/>
<interval cents="450"/>
<interval cents="500"/>
<interval cents="550"/>
<interval cents="600"/>
<interval cents="650"/>
<interval cents="700"/>
<interval cents="750"/>
<interval cents="800"/>
<interval cents="850"/>
<interval cents="900"/>
<interval cents="950"/>
<interval cents="1000"/>
<interval cents="1050"/>
<interval cents="1100"/>
<interval cents="1150"/>
<interval num="2" den="1"/>
</scale>
<scale description="7-tone JI C-major (Ptolemaic)">
<interval num="1" den="1"/>
<interval num="9" den="8"/>
<interval num="5" den="4"/>
<interval num="4" den="3"/>
<interval num="3" den="2"/>
<interval num="5" den="3"/>
<interval num="15" den="8"/>
<interval num="2" den="1"/>
</scale>
<scale description="12-tone JI (3-limit / Pythagorean)">
<interval num="1" den="1"/>
<interval num="256" den="243"/>
<interval num="9" den="8"/>
<interval num="32" den="27"/>
<interval num="81" den="64"/>
<interval num="4" den="3"/>
<interval num="729" den="512"/>
<interval num="3" den="2"/>
<interval num="128" den="81"/>
<interval num="27" den="16"/>
<interval num="16" den="9"/>
<interval num="243" den="128"/>
<interval num="2" den="1"/>
</scale>
<scale description="5-tone A-minor (3-limit / Pythagorean)">
<interval num="1" den="1"/>
<interval num="32" den="27"/>
<interval num="4" den="3"/>
<interval num="3" den="2"/>
<interval num="16" den="9"/>
<interval num="2" den="1"/>
</scale>
</scales>
<keymaps>
<keymap middle_key="0" description="all keys 1:1 (default)" base_freq="440" last_key="127" first_key="0" base_key="69">
</keymap>
<keymap middle_key="60" description="white keys to 7 degrees" base_freq="440" last_key="127" first_key="0" base_key="69">
<degree value="0"/>
<degree value="-1"/>
<degree value="1"/>
<degree value="-1"/>
<degree value="2"/>
<degree value="3"/>
<degree value="-1"/>
<degree value="4"/>
<degree value="-1"/>
<degree value="5"/>
<degree value="-1"/>
<degree value="6"/>
</keymap>
<keymap middle_key="60" description="white keys to 12 degrees" base_freq="440" last_key="127" first_key="0" base_key="69">
<degree value="0"/>
<degree value="-1"/>
<degree value="2"/>
<degree value="-1"/>
<degree value="4"/>
<degree value="5"/>
<degree value="-1"/>
<degree value="7"/>
<degree value="-1"/>
<degree value="9"/>
<degree value="-1"/>
<degree value="11"/>
</keymap>
<keymap middle_key="60" description="white keys to 24 degrees" base_freq="440" last_key="127" first_key="0" base_key="69">
<degree value="0"/>
<degree value="-1"/>
<degree value="2"/>
<degree value="-1"/>
<degree value="4"/>
<degree value="5"/>
<degree value="-1"/>
<degree value="7"/>
<degree value="-1"/>
<degree value="9"/>
<degree value="-1"/>
<degree value="11"/>
<degree value="12"/>
<degree value="-1"/>
<degree value="14"/>
<degree value="-1"/>
<degree value="16"/>
<degree value="17"/>
<degree value="-1"/>
<degree value="19"/>
<degree value="-1"/>
<degree value="21"/>
<degree value="-1"/>
<degree value="23"/>
</keymap>
<keymap middle_key="60" description="black keys to 5 degrees" base_freq="440" last_key="127" first_key="0" base_key="61">
<degree value="-1"/>
<degree value="0"/>
<degree value="-1"/>
<degree value="1"/>
<degree value="-1"/>
<degree value="-1"/>
<degree value="2"/>
<degree value="-1"/>
<degree value="3"/>
<degree value="-1"/>
<degree value="4"/>
<degree value="-1"/>
</keymap>
<keymap middle_key="60" description="black keys to 12 degrees" base_freq="466.165" last_key="127" first_key="0" base_key="70">
<degree value="-1"/>
<degree value="1"/>
<degree value="-1"/>
<degree value="3"/>
<degree value="-1"/>
<degree value="-1"/>
<degree value="6"/>
<degree value="-1"/>
<degree value="8"/>
<degree value="-1"/>
<degree value="10"/>
<degree value="-1"/>
</keymap>
</keymaps>
</song>
</lmms-project>
Binary file added data/themes/classic/lcd_19green_dot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/classic/lcd_19pink_dot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/classic/lcd_19red_dot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/classic/microtuner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/lcd_19green_dot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/lcd_19pink_dot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/lcd_19red_dot.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added data/themes/default/microtuner.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions include/ComboBoxModel.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
#ifndef COMBOBOX_MODEL_H
#define COMBOBOX_MODEL_H

#include <cassert>
#include <memory>
#include <utility>
#include <vector>
Expand Down Expand Up @@ -52,6 +53,8 @@ class LMMS_EXPORT ComboBoxModel : public IntModel

void addItem( QString item, std::unique_ptr<PixmapLoader> loader = nullptr );

void replaceItem(std::size_t index, QString item, std::unique_ptr<PixmapLoader> loader = nullptr);

void clear();

int findText( const QString& txt ) const;
Expand Down
3 changes: 3 additions & 0 deletions include/GuiApplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ class BBEditor;
class ControllerRackView;
class FxMixerView;
class MainWindow;
class MicrotunerConfig;
class PianoRollWindow;
class ProjectNotes;
class SongEditorWindow;
Expand All @@ -59,6 +60,7 @@ class LMMS_EXPORT GuiApplication : public QObject
BBEditor* getBBEditor() { return m_bbEditor; }
PianoRollWindow* pianoRoll() { return m_pianoRoll; }
ProjectNotes* getProjectNotes() { return m_projectNotes; }
MicrotunerConfig* getMicrotunerConfig() { return m_microtunerConfig; }
AutomationEditorWindow* automationEditor() { return m_automationEditor; }
ControllerRackView* getControllerRackView() { return m_controllerRackView; }

Expand All @@ -78,6 +80,7 @@ private slots:
BBEditor* m_bbEditor;
PianoRollWindow* m_pianoRoll;
ProjectNotes* m_projectNotes;
MicrotunerConfig* m_microtunerConfig;
ControllerRackView* m_controllerRackView;
QLabel* m_loadingProgressLabel;
};
Expand Down
18 changes: 0 additions & 18 deletions include/InstrumentMidiIOView.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,22 +65,4 @@ class InstrumentMidiIOView : public QWidget, public ModelView

} ;

class InstrumentMiscView : public QWidget
{
Q_OBJECT
public:
InstrumentMiscView( InstrumentTrack *it, QWidget* parent );
~InstrumentMiscView();

GroupBox * pitchGroupBox()
{
return m_pitchGroupBox;
}

private:

GroupBox * m_pitchGroupBox;

};

#endif
63 changes: 63 additions & 0 deletions include/InstrumentMiscView.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* InstrumentMiscView.h - widget in instrument-track-window for setting up
* miscellaneous options not covered by other tabs
*
* Copyright (c) 2005-2014 Tobias Doerffel <tobydox/at/users.sourceforge.net>
* Copyright (c) 2020 Martin Pavelek <he29.HS/at/gmail.com>
*
* This file is part of LMMS - https://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 INSTRUMENT_MISC_VIEW_H
#define INSTRUMENT_MISC_VIEW_H

#include <QWidget>


class ComboBox;
class GroupBox;
class InstrumentTrack;
class LedCheckBox;


class InstrumentMiscView : public QWidget
{
Q_OBJECT
public:
InstrumentMiscView(InstrumentTrack *it, QWidget *parent);

GroupBox *pitchGroupBox() {return m_pitchGroupBox;}
GroupBox *microtunerGroupBox() {return m_microtunerGroupBox;}

ComboBox *scaleCombo() {return m_scaleCombo;}
ComboBox *keymapCombo() {return m_keymapCombo;}

LedCheckBox *rangeImportCheckbox() {return m_rangeImportCheckbox;}

private:
GroupBox *m_pitchGroupBox;
GroupBox *m_microtunerGroupBox;

ComboBox *m_scaleCombo;
ComboBox *m_keymapCombo;

LedCheckBox *m_rangeImportCheckbox;
};

#endif
13 changes: 12 additions & 1 deletion include/InstrumentTrack.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include "GroupBox.h"
#include "InstrumentFunctions.h"
#include "InstrumentSoundShaping.h"
#include "Microtuner.h"
#include "Midi.h"
#include "MidiCCRackView.h"
#include "MidiEventProcessor.h"
Expand Down Expand Up @@ -184,15 +185,23 @@ class LMMS_EXPORT InstrumentTrack : public Track, public MidiEventProcessor
return &m_lastKeyModel;
}

int baseNote() const;
bool keyRangeImport() const;
bool isKeyMapped(int key) const;
int firstKey() const;
int lastKey() const;
int baseNote() const;
float baseFreq() const;

Piano *pianoModel()
{
return &m_piano;
}

Microtuner *microtuner()
{
return &m_microtuner;
}

bool isArpeggioEnabled() const
{
return m_arpeggio.m_arpEnabledModel.value();
Expand Down Expand Up @@ -303,6 +312,8 @@ protected slots:

Piano m_piano;

Microtuner m_microtuner;

std::unique_ptr<BoolModel> m_midiCCEnable;
std::unique_ptr<FloatModel> m_midiCCModel[MidiControllerCount];

Expand Down
Loading