gundami

Untitled

Nov 5th, 2025 (edited)
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.55 KB | None | 0 0
  1. -- client.lua
  2. -- Receives TTS text and plays on all connected speakers
  3.  
  4. local modemSide = "top"
  5. local decoder = require("cc.audio.dfpwm").make_decoder()
  6.  
  7. rednet.open(modemSide)
  8.  
  9. -- Get all connected speakers correctly
  10. local speakers = {}
  11. for _, side in ipairs(peripheral.getNames()) do
  12. if peripheral.getType(side) == "speaker" then
  13. table.insert(speakers, peripheral.wrap(side))
  14. end
  15. end
  16.  
  17. if #speakers == 0 then
  18. error("No speakers found!")
  19. end
  20.  
  21. print("Found " .. #speakers .. " speaker(s). Waiting for TTS text...")
  22.  
  23. while true do
  24. local senderID, message = rednet.receive()
  25.  
  26. if type(message) == "table" and message.type == "tts" then
  27. print("Received TTS text: " .. message.text)
  28.  
  29. local url = "https://music.madefor.cc/tts?text=" .. textutils.urlEncode(message.text)
  30. local response, err = http.get { url = url, binary = true }
  31. if not response then
  32. print("Failed to fetch TTS: " .. err)
  33. else
  34. while true do
  35. local chunk = response.read(16 * 1024)
  36. if not chunk then break end
  37.  
  38. local buffer = decoder(chunk)
  39.  
  40. -- Play buffer on all speakers
  41. for _, speaker in ipairs(speakers) do
  42. while not speaker.playAudio(buffer) do
  43. os.pullEvent("speaker_audio_empty")
  44. end
  45. end
  46. end
  47. response.close()
  48. print("Playback finished on all speakers.")
  49. end
  50. end
  51. end
  52.  
Advertisement
Add Comment
Please, Sign In to add comment