Added "-wait" parameter

This commit is contained in:
Casey 2024-09-15 03:08:14 +03:00
parent 1ba2cf9aed
commit 330bfa8f80
Signed by: hkc
GPG Key ID: F0F6CFE11CDB0960
1 changed files with 18 additions and 5 deletions

View File

@ -11,6 +11,7 @@ local speakers = {
local delay = 0 local delay = 0
local loading_concurrency = 8 local loading_concurrency = 8
local buffer_size = 8192 local buffer_size = 8192
local wait_until_input = false
while args[1] ~= nil and string.sub(args[1], 1, 1) == "-" do while args[1] ~= nil and string.sub(args[1], 1, 1) == "-" do
local k = table.remove(args, 1):sub(2) local k = table.remove(args, 1):sub(2)
@ -26,6 +27,8 @@ while args[1] ~= nil and string.sub(args[1], 1, 1) == "-" do
loading_concurrency = tonumber(table.remove(args, 1)) loading_concurrency = tonumber(table.remove(args, 1))
elseif k == "b" or k == "buffer-size" then elseif k == "b" or k == "buffer-size" then
buffer_size = tonumber(table.remove(args, 1)) buffer_size = tonumber(table.remove(args, 1))
elseif k == "w" or k == "wait" then
wait_until_input = true
end end
end end
@ -46,7 +49,7 @@ end
print(string.format("Using monitor %s", peripheral.getName(monitor))) print(string.format("Using monitor %s", peripheral.getName(monitor)))
if speakers.r then if speakers.r then
print("Stereo sound: L=%s R=%s", peripheral.getName(speakers.l), peripheral.getName(speakers.r)) print(string.format("Stereo sound: L=%s R=%s", peripheral.getName(speakers.l), peripheral.getName(speakers.r)))
else else
print("Mono sound: " .. peripheral.getName(speakers.l)) print("Mono sound: " .. peripheral.getName(speakers.l))
end end
@ -158,11 +161,19 @@ local playback_locked = true
local playback_done = false local playback_done = false
table.insert(subthreads, function() table.insert(subthreads, function()
while #frames < 60 or #audio_frames.l < n_audio_samples do local tmr = os.startTimer(0.25)
while true do
local ev = { os.pullEvent() }
if ev[1] == "key" and ev[2] == keys.enter then
break
end
term.setCursorPos(1, ty - 1) term.setCursorPos(1, ty - 1)
term.setBackgroundColor(colors.gray) term.setBackgroundColor(colors.gray)
term.clearLine() term.clearLine()
term.write(string.format("Waiting for frames... (V:%d, A:%d)", #frames, #audio_frames.l)) term.write(string.format("Waiting for frames... (V:%d, A:%d) [ENTER to skip]", #frames, #audio_frames.l))
if #frames < 60 and #audio_frames.l < n_audio_samples and not wait_until_input then
break
end
os.sleep(0.25) os.sleep(0.25)
end end
playback_locked = false playback_locked = false
@ -210,10 +221,12 @@ table.insert(subthreads, function()
while not playback_done do while not playback_done do
local frame = math.floor((os.clock() - start_t) / math.max(0.05, delay)) local frame = math.floor((os.clock() - start_t) / math.max(0.05, delay))
term.setCursorPos(1, ty - 1) term.setCursorPos(1, ty - 1)
term.setBackgroundColor(colors.gray) term.setBackgroundColor(frame >= #frames and colors.red or colors.gray)
term.clearLine() term.clearLine()
term.write(string.format("Playing frame: %d/%d", frame + 1, #frames)) term.write(string.format("Playing frame: %d/%d", frame + 1, #frames))
if frames[frame] then
ccpi.draw(frames[frame + 1], 1, 1, monitor) ccpi.draw(frames[frame + 1], 1, 1, monitor)
end
os.sleep(delay) os.sleep(delay)
end end
end) end)