pixelboyz logo
Desarrollo de Videojuegos

Tutorial de Godot Engine Parte 4 – Reproducción de efectos de sonido y música

image

Índice de contenido


Este tutorial está disponible como un video HD aquí.

Hoy vamos a ver cómo usar audio con Godot. Si ha usado otros motores de juegos, encontrará que el proceso es probablemente un poco diferente y tal vez un poco poco intuitivo, pero al final es bastante simple y bastante poderoso. Es un proceso un poco de varios pasos, así que comencemos de inmediato.

Para este ejemplo, necesitará un par de archivos de audio. Personalmente, obtengo la mayoría de los archivos de audio de mis tutoriales de un sitio llamado http://www.freesound.org/. Ahora un momento sobre los formatos de audio.

Los dos tipos de audio

Hay dos tipos de audio en Godot (y muchos otros motores de juegos). Muestras y flujos. Una muestra es una pieza de sonido sin comprimir que se carga en la memoria. Las muestras ocupan más memoria pero mucho menos poder de procesamiento. En Godot creas muestras importándolas como archivos WAV. Las transmisiones, por otro lado, son archivos de audio comprimidos (piense en MP3), a menudo de duración mucho más larga. Estos simplemente los copia en su proyecto, Godot admite formatos MPC y Ogg Vorbis.

Generalmente, las muestras se usan para efectos de sonido rápidos en el juego, mientras que las secuencias se usan para música de fondo. Es muy probable que su audio no esté en formato WAV, Ogg o MPC. Si no es así, recomiendo encarecidamente el programa gratuito. Audacia para convertir entre formatos.

Reproducir una muestra de audio

Como dije antes, las muestras son archivos de audio sin comprimir que generalmente se usan para efectos de sonido y es un proceso de varios pasos para cargar y reproducir uno. También es bastante común reproducir varias muestras de muestra a la vez. Bien, veamos ese proceso.

Primero necesitas crear un SamplePlayer. Este es un nodo que puede agregar a su escena. Hay 3 tipos de reproductores, SamplePlayer, SamplePlayer2D y SpatialSamplePlayer. Todos logran lo mismo, sin embargo, 2D tiene soporte estéreo adicional y se puede colocar en su mundo 2D, mientras que Spatial le permite colocar su fuente de audio en 3D para simular audio posicional. En este tutorial solo vamos a usar el SamplePlayer simple. Podemos cubrir los otros dos en tutoriales posteriores.

Creación del nodo SamplePlayer

Agregue un nuevo nodo SamplePlayer a su escena:

Creación de una nueva biblioteca de muestras

Ahora necesitamos crear una biblioteca de muestras. Con su SamplePlayer seleccionado en el panel Escena, en el Inspector ubique Muestras, despliegue y seleccione Nueva biblioteca de muestras:

imagen

Ahora suéltalo de nuevo y selecciona Editar:

imagen

Esto cambiará su vista activa a la vista de biblioteca de muestras. Tenga en cuenta que las pestañas anteriores (2d, 3d, etc.) no lo llevarán fuera de esta pantalla actualmente. Para volver a su vista de escena 2D, seleccione un nodo diferente en el panel Escena a la derecha.

imagen

Importación de una muestra de audio

Ahora podemos usar esta ventana para agregar nuestras muestras a la biblioteca… Supongo que necesitamos una muestra. Para eso usas el menú Importar. Seleccione Importar->Muestra de audio:

imagen

Aparecerá un cuadro de diálogo Importar muestras de audio así:

imagen

En fuente, navegue hasta el archivo WAV que desea importar. Para la ruta de destino, seleccione la ubicación dentro de su proyecto en la que desea que resida. En las opciones, tiene varios ajustes de configuración, como cambiar la cantidad de datos utilizados/fidelidad de su sonido (Max Rate Hz), convertirlo en Mono vs Estéreo o forzarlo a ser de 8 bits, que es una fidelidad realmente baja, un solo canal pero pequeño archivo de audio. Por ahora solo use la configuración predeterminada. Cuando haga clic en Importar, se agregará un nuevo archivo «smp» a su proyecto:

imagen

Agregar muestra a la biblioteca de audio

Ahora que tenemos nuestra muestra, necesitamos agregarla a nuestra biblioteca. Puede utilizar la misma muestra en varias bibliotecas. En la ventana Editar muestra, seleccione el icono abierto:

imagen

Seleccione su muestra recién importada. Ahora debería aparecer en la lista así:

imagen

Aquí puede obtener una vista previa de la muestra, cambiar su volumen predeterminado usando dB (decibelios) o cambiar su tono usando el valor PScale. Puede agregar varias muestras a la biblioteca de muestras. La mancha amarilla que ves en el medio de la pantalla es la forma de onda del audio… hay dos porque este es un ejemplo estéreo. Como puede ver por el hecho de que son formas de onda idénticas, esto es realmente un desperdicio, por lo que sería mejor guardar el tamaño del archivo e importarlo como una muestra mono.

