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.

New CLM Implementation For Opusmodus Version 4.0.30978

Featured Replies

New CLM Implementation For Opusmodus

This update introduces a rewritten CLM implementation for Opusmodus, including a newly compiled sound engine, many new instruments, updated documentation, and a new OMN wrapper system.

The new OMN wrapper automatically makes any definstrument available for OMN-based use. In practice, this means that once an instrument is loaded, its -omn wrapper is generated automatically, so CLM instruments can be driven directly from OMN-form sequences.

What Is New

- rewritten CLM implementation

- newly compiled CLM sound engine

- many new and updated CLM instruments

- automatic OMN wrapper generation for definstrument

- new CLM documentation in the Assistant

- new CLM examples using OMN wrappers

New Documentation Format

With this CLM implementation we have also introduced a new Markdown-based documentation format for the CLM documentation.

The new .md format makes the documentation easier to read, easier to maintain, and easier to extend. It is now used by the Opusmodus Assistant to display CLM function and instrument documentation with improved layout, tables, examples, and links.

This also makes it easier to add new CLM instruments, generators, and supporting documents in a consistent format.

Installation

To use the new CLM implementation:

1. Delete the old CLM directory from your ~/Opusmodus folder.

2. Replace it with the new CLM directory supplied with this update.

3. Open ~/Opusmodus/User Source/Extensions.

4. Replace Load CLM Instruments.lisp with the updated version.

5. In Load CLM Instruments.lisp, uncomment the instruments you want to compile and load.

6. Start the Opusmodus application.

First Launch

The first time you launch Opusmodus after installing the new CLM, loading and compiling the instruments may take a little time. This is expected.

After the first successful build, subsequent launches should take only a few seconds.

Assistant Refresh

After installing the update:

1. Open the Opusmodus Assistant window.

2. Choose Clear Recent.

3. Close the Assistant window.

4. Reopen the Assistant.

After that refresh, the new documentation should appear correctly.

Where To Find The Documentation

In the Assistant:

- In f(x) -> CLM, you will find the CLM instruments, each with a short description and examples.

- In Assistant (D), you will find new documentation for defining instruments and for the newly added generators.

- In CLM Examples, you will find score examples that use the OMN wrapper.

Feedback

Because this is a substantial new CLM implementation, you may still encounter occasional glitches, unexpected behaviour, or documentation errors.

If you find a problem, please post the issue, error message, or example in the CLM section of our forum. Reports from real use are very helpful and will help us improve the implementation more quickly.

Dowmload and replace

CLM.zip
Load CLM Instruments.lisp

Best wishes,

Janusz

At what level of the OM directory does the CLM dir need to be? I get an error of the dir not being found regardless of where I put it. I used to keep it at top level in OM dir - but I get an error now that it's looking for it in the /Media dir.

Andrew

But the instruments do appear to have compiled - so perhaps the error was incorrect? See attached. I have a full folder of compiled instruments.

Screenshot 2026-03-28 at 17.35.48.png

There is one problem here:

When I call this

(with-sound (:channels 2)

(badd 0 1.5 220 .2

:partials '(1 1 .5 .3 2 .2 3 .1)

:ampfun '(0 0 1 1 2 0)

:degree 40

:reverb .1))

OM 2 >

Error: The directory "clm" does not exist in #P"E:/Opmo_win_work/opusmodus/Opusmodus/Opusmodus/media/clm/".

But I actually have the folder in the rigth place, as you can see:

image.png

The problem is that in windows, the backslashes of the file system is reversed

THe function returns this:

E:/Opmo_win_work/opusmodus/Opusmodus/Opusmodus/media/clm/

But the directory is with reversed backslashes, like this.

MAC //// rigth-oriented backslashes

WINDOWS \\\\\ left-oriented backslash

E:\Opmo_win_work\opusmodus\Opusmodus\Opusmodus\CLM\instruments

So, I have to edit every file path, but a can´t do it inside the functions...

Best,

Julio

  • Author

Opusmodus holder needs to be installed in the home directory.

Screenshot 2026-03-28 at 19.21.12.png

