Advanced Max: Standalones, Part 3
Want to build a standalone Mac or Windows application? With Max, you can do just that and I will show you how. The result is an independent application anyone can run on their Mac or Windows machine with no Max installation required.
In the third installment in our series on creating standalone applications. I’ll spend 40 minutes guiding you through the process of creating your own file format, showing you how to make your app read and write documents, customizing menu bars, and even giving you the inside scoop on a secret object. All the tutorials in this series: Part 1, Part 2, Part 3, Part 4, Part 5
by Timothy Place on
Feb 14, 2018 12:42 AM
- JB SmithFeb 14 2018 | 5:48 pmHi Timothy I've hit a wall with some standalone apps I've made available to music teachers to help students with sight reading. Is there any way to "sign" a Max standalone so users don't have to disable gatekeeper prefs to open it? JB Smith
- Timothy PlaceFeb 14 2018 | 6:31 pmHi JB! That topic will be addressed in a future video in this series!
- MaMeFeb 15 2018 | 9:11 amHi Timothy The object Opened does not seem to work inside a standalone application.
- ErnestFeb 16 2018 | 8:38 amHI timothyThe procedure for putting the path to the external file won't work after building a standalone. On Windows, the path to data includes the username, and other locations are write protected. On Macs it might work, but not if the user runs the app on the desktop, for example. So after distributing a standalone, the path will be wrong on other machines. In some cases it will present an open dialog to find the proper file, if for example using pattrstorage with savemode set to 3. But my general experience with Mac users is they write me to tell me it doesnt work, without any further specifics, the moment they see a file-open dialog. The reason is that the app has no way to know where to set the defualt path, so they have to navigate to it, and they don't expect that.There's a number of solutions, and I look forward to hearing your preferred option.
- Timothy PlaceFeb 16 2018 | 3:13 pm@MaMe Thanks for that report! I just fixed the opened object problem and that will be in a forthcoming release.@Ernest I need a little more background on what you are reporting as I could interpret that several different ways. A step-by-step sequence for me to reproduce would be most helpful. Thanks!
- ErnestFeb 16 2018 | 3:20 pmOh, You build the app and open it. Then if the file isn't on the search paths set for Cycling74, it can't find the file and shows an open dialog, if it's a type of object that does (for others, like pattrstorage, it may only display an error in the console). But the path location of the open dialog is the path to the last file it opened, or defaults to C:\ root on Windows, which is what perplexes users.it's a bit difficult to share as its 25~100 MB.
- TConnorsFeb 17 2018 | 8:51 pmGreat tutorials!
- maybitesFeb 22 2018 | 9:21 pmcool thing this opened object! I was glad to learn that a solution for this problem is on the way. It also works when the file is dragged to the console.I assume we can get rid of the opening of the text editor when we choose a different file type like:max fileformat .sparck SPRK 0 "sparck file" file;so max will not know what to do with it, but [opened] still passes on the info.it seems to work, but maybe this has some repercussions I dont see, yet?
- Timothy PlaceFeb 22 2018 | 9:55 pmNo repercussions, your observation is completely correct.
- maybitesFeb 22 2018 | 9:57 pmthanks. so I will wait for the next release :-)
- MaMeMar 07 2018 | 10:42 am@Timothy Is there a way to get only the opened object before the next release ? and this tutorial doesn't appear is the list of tutorials in the Cycling74 website menu. Thanks
- Timothy PlaceMar 12 2018 | 4:31 pm@MAME @MAYBITES The fix for the [opened] object is in Max 7.3.5 which we've just released! Enjoy!
- lancehulmeMar 12 2018 | 8:52 pmHi Timothy, I'm having to recompile all my application in Max7.3.5 and not enjoying it. I've run the gamut of possibilities trying to get an application to read midi files. No matter where and how I place it, I get the same error message: seq [filename].mid can't open. What am I doing wrong? Thanks!
- Timothy PlaceMar 12 2018 | 8:59 pm@Lancehulme Do you have the same problem in Max? Or just in your app?
- lancehulmeMar 13 2018 | 12:36 amNo. Just in the apps (multiple). I've tried any number of different approaches to read files, none of which have worked. I've also created dummy apps to see if it was something in my patches or systematic to reading MIDI files in general and it's the latter. Any and all help is appreciated. Thanks! LH
- MaMeMar 13 2018 | 9:26 am@TimothyThe "opened" object now works in a standalone but can we use it without the text editor window opening automatically?I have tried several things by changing the file type in the /init/max-fileformats. txt file but whatever the specified format type, opened indicates that it has opened a TEXT file and the text editor window loads the file automatically.Is it possible to use "opened" inside a standalone in a discrete way?
- lancehulmeMar 21 2018 | 12:31 amHi Timothy,Any progress w/ my standalone apps not reading .mid files?Thanks! LH
- Timothy PlaceMay 14 2018 | 9:34 pmHi Lance,I cannot reproduce the problem. I built a standalone out of the seq help patcher. When I click the "open" message and choose a .mid file it loads and plays. I wonder if there is something special about your app?If you are able to share it, please send your app into email@example.com and we'll take a look.Cheers!
- CodyMay 20 2019 | 8:07 pmHi Tim!First of all, great tutorials, I loved the FFT series and i'm gonna dive into packages after this one. Keep em coming, I can't get enough!Quick question and I'm guessing the answer is yes, but I'm looking for some validation. I skipped Max6 so I'm trying to play catch up a bit here.One could use the dict object (new to me from this video) to create multiple dictionaries for a polybuffer and pattrstorage and then combine them into a SUPER dictionary that is the combination of those "child" dictionaries to, therefore, save one .party file for the app instead of multiple .party files etc.Am I on the right track?Thanks in advance!
- Timothy PlaceJul 18 2019 | 8:29 pmHey Cody,I'm not sure of the exact details of what you are trying to do. The pattrstorage object, for example, may want to directly control the reading and writing of it's files. So while I'm not entirely optimistic that this will work to combine things you can certainly try and see what works for you.Cheers!
- CodyJul 25 2019 | 2:31 pmHey Tim,Thanks for the reply! It's hard to remember exactly what I was thinking when I wrote the comment lol. But basically I was looking for a way for my patch to save ONE file instead of a .json file and a .txt file etc. Dictionaries seemed the best way to do that since I could nest dictionaries but it would mean translating everything out of pattrstorage and into the dictionaries syntax.Thanks again!
- Connor PogueAug 02 2022 | 12:30 amIs there a way to remove the default menu bar items such as: "show max console" , "about max" ,"midi setup", "overdrive" etc... ?
- Source AudioAug 02 2022 | 11:59 amyes, by editing maxinterface.json file. here is one, with all that stuff removed:but take care not to replace max one with it. Everything is removed, but quit ... any custom added menu items work as expected.I use it in all standalones, but good practice is to replace it only after verifying that no errors get displayed in console on initial standalone run, and if all is ok, then replace it. (because also call to open max console is removed)Removing maxinterface.jon file entirely from standalone would produce same effect, if one needs no menus at all, but some gui elements then work a bit reduced, like umenu ignores selection colors etc.
- Connor PogueAug 04 2022 | 3:10 amThank you!