Thread sound loading as it is quite slow currently

This commit is contained in:
Luke Hubmayer-Werner 2023-07-26 21:52:54 +09:30
parent 13b58d3b91
commit 7a9388bf2b
3 changed files with 23 additions and 3 deletions

View File

@ -22,7 +22,13 @@ func _ready():
# PCs[-1].material.set_shader_param('palette', SpriteLoader.character_battle_sprite_palette_textures[45])
# PCs[-1].texture = SpriteLoader.weapon_textures['Fist']
# add_child(PCs[-1])
_create_sfx_buttons()
func _create_sfx_buttons():
var disable_btn := !SoundLoader.has_loaded_audio_samples
if disable_btn:
SoundLoader.connect('audio_samples_loaded', self, '_enable_sfx_buttons')
for i in SoundLoader.INST_NUM:
var btn = Button.new()
btn.text = 'Play #%02X' % i
@ -32,6 +38,7 @@ func _ready():
add_child(btn)
btn.connect('pressed', SoundLoader, 'play_sample', [i])
sfx_buttons.append(btn)
btn.disabled = disable_btn
for i in SoundLoader.SFX_NUM:
var btn = Button.new()
btn.text = 'SFX #%02X' % i
@ -41,7 +48,11 @@ func _ready():
add_child(btn)
btn.connect('pressed', SoundLoader, 'play_sfx', [i])
sfx_buttons.append(btn)
btn.disabled = disable_btn
func _enable_sfx_buttons():
for btn in sfx_buttons:
btn.disabled = false
# Called every frame. 'delta' is the elapsed time since the previous frame.
#func _process(delta):

View File

@ -4,13 +4,16 @@ var ROM_filename := 'FF5_SCC_WepTweaks_Inus_Dash.sfc' # 'Final Fantasy V (Japan
var GBA_filename := '2564 - Final Fantasy V Advance (U)(Independent).gba'
var rom_snes := File.new()
var thread := Thread.new()
func load_snes_rom(filename: String):
var error := rom_snes.open(filename, File.READ)
if error == OK:
SoundLoader.parse_rom(rom_snes)
SpriteLoader.load_snes_rom(rom_snes)
var _thread_error = thread.start(SoundLoader, 'parse_rom', rom_snes)
func _ready():
load_snes_rom(ROM_filename)
func _exit_tree() -> void:
thread.wait_to_finish()

View File

@ -1,5 +1,8 @@
extends Node
signal audio_samples_loaded
var has_loaded_audio_samples := false
const BGM_NUM := 70
const BGM_LOOKUP := 0x043B97
const INST_NUM := 35
@ -118,7 +121,7 @@ func get_inst_sample_data(rom: File, id: int) -> AudioStreamSample:
audio.loop_mode = AudioStreamSample.LOOP_FORWARD
audio.loop_begin = loop_start_packet * 16 # Each 9byte packet is 16 samples
audio.loop_end = num_samples-1
print_debug('Loaded instrument #%02X with lookup offset $%06X, BRR data offset $%06X, length $%04X (%f packets, %d samples) and loop point %d samples' % [id, lookup_offset, brr_offset, size, size/9.0, num_samples, audio.loop_begin])
# print_debug('Loaded instrument #%02X with lookup offset $%06X, BRR data offset $%06X, length $%04X (%f packets, %d samples) and loop point %d samples' % [id, lookup_offset, brr_offset, size, size/9.0, num_samples, audio.loop_begin])
return audio
func load_sfx_samples_data(rom: File):
@ -146,6 +149,7 @@ func load_sfx_samples_data(rom: File):
# Called when the node enters the scene tree for the first time.
func load_samples(rom: File):
pass
load_sfx_samples_data(rom)
for i in INST_NUM:
instrument_samples.append(get_inst_sample_data(rom, i))
@ -198,7 +202,9 @@ func play_sfx(id: int):
func parse_rom(rom: File):
load_samples(rom)
load_bgms(rom)
#load_bgms(rom)
has_loaded_audio_samples = true
emit_signal('audio_samples_loaded')
func _ready() -> void:
add_child(player)