keep phase between tones

This commit is contained in:
Holly Stubbs 2025-04-24 09:41:19 +01:00
parent 726a89abb0
commit c450d90372
2 changed files with 21 additions and 14 deletions

View file

@ -3,21 +3,22 @@ extends Node3D
func encode_sstv(): func encode_sstv():
#var encoder = Martin1.new() #var encoder = Martin1.new()
var encoder = RobotBW8.new() var encoder = RobotBW8.new()
var cameraImage = get_viewport().get_texture().get_image() #var cameraImage = get_viewport().get_texture().get_image()
#var cameraImage = load("res://checker.png").get_image() #var cameraImage = load("res://tests/checker.png").get_image()
#var cameraImage = load("res://spiral.png").get_image() #var cameraImage = load("res://tests/spiral.png").get_image()
#var cameraImage = load("res://testtest.png").get_image() var cameraImage = load("res://tests/testtest.png").get_image()
#var cameraImage = load("res://testtest2.png").get_image() #var cameraImage = load("res://tests/testtest2.png").get_image()
#var cameraImage = load("res://testtest3.png").get_image() #var cameraImage = load("res://tests/testtest3.png").get_image()
var audioBuffer = encoder.EncodeSSTV(cameraImage) var audioBuffer = encoder.EncodeSSTV(cameraImage)
encoder.SaveAsWav("res://../sstv.wav")
# Spew that audio yo. # Spew that audio yo.
$AudioStreamPlayer.stream.mix_rate = SSTVEncoder.SAMPLE_RATE #$AudioStreamPlayer.stream.mix_rate = SSTVEncoder.SAMPLE_RATE
$AudioStreamPlayer.stream.buffer_length = 120 #$AudioStreamPlayer.stream.buffer_length = 120
$AudioStreamPlayer.play() #$AudioStreamPlayer.play()
var player = $AudioStreamPlayer.get_stream_playback() #var player = $AudioStreamPlayer.get_stream_playback()
for i in range(0, audioBuffer.size()): #for i in range(0, audioBuffer.size()):
player.push_frame(Vector2(audioBuffer[i], audioBuffer[i])) #player.push_frame(Vector2(audioBuffer[i], audioBuffer[i]))
# a lil hacky delay so sdfgi can settle lol. # a lil hacky delay so sdfgi can settle lol.
var startTimer = 0 var startTimer = 0

View file

@ -47,14 +47,19 @@ func EncodeHeader(vis: Array):
outputFloats.append_array(GenerateTone(SYNC_PULSE_FREQ, VIS_BIT_LENGTH)) outputFloats.append_array(GenerateTone(SYNC_PULSE_FREQ, VIS_BIT_LENGTH))
var lastPhase = 0.0
func GenerateTone(frequency: float, duration: float) -> PackedFloat32Array: func GenerateTone(frequency: float, duration: float) -> PackedFloat32Array:
var samples = PackedFloat32Array() var samples = PackedFloat32Array()
var totalSamples = int(duration * SAMPLE_RATE) var totalSamples = int(duration * SAMPLE_RATE)
var phase = 0.0
for i in range(totalSamples): for i in range(totalSamples):
var time = float(i) / SAMPLE_RATE var time = float(i) / SAMPLE_RATE
var sample = sin(TWO_PI * frequency * time) phase = TWO_PI * frequency * time
var sample = sin(lastPhase + phase)
samples.append(sample) samples.append(sample)
lastPhase = phase
return samples return samples
@ -81,8 +86,9 @@ func GenerateToneFromCurve(frequencies: Array, duration: float) -> PackedFloat32
phase += TWO_PI * freq * timeStep phase += TWO_PI * freq * timeStep
var sample = sin(phase) var sample = sin(lastPhase + phase)
samples.append(sample) samples.append(sample)
lastPhase = phase
return samples return samples