From e77752efaea98a22fc7e34358ecb8e8cfe067e10 Mon Sep 17 00:00:00 2001 From: itzmarkoni Date: Fri, 12 Dec 2025 15:52:18 -0500 Subject: [PATCH] Added notificaiton sound --- consumer/main.lua | 5 +++- kernel.lua | 13 ++++++++- programs/chat.lua | 2 ++ sounds/notification.dfpwm | Bin 0 -> 2856 bytes speaker-driver.lua | 56 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 sounds/notification.dfpwm create mode 100644 speaker-driver.lua diff --git a/consumer/main.lua b/consumer/main.lua index f73a86f..b453460 100644 --- a/consumer/main.lua +++ b/consumer/main.lua @@ -4,11 +4,14 @@ local monitor = kernel.addDriver("monitor-driver") local data = kernel.addDriver("disk-driver") local chat = kernel.addProgram("chat") local gps = kernel.addProgram("gps") +local speaker = kernel.addProgram("speaker-driver") + local function run() monitor.initialize() data.initialize() - + speaker.initialize() + monitor.writeLine("Starting system...") monitor.writeLine("System started successfully!") computerName = data.getRead("computer-name") diff --git a/kernel.lua b/kernel.lua index d339928..dcbc6dd 100644 --- a/kernel.lua +++ b/kernel.lua @@ -30,6 +30,17 @@ local function addProgram(fileName) return require(fileName) end +local function addSound(fileName) + local extension = ".dfpwm" + local fullFile = fileName .. extension + shell.execute("rm", fullFile) + local baseRoute = "https://git.astrocore.space/root/nova-corp/raw/branch/main/" + shell.execute("wget", baseRoute .. "sounds" .. "/" .. fullFile) + sleep(2) + return require(fileName) +end + + addDriver("task-manager") -return { addDriver = addDriver, addFolderDriver = addFolderDriver, addProgram = addProgram } \ No newline at end of file +return { addDriver = addDriver, addFolderDriver = addFolderDriver, addProgram = addProgram, addSound = addSound } \ No newline at end of file diff --git a/programs/chat.lua b/programs/chat.lua index 24f7b62..768b2ab 100644 --- a/programs/chat.lua +++ b/programs/chat.lua @@ -1,5 +1,6 @@ local modem = peripheral.find("modem") local PORT = 1 +local speaker = require("speaker") local function start() if modem then @@ -30,6 +31,7 @@ local function receiveLoop() term.setCursorPos(1, y) term.clearLine() print("Received: " .. tostring(message)) + speaker.play("notification") write("> ") end end diff --git a/sounds/notification.dfpwm b/sounds/notification.dfpwm new file mode 100644 index 0000000000000000000000000000000000000000..48f4f99b54b5ba2f2392dc36ac9e74e6985e642d GIT binary patch literal 2856 zcmYjSK}aK68ZO0wxTi#zdpbmDE0s%h?iw(vZ-{S?DyePdy$)?P*-d^l8i{ z4YQ}+!3>l4s&=4~iZDTQ-m3Bvjm=u5b00_o3$q0)TKl~hwYxy8-uM6i_kaKYzHS|Z zSeB8XmL_dcB2mL2#7NkNWNX@zO+;Iy#7dt_x*;u6jU=dJNw%R8LuwF7cf<`_T%>7g zEu9<0F)W!T)*GNC=?jv!4JWbD(4<&Hit7aAM5GD5n~vK=YFL+=Ml>yfppGN4L^~0q z28tw_Xc!i8E{UNfP-8=$2q_REU4R>y+%QCHNb5EepQa?SNXgPx15Fu541inf4GnLt zX%U4QiF47mL`(_9SUT4GfYgWJG_xE875Otyx3Fuvswv^BM6x`BokXk zx>C%P;*^oGX~o5cVMsBXbj5QEE@4ArG9%qsiZw(teSz5wF=jWh6=-e3Dzc9KY&9?g z+GtFS#on6XEK!1;8i@_uXB>&^xLmepLNv*4I-rMci8^8&)u@LX8X^WHX{up)7#d5v z=%T;aV4|sk4M`V7#;p-}WzlA~G8`?9ML`5yfZMekd21bxy-ce;I1rDl;xP$+iB(xO zuX9wbRid?wUUXa8g|8!5tEb#o4#P&D0EAZRg>Yl@|oxDx^q)AGs!aX#)F-FH5Cjk z)UQ4kt8)vwH}>yF+1Y8~O<2i!`<-@P4Ta{`$aTvU*A#c)55}%IH6?^gm6mt2ccROY zWOQEbwbWX)x9{KhAB*$Tf-rTIX%9N%A}yDKM-_5iP}gL$E{mu6~gSI#&1cjth9CSK6d37!nT9fM}7jyT~dElzE0^&b0?m<6Wji9<* z5!I9SxHIO`Fng+fOa*({!pN8TCc6vDzvDXNaW@$QLQ4L&(6 zp|{)iM*a5ght^Ewjj)nZhWq38t}8|kOQqvT@4D3=jrPWWY{$L}pjqa(@$Pv0LpBl& zMgFn+qL+J_cehX67Aem>NkyOj>)TFy=d@joB6R_`nbXaymZ|rY1xQ&V1$WdRW@)9e zTCOOnsuy|%-ON(8s+6N^xbs%A-O8#9wc}%@MshsfgCVMlyiikm#5AvRs#?#;RgzJ4 zQa}P;Bva4etm-ffEUbdKMo1P`dUO?oxw#$@wa25#Rn0>EIMeHUU(JRCn?v90zYi{# zE=Q;OyWmmZ-+hMLD*b-vkF&E=xR$mqCzYY^{}b?=rjL)g>A+^rZNVJFyMvR6AP6r2 zKcAmoiS}B$IA8z$?yfZ_2+QOK+3%LaeSe^a0x6~F<`&lK!`o98@K4vif2KwPN10-t%5r_U zw^I!YVWsbnT{#&%B1M;!kICu5t9e04c1H)D{FhGx3+C{OM9T$u{V$*o(Uf}{kygrnhw>?b}_d0^gkcl&sT(Cv^e&**PjHw&$M^)e+_J2?{!*% zU_`#XJv)(SlE=T?j$W_h-(=r?pA1Kj{&)K7!=K*%@U-Bawl|;zdZLGaU)>$F`*JW9 zA#VRlk!7<5Hp%e_?Pa)m$uEvF*2Ts}`phL9eq%CfA!gohDU zs0rTy&h_M~QYU8Xid4!9DVSOK5SBxY$c&A@0W}5Qfq|;bZE77Bqh_JX{_}z>ncvt` z6#-{;lBtm{%JDE~bMxg`rIya#F-ec`;~e69W9P=2d`MG1r6-kl{2r^5lDJ5ewuv z=VFbJ%!;xq&8UoQLd%MIr+X51=HuXfFYFWX0?Q@5eK_ z7s6XSh99Ov8f(F`IoaQE;+?rrj!yuju_6}cC|8#I@!`l?v-srw4Nf>rMyD1i0V; literal 0 HcmV?d00001 diff --git a/speaker-driver.lua b/speaker-driver.lua new file mode 100644 index 0000000..644fdda --- /dev/null +++ b/speaker-driver.lua @@ -0,0 +1,56 @@ +local speaker = peripheral.find("speaker") +local dfpwm = require("cc.audio.dfpwm") +local kernel = require("kernel") + + + +local sounds = { + {name = "notification", file = "notification.dfpwm"} +} + +local function initialize() + + kernel.addSound("notification") + + speaker = peripheral.find("speaker") + if not speaker then + print("Warning: No speaker attached.") + return false + end + return true +end + +local function play(name) + if not speaker then return false end + + local filePath + for _, sound in ipairs(sounds) do + if sound.name == name then + filePath = sound.file + break + end + end + + if not filePath then + print("Sound '" .. name .. "' not defined.") + return false + end + + if not fs.exists(filePath) then + print("File '" .. filePath .. "' not found.") + return false + end + + -- Create a new decoder for this playback to reset state + local decoder = dfpwm.make_decoder() + + for chunk in io.lines(filePath, 16 * 1024) do + local buffer = decoder(chunk) + while not speaker.playAudio(buffer) do + os.pullEvent("speaker_audio_empty") + end + end + return true +end + +return { initialize = initialize, play = play }