diff --git a/README.md b/README.md index ab7545f..6c4a7b4 100644 --- a/README.md +++ b/README.md @@ -19,5 +19,5 @@ It has:
## Credits * Platformer Kit (2.2) - https://www.kenney.nl (CC0) -* VoIP extension for Godot 4 - https://github.com/RevoluPowered/one-voip-godot-4 (MIT) +* VoIP extension for Godot 4 - https://github.com/goatchurchprime/two-voip-godot-4 (MIT) * RoboBlast: Third-Person Shooter demo - https://github.com/gdquest-demos/godot-4-3d-third-person-controller (MIT and CC-By 4.0) diff --git a/addons/one_voip/libonevoip.linux.template_debug.x86_64.so b/addons/one_voip/libonevoip.linux.template_debug.x86_64.so deleted file mode 100644 index c34bd5d..0000000 Binary files a/addons/one_voip/libonevoip.linux.template_debug.x86_64.so and /dev/null differ diff --git a/addons/one_voip/libonevoip.macos.template_debug.universal.dylib b/addons/one_voip/libonevoip.macos.template_debug.universal.dylib deleted file mode 100644 index ba553e9..0000000 Binary files a/addons/one_voip/libonevoip.macos.template_debug.universal.dylib and /dev/null differ diff --git a/addons/one_voip/libonevoip.windows.template_debug.x86_64.dll b/addons/one_voip/libonevoip.windows.template_debug.x86_64.dll deleted file mode 100644 index fe55a5d..0000000 Binary files a/addons/one_voip/libonevoip.windows.template_debug.x86_64.dll and /dev/null differ diff --git a/addons/one_voip/onevoip.gdextension b/addons/one_voip/onevoip.gdextension deleted file mode 100644 index 5a518b5..0000000 --- a/addons/one_voip/onevoip.gdextension +++ /dev/null @@ -1,15 +0,0 @@ -[configuration] - -entry_symbol = "one_voip_library_init" -compatibility_minimum = 4.2 - -[libraries] - -windows.release.x86_64="libonevoip.windows.template_debug.x86_64.dll" -windows.debug.x86_64="libonevoip.windows.template_debug.x86_64.dll" -linux.release.x86_64="libonevoip.linux.template_debug.x86_64.so" -linux.debug.x86_64="libonevoip.linux.template_debug.x86_64.so" -macos.release.x86_64="exports/welcome_page/libonevoip.macos.template_debug.universal.dylib" -macos.debug.x86_64="exports/welcome_page/libonevoip.macos.template_debug.universal.dylib" -macos.release.arm64="exports/welcome_page/libonevoip.macos.template_debug.universal.dylib" -macos.debug.arm64="exports/welcome_page/libonevoip.macos.template_debug.universal.dylib" diff --git a/addons/twovoip/libs/libtwovoip.android.template_debug.arm32.so b/addons/twovoip/libs/libtwovoip.android.template_debug.arm32.so new file mode 100644 index 0000000..e51ca6f Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_debug.arm32.so differ diff --git a/addons/twovoip/libs/libtwovoip.android.template_debug.arm64.so b/addons/twovoip/libs/libtwovoip.android.template_debug.arm64.so new file mode 100644 index 0000000..e1be713 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_debug.arm64.so differ diff --git a/addons/twovoip/libs/libtwovoip.android.template_debug.x86_32.so b/addons/twovoip/libs/libtwovoip.android.template_debug.x86_32.so new file mode 100644 index 0000000..80b6b22 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_debug.x86_32.so differ diff --git a/addons/twovoip/libs/libtwovoip.android.template_debug.x86_64.so b/addons/twovoip/libs/libtwovoip.android.template_debug.x86_64.so new file mode 100644 index 0000000..ddd59be Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_debug.x86_64.so differ diff --git a/addons/twovoip/libs/libtwovoip.android.template_release.arm32.so b/addons/twovoip/libs/libtwovoip.android.template_release.arm32.so new file mode 100644 index 0000000..a6aa01a Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_release.arm32.so differ diff --git a/addons/twovoip/libs/libtwovoip.android.template_release.arm64.so b/addons/twovoip/libs/libtwovoip.android.template_release.arm64.so new file mode 100644 index 0000000..55748d9 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_release.arm64.so differ diff --git a/addons/twovoip/libs/libtwovoip.android.template_release.x86_32.so b/addons/twovoip/libs/libtwovoip.android.template_release.x86_32.so new file mode 100644 index 0000000..1f5343f Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_release.x86_32.so differ diff --git a/addons/twovoip/libs/libtwovoip.android.template_release.x86_64.so b/addons/twovoip/libs/libtwovoip.android.template_release.x86_64.so new file mode 100644 index 0000000..de9d5ce Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.android.template_release.x86_64.so differ diff --git a/addons/twovoip/libs/libtwovoip.ios.template_debug.universal.dylib b/addons/twovoip/libs/libtwovoip.ios.template_debug.universal.dylib new file mode 100644 index 0000000..376b4e9 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.ios.template_debug.universal.dylib differ diff --git a/addons/twovoip/libs/libtwovoip.ios.template_release.universal.dylib b/addons/twovoip/libs/libtwovoip.ios.template_release.universal.dylib new file mode 100644 index 0000000..b658efb Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.ios.template_release.universal.dylib differ diff --git a/addons/twovoip/libs/libtwovoip.linux.template_debug.x86_64.so b/addons/twovoip/libs/libtwovoip.linux.template_debug.x86_64.so new file mode 100644 index 0000000..b9f9ee9 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.linux.template_debug.x86_64.so differ diff --git a/addons/twovoip/libs/libtwovoip.linux.template_release.x86_64.so b/addons/twovoip/libs/libtwovoip.linux.template_release.x86_64.so new file mode 100644 index 0000000..fa6c04f Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.linux.template_release.x86_64.so differ diff --git a/addons/twovoip/libs/libtwovoip.macos.template_debug.universal.framework/Resources/Info.plist b/addons/twovoip/libs/libtwovoip.macos.template_debug.universal.framework/Resources/Info.plist new file mode 100644 index 0000000..a83990f --- /dev/null +++ b/addons/twovoip/libs/libtwovoip.macos.template_debug.universal.framework/Resources/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleInfoDictionaryVersion + 6.0 + CFBundleDevelopmentRegion + en + CFBundleExecutable + libtwovoip.macos.template_debug.universal.dylib + CFBundleName + TwoVoIP + CFBundleDisplayName + TwoVoIP + CFBundleIdentifier + ru.dmitriysalnikov.twovoip + NSHumanReadableCopyright + Copyright (c) Dmitriy Salnikov. + CFBundleVersion + 1.1.0 + CFBundleShortVersionString + 1.1.0 + CFBundlePackageType + FMWK + CSResourcesFileMapped + + DTPlatformName + macosx + LSMinimumSystemVersion + 10.15 + + + \ No newline at end of file diff --git a/addons/twovoip/libs/libtwovoip.macos.template_debug.universal.framework/libtwovoip.macos.template_debug.universal.dylib b/addons/twovoip/libs/libtwovoip.macos.template_debug.universal.framework/libtwovoip.macos.template_debug.universal.dylib new file mode 100644 index 0000000..27258a1 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.macos.template_debug.universal.framework/libtwovoip.macos.template_debug.universal.dylib differ diff --git a/addons/twovoip/libs/libtwovoip.macos.template_release.universal.framework/Resources/Info.plist b/addons/twovoip/libs/libtwovoip.macos.template_release.universal.framework/Resources/Info.plist new file mode 100644 index 0000000..c4bfc87 --- /dev/null +++ b/addons/twovoip/libs/libtwovoip.macos.template_release.universal.framework/Resources/Info.plist @@ -0,0 +1,33 @@ + + + + + CFBundleInfoDictionaryVersion + 6.0 + CFBundleDevelopmentRegion + en + CFBundleExecutable + libtwovoip.macos.template_release.universal.dylib + CFBundleName + TwoVoIP + CFBundleDisplayName + TwoVoIP + CFBundleIdentifier + ru.dmitriysalnikov.twovoip + NSHumanReadableCopyright + Copyright (c) Dmitriy Salnikov. + CFBundleVersion + 1.1.0 + CFBundleShortVersionString + 1.1.0 + CFBundlePackageType + FMWK + CSResourcesFileMapped + + DTPlatformName + macosx + LSMinimumSystemVersion + 10.15 + + + \ No newline at end of file diff --git a/addons/twovoip/libs/libtwovoip.macos.template_release.universal.framework/libtwovoip.macos.template_release.universal.dylib b/addons/twovoip/libs/libtwovoip.macos.template_release.universal.framework/libtwovoip.macos.template_release.universal.dylib new file mode 100644 index 0000000..dcb461c Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.macos.template_release.universal.framework/libtwovoip.macos.template_release.universal.dylib differ diff --git a/addons/twovoip/libs/libtwovoip.web.template_debug.wasm32.threads.wasm b/addons/twovoip/libs/libtwovoip.web.template_debug.wasm32.threads.wasm new file mode 100644 index 0000000..0b0ee6e Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.web.template_debug.wasm32.threads.wasm differ diff --git a/addons/twovoip/libs/libtwovoip.web.template_debug.wasm32.wasm b/addons/twovoip/libs/libtwovoip.web.template_debug.wasm32.wasm new file mode 100644 index 0000000..a28b63e Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.web.template_debug.wasm32.wasm differ diff --git a/addons/twovoip/libs/libtwovoip.web.template_release.wasm32.threads.wasm b/addons/twovoip/libs/libtwovoip.web.template_release.wasm32.threads.wasm new file mode 100644 index 0000000..c427442 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.web.template_release.wasm32.threads.wasm differ diff --git a/addons/twovoip/libs/libtwovoip.web.template_release.wasm32.wasm b/addons/twovoip/libs/libtwovoip.web.template_release.wasm32.wasm new file mode 100644 index 0000000..6d03ab0 Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.web.template_release.wasm32.wasm differ diff --git a/addons/twovoip/libs/libtwovoip.windows.template_debug.x86_64.dll b/addons/twovoip/libs/libtwovoip.windows.template_debug.x86_64.dll new file mode 100644 index 0000000..6d8507a Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.windows.template_debug.x86_64.dll differ diff --git a/addons/twovoip/libs/libtwovoip.windows.template_release.x86_64.dll b/addons/twovoip/libs/libtwovoip.windows.template_release.x86_64.dll new file mode 100644 index 0000000..e6f135a Binary files /dev/null and b/addons/twovoip/libs/libtwovoip.windows.template_release.x86_64.dll differ diff --git a/addons/twovoip/twovoip.gdextension b/addons/twovoip/twovoip.gdextension new file mode 100644 index 0000000..1a0adbb --- /dev/null +++ b/addons/twovoip/twovoip.gdextension @@ -0,0 +1,79 @@ +[configuration] + +entry_symbol = "two_voip_library_init" +compatibility_minimum = "4.1.4" +reloadable = false + +[dependencies] + +; example.x86_64 = { "relative or absolute path to the dependency" : "the path relative to the exported project", } +; ------------------------------------- +; debug + +macos = { } +windows.x86_64 = { } +linux.x86_64 = { } + +; by default godot is using threads +web.wasm32.nothreads = {} +web.wasm32 = {} + +android.arm32 = { } +android.arm64 = { } +android.x86_32 = { } +android.x86_64 = { } + +ios = {} + +; ------------------------------------- +; release + +macos.template_release = { } +windows.template_release.x86_64 = { } +linux.template_release.x86_64 = { } + +web.template_release.wasm32.nothreads = { } +web.template_release.wasm32 = { } + +android.template_release.arm32 = { } +android.template_release.arm64 = { } +android.template_release.x86_32 = { } +android.template_release.x86_64 = { } + +ios.template_release = {} + +[libraries] + +; ------------------------------------- +; debug + +macos = "libs/libtwovoip.macos.template_debug.universal.framework" +windows.x86_64 = "libs/libtwovoip.windows.template_debug.x86_64.dll" +linux.x86_64 = "libs/libtwovoip.linux.template_debug.x86_64.so" + +web.wasm32.nothreads = "libs/libtwovoip.web.template_debug.wasm32.wasm" +web.wasm32 = "libs/libtwovoip.web.template_debug.wasm32.threads.wasm" + +android.arm32 = "libs/libtwovoip.android.template_debug.arm32.so" +android.arm64 = "libs/libtwovoip.android.template_debug.arm64.so" +android.x86_32 = "libs/libtwovoip.android.template_debug.x86_32.so" +android.x86_64 = "libs/libtwovoip.android.template_debug.x86_64.so" + +ios = "libs/libtwovoip.ios.template_debug.universal.dylib" + +; ------------------------------------- +; release + +macos.template_release = "libs/libtwovoip.macos.template_release.universal.framework" +windows.template_release.x86_64 = "libs/libtwovoip.windows.template_release.x86_64.dll" +linux.template_release.x86_64 = "libs/libtwovoip.linux.template_release.x86_64.so" + +web.template_release.wasm32.nothreads = "libs/libtwovoip.web.template_release.wasm32.wasm" +web.template_release.wasm32 = "libs/libtwovoip.web.template_release.wasm32.threads.wasm" + +android.template_release.arm32 = "libs/libtwovoip.android.template_release.arm32.so" +android.template_release.arm64 = "libs/libtwovoip.android.template_release.arm64.so" +android.template_release.x86_32 = "libs/libtwovoip.android.template_release.x86_32.so" +android.template_release.x86_64 = "libs/libtwovoip.android.template_release.x86_64.so" + +ios.template_release = "libs/libtwovoip.ios.template_release.universal.dylib" diff --git a/defaults/audio_bus_layout.tres b/defaults/audio_bus_layout.tres index 74fa318..228eae2 100644 --- a/defaults/audio_bus_layout.tres +++ b/defaults/audio_bus_layout.tres @@ -4,8 +4,8 @@ resource_name = "Amplify" volume_db = 6.0 -[sub_resource type="VOIPInputCapture" id="VOIPInputCapture_gsvqe"] -resource_name = "VOIPInputCapture" +[sub_resource type="AudioEffectOpusChunked" id="AudioEffectOpusChunked_yv5ll"] +resource_name = "OpusChunked" [resource] bus/1/name = &"Character" @@ -28,5 +28,5 @@ bus/3/mute = true bus/3/bypass_fx = false bus/3/volume_db = 0.0 bus/3/send = &"Master" -bus/3/effect/0/effect = SubResource("VOIPInputCapture_gsvqe") +bus/3/effect/0/effect = SubResource("AudioEffectOpusChunked_yv5ll") bus/3/effect/0/enabled = true diff --git a/player/camera_controller.gd b/player/camera_controller.gd index d067635..8d4f31c 100644 --- a/player/camera_controller.gd +++ b/player/camera_controller.gd @@ -1,10 +1,8 @@ class_name CameraController extends Node3D -@export_node_path var player_path : NodePath @export var invert_mouse_y := false @export_range(0.0, 1.0) var mouse_sensitivity := 0.25 -@export_range(0.0, 8.0) var joystick_sensitivity := 2.0 @export var tilt_upper_limit := deg_to_rad(-60.0) @export var tilt_lower_limit := deg_to_rad(60.0) diff --git a/player/model/materials/face_mat.tres b/player/model/materials/face_mat.tres index cabb18d..9dc0ee1 100644 --- a/player/model/materials/face_mat.tres +++ b/player/model/materials/face_mat.tres @@ -1,7 +1,7 @@ [gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://dh42cdejchkr3"] [ext_resource type="Shader" path="res://player/model/materials/face_mat.gdshader" id="1_u8nh3"] -[ext_resource type="Texture2D" uid="uid://ci7cn145ld3l5" path="res://player/model/faces/closed.png" id="2_r4pvf"] +[ext_resource type="Texture2D" uid="uid://dbag7f8i27ub1" path="res://player/model/faces/open.png" id="2_ymnw0"] [resource] render_priority = 0 @@ -12,4 +12,4 @@ shader_parameter/screen_red_offset = Vector2(0, 0) shader_parameter/screen_green_offset = Vector2(0, 0) shader_parameter/screen_blue_offset = Vector2(0, 0) shader_parameter/pixel_size = 44.0 -shader_parameter/face_texture = ExtResource("2_r4pvf") +shader_parameter/face_texture = ExtResource("2_ymnw0") diff --git a/player/model/materials/heart_core_mat.tres b/player/model/materials/heart_core_mat.tres index 5d8ee8c..367bb10 100644 --- a/player/model/materials/heart_core_mat.tres +++ b/player/model/materials/heart_core_mat.tres @@ -4,4 +4,4 @@ albedo_color = Color(0, 0, 0, 1) emission_enabled = true emission = Color(0, 1, 0.392157, 1) -emission_energy_multiplier = 0.831129 +emission_energy_multiplier = 2.82816 diff --git a/player/player.tscn b/player/player.tscn index 2bcf04f..ef8e6bf 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -83,7 +83,6 @@ visible = false mesh = SubResource("BoxMesh_kin6n") [node name="CameraController" type="Node3D" parent="."] -top_level = true script = ExtResource("2_2fob2") invert_mouse_y = true tilt_upper_limit = 0.48 @@ -99,7 +98,6 @@ transform = Transform3D(1, 0, -7.10543e-15, 0, 1, 0, 0, 0, 1, 1.42109e-14, 2.384 [node name="PlayerCamera" type="Camera3D" parent="CameraController"] transform = Transform3D(-1, -3.71248e-14, -8.74228e-08, -3.23484e-08, 0.929023, 0.370022, 8.12178e-08, 0.370022, -0.929023, -8.74228e-07, 6.04006, -9.29023) -top_level = true attributes = SubResource("CameraAttributesPractical_2ooex") fov = 50.0 script = ExtResource("3_qxleh") diff --git a/project.godot b/project.godot index 80a49bf..621abb1 100644 --- a/project.godot +++ b/project.godot @@ -21,6 +21,7 @@ config/icon="res://icon.png" buses/default_bus_layout="res://defaults/audio_bus_layout.tres" driver/enable_input=true +driver/mix_rate=48000 [display] diff --git a/user_data/user_data.gd b/user_data/user_data.gd index 0d71973..2b8094e 100644 --- a/user_data/user_data.gd +++ b/user_data/user_data.gd @@ -20,4 +20,6 @@ var id: int func _process(_delta: float) -> void: if not is_multiplayer_authority(): return - speaking = Microphone.is_speaking + + if speaking != Microphone.is_speaking: + speaking = Microphone.is_speaking diff --git a/voip/microphone.gd b/voip/microphone.gd index 770440a..61fab57 100644 --- a/voip/microphone.gd +++ b/voip/microphone.gd @@ -8,18 +8,23 @@ var speak_action: StringName = "speak" func _process(_delta: float) -> void: if not Input.is_action_pressed(speak_action) or EditMode.is_enabled: - is_speaking = false + set_speaking(false) func _unhandled_input(event: InputEvent) -> void: if EditMode.is_enabled: return if event.is_action_pressed(speak_action): - is_speaking = true + set_speaking(true) if event.is_action_released(speak_action): - is_speaking = false + set_speaking(false) + + +func set_speaking(speaking: bool) -> void: + if speaking == is_speaking: return + is_speaking = speaking func _exit_tree() -> void: - is_speaking = false + set_speaking(false) diff --git a/voip/voip_manager.gd b/voip/voip_manager.gd index e905260..a23af05 100644 --- a/voip/voip_manager.gd +++ b/voip/voip_manager.gd @@ -3,7 +3,7 @@ extends Node @export var user_scn: PackedScene @export var player_spawner: PlayerSpawner -var mic_capture: VOIPInputCapture +var opuschunked: AudioEffectOpusChunked var users = {} # {Peer ID: VoipUser} @@ -15,8 +15,7 @@ func _ready() -> void: player_spawner.player_spawned.connect(player_spawned) var mic_bus = AudioServer.get_bus_index("Record") - mic_capture = AudioServer.get_bus_effect(mic_bus, 0) - mic_capture.packet_ready.connect(voice_packet_ready) + opuschunked = AudioServer.get_bus_effect(mic_bus, 0) func peer_connected(id: int) -> void: @@ -44,22 +43,22 @@ func player_spawned(id: int, player: Player) -> void: if users.has(id): users[id].set_anchor(player) -func voice_packet_ready(packet: PackedByteArray) -> void: - if not Microphone.is_speaking: return - if Connection.is_peer_connected: - rpc("voice_packet_received", packet) - - -@rpc("any_peer", "call_remote", "unreliable_ordered", 1) -func voice_packet_received(packet: PackedByteArray) -> void: - if multiplayer.is_server(): return - - var sender_id = multiplayer.get_remote_sender_id() - users[sender_id].stream.push_packet(packet) - - func _process(_delta: float) -> void: if not Connection.is_peer_connected: return if multiplayer.is_server(): return - mic_capture.send_test_packets() + var prepend = PackedByteArray() + while opuschunked.chunk_available(): + var opusdata: PackedByteArray = opuschunked.read_opus_packet(prepend) + opuschunked.drop_chunk() + + if not Microphone.is_speaking: continue + rpc("opus_data_received", opusdata) + + +@rpc("any_peer", "call_remote", "unreliable_ordered", 1) +func opus_data_received(opusdata: PackedByteArray) -> void: + if multiplayer.is_server(): return + + var sender_id = multiplayer.get_remote_sender_id() + users[sender_id].opuspacketsbuffer.append(opusdata) diff --git a/voip/voip_user.gd b/voip/voip_user.gd index a438e6a..0d2b3d9 100644 --- a/voip/voip_user.gd +++ b/voip/voip_user.gd @@ -8,9 +8,18 @@ class_name VoipUser var user_id: int var anchor: Node3D +var audiostreamopuschunked : AudioStreamOpusChunked +var opuspacketsbuffer: Array[PackedByteArray] = [] + func _ready() -> void: user_data_events.user_volume_changed.connect(change_volume) + audiostreamopuschunked = stream as AudioStreamOpusChunked + + +func _process(_delta: float) -> void: + while audiostreamopuschunked.chunk_space_available() and not opuspacketsbuffer.is_empty(): + audiostreamopuschunked.push_opus_packet(opuspacketsbuffer.pop_front(), 0, 0) func _physics_process(_delta: float) -> void: diff --git a/voip/voip_user.tscn b/voip/voip_user.tscn index f98e31c..a5dcff7 100644 --- a/voip/voip_user.tscn +++ b/voip/voip_user.tscn @@ -3,8 +3,7 @@ [ext_resource type="Script" path="res://voip/voip_user.gd" id="1_wo4b3"] [ext_resource type="Resource" uid="uid://rclnl7v8k722" path="res://user_data/user_data_events.res" id="2_mt25f"] -[sub_resource type="AudioStreamVOIP" id="AudioStreamVOIP_mku04"] -resource_local_to_scene = true +[sub_resource type="AudioStreamOpusChunked" id="AudioStreamOpusChunked_ess21"] [sub_resource type="Curve" id="Curve_q0foc"] bake_resolution = 1000 @@ -12,7 +11,7 @@ _data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.142241, 0.010989), 0.0, 0.0, 0 point_count = 5 [node name="VoipUser" type="AudioStreamPlayer3D"] -stream = SubResource("AudioStreamVOIP_mku04") +stream = SubResource("AudioStreamOpusChunked_ess21") attenuation_model = 1 volume_db = -12.0 unit_size = 15.0