1

**PreenFM2 / Re: Non-linear waveshaping on the PreenFM2**

« **on:**February 27, 2018, 12:30:02 PM »

its probably ok to post this little photo snippet from Le Brun's AES paper =>

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Pages: [**1**]

1

its probably ok to post this little photo snippet from Le Brun's AES paper =>

2

>>>

I found a Puredata patch that calculates Chebyshev Polynomials!

I first tried using the output of the array to quickly get 1024 plot points but it totally failed. The waveform represented in the GUI for the array isn't the same as the output. I did get a really awesome ramp waveform that I'm going to use.

Next, I recorded the each polynomial at 46.87hz to get exactly 1024 samples and the waveforms sound amazing! As you suspected the aliasing is greatly diminished. I'll post user waveform txt files tomorrow. In the meantime poke around the Pd file.

<<<

Great stuff!

I'm doing a bunch of Chebyshev tables in Mathematica + the ones in Daniel Arfib's paper. Here are some quick tests at 1024 samples => T2 to T13 with graphic plots of the table function. I'll try a few at smaller sizes at some point too. Note that T11 has a big click [which I like of course!] as interpreted by Preen, and I think this is something to do with how the import works. ?? It will be interesting to hear the differences in table sizes too.

EDIT

Refs to Arfib's paper =>

this is a free pdf, but is an early version with lot of handwritten bits =>

https://quod.lib.umich.edu/i/icmc/bbp2372.1978.009/1/--digital-synthesis-of-complex-spectra?page=root;size=100;view=text

and an even earlier one here =>

https://quod.lib.umich.edu/i/icmc/bbp2372.1977.001/--digital-synthesis-of-complex-spectra?rgn=main;view=fulltext

the full paper ended up in AES, but its behind the dreaded academic paywall =>

http://www.aes.org/e-lib/browse.cfm?elib=3178

with a slim chance of being able to maybe view online here for free? =>

https://www.researchgate.net/publication/243764314_Digital_Synthesis_of_Complex_Spectra_by_means_of_Multiplication_of_Non-linear_Distorted_Sine_Waves

+

I just spotted in my little example preset that OP1 is set to keybd, which would also normally be set to fixed for classic waveshaping. Having it track the keyboard will push it more or less away from zero hertz, depending on tuning table.

Which also reminded me that there is a little section on low frequency carriers in Chowning & Bristow, FM Theory and Applications: By Musicians for Musicians p97 - 102.

EDIT 2

Marc Le Brun's classic AES paper Digital Waveshaping Synthesis is also behind paywall, have not located a readable version of this online => http://www.aes.org/e-lib/browse.cfm?elib=3212

I've got copies of both Arfib and Le Brun's papers, from photocopies I made in the 90s, but as they are copyrighted I obviously can't scan & upload them..

I found a Puredata patch that calculates Chebyshev Polynomials!

I first tried using the output of the array to quickly get 1024 plot points but it totally failed. The waveform represented in the GUI for the array isn't the same as the output. I did get a really awesome ramp waveform that I'm going to use.

Next, I recorded the each polynomial at 46.87hz to get exactly 1024 samples and the waveforms sound amazing! As you suspected the aliasing is greatly diminished. I'll post user waveform txt files tomorrow. In the meantime poke around the Pd file.

<<<

Great stuff!

I'm doing a bunch of Chebyshev tables in Mathematica + the ones in Daniel Arfib's paper. Here are some quick tests at 1024 samples => T2 to T13 with graphic plots of the table function. I'll try a few at smaller sizes at some point too. Note that T11 has a big click [which I like of course!] as interpreted by Preen, and I think this is something to do with how the import works. ?? It will be interesting to hear the differences in table sizes too.

EDIT

Refs to Arfib's paper =>

this is a free pdf, but is an early version with lot of handwritten bits =>

https://quod.lib.umich.edu/i/icmc/bbp2372.1978.009/1/--digital-synthesis-of-complex-spectra?page=root;size=100;view=text

and an even earlier one here =>

