# 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/