From e3970ac4ce864e3f9a5330199050fd2351e08e7a Mon Sep 17 00:00:00 2001 From: itzmarkoni Date: Mon, 16 Jun 2025 20:20:07 -0400 Subject: [PATCH] updated --- speaker_driver.lua | 46 ++++++++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/speaker_driver.lua b/speaker_driver.lua index 78d4ee5..6f27ad9 100644 --- a/speaker_driver.lua +++ b/speaker_driver.lua @@ -30,32 +30,38 @@ end -- end -- end -- end -local function playSpeaker(speaker, input) + +local function playFullFile(speaker, fileName) local decoder = require("cc.audio.dfpwm").make_decoder() - local decoded = decoder(input) - while not speaker.playAudio(decoded, 3) do - os.pullEvent("speaker_audio_empty") + local file = fs.open(fileName, "rb") + + if not file then + print("Failed to open file: " .. fileName) + return end + + while true do + local chunk = file.read(16 * 1024) + if not chunk then break end + + local decoded = decoder(chunk) + while not speaker.playAudio(decoded, 3) do + os.pullEvent("speaker_audio_empty") + end + end + + file.close() end local function playSound(speakers, fileName) - local fileStream = getFileName(fileName) - local values = io.lines(fileStream, 16 * 1024) - - for input in values do - print("playing audio...") - - -- Create parallel tasks, each with its own decoder instance - local tasks = {} - for _, speaker in ipairs(speakers) do - table.insert(tasks, function() - playSpeaker(speaker, input) - end) - end - - -- Execute all in parallel - parallel.waitForAll(table.unpack(tasks)) + local tasks = {} + for _, speaker in ipairs(speakers) do + table.insert(tasks, function() + playFullFile(speaker, fileName) + end) end + + parallel.waitForAll(table.unpack(tasks)) end