Jump to content

The HAARP, a Hardware Advanced Arpeggiator.


Antichambre
 Share

Recommended Posts

Hello,

This is an introduction for my new baby, a really funny toy, the HAARP (yes I like conspiracy theory ;)


IMG_0302.jpeg?raw=1


It's a pure MIDIbox Project, just a dedicated CS and some coding. It works with any STM32F4 Core.

IMG_0292.jpeg?raw=1IMG_0293.jpeg?raw=1
 

Why? Many synths have an integrated arpeggiator, the SH-101 is well known for that, but the available parameters are still limited. There is also some good plug-in I think especially of the Ableton live's one but it's software.

So I designed an hardware one, "LIVE" oriented, starting from the @TK.'s arp example. No encoder(except for MENU section Data entry), all parameters are directly accessible and are potentiometers. The screen is a small color TFT with a resolution of 128x160(sorry for picture, colors are better in real).

It's 8 independent voices. 8 banks of 8 Presets. Session are saved/loaded from the SD Card.
1905_mb-haarp_euro_v1b_6_06.png?raw=1
The Arpeggio parameters are divided in 3 sections:
First is the TIMING Section (Purple pots):

  • On/Off button,
  • HOLD Button, it holds or releases the Notes in the notestack.
  • The MODE Pot, it's UP, DOWN, UP-DOWN and AS-PLAYED, fr the moment but I will implement more.
  • The RATE, from slowest to fastest, from 4 Bar to 32nd with dotted and Triplet value.
  • The RESYNC, it retriggers the arpeggio, values are the same as RATE parameter.
  • The OFFSET, it will shift left or right the starting step(note). Is Note Stack and MODE dependent.
  • The DELAY, it will delay the whole arpeggio within the step range(duration), is RATE dependent.
  • The GATE, the length of the Note, max is STEP length, is RATE dependent.
  • The SHUFFLE, it will delay all the odd steps, in the range of an half step, is RATE dependent.

Second is the TRANSPOSITION Section (Yellow, Orange, Red):

  • Simple Transposition On/Off (Yellow).
  • Simple OCTave Transposition, +/- 10.
  • Simple SEMItone Transposition, +/-12
  • Repeat On/Off.
  • Repeat, LOOPS number, 1 to 8.
  • Repeat, SHIFTing on each loop, +/-32 semitones.
  • Force to Scale On/Off
  • Force To Scale, SCALE, list is the same as the Force to Scale example from the repo.
  • Force To Scale, ROOT from C to B semitone.

Third is the VELOCITY Section.

  • REGEN Pre/Post(Target process) button.
  • REGEN, +/- 100%
  • Target process On/Off.
  • TIME, the time to reach the target value, in PRE initial value is the regenerated value. in POST initial value is the one stored in the Note Stack.
  • TARGET is the targetted value, 0 to 127.
  • RETRIG, if on the TIME is retriggered by the RESYNC parameter.

 

The main page of the screen represents an octave range, the note color changes depending on the octave, there's a Velocity section on the bottom, it's like a piano-roll.
In the code, the arpeggio processing is ready, it remains me to complete the MENU section, I was waiting for the CS PCB to write it, now I can... ;)
 

This little guy is to much fun, so I can't keep it for me. Then i will propose it to you ASAP. and I hope it will help me to finance some other bigger projects I've got in my back-pocket ;)
I will try to make it available in two format, I'm currently working on a PCB for USB host/device, sdCard MIDI etc.. which will fit for both version and will be reuse for other small toys like that.

  1. An Eurorack version for the patching addicts. I used a MCP3204(4 channels) instead of a MCP3208(8 channels) for the AINSER, it's an AINSER32. I use only 2 channels for the 16 pots(8Multiplexed lines * 2 channels), it remains 16 analog Inputs which are accessible to connect some CV In Modules, thanks to @Hawkeye for making me think about this.
    The SRIO Chain is available too, you can connect GATE In (DIN) easily.
    You will be able to connect the MIDIPHY CV/GATE Out Modules which will be available soon. @latigid on is working on it.
    MCAN will be available, for an internal MIDI bus within your Eurorack, I reuse the BUS1 and 2 from the Euro Power connector for that purpose.

    1905_mb-haarp_euro_v1b_4_02.png?raw=1

     
  2. A Desktop version, for MIDI purpose only(except if i find a way to add some CV/Gate without designing a too much big box).

 

Voilà! More information will be available soon.
For the moment this is a small video I made, I seem a little febrile but it's because I continue to discover it every day.
 


I really love this little toy, it is very effective and musical, even in LIVE and if the Force To Scale is activated, there's no wrong note ;)