Reproducir una muestra de audio usando SamplePlayer

Ahora que tenemos una SampleLibrary con una muestra, podemos seguir adelante y reproducirla. Agreguemos un script a nuestro nodo SamplePlayer que reproducirá automáticamente el sonido cuando comencemos. Es increíblemente simple, así:

extends SamplePlayer
func _ready():
   play("siren")

Si eso es. Simplemente llame al método de reproducción de SamplePlayer y pase el nombre como se define en la Biblioteca de muestras.

Por supuesto, rara vez tendrá un SamplePlayer que reproduzca sus propios sonidos. Lo que es mucho más probable es que agregue un SamplePlayer a la base de su árbol de escena y luego lo llame desde los nodos secundarios dentro de la escena. No te preocupes, eso es igual de sencillo… ¡hagámoslo!

Agregue un nodo de botón a su escena, adjunte un script, luego presione el ícono de Conexiones y cree un controlador predeterminado para la conexión «presionado ()».

imagen
imagen

Por lo general, no usaría el SamplePlayer como el nodo de la escena raíz, pero eso es lo que tengo, así que lo hice… Ahora, en su controlador de botones, puede obtener una referencia al SamplePlayer usando:

extends Button
func _ready():
   pass
func _on_Button_pressed():
    get_tree().get_root().get_node("SamplePlayer").play("siren")

Una cosa importante a tener en cuenta… ¡el valor pasado a play() distingue entre mayúsculas y minúsculas! ¡Así que si pasaba «Siren» no tocaría nada! Entonces, básicamente, reproducir una muestra es simplemente una cuestión de obtener una referencia al nodo SamplePlayer y llamar al método de reproducción.

Así que… así es como se reproduce un solo sonido… cómo se reproducen varios a la vez… bueno, eso es cuestión de voces. Se puede pensar en una voz como una instancia de ejecución de un solo sonido. Si desea reproducir varios sonidos a la vez, necesita varias voces en su SamplePlayer. Puede establecer ese valor en el Inspector del reproductor, así:

imagen

Ahora, cuando ejecute la aplicación, cada vez que haga clic en el botón, una nueva versión de su efecto de sonido comenzará a reproducirse al mismo tiempo que la versión anterior. ¿Qué sucede si solo desea que se reproduzca una sola instancia de un efecto de sonido a la vez? Bueno, eso también se puede hacer… cuando llamas a play() hay un segundo parámetro opcional que le dice a Godot si el sonido es único o no. Establézcalo en verdadero, así:

get_tree().get_root().get_node("SamplePlayer").play("siren",true)

Y cada vez que presione el botón, el efecto de sonido comenzará de nuevo.

Una última cosa crítica para entender es cómo manipular (detener, pausar, cambiar el volumen, etc.) una sola instancia de reproducción de sonido. Esto se hace usando identificaciones de voz, una de las cuales se devuelve cuando reproduce una muestra. Entonces, el siguiente ejemplo reproduce un sonido e inmediatamente establece su volumen al 50%:

func _on_Button_pressed():
   var player = get_tree().get_root().get_node("SamplePlayer")
   var voiceID = player.play("siren")
   player.set_volume(voiceID, 0.5)

Entonces usó la ID de voz para interactuar con muestras que ya se estaban ejecutando. Estos solo duran mientras se reproduce la muestra.

Tocando musica

Ahora echemos un vistazo a la transmisión de un archivo en su lugar. El proceso es muy similar, pero en su lugar agrega un nodo StreamPlayer:

imagen

Ahora copie un archivo MPC u OGG en la carpeta de archivos de su proyecto usando Windows Explorer o Mac Finder. Ahora en Inspector con StreamPlayer seleccionado, busque la propiedad Stream y seleccione el tipo apropiado, estoy usando AudioStreamOGGVorbis:

imagen

Ahora bájalo de nuevo y selecciona Cargar:

imagen

Seleccione el archivo que copió en su proyecto. Adjunte un script a un nodo en su escena… por razones de demostración, solo lo estoy agregando al propio StreamPlayer. Entonces puedes usar el código:

extends StreamPlayer
func _ready():
   self.play()

En realidad, no necesita código para lograr esto. Si desea que StreamPlayer reproduzca su canción automáticamente, simplemente puede configurar la propiedad de reproducción automática:

imagen

Ahora, una cosa muy común en los juegos es reproducir una canción diferente después de que la canción actual termine de reproducirse… veamos cómo puedes lograr esto:

extends StreamPlayer
var song1
var song2
var currentSong = song1
func _ready():
   set_process(true)
   song2 = load("song2.ogg")
   
func _process(delta):
   if(self.is_playing() != true):
      if(self.get_stream() == song1):
         self.set_stream(song2)
      else:
         self.set_stream(song1)
      self.play()

La versión de vídeo

Programación Godot Tutorial 2D Motor




Source link

Tags :
efectos,Engine,Godot,música,parte,Reproducción,sonido,Tutorial

Comparte :

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *