diff --git a/docs/ATTRIBUTION.md b/docs/ATTRIBUTION.md index 0f5f410..5255e74 100644 --- a/docs/ATTRIBUTION.md +++ b/docs/ATTRIBUTION.md @@ -14,7 +14,7 @@ independent team Woofmeow. - Voyager: co-owner, developer, project director, creator of the game's 3D art, and composer of the original title/ambient track `audio/music/title/as_in_four_wolves.ogg`, world track - `audio/music/world/craft.mp3`, and animalese placeholder tones. + `audio/music/world/craft.mp3`, and the synthesized robot animalese tones. - Endeavour: co-owner, developer, and creator of the game's 2D art, including the original fish, environment, UI, and other artwork. - chillnfill: contributor of original 3D models for the character bodies and @@ -23,6 +23,10 @@ independent team Woofmeow. `chillnfill`. - Tekgator: creator of the cooler-capacity, reel-speed, and barrier-power shop icons. +- kat: supplied the original recorded voice sample used for the animalese + alphabet and number sounds. +- kim: supplied the recorded voice performance used for the kim animalese + alphabet and number sounds. Voyager is also the original catalog porter credit in PortMaster metadata. Third-party creators are credited with their individual records below. Those @@ -144,7 +148,9 @@ locations only and must never appear in scenes or resources. | Rain ambience | `audio/ambience/rain_loop_ontario.ogg` | Converted from “Rain Loop Ontario” by Freesound user Ayton, sound 212799, CC BY 3.0. | | Character bark call | `sound/dialogue/calls/bark.wav` | Edited from `Dog_Bark.wav` by Freesound user ivolipa, sound 328729, CC0. | | Character meow call | `sound/dialogue/calls/meow.wav` | Edited from `Cat meow.m4a` by Freesound user Christyboy100, sound 495694, Attribution 3.0. | -| Animalese placeholder tones | `sound/dialogue/animalese/placeholder/` | Original tones composed and owned by co-owner Voyager without third-party samples. | +| Animalese alphabet and number sounds | `sound/dialogue/animalese/alphanumeric/` | Processed derivatives of the original recorded voice sample supplied by NETfishing community member kat. | +| Kim animalese alphabet and number sounds | `sound/dialogue/animalese/kim/` | Processed per-character voice samples supplied by NETfishing community member kim. | +| Robot animalese tones | `sound/dialogue/animalese/robot/` | Original synthesized tones composed and owned by co-owner Voyager without third-party samples. | Creative Commons Zero information: https://creativecommons.org/publicdomain/zero/1.0/. Creative Commons @@ -206,6 +212,94 @@ authored `mesh_style.png` filenames. confirmation covering Project use, modification, distribution, commercial release, and applicable sublicensing. +### kat animalese voice contribution record + +- Requested credit: `kat`. +- Original contribution: the recorded voice sample used to produce the + animalese alphabet and number sounds. +- Repository mapping: the heavily processed per-character derivatives are in + `sound/dialogue/animalese/alphanumeric/`. +- Intake filenames: `0.wav` through `9.wav` and `a.wav` through `z.wav`. +- Source and initial repository files were compared byte-for-byte at intake. + The hashes below identify those untouched intake files; runtime files are + normalized derivatives produced by `scripts/import_animalese_voice.sh`. +- Permission record: retain the original submission and permission record + covering Project use, processing, distribution, commercial release, and + applicable sublicensing. + +| Clip | SHA-256 | Clip | SHA-256 | +| --- | --- | --- | --- | +| `0.wav` | `0616a2fb035d410f24403e66c4fe46e9ff86e976126db16c56125af28bbe5ad6` | `a.wav` | `aa701de9370000e620dae16c4e3082bc79fc9692ed5260dfd5f4f2480b556e75` | +| `1.wav` | `e29191c0b4011d4237710b0ef4fe1f0ebe875bb3cf8abb62b057b7799c683dda` | `b.wav` | `149286a210d4fec9197f4c6109a066706cb890181b6663369a9941435ee859bb` | +| `2.wav` | `e4ce823498ec8440b2f870ea767b1b6185add948a3ba573ec476794fc6ab5abb` | `c.wav` | `4776bb64044e82f21755e771f31e30e18e8737533b08f04a9bd5103aa9adf923` | +| `3.wav` | `498a06196dd672f273c90802d0349f3ecc5f582a1aeb9b952ff54030bef523e0` | `d.wav` | `6bb00d354b5a621895412ae40a40f02f219976fc164b08389a6bb708a6c99e84` | +| `4.wav` | `dbb90d8e7e5cb9524cfd429d63e297548871ed6dda7c2594c5ea4e932c623754` | `e.wav` | `232edabddc6c046ba5bbb5f640cabe9c9a905c2a12cec07fc60ef657e83547c4` | +| `5.wav` | `dc6dc2946e0ebb5b346bbf4c646c72e27303f4bf8838c14038df5ce7087071f9` | `f.wav` | `f104a52c97605872de4cafab1f1c24a132051e14a9400c2098a24385525f1e15` | +| `6.wav` | `8dae2ce33aaa0d788964d0a7026d3c51738ef2b06672697675a7f2da0f9f7a59` | `g.wav` | `12915a19a9c3b0f1559a4c53734c16fedc1d82f7c24adce08608aad7da141968` | +| `7.wav` | `f5c5c855b06794a22954f3eb2b32f2caec877ce7dee27fd3153c7aa65ab1ff92` | `h.wav` | `951a2c1b074eb43c8016d592ed7d1bc63ec64ab95312d122fa8f2e717b61c1e1` | +| `8.wav` | `b31561b5e3748024daf109510d5ee955274d2ef45f7fed96882f8a4862b70e30` | `i.wav` | `1d51b902b1b667eadc7bcc569909ce927075e7b91b8a02ea811f361e3e95164c` | +| `9.wav` | `e46bb34cb045fb15bb0cbbfbd9364895521ee3c441290154a1f4ff67ffd38f2d` | `j.wav` | `9ef84e992d58349b42f642901688f49203af27dda85c5baee30b4c2cf93944c9` | +| | | `k.wav` | `65ae2072c6f55b5013dea21dd4644c2dd502963b89f5711eb22f741cee3dec09` | +| | | `l.wav` | `d87f8fcb4c217c0dbd5526705c982655e514a5645ef2391557b6c033344aa713` | +| | | `m.wav` | `1f1bc0ba3abe077febfa035e873d0e47838e880fbbd6e10164b1e58e13a5e47b` | +| | | `n.wav` | `2f422e00c4c42689e0d50adf2226c28a851960f3c460b2c8cdbbefb687175ad1` | +| | | `o.wav` | `70143fd697e1b1d1f1d27c8fc3bd59ea72e076e1679494f8022a44911752da46` | +| | | `p.wav` | `9419172ec8a595f89ac2993f4a942c554dc5a8fa64bd8a75f468718cdb2b176e` | +| | | `q.wav` | `e0117043020c0eda1d15f1315b7796774a219c1439bafc587c01e3661215abbb` | +| | | `r.wav` | `31f9a4a06975c55331b830247b39f47572622698457c191d03c92d02599b1131` | +| | | `s.wav` | `232edabddc6c046ba5bbb5f640cabe9c9a905c2a12cec07fc60ef657e83547c4` | +| | | `t.wav` | `a8b7379fa5c26462bde6e51cd74edb514aa731afa02efb5f82b42341c5a50964` | +| | | `u.wav` | `e25dec74b9f141203c92c4a8ebf296c80e031cc677d924656bef64e90a02c7a3` | +| | | `v.wav` | `643725a16a9e821a5e8a502aa43979a9f9ed73860839d28cf15b4b3fb4ff3539` | +| | | `w.wav` | `5a915415157775f00875b4985844a1cd28f36733744dbe718fdf8b714f1ccc89` | +| | | `x.wav` | `04fc26436d1524c5fb6e7f84c2a1a930aa519a57f594b73e7310c7187ac581c3` | +| | | `y.wav` | `7fbe3ee4f2a6c6432b8cbeeffe2cc422b3b960e0f148533ffcc0d42d73804f9c` | +| | | `z.wav` | `0616a2fb035d410f24403e66c4fe46e9ff86e976126db16c56125af28bbe5ad6` | + +### kim animalese voice contribution record + +- Requested credit: `kim`. +- Original contribution: the recorded voice performance used to produce the + kim animalese alphabet and number sounds. +- Repository mapping: the per-character samples are in + `sound/dialogue/animalese/kim/`. +- Intake filenames: `0.wav` through `9.wav` and `a.wav` through `z.wav`. +- Source and initial repository files were compared byte-for-byte at intake. + The hashes below identify those untouched intake files; runtime files are + normalized derivatives produced by `scripts/import_animalese_voice.sh`. +- Permission record: retain the original submission and permission record + covering Project use, processing, distribution, commercial release, and + applicable sublicensing. + +| Clip | SHA-256 | Clip | SHA-256 | +| --- | --- | --- | --- | +| `0.wav` | `cd107c5904569c87fb972dce3853e02d126d1d1fe61b16596a2e40b6c5ffa4c1` | `a.wav` | `037dde81eaae9d11b316a0336a2cf39090810afcb8e6a3349af674808a7b6a92` | +| `1.wav` | `4e2310d7af7912d7bf88dbe0b1b864bd491b412dfb46e28e8dbf7fc77d2b839e` | `b.wav` | `09e82faa88e7be9d3d9b984288f001cf722ba9c29f7a422053c90641e2406ff4` | +| `2.wav` | `ed54c8edc36b80e696a45e4eaefe724b714fa949a01af09d66ec4b8af4538dda` | `c.wav` | `8f8bf82630511d510042918389473a6bcb0c71173dc4bbfaaef0ec64c77a8b34` | +| `3.wav` | `41f6b3e0d30384c790ca625ab049826f2cf33aaca4b3bfbbbb833bfbd84d86c9` | `d.wav` | `ccf55a87158896e233afb3c3be517b92f97af92a8d972a8fc8f1ce88a418ec7c` | +| `4.wav` | `d9345022c32fc03f382d892d2ec105a3200c787dfac5357c8c192377b01b7816` | `e.wav` | `d62935c4d90cabc1fc789eab22da1aae205383ba5063b1d923ae3165bb231b92` | +| `5.wav` | `3ea7659d6d1bdc2cf6d5e9131d983ce27ec715d5a27923f141a9e8123f413551` | `f.wav` | `4a7957d71c3e287a94f94b40f77c631e41b9b885bbd968aee60b66e789f5fb65` | +| `6.wav` | `a91e64bccc07162cefaf1c59f838e4475e8ba40efcb749e965f87903f03c2a0d` | `g.wav` | `8fe9f4aa5a3c1f61860c9ef371674e9d3ce117fe222612465d2c7531367294e8` | +| `7.wav` | `e4e2e85f88625e152ff682c45ce816e7ec3fc15eb23ed01c686528f9abfa1015` | `h.wav` | `88a758b4f1e2a90758f93c72b15804b38152e3e8cf6b0b67558823d52e0a0648` | +| `8.wav` | `da94b98ef5bcf7460d3c9ca02b651f586b51ef2809f33da639898f81253e16a4` | `i.wav` | `f272e24648bbf62b09c83743b53c94168e81a90a8d3fff2aa0ba5a727927f494` | +| `9.wav` | `34aa49af5f8414bff289cb575468bef2745b3f6d0ac3420d9eb07ec148cdd645` | `j.wav` | `f25e1585e28313f63bcad0fe3c9a0032c96a32754687e592ea4f1989edfb3411` | +| | | `k.wav` | `3c39ede36a423577d75772ba5c1b7f1a4315aac0b5dea89fa6cd7ac647f4c342` | +| | | `l.wav` | `beda782f9b1de5e82e0f7c481f3e7a5694ead7c72ccabc684a7c330234b7ad7c` | +| | | `m.wav` | `b4002b6dc895896144711cf8a763cdc93d11d9bc74b0b57fbc55831ec3dbf28d` | +| | | `n.wav` | `d5e989ab8cc755cd8676fe05ec3e5b8e433d674694188df3717e3073bd27975b` | +| | | `o.wav` | `043e5f81a29400a4b8078168c187c0e0907ea43041c96be98b2bdf646afc0f61` | +| | | `p.wav` | `da228b88d1621a09b21b3a5e5ea57710fab0a726ef9655406b43da30cd67c6d4` | +| | | `q.wav` | `83cb2e061fa8473e9205d03b353c1d8a3c6cb26913b287571205033ce95e0c99` | +| | | `r.wav` | `4d58f4337a62d0b37b5cea427a22dc05f2b1cab505d6de6fa1d7d8363ee018d4` | +| | | `s.wav` | `93a19e046764af830fc5582f8de3b35b287eea2bc3abf0b269aa0e945405d95c` | +| | | `t.wav` | `c7b1f1d967736c3b640fab88fa4522ca6bec86fc96f2980c3948788c3d9ede9c` | +| | | `u.wav` | `320a3d89c0ad22cf4249d9647bedbb882e8ca561feb651eb7534f2ea51380c54` | +| | | `v.wav` | `8ed8d00aaf3f60531680241f65f45251639080258799698e81afce996ba506af` | +| | | `w.wav` | `edad2171e9b4238a20b8c3d6675b5ab457be0af0450f37950bc6d70215f9def7` | +| | | `x.wav` | `93896a36adeaf8628c18597957e86804c98115b40f41f7ea2d139ba9bf172da8` | +| | | `y.wav` | `9bde2a148b881ef04003286351cb7801fd65276d56b00433921bf7f42aa4d1ab` | +| | | `z.wav` | `cd107c5904569c87fb972dce3853e02d126d1d1fe61b16596a2e40b6c5ffa4c1` | + ### Fishing fight loop source record - Source page: https://freesound.org/s/509902/ diff --git a/docs/DEVELOPMENT.md b/docs/DEVELOPMENT.md index 0b7a65c..d71ac14 100644 --- a/docs/DEVELOPMENT.md +++ b/docs/DEVELOPMENT.md @@ -292,6 +292,23 @@ godot --headless --path . --script scripts/normalize_texture_imports.gd \ godot --headless --path . --script tests/texture_sampling_validation.gd ``` +### Importing animalese voice sets + +Animalese clips use one deterministic runtime level and format: -18 dBFS RMS +with a -3 dBFS peak ceiling, mono, 48 kHz, 16-bit PCM. Import a supplied set +through the normalization script rather than copying its WAV files directly: + +```bash +scripts/import_animalese_voice.sh /path/to/source_clips sample_set_directory +``` + +The source directory may contain lowercase letter, number, and underscore WAV +filenames. The script converts every top-level WAV and writes the results under +`sound/dialogue/animalese/sample_set_directory/`. Add a new runtime set to +`player/animalese_voice_profiles.gd` after import, then run the quick validation +suite. Keep the untouched submission and its original hashes in the private +intake record; repository files are normalized derivatives. + ### Bubble menus Instance `ui/components/bubble_menu/bubble_button.tscn` for each action, or diff --git a/network/network_chat_service.gd b/network/network_chat_service.gd index 50c47d3..4e5a432 100644 --- a/network/network_chat_service.gd +++ b/network/network_chat_service.gd @@ -77,7 +77,11 @@ func is_sender_filtered(fingerprint: String) -> bool: ) -func send_local_message(body: String) -> bool: +func send_local_message( + body: String, + voice_id: String = VoiceProfilesType.DEFAULT_ID, + sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID, +) -> bool: if ( _session == null or not _session.is_gameplay_session_active() @@ -99,6 +103,10 @@ func send_local_message(body: String) -> bool: "session_id": _session.get_session_id(), "body": clean, "sender_fingerprint": _session.get_local_identity_fingerprint(), + "voice_id": VoiceProfilesType.sanitized_id(voice_id), + "sample_set_id": VoiceProfilesType.sanitized_sample_set_id( + sample_set_id + ), } request["sender_signature"] = _session.sign_local_action( "chat_send", NetworkChatProtocol.signature_fields(request) @@ -482,7 +490,13 @@ func _handle_request(peer_id: int, data: Dictionary) -> void: NetworkChatProtocol.Kind.PLAYER, peer_id, record.display_name, - NetworkChatProtocol.sanitize_body(data["body"]) + NetworkChatProtocol.sanitize_body(data["body"]), + VoiceProfilesType.sanitized_id(str(data.get( + "voice_id", VoiceProfilesType.DEFAULT_ID + ))), + VoiceProfilesType.sanitized_sample_set_id(str(data.get( + "sample_set_id", VoiceProfilesType.DEFAULT_SAMPLE_SET_ID + ))), ) message["request_id"] = request_id message["sender_fingerprint"] = data["sender_fingerprint"] @@ -499,6 +513,8 @@ func _make_message( peer_id: int, display_name: String, body: String, + voice_id: String = VoiceProfilesType.DEFAULT_ID, + sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID, ) -> Dictionary: _sequence += 1 var message := { @@ -511,6 +527,10 @@ func _make_message( "sender_display_name": display_name.left(24), "body": body, "sender_fingerprint": _session.get_host_identity_fingerprint(), + "voice_id": VoiceProfilesType.sanitized_id(voice_id), + "sample_set_id": VoiceProfilesType.sanitized_sample_set_id( + sample_set_id + ), } if kind == NetworkChatProtocol.Kind.SYSTEM: message["sender_signature"] = _session.sign_host_action( diff --git a/network/network_profile_preferences.gd b/network/network_profile_preferences.gd index 5ecb6fd..3c4996b 100644 --- a/network/network_profile_preferences.gd +++ b/network/network_profile_preferences.gd @@ -10,6 +10,7 @@ var display_name: String = "Player" var voice_id: String = VoiceProfilesType.DEFAULT_ID var speech_speed_id: String = VoiceProfilesType.DEFAULT_SPEED_ID var call_id: String = VoiceProfilesType.DEFAULT_CALL_ID +var sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID var created_at_unix: int = 0 var _profile_path := "" var _expected_hash := "" @@ -57,12 +58,19 @@ func load_or_create() -> bool: voice_id = VoiceProfilesType.DEFAULT_ID speech_speed_id = VoiceProfilesType.DEFAULT_SPEED_ID call_id = VoiceProfilesType.DEFAULT_CALL_ID + sample_set_id = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID created_at_unix = int(Time.get_unix_time_from_system()) return _save_atomic() func set_display_name(value: String) -> bool: - return set_profile_identity(value, voice_id, speech_speed_id, call_id) + return set_profile_identity( + value, + voice_id, + speech_speed_id, + call_id, + sample_set_id, + ) func set_profile_identity( @@ -70,6 +78,7 @@ func set_profile_identity( selected_voice_id: String, selected_speech_speed_id: String, selected_call_id: String, + selected_sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID, ) -> bool: var clean_name: String = value.strip_edges() if ( @@ -77,22 +86,26 @@ func set_profile_identity( or not VoiceProfilesType.is_valid(selected_voice_id) or not VoiceProfilesType.is_valid_speed(selected_speech_speed_id) or not VoiceProfilesType.is_valid_call(selected_call_id) + or not VoiceProfilesType.is_valid_sample_set(selected_sample_set_id) ): return false var previous_name: String = display_name var previous_voice_id: String = voice_id var previous_speech_speed_id: String = speech_speed_id var previous_call_id: String = call_id + var previous_sample_set_id: String = sample_set_id display_name = clean_name voice_id = selected_voice_id speech_speed_id = selected_speech_speed_id call_id = selected_call_id + sample_set_id = selected_sample_set_id if _save_atomic(): return true display_name = previous_name voice_id = previous_voice_id speech_speed_id = previous_speech_speed_id call_id = previous_call_id + sample_set_id = previous_sample_set_id return false @@ -150,6 +163,12 @@ func _load_existing() -> bool: call_id = VoiceProfilesType.sanitized_call_id( str(data.get("call_id", VoiceProfilesType.DEFAULT_CALL_ID)) ) + sample_set_id = VoiceProfilesType.sanitized_sample_set_id( + str(data.get( + "sample_set_id", + VoiceProfilesType.DEFAULT_SAMPLE_SET_ID, + )) + ) created_at_unix = int(data["created_at_unix"]) return true @@ -162,6 +181,7 @@ func _save_atomic() -> bool: "voice_id": voice_id, "speech_speed_id": speech_speed_id, "call_id": call_id, + "sample_set_id": sample_set_id, "created_at_unix": created_at_unix, } var result := PortableFileGuard.write_guarded( diff --git a/network/network_profile_service.gd b/network/network_profile_service.gd index 029af65..aa787af 100644 --- a/network/network_profile_service.gd +++ b/network/network_profile_service.gd @@ -25,6 +25,7 @@ var _pending_apply: Dictionary[String, Dictionary] = {} var _pending_voice_ids: Dictionary[String, String] = {} var _pending_speech_speed_ids: Dictionary[String, String] = {} var _pending_call_ids: Dictionary[String, String] = {} +var _pending_sample_set_ids: Dictionary[String, String] = {} var _host_pending_apply: Dictionary[String, Dictionary] = {} var _latest_check_id: String = "" var _latest_check_name: String = "" @@ -70,6 +71,10 @@ func get_persisted_call_id() -> String: return _preferences.call_id +func get_persisted_sample_set_id() -> String: + return _preferences.sample_set_id + + func get_identity_fingerprint() -> String: return ( _session.get_local_identity_fingerprint() @@ -151,6 +156,7 @@ func apply_profile( voice_id: String = VoiceProfilesType.DEFAULT_ID, speech_speed_id: String = VoiceProfilesType.DEFAULT_SPEED_ID, call_id: String = VoiceProfilesType.DEFAULT_CALL_ID, + sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID, ) -> bool: var clean_name := display_name.strip_edges() if ( @@ -159,6 +165,7 @@ func apply_profile( or not VoiceProfilesType.is_valid(voice_id) or not VoiceProfilesType.is_valid_speed(speech_speed_id) or not VoiceProfilesType.is_valid_call(call_id) + or not VoiceProfilesType.is_valid_sample_set(sample_set_id) ): apply_finished.emit(false, "Check the player name and appearance choices.") return false @@ -178,6 +185,7 @@ func apply_profile( _pending_voice_ids[request_id] = voice_id _pending_speech_speed_ids[request_id] = speech_speed_id _pending_call_ids[request_id] = call_id + _pending_sample_set_ids[request_id] = sample_set_id if _session == null or not _session.is_gameplay_session_active(): _apply_local_result(request_id, true, "", false, PackedStringArray()) elif _session.is_host(): @@ -371,6 +379,7 @@ func _apply_local_result( _pending_voice_ids.erase(request_id) _pending_speech_speed_ids.erase(request_id) _pending_call_ids.erase(request_id) + _pending_sample_set_ids.erase(request_id) conflict_result.emit(request_id, conflict, suggestions) apply_finished.emit(false, message) return @@ -378,6 +387,7 @@ func _apply_local_result( var previous_voice_id := _preferences.voice_id var previous_speech_speed_id := _preferences.speech_speed_id var previous_call_id := _preferences.call_id + var previous_sample_set_id := _preferences.sample_set_id var requested_voice_id: String = _pending_voice_ids.get( request_id, VoiceProfilesType.DEFAULT_ID, @@ -390,16 +400,22 @@ func _apply_local_result( request_id, VoiceProfilesType.DEFAULT_CALL_ID, ) + var requested_sample_set_id: String = _pending_sample_set_ids.get( + request_id, + VoiceProfilesType.DEFAULT_SAMPLE_SET_ID, + ) if not _preferences.set_profile_identity( str(request["display_name"]), requested_voice_id, requested_speech_speed_id, requested_call_id, + requested_sample_set_id, ): _pending_apply.erase(request_id) _pending_voice_ids.erase(request_id) _pending_speech_speed_ids.erase(request_id) _pending_call_ids.erase(request_id) + _pending_sample_set_ids.erase(request_id) apply_finished.emit(false, "Profile could not be saved.") return if not _appearance_store.save_snapshot(request["appearance"]): @@ -408,17 +424,20 @@ func _apply_local_result( previous_voice_id, previous_speech_speed_id, previous_call_id, + previous_sample_set_id, ) _pending_apply.erase(request_id) _pending_voice_ids.erase(request_id) _pending_speech_speed_ids.erase(request_id) _pending_call_ids.erase(request_id) + _pending_sample_set_ids.erase(request_id) apply_finished.emit(false, "Profile could not be saved.") return _pending_apply.erase(request_id) _pending_voice_ids.erase(request_id) _pending_speech_speed_ids.erase(request_id) _pending_call_ids.erase(request_id) + _pending_sample_set_ids.erase(request_id) if _session != null: _session.set_local_appearance_snapshot(_appearance_store.get_snapshot()) if _session != null and _session.is_gameplay_session_active(): @@ -600,6 +619,7 @@ func _on_session_state_changed(state: NetworkSession.State) -> void: _pending_voice_ids.clear() _pending_speech_speed_ids.clear() _pending_call_ids.clear() + _pending_sample_set_ids.clear() _host_pending_apply.clear() _latest_check_id = "" _latest_check_name = "" @@ -676,6 +696,7 @@ func _apply_local_voice_to_avatar() -> void: var avatar := _spawn_service.get_avatar(local_peer_id) if avatar != null: avatar.apply_animalese_voice_id(_preferences.voice_id) + avatar.apply_animalese_sample_set_id(_preferences.sample_set_id) func _new_id() -> String: diff --git a/player/animalese_voice_profiles.gd b/player/animalese_voice_profiles.gd index 2ea6cab..ded0898 100644 --- a/player/animalese_voice_profiles.gd +++ b/player/animalese_voice_profiles.gd @@ -2,9 +2,27 @@ class_name AnimaleseVoiceProfiles extends RefCounted const DEFAULT_ID: String = "natural" +const DEFAULT_SAMPLE_SET_ID: String = "kat" const DEFAULT_SPEED_ID: String = "normal" const DEFAULT_CALL_ID: String = "meow" const CALL_AUDIO_DIRECTORY: String = "res://sound/dialogue/calls" +const SAMPLE_SET_OPTIONS: Array[Dictionary] = [ + { + "id": "kat", + "label": "kat", + "directory": "res://sound/dialogue/animalese/alphanumeric", + }, + { + "id": "robot", + "label": "robot", + "directory": "res://sound/dialogue/animalese/robot", + }, + { + "id": "kim", + "label": "kim", + "directory": "res://sound/dialogue/animalese/kim", + }, +] const OPTIONS: Array[Dictionary] = [ {"id": "tiny", "label": "tiny", "pitch": 1.24}, {"id": "bright", "label": "bright", "pitch": 1.10}, @@ -12,6 +30,31 @@ const OPTIONS: Array[Dictionary] = [ {"id": "mellow", "label": "mellow", "pitch": 0.89}, {"id": "deep", "label": "deep", "pitch": 0.77}, ] + + +static func is_valid_sample_set(sample_set_id: String) -> bool: + for option: Dictionary in SAMPLE_SET_OPTIONS: + if str(option.get("id", "")) == sample_set_id: + return true + return false + + +static func sanitized_sample_set_id(sample_set_id: String) -> String: + return ( + sample_set_id + if is_valid_sample_set(sample_set_id) + else DEFAULT_SAMPLE_SET_ID + ) + + +static func sample_directory_for(sample_set_id: String) -> String: + var resolved_id := sanitized_sample_set_id(sample_set_id) + for option: Dictionary in SAMPLE_SET_OPTIONS: + if str(option.get("id", "")) == resolved_id: + return str(option.get("directory", "")) + return "" + + const SPEED_OPTIONS: Array[Dictionary] = [ {"id": "slow", "label": "slow", "characters_per_second": 20.0}, {"id": "relaxed", "label": "relaxed", "characters_per_second": 24.0}, diff --git a/player/player.gd b/player/player.gd index da23e45..b7b7e4d 100644 --- a/player/player.gd +++ b/player/player.gd @@ -37,6 +37,9 @@ const HeldItemAttachmentScene = preload( "res://player/held_item_attachment.tscn" ) const SprintDustTrailType = preload("res://player/sprint_dust_trail.gd") +const VoiceProfilesType = preload( + "res://player/animalese_voice_profiles.gd" +) signal retract_visual_finished @@ -124,7 +127,8 @@ const CONTROLLER_ZOOM_TRIGGER_AXIS: JoyAxis = JOY_AXIS_TRIGGER_LEFT var appearance_snapshot: Dictionary = ( CharacterCustomizationCatalog.default_snapshot() ) -var animalese_voice_id: String = "natural" +var animalese_voice_id: String = VoiceProfilesType.DEFAULT_ID +var animalese_sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID var active_bait_id: StringName = StringName() var active_lure_id: StringName = StringName() signal active_bait_changed(item_id: StringName) @@ -282,12 +286,22 @@ func _apply_presented_appearance() -> void: func apply_animalese_voice_id(voice_id: String) -> void: - animalese_voice_id = voice_id + animalese_voice_id = VoiceProfilesType.sanitized_id(voice_id) func get_animalese_voice_id() -> String: return animalese_voice_id + +func apply_animalese_sample_set_id(sample_set_id: String) -> void: + animalese_sample_set_id = VoiceProfilesType.sanitized_sample_set_id( + sample_set_id + ) + + +func get_animalese_sample_set_id() -> String: + return animalese_sample_set_id + class ShowcaseCameraSnapshot: extends RefCounted diff --git a/scripts/generate_placeholder_animalese.gd b/scripts/generate_placeholder_animalese.gd deleted file mode 100644 index 8119fd3..0000000 --- a/scripts/generate_placeholder_animalese.gd +++ /dev/null @@ -1,71 +0,0 @@ -extends SceneTree - -const OUTPUT_DIRECTORY := "res://sound/dialogue/animalese/placeholder" -const SAMPLE_RATE: int = 22050 -const SAMPLE_SECONDS: float = 0.055 -const CHARACTERS := "abcdefghijklmnopqrstuvwxyz" -const VOWELS := "aeiou" - - -func _initialize() -> void: - var absolute_directory := ProjectSettings.globalize_path(OUTPUT_DIRECTORY) - var directory_error: Error = DirAccess.make_dir_recursive_absolute( - absolute_directory - ) - if directory_error != OK: - push_error("Could not create animalese sample directory.") - quit(1) - return - for character_index: int in range(CHARACTERS.length()): - var character := CHARACTERS.substr(character_index, 1) - _save_sample(character, character_index) - _save_sample("fallback", CHARACTERS.length()) - quit() - - -func _save_sample(sample_name: String, sample_index: int) -> void: - var stream := _build_sample(sample_name, sample_index) - var output_path := "%s/%s" % [OUTPUT_DIRECTORY, sample_name] - var save_error: Error = stream.save_to_wav(output_path) - if save_error != OK: - push_error("Could not save animalese sample: %s" % sample_name) - - -func _build_sample(sample_name: String, sample_index: int) -> AudioStreamWAV: - var frame_count := roundi(SAMPLE_RATE * SAMPLE_SECONDS) - var pcm := PackedByteArray() - pcm.resize(frame_count * 2) - var base_frequency := 245.0 + float(sample_index % 7) * 18.0 - var formant_one := 620.0 + float(sample_index % 5) * 85.0 - var formant_two := 1320.0 + float(sample_index % 6) * 115.0 - var is_vowel := VOWELS.contains(sample_name) - var noise_seed := sample_index * 7919 + 104729 - for frame_index: int in range(frame_count): - var time := float(frame_index) / SAMPLE_RATE - var attack := minf(time / 0.004, 1.0) - var release := minf((SAMPLE_SECONDS - time) / 0.014, 1.0) - var envelope := maxf(minf(attack, release), 0.0) - noise_seed = int( - (noise_seed * 1103515245 + 12345) & 0x7fffffff - ) - var noise := float(noise_seed % 65536) / 32767.5 - 1.0 - var voiced := ( - sin(TAU * base_frequency * time) * 0.42 - + sin(TAU * base_frequency * 2.0 * time) * 0.16 - ) - var formants := ( - sin(TAU * formant_one * time) * 0.18 - + sin(TAU * formant_two * time) * 0.10 - ) - var consonant_noise := noise * (0.08 if is_vowel else 0.24) - var value := envelope * (voiced + formants + consonant_noise) * 0.72 - var signed_sample := clampi(roundi(value * 32767.0), -32768, 32767) - var encoded_sample := signed_sample if signed_sample >= 0 else signed_sample + 65536 - pcm[frame_index * 2] = encoded_sample & 0xff - pcm[frame_index * 2 + 1] = (encoded_sample >> 8) & 0xff - var stream := AudioStreamWAV.new() - stream.set("format", AudioStreamWAV.FORMAT_16_BITS) - stream.mix_rate = SAMPLE_RATE - stream.stereo = false - stream.data = pcm - return stream diff --git a/scripts/import_animalese_voice.sh b/scripts/import_animalese_voice.sh new file mode 100755 index 0000000..cb7eded --- /dev/null +++ b/scripts/import_animalese_voice.sh @@ -0,0 +1,112 @@ +#!/usr/bin/env bash +set -euo pipefail + +readonly TARGET_RMS_DBFS="-18.0" +readonly PEAK_CEILING_DBFS="-3.0" +readonly OUTPUT_SAMPLE_RATE="48000" + +usage() { + printf 'usage: %s SOURCE_DIRECTORY SAMPLE_SET_DIRECTORY\n' "$0" >&2 + printf 'example: %s /path/to/voice_kim kim\n' "$0" >&2 +} + +if (( $# != 2 )); then + usage + exit 2 +fi + +if ! command -v sox >/dev/null 2>&1; then + printf 'error: sox is required to import animalese samples\n' >&2 + exit 1 +fi + +readonly SCRIPT_DIRECTORY="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)" +readonly PROJECT_ROOT="$(cd -- "$SCRIPT_DIRECTORY/.." && pwd)" +readonly SOURCE_DIRECTORY="$(realpath -e -- "$1")" +readonly SAMPLE_SET_DIRECTORY="$2" + +if [[ ! -d "$SOURCE_DIRECTORY" ]]; then + printf 'error: source is not a directory: %s\n' "$SOURCE_DIRECTORY" >&2 + exit 1 +fi +if [[ ! "$SAMPLE_SET_DIRECTORY" =~ ^[a-z0-9_-]+$ ]]; then + printf 'error: sample-set directory must use lowercase letters, numbers, underscores, or hyphens\n' >&2 + exit 1 +fi + +readonly DESTINATION_DIRECTORY="$PROJECT_ROOT/sound/dialogue/animalese/$SAMPLE_SET_DIRECTORY" +readonly WORK_DIRECTORY="$(mktemp -d -t netfishing-animalese-import.XXXXXX)" + +cleanup() { + if [[ "$WORK_DIRECTORY" == /tmp/netfishing-animalese-import.* ]]; then + find "$WORK_DIRECTORY" -depth -delete + fi +} +trap cleanup EXIT + +mkdir -p -- "$WORK_DIRECTORY/converted" "$WORK_DIRECTORY/normalized" +mapfile -d '' SOURCE_FILES < <( + find "$SOURCE_DIRECTORY" -maxdepth 1 -type f -name '*.wav' -print0 \ + | sort -z +) +if (( ${#SOURCE_FILES[@]} == 0 )); then + printf 'error: no .wav samples found in %s\n' "$SOURCE_DIRECTORY" >&2 + exit 1 +fi + +for source_file in "${SOURCE_FILES[@]}"; do + filename="$(basename -- "$source_file")" + if [[ ! "$filename" =~ ^[a-z0-9_]+\.wav$ ]]; then + printf 'error: unsupported sample filename: %s\n' "$filename" >&2 + exit 1 + fi + converted_file="$WORK_DIRECTORY/converted/$filename" + normalized_file="$WORK_DIRECTORY/normalized/$filename" + + # Measure the exact channel/rate conversion that will be shipped, then use + # the smaller of the RMS correction and peak-safe gain. Very short voice + # clips are not reliable inputs for program-loudness algorithms such as + # EBU R128, so this deterministic RMS/peak policy is intentional. + # Reserve headroom before high-quality resampling. Several supplied 8-bit + # clips sit near full scale and their interpolated waveform can otherwise + # clip before the normalization gain is calculated. + sox -D "$source_file" \ + -r "$OUTPUT_SAMPLE_RATE" -c 1 -b 32 -e floating-point \ + "$converted_file" gain -6 rate -v "$OUTPUT_SAMPLE_RATE" + statistics="$(sox "$converted_file" -n stat 2>&1)" + peak_amplitude="$(awk '/Maximum amplitude/ {print $3}' <<< "$statistics")" + rms_amplitude="$(awk '/RMS.*amplitude/ {print $3; exit}' <<< "$statistics")" + if ! awk -v peak="$peak_amplitude" -v rms="$rms_amplitude" \ + 'BEGIN {exit !(peak > 0.0 && rms > 0.0)}'; then + printf 'error: sample is silent or unreadable: %s\n' "$source_file" >&2 + exit 1 + fi + + gain_db="$( + awk \ + -v peak="$peak_amplitude" \ + -v rms="$rms_amplitude" \ + -v target_rms="$TARGET_RMS_DBFS" \ + -v peak_ceiling="$PEAK_CEILING_DBFS" \ + 'BEGIN { + peak_db = 20.0 * log(peak) / log(10.0) + rms_db = 20.0 * log(rms) / log(10.0) + rms_gain = target_rms - rms_db + peak_gain = peak_ceiling - peak_db + gain = rms_gain < peak_gain ? rms_gain : peak_gain + printf "%.6f", gain + }' + )" + sox -D "$converted_file" \ + -r "$OUTPUT_SAMPLE_RATE" -c 1 -b 16 -e signed-integer \ + "$normalized_file" gain "$gain_db" + printf '%-16s %8s dB\n' "$filename" "$gain_db" +done + +mkdir -p -- "$DESTINATION_DIRECTORY" +for normalized_file in "$WORK_DIRECTORY"/normalized/*.wav; do + cp -- "$normalized_file" "$DESTINATION_DIRECTORY/$(basename -- "$normalized_file")" +done + +printf 'imported %d normalized samples to %s\n' \ + "${#SOURCE_FILES[@]}" "$DESTINATION_DIRECTORY" diff --git a/scripts/run_validations.sh b/scripts/run_validations.sh index 722c97b..b0f153c 100755 --- a/scripts/run_validations.sh +++ b/scripts/run_validations.sh @@ -9,6 +9,7 @@ readonly TEST_TIMEOUT_SECONDS="${TEST_TIMEOUT_SECONDS:-120}" readonly RUN_ROOT="$(mktemp -d -t netfishing-validations.XXXXXX)" readonly -a QUICK_TESTS=( + "scripts/validate_animalese_samples.gd" "tests/android_readiness_validation.gd" "tests/controller_focus_presentation_validation.gd" "tests/controller_focus_recovery_validation.gd" diff --git a/scripts/validate_animalese_samples.gd b/scripts/validate_animalese_samples.gd new file mode 100644 index 0000000..a4e7502 --- /dev/null +++ b/scripts/validate_animalese_samples.gd @@ -0,0 +1,73 @@ +extends SceneTree + +const AnimaleseVoiceType = preload("res://ui/animalese_voice.gd") +const VoiceProfilesType = preload( + "res://player/animalese_voice_profiles.gd" +) +const EXPECTED_CHARACTERS := "abcdefghijklmnopqrstuvwxyz0123456789" +const ROBOT_CHARACTERS := "abcdefghijklmnopqrstuvwxyz" + +var _failures: Array[String] = [] + + +func _initialize() -> void: + _expect( + AnimaleseVoiceType.SUPPORTED_CHARACTERS == EXPECTED_CHARACTERS, + "animalese supports every letter and digit", + ) + _expect( + VoiceProfilesType.DEFAULT_SAMPLE_SET_ID == "kat", + "kat is the default animalese voice set", + ) + _expect( + VoiceProfilesType.is_valid_sample_set("robot"), + "the original tones remain available as robot", + ) + _expect( + VoiceProfilesType.is_valid_sample_set("kim"), + "kim is available as an animalese voice set", + ) + _validate_set("kat", EXPECTED_CHARACTERS, false) + _validate_set("robot", ROBOT_CHARACTERS, true) + _validate_set("kim", EXPECTED_CHARACTERS, false) + if _failures.is_empty(): + print("Animalese sample validation: PASS") + quit(0) + return + for failure: String in _failures: + push_error(failure) + quit(1) + + +func _validate_set( + sample_set_id: String, + characters: String, + expects_fallback: bool, +) -> void: + var sample_directory := VoiceProfilesType.sample_directory_for( + sample_set_id + ) + _expect( + not sample_directory.is_empty(), + "%s has a sample directory" % sample_set_id, + ) + for character_index: int in range(characters.length()): + var character := characters.substr(character_index, 1) + var sample_path := "%s/%s.wav" % [sample_directory, character] + _expect( + ResourceLoader.exists(sample_path, "AudioStreamWAV"), + "%s sample loads for %s" % [sample_set_id, character], + ) + if expects_fallback: + _expect( + ResourceLoader.exists( + "%s/fallback.wav" % sample_directory, + "AudioStreamWAV", + ), + "%s supplies a fallback for digits and symbols" % sample_set_id, + ) + + +func _expect(condition: bool, message: String) -> void: + if not condition: + _failures.append(message) diff --git a/scripts/generate_placeholder_animalese.gd.uid b/scripts/validate_animalese_samples.gd.uid similarity index 100% rename from scripts/generate_placeholder_animalese.gd.uid rename to scripts/validate_animalese_samples.gd.uid diff --git a/sound/dialogue/animalese/alphanumeric/0.wav b/sound/dialogue/animalese/alphanumeric/0.wav new file mode 100644 index 0000000..779e725 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/0.wav differ diff --git a/sound/dialogue/animalese/placeholder/a.wav.import b/sound/dialogue/animalese/alphanumeric/0.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/a.wav.import rename to sound/dialogue/animalese/alphanumeric/0.wav.import index 86de7ca..19ac04b 100644 --- a/sound/dialogue/animalese/placeholder/a.wav.import +++ b/sound/dialogue/animalese/alphanumeric/0.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://dvajjy4bwadio" -path="res://.godot/imported/a.wav-9ab4b1a9a555e6fcf07951f399769b30.sample" +uid="uid://cbn5ed728rsm" +path="res://.godot/imported/0.wav-9378d7763e1ef87ae982ab57f6e81f2d.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/a.wav" -dest_files=["res://.godot/imported/a.wav-9ab4b1a9a555e6fcf07951f399769b30.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/0.wav" +dest_files=["res://.godot/imported/0.wav-9378d7763e1ef87ae982ab57f6e81f2d.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/1.wav b/sound/dialogue/animalese/alphanumeric/1.wav new file mode 100644 index 0000000..db7dd62 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/1.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/1.wav.import b/sound/dialogue/animalese/alphanumeric/1.wav.import new file mode 100644 index 0000000..fa2905a --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/1.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://8ofrxxya8xo8" +path="res://.godot/imported/1.wav-759e5f8cac5cef5d0e23605844f5032c.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/1.wav" +dest_files=["res://.godot/imported/1.wav-759e5f8cac5cef5d0e23605844f5032c.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/2.wav b/sound/dialogue/animalese/alphanumeric/2.wav new file mode 100644 index 0000000..74dd315 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/2.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/2.wav.import b/sound/dialogue/animalese/alphanumeric/2.wav.import new file mode 100644 index 0000000..800b899 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/2.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cmxvxip3pwuun" +path="res://.godot/imported/2.wav-4b3515a4b79f8ae9ffc829c8a5e3c285.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/2.wav" +dest_files=["res://.godot/imported/2.wav-4b3515a4b79f8ae9ffc829c8a5e3c285.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/3.wav b/sound/dialogue/animalese/alphanumeric/3.wav new file mode 100644 index 0000000..6f90835 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/3.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/3.wav.import b/sound/dialogue/animalese/alphanumeric/3.wav.import new file mode 100644 index 0000000..5430aea --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/3.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c8017waek7ew8" +path="res://.godot/imported/3.wav-ffb8f531dceaa153b492b74c4bbf7c7c.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/3.wav" +dest_files=["res://.godot/imported/3.wav-ffb8f531dceaa153b492b74c4bbf7c7c.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/4.wav b/sound/dialogue/animalese/alphanumeric/4.wav new file mode 100644 index 0000000..061b5da Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/4.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/4.wav.import b/sound/dialogue/animalese/alphanumeric/4.wav.import new file mode 100644 index 0000000..65e2fa4 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/4.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bbtypop1cmrw1" +path="res://.godot/imported/4.wav-effad197373ffb9b48afe78e0fe6c95a.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/4.wav" +dest_files=["res://.godot/imported/4.wav-effad197373ffb9b48afe78e0fe6c95a.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/5.wav b/sound/dialogue/animalese/alphanumeric/5.wav new file mode 100644 index 0000000..a6c5000 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/5.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/5.wav.import b/sound/dialogue/animalese/alphanumeric/5.wav.import new file mode 100644 index 0000000..cddbc1f --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/5.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ddwhh6igah1ok" +path="res://.godot/imported/5.wav-2cd0baa0afa291660575e1fc431a6b91.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/5.wav" +dest_files=["res://.godot/imported/5.wav-2cd0baa0afa291660575e1fc431a6b91.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/6.wav b/sound/dialogue/animalese/alphanumeric/6.wav new file mode 100644 index 0000000..41154f8 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/6.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/6.wav.import b/sound/dialogue/animalese/alphanumeric/6.wav.import new file mode 100644 index 0000000..4cb51b2 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/6.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cqsddej565w48" +path="res://.godot/imported/6.wav-8c88e3785af1748d3cc8334b825655e1.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/6.wav" +dest_files=["res://.godot/imported/6.wav-8c88e3785af1748d3cc8334b825655e1.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/7.wav b/sound/dialogue/animalese/alphanumeric/7.wav new file mode 100644 index 0000000..e732f42 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/7.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/7.wav.import b/sound/dialogue/animalese/alphanumeric/7.wav.import new file mode 100644 index 0000000..7ed72ee --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/7.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://de5lwv3vtq4jo" +path="res://.godot/imported/7.wav-aa6620dad62f7a8fa68ac3dfe0e8bce0.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/7.wav" +dest_files=["res://.godot/imported/7.wav-aa6620dad62f7a8fa68ac3dfe0e8bce0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/8.wav b/sound/dialogue/animalese/alphanumeric/8.wav new file mode 100644 index 0000000..2779375 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/8.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/8.wav.import b/sound/dialogue/animalese/alphanumeric/8.wav.import new file mode 100644 index 0000000..4733d6c --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/8.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://lsklvocqcohu" +path="res://.godot/imported/8.wav-ee305634b68bbc3c852777570ad90d81.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/8.wav" +dest_files=["res://.godot/imported/8.wav-ee305634b68bbc3c852777570ad90d81.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/9.wav b/sound/dialogue/animalese/alphanumeric/9.wav new file mode 100644 index 0000000..644d326 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/9.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/9.wav.import b/sound/dialogue/animalese/alphanumeric/9.wav.import new file mode 100644 index 0000000..06be5cb --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/9.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cuwg5n2w8trdf" +path="res://.godot/imported/9.wav-2dbc1a5726fda3c5d3e5b8a5c940e14e.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/9.wav" +dest_files=["res://.godot/imported/9.wav-2dbc1a5726fda3c5d3e5b8a5c940e14e.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/a.wav b/sound/dialogue/animalese/alphanumeric/a.wav new file mode 100644 index 0000000..cd50a8b Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/a.wav differ diff --git a/sound/dialogue/animalese/placeholder/x.wav.import b/sound/dialogue/animalese/alphanumeric/a.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/x.wav.import rename to sound/dialogue/animalese/alphanumeric/a.wav.import index c91ffb4..f058d25 100644 --- a/sound/dialogue/animalese/placeholder/x.wav.import +++ b/sound/dialogue/animalese/alphanumeric/a.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://b5al0m4de1m5x" -path="res://.godot/imported/x.wav-b1beaddcc7d6663882ddd8b86e65db56.sample" +uid="uid://dnnf2sfntra41" +path="res://.godot/imported/a.wav-07b66f5c4c337a0412ac22c096725756.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/x.wav" -dest_files=["res://.godot/imported/x.wav-b1beaddcc7d6663882ddd8b86e65db56.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/a.wav" +dest_files=["res://.godot/imported/a.wav-07b66f5c4c337a0412ac22c096725756.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/b.wav b/sound/dialogue/animalese/alphanumeric/b.wav new file mode 100644 index 0000000..56c49e2 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/b.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/b.wav.import b/sound/dialogue/animalese/alphanumeric/b.wav.import new file mode 100644 index 0000000..82c50e4 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/b.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cxueylrkf0358" +path="res://.godot/imported/b.wav-4eb4b2c71e0d5f50efbe3fc8793801e4.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/b.wav" +dest_files=["res://.godot/imported/b.wav-4eb4b2c71e0d5f50efbe3fc8793801e4.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/c.wav b/sound/dialogue/animalese/alphanumeric/c.wav new file mode 100644 index 0000000..6531a4a Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/c.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/c.wav.import b/sound/dialogue/animalese/alphanumeric/c.wav.import new file mode 100644 index 0000000..5fc9844 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/c.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cbwe5uie8fa6k" +path="res://.godot/imported/c.wav-86a3dcc44eaabde775a8efc14c630f27.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/c.wav" +dest_files=["res://.godot/imported/c.wav-86a3dcc44eaabde775a8efc14c630f27.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/d.wav b/sound/dialogue/animalese/alphanumeric/d.wav new file mode 100644 index 0000000..3838dd7 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/d.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/d.wav.import b/sound/dialogue/animalese/alphanumeric/d.wav.import new file mode 100644 index 0000000..c58cbf9 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/d.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://yyr410g00p5p" +path="res://.godot/imported/d.wav-5577435bb675e68970dd9de887fff671.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/d.wav" +dest_files=["res://.godot/imported/d.wav-5577435bb675e68970dd9de887fff671.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/e.wav b/sound/dialogue/animalese/alphanumeric/e.wav new file mode 100644 index 0000000..8ba7d24 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/e.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/e.wav.import b/sound/dialogue/animalese/alphanumeric/e.wav.import new file mode 100644 index 0000000..8d384a2 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/e.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cp6stdrpayltv" +path="res://.godot/imported/e.wav-6373ce27ee05eb89c9d510ca465a24d1.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/e.wav" +dest_files=["res://.godot/imported/e.wav-6373ce27ee05eb89c9d510ca465a24d1.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/f.wav b/sound/dialogue/animalese/alphanumeric/f.wav new file mode 100644 index 0000000..0ec0644 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/f.wav differ diff --git a/sound/dialogue/animalese/placeholder/f.wav.import b/sound/dialogue/animalese/alphanumeric/f.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/f.wav.import rename to sound/dialogue/animalese/alphanumeric/f.wav.import index dc85ee3..fdc83d0 100644 --- a/sound/dialogue/animalese/placeholder/f.wav.import +++ b/sound/dialogue/animalese/alphanumeric/f.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://c0gv4cphnfcxf" -path="res://.godot/imported/f.wav-8eb31f2de6240647a0d6d2520aadcd6a.sample" +uid="uid://bc1lj4kba0fr1" +path="res://.godot/imported/f.wav-637c7bb130969a55972a1c232962cb40.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/f.wav" -dest_files=["res://.godot/imported/f.wav-8eb31f2de6240647a0d6d2520aadcd6a.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/f.wav" +dest_files=["res://.godot/imported/f.wav-637c7bb130969a55972a1c232962cb40.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/g.wav b/sound/dialogue/animalese/alphanumeric/g.wav new file mode 100644 index 0000000..c942d53 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/g.wav differ diff --git a/sound/dialogue/animalese/placeholder/g.wav.import b/sound/dialogue/animalese/alphanumeric/g.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/g.wav.import rename to sound/dialogue/animalese/alphanumeric/g.wav.import index 1709852..f643d8d 100644 --- a/sound/dialogue/animalese/placeholder/g.wav.import +++ b/sound/dialogue/animalese/alphanumeric/g.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://c7706p0fc8y7c" -path="res://.godot/imported/g.wav-45b2cbd9653a31477e3f00c9432d560c.sample" +uid="uid://6k1d81vrewm7" +path="res://.godot/imported/g.wav-73da4ecac29d03a5e0c1bb2463bcb6cb.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/g.wav" -dest_files=["res://.godot/imported/g.wav-45b2cbd9653a31477e3f00c9432d560c.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/g.wav" +dest_files=["res://.godot/imported/g.wav-73da4ecac29d03a5e0c1bb2463bcb6cb.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/h.wav b/sound/dialogue/animalese/alphanumeric/h.wav new file mode 100644 index 0000000..545915f Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/h.wav differ diff --git a/sound/dialogue/animalese/placeholder/h.wav.import b/sound/dialogue/animalese/alphanumeric/h.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/h.wav.import rename to sound/dialogue/animalese/alphanumeric/h.wav.import index 96b2359..c33b3bf 100644 --- a/sound/dialogue/animalese/placeholder/h.wav.import +++ b/sound/dialogue/animalese/alphanumeric/h.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://cl66wka105xmo" -path="res://.godot/imported/h.wav-2da53a6638eebb75f0867eaf75dc24ba.sample" +uid="uid://boatg77atys5a" +path="res://.godot/imported/h.wav-44456bd4f004ee75088b13cb2069e3fb.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/h.wav" -dest_files=["res://.godot/imported/h.wav-2da53a6638eebb75f0867eaf75dc24ba.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/h.wav" +dest_files=["res://.godot/imported/h.wav-44456bd4f004ee75088b13cb2069e3fb.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/i.wav b/sound/dialogue/animalese/alphanumeric/i.wav new file mode 100644 index 0000000..f464cbc Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/i.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/i.wav.import b/sound/dialogue/animalese/alphanumeric/i.wav.import new file mode 100644 index 0000000..51b5c36 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/i.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cvru47ct1d7mj" +path="res://.godot/imported/i.wav-8ce67b78d17a9ac111433177c3ed850b.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/i.wav" +dest_files=["res://.godot/imported/i.wav-8ce67b78d17a9ac111433177c3ed850b.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/j.wav b/sound/dialogue/animalese/alphanumeric/j.wav new file mode 100644 index 0000000..1381026 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/j.wav differ diff --git a/sound/dialogue/animalese/placeholder/i.wav.import b/sound/dialogue/animalese/alphanumeric/j.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/i.wav.import rename to sound/dialogue/animalese/alphanumeric/j.wav.import index 0c11fd6..83202fe 100644 --- a/sound/dialogue/animalese/placeholder/i.wav.import +++ b/sound/dialogue/animalese/alphanumeric/j.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://jicgdbnyt6bm" -path="res://.godot/imported/i.wav-1e8d7f13980a6f2f61d73f65a2efc91c.sample" +uid="uid://dwi1wq2dyli5y" +path="res://.godot/imported/j.wav-c07aa6b0f20fa8fcc89a706a3391c11c.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/i.wav" -dest_files=["res://.godot/imported/i.wav-1e8d7f13980a6f2f61d73f65a2efc91c.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/j.wav" +dest_files=["res://.godot/imported/j.wav-c07aa6b0f20fa8fcc89a706a3391c11c.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/k.wav b/sound/dialogue/animalese/alphanumeric/k.wav new file mode 100644 index 0000000..3995b27 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/k.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/k.wav.import b/sound/dialogue/animalese/alphanumeric/k.wav.import new file mode 100644 index 0000000..8cbff42 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/k.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://6dkc31pv1ey1" +path="res://.godot/imported/k.wav-c6fde0aff33080ec99703bdd4fa87e80.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/k.wav" +dest_files=["res://.godot/imported/k.wav-c6fde0aff33080ec99703bdd4fa87e80.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/l.wav b/sound/dialogue/animalese/alphanumeric/l.wav new file mode 100644 index 0000000..e0f7ae7 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/l.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/l.wav.import b/sound/dialogue/animalese/alphanumeric/l.wav.import new file mode 100644 index 0000000..8c05113 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/l.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://d2o1hk6e4bbss" +path="res://.godot/imported/l.wav-722141f795e13543172ffd960308b24c.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/l.wav" +dest_files=["res://.godot/imported/l.wav-722141f795e13543172ffd960308b24c.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/m.wav b/sound/dialogue/animalese/alphanumeric/m.wav new file mode 100644 index 0000000..6ea69d4 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/m.wav differ diff --git a/sound/dialogue/animalese/placeholder/m.wav.import b/sound/dialogue/animalese/alphanumeric/m.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/m.wav.import rename to sound/dialogue/animalese/alphanumeric/m.wav.import index 2a2439b..c5f005b 100644 --- a/sound/dialogue/animalese/placeholder/m.wav.import +++ b/sound/dialogue/animalese/alphanumeric/m.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://dan4o17oreugv" -path="res://.godot/imported/m.wav-aa394c4b1d5309d859ce73a368754264.sample" +uid="uid://c588ew7t8dwse" +path="res://.godot/imported/m.wav-2ad62bfb1ad90a0667f708c5154de5dc.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/m.wav" -dest_files=["res://.godot/imported/m.wav-aa394c4b1d5309d859ce73a368754264.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/m.wav" +dest_files=["res://.godot/imported/m.wav-2ad62bfb1ad90a0667f708c5154de5dc.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/n.wav b/sound/dialogue/animalese/alphanumeric/n.wav new file mode 100644 index 0000000..636914e Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/n.wav differ diff --git a/sound/dialogue/animalese/placeholder/n.wav.import b/sound/dialogue/animalese/alphanumeric/n.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/n.wav.import rename to sound/dialogue/animalese/alphanumeric/n.wav.import index f5e432c..455c90b 100644 --- a/sound/dialogue/animalese/placeholder/n.wav.import +++ b/sound/dialogue/animalese/alphanumeric/n.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://dxup6pw80km61" -path="res://.godot/imported/n.wav-84e9a6fa6664222868d647187a09f374.sample" +uid="uid://mc1vnfuhpuwr" +path="res://.godot/imported/n.wav-b995292a9ce9755047a5a6a6166a4a4c.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/n.wav" -dest_files=["res://.godot/imported/n.wav-84e9a6fa6664222868d647187a09f374.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/n.wav" +dest_files=["res://.godot/imported/n.wav-b995292a9ce9755047a5a6a6166a4a4c.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/o.wav b/sound/dialogue/animalese/alphanumeric/o.wav new file mode 100644 index 0000000..0161399 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/o.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/o.wav.import b/sound/dialogue/animalese/alphanumeric/o.wav.import new file mode 100644 index 0000000..655e8fe --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/o.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://rkmixmwg8vgp" +path="res://.godot/imported/o.wav-696f77252311afda46e416ece590eb55.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/o.wav" +dest_files=["res://.godot/imported/o.wav-696f77252311afda46e416ece590eb55.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/p.wav b/sound/dialogue/animalese/alphanumeric/p.wav new file mode 100644 index 0000000..99bf4fd Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/p.wav differ diff --git a/sound/dialogue/animalese/placeholder/p.wav.import b/sound/dialogue/animalese/alphanumeric/p.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/p.wav.import rename to sound/dialogue/animalese/alphanumeric/p.wav.import index a431c1f..96ae91b 100644 --- a/sound/dialogue/animalese/placeholder/p.wav.import +++ b/sound/dialogue/animalese/alphanumeric/p.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://crubsdrd220eh" -path="res://.godot/imported/p.wav-c32b759c822f258d8d947827adf8127a.sample" +uid="uid://blbcb70gci0q2" +path="res://.godot/imported/p.wav-bc58581e4a5d8761e1c8b91f069f951d.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/p.wav" -dest_files=["res://.godot/imported/p.wav-c32b759c822f258d8d947827adf8127a.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/p.wav" +dest_files=["res://.godot/imported/p.wav-bc58581e4a5d8761e1c8b91f069f951d.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/q.wav b/sound/dialogue/animalese/alphanumeric/q.wav new file mode 100644 index 0000000..80562cc Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/q.wav differ diff --git a/sound/dialogue/animalese/placeholder/q.wav.import b/sound/dialogue/animalese/alphanumeric/q.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/q.wav.import rename to sound/dialogue/animalese/alphanumeric/q.wav.import index 574c906..896c936 100644 --- a/sound/dialogue/animalese/placeholder/q.wav.import +++ b/sound/dialogue/animalese/alphanumeric/q.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://ct0decr76agoq" -path="res://.godot/imported/q.wav-d494b927c6f2b8bfbaa44d1f81887731.sample" +uid="uid://bmu30s0vscbvg" +path="res://.godot/imported/q.wav-b9d907f73d4a59dd6641ffe35c36aaac.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/q.wav" -dest_files=["res://.godot/imported/q.wav-d494b927c6f2b8bfbaa44d1f81887731.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/q.wav" +dest_files=["res://.godot/imported/q.wav-b9d907f73d4a59dd6641ffe35c36aaac.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/r.wav b/sound/dialogue/animalese/alphanumeric/r.wav new file mode 100644 index 0000000..b38b3a8 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/r.wav differ diff --git a/sound/dialogue/animalese/placeholder/r.wav.import b/sound/dialogue/animalese/alphanumeric/r.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/r.wav.import rename to sound/dialogue/animalese/alphanumeric/r.wav.import index 1f196b1..3007c69 100644 --- a/sound/dialogue/animalese/placeholder/r.wav.import +++ b/sound/dialogue/animalese/alphanumeric/r.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://dpq7rin4pr1n3" -path="res://.godot/imported/r.wav-d1d419e3246c0e918ff51a9dd662a742.sample" +uid="uid://bgdec44ic6msd" +path="res://.godot/imported/r.wav-d5ea52bfff9160d4d25d74dd94072208.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/r.wav" -dest_files=["res://.godot/imported/r.wav-d1d419e3246c0e918ff51a9dd662a742.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/r.wav" +dest_files=["res://.godot/imported/r.wav-d5ea52bfff9160d4d25d74dd94072208.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/s.wav b/sound/dialogue/animalese/alphanumeric/s.wav new file mode 100644 index 0000000..8ba7d24 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/s.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/s.wav.import b/sound/dialogue/animalese/alphanumeric/s.wav.import new file mode 100644 index 0000000..c48dad9 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/s.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://draie1dh0muw" +path="res://.godot/imported/s.wav-0dfb29a8b9a3bf4890d24e227cd0d0c4.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/s.wav" +dest_files=["res://.godot/imported/s.wav-0dfb29a8b9a3bf4890d24e227cd0d0c4.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/t.wav b/sound/dialogue/animalese/alphanumeric/t.wav new file mode 100644 index 0000000..f34aa5d Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/t.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/t.wav.import b/sound/dialogue/animalese/alphanumeric/t.wav.import new file mode 100644 index 0000000..cd55195 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/t.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ybmvcpv7prx" +path="res://.godot/imported/t.wav-d4e7e7dbe4c04e54e9c7edb0d85af81a.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/t.wav" +dest_files=["res://.godot/imported/t.wav-d4e7e7dbe4c04e54e9c7edb0d85af81a.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/u.wav b/sound/dialogue/animalese/alphanumeric/u.wav new file mode 100644 index 0000000..c41b3fc Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/u.wav differ diff --git a/sound/dialogue/animalese/placeholder/t.wav.import b/sound/dialogue/animalese/alphanumeric/u.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/t.wav.import rename to sound/dialogue/animalese/alphanumeric/u.wav.import index ce35ba2..27b2e8b 100644 --- a/sound/dialogue/animalese/placeholder/t.wav.import +++ b/sound/dialogue/animalese/alphanumeric/u.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://dr0dp5v8fdb8r" -path="res://.godot/imported/t.wav-3a26c5be0f8e3007adf1daa05a6a1ea2.sample" +uid="uid://dn0hxgm1ueiv7" +path="res://.godot/imported/u.wav-b8a534783b71ec701bb0925308d513a2.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/t.wav" -dest_files=["res://.godot/imported/t.wav-3a26c5be0f8e3007adf1daa05a6a1ea2.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/u.wav" +dest_files=["res://.godot/imported/u.wav-b8a534783b71ec701bb0925308d513a2.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/v.wav b/sound/dialogue/animalese/alphanumeric/v.wav new file mode 100644 index 0000000..78b81f9 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/v.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/v.wav.import b/sound/dialogue/animalese/alphanumeric/v.wav.import new file mode 100644 index 0000000..294b852 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/v.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c5p70bkanhlua" +path="res://.godot/imported/v.wav-0dc1396f424599662d6812e2e59a3b71.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/v.wav" +dest_files=["res://.godot/imported/v.wav-0dc1396f424599662d6812e2e59a3b71.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/w.wav b/sound/dialogue/animalese/alphanumeric/w.wav new file mode 100644 index 0000000..26cbdc9 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/w.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/w.wav.import b/sound/dialogue/animalese/alphanumeric/w.wav.import new file mode 100644 index 0000000..5c13da4 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/w.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dr2025tcuq5lq" +path="res://.godot/imported/w.wav-caf9c9b3fa280c326a6be0c426672562.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/w.wav" +dest_files=["res://.godot/imported/w.wav-caf9c9b3fa280c326a6be0c426672562.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/x.wav b/sound/dialogue/animalese/alphanumeric/x.wav new file mode 100644 index 0000000..fa020f7 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/x.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/x.wav.import b/sound/dialogue/animalese/alphanumeric/x.wav.import new file mode 100644 index 0000000..95a6a8e --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/x.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c2c6lwmfogv1o" +path="res://.godot/imported/x.wav-6dec8d5d6aa916173970737d9db8f509.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/x.wav" +dest_files=["res://.godot/imported/x.wav-6dec8d5d6aa916173970737d9db8f509.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/alphanumeric/y.wav b/sound/dialogue/animalese/alphanumeric/y.wav new file mode 100644 index 0000000..3acdc45 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/y.wav differ diff --git a/sound/dialogue/animalese/placeholder/y.wav.import b/sound/dialogue/animalese/alphanumeric/y.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/y.wav.import rename to sound/dialogue/animalese/alphanumeric/y.wav.import index 2c7d8d3..72ebe0c 100644 --- a/sound/dialogue/animalese/placeholder/y.wav.import +++ b/sound/dialogue/animalese/alphanumeric/y.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://c6hust77yamoe" -path="res://.godot/imported/y.wav-5ef178912b2921bb7c790b12e2e82337.sample" +uid="uid://csjurthefub6u" +path="res://.godot/imported/y.wav-82e4c89a86bc31782eaca5f5ee737bb1.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/y.wav" -dest_files=["res://.godot/imported/y.wav-5ef178912b2921bb7c790b12e2e82337.sample"] +source_file="res://sound/dialogue/animalese/alphanumeric/y.wav" +dest_files=["res://.godot/imported/y.wav-82e4c89a86bc31782eaca5f5ee737bb1.sample"] [params] diff --git a/sound/dialogue/animalese/alphanumeric/z.wav b/sound/dialogue/animalese/alphanumeric/z.wav new file mode 100644 index 0000000..779e725 Binary files /dev/null and b/sound/dialogue/animalese/alphanumeric/z.wav differ diff --git a/sound/dialogue/animalese/alphanumeric/z.wav.import b/sound/dialogue/animalese/alphanumeric/z.wav.import new file mode 100644 index 0000000..b089115 --- /dev/null +++ b/sound/dialogue/animalese/alphanumeric/z.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bujyv5lsxarhr" +path="res://.godot/imported/z.wav-38cc5c83dca1b80b731d307651219c08.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/alphanumeric/z.wav" +dest_files=["res://.godot/imported/z.wav-38cc5c83dca1b80b731d307651219c08.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/0.wav b/sound/dialogue/animalese/kim/0.wav new file mode 100644 index 0000000..ed9af43 Binary files /dev/null and b/sound/dialogue/animalese/kim/0.wav differ diff --git a/sound/dialogue/animalese/placeholder/k.wav.import b/sound/dialogue/animalese/kim/0.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/k.wav.import rename to sound/dialogue/animalese/kim/0.wav.import index 4af149c..cc27672 100644 --- a/sound/dialogue/animalese/placeholder/k.wav.import +++ b/sound/dialogue/animalese/kim/0.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://eypaqf1iaq5" -path="res://.godot/imported/k.wav-b85d045dc022b9055c25a650b2e3af2a.sample" +uid="uid://w8wvtbsovk1y" +path="res://.godot/imported/0.wav-bbd392e8755139dca852d942c97afaa6.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/k.wav" -dest_files=["res://.godot/imported/k.wav-b85d045dc022b9055c25a650b2e3af2a.sample"] +source_file="res://sound/dialogue/animalese/kim/0.wav" +dest_files=["res://.godot/imported/0.wav-bbd392e8755139dca852d942c97afaa6.sample"] [params] diff --git a/sound/dialogue/animalese/kim/1.wav b/sound/dialogue/animalese/kim/1.wav new file mode 100644 index 0000000..102b4f8 Binary files /dev/null and b/sound/dialogue/animalese/kim/1.wav differ diff --git a/sound/dialogue/animalese/placeholder/s.wav.import b/sound/dialogue/animalese/kim/1.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/s.wav.import rename to sound/dialogue/animalese/kim/1.wav.import index a794fdf..0169929 100644 --- a/sound/dialogue/animalese/placeholder/s.wav.import +++ b/sound/dialogue/animalese/kim/1.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://c00meumj2blfa" -path="res://.godot/imported/s.wav-15abb20075aacc8d5fe95cd206ae25ce.sample" +uid="uid://cnny27n4wbk6s" +path="res://.godot/imported/1.wav-5303efd25be6d603f73c2c2d77759fce.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/s.wav" -dest_files=["res://.godot/imported/s.wav-15abb20075aacc8d5fe95cd206ae25ce.sample"] +source_file="res://sound/dialogue/animalese/kim/1.wav" +dest_files=["res://.godot/imported/1.wav-5303efd25be6d603f73c2c2d77759fce.sample"] [params] diff --git a/sound/dialogue/animalese/kim/2.wav b/sound/dialogue/animalese/kim/2.wav new file mode 100644 index 0000000..5559b55 Binary files /dev/null and b/sound/dialogue/animalese/kim/2.wav differ diff --git a/sound/dialogue/animalese/kim/2.wav.import b/sound/dialogue/animalese/kim/2.wav.import new file mode 100644 index 0000000..26bb35a --- /dev/null +++ b/sound/dialogue/animalese/kim/2.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://daw5c2h7p5yu6" +path="res://.godot/imported/2.wav-a384b25ebb56567742354475fa551c97.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/2.wav" +dest_files=["res://.godot/imported/2.wav-a384b25ebb56567742354475fa551c97.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/3.wav b/sound/dialogue/animalese/kim/3.wav new file mode 100644 index 0000000..158485a Binary files /dev/null and b/sound/dialogue/animalese/kim/3.wav differ diff --git a/sound/dialogue/animalese/kim/3.wav.import b/sound/dialogue/animalese/kim/3.wav.import new file mode 100644 index 0000000..c4f479d --- /dev/null +++ b/sound/dialogue/animalese/kim/3.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dn24y7on5811q" +path="res://.godot/imported/3.wav-da7f408c6ee782136a7225f6a5b4c2da.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/3.wav" +dest_files=["res://.godot/imported/3.wav-da7f408c6ee782136a7225f6a5b4c2da.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/4.wav b/sound/dialogue/animalese/kim/4.wav new file mode 100644 index 0000000..6d05ec7 Binary files /dev/null and b/sound/dialogue/animalese/kim/4.wav differ diff --git a/sound/dialogue/animalese/kim/4.wav.import b/sound/dialogue/animalese/kim/4.wav.import new file mode 100644 index 0000000..c6a70b3 --- /dev/null +++ b/sound/dialogue/animalese/kim/4.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cpbt1fduqk2bc" +path="res://.godot/imported/4.wav-710dd9e6b25e0147dec2f21cfae1a894.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/4.wav" +dest_files=["res://.godot/imported/4.wav-710dd9e6b25e0147dec2f21cfae1a894.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/5.wav b/sound/dialogue/animalese/kim/5.wav new file mode 100644 index 0000000..5671a38 Binary files /dev/null and b/sound/dialogue/animalese/kim/5.wav differ diff --git a/sound/dialogue/animalese/kim/5.wav.import b/sound/dialogue/animalese/kim/5.wav.import new file mode 100644 index 0000000..bc739df --- /dev/null +++ b/sound/dialogue/animalese/kim/5.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://chf4scjvimr1o" +path="res://.godot/imported/5.wav-7adb723973f3005425a71be181ad28e9.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/5.wav" +dest_files=["res://.godot/imported/5.wav-7adb723973f3005425a71be181ad28e9.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/6.wav b/sound/dialogue/animalese/kim/6.wav new file mode 100644 index 0000000..379199e Binary files /dev/null and b/sound/dialogue/animalese/kim/6.wav differ diff --git a/sound/dialogue/animalese/kim/6.wav.import b/sound/dialogue/animalese/kim/6.wav.import new file mode 100644 index 0000000..3674eb9 --- /dev/null +++ b/sound/dialogue/animalese/kim/6.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://phxil12i1qmt" +path="res://.godot/imported/6.wav-1303e051aae59fdf169def7624379571.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/6.wav" +dest_files=["res://.godot/imported/6.wav-1303e051aae59fdf169def7624379571.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/7.wav b/sound/dialogue/animalese/kim/7.wav new file mode 100644 index 0000000..ccfdd5f Binary files /dev/null and b/sound/dialogue/animalese/kim/7.wav differ diff --git a/sound/dialogue/animalese/kim/7.wav.import b/sound/dialogue/animalese/kim/7.wav.import new file mode 100644 index 0000000..a6cee56 --- /dev/null +++ b/sound/dialogue/animalese/kim/7.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dn1pxla32ab23" +path="res://.godot/imported/7.wav-cb4bd630248ebe745a1646dc7060d526.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/7.wav" +dest_files=["res://.godot/imported/7.wav-cb4bd630248ebe745a1646dc7060d526.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/8.wav b/sound/dialogue/animalese/kim/8.wav new file mode 100644 index 0000000..d21e79c Binary files /dev/null and b/sound/dialogue/animalese/kim/8.wav differ diff --git a/sound/dialogue/animalese/kim/8.wav.import b/sound/dialogue/animalese/kim/8.wav.import new file mode 100644 index 0000000..36a3e42 --- /dev/null +++ b/sound/dialogue/animalese/kim/8.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dw3bqqcoeoelf" +path="res://.godot/imported/8.wav-5f912e71babee0f928483bcc9e2fa9f3.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/8.wav" +dest_files=["res://.godot/imported/8.wav-5f912e71babee0f928483bcc9e2fa9f3.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/9.wav b/sound/dialogue/animalese/kim/9.wav new file mode 100644 index 0000000..70d4515 Binary files /dev/null and b/sound/dialogue/animalese/kim/9.wav differ diff --git a/sound/dialogue/animalese/kim/9.wav.import b/sound/dialogue/animalese/kim/9.wav.import new file mode 100644 index 0000000..8739b30 --- /dev/null +++ b/sound/dialogue/animalese/kim/9.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b3xwpno2ky226" +path="res://.godot/imported/9.wav-92fe849d00f43baa22f6338601438d71.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/9.wav" +dest_files=["res://.godot/imported/9.wav-92fe849d00f43baa22f6338601438d71.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/a.wav b/sound/dialogue/animalese/kim/a.wav new file mode 100644 index 0000000..78d2ae6 Binary files /dev/null and b/sound/dialogue/animalese/kim/a.wav differ diff --git a/sound/dialogue/animalese/kim/a.wav.import b/sound/dialogue/animalese/kim/a.wav.import new file mode 100644 index 0000000..c0c8c4b --- /dev/null +++ b/sound/dialogue/animalese/kim/a.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c72cosdd78vhw" +path="res://.godot/imported/a.wav-19230b3cafcf4c28b5dd1f5c6133e5a5.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/a.wav" +dest_files=["res://.godot/imported/a.wav-19230b3cafcf4c28b5dd1f5c6133e5a5.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/b.wav b/sound/dialogue/animalese/kim/b.wav new file mode 100644 index 0000000..440592d Binary files /dev/null and b/sound/dialogue/animalese/kim/b.wav differ diff --git a/sound/dialogue/animalese/kim/b.wav.import b/sound/dialogue/animalese/kim/b.wav.import new file mode 100644 index 0000000..495146b --- /dev/null +++ b/sound/dialogue/animalese/kim/b.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://caejv7ic8kc83" +path="res://.godot/imported/b.wav-185deb7af67f5a2c71a0fcd8ad5c9ee8.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/b.wav" +dest_files=["res://.godot/imported/b.wav-185deb7af67f5a2c71a0fcd8ad5c9ee8.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/c.wav b/sound/dialogue/animalese/kim/c.wav new file mode 100644 index 0000000..d7f2b03 Binary files /dev/null and b/sound/dialogue/animalese/kim/c.wav differ diff --git a/sound/dialogue/animalese/kim/c.wav.import b/sound/dialogue/animalese/kim/c.wav.import new file mode 100644 index 0000000..10afb6b --- /dev/null +++ b/sound/dialogue/animalese/kim/c.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cpshexs36p2g0" +path="res://.godot/imported/c.wav-bd1cbbf5862edfbaca6f9f8b0bb2990b.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/c.wav" +dest_files=["res://.godot/imported/c.wav-bd1cbbf5862edfbaca6f9f8b0bb2990b.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/d.wav b/sound/dialogue/animalese/kim/d.wav new file mode 100644 index 0000000..51b694b Binary files /dev/null and b/sound/dialogue/animalese/kim/d.wav differ diff --git a/sound/dialogue/animalese/placeholder/d.wav.import b/sound/dialogue/animalese/kim/d.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/d.wav.import rename to sound/dialogue/animalese/kim/d.wav.import index ffc5bb9..6654420 100644 --- a/sound/dialogue/animalese/placeholder/d.wav.import +++ b/sound/dialogue/animalese/kim/d.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://yvha8eukw6l7" -path="res://.godot/imported/d.wav-910bc02bc42bdb1b37561959a317c28a.sample" +uid="uid://bqhge2ptlm71d" +path="res://.godot/imported/d.wav-dd6ab85372a6bd92c069003d8685a7bf.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/d.wav" -dest_files=["res://.godot/imported/d.wav-910bc02bc42bdb1b37561959a317c28a.sample"] +source_file="res://sound/dialogue/animalese/kim/d.wav" +dest_files=["res://.godot/imported/d.wav-dd6ab85372a6bd92c069003d8685a7bf.sample"] [params] diff --git a/sound/dialogue/animalese/kim/e.wav b/sound/dialogue/animalese/kim/e.wav new file mode 100644 index 0000000..cb2c1c8 Binary files /dev/null and b/sound/dialogue/animalese/kim/e.wav differ diff --git a/sound/dialogue/animalese/placeholder/e.wav.import b/sound/dialogue/animalese/kim/e.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/e.wav.import rename to sound/dialogue/animalese/kim/e.wav.import index 49de309..8a998e2 100644 --- a/sound/dialogue/animalese/placeholder/e.wav.import +++ b/sound/dialogue/animalese/kim/e.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://8ujopf8aqs83" -path="res://.godot/imported/e.wav-7da5f8fcd017bf931de2bd49dc00f652.sample" +uid="uid://crfyuh2rii14l" +path="res://.godot/imported/e.wav-08036c9672bbd5dd6268ec8812ae775f.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/e.wav" -dest_files=["res://.godot/imported/e.wav-7da5f8fcd017bf931de2bd49dc00f652.sample"] +source_file="res://sound/dialogue/animalese/kim/e.wav" +dest_files=["res://.godot/imported/e.wav-08036c9672bbd5dd6268ec8812ae775f.sample"] [params] diff --git a/sound/dialogue/animalese/kim/f.wav b/sound/dialogue/animalese/kim/f.wav new file mode 100644 index 0000000..b1545ff Binary files /dev/null and b/sound/dialogue/animalese/kim/f.wav differ diff --git a/sound/dialogue/animalese/placeholder/b.wav.import b/sound/dialogue/animalese/kim/f.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/b.wav.import rename to sound/dialogue/animalese/kim/f.wav.import index 4aea49c..03c1a4d 100644 --- a/sound/dialogue/animalese/placeholder/b.wav.import +++ b/sound/dialogue/animalese/kim/f.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://cs30tdyuo6wtc" -path="res://.godot/imported/b.wav-eed860af2033bda258bd172899061b45.sample" +uid="uid://uk0jqhph802c" +path="res://.godot/imported/f.wav-82aa6f7c781c80928450893a029aac45.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/b.wav" -dest_files=["res://.godot/imported/b.wav-eed860af2033bda258bd172899061b45.sample"] +source_file="res://sound/dialogue/animalese/kim/f.wav" +dest_files=["res://.godot/imported/f.wav-82aa6f7c781c80928450893a029aac45.sample"] [params] diff --git a/sound/dialogue/animalese/kim/g.wav b/sound/dialogue/animalese/kim/g.wav new file mode 100644 index 0000000..a37ac01 Binary files /dev/null and b/sound/dialogue/animalese/kim/g.wav differ diff --git a/sound/dialogue/animalese/kim/g.wav.import b/sound/dialogue/animalese/kim/g.wav.import new file mode 100644 index 0000000..a9b73ba --- /dev/null +++ b/sound/dialogue/animalese/kim/g.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://1008bpcdr223" +path="res://.godot/imported/g.wav-372aa2fc0531a484e3322ee3d3b48085.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/g.wav" +dest_files=["res://.godot/imported/g.wav-372aa2fc0531a484e3322ee3d3b48085.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/h.wav b/sound/dialogue/animalese/kim/h.wav new file mode 100644 index 0000000..0c19076 Binary files /dev/null and b/sound/dialogue/animalese/kim/h.wav differ diff --git a/sound/dialogue/animalese/kim/h.wav.import b/sound/dialogue/animalese/kim/h.wav.import new file mode 100644 index 0000000..fb6ec91 --- /dev/null +++ b/sound/dialogue/animalese/kim/h.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bw0ua5pignh1m" +path="res://.godot/imported/h.wav-f16878738745ac8ee0150078290ea7c5.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/h.wav" +dest_files=["res://.godot/imported/h.wav-f16878738745ac8ee0150078290ea7c5.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/i.wav b/sound/dialogue/animalese/kim/i.wav new file mode 100644 index 0000000..cd097c2 Binary files /dev/null and b/sound/dialogue/animalese/kim/i.wav differ diff --git a/sound/dialogue/animalese/kim/i.wav.import b/sound/dialogue/animalese/kim/i.wav.import new file mode 100644 index 0000000..724e4f5 --- /dev/null +++ b/sound/dialogue/animalese/kim/i.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cyv3yum38oqdm" +path="res://.godot/imported/i.wav-c720580ef88ff0c17cc9e0a9daec4ec2.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/i.wav" +dest_files=["res://.godot/imported/i.wav-c720580ef88ff0c17cc9e0a9daec4ec2.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/j.wav b/sound/dialogue/animalese/kim/j.wav new file mode 100644 index 0000000..718d67e Binary files /dev/null and b/sound/dialogue/animalese/kim/j.wav differ diff --git a/sound/dialogue/animalese/kim/j.wav.import b/sound/dialogue/animalese/kim/j.wav.import new file mode 100644 index 0000000..4cc5f64 --- /dev/null +++ b/sound/dialogue/animalese/kim/j.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b7hjrilpfkuxx" +path="res://.godot/imported/j.wav-e5a60e91add3cfd5587ee2205e401fef.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/j.wav" +dest_files=["res://.godot/imported/j.wav-e5a60e91add3cfd5587ee2205e401fef.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/k.wav b/sound/dialogue/animalese/kim/k.wav new file mode 100644 index 0000000..fa1748d Binary files /dev/null and b/sound/dialogue/animalese/kim/k.wav differ diff --git a/sound/dialogue/animalese/placeholder/z.wav.import b/sound/dialogue/animalese/kim/k.wav.import similarity index 54% rename from sound/dialogue/animalese/placeholder/z.wav.import rename to sound/dialogue/animalese/kim/k.wav.import index 12b1b54..171b8a0 100644 --- a/sound/dialogue/animalese/placeholder/z.wav.import +++ b/sound/dialogue/animalese/kim/k.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://djvv63b0jlll" -path="res://.godot/imported/z.wav-3e6ff24f53b1014b381cc80ee9fb1a84.sample" +uid="uid://n4n7gg0bqbbm" +path="res://.godot/imported/k.wav-82cc304c4627c5fcf78403e0d82b4066.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/z.wav" -dest_files=["res://.godot/imported/z.wav-3e6ff24f53b1014b381cc80ee9fb1a84.sample"] +source_file="res://sound/dialogue/animalese/kim/k.wav" +dest_files=["res://.godot/imported/k.wav-82cc304c4627c5fcf78403e0d82b4066.sample"] [params] diff --git a/sound/dialogue/animalese/kim/l.wav b/sound/dialogue/animalese/kim/l.wav new file mode 100644 index 0000000..aea20f2 Binary files /dev/null and b/sound/dialogue/animalese/kim/l.wav differ diff --git a/sound/dialogue/animalese/kim/l.wav.import b/sound/dialogue/animalese/kim/l.wav.import new file mode 100644 index 0000000..1845e6d --- /dev/null +++ b/sound/dialogue/animalese/kim/l.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://nle3bfrffs5t" +path="res://.godot/imported/l.wav-4b9d875920578dd42b0265fdc42a4c0d.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/l.wav" +dest_files=["res://.godot/imported/l.wav-4b9d875920578dd42b0265fdc42a4c0d.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/m.wav b/sound/dialogue/animalese/kim/m.wav new file mode 100644 index 0000000..68a5ace Binary files /dev/null and b/sound/dialogue/animalese/kim/m.wav differ diff --git a/sound/dialogue/animalese/kim/m.wav.import b/sound/dialogue/animalese/kim/m.wav.import new file mode 100644 index 0000000..5a81393 --- /dev/null +++ b/sound/dialogue/animalese/kim/m.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://wia38ojr60e6" +path="res://.godot/imported/m.wav-f7d07c9e641beaa268666b6d6b350fb0.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/m.wav" +dest_files=["res://.godot/imported/m.wav-f7d07c9e641beaa268666b6d6b350fb0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/n.wav b/sound/dialogue/animalese/kim/n.wav new file mode 100644 index 0000000..b3996d0 Binary files /dev/null and b/sound/dialogue/animalese/kim/n.wav differ diff --git a/sound/dialogue/animalese/kim/n.wav.import b/sound/dialogue/animalese/kim/n.wav.import new file mode 100644 index 0000000..63058b2 --- /dev/null +++ b/sound/dialogue/animalese/kim/n.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ci70fsfe28t2" +path="res://.godot/imported/n.wav-19567bad745c477e3e8f72b9737adf99.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/n.wav" +dest_files=["res://.godot/imported/n.wav-19567bad745c477e3e8f72b9737adf99.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/o.wav b/sound/dialogue/animalese/kim/o.wav new file mode 100644 index 0000000..66dd126 Binary files /dev/null and b/sound/dialogue/animalese/kim/o.wav differ diff --git a/sound/dialogue/animalese/kim/o.wav.import b/sound/dialogue/animalese/kim/o.wav.import new file mode 100644 index 0000000..4ba4147 --- /dev/null +++ b/sound/dialogue/animalese/kim/o.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://droru2bo6m2ih" +path="res://.godot/imported/o.wav-d2b3f3d92542aa1643abd9b106b457de.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/o.wav" +dest_files=["res://.godot/imported/o.wav-d2b3f3d92542aa1643abd9b106b457de.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/p.wav b/sound/dialogue/animalese/kim/p.wav new file mode 100644 index 0000000..25cbb55 Binary files /dev/null and b/sound/dialogue/animalese/kim/p.wav differ diff --git a/sound/dialogue/animalese/kim/p.wav.import b/sound/dialogue/animalese/kim/p.wav.import new file mode 100644 index 0000000..ec826e3 --- /dev/null +++ b/sound/dialogue/animalese/kim/p.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://d2gyv7ugi1yam" +path="res://.godot/imported/p.wav-f16816387176c36971c1a3eb52f1742e.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/p.wav" +dest_files=["res://.godot/imported/p.wav-f16816387176c36971c1a3eb52f1742e.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/q.wav b/sound/dialogue/animalese/kim/q.wav new file mode 100644 index 0000000..887f7d6 Binary files /dev/null and b/sound/dialogue/animalese/kim/q.wav differ diff --git a/sound/dialogue/animalese/kim/q.wav.import b/sound/dialogue/animalese/kim/q.wav.import new file mode 100644 index 0000000..0e794ee --- /dev/null +++ b/sound/dialogue/animalese/kim/q.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ci6h5d2oag4an" +path="res://.godot/imported/q.wav-729a36d49b5b3bd23f1badb802667428.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/q.wav" +dest_files=["res://.godot/imported/q.wav-729a36d49b5b3bd23f1badb802667428.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/r.wav b/sound/dialogue/animalese/kim/r.wav new file mode 100644 index 0000000..1fa9937 Binary files /dev/null and b/sound/dialogue/animalese/kim/r.wav differ diff --git a/sound/dialogue/animalese/kim/r.wav.import b/sound/dialogue/animalese/kim/r.wav.import new file mode 100644 index 0000000..84c2887 --- /dev/null +++ b/sound/dialogue/animalese/kim/r.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://c03fj374ceaqc" +path="res://.godot/imported/r.wav-74003e87654a77c6a0afc0d80fca9cf3.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/r.wav" +dest_files=["res://.godot/imported/r.wav-74003e87654a77c6a0afc0d80fca9cf3.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/s.wav b/sound/dialogue/animalese/kim/s.wav new file mode 100644 index 0000000..962fd46 Binary files /dev/null and b/sound/dialogue/animalese/kim/s.wav differ diff --git a/sound/dialogue/animalese/kim/s.wav.import b/sound/dialogue/animalese/kim/s.wav.import new file mode 100644 index 0000000..c39714d --- /dev/null +++ b/sound/dialogue/animalese/kim/s.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://d0yb6lesxgm8j" +path="res://.godot/imported/s.wav-627d8bd9f4cee8c43ac9237705df784f.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/s.wav" +dest_files=["res://.godot/imported/s.wav-627d8bd9f4cee8c43ac9237705df784f.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/t.wav b/sound/dialogue/animalese/kim/t.wav new file mode 100644 index 0000000..c5fcc51 Binary files /dev/null and b/sound/dialogue/animalese/kim/t.wav differ diff --git a/sound/dialogue/animalese/kim/t.wav.import b/sound/dialogue/animalese/kim/t.wav.import new file mode 100644 index 0000000..b6d0ae9 --- /dev/null +++ b/sound/dialogue/animalese/kim/t.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bcvrvl4mli82i" +path="res://.godot/imported/t.wav-aec336b52646bd870831f9effe598c92.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/t.wav" +dest_files=["res://.godot/imported/t.wav-aec336b52646bd870831f9effe598c92.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/u.wav b/sound/dialogue/animalese/kim/u.wav new file mode 100644 index 0000000..56caa56 Binary files /dev/null and b/sound/dialogue/animalese/kim/u.wav differ diff --git a/sound/dialogue/animalese/kim/u.wav.import b/sound/dialogue/animalese/kim/u.wav.import new file mode 100644 index 0000000..7724a93 --- /dev/null +++ b/sound/dialogue/animalese/kim/u.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://mpw8xt0uxm5d" +path="res://.godot/imported/u.wav-02b540f73efcb10ad4943d4f37bdf90b.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/u.wav" +dest_files=["res://.godot/imported/u.wav-02b540f73efcb10ad4943d4f37bdf90b.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/v.wav b/sound/dialogue/animalese/kim/v.wav new file mode 100644 index 0000000..4add64f Binary files /dev/null and b/sound/dialogue/animalese/kim/v.wav differ diff --git a/sound/dialogue/animalese/placeholder/v.wav.import b/sound/dialogue/animalese/kim/v.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/v.wav.import rename to sound/dialogue/animalese/kim/v.wav.import index ff876a8..fb772de 100644 --- a/sound/dialogue/animalese/placeholder/v.wav.import +++ b/sound/dialogue/animalese/kim/v.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://y3g1s3pw3bn0" -path="res://.godot/imported/v.wav-5a9986e91dbdd0da4f0583b35a986b1c.sample" +uid="uid://n0r81bxuadfo" +path="res://.godot/imported/v.wav-d66f5caffb359fad446ec9ddbacdf071.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/v.wav" -dest_files=["res://.godot/imported/v.wav-5a9986e91dbdd0da4f0583b35a986b1c.sample"] +source_file="res://sound/dialogue/animalese/kim/v.wav" +dest_files=["res://.godot/imported/v.wav-d66f5caffb359fad446ec9ddbacdf071.sample"] [params] diff --git a/sound/dialogue/animalese/kim/w.wav b/sound/dialogue/animalese/kim/w.wav new file mode 100644 index 0000000..9020a84 Binary files /dev/null and b/sound/dialogue/animalese/kim/w.wav differ diff --git a/sound/dialogue/animalese/placeholder/w.wav.import b/sound/dialogue/animalese/kim/w.wav.import similarity index 50% rename from sound/dialogue/animalese/placeholder/w.wav.import rename to sound/dialogue/animalese/kim/w.wav.import index 36f4e0f..b6f0a30 100644 --- a/sound/dialogue/animalese/placeholder/w.wav.import +++ b/sound/dialogue/animalese/kim/w.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://5ml2iuf8cpgt" -path="res://.godot/imported/w.wav-d3e9035a1fc5e7946be782a0d4f95e64.sample" +uid="uid://dm742m0d4b8o7" +path="res://.godot/imported/w.wav-46b37c23c004fe793f00e82c587efbcf.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/w.wav" -dest_files=["res://.godot/imported/w.wav-d3e9035a1fc5e7946be782a0d4f95e64.sample"] +source_file="res://sound/dialogue/animalese/kim/w.wav" +dest_files=["res://.godot/imported/w.wav-46b37c23c004fe793f00e82c587efbcf.sample"] [params] diff --git a/sound/dialogue/animalese/kim/x.wav b/sound/dialogue/animalese/kim/x.wav new file mode 100644 index 0000000..f147ef3 Binary files /dev/null and b/sound/dialogue/animalese/kim/x.wav differ diff --git a/sound/dialogue/animalese/kim/x.wav.import b/sound/dialogue/animalese/kim/x.wav.import new file mode 100644 index 0000000..4fcd581 --- /dev/null +++ b/sound/dialogue/animalese/kim/x.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cn2my2uukyd8u" +path="res://.godot/imported/x.wav-90efe4fb55c5c2061c2e9dbc89bfb532.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/x.wav" +dest_files=["res://.godot/imported/x.wav-90efe4fb55c5c2061c2e9dbc89bfb532.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/y.wav b/sound/dialogue/animalese/kim/y.wav new file mode 100644 index 0000000..7f818c8 Binary files /dev/null and b/sound/dialogue/animalese/kim/y.wav differ diff --git a/sound/dialogue/animalese/kim/y.wav.import b/sound/dialogue/animalese/kim/y.wav.import new file mode 100644 index 0000000..0cfb028 --- /dev/null +++ b/sound/dialogue/animalese/kim/y.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://djhq5e17gcqv1" +path="res://.godot/imported/y.wav-0170ee159f2f8405596f47206d01cf8f.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/y.wav" +dest_files=["res://.godot/imported/y.wav-0170ee159f2f8405596f47206d01cf8f.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/kim/z.wav b/sound/dialogue/animalese/kim/z.wav new file mode 100644 index 0000000..ed9af43 Binary files /dev/null and b/sound/dialogue/animalese/kim/z.wav differ diff --git a/sound/dialogue/animalese/kim/z.wav.import b/sound/dialogue/animalese/kim/z.wav.import new file mode 100644 index 0000000..4a3b319 --- /dev/null +++ b/sound/dialogue/animalese/kim/z.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bhhaol0imq60f" +path="res://.godot/imported/z.wav-6daaf8e93675aba3840dbf16e9c93ebf.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/kim/z.wav" +dest_files=["res://.godot/imported/z.wav-6daaf8e93675aba3840dbf16e9c93ebf.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/placeholder/a.wav b/sound/dialogue/animalese/placeholder/a.wav deleted file mode 100644 index ca652d4..0000000 Binary files a/sound/dialogue/animalese/placeholder/a.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/b.wav b/sound/dialogue/animalese/placeholder/b.wav deleted file mode 100644 index 71ceb88..0000000 Binary files a/sound/dialogue/animalese/placeholder/b.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/c.wav b/sound/dialogue/animalese/placeholder/c.wav deleted file mode 100644 index 8b5eb64..0000000 Binary files a/sound/dialogue/animalese/placeholder/c.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/d.wav b/sound/dialogue/animalese/placeholder/d.wav deleted file mode 100644 index 978009a..0000000 Binary files a/sound/dialogue/animalese/placeholder/d.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/e.wav b/sound/dialogue/animalese/placeholder/e.wav deleted file mode 100644 index 76f7b8c..0000000 Binary files a/sound/dialogue/animalese/placeholder/e.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/f.wav b/sound/dialogue/animalese/placeholder/f.wav deleted file mode 100644 index bec92c1..0000000 Binary files a/sound/dialogue/animalese/placeholder/f.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/fallback.wav b/sound/dialogue/animalese/placeholder/fallback.wav deleted file mode 100644 index 63a759e..0000000 Binary files a/sound/dialogue/animalese/placeholder/fallback.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/fallback.wav.import b/sound/dialogue/animalese/placeholder/fallback.wav.import deleted file mode 100644 index e116a3c..0000000 --- a/sound/dialogue/animalese/placeholder/fallback.wav.import +++ /dev/null @@ -1,24 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamWAV" -uid="uid://bw0pod4tmexm0" -path="res://.godot/imported/fallback.wav-7a40516b188f10028ac39bdc24fb52e5.sample" - -[deps] - -source_file="res://sound/dialogue/animalese/placeholder/fallback.wav" -dest_files=["res://.godot/imported/fallback.wav-7a40516b188f10028ac39bdc24fb52e5.sample"] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=2 diff --git a/sound/dialogue/animalese/placeholder/g.wav b/sound/dialogue/animalese/placeholder/g.wav deleted file mode 100644 index 39dccf1..0000000 Binary files a/sound/dialogue/animalese/placeholder/g.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/h.wav b/sound/dialogue/animalese/placeholder/h.wav deleted file mode 100644 index acebfed..0000000 Binary files a/sound/dialogue/animalese/placeholder/h.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/i.wav b/sound/dialogue/animalese/placeholder/i.wav deleted file mode 100644 index fbd10e1..0000000 Binary files a/sound/dialogue/animalese/placeholder/i.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/j.wav b/sound/dialogue/animalese/placeholder/j.wav deleted file mode 100644 index 0087db5..0000000 Binary files a/sound/dialogue/animalese/placeholder/j.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/j.wav.import b/sound/dialogue/animalese/placeholder/j.wav.import deleted file mode 100644 index 46a0baf..0000000 --- a/sound/dialogue/animalese/placeholder/j.wav.import +++ /dev/null @@ -1,24 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamWAV" -uid="uid://cji2evr0u3m6c" -path="res://.godot/imported/j.wav-2f355374ffcea77f8dc630ee45879444.sample" - -[deps] - -source_file="res://sound/dialogue/animalese/placeholder/j.wav" -dest_files=["res://.godot/imported/j.wav-2f355374ffcea77f8dc630ee45879444.sample"] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=2 diff --git a/sound/dialogue/animalese/placeholder/k.wav b/sound/dialogue/animalese/placeholder/k.wav deleted file mode 100644 index c1b5e69..0000000 Binary files a/sound/dialogue/animalese/placeholder/k.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/l.wav b/sound/dialogue/animalese/placeholder/l.wav deleted file mode 100644 index fe2624b..0000000 Binary files a/sound/dialogue/animalese/placeholder/l.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/m.wav b/sound/dialogue/animalese/placeholder/m.wav deleted file mode 100644 index 4660d96..0000000 Binary files a/sound/dialogue/animalese/placeholder/m.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/n.wav b/sound/dialogue/animalese/placeholder/n.wav deleted file mode 100644 index 97e5457..0000000 Binary files a/sound/dialogue/animalese/placeholder/n.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/o.wav b/sound/dialogue/animalese/placeholder/o.wav deleted file mode 100644 index bee6bc1..0000000 Binary files a/sound/dialogue/animalese/placeholder/o.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/p.wav b/sound/dialogue/animalese/placeholder/p.wav deleted file mode 100644 index 29fdd60..0000000 Binary files a/sound/dialogue/animalese/placeholder/p.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/q.wav b/sound/dialogue/animalese/placeholder/q.wav deleted file mode 100644 index df184ca..0000000 Binary files a/sound/dialogue/animalese/placeholder/q.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/r.wav b/sound/dialogue/animalese/placeholder/r.wav deleted file mode 100644 index 41fda60..0000000 Binary files a/sound/dialogue/animalese/placeholder/r.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/s.wav b/sound/dialogue/animalese/placeholder/s.wav deleted file mode 100644 index f9c542a..0000000 Binary files a/sound/dialogue/animalese/placeholder/s.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/t.wav b/sound/dialogue/animalese/placeholder/t.wav deleted file mode 100644 index 76e0948..0000000 Binary files a/sound/dialogue/animalese/placeholder/t.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/u.wav b/sound/dialogue/animalese/placeholder/u.wav deleted file mode 100644 index 81ebbe5..0000000 Binary files a/sound/dialogue/animalese/placeholder/u.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/u.wav.import b/sound/dialogue/animalese/placeholder/u.wav.import deleted file mode 100644 index 8ccd096..0000000 --- a/sound/dialogue/animalese/placeholder/u.wav.import +++ /dev/null @@ -1,24 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamWAV" -uid="uid://bln1bkdu20muo" -path="res://.godot/imported/u.wav-06e44c423f3d1cd6cdd34b54270211bb.sample" - -[deps] - -source_file="res://sound/dialogue/animalese/placeholder/u.wav" -dest_files=["res://.godot/imported/u.wav-06e44c423f3d1cd6cdd34b54270211bb.sample"] - -[params] - -force/8_bit=false -force/mono=false -force/max_rate=false -force/max_rate_hz=44100 -edit/trim=false -edit/normalize=false -edit/loop_mode=0 -edit/loop_begin=0 -edit/loop_end=-1 -compress/mode=2 diff --git a/sound/dialogue/animalese/placeholder/v.wav b/sound/dialogue/animalese/placeholder/v.wav deleted file mode 100644 index d5c0d12..0000000 Binary files a/sound/dialogue/animalese/placeholder/v.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/w.wav b/sound/dialogue/animalese/placeholder/w.wav deleted file mode 100644 index 5122f9c..0000000 Binary files a/sound/dialogue/animalese/placeholder/w.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/x.wav b/sound/dialogue/animalese/placeholder/x.wav deleted file mode 100644 index e00f085..0000000 Binary files a/sound/dialogue/animalese/placeholder/x.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/y.wav b/sound/dialogue/animalese/placeholder/y.wav deleted file mode 100644 index 07b45ef..0000000 Binary files a/sound/dialogue/animalese/placeholder/y.wav and /dev/null differ diff --git a/sound/dialogue/animalese/placeholder/z.wav b/sound/dialogue/animalese/placeholder/z.wav deleted file mode 100644 index 8f94654..0000000 Binary files a/sound/dialogue/animalese/placeholder/z.wav and /dev/null differ diff --git a/sound/dialogue/animalese/robot/a.wav b/sound/dialogue/animalese/robot/a.wav new file mode 100644 index 0000000..0e434f7 Binary files /dev/null and b/sound/dialogue/animalese/robot/a.wav differ diff --git a/sound/dialogue/animalese/robot/a.wav.import b/sound/dialogue/animalese/robot/a.wav.import new file mode 100644 index 0000000..6d33ed2 --- /dev/null +++ b/sound/dialogue/animalese/robot/a.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cg8vgijwjen1h" +path="res://.godot/imported/a.wav-912469cf287b9f82df9e0084967c3138.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/a.wav" +dest_files=["res://.godot/imported/a.wav-912469cf287b9f82df9e0084967c3138.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/b.wav b/sound/dialogue/animalese/robot/b.wav new file mode 100644 index 0000000..8e24102 Binary files /dev/null and b/sound/dialogue/animalese/robot/b.wav differ diff --git a/sound/dialogue/animalese/robot/b.wav.import b/sound/dialogue/animalese/robot/b.wav.import new file mode 100644 index 0000000..d858d56 --- /dev/null +++ b/sound/dialogue/animalese/robot/b.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dbn3ilqo34j1l" +path="res://.godot/imported/b.wav-482bec9aa59b1274ddc061acf0928cc3.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/b.wav" +dest_files=["res://.godot/imported/b.wav-482bec9aa59b1274ddc061acf0928cc3.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/c.wav b/sound/dialogue/animalese/robot/c.wav new file mode 100644 index 0000000..4eb4028 Binary files /dev/null and b/sound/dialogue/animalese/robot/c.wav differ diff --git a/sound/dialogue/animalese/robot/c.wav.import b/sound/dialogue/animalese/robot/c.wav.import new file mode 100644 index 0000000..a32613d --- /dev/null +++ b/sound/dialogue/animalese/robot/c.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://6tmnptljtqms" +path="res://.godot/imported/c.wav-88fe8cecfa21a5d5cf845d6b8679d13c.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/c.wav" +dest_files=["res://.godot/imported/c.wav-88fe8cecfa21a5d5cf845d6b8679d13c.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/d.wav b/sound/dialogue/animalese/robot/d.wav new file mode 100644 index 0000000..eba38a4 Binary files /dev/null and b/sound/dialogue/animalese/robot/d.wav differ diff --git a/sound/dialogue/animalese/robot/d.wav.import b/sound/dialogue/animalese/robot/d.wav.import new file mode 100644 index 0000000..3732bc7 --- /dev/null +++ b/sound/dialogue/animalese/robot/d.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://btrj6qtm84855" +path="res://.godot/imported/d.wav-ef76f071f3356e954019c5494b963533.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/d.wav" +dest_files=["res://.godot/imported/d.wav-ef76f071f3356e954019c5494b963533.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/e.wav b/sound/dialogue/animalese/robot/e.wav new file mode 100644 index 0000000..4b54f04 Binary files /dev/null and b/sound/dialogue/animalese/robot/e.wav differ diff --git a/sound/dialogue/animalese/robot/e.wav.import b/sound/dialogue/animalese/robot/e.wav.import new file mode 100644 index 0000000..ce7a9c8 --- /dev/null +++ b/sound/dialogue/animalese/robot/e.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://esdsylelog50" +path="res://.godot/imported/e.wav-e44b4d22c43894915ef0134813dd6ec8.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/e.wav" +dest_files=["res://.godot/imported/e.wav-e44b4d22c43894915ef0134813dd6ec8.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/f.wav b/sound/dialogue/animalese/robot/f.wav new file mode 100644 index 0000000..e30b889 Binary files /dev/null and b/sound/dialogue/animalese/robot/f.wav differ diff --git a/sound/dialogue/animalese/robot/f.wav.import b/sound/dialogue/animalese/robot/f.wav.import new file mode 100644 index 0000000..c9a3d2f --- /dev/null +++ b/sound/dialogue/animalese/robot/f.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://xb01jed4d7xl" +path="res://.godot/imported/f.wav-06750a71b9dfd09a72792c85901ef2e0.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/f.wav" +dest_files=["res://.godot/imported/f.wav-06750a71b9dfd09a72792c85901ef2e0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/fallback.wav b/sound/dialogue/animalese/robot/fallback.wav new file mode 100644 index 0000000..54ca7ca Binary files /dev/null and b/sound/dialogue/animalese/robot/fallback.wav differ diff --git a/sound/dialogue/animalese/robot/fallback.wav.import b/sound/dialogue/animalese/robot/fallback.wav.import new file mode 100644 index 0000000..a62bdeb --- /dev/null +++ b/sound/dialogue/animalese/robot/fallback.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cebc27kmdv7bt" +path="res://.godot/imported/fallback.wav-70adb8cf4fa8834ef769dc92854a5f89.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/fallback.wav" +dest_files=["res://.godot/imported/fallback.wav-70adb8cf4fa8834ef769dc92854a5f89.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/g.wav b/sound/dialogue/animalese/robot/g.wav new file mode 100644 index 0000000..d659358 Binary files /dev/null and b/sound/dialogue/animalese/robot/g.wav differ diff --git a/sound/dialogue/animalese/robot/g.wav.import b/sound/dialogue/animalese/robot/g.wav.import new file mode 100644 index 0000000..1c619ad --- /dev/null +++ b/sound/dialogue/animalese/robot/g.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cxnixxqcol7cf" +path="res://.godot/imported/g.wav-bab051202eead7ae86eb50d16fe7ae4d.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/g.wav" +dest_files=["res://.godot/imported/g.wav-bab051202eead7ae86eb50d16fe7ae4d.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/h.wav b/sound/dialogue/animalese/robot/h.wav new file mode 100644 index 0000000..3363245 Binary files /dev/null and b/sound/dialogue/animalese/robot/h.wav differ diff --git a/sound/dialogue/animalese/robot/h.wav.import b/sound/dialogue/animalese/robot/h.wav.import new file mode 100644 index 0000000..c7a868b --- /dev/null +++ b/sound/dialogue/animalese/robot/h.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cyssmnjalcjh1" +path="res://.godot/imported/h.wav-82eb606f12a9a3898f9adc04f47242bc.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/h.wav" +dest_files=["res://.godot/imported/h.wav-82eb606f12a9a3898f9adc04f47242bc.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/i.wav b/sound/dialogue/animalese/robot/i.wav new file mode 100644 index 0000000..c0b5ce8 Binary files /dev/null and b/sound/dialogue/animalese/robot/i.wav differ diff --git a/sound/dialogue/animalese/robot/i.wav.import b/sound/dialogue/animalese/robot/i.wav.import new file mode 100644 index 0000000..94f36d8 --- /dev/null +++ b/sound/dialogue/animalese/robot/i.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cvng0omshxqb1" +path="res://.godot/imported/i.wav-efaf75378a992fa714224dedfe31ed34.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/i.wav" +dest_files=["res://.godot/imported/i.wav-efaf75378a992fa714224dedfe31ed34.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/j.wav b/sound/dialogue/animalese/robot/j.wav new file mode 100644 index 0000000..f5f2e24 Binary files /dev/null and b/sound/dialogue/animalese/robot/j.wav differ diff --git a/sound/dialogue/animalese/robot/j.wav.import b/sound/dialogue/animalese/robot/j.wav.import new file mode 100644 index 0000000..b9a9adf --- /dev/null +++ b/sound/dialogue/animalese/robot/j.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b8roqgoeyo3l8" +path="res://.godot/imported/j.wav-822afb34d9e86d0e6fb2f2e871c11a99.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/j.wav" +dest_files=["res://.godot/imported/j.wav-822afb34d9e86d0e6fb2f2e871c11a99.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/k.wav b/sound/dialogue/animalese/robot/k.wav new file mode 100644 index 0000000..f9c6b5c Binary files /dev/null and b/sound/dialogue/animalese/robot/k.wav differ diff --git a/sound/dialogue/animalese/placeholder/l.wav.import b/sound/dialogue/animalese/robot/k.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/l.wav.import rename to sound/dialogue/animalese/robot/k.wav.import index 8193ecf..ca3086f 100644 --- a/sound/dialogue/animalese/placeholder/l.wav.import +++ b/sound/dialogue/animalese/robot/k.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://bixgnaq4idkhj" -path="res://.godot/imported/l.wav-b21006c3b048e0c797d6baf19ab0f663.sample" +uid="uid://b2x5ijnb38tnv" +path="res://.godot/imported/k.wav-253c9eda1dc82ce4e496727f8805ed63.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/l.wav" -dest_files=["res://.godot/imported/l.wav-b21006c3b048e0c797d6baf19ab0f663.sample"] +source_file="res://sound/dialogue/animalese/robot/k.wav" +dest_files=["res://.godot/imported/k.wav-253c9eda1dc82ce4e496727f8805ed63.sample"] [params] diff --git a/sound/dialogue/animalese/robot/l.wav b/sound/dialogue/animalese/robot/l.wav new file mode 100644 index 0000000..cc1d512 Binary files /dev/null and b/sound/dialogue/animalese/robot/l.wav differ diff --git a/sound/dialogue/animalese/robot/l.wav.import b/sound/dialogue/animalese/robot/l.wav.import new file mode 100644 index 0000000..7f77dac --- /dev/null +++ b/sound/dialogue/animalese/robot/l.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dtobkfled545r" +path="res://.godot/imported/l.wav-74470cbddad2ea89893332702c74ae8d.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/l.wav" +dest_files=["res://.godot/imported/l.wav-74470cbddad2ea89893332702c74ae8d.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/m.wav b/sound/dialogue/animalese/robot/m.wav new file mode 100644 index 0000000..7359a06 Binary files /dev/null and b/sound/dialogue/animalese/robot/m.wav differ diff --git a/sound/dialogue/animalese/robot/m.wav.import b/sound/dialogue/animalese/robot/m.wav.import new file mode 100644 index 0000000..cc0ebdf --- /dev/null +++ b/sound/dialogue/animalese/robot/m.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://x53vy8vfb0v7" +path="res://.godot/imported/m.wav-3282c0735e81b1924994c0f641854897.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/m.wav" +dest_files=["res://.godot/imported/m.wav-3282c0735e81b1924994c0f641854897.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/n.wav b/sound/dialogue/animalese/robot/n.wav new file mode 100644 index 0000000..a505906 Binary files /dev/null and b/sound/dialogue/animalese/robot/n.wav differ diff --git a/sound/dialogue/animalese/robot/n.wav.import b/sound/dialogue/animalese/robot/n.wav.import new file mode 100644 index 0000000..3122cfb --- /dev/null +++ b/sound/dialogue/animalese/robot/n.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cktk3r2ociatv" +path="res://.godot/imported/n.wav-38bfd5021f583b1a472e0c265ddc01e0.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/n.wav" +dest_files=["res://.godot/imported/n.wav-38bfd5021f583b1a472e0c265ddc01e0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/o.wav b/sound/dialogue/animalese/robot/o.wav new file mode 100644 index 0000000..7e8cb61 Binary files /dev/null and b/sound/dialogue/animalese/robot/o.wav differ diff --git a/sound/dialogue/animalese/robot/o.wav.import b/sound/dialogue/animalese/robot/o.wav.import new file mode 100644 index 0000000..58596f6 --- /dev/null +++ b/sound/dialogue/animalese/robot/o.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://exnucx2mi3nk" +path="res://.godot/imported/o.wav-c2146198bb8a83542393735ccb97a983.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/o.wav" +dest_files=["res://.godot/imported/o.wav-c2146198bb8a83542393735ccb97a983.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/p.wav b/sound/dialogue/animalese/robot/p.wav new file mode 100644 index 0000000..770c2ea Binary files /dev/null and b/sound/dialogue/animalese/robot/p.wav differ diff --git a/sound/dialogue/animalese/placeholder/c.wav.import b/sound/dialogue/animalese/robot/p.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/c.wav.import rename to sound/dialogue/animalese/robot/p.wav.import index bbd8074..5b0c010 100644 --- a/sound/dialogue/animalese/placeholder/c.wav.import +++ b/sound/dialogue/animalese/robot/p.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://2inox7x31xam" -path="res://.godot/imported/c.wav-61dc49533634805d70c71d509b63e37b.sample" +uid="uid://jgnbqcbt0t64" +path="res://.godot/imported/p.wav-b5d1c85200b8e57e540534fa6782857b.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/c.wav" -dest_files=["res://.godot/imported/c.wav-61dc49533634805d70c71d509b63e37b.sample"] +source_file="res://sound/dialogue/animalese/robot/p.wav" +dest_files=["res://.godot/imported/p.wav-b5d1c85200b8e57e540534fa6782857b.sample"] [params] diff --git a/sound/dialogue/animalese/robot/q.wav b/sound/dialogue/animalese/robot/q.wav new file mode 100644 index 0000000..f7ec879 Binary files /dev/null and b/sound/dialogue/animalese/robot/q.wav differ diff --git a/sound/dialogue/animalese/robot/q.wav.import b/sound/dialogue/animalese/robot/q.wav.import new file mode 100644 index 0000000..a624666 --- /dev/null +++ b/sound/dialogue/animalese/robot/q.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ycgqs14iexxe" +path="res://.godot/imported/q.wav-27ccb3c315837cff45c092f2c543d9c3.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/q.wav" +dest_files=["res://.godot/imported/q.wav-27ccb3c315837cff45c092f2c543d9c3.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/r.wav b/sound/dialogue/animalese/robot/r.wav new file mode 100644 index 0000000..9a3b293 Binary files /dev/null and b/sound/dialogue/animalese/robot/r.wav differ diff --git a/sound/dialogue/animalese/robot/r.wav.import b/sound/dialogue/animalese/robot/r.wav.import new file mode 100644 index 0000000..a64a6b2 --- /dev/null +++ b/sound/dialogue/animalese/robot/r.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bun5h3babtwrw" +path="res://.godot/imported/r.wav-7370fd302d45d0a79de1eb3caf1fa0e2.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/r.wav" +dest_files=["res://.godot/imported/r.wav-7370fd302d45d0a79de1eb3caf1fa0e2.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/s.wav b/sound/dialogue/animalese/robot/s.wav new file mode 100644 index 0000000..0847120 Binary files /dev/null and b/sound/dialogue/animalese/robot/s.wav differ diff --git a/sound/dialogue/animalese/robot/s.wav.import b/sound/dialogue/animalese/robot/s.wav.import new file mode 100644 index 0000000..a65ebe9 --- /dev/null +++ b/sound/dialogue/animalese/robot/s.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ds02uafo1fulk" +path="res://.godot/imported/s.wav-d021f184e6f257c8c38e99166409779b.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/s.wav" +dest_files=["res://.godot/imported/s.wav-d021f184e6f257c8c38e99166409779b.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/t.wav b/sound/dialogue/animalese/robot/t.wav new file mode 100644 index 0000000..fef9bf0 Binary files /dev/null and b/sound/dialogue/animalese/robot/t.wav differ diff --git a/sound/dialogue/animalese/robot/t.wav.import b/sound/dialogue/animalese/robot/t.wav.import new file mode 100644 index 0000000..86242c0 --- /dev/null +++ b/sound/dialogue/animalese/robot/t.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ouvxq1dsnqsc" +path="res://.godot/imported/t.wav-12b718527178b570cfd5eedb8c04297e.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/t.wav" +dest_files=["res://.godot/imported/t.wav-12b718527178b570cfd5eedb8c04297e.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/u.wav b/sound/dialogue/animalese/robot/u.wav new file mode 100644 index 0000000..d2d148d Binary files /dev/null and b/sound/dialogue/animalese/robot/u.wav differ diff --git a/sound/dialogue/animalese/robot/u.wav.import b/sound/dialogue/animalese/robot/u.wav.import new file mode 100644 index 0000000..2703c24 --- /dev/null +++ b/sound/dialogue/animalese/robot/u.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dd3ece0ndg16y" +path="res://.godot/imported/u.wav-06fb03902c67d2949aa71cdb8e1f8bf0.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/u.wav" +dest_files=["res://.godot/imported/u.wav-06fb03902c67d2949aa71cdb8e1f8bf0.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/v.wav b/sound/dialogue/animalese/robot/v.wav new file mode 100644 index 0000000..32d8341 Binary files /dev/null and b/sound/dialogue/animalese/robot/v.wav differ diff --git a/sound/dialogue/animalese/robot/v.wav.import b/sound/dialogue/animalese/robot/v.wav.import new file mode 100644 index 0000000..a82ae8a --- /dev/null +++ b/sound/dialogue/animalese/robot/v.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cn1reodu8saiy" +path="res://.godot/imported/v.wav-d3ebbf2d472bce20fe0792395ed4d049.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/v.wav" +dest_files=["res://.godot/imported/v.wav-d3ebbf2d472bce20fe0792395ed4d049.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/w.wav b/sound/dialogue/animalese/robot/w.wav new file mode 100644 index 0000000..68d06c2 Binary files /dev/null and b/sound/dialogue/animalese/robot/w.wav differ diff --git a/sound/dialogue/animalese/placeholder/o.wav.import b/sound/dialogue/animalese/robot/w.wav.import similarity index 52% rename from sound/dialogue/animalese/placeholder/o.wav.import rename to sound/dialogue/animalese/robot/w.wav.import index b094a9f..76cbec4 100644 --- a/sound/dialogue/animalese/placeholder/o.wav.import +++ b/sound/dialogue/animalese/robot/w.wav.import @@ -2,13 +2,13 @@ importer="wav" type="AudioStreamWAV" -uid="uid://lntkug4avr2k" -path="res://.godot/imported/o.wav-6c18faa9701875d7753d91afcd1b09e6.sample" +uid="uid://bfbipoalvo37y" +path="res://.godot/imported/w.wav-fa8b04d920c43f155d3f4a909a2ee5e6.sample" [deps] -source_file="res://sound/dialogue/animalese/placeholder/o.wav" -dest_files=["res://.godot/imported/o.wav-6c18faa9701875d7753d91afcd1b09e6.sample"] +source_file="res://sound/dialogue/animalese/robot/w.wav" +dest_files=["res://.godot/imported/w.wav-fa8b04d920c43f155d3f4a909a2ee5e6.sample"] [params] diff --git a/sound/dialogue/animalese/robot/x.wav b/sound/dialogue/animalese/robot/x.wav new file mode 100644 index 0000000..24e8604 Binary files /dev/null and b/sound/dialogue/animalese/robot/x.wav differ diff --git a/sound/dialogue/animalese/robot/x.wav.import b/sound/dialogue/animalese/robot/x.wav.import new file mode 100644 index 0000000..d54fe68 --- /dev/null +++ b/sound/dialogue/animalese/robot/x.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://e4bx33654fbn" +path="res://.godot/imported/x.wav-ce5e1553c073860351f5d4de3da6af28.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/x.wav" +dest_files=["res://.godot/imported/x.wav-ce5e1553c073860351f5d4de3da6af28.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/y.wav b/sound/dialogue/animalese/robot/y.wav new file mode 100644 index 0000000..414a176 Binary files /dev/null and b/sound/dialogue/animalese/robot/y.wav differ diff --git a/sound/dialogue/animalese/robot/y.wav.import b/sound/dialogue/animalese/robot/y.wav.import new file mode 100644 index 0000000..023e8ae --- /dev/null +++ b/sound/dialogue/animalese/robot/y.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b3ns0qyyvxqgt" +path="res://.godot/imported/y.wav-f5e15ad92e6316d22a5263c8296dff17.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/y.wav" +dest_files=["res://.godot/imported/y.wav-f5e15ad92e6316d22a5263c8296dff17.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/sound/dialogue/animalese/robot/z.wav b/sound/dialogue/animalese/robot/z.wav new file mode 100644 index 0000000..243bab2 Binary files /dev/null and b/sound/dialogue/animalese/robot/z.wav differ diff --git a/sound/dialogue/animalese/robot/z.wav.import b/sound/dialogue/animalese/robot/z.wav.import new file mode 100644 index 0000000..1ee68f8 --- /dev/null +++ b/sound/dialogue/animalese/robot/z.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cu8vaak45mcna" +path="res://.godot/imported/z.wav-bde1bea473ae6ddcfb32432d5206e265.sample" + +[deps] + +source_file="res://sound/dialogue/animalese/robot/z.wav" +dest_files=["res://.godot/imported/z.wav-bde1bea473ae6ddcfb32432d5206e265.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=2 diff --git a/tests/controller_menu_accessibility_validation.gd b/tests/controller_menu_accessibility_validation.gd index e6e3b4d..702210b 100644 --- a/tests/controller_menu_accessibility_validation.gd +++ b/tests/controller_menu_accessibility_validation.gd @@ -13,6 +13,9 @@ const TitleConfirmationScene = preload( const MailPageType = preload("res://ui/mail_page.gd") const LogbookPageType = preload("res://ui/logbook_page.gd") const ProfilePageType = preload("res://ui/profile_page.gd") +const VoiceProfilesType = preload( + "res://player/animalese_voice_profiles.gd" +) const PlayerMenuScene = preload("res://ui/player_menu.tscn") const PlayerMenuType = preload("res://ui/player_menu.gd") const BagItemSpriteScene = preload( @@ -42,6 +45,7 @@ func _run() -> void: await _validate_data_settings_navigation() await _validate_mail_navigation() await _validate_profile_confirmation_focus() + await _validate_profile_voice_navigation() await _validate_inventory_tab_zone_transitions() await _validate_player_menu_nested_controller_back() await _validate_confirmation_dialog_navigation() @@ -354,6 +358,138 @@ func _validate_profile_confirmation_focus() -> void: await process_frame +func _validate_profile_voice_navigation() -> void: + var page := ProfilePageType.new() as Control + page.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) + root.add_child(page) + await process_frame + page.call("activate") + page.call("set_interactive", true) + page.call("_select_category", "voice") + await process_frame + page.set( + "_controller_zone", + ProfilePageType.ControllerZone.OPTIONS, + ) + page.set("_controller_option_depth", 0) + page.call("_apply_controller_zone_focus") + page.call("_focus_controller_zone") + await process_frame + var sample_grid := page.find_child( + "VoiceSampleSetGrid", true, false + ) as GridContainer + var pitch_grid := page.find_child( + "VoicePitchGrid", true, false + ) as GridContainer + var speed_grid := page.find_child( + "VoiceSpeedGrid", true, false + ) as GridContainer + var call_grid := page.find_child( + "VoiceCallGrid", true, false + ) as GridContainer + _expect( + is_instance_valid(sample_grid) + and is_instance_valid(pitch_grid) + and is_instance_valid(speed_grid) + and is_instance_valid(call_grid), + "The voice page is missing a settings section.", + ) + if ( + not is_instance_valid(sample_grid) + or not is_instance_valid(pitch_grid) + or not is_instance_valid(speed_grid) + or not is_instance_valid(call_grid) + ): + page.queue_free() + await process_frame + return + var sample_buttons: Array[Control] = [] + for item: Variant in page.call("_controls_under", sample_grid): + sample_buttons.append(item as Control) + _expect( + sample_buttons.size() == 3, + "The voice-set row must expose kat, robot, and kim.", + ) + if sample_buttons.size() != 3: + page.queue_free() + await process_frame + return + var kat_button := sample_grid.get_node("VoiceSet_kat") as Button + var robot_button := sample_grid.get_node("VoiceSet_robot") as Button + var kim_button := sample_grid.get_node("VoiceSet_kim") as Button + _expect(kat_button.text == "kat", "The default voice set is not labeled kat.") + _expect(robot_button.text == "robot", "The tone voice set is not labeled robot.") + _expect(kim_button.text == "kim", "The kim voice set is not labeled kim.") + _expect(kat_button.button_pressed, "The kat voice set is not selected by default.") + var option_controls: Array[Control] = [] + var option_groups: Array = page.call("_controller_option_groups") + for item: Variant in option_groups[0]: + option_controls.append(item as Control) + _expect( + option_controls.size() + == ( + VoiceProfilesType.SAMPLE_SET_OPTIONS.size() + + VoiceProfilesType.OPTIONS.size() + + VoiceProfilesType.SPEED_OPTIONS.size() + + VoiceProfilesType.CALL_OPTIONS.size() + ), + "The controller voice zone does not contain every voice setting.", + ) + _assert_directionally_reachable(kat_button, option_controls) + var kat_down := kat_button.get_node_or_null( + kat_button.focus_neighbor_bottom + ) as Control + _expect( + kat_down != null and pitch_grid.is_ancestor_of(kat_down), + "Down from the voice-set row does not enter the pitch row.", + ) + if OS.has_environment("NETFISHING_PROFILE_VOICE_CAPTURE"): + await RenderingServer.frame_post_draw + var capture := root.get_viewport().get_texture().get_image() + _expect( + capture.save_png(OS.get_environment( + "NETFISHING_PROFILE_VOICE_CAPTURE" + )) == OK, + "The profile voice-page capture could not be saved.", + ) + robot_button.grab_focus() + robot_button.button_pressed = true + robot_button.pressed.emit() + await process_frame + _expect( + root.gui_get_focus_owner() == robot_button, + "Selecting robot moved controller focus out of the voice-set row.", + ) + _expect( + str(page.get("_draft_sample_set_id")) == "robot", + "Selecting robot did not update the profile draft.", + ) + kim_button.grab_focus() + kim_button.button_pressed = true + kim_button.pressed.emit() + await process_frame + _expect( + root.gui_get_focus_owner() == kim_button, + "Selecting kim moved controller focus out of the voice-set row.", + ) + _expect( + str(page.get("_draft_sample_set_id")) == "kim", + "Selecting kim did not update the profile draft.", + ) + var category_controls: Array[Control] = [] + for item: Variant in page.call( + "_controls_under", page.get("_category_list") + ): + category_controls.append(item as Control) + for category_control: Control in category_controls: + _expect( + category_control.focus_mode == Control.FOCUS_NONE, + "The voice options zone leaked focus into profile categories.", + ) + page.queue_free() + await process_frame + + func _validate_player_menu_nested_controller_back() -> void: var menu := PlayerMenuScene.instantiate() as Control root.add_child(menu) diff --git a/tests/profile_multiplayer_validation.gd b/tests/profile_multiplayer_validation.gd index bc969e2..fc25665 100644 --- a/tests/profile_multiplayer_validation.gd +++ b/tests/profile_multiplayer_validation.gd @@ -30,6 +30,14 @@ func _run_host() -> void: for _frame: int in 4: await physics_frame assert(session.set_host_open(true)) + var chat_service := main.get_node( + "%NetworkChatService" + ) as NetworkChatService + var voice_messages: Array[Dictionary] = [] + chat_service.message_received.connect(func(message: Dictionary) -> void: + if str(message.get("body", "")) == "voice profile sync": + voice_messages.append(message) + ) var remote_peer_id: int = await _wait_for_remote_peer(session) assert(remote_peer_id > 1) var record := session.get_peer_record(remote_peer_id) @@ -50,6 +58,15 @@ func _run_host() -> void: assert(avatar != null) assert(avatar.appearance_snapshot == changed) assert(record.display_name != "NetworkProfileService") + var voice_message_deadline: int = Time.get_ticks_msec() + 8000 + while ( + Time.get_ticks_msec() < voice_message_deadline + and voice_messages.is_empty() + ): + await process_frame + assert(not voice_messages.is_empty()) + assert(str(voice_messages[0].get("voice_id", "")) == "deep") + assert(str(voice_messages[0].get("sample_set_id", "")) == "kim") var disconnect_deadline: int = Time.get_ticks_msec() + 8000 while ( Time.get_ticks_msec() < disconnect_deadline @@ -95,9 +112,10 @@ func _run_client() -> void: service.get_persisted_name(), changed, true, - service.get_persisted_voice_id(), + "deep", service.get_persisted_speech_speed_id(), service.get_persisted_call_id(), + "kim", )) var apply_deadline: int = Time.get_ticks_msec() + 8000 while Time.get_ticks_msec() < apply_deadline and apply_results.is_empty(): @@ -105,8 +123,35 @@ func _run_client() -> void: assert(not apply_results.is_empty()) assert(bool(apply_results[0][0])) assert(service.get_persisted_appearance() == changed) + assert(service.get_persisted_voice_id() == "deep") + assert(service.get_persisted_sample_set_id() == "kim") assert(Dictionary(session.get("_local_appearance_snapshot")) == changed) - await create_timer(0.75).timeout + var player := main.get_node("%PlayerSpawnService").get_local_player() as Player + assert(player.get_animalese_voice_id() == "deep") + assert(player.get_animalese_sample_set_id() == "kim") + var chat_service := main.get_node( + "%NetworkChatService" + ) as NetworkChatService + var local_confirmations: Array[Dictionary] = [] + chat_service.local_message_confirmed.connect( + func(message: Dictionary) -> void: + if str(message.get("body", "")) == "voice profile sync": + local_confirmations.append(message) + ) + assert(chat_service.send_local_message( + "voice profile sync", + service.get_persisted_voice_id(), + service.get_persisted_sample_set_id(), + )) + var confirmation_deadline: int = Time.get_ticks_msec() + 8000 + while ( + Time.get_ticks_msec() < confirmation_deadline + and local_confirmations.is_empty() + ): + await process_frame + assert(not local_confirmations.is_empty()) + assert(str(local_confirmations[0].get("voice_id", "")) == "deep") + assert(str(local_confirmations[0].get("sample_set_id", "")) == "kim") print("Profile multiplayer client validation: PASS") await _session_cleanup(main, session) diff --git a/tests/title_credits_validation.gd b/tests/title_credits_validation.gd index 7e50f89..d1e4c8c 100644 --- a/tests/title_credits_validation.gd +++ b/tests/title_credits_validation.gd @@ -154,6 +154,9 @@ func _run() -> void: var creative_credits := credits_page.get_node( "Paper/Margin/Layout/Columns/CreativeCredits" ) as VBoxContainer + var audio_credits := credits_page.get_node( + "Paper/Margin/Layout/Columns/AdditionalCredits/AudioCredits" + ) as Label _expect(voyager_name.text == "Voyager", "in-game credits use Voyager") _expect( endeavour_name.text == "Endeavour", @@ -175,6 +178,14 @@ func _run() -> void: "shop icon" in tekgator_credit.text.to_lower(), "in-game credits describe Tekgator's shop icon artwork", ) + _expect( + "kat • animalese voice sample" in audio_credits.text, + "in-game credits name kat's animalese voice contribution", + ) + _expect( + "kim • animalese voice sample" in audio_credits.text, + "in-game credits name kim's animalese voice contribution", + ) _expect( Rect2(Vector2.ZERO, creative_credits.size).encloses( Rect2(tekgator_credit.position, tekgator_credit.size) diff --git a/ui/animalese_voice.gd b/ui/animalese_voice.gd index 9a75434..4562f94 100644 --- a/ui/animalese_voice.gd +++ b/ui/animalese_voice.gd @@ -1,8 +1,7 @@ class_name AnimaleseVoice extends Node -const SAMPLE_DIRECTORY := "res://sound/dialogue/animalese/placeholder" -const SUPPORTED_CHARACTERS := "abcdefghijklmnopqrstuvwxyz" +const SUPPORTED_CHARACTERS := "abcdefghijklmnopqrstuvwxyz0123456789" const DEFAULT_CHARACTERS_PER_SECOND: float = 28.0 const POLYPHONY: int = 8 const VoiceProfilesType = preload( @@ -13,7 +12,7 @@ const TypewriterRevealType = preload("res://ui/typewriter_reveal.gd") var base_pitch: float = 1.0 var volume_db: float = -13.0 -var _samples: Dictionary[String, AudioStream] = {} +var _sample_sets: Dictionary[String, Dictionary] = {} var _player: AudioStreamPlayer var _playback: AudioStreamPlaybackPolyphonic @@ -33,12 +32,20 @@ func _ready() -> void: ) +func _exit_tree() -> void: + if _player != null: + _player.stop() + _player.stream = null + _playback = null + + func speak_text( tween_owner: Node, text: String, voice_key: String, voice_profile_id: String = VoiceProfilesType.DEFAULT_ID, characters_per_second: float = -1.0, + sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID, ) -> Tween: var speech_tween := tween_owner.create_tween() var resolved_characters_per_second := ( @@ -53,6 +60,9 @@ func speak_text( var voice_pitch := ( base_pitch * VoiceProfilesType.pitch_for(voice_profile_id) ) + var resolved_sample_set_id := ( + VoiceProfilesType.sanitized_sample_set_id(sample_set_id) + ) for character_index: int in range(text.length()): speech_tween.tween_interval(character_seconds) speech_tween.tween_callback( @@ -62,23 +72,33 @@ func speak_text( text, voice_key, voice_pitch, + resolved_sample_set_id, ) ) return speech_tween func _load_samples() -> void: - for character_index: int in range(SUPPORTED_CHARACTERS.length()): - var character := SUPPORTED_CHARACTERS.substr(character_index, 1) - _load_sample(character) - _load_sample("fallback") + for option: Dictionary in VoiceProfilesType.SAMPLE_SET_OPTIONS: + var sample_set_id := str(option.get("id", "")) + var sample_directory := str(option.get("directory", "")) + var samples: Dictionary[String, AudioStream] = {} + for character_index: int in range(SUPPORTED_CHARACTERS.length()): + var character := SUPPORTED_CHARACTERS.substr(character_index, 1) + var sample := _load_sample(sample_directory, character) + if sample != null: + samples[character] = sample + var fallback := _load_sample(sample_directory, "fallback") + if fallback != null: + samples["fallback"] = fallback + _sample_sets[sample_set_id] = samples -func _load_sample(sample_name: String) -> void: - var sample_path := "%s/%s.wav" % [SAMPLE_DIRECTORY, sample_name] - var sample := load(sample_path) as AudioStream - if sample != null: - _samples[sample_name] = sample +func _load_sample(sample_directory: String, sample_name: String) -> AudioStream: + var sample_path := "%s/%s.wav" % [sample_directory, sample_name] + if not ResourceLoader.exists(sample_path, "AudioStreamWAV"): + return null + return load(sample_path) as AudioStream func _play_character( @@ -87,16 +107,17 @@ func _play_character( full_text: String, voice_key: String, voice_pitch: float, + sample_set_id: String, ) -> void: if _playback == null or character.strip_edges().is_empty(): return var normalized := character.to_lower() if normalized in [".", ",", "!", "?", ":", ";", "-", "_"]: return - var sample_name := ( - normalized if SUPPORTED_CHARACTERS.contains(normalized) else "fallback" - ) - var sample: AudioStream = _samples.get(sample_name) + var samples: Dictionary = _sample_sets.get(sample_set_id, {}) + var sample := samples.get(normalized) as AudioStream + if sample == null: + sample = samples.get("fallback") as AudioStream if sample == null: return var speaker_variation := ( diff --git a/ui/chat_ui.gd b/ui/chat_ui.gd index c4b5264..8c04775 100644 --- a/ui/chat_ui.gd +++ b/ui/chat_ui.gd @@ -836,7 +836,11 @@ func _send() -> void: _send_pending = true _pending_send_body = NetworkChatProtocol.sanitize_body(body) _entry.editable = false - if not _service.send_local_message(body): + if not _service.send_local_message( + body, + _player.get_animalese_voice_id(), + _player.get_animalese_sample_set_id(), + ): _send_pending = false _pending_send_body = "" _entry.editable = true @@ -939,6 +943,12 @@ func _on_message(message: Dictionary) -> void: peer_id, str(message["body"]), str(message.get("sender_fingerprint", "")), + VoiceProfilesType.sanitized_id(str(message.get( + "voice_id", VoiceProfilesType.DEFAULT_ID + ))), + VoiceProfilesType.sanitized_sample_set_id(str(message.get( + "sample_set_id", VoiceProfilesType.DEFAULT_SAMPLE_SET_ID + ))), ) @@ -952,6 +962,8 @@ func _show_speech_bubble( peer_id: int, body: String, fingerprint: String, + requested_voice_profile_id: String = "", + requested_sample_set_id: String = "", ) -> void: _on_peer_removed(peer_id) var bubble := PanelContainer.new() @@ -978,16 +990,31 @@ func _show_speech_bubble( _speech_layer.add_child(bubble) var reveal_seconds := TypewriterRevealType.start(label) var voice_profile_id: String = VoiceProfilesType.DEFAULT_ID + var sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID var speaker_avatar := _spawn.get_avatar(peer_id) - if speaker_avatar != null: + if not requested_voice_profile_id.is_empty(): + voice_profile_id = VoiceProfilesType.sanitized_id( + requested_voice_profile_id + ) + elif speaker_avatar != null: voice_profile_id = VoiceProfilesType.sanitized_id( speaker_avatar.get_animalese_voice_id() ) + if not requested_sample_set_id.is_empty(): + sample_set_id = VoiceProfilesType.sanitized_sample_set_id( + requested_sample_set_id + ) + elif speaker_avatar != null: + sample_set_id = VoiceProfilesType.sanitized_sample_set_id( + speaker_avatar.get_animalese_sample_set_id() + ) _animalese_voice.speak_text( label, label.text, str(peer_id), voice_profile_id, + -1.0, + sample_set_id, ) _speech[peer_id] = { "bubble": bubble, diff --git a/ui/profile_page.gd b/ui/profile_page.gd index e8d7257..2a19633 100644 --- a/ui/profile_page.gd +++ b/ui/profile_page.gd @@ -47,6 +47,8 @@ var _draft_speech_speed_id: String = VoiceProfilesType.DEFAULT_SPEED_ID var _persisted_speech_speed_id: String = VoiceProfilesType.DEFAULT_SPEED_ID var _draft_call_id: String = VoiceProfilesType.DEFAULT_CALL_ID var _persisted_call_id: String = VoiceProfilesType.DEFAULT_CALL_ID +var _draft_sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID +var _persisted_sample_set_id: String = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID var _category_id: String = "species" var _dirty: bool = false var _allow_duplicate: bool = false @@ -848,7 +850,10 @@ func _category_label(category_id: String) -> String: func _build_voice_options() -> void: var description := Label.new() - description.text = "Choose how your character sounds in chat." + description.text = ( + "Choose how your character sounds. " + + "Playback speed affects this device only." + ) description.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART description.size_flags_horizontal = Control.SIZE_EXPAND_FILL description.add_theme_font_size_override("font_size", 12) @@ -856,48 +861,97 @@ func _build_voice_options() -> void: "font_color", UtilityPageStyle.OCEAN_TEXT_SECONDARY ) _option_list.add_child(description) + var settings_grid := GridContainer.new() + settings_grid.name = "VoiceSettingsGrid" + settings_grid.columns = 2 + settings_grid.add_theme_constant_override("h_separation", 10) + settings_grid.add_theme_constant_override("v_separation", 8) + settings_grid.size_flags_horizontal = Control.SIZE_EXPAND_FILL + _option_list.add_child(settings_grid) + var sample_set_title := Label.new() + sample_set_title.text = "voice set" + sample_set_title.custom_minimum_size.x = 92.0 + sample_set_title.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + sample_set_title.add_theme_font_size_override("font_size", 13) + sample_set_title.add_theme_color_override( + "font_color", UtilityPageStyle.OCEAN_TEXT_PRIMARY + ) + settings_grid.add_child(sample_set_title) + var sample_set_grid := GridContainer.new() + sample_set_grid.name = "VoiceSampleSetGrid" + sample_set_grid.columns = mini( + 3, + VoiceProfilesType.SAMPLE_SET_OPTIONS.size(), + ) + sample_set_grid.add_theme_constant_override("h_separation", 8) + sample_set_grid.add_theme_constant_override("v_separation", 4) + sample_set_grid.size_flags_horizontal = Control.SIZE_EXPAND_FILL + settings_grid.add_child(sample_set_grid) + var sample_set_group := ButtonGroup.new() + sample_set_group.allow_unpress = false + for option: Dictionary in VoiceProfilesType.SAMPLE_SET_OPTIONS: + var sample_set_id := str(option.get("id", "")) + var sample_set_button := Button.new() + sample_set_button.name = "VoiceSet_%s" % sample_set_id + sample_set_button.text = str(option.get("label", sample_set_id)) + sample_set_button.toggle_mode = true + sample_set_button.button_group = sample_set_group + sample_set_button.custom_minimum_size = Vector2(108.0, 32.0) + sample_set_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL + sample_set_button.button_pressed = ( + _draft_sample_set_id == sample_set_id + ) + sample_set_button.pressed.connect( + _select_sample_set_option.bind(sample_set_id) + ) + UtilityPageStyle.apply_compact_ocean_button(sample_set_button) + sample_set_grid.add_child(sample_set_button) + var pitch_title := Label.new() + pitch_title.text = "pitch" + pitch_title.vertical_alignment = VERTICAL_ALIGNMENT_CENTER + pitch_title.add_theme_font_size_override("font_size", 13) + pitch_title.add_theme_color_override( + "font_color", UtilityPageStyle.OCEAN_TEXT_PRIMARY + ) + settings_grid.add_child(pitch_title) var grid := GridContainer.new() + grid.name = "VoicePitchGrid" grid.columns = 3 grid.add_theme_constant_override("h_separation", 6) grid.add_theme_constant_override("v_separation", 4) grid.size_flags_horizontal = Control.SIZE_EXPAND_FILL - _option_list.add_child(grid) + settings_grid.add_child(grid) + var pitch_group := ButtonGroup.new() + pitch_group.allow_unpress = false for option: Dictionary in VoiceProfilesType.OPTIONS: var option_id := str(option.get("id", "")) var button := Button.new() button.text = str(option.get("label", option_id)) button.toggle_mode = true + button.button_group = pitch_group button.custom_minimum_size = Vector2(108.0, 32.0) button.size_flags_horizontal = Control.SIZE_EXPAND_FILL button.button_pressed = _draft_voice_id == option_id button.pressed.connect(_select_voice_option.bind(option_id)) UtilityPageStyle.apply_compact_ocean_button(button) grid.add_child(button) - var divider := HSeparator.new() - divider.custom_minimum_size.y = 2.0 - _option_list.add_child(divider) var speed_title := Label.new() - speed_title.text = "speech speed" + speed_title.text = "playback speed" + speed_title.vertical_alignment = VERTICAL_ALIGNMENT_CENTER speed_title.add_theme_font_size_override("font_size", 13) speed_title.add_theme_color_override( "font_color", UtilityPageStyle.OCEAN_TEXT_PRIMARY ) - _option_list.add_child(speed_title) - var speed_description := Label.new() - speed_description.text = "Controls chat speech on this device only." - speed_description.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART - speed_description.size_flags_horizontal = Control.SIZE_EXPAND_FILL - speed_description.add_theme_font_size_override("font_size", 12) - speed_description.add_theme_color_override( - "font_color", UtilityPageStyle.OCEAN_TEXT_SECONDARY - ) - _option_list.add_child(speed_description) + settings_grid.add_child(speed_title) var speed_grid := GridContainer.new() + speed_grid.name = "VoiceSpeedGrid" speed_grid.columns = 3 speed_grid.add_theme_constant_override("h_separation", 6) speed_grid.add_theme_constant_override("v_separation", 4) speed_grid.size_flags_horizontal = Control.SIZE_EXPAND_FILL - _option_list.add_child(speed_grid) + settings_grid.add_child(speed_grid) + var speed_group := ButtonGroup.new() + speed_group.allow_unpress = false for option: Dictionary in VoiceProfilesType.SPEED_OPTIONS: var speed_id := str(option.get("id", "")) var speed_button := Button.new() @@ -906,6 +960,7 @@ func _build_voice_options() -> void: float(option.get("characters_per_second", 28.0)) ) speed_button.toggle_mode = true + speed_button.button_group = speed_group speed_button.custom_minimum_size = Vector2(108.0, 32.0) speed_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL speed_button.button_pressed = _draft_speech_speed_id == speed_id @@ -914,35 +969,29 @@ func _build_voice_options() -> void: ) UtilityPageStyle.apply_compact_ocean_button(speed_button) speed_grid.add_child(speed_button) - var call_divider := HSeparator.new() - call_divider.custom_minimum_size.y = 2.0 - _option_list.add_child(call_divider) var call_title := Label.new() - call_title.text = "call" + call_title.text = "call (G)" + call_title.vertical_alignment = VERTICAL_ALIGNMENT_CENTER call_title.add_theme_font_size_override("font_size", 13) call_title.add_theme_color_override( "font_color", UtilityPageStyle.OCEAN_TEXT_PRIMARY ) - _option_list.add_child(call_title) - var call_description := Label.new() - call_description.text = "Press G to make this sound." - call_description.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART - call_description.size_flags_horizontal = Control.SIZE_EXPAND_FILL - call_description.add_theme_font_size_override("font_size", 12) - call_description.add_theme_color_override( - "font_color", UtilityPageStyle.OCEAN_TEXT_SECONDARY - ) - _option_list.add_child(call_description) + settings_grid.add_child(call_title) var call_grid := GridContainer.new() + call_grid.name = "VoiceCallGrid" call_grid.columns = 2 call_grid.add_theme_constant_override("h_separation", 8) call_grid.add_theme_constant_override("v_separation", 8) - _option_list.add_child(call_grid) + call_grid.size_flags_horizontal = Control.SIZE_EXPAND_FILL + settings_grid.add_child(call_grid) + var call_group := ButtonGroup.new() + call_group.allow_unpress = false for option: Dictionary in VoiceProfilesType.CALL_OPTIONS: var call_id := str(option.get("id", "")) var call_button := Button.new() call_button.text = str(option.get("label", call_id)) call_button.toggle_mode = true + call_button.button_group = call_group call_button.custom_minimum_size = Vector2(108.0, 32.0) call_button.size_flags_horizontal = Control.SIZE_EXPAND_FILL call_button.button_pressed = _draft_call_id == call_id @@ -951,12 +1000,20 @@ func _build_voice_options() -> void: call_grid.add_child(call_button) +func _select_sample_set_option(sample_set_id: String) -> void: + if not VoiceProfilesType.is_valid_sample_set(sample_set_id): + return + _draft_sample_set_id = sample_set_id + _dirty = _draft_differs() + _refresh_actions() + _play_voice_preview() + + func _select_voice_option(voice_id: String) -> void: if not VoiceProfilesType.is_valid(voice_id): return _draft_voice_id = voice_id _dirty = _draft_differs() - _refresh_options() _refresh_actions() _play_voice_preview() @@ -966,7 +1023,6 @@ func _select_speech_speed_option(speed_id: String) -> void: return _draft_speech_speed_id = speed_id _dirty = _draft_differs() - _refresh_options() _refresh_actions() _play_voice_preview() @@ -976,7 +1032,6 @@ func _select_call_option(call_id: String) -> void: return _draft_call_id = call_id _dirty = _draft_differs() - _refresh_options() _refresh_actions() @@ -993,6 +1048,7 @@ func _play_voice_preview() -> void: "profile-preview", _draft_voice_id, VoiceProfilesType.speed_for(_draft_speech_speed_id), + _draft_sample_set_id, ) @@ -2025,6 +2081,7 @@ func _apply() -> void: _draft_voice_id, _draft_speech_speed_id, _draft_call_id, + _draft_sample_set_id, ) @@ -2045,11 +2102,13 @@ func _load_persisted() -> void: _service.get_persisted_speech_speed_id() ) _persisted_call_id = _service.get_persisted_call_id() + _persisted_sample_set_id = _service.get_persisted_sample_set_id() _draft_name = _persisted_name _draft_appearance = _persisted_appearance.duplicate(true) _draft_voice_id = _persisted_voice_id _draft_speech_speed_id = _persisted_speech_speed_id _draft_call_id = _persisted_call_id + _draft_sample_set_id = _persisted_sample_set_id TypewriterRevealType.set_characters_per_second( VoiceProfilesType.speed_for(_persisted_speech_speed_id) ) @@ -2101,6 +2160,7 @@ func _confirm_pending_action() -> void: _draft_voice_id = VoiceProfilesType.DEFAULT_ID _draft_speech_speed_id = VoiceProfilesType.DEFAULT_SPEED_ID _draft_call_id = VoiceProfilesType.DEFAULT_CALL_ID + _draft_sample_set_id = VoiceProfilesType.DEFAULT_SAMPLE_SET_ID _preview.apply_appearance_profile(_draft_appearance) _queue_draft_appearance_preview() _dirty = _draft_differs() @@ -2135,6 +2195,7 @@ func _draft_differs() -> bool: or _draft_voice_id != _persisted_voice_id or _draft_speech_speed_id != _persisted_speech_speed_id or _draft_call_id != _persisted_call_id + or _draft_sample_set_id != _persisted_sample_set_id ) diff --git a/ui/title_credits_page.tscn b/ui/title_credits_page.tscn index a667465..c81dc25 100644 --- a/ui/title_credits_page.tscn +++ b/ui/title_credits_page.tscn @@ -143,7 +143,7 @@ text = "additional audio" layout_mode = 2 theme_override_colors/font_color = Color(0.624, 0.812, 0.824, 1) theme_override_font_sizes/font_size = 15 -text = "tosha73 • fishing reel sounds\nkkenny101 • ocean ambience\nqubodup • water impact\nAyton • rain ambience\nivolipa • dog bark\nChristyboy100 • cat meow" +text = "kat • animalese voice sample\nkim • animalese voice sample\ntosha73 • fishing reel sounds\nkkenny101 • ocean ambience\nqubodup • water impact\nAyton • rain ambience\nivolipa • dog bark\nChristyboy100 • cat meow" [node name="TechnologySpacer" type="Control" parent="Paper/Margin/Layout/Columns/AdditionalCredits"] custom_minimum_size = Vector2(0, 9)