Best regards
Bruno



 

Edited by Antichambre
  • Like 1
Link to comment
Share on other sites

1 hour ago, Hawkeye said:

Hope you are not mad, if I also implement a few (not all!) of the arp functions on the LoopA arp - but yours will be first, over here still working on it! ;-)

Hi Peter,

There is really no problem. LOOPA and HAARP are more complementary than competitive.
Both are "real time" oriented but have different use and operation.

(I do not remember if you implemented the "Force To Scale" if it's not the case, it can be a good feature on your machine too.)

Internally their process structure are very different, but if you want to know how I coded some parameters, tell me if I can 'help', even if I feel pretentious to say that to someone who codes better than me.
There is no competing here, the important thing is to give life to all that and share it.

But for sure, it's better if our machines or modules can be complementary.
I also look forward to the @Phatline's CC-Looper, here again we are in the complementary.

Best regards
Bruno
 

Link to comment
Share on other sites

Man this is absolutely amazing! Will definately get one if you make them available! I can only imaggine how much time nd effort went into this, incredible.

I have one question which i couldn't answer watching the video: my favourite feature in an arp which unfortunately isn't realized in many is a melodic pattern relative to the pressed keys. there is a m4l plugin that does exactly this, http://www.maxforlive.com/library/device/3545/arpeggio-designer

Does your arp support something like this? you have the piano roll and all in there so if not, i think it would be easy to add and make the arp even more unique?

That way you can write a little rhymthmic sequence, monophonic or even polyphnic, and it will alway be adapted to exactly the keys you press. much more interesting than basic up/down/rnd functions, and makes it super easy and fun to write chord progressions and figure out voicings. The new native instruments kontrol keyboards also have something like this, calling it a "sequence" i think.

Edited by weasel
Link to comment
Share on other sites

Hello

I'm back with two questions :decayed:

Is there any code modification for various MCP320x in muxed configuration ?

Color TFT is so great, how this is handled ? I suppose there is massive special driver for it...

Anyway I'll have a look when code available

again, un grand bravo !

Best

Zam

Link to comment
Share on other sites

1 hour ago, weasel said:

I have one question which i couldn't answer watching the video: my favourite feature in an arp which unfortunately isn't realized in many is a melodic pattern relative to the pressed keys. there is a m4l plugin that does exactly this, http://www.maxforlive.com/library/device/3545/arpeggio-designer

This feature can be easily considered. we can add some 'USER Patterns' in the MODE parameters. I will give it a try when I will add other Modes like converge/diverge etc...
 

1 hour ago, Zam said:

Is there any code modification for various MCP320x in muxed configuration ?

Like it is, the AINSER module works only for MCP3208, there's no define for this point, but it's possible to enhance it for MCP3204 and 3202, you must read only 4 or 2 channels instead of 8 on each muxed lines increment and manage the data position in the array. It's possible but I did not I don't use the AINSER module, I re-write an adapted one in the app directly, It let the AINSER module available for other features.

 

1 hour ago, Zam said:

Color TFT is so great, how this is handled ? I suppose there is massive special driver for it...

Yes it's a special driver but I write it as an app_lcd module this can be reuse for other app, the MIOS32_LCD and GLCD functions continue to work if you correctly set the back and fore colors, but some direct APP_LCD_xxx functions were added for specific pixel depth.

1 hour ago, Zam said:

Anyway I'll have a look when code available

I will make this code available on next commit, It's also a good practice for me to work on a personal repo before working on the MCAN branch of the official MIOS32 repo.

Best
Bruno

Edited by Antichambre
Link to comment
Share on other sites

2 hours ago, Antichambre said:

This feature can be easily considered. we can add some 'USER Patterns' in the MODE parameters. I will give it a try when I will add other Modes like converge/diverge etc...

this would be so awesome! you could just use your piano roll, and map c1 to the first pressed key, c#1 to the second pressed key etc etc.

or maybe a dynamic "force to scale" that limits any arp noe to the currently pressed keys. more of a "force to notes".

does your arp currently support gaps/silent steps or only via velocity 0? since you have the full very impressive piano roll thing implemented. i think there's a huge potential for an arpeggio/step sequencer crossover like what that Arpegggio Designer does. Not sure if the midiphy SEQ does something like this @Hawkeye@latigid on?

it would be more of a keyboarder arp function as opposed to an eurorack user i guess.

 

two more thoughts from a regular ableton arpeggio user:

- gate values bigger than one step can be a lot of fun and create overlapping poly notes, or legato mono notes. ableton goes up to 200%, maybe even up to 4 steps length though? right now it looked like yours ends at one full step length w no overlaps.

- i didn't fully understand your offset and delay parameters yet but combined with the resync they seem to add what looks like random timing jumps in the video? i LOVE that. having an option to add some kind of randomness/humanize to both timing and velocity is a very big feature of an arp . maybe think about a (hidden shift) function to add some random to velocity, or alternatively to the regen/target. i do this all the time on my arps in ableton. you could also implement this for the CV ins you are mentioning i guess, just CV control the delay time or the target velocity level with a random LFO, was that the idea you had for the CVs?

 

after 3 months of heavy almost full-time work and countless hours in this whole MCU music field i still can't even start to fathom how you pulled this off bruno. the piano roll programming is insanely good for a one man independent diy project. and the whole workflow and choice or parameters seems very well thought out judging from your video!

 

i also have some questions regarding general arpegggio/note stack functions, i need a notestack to spread out 6 poly voices to 3 duophonic synth boards. but i guess i have some reading up on that to do first and obv don't wanna derail your thread with this.

Edited by weasel
Link to comment
Share on other sites

42 minutes ago, weasel said:

this would be so awesome! you could just use your piano roll, and map c1 to the first pressed key, c#1 to the second pressed key etc etc.

Or enter the note sequentially like any old synth do, don't worry i know how ;) I already through about this feature and consider the architecture for it too since the beginning, I want it too, but It's a step by step work.
Once I publish it, anyone can enhance it, And I will be very happy about this, thankful too. You really have to go into the MIOS32 if you already use an Arduino, and have some coding knowledge,it is not so much more difficult. I don't deserve anything, this OS is made for music.
You want a bpm generator, here it is, you need a button and led matrix here too, you wants potentiometers to you project, no problem etc... everything is already there and ready to use.

 

1 hour ago, weasel said:

does your arp currently support gaps/silent steps or only via velocity 0?

Not for moment, I though about this too, we can define note number 0 as a silent note and treat like  only for the MODE 'User Pattern" feature we mention above

 

1 hour ago, weasel said:

gate values bigger than one step can be a lot of fun and create overlapping poly notes, or legato mono notes. ableton goes up to 200%, maybe even up to 4 steps length though? right now it looked like yours ends at one full step length w no overlaps.

 

1 hour ago, weasel said:

they seem to add what looks like random timing jumps in the video

For overlap(Poly)This is a MIDI voice feature only, they can control CV/Gate too. But a polyphonic processing to control multiple CV/Gate is possible.
I use the sequencer module and midi note are scheduled so you can set it by the length you want, they are not limited by the mechanic of the arpeggiator and the step length.
Some sub parameters for each section or panel parameters will appear when the SECTION MENU pages will be available, like for RATE normal/triplet/dotted filtering for the potentiometer to jump over these timing periods, and avoid timing mistakes for real-time too and create good snapping effect for example ;)
 

 

