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