Files
nova-corp/speaker_driver.lua

133 lines
3.2 KiB
Lua
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 randomFileName()
local name = ""
for i = 1, 12 do
name = name .. string.char(math.random(97, 122)) -- az
end
return name
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, 3) 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 url = "http://api.astrocore.space/api/TextToSpeech?message=" .. message
local response, err = http.get { url = url, binary = true }
local name = randomFileName()
local fileName = name .. ".dfpwm"
local fileData = response.readAll()
local file = fs.open(fileName,"w")
file.write(fileData)
file.close()
response.close()
playSound(speakers, name)
shell.execute("rm", fileName)
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
}