convert_time.gd 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. extends GraphNode
  2. var ms = 1000.0
  3. var seconds
  4. var beats
  5. var hz
  6. var MIDI
  7. var samples
  8. var percent
  9. var bpm = 120.0
  10. var samplerate = 44100
  11. var length = 60.0
  12. signal open_help
  13. func _ready() -> void:
  14. #add button to title bar
  15. var titlebar = self.get_titlebar_hbox()
  16. var btn = Button.new()
  17. btn.text = "?"
  18. btn.tooltip_text = "Open help for " + self.title
  19. btn.connect("pressed", Callable(self, "_open_help")) #pass key (process name) when button is pressed
  20. titlebar.add_child(btn)
  21. $VBoxContainer/HBoxContainer7/BPMEdit.text = str(bpm)
  22. $VBoxContainer/HBoxContainer5/SampleRateEdit.text = str(samplerate)
  23. $VBoxContainer/HBoxContainer6/LengthEdit.text = str(length)
  24. calculate()
  25. func _open_help():
  26. open_help.emit(self.get_meta("command"), self.title)
  27. func calculate():
  28. seconds = ms / 1000
  29. beats = (seconds * bpm) / 60
  30. hz = 1000.0 / ms
  31. MIDI = 12 * (log(hz / 440) / log(2)) + 69
  32. samples = seconds * samplerate
  33. percent = (seconds / length) * 100
  34. $VBoxContainer/HBoxContainer/MsEdit.text = str(ms)
  35. $VBoxContainer/HBoxContainer2/SEdit.text = str(seconds)
  36. $VBoxContainer/HBoxContainer7/CrotchetEdit.text = str(beats)
  37. $VBoxContainer/HBoxContainer3/HzEdit.text = str(hz)
  38. $VBoxContainer/HBoxContainer4/MIDIEdit.text = str(MIDI)
  39. $VBoxContainer/HBoxContainer5/SampleNoEdit.text = str(samples)
  40. $VBoxContainer/HBoxContainer6/PercentEdit.text = str(percent)
  41. func _on_ms_edit_text_submitted(new_text: String) -> void:
  42. if new_text.is_valid_float():
  43. ms = new_text.to_float()
  44. calculate()
  45. else:
  46. $VBoxContainer/HBoxContainer/MsEdit.text = str(ms)
  47. func _on_ms_edit_focus_exited() -> void:
  48. _on_ms_edit_text_submitted($VBoxContainer/HBoxContainer/MsEdit.text)
  49. func _on_s_edit_text_submitted(new_text: String) -> void:
  50. if new_text.is_valid_float():
  51. ms = new_text.to_float() * 1000
  52. calculate()
  53. else:
  54. $VBoxContainer/HBoxContainer2/SEdit.text = str(seconds)
  55. func _on_s_edit_focus_exited() -> void:
  56. _on_s_edit_text_submitted($VBoxContainer/HBoxContainer2/SEdit.text)
  57. func _on_crotchet_edit_text_submitted(new_text: String) -> void:
  58. if new_text.is_valid_float():
  59. ms = (new_text.to_float() * 60000.0) / bpm
  60. calculate()
  61. else:
  62. $VBoxContainer/HBoxContainer7/CrotchetEdit.text = str(beats)
  63. func _on_crotchet_edit_focus_exited() -> void:
  64. _on_crotchet_edit_text_submitted($VBoxContainer/HBoxContainer7/CrotchetEdit.text)
  65. func _on_bpm_edit_text_submitted(new_text: String) -> void:
  66. if new_text.is_valid_float():
  67. bpm = new_text.to_float()
  68. ms = (beats * 60000.0) / bpm
  69. calculate()
  70. else:
  71. $VBoxContainer/HBoxContainer7/BPMEdit.text = str(bpm)
  72. func _on_bpm_edit_focus_exited() -> void:
  73. _on_bpm_edit_text_submitted($VBoxContainer/HBoxContainer7/BPMEdit.text)
  74. func _on_hz_edit_text_submitted(new_text: String) -> void:
  75. if new_text.is_valid_float():
  76. ms = (1.0 / new_text.to_float()) * 1000
  77. calculate()
  78. else:
  79. $VBoxContainer/HBoxContainer3/HzEdit.text = str(hz)
  80. func _on_hz_edit_focus_exited() -> void:
  81. _on_hz_edit_text_submitted($VBoxContainer/HBoxContainer3/HzEdit.text)
  82. func _on_midi_edit_text_submitted(new_text: String) -> void:
  83. if new_text.is_valid_float():
  84. var freq = 440.0 * pow(2, (new_text.to_float() - 69) / 12.0)
  85. ms = (1.0 / freq) * 1000
  86. calculate()
  87. else:
  88. $VBoxContainer/HBoxContainer4/MIDIEdit.text = str(MIDI)
  89. func _on_midi_edit_focus_exited() -> void:
  90. _on_midi_edit_text_submitted($VBoxContainer/HBoxContainer4/MIDIEdit.text)
  91. func _on_sample_no_edit_text_submitted(new_text: String) -> void:
  92. if new_text.is_valid_float():
  93. ms = (new_text.to_float() / samplerate) * 1000
  94. calculate()
  95. else:
  96. $VBoxContainer/HBoxContainer5/SampleNoEdit.text = str(samples)
  97. func _on_sample_no_edit_focus_exited() -> void:
  98. _on_sample_no_edit_text_submitted($VBoxContainer/HBoxContainer5/SampleNoEdit.text)
  99. func _on_sample_rate_edit_text_submitted(new_text: String) -> void:
  100. if new_text.is_valid_float():
  101. samplerate = new_text.to_float()
  102. ms = (samples / samplerate) * 1000
  103. calculate()
  104. else:
  105. $VBoxContainer/HBoxContainer5/SampleRateEdit.text = str(samplerate)
  106. func _on_sample_rate_edit_focus_exited() -> void:
  107. _on_sample_rate_edit_text_submitted($VBoxContainer/HBoxContainer5/SampleRateEdit.text)
  108. func _on_percent_edit_text_submitted(new_text: String) -> void:
  109. if new_text.is_valid_float():
  110. ms = (new_text.to_float() / 100.0) * (length * 1000)
  111. calculate()
  112. else:
  113. $VBoxContainer/HBoxContainer6/PercentEdit.text = str(percent)
  114. func _on_percent_edit_focus_exited() -> void:
  115. _on_percent_edit_text_submitted($VBoxContainer/HBoxContainer6/PercentEdit.text)
  116. func _on_length_edit_text_submitted(new_text: String) -> void:
  117. if new_text.is_valid_float():
  118. length = new_text.to_float()
  119. ms = (percent / 100.0) * (length * 1000)
  120. calculate()
  121. else:
  122. $VBoxContainer/HBoxContainer6/LengthEdit.text = str(length)
  123. func _on_length_edit_focus_exited() -> void:
  124. _on_length_edit_text_submitted($VBoxContainer/HBoxContainer6/LengthEdit.text)