Skip to content

Commit

Permalink
Save tuner preferences, fix backwards compat
Browse files Browse the repository at this point in the history
Signed-off-by: falkTX <falktx@falktx.com>
  • Loading branch information
falkTX committed Jul 17, 2023
1 parent fde3938 commit 5a50f39
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 9 deletions.
8 changes: 8 additions & 0 deletions mod/hmi.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@
CMD_PEDALBOARD_NAME_SET,
CMD_SNAPSHOT_NAME_SET,
CMD_TUNER,
CMD_TUNER_INPUT,
CMD_TUNER_REF_FREQ,
CMD_MENU_ITEM_CHANGE,
CMD_RESET_EEPROM,
CMD_DUO_CONTROL_INDEX_SET,
Expand Down Expand Up @@ -542,3 +544,9 @@ def set_pedalboard_name(self, name, callback):

def set_snapshot_name(self, index, name, callback):
self.send('{} {} {}'.format(CMD_SNAPSHOT_NAME_SET, index, normalize_for_hw(name)), callback)

def set_tuner_input(self, port, callback, datatype='int'):
self.send('{} {}'.format(CMD_TUNER_INPUT, port), callback, datatype)

def set_tuner_ref_freq(self, freq, callback, datatype='int'):
self.send('{} {}'.format(CMD_TUNER_REF_FREQ, freq), callback, datatype)
24 changes: 20 additions & 4 deletions mod/host.py
Original file line number Diff line number Diff line change
Expand Up @@ -339,9 +339,11 @@ def __init__(self, hmi, prefs, msg_callback):
self.profile = Profile(self.profile_apply, self.descriptor)

self.swapped_audio_channels = self.descriptor.get('swapped_audio_channels', False)
self.tuner_resolution = self.descriptor.get('tuner_resolution', 16)

self.current_tuner_port = 2 if self.swapped_audio_channels else 1
self.current_tuner_mute = self.prefs.get("tuner-mutes-outputs", False, bool)
self.tuner_ref_freq = 440
self.current_tuner_ref_freq = self.prefs.get("tuner-reference-frequency", 440, int)

if self.descriptor.get('factory_pedalboards', False):
self.supports_factory_banks = True
Expand Down Expand Up @@ -1301,6 +1303,18 @@ def send_hmi_boot(self, callback):
ssname = self.snapshot_name() or DEFAULT_SNAPSHOT_NAME
msgs.append((self.hmi.set_snapshot_name, [self.current_pedalboard_snapshot_id, ssname]))

if self.descriptor.get('hmi_set_tuner_input', False):
port = self.current_tuner_port
if self.swapped_audio_channels:
if port == 1:
port = 2
else:
port = 1
msgs.append((self.hmi.set_tuner_input, [port]))

if self.descriptor.get('hmi_set_tuner_ref_freq', False):
msgs.append((self.hmi.set_tuner_ref_freq, [self.current_tuner_ref_freq]))

if self.descriptor.get('addressing_pages', 0):
pages = self.addressings.get_available_pages()
msgs.append((self.hmi.set_available_pages, [pages]))
Expand Down Expand Up @@ -6308,8 +6322,9 @@ def hmi_tuner_input(self, input_port, callback):
def hmi_tuner_ref_freq(self, freq, callback):
logging.debug("hmi tuner ref freq")

self.tuner_ref_freq = freq
self.current_tuner_ref_freq = freq
self.send_notmodified("param_set %d REFFREQ %d" % (TUNER_INSTANCE_ID, freq), callback)
self.prefs.setAndSave("tuner-reference-frequency", freq, False)

@gen.coroutine
def set_tuner_value(self, value):
Expand All @@ -6321,7 +6336,7 @@ def set_tuner_value(self, value):
return

try:
freq, note, cents = find_freqnotecents(value, self.tuner_ref_freq)
freq, note, cents = find_freqnotecents(value, self.current_tuner_ref_freq, self.tuner_resolution)
except Exception as e:
logging.exception(e)
return
Expand All @@ -6330,6 +6345,7 @@ def set_tuner_value(self, value):
yield gen.Task(self.hmi.tuner, freq, note, cents)
except Exception as e:
logging.exception(e)
return

try:
yield gen.Task(self.send_output_data_ready, None)
Expand Down Expand Up @@ -6415,7 +6431,7 @@ def hmi_menu_set_tuner_mute(self, mute, callback):
self.unmute()

self.current_tuner_mute = mute
self.prefs.setAndSave("tuner-mutes-outputs", bool(mute))
self.prefs.setAndSave("tuner-mutes-outputs", bool(mute), False)
callback(True)

def hmi_menu_set_quick_bypass_mode(self, mode, callback):
Expand Down
16 changes: 13 additions & 3 deletions mod/session.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,14 +54,24 @@ def get(self, key, default, type_ = None, values = None):

return value

def setAndSave(self, key, value):
def setAndSave(self, key, value, atomicSave = True):
self.prefs[key] = value
self.save()
if atomicSave:
self.saveAtomic()
else:
self.saveAsync()

def save(self):
def saveAtomic(self):
with TextFileFlusher(PREFERENCES_JSON_FILE) as fh:
json.dump(self.prefs, fh, indent=4)

def saveAsync(self):
try:
with open(PREFERENCES_JSON_FILE, 'w') as fh:
json.dump(self.prefs, fh, indent=4)
except OSError:
pass

class Session(object):
def __init__(self):
logging.basicConfig(level=(logging.DEBUG if LOG else logging.WARNING))
Expand Down
4 changes: 2 additions & 2 deletions mod/tuner.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@

NOTES = ['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#']

def find_freqnotecents(f, rf):
def find_freqnotecents(f, rf, res):
ratio = log2f(f/rf)
nf = 12 * ratio + 49
n = round(nf)
Expand All @@ -28,4 +28,4 @@ def find_freqnotecents(f, rf):
octave = (n + 8) // len(NOTES)
scale = (nf - n) / 4;
cents = (scale * 10000) / 25;
return f, "%s%d" % (note, octave), cents * 100
return f, "%s%d" % (note, octave), cents * res

0 comments on commit 5a50f39

Please sign in to comment.