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:
Sebastian Lohff 2025-02-03 02:00:38 +01:00
parent ec7b46ebc9
commit d7bc037f98
2 changed files with 50 additions and 0 deletions

View File

@ -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")

View File

@ -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"]