¿Cómo agregar una lista de reproducción de música en Pygame?

En este artículo, vamos a ver cómo agregar una lista de reproducción de música en Pygame.

Pygame tiene un método, pygame.mixer() que tiene todas las funcionalidades relacionadas con las operaciones de audio, como reproducir una canción, poner en cola una canción, configurar el volumen, rebobinar, detener, pausar, reanudar y muchas más. Las funciones proporcionadas por esta clase son: 

  • pygame.mixer.music.load(): Esto cargará el archivo de música/objeto de nombre de archivo.
  • pygame.mixer.music.play(loops, start, fade_ms ) : Inicia la reproducción de la música que ha sido cargada. Esto toma 3 argumentos
    • bucles: es un argumento entero opcional que indica cuántas veces se debe repetir la canción. Si se establece en -1, se repetirá indefinidamente.
    • inicio: es un argumento flotante opcional, que denota la posición en el tiempo y desde donde debe comenzar a reproducirse la música.
    • fade_ms: Es un argumento entero opcional. Hace que la música comience desde el volumen 0 y se desvanece hasta el volumen máximo en el momento dado.
  • pygame.mixer.music.queue(): Esto pondrá en cola una canción al final del archivo de música actual. Tan pronto como finaliza el archivo actual, se reproduce el siguiente archivo de música en cola. También puede poner en cola varias canciones y esta será nuestra lógica principal para crear una lista de reproducción.
  • pygame.mixer.music.rewind(): Esto rebobina la reproducción del archivo de música actual hasta el principio.
  • pygame.mixer.music.pause(): Esto detiene la reproducción del archivo de música actual.
  • pygame.mixer.music.set_endevent(): Esto envía una señal, es decir, un evento. Si el archivo de música ha terminado de reproducirse, se pondrá en cola un evento. 
  • pygame.mixer.music.get_busy(): Esto devuelve un valor booleano, que indica si un archivo de música se ha reproducido actualmente o no. 

Agregar lista de reproducción en Pygame

Para crear una lista de reproducción en Pygame, usaremos todos los métodos mencionados anteriormente para formar un flujo en el que todos los archivos de música elegidos se incluirán en la lista y cada uno de esos archivos se pondrá en cola y se reproducirá uno tras otro en orden secuencial. Esta lógica se puede implementar de la siguiente manera:

  • Cargue la primera entrada de la lista que contiene archivos de música en pygame usando pygame.mixer.music.load() y eliminando simultáneamente la primera entrada de la lista.
  • Al cargar la primera canción, la reproduciremos usando pygame.mixer.music.play() .
  • Posteriormente, también pondremos en cola la segunda entrada usando pygame.mixer.music.queue() y eliminaremos la misma de nuestra lista.
  • Cada vez que termine la música, organizaremos un evento pygame.MUSIC_END  usando pygame.mixer.music.set_endevent() para notificar al jugador que ponga en cola la siguiente canción de la lista.
  • Una vez que todos los archivos de música de nuestra lista de reproducción se han reproducido/puesto en cola, pygame.mixer.music.get_busy() devuelve falso y rompemos el bucle for y el bucle while para que nuestro programa llegue al final.

A continuación se muestra la implementación:

Python

import pygame
  
# setting up pygame
pygame.init()
  
  
def insert_into_playlist(playlist, music_file):
    
    # Adding songs file in our playlist
    playlist.append(music_file)
  
  
def start_playlist(playList):
    
    # Loading first audio file into our player
    pygame.mixer.music.load(playList[0])
      
    # Removing the loaded song from our playlist list
    playList.pop(0)
  
    # Playing our music
    pygame.mixer.music.play()
  
    # Queueing next song into our player
    pygame.mixer.music.queue(playList[0])
    playList.pop(0)
  
    # setting up an end event which host an event
    # after the end of every song
    pygame.mixer.music.set_endevent(pygame.MUSIC_END)
  
    # Playing the songs in the background
    running = True
    while running:
        
        # checking if any event has been
        # hosted at time of playing
        for event in pygame.event.get():
            
            # A event will be hosted
            # after the end of every song
            if event.type == pygame.MUSIC_END:
                print('Song Finished')
                  
                # Checking our playList
                # that if any song exist or
                # it is empty
                if len(playList) > 0:
                    
                    # if song available then load it in player
                    # and remove from the player
                    pygame.mixer.music.queue(playList[0])
                    playList.pop(0)
  
            # Checking whether the 
            # player is still playing any song
            # if yes it will return true and false otherwise
            if not pygame.mixer.music.get_busy():
                print("Playlist completed")
                  
                # When the playlist has
                # completed playing successfully
                # we'll go out of the
                # while-loop by using break
                running = False
                break
  
  
if __name__ == '__main__':
    
    # This list is going to be
    # our playlist as we can
    # only queue one song at a
    # time by using `.queue()` method
    # therefore we are using list
    # and will queue song one by one.
    playList = []
  
    insert_into_playlist(playList, 'eg1.wav')
    insert_into_playlist(playList, 'eg2.wav')
    insert_into_playlist(playList, 'eg3.wav')
  
    start_playlist(playList)

Producción:

Publicación traducida automáticamente

Artículo escrito por iamakkkhil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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