https://quod.lib.umich.edu/i/icmc/bbp2372.1977.001/--digital-synthesis-of-complex-spectra?rgn=main;view=fulltext

the full paper ended up in AES, but its behind the dreaded academic paywall =>

http://www.aes.org/e-lib/browse.cfm?elib=3178

with a slim chance of being able to maybe view online here for free? =>

https://www.researchgate.net/publication/243764314_Digital_Synthesis_of_Complex_Spectra_by_means_of_Multiplication_of_Non-linear_Distorted_Sine_Waves

+

I just spotted in my little example preset that OP1 is set to keybd, which would also normally be set to fixed for classic waveshaping. Having it track the keyboard will push it more or less away from zero hertz, depending on tuning table.

Which also reminded me that there is a little section on low frequency carriers in Chowning & Bristow, FM Theory and Applications: By Musicians for Musicians p97 - 102.

EDIT 2

Marc Le Brun's classic AES paper Digital Waveshaping Synthesis is also behind paywall, have not located a readable version of this online => http://www.aes.org/e-lib/browse.cfm?elib=3212

I've got copies of both Arfib and Le Brun's papers, from photocopies I made in the 90s, but as they are copyrighted I obviously can't scan & upload them..

3

just posting a pic of non-functioning attempt at getting this firmware going on an old board. I ended up abandoning its previous project and removing other parts.. so thought might as well try and get it used for something.

I was wondering how easy it might be to get a minimal build to see if I can download the firmware correctly. Is it possible to just get a bare board+the required usb stick and test to see if appears over USB?

I didn't get anything on the LCD, but I was hoping might see something over the USB in a MIDI app but nothing..

I dont have much/any more time to look at it for now, but thought might try and revive this thread and see if anyone else has been trying this board?

I was wondering how easy it might be to get a minimal build to see if I can download the firmware correctly. Is it possible to just get a bare board+the required usb stick and test to see if appears over USB?

I didn't get anything on the LCD, but I was hoping might see something over the USB in a MIDI app but nothing..

I dont have much/any more time to look at it for now, but thought might try and revive this thread and see if anyone else has been trying this board?

4

quick bug possibility ?

can't set voices to more than 8 with alg's 1 to 6.

otherwise working fine so far on my mac os x 10.12.2

can't set voices to more than 8 with alg's 1 to 6.

otherwise working fine so far on my mac os x 10.12.2

5

Enclosed is a quick example as a sysex file.

This uses ALG1, op1 set to 0Hz. The mod wheel is mapped to IM1, which will give an example of the timbral change. Also try changing both operators waveshape.

To get classic waveshaping, I would suggest making some user text wavetables of Chebyshev polynomials =>

https://en.wikipedia.org/wiki/Chebyshev_polynomials

https://courses.cs.washington.edu/courses/cse490s/11au/lectures/E-Non-linearSynthesis.pdf

from the pdf =>

*Cheby0 = 1*

Cheby1 = x

Cheby2 = 2x^2 - 1

Cheby3 = 4x^3 - 3x

Cheby4 = 8x^4 - 8x^2 + 1

Cheby5 = 16x^5 - 20x^3 + 5x

...

Also see this paper for all the classic refs =>

A Tutorial on Non-Linear Distortion or Waveshaping Synthesis

C. Roads

Computer Music Journal

Vol. 3, No. 2 (Jun., 1979), pp. 29-34

can be read online free =>

https://www.jstor.org/stable/3680281?seq=1#page_scan_tab_contents

This uses ALG1, op1 set to 0Hz. The mod wheel is mapped to IM1, which will give an example of the timbral change. Also try changing both operators waveshape.

To get classic waveshaping, I would suggest making some user text wavetables of Chebyshev polynomials =>

https://en.wikipedia.org/wiki/Chebyshev_polynomials

https://courses.cs.washington.edu/courses/cse490s/11au/lectures/E-Non-linearSynthesis.pdf

from the pdf =>

Cheby1 = x

