34 lines
880 B
GDScript3
34 lines
880 B
GDScript3
|
@tool
|
||
|
extends Node2D
|
||
|
|
||
|
const sample_hold = preload ("res://lib/utils/sample_hold.gd")
|
||
|
|
||
|
var data = PackedVector2Array()
|
||
|
var result: PackedFloat32Array
|
||
|
|
||
|
func _ready():
|
||
|
for i in range(0, 44100):
|
||
|
var value = sin(i * 2 * PI / 44100.0)
|
||
|
data.push_back(Vector2(value, value))
|
||
|
|
||
|
result = sample_hold.sample_and_hold(data, 44100.0 / 16000.0 * 1.5)
|
||
|
|
||
|
func _draw():
|
||
|
var size = get_viewport().get_visible_rect().size
|
||
|
size.x *= 10
|
||
|
size.y *= 4
|
||
|
var center = size / 2
|
||
|
|
||
|
draw_line(Vector2(0, size.y / 2), Vector2(size.x, size.y / 2), Color(1, 1, 1))
|
||
|
|
||
|
for i in range(0, data.size()):
|
||
|
var value = data[i]
|
||
|
var x = i * (size.x / data.size())
|
||
|
|
||
|
draw_line(Vector2(x, 0), Vector2(x, value.x * center.y), Color(1, 0, 0))
|
||
|
|
||
|
for i in range(0, result.size()):
|
||
|
var value = result[i]
|
||
|
var x = i * (size.x / result.size())
|
||
|
|
||
|
draw_line(Vector2(x, 0), Vector2(x, value * center.y), Color(0, 1, 0))
|