1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-03-14 23:35:17 +00:00

Support WAV files in audio layers

Now possible thanks to Godot 4.4
This commit is contained in:
Emmanouil Papadeas 2025-03-13 16:58:58 +02:00
parent ec37e6df43
commit a4973acc68
6 changed files with 31 additions and 9 deletions

View file

@ -539,11 +539,18 @@ func export_video(export_paths: PackedStringArray, project: Project) -> bool:
var max_audio_duration := 0
var adelay_string := ""
for layer in project.get_all_audio_layers():
if layer.audio is AudioStreamMP3:
var temp_file_name := str(audio_layer_count + 1).pad_zeros(number_of_digits) + ".mp3"
if layer.audio is AudioStreamMP3 or layer.audio is AudioStreamWAV:
var temp_file_name := str(audio_layer_count + 1).pad_zeros(number_of_digits)
if layer.audio is AudioStreamMP3:
temp_file_name += ".mp3"
elif layer.audio is AudioStreamWAV:
temp_file_name += ".wav"
var temp_file_path := temp_path_real.path_join(temp_file_name)
var temp_audio_file := FileAccess.open(temp_file_path, FileAccess.WRITE)
temp_audio_file.store_buffer(layer.audio.data)
if layer.audio is AudioStreamMP3:
var temp_audio_file := FileAccess.open(temp_file_path, FileAccess.WRITE)
temp_audio_file.store_buffer(layer.audio.data)
elif layer.audio is AudioStreamWAV:
layer.audio.save_to_wav(temp_file_path)
ffmpeg_combine_audio.append("-i")
ffmpeg_combine_audio.append(temp_file_path)
var delay := floori(layer.playback_position * 1000)

View file

@ -53,7 +53,7 @@ func handle_loading_file(file: String, force_import_dialog_on_images := false) -
var new_path := SHADERS_DIRECTORY.path_join(file.get_file())
DirAccess.copy_absolute(file, new_path)
shader_copied.emit(new_path)
elif file_ext == "mp3": # Audio file
elif file_ext == "mp3" or file_ext == "wav": # Audio file
open_audio_file(file)
else: # Image files
@ -474,6 +474,12 @@ func save_pxo_file(
zip_packer.start_file(audio_path)
zip_packer.write_file(layer.audio.data)
zip_packer.close_file()
elif layer.audio is AudioStreamWAV:
var tmp_wav := FileAccess.create_temp(FileAccess.READ, "tmp", "wav")
layer.audio.save_to_wav(tmp_wav.get_path())
zip_packer.start_file(audio_path)
zip_packer.write_file(tmp_wav.get_buffer(tmp_wav.get_length()))
zip_packer.close_file()
zip_packer.close()
if temp_path != path:
@ -941,8 +947,11 @@ func set_new_imported_tab(project: Project, path: String) -> void:
func open_audio_file(path: String) -> void:
var audio_stream: AudioStream
var file := FileAccess.open(path, FileAccess.READ)
audio_stream = AudioStreamMP3.new()
audio_stream.data = file.get_buffer(file.get_length())
if path.get_extension().to_lower() == "mp3":
audio_stream = AudioStreamMP3.new()
audio_stream.data = file.get_buffer(file.get_length())
elif path.get_extension().to_lower() == "wav":
audio_stream = AudioStreamWAV.load_from_buffer(file.get_buffer(file.get_length()))
if not is_instance_valid(audio_stream):
return
var project := Global.current_project

View file

@ -380,6 +380,8 @@ func deserialize(dict: Dictionary, zip_reader: ZIPReader = null, file: FileAcces
if saved_layer.get("audio_type", "") == "AudioStreamMP3":
stream = AudioStreamMP3.new()
stream.data = audio_data
elif saved_layer.get("audio_type", "") == "AudioStreamWAV":
stream = AudioStreamWAV.load_from_buffer(audio_data)
layer.audio = stream
layers.append(layer)
audio_layers += 1

View file

@ -200,6 +200,7 @@ layout_mode = 2
disable_3d = true
item_count = 2
item_0/text = "Properties"
item_0/id = 0
item_1/text = "Clipping mask"
item_1/checkable = 1
item_1/id = 1

View file

@ -186,10 +186,13 @@ func _on_play_at_frame_slider_value_changed(value: float) -> void:
func _on_audio_file_dialog_file_selected(path: String) -> void:
var audio_stream: AudioStream
if path.get_extension() == "mp3":
if path.to_lower().get_extension() == "mp3":
var file := FileAccess.open(path, FileAccess.READ)
audio_stream = AudioStreamMP3.new()
audio_stream.data = file.get_buffer(file.get_length())
elif path.to_lower().get_extension() == "wav":
var file := FileAccess.open(path, FileAccess.READ)
audio_stream = AudioStreamWAV.load_from_buffer(file.get_buffer(file.get_length()))
for layer_index in layer_indices:
var layer := Global.current_project.layers[layer_index]
if layer is AudioLayer:

View file

@ -119,7 +119,7 @@ always_on_top = true
ok_button_text = "Open"
file_mode = 0
access = 2
filters = PackedStringArray("*.mp3 ; MP3 Audio")
filters = PackedStringArray("*.mp3 ; MP3 Audio", "*.wav; WAV Audio")
[connection signal="visibility_changed" from="." to="." method="_on_visibility_changed"]
[connection signal="text_changed" from="GridContainer/NameLineEdit" to="." method="_on_name_line_edit_text_changed"]