Files
nova-corp/speaker_driver.lua
2025-06-15 22:24:33 -04:00

135 lines
3.2 KiB
Lua

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(value)
local ttsRoute = "https://ttsmp3.com/makemp3_new.php"
local fileName = "tts"
local encodedValue = textutils.urlEncode(value)
print("Encoded TTS value: " .. encodedValue)
local body = "msg=" .. encodedValue .. "&lang=Gwyneth&source=ttsmp3"
local headers = {
["Content-Type"] = "application/x-www-form-urlencoded"
}
print("Sending HTTP POST request")
local response = http.post({
url = ttsRoute,
method = "POST",
body = body,
headers = headers,
binary = false
})
print("HTTP POST request successful" )
local data = response.readAll()
print(data)
response.close()
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
}