1 hour ago, weasel said:

i didn't fully understand your offset and delay parameters

yes i forgot to show them.
OFFSET is within the range of +/- the arpeggio note length, with it you shift the note in the steps, but the notes keep their order in fact you just select the note to start with.
DELAY, it delay the whole arpeggio sequence in the range of a step duration.

 

1 hour ago, weasel said:

LOVE that. having an option to add some kind of randomness/humanize to both timing and velocity is a very big feature of an arp . maybe think about a (hidden shift) function to add some random to velocity, or alternatively to the regen/target. i do this all the time on my arps in ableton. you could also implement this for the CV ins you are mentioning i guess, just CV control the delay time or the target velocity level with a random LFO, was that the idea you had for the CVs?

Each panel parameter will have their CC number and an associated modulation CC number, all accessible from the CV In too, it's MENU things.

 

Link to comment
Share on other sites

you are getting me very excited for this.. yes i didn't really start going into mios code yet, just fiddling with NG configs. and i already realized i won't get a custom notestack w/o recompiling. it's one of the next 2-3 upcoming steps on my synth. and of course then i'll also hopefully get to look at your code and maybe contribute something to it! like, i'm good at adding hidden jokes in the comments. usually unfunny ones though.

 

for the poly/overlap, yeah my bad i only think of midi and poly synths, and ignore the eurorack needs. but you have it all figured out already!!

CC/CV combination sounds deadly.

i think a gap note 0 like you describe would be a great workaround. you should think about using that even for your regular arp, cause you can easily create much more complex rhythms with that as opposed to straight hammering 16ths lines... and let's be real who ever needs to play a C-2

Edited by weasel
Link to comment
Share on other sites

