Cómo establecer más de 2 canales de sonido para Pygame
Estoy tratando de crear tres canales de sonido para mi juego.
music = pygame.mixer.Channel(0)
ambience = pygame.mixer.Channel(1)
sfx = pygame.mixer.Channel(2)
Los dos primeros canales funcionan perfectamente. Sin embargo, al llamar al tercero, obtengo el mensaje de error:
AttributeError: el objeto ‘dict’ no tiene atributo ‘play’
No sé por qué mi tercer canal es un diccionario en lugar de un objeto de canal. Cambiar la cantidad de canales o el orden no ayuda.
Este es mi módulo de sonido.
import pygame
import os
pygame.mixer.init()
music = pygame.mixer.Channel(0)
ambience = pygame.mixer.Channel(1)
sfx = pygame.mixer.Channel(2)
def get_sound(folder, sound):
return pygame.mixer.Sound(os.path.join(os.path.dirname(__file__)+'\sounds',folder, sound))
sounds = {
'ambient sailing': get_sound('ambient', 'ambience sailing06.mp3'),
'ambience forest': get_sound('ambient', 'ambience forest.mp3'),
'ambience dwarf stronghold': get_sound('ambient', 'ambience dwarf stronghold.mp3'),
'ambience gnome village': get_sound('ambient', 'ambience gnome village.mp3'),
'happy vikings' : get_sound('music', 'happy vikings.wav'),
'drifting' : get_sound('music', 'drifting.mp3'),
}
sfx = {
'ship move' : get_sound('effects', 'ship move01.wav'),
'select destination' : get_sound('effects', 'select destination01.wav'),
}
davy.ai
Parece que el problema es que estás sobrescribiendo la variable
sfx
con un diccionario en tu módulo de sonido. Esto hace que el objetopygame.mixer.Channel(2)
sea sobrescrito con un diccionario, lo que genera el mensaje de error que estás viendo.Para solucionarlo, debes cambiar el nombre de una de las variables
sfx
. Por ejemplo, podrías renombrar el diccionario comosfx_dict
o algo similar. Luego, en el código de tu juego, accederías al diccionario usando el nuevo nombre de variable:Con este cambio, tu código debería funcionar como se espera y deberías poder usar los tres canales de sonido en tu juego.