As for the CLM folder inside the Media folder, this folder is used for CLM audio and temporary files created when calling CLM instruments. This folder should be created automatically if it is not found. I will update the app to do that in the next update. To solve the problem create CLM folder in the ~/Opusmouds/Media directory by hand.
Fixed in version 4.0.30979.


Did some progress, but geting this now

(with-sound (:channels 2)
  (badd 0 2.0 110 .3
        :partials '(1 1 2 .5 3 .25 4 .12)
        :freqfun '(0 0 50 7 100 0)
        :power .5
        :degree 20))

Error: Undefined operator badd in form (badd 0 2.0 110 0.3 :partials (quote (1 1 2 0.5 3 0.25 4 0.12)) :freqfun (quote (0 0 50 7 100 0)) :power 0.5 :degree 20).

This is now working perfectly for me. I still had to create a CLM folder manually in /Media - but once I'd done that, my compilation proceeded without complaint. The initial compilation was quick (about a minute or so on M5) and then subsequent start ups as usual - except that I get an error message on start up (it doesn't seem to have an effect though - as I have not had any problems using the CLM instruments as it just appears to be recognising the end of the load-instruments file, so it's more of an annoyance that needs dismissing on startup than anything functional. See attached.

This is a very impressive new addition to OM. The integration of functions directly into the OM package is superb. The examples show off some excellent new approaches and the analysis functions looks great. There's an 'Xenakis Dynamic Stochastic Synthesis' function! Wow - this is great!

From what I can tell, CLM output is rendered to a .wav output which is then saved in the CLM folder in the /Media directory - which is also a great feature - as this is so flexible for further processing and removes the 'how do I get this output somewhere else' problem.

Thanks, Janusz

Andrew

Screenshot 2026-03-29 at 09.50.48.png

  • Author

Looks like you have not removed the comment end symbol in your file:

|#

(with-sound (:channels 2)
  (badd 0 2.0 110 .3
        :partials '(1 1 2 .5 3 .25 4 .12)
        :freqfun '(0 0 50 7 100 0)
        :power .5
        :degree 20))

no error here.

Exactly. Need to delete ALL commenting in the Load Instruments CLM file - including trailing comment marker. Now start up is clean.

The new docs are also excellent. MD format works really well and looks great.

I´m geting this error.

Please, what i´m doing wrong ? Looks like 2 blackslashes now

While loading file E:\Opmo_win_work\opusmodus\Opusmodus\Opusmodus\User Source\Extensions\Load CLM

Instruments.lisp

trying to compile C file

("E:\\Opmo_win_work\\opusmodus\\Opusmodus\\Opusmodus\\clm\\libclm\\clm_add_noise_filtered.c"

"E:\\Opmo_win_work\\opusmodus\\Opusmodus\\Opusmodus\\clm\\libclm\\libclm-o64.lib"): didn't find a

compiler

Thanks, Janusz

But all the other stuff works well. I´m using this structure of files for years... I´ll try to figure out.

Best,

Still geting this... I´ll try later. I do not use this very much, but I´d like to explore more.

(with-sound (:channels 2)

(badd 0 1.5 220 .2

:partials '(1 1 .5 .3 2 .2 3 .1)

:ampfun '(0 0 1 1 2 0)

:degree 40

:reverb .1))

OM 1 > with-sound

Error: Undefined operator badd in form (badd 0 1.5 220 0.2 :partials (quote (1 1 0.5 0.3 2 0.2 3 0.1)) :ampfun (quote (0 0 1 1 2 0)) :degree 40 :reverb 0.1).

What is the advantage of using this rather than Supercollider / cl-collider ( a very powerful tool ) for synthesis / sound design?

On 3/29/2026 at 7:56 PM, eboats said:

What is the advantage of using this rather than Supercollider / cl-collider ( a very powerful tool ) for synthesis / sound design?

All processing including audio stays within Common Lisp, whereas cl-Collider renders audio via the Supercollider server over OSC. The connection to the server is the fragile element and often needs resetting, it can drop out during rendering, or fail silently. The SC server is a separate app, CLM is completely inside OM, and is also inside the OM package, so much neater as doesn't involve function prefixes. Both are great though: the UGens in SC very flexible, but CLM has long heritage with a 'Lispier' approach (as it's designed from the start as a Lisp music engine and not back engineered onto SC conventions as cl-Collider is) and it sounds first class, with origins at CCRMA Stanford. I also use CLM in an SBCL installation and it's rock solid. Ideal config: use both!

