The Harmonizer: Communal Synthesizer via Wifi-LAN and Mobmuplat
The Harmonizer: Communal Synthesizer via Wifi-LAN and Mobmuplat
The Harmonizer
The Harmonizer is a single or multi-player mini-moog synthesizer played over a shared LAN.
(credits: The original "minimoog" patch is used by permission from Jaime E. Oliver La Rosa at the the New York University, Music Department and NYU Waverly Labs (Spring 2014) and can be found at: http://nyu-waverlylabs.org/wp-content/uploads/2014/01/minimoog.zip)
One or more players can play the instrument with each player contributing to one or more copies of the synthesizer (via the app installed on each handheld) depending on whether they opt to play "player 1" or "player 2".
By default, all users are "player 1" so any changes to their app, ex. changing a parameter, playing a note, etc., goes to all other players playing "player 1".
If a user is "player 2", then their notes, controls, mod-wheel etc. are all still routed to the network, i.e. to all "player 1"'s, but they hear no sound on their own machine.
There are 2 pages in The Harmonizer. (See screenshots below.)
PAGE 1:
PAGE 2:
The first page of the app contains all controls operating on a (more or less) "meta"-level for the player: in the following order (reading top-left to bottom-right):
pl2: if selected (toggled) the user is choosing to play "player 2"
mot(ion): triggers system motion controls of the osc1,2&3 levels (volume) based on the accelerometer inside the smartphone (i.e as you twist and turn the handheld in your hand the 3 oscs' volumes change)
rate: how frequently should the handheld update its accelerometer data
slimit: by how much should the app slow down sending the (continuous) accelerometer data over the network
presets: from 1 to 5 preset "save-slots" to record and reload the Grid 1 and Grid 2 settings that are currently active
S: save the current Grid1 and Grid2 selections to the current "save slot"
L: load the currently selected preset into both Grids
">>": go the the next page (page 2 has the reverse, a "<<" button)
Grid 1: the settings, in 4 banks of 3 parameters per-, which are labeled top-down equating to left-right
Grid 2: the same as Grid 1, but with a different set of parameters
The second page comprises:
the 2-octave keyboard (lower notes on top),
a 9-button octave grid (which can go either up or down 4 octaves),
a quick-preset grid which loads one of the currently saved 5 presets
the "<<" button mentioned above, and
both a mod and pitch-bend wheel (as labeled).
SETUP:
All players install Mobmuplat;
Receive The Harmonizer (in the form of a .zip file either via download or thru email, etc.)
When on your smartphone, click on the zip file, for example, as an attachment in an email.
Both android and iphone will recognize (unless you have previously set a default behavior for .zip files) the zip file and ask if you would like to open it in Mobmuplat. Do so.
When you open Mobmuplat, you will be presented with a list of names, if in android click the 3 dots in the top right of the window and on the settings window , click "Network" Or on an iphone click "Network" just below the name list;
On the Network tab, click "LANDINI".
Switch "LANDINI" from "off" to "on".
(this will allow you to send your control data over your local area network with anyone else who is on that same LAN).
From that window, click "Documents".
You will be presented again, with the previous list of names.
Scroll down to "TheHarmonizer" and click on it.
The app will open to Page 1 as described and shown in the image above.
Enjoy with Or without Friends, Loved, Ones, or just folks who want to know what you mean "is possible" with Pure Data )!
Theories of Thought on the Matter
My opinion is:
While competition could begin over "who controls" the song, in not too great a deal of time, players will see first hand, that it is better (at least in this case) to work together than against one another.
If any form of competition emerges in the game, for instance loading a preset when a another player was working on a tune or musical idea, the Overall playablilty and gratitude-level will wain.
However, on the other hand, if players see the many, many ways one can constructively collaborate I think the rewards will be far more measurable than the costs, for instance, one player plays notes while the other player plays the controls.
p.s. my thinking is:
since you can play solo: it will be fun to create cool presets when alone then throw them into the mix once you start to play together. (Has sort of a card collecting fee ).
Afterward:
This was just too easy Not to do.
It conjoins many aspects of pure data together (I have been working on lately (afterward: i did this app a long time ago but for some reason and am only now thinking to share it) both logistical and procedural into a single whole.
I think it does both quite well, as well as, offer the user an opportunity to consider or perhaps even wonder: What is 'possible'?"
Always share. Life is just too damn short not to.
Love only.
-svanya
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
I'm stumped (bi-directional guitar pedal patch with Mobmuplat editor frontend))
Update:
Turns out "pads" are Not necessary.
Instead, what you can do is capture the sum of multiple fields/keys so that when the sum=3 (by sending a bang back into the other numbers to keep the total 'fresh'), for a tap (across the entire Lego block) for instance, THEN it triggers.
Have begun testing it with my feet (bare) and the changes are nice and fluid.
Was stumped by the thought that I might have created a monster with the number of possible permutations but cut it down from multiples (large) to only 1 by using only a single set of presets per arrangement.
Meaning for each configuration of sliders, the accompanying effects have their own preset set ☺.
I then pack and unpack them to a text file with my preset control.
So by having the Arrangement preset control include 24 entries instead of only 7 it (Viola!) sets and loads the entire arrangement.
p.s. Am having Sooo much fun with this. VERY much looking fw to the day I can share "Output".
-peace
svanya
Merry Pd-ing!
I'm stumped (bi-directional guitar pedal patch with Mobmuplat editor frontend))
Hi, All.
I'm stumped...
Here's what I have so far (see "TiGR-Resurrected-20160709.zip" below, requires Mobmuplat development environment):
a (19 page) Mobmuplat (MMP) frontend, that I use as the GUI, which I run on my laptop thru the MMP editor (which someone sort of suggested, since my handheld can Not handle the load of the app on its own-Note: I have tried OSC and it does not work as well as this setup);
the first page is the Main Page;
the subsequent 18 pages each have one unique pedal/effect on them with all of its respective controls;
the Main Page has 7 (18 slot) vsliders with each value representing one of the pedals represented by one of the mmp pedal pages;
the Main Page also has a (currently not implemented, but I will probably put it to use once I figure out this issue first) a 7-slot multislider which will be used to change the preset of any pedal in its respective slot;
all pages, including the Main Page, have a preset control abstraction (mine) which saves and loads the page's primary control values;
the Main Page is a "stack" so the guitarist can build a rack of >1 pedal and up to 7 effects (triggering no pedals is just a bypass);
different Main Page slots may be filled with the Same effect, in which case, the most recently applied parameters for a pedal are applied to all of its chosen slots.
GOAL:
While I am playing, be able to smoothly change the "voice", i.e. slot arrangements and pedal parameters (via their presets) of my guitar without taking my hands off the strings/neck.
Work so far:
I used a "Logitect Dual Action (usb game) Controller" and hid library to change the effects (left joystick slots and right joystick pedals). But because I had not setup presets, yet I had it randomizing parameters and while interesting the volume spiking and chances the multiplied gains would be too low was Awful!!!
Needed help:
How would I go about making a (what I am thinking of as a 2-d) stompbox that would let me rearrange the pedals in each slot AND/OR change any given slot's pedal parameters.
I'm not going to have a problem with the logic of it, as I can see clearly how that can be accomplished. But I am unclear how to build or use Or buy a piece of hardware that will allow me to do this.
My first Bad guess, or at least place to start, is it is an array of stompboxes. I can intuitively tell this is way wrong, But I can not, for the life of me, visualize/feel the better or possibly even optimal solution for this.
Little help, please.
So your suggestions, advise, insight, encouragement would all be very, very, very welcome.
Peace and thanks in advance.
Sincerely,
svanya
canvas colors
I think perhaps one of the problems expressed here (though I'm not sure which one!) has to do with the dual-precision internal processing vs. single-precision external save/retrieve limitation present in all versions of Pd, with the exception (I assume, haven't tried it yet) of the experimental dual-precision build that was produced some time ago.
I unexpectedly ran into the issue myself when trying to set up dynamic color programming of the GUI objects after making a whole panel of them using the preset colors from the preferences panel. I noticed immediately that most of the 0-29 preset color numbers that I sent with messages obviously didn't quite match the 30 presets available in the panel grid. So I tried grabbing the RGB values instead by plugging them into the "pd RGB" calculator that's part of the GUI color edit help patch. Those wouldn't save properly. I must assume at this point that it's because those panel colors are all linked internally in Pd to the 6 digit hex value you can see in the "compose color" RGB pop-up panel. Many of those hex values translate to dual-precision decimal numbers, (which can't be saved without the app rounding them off) and on the external user-programmable level Pd only works with decimals, not hex.
What it comes down to is that although you can enter or generate dual-precision decimal values in realtime (like with "pd RGB"). You can't save/retrieve them without the numbers getting rounded.
My workaround to match the panel presets was to just fudge the single-precision decimals till I got it "close enough". The only other workaround I can think of to get it exactly right is to save the three RGB numbers as a list and then feed them with [unpack] to the pd RGB calc and embed the whole blob into the patch every time I wanted to switch some colors.
The various Pd sites and lists have a number of write-ups about the dual/single precision issues. There's also some stuff on the list somewhere about the 2 different sets of preset colors (I think the remote-switchable preset values all translate to single precision dec values, not sure). Don't have any links on hand ATM but the info can be found in many bits and pieces (like most of the info on this platform) if anyone is more interested in this topic.
Save presets to textfile
Hi David,
thanks for the feedback. I also use extended almost exclusively, but whenever I can I try to make things vanilla friendly (because if one day I too might downgrade to vanilla, I've already got some stuff done!), and also it seems neater to make things as simple as possible with the basic objects, though of course that's not always possible.
I didn't know [moonlib/slist], thanks I'll look into it. I did try to use [coll] before though, and save the presets as lists of values that have the preset number as a header, but in the end I think it's more useful to have separate text files for each preset, so you can name them what you will and know what they are at a glance. But maybe [moonlib/slist] is different. Do you have any examples of how you use that for storing presets?
Thanks,
m
VisualTracker - request for participants
Here is some more info:
This is development info of VisualTracker for pd (pre alpha 100404)
What is it:
VisualTracker is sample sequencer – it triggers loaded samples in times defined in time line in editor window. Samples can be played in their default speed / length or can be fitted in tempo. In “fit mode” you can define number of bars to fit in and also multiplication of file. All changes have visual interpretation in sample canvases.
VisualTracker for pd (pre alpha 100404) was developed in Pd version 0.41.4-extended, on Windows XP
How to make it work:
- Open VisualTracker_(pre_alpha_100404).pd in pd.
- Editor and Samples window are automatically opened.
- Preset currentstate.vtp is automatically loaded – this preset is saved before closing the patch.
- After first run there are 3 empty sample boxes in samples window and 3 corresponding sample canvases in editor window.
- Load any wav (44100 Hz) by pressing „load“ in selected sample box. No space characters in path or filename are allowed. Loading of these files is aborted and error message appears for several seconds. Name of the successfully loaded sample including full path appears in sample box and also sample canvas in editor window. Size of sample canvas is changed according to the sample length. Try to change global BPM – size of sample canvas is recalculated.
- Check „fit“ to fit sample in current BPM. Set length of sample in bars and multiplication.
- Add another sample by creating object [sample] or just copy existing sample box in samples window.
- Switch to editor window, press CTRL+E to switch to pd edit mode and drag and drop sample canvases to desired position on time line. Sample canvases are automatically snapping to bar columns and rows.
- Switch back to normal mode by CTRL+E
- Press PLAY to replay your sample composition. Samples are played only if corresponding sample canvas is placed in track 1-6. If sample canvas is above the tracks sound is muted.
- Press „save“ in main VisualTracker window to save current preset to a text file. Any name and extension with no spaces is allowed.
- Before closing VisualTracker press „save state & close“. It saves current state to preset named currentstate.vtp and delete all sample boxes from samples window and all sample canvases from editor window. Now you can turn off and eventually save VisualTracker patch. This is important to avoid double appearance of sample canvases because information about samples and composition is stored independently from pd patch and should not be saved inside patch. If there are still some „orphaned“ sample canvases hanging delete them manually.
Components:
- Sample window: place for unlimited amount of [sample] abstractions. Once abstraction is created (by copying or creating the object) corresponding sample canvas is created in editor window. [sample] abstraction is sending data to sample canvas (name, color, size, snapping) and receiving back position. Triggering of sample playback is based on position of sample canvas.
- Editor window: place for sample canvases composition on the top of timeline grid. Sample canvases can be moved by mouse in pd edit mode (CTRL+E). Timeline grid will be extended and improved in next versions.
- Preset save/load: saves and loads presets to/from a text file using [coll] object. Preset contains global values (number of samples in composition, bpm) and local values for each sample box (filename, position, track, multiplication, number of bars, fit switch, color and two unused values).
- Sequencer: located in program subpatch. Very simple - functionality will be extended and improved in next versions
- Other: located in program subpatch. Contains some other patches as colortable, BPM manager, output etc.
SSSAD save module
ok guys,
as I said before I created a new version of example-preset patch where you can see the method I use to create and load several different presets using s-abstractions.
the new version is a step by step tutorial patch where learn to use sssad save module and create different presets
please give me some feedback,
have fun
E.
Guitar multi-effects rig
This is my live guitar effects right as of Feb 14, 2009. Please let me know if you find it useful or have any ideas for effects or other improvements. If you make some music with it, I'd love to hear it!
Once I have some more time to program it, my next effect will probably be a Vocoder.
Run effectsrig.pd to load it up. A midi expression pedal is recommended for the best experience - but it's not required.
It contains the following effects:
whammy~
Digitech whammy style pitch shifter. Allows for smooth changes to the pitch shift amount.
Based on the one posted by "kenn" on the puredata.info forums (which in turn is based on the pd example code).
shimmer~
A "shimmer" synth-like effect. This is done with a pitch shift in a feedback loop of a very short delay.
octfuzz~
Octave-up distortion like you can obtained with the classic transform and 2 diodde rectifier circuit. Basically it just full-wave rectifies the audio signal. This one really brings out the high frequencies (some times a little too much!).
leslie~
A stereo leslie (rotating speaker) simulator. This is one of my favorites. If modulation is turned all the way down it becomes tremolo. Take one of the outlets for mono use. Try it in stereo for super-swirley bliss! When using an expression pedal to control the rate, heel down will bypass the effect.
Expression pedal control is done by expression.pd. It simply reads in MIDI and scales it to a 0->1 range. You can change the midi channel used by editing this file.
The preset system is a little hack-ish, but it works for me. If anyone has any better ideas on how to do this, I'd love to hear them. When you load up the main effectsrig.pd file, you will see a bunch of message boxes. This are quick settings buttons - just click one to apply that effect. They are designed so you can click a couple in a row to quickly apply a few different settings. To start over, click the big "default" one on the left.
It can also load presets based on midi messages. I use this with my Eventide TimeFactor pedal. When I change presets on the TimeFactor, PD follows along. This is handled by the box in the top right. The symbol box is for song titles, and the number boxes show the current TimeFactor preset. Open this box to see how I've done a couple of example midi controlled presets. "pd your_love_never_fails" is a more complicated example that changes the expression pedal behavior slightly.
If you want to use a different midi channel for listening to program changes, just edit preset.pd and presetnum.pd. preset.pd outputs a bang when the preset number supplied as a parameter is chose. presetnum.pd just outputs the number of the selected preset.
Simple FM synth
ahh, now i'm in trouble!
here's a "simple" example, but as you will see it is not actually too simple. also, i just realized that the envgen external that you used can have varying number of points, so it is not easily preset using arrays.
but anyway. here's an example of presetting for your 3 float values