Skip to content

Commit

Permalink
envpoints to adsr and xm samples + lfo retrigger
Browse files Browse the repository at this point in the history
  • Loading branch information
SatyrDiamond committed Sep 28, 2024
1 parent fb82ddc commit 5d82b61
Show file tree
Hide file tree
Showing 6 changed files with 23 additions and 7 deletions.
5 changes: 5 additions & 0 deletions objects/convproj/envelope.py
Original file line number Diff line number Diff line change
Expand Up @@ -92,17 +92,22 @@ def from_envpoints__internal_2point(self, sustainnum, a_type, plugin_obj, env_po
maxval = max(point_start.value, point_end.value)
minval = min(point_start.value, point_end.value)
sustainp = sustainnum == 0
use_fadeout = env_pointsdata.data['use_fadeout'] if 'use_fadeout' in env_pointsdata.data else 0
fadeout = env_pointsdata.data['fadeout'] if 'fadeout' in env_pointsdata.data else True

debug_num = 0
if point_start.value != point_end.value:
if env_pointsdata.loop_on and env_pointsdata.loop_start < env_pointsdata.loop_end:
debug_num = 200
self.release = fadeout
self.amount = 1
if plugin_obj:
if VERBOSE: print("[env_asdr_from_points] 2 | LFO")
lfo_obj = plugin_obj.lfo_add(a_type)
lfo_obj.prop.shape = 'saw' if env_value>0 else 'saw_down'
lfo_obj.time.set_seconds(env_duration)
lfo_obj.amount = min(abs(env_value/1.3),1)
lfo_obj.retrigger = True

elif sustainp:
self.release = env_duration
Expand Down
1 change: 1 addition & 0 deletions objects/convproj/oscillator.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ def __init__(self):

self.loop_on = True
self.mode = 'normal'
self.retrigger = True

self.sustained = False

Expand Down
13 changes: 9 additions & 4 deletions plugins/input/m_tracker_xm.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,12 +143,14 @@ def parse_internal(self, convproj_obj, project_obj, dv_config, input_file):
if xm_inst.num_samples == 0: pass
elif xm_inst.num_samples == 1:
inst_used = True
first_s_obj = xm_inst.samp_head[0]
inst_obj.params.add('vol', 0.3*(first_s_obj.vol), 'float')
trsamp = xm_inst.samp_head[0]
inst_obj.params.add('vol', 0.3*(trsamp.vol), 'float')
filename = samplefolder+str(xm_cursamplenum)+'.wav'

plugin_obj, inst_obj.pluginid, sampleref_obj, sp_obj = convproj_obj.add_plugin_sampler_genid(filename, None)
sp_obj.loop_active, sp_obj.loop_mode, sp_obj.loop_start, sp_obj.loop_end = first_s_obj.get_loop()
sp_obj.loop_active, sp_obj.loop_mode, sp_obj.loop_start, sp_obj.loop_end = trsamp.get_loop()
if not sp_obj.loop_active: sp_obj.loop_end = trsamp.length
sp_obj.end = trsamp.length
sp_obj.point_value_type = "samples"
else:
inst_used = True
Expand All @@ -157,8 +159,11 @@ def parse_internal(self, convproj_obj, project_obj, dv_config, input_file):
for instnum, r_start, e_end in sampleregions:
filename = samplefolder + str(xm_cursamplenum+instnum) + '.wav'
sampleref_obj = convproj_obj.add_sampleref(filename, filename, None)
trsamp = xm_inst.samp_head[instnum]
sp_obj = plugin_obj.sampleregion_add(r_start, e_end, 0, None)
sp_obj.loop_active, sp_obj.loop_mode, sp_obj.loop_start, sp_obj.loop_end = xm_inst.samp_head[instnum].get_loop()
sp_obj.loop_active, sp_obj.loop_mode, sp_obj.loop_start, sp_obj.loop_end = trsamp.get_loop()
if not sp_obj.loop_active: sp_obj.loop_end = trsamp.length
sp_obj.end = trsamp.length
sp_obj.sampleref = filename
sp_obj.point_value_type = "samples"

Expand Down
3 changes: 2 additions & 1 deletion plugins/input/r_lmms.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def get_sample(i_value):
else:
return ''

lfoshape = ['sine', 'tri', 'saw', 'square', 'custom', 'random']
lfoshape = ['sine', 'tri', 'saw_down', 'square', 'custom', 'random']
arpdirection = ['up', 'down', 'updown', 'downup', 'random']

chordids = ["major","majb5","minor","minb5","sus2","sus4","aug","augsus4","tri","6","6sus4","6add9","m6","m6add9","7","7sus4","7#5","7b5","7#9","7b9","7#5#9","7#5b9","7b5b9","7add11","7add13","7#11","maj7","maj7b5","maj7#5","maj7#11","maj7add13","m7","m7b5","m7b9","m7add11","m7add13","m-maj7","m-maj7add11","m-maj7add13","9","9sus4","add9","9#5","9b5","9#11","9b13","maj9","maj9sus4","maj9#5","maj9#11","m9","madd9","m9b5","m9-maj7","11","11b9","maj11","m11","m-maj11","13","13#9","13b9","13b5b9","maj13","m13","m-maj13","full_major","harmonic_minor","melodic_minor","whole_tone","diminished","major_pentatonic","minor_pentatonic","jap_in_sen","major_bebop","dominant_bebop","blues","arabic","enigmatic","neopolitan","neopolitan_minor","hungarian_minor","dorian","phrygian","lydian","mixolydian","aeolian","locrian","full_minor","chromatic","half-whole_diminished","5","phrygian_dominant","persian"]
Expand Down Expand Up @@ -202,6 +202,7 @@ def asdflfo(plugin_obj, elenv, asdrtype):
lfo_obj.prop.shape = lfo_shape
lfo_obj.time.set_seconds(lfo_speed)
lfo_obj.amount = lfo_amount
lfo_obj.retrigger = False

def decodeplugin(convproj_obj, lmms_plugin, pluginname):
out_color = None
Expand Down
5 changes: 4 additions & 1 deletion plugins/output/ableton.py
Original file line number Diff line number Diff line change
Expand Up @@ -759,6 +759,7 @@ def add_track(convproj_obj, project_obj, trackid, track_obj):
alslfo['Type'] = ableton_parampart.as_param('Type', 'int', LFO_SHAPE[lfo_pan_obj.prop.shape])
alslfo['Frequency'] = ableton_parampart.as_param('Frequency', 'float', 1/lfo_pan_obj.time.speed_seconds)
alslfo['Attack'] = ableton_parampart.as_param('Attack', 'float', lfo_pan_obj.attack*1000)
alslfo['Retrigger'] = ableton_parampart.as_param('Retrigger', 'bool', lfo_pan_obj.retrigger)

lfo_vol_obj = plugin_obj.lfo_get('vol')
paramkeys['AuxLfos.0/IsOn'] = ableton_parampart.as_param('IsOn', 'bool', True)
Expand All @@ -770,7 +771,8 @@ def add_track(convproj_obj, project_obj, trackid, track_obj):
alslfo['Attack'] = ableton_parampart.as_param('Attack', 'float', lfo_vol_obj.attack*1000)
alslfo['ModDst/ModConnections.0/Amount'] = ableton_parampart.as_value('Amount', lfo_vol_obj.amount*100)
alslfo['ModDst/ModConnections.0/Connection'] = ableton_parampart.as_value('Connection', 18)

alslfo['Retrigger'] = ableton_parampart.as_param('Retrigger', 'bool', lfo_vol_obj.retrigger)

lfo_pitch_obj = plugin_obj.lfo_get('pitch')
paramkeys['AuxLfos.1/IsOn'] = ableton_parampart.as_param('IsOn', 'bool', True)
paramkeys['AuxLfos.1/Slot/Value'] = ableton_parampart.as_numset('SimplerAuxLfo')
Expand All @@ -781,6 +783,7 @@ def add_track(convproj_obj, project_obj, trackid, track_obj):
alslfo['Attack'] = ableton_parampart.as_param('Attack', 'float', lfo_pitch_obj.attack*1000)
alslfo['ModDst/ModConnections.0/Amount'] = ableton_parampart.as_value('Amount', (lfo_pitch_obj.amount/24)*100)
alslfo['ModDst/ModConnections.0/Connection'] = ableton_parampart.as_value('Connection', 6)
alslfo['Retrigger'] = ableton_parampart.as_param('Retrigger', 'bool', lfo_pitch_obj.retrigger)

als_device.params.import_keys(paramkeys)

Expand Down
3 changes: 2 additions & 1 deletion plugins/output/lmms.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

chordids = [None,"major","majb5","minor","minb5","sus2","sus4","aug","augsus4","tri","6","6sus4","6add9","m6","m6add9","7","7sus4","7#5","7b5","7#9","7b9","7#5#9","7#5b9","7b5b9","7add11","7add13","7#11","maj7","maj7b5","maj7#5","maj7#11","maj7add13","m7","m7b5","m7b9","m7add11","m7add13","m-maj7","m-maj7add11","m-maj7add13","9","9sus4","add9","9#5","9b5","9#11","9b13","maj9","maj9sus4","maj9#5","maj9#11","m9","madd9","m9b5","m9-maj7","11","11b9","maj11","m11","m-maj11","13","13#9","13b9","13b5b9","maj13","m13","m-maj13","full_major","harmonic_minor","melodic_minor","whole_tone","diminished","major_pentatonic","minor_pentatonic","jap_in_sen","major_bebop","dominant_bebop","blues","arabic","enigmatic","neopolitan","neopolitan_minor","hungarian_minor","dorian","phrygian","lydian","mixolydian","aeolian","locrian","full_minor","chromatic","half-whole_diminished","5","phrygian_dominant","persian"]

lfoshape = {'sine': 0,'triangle': 1,'saw': 2,'square': 3,'custom': 4,'random': 5}
lfoshape = {'sine': 0,'triangle': 1,'saw_down': 2,'saw': 2,'square': 3,'custom': 4,'random': 5}
l_arpdirection = {'up': 0,'down': 1,'updown': 2,'downup': 3,'random': 4}
l_arpmode = {'free': 0,'sort': 1,'sync': 2}

Expand Down Expand Up @@ -293,6 +293,7 @@ def asdrlfo(plugin_obj, elpart, asdrtype):
lfo_obj = plugin_obj.lfo_get(asdrtype)
if asdrtype == 'cutoff': elpart.lamt.value = lfo_obj.amount/6000
else: elpart.lamt.value = lfo_obj.amount
if lfo_obj.prop.shape == 'saw': elpart.lamt.value = -elpart.lamt.value
elpart.lpdel.value = sec2exp(lfo_obj.predelay/4)
elpart.latt.value = sec2exp(lfo_obj.attack)
elpart.lshp.value = lfoshape[lfo_obj.prop.shape] if lfo_obj.prop.shape in lfoshape else 'sine'
Expand Down

0 comments on commit 5d82b61

Please sign in to comment.