Article image
Carlos CGS
Carlos CGS25/10/2025 17:43
Compartilhe

đŸŽ¶JARVIS DJ: Criando Playlists Inteligentes e Comandos Musicais com Python

    Projeto CodeVerse Python – #42/2025

    👋 Fala, galera dev!

    Bem-vindos a mais um episĂłdio da nossa saga CodeVerse Python 2025! No artigo anterior (#41), aprendemos e ensinamos nosso JARVIS a tocar mĂșsicas diretamente do YouTube por comando de voz, um passo importante para transformar e evoluir nosso assistente em um companheiro realmente que nos ajuda em nosso dia a dia, automazando de forma real nossos pedidos.

    Mas, se o Tony Stark nĂŁo repete uma armadura, por que nĂłs repetirĂ­amos o mesmo cĂłdigo? 😏 Hoje vamos evoluir esse recurso, dando ao JARVIS a capacidade de criar playlists inteligentes, lembrar preferĂȘncias musicais e atĂ© tocar sons aleatĂłrios de acordo com o seu humor ou desejo do momento.

    É aqui que o nosso assistente começa a ganhar personalidade, aprendendo o que gostamos de ouvir e se tornando, pouco a pouco, um DJ pessoal no estilo Stark Industries. 🎧

    🧠 Como o JARVIS entende o que vocĂȘ quer ouvir

    Antes de irmos ao código, vale entender a lógica. O JARVIS vai escutar seu comando (“Jarvis, toque minha playlist de treino”), identificar palavras-chave e decidir o que fazer com base nelas. E para isso, vamos usar:

    • speech_recognition → para converter voz em texto;
    • pyttsx3 → para dar voz ao Jarvis;
    • json → para guardar suas preferĂȘncias musicais (memĂłria local);
    • webbrowser → para abrir o YouTube diretamente na busca da mĂșsica ou playlist;
    • random → para tocar mĂșsicas aleatĂłrias quando vocĂȘ pedir algo como “Jarvis, me surpreenda”.

    Ou seja, estamos unindo tudo o que jå aprendemos em artigos anteriores, fala, escuta, memória e integração web, em uma só funcionalidade.

    🐍 Parte 1 – Criando o arquivo de memória de playlists

    Antes de tudo, vamos permitir que o JARVIS lembre suas playlists. Assim, se vocĂȘ disser uma vez “Jarvis, salvar playlist de treino”, ele vai guardar e, da prĂłxima vez, tocar automaticamente sem precisar perguntar.

    import json
    
    arquivo_playlists = "playlists_jarvis.json"
    
    def salvar_playlist(nome, link):
      try:
          with open(arquivo_playlists, "r") as f:
              playlists = json.load(f)
      except FileNotFoundError:
          playlists = {}
    
      playlists[nome.lower()] = link
    
      with open(arquivo_playlists, "w") as f:
          json.dump(playlists, f)
    
    def obter_playlist(nome):
      try:
          with open(arquivo_playlists, "r") as f:
              playlists = json.load(f)
          return playlists.get(nome.lower(), None)
      except FileNotFoundError:
          return None
    

    📘 Como funciona: O cĂłdigo cria um arquivo playlists_jarvis.json, que Ă© basicamente a “memĂłria musical” do nosso assistente.

    • Quando vocĂȘ salva uma playlist, o Jarvis grava o nome e o link no formato nome: link.
    • Quando pede para tocar, ele procura o nome no arquivo e abre o link salvo.

    Esse trecho cria uma “memĂłria musical” simples para o Jarvis usando um arquivo JSON — pense nele como um caderno onde o assistente anota o nome da sua playlist e o link correspondente. Logo no começo, import json traz a ferramenta que permite transformar dados do Python em texto JSON e vice-versa. Em seguida, arquivo_playlists = "playlists_jarvis.json" define o nome do arquivo onde essas anotaçÔes serĂŁo guardadas; se ainda nĂŁo existir, serĂĄ criado quando salvarmos a primeira playlist.

    A função salvar_playlist(nome, link) Ă© quem faz a anotação. Primeiro ela tenta abrir o arquivo em modo de leitura e carregar o conteĂșdo com json.load. Se o arquivo nĂŁo existir ainda, cai no except FileNotFoundError e começa com um dicionĂĄrio vazio, como um caderno em branco. Depois, registra a playlist usando a chave em minĂșsculas (nome.lower()) para evitar diferenças entre “Treino”, “treino” ou “TREINO”. Por fim, reabre o arquivo em modo de escrita e salva o dicionĂĄrio atualizado com json.dump. Isso garante persistĂȘncia: mesmo que vocĂȘ feche o programa, as playlists continuam lĂĄ no disco.

    JĂĄ a função obter_playlist(nome) Ă© a parte da “consulta”. Ela tenta abrir e ler o mesmo arquivo JSON, transformando o conteĂșdo em um dicionĂĄrio. DaĂ­, procura a chave correspondente ao nome pedido (tambĂ©m em minĂșsculas) e retorna o link se encontrar; se nĂŁo houver essa entrada, devolve None. Caso o arquivo inteiro nĂŁo exista (porque nada foi salvo ainda), ela tambĂ©m retorna None, indicando educadamente que nĂŁo hĂĄ playlists registradas.

    Em resumo, salvar_playlist escreve (ou atualiza) uma entrada “nome → link” no arquivo JSON, e obter_playlist lĂȘ esse arquivo para devolver o link associado ao nome informado. É uma solução leve, fĂĄcil de entender e suficiente para dar ao Jarvis a capacidade de lembrar suas playlists favoritas entre uma execução e outra.

    🎧 Parte 2 – Fazendo o Jarvis tocar e aprender

    Agora vem a parte divertida! Vamos integrar o reconhecimento de voz, a voz do Jarvis e a reprodução no navegador.

    import speech_recognition as sr
    import pyttsx3
    import webbrowser
    import random
    import json
    
    engine = pyttsx3.init()
    r = sr.Recognizer()
    arquivo_playlists = "playlists_jarvis.json"
    
    def falar(texto):
      engine.say(texto)
      engine.runAndWait()
    
    def salvar_playlist(nome, link):
      try:
          with open(arquivo_playlists, "r") as f:
              playlists = json.load(f)
      except FileNotFoundError:
          playlists = {}
      playlists[nome.lower()] = link
      with open(arquivo_playlists, "w") as f:
          json.dump(playlists, f)
    
    def obter_playlist(nome):
      try:
          with open(arquivo_playlists, "r") as f:
              playlists = json.load(f)
          return playlists.get(nome.lower(), None)
      except FileNotFoundError:
          return None
    
    def tocar_playlist(nome):
      link = obter_playlist(nome)
      if link:
          falar(f"Tocando sua playlist {nome}, senhor.")
          webbrowser.open(link)
      else:
          falar("NĂŁo encontrei essa playlist, senhor.")
    
    with sr.Microphone() as source:
      falar("Estou ouvindo, senhor. O que deseja ouvir?")
      audio = r.listen(source)
    
    try:
      comando = r.recognize_google(audio, language="pt-BR").lower()
    
      if "salvar playlist" in comando:
          falar("Qual o nome da playlist?")
          with sr.Microphone() as source:
              audio = r.listen(source)
          nome = r.recognize_google(audio, language="pt-BR")
    
          falar("Qual o link da playlist, senhor?")
          link = input("Cole aqui o link do YouTube: ")
          salvar_playlist(nome, link)
          falar(f"Playlist {nome} salva com sucesso.")
    
      elif "tocar playlist" in comando:
          nome = comando.replace("tocar playlist", "").strip()
          tocar_playlist(nome)
    
      elif "me surpreenda" in comando:
          opcoes = [
              "https://www.youtube.com/watch?v=LYU-8IFcDPw",
              "https://www.youtube.com/watch?v=5abamRO41fE",
              "https://www.youtube.com/watch?v=RUi54JTgL5s",
          ]
          musica = random.choice(opcoes)
          falar("Deixe comigo, senhor. Escolhi algo especial.")
          webbrowser.open(musica)
    
      else:
          falar("Desculpe, nĂŁo entendi o comando musical, senhor.")
    
    except:
      falar("NĂŁo consegui entender o que disse, senhor.")
    

    đŸŽ” Como o cĂłdigo funciona:

    1. O Jarvis ouve o comando.
    2. Se vocĂȘ disser “salvar playlist de treino”, ele pede o link e guarda.
    3. Se disser “tocar playlist de treino”, ele busca no arquivo e abre no YouTube.
    4. Se disser “me surpreenda”, ele escolhe uma mĂșsica aleatĂłria e toca.

    image

    Primeiro, ele importa as “peças” que vamos usar. speech_recognition Ă© o ouvido do Jarvis: capta sua voz e transforma em texto. pyttsx3 Ă© a boca: transforma texto em fala para o Jarvis responder. webbrowser abre o navegador no endereço que a gente mandar (no caso, links do YouTube). random serve para escolher algo aleatoriamente quando pedirmos “me surpreenda”. E json Ă© o formato de arquivo onde o Jarvis guarda e lĂȘ as playlists salvas (uma memĂłria simples em disco).

    Logo em seguida, o cĂłdigo inicializa a voz (pyttsx3.init()) e o reconhecedor de fala (sr.Recognizer()). TambĂ©m define o nome do arquivo onde as playlists ficam guardadas: playlists_jarvis.json. Pense nesse arquivo como um “caderninho” onde o Jarvis anota o nome da playlist e o link correspondente.

    A função falar(texto) Ă© direta: ela pega uma frase e faz o computador “falar” em voz alta. Toda vez que o Jarvis precisa responder algo, passamos a frase para essa função.

    Depois vĂȘm as funçÔes de memĂłria das playlists. salvar_playlist(nome, link) tenta abrir o arquivo playlists_jarvis.json. Se o arquivo ainda nĂŁo existe, ele cria um dicionĂĄrio vazio. Em seguida, registra (ou atualiza) a entrada nome -> link e salva de volta no arquivo. Isso permite que, no futuro, ao pedir “tocar playlist X”, o Jarvis saiba qual link abrir. JĂĄ obter_playlist(nome) faz o contrĂĄrio: abre o arquivo (se existir), carrega as playlists e procura pelo nome pedido. Se encontrar, devolve o link; se nĂŁo, retorna None.

    A função tocar_playlist(nome) junta tudo isso: ela chama obter_playlist para descobrir o link daquela playlist. Se existir, o Jarvis avisa (“Tocando sua playlist
”) e abre o link no navegador com webbrowser.open(link). Se não existir, ele informa que não encontrou.

    A partir daĂ­, começa a interação por voz. O bloco with sr.Microphone() as source: liga o microfone, o Jarvis diz “Estou ouvindo
” e captura o que vocĂȘ falou. O ĂĄudio capturado vai para o reconhecedor, que tenta transformar fala em texto com recognize_google(..., language="pt-BR"). Esse texto Ă© guardado na variĂĄvel comando, jĂĄ em letras minĂșsculas para facilitar as comparaçÔes.

    O “mini-cĂ©rebro” estĂĄ nos ifs. Se o comando contiver “salvar playlist”, o Jarvis pergunta o nome da playlist (por voz, e escuta pelo microfone) e depois pede o link (aqui, por simplicidade, vocĂȘ cola no terminal). Com nome e link em mĂŁos, ele chama salvar_playlist e confirma que deu tudo certo. Se o comando for “tocar playlist 
”, ele extrai o nome que veio depois da frase (ex.: “tocar playlist treino”), chama tocar_playlist(nome) e abre a playlist no navegador. Se vocĂȘ disser “me surpreenda”, o Jarvis escolhe aleatoriamente um link de uma lista prĂ©-definida (aqui coloquei trĂȘs exemplos) e abre no navegador — antes, ele avisa com uma fala estilosa.

    Caso o que vocĂȘ disse nĂŁo combine com nenhum desses caminhos (“salvar playlist”, “tocar playlist”, “me surpreenda”), o Jarvis responde que nĂŁo entendeu o comando musical. E, se acontecer algum erro ao reconhecer a fala (por ruĂ­do, conexĂŁo do serviço de reconhecimento, etc.), o except final cuida de responder de forma educada (“NĂŁo consegui entender
”), em vez de deixar o programa quebrar.

    Resumindo: o script escuta o que vocĂȘ diz, entende se vocĂȘ quer salvar uma nova playlist (nome + link), tocar uma playlist jĂĄ salva pelo nome, ou te surpreender com uma mĂșsica aleatĂłria. Ele guarda tudo em um arquivo JSON simples (como um dicionĂĄrio de “nome → link”), fala com vocĂȘ usando voz sintetizada e abre o YouTube automaticamente quando Ă© hora de tocar. É uma base enxuta, fĂĄcil de expandir: vocĂȘ pode trocar as falas do Jarvis, aumentar a lista de surpresas, ou atĂ© usar um reconhecimento melhor de frases para entender comandos mais naturais.

    đŸŠžâ™‚ïž De volta ao laboratĂłrio do Stark

    Imagine o Tony Stark trabalhando no laboratório, projetando uma nova armadura Mark 90, quando de repente decide ouvir algo para entrar no ritmo. Ele não tira os olhos do holograma, não digita nada — apenas fala:

    “Jarvis, toque minha playlist de testes.”

    Em segundos, a mĂșsica começa a tocar. Essa Ă© a essĂȘncia do nosso projeto: automatizar a criatividade, dar liberdade ao desenvolvedor e fazer com que o cĂłdigo trabalhe por nĂłs, nĂŁo o contrĂĄrio.

    Assim como o Jarvis original, o nosso assistente começa a entender o contexto, reagir e se moldar Ă  rotina do seu criador — e Ă© isso que transforma um script em algo vivo.

    🔼 Concluindo...

    Hoje vocĂȘ aprendeu a dar ao JARVIS o poder de tocar mĂșsicas personalizadas, criar playlists e atĂ© te surpreender com uma seleção aleatĂłria.

    • ✅ Aprendemos a criar uma memĂłria musical com JSON.
    • ✅ Vimos como salvar e reproduzir playlists por comando de voz.
    • ✅ E ainda adicionamos um toque de aleatoriedade com o comando “me surpreenda”.

    Nos prĂłximos artigos, vamos continuar evoluindo nosso assistente: đŸŽ™ïž ensinaremos o Jarvis a transcrever conversas completas em texto, 💬 criar um modo conversa contĂ­nua, e 🔒 adicionar um modo privado, onde ele para de ouvir suas falas.

    👉 Curtiu esse artigo? Me siga no GitHub e no LinkedIn para acompanhar cada passo do Projeto CodeVersePython2025 e construir o seu próprio Jarvis.

    Porque o futuro nĂŁo Ă© esperar a tecnologia chegar. ⚡ É a gente que cria ele hoje.

    image

    Compartilhe
    ComentĂĄrios (1)

    JR

    Jonathan Rodriguez - 25/10/2025 18:53

    Sensacional