52 lines
1.2 KiB
GDScript
52 lines
1.2 KiB
GDScript
extends AudioStreamPlayer
|
|
|
|
var stop_time:float
|
|
|
|
func play_voice(data:Dictionary) -> void:
|
|
if data == {}:
|
|
stop_voice()
|
|
return
|
|
|
|
if data.has('volume'):
|
|
volume_db = data['volume']
|
|
|
|
if data.has('audio_bus'):
|
|
bus = data['audio_bus']
|
|
|
|
if data.has('file'):
|
|
if data['file'] == '':
|
|
stop_voice()
|
|
return
|
|
var s:AudioStream = load(data['file'])
|
|
if s != null:
|
|
stream = s
|
|
#Will play from start_time when possible
|
|
if data.has('start_time'):
|
|
play(data['start_time'])
|
|
else:
|
|
play()
|
|
#Stop time will fall back to length of audiostream minus 0.1 secund
|
|
#if not defined otherwise. This should allow _process to stop the
|
|
#audio before it autorepeats
|
|
if data.has('stop_time'):
|
|
stop_time = data['stop_time']
|
|
if stop_time <= 0:
|
|
stop_time = s.get_length() - 0.1
|
|
else:
|
|
stop_time = s.get_length() - 0.1
|
|
else:
|
|
stop_voice()
|
|
func stop_voice():
|
|
stop()
|
|
#this is part of a hack, and could be replaced with something more elegant. - KvaGram
|
|
func remaining_time():
|
|
if !playing:
|
|
return 0
|
|
return stop_time - get_playback_position()
|
|
|
|
|
|
func _process(_delta):
|
|
#Will automatically stop playing when reaching stop_time
|
|
if(playing && get_playback_position() >= stop_time):
|
|
stop_voice()
|