From 6a1590bc9e51b54d3e7abd6ca518112caf1622b5 Mon Sep 17 00:00:00 2001 From: Olivier Jolly Date: Fri, 29 Jan 2016 15:31:37 +0100 Subject: [PATCH] Add more SFZ operand support --- rnsutils/instrument.py | 4 ++++ rnsutils/sfztoxrni.py | 22 +++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/rnsutils/instrument.py b/rnsutils/instrument.py index a734bb8..333e5d2 100644 --- a/rnsutils/instrument.py +++ b/rnsutils/instrument.py @@ -69,6 +69,10 @@ class RenoiseModulationSet(ObjectifiedElement): class RenoiseInstrument(object): + FILTER_NONE = 0 + FILTER_CLEAN_HP = 5 + FILTER_CLEAN_LP = 1 + def __init__(self, filename=None, template_filename="empty-31.xrni"): self.root = None self.sample_data = None diff --git a/rnsutils/sfztoxrni.py b/rnsutils/sfztoxrni.py index 690a8b7..8a4da5a 100644 --- a/rnsutils/sfztoxrni.py +++ b/rnsutils/sfztoxrni.py @@ -41,6 +41,8 @@ def search_case_insensitive_path(path): existing_head = search_case_insensitive_path(head) if existing_head is None: return None + if existing_head == '': + existing_head = '.' tail = tail.lower() for sub in os.listdir(existing_head): @@ -78,8 +80,8 @@ class SfzToXrni(object): # sample tuning renoise_sample.Transpose = sf2_bag.tuning or default_sample.Transpose - renoise_sample.FineTune = (sf2_bag.fine_tuning and (int(128 * sf2_bag.fine_tuning) / 100.)) or ( - sf2_bag.sample and int(128 * (sf2_bag.sample.pitch_correction) / 100.)) or default_sample.FineTune + renoise_sample.Finetune = (sf2_bag.fine_tuning and (int(128 * sf2_bag.fine_tuning) / 100.)) or ( + sf2_bag.sample and int(128 * (sf2_bag.sample.pitch_correction) / 100.)) or default_sample.Finetune # volume envelope renoise_modulation_set.Devices.SampleAhdsrModulationDevice.Attack.Value = self.to_renoise_time( @@ -122,6 +124,7 @@ class SfzToXrni(object): renoise_global_modulation_set.Devices.SampleAhdsrModulationDevice.Decay.Value = 0 renoise_global_modulation_set.Devices.SampleAhdsrModulationDevice.Sustain.Value = 1 renoise_global_modulation_set.Devices.SampleAhdsrModulationDevice.Release.Value = 0 + renoise_global_modulation_set.FilterType = RenoiseInstrument.FILTER_NONE renoise_global_sample.LoopRelease = True renoise_global_sample.LoopMode = "Off" @@ -130,7 +133,7 @@ class SfzToXrni(object): renoise_global_sample.Panning = 0.5 renoise_global_sample.Transpose = 0 - renoise_global_sample.FineTune = 0 + renoise_global_sample.Finetune = 0 renoise_global_sample.Mapping.BaseNote = 60 renoise_global_sample.Mapping.NoteStart, renoise_global_sample.Mapping.NoteEnd = (0, 119) @@ -229,6 +232,7 @@ class SfzToXrni(object): value = section_content[key] if key == 'sample': renoise_sample.FileName = re.sub(r'\\+', r'/', value) +# renoise_sample.Name = os.path.basename(value) elif key == 'lokey': renoise_sample.Mapping.NoteStart = sfz_note_to_midi_key(value) elif key == 'hikey': @@ -242,6 +246,18 @@ class SfzToXrni(object): elif key == 'ampeg_release': renoise_modulation_set.Devices.SampleAhdsrModulationDevice.Release.Value = second_to_renoise_time( float(value)) + elif key == 'ampeg_attack': + renoise_modulation_set.Devices.SampleAhdsrModulationDevice.Attack.Value = second_to_renoise_time( + float(value)) + elif key == 'tune': + renoise_sample.Finetune = int(128 * float(value) / 100.) + elif key == 'fil_type': + if value.lower().startswith('lp'): + renoise_modulation_set.FilterType = RenoiseInstrument.FILTER_CLEAN_LP + elif value.lower().startswith('hp'): + renoise_modulation_set.FilterType = RenoiseInstrument.FILTER_CLEAN_HP + else: + renoise_modulation_set.FilterType = RenoiseInstrument.FILTER_NONE else: unused_keys.append(key)