Try godot effects buses

This commit is contained in:
Luke Hubmayer-Werner 2023-08-26 21:38:12 +09:30
parent 6f0f6fa1a2
commit b1cd7b9d7e
3 changed files with 106 additions and 4 deletions

View File

@ -1,8 +1,100 @@
[gd_resource type="AudioBusLayout" load_steps=2 format=2] [gd_resource type="AudioBusLayout" load_steps=4 format=2]
[sub_resource type="AudioEffectCompressor" id=1] [sub_resource type="AudioEffectCompressor" id=3]
resource_name = "Compressor" resource_name = "Compressor"
[sub_resource type="AudioEffectPanner" id=1]
resource_name = "Panner"
[sub_resource type="AudioEffectDelay" id=2]
resource_name = "Delay"
[resource] [resource]
bus/0/effect/0/effect = SubResource( 1 ) bus/0/effect/0/effect = SubResource( 3 )
bus/0/effect/0/enabled = true bus/0/effect/0/enabled = true
bus/1/name = "BGM"
bus/1/solo = false
bus/1/mute = false
bus/1/bypass_fx = false
bus/1/volume_db = 0.0
bus/1/send = "Master"
bus/2/name = "BGM0"
bus/2/solo = false
bus/2/mute = false
bus/2/bypass_fx = false
bus/2/volume_db = 0.0
bus/2/send = "BGM"
bus/2/effect/0/effect = SubResource( 1 )
bus/2/effect/0/enabled = true
bus/2/effect/1/effect = SubResource( 2 )
bus/2/effect/1/enabled = true
bus/3/name = "BGM1"
bus/3/solo = false
bus/3/mute = false
bus/3/bypass_fx = false
bus/3/volume_db = 0.0
bus/3/send = "BGM"
bus/3/effect/0/effect = SubResource( 1 )
bus/3/effect/0/enabled = true
bus/3/effect/1/effect = SubResource( 2 )
bus/3/effect/1/enabled = true
bus/4/name = "BGM2"
bus/4/solo = false
bus/4/mute = false
bus/4/bypass_fx = false
bus/4/volume_db = 0.0
bus/4/send = "BGM"
bus/4/effect/0/effect = SubResource( 1 )
bus/4/effect/0/enabled = true
bus/4/effect/1/effect = SubResource( 2 )
bus/4/effect/1/enabled = true
bus/5/name = "BGM3"
bus/5/solo = false
bus/5/mute = false
bus/5/bypass_fx = false
bus/5/volume_db = 0.0
bus/5/send = "BGM"
bus/5/effect/0/effect = SubResource( 1 )
bus/5/effect/0/enabled = true
bus/5/effect/1/effect = SubResource( 2 )
bus/5/effect/1/enabled = true
bus/6/name = "BGM4"
bus/6/solo = false
bus/6/mute = false
bus/6/bypass_fx = false
bus/6/volume_db = 0.0
bus/6/send = "BGM"
bus/6/effect/0/effect = SubResource( 1 )
bus/6/effect/0/enabled = true
bus/6/effect/1/effect = SubResource( 2 )
bus/6/effect/1/enabled = true
bus/7/name = "BGM5"
bus/7/solo = false
bus/7/mute = false
bus/7/bypass_fx = false
bus/7/volume_db = 0.0
bus/7/send = "BGM"
bus/7/effect/0/effect = SubResource( 1 )
bus/7/effect/0/enabled = true
bus/7/effect/1/effect = SubResource( 2 )
bus/7/effect/1/enabled = true
bus/8/name = "BGM6"
bus/8/solo = false
bus/8/mute = false
bus/8/bypass_fx = false
bus/8/volume_db = 0.0
bus/8/send = "BGM"
bus/8/effect/0/effect = SubResource( 1 )
bus/8/effect/0/enabled = true
bus/8/effect/1/effect = SubResource( 2 )
bus/8/effect/1/enabled = true
bus/9/name = "BGM7"
bus/9/solo = false
bus/9/mute = false
bus/9/bypass_fx = false
bus/9/volume_db = 0.0
bus/9/send = "BGM"
bus/9/effect/0/effect = SubResource( 1 )
bus/9/effect/0/enabled = true
bus/9/effect/1/effect = SubResource( 2 )
bus/9/effect/1/enabled = true

View File

@ -35,7 +35,7 @@ HTML5="*res://scripts/managers/HTML5.gd"
[debug] [debug]
settings/fps/force_fps=60 settings/fps/force_fps=120
gdscript/warnings/unused_variable=false gdscript/warnings/unused_variable=false
gdscript/warnings/integer_division=false gdscript/warnings/integer_division=false

View File

@ -54,6 +54,7 @@ func _init(tracks: Array, instrument_map: Dictionary):
for i in num_tracks: for i in num_tracks:
self.players.append(AudioStreamPlayer.new()) self.players.append(AudioStreamPlayer.new())
add_child(self.players[-1]) add_child(self.players[-1])
self.players[-1].bus = 'BGM%d' % i
self.channel_pointer.append(0) self.channel_pointer.append(0)
self.channel_instrument_idx.append(0) self.channel_instrument_idx.append(0)
self.channel_next_pulse.append(0) self.channel_next_pulse.append(0)
@ -83,6 +84,13 @@ func _init(tracks: Array, instrument_map: Dictionary):
self.channel_pitchmod_on.append(0) self.channel_pitchmod_on.append(0)
self.channel_echo_on.append(0) self.channel_echo_on.append(0)
self.channel_echo_volume.append(0) self.channel_echo_volume.append(0)
var panner: AudioEffectPanner = AudioServer.get_bus_effect(i+2, 0)
panner.set_pan(0.0)
var delay: AudioEffectDelay = AudioServer.get_bus_effect(i+2, 1)
delay.set_dry(1.0)
delay.set_tap1_active(false)
delay.set_tap2_active(false)
delay.set_feedback_active(false)
func play_channel(channel: int, time_offset: float = 0.0) -> int: func play_channel(channel: int, time_offset: float = 0.0) -> int:
# Executes the track events until it hits a note/rest, in which case it returns the pulse count to the next action, or the end of the events, in which case it returns -1 # Executes the track events until it hits a note/rest, in which case it returns the pulse count to the next action, or the end of the events, in which case it returns -1
@ -117,9 +125,11 @@ func play_channel(channel: int, time_offset: float = 0.0) -> int:
self.channel_velocity[channel] = event[2] self.channel_velocity[channel] = event[2]
EventType.PAN: # TODO: implement slides EventType.PAN: # TODO: implement slides
self.channel_pan[channel] = event[1] self.channel_pan[channel] = event[1]
AudioServer.get_bus_effect(channel+2, 0).set_pan(1.0 - event[1]/127.0)
EventType.PAN_SLIDE: # TODO: implement slides EventType.PAN_SLIDE: # TODO: implement slides
var slide_duration: int = event[1] var slide_duration: int = event[1]
self.channel_pan[channel] = event[2] self.channel_pan[channel] = event[2]
AudioServer.get_bus_effect(channel+2, 0).set_pan(1.0 - event[2]/127.0)
EventType.PITCH_SLIDE: # TODO: implement slides EventType.PITCH_SLIDE: # TODO: implement slides
var slide_duration: int = event[1] var slide_duration: int = event[1]
var target_pitch: int = event[2] # Signed var target_pitch: int = event[2] # Signed