Jump to content
View in the app

A better way to browse. Learn more.

Opusmodus

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Looping through a scale

Featured Replies

Hello!

I've been coding in python for two weeks for work and I'm now having trouble figuring out what I'm doing wrong in my lisp loops. Cursor.ai isn't helping debug my lisp at all.

I'm trying to loops through scales such as
 

(setf a-pitches (loop for note in scalea

                         collect (list note (+ note 4))))

           
And it's not evaluating. I was hoping to do this in OpusModus with a little help from cursor for lisp but that's not yielding good results. There's probably an OM function I'm not thinking of. Here's the whole set of functional code.

Any advice is appreciated.
 

;;;---------------------------------------------------------
;;; Parameters

(setf scalea '(bb3 c4 cs4 ds4 F4 G4 gs4))
(setf scaleb '(bb3 c4 cs4 d4 F4 G4 gs4))
(setf scalec '(ds3 F3 G3 gs3 as3 c4 cs4))


;;;--------------------------------------------------------
;;; AI code



(in-package :om)

;; Section A pitches and rhythms
(setf a-pitches (loop for note in scalea
                      collect (list note (+ note 4))))
(setf a-lengths '(q q. e q q. e q))
(setf a-dynamics '(mf mf mp mf mf mp mf))

(setf section-a-omn
      (make-omn :pitch a-pitches 
                :length a-lengths 
                :velocity a-dynamics))

;; Section B pitches and rhythms
(setf b-pitches (loop for note in scaleb
                      collect (list note (+ note 3))))
(setf b-lengths '(h q q h q q))
(setf b-dynamics '(mp mf mf mp mf mf))

(setf section-b-omn
      (make-omn :pitch b-pitches 
                :length b-lengths 
                :velocity b-dynamics))

;; Section C pitches and rhythms
(setf c-pitches (loop for note in scalec
                      collect (list note (+ note 5))))
(setf c-lengths '(q. q. q q h q))
(setf c-dynamics '(f mf mp p mp mf))

(setf section-c-omn
      (make-omn :pitch c-pitches 
                :length c-lengths 
                :velocity c-dynamics))

;; Combine sections in ABABCABAB form
(setf piano-rh
      (combine section-a-omn
               section-b-omn
               section-a-omn
               section-b-omn
               section-c-omn
               section-a-omn
               section-b-omn
               section-a-omn
               section-b-omn))

;; Create left hand accompaniment
(setf lh-pitches '((bb2 f3) (c3 g3) (cs3 gs3)))
(setf lh-lengths '(h h h))
(setf lh-dynamics '(mp mp mp))

(setf piano-lh
      (make-omn :pitch lh-pitches
                :length lh-lengths
                :velocity lh-dynamics))

 

+ note 4 isn't going to work. Either convert the note to an integer + 4 then convert back again or use pitch-transpose.

 

(setf a-pitches (loop for note in scalea
                      collect (list note (integer-to-pitch (+ 4 (pitch-to-integer note))))))

Or

(setf a-pitches (loop for note in scalea
                      collect (cons note (pitch-transpose 4 (list note)))))

 

Jesper

Create an account or sign in to comment


Copyright © 2014-2026 Opusmodus™ Ltd. All rights reserved.
Product features, specifications, system requirements and availability are subject to change without notice.
Opusmodus, the Opusmodus logo, and other Opusmodus trademarks are either registered trademarks or trademarks of Opusmodus Ltd.
All other trademarks contained herein are the property of their respective owners.

Powered by Invision Community

Important Information

Terms of Use Privacy Policy

Account

Navigation

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.