I reinstalled Opusmodus, copied the new CLM folder to home directory and now I get this at the startup

While loading file E:\Opusmodus\User Source\Extensions\Load CLM Instruments.lisp

trying to compile C file ("E:\\Opusmodus\\clm\\libclm\\clm_add_noise_filtered.c"

"E:\\Opusmodus\\clm\\libclm\\libclm-o64.lib"): didn't find a compiler

Please, someone can help ? (WINDOWS)

  • Author

Looks like you need to install C compiler on your Windows.

Windows C Compiler

CLM instruments are not delivered as precompiled user instruments. To use CLM instruments on Windows, you need a working Windows C toolchain.

The recommended setup is:

  • Microsoft Visual C++ Build Tools

  • or a full Visual Studio installation with the C++ tools enabled

After installation, make sure the compiler environment is available to Opusmodus. In practice, this usually means that the Visual Studio build tools are installed correctly and the standard Windows compiler setup has been initialized.

I will add this into the README FISRST file.

Thanks a lot, Janusz

This is an important update.

Please, if possible, can you provide the exact links to this complementations ?

Because there are many versions and updates in windows...

Yes, important to add in the Readme files, specially for WIN users.

Looking forward to use this. So cool !

BEst,

Julio

Dear Janusz,

Have you tried in a windows machine ?

I installed the Full version of Visual Studio and reinstalled Opusmodus in the usual C: directory. It solved the startup error mentioned above, but...

My workspace is in a different hard disk, to avoid loose my files in case of crashing the OS (but is in a top directory, withoud subfolders) like

E:\Opusmodus

The CLM new content was copied and also the Lisp file

image.png

Getting this...

(with-sound (:channels 2)

(badd 0 1.5 220 .2

:partials '(1 1 .5 .3 2 .2 3 .1)

:ampfun '(0 0 1 1 2 0)

:degree 40

:reverb .1))

OM 8 > with-sound

Error: Undefined operator badd in form (badd 0 1.5 220 0.2 :partials (quote (1 1 0.5 0.3 2 0.2 3 0.1)) :ampfun (quote (0 0 1 1 2 0)) :degree 40 :reverb 0.1).

Best ! Julio

Still trying with the latest version.

Now my message reads like this:

While loading file E:\Opusmodus\User Source\Extensions\Load CLM Instruments.lisp

Failed to compile C file "(E:\Opusmodus\clm\libclm\clm_cross_fade.c

E:\Opusmodus\clm\libclm\libclm-o64.lib)" with error 2.

>>>>>>>Output:

C:\Users\Desk2025\AppData\Local\Temp\lwtemp_DESKTOP-MIMK850_528834jfFWfB.bat

E:\Opusmodus\CLM\instruments>call "c:\Program Files\Microsoft Visual

Studio\18\Community\VC\Auxiliary\Build\vcvars64.bat"

**********************************************************************

** Visual Studio 2026 Developer Command Prompt v18.4.3

** Copyright (c) 2026 Microsoft Corporation

**********************************************************************

[vcvarsall.bat] Environment initialized for: 'x64'

Microsoft (R) C/C++ Optimizing Compiler Version 19.50.35728 for x64

Copyright (C) Microsoft Corporation. All rights reserved.

clm_cross_fade.c

Microsoft (R) Incremental Linker Version 14.50.35728.0

Copyright (C) Microsoft Corporation. All rights reserved.

/dll

/implib:E:\Opusmodus\clm\libclm\clm_cross_fade.lib

/out:E:\Opusmodus\clm\libclm\clm_cross_fade.dll

/export:clm_cross_fade103

E:\Opusmodus\clm\libclm\clm_cross_fade.obj

E:\Opusmodus\clm\libclm\libclm-o64.lib

LINK : error LNK2001: unresolved external symbol clm_cross_fade103

