Jump to content

Antichambre

Programmer
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    101

Everything posted by Antichambre

  1. @u-link Definitely need a dedicated clock processor. Maybe port types can be modular, you choose what you need, for me SYNC option, and MIDI over Jack 6,35 for FX pedal... but can be Timecode, RS422, ADAT Sync etc... @latigid on A good processing option, but I will need to read again the specifications cause I never use it, I understand 'why' but not 'how' for the moment ... Best Bruno
  2. Yes, + CS and Euro Panel, in a 'Limited Deluxe Edition' , cause I've got a limited stock of NJM2069! it will be available for Christmas or later. Best Bruno
  3. @slo This is an option which could be study ang adapted on lemur or otherand, yes, we needs status and activity from the main system. @audax_axon Yes channel remap... And channel mute, event types filter per channel... Full process for voice events, on each port, sources and destinations Some extended processes like this can be added, your examples are great I have run this type of situation too. CC to Sysex sounds good too. Same as slo, a good option as UI. @mfk very good idea, for that feature the router has to be the master clock or re-sync function, we can easily divide and multiply the clock. If the router is the master, should be good to add some DOUT for SYNC and do the same on the clock, e.g. Korg needs 48ppqn instead of the roland classic 24ppqn. Positive and negative clock delay on each port is an other idea... :) other extended voice processing.
  4. @Hawkeye Sorry to let you alone with this... :/ It's for the same reason as you already mentioned... @tedysuwarnady I think everybody wish to help you, myself I don't understand your words. If you do not want to hide it, what is your nationality, your main language? Maybe someone here will help for communication... Best Bruno
  5. @Hawkeye Yeah we are dreaming ;) I will add all your propositions because everything is good... "additive routing" This is a very good idea! It can be some sub-preset for each port and some globals for the whole system. Midi events filtering must be a basic feature, for loop detector this feature will not be easy but we can start with a kind of "Route inhibit" even if it will not resolve all the problem. This feature is not a 'basic' one but a very cool option to check bandwidth of individual port and manage midi filters. Must be coded for a great screen like a SSD1322 ;) @ilmenator Always more ahah, we recognize the people who collects synth since a long time ;) Yes! Scalable is a good point, yes, people will choose in function of their need. 16 IO Modules? seems difficult to manage, mergers number must match the number of destination. This a minimum. But it must be a Merger/Distributor for sure! Yeah panic button in front for manual request or as automatic option(block routed source events -> panic -> and final switching) Not an 'NG' like config for easy setup? Peter's LoopA format and stand for example? Yes all of us know it, it's a good solution, except the number of cards and connections :/ I suspect there's something better and cheaper to do with an FPGA ;) What about channel mapping and note mapping(drum mapping) ? More idea, wish, dream? Bruno
  6. Hi everybody, Sit down ... Take a deep breath ... Close your eyes ... Now your mind is free ... Start dreaming about your perfect MIDI Router ... Imagine its IO count, features, shape / case, its behaviour and menu / screen functions... Leave aside any technical limitations, just imagine it ... Could you take a few minutes to describe it, please? Best regards Bruno Yes, latency is important in particular when routing is chain of MIDI equipment. Labels for direct viewing is something obliged. Routing Presets of course... Easy and fast ui port/channel routing access! --> a good USER INTERFACE Optional 'panic' function for lost note-off or high sustain during a port/channel switching. --> panic option for quiet switch Yes definitively! We can imagine some dedicated sysex commands... I love this idea too. We can imagine more than that, more than label IO and device name, with the use of the SD card we can try to get a library of CC, drum mapping names too. That's perfect!
  7. Should be the same... ;) Best Bruno
  8. I've got it, but in eagle format, in fact this is part of the basic eagle library. Maybe you can import it, I don't know.
  9. Ahah! trop fort! Tu l'as trouvé. Uploaded : rp53spec.pdf Always check and follow the MIDI standard ;) Best
  10. Hello! Some are available at Modular Addict ! Best regards Bruno
  11. Yes Peter is totally right, MIDI norm is based on 12 notes by octave and 128 value range, the problem will be to input and name your special note scale. It's not the box but it's MIDI itself which is not made for that :/ But I suppose it's possible, by adding new value and name tables and a special function to read it, after that by transposing or octave shifting your will be able to achieve all your scale e.g. 16 interval by octave is something like 169 notes for the same frequency range of the MIDI. TK will tell you ;)
  12. It's strange, the board which are shown are the Wilba and Nils version with their name on it ! Strange.
  13. This automate functions you write are pretty cool, I don't imagine what you will be able to do on a OLRE16 ! I like that, I keep it somewhere in my mind...
  14. Even if. The little that I saw lets me think that this build is going to be a best seller! Small and efficient. The UI and the software sound amazing and seem promising, you push graphics at new level :) Good video too, simple and understandable. We will know 'how to' before getting it in hands! Lucky boy! I would have liked, despite two grand-father musician, drummer and clarinettist, my parents did not think it could be a good idea, I may have declared this craze for music maybe too late and on a computer ;). I would have preferred to do less football! For me, the Nudelholz is something roaming only around YOUR head but I like the word itself... for sure I'm not able to say it correctly but it's sounds for me like a name for a loud and swinging Bass Synth ! You may be able to put wheels on the piano if the Nudelholz is stored in its drawer. And push the piano into the studio! Just remember that a Nudelholz is not dangerous unless a GF is behind ;) Good night! Bruno
  15. The software took a lot of time, no? I really love the concept! Like when you move in the piano roll. It's me but this is a classic piano!? ;)
  16. Antichambre

    LoopA Ports

    No space to put the screw inside? Or this is a choice? I Like this. Because screws are outside, are the small vertical plastic pieces enough? are you not afraid about gap in the middle of front and bottom acrylic panels(plastic bend)? Bruno
  17. Thank you, it's a wink , the track is another version of the one you already listen to in February. Bravo! This is exactly that! :) You already know them very well and you do not miss an ear!
  18. The point here was to control the FX pedals with the Core, Meris Polymoon + Empress Reverb. Synth & Drum: Warldorf Microwave I, Korg EX-8000, Roland SH-09, Yocto
  19. For process time, remember, by decreasing the parameters resolution to 7bit (CC resolution) you can prepare some tables at startup(RAM) OR write it in program memory(FLASH) and finally remove some calculation. e.g. this can be replaced by an array if curve is a 7bit We can also try to use the FPU of the STM32 for hardware floating point calculation, but I read in the forum people have some troubles to get it.
  20. You're welcome! I already planned to do something like that for the PIXI, then not a waste of time you just pushed me to do it now ;) But I will come back to this because it needs an accurate frequency too, exponential range something from 0.002Hz to 20Hz. I've already got the math just have to translate it in code: if note < note_Ref then freq = Freq_Ref / (2^((note_Ref/note)/12) else freq = Freq_Ref * (2^((note/note_Ref)/12) something like this #define LFO_FREQ_REF 1.0 //1Hz #define LFO_FREQ_REF_NOTE 0x45 // 69, A3 midi note //7bit #define LFO_FREQ_REF_VALUE (LFO_FREQ_REF_NOTE<<9) //16bit #define LFO_FREQ_TICK_RESO 1.0 //ms u8 coarse = LFO_REF_NOTE; // LFO Coarse Tune (7bit) u8 fine = 64; // LFO Fine Tune +/- 6bit(7bit) float target_period, last_period; // in millisecond float accumulator, accum_step; // in millisecond //with freq_val = (u16)(coase<<9 + (fine-64)<<2); if(freq_val<LFO_FREQ_REF_VALUE) target_period = (float)(1000.0 / (REF_FREQ / (2^(((LFO_FREQ_REF_VALUE-freq_val)/512.0)/12); else target_period = (float)(1000.0 / (REF_FREQ * (2^(((freq_val-LFO_FREQ_REF_VALUE)/512.0)/12); accum_step = target_period / LFO_FREQ_TICK_RESO; like a VCO is centered around 440Hz on A3 note, the LFO will be centered around 1Hz on A3 note which will give 0.01858Hz for the lowest note and 28.50876Hz for the higher one. ToDo! And I didn't check in the SVN if something like this was done before Best Bruno
  21. ... Always More! ;) Width modulation added, with it you can achieve ramp down/up, pseudo sine(this is not true sine) and many more from a single triangle waveform: // calc an unipolar triangle(0 to 65535) depending on x(time) between 0 and 65355 and phase between 0 and 65355 // set the phase u16 time = (u16)(x + phase + (u16)(wide_mod/2)) ; // apply pos/neg width modulation, wide_mod is an unsigned 16bit ;) float wide_pos = 65535.0/wide_mod; float wide_neg = 65535.0/(65535-wide_mod); u16 tri = (time < wide_mod) ? ((u16)(time*wide_pos)) : ((u16)((65535 - time)*wide_neg)); // now we shift down the unipolar to get a bipolar one s16 signed_tri = (s16)(tri - 32768); // call log function, curve is unsigned 16bit value! signed_tri = XXX_hlp_log_signed(curve, signed_tri); // apply amplitude parameter, amp_cc between 0 and 65355 signed_tri = (s16)(signed_tri*amp_cc/65535); // we shift back the triangle to unsigned 16 bit value, for use with lcd and aout tri = (u16)(signed_tri + 32768);
  22. Yes I just adapt it to a signed value, normally a lfo is bipolar. declare 2 new static function ///////////////////////////////////////////////////////////////////////////// // Local variables ///////////////////////////////////////////////////////////////////////////// u16 phase =0; u16 curve =32768; u16 amp_cc =65535: ///////////////////////////////////////////////////////////////////////////// // Local Prototypes ///////////////////////////////////////////////////////////////////////////// static s16 XXX_hlp_log_signed(u16 curv, s16 signed_amp); static u16 XXX_hlp_log_unsigned(u16 curv, u16 abs_amp); Add the function ///////////////////////////////////////////////////////////////////////////// // help func: return the Log/Antilog of a given signed value ///////////////////////////////////////////////////////////////////////////// static s16 XXX_hlp_log_signed(u16 curv, s16 signed_amp){ s16 log_amp; if(signed_amp<-32767)signed_amp=-32767; // limit signed to -32767 to -32767 if(signed_amp<0){ u16 abs_amp = (u16)((0-signed_amp) << 1); log_amp = (s16)(0-(XXX_hlp_log_unsigned(curv, abs_amp)>>1)); }else{ log_amp = (s16)(XXX_hlp_log_unsigned(curv, (u16)(signed_amp<<1))>>1); } return log_amp; } ///////////////////////////////////////////////////////////////////////////// // help func: return the Log/Antilog of a given unsugned value // note: math.h must be included ///////////////////////////////////////////////////////////////////////////// static u16 XXX_hlp_log_unsigned(u16 curv, u16 abs_amp){ u16 log_amp; float curv_f, amp_f; if (curv < 32768){ // reducing curve to a float between 0 and 1 curv_f=(float)(32767-curv)/32767.0; // reducing column to a float between 0 and 1 amp_f = (1.0-((float)(abs_amp/65535.0))); // lin > log log_amp = (u16)(abs_amp + ((log(amp_f)*curv_f*amp_f)*65535)); }else{ // reducing curve to a float between 0 and 1 curv_f=(float)(curv-32767)/32767.0; // reducing column to a float between 0 and 1 amp_f = (float)(abs_amp/65535.0); // lin > log log_amp = (u16)(abs_amp - ((log(amp_f)*curv_f*amp_f)*65535)); } return log_amp; } now you will be able to use it everywhere with signed or unsigned 16bit value A TRIANGLE LFO with amplitude, phase and curve parameters: // calc an unipolar triangle(0 to 65535) depending on x(time) between 0 and 65355 and phase between 0 and 65355 u16 time = (u16)(x + phase + 16384) ; // apply the phase u16 tri = (time < 32768) ? time << 1 : ((65535 - time) << 1)); // now we shift down the unipolar to get a bipolar one s16 signed_tri = (s16)(tri - 32768); // call log function, curve is unsigned 16bit value! signed_tri = XXX_hlp_log_signed(curve, signed_tri); // apply amplitude parameter, amp_cc between 0 and 65355 signed_tri = (s16)(signed_tri*amp_cc/65535); // we shift back the triangle to unsigned 16 bit value, for use with lcd and aout tri = (u16)(signed_tri + 32768); Result: More? ;)
  23. I was looking for something else and I found this: https://github.com/openAVproductions/openAV-stm32f4/tree/master/03_float
  24. This is something I made for a customer, it can convert all serial connection and a lot of protocol, RS232, 422, 485 MIDI LANC and some specials others... It's based on 2 SP338 IC around an LPC1769, so I can use it for MIOS32 too. When I did the boxes I made one for me too and I use it as a tool on field, it 'saved my life' 2 times already.
  25. Ahah. Mine is a true log/antilog, this is math! see the function applied to a triangle LFO with variable speed and amplitude
×
×
  • Create New...