ftm and mnm

anamaria's icon

Hi,

It seems like the ftm and the mnm objects are good for pattern recognition. Since I am new to the terminology used in connection with pattern recognition, I have difficulties understanding all the terms surrounding the documentation of these max objects ... is there anyone who have tought a course in these max objects or use them on a regular basis? (And did you put any information online?)

Currently, I would like to record a stream of sensor data into a list that then can be analysed and played back, one number at a time: Below I post a maxpatch that illustrates what I would like to do:

{
    "boxes" : [         {
            "box" :             {
                "maxclass" : "ftm.object",
                "text" : "...",
                "description" : "ftm.message",
                "ftm_objref_conv" : 0,
                "outlettype" : [ "", "" ],
                "scope" : 0,
                "fontsize" : 11.0,
                "presentation_rect" : [ 26.0, 301.0, 95.943848, 18.0 ],
                "numinlets" : 1,
                "patching_rect" : [ 26.0, 301.0, 95.943848, 18.0 ],
                "id" : "obj-15",
                "ftm_scope" : 1,
                "fontname" : "Arial",
                "persistence" : 0,
                "numoutlets" : 2,
                "name" : "..."
            }

        }
,         {
            "box" :             {
                "maxclass" : "comment",
                "text" : "Then I would like to split the 1D array up into sub-arrays everytime there is a section where the sensor value is 0",
                "fontsize" : 11.0,
                "numinlets" : 1,
                "patching_rect" : [ 180.0, 297.0, 613.0, 19.0 ],
                "id" : "obj-13",
                "fontname" : "Arial",
                "numoutlets" : 0
            }

        }
,         {
            "box" :             {
                "maxclass" : "kslider",
                "outlettype" : [ "int", "int" ],
                "numinlets" : 2,
                "patching_rect" : [ 44.0, 402.0, 336.0, 53.0 ],
                "id" : "obj-12",
                "numoutlets" : 2
            }

        }
,         {
            "box" :             {
                "maxclass" : "comment",
                "text" : "Then I would like to switch the order of the sub-arrays and put them together in one new array that then can be played back from start to end.",
                "linecount" : 2,
                "fontsize" : 11.0,
                "presentation_rect" : [ 172.0, 333.0, 0.0, 0.0 ],
                "numinlets" : 1,
                "patching_rect" : [ 177.0, 335.0, 492.0, 32.0 ],
                "id" : "obj-11",
                "fontname" : "Arial",
                "numoutlets" : 0
            }

        }
,         {
            "box" :             {
                "maxclass" : "comment",
                "text" : "Sensor values stored in a 1D array",
                "fontsize" : 11.0,
                "presentation_rect" : [ 183.0, 262.0, 0.0, 0.0 ],
                "numinlets" : 1,
                "patching_rect" : [ 183.0, 262.0, 450.0, 19.0 ],
                "id" : "obj-10",
                "fontname" : "Arial",
                "numoutlets" : 0
            }

        }
,         {
            "box" :             {
                "maxclass" : "comment",
                "text" : "I would like to record a stream of data into a column in the fmat object",
                "fontsize" : 11.0,
                "presentation_rect" : [ 185.0, 215.0, 0.0, 0.0 ],
                "numinlets" : 1,
                "patching_rect" : [ 185.0, 215.0, 450.0, 19.0 ],
                "id" : "obj-7",
                "fontname" : "Arial",
                "numoutlets" : 0
            }

        }
,         {
            "box" :             {
                "maxclass" : "comment",
                "text" : "simulate sensor value - a continuous stream of data ...",
                "fontsize" : 11.0,
                "numinlets" : 1,
                "patching_rect" : [ 120.0, 131.0, 316.0, 19.0 ],
                "id" : "obj-6",
                "fontname" : "Arial",
                "numoutlets" : 0
            }

        }
,         {
            "box" :             {
                "maxclass" : "ftm.object",
                "text" : "sensorvalue",
                "description" : "ftm.play",
                "ftm_objref_conv" : 0,
                "outlettype" : [ "", "" ],
                "scope" : 0,
                "fontsize" : 11.0,
                "presentation_rect" : [ 44.0, 334.0, 120.943848, 18.0 ],
                "numinlets" : 1,
                "patching_rect" : [ 44.0, 334.0, 120.943848, 18.0 ],
                "id" : "obj-5",
                "ftm_scope" : 0,
                "fontname" : "Arial",
                "persistence" : 0,
                "numoutlets" : 2,
                "name" : "sensorvalue"
            }

        }
,         {
            "box" :             {
                "maxclass" : "ftm.object",
                "text" : "fmat 512 1",
                "description" : "fmat 512 1",
                "ftm_objref_conv" : 0,
                "outlettype" : [ "", "" ],
                "scope" : 0,
                "fontsize" : 11.0,
                "presentation_rect" : [ 44.0, 263.0, 134.943848, 18.0 ],
                "numinlets" : 1,
                "patching_rect" : [ 44.0, 263.0, 134.943848, 18.0 ],
                "id" : "obj-3",
                "ftm_scope" : 0,
                "fontname" : "Arial",
                "persistence" : 0,
                "numoutlets" : 2,
                "name" : "sensorvalue"
            }

        }
,         {
            "box" :             {
                "maxclass" : "ftm.object",
                "text" : "sensorvalue",
                "description" : "ftm.record",
                "ftm_objref_conv" : 0,
                "outlettype" : [ "", "" ],
                "scope" : 0,
                "fontsize" : 11.0,
                "presentation_rect" : [ 44.0, 215.0, 131.943848, 18.0 ],
                "numinlets" : 1,
                "patching_rect" : [ 44.0, 215.0, 131.943848, 18.0 ],
                "id" : "obj-2",
                "ftm_scope" : 2,
                "fontname" : "Arial",
                "persistence" : 0,
                "numoutlets" : 2,
                "name" : "sensorvalue"
            }

        }
,         {
            "box" :             {
                "maxclass" : "slider",
                "outlettype" : [ "" ],
                "numinlets" : 1,
                "patching_rect" : [ 44.0, 44.0, 64.0, 138.0 ],
                "size" : 100.0,
                "id" : "obj-1",
                "numoutlets" : 1
            }

        }
],
    "lines" : [         {
            "patchline" :             {
                "source" : [ "obj-5", 0 ],
                "destination" : [ "obj-12", 0 ],
                "hidden" : 0,
                "midpoints" : [ ]
            }

        }
]
}

