MIAP (Manifold-Interface Amplitude Panning)

MIAP (pronounced “meeap”), which stands for Manifold-Interface Amplitude Panning, is a new, free, and expanded implementation of Meyer Sound’s SpaceMap abstract spatialization tool as a suite of Max/MSP and Pure Data externals.
Below I've included links to a screencast of my recent MIAP presentation at the AES 137th Convention. This is probably the easiest way to wrap one's head around the implications of SpaceMap's "manifold-interface" approach to spatial sound control.
- Jump to Part 2 if you just want to see demos.
- For a discussion of the non-centric, abstract spatial model employed in MIAP/SpaceMap, see to the second half of Part 1.
Part 1 : historical background, practical significance of "manifold-interface" approach, etc.Part 2 : demonstrations of manifold-interface approach as made possible with MIAP objectsPart 3 : brief explanation of object functionality, next steps, acknowledgements
Youtube playlist: https://www.youtube.com/playlist?list=PLHc927eu2oKbvIIvzYbc8L5JEUZ-xU8uN
best,
Zachary

Download this tool
Absolutely mind boggling! Well done sir... well done.
Thanks Anthony!
Very excited to see how the Max (and Pd) community use these objects. The "manifold-interface" approach is strangely underrepresented in the world of spatial audio... not to mention the possibilities for arbitrary parametric interpolation spaces.
I have a bunch of tutorials and demo videos on the MIAP website. If you're interested in a compelling example of how these objects can be used in ways other than multi-channel panning, check out this video: https://www.youtube.com/watch?v=qhCgmM21mnQ&list=PLHc927eu2oKbvIIvzYbc8L5JEUZ-xU8uN&index=10
best,
Zachary
Wow this is great stuff, thanks for sharing!
Anthony, thanks a lot for this implementation.
As extended user of the Meyer´s Matrix3 - system in contemporary music, we have now the oppurtunity to do the spatializaiton in both worlds.
Reinhold Braig
EXPERIMENTALSTUDIO of SWR
@ Zachary,
sorry I mean thanks to Zachary !
Wow indeed!! Congrats on this effort and thanks for sharing! This is awesome.
Zachary, this really is fantastic stuff! I am very excited about using this for parametric interpolation. I have patches that have many many control values. This makes manipulating things so easy and intuitive. Adding something like leap motion controller to drive things would make an awesome performance interface.
Of course I wish I could experiment with huge arrays of speakers, but alas I have no such setup.
Many thanks for sharing!
uhm... this happens just when my band starts experimenting with SPAT. This is much more fun.
YAYY!
Thanks for the support, everyone. I can't even remember how long I've been toiling away nights and weekends to get this done (not part of my day job). The best complement is use, so please do!
Anthony, definitely post back here with any parametric control implementations you come up with. Feel free to email me directly if you have questions about the objects. I haven't set up a forum on the MIAP website for public discussion, but if that ever looks beneficial (i.e. enough people are using these objects), I'll do that.
I have another example in mind where a map is dynamically morphing and undulating (perhaps adding some kind of vibrato)...
best,
Zachary
Really, really great work Zachary. As others have said it's a fascinating approach to spatial audio, but even more than that, the possibilities offered in other areas by this type of neat, abstraction of the control map is just downright exciting! I can't wait to start making use of this.
One question though, do you think a version for Windows would ever be a possibility? I know for myself, that would make a big difference.
Great work though.
e
ok removed
@Enda, Thanks for the support! I do want to eventually release these objects for Windows, but it won't be immediate. Higher on the list is to build the Pd externals for Linux, and add a few more features/examples into the package. I see you subscribed to the announcement list on the MIAP website (thank you), so I'll definitely send word of any updates there, as well as post here.
@Patrice, I think it would be best to keep that discussion in the other thread. The questions you're asking don't have simple answers, as I'm sure you know by now. A lot depends on what you'll do with the speakers (VBAP vs. Ambisonics, etc.). I'll read the other thread, and if I have anything of value to add, I'll post there. Thanks!
best,
Zachary
Zachary, I'm loving watching your videos on the go these last couple of days (gotta love that LTE!).
Maybe I'm not far enough into it, but did you include a simple example of moving multiple sources on individual paths through a simple (4.1-8.2ish) spacemap? This is probably where most people start, I'd guess?
That's our goal for our first show, but I'm wondering if MIAP is the right place to start?
Will dig further, downloading the code today.
it doesn't work here :(
macosx 10.6.8, max 6.1.9`
2014-10-18 01:02:34.361 Max[649:207] Error loading /Users/vichug/Documents/Max/Packages/MIAP_for_Max/externals/MIAP~.mxo/Contents/MacOS/MIAP~: dlopen(/Users/vichug/Documents/Max/Packages/MIAP_for_Max/externals/MIAP~.mxo/Contents/MacOS/MIAP~, 262): Librar
y not loaded: /usr/lib/libc++.1.dylib
Referenced from: /Users/vichug/Documents/Max/Packages/MIAP_for_Max/externals/MIAP~.mxo/Contents/MacOS/MIAP~
Reason: image not found
please, please tell me it's compatible with 10.6.......
@Wetterberg, I included two maps that you should check out. Look at the 8.2 maps in the MIAP and MIAP~ help file (umenu).
@Vichug, Sorry I built for 10.7 and later (think there's a note somewhere about that). I might be able to get a 10.6 build for you, but not sure at this moment.
best,
Zachary
i have no idea which amount of work it would represent, but i would be very grateful for it indeed !
I just took a glimpse at it!! Thank you ver much Zachary!!
Looking at the [MIAP] object and having the amplitude values as messages available I get the impression this might finally offer a way to implement multichannel spatial audio within M4L without routing the outputs externally (in comparisson with the ICST ambisonics objects)!!!
Man, I which I would have time to dive into it right now!! ... but here in Spain a saying goes: "Las cosas del palacio van despacio :)
(now that i think of it Zachary ; maybe - if you're willing to, and if you can - you could send me the sources ? since i'm on 10.6 it should be easier for me to compile for that system ? unless you're using a lot of external libraries, especially if those don't exist for 10.6, of course)
Hi Vichug, It's not open-source (for now). I'm assuming it won't be a problem to compile for 10.6... Will try soon and let you know.
so be it !.
Hi Vichug,
I looked into building for 10.6 a bit more. In the ReadMe file I specify a minimum OX of 10.7, but looking at the code, I seem to have only built for 10.8 and later. So I've already rebuilt for 10.7, and I'll include that in the next update. But the problem with 10.6 is that I'm using a bunch of c++-11 features in the code, and that isn't supported by the Xcode 10.6 SDK. There are workarounds for this, but they will probably require me using the open source clang compiler and statically linking to and included extra stuff with the object. In other words, I can't just build for 10.6 and expect it to work on everyone's 10.6 machine without a bunch of extra work. The newer version of Xcode don't even come with 10.7 SDKs anymore, but I can still easily support that OS without much hassle...
Any chance you'll be moving on from 10.6 sometime in the future? :)
best,
Zachary
hahah ^^ i was expecting something like this... i'll probably update in a near-ish future. Thanks again for your work anyway :) !
Hi everyone,
I'm happy to announce v1.1 of the MIAP suite of objects for Max/MSP and Pure Data.
Here is a summary of key changes and new features:
- Pure Data externals now built for GNU/Linux!
- Max externals run on OSX 10.7 and later (previously only 10.8 and later)
- MIAP.meyer object now reports all maps (and trajectories) contained within a loaded project file (for easier conversion to MIAP-native JSON files).
- Minor attribute name changes in MIAP.map
- Added attribute in MIAP.map to hide/show links in a map
Also, I've augmented the MIAP_mix_sources example patch. Now the patch demonstrates how to dynamically move nodes around in a map and randomly change channels associated with nodes. The ability to dynamically control map elements is one great example of what new things are possible now that the concepts of SpaceMap exists within Max and Pd. Check out the demonstration video!
v1.1 download package, videos, etc. can be found on the MIAP website:
http://www.zacharyseldess.com/miap
Thanks to everyone for the enthusiastic response to this project. I'm excited to see what people do with these unique spatial control tools. As before, I welcome feature requests, comments, etc. from anyone.
best,
Zachary
Wonderful stuff
Many thanks Zachary
matteo
Great stuff Zachary, I can confirm it's working perfectly on a Mac OS 10.7 machine here. I'll be doing some tests with MIAP next week so I should hopefully have some interesting implementations in the near future. I'll keep you informed.
Cheers,
e
Hi everyone,
I’m happy to announce v1.2.1 of the MIAP suite of objects for Max/MSP and Pure Data.
Here is a summary of changes and new features:
Max/MSP objects:
- Improved/debugged trajectory playback. Now setting @repetitions to 0 activates infinite looping.
- Added trajectory recording functionality in MIAP/MIAP~ that provides an easy mouse-based trajectory authoring option.
- Added @trajectory attribute in MIAP.map to enable/disable trajectory display.
Pure Data objects:
- Rebuilt all Pure Data objects to run in 32-bit and 64-bit versions of Pure Data and Pd-Extended on OSX and GNU/Linux.
Linux users, I’m running and building in a VM, so please do let me know if you experience any issues with these new builds.
The trajectory functionality in the Max objects is pretty full-featured, so I’ve added a tutorial video walking through everything on the MIAP website. Check it out (#8 in the playlist)!
v1.2.1 download package, videos, etc. can be found on the MIAP website:
http://www.zacharyseldess.com/miap
Thanks to everyone for their help and feedback. As always, I welcome feature requests, comments, etc.
best,
Zachary
This just keeps getting better, Zachary!
Excellent, nice one Zachary!
Really great set of objects! Thank you
I have an issue with the trajectory control though..nothing major.
I'm unable to capture the trajectory. But it works fine when I click and draw for denser nodes.
Right now the solution is to create them in cue station or to use the script.
The control rate version of the panner uses a about 80% of the CPU when playing back trajectories. Any way of reducing that? Maybe by using larger trajectory time grain?
I'm using version 1.2.1. Max 6.1.9 on Mac OS 10.8
Thanks
Hi NIKHIL,
Thanks for using the objects!
Unfortunately I can't reproduce anything you've mentioned. Trajectory recording works fine with or without densely-timed nodes on my machine (2011 Macbook Pro, OSX 10.9.5, Max 6.1.10). And the CPU load is very low (using the default trajectory time grain of 20 msecs). I've not received another report like this one, and I know the trajectory functionality is getting some use... Sorry I can't help more.
Having said all that, I have just added another incremental release to fix a few bugs with infinite trajectory repetitions, etc. Nothing that would cause the behavior you describe, IMO. But please download the latest from the site (v1.2.2) and see if that helps.
best,
Zachary
Hi Zachary,
here's a little improvisation using MIAP in conjunction with the Spatium pendulum object, the first of many I'm sure.
Also, I've developed a number of SpaceMaps and patches for stereo diffusion to a loudspeaker orchestra which I should be able to put online shortly. I've an academic paper on that same topic too which I can send you if you're interested?
Anyway thanks again Zachary, I've found these objects have been very inspiring in all sorts of ways.
Cheers,
enda
Thanks for your reply Zachary.
It's working perfectly with max 7.0.2. I have it setup for a show in New Delhi tomorrow.
The CPU still hits 60% when playing back trajectories on loop.
I'll try version 1.2.2
@Nikhil,
I wonder if this is a Max 7 issue. I don't have that installed on my system yet. If you have 6.1.x, can you please try the same patch with that and let me know?
@Enda
That video/patch/map is beautiful. I'm so glad you're using the dynamic map editing functionality too! You're the first person, aside from myself, that I've seen use that feature. It would be great to see more of what you've done with MIAP.
Would love to see your maps, and read that paper too.
best,
Zachary
Thanks Zachary! I should have plenty more stuff to come over the next while. I'll email you about that paper.
e
hi zachary,
sorry for the late reply. i just downloaded and tried version 1.2.2 and I'm able to record trajectories in max 6 again. its strange that it was broken in the previous version. anyway, its all working now.
thanks for your help!
Hi
Any plan for windows?
at least the core objects, not the interface...
Thanks
Hi Spa,
Eventually, I'd like to get the objects built for Windows. Higher priority for me is to get mouse-based map authoring implemented (so you don't need to use Meyer's CueStation software to author maps using a GUI). I'll definitely post here (and on the MIAP mail list) if I manage to build for Windows.
best,
Zachary
Here's a demo of how you can use the MIAP objects for stereo diffusion.
https://www.youtube.com/watch?v=cMceAe_BM-Q
with more details, download links, etc. here;
www.endabates.net/SpaceMaps.html
and here;
www.endabates.net/EndaBates-BEAST-FEaST-2015.pdf
Hey Zach, just wanted to chime in. A mouse-based map authoring tool would be awesome! I was never able to get a copy of the CueStation, the company does not respond to my emails. When do you think your authoring tool might be available?
CueStation is available to download for free from this link, no registration or anything is needed.
Works perfectly fine for me anyway, although of course a lot of the functionality is not needed for this, just the SpaceMap stuff.
http://www.meyersound.com/product/d-mitri/cuestation/download.html
@Enda,
Look forward to checking out those maps!
@Anthony,
The link I have on the MIAP website is what Meyer provided at the time of release. But I'll update with the link Enda just posted... use that and you should be good to go.
I'm not sure exactly when I'll get the map authoring functionality done. This work is all on nights and weekends (i.e. not my day job). Having said that though, I'm shooting for sometime in the next few months.
best,
Zachary
Hi Zachary,
I am currently working on a Max 4 Live implementation of your wonderful! MIAP works. I love the sound of the spatialization it can produce!! On thing that would be great is, if I could include some sample maps and trajectories in the device. Other objects like dict, buffer~ and others can read files that are included in the frozen .amxd file.
I am aware that that this is probably not something that will make it to a prominent position of any todo list, though... if that could be implemented it would be awesome ;)
Another possibility would be if MIAP could be linked to read from dictionaries. As maps and trajectories are plain JSON dict can load them...
In any case, thank you so much for sharing this work! It is very generous. I'll do the same as soon as my M4L device is stable.
Best Jan
Hi Jan,
Thanks for the support and for doing a Max 4 Live implementation! So are you saying it's currently not possible for the MIAP and MIAP~ objects to read JSON files when in .amxd files? I haven't tried this, so I'm not sure I understand. If you can explain a bit more what happens (errors, etc.), I can look into it.
I originally did implement the JSON i/o using the built-in dictionary API in Max, but in the end I ended up using a simpler 3rd party JSON library (Jansson) so that I wouldn't have to recode all of that stuff all over again for the Pd objects. I'll definitely keep this in mind though, as I work on updates. Thanks again for using the objects. Please share some of what you do with them!
best,
Zachary
Hi Zachary,
M4L devices have a functionality that allows to bundle files within the .amxd. Every file that is part of the Max For Live device project will be bundled into the .amxd file when the device is "frozen". It is a way to provide content for devices such as graphics/images for the UI or default contents for [buffer~] or others.
When bundled into a .amxd file the objects behave as if the file would be inside the search path. One can load/access them simply with the file name.
There is no particular error message from [MIAP] just a read mapA/B 0 when I try to load a bundled map.
I have attached a simple .amxd to illustrate this. If you click on the message box with the filename, you'll see that dict loads the file while MIAP can't. This behavior is only when the device is frozen. In an unfrozen device the .amxd will operate like a regular Max project and therefore find the file.
In my case this is not something essential. It would be simply a way to provide sample maps and trajectories for people who are new to MIAP. That would allow them to start toying around without first creating a map/trajectory. (And the Live MIAP controller could be share as s single file instead of a .zip).
Thanks again,
Jan
Hi Jan,
I don't have Max4Live so can't test this out, unfortunately. This behavior doesn't happen when building standalones, etc., so not sure what could be going wrong. If you can provide a way to reproduce this in Max somehow, I'd be glad to debug a bit. One workaround is just to insert the full path of the .amxd file before the map name (assuming you can do this in a M4L device similarly to inside Max RT or standalone).
best,
Zachary
Hi everyone!
Long time, no update, I know. I've slowly made a bunch of internal incremental updates to the externals over the years without public release, and I think now is a good time to get some people to try stuff out. Aside from a lot of internal code cleanup and refactoring that has no bearing on performance (allowing me to eventually open source the code without a feeling of utter shame ;) ), there are two key updates at this stage that may be of value to people:
1. Nice improvement in [miap.map] visual performance (i.e. visual update speed, etc.). I was doing some dumb things on the UI side... It's much snappier now, even with very large maps.
2. I finally have [miap], [miap~], and [miap.map] Windows externals! Several people over the years have asked for this, so it has been the top priority (slow as my progress has been).
Unfortunately, I haven't had the time to create a Windows version of the [miap.meyer] object, which converts Matrix3 and Dmitri maps and trajectories into MIAP-compatible JSON files. I'll probably just let Meyer do this in the future, if they want it maintained (since it's the only portion of the project that relies on their codebase).
After I get some testers to play around with the latest (need Windows people the most!), I'll be finally able to focus on Max-native UI map authoring. That will make this toolset more or less complete and self-contained (which will make me very happy, after all this time).
Folks, please join the very, very inactive mailing list if you're interested in beta testing the next release. I'll send an email out on that list sometime early this week, I hope: http://www.zacharyseldess.com/miap/contact/
Best,
Z
Author