Junk posts
More and more junk posts, and a real time wasting headache for @EEight
They are trying to generate backlinks to boost their Google SEO ranking, so don't click the links or they will be encouraged to spam the site even more, especially if there are web designers with this forum in their list of victims.
https://www.quora.com/How-can-I-generate-backlinks-through-Forum-Posting-Website
Maybe it is only a matter of time before bots hit on this forum, and then we will be searching through thousands of junk posts every day. The bots bypass "captchas" with ocr and with image recognition will probably get past the image captchas as well.
Probably a blacklist api will be the only tool that will help, but of course it will not catch new operators.
https://www.stopforumspam.com/ have a free api.
It is very obvious to regular users of the forum when a post is junk. Humans can spot the pattern much easier and more accurately than a program.
Of course they will get better at spoofing posts that look real, so we will miss a few.
Sometimes they copy / paste an old post and modify the links. We see that immediately and a quick search confirms.
This forum is lucky in that it has a good number of regular users, and it is a specialised technical site.
Maybe moderator rights should be extended to those that would like to help...... only for guest removal purposes...... and that could help @EEight with his workload?
Spammers could then be taken down very quickly.
David,
ofelia: deque class
i am not sure if it is the best solution, but it works now (with setFromPixels) it is a variable framebuffer and the example buffers the last 300 frames from a video.
;
if type(window) ~= "userdata" then;
window = ofWindow();
end;
;
local canvas = pdCanvas(this);
local clock = pdClock(this, "setup");
local videoPlayer = ofVideoPlayer();
local outputList = {};
local frames = {};
local images = {};
local N = 300;
for i = 1, N do;
images[i] = ofImage();
end;
;
function ofelia.new();
ofWindow.addListener("setup", this);
ofWindow.addListener("update", this);
ofWindow.addListener("draw", this);
ofWindow.addListener("exit", this);
window:setPosition(50, 100);
window:setSize(800 + 40, 600 + 40);
if type(window) ~= "userdata" then;
window = ofWindow();
end;
;
window:create();
if ofWindow.exists then;
clock:delay(0);
end;
end;
;
function ofelia.free();
window:destroy();
ofWindow.removeListener("setup", this);
ofWindow.removeListener("update", this);
ofWindow.removeListener("draw", this);
ofWindow.removeListener("exit", this);
end;
;
function ofelia.setup();
ofSetWindowTitle("Video Player");
ofBackground(0, 0, 0, 255);
end;
;
function ofelia.moviefile(path);
videoPlayer:load(path);
videoPlayer:setLoopState(OF_LOOP_NORMAL);
videoPlayer:setPaused(true);
end;
;
function ofelia.setSpeed(f);
videoPlayer:setSpeed(f / 100);
end;
;
function ofelia.play();
videoPlayer:play();
end;
;
function ofelia.stop();
videoPlayer:setFrame(0);
videoPlayer:setPaused(true);
end;
;
function ofelia.setPaused(f);
if f == 1 then pause = true;
else pause = false;
end;
videoPlayer:setPaused(pause);
end;
;
function ofelia.setFrame(f);
videoPlayer:setFrame(f);
end;
;
function ofelia.setPosition(f);
videoPlayer:setPosition(f);
end;
;
function ofelia.setVolume(f);
videoPlayer:setVolume(f / 100);
end;
;
local number = 0;
function ofelia.update();
videoPlayer:update();
if videoPlayer:isFrameNew() then;
number = (number + 1) % N;
print(number + 1);
images[number + 1]:setFromPixels(videoPlayer:getPixels());
table.insert(frames, 1, images[number + 1]);
if #frames > N then;
table.remove(frames);
end;
end;
outputList[1] = videoPlayer:getPosition();
outputList[2] = videoPlayer:getCurrentFrame();
outputList[3] = videoPlayer:getTotalNumFrames();
return outputList;
end;
;
function ofelia.draw();
videoPlayer:draw(420, 20, 400, 600);
if #frames == N then;
frames[ofelia.frame]:draw(20, 20, 400, 600);
end;
end;
;
function ofelia.exit();
videoPlayer:close();
for i = 1, N do;
images[i]:clear();
end;
end;
;
ofelia: deque class
@Cuinjune I tried to create a video frame table ("circular video buffer").
It is possible to read (draw) video from the table but somehow only the current frame is stored at every position of the table.
Here is an example patch. "frames" is the frame table. "N" is the table size. At the left is the texture from the table, at the right the original video. Do you know what I do wrong?
I also tried ofPixels instead of ofTexture with the same result.
And I tried to store several images (jpg´s) instead of video to the frame buffer, which does probably work because each image has its own source.
;
if type(window) ~= "userdata" then;
window = ofWindow();
end;
;
local canvas = pdCanvas(this);
local clock = pdClock(this, "setup");
local videoPlayer = ofVideoPlayer();
local outputList = {};
local frames = {};
local N = 150;
;
function ofelia.bang();
ofWindow.addListener("setup", this);
ofWindow.addListener("update", this);
ofWindow.addListener("draw", this);
ofWindow.addListener("exit", this);
window:setPosition(50, 100);
window:setSize(800 + 40, 600 + 40);
if type(window) ~= "userdata" then;
window = ofWindow();
end;
;
window:create();
if ofWindow.exists then;
clock:delay(0);
end;
end;
;
function ofelia.free();
window:destroy();
ofWindow.removeListener("setup", this);
ofWindow.removeListener("update", this);
ofWindow.removeListener("draw", this);
ofWindow.removeListener("exit", this);
end;
;
function ofelia.setup();
ofSetWindowTitle("Video Player");
ofBackground(0, 0, 0, 255);
end;
;
function ofelia.moviefile(path);
videoPlayer:load(path);
videoPlayer:setLoopState(OF_LOOP_NORMAL);
videoPlayer:setPaused(true);
end;
;
function ofelia.setSpeed(f);
videoPlayer:setSpeed(f / 100);
end;
;
function ofelia.play();
videoPlayer:play();
end;
;
function ofelia.stop();
videoPlayer:setFrame(0);
videoPlayer:setPaused(true);
end;
;
function ofelia.setPaused(f);
if f == 1 then pause = true;
else pause = false;
end;
videoPlayer:setPaused(pause);
end;
;
function ofelia.setFrame(f);
videoPlayer:setFrame(f);
end;
;
function ofelia.setPosition(f);
videoPlayer:setPosition(f);
end;
;
function ofelia.setVolume(f);
videoPlayer:setVolume(f / 100);
end;
;
function ofelia.update();
videoPlayer:update();
if videoPlayer:isFrameNew() then;
table.insert(frames, 1, videoPlayer:getTexture());
if #frames > N then;
table.remove(frames, N + 1);
end;
end;
end;
;
function ofelia.draw();
videoPlayer:draw(420, 20, 400, 600);
if #frames == N then;
frames[ofelia.frame]:draw(20, 20, 400, 600);
end;
outputList[1] = videoPlayer:getPosition();
outputList[2] = videoPlayer:getCurrentFrame();
outputList[3] = videoPlayer:getTotalNumFrames();
return outputList;
end;
;
function ofelia.exit();
videoPlayer:close();
end;
;
ofelia: deque class
Another ofelia related question...
In the book "Mastering Open Frameworks" is a nice radial slit scan example where they use the deque class for a circular (video) frame buffer:
https://github.com/firmread/ofDemystified/tree/master/05-Video-04-VideoSlitScan/src
"You will note that the buffer of frames is declared here as deque<ofPixels> frames.
Class deque is C++ Standard Template Library container, holding items of any class. In our case, such a class is ofPixels. You can think of frames as a dynamic array, which can change its size during runtime. It provides an indexed access to any item such as frames[i], and most importantly, it efficiently adds and removes items at its ends."
My question is, because I would like to use such a frame buffer (not for a slit scan effect but for a video delay), if and how it is possible to use the deque class with ofelia, or if there is a better (another) way to create such a frame buffer? My naive attempt to implement the example from the book does not work so far (i think because deque is not recognized...).
A totally different question: I wonder if it is possible to use Open Frameworks core or also additional addons with ofelia.
newbie: can i do this?
@emens 1. https://guitarextended.wordpress.com/2012/11/03/make-python-and-pure-data-communicate-on-the-raspberry-pi/
- Yes.
- Yes. The vst instruments can be CHOSEN...... a decision as to which one you want to control. But the objects [vst~ myplugin] will need to match the vst executable (32/64bit) and the Pd version bits and the os. I know that it works for 32bit.
[vst~plugin] has been built for 64bit........ https://forum.pdpatchrepo.info/topic/11953/vstplugin-v0-1-0-released
You will need [vst~_help] for the 32-bit [vst~]....... https://forum.pdpatchrepo.info/topic/9319/how-to-use-vst-object/2
You should look at this........ https://forum.pdpatchrepo.info/topic/11096/making-an-audio-vst-for-raspberry-pi
This...... https://forum.pdpatchrepo.info/topic/11605/loading-3rd-party-plug-in-problems
You can open (SET) just the vst that you name in python but you will need to understand dynamic patching for that........ unless the new [vst~plugin] can call different vst's.
Not sure what you want to achieve. Some want to use Python to create pretty graphics, but the vst plugins already are much prettier than anything you can easily create in Pd.
If you want to save and recall presets then you can do that in Pd.
David.
Array data fine drawing outside of pd, possibly with custom-made editor
hi @nau, i think the ofelia library from @cuinjune could be great for things like that. the old version has even pd gui like abstractions. i also made a waveform display and a multislider / toggle with the old version: https://forum.pdpatchrepo.info/topic/11371/ofelia-waveform-display
this is the only interface experiment i did with the new version (i am stuck with that at the moment): https://forum.pdpatchrepo.info/topic/11792/ofelia-test-grid/9
the new version is based on lua and open frameworks and more flexible than the old version. i think it has a lot of potential. i would also like to learn from other ofelia gui patches, especially for controlling video
here are a lot of open frameworks gui examples: http://www.ofxaddons.com/categories/1-gui
ofelia test grid
@Cuinjune thanks a lot for the update
inspired by the conway implementation from @weightless https://forum.pdpatchrepo.info/topic/10916/conway-s-game-of-life-implementation-with-data-structures i tried to implement the conway algorhithm. if you select the first preset and click the conway toggle you can see an example.
Ofelia2_GridXConway.pd
it works inside the grid, but i cant figure out the upper and lower border logic yet. i think it is a disadvantage of the one dimensional table for this case, perhaps a 2 dimensional table would make things easier? or i just dont get the logic it could be more difficult to implement the existing functions (like shift or shuffle) into the 2 dimensional table, that was quite easy with the one dimensional table. @weightless also used "2 dimensional arrays" (the [text] object) in his conway patch. something like this: https://github.com/syntruth/Lua-Grid sounds great for the grid logic, but still to complex for me to understand...
MobMuPlat NUMPAD "template" (as .json + .pd abstraction) for direct and precise entry of #'s into MMP
Stemming from a different project, I've made a MobMuPlat (MMP) NUMPAD "template" so that numbers may be entered directy (and more Precisely) into MMP instead of selected from siders, knobs, or other controls (which apparently pd can do by just clicking a number field, typing in the number, and pressing ENTER (Thanks, again, @LiamG)
FEATURES:
Integers and Decimals from 1e-8 to 999999;
m+,m-,rcl: for storing (m+), removing stored number (m-) and recalling numbers (rcl)
cl:clear (but no backspace)
HOW-TO:
To test: in the MMP editor open the "mmp_numpad_template.mmp" file and experiment. (note: it will not start entering decimals until after you click "." and Then the next number). It is associated to the "abs_mmp_numpad_test.pd" which has the template embedded as an abstraction in it. It also has a slider on the second page, to test routing the ENTERed number to different "locations".
To implement:
First embed "abs_mmp_numpad_template.pd" as an abstraction in your MMP's .pd file. It has one outlet: the current value after the NUMPAD's ENTer is clicked and will receive all control signals coming from the NUMPAD.
Next, with a text-editor, open the "numpad-codeblock.jsn" file (or copy it from the code block below);
VERY IMPORTANT!!!: make a backup copy of your own mmp file before doing this.
In the text-editor, open "as-text" your .mmp file (or to experiment, the "pasteJSNtest.mmp" file which I have provided);
Past the numpad_template.jsn codeblock (from the file or the codeblock below), in between the mmp 'gui' brackets, as shown here:
{"backgroundColor":[0.5019608,0.5019608,0.5019608,1.0],"pageCount":1,"port":54321,"isPageScrollShortEnd":false,"startPageIndex":0,"canvasType":"widePhone","gui":[],"isOrientationLandscape":false,"version":1.64}
Once you have pasted it in, save your file, and open it in the MMP Editor.
The control and associated labels will be on the first page. You can move them, resize, etc. as you wish. And no matter where you put it (given its precise field names the entered value will get sent to the "abs_mmp_numpad_template" abstraction.
Sounds like a lot of work. But once you get the hang of it. I think it's well worth the effort: you will be able to have exact control over Any mmp value.
numpad-codeblock.jsn
{"mode":1,"highlightColor":[1.0,0.0,0.0,1.0],"borderThickness":3,"address":"/numgrid/0","color":[1.0,1.0,1.0,1.0],"dim":[4,4],"class":"MMPGrid","cellPadding":2,"frame":[10.0,115.0,300.0,360.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"cl","textFont":"","class":"MMPLabel","frame":[175.0,405.0,50.0,45.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":".","textFont":"","class":"MMPLabel","frame":[35.0,400.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"ent","textFont":"","class":"MMPLabel","frame":[235.0,405.0,75.0,45.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"m-","textFont":"","class":"MMPLabel","frame":[245.0,225.0,60.0,45.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"m+","textFont":"","class":"MMPLabel","frame":[235.0,315.0,75.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"1","textFont":"","class":"MMPLabel","frame":[30.0,315.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"2","textFont":"","class":"MMPLabel","frame":[105.0,315.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"3","textFont":"","class":"MMPLabel","frame":[180.0,315.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"4","textFont":"","class":"MMPLabel","frame":[30.0,230.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"5","textFont":"","class":"MMPLabel","frame":[110.0,230.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"6","textFont":"","class":"MMPLabel","frame":[185.0,230.0,40.0,45.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"7","textFont":"","class":"MMPLabel","frame":[30.0,145.0,40.0,40.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"9","textFont":"","class":"MMPLabel","frame":[185.0,140.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myPanel","color":[0.6,0.6,0.6,1.0],"passTouches":false,"class":"MMPPanel","frame":[10.0,55.0,300.0,60.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/numlabel/0","textSize":42,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":":256 ","textFont":"","class":"MMPLabel","frame":[15.0,60.0,290.0,55.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"0","textFont":"","class":"MMPLabel","frame":[105.0,405.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"8","textFont":"","class":"MMPLabel","frame":[105.0,140.0,40.0,50.0]},{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/myLabel","textSize":36,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Regular","textFontFamily":"Default","text":"rc","textFont":"","class":"MMPLabel","frame":[250.0,135.0,50.0,50.0]}
Hope this may be of use to you.
Enjoy. And as a side comment: MMP is by far the fastest development environment I have ever worked in and is excellent as a ProtoTyper (tho admittedly my experience is limited). It works GREAT as an OSC-Controller, too. Daniel has done us all a great service by building it. Additionally kudos, to the PdDroidParty and libPD developers upon whose backbone it is built.
Many Happy Returns,
Scott
Audio Ideas (AI) Collection (placeholder, currently only links)-effects, controllers, mmp, etc.
Audio Ideas (AI) Collection (placeholder) currently only links
per @LiamG 's kind suggestion I have begun the process of consolidating my abs and patches, etc. into a single location/zip file or for possible upload to github.
Just to get the ball/me rolling and scope the work I got the links for my shares into a single location to later be consolidated into the single AI Collection.
For now at least, please, bare with me (and the links below) as ideas I am more passionate about currently are demanding my attention. (Which funnily enough will probably also be included in the set, where ever they are shared.)
Thanks, for your patience and all you do for the Pure Data Family.
Sincerely,
Scott
abstract~
pushdelay-envelope-env-driven-delay-line-with-both-delay-time-and-feedback-dependent
numpad-abstraction-for-entry-of-large-numbers-via-click-instead-of-sliders-includes-basic-calculator
abs_delay_fbw-feedbackwards-lifo-last-in-first-out-delay
abs_sequences_by_formula-sequences-by-formula-abstraction-ex-collatz
abs_effects_router-60-effects-in-one-abstraction-router-from-diy2-stamp-album-my-abs
visualcontrolsurface-vsl-values-set-by-their-location-on-the-screen-req-ggee-shell
abs_4-8-14_way_toggle-pair-2-toggles-resulting-in-4-8-or-14-states
audioflow-delay-to-forward-backward-looper-using-speed-control
5-band-equalizer-with-bezier-controller-eq5_mey_w_bezier_sv-pd-updated-to-8-band-below
forward-backward-looper-orig-abs-from-residuum-whale-av
abs_rgb2hex-rgb-0-255-colors-to-hexadecimal-values
pseudo-12-string-effect-6-string-guitar-to-sound-like-a-12-string
jack_midi2pd_2sys_connector_sv-jack-midi_out-to-pd-sys_playback-switcher
abs_4to16pads_bin_conv_sv-convert-4-midi-pads-from-a-binary-value-to-a-decimal-for-rerouting
abs_automatedslider_sv-automated-control-changer-pd-and-mobmuplat-editor-versions
idea-for-effects-stack-ing-technique-control-mother
micin-_abs-abstraction-convert-signal-to-notein-ex-using-a-midi-synth-as-a-guitar-pedal
curve_abs-tri-way-curve-switch-to-change-control-values-in-either-linearly-convex-or-concave-manner
a-preset-control-abstraction-for-saving-parameters-presets-to-text-files
4-tap-delay-with-pitch-shifter-per-delay-line-adaptation-of-diy2-patches
patch~
extra
the-15-owl-faust-patches-compiled-as-32bit-linux-externals-attached
libpd
mmponboardeditortemplate-mmp-for-creation-of-mobmuplat-files-directly-on-the-handheld-android-only
3d-synth-webpd-tree-js-webgl_camera_cinematic-html-example
Off topic