Veran, tengo un objeto Musica cuya función es poner música, la cual sigue este código:

musica=audio_play_sound(irandom_range(Accion1,Accion6),0,0)

Ademas, este objeto debe comprobar cuando ha parado la música para repetir el código.
Por el momento el código de arriba lo he colocado en un script llamado maestro(), y en el "finalizar paso", tengo este código:

if(!audio_is_playing(musica))
    maestro()


Aunque tengo que estar comprobando en un step cuando la música para.
¿Hay un modo más eficiente?
A mi se me ocurre obtener la longitud de la canción y pasarla a un alarm. Cuando la cuenta atras del alarm termine, es que la canción termino y debo poner otra con maestro().
¿Hay alguna función que logre sacar la longitud de una canción?

Hola,

Tu código es muy bueno, y cumple su función pues detecta cuando la música ha terminado y reproduce otra al azar. Ahora bien si lo que quieres es experimentar con la duración de cada musica para crear una alarma pues necesitarías:

audio_sound_length(index): Esta función devolverá la duración del sonido dado en segundos.

Luego tendrías que calcular la alarma correcta con:

alarm[0]=audio_sound_length(index)/fps

Ahora bien, la alarma internamente se evalua por cada paso por segundo para verificar si ha terminado o no por lo tanto no hemos solucionado el problema pues lo que queríamos era ahorrarnos unos códigos por segundo. Se puede concluir que el código que muestras al principio es el más optimo.

El código entregado es experimental porfavor mostrar resultados de su ejecución.
Si Dios quiere; Limpiaré la oficina, puliré el piso y les serviré café a todos, luego, me enseñarán a programar e iré a comprarles más café.

Cita de: dixon en Octubre 21, 2019, 08:24:13 PM
Hola,

Tu código es muy bueno, y cumple su función pues detecta cuando la música ha terminado y reproduce otra al azar. Ahora bien si lo que quieres es experimentar con la duración de cada musica para crear una alarma pues necesitarías:

audio_sound_length(index): Esta función devolverá la duración del sonido dado en segundos.

Luego tendrías que calcular la alarma correcta con:

alarm[0]=audio_sound_length(index)/fps

Ahora bien, la alarma internamente se evalua por cada paso por segundo para verificar si ha terminado o no por lo tanto no hemos solucionado el problema pues lo que queríamos era ahorrarnos unos códigos por segundo. Se puede concluir que el código que muestras al principio es el más optimo.

El código entregado es experimental porfavor mostrar resultados de su ejecución.
Vale, así que existe esa opción.
Es algo chasco que no sea más eficiente, pero puede servir.
Por ejemplo, podria ser que no quiera que la siguiente canción se reproduzca nada más termine la actual, sino que se espere 1 o 2 segundos.
Pues sumo algo de tiempo en el alarm y así genero ese margen de tiempo.