Volumen del sonido
Parte de la sección Sonido y sensaciones del juego del Journey de Pygame de Coddy. Lección 3 de 23.
Cada sonido tiene su propio volumen, desde 0.0 (silencio) hasta 1.0 (tan alto como el archivo). Un sonido nuevo empieza en 1.0. Cámbialo con set_volume():
step_sound.set_volume(0.3)Úsalo para equilibrar un juego. Un paso que suena todo el tiempo debería estar bajo; una explosión poco frecuente puede sonar fuerte. Un valor superior a 1.0 cuenta como 1.0, así que set_volume(5) reproduce el sonido al volumen máximo, no cinco veces más fuerte.
Una pantalla de ajustes suele mostrar el volumen de 0 a 10, lo que se lee mejor en la pantalla. Divide entre 10 para obtener el valor del sonido:
volume = 5
click_sound.set_volume(volume / 10)El sonido conserva su volumen hasta que vuelvas a ajustarlo. Cuando el jugador cambie volume, vuelve a llamar a set_volume() o el sonido se reproducirá con el nivel anterior. get_volume() te indica el nivel que tiene ahora un sonido.
Desafío
FácilLas teclas arriba y abajo cambian volume de 0 a 10, y la barra espaciadora reproduce el sonido de clic para que puedas oírlo. Haz que el sonido de clic siga el ajuste:
- Después de
volume = 5, llama aclick_sound.set_volume(volume / 10). - Vuelve a llamarlo cada vez que las teclas arriba o abajo cambien
volume.
Pruébalo tú mismo
import pygame
pygame.init()
screen = pygame.display.set_mode((480, 360))
pygame.display.set_caption("Volume")
clock = pygame.time.Clock()
font = pygame.font.Font(None, 32)
click_sound = pygame.mixer.Sound("assets/sounds/click.ogg")
volume = 5
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_UP and volume < 10:
volume += 1
elif event.key == pygame.K_DOWN and volume > 0:
volume -= 1
elif event.key == pygame.K_SPACE:
click_sound.play()
screen.fill((30, 30, 46))
label = font.render(f"Volume: {volume}", True, (240, 240, 240))
screen.blit(label, (40, 120))
for i in range(10):
color = (90, 200, 120) if i < volume else (60, 60, 80)
pygame.draw.rect(screen, color, (40 + i * 40, 170, 32, 40))
pygame.display.flip()
clock.tick(60)
pygame.quit()
Todas las lecciones de Sonido y sensaciones del juego
1Efectos de sonido
Cargar un sonidoSonido al ocurrir un eventoVolumen del sonidoSonidos y teclas presionadas4Sacudida de pantalla y destello de impacto
Sacudida de pantallaDestello de impactoPausa tras el impactoMantén la sutilezaPractica por tu cuenta: Playground de Pygame