Cheby2 = 2x^2 - 1

Cheby3 = 4x^3 - 3x

Cheby4 = 8x^4 - 8x^2 + 1

Cheby5 = 16x^5 - 20x^3 + 5x

...

Also see this paper for all the classic refs =>

A Tutorial on Non-Linear Distortion or Waveshaping Synthesis

C. Roads

Computer Music Journal

Vol. 3, No. 2 (Jun., 1979), pp. 29-34

can be read online free =>

https://www.jstor.org/stable/3680281?seq=1#page_scan_tab_contents

6

Apologies if this has been discussed already? Have not seen anything about it so thought would post.

It is possible and very simple to do non-linear waveshaping on the PreenFM2 by setting carrier oscillators to 0Hz, and the selected waveform becomes the non-linear transfer / shaping function.

Its detailed in section 5.6 in this great little FM programming book by Herbert Janssen =>

http://www.herbert-janssen.de/doc/sy-prog.pdf

Be sure to check out his main page here =>

http://www.herbert-janssen.de/sy.html

This can be done on any FM synth where the osc's can be set to 0Hz.

It is possible and very simple to do non-linear waveshaping on the PreenFM2 by setting carrier oscillators to 0Hz, and the selected waveform becomes the non-linear transfer / shaping function.

Its detailed in section 5.6 in this great little FM programming book by Herbert Janssen =>

http://www.herbert-janssen.de/doc/sy-prog.pdf

Be sure to check out his main page here =>

http://www.herbert-janssen.de/sy.html

This can be done on any FM synth where the osc's can be set to 0Hz.

7

hi everyone

i only a have a sec to write this, so apologies for brevity. am loving the PreenFM2.. i've just uploaded a little Farey PreenFM2 programmer here to github, brief info below. its written in Processing so anyone should be able to run it if you get a copy of Processing. hope folks find it useful, its a pretty early version..

cheers

dave

https://github.com/noyzelab/FareyPreenFM2

readme ->

FareyPreenFM2

Farey sequence family ratios generator/programmer for the PreenFM2 synthesizer

David Burraston

April 2017

http://www.noyzelab.com

commands =>

'z': //decrement farey order 'x': //increment farey order

'c' : //decrement family index 'v' : //increment family index

'b': // decrement carrier (op1) family member

'n': // increment carrier (op1) family member

'm': // decrement carrier (op2) family member

',': // increment carrier (op2) family member

'r': // randomize all farey parameters

's': // send all integer ratios (C) to preenfm op1&3 pair and op2&4 pair

'1' : // send intetger ratios to preenfm op1&3 pair

'2' : // send intetger ratios to preenfm op1&3 pair

'f': // send as floating point ratios (FLC) to preenfm op1&3 pair and op2&4 pair modulator normalised to 1.00

'!' : // send as floating point ratios to preenfm op1&3 pair modulator normalised to 1.00

'@' : // send as floating point ratios to preenfm op2&4 pair modulator normalised to 1.00

'g': // send as floating point ratios to preenfm (FLM) op1&3 pair and op2&4 pair carrier normalised to 1.00

'-' : // send as floating point ratios to preenfm op1&3 pair carrier normalised to 1.00

'=' : // send as floating point ratios to preenfm op2&4 pair carrier normalised to 1.00

'k': // do a minimal voice reconfig for receiving params: sets ALG4, filter off & gain 1.0, IM1&2 and velocity response to 8, mix 1 & 2 to 1.0, IM3&4 off and velocity to 0, op1,2,3,4 to sin with keyboard tracking

'w' : // set waves 1 to 4 to sine & keytrking to kybd

'4' : // set ALG to 4

<========= ** The maximum frequency ratio setting on the PreenFM2 is 16, ** so attempting to send values higher than 16 will be clipped at 16 by PreenFM2 .. ! <=========

NOTES:

The choice of Carrier:Modulator (C:M) frequency ratio is an interesting area of research, because it is one of the fundamental aspects of FM programming. Farey Sequences for FM programming were introduced in the classic text by Barry Truax: Organizational Techniques for C:M Ratios in Frequency Modulation. http://www.sfu.ca/~truax/