E:\Opusmodus\clm\libclm\clm_cross_fade.lib : fatal error LNK1120: 1 unresolved externals

  • Author

This does not look like a Visual Studio problem.
The clm_cross_fade.c file compiles, but the linker cannot find the export symbol clm_cross_fade103. Most likely some older generated CLM files are still present and do not match the current compiled definition.

Please try this:

  1. Close Opusmodus.

  2. Delete these files if they exist:

    • E:\\Opusmodus\\clm\\libclm\\clm_cross_fade.c

    • E:\\Opusmodus\\clm\\libclm\\clm_cross_fade.obj

    • E:\\Opusmodus\\clm\\libclm\\clm_cross_fade.lib

    • E:\\Opusmodus\\clm\\libclm\\clm_cross_fade.dll

  3. Also delete the compiled fade file from the CLM compiled folder:

    • E:\\Opusmodus\\clm\\bin\\fade.*

    • or E:\\Opusmodus\\clm\\bin-src\\fade.*

  4. Start Opusmodus again and load Load CLM Instruments.lisp once more.

This should force Opusmodus to rebuild the instrument from scratch.


The best way would be to replaced the CLM folder in Opusmodus installer. The bin and the libclm folder must be empty of any files before staring the CLM instruments instalation.

I did all this and get this on the listener

I tried in the first time just deleting the filies you mentioned and got the same error

the second time I deleted the content of bin and libclm folders the opusmodus installer built/compiled the files again before restarting.

I got this in the listener:

OM 1 >

; Loading text file E:\Opusmodus\clm\CLM Startup Instruments.lisp

load-clm-ins, instruments: ("add-noise-filtered" "add" "addflt" "addsnd" "anoi" "arith" "arith1" "arith2" "autoc" "backandforth" "badd" "bandedwg" "bell" "bigbird" "bird" "bowl" "btest" "canter" "cellon" "circular-scanned" "cnv" "convolve" "cross-synthesis" "drone" "expandn" "expsrc" "fade" "fft" "filter-noise" "fltnoi" "fltsnd" "flute" "fm-bass" "fmex" "fmtest" "freeverb" "fullmix" "get-spectrum" "gen-control" "gen-delays" "gen-feedback" "gen-file-processing" "gen-filters" "gen-followers" "gen-formants" "gen-mixed-demo" "gen-modulation" "gen-noise" "gen-oscillators" "gen-random-modulation" "gen-reverb" "gen-spatial" "gen-spectral" "gen-utilities" "grani" "granular" "grapheq" "insect" "jcrev" "jcrevf" "jcvoi" "jlrev" "kiprev" "lbjPiano" "leslie" "maraca" "maxf" "mlbvoi" "move-sound" "noise" "nrev" "one-cut" "piano" "pluck" "pm-pulse" "pqw" "pqwvox" "prc95" "prc96" "pvoc" "resflt" "reson" "rev2" "ring-modulate" "rmsenv" "san" "scanned" "scentroid" "shepard" "singer" "sndwarp" "stochastic" "strad" "tb" "tnot" "track-rms" "trp" "ug" "ug1" "ug2" "ug3" "ug4" "ugex" "v" "vowel" "vox" "vslf" "vsum" "waveguide-flute" "wavetrain" "zd" "zipper")

; Loading fasl file E:\Opusmodus\clm\bin\add-noise-filtered.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\add.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\addflt.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\addsnd.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\anoi.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\arith.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\arith1.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\arith2.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\autoc.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\backandforth.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\badd.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\bandedwg.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\bell.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\bigbird.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\bird.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\bowl.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\btest.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\canter.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\cellon.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\circular-scanned.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\cnv.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\convolve.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\cross-synthesis.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\drone.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\expandn.64ofasl

; Loading fasl file E:\Opusmodus\clm\bin\expsrc.64ofasl

;;; Compiling file E:\Opusmodus\clm\instruments\fade.ins ...

;;; Safety = 3, Speed = 1, Space = 1, Float = 1, Interruptible = 1

;;; Compilation speed = 1, Debug = 2, Fixnum safety = 3

;;; Source level debugging is off

;;; Source file recording is on

;;; Cross referencing is off

