47 lines
1.3 KiB
GDScript
47 lines
1.3 KiB
GDScript
extends AudioStreamPlayer
|
|
|
|
var effect: AudioEffectCapture
|
|
var playback: AudioStreamGeneratorPlayback
|
|
|
|
@onready var voip: AudioStreamPlayer = $"../VoIP"
|
|
|
|
func _ready():
|
|
var idx = AudioServer.get_bus_index("Mic")
|
|
effect = AudioServer.get_bus_effect(idx, 0)
|
|
|
|
playback = voip.get_stream_playback()
|
|
|
|
func _process(_delta):
|
|
var frames: PackedVector2Array
|
|
|
|
frames = effect.get_buffer(effect.get_frames_available())
|
|
if frames.size() > 0:
|
|
var mono_frames: PackedFloat32Array = stereo_to_mono(frames)
|
|
playback_voip.rpc(mono_frames)
|
|
|
|
@rpc("any_peer", "call_remote", "unreliable_ordered", 1)
|
|
func playback_voip(packed_frames: PackedFloat32Array):
|
|
playback.push_buffer(mono_to_stereo(packed_frames))
|
|
|
|
func stereo_to_mono(stereo_frames: PackedVector2Array) -> PackedFloat32Array:
|
|
var mono_frames = PackedFloat32Array()
|
|
mono_frames.resize(stereo_frames.size())
|
|
|
|
var i: int = 0
|
|
for stereo_frame: Vector2 in stereo_frames:
|
|
mono_frames[i] = (stereo_frame.x + stereo_frame.y) / 2
|
|
i += 1
|
|
|
|
return mono_frames
|
|
|
|
func mono_to_stereo(mono_frames: PackedFloat32Array) -> PackedVector2Array:
|
|
var stereo_frames: PackedVector2Array = PackedVector2Array()
|
|
stereo_frames.resize(mono_frames.size())
|
|
|
|
var i: int = 0
|
|
for mono_frame: float in mono_frames:
|
|
stereo_frames[i] = Vector2(mono_frame, mono_frame)
|
|
i += 1
|
|
|
|
return stereo_frames
|