---
# System prepended metadata

title: Pet sounds

---

# Pet Sounds

## `hackmd.io/@sesc-av-paulista/pet-sounds`

Vamos usar a linguagem Python para fazer um tocador de sons!

Para isso podemos usar o *Thonny IDE* (https://thonny.org) um editor de código que já vem com um interpretador Python embutido. Nele será preciso instalar o pacote PyGame (`pygame-ce`) que é uma biblioteca Python para desenvolvimento de jogos e aplicações multimídia (no menu *Manage packages...*).


O código do tocador de sons em Python. Precisamos por o código num arquivo `.py` na mesma pasta que os sons que vamos tocar. Para finalizar podemos usar o *Makey-Makey* para simular as teclas que disparam os sons!

```python=
"""
Procura arquivos mp3 na pasta corrente e toca enquanto uma tecla é pressionada.
A tecla que dispara o som é o primeiro caractere do nome do arquivo, ou
código entre colchetes de constante K_... do pygame, exemplo:
  a-mar.mp3           (tecla A)
  1-vento.mp3         (tecla 1)
  [LEFT]-zumbido.mp3  (seta para esquerda) 
  [SPACE]-chuva.mp3   (barra de epaço)
  Outras opções [UP], [DOWN], [RIGHT], a, s, d, w
"""

from pathlib import Path
import pygame

folder = Path.cwd()  # se quiser pode trocar por Path('/caminho/pasta/')

key_to_files = {}
for fp in sorted(folder.iterdir()):
    if not fp.name.lower().endswith('.mp3'):
        continue      # pula arquivos que não terminam em .mp3
    if fp.name[0] == '[':  # nomes com código entre colchetes
        c = fp.name[1:fp.name.find(']')]
    else:             # outras teclas
        c = fp.name[0].lower()
    key_code = getattr(pygame, 'K_' + c, None) # procura constante do pygame
    if not key_code:  # tecla ou código entre colchetes não serve
        print(f'Nome incompatível: {fp.name}')
        continue
    key_to_files[key_code] = fp  # põe constante e path do arquivo no dict
    
pygame.init()
# tela de 800 x 200 pixels
screen = pygame.display.set_mode((800, 800))
font = pygame.font.Font(None, 24)
# Mixer é a interface do pygame para audio
pygame.mixer.init()
pygame.mixer.music.set_volume(0.7)  # ajusta o volume
# Laço principal do pygame
running = True
play_file = None
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            play_file = key_to_files.get(event.key)
            if play_file:
                    pygame.mixer.music.load(play_file)
                    pygame.mixer.music.play()
        elif event.type == pygame.KEYUP:
                pygame.mixer.music.fadeout(200)
                play_file = None
                #pygame.mixer.music.stop() # meio brusco
    # Parte que desenha na tela
    screen.fill((0, 0, 0))   # fundo preto, limpa a tela
    instructions = [
        'Aperte e segure uma tecla.',
        'Disponíveis:'] + [fp.name for k, fp in key_to_files.items()]
    if pygame.mixer.music.get_busy():
        instructions[0] = f'Tocando: {play_file.name if play_file else "Nenhum"}'        
    x = y = 10
    for line in instructions:
        text = font.render(line, True, (255, 255, 255))
        screen.blit(text, (x, y))
        y += 30
        if y > screen.get_height():
            y = 70
            x += 250
    pygame.display.flip() # atualiza a tela
# Encerra tudo (fecha a janela)
pygame.quit()

```



Sons livre: https://pixabay.com/pt/sound-effects/search/gato/