; (lispworks:top-level-form 0)

; (lispworks:top-level-form 1)

; Writing "E:\\Opusmodus\\clm\\libclm\\clm_cross_fade.c"

; (lispworks:top-level-form 2)

; Compiling "E:\\Opusmodus\\clm\\libclm\\clm_cross_fade.c"

; Created shared object file "E:\\Opusmodus\\clm\\libclm\\clm_cross_fade.dll"

; (lispworks:top-level-form 2)

; (lispworks:top-level-form 2)

; (harlequin-common-lisp:subfunction |clm_cross_fade3| (fli:define-foreign-function |clm_cross_fade3|))

; (fli:define-foreign-function |clm_cross_fade3|)

; (fli:define-foreign-function |clm_cross_fade3|)

; (lispworks:top-level-form 2)

; cross-fade

; cross-fade2

; (lispworks:top-level-form 2)

; Writing "E:\\Opusmodus\\clm\\libclm\\clm_dissolve_fade.c"

; (lispworks:top-level-form 3)

; Compiling "E:\\Opusmodus\\clm\\libclm\\clm_dissolve_fade.c"

; Created shared object file "E:\\Opusmodus\\clm\\libclm\\clm_dissolve_fade.dll"

; (lispworks:top-level-form 3)

; (lispworks:top-level-form 3)

; (harlequin-common-lisp:subfunction |clm_dissolve_fade5| (fli:define-foreign-function |clm_dissolve_fade5|))

; (fli:define-foreign-function |clm_dissolve_fade5|)

; (fli:define-foreign-function |clm_dissolve_fade5|)

; (lispworks:top-level-form 3)

; dissolve-fade

; dissolve-fade4

; (lispworks:top-level-form 3)

Error: Failed to rename file E:\Opusmodus\clm\bin\t_fade.64ofasl: The process cannot access the file because it is being used by another process(32).

1 (continue) Try to rename #P"E:/Opusmodus/clm/bin/t_fade.64ofasl" to #P"E:/Opusmodus/clm/bin/fade.64ofasl" again.

2 Try compiling E:\Opusmodus\clm\instruments\fade.ins again.

3 Skip compiling E:\Opusmodus\clm\instruments\fade.ins.

4 (abort) Return to top loop level 0.

Type :b for backtrace or :c <option number> to proceed.

Type :bug-form "<subject>" for a bug report template or :? for other options.

OM 2 : 1 >

And this error message window (similar to the other i got before)

While loading file E:\Opusmodus\User Source\Extensions\Load CLM Instruments.lisp

Failed to compile C file "(E:\Opusmodus\clm\libclm\clm_cross_fade.c

E:\Opusmodus\clm\libclm\libclm-o64.lib)" with error 2.

>>>>>>>Output:

C:\Users\Desk2025\AppData\Local\Temp\lwtemp_DESKTOP-MIMK850_1514818fyrXD.bat

E:\Opusmodus\CLM\instruments>call "c:\Program Files\Microsoft Visual

Studio\18\Community\VC\Auxiliary\Build\vcvars64.bat"

**********************************************************************

** Visual Studio 2026 Developer Command Prompt v18.4.3

** Copyright (c) 2026 Microsoft Corporation

**********************************************************************

[vcvarsall.bat] Environment initialized for: 'x64'

Microsoft (R) C/C++ Optimizing Compiler Version 19.50.35728 for x64

Copyright (C) Microsoft Corporation. All rights reserved.

clm_cross_fade.c

Microsoft (R) Incremental Linker Version 14.50.35728.0

Copyright (C) Microsoft Corporation. All rights reserved.

/dll

/implib:E:\Opusmodus\clm\libclm\clm_cross_fade.lib

/out:E:\Opusmodus\clm\libclm\clm_cross_fade.dll

/export:clm_cross_fade1

E:\Opusmodus\clm\libclm\clm_cross_fade.obj

E:\Opusmodus\clm\libclm\libclm-o64.lib

LINK : error LNK2001: unresolved external symbol clm_cross_fade1

E:\Opusmodus\clm\libclm\clm_cross_fade.lib : fatal error LNK1120: 1 unresolved externals

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

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.