From 51c7cca0bfcbb15bb6ed07b7143f7c3bc241360b Mon Sep 17 00:00:00 2001 From: pietru Date: Mon, 11 Nov 2024 15:17:55 +0100 Subject: [PATCH] first commit --- .gitignore | 17 +++ MicRecord.gd | 239 +++++++++++++++++++++++++++++ MicRecord.tscn | 301 +++++++++++++++++++++++++++++++++++++ README.md | 0 default_bus_layout.tres | 26 ++++ icon.webp | Bin 0 -> 714 bytes icon.webp.import | 34 +++++ project.godot | 35 +++++ screenshots/.gdignore | 0 screenshots/mic_record.png | Bin 0 -> 61732 bytes 10 files changed, 652 insertions(+) create mode 100644 .gitignore create mode 100644 MicRecord.gd create mode 100644 MicRecord.tscn create mode 100644 README.md create mode 100644 default_bus_layout.tres create mode 100644 icon.webp create mode 100644 icon.webp.import create mode 100644 project.godot create mode 100644 screenshots/.gdignore create mode 100644 screenshots/mic_record.png diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..80d224e --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +records/ + +# Godot 4+ specific ignores +.godot/ + +# Godot-specific ignores +.import/ +export.cfg +export_presets.cfg + +# Imported translations (automatically generated from CSV files) +*.translation + +# Mono-specific ignores +.mono/ +data_*/ +mono_crash.*.json \ No newline at end of file diff --git a/MicRecord.gd b/MicRecord.gd new file mode 100644 index 0000000..8c9c603 --- /dev/null +++ b/MicRecord.gd @@ -0,0 +1,239 @@ +extends Control + +var effect: AudioEffectRecord +var recording: AudioStreamWAV + +var stereo := true +var mix_rate := 44100 # This is the default mix rate on recordings. +var format := AudioStreamWAV.FORMAT_16_BITS # This is the default format on recordings. + +# 2147483647 +var noise_max_lvl := 2000000#10000000 + +func _ready() -> void: + var idx := AudioServer.get_bus_index("Record") + effect = AudioServer.get_bus_effect(idx, 2) + %Controls.visible=false + + +#region Record stuff +func _on_load_words_pressed() -> void: + if not FileAccess.file_exists(%SavePath.text.path_join("list.json")): + return + var txt = FileAccess.get_file_as_string(%SavePath.text.path_join("list.json")) + words=JSON.parse_string(txt) + for t in words: + %WordList.add_item(t) + +func save_words(): + var fl = FileAccess.open(%SavePath.text.path_join("list.json"),FileAccess.WRITE) + var txt = JSON.stringify(words,"\t") + fl.store_string(txt) + fl.close() + +func _process(delta: float) -> void: + if Input.is_action_just_pressed("ui_right"): + if last_item_index!=null: + run_swap_code(last_item_index+1) + if Input.is_action_just_pressed("ui_left"): + if last_item_index!=null: + run_swap_code(last_item_index-1) + +func run_swap_code(new_index): + if effect.is_recording_active(): + start_new_record() + await get_tree().process_frame + _on_save_button_pressed() + if words.size()<=new_index: + new_index=0 + if 0>new_index: + new_index=words.size()-1 + %WordList.select(new_index) + %WordList.ensure_current_is_visible() + _on_item_list_item_selected(new_index) + +var words :Array= [] +func _on_add_word_btn_pressed() -> void: + if (%SoundName.text=="" or words.has(%SoundName.text)): + return + %WordList.add_item(%SoundName.text) + words.append(%SoundName.text) + %SoundName.text="" + save_words() + +var last_item_index :int = -1 +var last_item_text := "" +var last_item_path := "" +func _on_item_list_item_selected(index: int) -> void: + %Controls.visible=true + last_item_text=%WordList.get_item_text(index) + %WordName.text=last_item_text + last_item_index=index + last_item_path=%SavePath.text + last_item_path=last_item_path.path_join(last_item_text+".wav") + if FileAccess.file_exists(last_item_path): + recording=load(last_item_path) + +func _on_record_button_pressed() -> void: + if effect.is_recording_active(): + recording = effect.get_recording() + %PlayButton.disabled = false + %SaveButton.disabled = false + effect.set_recording_active(false) + recording.set_mix_rate(mix_rate) + recording.set_format(format) + recording.set_stereo(stereo) + remove_noise() + %RecordButton.text = "Record" + %Status.text = "" + else: + %PlayButton.disabled = true + %SaveButton.disabled = true + effect.set_recording_active(true) + %RecordButton.text = "Stop" + %Status.text = "Status: Recording..." + +func start_new_record(): + recording = effect.get_recording() + %PlayButton.disabled = false + %SaveButton.disabled = false + if recording!=null: + effect.set_recording_active(false) + recording.set_mix_rate(mix_rate) + recording.set_format(format) + recording.set_stereo(stereo) + remove_noise() + await get_tree().process_frame + effect.set_recording_active(true) + +func remove_noise(): + return + #var data := recording.data.to_int32_array() + #var new_data := PackedInt32Array() + # + #var offset = 0 + #var uc + #for i in data: + #if i < noise_max_lvl: + #i=0 + #new_data.append(i) + #recording.data=new_data.to_byte_array() + + +func _on_play_button_pressed() -> void: + print_rich("\n[b]Playing recording:[/b] %s" % recording) + print_rich("[b]Format:[/b] %s" % ("8-bit uncompressed" if recording.format == 0 else "16-bit uncompressed" if recording.format == 1 else "IMA ADPCM compressed")) + print_rich("[b]Mix rate:[/b] %s Hz" % recording.mix_rate) + print_rich("[b]Stereo:[/b] %s" % ("Yes" if recording.stereo else "No")) + var data := recording.get_data() + print_rich("[b]Size:[/b] %s bytes" % data.size()) + $AudioStreamPlayer.stream = recording + $AudioStreamPlayer.play() + + +func _on_save_button_pressed() -> void: + if recording==null: + return + if not DirAccess.dir_exists_absolute(%SavePath.text): + DirAccess.make_dir_absolute(%SavePath.text) + if FileAccess.file_exists(last_item_path): + DirAccess.remove_absolute(last_item_path) + recording.save_to_wav(last_item_path) + %Status.text = "Status: Saved WAV file to: %s" % [last_item_text+".wav"] + + +func _on_delete_button_pressed() -> void: + if (last_item_index==null): + return + if DirAccess.dir_exists_absolute(%SavePath.text) and FileAccess.file_exists(last_item_path): + DirAccess.remove_absolute(last_item_path) + words.erase(last_item_text) + last_item_index=-1 + last_item_text="" + last_item_path="" + %Controls.visible=false + save_words() +#endregion + + +#region PlanText stuff +func _on_load_text_btn_pressed() -> void: + if not FileAccess.file_exists(%WordsTXTPath.text): + return + var txt = FileAccess.get_file_as_string(%WordsTXTPath.text) + %TextWordsEdit.text=txt + +func _on_add_words_btn_pressed() -> void: + var txt :String= %TextWordsEdit.text + txt=txt.replace("\n"," ").replace("\t"," ") + var wrds = txt.split(" ",false) + for wrd in wrds: + if !words.has(wrd): + %WordList.add_item(wrd) + words.append(wrd) + +var play = false +func _on_play_text_btn_pressed() -> void: + play=!play + + if play: + var txt :String= %TextWordsEdit.text + txt=txt.replace("\n"," ").replace("\t"," ") + var wrds = txt.split(" ",false) + for wrd in wrds: + var path = %SavePath.text.path_join(wrd+".wav") + if FileAccess.file_exists(path): + var stream = load(path) + + $AudioStreamPlayer2.stream = stream + $AudioStreamPlayer2.play() + await $AudioStreamPlayer2.finished + play=false + else: + $AudioStreamPlayer2.stop() +#endregion + + + + + +#region Aditional stuff +func _on_mix_rate_option_button_item_selected(index: int) -> void: + match index: + 0: + mix_rate = 11025 + 1: + mix_rate = 16000 + 2: + mix_rate = 22050 + 3: + mix_rate = 32000 + 4: + mix_rate = 44100 + 5: + mix_rate = 48000 + if recording != null: + recording.set_mix_rate(mix_rate) + + +func _on_format_option_button_item_selected(index: int) -> void: + match index: + 0: + format = AudioStreamWAV.FORMAT_8_BITS + 1: + format = AudioStreamWAV.FORMAT_16_BITS + 2: + format = AudioStreamWAV.FORMAT_IMA_ADPCM + if recording != null: + recording.set_format(format) + + +func _on_stereo_check_button_toggled(button_pressed: bool) -> void: + stereo = button_pressed + if recording != null: + recording.set_stereo(stereo) + + +func _on_open_user_folder_button_pressed() -> void: + OS.shell_open(ProjectSettings.globalize_path(%SavePath.text)) +#endregion diff --git a/MicRecord.tscn b/MicRecord.tscn new file mode 100644 index 0000000..476a93d --- /dev/null +++ b/MicRecord.tscn @@ -0,0 +1,301 @@ +[gd_scene load_steps=4 format=3 uid="uid://dvjlkpjvjxn0h"] + +[ext_resource type="Script" path="res://MicRecord.gd" id="1"] + +[sub_resource type="AudioStreamMicrophone" id="1"] + +[sub_resource type="LabelSettings" id="LabelSettings_7vfcs"] +font_size = 64 + +[node name="Scene" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1") + +[node name="AudioStreamRecord" type="AudioStreamPlayer" parent="."] +stream = SubResource("1") +autoplay = true +bus = &"Record" + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] + +[node name="AudioStreamPlayer2" type="AudioStreamPlayer" parent="."] + +[node name="TabContainer" type="TabContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +current_tab = 1 + +[node name="Record" type="VBoxContainer" parent="TabContainer"] +visible = false +layout_mode = 2 +metadata/_tab_index = 0 + +[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Record"] +layout_mode = 2 + +[node name="Status" type="Label" parent="TabContainer/Record/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +horizontal_alignment = 1 + +[node name="VSeparator" type="VSeparator" parent="TabContainer/Record/HBoxContainer"] +self_modulate = Color(1, 1, 1, 0) +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 + +[node name="FormatLabel" type="Label" parent="TabContainer/Record/HBoxContainer"] +layout_mode = 2 +text = "Format:" + +[node name="FormatOptionButton" type="OptionButton" parent="TabContainer/Record/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +selected = 1 +item_count = 3 +popup/item_0/text = "8-bit Uncompressed" +popup/item_1/text = "16-bit Uncompressed" +popup/item_1/id = 1 +popup/item_2/text = "IMA ADPCM Compression" +popup/item_2/id = 2 + +[node name="VSeparator2" type="VSeparator" parent="TabContainer/Record/HBoxContainer"] +self_modulate = Color(1, 1, 1, 0) +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 + +[node name="MixRateLabel" type="Label" parent="TabContainer/Record/HBoxContainer"] +layout_mode = 2 +text = "Mix rate:" + +[node name="MixRateOptionButton" type="OptionButton" parent="TabContainer/Record/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +selected = 4 +item_count = 6 +popup/item_0/text = "11025 Hz" +popup/item_1/text = "16000 Hz" +popup/item_1/id = 1 +popup/item_2/text = "22050 Hz" +popup/item_2/id = 2 +popup/item_3/text = "32000 Hz" +popup/item_3/id = 3 +popup/item_4/text = "44100 Hz" +popup/item_4/id = 4 +popup/item_5/text = "48000 Hz" +popup/item_5/id = 5 + +[node name="VSeparator3" type="VSeparator" parent="TabContainer/Record/HBoxContainer"] +self_modulate = Color(1, 1, 1, 0) +custom_minimum_size = Vector2(20, 0) +layout_mode = 2 + +[node name="StereoLabel" type="Label" parent="TabContainer/Record/HBoxContainer"] +layout_mode = 2 +text = "Stereo:" + +[node name="StereoCheckButton" type="CheckButton" parent="TabContainer/Record/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +button_pressed = true + +[node name="HBoxContainer2" type="HBoxContainer" parent="TabContainer/Record"] +layout_mode = 2 + +[node name="Label" type="Label" parent="TabContainer/Record/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "World: " +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="SoundName" type="LineEdit" parent="TabContainer/Record/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +caret_blink = true + +[node name="AddWordBTN" type="Button" parent="TabContainer/Record/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Add Word" + +[node name="VSeparator" type="VSeparator" parent="TabContainer/Record/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="VSeparator2" type="VSeparator" parent="TabContainer/Record/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="LoadWords" type="Button" parent="TabContainer/Record/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Load Words" + +[node name="Label2" type="Label" parent="TabContainer/Record/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Save Folder Path: " +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="SavePath" type="LineEdit" parent="TabContainer/Record/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +text = "res://records" +caret_blink = true + +[node name="HBoxContainer3" type="HBoxContainer" parent="TabContainer/Record"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="WordList" type="ItemList" parent="TabContainer/Record/HBoxContainer3"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.5 + +[node name="Controls" type="VBoxContainer" parent="TabContainer/Record/HBoxContainer3"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 2.0 + +[node name="WordName" type="Label" parent="TabContainer/Record/HBoxContainer3/Controls"] +unique_name_in_owner = true +layout_mode = 2 +text = "<==" +label_settings = SubResource("LabelSettings_7vfcs") +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HSeparator" type="HSeparator" parent="TabContainer/Record/HBoxContainer3/Controls"] +self_modulate = Color(1, 1, 1, 0) +custom_minimum_size = Vector2(0, 40) +layout_mode = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="TabContainer/Record/HBoxContainer3/Controls"] +layout_mode = 2 +alignment = 1 + +[node name="RecordButton" type="Button" parent="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "Record" + +[node name="PlayButton" type="Button" parent="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +disabled = true +text = "Play" + +[node name="SaveButton" type="Button" parent="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +disabled = true +text = "Save" + +[node name="OpenUserFolderButton" type="Button" parent="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer"] +layout_mode = 2 +text = "Open User Folder" + +[node name="HSeparator2" type="HSeparator" parent="TabContainer/Record/HBoxContainer3/Controls"] +self_modulate = Color(1, 1, 1, 0) +custom_minimum_size = Vector2(0, 40) +layout_mode = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="TabContainer/Record/HBoxContainer3/Controls"] +layout_mode = 2 +alignment = 2 + +[node name="DeleteButton" type="Button" parent="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer2"] +layout_mode = 2 +text = "Delete" + +[node name="PlanText" type="VBoxContainer" parent="TabContainer"] +layout_mode = 2 +metadata/_tab_index = 1 + +[node name="HBoxContainer2" type="HBoxContainer" parent="TabContainer/PlanText"] +layout_mode = 2 + +[node name="VSeparator" type="VSeparator" parent="TabContainer/PlanText/HBoxContainer2"] +self_modulate = Color(1, 1, 1, 0) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="PlayTextBTN" type="Button" parent="TabContainer/PlanText/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Play Text" + +[node name="VSeparator2" type="VSeparator" parent="TabContainer/PlanText/HBoxContainer2"] +self_modulate = Color(1, 1, 1, 0) +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.7 + +[node name="AddWordsBTN" type="Button" parent="TabContainer/PlanText/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Add Words" + +[node name="LoadTextBTN" type="Button" parent="TabContainer/PlanText/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Load Text" + +[node name="Label2" type="Label" parent="TabContainer/PlanText/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Text File Path: " +horizontal_alignment = 2 +vertical_alignment = 1 + +[node name="WordsTXTPath" type="LineEdit" parent="TabContainer/PlanText/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 1.5 +text = "res://records/phrases.txt" +caret_blink = true + +[node name="VSeparator3" type="VSeparator" parent="TabContainer/PlanText/HBoxContainer2"] +self_modulate = Color(1, 1, 1, 0) +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer3" type="HBoxContainer" parent="TabContainer/PlanText"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="TextWordsEdit" type="TextEdit" parent="TabContainer/PlanText/HBoxContainer3"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Text to read load worlds" + +[connection signal="item_selected" from="TabContainer/Record/HBoxContainer/FormatOptionButton" to="." method="_on_format_option_button_item_selected"] +[connection signal="item_selected" from="TabContainer/Record/HBoxContainer/MixRateOptionButton" to="." method="_on_mix_rate_option_button_item_selected"] +[connection signal="toggled" from="TabContainer/Record/HBoxContainer/StereoCheckButton" to="." method="_on_stereo_check_button_toggled"] +[connection signal="pressed" from="TabContainer/Record/HBoxContainer2/AddWordBTN" to="." method="_on_add_word_btn_pressed"] +[connection signal="pressed" from="TabContainer/Record/HBoxContainer2/LoadWords" to="." method="_on_load_words_pressed"] +[connection signal="item_selected" from="TabContainer/Record/HBoxContainer3/WordList" to="." method="_on_item_list_item_selected"] +[connection signal="pressed" from="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer/RecordButton" to="." method="_on_record_button_pressed"] +[connection signal="pressed" from="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer/PlayButton" to="." method="_on_play_button_pressed"] +[connection signal="pressed" from="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer/SaveButton" to="." method="_on_save_button_pressed"] +[connection signal="pressed" from="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer/OpenUserFolderButton" to="." method="_on_open_user_folder_button_pressed"] +[connection signal="pressed" from="TabContainer/Record/HBoxContainer3/Controls/HBoxContainer2/DeleteButton" to="." method="_on_delete_button_pressed"] +[connection signal="pressed" from="TabContainer/PlanText/HBoxContainer2/PlayTextBTN" to="." method="_on_play_text_btn_pressed"] +[connection signal="pressed" from="TabContainer/PlanText/HBoxContainer2/AddWordsBTN" to="." method="_on_add_words_btn_pressed"] +[connection signal="pressed" from="TabContainer/PlanText/HBoxContainer2/LoadTextBTN" to="." method="_on_load_text_btn_pressed"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..a208971 --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,26 @@ +[gd_resource type="AudioBusLayout" load_steps=4 format=3 uid="uid://tuxl6tvrr2dv"] + +[sub_resource type="AudioEffectFilter" id="AudioEffectFilter_081mb"] +resource_name = "Filter" +gain = 4.0 + +[sub_resource type="AudioEffectPitchShift" id="AudioEffectPitchShift_r6ahm"] +resource_name = "PitchShift" +pitch_scale = 0.85 + +[sub_resource type="AudioEffectRecord" id="AudioEffectRecord_fo272"] +resource_name = "Record" + +[resource] +bus/1/name = &"Record" +bus/1/solo = false +bus/1/mute = true +bus/1/bypass_fx = false +bus/1/volume_db = 0.0 +bus/1/send = &"Master" +bus/1/effect/0/effect = SubResource("AudioEffectFilter_081mb") +bus/1/effect/0/enabled = true +bus/1/effect/1/effect = SubResource("AudioEffectPitchShift_r6ahm") +bus/1/effect/1/enabled = true +bus/1/effect/2/effect = SubResource("AudioEffectRecord_fo272") +bus/1/effect/2/enabled = true diff --git a/icon.webp b/icon.webp new file mode 100644 index 0000000000000000000000000000000000000000..166cc5664891f23e96c7c704efe187ef31fb9e2d GIT binary patch literal 714 zcmV;*0yX_oNk&G(0ssJ4MM6+kP&iDr0ssInf50CQ&%qj!BuiC2yA*41{xB!<`fCkF zZ5s)4X0$AhKgD|vqezmZRQK$12mlB8*T(CHW*bS8llgzN#!@j5fX?416D+L14L~o_ zz}1#N7Qf9pjyT^s{gr%QvgWmET1UBVT+8HC=zUM%z{n8`4;=VHdC^ohB0$Ea26f>P zfmR3@5R?#QMI0~jPqmX+(=a2EDJ0BDBxAAmad}!xRQXWI0)A9+bmq?kfc6(Cbez%$f04}RX6tA7ph7`GR2G>Q0{1gC|38^w! zI-B{F767bCoofJSy-<2c$E477cv~{22VkCPB$)%~ng90ywxrT6fcyUq01Hy;0zjh+ zV5OB6fbI;yPAfYAvkL$RtsDSc+yh9ok^o2>9eX&*nK1KdyPAHAk5_ytgsEQ0*iQ^vo!$^<3^gQnR3`vrV zw*jzL?0mp&0V5|Pq7b|-fp?Y>Q{cSIA9f2WKnP!2)Ci#{2st39Wh+85;tHJii;n~N z77=PdP6zQVBE$lb+kuq1?(}X2_@4K?8DxUV`rn1jL&@`QAfW5eHpG?+}5%_jGa(nu?KoILdu!8L)C6Ztg`(@p3PH z04q{byxdRkDEFjcz|KA8-P~9F1Agu+YdQcH3B{z?k8a5VK*yN!&2jE8(k;*2-%Z6B wGtiuS95|WZvEJP0IOj&5ue9b~uPVm1t~K{tQ=WSsm(}OK--_J3`rN+(0FZW0#sB~S literal 0 HcmV?d00001 diff --git a/icon.webp.import b/icon.webp.import new file mode 100644 index 0000000..cc29159 --- /dev/null +++ b/icon.webp.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://brwp8bimc75uu" +path="res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.webp" +dest_files=["res://.godot/imported/icon.webp-e94f9a68b0f625a567a797079e4d325f.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..f389c7e --- /dev/null +++ b/project.godot @@ -0,0 +1,35 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="Announcer Recorder Helper" +config/description="Based on record audio demo. +Helps record words for black mesa like announcer system." +config/tags=PackedStringArray("audio", "gui", "tool") +run/main_scene="res://MicRecord.tscn" +config/features=PackedStringArray("4.3") +run/low_processor_mode=true +config/icon="res://icon.webp" + +[audio] + +driver/enable_input=true +enable_audio_input=true + +[debug] + +gdscript/warnings/untyped_declaration=1 + +[display] + +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" +window/vsync/vsync_mode=0 diff --git a/screenshots/.gdignore b/screenshots/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/screenshots/mic_record.png b/screenshots/mic_record.png new file mode 100644 index 0000000000000000000000000000000000000000..57ded2fd3d7f20821c86a548e514a89e6e3e6d72 GIT binary patch literal 61732 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 literal 0 HcmV?d00001