Writing externals for Max/MSP is a daunting task. The API is somewhat weirdo (at least with pure-data the old stuff is cleanup within the years) and making a rapid proof of concept prototype external takes more time making it work than making the real code. At lot of things needs repeating. And the XCode build is ridiculously time consuming if you need to change the external name.
It's great to see people having the same problems and fix them with easy solutions :
First the Max project generator : https://github.com/olilarkin/maxbuild
This is a template project where you simply run a Python script to generate build script with your new external name. If generating a XCode project was a simple Makefile this script would have been useless, but once you get into bundle names, Frameworks, dependencies and stuff; generating a MaxSDK build is a useless and time consuming task. Bonus point: it makes a Visual Studio build also, so you don't waste time on Windows also.
And then, there is https://github.com/grrrwaaa/maxcpp; this is a "port" of the Max SDK to C++. No it is not, it is a C++ template that mimic the MaxSDK. As much as I 'sometime' hate C++, this 354 line template kinda give C++ an interesting view. In the end, the 'user' code is clear and D.R.Y. aware; closer to mxj than I thought. Really, it makes Max external programming fun and powerful; not again but for once :D
Porting this template to pure-data and bringing simple APIs accessors to Max and pd hosts would be a very interesting project.
Second project : one .cpp file generates one .mxo or .pd_linux file; everything else is automatically generated... I love this idea. This will keep me busy for the rest of the year or the next one. (I know, I need to keep working on Dexed and jsusfx~)
asb2m10
Thursday, December 4, 2014
Wednesday, June 18, 2014
Exitixe : a sonic enhancement
Ever heard of the BBE Sonic Maximizer ? Love it and/or hate it, with some old badly recorded mix, it can do very impressive things. No it is not only an EQ, it tries to phase the high harmonics (with harmonic distortion) with the lows : there is a lot a speculation about what it does here. It is my favorite mastering swiss knife.
Reading about this sonic thing; I've came to another excellent thread: http://forum.cockos.com/showthread.php?t=91439 Bottom line, it's about a reversed engineered version of a BBE 482i; so you get a little bit more insight on what the BBE process does. Liteon (a Reaper user that already have a bunch of fx into vanilla Reaper) actually did a great implementation of this effect in JSFX.
I've liked it so much that I have made a "personal" VST multi platform version. Also come with a fugly interface with "wood pattern"; just like the plugins in the 90's. The knobs are by AZ.
The code is also fugly (the plugin wrapper) but the DSP algorithm of Liteon is pretty impressive. Try it !
Source Windows OS X
Reading about this sonic thing; I've came to another excellent thread: http://forum.cockos.com/showthread.php?t=91439 Bottom line, it's about a reversed engineered version of a BBE 482i; so you get a little bit more insight on what the BBE process does. Liteon (a Reaper user that already have a bunch of fx into vanilla Reaper) actually did a great implementation of this effect in JSFX.
I've liked it so much that I have made a "personal" VST multi platform version. Also come with a fugly interface with "wood pattern"; just like the plugins in the 90's. The knobs are by AZ.
The code is also fugly (the plugin wrapper) but the DSP algorithm of Liteon is pretty impressive. Try it !
Source Windows OS X
Sunday, December 15, 2013
Dexed; DX7 software plugin emulator
I've bought NI FM7 and then FM8 but it never sounded like the original DX7. Back then, the closest "real" implementation (to my opinion) was the Nord G2 (https://github.com/msg/g2ools); and it required a Nord G2 device. Then came this project and SynprezFM that actually worked on the DX envelopes and stuff... To me as a musician, I needed a real plugin version to work and load it with a DAW.
This is why I made it a "port" that uses JUCE as a host plugin format with (music-synthesizer-for-android) code base...
Call this as a "Sprint 1".
Monday, November 11, 2013
M4L: Ruban 1.0
The first time I played with Max/MSP (it was version 4.5 if I remember right), I was hooked on groove~ with the wave display: it was instantaneous and I didn't feel carved into the walls of one single .wav file or tuning half of the buttons in Reaktor to get something fun. I have nothing against Kontakt, it is a wonderful engine, sounds great but every time I play with it, I feel like I'm writing code in Word processor with a very low resolution. Yes, it has a GUI, but on Kontakt, I get the same feeling of menu/menu/command/menu/menu like a real sampler. You need to modify a voice; save file, open wave editor, do your things, resave file, reopen Kontakt. -1 for the workflow.... And yes, there is editing feature to "edit" directly the sample in Kontakt but half of the time the mouse click does nothing, since I didn't select the right options.
All of this got me on thinking the simplicity of the original wave display on max/msp. I wanted to make a device like that. And to simplify the workflow, it is using one very large buffer (one wave file) that contains all the sounds we need to play. You can cut/copy/paste any part of the large buffer. Later, you can assign 16 different loop point within that buffer. The name of 'ruban' is the french word for 'tape'. The analogy is to be able to embolden part manipulation without having to treat each parts as single wave file.
It has 16 active slices or zones that are triggered via midi note 36 to 51. Each zone have their one envelope, pan and sample speed. If you drag a .wav of .aiff file into the "wave display", the content of this wave file will be copied into the device clipboard. And no, this clipboard is not available outside the application, I'm still trying to find a working piece of code that can read .wav file via the system windows/os x clipboard.
Special functions are also available to modify the buffer or change the borders of the zone :
"gain" : multiply the sample amplitude by an ask value
"sprout" : copies the beginning of a zone by an ask value
"slice" : create 16 equals zone within the buffer
"slicetempo" : places the end of the zone by an ask value in bars; 1 = 1 bar
"pastemix" : paste the content of the clipboard by mixing with the content of the buffer
"delete" : reset zone content to 0
This Max max for Live device requires Java (for buffer edition)
Source file : http://www.le-son666.com/asb2m10/ruban-1.0.zip
All of this got me on thinking the simplicity of the original wave display on max/msp. I wanted to make a device like that. And to simplify the workflow, it is using one very large buffer (one wave file) that contains all the sounds we need to play. You can cut/copy/paste any part of the large buffer. Later, you can assign 16 different loop point within that buffer. The name of 'ruban' is the french word for 'tape'. The analogy is to be able to embolden part manipulation without having to treat each parts as single wave file.
It has 16 active slices or zones that are triggered via midi note 36 to 51. Each zone have their one envelope, pan and sample speed. If you drag a .wav of .aiff file into the "wave display", the content of this wave file will be copied into the device clipboard. And no, this clipboard is not available outside the application, I'm still trying to find a working piece of code that can read .wav file via the system windows/os x clipboard.
Special functions are also available to modify the buffer or change the borders of the zone :
"gain" : multiply the sample amplitude by an ask value
"sprout" : copies the beginning of a zone by an ask value
"slice" : create 16 equals zone within the buffer
"slicetempo" : places the end of the zone by an ask value in bars; 1 = 1 bar
"pastemix" : paste the content of the clipboard by mixing with the content of the buffer
"delete" : reset zone content to 0
This Max max for Live device requires Java (for buffer edition)
Source file : http://www.le-son666.com/asb2m10/ruban-1.0.zip
Sunday, June 2, 2013
First Glasgow release
Generating music straight from a computer language has always been very fascinating for me. Off course, the code will never replace the
composer, but it becomes a very interesting tool if it is used at the right place. There is a lot of offering and some very cool implementations like :
- AC Toolbox - cool old school LISP tool.
- noatikl - complete all in one solution. Impressive demo.
- mxdublin - this one is my latest (2008) experiment. Too complex and heavy. It is dead.
- The tool should not be a sequencer. In this implementation, the sequencer is Ableton Live and it does a great job. Once the notes are generated, the tool is not required to "play" the song, it is only use to change the live clips. This technique is used to have a minimal impact on the existing composition workflow.
- The tool should only be used to generate notes and ctrl events; no raw midi events. Midi channel and routing should be programmable by the sequencer/host it self.
- Time is always relative to the sequencer speed; nothing gets calculated in milliseconds. 0.25 means one quarter note (1/4). 1 means four quarter notes (4/4) or a whole note.
- The event stream of data should not be encapsulated in a complex object. A event stream in Glasgow should
be a simple array and this array should only contains the data of a simple Live clip.
[ [ 0, 64, 127, 0.25 ], [ 0, 66, 127, 0.25 ] ]
Events with 4 elements are notes (time, note, velocity, duration). Glasgow API helps you write those type of arrays but if you don't like them, you can make your own API that outputs this type of data. Events with 3 elements (time, midicc, value) could support midi controller change but the M4L API doesn't support that. I am thinking of opening a ticket at Cycling '74 for that. - The API should be adaptive based on the type of data. If it is a string, try to parse it into a list. If it is a list, create an iterator based on this list. If it is already an iterator, use it to create the events. Don't create different API for each data type, this is Javascript, let the API adapt it self to the data that is passed.
So this is Glasgow 0.1; it is a Max For Live plugin that enable to write (and get) the content of midi clips by Javascript code. maxforlive.com download
And by Javascript code, I mean this :
// this generates a beat (mapped to a bassdrum, snare, hihat)
[ mkp( "0:1", "C-3" ),
mkp( "0:2:2.2:-4", "D-3"),
mkp( "0:0.5:0.3/4", "A#4") ]
This is a work in progress. I will add the chord generation within the next version.
Git repository: https://github.com/asb2m10/glasgow
Monday, October 22, 2012
Reading Ensoniq EPS .EDE floppies
Since I was a kid I wanted a sampler; back then, samplers were expensive and a standard synth was more flexible for a lot less. Then computers catched up with hardware and samplers became more and more obsolete. Got Kontakt, wich is not bad (don't like the workflow) but sounded astonishingly great. But a "wave cooked" by an old DSP doesn't sound the same, and near zero latency is noticeable (if not, very cool). Then I saw a local ad for a Ensoniq EPS16+. Got it and it rocks. It does sound different, the keys are great and the sampling facility is also well made. Sadly, I have a some 144 Error+, hope to be able to fix this thing... Anyway, the the device came with 300 floppies...
I have read and read on the net a way to read the original diskette that comes with it. Because the information is mixed from 1991 to 2012; there is a lot of dead software and alternative solutions. Here is a quick status on what you can do with Ensoniq EPS disk:
1. You will need a PC floppy reader; USB floppy drive will not work. This is because the program needs to do low level calls to the floppy reader that are not implemented in a USB floppy drive. It is possible to do those calls with a complete floppy emulator like this: Kryoflux; but an old PC might be less expensive.
2. Originally, only the DOS program epsread was able to read EPS disk; this program didn't ran on NT (read XP and more), so you needed an old windows/dos installation to read those disks. Somebody was kind enough to write a Linux and Windows software that does the low level calls : epslin. Open source. Works on XP and Windows 7 using a lowlevel floppy driver called fdrawcmd.
3. File format: ".img" files are a 1 to 1 I/O dump of a EPS disk. (sidenote to Linux users: dd if=/dev/floppy out=epsdisk.img will not work since the sectors are not align like a pc disk, use epslin to do that). A ".ede" format is like a simple dump image (.img) with a 512k header that contains the disk description. Use this format since it is the most common one.
4. Once you have extracted the ".ede" files, you can use epslin to extract the actual instrument called ".efe". Another program named EnDiskEx can also extract ".efe" instruments from multiple ".ede" files. Once it is extracted, it is possible to load the instrument (".efe") in Kontakt.
4A. There is commercial alternatives to read ".ede" disks, but I didn't tried them : Chickensys Translator Pro or Awave Studio; it should translate ".ede" to the format you want.
5. There is a way to get rid of the floppies by using HxC Floppy Emulator. Plug the 34-pin floppy interface from the EPS sampler from this device and you will be able to read ".ede" floppies from a SDCard; directly from the sampler.
youtube demo
Some dated but usefull info on the EPS, EPS16+ and ASR10 format: Ensoniq EPS/ASR KB
I have read and read on the net a way to read the original diskette that comes with it. Because the information is mixed from 1991 to 2012; there is a lot of dead software and alternative solutions. Here is a quick status on what you can do with Ensoniq EPS disk:
1. You will need a PC floppy reader; USB floppy drive will not work. This is because the program needs to do low level calls to the floppy reader that are not implemented in a USB floppy drive. It is possible to do those calls with a complete floppy emulator like this: Kryoflux; but an old PC might be less expensive.
2. Originally, only the DOS program epsread was able to read EPS disk; this program didn't ran on NT (read XP and more), so you needed an old windows/dos installation to read those disks. Somebody was kind enough to write a Linux and Windows software that does the low level calls : epslin. Open source. Works on XP and Windows 7 using a lowlevel floppy driver called fdrawcmd.
3. File format: ".img" files are a 1 to 1 I/O dump of a EPS disk. (sidenote to Linux users: dd if=/dev/floppy out=epsdisk.img will not work since the sectors are not align like a pc disk, use epslin to do that). A ".ede" format is like a simple dump image (.img) with a 512k header that contains the disk description. Use this format since it is the most common one.
4. Once you have extracted the ".ede" files, you can use epslin to extract the actual instrument called ".efe". Another program named EnDiskEx can also extract ".efe" instruments from multiple ".ede" files. Once it is extracted, it is possible to load the instrument (".efe") in Kontakt.
4A. There is commercial alternatives to read ".ede" disks, but I didn't tried them : Chickensys Translator Pro or Awave Studio; it should translate ".ede" to the format you want.
5. There is a way to get rid of the floppies by using HxC Floppy Emulator. Plug the 34-pin floppy interface from the EPS sampler from this device and you will be able to read ".ede" floppies from a SDCard; directly from the sampler.
youtube demo
Some dated but usefull info on the EPS, EPS16+ and ASR10 format: Ensoniq EPS/ASR KB
Tuesday, January 12, 2010
OrganSeq
After years of working with a organ drumbox, I've found out some great potential playing with those machines. Yes, I know, they do have an awesome analog feel, especially those with a spring reverb but there is also another secret about those machines: some bands in the '70s from Berlin (godfathers of ambiant music), a dude from Paris (godfather of new-age) and a band from New-York (godfather of synthpunk and new wave) did use it pretty well.
While those machines had only pre-programmed beats (rumba 1, rumba 2, latin 1, latin 2, rock 1, rock 2, etc, etc...), there were a quick hack: if you press both "beat select" buttons at the same time (example: latin 1 + rock 2) : it actually mix both sequences together. This feature gave the organ drumbox a awesome live/jam possibilities. A possibility that any modern (if you call a 808 modern) forgot to support. I recall that the Boss DR-55 had the hi-hat feature for sequencing them all open on 8 step or 16 step with a single switch. Very fun to play with.
This max for live patch is a re-creation of this feature: a way to mix multiple patterns together, whatever musical signature.
Features :
I know there is still work to do, especially for more presets, but consider this as a first draft.
While those machines had only pre-programmed beats (rumba 1, rumba 2, latin 1, latin 2, rock 1, rock 2, etc, etc...), there were a quick hack: if you press both "beat select" buttons at the same time (example: latin 1 + rock 2) : it actually mix both sequences together. This feature gave the organ drumbox a awesome live/jam possibilities. A possibility that any modern (if you call a 808 modern) forgot to support. I recall that the Boss DR-55 had the hi-hat feature for sequencing them all open on 8 step or 16 step with a single switch. Very fun to play with.
This max for live patch is a re-creation of this feature: a way to mix multiple patterns together, whatever musical signature.
Features :
- 16 step programmable sequencer
- each of those sequences are bound to a different time signature and length
- all of those sequences are played independently and can be played at the same time
- the triggers to start/stop a sequence are mapped beyond the midi note c-7. Other midi notes are pass trought the midi effect, this way you can still send midi notes on your own.
I know there is still work to do, especially for more presets, but consider this as a first draft.
Subscribe to:
Posts (Atom)