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

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.
By using those tools and even designing one, I have learn some implementation lessons :
  • 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.


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

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 :
  • 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.
Download it here: organseq.zip

I know there is still work to do, especially for more presets, but consider this as a first draft.

Tuesday, December 22, 2009

Loopex 1.1

Update of my loop based software.

Loopex is a all propose looping machine written in Max/MSP. Loopex can cut/copy/paste/pastemix/delete any regions loop to any buffers.

see demo:



get it here: loopex-1.1.zip

Monday, October 5, 2009

Sync that DR-55

We are now on the working on producing the show from our new album. one of the songs uses arps, midi sequence and a boss dr-55 drumbox. If we want to make that song, we need to sync it with midi gear; the dr-55 is almost 30 years old you know...



The be able to do that, I looked at the external port that comes with the device:

DBS: on this port; we can see a analog tick at each 8ppq. Since the internal clock can be ridiculous fast, I've change it to a 48ppq!!!

CSQ: I don't know what this one does, it doesn't seems to output anything. according to what I've seen, it is supposed to be an output port for other roland gear (CSQ stands for Computer SeQuence). maybe this port is an input port, good for slaving the device ???

Foot switch: I've heard you can slave a Dr-55 with the foot switch, but it only seems to start/stop the sequence. quite useless to sync midi gear to my opinion.



Now, to be able to sync that device with midi, I wrote a simple max/msp application that reads the analog signal and then transform it into midi 0xF8 clock sync status byte. not perfect but it does the job. 30 years old and still young, like me???

max patch