Rudimentary "write to wav" export feature
A lot of settings are missing, path can't be chosen yet. Will work on that once I've played around with the exports a bit.
This commit is contained in:
parent
ec7b46ebc9
commit
d7bc037f98
|
@ -63,3 +63,48 @@ func _process_midi_event(midi_event):
|
|||
#print("Pressure ", midi_event.pressure)
|
||||
#print("Controller number: ", midi_event.controller_number)
|
||||
#print("Controller value: ", midi_event.controller_value)
|
||||
|
||||
func _make_tone(freq_hz: float, length: float, sample_rate: int, amplitude: int):
|
||||
var result: Array[int] = []
|
||||
var _phase := 0.0
|
||||
var increment: float = freq_hz / float(sample_rate)
|
||||
for i in range(round(sample_rate * length)):
|
||||
result.append(int(round(sin(_phase * TAU) * amplitude)))
|
||||
_phase = fmod(_phase + increment, 1.0)
|
||||
return result
|
||||
|
||||
func _on_wav_button_pressed() -> void:
|
||||
var data: Array[int] = []
|
||||
var loc_phase := 0.0
|
||||
var increment = pulse_hz / sample_hz
|
||||
var _use_test_data := false
|
||||
var amp := 100
|
||||
|
||||
if not _use_test_data:
|
||||
data.append_array(_make_tone(0, 0.2, sample_hz, amp))
|
||||
|
||||
var _morse_on := true
|
||||
for n in range(1, MorseState.states.size()):
|
||||
var _freq = pulse_hz if _morse_on else 0.0
|
||||
print(_freq, " of length ", MorseState.states[n] / 1000.0)
|
||||
data.append_array(_make_tone(_freq, MorseState.states[n] / 1000.0, sample_hz, amp))
|
||||
_morse_on = not _morse_on
|
||||
|
||||
data.append_array(_make_tone(0, 0.2, sample_hz, amp))
|
||||
else:
|
||||
data.append_array(_make_tone(pulse_hz, 0.5, sample_hz, 100))
|
||||
data.append_array(_make_tone(0, 0.5, sample_hz, 100))
|
||||
data.append_array(_make_tone(pulse_hz, 0.5, sample_hz, 100))
|
||||
data.append_array(_make_tone(0, 0.5, sample_hz, 100))
|
||||
data.append_array(_make_tone(pulse_hz, 0.5, sample_hz, 100))
|
||||
|
||||
# save wav
|
||||
var wav := AudioStreamWAV.new()
|
||||
wav.format = AudioStreamWAV.FORMAT_8_BITS
|
||||
wav.mix_rate = sample_hz
|
||||
wav.stereo = false
|
||||
wav.data = data
|
||||
|
||||
print("Writing WAV with ", data.size(), " length")
|
||||
wav.save_to_wav("/tmp/foo.wav")
|
||||
|
||||
|
|
|
@ -51,9 +51,14 @@ color = Color(0, 0, 0, 1)
|
|||
layout_mode = 2
|
||||
text = "MORSE"
|
||||
|
||||
[node name="WavButton" type="Button" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
text = "Write Wav"
|
||||
|
||||
[node name="Player" type="AudioStreamPlayer" parent="."]
|
||||
stream = SubResource("AudioStreamGenerator_kvn5v")
|
||||
volume_db = -80.0
|
||||
|
||||
[connection signal="button_down" from="VBoxContainer/MorseButton" to="." method="_on_morse_button_down"]
|
||||
[connection signal="button_up" from="VBoxContainer/MorseButton" to="." method="_on_morse_button_up"]
|
||||
[connection signal="pressed" from="VBoxContainer/WavButton" to="." method="_on_wav_button_pressed"]
|
||||
|
|
Loading…
Reference in New Issue