Skip 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.

Opusmodus 1.3.24902

Featured Replies

– New function:

  • POLYGON-RHYTHM – Generates a symmetrical polygon to a given n-gon.


– Update:
LENGTH-WEIGHT – :swallow keyword added.
LENGTH-REST-SERIES – omn-form and :swallow keyword added.
LENGTH-TO-REST – omn-form and :swallow keyword added.

– Documents:
Howto Score/Rhythm/Polygon Rhythm.opmo 

 

Note: 

Select 'Check for Updates...' from Opusmodus app menu to get the latest version.

 

 

POLYGON-RHYTHM


This function returns a symmetrical polygon to a given n-gon (sides number) with circle points (denominator) and a given staring point.

In this example we use 3-gon in a 16 point circle with the starting point 0:

(polygon-rhythm 3 16 0)
=> (1/16 -1/16 -1/16 -1/16 1/16 -1/16 -1/16 -1/16
    -1/16 -1/16 -1/16 -1/16 1/16 -1/16 -1/16 -1/16)

 

Same as above with :legato t added:

(polygon-rhythm 3 16 0 :legato t)
=> (1/4 1/2 1/4)

 

The 3-gon in a 16 point circle with the starting point 0 will produce 7 symmetrical 3-gon’s:

 

8327BBA4-938A-4EE0-8C5F-C4AC52CE5EE3.png777919CD-CF29-4BB7-9EAC-AE993E6109A2.pngC2585275-1706-4F74-A842-3ECAFEE7F99B.png

39FE2198-C475-4689-AB4C-FCFCEEEA2753.png6DA1EEC1-4494-4CCD-924D-AFD5C5040900.pngAD072DD9-7A2D-4647-8E40-FC93E88C2263.png

8F8AFDD5-964E-4060-B201-26D60480D163.png

 

Example with start point 5:

(polygon-rhythm 3 16 5)
=> (-1/16 -1/16 -1/16 -1/16 -1/16 1/16 -1/16 -1/16
    -1/16 -1/16 -1/16 1/16 -1/16 -1/16 -1/16 1/16)
(circle-rhythm-plot (polygon-rhythm 3 16 5) :points 16)

622C8BAF-4248-4767-ACBE-B2D750326ECE.png

 

 

Examples:

 

In the following example we create 8 bars of a ‘Drum Set’ rhythm.

First we assign the ‘GM Percussion’ names to variables:

(setf bd (read-map *gm-percussion* 'acoustic-bass-drum))
(setf sd (read-map *gm-percussion* 'Acoustic-Snare))
(setf ht (read-map *gm-percussion* 'High-Tom))
(setf hh (read-map *gm-percussion* 'Open-Hi-hat))

 

Next we create 4 polygon rhythms:

(setf bd-gon (polygon-rhythm 3 16 0 :pitch bd :seed 5))
(setf sd-gon (polygon-rhythm 2 16 1 :pitch sd :seed 45))
(setf ht-gon (polygon-rhythm 2 16 5 :pitch ht :seed 45))
(setf hh-gon (polygon-rhythm 5 16 2 :pitch hh :seed 5))

 

With the CIRCLE-RHYTHM-PLOT function you can visualise how the rhythms are working together:

(circle-rhythm-plot (list bd-gon sd-gon ht-gon hh-gon) :points 16)

C44046BB-89C6-46DF-AFD2-2F6EA535D5B0.png

 

Let’s hear the result above, using PS function and ‘GM Instrument Set’ with a 8 times loop:

(ps 'gm
    :ds-bd (list (gen-eval 8 'bd-gon))
    :ds-sd (list (gen-eval 8 'sd-gon))
    :ds-ht (list (gen-eval 8 'ht-gon))
    :ds-hh (list (gen-eval 8 'hh-gon))
    :tempo 120)

 

Same as above but without a seed value:

(ps 'gm
    :ds-bd (list (gen-eval 8 '(polygon-rhythm 3 16 0 :pitch bd)))
    :ds-sd (list (gen-eval 8 '(polygon-rhythm 2 16 1 :pitch sd)))
    :ds-ht (list (gen-eval 8 '(polygon-rhythm 2 16 5 :pitch ht)))
    :ds-hh (list (gen-eval 8 '(polygon-rhythm 5 16 2 :pitch hh)))
    :tempo 120)

 

In the next example we add a few more percussion instruments.

The '? start symbol means the start point is selected at random: 0 to 15.

(progn
  (setf bd (read-map *gm-percussion* 'Acoustic-Bass-Drum))
  (setf sd (read-map *gm-percussion* 'Acoustic-Snare))
  (setf ht (read-map *gm-percussion* 'High-Tom))
  (setf hh (read-map *gm-percussion* 'Open-Hi-hat))
  (setf lb (read-map *gm-percussion* 'Low-Bongo))
  (setf hb (read-map *gm-percussion* 'High-Bongo))
  (setf mhc (read-map *gm-percussion* 'Mute-Hi-Conga))
  (setf lc (read-map *gm-percussion* 'Low-Conga))
  
  (ps 'gm
      :ds-bd (list (gen-eval 16 '(polygon-rhythm 3 16 0 :pitch bd)))
      :ds-sd (list (gen-eval 16 '(polygon-rhythm 2 16 1 :pitch sd)))
      :ds-ht (list (gen-eval 16 '(polygon-rhythm 2 16 5 :pitch ht)))
      :ds-hh (list (gen-eval 16 '(polygon-rhythm 5 16 2 :pitch hh)))
      :rhy (list (gen-eval 16 '(polygon-rhythm 5 16 '? :pitch lb))
                 (gen-eval 16 '(polygon-rhythm 4 16 '? :pitch hb))
                 (gen-eval 16 '(polygon-rhythm 7 16 '? :pitch mhc))
                 (gen-eval 16 '(polygon-rhythm 7 16 '? :pitch lc)))
      :tempo 120)
  )

 


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

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.