diff --git a/data/presets/LB302/AcidLead.xpf b/data/presets/LB302/AcidLead.xpf
new file mode 100644
index 000000000..e264f9573
--- /dev/null
+++ b/data/presets/LB302/AcidLead.xpf
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/LB302/AngryLead.xpf b/data/presets/LB302/AngryLead.xpf
new file mode 100644
index 000000000..9d9955895
--- /dev/null
+++ b/data/presets/LB302/AngryLead.xpf
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/LB302/DroneArp.xpf b/data/presets/LB302/DroneArp.xpf
new file mode 100644
index 000000000..93b65595b
--- /dev/null
+++ b/data/presets/LB302/DroneArp.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/Monstro/Phat.xpf b/data/presets/Monstro/Phat.xpf
new file mode 100644
index 000000000..5615f0229
--- /dev/null
+++ b/data/presets/Monstro/Phat.xpf
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/Organic/Pwnage.xpf b/data/presets/Organic/Pwnage.xpf
new file mode 100644
index 000000000..51401f5d6
--- /dev/null
+++ b/data/presets/Organic/Pwnage.xpf
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/Organic/Rubberband.xpf b/data/presets/Organic/Rubberband.xpf
new file mode 100644
index 000000000..1dd0a1941
--- /dev/null
+++ b/data/presets/Organic/Rubberband.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/SID/Bass.xpf b/data/presets/SID/Bass.xpf
new file mode 100644
index 000000000..c5f605c8f
--- /dev/null
+++ b/data/presets/SID/Bass.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/SID/CheesyGuitar.xpf b/data/presets/SID/CheesyGuitar.xpf
new file mode 100644
index 000000000..756e14afc
--- /dev/null
+++ b/data/presets/SID/CheesyGuitar.xpf
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/SID/Lead.xpf b/data/presets/SID/Lead.xpf
new file mode 100644
index 000000000..be81b2948
--- /dev/null
+++ b/data/presets/SID/Lead.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/SID/MadMind.xpf b/data/presets/SID/MadMind.xpf
new file mode 100644
index 000000000..5375d5b00
--- /dev/null
+++ b/data/presets/SID/MadMind.xpf
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/SID/Overdrive.xpf b/data/presets/SID/Overdrive.xpf
new file mode 100644
index 000000000..ef4b51a90
--- /dev/null
+++ b/data/presets/SID/Overdrive.xpf
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/SID/Pad.xpf b/data/presets/SID/Pad.xpf
new file mode 100644
index 000000000..2a03b3f43
--- /dev/null
+++ b/data/presets/SID/Pad.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/AmazingBubbles.xpf b/data/presets/TripleOscillator/AmazingBubbles.xpf
index b0dad2024..d06bd61ca 100644
--- a/data/presets/TripleOscillator/AmazingBubbles.xpf
+++ b/data/presets/TripleOscillator/AmazingBubbles.xpf
@@ -1,19 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/AnalogBell.xpf b/data/presets/TripleOscillator/AnalogBell.xpf
new file mode 100644
index 000000000..18f4d2baa
--- /dev/null
+++ b/data/presets/TripleOscillator/AnalogBell.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/AnalogDreamz.xpf b/data/presets/TripleOscillator/AnalogDreamz.xpf
index 84d4e0af5..0af114cb9 100644
--- a/data/presets/TripleOscillator/AnalogDreamz.xpf
+++ b/data/presets/TripleOscillator/AnalogDreamz.xpf
@@ -1,19 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/AnalogTimes.xpf b/data/presets/TripleOscillator/AnalogTimes.xpf
index f2a59e0d6..0717947ed 100644
--- a/data/presets/TripleOscillator/AnalogTimes.xpf
+++ b/data/presets/TripleOscillator/AnalogTimes.xpf
@@ -1,19 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/AnalogTimes2.xpf b/data/presets/TripleOscillator/AnalogTimes2.xpf
deleted file mode 100644
index 6c8b73910..000000000
--- a/data/presets/TripleOscillator/AnalogTimes2.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Analogous.xpf b/data/presets/TripleOscillator/Analogous.xpf
index 200820acc..ec5c61a60 100644
--- a/data/presets/TripleOscillator/Analogous.xpf
+++ b/data/presets/TripleOscillator/Analogous.xpf
@@ -1,19 +1,21 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/ArpKing.xpf b/data/presets/TripleOscillator/ArpKing.xpf
deleted file mode 100644
index af1b28958..000000000
--- a/data/presets/TripleOscillator/ArpKing.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Arpeggio_2.xpf b/data/presets/TripleOscillator/Arpeggio.xpf
similarity index 100%
rename from data/presets/TripleOscillator/Arpeggio_2.xpf
rename to data/presets/TripleOscillator/Arpeggio.xpf
diff --git a/data/presets/TripleOscillator/ArpeggioPing.xpf b/data/presets/TripleOscillator/ArpeggioPing.xpf
new file mode 100644
index 000000000..5da4c30d8
--- /dev/null
+++ b/data/presets/TripleOscillator/ArpeggioPing.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Arpeggio_1.xpf b/data/presets/TripleOscillator/Arpeggio_1.xpf
deleted file mode 100644
index 0b5f888be..000000000
--- a/data/presets/TripleOscillator/Arpeggio_1.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Bell.xpf b/data/presets/TripleOscillator/Bell.xpf
index e3d7d7bbe..1d7044980 100644
--- a/data/presets/TripleOscillator/Bell.xpf
+++ b/data/presets/TripleOscillator/Bell.xpf
@@ -1,19 +1,34 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/BellArp.xpf b/data/presets/TripleOscillator/BellArp.xpf
new file mode 100644
index 000000000..63f4edb06
--- /dev/null
+++ b/data/presets/TripleOscillator/BellArp.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Bell_2.xpf b/data/presets/TripleOscillator/Bell_2.xpf
deleted file mode 100644
index 22d326648..000000000
--- a/data/presets/TripleOscillator/Bell_2.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/BlandModBass.xpf b/data/presets/TripleOscillator/BlandModBass.xpf
new file mode 100644
index 000000000..3160bd097
--- /dev/null
+++ b/data/presets/TripleOscillator/BlandModBass.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/BrokenToy.xpf b/data/presets/TripleOscillator/BrokenToy.xpf
new file mode 100644
index 000000000..ed0ac370e
--- /dev/null
+++ b/data/presets/TripleOscillator/BrokenToy.xpf
@@ -0,0 +1,50 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/CryingPads.xpf b/data/presets/TripleOscillator/CryingPads.xpf
new file mode 100644
index 000000000..441dce3c7
--- /dev/null
+++ b/data/presets/TripleOscillator/CryingPads.xpf
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/DeathBass.xpf b/data/presets/TripleOscillator/DeathBass.xpf
deleted file mode 100644
index 1315983a0..000000000
--- a/data/presets/TripleOscillator/DeathBass.xpf
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/DetunedGhost.xpf b/data/presets/TripleOscillator/DetunedGhost.xpf
new file mode 100644
index 000000000..4f180b6e3
--- /dev/null
+++ b/data/presets/TripleOscillator/DetunedGhost.xpf
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/DirtyReece.xpf b/data/presets/TripleOscillator/DirtyReece.xpf
new file mode 100644
index 000000000..d574c7299
--- /dev/null
+++ b/data/presets/TripleOscillator/DirtyReece.xpf
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Distorted-FM-Bass.xpf b/data/presets/TripleOscillator/Distorted-FM-Bass.xpf
deleted file mode 100644
index 36260145e..000000000
--- a/data/presets/TripleOscillator/Distorted-FM-Bass.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/DistortedPMBass.xpf b/data/presets/TripleOscillator/DistortedPMBass.xpf
new file mode 100644
index 000000000..970235507
--- /dev/null
+++ b/data/presets/TripleOscillator/DistortedPMBass.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Drums_HardKick.xpf b/data/presets/TripleOscillator/Drums_HardKick.xpf
new file mode 100644
index 000000000..64bd31949
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_HardKick.xpf
@@ -0,0 +1,108 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Drums_HihatC.xpf b/data/presets/TripleOscillator/Drums_HihatC.xpf
new file mode 100644
index 000000000..3b4dd5735
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_HihatC.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Drums_HihatO.xpf b/data/presets/TripleOscillator/Drums_HihatO.xpf
new file mode 100644
index 000000000..19258c57a
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_HihatO.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Drums_Kick.xpf b/data/presets/TripleOscillator/Drums_Kick.xpf
new file mode 100644
index 000000000..d18e0ed17
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_Kick.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Drums_Snare.xpf b/data/presets/TripleOscillator/Drums_Snare.xpf
new file mode 100644
index 000000000..50731bf56
--- /dev/null
+++ b/data/presets/TripleOscillator/Drums_Snare.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Dull-Bell-Arp.xpf b/data/presets/TripleOscillator/Dull-Bell-Arp.xpf
deleted file mode 100644
index bf9593286..000000000
--- a/data/presets/TripleOscillator/Dull-Bell-Arp.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/DullBell.xpf b/data/presets/TripleOscillator/DullBell.xpf
new file mode 100644
index 000000000..549689e4e
--- /dev/null
+++ b/data/presets/TripleOscillator/DullBell.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/ElectricOboe.xpf b/data/presets/TripleOscillator/ElectricOboe.xpf
new file mode 100644
index 000000000..a68b66bbb
--- /dev/null
+++ b/data/presets/TripleOscillator/ElectricOboe.xpf
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Fat-FMish-Bells.xpf b/data/presets/TripleOscillator/Fat-FMish-Bells.xpf
deleted file mode 100644
index 5d0797c6f..000000000
--- a/data/presets/TripleOscillator/Fat-FMish-Bells.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Fat-TB303-Arp.xpf b/data/presets/TripleOscillator/Fat-TB303-Arp.xpf
deleted file mode 100644
index 0ed09990b..000000000
--- a/data/presets/TripleOscillator/Fat-TB303-Arp.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Fat.xpf b/data/presets/TripleOscillator/Fat.xpf
deleted file mode 100644
index af22b06dc..000000000
--- a/data/presets/TripleOscillator/Fat.xpf
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/FatCheese.xpf b/data/presets/TripleOscillator/FatCheese.xpf
index 4f3d12a68..748b4dfe3 100644
--- a/data/presets/TripleOscillator/FatCheese.xpf
+++ b/data/presets/TripleOscillator/FatCheese.xpf
@@ -1,17 +1,21 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/FatPMArp.xpf b/data/presets/TripleOscillator/FatPMArp.xpf
new file mode 100644
index 000000000..ad11a8952
--- /dev/null
+++ b/data/presets/TripleOscillator/FatPMArp.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/FatTB303Arp.xpf b/data/presets/TripleOscillator/FatTB303Arp.xpf
new file mode 100644
index 000000000..33bb2d8f6
--- /dev/null
+++ b/data/presets/TripleOscillator/FatTB303Arp.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Freaky-Bass.xpf b/data/presets/TripleOscillator/Freaky-Bass.xpf
index 9930927f1..9368fcad5 100644
--- a/data/presets/TripleOscillator/Freaky-Bass.xpf
+++ b/data/presets/TripleOscillator/Freaky-Bass.xpf
@@ -1,19 +1,18 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
diff --git a/data/presets/TripleOscillator/FutureBass.xpf b/data/presets/TripleOscillator/FutureBass.xpf
index ca61efc6e..84f4541e0 100644
--- a/data/presets/TripleOscillator/FutureBass.xpf
+++ b/data/presets/TripleOscillator/FutureBass.xpf
@@ -1,18 +1,21 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/FuzzyAnalogBass.xpf b/data/presets/TripleOscillator/FuzzyAnalogBass.xpf
new file mode 100644
index 000000000..78b176dfd
--- /dev/null
+++ b/data/presets/TripleOscillator/FuzzyAnalogBass.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Garfunkel.xpf b/data/presets/TripleOscillator/Garfunkel.xpf
new file mode 100644
index 000000000..d2f66d1fe
--- /dev/null
+++ b/data/presets/TripleOscillator/Garfunkel.xpf
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/GhostBoy.xpf b/data/presets/TripleOscillator/GhostBoy.xpf
new file mode 100644
index 000000000..32f33964c
--- /dev/null
+++ b/data/presets/TripleOscillator/GhostBoy.xpf
@@ -0,0 +1,80 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Gong.xpf b/data/presets/TripleOscillator/Gong.xpf
deleted file mode 100644
index 813d40ead..000000000
--- a/data/presets/TripleOscillator/Gong.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Harmonium.xpf b/data/presets/TripleOscillator/Harmonium.xpf
index 0db49b42d..a90325093 100644
--- a/data/presets/TripleOscillator/Harmonium.xpf
+++ b/data/presets/TripleOscillator/Harmonium.xpf
@@ -1,21 +1,21 @@
-
-
-
+
+
+
-
-
+
+
-
+
-
-
-
+
+
+
-
+
-
+
diff --git a/data/presets/TripleOscillator/Harpsichord.xpf b/data/presets/TripleOscillator/Harpsichord.xpf
deleted file mode 100644
index 6e1093ee0..000000000
--- a/data/presets/TripleOscillator/Harpsichord.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/HugeGrittyBass.xpf b/data/presets/TripleOscillator/HugeGrittyBass.xpf
new file mode 100644
index 000000000..ab752fbff
--- /dev/null
+++ b/data/presets/TripleOscillator/HugeGrittyBass.xpf
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Jupiter.xpf b/data/presets/TripleOscillator/Jupiter.xpf
index e836c638e..86b59aac5 100644
--- a/data/presets/TripleOscillator/Jupiter.xpf
+++ b/data/presets/TripleOscillator/Jupiter.xpf
@@ -1,21 +1,21 @@
-
-
-
+
+
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
+
+
-
+
diff --git a/data/presets/TripleOscillator/Kick.xpf b/data/presets/TripleOscillator/Kick.xpf
deleted file mode 100644
index 8dbac12d0..000000000
--- a/data/presets/TripleOscillator/Kick.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Kick2.xpf b/data/presets/TripleOscillator/Kick2.xpf
deleted file mode 100644
index 4dcd87b08..000000000
--- a/data/presets/TripleOscillator/Kick2.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/MoveYourBody.xpf b/data/presets/TripleOscillator/MoveYourBody.xpf
index 1d2b63d2c..fb67237bd 100644
--- a/data/presets/TripleOscillator/MoveYourBody.xpf
+++ b/data/presets/TripleOscillator/MoveYourBody.xpf
@@ -1,18 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/OldComputerGames.xpf b/data/presets/TripleOscillator/OldComputerGames.xpf
index dd01e4992..674bef674 100644
--- a/data/presets/TripleOscillator/OldComputerGames.xpf
+++ b/data/presets/TripleOscillator/OldComputerGames.xpf
@@ -1,21 +1,21 @@
-
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
-
-
+
+
-
+
@@ -63,16 +63,34 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/PM-FMstring.xpf b/data/presets/TripleOscillator/PM-FMstring.xpf
new file mode 100644
index 000000000..1433f3c47
--- /dev/null
+++ b/data/presets/TripleOscillator/PM-FMstring.xpf
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/PMFMFTWbass.xpf b/data/presets/TripleOscillator/PMFMFTWbass.xpf
new file mode 100644
index 000000000..d81b55601
--- /dev/null
+++ b/data/presets/TripleOscillator/PMFMFTWbass.xpf
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/SBass.xpf b/data/presets/TripleOscillator/PMbass.xpf
similarity index 84%
rename from data/presets/TripleOscillator/SBass.xpf
rename to data/presets/TripleOscillator/PMbass.xpf
index e1b4be4e1..2e63d7136 100644
--- a/data/presets/TripleOscillator/SBass.xpf
+++ b/data/presets/TripleOscillator/PMbass.xpf
@@ -1,16 +1,16 @@
-
+
-
+
-
+
-
-
-
+
+
+
diff --git a/data/presets/TripleOscillator/PercussiveBass.xpf b/data/presets/TripleOscillator/PercussiveBass.xpf
new file mode 100644
index 000000000..4afb1d0de
--- /dev/null
+++ b/data/presets/TripleOscillator/PercussiveBass.xpf
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Play-some-rock.xpf b/data/presets/TripleOscillator/Play-some-rock.xpf
index 29cd3de28..2ee19a7b2 100644
--- a/data/presets/TripleOscillator/Play-some-rock.xpf
+++ b/data/presets/TripleOscillator/Play-some-rock.xpf
@@ -1,18 +1,36 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/PluckBass.xpf b/data/presets/TripleOscillator/PluckBass.xpf
new file mode 100644
index 000000000..51c5de329
--- /dev/null
+++ b/data/presets/TripleOscillator/PluckBass.xpf
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Plucked.xpf b/data/presets/TripleOscillator/Plucked.xpf
deleted file mode 100644
index 2db750a48..000000000
--- a/data/presets/TripleOscillator/Plucked.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/PowerStrings.xpf b/data/presets/TripleOscillator/PowerStrings.xpf
index f62af8e42..0ef375097 100644
--- a/data/presets/TripleOscillator/PowerStrings.xpf
+++ b/data/presets/TripleOscillator/PowerStrings.xpf
@@ -1,21 +1,21 @@
-
+
-
+
-
+
-
-
-
+
+
+
-
+
@@ -32,6 +32,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Ravemania.xpf b/data/presets/TripleOscillator/Ravemania.xpf
index 4e0f779e4..cab609fc5 100644
--- a/data/presets/TripleOscillator/Ravemania.xpf
+++ b/data/presets/TripleOscillator/Ravemania.xpf
@@ -1,18 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/ResoBass.xpf b/data/presets/TripleOscillator/ResoBass.xpf
index e5b82bc75..85a785c6e 100644
--- a/data/presets/TripleOscillator/ResoBass.xpf
+++ b/data/presets/TripleOscillator/ResoBass.xpf
@@ -1,19 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/ResonantPad.xpf b/data/presets/TripleOscillator/ResonantPad.xpf
index 9189dc074..0e375c846 100644
--- a/data/presets/TripleOscillator/ResonantPad.xpf
+++ b/data/presets/TripleOscillator/ResonantPad.xpf
@@ -1,19 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/RockOrgan.xpf b/data/presets/TripleOscillator/RockOrgan.xpf
deleted file mode 100644
index 84e397782..000000000
--- a/data/presets/TripleOscillator/RockOrgan.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Rough!.xpf b/data/presets/TripleOscillator/Rough!.xpf
index 462a1fbf3..38e5d364a 100644
--- a/data/presets/TripleOscillator/Rough!.xpf
+++ b/data/presets/TripleOscillator/Rough!.xpf
@@ -1,19 +1,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/SBass2.xpf b/data/presets/TripleOscillator/SBass2.xpf
deleted file mode 100644
index 251b8069a..000000000
--- a/data/presets/TripleOscillator/SBass2.xpf
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/SawLead.xpf b/data/presets/TripleOscillator/SawLead.xpf
deleted file mode 100644
index fb1ca7c2c..000000000
--- a/data/presets/TripleOscillator/SawLead.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/SawReso.xpf b/data/presets/TripleOscillator/SawReso.xpf
index ee419bb38..2c631d663 100644
--- a/data/presets/TripleOscillator/SawReso.xpf
+++ b/data/presets/TripleOscillator/SawReso.xpf
@@ -1,18 +1,21 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/Short1.xpf b/data/presets/TripleOscillator/Short1.xpf
deleted file mode 100644
index 8e4bf3051..000000000
--- a/data/presets/TripleOscillator/Short1.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Short2.xpf b/data/presets/TripleOscillator/Short2.xpf
deleted file mode 100644
index e544bf306..000000000
--- a/data/presets/TripleOscillator/Short2.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Short3.xpf b/data/presets/TripleOscillator/Short3.xpf
deleted file mode 100644
index 8e6152755..000000000
--- a/data/presets/TripleOscillator/Short3.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Short4.xpf b/data/presets/TripleOscillator/Short4.xpf
deleted file mode 100644
index 22ec192ef..000000000
--- a/data/presets/TripleOscillator/Short4.xpf
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/Snare.xpf b/data/presets/TripleOscillator/Snare.xpf
deleted file mode 100644
index 9d5d3e834..000000000
--- a/data/presets/TripleOscillator/Snare.xpf
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/SoftBass.xpf b/data/presets/TripleOscillator/SoftBass.xpf
deleted file mode 100644
index 7596bd14b..000000000
--- a/data/presets/TripleOscillator/SoftBass.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/SoftStrings.xpf b/data/presets/TripleOscillator/SoftStrings.xpf
deleted file mode 100644
index a47c0b68c..000000000
--- a/data/presets/TripleOscillator/SoftStrings.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/SquarePing.xpf b/data/presets/TripleOscillator/SquarePing.xpf
new file mode 100644
index 000000000..c4a1999dd
--- /dev/null
+++ b/data/presets/TripleOscillator/SquarePing.xpf
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/SuperSawLead.xpf b/data/presets/TripleOscillator/SuperSawLead.xpf
new file mode 100644
index 000000000..916bde548
--- /dev/null
+++ b/data/presets/TripleOscillator/SuperSawLead.xpf
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/Supernova.xpf b/data/presets/TripleOscillator/Supernova.xpf
index 750415f9a..01837983b 100644
--- a/data/presets/TripleOscillator/Supernova.xpf
+++ b/data/presets/TripleOscillator/Supernova.xpf
@@ -1,40 +1,58 @@
-
-
-
+
+
+
-
-
+
+
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -42,20 +60,51 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/TB303-Arpeggio.xpf b/data/presets/TripleOscillator/TB303-Arpeggio.xpf
deleted file mode 100644
index 09f1bca8e..000000000
--- a/data/presets/TripleOscillator/TB303-Arpeggio.xpf
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/data/presets/TripleOscillator/TINTNpad.xpf b/data/presets/TripleOscillator/TINTNpad.xpf
new file mode 100644
index 000000000..840ee358f
--- /dev/null
+++ b/data/presets/TripleOscillator/TINTNpad.xpf
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/data/presets/TripleOscillator/TheMaster.xpf b/data/presets/TripleOscillator/TheMaster.xpf
index 7311af546..c54787a19 100644
--- a/data/presets/TripleOscillator/TheMaster.xpf
+++ b/data/presets/TripleOscillator/TheMaster.xpf
@@ -1,18 +1,31 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/data/presets/TripleOscillator/TranceLead.xpf b/data/presets/TripleOscillator/TranceLead.xpf
index c3071c976..cd1d3526a 100644
--- a/data/presets/TripleOscillator/TranceLead.xpf
+++ b/data/presets/TripleOscillator/TranceLead.xpf
@@ -1,19 +1,18 @@
-
+
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
diff --git a/data/presets/TripleOscillator/WarmStack.xpf b/data/presets/TripleOscillator/WarmStack.xpf
index 1a3e9c1a0..fb903295c 100644
--- a/data/presets/TripleOscillator/WarmStack.xpf
+++ b/data/presets/TripleOscillator/WarmStack.xpf
@@ -1,16 +1,16 @@
-
+
-
+
-
+
-
+
-
-
-
+
+
+
diff --git a/include/FxMixerView.h b/include/FxMixerView.h
index 7eca91db4..aac3ad402 100644
--- a/include/FxMixerView.h
+++ b/include/FxMixerView.h
@@ -1,7 +1,7 @@
/*
* FxMixerView.h - effect-mixer-view for LMMS
*
- * Copyright (c) 2008 Tobias Doerffel
+ * Copyright (c) 2008-2014 Tobias Doerffel
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
@@ -48,8 +48,9 @@ class EXPORT FxMixerView : public QWidget, public ModelView,
{
Q_OBJECT
public:
- struct FxChannelView
+ class FxChannelView
{
+ public:
FxChannelView(QWidget * _parent, FxMixerView * _mv, int _chIndex );
FxLine * m_fxLine;
diff --git a/include/Mixer.h b/include/Mixer.h
index 4813fb0ea..8837fc211 100644
--- a/include/Mixer.h
+++ b/include/Mixer.h
@@ -47,6 +47,7 @@
#include "lmms_basics.h"
#include "note.h"
#include "fifo_buffer.h"
+#include "MixerProfiler.h"
class AudioDevice;
@@ -246,9 +247,14 @@ public:
}
- inline int cpuLoad() const
+ MixerProfiler& profiler()
{
- return m_cpuLoad;
+ return m_profiler;
+ }
+
+ int cpuLoad() const
+ {
+ return m_profiler.cpuLoad();
}
const qualitySettings & currentQualitySettings() const
@@ -433,7 +439,6 @@ private:
bool m_oldBuffer[SURROUND_CHANNELS];
bool m_newBuffer[SURROUND_CHANNELS];
- int m_cpuLoad;
QVector m_workers;
int m_numWorkers;
QWaitCondition m_queueReadyWaitCond;
@@ -465,6 +470,7 @@ private:
fifo * m_fifo;
fifoWriter * m_fifoWriter;
+ MixerProfiler m_profiler;
friend class engine;
friend class MixerWorkerThread;
diff --git a/include/MixerProfiler.h b/include/MixerProfiler.h
new file mode 100644
index 000000000..697313612
--- /dev/null
+++ b/include/MixerProfiler.h
@@ -0,0 +1,60 @@
+/*
+ * MixerProfiler.h - class for profiling performance of Mixer
+ *
+ * Copyright (c) 2014 Tobias Doerffel
+ *
+ * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; 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 MIXER_PROFILER_H
+#define MIXER_PROFILER_H
+
+#include
+
+#include "MicroTimer.h"
+
+class MixerProfiler
+{
+public:
+ MixerProfiler();
+ ~MixerProfiler();
+
+ void startPeriod()
+ {
+ m_periodTimer.reset();
+ }
+
+ void finishPeriod( sample_rate_t sampleRate, fpp_t framesPerPeriod );
+
+ int cpuLoad() const
+ {
+ return m_cpuLoad;
+ }
+
+ void setOutputFile( const QString& outputFile );
+
+
+private:
+ MicroTimer m_periodTimer;
+ int m_cpuLoad;
+ QFile m_outputFile;
+
+};
+
+#endif
diff --git a/include/Plugin.h b/include/Plugin.h
index bfc9bc34c..7c937dc8c 100644
--- a/include/Plugin.h
+++ b/include/Plugin.h
@@ -1,7 +1,7 @@
/*
* Plugin.h - class plugin, the base-class and generic interface for all plugins
*
- * Copyright (c) 2005-2009 Tobias Doerffel
+ * Copyright (c) 2005-2014 Tobias Doerffel
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
@@ -22,18 +22,15 @@
*
*/
-#ifndef _PLUGIN_H
-#define _PLUGIN_H
+#ifndef PLUGIN_H
+#define PLUGIN_H
-#include
#include
-#include
-#include
+#include
+#include
#include "JournallingObject.h"
#include "Model.h"
-#include "base64.h"
-
class QWidget;
@@ -72,12 +69,12 @@ public:
PluginTypes type;
const PixmapLoader * logo;
const char * supportedFileTypes;
- inline bool supportsFileType( const QString & _ext ) const
+
+ inline bool supportsFileType( const QString& extension ) const
{
- return QString( supportedFileTypes ).
- split( QChar( ',' ) ).
- contains( _ext );
+ return QString( supportedFileTypes ).split( QChar( ',' ) ).contains( extension );
}
+
class EXPORT SubPluginFeatures
{
public:
@@ -101,11 +98,10 @@ public:
inline bool isValid() const
{
- return desc != NULL &&
- name != QString::null;
+ return desc != NULL && name.isNull() == false;
}
- const Plugin::Descriptor * desc;
+ const Plugin::Descriptor* desc;
QString name;
AttributeMap attributes;
} ;
@@ -113,8 +109,8 @@ public:
typedef QList KeyList;
- SubPluginFeatures( Plugin::PluginTypes _type ) :
- m_type( _type )
+ SubPluginFeatures( Plugin::PluginTypes type ) :
+ m_type( type )
{
}
@@ -126,8 +122,7 @@ public:
{
}
- virtual void listSubPluginKeys( const Plugin::Descriptor *,
- KeyList & ) const
+ virtual void listSubPluginKeys( const Plugin::Descriptor *, KeyList & ) const
{
}
@@ -144,15 +139,13 @@ 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
@@ -162,41 +155,40 @@ 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 & _plugin_name,
- Model * _parent, void * _data );
+ static Plugin * instantiate( const QString& pluginName, Model * parent, void * data );
// fills given list with descriptors of all available plugins
- static void getDescriptorsOfAvailPlugins( DescriptorList & _plugin_descs );
+ 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;
+ virtual PluginView* instantiateView( QWidget* ) = 0;
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* );
} ;
diff --git a/include/lmms_math.h b/include/lmms_math.h
index 67b4f10e9..9dc7a365c 100644
--- a/include/lmms_math.h
+++ b/include/lmms_math.h
@@ -40,6 +40,12 @@
#ifndef isinff
#define isinff(x) isinf(x)
#endif
+#ifndef _isnanf
+#define _isnanf(x) isnan(x)
+#endif
+#ifndef _isinff
+#define _isinff(x) isinf(x)
+#endif
#endif
#ifdef __INTEL_COMPILER
diff --git a/plugins/LadspaEffect/calf/CMakeLists.txt b/plugins/LadspaEffect/calf/CMakeLists.txt
index db6dea7a5..d685f5302 100644
--- a/plugins/LadspaEffect/calf/CMakeLists.txt
+++ b/plugins/LadspaEffect/calf/CMakeLists.txt
@@ -7,9 +7,9 @@ INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/include"
INSTALL(TARGETS calf LIBRARY DESTINATION "${PLUGIN_DIR}/ladspa")
SET_TARGET_PROPERTIES(calf PROPERTIES PREFIX "")
SET(INLINE_FLAGS "")
-IF(NOT LMMS_BUILD_APPLE)
+IF("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
SET(INLINE_FLAGS "-finline-functions-called-once -finline-limit=80")
-ENDIF(NOT LMMS_BUILD_APPLE)
+ENDIF()
SET_TARGET_PROPERTIES(calf PROPERTIES COMPILE_FLAGS "-O2 -finline-functions ${INLINE_FLAGS}")
IF(LMMS_BUILD_WIN32)
diff --git a/plugins/LadspaEffect/caps/SweepVF.cc b/plugins/LadspaEffect/caps/SweepVF.cc
index 95921c258..f97c220cf 100644
--- a/plugins/LadspaEffect/caps/SweepVF.cc
+++ b/plugins/LadspaEffect/caps/SweepVF.cc
@@ -28,6 +28,8 @@
02111-1307, USA or point your web browser to http://www.gnu.org.
*/
+#include
+
#include "basics.h"
#include "SweepVF.h"
@@ -85,7 +87,7 @@ SweepVFI::one_cycle (int frames)
modulation *= scale * f;
svf.set_f_Q (max (.001, f + modulation), Q);
- int n = min (frames, BLOCK_SIZE);
+ int n = std::min (frames, BLOCK_SIZE);
for (int i = 0; i < n; ++i)
F (d, i, svf.process (s[i] + normal), adding_gain);
@@ -231,7 +233,7 @@ SweepVFII::one_cycle (int frames)
svf.set_f_Q (max (.001, f + modulation1), q);
- int n = min (frames, BLOCK_SIZE);
+ int n = std::min (frames, BLOCK_SIZE);
for (int i = 0; i < n; ++i)
F (d, i, svf.process (s[i] + normal), adding_gain);
@@ -385,7 +387,7 @@ AutoWah::one_cycle (int frames)
m *= scale * .08;
svf.set_f_Q (max (.001, f + m), Q);
- int n = min (frames, BLOCK_SIZE);
+ int n = std::min (frames, BLOCK_SIZE);
for (int i = 0; i < n; ++i)
{
diff --git a/plugins/LadspaEffect/caps/dsp/ToneStack.h b/plugins/LadspaEffect/caps/dsp/ToneStack.h
index ef85d2057..4d0600856 100644
--- a/plugins/LadspaEffect/caps/dsp/ToneStack.h
+++ b/plugins/LadspaEffect/caps/dsp/ToneStack.h
@@ -69,10 +69,7 @@ class ToneStack
// digital coefficients
double dcoef_a[Order + 1];
double dcoef_b[Order + 1];
- double af[Order + 1];
- double bf[Order + 1];
- double fs;
TDFII filter;
public:
@@ -209,10 +206,6 @@ class ToneStackLT
// digital coefficients
double *kcoef;
double *vcoef;
- double af [Order + 1];
- double bf [Order + 1];
-
- double fs;
LatFilt filter;
public:
diff --git a/plugins/LadspaEffect/cmt/src/lofi.cpp b/plugins/LadspaEffect/cmt/src/lofi.cpp
index d4572f98b..67be8008d 100644
--- a/plugins/LadspaEffect/cmt/src/lofi.cpp
+++ b/plugins/LadspaEffect/cmt/src/lofi.cpp
@@ -277,8 +277,6 @@ class LoFi : public CMT_PluginInstance {
BandwidthLimit *bandwidth_l;
BandwidthLimit *bandwidth_r;
- int last_trigger;
-
public:
LoFi(const LADSPA_Descriptor *,
unsigned long s_rate)
diff --git a/plugins/LadspaEffect/cmt/src/pink_full.cpp b/plugins/LadspaEffect/cmt/src/pink_full.cpp
index 1c4de1602..59c92906e 100644
--- a/plugins/LadspaEffect/cmt/src/pink_full.cpp
+++ b/plugins/LadspaEffect/cmt/src/pink_full.cpp
@@ -49,14 +49,13 @@ namespace pink_full {
Voss-McCartney algorithm described at www.firstpr.com.au/dsp/pink-noise/ */
class Plugin : public CMT_PluginInstance {
private:
- LADSPA_Data sample_rate;
PinkNoise noise_source;
public:
Plugin(const LADSPA_Descriptor *,
unsigned long s_rate) :
- CMT_PluginInstance(n_ports),
- sample_rate(s_rate) {
+ CMT_PluginInstance(n_ports)
+ {
}
~Plugin() {
diff --git a/plugins/LadspaEffect/swh/fad_delay_1192.c b/plugins/LadspaEffect/swh/fad_delay_1192.c
index 9d4ec77b3..422e769d9 100644
--- a/plugins/LadspaEffect/swh/fad_delay_1192.c
+++ b/plugins/LadspaEffect/swh/fad_delay_1192.c
@@ -86,7 +86,6 @@ static void activateFadDelay(LADSPA_Handle instance) {
phase = 0;
last_phase = 0;
last_in = 0.0f;
- sample_rate = sample_rate;
plugin_data->buffer = buffer;
plugin_data->buffer_mask = buffer_mask;
plugin_data->buffer_size = buffer_size;
diff --git a/plugins/LadspaEffect/swh/gsm/gsm_create.c b/plugins/LadspaEffect/swh/gsm/gsm_create.c
index cadaff60e..f99eb91e2 100644
--- a/plugins/LadspaEffect/swh/gsm/gsm_create.c
+++ b/plugins/LadspaEffect/swh/gsm/gsm_create.c
@@ -4,7 +4,6 @@
* details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
*/
-static char const ident[] = "$Header: /home/cvs/giga/ladspa-swh/gsm/gsm_create.c,v 1.1 2001/06/10 21:36:51 swh Exp $";
#include "config.h"
diff --git a/plugins/LadspaEffect/swh/gsm_1215.c b/plugins/LadspaEffect/swh/gsm_1215.c
index 55c0f2628..8cef93ba5 100644
--- a/plugins/LadspaEffect/swh/gsm_1215.c
+++ b/plugins/LadspaEffect/swh/gsm_1215.c
@@ -224,7 +224,6 @@ static void runGsm(LADSPA_Handle instance, unsigned long sample_count) {
int count = plugin_data->count;
LADSPA_Data * dry = plugin_data->dry;
gsm_signal * dst = plugin_data->dst;
- float fs = plugin_data->fs;
gsm handle = plugin_data->handle;
int resamp = plugin_data->resamp;
float rsf = plugin_data->rsf;
@@ -238,8 +237,6 @@ static void runGsm(LADSPA_Handle instance, unsigned long sample_count) {
int error_rate = f_round(error);
int num_passes = f_round(passes);
- fs = fs; // So gcc doesn't think it's unused
-
for (pos = 0; pos < sample_count; pos++) {
// oversample into buffer down to aprox 8kHz, 13bit
@@ -322,7 +319,6 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) {
int count = plugin_data->count;
LADSPA_Data * dry = plugin_data->dry;
gsm_signal * dst = plugin_data->dst;
- float fs = plugin_data->fs;
gsm handle = plugin_data->handle;
int resamp = plugin_data->resamp;
float rsf = plugin_data->rsf;
@@ -336,8 +332,6 @@ static void runAddingGsm(LADSPA_Handle instance, unsigned long sample_count) {
int error_rate = f_round(error);
int num_passes = f_round(passes);
- fs = fs; // So gcc doesn't think it's unused
-
for (pos = 0; pos < sample_count; pos++) {
// oversample into buffer down to aprox 8kHz, 13bit
diff --git a/plugins/LadspaEffect/swh/hermes_filter_1200.c b/plugins/LadspaEffect/swh/hermes_filter_1200.c
index d313d376e..bf3bbbad5 100644
--- a/plugins/LadspaEffect/swh/hermes_filter_1200.c
+++ b/plugins/LadspaEffect/swh/hermes_filter_1200.c
@@ -817,7 +817,6 @@ static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count)
float lfo2_phase = plugin_data->lfo2_phase;
blo_h_osc * osc1_d = plugin_data->osc1_d;
blo_h_osc * osc2_d = plugin_data->osc2_d;
- blo_h_tables * tables = plugin_data->tables;
sv_filter * xover_b1_data = plugin_data->xover_b1_data;
sv_filter * xover_b2_data = plugin_data->xover_b2_data;
@@ -927,8 +926,6 @@ static void runHermesFilter(LADSPA_Handle instance, unsigned long sample_count)
dela_fb[1] = dela2_fb;
dela_fb[2] = dela3_fb;
- tables = tables; // To shut up gcc
-
for (pos = 0; pos < sample_count; pos++) {
count++; // Count of number of samples processed
@@ -1204,7 +1201,6 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c
float lfo2_phase = plugin_data->lfo2_phase;
blo_h_osc * osc1_d = plugin_data->osc1_d;
blo_h_osc * osc2_d = plugin_data->osc2_d;
- blo_h_tables * tables = plugin_data->tables;
sv_filter * xover_b1_data = plugin_data->xover_b1_data;
sv_filter * xover_b2_data = plugin_data->xover_b2_data;
@@ -1314,8 +1310,6 @@ static void runAddingHermesFilter(LADSPA_Handle instance, unsigned long sample_c
dela_fb[1] = dela2_fb;
dela_fb[2] = dela3_fb;
- tables = tables; // To shut up gcc
-
for (pos = 0; pos < sample_count; pos++) {
count++; // Count of number of samples processed
diff --git a/plugins/LadspaEffect/swh/ladspa-util.c b/plugins/LadspaEffect/swh/ladspa-util.c
index 57ce5bf15..431ba955e 100644
--- a/plugins/LadspaEffect/swh/ladspa-util.c
+++ b/plugins/LadspaEffect/swh/ladspa-util.c
@@ -4,7 +4,7 @@
the stack and crap like that.
*/
-static const float _truncate_half = 0.5f;
+//static const float _truncate_half = 0.5f;
int truncate(float flt) {
int i;
diff --git a/plugins/LadspaEffect/swh/pitch_scale_1193.c b/plugins/LadspaEffect/swh/pitch_scale_1193.c
index ce3f81163..88cf24cc8 100644
--- a/plugins/LadspaEffect/swh/pitch_scale_1193.c
+++ b/plugins/LadspaEffect/swh/pitch_scale_1193.c
@@ -79,7 +79,6 @@ static void activatePitchScale(LADSPA_Handle instance) {
memset(buffers->gAnaFreq, 0, FRAME_LENGTH*sizeof(float));
memset(buffers->gAnaMagn, 0, FRAME_LENGTH*sizeof(float));
buffers->gRover = 0;
- sample_rate = sample_rate;
/* do one run to make sure the plans are set up */
pitch_scale(buffers, 1.0, FRAME_LENGTH, 4, FRAME_LENGTH, sample_rate, buffers->gInFIFO, buffers->gOutFIFO, 0, 0.0f);
diff --git a/plugins/LadspaEffect/swh/ringmod_1188.c b/plugins/LadspaEffect/swh/ringmod_1188.c
index 393ad86b2..591dc966e 100644
--- a/plugins/LadspaEffect/swh/ringmod_1188.c
+++ b/plugins/LadspaEffect/swh/ringmod_1188.c
@@ -207,8 +207,6 @@ static void activateRingmod_1i1o1l(LADSPA_Handle instance) {
static void cleanupRingmod_1i1o1l(LADSPA_Handle instance) {
#line 93 "ringmod_1188.xml"
- Ringmod_1i1o1l *plugin_data = (Ringmod_1i1o1l *)instance;
- plugin_data = plugin_data;
if (--refcount == 0) {
free(sin_tbl);
free(tri_tbl);
diff --git a/plugins/LadspaEffect/swh/step_muxer_1212.c b/plugins/LadspaEffect/swh/step_muxer_1212.c
index 9c27b84e1..99c4ecf15 100644
--- a/plugins/LadspaEffect/swh/step_muxer_1212.c
+++ b/plugins/LadspaEffect/swh/step_muxer_1212.c
@@ -100,7 +100,6 @@ static void activateStepMuxer(LADSPA_Handle instance) {
}
current_ch = 0;
last_clock = 0.0f;
- sample_rate = sample_rate;
plugin_data->ch_gain = ch_gain;
plugin_data->ch_state = ch_state;
plugin_data->current_ch = current_ch;
diff --git a/plugins/LadspaEffect/swh/tape_delay_1211.c b/plugins/LadspaEffect/swh/tape_delay_1211.c
index 0b680ccf2..6d78239e3 100644
--- a/plugins/LadspaEffect/swh/tape_delay_1211.c
+++ b/plugins/LadspaEffect/swh/tape_delay_1211.c
@@ -116,7 +116,6 @@ static void activateTapeDelay(LADSPA_Handle instance) {
last_in = 0.0f;
last2_in = 0.0f;
last3_in = 0.0f;
- sample_rate = sample_rate;
z0 = 0.0f;
z1 = 0.0f;
z2 = 0.0f;
diff --git a/plugins/LadspaEffect/swh/transient_1206.c b/plugins/LadspaEffect/swh/transient_1206.c
index 782593e5e..3c591535f 100644
--- a/plugins/LadspaEffect/swh/transient_1206.c
+++ b/plugins/LadspaEffect/swh/transient_1206.c
@@ -97,7 +97,6 @@ static void activateTransient(LADSPA_Handle instance) {
medi_track = 0.1;
slow_track = 0.1;
count = 0;
- sample_rate = sample_rate;
plugin_data->buffer = buffer;
plugin_data->buffer_pos = buffer_pos;
plugin_data->count = count;
diff --git a/plugins/bit_invader/bit_invader.cpp b/plugins/bit_invader/bit_invader.cpp
index 9cab31847..b5d3ee791 100644
--- a/plugins/bit_invader/bit_invader.cpp
+++ b/plugins/bit_invader/bit_invader.cpp
@@ -26,6 +26,7 @@
#include
#include "bit_invader.h"
+#include "base64.h"
#include "engine.h"
#include "graph.h"
#include "InstrumentTrack.h"
diff --git a/plugins/dynamics_processor/dynamics_processor_controls.cpp b/plugins/dynamics_processor/dynamics_processor_controls.cpp
index e0b9cf668..bd40d9c6a 100644
--- a/plugins/dynamics_processor/dynamics_processor_controls.cpp
+++ b/plugins/dynamics_processor/dynamics_processor_controls.cpp
@@ -28,6 +28,7 @@
#include "dynamics_processor_controls.h"
#include "dynamics_processor.h"
+#include "base64.h"
#include "graph.h"
#include "engine.h"
#include "song.h"
diff --git a/plugins/nes/Nes.cpp b/plugins/nes/Nes.cpp
index d6f82d0d9..791925df8 100644
--- a/plugins/nes/Nes.cpp
+++ b/plugins/nes/Nes.cpp
@@ -57,11 +57,10 @@ Plugin::Descriptor PLUGIN_EXPORT nes_plugin_descriptor =
}
-NesObject::NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph, fpp_t frames ) :
+NesObject::NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph ) :
m_parent( nes ),
m_samplerate( samplerate ),
- m_nph( nph ),
- m_fpp( frames )
+ m_nph( nph )
{
m_pitchUpdateCounter = 0;
m_pitchUpdateFreq = wavelength( 60.0f );
@@ -561,7 +560,7 @@ void NesInstrument::playNote( NotePlayHandle * n, sampleFrame * workingBuffer )
if ( n->totalFramesPlayed() == 0 || n->m_pluginData == NULL )
{
- NesObject * nes = new NesObject( this, engine::mixer()->processingSampleRate(), n, engine::mixer()->framesPerPeriod() );
+ NesObject * nes = new NesObject( this, engine::mixer()->processingSampleRate(), n );
n->m_pluginData = nes;
}
diff --git a/plugins/nes/Nes.h b/plugins/nes/Nes.h
index 6a80f0974..523d006dd 100644
--- a/plugins/nes/Nes.h
+++ b/plugins/nes/Nes.h
@@ -81,7 +81,7 @@ class NesInstrument;
class NesObject
{
public:
- NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph, fpp_t frames );
+ NesObject( NesInstrument * nes, const sample_rate_t samplerate, NotePlayHandle * nph );
virtual ~NesObject();
void renderOutput( sampleFrame * buf, fpp_t frames );
@@ -149,7 +149,6 @@ private:
NesInstrument * m_parent;
const sample_rate_t m_samplerate;
NotePlayHandle * m_nph;
- fpp_t m_fpp;
int m_pitchUpdateCounter;
int m_pitchUpdateFreq;
diff --git a/plugins/organic/organic.h b/plugins/organic/organic.h
index 186d75158..616321e90 100644
--- a/plugins/organic/organic.h
+++ b/plugins/organic/organic.h
@@ -160,7 +160,6 @@ private:
virtual PluginView * instantiateView( QWidget * _parent );
- float m_harmonics [18];
private slots:
void updateAllDetuning();
diff --git a/plugins/papu/papu_instrument.cpp b/plugins/papu/papu_instrument.cpp
index 2edd1deec..d310e8051 100644
--- a/plugins/papu/papu_instrument.cpp
+++ b/plugins/papu/papu_instrument.cpp
@@ -29,6 +29,7 @@
#include "Basic_Gb_Apu.h"
#include "papu_instrument.h"
+#include "base64.h"
#include "InstrumentTrack.h"
#include "knob.h"
#include "NotePlayHandle.h"
diff --git a/plugins/watsyn/Watsyn.cpp b/plugins/watsyn/Watsyn.cpp
index 602866dd2..6afe4542f 100644
--- a/plugins/watsyn/Watsyn.cpp
+++ b/plugins/watsyn/Watsyn.cpp
@@ -25,6 +25,7 @@
#include
#include "Watsyn.h"
+#include "base64.h"
#include "engine.h"
#include "InstrumentTrack.h"
#include "templates.h"
diff --git a/plugins/waveshaper/waveshaper_controls.cpp b/plugins/waveshaper/waveshaper_controls.cpp
index 1fa0dc16d..7f2507eeb 100644
--- a/plugins/waveshaper/waveshaper_controls.cpp
+++ b/plugins/waveshaper/waveshaper_controls.cpp
@@ -28,6 +28,7 @@
#include "waveshaper_controls.h"
#include "waveshaper.h"
+#include "base64.h"
#include "graph.h"
#include "engine.h"
#include "song.h"
diff --git a/src/core/DataFile.cpp b/src/core/DataFile.cpp
index 90d856be6..34d74936a 100644
--- a/src/core/DataFile.cpp
+++ b/src/core/DataFile.cpp
@@ -40,6 +40,7 @@
#include "SongEditor.h"
#include "Effect.h"
#include "lmmsversion.h"
+#include "base64.h"
// bbTCO::defaultColor()
#include "bb_track.h"
diff --git a/src/core/Mixer.cpp b/src/core/Mixer.cpp
index c657e2d90..7c1790a2a 100644
--- a/src/core/Mixer.cpp
+++ b/src/core/Mixer.cpp
@@ -38,7 +38,6 @@
#include "config_mgr.h"
#include "SamplePlayHandle.h"
#include "PianoRoll.h"
-#include "MicroTimer.h"
#include "atomic_int.h"
// platform-specific audio-interface-classes
@@ -69,7 +68,6 @@ Mixer::Mixer() :
m_inputBufferWrite( 1 ),
m_readBuf( NULL ),
m_writeBuf( NULL ),
- m_cpuLoad( 0 ),
m_workers(),
m_numWorkers( QThread::idealThreadCount()-1 ),
m_queueReadyWaitCond(),
@@ -77,7 +75,8 @@ Mixer::Mixer() :
m_masterGain( 1.0f ),
m_audioDev( NULL ),
m_oldAudioDev( NULL ),
- m_globalMutex( QMutex::Recursive )
+ m_globalMutex( QMutex::Recursive ),
+ m_profiler()
{
for( int i = 0; i < 2; ++i )
{
@@ -277,7 +276,7 @@ sample_rate_t Mixer::processingSampleRate() const
bool Mixer::criticalXRuns() const
{
- return m_cpuLoad >= 99 && engine::getSong()->isExporting() == false;
+ return cpuLoad() >= 99 && engine::getSong()->isExporting() == false;
}
@@ -315,7 +314,8 @@ void Mixer::pushInputFrames( sampleFrame * _ab, const f_cnt_t _frames )
const surroundSampleFrame * Mixer::renderNextBuffer()
{
- MicroTimer timer;
+ m_profiler.startPeriod();
+
static song::playPos last_metro_pos = -1;
song::playPos p = engine::getSong()->getPlayPos(
@@ -428,10 +428,7 @@ const surroundSampleFrame * Mixer::renderNextBuffer()
Controller::triggerFrameCounter();
AutomatableModel::incrementPeriodCounter();
- const float new_cpu_load = timer.elapsed() / 10000.0f *
- processingSampleRate() / m_framesPerPeriod;
- m_cpuLoad = tLimit( (int) ( new_cpu_load * 0.1f + m_cpuLoad * 0.9f ), 0,
- 100 );
+ m_profiler.finishPeriod( processingSampleRate(), m_framesPerPeriod );
return m_readBuf;
}
diff --git a/src/core/MixerProfiler.cpp b/src/core/MixerProfiler.cpp
new file mode 100644
index 000000000..9e3b99d27
--- /dev/null
+++ b/src/core/MixerProfiler.cpp
@@ -0,0 +1,63 @@
+/*
+ * MixerProfiler.cpp - class for profiling performance of Mixer
+ *
+ * Copyright (c) 2014 Tobias Doerffel
+ *
+ * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public
+ * License as published by the Free Software Foundation; 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 "MixerProfiler.h"
+
+
+MixerProfiler::MixerProfiler() :
+ m_periodTimer(),
+ m_cpuLoad( 0 ),
+ m_outputFile()
+{
+}
+
+
+
+MixerProfiler::~MixerProfiler()
+{
+}
+
+
+void MixerProfiler::finishPeriod( sample_rate_t sampleRate, fpp_t framesPerPeriod )
+{
+ int periodElapsed = m_periodTimer.elapsed();
+
+ const float newCpuLoad = periodElapsed / 10000.0f * sampleRate / framesPerPeriod;
+ m_cpuLoad = qBound( 0, ( newCpuLoad * 0.1f + m_cpuLoad * 0.9f ), 100 );
+
+ if( m_outputFile.isOpen() )
+ {
+ m_outputFile.write( QString( "%1\n" ).arg( periodElapsed ).toLatin1() );
+ }
+}
+
+
+
+void MixerProfiler::setOutputFile( const QString& outputFile )
+{
+ m_outputFile.close();
+ m_outputFile.setFileName( outputFile );
+ m_outputFile.open( QFile::WriteOnly | QFile::Truncate );
+}
+
diff --git a/src/core/Plugin.cpp b/src/core/Plugin.cpp
index ddd1b4922..02d725f03 100644
--- a/src/core/Plugin.cpp
+++ b/src/core/Plugin.cpp
@@ -1,9 +1,7 @@
-#ifndef SINGLE_SOURCE_COMPILE
-
/*
* Plugin.cpp - implementation of plugin-class including plugin-loader
*
- * Copyright (c) 2005-2009 Tobias Doerffel
+ * Copyright (c) 2005-2014 Tobias Doerffel
*
* This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net
*
@@ -24,9 +22,10 @@
*
*/
-#include
-#include
-#include
+#include
+#include
+#include
+#include
#include "Plugin.h"
#include "embed.h"
@@ -54,9 +53,9 @@ static Plugin::Descriptor dummy_plugin_descriptor =
-Plugin::Plugin( const Descriptor * _descriptor, Model * _parent ) :
+Plugin::Plugin( const Descriptor * _descriptor, Model * parent ) :
JournallingObject(),
- Model( _parent ),
+ Model( parent ),
m_descriptor( _descriptor )
{
if( m_descriptor == NULL )
@@ -91,89 +90,80 @@ AutomatableModel * Plugin::childModel( const QString & )
-Plugin * Plugin::instantiate( const QString & _plugin_name, Model * _parent,
- void * _data )
+Plugin * Plugin::instantiate( const QString & pluginName, Model * parent,
+ void * data )
{
- QLibrary plugin_lib( configManager::inst()->pluginDir() +
- _plugin_name );
- if( plugin_lib.load() == false )
+ QLibrary pluginLibrary( configManager::inst()->pluginDir() + pluginName );
+ if( pluginLibrary.load() == false )
{
if( engine::hasGUI() )
{
QMessageBox::information( NULL,
tr( "Plugin not found" ),
- tr( "The plugin \"%1\" wasn't found "
- "or could not be loaded!\n"
- "Reason: \"%2\"" ).arg( _plugin_name ).
- arg( plugin_lib.errorString() ),
- QMessageBox::Ok |
- QMessageBox::Default );
+ tr( "The plugin \"%1\" wasn't found or could not be loaded!\nReason: \"%2\"" ).
+ arg( pluginName ).arg( pluginLibrary.errorString() ),
+ QMessageBox::Ok | QMessageBox::Default );
}
return new DummyPlugin();
}
- instantiationHook inst_hook = ( instantiationHook ) plugin_lib.resolve(
- "lmms_plugin_main" );
- if( inst_hook == NULL )
+
+ InstantiationHook instantiationHook = ( InstantiationHook ) pluginLibrary.resolve( "lmms_plugin_main" );
+ if( instantiationHook == NULL )
{
if( engine::hasGUI() )
{
QMessageBox::information( NULL,
tr( "Error while loading plugin" ),
- tr( "Failed to load plugin \"%1\"!"
- ).arg( _plugin_name ),
- QMessageBox::Ok |
- QMessageBox::Default );
+ tr( "Failed to load plugin \"%1\"!").arg( pluginName ),
+ QMessageBox::Ok | QMessageBox::Default );
}
return new DummyPlugin();
}
- Plugin * inst = inst_hook( _parent, _data );
+
+ Plugin * inst = instantiationHook( parent, data );
return inst;
}
-void Plugin::getDescriptorsOfAvailPlugins( DescriptorList & _plugin_descs )
+void Plugin::getDescriptorsOfAvailPlugins( DescriptorList& pluginDescriptors )
{
QDir directory( configManager::inst()->pluginDir() );
#ifdef LMMS_BUILD_WIN32
- QFileInfoList list = directory.entryInfoList(
- QStringList( "*.dll" ) );
+ QFileInfoList list = directory.entryInfoList( QStringList( "*.dll" ) );
#else
- QFileInfoList list = directory.entryInfoList(
- QStringList( "lib*.so" ) );
+ QFileInfoList list = directory.entryInfoList( QStringList( "lib*.so" ) );
#endif
- foreach( const QFileInfo & f, list )
+ foreach( const QFileInfo& f, list )
{
QLibrary( f.absoluteFilePath() ).load();
}
- foreach( const QFileInfo & f, list )
+ foreach( const QFileInfo& f, list )
{
- QLibrary plugin_lib( f.absoluteFilePath() );
- if( plugin_lib.load() == false ||
- plugin_lib.resolve( "lmms_plugin_main" ) == NULL )
+ QLibrary pluginLibrary( f.absoluteFilePath() );
+ if( pluginLibrary.load() == false ||
+ pluginLibrary.resolve( "lmms_plugin_main" ) == NULL )
{
continue;
}
- QString desc_name = f.fileName().section( '.', 0, 0 ) +
- "_plugin_descriptor";
- if( desc_name.left( 3 ) == "lib" )
+
+ QString descriptorName = f.baseName() + "_plugin_descriptor";
+ if( descriptorName.left( 3 ) == "lib" )
{
- desc_name = desc_name.mid( 3 );
+ descriptorName = descriptorName.mid( 3 );
}
- Descriptor * plugin_desc =
- (Descriptor *) plugin_lib.resolve(
- desc_name.toUtf8().constData() );
- if( plugin_desc == NULL )
+
+ Descriptor* pluginDescriptor = (Descriptor *) pluginLibrary.resolve( descriptorName.toUtf8().constData() );
+ if( pluginDescriptor == NULL )
{
- printf( "LMMS plugin %s does not have a "
- "plugin descriptor named %s!\n",
- f.absoluteFilePath().toUtf8().constData(),
- desc_name.toUtf8().constData() );
+ qWarning() << tr( "LMMS plugin %1 does not have a plugin descriptor named %2!" ).
+ arg( f.absoluteFilePath() ).arg( descriptorName );
continue;
}
- _plugin_descs.push_back( *plugin_desc );
+
+ pluginDescriptors += *pluginDescriptor;
}
}
@@ -181,9 +171,9 @@ void Plugin::getDescriptorsOfAvailPlugins( DescriptorList & _plugin_descs )
-PluginView * Plugin::createView( QWidget * _parent )
+PluginView * Plugin::createView( QWidget * parent )
{
- PluginView * pv = instantiateView( _parent );
+ PluginView * pv = instantiateView( parent );
if( pv != NULL )
{
pv->setModel( this );
@@ -227,4 +217,3 @@ QDomElement Plugin::Descriptor::SubPluginFeatures::Key::saveXML(
}
-#endif
diff --git a/src/core/main.cpp b/src/core/main.cpp
index a9b7f78b7..0962e95ca 100644
--- a/src/core/main.cpp
+++ b/src/core/main.cpp
@@ -95,7 +95,7 @@ int main( int argc, char * * argv )
bool core_only = false;
bool fullscreen = true;
bool exit_after_import = false;
- QString file_to_load, file_to_save, file_to_import, render_out;
+ QString file_to_load, file_to_save, file_to_import, render_out, profilerOutputFile;
for( int i = 1; i < argc; ++i )
{
@@ -341,6 +341,11 @@ int main( int argc, char * * argv )
exit_after_import = true;
}
}
+ else if( argc > i && ( QString( argv[i] ) == "--profile" || QString( argv[i] ) == "-p" ) )
+ {
+ profilerOutputFile = argv[i+1];
+ ++i;
+ }
else
{
if( argv[i][0] == '-' )
@@ -496,6 +501,11 @@ int main( int argc, char * * argv )
SLOT( updateConsoleProgress() ) );
t->start( 200 );
+ if( profilerOutputFile.isEmpty() == false )
+ {
+ engine::mixer()->profiler().setOutputFile( profilerOutputFile );
+ }
+
// start now!
r->startProcessing();
}
diff --git a/src/gui/PianoRoll.cpp b/src/gui/PianoRoll.cpp
index 7a31394b0..f676d919f 100644
--- a/src/gui/PianoRoll.cpp
+++ b/src/gui/PianoRoll.cpp
@@ -619,70 +619,53 @@ PianoRoll::PianoRoll() :
tb_layout->addWidget( m_chordComboBox );
tb_layout->addStretch();
- m_zoomingComboBox->setWhatsThis( tr(
- "This controls the magnification over time. "
- "It can be useful choose a magnification for a specific task. "
- "For ordinary editing, the magnification should be fitted to your "
- "smallest used notes. "
- "Most will use the default magnification of 100%, "
- "when the shortest notes are 1/16. "
- "If you have used shorter notes, your editing will be easier, "
- "with a magnification of 200%, or more. "
- "You should use low magnification, if you need to move a block "
- "of notes many bars, or just to get an overview of the score."
- ) );
-
- m_quantizeComboBox->setWhatsThis( tr(
- "This 'Q' stands for quantification, and controls the minimum spacing "
- "between notes. "
- "In piano-roll this is very important, when you make syncopated patterns, "
- "and an absolute must, for swing-notes! "
- "Observe that the score segmentation also changes, depending on the selected Q. "
- "You should not use a Q-value that does not fit your chosen time-signature! "
- "The default value is 1/16, and that fits the default 4/4 timing. "
- "A Q of 1/16 will also work well in most editing."
- ) );
-
- m_noteLenComboBox->setWhatsThis( tr(
- "This lets you select the note you place in the score. "
- "In most circumstances the best choice is 'Last Note'."
- "The choice 'Last Note' means that LMMS will use the note you last clicked, "
- "when you place the next note. "
- "But you can choose any note-length from this drop-down, "
- "and your choice will be the note, that you can draw in the score."
- ) );
-
- m_scaleComboBox->setWhatsThis( tr(
- "This lets you select a music scale that LMMS then will annotate. "
- "The feature is directly connected to the context-menu "
- "on the virtual keyboard, to the left. "
- "First you chose which scale you will use. "
- "You do that in this very dropdown! "
- "Then you choose the key of your composition. "
- "Right mouse click on the selected key in the virtual keyboard, "
- "and then choose 'Mark current Scale' "
- "LMMS will annotate all notes that belongs to the chosen scale, "
- "and in the key you have selected! "
- "LMMS will not only annotate in the score you have open, "
- "but all scores in your project, will be correctly annotated. "
- "This will help you avoid using bum-notes, as you compose. "
- "You should know about principle scales in music. "
- "Search the net, if you do not! "
- ) );
-
- m_chordComboBox->setWhatsThis( tr(
- "This lets you select a standard music chord. "
- "All notes that are played simultaneous, are 'chords',"
- "but a large number of simultaneous key combinations, has own names, "
- "and its own place in music. "
- "They are standard chords, and it is these chords, "
- "you can find in this drop-down. "
- "After you have selected a chord, any click in the score, "
- "will place that chord, musically correctly, "
- "and with the Left mouse clicked note, as the root-note in the chord! "
- "To return to single note placement, you need to choose 'No chord' "
- "in this drop-down!"
- ) );
+ 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 );