Mayou's icon

Hello,

Maybe you should check the gesture follower patch from IRCAM.

It provides pattern recognition from LCD object but also from sensors like Wii remote and any other motion sensors (V.0.3) (so a continuous stream of data). Pretty sure it comes with helpfiles.

Have a nice day,

Mathieu

anamaria's icon

Yes, I have looked at the gesture follower patches ... it is very complex and specific towards one type of gesture analysis. I would like to look at a list of captured sensor data, then analyze it according to my own criteria (explained in the above pasted max patch) and then construct a new list from the captured sensor data that I "play back" one number from the list at a time.

It would be nice, if there were tutorials where important parts of the gesture follower patch was explained:
* How to record a stream of numbers into a list
* How to play this stream of numbers back one by one with a metro
* How to analyze this list (Low/high peaks and peak positions (row number) in the list)
* How to divide the list up according to high/low peaks (into sublists)
* How to change the order of- or delete/add sublists and then assemble them again into one list

I like how the ftm tutorials work - I wonder, if there is a more simple way to make mnm tutorials?

Ana

Mayou's icon

What about the coll object ?

* You send your stream of numbers into a coll object from the movement start to the end. (+ a gate object ?)

* Then (metro + counter) object linked to the coll object make you playback the numbers one by one.

* You can find the low/high values in the call with some messages sent to the call object (you may take a look to zl objects too, there are quite good sorting issues, but the coll object is quite good to insert values).

* You may tag the high / low values in the coll. (Or with Zl objects) and then make new coll objects or new zl lists and then order / delete / add sublists with message commands.

I can not give you more precise ideas or more help on ftm/mnm since I am a new max user (6 months since I have discovered Max).

I Hope you will find a solution

Mathieu

Mayou's icon

Well it matches a bit what pizza_olives was saying a few days ago :

"Hello,

maybe just [pack] data with [timer] value, then [zl iter 2] your list (or store data in a [coll]), to compute what you want with [post], [throught], [mean] ?"

Bruno Zamborlin's icon

Hello,
for what you want to do, please have a look to the new beta version of the Gesture Follower subscribing to the following mailing-list: http://listes.ircam.fr/wws/info/gesturefollower

The new version is now independent from FTM and has been implemented as a single Max5 external, much easier to use.
The zip file also contains iMubu (a graphical editor) and several tutorials and examples.

I will update the website soon :)

Bruno

Olivier Sebillotte's icon

Hi Bruno,

I subscribed to the mailing list but I can't see anything, no archive, no shared document.
More over, this list is not in the mailing lists list
each time I subscribe I only get this message:
"La demande a été soumise au gestionnaire de la liste "

is it normal ?

thanks for you help

olivier

Olivier Sebillotte's icon

Hi again
I don't know if you did something but I can access all the datas now :-)

Thanks anyway for your great work, I am still analysing the help file but it looks very promising.

olivier

james's icon

has anyone had bother getting data out of the gesture follower examples, because for whatever reason when im trying to receive the data from the various sends found within the patch, im coming up with nothing or ftmobject not recognised, is the data sent in a different format if so has anyone been able to do a conversion of the data back to stuff max understands

james's icon

trying to access the integer box that tells u which gesture its recognised top right hand corner but having alot of difficulty for some reason

james's icon

never mind i sorted it lol