FareyPreenFM2 is designed to make two carrier/modulator pairs based on the Farey Sequence, and so it uses Algorithm 4 .. so you could also use it with Algorithm 2 for programming Op1/Op2, or Alogrithm 12, or anyhow you like of course.. at the moment its only really designed for generating up to 2 C:M pairs. When/if I get time I'll hope to add more commands for mapping with the other FM algorithms and higher order Farey Sequences..

In order to get the best from this program please read up on Farey Sequences for FM programming, I did an article here and there are lots of places to read further : http://noyzelab.blogspot.com/2016/04/farey-sequence-tables-for-fm-synthesis.html

I would recommend starting from an init patch or something like that first, i.e. turn off all matrix modulation, sin waves for ops etc etc while you are researching Farey Sequence ratios and then try loading in existing patches and modifying them, remember to set Algorithm to 4 for the ratios to be set up as C:M pairs. You can use number key '4' to setup ALG4 on PreenFM2, or do a slightly larger reconfig of the voice by pressing 'k' (see key commands above). Press 'r' to randomize your choice of Farey Sequence pair etc. AND remember that nothing gets sent to the PreenFM2 unless you send it! e.g. press '1' to send the integer ratio diplayed in the left C:M pair boxes etc.

Family index refers to which C:M pair from a common M value (Family Order). Not all Farey C:M ratios have multiple common M values e.g. Family Order 4 has only one member 1:4, but Family Order 9 has three members : 1:9, 2:9 and 4:9.

Each Family ratio can then be used to obtain a family of integer ratios sharing the same spectral identity. These are the vertical listings on the screen, C+, C- are the standard integer versions as defined in the research, and FLC and FLM are versions made into floating point values using 2 simple methods I made up so I can;t vouch for their spectral validity.. :]

FLC = C+/M:M/M & C-/M:M/M i.e. divide by modulator, resulting in constant modulator values of 1.0 MLC = C+/C+:M/C+ & C-/C-:M/C- i.e. divide by carrier,resulting in constant carrier values of 1.0

You can also use this program for generating ratios to manually program into other FM synths e.g. TX81Z, DX7 etc.

BUT: this program was written in Processing : https://processing.org/ and at the moment the sysex in Processing, and hence.. .. Java.. .. , is pretty much non-existant for OS X!! I have tried the suggested method from MIDIBus :

http://www.smallbutdigital.com/projects/themidibus/

but it don;t work on my machine.. so at the moment sysex only works under Windows in Processing for me.. ! So I am not including any MIDI sysex until I can get it going on OS X. There also doesn;t seem to be much key repeat action on my machine, so this may or may not work for the key commands..

i only a have a sec to write this, so apologies for brevity. am loving the PreenFM2.. i've just uploaded a little Farey PreenFM2 programmer here to github, brief info below. its written in Processing so anyone should be able to run it if you get a copy of Processing. hope folks find it useful, its a pretty early version..

cheers

dave

https://github.com/noyzelab/FareyPreenFM2

readme ->

FareyPreenFM2

Farey sequence family ratios generator/programmer for the PreenFM2 synthesizer

David Burraston

April 2017

http://www.noyzelab.com

commands =>

'z': //decrement farey order 'x': //increment farey order

'c' : //decrement family index 'v' : //increment family index

'b': // decrement carrier (op1) family member

'n': // increment carrier (op1) family member

'm': // decrement carrier (op2) family member

',': // increment carrier (op2) family member

'r': // randomize all farey parameters

's': // send all integer ratios (C) to preenfm op1&3 pair and op2&4 pair

'1' : // send intetger ratios to preenfm op1&3 pair

'2' : // send intetger ratios to preenfm op1&3 pair

'f': // send as floating point ratios (FLC) to preenfm op1&3 pair and op2&4 pair modulator normalised to 1.00

