local dfpwm = require("cc.audio.dfpwm") local encoder = dfpwm.make_encoder() local decoder = dfpwm.make_decoder() local baseRoute = "https://git.astrocore.space/root/NovaCorpLLC/raw/branch/main/" local function getFileName(name) local extension = ".dfpwm" local fullFile = name .. extension return fullFile end local function playSound(speaker, fileName) local fileStream = getFileName(fileName) local values = io.lines(fileStream, 16 * 1024) for input in values do print("playing audo....") local decoded = decoder(input) while not speaker.playAudio(decoded) do os.pullEvent("speaker_audio_empty") end end end local function playControlRoomAlarm(speakers) playSound(speakers,"short_control_alarm") end local function playExternalAlarm(speakers) playSound(speakers,"external_alarm") end local function playInternalAlarm(speakers) playSound(speakers,"internal_alarm") end local function playTTSFile(speakers, value) local message = textutils.urlEncode(value) local voice = "&voice=en-gb-scotland" local url = "http://api.astrocore.space/TextToSpeech?message=" .. message local response, err = http.get { url = url, binary = true } if not response then error(err, 0) end while true do local chunk = response.read(16 * 1024) if not chunk then break end local buffer = decoder(chunk) while not speakers.playAudio(buffer) do os.pullEvent("speaker_audio_empty") end end end local function createSoundFile(fileName) local name = getFileName(fileName) local fullPath = baseRoute .. name shell.execute("rm", name) local response = http.request({ url = fullPath, method = "GET", binary = true }) local event, url, handle repeat event, url, handle = os.pullEvent() if event == "http_failure" and url == fullPath then print("HTTP request failed for: " .. url) print(event) return nil end if event == "http_success" then print("Waiting for response for " .. fileName) end until event == "http_success" and url == fullPath print("Recieved response!") local fileData = handle.readAll() local file = fs.open(name,"w") file.write(fileData) file.close() handle.close() end function addSoundFile(fileName) createSoundFile(fileName) end local function watch() end local function startup() local sounds = { { fileName = "short_control_alarm" }, { fileName = "external_alarm" }, { fileName = "internal_alarm" } } for i, item in ipairs(sounds) do addSoundFile(item.fileName) print("Added sound file: " .. item.fileName) end end local function shutdown() end local function report() end return { report = report, watch = watch, startup = startup, shutdown = shutdown, playControlRoomAlarm = playControlRoomAlarm, addSoundFile = addSoundFile, playExternalAlarm = playExternalAlarm, playInternalAlarm = playInternalAlarm, playTTSFile = playTTSFile }