mirror of
				https://github.com/KevinMidboe/linguist.git
				synced 2025-10-29 17:50:22 +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:
		
							
								
								
									
										20
									
								
								samples/Lua/h-counter.pd_lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								samples/Lua/h-counter.pd_lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					-- A simple counting object that increments an internal counter whenever it receives a bang at its first inlet, or changes to whatever number it receives at its second inlet.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					local HelloCounter = pd.Class:new():register("h-counter")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function HelloCounter:initialize(sel, atoms)
 | 
				
			||||||
 | 
						self.inlets = 2
 | 
				
			||||||
 | 
						self.outlets = 1
 | 
				
			||||||
 | 
						self.num = 0
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function HelloCounter:in_1_bang()
 | 
				
			||||||
 | 
						self:outlet(1, "float", {self.num})
 | 
				
			||||||
 | 
						self.num = self.num + 1
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function HelloCounter:in_2_float(f)
 | 
				
			||||||
 | 
						self.num = f
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
							
								
								
									
										43
									
								
								samples/Lua/vidya-file-list-parser.pd_lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								samples/Lua/vidya-file-list-parser.pd_lua
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,43 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					local FileListParser = pd.Class:new():register("vidya-file-list-parser")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function FileListParser:initialize(sel, atoms)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						-- 1. Base filename
 | 
				
			||||||
 | 
						-- 2. File extension
 | 
				
			||||||
 | 
						-- 3. Number of files in batch
 | 
				
			||||||
 | 
						self.inlets = 3
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						-- 1. To [list trim]-[binfile]
 | 
				
			||||||
 | 
						-- 2. To [vidya-file-modder]'s filename variables
 | 
				
			||||||
 | 
						-- 3. Sends a bang to [vidya-file-modder], triggering the object's mechanisms
 | 
				
			||||||
 | 
						self.outlets = 3
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						-- File extension
 | 
				
			||||||
 | 
						self.extension = "jpg"
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						-- Number of the last file in the batch
 | 
				
			||||||
 | 
						self.batchlimit = 0
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function FileListParser:in_1_symbol(s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for i = 0, self.batchlimit do
 | 
				
			||||||
 | 
							self:outlet(2, "list", {s, i})
 | 
				
			||||||
 | 
							self:outlet(1, "read", {s .. i .. "." .. self.extension})
 | 
				
			||||||
 | 
							self:outlet(1, "info", {})
 | 
				
			||||||
 | 
							self:outlet(3, "bang", {})
 | 
				
			||||||
 | 
						end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function FileListParser:in_2_list(d)
 | 
				
			||||||
 | 
						self.extension = d[1]
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					function FileListParser:in_3_float(f)
 | 
				
			||||||
 | 
						self.batchlimit = f
 | 
				
			||||||
 | 
					end
 | 
				
			||||||
							
								
								
									
										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