[LAD] Quantise MIDI note/frequency to musical scale: algorithm?

Roman Sommer lists at resonant-bytes.de
Sat Jan 1 22:46:06 CET 2022


Hi Jeanette,

If you want to reduce the amount of table elements, you could calculate
the offset from the key base note, take it mod 12 and have a 12-element
array for every scale you want to implement (pseudo-C ahead):

  bool minor[] = [true, false, true, true, false, true, false, true,
  true, false, true, false];
  uint32_t offset = 2; // key: D
  // add offset instead of subtract to ensure the result is positive
  uint32_t additive_offset = 12 - offset
  uint32_t index = (note + additive_offset) % 12;

  if minor[index]
     play_note(note);

Won't probably make much of a difference in performance really, but it
should make it easier to implement all scales in all keys.
Hope that helps! :)

keep grooving

Roman

P.S. Duplicate because I sent with the wrong email address first ;)
"Jeanette C." <julien at mail.upb.de> writes:

> Gopod morning Fons!
> Dec 31 2021, Fons Adriaensen has written:
> ...
>> There is code doing this [quantise frequency to scale] in zita-at1 (the autotuner). It has some
>> refinements such as an optional preference for the previous note.
>> I will look this up and isolate it - it may be difficult to find
>> as it is integrated with other functionality.
> Many thanks, this is great! You are, as always, very kind.
>
> Best wishes,
>
> Jeanette
>>
>> Ciao,
>>
>> -- 
>> FA
>>
>>
>>
>
> -- 
>   * Website: http://juliencoder.de - for summer is a state of sound
>   * Youtube: https://www.youtube.com/channel/UCMS4rfGrTwz8W7jhC1Jnv7g
>   * Audiobombs: https://www.audiobombs.com/users/jeanette_c
>   * GitHub: https://github.com/jeanette-c
>
> I thought love was just a tingling of the skin <3
> (Britney Spears)
> _______________________________________________
> Linux-audio-dev mailing list
> Linux-audio-dev at lists.linuxaudio.org
> https://lists.linuxaudio.org/listinfo/linux-audio-dev


More information about the Linux-audio-dev mailing list