'!' : // send as floating point ratios to preenfm op1&3 pair modulator normalised to 1.00

'@' : // send as floating point ratios to preenfm op2&4 pair modulator normalised to 1.00

'g': // send as floating point ratios to preenfm (FLM) op1&3 pair and op2&4 pair carrier normalised to 1.00

'-' : // send as floating point ratios to preenfm op1&3 pair carrier normalised to 1.00

'=' : // send as floating point ratios to preenfm op2&4 pair carrier normalised to 1.00

'k': // do a minimal voice reconfig for receiving params: sets ALG4, filter off & gain 1.0, IM1&2 and velocity response to 8, mix 1 & 2 to 1.0, IM3&4 off and velocity to 0, op1,2,3,4 to sin with keyboard tracking

'w' : // set waves 1 to 4 to sine & keytrking to kybd

'4' : // set ALG to 4

<========= ** The maximum frequency ratio setting on the PreenFM2 is 16, ** so attempting to send values higher than 16 will be clipped at 16 by PreenFM2 .. ! <=========

NOTES:

The choice of Carrier:Modulator (C:M) frequency ratio is an interesting area of research, because it is one of the fundamental aspects of FM programming. Farey Sequences for FM programming were introduced in the classic text by Barry Truax: Organizational Techniques for C:M Ratios in Frequency Modulation. http://www.sfu.ca/~truax/

FareyPreenFM2 is designed to make two carrier/modulator pairs based on the Farey Sequence, and so it uses Algorithm 4 .. so you could also use it with Algorithm 2 for programming Op1/Op2, or Alogrithm 12, or anyhow you like of course.. at the moment its only really designed for generating up to 2 C:M pairs. When/if I get time I'll hope to add more commands for mapping with the other FM algorithms and higher order Farey Sequences..

In order to get the best from this program please read up on Farey Sequences for FM programming, I did an article here and there are lots of places to read further : http://noyzelab.blogspot.com/2016/04/farey-sequence-tables-for-fm-synthesis.html

I would recommend starting from an init patch or something like that first, i.e. turn off all matrix modulation, sin waves for ops etc etc while you are researching Farey Sequence ratios and then try loading in existing patches and modifying them, remember to set Algorithm to 4 for the ratios to be set up as C:M pairs. You can use number key '4' to setup ALG4 on PreenFM2, or do a slightly larger reconfig of the voice by pressing 'k' (see key commands above). Press 'r' to randomize your choice of Farey Sequence pair etc. AND remember that nothing gets sent to the PreenFM2 unless you send it! e.g. press '1' to send the integer ratio diplayed in the left C:M pair boxes etc.

Family index refers to which C:M pair from a common M value (Family Order). Not all Farey C:M ratios have multiple common M values e.g. Family Order 4 has only one member 1:4, but Family Order 9 has three members : 1:9, 2:9 and 4:9.

Each Family ratio can then be used to obtain a family of integer ratios sharing the same spectral identity. These are the vertical listings on the screen, C+, C- are the standard integer versions as defined in the research, and FLC and FLM are versions made into floating point values using 2 simple methods I made up so I can;t vouch for their spectral validity.. :]

FLC = C+/M:M/M & C-/M:M/M i.e. divide by modulator, resulting in constant modulator values of 1.0 MLC = C+/C+:M/C+ & C-/C-:M/C- i.e. divide by carrier,resulting in constant carrier values of 1.0

You can also use this program for generating ratios to manually program into other FM synths e.g. TX81Z, DX7 etc.

BUT: this program was written in Processing : https://processing.org/ and at the moment the sysex in Processing, and hence.. .. Java.. .. , is pretty much non-existant for OS X!! I have tried the suggested method from MIDIBus :

http://www.smallbutdigital.com/projects/themidibus/

but it don;t work on my machine.. so at the moment sysex only works under Windows in Processing for me.. ! So I am not including any MIDI sysex until I can get it going on OS X. There also doesn;t seem to be much key repeat action on my machine, so this may or may not work for the key commands..

Pages: [**1**]