On 04/07/2019 at 9:30 PM, Smithy said:

Wow, what a great device and what an amazing demo! 

Congratulations Bruno!

 

I might have to remix that melody of yours too! ;)

 

6 hours ago, eptheca said:

Brilliant Bruno!

I love this project

Looking forward to building this

Cheers, Hal

 

Thank you Guys! :)

Link to comment
Share on other sites

  • 5 weeks later...
  • 2 months later...

Hi,

This is some update about the Core part of the project, I just finished to design it, artwork is not perfect but PCB and assembly are ready.

large.1910_dipCoreF4_Euro_Assembly_Frontlarge.1910_dipCoreF4_Euro_Assembly-dim.p

I achieve the size of 12 HP and a depth which doesn't exceed 45mm, overall with IDC connectors present at the back.
I can reduce it to the previous 11 HP but result is less clean at the front and assembly is more complicated then it will be 12 HP.

The features:

  • Euro Module 12 HP x 45mm.
  • 2 MIDI In/Out.
  • 2 independent USB, one Device, one Host.
  • Micro-SD Card.
  • Reset and User Button.
  • 2 leds.
  • Power switch, acts on both external and USB power. It is optional.
  • Automatic switching between the Power sources, EXT/USB. Priority to external first.
  • Can be connected to a regular Euro power connector (IDC16), regulation from 12V. Can use 5V from your skiff or provide it to the bus.

'Regular' MIDIbox ports In the order:

  • J4, IIC A and B.
  • J5, internal ADC for 2 analogue Inputs.
  • J8/9, SPI 5V(SRIO).
  • J11(2xMIDI IO).
  • J15, displays(serial only, 2 CS lines).
  • J16E, SPI 3,3V, Reset and User buttons, 2 leds(.
  • J18. MCAN, Ready for CAN transceiver or 'One-Wire' CAN connection.
  • J19, SPI 5V.

 

Some 3D render:

large.1910_dipCoreF4_Euro_Assembly-3dfrolarge.1910_dipCoreF4_Euro_Assembly-3dbac
 

The PCB, all SMD will be assembled by manufacturer. It can be used for small desktop project too.
large.1910_dipCoreF4_Euro.png.cbc0a79993

 

I designed this module for the HAARP but it can be used for other application, you can use it with the MIDIPHY Analog modules to create the perfect interface for your modular system.
And you can create your own Surface Control and/or your hybrid analogue modules.

Voilà
Best regards

Bruno

Edited by Antichambre
added MIDbox Ports uses.
Link to comment
Share on other sites

Just now, Zam said:

 

Look great !!!

Thanks! :)

 

Just now, Zam said:

so J18 for MCAN ?

Yes for CAN, J18 is always the one. But Andy's wCore and Disco platform have only One-Wire connection. This one has Power pins for transceiver supply, RX and TX are separated. But you can add the regular Resistor and a Diode on the dipBoardF4 to link others Cores directly and easily with the One-Wire.
This MCAN connector may be called J18E for 'extended' I suppose...
A small transceiver module will be created to link the CAN bus with the external world, internally I planned to use the Euro Power connector, the power ribbon by using BUS1 and BUS2(last pins of the 16pins IDC) called CV and GATE sometime but never used in fact.

Best regards
Bruno

Link to comment
Share on other sites

On 12/10/2019 at 4:50 PM, Zam said:

so J18 for MCAN ?

I finally decided to add CAN transceiver to the board.
large.1910_dipCoreF4_Euro_PCB.png.1f5910
The modules will be able to communicate natively in midi thru the regular euro power supply ribbon, using MCAN. No need of an other board to connect to the external world too, just a connector in front which will give access to the lines MCAN_L and MCAN_H.

Best regards
Bruno

 

Link to comment
Share on other sites

Hi Andy,

First thanks for taking a look.

1 hour ago, latigid on said:

If you didn't already, add jumpers to the CAN pins in case the buss is used in the conventional manner (CV/gate).

I didn't but I will add those jumpers. It's a good idea, it adds more flexibility. Done!

1910_dipCoreF4_Euro_PCB_jumpers%20added.
 

1 hour ago, latigid on said:

Putting a high-speed digital signal on the power cable might introduce some crosstalk and should be tested.

CAN(with transceiver) is a differential pair signal, then bad behaviour like crosstalk to power and audio paths should be very limited, but you're right this has to be tested, noted!

Best regards
Bruno

Edited by Antichambre
Link to comment
Share on other sites

  • Antichambre changed the title to The HAARP, a Hardware Advanced Arpeggiator.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...