mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-12-08 20:38:47 +00:00
Add examples of .pd_lua files
Added examples of .pd_lua files, which create Lua objects that are interpreted by PureData.
This commit is contained in:
137
samples/Lua/vidya-file-modder.pd_lua
Normal file
137
samples/Lua/vidya-file-modder.pd_lua
Normal file
@@ -0,0 +1,137 @@
|
||||
|
||||
local FileModder = pd.Class:new():register("vidya-file-modder")
|
||||
|
||||
function FileModder:initialize(sel, atoms)
|
||||
|
||||
-- 1. Object-triggering bang
|
||||
-- 2. Incoming single data bytes from [binfile]
|
||||
-- 3. Total bytes in file, from [route buflength]
|
||||
-- 4. Glitch type
|
||||
-- 5. Glitch point
|
||||
-- 6. Number of times to glitch a file
|
||||
-- 7. Toggle for a randomized number of glitches within the bounds of (6)
|
||||
-- 8. Active filename
|
||||
self.inlets = 8
|
||||
|
||||
-- 1. To [binfile] inlet - bang(get next byte), clear(clear the buffer), FLOAT(write a byte to buffer), write(write to file)
|
||||
self.outlets = 1
|
||||
|
||||
-- Currently active file's namedata
|
||||
self.filedata = {
|
||||
"default-filename",
|
||||
0,
|
||||
}
|
||||
|
||||
-- Glitch type (pattern, random, or splice)
|
||||
self.glitchtype = "random"
|
||||
|
||||
-- Minimum glitch point in image data
|
||||
self.glitchpoint = 500
|
||||
|
||||
-- Number of times to repeat random glitches on a given file
|
||||
self.randrepeat = 1
|
||||
|
||||
-- Toggles whether the number of repeating glitches should be random, within the bounds of 1 to self.randrepeat
|
||||
self.randtoggle = "concrete"
|
||||
|
||||
-- Hold all bytes, which are converted to ints in the 0-255 range
|
||||
self.bytebuffer = {}
|
||||
|
||||
-- Buffer length of currently active file
|
||||
self.buflength = 0
|
||||
|
||||
return true
|
||||
|
||||
end
|
||||
|
||||
function FileModder:in_1_bang()
|
||||
|
||||
for i = 1, self.buflength do
|
||||
self:outlet(1, "bang", {})
|
||||
end
|
||||
|
||||
self:outlet(1, "clear", {})
|
||||
|
||||
if self.glitchtype == "pattern" then
|
||||
|
||||
local plen = math.random(2, 1000)
|
||||
local patbuffer = {}
|
||||
|
||||
for i = 1, plen do
|
||||
table.insert(patbuffer, math.random(1, 254))
|
||||
end
|
||||
|
||||
for i = self.glitchpoint, self.buflength do
|
||||
self.bytebuffer[i] = patbuffer[((i - 1) % #patbuffer) + 1]
|
||||
end
|
||||
|
||||
elseif self.glitchtype == "random" then
|
||||
|
||||
local randlimit = 0
|
||||
if self.randtoggle == "random" then
|
||||
randlimit = math.random(1, self.randrepeat)
|
||||
else
|
||||
randlimit = self.randrepeat
|
||||
end
|
||||
|
||||
for i = 1, randlimit do
|
||||
self.bytebuffer[math.random(self.glitchpoint, self.buflength)] = math.random(1, 244)
|
||||
end
|
||||
|
||||
elseif self.glitchtype == "splice" then
|
||||
|
||||
local sloc = math.random(self.glitchpoint, self.buflength)
|
||||
local schunksize = math.random(1, self.buflength - sloc)
|
||||
local splicebuffer = {}
|
||||
for i = 1, schunksize do
|
||||
table.insert(splicebuffer, table.remove(self.bytebuffer, sloc))
|
||||
end
|
||||
|
||||
local insertpoint = math.random(self.glitchpoint, #self.bytebuffer)
|
||||
for _, v in ipairs(splicebuffer) do
|
||||
table.insert(self.bytebuffer, insertpoint, v)
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
for _, v in ipairs(self.bytebuffer) do
|
||||
self:outlet(1, "float", {v})
|
||||
end
|
||||
|
||||
local outname = self.filedata[1] .. "-glitch" .. self.filedata[2] .. ".jpeg"
|
||||
self:outlet(1, "write", {outname})
|
||||
pd.post("New glitched image: " .. outname)
|
||||
|
||||
self:outlet(1, "clear", {})
|
||||
|
||||
self.bytebuffer = {}
|
||||
|
||||
end
|
||||
|
||||
function FileModder:in_2_float(f)
|
||||
table.insert(self.bytebuffer, f)
|
||||
end
|
||||
|
||||
function FileModder:in_3_list(f)
|
||||
self.buflength = f[1] + 1 -- Shift from 0-indexed to 1-indexed
|
||||
end
|
||||
|
||||
function FileModder:in_4_list(d)
|
||||
self.glitchtype = d[1]
|
||||
end
|
||||
|
||||
function FileModder:in_5_float(f)
|
||||
self.glitchpoint = f
|
||||
end
|
||||
|
||||
function FileModder:in_6_float(f)
|
||||
self.randrepeat = f
|
||||
end
|
||||
|
||||
function FileModder:in_7_list(d)
|
||||
self.randtoggle = d[1]
|
||||
end
|
||||
|
||||
function FileModder:in_8_list(d)
|
||||
self.filedata = {d[1], d[2]}
|
||||
end
|
||||
Reference in New Issue
Block a user