164 lines
4.2 KiB
Lua
164 lines
4.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(speakers, value)
|
|
local message = textutils.urlEncode(value)
|
|
local url = "https://music.madefor.cc/tts?text=" .. 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
|
|
-- local ttsRoute = "https://ttsmp3.com/makemp3_new.php"
|
|
-- local fileName = "tts.dfpwm"
|
|
-- 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()
|
|
-- response.close()
|
|
|
|
-- local responseData = textutils.unserialiseJSON(data, { parse_null = true })
|
|
-- local soundRequest = http.get({
|
|
-- url = responseData.URL,
|
|
-- binary = true
|
|
-- })
|
|
|
|
-- local soundData = soundRequest.readAll()
|
|
-- soundRequest.close()
|
|
|
|
-- local encodedData = encoder.encode(soundData)
|
|
|
|
-- local file = fs.open(fileName, "w")
|
|
-- file.write(encodedData)
|
|
-- file.close()
|
|
|
|
-- playSound(speakers, 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
|
|
} |