Unread post limit?
@mod Hey! I don't know the inner working of the "Unread" section... I tried to bump a value in the admin, but not sure if it was related to this section. Your best bet is to use the "Recent" section.
Always a pleasure to see you here. Feel free to share your music!
Cheers~
Binary Counter
With this little trainer you can write the layout directly from the grid: grid-trainer.pd
Binary Counter
On a more general note: With your button grid, i would take another approach:
- Each button would have a unique button id, derived from x and y.
- In a table, each button id is assigned to a section number and a section id. This can be done with [coll].
- If a button is pressed, the button id is calculated from x and y and is send to the [coll] to look up the section number and the section id.
- The section id and the button value (0 or 1) are routed to the section in the pd code where they should be processed
- Do stuff
This way you can make different layouts for the grid, send each button to the section where it should do anything and don`t have to worry about x and y or rows and columns in each section anymore.
MMPonBoardEditorTemplate.mmp for creation of MobMuPlat files directly on the handheld (android only)
MMPonBoardEditorTemplate.mmp for creation of MobMuPlat files directly on the handheld (android only)
MMPonBoardEditorTemplate
by svanya
INFO: make copies of this template to use as the starting point for your created .mmp files.
This template is designed to expedite the creation of simple(!) MobMuPlat files on-the-go with only the use of the handheld (i.e. does not require the Java editor).
There are three sections to this document:
the templates (in this commented section)
the mmp header just below this section
the "ENTRIES SECTION"
and
the mmp footer (which closes the .json file).
To use the template:
Open this file in a handheld text-editor (you may need to rename it, ex. adding ".txt" (no quotes) to the end of its file name to associate it to the text-editor and NOT MobMuPlat).
Copy one of the sections from this Templates Section (not including its label and the label colon and paste it into the Entries Section below and for each template you have added more than 1, add a comma after each template except the last one.
The arrangment on the screen can then be edited (in that same text editor) by amending the "frame" section of each Entry according to the following format:
"frame":[left,top,width,height]
(on the JAVA editor the screen is scaled 320px wide by 480px high)
and
Re-open the .mmp file inside MobMuPlat (renaming it back to .mmp as necessary).
Enjoy! And Good Luck! Just post any comments or help you may need here and I will try and get to them as soon as I am able.
Ciao for Now. Peace,
svanya
for those interested here is the code:
/*
MMPonBoardEditorTemplate.mmp for creation of MobMuPlat files directly on the handheld (android only)
MMPonBoardEditorTemplate
by svanya
INFO: make copies of this template to use as the starting point for your created .mmp files.
This template is designed to expedite the creation of simple(!) MobMuPlat files on-the-go with only the use of the handheld (i.e. does not require the Java editor).
There are three sections to this document:
the templates (in this commented section)
the mmp header just below this section
the "ENTRIES SECTION"
and
the mmp footer (which closes the .json file).
To use the template:
Open this file in a handheld text-editor (you may need to rename it, ex. adding ".txt" (no quotes) to the end of its file name to associate it to the text-editor and NOT MobMuPlat).
Copy one of the sections from this Templates Section (not including its label and the label colon and paste it into the Entries Section below and for each template you have added more than 1, add a comma after each template except the last one.
The arrangment on the screen can then be edited (in that same text editor) by amending the "frame" section of each Entry according to the following format:
"frame":[left,top,width,height]
(on the JAVA editor the screen is scaled 320px wide by 480px high)
and
Re-open the .mmp file inside MobMuPlat (renaming it back to .mmp as necessary).
TEMPLATES:
MMPLabel:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/label/0","textSize":16,"color":[1.0,1.0,1.0,1.0],"androidFont":"Roboto-Bold","textFontFamily":"Default","text":"label","textFont":"","class":"MMPLabel","frame":[150.0,10.0,100.0,40.0]}
MMPButton:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/button/0","color":[1.0,1.0,1.0,1.0],"class":"MMPButton","frame":[10.0,70.0,100.0,40.0]}
MMPToggle:
{"highlightColor":[1.0,0.0,0.0,1.0],"borderThickness":4,"address":"/toggle/0","color":[1.0,1.0,1.0,1.0],"class":"MMPToggle","frame":[10.0,130.0,100.0,40.0]}
vSlider:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/vSlider/0","color":[1.0,1.0,1.0,1.0],"range":2,"class":"MMPSlider","isHorizontal":false,"frame":[10.0,190.0,100.0,40.0]}
hSlider:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/hSlider/0","color":[1.0,1.0,1.0,1.0],"range":2,"class":"MMPSlider","isHorizontal":true,"frame":[10.0,250.0,100.0,40.0]}
MMPKnob:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/knob/0","color":[1.0,1.0,1.0,1.0],"indicatorColor":[1.0,1.0,1.0,1.0],"range":2,"class":"MMPKnob","frame":[10.0,300.0,100.0,100.0]}
MMPXYSlider:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/xyslider/0","color":[1.0,1.0,1.0,1.0],"class":"MMPXYSlider","frame":[10.0,420.0,100.0,40.0]}
MMPGrid:
{"mode":0,"highlightColor":[1.0,0.0,0.0,1.0],"borderThickness":3,"address":"/grid/0","color":[1.0,1.0,1.0,1.0],"dim":[4,3],"class":"MMPGrid","cellPadding":2,"frame":[150.0,70.0,100.0,40.0]}
MMPMultiSlider:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/multislider/0","color":[1.0,1.0,1.0,1.0],"range":8,"outputMode":0,"class":"MMPMultiSlider","frame":[150.0,130.0,100.0,40.0]}
MMPLCD:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/lcd/0","color":[1.0,1.0,1.0,1.0],"class":"MMPLCD","frame":[150.0,190.0,100.0,40.0]}
MMPMultiTouch:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/multitouch/0","color":[1.0,1.0,1.0,1.0],"class":"MMPMultiTouch","frame":[150.0,250.0,100.0,40.0]}
MMPTable:
{"mode":0,"highlightColor":[1.0,0.0,0.0,1.0],"address":"/table/0","color":[1.0,1.0,1.0,1.0],"selectionColor":[1.0,1.0,1.0,0.5019608],"displayRangeLo":-1.0,"displayRangeHi":1.0,"class":"MMPTable","displayMode":0,"frame":[150.0,310.0,100.0,40.0]}
MMPPanel:
{"highlightColor":[1.0,0.0,0.0,1.0],"address":"/panel/0","color":[1.0,1.0,1.0,1.0],"passTouches":false,"class":"MMPPanel","frame":[150.0,370.0,100.0,40.0]}
THE ACTUAL MMP FILE FOLLOWS THIS
*/
{"pdFile":"osc_controller_mmp.pd","backgroundColor":[0.0,0.0,0.0,1.0],"pageCount":1,"port":54321,"isPageScrollShortEnd":false,"startPageIndex":0,"canvasType":"widePhone","gui":[
/*
ENTRIES SECTION: entries go below here and above the comment below
*/
/*
END: ENTRIES SECTION
The mmp footer is below.
*/
],"isOrientationLandscape":false,"version":1.64}
DIY2 - Effects, Sample players, Synths and Sound Synthesis.
@unstable said:
Hey I got a question. in the compression patches I can kind of get my head around the amp factor section. But I don't get any of the att/rel section. Can anyone explain what that sgn~ (signum) is/does ? Secondly I can see the table is effected by the release but not really on the attack. I can hear the attack. The block size is 2. I'm guessing if the default block size is 64 samples then 2 means 128?? Or is it actually 2 ? This outputs a frequency between 0.019 and 57 into a VCF along withe the original amp factor. Any advice ?
ok, so the [amp-factor] stage is giving the amplitude of the signal, scaled according to our threshold and ratio settings. This will either be positive if the amplitude is rising, or negative if it's falling.
next we go into the [att-rel-filtering] section, where we separate the attacks (positive) from the releases (negative)
[block 2] really does mean that the blocksize is only 2 samples. This is so that the [tabsend~] and [tabreceive~] objects deal with packets of two samples at a time,
giving us a sample delay between the input signal and the signal received by [tabreceive~]. If the blocksize were the default of 64, then we would have a 64 sample delay, and our compressor would not work at all well.
sgn~ just gives the sign of the signal, so -1 for negative numbers and 1 for positive ones. note that we are dealing now with just the AMPLITUDE of the signal, which has been scaled in the [amp-factor] section so that rising amplitude (ie, attack) is positive and falling amplitude (release) is negative.
that is then split apart using [max~ 0] with attack sent to the left outlet and release sent to the right outlet. The attack and release stages are both scaled separately (attack scaled by 0.019 to 57, and release by, i think, 0.00019 to 5.7) (and i don't know exactly WHY 57 was chosen, i'm sure the patch would work just as well with 50 or 60)
then we go through the [vcf~]. Although vcf~ is normally used to shape the frequency content of a wavform, in this case, it has a different use. It is smoothing the amplitude signal. So, if we set a fast attack, then the vcf~ will have a cutoff of 57hz, and our compressor will attack within 20ms. if we set a slow attack, then the vcf~ will have a frequency of 0.019hz, and the compressor will take a few seconds to fully attack.
finally, the original signal is multiplied by the compression factor, and sent along its way.
There are some quick mods you can do to this patch, too. A sidechain compressor, essential for any sort of 'french' electro sound, can be made by adding another inlet~ for a second audio signal, and taking the inverse of the compression factor, like this:
[pd att-rel-filtering]
|
[-~ 1]
|
[*~ -1]
and then multiply your second signal by that.
also, it is fun to take the compression factor output to its own [outlet~] and use it as a modulation source for filter cutoffs for synth sounds, etc.
anyway, hope that clears things up a bit?
have fun!
How to install externals, libraries, gui plug-ins, etc.
Edit: This post was originally written with Pd-extended 0.43 in mind. These days there is a nice little plugin called Deken that you can use to easily download and install most of the popular libraries in Pd. It comes bundled with recent versions of Pd-vanilla. You can still use namespaces to load up the objects for most libraries, but for some libraries like zexy that have all the objects bundled into a single file, you will still need to use [declare] to load it up.
Installing libraries and plug-ins isn't so obvious. This guide will hopefully clear up the process, and may even explain more than you need to know.
Recent changes
This first section is mainly for those upgrading to Pd-0.43 from previous versions. If you're new to Pd and are starting on 0.43, you can just skip this section and get on with loading libraries.
It use to be that installing a library was done by putting it wherever you wanted on your system and adding its path to the preferences. While this wasn't particularly difficult, it did have some problems. Recent efforts have been made to standardize this a bit so those problems can be avoided.
In Pd-extended 0.43, you can't add paths from within Pd any more like you used to. You can open the preferences and add a path, but it won't save it. This means that non-default libraries won't load on start-up any more; you have to load them from within the patch. While this sounds like a hassle, it does have the advantage that patches are much easier to share. You don't have to worry about others having different start-up settings than you. It also forces the patch to document what libraries are being used, so if an object isn't loading, you don't have to go on some crazy hunt to find out where it came from or what it's supposed to do.
Putting them in the right folder
To make sure Pd can easily find the library, you need to put them in the right folder. This is OS dependent. The following folders are your options (taken from here). I personally recommend putting them in the user-specific folders since they are likely easier to migrate when updating your OS.
Linux:
User-specific:
~/pd-externals
Global:
/usr/local/lib/pd-externals
Mac OSX
User-specific:
~/Library/Pd
Global:
/Library/Pd
Windows
User-specific:
%AppData%/Pd
Global:
%CommonProgramFiles%/Pd
Linux and OSX are pretty straight-forward. "~" means your home folder.
Windows is a bit trickier. %AppData% and %CommonProgramFiles% are environment variables that contain specific directories. What the exact directory is depends on which version of Windows you are on. You can find out what it is by opening up the command line and typing this:
echo %AppData%
You might end up with something like C:\Users\username\AppData\Roaming or C:\Documentes and Settings\username\Application Data. Also, to see it in the file browser, you might need to show hidden files. At any rate, once you find the directory, create a Pd folder if there isn't one, and put your library, objects, or plug-ins there.
Loading whole libraries
To load a library you have a few options. The one that works on both vanilla and extended is to use [declare -stdpath libraryname]. The libraryname is the name of the folder that all the objects/abstractions are in.
[declare] doesn't always work as expected in abstractions, though. In Pd-extended, you can also use [import], which works well in abstractions. I have found that sometimes it doesn't work with libraries of abstractions that don't have a meta file, though. But that can be fixed by just making one. Simply create an empty Pd patch and save it as libraryname-meta.pd in the library's folder. That's all the meta patch is.
A third option (also Pd-extended only) is to use [path]. This is new to Pd-extended 0.43 and works similarly to [declare]. I haven't needed it, yet. But it's there.
Once the library is loaded, you should be able to load an object or abstraction just by creating it by name.
Loading objects or abstractions using namespaces
While this method means a little more typing, it is also the safest, and it makes it easier to find out what objects are from which library. The way you do it is add the library name (i.e. the namespace) to the beginning of the object when you call it, like this:
[zexy/multiplex~] <-- load the [multiplex~] object from zexy
[cyclone/comb~] <-- load [comb~] from cyclone
You don't have to load the library with [import] or [declare] for this to work. You just call the object that way.
Why is this safest? Because it's possible for different libraries to have objects with the same name. For example, both cyclone and zexy have an object called [mean]. But they don't work exactly the same. zexy's takes a list, while cyclone's takes in a continuous stream. If you have both libraries loaded (and in Pd-extended, these two libraries happen to be loaded by default), you can't be sure which one you're getting if you just type [mean]. However, if you type [cyclone/mean], you know exactly which one you are getting.
Pd pong
@Flipp said:
@ Maelstorm: ...and how tricky will it be to get a new CMS?! ..I got no clue about that stuff, I just googled CMS and, yeah.....
I've never personally done it myself, but it's pretty tricky, and probably not worth it.
Personally I don't have an account at puredata.info (do you?!)
Yes.
...since the page occured a little messy and partially outdated to me. And my browser doesn't trust some sections (there's no valid certificate) AND I even got a popup displaying some ??spanish?? text, no idea what that was!!!
Yeah, I get those on occasion.
Keep in mind that the content on puredata.info is a user-contributed community site. If something is out-dated, it's because no-one has bothered to update it. The idea is that if you see something is out-dated, you can fix it yourself or ask the author to update it. I'm sure there's plenty of out-dated information on this forum, too.
.. Anyhow I think since pd.info uses that structure successfully, it's must be good idea..
And if it's successful, I don't see why we should try and compete with it.
Granted it's a little hacky with only "personal posts" instead of "folders", but hey, that's not an hack but a workaround.. it just corresponds to the nature of pd...
Maybe some users would like that idea but just don't think about it, ..so just as an advice for a little more structure..
Yeah, I'm not saying it wouldn't be cool to have, and I'm not discouraging you or anyone from sharing your whole library on one topic in patch~ (hell, I did it once). I just don't really think using the forum as a code repo is really what this site is about.
I personally think it's just a better idea to put your stuff on another site (like GitHub or puredata.info or your own site) and link to it in your signature.
Another comparable issue:
For example this thread: http://puredata.hurleur.com/sujet-6481-mindset came up recently in the forums "extra~"-section...<snip>
...if this goes on, we should start a new thread, shouldn't we?!
mod and I have been talking about doing some reorganization along with cleaning up the forum, so some of that stuff is being addressed.
Speaking of things being in the wrong section, if you want to continue this discussion, start a thread in the "this forum" section. We're kind of hijacking the thread at this point.
Pd pong
@ Maelstorm: ...and how tricky will it be to get a new CMS?! ..I got no clue about that stuff, I just googled CMS and, yeah.....
Personally I don't have an account at puredata.info (do you?!) since the page occured a little messy and partially outdated to me. And my browser doesn't trust some sections (there's no valid certificate) AND I even got a popup displaying some ??spanish?? text, no idea what that was!!!
.. Anyhow I think since pd.info uses that structure successfully, it's must be good idea..
Granted it's a little hacky with only "personal posts" instead of "folders", but hey, that's not an hack but a workaround.. it just corresponds to the nature of pd...
Maybe some users would like that idea but just don't think about it, ..so just as an advice for a little more structure..
Another comparable issue:
For example this thread: http://puredata.hurleur.com/sujet-6481-mindset came up recently in the forums "extra~"-section. I guess that's where it should be, but again that section is bloated as well.
Wouldn't it be nice to have a location for just the links to externals (..or externals themselves...) found somewhere around the web?! Just to form a database, or something..
...many forums do have some kind of "sticky subforum" (inside of a more general topic) sothat eg. just the links would go to "extra~s" subforum and anything else related to that goes to "extra~" itself.
...if this goes on, we should start a new thread, shouldn't we?!
Special requests
i have scoured through the administration options, and there doesn't seem to be any way to copy or move threads from one section to another. So, all i would be doing is copying original posts into this section.
There is no reason why everyone can't do the same. If there is some post that you find useful and think it will work well as a tutorial, then go ahead and do some cut and paste to put it in this section. As long as you credit the original author, and maybe throw in a link to the original thread, then it should all be fine.
Max analogs for \[bp~\] and \[hip~\]?
Very different indeed. From Pd's source code (file d_filter.c) I understand it only implements feedback sections, not a feed-forward section as is drawn in [reson~]'s scheme. Therefore, the filtering is less extreme in [bp~].
If you want to make a filter in Max which is similar to [bp~], you could use Msp's [biquad~] with non-zero coefficients for the feedback sections (b1 and b2) and the gain (a0) only. But then you have to compute the coefficients yourself, from the frequency. Take a look at function sigbp_docoef(), starting at line 252 in d_filter.c from Pd's source code, to see how it is done. It may not be too difficult, if you know that x->x_sr means samplerate.
Katja