<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 70.85pt 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=FR-CA link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The way I ‘vote’ the good quantized output vs the incoming ADC value is the following way:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Each scales have a number of possible steps so I constructed a lookup table<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>of 25 elements (scales) with each a number of steps (thresholds). <o:p></o:p></span></p><p class=MsoNormal><b><i><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#17375E;mso-style-textfill-fill-color:#17375E;mso-style-textfill-fill-alpha:100.0%'>unsigned char const ADC_step_divisions[25] = {12,6,5,5,7, 7,3,3,3,3, 6,8,7,5,5, 7,7,7,7,7, 7,7,7,7,7};<o:p></o:p></span></i></b></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>So if I’m in the 2<sup>nd</sup>  scale I know I’ll have 6 steps to compared with the incoming ADC value<br>Here is part of my code:<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>for(x = 0; x < ADC_step_divisions[ScaleCounter]; x++) // ADC_step_divisions[] = 3,5,6,7,8 or 12<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>  {<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>   y = scale_ADC_threshold_values[ScaleCounter][x] + octave;            <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>   z = scale_ADC_threshold_values[ScaleCounter][x+1] + octave;<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>    <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>   if( (ADCValue >= (scale_ADC_threshold_values[ScaleCounter][x]) + octave ) &&<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>      (ADCValue < (scale_ADC_threshold_values[ScaleCounter][x+1] + octave) ) )<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>    .<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>    .<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>    . <o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This way I quickly know where the ADC input is located in the scale cells<br>then I can output the right quantized output.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The selected output then is used to calculate the right MIDI note to send.<o:p></o:p></span></p><p class=MsoNormal><span lang=EN-CA style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>JP<br><br><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>De :</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> The SynthiMuse [mailto:synthimuse@gmail.com] <br><b>Envoyé :</b> 20 septembre 2021 16:30<br><b>À :</b> Didier Leplae<br><b>Cc :</b> Jean-Pierre Desroc</span><span lang=FR style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>hers; synth-diy mailing list<br><b>Objet :</b> Re: [sdiy] Introducing my new M116 Multi-Scale Quantizer !<o:p></o:p></span></p><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>In the example of a pentatonic scale, the octave range would be divided in to 5 steps.<o:p></o:p></p><div><p class=MsoNormal>If the input value was exactly at the midway point, it would take the middle note of the scale.<o:p></o:p></p></div><div><p class=MsoNormal>If the input was half way between 2 notes, it would first look down one step to see if there was an allowable note. If no note was there,  it would look up one step. If no note was found it would look down two steps, if no note was found, it would look up two steps and so on. It would keep widening it's search up and down until it found a valid note to output.<o:p></o:p></p></div><div><p class=MsoNormal>In the synthimuse, I added a randomisation to the first step so it didn't always go the same way. Sometimes it would start looking down, other times it would start looking up.<o:p></o:p></p></div><div><p class=MsoNormal>The only thing I didn't like about this approach is that it can take an indeterminate number of steps to get a note. <o:p></o:p></p></div><div><p class=MsoNormal>For a 12 tone chromatic scale : 1 step<o:p></o:p></p></div><div><p class=MsoNormal>For a worst case 1 tone scale, it could take up to 11 steps.<o:p></o:p></p></div><div><p class=MsoNormal>The routine above was some of the cleverest in the design but I can't take credit for it. A colleague gave me the algorithm when I described the problem to him. :-)<o:p></o:p></p></div><div><p class=MsoNormal>Gerry<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Mon, 20 Sep 2021, 20:44 Didier Leplae, <<a href="mailto:didierleplae@yahoo.com">didierleplae@yahoo.com</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><div><div><p class=MsoNormal>I’m not sure how successive approximation works. <o:p></o:p></p></div><div><p class=MsoNormal>But if you are hunting for the nearest note and some are further apart than others, won’t the result still be that some notes take longer to reach than others?<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal><br><br><o:p></o:p></p><p class=MsoNormal style='margin-bottom:12.0pt'>On Sep 20, 2021, at 2:19 PM, The SynthiMuse <<a href="mailto:synthimuse@gmail.com" target="_blank">synthimuse@gmail.com</a>> wrote:<o:p></o:p></p></div><blockquote style='margin-top:5.0pt;margin-bottom:5.0pt'><div><p class=MsoNormal><span style='font-family:"Tahoma","sans-serif"'></span><o:p></o:p></p><div><div><p class=MsoNormal>Hi Didier<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>I'm not sure how Jean-Pierre dealt with this issue but in the Synthimuse, I gave each note in the scale equal weight and 'hunted', by successive approximation to find the note that equated closest to the input value. <o:p></o:p></p><div><p class=MsoNormal>The SM had ( who knows, it may have again if I can get my finger out :-)  ) an analog input so it's similar to the situation that Jean-Pierre is dealing with.<o:p></o:p></p></div><div><p class=MsoNormal>Gerry<o:p></o:p></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><div><p class=MsoNormal>On Mon, 20 Sep 2021, 19:45 Didier Leplae via Synth-diy, <<a href="mailto:synth-diy@synth-diy.org" target="_blank">synth-diy@synth-diy.org</a>> wrote:<o:p></o:p></p></div><blockquote style='border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm'><p class=MsoNormal>That’s really beautiful! I have a question for you.<br><br>I was working on a eurorack quantizer a while back but never finished. On mine, if I were doing like you are in the demo, feeding a slow triangle LFO into the quantizer, and having it set to a scale with some uneven intervals (for example any diatonic scale) then the time that each note holds is also uneven (proportional to the size of the interval. <br>I’m guessing you have programmed yours to compensate for this. Can you explain a bit about how that works? Also, how does this play out if you input a sequence with uneven durations for example?<br><br>> On Sep 20, 2021, at 8:54 AM, Jean-Pierre Desrochers <<a href="mailto:jpdesroc@oricom.ca" target="_blank">jpdesroc@oricom.ca</a>> wrote:<br>> <br>> <span style='font-family:"Tahoma","sans-serif"'></span>Thank you Roman !<br>> <br>> JP<br>> <br>> ******************************************************<br>> <br>> -----Message d'origine-----<br>> De : Roman Sowa [mailto:<a href="mailto:modular@go2.pl" target="_blank">modular@go2.pl</a>] <br>> Envoyé : 20 septembre 2021 05:46<br>> À : Jean-Pierre Desrochers; <a href="mailto:synth-diy@synth-diy.org" target="_blank">synth-diy@synth-diy.org</a><br>> Objet : Re: [sdiy] Introducing my new M116 Multi-Scale Quantizer !<br>> <br>> Always a pleasure to watch.<br>> Thanks for posting it.<br>> <br>> Roman<br>> <br>> W dniu 2021-09-17 o 20:55, Jean-Pierre Desrochers pisze:<br>>> Hi all !<br>>> <br>>> After around  4 months of work..<br>>> <br>>> Introducing my new *M116 Multi-Scale Quantizer* !<br>>> <br>>> It contains 25 selectable scales listed here:<br>>> <br>>> */Semi-Tones/*<br>>> <br>>> */Whole-Tones/*<br>>> <br>>> */Pentatonic major/*<br>>> <br>>> */Pentatonic minor/*<br>>> <br>>> */Heptatonic major/*<br>>> <br>>> */Heptatonic minor/*<br>>> <br>>> */Triad major/*<br>>> <br>>> */Triad augm./*<br>>> <br>>> */Triad minor/*<br>>> <br>>> */Triad dimin./*<br>>> <br>>> */Augmented/*<br>>> <br>>> */Diminished/*<br>>> <br>>> */Athar Kurd/*<br>>> <br>>> */Kumoi/*<br>>> <br>>> */Hon-Kumoi-Joshi/*<br>>> <br>>> */Egyptian/*<br>>> <br>>> */Nikriz/*<br>>> <br>>> */Persian/*<br>>> <br>>> */Hebrew/*<br>>> <br>>> */Dorian Mode/*<br>>> <br>>> */Phrygian Mode/*<br>>> <br>>> */Lydian Mode/*<br>>> <br>>> */Mixoydian Mode/*<br>>> <br>>> */Locrian Mode/*<br>>> <br>>> */Gypsy/*<br>>> <br>>> It also offers:<br>>> <br>>> 0 to +8.00vdc CV IN / OUT span<br>>> <br>>> Lag control on quantized output<br>>> <br>>> 12 transpose keys from G to F#<br>>> <br>>> Gate IN / OUT connectors<br>>> <br>>> MIDI output (16 channels)<br>>> <br>>> You can watch a Youtube demo HERE <br>>> <<a href="https://www.youtube.com/watch?v=UxPzGvb0HrQ" target="_blank">https://www.youtube.com/watch?v=UxPzGvb0HrQ</a>>.<br>>> <br>>> <br>>> The fact that all generated quantized notes are ‘IN TUNE’<br>>> makes this module very ‘musical’..<br>>> <br>>> I’m very happy !!!<br>>> <br>>> Thanks for watching.<br>>> <br>>> JP<br>>> <br>>> <br>>> _______________________________________________<br>>> Synth-diy mailing list<br>>> <a href="mailto:Synth-diy@synth-diy.org" target="_blank">Synth-diy@synth-diy.org</a><br>>> <a href="http://synth-diy.org/mailman/listinfo/synth-diy" target="_blank">http://synth-diy.org/mailman/listinfo/synth-diy</a><br>>> Selling or trading? Use <a href="mailto:marketplace@synth-diy.org" target="_blank">marketplace@synth-diy.org</a><br>>> <br>> <br>> <br>> _______________________________________________<br>> Synth-diy mailing list<br>> <a href="mailto:Synth-diy@synth-diy.org" target="_blank">Synth-diy@synth-diy.org</a><br>> <a href="http://synth-diy.org/mailman/listinfo/synth-diy" target="_blank">http://synth-diy.org/mailman/listinfo/synth-diy</a><br>> Selling or trading? Use <a href="mailto:marketplace@synth-diy.org" target="_blank">marketplace@synth-diy.org</a><br><br><br>_______________________________________________<br>Synth-diy mailing list<br><a href="mailto:Synth-diy@synth-diy.org" target="_blank">Synth-diy@synth-diy.org</a><br><a href="http://synth-diy.org/mailman/listinfo/synth-diy" target="_blank">http://synth-diy.org/mailman/listinfo/synth-diy</a><br>Selling or trading? Use <a href="mailto:marketplace@synth-diy.org" target="_blank">marketplace@synth-diy.org</a><o:p></o:p></p></blockquote></div></div></blockquote></div></blockquote></div></div></body></html>