Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- client.lua
- -- Receives TTS text and plays on all connected speakers
- local modemSide = "top"
- local decoder = require("cc.audio.dfpwm").make_decoder()
- rednet.open(modemSide)
- -- Get all connected speakers correctly
- local speakers = {}
- for _, side in ipairs(peripheral.getNames()) do
- if peripheral.getType(side) == "speaker" then
- table.insert(speakers, peripheral.wrap(side))
- end
- end
- if #speakers == 0 then
- error("No speakers found!")
- end
- print("Found " .. #speakers .. " speaker(s). Waiting for TTS text...")
- while true do
- local senderID, message = rednet.receive()
- if type(message) == "table" and message.type == "tts" then
- print("Received TTS text: " .. message.text)
- local url = "https://music.madefor.cc/tts?text=" .. textutils.urlEncode(message.text)
- local response, err = http.get { url = url, binary = true }
- if not response then
- print("Failed to fetch TTS: " .. err)
- else
- while true do
- local chunk = response.read(16 * 1024)
- if not chunk then break end
- local buffer = decoder(chunk)
- -- Play buffer on all speakers
- for _, speaker in ipairs(speakers) do
- while not speaker.playAudio(buffer) do
- os.pullEvent("speaker_audio_empty")
- end
- end
- end
- response.close()
- print("Playback finished on all speakers.")
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment