Marlon Schumacher
6 days ago 8a52b9b9c6aab04076883a3a674cbf513b8b49cd
sources/SRR.lisp
File was renamed from SRR.lisp
@@ -1,8 +1,9 @@
; ****************************************************************
; | OM-SRR, 2023                                                 |
; | OM-SRR, 2023-2025 M.Schumacher                               |
; |                                                              |
; | Library for spectral rhythm model via integer time ratios    |
; | Library for spectral rhythm modeling via integer time ratios |
; | (partials) as phase-alilgned amplitude modulations.          |
; |                                                              |
; | See https://steffenkrebber.de/research/sinusoidal-run-rhythm/|
; ****************************************************************
;
@@ -26,22 +27,21 @@
(in-package :om)
; main function
; gen-wave
; GEN-PARTIAL
(defmethod! gen-partial (subdivision &key (precision 0.01) (decimals 5))
            ;:icon 141
            ;:initvals '(0 0.1 5)
            ;:indoc '("subdivision" "precision" "decimals")
            :icon 988
            :initvals '(2 0.01 5)
            :indoc '("subdivision" "precision" "decimals")
            :numouts 2
  (let* ((sampled-function (multiple-value-list   
                            (om-sample #'cos (* subdivision precision) 0 (* subdivision (* 2 pi)) decimals)))
         (x-points (second sampled-function))
         (y-points (third sampled-function)))
    (values (om/ x-points subdivision) y-points)
    )
@@ -119,7 +119,7 @@
  "Compute the Farey sequence of order n."
  (let ((fractions '()))
    (loop for denominator from 1 to n
          do (loop for numerator from 0 to denominator
          do (loop for numerator from 1 to denominator
                   when (and (>= numerator 0) (<= numerator denominator)
                             (= 1 (gcd numerator denominator)))
                   do (push (cons numerator denominator) fractions)))
@@ -127,23 +127,9 @@
                      (let ((num-a (car a)) (den-a (cdr a))
                            (num-b (car b)) (den-b (cdr b)))
                        (< (* num-a (float den-b)) (* num-b (float den-a))))))
    (loop for (a . b) in fractions collect
          (/ a b)
          )
    ))
(defparameter *farey-seq* '(0 1/5 1/4 1/3 2/5 1/2 3/5 2/3 3/4 4/5 1))
(loop for item in *farey-seq*
        collect (unless (zerop item)
                  (/ 1 item)))
;; Example usage
(print (farey-sequence 5))
(farey-sequence 5)
(let ((conspair '(1 . 5)))
 (/ (car conspair)
    (cdr conspair))
)