Compare commits
90 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e3f344c70 | ||
|
|
aea84602b2 | ||
|
|
d64e93b41a | ||
|
|
ffe7e8b8fa | ||
|
|
ee25db797d | ||
|
|
1ba3088554 | ||
|
|
c5773c41b0 | ||
|
|
d8e552de80 | ||
|
|
523e5d048b | ||
|
|
e33645f9ab | ||
|
|
24f869c379 | ||
|
|
1abb37529d | ||
|
|
49b3f36a57 | ||
|
|
a1dce66ca8 | ||
|
|
ffde891cfb | ||
|
|
5fdc452476 | ||
|
|
44f72b0f13 | ||
|
|
93b6888394 | ||
|
|
e503875a28 | ||
|
|
5bf095b6b9 | ||
|
|
62df768896 | ||
|
|
58d864a630 | ||
|
|
b5538c7da8 | ||
|
|
122b845105 | ||
|
|
76a1b8c2b6 | ||
|
|
ee39cbe94d | ||
|
|
af66303fc4 | ||
|
|
6aae0e6897 | ||
|
|
ef7d3ff328 | ||
|
|
a0d07db8f1 | ||
|
|
36d02b9887 | ||
|
|
25ab7260f5 | ||
|
|
5172acb1e3 | ||
|
|
2ee8f1445c | ||
|
|
e0f7ea57ac | ||
|
|
0a732fbc04 | ||
|
|
b59a50133a | ||
|
|
ddbb180800 | ||
|
|
f7741f184f | ||
|
|
3ad6d6ca7a | ||
|
|
0891c53582 | ||
|
|
3c5d940561 | ||
|
|
448b783e8b | ||
|
|
85da25fe2a | ||
|
|
de56c989e9 | ||
|
|
d21f0a7114 | ||
|
|
347b5a121d | ||
|
|
da6fd6ef5c | ||
|
|
ed0dc6770d | ||
|
|
f65ec07603 | ||
|
|
f2ab783db9 | ||
|
|
91063ab7d2 | ||
|
|
b789eb9a69 | ||
|
|
569c83101a | ||
|
|
8b2ce06da8 | ||
|
|
8d3637e754 | ||
|
|
c6a22747da | ||
|
|
f27ea7bc2b | ||
|
|
2aa7b64938 | ||
|
|
e6ae2be65a | ||
|
|
a182a3e8cc | ||
|
|
90bb470642 | ||
|
|
a8924a34dd | ||
|
|
73cad09968 | ||
|
|
60ad2c8aa0 | ||
|
|
4a6257a47c | ||
|
|
891ab058eb | ||
|
|
bbe337bd03 | ||
|
|
7431e77229 | ||
|
|
5a0dfdd3c0 | ||
|
|
76d766fe25 | ||
|
|
591acbf732 | ||
|
|
56d0910533 | ||
|
|
6e01e8d4e0 | ||
|
|
2e8534955b | ||
|
|
82cd1ca65d | ||
|
|
decac20298 | ||
|
|
4a2a60255c | ||
|
|
cefee3a721 | ||
|
|
97a8705811 | ||
|
|
074eada27f | ||
|
|
951663ec3d | ||
|
|
8c0ab4dfec | ||
|
|
762b667b47 | ||
|
|
fc6374a07b | ||
|
|
e7e8e79630 | ||
|
|
c3c5501396 | ||
|
|
4e5d4b95a0 | ||
|
|
2a6d6c2a7e | ||
|
|
9635232b45 |
@@ -5,7 +5,7 @@ env:
|
||||
- TARGET_OS=win32
|
||||
- TARGET_OS=win64
|
||||
before_install:
|
||||
- if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw -y; fi
|
||||
- if [ $TARGET_OS != linux ]; then sudo add-apt-repository ppa:tobydox/mingw-x-precise -y; fi
|
||||
- sudo apt-get update -qq
|
||||
install:
|
||||
- if [ $TARGET_OS != linux ]; then sudo apt-get install -y nsis cloog-isl libmpc2 mingw32; fi
|
||||
|
||||
@@ -14,8 +14,8 @@ INCLUDE(CheckIncludeFiles)
|
||||
INCLUDE(FindPkgConfig)
|
||||
|
||||
SET(VERSION_MAJOR "1")
|
||||
SET(VERSION_MINOR "0")
|
||||
SET(VERSION_PATCH "99")
|
||||
SET(VERSION_MINOR "1")
|
||||
SET(VERSION_PATCH "2")
|
||||
#SET(VERSION_SUFFIX "")
|
||||
SET(VERSION "${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH}")
|
||||
IF(VERSION_SUFFIX)
|
||||
|
||||
Binary file not shown.
@@ -654,6 +654,63 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder
|
||||
<translation>Plugin entfe&rnen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DelayControls</name>
|
||||
<message>
|
||||
<source>Delay Samples</source>
|
||||
<translation>Samples verzögern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Feedback</source>
|
||||
<translation>Rückkopplung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lfo Frequency</source>
|
||||
<translation>LFO-Frequenz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lfo Amount</source>
|
||||
<translation>LFO-Stärke</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DelayControlsDialog</name>
|
||||
<message>
|
||||
<source>Delay</source>
|
||||
<translation>Verzögerung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Delay Time</source>
|
||||
<translation>Verzögerungszeit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Regen</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Feedback Amount</source>
|
||||
<translation>Rückkopplungsstärke</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Rate</source>
|
||||
<translation>Rate</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lfo</source>
|
||||
<translation>LFO</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Lfo Amt</source>
|
||||
<translation>LFO-Stärke</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DetuningHelper</name>
|
||||
<message>
|
||||
<source>Note detuning</source>
|
||||
<translation>Noten-Verstimmung</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DualFilterControlDialog</name>
|
||||
<message>
|
||||
@@ -780,6 +837,13 @@ Wenn Sie daran interessiert sind LMMS in eine andere Sprache zu übersetzen oder
|
||||
<translation>Vokalformant-Filter</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>DummyEffect</name>
|
||||
<message>
|
||||
<source>NOT FOUND</source>
|
||||
<translation>NICHT GEFUNDEN</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>Effect</name>
|
||||
<message>
|
||||
@@ -3294,7 +3358,7 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
|
||||
</message>
|
||||
<message>
|
||||
<source>Bandlimited Ramp wave</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Bandbegrenzte Sägezahnwelle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Bandlimited Square wave</source>
|
||||
@@ -3330,7 +3394,7 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
|
||||
</message>
|
||||
<message>
|
||||
<source>Digital Ramp wave</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Digitale Sägezahnwelle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Digital Square wave</source>
|
||||
@@ -3350,7 +3414,7 @@ Bitte besuchen Sie http://lmms.sf.net/wiki für Dokumentationen über LMMS.</tra
|
||||
</message>
|
||||
<message>
|
||||
<source>Ramp wave</source>
|
||||
<translation type="unfinished"></translation>
|
||||
<translation>Sägezahnwelle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Square wave</source>
|
||||
@@ -4085,6 +4149,21 @@ Grund: »%2«</translation>
|
||||
<translation>LMMS Plugin %1 hat keinen Plugin-Deskriptor namens %2!</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>PluginBrowser</name>
|
||||
<message>
|
||||
<source>Instrument plugins</source>
|
||||
<translation>Instrument-Plugins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Instrument browser</source>
|
||||
<translation>Instrument-Browser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
|
||||
<translation>Ziehen Sie ein Instrument entweder in den Song-Editor, den Beat+Bassline-Editor oder in eine existierende Instrumentspur.</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>ProjectRenderer</name>
|
||||
<message>
|
||||
@@ -6990,10 +7069,6 @@ Doppelklicken auf eines der Plugins zeigt Informaitonen über die Ports an.</tra
|
||||
</context>
|
||||
<context>
|
||||
<name>pluginBrowser</name>
|
||||
<message>
|
||||
<source>Instrument plugins</source>
|
||||
<translation>Instrument-Plugins</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>VST-host for using VST(i)-plugins within LMMS</source>
|
||||
<translation>VST-Host zum Benutzen von VST(i)-Plugins innerhalb von LMMS</translation>
|
||||
@@ -7056,14 +7131,6 @@ This chip was used in the Commodore 64 computer.</source>
|
||||
<translation>Emulation des MOS6581 und MOS8580 SID Chips.
|
||||
Dieser Chip wurde in Commodore 64 Computern genutzt.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Instrument browser</source>
|
||||
<translation>Instrument-Browser</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Drag an instrument into either the Song-Editor, the Beat+Bassline Editor or into an existing instrument track.</source>
|
||||
<translation>Ziehen Sie ein Instrument entweder in den Song-Editor, den Beat+Bassline-Editor oder in eine existierende Instrumentspur.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Player for SoundFont files</source>
|
||||
<translation>Wiedergabe von SoundFont-Dateien</translation>
|
||||
@@ -7148,6 +7215,10 @@ Dieser Chip wurde in Commodore 64 Computern genutzt.</translation>
|
||||
<source>Carla Patchbay Instrument</source>
|
||||
<translation>Carla Patchbay Instrument</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>A native delay plugin</source>
|
||||
<translation>Ein natives Verzögerung-Plugin</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>projectNotes</name>
|
||||
@@ -7476,6 +7547,57 @@ Latenz: %2 ms</translation>
|
||||
<translation>Wiedergabe-Courser im AudioFileProcessor anzeigen</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>setupWidget</name>
|
||||
<message>
|
||||
<source>OSS (Open Sound System)</source>
|
||||
<translation>OSS (Open Sound System)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>SDL (Simple DirectMedia Layer)</source>
|
||||
<translation>SDL (Simple DirectMedia Layer)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ALSA-Sequencer (Advanced Linux Sound Architecture)</source>
|
||||
<translation>ALSA-Sequencer (Advanced Linux Sound Architecture)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>JACK (JACK Audio Connection Kit)</source>
|
||||
<translation>JACK (JACK Audio Connection Kit)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ALSA Raw-MIDI (Advanced Linux Sound Architecture)</source>
|
||||
<translation>ALSA Raw-MIDI (Advanced Linux Sound Architecture)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PulseAudio (bad latency!)</source>
|
||||
<translation>PulseAudio (Schlechte Latenz!)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dummy (no sound output)</source>
|
||||
<translation>Dummy (Keine Soundausgabe)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Dummy (no MIDI support)</source>
|
||||
<translation>Dummy (Keine MIDI-Unterstützung)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>WinMM MIDI</source>
|
||||
<translation>WinMM MIDI</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>OSS Raw-MIDI (Open Sound System)</source>
|
||||
<translation>OSS Raw-MIDI (Open Sound System)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>ALSA (Advanced Linux Sound Architecture)</source>
|
||||
<translation>ALSA (Advanced Linux Sound Architecture)</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>PortAudio</source>
|
||||
<translation>PortAudio</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>sf2Instrument</name>
|
||||
<message>
|
||||
@@ -7902,6 +8024,13 @@ Latenz: %2 ms</translation>
|
||||
<translation>Rechts-nach-rechts</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>tabWidget</name>
|
||||
<message>
|
||||
<source>Settings for %1</source>
|
||||
<translation>Einstellungen für %1</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>timeLine</name>
|
||||
<message>
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE lmms-project>
|
||||
<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.98" type="instrumenttracksettings">
|
||||
<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.99" type="instrumenttracksettings">
|
||||
<head/>
|
||||
<instrumenttracksettings muted="0" type="0" name="Kick power" solo="0">
|
||||
<instrumenttrack pan="0" fxch="0" scale_type="linear" pitchrange="1" pitch="0" basenote="57" vol="100">
|
||||
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
|
||||
<instrument name="kicker">
|
||||
<kicker decay_numerator="4" decay_denominator="4" distend="0.8" click="0.25" endnote="0" version="1" decay="594" syncmode="0" noise="0" slope="0.33" dist="1.2" env="0.163" scale_type="linear" startnote="0" startfreq="130" endfreq="5" gain="1"/>
|
||||
<kicker decay_numerator="4" decay_denominator="4" distend="0.8" click="0.25" endnote="0" version="1" decay="360" syncmode="0" noise="0.2" slope="0.372" dist="1.2" env="0.163" startnote="0" startfreq="145" endfreq="30" gain="1"/>
|
||||
</instrument>
|
||||
<eldata scale_type="linear" fres="0.5" ftype="0" fcut="14000" fwet="0">
|
||||
<elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" scale_type="linear"/>
|
||||
<elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" scale_type="linear"/>
|
||||
<elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4" scale_type="linear"/>
|
||||
<eldata fres="0.5" ftype="0" fcut="14000" fwet="0">
|
||||
<elvol lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
|
||||
<elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
|
||||
<elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
|
||||
</eldata>
|
||||
<chordcreator chord="0" scale_type="linear" chordrange="1" chord-enabled="0"/>
|
||||
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" scale_type="linear" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
|
||||
<midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" scale_type="linear" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
|
||||
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
|
||||
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
|
||||
<midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
|
||||
<fxchain numofeffects="0" enabled="0"/>
|
||||
</instrumenttrack>
|
||||
</instrumenttracksettings>
|
||||
161
data/presets/Kicker/SnareMarch.xpf
Normal file
161
data/presets/Kicker/SnareMarch.xpf
Normal file
@@ -0,0 +1,161 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE lmms-project>
|
||||
<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.99" type="instrumenttracksettings">
|
||||
<head/>
|
||||
<instrumenttracksettings muted="0" type="0" name="Snare March" solo="0">
|
||||
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
|
||||
<instrument name="kicker">
|
||||
<kicker decay_numerator="4" decay_denominator="4" distend="0" click="1" endnote="0" version="1" decay="240" syncmode="0" noise="0.85" slope="1" dist="0" env="0.644" startnote="0" startfreq="229" endfreq="195" gain="1"/>
|
||||
</instrument>
|
||||
<eldata fres="0.56" ftype="3" fcut="929" fwet="1">
|
||||
<elvol lspd_denominator="4" sustain="0.294" pdel="0" userwavefile="" dec="0.453" lamt="0" syncmode="0" latt="0" rel="0.1" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="2" lspd="0.0997" ctlenvamt="0" lspd_numerator="4"/>
|
||||
<elcut lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="2" lspd="0.001" ctlenvamt="0" lspd_numerator="4"/>
|
||||
<elres lspd_denominator="4" sustain="0.5" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0.1" amt="0" x100="0" att="0" lpdel="0" hold="0.5" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
|
||||
</eldata>
|
||||
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
|
||||
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
|
||||
<midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
|
||||
<fxchain numofeffects="6" enabled="1">
|
||||
<effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
|
||||
<ladspacontrols ports="10">
|
||||
<port02 data="0"/>
|
||||
<port03 data="0"/>
|
||||
<port04 data="2.07"/>
|
||||
<port05 data="3.51"/>
|
||||
<port06 data="-47.97"/>
|
||||
<port07 data="-12.69"/>
|
||||
<port08 data="-47.97"/>
|
||||
<port09 data="-47.34"/>
|
||||
<port010 data="-47.97"/>
|
||||
<port011 data="9.99"/>
|
||||
</ladspacontrols>
|
||||
<key>
|
||||
<attribute value="caps" name="file"/>
|
||||
<attribute value="Eq2x2" name="plugin"/>
|
||||
</key>
|
||||
</effect>
|
||||
<effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.5" on="0">
|
||||
<ladspacontrols ports="4">
|
||||
<port02 data="0.370265"/>
|
||||
<port03 data="0"/>
|
||||
<port04 data="0.9995"/>
|
||||
<port05 data="0.10875"/>
|
||||
</ladspacontrols>
|
||||
<key>
|
||||
<attribute value="caps" name="file"/>
|
||||
<attribute value="Plate2x2" name="plugin"/>
|
||||
</key>
|
||||
</effect>
|
||||
<effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
|
||||
<ladspacontrols ports="9">
|
||||
<port07>
|
||||
<data scale_type="log" value="0.4" id="6315252"/>
|
||||
</port07>
|
||||
<port08>
|
||||
<data scale_type="log" value="2000.25" id="2498139"/>
|
||||
</port08>
|
||||
<port09 data="0"/>
|
||||
<port010 data="1"/>
|
||||
<port011 data="0.5"/>
|
||||
<port012 data="1"/>
|
||||
<port013 data="0"/>
|
||||
<port014>
|
||||
<data scale_type="log" value="659.34" id="5231681"/>
|
||||
</port014>
|
||||
<port015>
|
||||
<data scale_type="log" value="4862.63" id="1579810"/>
|
||||
</port015>
|
||||
</ladspacontrols>
|
||||
<key>
|
||||
<attribute value="calf" name="file"/>
|
||||
<attribute value="Reverb" name="plugin"/>
|
||||
</key>
|
||||
</effect>
|
||||
<effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="0.18" on="1">
|
||||
<ladspacontrols ports="13">
|
||||
<port04 data="0"/>
|
||||
<port05 data="1.02375"/>
|
||||
<port06 data="0.96"/>
|
||||
<port07 data="0.50125"/>
|
||||
<port012 data="5.049"/>
|
||||
<port013 data="10"/>
|
||||
<port015>
|
||||
<data scale_type="log" value="20000" id="8103466"/>
|
||||
</port015>
|
||||
<port016>
|
||||
<data scale_type="log" value="10" id="4889780"/>
|
||||
</port016>
|
||||
<port017>
|
||||
<data scale_type="log" value="20000" id="6261168"/>
|
||||
</port017>
|
||||
<port018>
|
||||
<data scale_type="log" value="10" id="4037431"/>
|
||||
</port018>
|
||||
<port019>
|
||||
<data scale_type="log" value="215.82" id="6293968"/>
|
||||
</port019>
|
||||
<port020 data="15.9973"/>
|
||||
<port021>
|
||||
<data scale_type="log" value="0.9999" id="2846145"/>
|
||||
</port021>
|
||||
</ladspacontrols>
|
||||
<key>
|
||||
<attribute value="calf" name="file"/>
|
||||
<attribute value="Saturator" name="plugin"/>
|
||||
</key>
|
||||
</effect>
|
||||
<effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
|
||||
<ladspacontrols ports="13">
|
||||
<port04 data="0"/>
|
||||
<port05 data="1.02375"/>
|
||||
<port06 data="0.96"/>
|
||||
<port07 data="1"/>
|
||||
<port012 data="5.049"/>
|
||||
<port013 data="10"/>
|
||||
<port015>
|
||||
<data scale_type="log" value="20000" id="7709628"/>
|
||||
</port015>
|
||||
<port016>
|
||||
<data scale_type="log" value="10" id="7480205"/>
|
||||
</port016>
|
||||
<port017>
|
||||
<data scale_type="log" value="20000" id="4036038"/>
|
||||
</port017>
|
||||
<port018>
|
||||
<data scale_type="log" value="10" id="1042561"/>
|
||||
</port018>
|
||||
<port019>
|
||||
<data scale_type="log" value="721.71" id="92193"/>
|
||||
</port019>
|
||||
<port020 data="1.31484"/>
|
||||
<port021>
|
||||
<data scale_type="log" value="0.100237" id="7520542"/>
|
||||
</port021>
|
||||
</ladspacontrols>
|
||||
<key>
|
||||
<attribute value="calf" name="file"/>
|
||||
<attribute value="Saturator" name="plugin"/>
|
||||
</key>
|
||||
</effect>
|
||||
<effect autoquit_numerator="4" autoquit_denominator="4" syncmode="0" autoquit="1" gate="0" name="ladspaeffect" wet="1" on="1">
|
||||
<ladspacontrols ports="10">
|
||||
<port02 data="-47.97"/>
|
||||
<port03 data="-10.8"/>
|
||||
<port04 data="0"/>
|
||||
<port05 data="0"/>
|
||||
<port06 data="0"/>
|
||||
<port07 data="0"/>
|
||||
<port08 data="0"/>
|
||||
<port09 data="0"/>
|
||||
<port010 data="0.72"/>
|
||||
<port011 data="2.52"/>
|
||||
</ladspacontrols>
|
||||
<key>
|
||||
<attribute value="caps" name="file"/>
|
||||
<attribute value="Eq2x2" name="plugin"/>
|
||||
</key>
|
||||
</effect>
|
||||
</fxchain>
|
||||
</instrumenttrack>
|
||||
</instrumenttracksettings>
|
||||
</lmms-project>
|
||||
21
data/presets/Kicker/TR909-RimShot.xpf
Normal file
21
data/presets/Kicker/TR909-RimShot.xpf
Normal file
@@ -0,0 +1,21 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE lmms-project>
|
||||
<lmms-project version="1.0" creator="LMMS" creatorversion="1.0.98" type="instrumenttracksettings">
|
||||
<head/>
|
||||
<instrumenttracksettings muted="0" type="0" name="TR909-RimShot" solo="0">
|
||||
<instrumenttrack pan="0" fxch="0" pitchrange="1" pitch="0" basenote="57" vol="100">
|
||||
<instrument name="kicker">
|
||||
<kicker decay_numerator="4" decay_denominator="4" distend="0.8" click="0.15" endnote="0" version="1" decay="40" syncmode="0" noise="0.13" slope="0.265" dist="100" env="0.044" startnote="0" startfreq="330" endfreq="5" gain="0.75"/>
|
||||
</instrument>
|
||||
<eldata fres="2.75" ftype="1" fcut="100" fwet="1">
|
||||
<elvol lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.2" lamt="1" syncmode="7" latt="0.1" rel="0" amt="1" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.0027" ctlenvamt="0" lspd_numerator="4"/>
|
||||
<elcut lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0" lamt="0" syncmode="6" latt="0" rel="0" amt="0.2" x100="0" att="0" lpdel="0" hold="0.2" lshp="1" lspd="0.0054" ctlenvamt="0" lspd_numerator="4"/>
|
||||
<elres lspd_denominator="4" sustain="0" pdel="0" userwavefile="" dec="0.5" lamt="0" syncmode="0" latt="0" rel="0" amt="0.2" x100="0" att="0" lpdel="0" hold="0" lshp="0" lspd="0.1" ctlenvamt="0" lspd_numerator="4"/>
|
||||
</eldata>
|
||||
<chordcreator chord="0" chordrange="1" chord-enabled="0"/>
|
||||
<arpeggiator arptime="100" arprange="1" arptime_denominator="4" syncmode="0" arpmode="0" arp-enabled="0" arp="0" arptime_numerator="4" arpdir="0" arpgate="100"/>
|
||||
<midiport inputcontroller="0" fixedoutputvelocity="-1" inputchannel="0" outputcontroller="0" writable="0" outputchannel="1" fixedinputvelocity="-1" fixedoutputnote="-1" outputprogram="1" basevelocity="63" readable="0"/>
|
||||
<fxchain numofeffects="0" enabled="0"/>
|
||||
</instrumenttrack>
|
||||
</instrumenttracksettings>
|
||||
</lmms-project>
|
||||
@@ -16,10 +16,11 @@ DMG_BACKGROUND_IMG="dmg_branding.png"
|
||||
cp "@CMAKE_SOURCE_DIR@/data/${DMG_BACKGROUND_IMG}" .
|
||||
|
||||
# you should not need to change these
|
||||
OS_VER=`sw_vers -productVersion|cut -d"." -f1-2`
|
||||
APP_LOWERCASE=$(echo $APP_NAME|tr '[:upper:]' '[:lower:]')
|
||||
APP_EXE="${APP_NAME}.app/Contents/MacOS/${APP_LOWERCASE}"
|
||||
|
||||
VOL_NAME="${APP_NAME} ${VERSION}" # volume name will be "SuperCoolApp 1.0.0"
|
||||
VOL_NAME="${APP_LOWERCASE}-${VERSION}-mac${OS_VER}" # volume name will be "SuperCoolApp 1.0.0"
|
||||
DMG_TMP="${VOL_NAME}-temp.dmg"
|
||||
DMG_FINAL="${VOL_NAME}.dmg" # final DMG name will be "SuperCoolApp 1.0.0.dmg"
|
||||
STAGING_DIR="./Install" # we copy all our stuff into this dir
|
||||
|
||||
@@ -74,7 +74,7 @@ public:
|
||||
}
|
||||
|
||||
void clearJournal();
|
||||
|
||||
void stopAllJournalling();
|
||||
JournallingObject * journallingObject( const jo_id_t _id )
|
||||
{
|
||||
if( m_joIDs.contains( _id ) )
|
||||
|
||||
@@ -38,7 +38,7 @@ public:
|
||||
}
|
||||
virtual ~RmsHelper()
|
||||
{
|
||||
if( m_buffer ) delete m_buffer;
|
||||
if( m_buffer ) delete[] m_buffer;
|
||||
}
|
||||
|
||||
inline void setSize( int size )
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
|
||||
#include <math.h>
|
||||
#include "lmms_constants.h"
|
||||
#include "lmms_math.h"
|
||||
|
||||
inline float hermiteInterpolate( float x0, float x1, float x2, float x3,
|
||||
float frac_pos )
|
||||
@@ -80,24 +81,13 @@ inline float cubicInterpolate( float v0, float v1, float v2, float v3, float x )
|
||||
inline float cosinusInterpolate( float v0, float v1, float x )
|
||||
{
|
||||
const float f = ( 1.0f - cosf( x * F_PI ) ) * 0.5f;
|
||||
#ifdef FP_FAST_FMAF
|
||||
return fmaf( f, v1-v0, v0 );
|
||||
#else
|
||||
return f * (v1-v0) + v0;
|
||||
#endif
|
||||
// return( v0*f + v1*( 1.0f-f ) );
|
||||
return fastFmaf( f, v1-v0, v0 );
|
||||
}
|
||||
|
||||
|
||||
inline float linearInterpolate( float v0, float v1, float x )
|
||||
{
|
||||
// take advantage of fma function if present in hardware
|
||||
|
||||
#ifdef FP_FAST_FMAF
|
||||
return fmaf( x, v1-v0, v0 );
|
||||
#else
|
||||
return x * (v1-v0) + v0;
|
||||
#endif
|
||||
return fastFmaf( x, v1-v0, v0 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -130,7 +130,40 @@ static inline int fast_rand()
|
||||
return( (unsigned)( next / 65536 ) % 32768 );
|
||||
}
|
||||
|
||||
//! @brief Takes advantage of fmal() function if present in hardware
|
||||
static inline long double fastFmal( long double a, long double b, long double c ) {
|
||||
#ifdef FP_FAST_FMAL
|
||||
#ifdef __clang__
|
||||
return fma( a, b, c );
|
||||
#else
|
||||
return fmal( a, b, c );
|
||||
#endif
|
||||
#else
|
||||
return a * b + c;
|
||||
#endif
|
||||
}
|
||||
|
||||
//! @brief Takes advantage of fmaf() function if present in hardware
|
||||
static inline float fastFmaf( float a, float b, float c ) {
|
||||
#ifdef FP_FAST_FMAF
|
||||
#ifdef __clang__
|
||||
return fma( a, b, c );
|
||||
#else
|
||||
return fmaf( a, b, c );
|
||||
#endif
|
||||
#else
|
||||
return a * b + c;
|
||||
#endif
|
||||
}
|
||||
|
||||
//! @brief Takes advantage of fma() function if present in hardware
|
||||
static inline double fastFma( double a, double b, double c ) {
|
||||
#ifdef FP_FAST_FMA
|
||||
return fma( a, b, c );
|
||||
#else
|
||||
return a * b + c;
|
||||
#endif
|
||||
}
|
||||
|
||||
// source: http://martin.ankerl.com/2007/10/04/optimized-pow-approximation-for-java-and-c-c/
|
||||
static inline double fastPow( double a, double b )
|
||||
|
||||
@@ -77,30 +77,30 @@ bool AmplifierEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames )
|
||||
for( fpp_t f = 0; f < frames; ++f )
|
||||
{
|
||||
// qDebug( "offset %d, value %f", f, m_ampControls.m_volumeModel.value( f ) );
|
||||
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
|
||||
sample_t s[2] = { buf[f][0], buf[f][1] };
|
||||
|
||||
// convert vol/pan values to left/right values
|
||||
const float left1 = m_ampControls.m_volumeModel.value( f ) *
|
||||
( m_ampControls.m_panModel.value( f ) <= 0
|
||||
const float left1 = m_ampControls.m_volumeModel.value() *
|
||||
( m_ampControls.m_panModel.value() <= 0
|
||||
? 1.0
|
||||
: 1.0 - m_ampControls.m_panModel.value( f ) / 100.0 );
|
||||
const float right1 = m_ampControls.m_volumeModel.value( f ) *
|
||||
( m_ampControls.m_panModel.value( f ) >= 0
|
||||
const float right1 = m_ampControls.m_volumeModel.value() *
|
||||
( m_ampControls.m_panModel.value() >= 0
|
||||
? 1.0
|
||||
: 1.0 + m_ampControls.m_panModel.value( f ) / 100.0 );
|
||||
: 1.0 + m_ampControls.m_panModel.value() / 100.0 );
|
||||
|
||||
// first stage amplification
|
||||
s[0] *= ( left1 / 100.0 );
|
||||
s[1] *= ( right1 / 100.0 );
|
||||
|
||||
// second stage amplification
|
||||
s[0] *= ( m_ampControls.m_leftModel.value( f ) / 100.0 );
|
||||
s[1] *= ( m_ampControls.m_rightModel.value( f ) / 100.0 );
|
||||
s[0] *= ( m_ampControls.m_leftModel.value() / 100.0 );
|
||||
s[1] *= ( m_ampControls.m_rightModel.value() / 100.0 );
|
||||
|
||||
buf[f][0] = d * buf[f][0] + w * s[0];
|
||||
buf[f][1] = d * buf[f][1] + w * s[1];
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
}
|
||||
|
||||
checkGate( outSum / frames );
|
||||
|
||||
@@ -88,13 +88,13 @@ bool BassBoosterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
|
||||
const float w = wetLevel();
|
||||
for( fpp_t f = 0; f < frames; ++f )
|
||||
{
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
|
||||
sample_t s[2] = { buf[f][0], buf[f][1] };
|
||||
m_bbFX.nextSample( s[0], s[1] );
|
||||
|
||||
buf[f][0] = d * buf[f][0] + w * s[0];
|
||||
buf[f][1] = d * buf[f][1] + w * s[1];
|
||||
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
}
|
||||
|
||||
checkGate( outSum / frames );
|
||||
|
||||
@@ -155,11 +155,11 @@ bool DualFilterEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames
|
||||
s[0] += ( s2[0] * mix2 );
|
||||
s[1] += ( s2[1] * mix2 );
|
||||
}
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
|
||||
// do another mix with dry signal
|
||||
buf[f][0] = d * buf[f][0] + w * s[0];
|
||||
buf[f][1] = d * buf[f][1] + w * s[1];
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
}
|
||||
|
||||
checkGate( outSum / frames );
|
||||
|
||||
@@ -39,7 +39,7 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) :
|
||||
|
||||
m_enabled1Model( true, this, tr( "Filter 1 enabled" ) ),
|
||||
m_filter1Model( this, tr( "Filter 1 type" ) ),
|
||||
m_cut1Model( 7000.0f, 1.0f, 14000.0f, 1.0f, this, tr( "Cutoff 1 frequency" ) ),
|
||||
m_cut1Model( 7000.0f, 1.0f, 20000.0f, 1.0f, this, tr( "Cutoff 1 frequency" ) ),
|
||||
m_res1Model( 0.5, basicFilters<0>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance 1" ) ),
|
||||
m_gain1Model( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Gain 1" ) ),
|
||||
|
||||
@@ -47,7 +47,7 @@ DualFilterControls::DualFilterControls( DualFilterEffect* effect ) :
|
||||
|
||||
m_enabled2Model( true, this, tr( "Filter 2 enabled" ) ),
|
||||
m_filter2Model( this, tr( "Filter 2 type" ) ),
|
||||
m_cut2Model( 7000.0f, 1.0f, 14000.0f, 1.0f, this, tr( "Cutoff 2 frequency" ) ),
|
||||
m_cut2Model( 7000.0f, 1.0f, 20000.0f, 1.0f, this, tr( "Cutoff 2 frequency" ) ),
|
||||
m_res2Model( 0.5, basicFilters<0>::minQ(), 10.0, 0.01, this, tr( "Q/Resonance 2" ) ),
|
||||
m_gain2Model( 100.0f, 0.0f, 200.0f, 0.1f, this, tr( "Gain 2" ) )
|
||||
{
|
||||
|
||||
@@ -567,6 +567,22 @@ lookahead_limiter::lookahead_limiter() {
|
||||
asc_coeff = 1.f;
|
||||
}
|
||||
|
||||
lookahead_limiter::~lookahead_limiter()
|
||||
{
|
||||
if( buffer != NULL)
|
||||
{
|
||||
free(buffer);
|
||||
}
|
||||
if( nextpos != NULL)
|
||||
{
|
||||
free(nextpos);
|
||||
}
|
||||
if( nextdelta != NULL)
|
||||
{
|
||||
free(nextdelta);
|
||||
}
|
||||
}
|
||||
|
||||
void lookahead_limiter::activate()
|
||||
{
|
||||
is_active = true;
|
||||
|
||||
@@ -608,6 +608,7 @@ public:
|
||||
void reset_asc();
|
||||
bool get_asc();
|
||||
lookahead_limiter();
|
||||
~lookahead_limiter();
|
||||
void set_multi(bool set);
|
||||
void process(float &left, float &right, float *multi_buffer);
|
||||
void set_sample_rate(uint32_t sr);
|
||||
|
||||
@@ -47,6 +47,7 @@ struct ladspa_instance: public plugin_ctl_iface
|
||||
#endif
|
||||
|
||||
ladspa_instance(audio_module_iface *_module, ladspa_plugin_metadata_set *_ladspa, int sample_rate);
|
||||
virtual ~ladspa_instance();
|
||||
virtual const line_graph_iface *get_line_graph_iface() const { return module->get_line_graph_iface(); }
|
||||
virtual float get_param_value(int param_no);
|
||||
virtual void set_param_value(int param_no, float value);
|
||||
|
||||
@@ -263,6 +263,7 @@ class mono_audio_module:
|
||||
}
|
||||
public:
|
||||
mono_audio_module();
|
||||
~mono_audio_module();
|
||||
void params_changed();
|
||||
void activate();
|
||||
void set_sample_rate(uint32_t sr);
|
||||
@@ -291,6 +292,7 @@ class stereo_audio_module:
|
||||
}
|
||||
public:
|
||||
stereo_audio_module();
|
||||
~stereo_audio_module();
|
||||
void params_changed();
|
||||
void activate();
|
||||
void set_sample_rate(uint32_t sr);
|
||||
|
||||
@@ -84,6 +84,7 @@ public:
|
||||
uint32_t srate;
|
||||
bool is_active;
|
||||
multibandlimiter_audio_module();
|
||||
~multibandlimiter_audio_module();
|
||||
void activate();
|
||||
void deactivate();
|
||||
void params_changed();
|
||||
|
||||
@@ -460,6 +460,14 @@ stereo_audio_module::stereo_audio_module() {
|
||||
meter_outR = 0.f;
|
||||
}
|
||||
|
||||
stereo_audio_module::~stereo_audio_module()
|
||||
{
|
||||
if( buffer != NULL )
|
||||
{
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
void stereo_audio_module::activate() {
|
||||
active = true;
|
||||
}
|
||||
@@ -686,6 +694,14 @@ mono_audio_module::mono_audio_module() {
|
||||
meter_outR = 0.f;
|
||||
}
|
||||
|
||||
mono_audio_module::~mono_audio_module()
|
||||
{
|
||||
if( buffer != NULL )
|
||||
{
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
void mono_audio_module::activate() {
|
||||
active = true;
|
||||
}
|
||||
|
||||
@@ -252,6 +252,14 @@ multibandlimiter_audio_module::multibandlimiter_audio_module()
|
||||
asc_old = true;
|
||||
}
|
||||
|
||||
multibandlimiter_audio_module::~multibandlimiter_audio_module()
|
||||
{
|
||||
if( buffer != NULL)
|
||||
{
|
||||
free(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
void multibandlimiter_audio_module::activate()
|
||||
{
|
||||
is_active = true;
|
||||
|
||||
@@ -54,6 +54,11 @@ ladspa_instance::ladspa_instance(audio_module_iface *_module, ladspa_plugin_meta
|
||||
module->post_instantiate();
|
||||
}
|
||||
|
||||
ladspa_instance::~ladspa_instance()
|
||||
{
|
||||
delete module;
|
||||
}
|
||||
|
||||
float ladspa_instance::get_param_value(int param_no)
|
||||
{
|
||||
// XXXKF hack
|
||||
|
||||
@@ -116,6 +116,8 @@ static void activateDj_eq_mono(LADSPA_Handle instance) {
|
||||
}
|
||||
|
||||
static void cleanupDj_eq_mono(LADSPA_Handle instance) {
|
||||
Dj_eq_mono *plugin_data = (Dj_eq_mono *)instance;
|
||||
free(plugin_data->filters);
|
||||
free(instance);
|
||||
}
|
||||
|
||||
@@ -283,6 +285,8 @@ static void activateDj_eq(LADSPA_Handle instance) {
|
||||
}
|
||||
|
||||
static void cleanupDj_eq(LADSPA_Handle instance) {
|
||||
Dj_eq *plugin_data = (Dj_eq *)instance;
|
||||
free(plugin_data->filters);
|
||||
free(instance);
|
||||
}
|
||||
|
||||
|
||||
@@ -137,6 +137,7 @@ static void cleanupFastLookaheadLimiter(LADSPA_Handle instance) {
|
||||
#line 188 "fast_lookahead_limiter_1913.xml"
|
||||
FastLookaheadLimiter *plugin_data = (FastLookaheadLimiter *)instance;
|
||||
free(plugin_data->buffer);
|
||||
free(plugin_data->chunks);
|
||||
free(instance);
|
||||
}
|
||||
|
||||
|
||||
@@ -74,7 +74,11 @@ static fftw_real *real_in, *real_out, *comp_in, *comp_out;
|
||||
|
||||
unsigned int fft_length[IMPULSES];
|
||||
|
||||
#ifdef __clang__
|
||||
void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out)
|
||||
#else
|
||||
inline void impulse2freq(int id, float *imp, unsigned int length, fftw_real *out)
|
||||
#endif
|
||||
{
|
||||
fftw_real impulse_time[MAX_FFT_LENGTH];
|
||||
#ifdef FFTW3
|
||||
@@ -198,6 +202,11 @@ static void cleanupImp(LADSPA_Handle instance) {
|
||||
local_free(plugin_data->op);
|
||||
local_free(plugin_data->overlap);
|
||||
local_free(plugin_data->opc);
|
||||
unsigned int i;
|
||||
for (i=0; i<IMPULSES; i++) {
|
||||
local_free(plugin_data->impulse_freq[i]);
|
||||
}
|
||||
local_free(plugin_data->impulse_freq);
|
||||
free(instance);
|
||||
}
|
||||
|
||||
|
||||
@@ -163,6 +163,7 @@ static void cleanupVynil(LADSPA_Handle instance) {
|
||||
free(plugin_data->buffer_m);
|
||||
free(plugin_data->buffer_s);
|
||||
free(plugin_data->click_buffer);
|
||||
free(plugin_data->highp);
|
||||
free(plugin_data->lowp_m);
|
||||
free(plugin_data->lowp_s);
|
||||
free(plugin_data->noise_filt);
|
||||
|
||||
@@ -145,7 +145,8 @@ activate_eq(LADSPA_Handle instance) {
|
||||
static
|
||||
void
|
||||
cleanup_eq(LADSPA_Handle instance) {
|
||||
|
||||
eq *plugin_data = (eq *)instance;
|
||||
free(plugin_data->filters);
|
||||
free(instance);
|
||||
}
|
||||
|
||||
|
||||
@@ -167,7 +167,8 @@ activate_eq(LADSPA_Handle instance) {
|
||||
static
|
||||
void
|
||||
cleanup_eq(LADSPA_Handle instance) {
|
||||
|
||||
eq *plugin_data = (eq *)instance;
|
||||
free(plugin_data->filters);
|
||||
free(instance);
|
||||
}
|
||||
|
||||
|
||||
@@ -575,13 +575,8 @@ AudioFileProcessorView::AudioFileProcessorView( Instrument * _instrument,
|
||||
m_interpBox->setFont( pointSize<8>( m_interpBox->font() ) );
|
||||
|
||||
// wavegraph
|
||||
m_waveView = new AudioFileProcessorWaveView( this, 245, 75, castModel<audioFileProcessor>()->m_sampleBuffer );
|
||||
m_waveView->move( 2, 172 );
|
||||
m_waveView->setKnobs(
|
||||
dynamic_cast<AudioFileProcessorWaveView::knob *>( m_startKnob ),
|
||||
dynamic_cast<AudioFileProcessorWaveView::knob *>( m_endKnob ),
|
||||
dynamic_cast<AudioFileProcessorWaveView::knob *>( m_loopKnob )
|
||||
);
|
||||
m_waveView = 0;
|
||||
newWaveView();
|
||||
|
||||
connect( castModel<audioFileProcessor>(), SIGNAL( isPlaying( f_cnt_t ) ),
|
||||
m_waveView, SLOT( isPlaying( f_cnt_t ) ) );
|
||||
@@ -630,6 +625,25 @@ void AudioFileProcessorView::dragEnterEvent( QDragEnterEvent * _dee )
|
||||
|
||||
|
||||
|
||||
void AudioFileProcessorView::newWaveView()
|
||||
{
|
||||
if ( m_waveView )
|
||||
{
|
||||
delete m_waveView;
|
||||
m_waveView = 0;
|
||||
}
|
||||
m_waveView = new AudioFileProcessorWaveView( this, 245, 75, castModel<audioFileProcessor>()->m_sampleBuffer );
|
||||
m_waveView->move( 2, 172 );
|
||||
m_waveView->setKnobs(
|
||||
dynamic_cast<AudioFileProcessorWaveView::knob *>( m_startKnob ),
|
||||
dynamic_cast<AudioFileProcessorWaveView::knob *>( m_endKnob ),
|
||||
dynamic_cast<AudioFileProcessorWaveView::knob *>( m_loopKnob ) );
|
||||
m_waveView->show();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void AudioFileProcessorView::dropEvent( QDropEvent * _de )
|
||||
{
|
||||
QString type = stringPairDrag::decodeKey( _de );
|
||||
@@ -638,6 +652,7 @@ void AudioFileProcessorView::dropEvent( QDropEvent * _de )
|
||||
{
|
||||
castModel<audioFileProcessor>()->setAudioFile( value );
|
||||
_de->accept();
|
||||
newWaveView();
|
||||
return;
|
||||
}
|
||||
else if( type == QString( "tco_%1" ).arg( track::SampleTrack ) )
|
||||
@@ -691,6 +706,7 @@ void AudioFileProcessorView::paintEvent( QPaintEvent * )
|
||||
|
||||
void AudioFileProcessorView::sampleUpdated( void )
|
||||
{
|
||||
newWaveView();
|
||||
m_waveView->update();
|
||||
update();
|
||||
}
|
||||
@@ -707,6 +723,7 @@ void AudioFileProcessorView::openAudioFile( void )
|
||||
{
|
||||
castModel<audioFileProcessor>()->setAudioFile( af );
|
||||
engine::getSong()->setModified();
|
||||
newWaveView();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -740,6 +757,7 @@ AudioFileProcessorWaveView::AudioFileProcessorWaveView( QWidget * _parent, int _
|
||||
m_to( m_sampleBuffer.frames() ),
|
||||
m_last_from( 0 ),
|
||||
m_last_to( 0 ),
|
||||
m_last_amp( 0 ),
|
||||
m_startKnob( 0 ),
|
||||
m_endKnob( 0 ),
|
||||
m_loopKnob( 0 ),
|
||||
|
||||
@@ -118,7 +118,7 @@ public:
|
||||
AudioFileProcessorView( Instrument * _instrument, QWidget * _parent );
|
||||
virtual ~AudioFileProcessorView();
|
||||
|
||||
|
||||
void newWaveView();
|
||||
protected slots:
|
||||
void sampleUpdated();
|
||||
void openAudioFile();
|
||||
|
||||
@@ -251,16 +251,16 @@ intptr_t CarlaInstrument::handleDispatcher(const NativeHostDispatcherOpcode opco
|
||||
|
||||
switch (opcode)
|
||||
{
|
||||
case HOST_OPCODE_NULL:
|
||||
case NATIVE_HOST_OPCODE_NULL:
|
||||
break;
|
||||
case HOST_OPCODE_UPDATE_PARAMETER:
|
||||
case HOST_OPCODE_UPDATE_MIDI_PROGRAM:
|
||||
case HOST_OPCODE_RELOAD_PARAMETERS:
|
||||
case HOST_OPCODE_RELOAD_MIDI_PROGRAMS:
|
||||
case HOST_OPCODE_RELOAD_ALL:
|
||||
case NATIVE_HOST_OPCODE_UPDATE_PARAMETER:
|
||||
case NATIVE_HOST_OPCODE_UPDATE_MIDI_PROGRAM:
|
||||
case NATIVE_HOST_OPCODE_RELOAD_PARAMETERS:
|
||||
case NATIVE_HOST_OPCODE_RELOAD_MIDI_PROGRAMS:
|
||||
case NATIVE_HOST_OPCODE_RELOAD_ALL:
|
||||
// nothing
|
||||
break;
|
||||
case HOST_OPCODE_UI_UNAVAILABLE:
|
||||
case NATIVE_HOST_OPCODE_UI_UNAVAILABLE:
|
||||
handleUiClosed();
|
||||
break;
|
||||
}
|
||||
@@ -459,7 +459,7 @@ PluginView* CarlaInstrument::instantiateView(QWidget* parent)
|
||||
|
||||
void CarlaInstrument::sampleRateChanged()
|
||||
{
|
||||
fDescriptor->dispatcher(fHandle, PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, 0, 0, nullptr, handleGetSampleRate());
|
||||
fDescriptor->dispatcher(fHandle, NATIVE_PLUGIN_OPCODE_SAMPLE_RATE_CHANGED, 0, 0, nullptr, handleGetSampleRate());
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------
|
||||
|
||||
@@ -30,14 +30,14 @@
|
||||
#include "song.h"
|
||||
|
||||
DelayControls::DelayControls( DelayEffect* effect ):
|
||||
EffectControls( effect ),
|
||||
m_effect ( effect ),
|
||||
m_delayTimeModel( 2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Delay Samples" )) ,
|
||||
m_feedbackModel(0.0f,0.0f,1.0f,0.01f,this,tr( "Feedback" ) ),
|
||||
m_lfoTimeModel(2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Lfo Frequency" ) ),
|
||||
m_lfoAmountModel(0.0, 0.0, 2.0, 0.0001, 2000.0, this, tr ( "Lfo Amount" ) )
|
||||
EffectControls( effect ),
|
||||
m_effect ( effect ),
|
||||
m_delayTimeModel( 0.5, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Delay Samples" )) ,
|
||||
m_feedbackModel(0.0f,0.0f,1.0f,0.01f,this,tr( "Feedback" ) ),
|
||||
m_lfoTimeModel(2.0, 0.01, 20.0, 0.0001, 20000.0, this, tr( "Lfo Frequency" ) ),
|
||||
m_lfoAmountModel(0.0, 0.0, 2.0, 0.0001, 2000.0, this, tr ( "Lfo Amount" ) )
|
||||
{
|
||||
connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeSampleRate() ) );
|
||||
connect( engine::mixer(), SIGNAL( sampleRateChanged() ), this, SLOT( changeSampleRate() ) );
|
||||
}
|
||||
|
||||
|
||||
@@ -45,10 +45,10 @@ DelayControls::DelayControls( DelayEffect* effect ):
|
||||
|
||||
void DelayControls::loadSettings( const QDomElement &_this )
|
||||
{
|
||||
m_delayTimeModel.loadSettings(_this, "DelayTimeSamples" );
|
||||
m_feedbackModel.loadSettings( _this, "FeebackAmount" );
|
||||
m_lfoTimeModel.loadSettings( _this , "LfoFrequency");
|
||||
m_lfoAmountModel.loadSettings( _this, "LfoAmount");
|
||||
m_delayTimeModel.loadSettings(_this, "DelayTimeSamples" );
|
||||
m_feedbackModel.loadSettings( _this, "FeebackAmount" );
|
||||
m_lfoTimeModel.loadSettings( _this , "LfoFrequency");
|
||||
m_lfoAmountModel.loadSettings( _this, "LfoAmount");
|
||||
}
|
||||
|
||||
|
||||
@@ -56,17 +56,15 @@ void DelayControls::loadSettings( const QDomElement &_this )
|
||||
|
||||
void DelayControls::saveSettings( QDomDocument& doc, QDomElement& _this )
|
||||
{
|
||||
m_delayTimeModel.saveSettings( doc, _this, "DelayTimeSamples" );
|
||||
m_feedbackModel.saveSettings( doc, _this ,"FeebackAmount" );
|
||||
m_lfoTimeModel.saveSettings( doc, _this, "LfoFrequency" );
|
||||
m_lfoAmountModel.saveSettings( doc, _this ,"LfoAmount" );
|
||||
m_delayTimeModel.saveSettings( doc, _this, "DelayTimeSamples" );
|
||||
m_feedbackModel.saveSettings( doc, _this ,"FeebackAmount" );
|
||||
m_lfoTimeModel.saveSettings( doc, _this, "LfoFrequency" );
|
||||
m_lfoAmountModel.saveSettings( doc, _this ,"LfoAmount" );
|
||||
}
|
||||
|
||||
|
||||
|
||||
void DelayControls::changeSampleRate()
|
||||
{
|
||||
m_effect->changeSampleRate();
|
||||
m_effect->changeSampleRate();
|
||||
}
|
||||
|
||||
#include "moc_delaycontrols.cxx"
|
||||
|
||||
@@ -35,38 +35,38 @@ class DelayEffect;
|
||||
|
||||
class DelayControls : public EffectControls
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_OBJECT
|
||||
public:
|
||||
DelayControls( DelayEffect* effect );
|
||||
virtual ~DelayControls()
|
||||
{
|
||||
}
|
||||
virtual void saveSettings( QDomDocument& doc, QDomElement& parent );
|
||||
virtual void loadSettings( const QDomElement& _this );
|
||||
inline virtual QString nodeName() const
|
||||
{
|
||||
return "Delay";
|
||||
}
|
||||
virtual int controlCount(){
|
||||
return 4;
|
||||
}
|
||||
virtual EffectControlDialog* createView()
|
||||
{
|
||||
return new DelayControlsDialog( this );
|
||||
}
|
||||
DelayControls( DelayEffect* effect );
|
||||
virtual ~DelayControls()
|
||||
{
|
||||
}
|
||||
virtual void saveSettings( QDomDocument& doc, QDomElement& parent );
|
||||
virtual void loadSettings( const QDomElement& _this );
|
||||
inline virtual QString nodeName() const
|
||||
{
|
||||
return "Delay";
|
||||
}
|
||||
virtual int controlCount(){
|
||||
return 4;
|
||||
}
|
||||
virtual EffectControlDialog* createView()
|
||||
{
|
||||
return new DelayControlsDialog( this );
|
||||
}
|
||||
|
||||
private slots:
|
||||
void changeSampleRate();
|
||||
void changeSampleRate();
|
||||
|
||||
private:
|
||||
DelayEffect* m_effect;
|
||||
TempoSyncKnobModel m_delayTimeModel;
|
||||
FloatModel m_feedbackModel;
|
||||
TempoSyncKnobModel m_lfoTimeModel;
|
||||
TempoSyncKnobModel m_lfoAmountModel;
|
||||
DelayEffect* m_effect;
|
||||
TempoSyncKnobModel m_delayTimeModel;
|
||||
FloatModel m_feedbackModel;
|
||||
TempoSyncKnobModel m_lfoTimeModel;
|
||||
TempoSyncKnobModel m_lfoAmountModel;
|
||||
|
||||
friend class DelayControlsDialog;
|
||||
friend class DelayEffect;
|
||||
friend class DelayControlsDialog;
|
||||
friend class DelayEffect;
|
||||
};
|
||||
|
||||
#endif // DELAYCONTROLS_H
|
||||
|
||||
@@ -31,40 +31,44 @@
|
||||
|
||||
|
||||
DelayControlsDialog::DelayControlsDialog( DelayControls *controls ) :
|
||||
EffectControlDialog( controls )
|
||||
EffectControlDialog( controls )
|
||||
{
|
||||
setAutoFillBackground( true );
|
||||
QPalette pal;
|
||||
pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) );
|
||||
setPalette( pal );
|
||||
setFixedSize( 200, 75 );
|
||||
setAutoFillBackground( true );
|
||||
QPalette pal;
|
||||
pal.setBrush( backgroundRole(), PLUGIN_NAME::getIconPixmap( "artwork" ) );
|
||||
setPalette( pal );
|
||||
setFixedSize( 200, 75 );
|
||||
|
||||
TempoSyncKnob* sampleDelayKnob = new TempoSyncKnob( knobBright_26, this );
|
||||
sampleDelayKnob->move( 20,10 );
|
||||
sampleDelayKnob->setVolumeKnob( false );
|
||||
sampleDelayKnob->setModel( &controls->m_delayTimeModel );
|
||||
sampleDelayKnob->setLabel( tr( "Delay" ) );
|
||||
sampleDelayKnob->setHintText( tr( "Delay Time Seconds:" ) + " ", "" );
|
||||
TempoSyncKnob* sampleDelayKnob = new TempoSyncKnob( knobBright_26, this );
|
||||
sampleDelayKnob->move( 20,10 );
|
||||
sampleDelayKnob->setVolumeKnob( false );
|
||||
sampleDelayKnob->setModel( &controls->m_delayTimeModel );
|
||||
sampleDelayKnob->setLabel( tr( "Delay" ) );
|
||||
sampleDelayKnob->setHintText( tr( "Delay Time" ) + " ", " s" );
|
||||
|
||||
knob * feedbackKnob = new knob( knobBright_26, this );
|
||||
feedbackKnob->move( 63,10 );
|
||||
feedbackKnob->setVolumeKnob( true) ;
|
||||
feedbackKnob->setModel( &controls->m_feedbackModel);
|
||||
feedbackKnob->setLabel( tr( "Regen" ) );
|
||||
feedbackKnob->setHintText( tr ( "Feedback Amount:" ) + " ", "" );
|
||||
knob * feedbackKnob = new knob( knobBright_26, this );
|
||||
feedbackKnob->move( 63,10 );
|
||||
feedbackKnob->setVolumeKnob( true) ;
|
||||
feedbackKnob->setModel( &controls->m_feedbackModel);
|
||||
feedbackKnob->setLabel( tr( "Regen" ) );
|
||||
feedbackKnob->setHintText( tr ( "Feedback Amount" ) + " " , "" );
|
||||
|
||||
TempoSyncKnob * lfoFreqKnob = new TempoSyncKnob( knobBright_26, this );
|
||||
lfoFreqKnob->move( 106,10 );
|
||||
lfoFreqKnob->setVolumeKnob( false );
|
||||
lfoFreqKnob->setModel( &controls->m_lfoTimeModel );
|
||||
lfoFreqKnob->setLabel( tr( "Rate" ) );
|
||||
lfoFreqKnob->setHintText( tr ( "Lfo Seconds:" ) + " ", "" );
|
||||
TempoSyncKnob * lfoFreqKnob = new TempoSyncKnob( knobBright_26, this );
|
||||
lfoFreqKnob->move( 106,10 );
|
||||
lfoFreqKnob->setVolumeKnob( false );
|
||||
lfoFreqKnob->setModel( &controls->m_lfoTimeModel );
|
||||
lfoFreqKnob->setLabel( tr( "Rate" ) );
|
||||
lfoFreqKnob->setHintText( tr ( "Lfo") + " ", " s" );
|
||||
|
||||
TempoSyncKnob * lfoAmtKnob = new TempoSyncKnob( knobBright_26, this );
|
||||
lfoAmtKnob->move( 150,10 );
|
||||
lfoAmtKnob->setVolumeKnob( false );
|
||||
lfoAmtKnob->setModel( &controls->m_lfoAmountModel );
|
||||
lfoAmtKnob->setLabel( tr( "Lfo" ) );
|
||||
lfoAmtKnob->setHintText( tr ( "Lfo Amt" ) + " " , " s" );
|
||||
|
||||
TempoSyncKnob * lfoAmtKnob = new TempoSyncKnob( knobBright_26, this );
|
||||
lfoAmtKnob->move( 150,10 );
|
||||
lfoAmtKnob->setVolumeKnob( false );
|
||||
lfoAmtKnob->setModel( &controls->m_lfoAmountModel );
|
||||
lfoAmtKnob->setLabel( tr( "Lfo" ) );
|
||||
lfoAmtKnob->setHintText( tr ( "Lfo Amt:" ) + " ", "" );
|
||||
|
||||
}
|
||||
|
||||
|
||||
#include "moc_delaycontrols.cxx"
|
||||
|
||||
@@ -32,10 +32,10 @@ class DelayControls;
|
||||
class DelayControlsDialog : public EffectControlDialog
|
||||
{
|
||||
public:
|
||||
DelayControlsDialog( DelayControls* controls );
|
||||
virtual ~DelayControlsDialog()
|
||||
{
|
||||
}
|
||||
DelayControlsDialog( DelayControls* controls );
|
||||
virtual ~DelayControlsDialog()
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
#endif // DELAYCONTROLSDIALOG_H
|
||||
|
||||
@@ -32,27 +32,27 @@ extern "C"
|
||||
|
||||
Plugin::Descriptor PLUGIN_EXPORT delay_plugin_descriptor =
|
||||
{
|
||||
STRINGIFY( PLUGIN_NAME ),
|
||||
"Delay",
|
||||
QT_TRANSLATE_NOOP( "pluginBrowser", "A native delay plugin" ),
|
||||
"Dave French <contact/dot/dave/dot/french3/at/googlemail/dot/com>",
|
||||
0x0100,
|
||||
Plugin::Effect,
|
||||
new PluginPixmapLoader( "logo" ),
|
||||
NULL,
|
||||
NULL
|
||||
STRINGIFY( PLUGIN_NAME ),
|
||||
"Delay",
|
||||
QT_TRANSLATE_NOOP( "pluginBrowser", "A native delay plugin" ),
|
||||
"Dave French <contact/dot/dave/dot/french3/at/googlemail/dot/com>",
|
||||
0x0100,
|
||||
Plugin::Effect,
|
||||
new PluginPixmapLoader( "logo" ),
|
||||
NULL,
|
||||
NULL
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
|
||||
DelayEffect::DelayEffect( Model* parent, const Plugin::Descriptor::SubPluginFeatures::Key* key ) :
|
||||
Effect( &delay_plugin_descriptor, parent, key ),
|
||||
m_delayControls( this )
|
||||
Effect( &delay_plugin_descriptor, parent, key ),
|
||||
m_delayControls( this )
|
||||
{
|
||||
m_delay = 0;
|
||||
m_delay = new StereoDelay( 20, engine::mixer()->processingSampleRate() );
|
||||
m_lfo = new Lfo( engine::mixer()->processingSampleRate() );
|
||||
m_delay = 0;
|
||||
m_delay = new StereoDelay( 20, engine::mixer()->processingSampleRate() );
|
||||
m_lfo = new Lfo( engine::mixer()->processingSampleRate() );
|
||||
}
|
||||
|
||||
|
||||
@@ -60,14 +60,14 @@ DelayEffect::DelayEffect( Model* parent, const Plugin::Descriptor::SubPluginFeat
|
||||
|
||||
DelayEffect::~DelayEffect()
|
||||
{
|
||||
if( m_delay )
|
||||
{
|
||||
delete m_delay;
|
||||
}
|
||||
if( m_lfo )
|
||||
{
|
||||
delete m_lfo;
|
||||
}
|
||||
if( m_delay )
|
||||
{
|
||||
delete m_delay;
|
||||
}
|
||||
if( m_lfo )
|
||||
{
|
||||
delete m_lfo;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,37 +75,37 @@ DelayEffect::~DelayEffect()
|
||||
|
||||
bool DelayEffect::processAudioBuffer( sampleFrame* buf, const fpp_t frames )
|
||||
{
|
||||
if( !isEnabled() || !isRunning () )
|
||||
{
|
||||
return( false );
|
||||
}
|
||||
double outSum = 0.0;
|
||||
const float d = dryLevel();
|
||||
const float w = wetLevel();
|
||||
const float length = m_delayControls.m_delayTimeModel.value() * engine::mixer()->processingSampleRate();
|
||||
const float amplitude = m_delayControls.m_lfoAmountModel.value() * engine::mixer()->processingSampleRate();
|
||||
m_lfo->setFrequency( 1.0 / m_delayControls.m_lfoTimeModel.value() );
|
||||
m_delay->setFeedback( m_delayControls.m_feedbackModel.value() );
|
||||
sample_t dryS[2];
|
||||
for( fpp_t f = 0; f < frames; ++f )
|
||||
{
|
||||
dryS[0] = buf[f][0];
|
||||
dryS[1] = buf[f][1];
|
||||
m_delay->setLength( ( float )length + ( amplitude * ( float )m_lfo->tick() ) );
|
||||
m_delay->tick( buf[f] );
|
||||
if( !isEnabled() || !isRunning () )
|
||||
{
|
||||
return( false );
|
||||
}
|
||||
double outSum = 0.0;
|
||||
const float d = dryLevel();
|
||||
const float w = wetLevel();
|
||||
const float length = m_delayControls.m_delayTimeModel.value() * engine::mixer()->processingSampleRate();
|
||||
const float amplitude = m_delayControls.m_lfoAmountModel.value() * engine::mixer()->processingSampleRate();
|
||||
m_lfo->setFrequency( 1.0 / m_delayControls.m_lfoTimeModel.value() );
|
||||
m_delay->setFeedback( m_delayControls.m_feedbackModel.value() );
|
||||
sample_t dryS[2];
|
||||
for( fpp_t f = 0; f < frames; ++f )
|
||||
{
|
||||
dryS[0] = buf[f][0];
|
||||
dryS[1] = buf[f][1];
|
||||
m_delay->setLength( ( float )length + ( amplitude * ( float )m_lfo->tick() ) );
|
||||
m_delay->tick( buf[f] );
|
||||
|
||||
buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] );
|
||||
buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] );
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
}
|
||||
checkGate( outSum / frames );
|
||||
return isRunning();
|
||||
buf[f][0] = ( d * dryS[0] ) + ( w * buf[f][0] );
|
||||
buf[f][1] = ( d * dryS[1] ) + ( w * buf[f][1] );
|
||||
outSum += buf[f][0]*buf[f][0] + buf[f][1]*buf[f][1];
|
||||
}
|
||||
checkGate( outSum / frames );
|
||||
return isRunning();
|
||||
}
|
||||
|
||||
void DelayEffect::changeSampleRate()
|
||||
{
|
||||
m_lfo->setSampleRate( engine::mixer()->processingSampleRate() );
|
||||
m_delay->setSampleRate( engine::mixer()->processingSampleRate() );
|
||||
m_lfo->setSampleRate( engine::mixer()->processingSampleRate() );
|
||||
m_delay->setSampleRate( engine::mixer()->processingSampleRate() );
|
||||
}
|
||||
|
||||
|
||||
@@ -117,7 +117,7 @@ extern "C"
|
||||
//needed for getting plugin out of shared lib
|
||||
Plugin * PLUGIN_EXPORT lmms_plugin_main( Model* parent, void* data )
|
||||
{
|
||||
return new DelayEffect( parent , static_cast<const Plugin::Descriptor::SubPluginFeatures::Key *>( data ) );
|
||||
return new DelayEffect( parent , static_cast<const Plugin::Descriptor::SubPluginFeatures::Key *>( data ) );
|
||||
}
|
||||
|
||||
}}
|
||||
|
||||
@@ -33,19 +33,19 @@
|
||||
class DelayEffect : public Effect
|
||||
{
|
||||
public:
|
||||
DelayEffect(Model* parent , const Descriptor::SubPluginFeatures::Key* key );
|
||||
virtual ~DelayEffect();
|
||||
virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames );
|
||||
virtual EffectControls* controls()
|
||||
{
|
||||
return &m_delayControls;
|
||||
}
|
||||
void changeSampleRate();
|
||||
DelayEffect(Model* parent , const Descriptor::SubPluginFeatures::Key* key );
|
||||
virtual ~DelayEffect();
|
||||
virtual bool processAudioBuffer( sampleFrame* buf, const fpp_t frames );
|
||||
virtual EffectControls* controls()
|
||||
{
|
||||
return &m_delayControls;
|
||||
}
|
||||
void changeSampleRate();
|
||||
|
||||
private:
|
||||
DelayControls m_delayControls;
|
||||
StereoDelay* m_delay;
|
||||
Lfo* m_lfo;
|
||||
DelayControls m_delayControls;
|
||||
StereoDelay* m_delay;
|
||||
Lfo* m_lfo;
|
||||
};
|
||||
|
||||
#endif // DELAYEFFECT_H
|
||||
|
||||
@@ -30,8 +30,8 @@
|
||||
|
||||
Lfo::Lfo( int samplerate )
|
||||
{
|
||||
m_samplerate = samplerate;
|
||||
m_twoPiOverSr = F_2PI / samplerate;
|
||||
m_samplerate = samplerate;
|
||||
m_twoPiOverSr = F_2PI / samplerate;
|
||||
}
|
||||
|
||||
|
||||
@@ -39,8 +39,8 @@ Lfo::Lfo( int samplerate )
|
||||
|
||||
float Lfo::tick()
|
||||
{
|
||||
float output = sinf( m_phase );
|
||||
m_phase += m_increment;
|
||||
float output = sinf( m_phase );
|
||||
m_phase += m_increment;
|
||||
|
||||
return output;
|
||||
return output;
|
||||
}
|
||||
|
||||
@@ -30,50 +30,50 @@
|
||||
class Lfo
|
||||
{
|
||||
public:
|
||||
Lfo( int samplerate );
|
||||
~Lfo()
|
||||
{
|
||||
}
|
||||
Lfo( int samplerate );
|
||||
~Lfo()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
inline void setFrequency( double frequency )
|
||||
{
|
||||
if( frequency < 0 || frequency > ( m_samplerate / 2.0 ) || frequency == m_frequency )
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_frequency = frequency;
|
||||
m_increment = m_frequency * m_twoPiOverSr;
|
||||
inline void setFrequency( double frequency )
|
||||
{
|
||||
if( frequency < 0 || frequency > ( m_samplerate / 2.0 ) || frequency == m_frequency )
|
||||
{
|
||||
return;
|
||||
}
|
||||
m_frequency = frequency;
|
||||
m_increment = m_frequency * m_twoPiOverSr;
|
||||
|
||||
if( m_phase >= F_2PI )
|
||||
{
|
||||
m_phase -= F_2PI;
|
||||
}
|
||||
}
|
||||
if( m_phase >= F_2PI )
|
||||
{
|
||||
m_phase -= F_2PI;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
inline void setSampleRate ( int samplerate )
|
||||
{
|
||||
m_samplerate = samplerate;
|
||||
m_twoPiOverSr = F_2PI / samplerate;
|
||||
m_increment = m_frequency * m_twoPiOverSr;
|
||||
}
|
||||
inline void setSampleRate ( int samplerate )
|
||||
{
|
||||
m_samplerate = samplerate;
|
||||
m_twoPiOverSr = F_2PI / samplerate;
|
||||
m_increment = m_frequency * m_twoPiOverSr;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
float tick();
|
||||
float tick();
|
||||
|
||||
private:
|
||||
double m_frequency;
|
||||
double m_phase;
|
||||
double m_increment;
|
||||
double m_twoPiOverSr;
|
||||
int m_samplerate;
|
||||
double m_frequency;
|
||||
double m_phase;
|
||||
double m_increment;
|
||||
double m_twoPiOverSr;
|
||||
int m_samplerate;
|
||||
};
|
||||
|
||||
#endif // LFO_H
|
||||
|
||||
@@ -31,14 +31,14 @@
|
||||
|
||||
StereoDelay::StereoDelay( int maxTime, int sampleRate )
|
||||
{
|
||||
m_buffer = 0;
|
||||
m_maxTime = maxTime;
|
||||
m_maxLength = maxTime * sampleRate;
|
||||
m_length = m_maxLength;
|
||||
m_buffer = 0;
|
||||
m_maxTime = maxTime;
|
||||
m_maxLength = maxTime * sampleRate;
|
||||
m_length = m_maxLength;
|
||||
|
||||
m_index = 0;
|
||||
m_feedback = 0.0f;
|
||||
setSampleRate( sampleRate );
|
||||
m_index = 0;
|
||||
m_feedback = 0.0f;
|
||||
setSampleRate( sampleRate );
|
||||
}
|
||||
|
||||
|
||||
@@ -46,10 +46,10 @@ StereoDelay::StereoDelay( int maxTime, int sampleRate )
|
||||
|
||||
StereoDelay::~StereoDelay()
|
||||
{
|
||||
if( m_buffer )
|
||||
{
|
||||
delete m_buffer;
|
||||
}
|
||||
if( m_buffer )
|
||||
{
|
||||
delete m_buffer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -57,24 +57,24 @@ StereoDelay::~StereoDelay()
|
||||
|
||||
void StereoDelay::tick( sampleFrame frame )
|
||||
{
|
||||
m_buffer[m_index][0] = frame[0];
|
||||
m_buffer[m_index][1] = frame[1];
|
||||
m_buffer[m_index][0] = frame[0];
|
||||
m_buffer[m_index][1] = frame[1];
|
||||
|
||||
int readIndex = m_index - ( int )m_length;
|
||||
if( readIndex < 0 )
|
||||
{
|
||||
readIndex += m_maxLength;
|
||||
}
|
||||
float fract = fraction( m_length );
|
||||
frame[0] = linearInterpolate( m_buffer[readIndex][0] ,
|
||||
m_buffer[( readIndex+1) % m_maxLength][0], fract );
|
||||
frame[1] = linearInterpolate( m_buffer[readIndex][1] ,
|
||||
m_buffer[( readIndex+1) % m_maxLength][1], fract );
|
||||
int readIndex = m_index - ( int )m_length - 1;
|
||||
if( readIndex < 0 )
|
||||
{
|
||||
readIndex += m_maxLength;
|
||||
}
|
||||
float fract = 1.0f - fraction( m_length );
|
||||
frame[0] = linearInterpolate( m_buffer[readIndex][0] ,
|
||||
m_buffer[( readIndex+1) % m_maxLength][0], fract );
|
||||
frame[1] = linearInterpolate( m_buffer[readIndex][1] ,
|
||||
m_buffer[( readIndex+1) % m_maxLength][1], fract );
|
||||
|
||||
m_buffer[m_index][0] += frame[0] * m_feedback;
|
||||
m_buffer[m_index][1] += frame[1] * m_feedback;
|
||||
m_buffer[m_index][0] += frame[0] * m_feedback;
|
||||
m_buffer[m_index][1] += frame[1] * m_feedback;
|
||||
|
||||
m_index = ( m_index + 1) % m_maxLength;
|
||||
m_index = ( m_index + 1) % m_maxLength;
|
||||
}
|
||||
|
||||
|
||||
@@ -82,13 +82,18 @@ void StereoDelay::tick( sampleFrame frame )
|
||||
|
||||
void StereoDelay::setSampleRate( int sampleRate )
|
||||
{
|
||||
if( m_buffer )
|
||||
{
|
||||
delete m_buffer;
|
||||
}
|
||||
if( m_buffer )
|
||||
{
|
||||
delete m_buffer;
|
||||
}
|
||||
|
||||
|
||||
m_buffer = new sampleFrame[( int )( sampleRate * m_maxTime )];
|
||||
int bufferSize = ( int )( sampleRate * m_maxTime );
|
||||
m_buffer = new sampleFrame[bufferSize];
|
||||
for( int i = 0 ; i < bufferSize ; i++)
|
||||
{
|
||||
m_buffer[i][0] = 0.0;
|
||||
m_buffer[i][1] = 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -30,31 +30,31 @@
|
||||
class StereoDelay
|
||||
{
|
||||
public:
|
||||
StereoDelay( int maxLength, int sampleRate );
|
||||
~StereoDelay();
|
||||
inline void setLength( float length )
|
||||
{
|
||||
if( length <= m_maxLength && length >= 0 )
|
||||
{
|
||||
m_length = length;
|
||||
}
|
||||
}
|
||||
StereoDelay( int maxLength, int sampleRate );
|
||||
~StereoDelay();
|
||||
inline void setLength( float length )
|
||||
{
|
||||
if( length <= m_maxLength && length >= 0 )
|
||||
{
|
||||
m_length = length;
|
||||
}
|
||||
}
|
||||
|
||||
inline void setFeedback( float feedback )
|
||||
{
|
||||
m_feedback = feedback;
|
||||
}
|
||||
inline void setFeedback( float feedback )
|
||||
{
|
||||
m_feedback = feedback;
|
||||
}
|
||||
|
||||
void tick( sampleFrame frame );
|
||||
void setSampleRate( int sampleRate );
|
||||
void tick( sampleFrame frame );
|
||||
void setSampleRate( int sampleRate );
|
||||
|
||||
private:
|
||||
sampleFrame* m_buffer;
|
||||
int m_maxLength;
|
||||
float m_length;
|
||||
int m_index;
|
||||
float m_feedback;
|
||||
float m_maxTime;
|
||||
sampleFrame* m_buffer;
|
||||
int m_maxLength;
|
||||
float m_length;
|
||||
int m_index;
|
||||
float m_feedback;
|
||||
float m_maxTime;
|
||||
};
|
||||
|
||||
#endif // STEREODELAY_H
|
||||
|
||||
@@ -214,11 +214,10 @@ bool dynProcEffect::processAudioBuffer( sampleFrame * _buf,
|
||||
s[0] *= outputGain;
|
||||
s[1] *= outputGain;
|
||||
|
||||
out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
|
||||
// mix wet/dry signals
|
||||
_buf[f][0] = d * _buf[f][0] + w * s[0];
|
||||
_buf[f][1] = d * _buf[f][1] + w * s[1];
|
||||
|
||||
out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
|
||||
}
|
||||
|
||||
checkGate( out_sum / _frames );
|
||||
|
||||
@@ -780,16 +780,18 @@ void lb302Synth::processNote( NotePlayHandle * _n )
|
||||
|
||||
void lb302Synth::play( sampleFrame * _working_buffer )
|
||||
{
|
||||
m_notesMutex.lock();
|
||||
while( ! m_notes.isEmpty() )
|
||||
{
|
||||
processNote( m_notes.takeFirst() );
|
||||
};
|
||||
m_notesMutex.unlock();
|
||||
|
||||
const fpp_t frames = engine::mixer()->framesPerPeriod();
|
||||
|
||||
process( _working_buffer, frames );
|
||||
instrumentTrack()->processAudioBuffer( _working_buffer, frames, NULL );
|
||||
release_frame = 0;
|
||||
// release_frame = 0; //removed for issue # 1432
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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,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 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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_wlen3 ? m_ch3Counter % m_wlen3 : 0;
|
||||
|
||||
// render triangle wave
|
||||
if( m_wlen3 <= m_maxWlen && ch3Enabled )
|
||||
{
|
||||
ch3Level = static_cast<int>( 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;
|
||||
|
||||
@@ -497,7 +497,7 @@ void opl2instrument::loadPatch(unsigned char inst[14]) {
|
||||
void opl2instrument::tuneEqual(int center, float Hz) {
|
||||
float tmp;
|
||||
for(int n=0; n<128; ++n) {
|
||||
tmp = Hz*pow( 2, ( n - center ) / 12.0 + pitchbend / 1200.0 );
|
||||
tmp = Hz*pow( 2.0, ( n - center ) * ( 1.0 / 12.0 ) + pitchbend * ( 1.0 / 1200.0 ) );
|
||||
fnums[n] = Hz2fnum( tmp );
|
||||
}
|
||||
}
|
||||
@@ -505,7 +505,7 @@ void opl2instrument::tuneEqual(int center, float Hz) {
|
||||
// Find suitable F number in lowest possible block
|
||||
int opl2instrument::Hz2fnum(float Hz) {
|
||||
for(int block=0; block<8; ++block) {
|
||||
unsigned int fnum = Hz * pow(2, 20-block) / 49716;
|
||||
unsigned int fnum = Hz * pow( 2.0, 20.0 - (double)block ) * ( 1.0 / 49716.0 );
|
||||
if(fnum<1023) {
|
||||
return fnum + (block << 10);
|
||||
}
|
||||
|
||||
@@ -360,11 +360,11 @@ void papuInstrument::playNote( NotePlayHandle * _n,
|
||||
//PRNG Frequency = (1048576 Hz / (ratio + 1)) / 2 ^ (shiftclockfreq + 1)
|
||||
char sopt=0;
|
||||
char ropt=1;
|
||||
float fopt = 524288.0 / ( ropt * pow( 2, sopt+1 ) );
|
||||
float fopt = 524288.0 / ( ropt * pow( 2.0, sopt + 1.0 ) );
|
||||
float f;
|
||||
for ( char s=0; s<16; s++ )
|
||||
for ( char r=0; r<8; r++ ) {
|
||||
f = 524288.0 / ( r * pow( 2, s+1 ) );
|
||||
f = 524288.0 / ( r * pow( 2.0, s + 1.0 ) );
|
||||
if( fabs( freq-fopt ) > fabs( freq-f ) ) {
|
||||
fopt = f;
|
||||
ropt = r;
|
||||
|
||||
@@ -81,15 +81,6 @@ malletsInstrument::malletsInstrument( InstrumentTrack * _instrument_track ):
|
||||
!QFileInfo( configManager::inst()->stkDir() + QDir::separator()
|
||||
+ "sinewave.raw" ).exists() )
|
||||
{
|
||||
// try to inform user about missing Stk-installation
|
||||
if( m_filesMissing && engine::hasGUI() )
|
||||
{
|
||||
QMessageBox::information( 0, tr( "Missing files" ),
|
||||
tr( "Your Stk-installation seems to be "
|
||||
"incomplete. Please make sure "
|
||||
"the full Stk-package is installed!" ),
|
||||
QMessageBox::Ok );
|
||||
}
|
||||
|
||||
// ModalBar
|
||||
m_presetsModel.addItem( tr( "Marimba" ) );
|
||||
@@ -334,6 +325,16 @@ malletsInstrumentView::malletsInstrumentView( malletsInstrument * _instrument,
|
||||
m_spreadKnob->setLabel( tr( "Spread" ) );
|
||||
m_spreadKnob->move( 190, 140 );
|
||||
m_spreadKnob->setHintText( tr( "Spread:" ) + " ", "" );
|
||||
|
||||
// try to inform user about missing Stk-installation
|
||||
if( _instrument->m_filesMissing && engine::hasGUI() )
|
||||
{
|
||||
QMessageBox::information( 0, tr( "Missing files" ),
|
||||
tr( "Your Stk-installation seems to be "
|
||||
"incomplete. Please make sure "
|
||||
"the full Stk-package is installed!" ),
|
||||
QMessageBox::Ok );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -415,7 +415,7 @@ void VstPlugin::setParameterDump( const QMap<QString, QString> & _pdump )
|
||||
{
|
||||
( *it ).section( ':', 0, 0 ).toInt(),
|
||||
"",
|
||||
( *it ).section( ':', 1, 1 ).toFloat()
|
||||
( *it ).section( ':', 2, -1 ).toFloat()
|
||||
} ;
|
||||
m.addInt( item.index );
|
||||
m.addString( item.shortLabel );
|
||||
|
||||
@@ -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<WatsynInstrument>();
|
||||
m_selectedGraphGroup -> setModel( &w -> m_selectedGraph);
|
||||
|
||||
// A-modulation button group
|
||||
pixmapButton * amod_mixButton = new pixmapButton( this, NULL );
|
||||
|
||||
@@ -130,11 +130,10 @@ bool waveShaperEffect::processAudioBuffer( sampleFrame * _buf,
|
||||
s[0] *= output;
|
||||
s[1] *= output;
|
||||
|
||||
out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
|
||||
// mix wet/dry signals
|
||||
_buf[f][0] = d * _buf[f][0] + w * s[0];
|
||||
_buf[f][1] = d * _buf[f][1] + w * s[1];
|
||||
|
||||
out_sum += _buf[f][0]*_buf[f][0] + _buf[f][1]*_buf[f][1];
|
||||
}
|
||||
|
||||
checkGate( out_sum / _frames );
|
||||
|
||||
@@ -89,6 +89,7 @@ LocalZynAddSubFx::LocalZynAddSubFx() :
|
||||
LocalZynAddSubFx::~LocalZynAddSubFx()
|
||||
{
|
||||
delete m_master;
|
||||
delete m_ioEngine;
|
||||
|
||||
if( --s_instanceCount == 0 )
|
||||
{
|
||||
|
||||
@@ -173,8 +173,11 @@ Controller * Controller::create( ControllerTypes _ct, Model * _parent )
|
||||
if( dummy )
|
||||
c = dummy;
|
||||
else
|
||||
{
|
||||
c = new Controller( DummyController, NULL,
|
||||
QString() );
|
||||
dummy = c;
|
||||
}
|
||||
break;
|
||||
|
||||
case Controller::LfoController:
|
||||
|
||||
@@ -98,12 +98,11 @@ inline void FxChannel::processed()
|
||||
|
||||
void FxChannel::incrementDeps()
|
||||
{
|
||||
m_dependenciesMet.ref();
|
||||
if( m_dependenciesMet >= m_receives.size() )
|
||||
int i = m_dependenciesMet.fetchAndAddOrdered( 1 ) + 1;
|
||||
if( i >= m_receives.size() && ! m_queued )
|
||||
{
|
||||
m_queued = true;
|
||||
MixerWorkerThread::addJob( this );
|
||||
m_dependenciesMet = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -164,8 +163,8 @@ void FxChannel::doProcessing( sampleFrame * _buf )
|
||||
{
|
||||
m_peakLeft = m_peakRight = 0.0f;
|
||||
}
|
||||
|
||||
// increment dependency counter of all receivers
|
||||
|
||||
// increment dependency counter of all receivers
|
||||
processed();
|
||||
}
|
||||
|
||||
@@ -358,7 +357,7 @@ FxRoute * FxMixer::createRoute( FxChannel * from, FxChannel * to, float amount )
|
||||
// add us to fxmixer's list
|
||||
engine::fxMixer()->m_fxRoutes.append( route );
|
||||
m_sendsMutex.unlock();
|
||||
|
||||
|
||||
return route;
|
||||
}
|
||||
|
||||
@@ -515,9 +514,6 @@ void FxMixer::masterMix( sampleFrame * _buf )
|
||||
const float v = m_fxChannels[0]->m_volumeModel.value();
|
||||
MixHelpers::addSanitizedMultiplied( _buf, m_fxChannels[0]->m_buffer, v, fpp );
|
||||
|
||||
m_fxChannels[0]->m_peakLeft *= engine::mixer()->masterGain();
|
||||
m_fxChannels[0]->m_peakRight *= engine::mixer()->masterGain();
|
||||
|
||||
// clear all channel buffers and
|
||||
// reset channel process state
|
||||
for( int i = 0; i < numChannels(); ++i)
|
||||
@@ -527,6 +523,7 @@ void FxMixer::masterMix( sampleFrame * _buf )
|
||||
m_fxChannels[i]->m_queued = false;
|
||||
// also reset hasInput
|
||||
m_fxChannels[i]->m_hasInput = false;
|
||||
m_fxChannels[i]->m_dependenciesMet = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -600,7 +597,7 @@ void FxMixer::saveSettings( QDomDocument & _doc, QDomElement & _this )
|
||||
ch->m_sends[si]->amount()->saveSettings( _doc, sendsDom, "amount" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// make sure we have at least num channels
|
||||
void FxMixer::allocateChannelsTo(int num)
|
||||
|
||||
@@ -70,14 +70,19 @@ void JournallingObject::addJournalCheckPoint()
|
||||
QDomElement JournallingObject::saveState( QDomDocument & _doc,
|
||||
QDomElement & _parent )
|
||||
{
|
||||
QDomElement _this = SerializingObject::saveState( _doc, _parent );
|
||||
if( isJournalling() )
|
||||
{
|
||||
QDomElement _this = SerializingObject::saveState( _doc, _parent );
|
||||
|
||||
QDomElement journalNode = _doc.createElement( "journallingObject" );
|
||||
journalNode.setAttribute( "id", id() );
|
||||
journalNode.setAttribute( "metadata", true );
|
||||
_this.appendChild( journalNode );
|
||||
QDomElement journalNode = _doc.createElement( "journallingObject" );
|
||||
journalNode.setAttribute( "id", id() );
|
||||
journalNode.setAttribute( "metadata", true );
|
||||
_this.appendChild( journalNode );
|
||||
|
||||
return _this;
|
||||
return _this;
|
||||
} else {
|
||||
return QDomElement();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -168,5 +168,17 @@ void ProjectJournal::clearJournal()
|
||||
}
|
||||
}
|
||||
|
||||
void ProjectJournal::stopAllJournalling()
|
||||
{
|
||||
for( JoIdMap::Iterator it = m_joIDs.begin(); it != m_joIDs.end(); ++it)
|
||||
{
|
||||
if( it.value() != NULL )
|
||||
{
|
||||
it.value()->setJournalling(false);
|
||||
}
|
||||
}
|
||||
setJournalling(false);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -942,6 +942,7 @@ void SampleBuffer::visualize( QPainter & _p, const QRect & _dr,
|
||||
_p.drawPolyline( l, nb_frames / fpp );
|
||||
_p.drawPolyline( r, nb_frames / fpp );
|
||||
delete[] l;
|
||||
delete[] r;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -523,7 +523,7 @@ AudioAlsa::setupWidget::setupWidget( QWidget * _parent ) :
|
||||
|
||||
AudioAlsa::setupWidget::~setupWidget()
|
||||
{
|
||||
|
||||
delete m_channels->model();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -464,6 +464,7 @@ AudioJack::setupWidget::setupWidget( QWidget * _parent ) :
|
||||
|
||||
AudioJack::setupWidget::~setupWidget()
|
||||
{
|
||||
delete m_channels->model();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -356,7 +356,7 @@ AudioOss::setupWidget::setupWidget( QWidget * _parent ) :
|
||||
|
||||
AudioOss::setupWidget::~setupWidget()
|
||||
{
|
||||
|
||||
delete m_channels->model();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -307,7 +307,7 @@ AudioPulseAudio::setupWidget::setupWidget( QWidget * _parent ) :
|
||||
|
||||
AudioPulseAudio::setupWidget::~setupWidget()
|
||||
{
|
||||
|
||||
delete m_channels->model();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -289,7 +289,13 @@ void configManager::loadConfigFile()
|
||||
node = node.nextSibling();
|
||||
}
|
||||
|
||||
if( value( "paths", "artwork" ) != "" )
|
||||
// don't use dated theme folders as they break the UI (i.e. 0.4 != 1.0, etc)
|
||||
bool use_artwork_path =
|
||||
root.attribute( "version" ).startsWith(
|
||||
QString::number( LMMS_VERSION_MAJOR ) + "." +
|
||||
QString::number( LMMS_VERSION_MINOR ) );
|
||||
|
||||
if( use_artwork_path && value( "paths", "artwork" ) != "" )
|
||||
{
|
||||
m_artworkDir = value( "paths", "artwork" );
|
||||
if( !QDir( m_artworkDir ).exists() )
|
||||
|
||||
@@ -115,6 +115,7 @@ void engine::init( const bool _has_gui )
|
||||
|
||||
void engine::destroy()
|
||||
{
|
||||
s_projectJournal->stopAllJournalling();
|
||||
s_mixer->stopProcessing();
|
||||
|
||||
deleteHelper( &s_projectNotes );
|
||||
|
||||
@@ -194,11 +194,12 @@ void FxMixerView::refreshDisplay()
|
||||
for( int i = 1; i<m_fxChannelViews.size(); ++i )
|
||||
{
|
||||
chLayout->removeWidget(m_fxChannelViews[i]->m_fxLine);
|
||||
m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView );
|
||||
delete m_fxChannelViews[i]->m_fader;
|
||||
delete m_fxChannelViews[i]->m_muteBtn;
|
||||
delete m_fxChannelViews[i]->m_fxLine;
|
||||
delete m_fxChannelViews[i]->m_rackView;
|
||||
delete m_fxChannelViews[i];
|
||||
m_racksLayout->removeWidget( m_fxChannelViews[i]->m_rackView );
|
||||
}
|
||||
m_channelAreaWidget->adjustSize();
|
||||
|
||||
@@ -343,15 +344,14 @@ void FxMixerView::deleteChannel(int index)
|
||||
|
||||
// delete the view
|
||||
chLayout->removeWidget(m_fxChannelViews[index]->m_fxLine);
|
||||
m_racksLayout->removeWidget( m_fxChannelViews[index]->m_rackView );
|
||||
delete m_fxChannelViews[index]->m_fader;
|
||||
delete m_fxChannelViews[index]->m_muteBtn;
|
||||
delete m_fxChannelViews[index]->m_fxLine;
|
||||
delete m_fxChannelViews[index]->m_rackView;
|
||||
delete m_fxChannelViews[index];
|
||||
m_channelAreaWidget->adjustSize();
|
||||
|
||||
// delete the fx rack
|
||||
m_racksLayout->removeWidget( m_fxChannelViews[index]->m_rackView );
|
||||
|
||||
// make sure every channel knows what index it is
|
||||
for(int i=0; i<m_fxChannelViews.size(); ++i)
|
||||
{
|
||||
@@ -480,6 +480,11 @@ void FxMixerView::clear()
|
||||
void FxMixerView::updateFaders()
|
||||
{
|
||||
FxMixer * m = engine::fxMixer();
|
||||
|
||||
// apply master gain
|
||||
m->m_fxChannels[0]->m_peakLeft *= engine::mixer()->masterGain();
|
||||
m->m_fxChannels[0]->m_peakRight *= engine::mixer()->masterGain();
|
||||
|
||||
for( int i = 0; i < m_fxChannelViews.size(); ++i )
|
||||
{
|
||||
const float opl = m_fxChannelViews[i]->m_fader->getPeak_L();
|
||||
|
||||
@@ -529,6 +529,11 @@ void MainWindow::finalize()
|
||||
setupDialog sd( setupDialog::AudioSettings );
|
||||
sd.exec();
|
||||
}
|
||||
// reset window title every time we change the state of a subwindow to show the correct title
|
||||
foreach( QMdiSubWindow * subWindow, workspace()->subWindowList() )
|
||||
{
|
||||
connect( subWindow, SIGNAL( windowStateChanged(Qt::WindowStates,Qt::WindowStates) ), this, SLOT( resetWindowTitle() ) );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -70,6 +70,11 @@
|
||||
#include "text_float.h"
|
||||
|
||||
|
||||
#if QT_VERSION < 0x040800
|
||||
#define MiddleButton MidButton
|
||||
#endif
|
||||
|
||||
|
||||
typedef AutomationPattern::timeMap timeMap;
|
||||
|
||||
|
||||
|
||||
@@ -253,10 +253,13 @@ ProjectRenderer* exportProjectDialog::prepRender()
|
||||
static_cast<Mixer::qualitySettings::Interpolation>(interpolationCB->currentIndex()),
|
||||
static_cast<Mixer::qualitySettings::Oversampling>(oversamplingCB->currentIndex()) );
|
||||
|
||||
const int samplerates[5] = { 44100, 48000, 88200, 96000, 192000 };
|
||||
const int bitrates[6] = { 64, 128, 160, 192, 256, 320 };
|
||||
|
||||
ProjectRenderer::OutputSettings os = ProjectRenderer::OutputSettings(
|
||||
samplerateCB->currentText().section(" ", 0, 0).toUInt(),
|
||||
samplerates[ samplerateCB->currentIndex() ],
|
||||
false,
|
||||
bitrateCB->currentText().section(" ", 0, 0).toUInt(),
|
||||
bitrates[ bitrateCB->currentIndex() ],
|
||||
static_cast<ProjectRenderer::Depths>( depthCB->currentIndex() ) );
|
||||
|
||||
engine::getSong()->setExportLoop( exportLoopCB->isChecked() );
|
||||
|
||||
@@ -28,6 +28,8 @@
|
||||
#include <QtGui/QMouseEvent>
|
||||
#include <QtGui/QScrollArea>
|
||||
|
||||
#include <algorithm> // for std::sort
|
||||
|
||||
#include "plugin_browser.h"
|
||||
#include "embed.h"
|
||||
#include "debug.h"
|
||||
|
||||
@@ -86,7 +86,7 @@ const char * volume_help = QT_TRANSLATE_NOOP( "InstrumentTrack",
|
||||
|
||||
const int INSTRUMENT_WIDTH = 254;
|
||||
const int INSTRUMENT_HEIGHT = INSTRUMENT_WIDTH;
|
||||
const int PIANO_HEIGHT = 84;
|
||||
const int PIANO_HEIGHT = 82;
|
||||
const int INSTRUMENT_WINDOW_CACHE_SIZE = 8;
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user