<?xml version="1.0"?>
<rss version="2.0"><channel><title>Announcements Latest Topics</title><link>https://opusmodus.com/forums/forum/4-announcements/</link><description>Announcements Latest Topics</description><language>en</language><item><title>Opusmodus 4.0.31979 (Update)</title><link>https://opusmodus.com/forums/topic/4156-opusmodus-4031979-update/</link><description><![CDATA[<p>NEW: Monitor for score and audio.<br><br>Score:</p><p><br><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4447" src="https://opusmodus.com/forums/uploads/monthly_2026_07/Screenshot2026-07-18at17_30_33.png.f25967bd78fb355588b9fe8fdc8fb6d0.png" alt="Screenshot 2026-07-18 at 17.30.33.png" title="" style="--i-media-width: 340px;" width="576" height="888" loading="lazy"></p><p></p><p>Audio:</p><p><br><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4448" src="https://opusmodus.com/forums/uploads/monthly_2026_07/Screenshot2026-07-18at17_31_10.png.c4a89dd8302ff95720e4c3c4a7551fbd.png" alt="Screenshot 2026-07-18 at 17.31.10.png" title="" style="--i-media-width: 340px;" width="592" height="878" loading="lazy"></p>]]></description><guid isPermaLink="false">4156</guid><pubDate>Sat, 18 Jul 2026 15:34:17 +0000</pubDate></item><item><title>Opusmodus 40.31970 (Update)</title><link>https://opusmodus.com/forums/topic/4154-opusmodus-4031970-update/</link><description><![CDATA[<p>The <strong>cmd-esc</strong> shortcut - to stop any sound - is back on macOS.</p>]]></description><guid isPermaLink="false">4154</guid><pubDate>Fri, 17 Jul 2026 22:04:13 +0000</pubDate></item><item><title>Opusmodus 4.0.31966 (Update)</title><link>https://opusmodus.com/forums/topic/4153-opusmodus-4031966-update/</link><description><![CDATA[<p>Improvement to tuplet grouping (time signature).<br>German translation - Umlauts display.</p>]]></description><guid isPermaLink="false">4153</guid><pubDate>Thu, 16 Jul 2026 09:57:50 +0000</pubDate></item><item><title>Opusmodus 4.0.31957 (Update)</title><link>https://opusmodus.com/forums/topic/4149-opusmodus-4031957-update/</link><description><![CDATA[<h5>Improved Markdown Printing and New Browser</h5><p>Opusmodus now includes improved Markdown printing on macOS and Windows. Documents resize correctly to the selected page, with better handling of prose, tables, lists, code blocks, images, page breaks, and margins. PDF filenames are also created automatically from the Markdown filename.</p><p></p><p>The Assistant now includes a dedicated Browser for displaying both local HTML files and web pages. It provides an address field, Back, Forward, Reload, and persistent History controls, all directly within the Assistant window.</p>]]></description><guid isPermaLink="false">4149</guid><pubDate>Mon, 13 Jul 2026 15:02:59 +0000</pubDate></item><item><title>Opusmodus 4.0.31920 (Update)</title><link>https://opusmodus.com/forums/topic/4147-opusmodus-4031920-update/</link><description><![CDATA[<p>Fix to markdown document display in dark mode on Mac and Windows.</p>]]></description><guid isPermaLink="false">4147</guid><pubDate>Sat, 11 Jul 2026 11:44:58 +0000</pubDate></item><item><title>Multilingual - Tools Menu</title><link>https://opusmodus.com/forums/topic/4145-multilingual-tools-menu/</link><description><![CDATA[<p>Please note that some names in the Tools menu remain in English. We have kept these terms unchanged where a direct translation may not be clear or musically appropriate.</p><p></p><p>We welcome suggestions from users and native speakers. If suitable names or better terminology are proposed, we will be happy to include them in a future update.</p>]]></description><guid isPermaLink="false">4145</guid><pubDate>Wed, 08 Jul 2026 15:26:52 +0000</pubDate></item><item><title>Opusmodus 4.031896 (Update)</title><link>https://opusmodus.com/forums/topic/4144-opusmodus-4031896-update/</link><description><![CDATA[<p>We are pleased to announce that Opusmodus now includes multilingual interface support.</p><p>With this update, Opusmodus can now be used in five languages: English, French, German, Italian, and Japanese. This marks an important step in making Opusmodus more accessible to composers, researchers, educators, and creative musicians around the world.</p><p>The new language support extends across the user interface, helping users work more naturally in their preferred language while continuing to benefit from the full power of Opusmodus for computer-assisted composition, algorithmic music, and Common Lisp-based musical exploration.</p><p>This development reflects our ongoing commitment to improving the Opusmodus environment and supporting an international community of users.</p><p></p><hr><p></p><p>Wir freuen uns, bekannt geben zu können, dass Opusmodus nun über eine mehrsprachige Benutzeroberfläche verfügt.</p><p>Mit diesem Update kann Opusmodus jetzt in fünf Sprachen verwendet werden: Englisch, Französisch, Deutsch, Italienisch und Japanisch. Dies ist ein wichtiger Schritt, um Opusmodus für Komponistinnen und Komponisten, Forschende, Lehrende und kreative Musikerinnen und Musiker auf der ganzen Welt noch zugänglicher zu machen.</p><p>Die neue Sprachunterstützung erstreckt sich über die gesamte Benutzeroberfläche und ermöglicht es den Nutzerinnen und Nutzern, natürlicher in ihrer bevorzugten Sprache zu arbeiten, während sie weiterhin die volle Leistungsfähigkeit von Opusmodus für computergestützte Komposition, algorithmische Musik und musikalische Arbeit mit Common Lisp nutzen können.</p><p>Diese Entwicklung unterstreicht unser fortlaufendes Engagement, die Opusmodus-Umgebung weiter zu verbessern und eine internationale Gemeinschaft von Nutzerinnen und Nutzern zu unterstützen.</p><p></p><hr><p></p><p>Nous avons le plaisir d’annoncer qu’Opusmodus intègre désormais la prise en charge d’une interface multilingue.</p><p>Avec cette mise à jour, Opusmodus peut maintenant être utilisé en cinq langues : anglais, français, allemand, italien et japonais. Il s’agit d’une étape importante pour rendre Opusmodus plus accessible aux compositeurs, chercheurs, enseignants et musiciens créatifs du monde entier.</p><p>La nouvelle prise en charge linguistique s’étend à l’ensemble de l’interface utilisateur, permettant aux utilisateurs de travailler plus naturellement dans la langue de leur choix, tout en continuant à bénéficier de toute la puissance d’Opusmodus pour la composition assistée par ordinateur, la musique algorithmique et l’exploration musicale fondée sur Common Lisp.</p><p>Cette évolution reflète notre engagement continu à améliorer l’environnement Opusmodus et à soutenir une communauté internationale d’utilisateurs.</p><p></p><hr><p></p><p>Siamo lieti di annunciare che Opusmodus include ora il supporto per un’interfaccia multilingue.</p><p>Con questo aggiornamento, Opusmodus può essere utilizzato in cinque lingue: inglese, francese, tedesco, italiano e giapponese. Si tratta di un passo importante per rendere Opusmodus più accessibile a compositori, ricercatori, docenti e musicisti creativi in tutto il mondo.</p><p>Il nuovo supporto linguistico si estende all’intera interfaccia utente, aiutando gli utenti a lavorare in modo più naturale nella lingua che preferiscono, continuando al tempo stesso a beneficiare di tutta la potenza di Opusmodus per la composizione assistita dal computer, la musica algoritmica e l’esplorazione musicale basata su Common Lisp.</p><p>Questo sviluppo riflette il nostro continuo impegno nel migliorare l’ambiente Opusmodus e nel sostenere una comunità internazionale di utenti.</p><p></p><hr><p></p><p>Opusmodus が多言語インターフェースに対応したことをお知らせいたします。</p><p>今回のアップデートにより、Opusmodus は英語、フランス語、ドイツ語、イタリア語、日本語の5言語でご利用いただけるようになりました。これは、世界中の作曲家、研究者、教育者、そして創造的な音楽家の皆さまにとって、Opusmodus をより利用しやすい環境にするための重要な一歩です。</p><p>新しい言語サポートはユーザーインターフェース全体にわたって適用され、ユーザーは自分の使いやすい言語でより自然に作業しながら、コンピュータ支援作曲、アルゴリズム音楽、Common Lisp に基づく音楽的探求のための Opusmodus の機能を引き続き最大限に活用できます。</p><p>この取り組みは、Opusmodus 環境を継続的に改善し、国際的なユーザーコミュニティを支援するという私たちの姿勢を反映したものです。</p><p></p><p>Best wishes,</p><p>Janusz</p><p></p>]]></description><guid isPermaLink="false">4144</guid><pubDate>Wed, 08 Jul 2026 14:27:29 +0000</pubDate></item><item><title>Opusmodus 4.0.31562 (Update)</title><link>https://opusmodus.com/forums/topic/4136-opusmodus-4031562-update/</link><description><![CDATA[<p>We are happy to announce support for all three MusicXML formats: <code>.xml</code>, <code>.musicxml</code>, and <code>.mxl</code>. Files in any of these formats can now be opened directly in the notation display.</p><p></p><p>We have also improved the rendering of older MusicXML files, including files with invalid flags and other irregularities. However, some files may be too corrupted to be handled reliably.</p><p></p><p>In addition, we have added support for displaying cluster symbols. By default, cluster symbols are shown when a chromatic chord contains more than five notes. </p><p></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4425" src="https://opusmodus.com/forums/uploads/monthly_2026_06/Screenshot2026-06-16at20_15_51.png.2165751da512350039aaf4c8d8e01ef8.png" alt="Screenshot 2026-06-16 at 20.15.51.png" title="" style="--i-media-width: 640px;" width="1486" height="912" loading="lazy"></p><p></p><p>You can change this threshold in the Settings/Preferences window.</p><p></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4426" src="https://opusmodus.com/forums/uploads/monthly_2026_06/Screenshot2026-06-16at21_16_24.png.8e3a8022101b0d77a24cc9ccf3244428.png" alt="Screenshot 2026-06-16 at 21.16.24.png" title="" style="--i-media-width: 640px;" width="1268" height="650" loading="lazy"></p><p></p><p>Please note that not all notation applications display cluster symbols. For this reason, you can disable cluster-symbol display if needed.<br><br>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">4136</guid><pubDate>Tue, 16 Jun 2026 19:29:56 +0000</pubDate></item><item><title>Opusmodus 4.0.31519 (Update)</title><link>https://opusmodus.com/forums/topic/4135-opusmodus-4031519-update/</link><description><![CDATA[<p>New:<br><br><code>append-library</code><br><br>The <code>append-library</code> function combines multiple <code>def-library</code> forms into a single library definition with multiple <code>:section</code> blocks.</p><p>This is useful when library material is generated in separate stages, but should be collected into one named library. A common pattern is to build each section with *<code>create-library</code>** and then append the resulting definitions into a single <code>def-library</code> form.</p><p>All appended sections must belong to the same library name. Section names must be unique within the combined result.<br></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(append-library
 (create-library 'binary-rhythmics '3-bit-binary 'bin
                 (combination2 3 '(1 0 0)))
 (create-library 'binary-rhythmics '4-bit-binary 'bin
                 (combination2 4 '(1 0 1 0))))

Result:

(def-library binary-rhythmics 
             (:section 3-bit-binary 
              bin0 '(0 0 0) 
              bin1 '(1 0 0) 
              bin2 '(0 1 0) 
              bin3 '(1 1 0) 
              bin4 '(0 0 1) 
              bin5 '(1 0 1) 
              bin6 '(0 1 1) 
              bin7 '(1 1 1) 
             )
             (:section 4-bit-binary 
              bin0 '(0 0 0 0) 
              bin1 '(1 0 0 0) 
              bin2 '(0 1 0 0) 
              bin3 '(1 1 0 0) 
              bin4 '(0 0 1 0) 
              bin5 '(1 0 1 0) 
              bin6 '(0 1 1 0) 
              bin7 '(1 1 1 0) 
              bin8 '(0 0 0 1) 
              bin9 '(1 0 0 1) 
              bin10 '(0 1 0 1) 
              bin11 '(1 1 0 1) 
              bin12 '(0 0 1 1) 
              bin13 '(1 0 1 1) 
              bin14 '(0 1 1 1) 
              bin15 '(1 1 1 1) 
             ))</code></pre><p></p><p>Improvement to <code>select-measure</code> function.</p><p></p><p></p>]]></description><guid isPermaLink="false">4135</guid><pubDate>Sat, 13 Jun 2026 15:44:20 +0000</pubDate></item><item><title>Opusmodus 4.0.31506 (update)</title><link>https://opusmodus.com/forums/topic/4133-opusmodus-4031506-update/</link><description><![CDATA[<h4>New:<br>bind-index</h4><p>This function was inspired by the Arrows library. The <code>bind-index</code> implementation in our system provides additional flexibility and greater control over its behavior.</p><p></p><p><code>(bind-index index-name [&amp;key start] form*)</code></p><p></p><p>The macro <code>bind-index</code> evaluates a sequence of forms and assigns each result to a consecutively numbered variable. This is useful in compositional workflows where intermediate results need to remain available, but explicit <code>setf</code> forms would make the source unnecessarily repetitive.</p><p></p><p>The generated variable names follow the pattern <code>index-name1</code>, <code>index-name2</code>, <code>index-name3</code>, and so on. Each form can refer to variables created by the preceding forms. The macro returns the value of the final generated variable.</p><p></p><p>This means that the final result can also be assigned to a separate descriptive name with <code>setf</code>, while the intermediate indexed values remain available.</p><p>The symbol <code>x</code> can be used inside any form after the first one as a shorthand for the previous generated result. Direct references to indexed variables such as <code>mat2</code> or <code>s1-4</code> continue to work as usual.</p><p></p><h5>Examples:</h5><p>Evaluates each form in sequence and stores the results in <code>i1-1</code>, <code>i1-2</code>, <code>i1-3</code>, and <code>i1-4</code>.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(bind-index 'i1-
  (library 'marangona-frames 'partials nil :random 240)
  (omn-plot
   (spectral-to-omn i1-1
                    :base-length 'e.
                    :frame-size (rnd-sample 24 '(1 1 2 3 4 5))
                    :min-frame-size 3
                    :prob 0.0
                    :min-amp 0.005
                    :min-freq 10.0
                    :max-freq 2000.0
                    :legato t))
  (omn-to-time-signature i1-2 '(4 4))
  (quantize i1-3 '(1 2 4)))</code></pre><p></p><p>After evaluation, the intermediate results remain available as named variables.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>i1-1
i1-2
i1-3
i1-4</code></pre><p></p><p>Uses <code>x</code> as a shorthand for the previous generated result.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(bind-index 'mat
  (gen-noise 8 :seed 42)
  (vector-smooth 0.3 x)
  (vector-to-pitch '(c3 c5) x)
  (pitch-transpose 12 x)
  (tonality-map '(major :map 'octave) x)
  (make-omn :pitch x
            :length '(h)
            :span :pitch))</code></pre><p></p><p>Combines <code>x</code> with direct indexed references to earlier results.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(bind-index 'mat
  (gen-noise 12 :seed 17)
  (vector-smooth 0.25 x)
  (vector-to-pitch '(c3 c5) x)
  (pitch-transpose 12 mat3)
  (tonality-map '(major :map 'octave) x)
  (make-omn :pitch x
            :length '(q)
            :span :pitch))</code></pre><p></p><p>Assigns the final result to a descriptive variable while preserving the intermediate indexed variables.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(setf sec1
      (bind-index 's1-
        (init-seed 3553)
        (library 'marangona-frames 'partials nil :random 240)
        (rnd-sample 24 '(1 1 2 3 4 5))
        (spectral-to-omn s1-2
                         :base-length 'e.
                         :frame-size x
                         :min-frame-size 3
                         :prob 0.0
                         :min-amp 0.005
                         :min-freq 10.0
                         :max-freq 2000.0
                         :legato t)
        (omn-to-time-signature x '(4 4))
        (quantize x '(1 2 4))))</code></pre><p></p><p>In this example, <code>sec1</code> receives the final value, while <code>s1-1</code>, <code>s1-2</code>, <code>s1-3</code>, <code>s1-4</code>, <code>s1-5</code>, and <code>s1-6</code> remain available for inspection or reuse.</p><p>Starts the numbering from <code>3</code> instead of <code>1</code>.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(bind-index 'mat- :start 3
  '(c4 e4 g4)
  (pitch-transpose 12 x)
  (sort-asc x))</code></pre><p></p><p>Equivalent expansion pattern:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(progn
  (setf mat-3 '(c4 e4 g4))
  (setf mat-4 (pitch-transpose 12 mat-3))
  (setf mat-5 (sort-asc mat-4))
  mat-5)</code></pre><p></p><p>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">4133</guid><pubDate>Wed, 10 Jun 2026 19:42:04 +0000</pubDate></item><item><title>Opusmodus 4.0.31499 (Update)</title><link>https://opusmodus.com/forums/topic/4132-opusmodus-4031499-update/</link><description><![CDATA[<h5><strong>Important note for macOS users</strong></h5><p>We have updated Opusmodus for macOS to LispWorks 8.1.2.</p><p></p><p>If you use CLM instruments, please delete the contents of the following directories before launching the new version of Opusmodus:<br></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>
~/Opusmodus/CLM/bin</code></pre><p>and</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>
~/Opusmodus/CLM/libclm</code></pre><p></p><p>Once the contents of these directories have been removed, start the Opusmodus application. The CLM instruments will then be recompiled automatically using the new LispWorks version.</p><p></p><p>Best wishes,</p><p>Janusz</p><p></p><p>P.S. Windows users do not need to take any action.</p>]]></description><guid isPermaLink="false">4132</guid><pubDate>Tue, 09 Jun 2026 12:07:02 +0000</pubDate></item><item><title>Opusmodus 4.0.31432 Update</title><link>https://opusmodus.com/forums/topic/4119-opusmodus-4031432-update/</link><description><![CDATA[<h3>New Opusmodus Documentation Format</h3><p>The Opusmodus documentation is now being delivered in a new Markdown-based interactive format. The updated system introduces a more consistent directory structure, improved cross-linking between related documents, cleaner function pages, and better-organized overview documents. This makes the documentation easier to navigate, easier to maintain, and more effective as a reference environment for functions, examples, and category-based exploration.</p><p></p><h5>Example:<br><br><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4414" src="https://opusmodus.com/forums/uploads/monthly_2026_05/OMMD1.png.608a873b0ac2732d381e99b1b81713ca.png" alt="OMMD1.png" title="OMMD1.png" style="--i-media-width: 960px;" width="2010" height="2360" loading="lazy"><br><br></h5><p>New Opusmodus Analysis Tools open a new way of exploring music from inside the composition environment itself. Instead of treating analysis as a separate stage, Opusmodus brings rhythmic, melodic, harmonic, cadential, textural, and statistical insight directly into the score workflow. With functions such as monophonic-analysis, complex musical material can be transformed into a clear, readable report that reveals patterns, tendencies, and structural relationships across the piece.</p><p></p><h5>Example:</h5><p></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4415" src="https://opusmodus.com/forums/uploads/monthly_2026_05/analysis1.webp.36936031cbbdb38e75c9745ca0dc37d7.webp" alt="analysis1.webp" title="" style="--i-media-width: 960px;" width="2074" height="1840" loading="lazy"></p><p></p><h3>Best wishes,<br>Janusz</h3>]]></description><guid isPermaLink="false">4119</guid><pubDate>Wed, 27 May 2026 11:51:27 +0000</pubDate></item><item><title>Opusmodus 4.0.31105 Update</title><link>https://opusmodus.com/forums/topic/4104-opusmodus-4031105-update/</link><description><![CDATA[<p><strong>Update: Wave Functions, Monophonic Analysis, and Harmonics</strong><br><br>The wave-function system has been substantially revised and extended.</p><p>Wave generators now support a clearer and more complete modulation model:<br></p><ul><li><p><code>:fm</code> for frequency modulation</p></li><li><p><code>:am</code> for amplitude modulation</p></li><li><p><code>:phase-scaling</code> for per-sample phase scaling<br>This replaces the earlier <code>:modulation</code> keyword.</p></li><li><p><code>:phase-distortion </code>for phase remapping within the waveform cycle<br></p></li></ul><p>These controls are now available consistently across the main wave families, including the generator, additive, modulatory, and half-wave functions. The Pulse family has also been completed and brought into line with the rest of the system.<br></p><p></p><p>The Monophonic Analysis system has now been completed as a full function family, with consistent documentation in the new Markdown format. The analysis set is organised as a unified analytical environment, allowing rhythmic, melodic, harmonic, cadential, formal, textural, density, expressive, and related perspectives to be read together within a single report structure.<br><br>To test the analysis functions, download the file below and place it in the <code>~/Opusmodus/Media/Musicxml</code> folder. This will allow you to evaluate the examples in the documentation directly.<br><br><a class="ipsAttachLink" data-fileid="4405" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4405&amp;key=b01ba2446b48954871c1d32fbb4be130" data-fileext="xml" rel="">Webern-Op.5.xml</a><br></p><p></p><p>The <code>harmonics</code> function has also been enhanced. Its <code>coefficient</code> behaviour now follows the correct spectral model, rather than simple post-scaling, and the function now supports additional control over <code>partial</code> selection, including patterned <code>partial-nth</code> input and the new <code>:size</code> option for result-length handling.<br><br>Best wishes,<br>Janusz</p>]]></description><guid isPermaLink="false">4104</guid><pubDate>Sun, 19 Apr 2026 11:40:58 +0000</pubDate></item><item><title>Opusmodus 4.0.31058 Update</title><link>https://opusmodus.com/forums/topic/4093-opusmodus-4031058-update/</link><description><![CDATA[<p><strong>What’s New in Opusmodus</strong></p><p>The latest Opusmodus update brings a set of practical additions and workflow improvements across composition, analysis, synthesis, and navigation.</p><p></p><p><strong>MIDI Player: Dynamic Display Modes</strong><br>The MIDI Player now includes new velocity-based display modes. In addition to the original instrument-colour view, you can now display MIDI data using velocity colour mapping. Available modes include None, Mono, Plasma, Viridis, Magma, and Blue Ice. This makes it easier to read dynamics directly in the piano-roll display and compare expressive detail across passages.</p><p></p><p></p><p style="text-align:center;"><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4393" src="https://opusmodus.com/forums/uploads/monthly_2026_04/midi-display-plasma.png.ceba74efc298379f274e36918d2f3ade.png" alt="midi-display-plasma.png" title="midi-display-plasma.png" style="--i-media-width: 840px;" width="1596" height="1086" loading="lazy"></p><p style="text-align:center;"></p><p></p><p><strong>New CLM Generators</strong><br>A new collection of CLM generators has been added, expanding the available synthesis and sound-design tools in Opusmodus. These additions provide more options for building instruments, exploring timbre, and integrating CLM more deeply into compositional workflows.<br><br>Download the <strong>CLM 4.0.3158</strong> package here and replace the current CLM folder in your Opusmodus installation with the updated version. Then copy Load CLM Instruments.lisp to the Extensions folder.</p><p></p><div class="ipsEmbeddedOther" data-og-user_text="https://opusmodus.com/forums/files/file/18-clm-4031058/"><iframe src="https://opusmodus.com/forums/files/file/18-clm-4031058/?do=embed" data-embedcontent="" data-internalembed="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="1" data-ipsembed-contentapp="downloads" data-ipsembed-contentclass="downloads_File" data-ipsembed-contentid="18" data-ipsembed-timestamp="1775755188" allowfullscreen="" data-og-user_text="https://opusmodus.com/forums/files/file/18-clm-4031058/" loading="lazy"></iframe></div><p></p><p><strong>Spectral Plot</strong><br>A new spectral-plot function has been added to the Graph Tools. It allows direct plotting of spectral analysis data across frames and partials, making it possible to inspect frequency, pitch, or amplitude distributions visually. Colour mapping support using palettes such as Mono, Plasma, Viridis, Magma, and Blue Ice helps reveal spectral structure more clearly.</p><p></p><p style="text-align:center;"><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4392" src="https://opusmodus.com/forums/uploads/monthly_2026_04/spectral-plot.png.5c6a4d5bd5b9e2f38f5615a10aba9352.png" alt="spectral-plot.png" title="spectral-plot.png" style="--i-media-width: 960px;" width="2034" height="2548" loading="lazy"></p><p></p><p style="text-align:left;"><strong>Spectral Quantize</strong><br>The spectral-quantize workflow has been refined and documented more clearly. It provides a practical way to transform spectral frame data into quantized notation-oriented material, with improved control over normalization and consecutive pitch handling.<br></p><p style="text-align:center;"><br><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4394" src="https://opusmodus.com/forums/uploads/monthly_2026_04/spectral-quantize.png.6afffa0cd4fb9085009d6b91c3b24bed.png" alt="spectral-quantize.png" title="spectral-quantize.png" style="--i-media-width: 960px;" width="2054" height="1632" loading="lazy"></p><p></p><p><strong>Navigator Improvements</strong><br>The Workspace Navigator has been improved so that moving between sections such as Finder, Scores, Documents, Media, and Libraries behaves more consistently. In particular, returning to a section now preserves its position more reliably, making navigation smoother in larger projects.<br><br><strong>Note: after updating the application, please close the Workspace and Assistant windows once. When reopened, both will behave normally again.</strong><br><br>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">4093</guid><pubDate>Thu, 09 Apr 2026 16:25:47 +0000</pubDate></item><item><title>Opusmodus 4.0.30980 Update</title><link>https://opusmodus.com/forums/topic/4085-opusmodus-4030980-update/</link><description><![CDATA[<p>Small change to CLM instrument loading.</p><p>After installing version 4.0.30980, follow the instructions below:<br><br><strong>Installation</strong></p><p>To use the new CLM implementation:</p><p>1. Delete the old <code>CLM</code> directory from your <code>~/Opusmodus</code> folder.</p><p>2. Replace it with the new <code>CLM</code> directory supplied with this update.</p><p>3. Open <code>~/Opusmodus/User Source/Extensions</code>.</p><p>4. Replace <code>Load CLM Instruments.lisp</code> with the updated version.</p><p>5. In <code>Load CLM Instruments.lisp</code>, you can then uncomment the loading expression from within the Opusmodus application in the Navigator pane (L).</p><p>6. Start the Opusmodus application.<br><br>This new installation simplifies the load of the CLM instruments.<br><br><a class="ipsAttachLink" data-fileid="4381" data-fileext="zip" data-extension="zip" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4381&amp;key=a48f5d3bc956fffb3f5ea232cabe72a6" rel="">CLM.zip</a><br><br><a class="ipsAttachLink" data-fileid="4380" data-fileext="lisp" data-extension="lisp" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4380&amp;key=4d972bfaa46670d6304a70e0a46ebad4" rel="">Load CLM Instruments.lisp</a></p>]]></description><guid isPermaLink="false">4085</guid><pubDate>Sun, 29 Mar 2026 12:28:04 +0000</pubDate></item><item><title>Opusmodus 4.0.30748 (Update)</title><link>https://opusmodus.com/forums/topic/4056-opusmodus-4030748-update/</link><description><![CDATA[<p>Improvements to the display of tuplet notation (e.g., 6-, 10-, 14-tuplets).</p><p><br></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4348" src="https://opusmodus.com/forums/uploads/monthly_2026_02/Screenshot2026-02-15at13_03_11.png.cda36394fdf5fe49a30a43a56958b52e.png" alt="Screenshot 2026-02-15 at 13.03.11.png" title="Screenshot 2026-02-15 at 13.03.11.png" style="--i-media-width: 960px;" width="1552" height="810" loading="lazy"></p><p></p><p></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4349" src="https://opusmodus.com/forums/uploads/monthly_2026_02/Screenshot2026-02-15at13_03_54.png.58de0c5810a288635a23857fdf8ad0aa.png" alt="Screenshot 2026-02-15 at 13.03.54.png" title="Screenshot 2026-02-15 at 13.03.54.png" style="--i-media-width: 960px;" width="1564" height="352" loading="lazy"></p><p></p><p>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">4056</guid><pubDate>Sun, 15 Feb 2026 12:10:12 +0000</pubDate></item><item><title>Opusmodus 4.0.30671 (Update)</title><link>https://opusmodus.com/forums/topic/4033-opusmodus-4030671-update/</link><description><![CDATA[<p>Additional Ncode functionality (Ncode Manual):<br><br><strong>2.2.4 SETF mode, templates, and pages</strong></p><p style="text-align:justify;">NCODE provides a template-driven mode for constructing structured values via SETF pages. This mode is used when the Function field is SETF and a template is selected. Rather than entering a single expression, the user fills a set of pages; NCODE then reconstructs a quoted value and evaluates a (setf …) form.</p><p style="text-align:justify;"></p><p style="text-align:justify;"></p><p style="text-align:center;"><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4301" src="https://opusmodus.com/forums/uploads/monthly_2026_01/ncode-setf.png.1e74e830a6d95cbcdba0cac8b7921fdf.png" alt="ncode-setf.png" title="ncode-setf.png" style="--i-media-width: 960px;" width="1694" height="574" loading="lazy"></p><p style="text-align:center;"></p><p style="text-align:center;"><em>Figure 3 SETF mode, templates and pages.</em></p><p style="text-align:justify;"></p><p style="text-align:justify;">SETF pages provide a UI method for building complex, repeatable list structures (collections of labelled items) without manual list syntax. This is particularly useful when the value is naturally expressed as multiple items that must be ordered.</p><p style="text-align:justify;"></p><p style="text-align:justify;"><strong>Templates</strong></p><p style="text-align:justify;">A template defines:</p><ul><li><p>the number and organisation of pages, and</p></li><li><p>the fields available on each page (key–value pairs).</p></li></ul><p style="text-align:justify;"></p><p style="text-align:justify;">Selecting a different template changes the page layout and the meaning of the fields. The selected template and page contents are saved in the .omnc session and restored when reopened.</p><p style="text-align:justify;"></p><p style="text-align:justify;">Each page corresponds to one logical item in the resulting value.</p><ul><li><p><strong>Next</strong> page creates a new item.</p></li><li><p><strong>Remove</strong> page removes an item.</p></li></ul><p style="text-align:justify;">Empty pages are ignored when the final value is constructed.</p><p style="text-align:justify;"></p><p style="text-align:justify;"><strong>Field values</strong></p><ul><li><p>Fields accept numbers, strings, keywords, lists, and symbols.</p></li><li><p>Symbols entered without a leading quote may be treated as variable references (for example, previously stored history variables).</p></li><li><p>When a literal symbol is required, enter it as a quoted symbol.</p></li></ul><p style="text-align:justify;"></p><p style="text-align:justify;"><strong>Constructed value</strong></p><p style="text-align:justify;">When evaluated, NCODE converts the populated pages into a single quoted form:</p><ul><li><p>if one page is populated, the value becomes a quoted single item;</p></li><li><p>if multiple pages are populated, the value becomes a quoted list of items.</p></li></ul><p style="text-align:justify;">NCODE then evaluates the corresponding (setf …) form, storing the result in the history like any other entry.</p><p style="text-align:justify;"></p><p style="text-align:justify;"><strong>Reproducibility</strong></p><p style="text-align:justify;">SETF pages are stored as structured page data in the session. When reloading a session or using Refresh All, NCODE reconstructs the same quoted value from the saved pages and re-establishes consistent bindings.</p><p style="text-align:justify;"></p><p style="text-align:justify;"><a rel="" href="https://opusmodus.com/forums/ncode/">https://opusmodus.com/forums/ncode/</a><br></p><hr><p style="text-align:justify;"><br>NCODE is still in beta, but with every update, it is becoming a more stable tool.<br><br>Best wishes,<br>Janusz</p><p style="text-align:justify;"><br>---<br>Here are few files to play with.<br>Add this file into Media/MusicXML folder:<br><br><a class="ipsAttachLink" data-fileid="4303" data-fileext="xml" data-extension="xml" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4303&amp;key=82620e4887f5ada72399c966929ab92d" rel="">Webern-Op.5.xml</a><br><br>Add this files into the Media/Ncode folder:<br><br><a class="ipsAttachLink" data-fileid="4304" data-fileext="omnc" data-extension="omnc" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4304&amp;key=f4bf83018f542f1261f76dd44a839a28" rel="">Maderna.omnc</a> <a class="ipsAttachLink" data-fileid="4306" data-fileext="omnc" data-extension="omnc" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4306&amp;key=70858627410ff374225048f0d59a4f44" rel="">Tonnetz3.omnc</a> <a class="ipsAttachLink" data-fileid="4307" data-fileext="omnc" data-extension="omnc" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4307&amp;key=67b95b8362c14f624dac63f7189685f5" rel="">Ulam-Perc.omnc</a> <a class="ipsAttachLink" data-fileid="4308" data-fileext="omnc" data-extension="omnc" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4308&amp;key=49e9a982c436b5a25fbf9ce1c7bc9a60" rel="">Voice-Variant.omnc</a> <a class="ipsAttachLink" data-fileid="4305" data-fileext="omnc" data-extension="omnc" href="https://opusmodus.com/forums/applications/core/interface/file/attachment.php?id=4305&amp;key=aec125a137f83e32ea652fd522eafe37" rel="">MusicXML.omnc</a></p>]]></description><guid isPermaLink="false">4033</guid><pubDate>Sat, 10 Jan 2026 17:59:41 +0000</pubDate></item><item><title>Opusmodus 4.0.30631 (Update)</title><link>https://opusmodus.com/forums/topic/4017-opusmodus-4030631-update/</link><description><![CDATA[<p>I am happy to announce a new tool called <strong>NCODE – Interactive Function Exploration and Score Assembly for Opusmodus (NCODE)</strong>.<br>It is designed for users who want to explore algorithmic composition workflows in Opusmodus without writing Lisp code directly.<br>The release of NCODE is just the beginning of developing many Build add-ons that will help users create complex music without direct coding.<br></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4270" src="https://opusmodus.com/forums/uploads/monthly_2025_12/ncode-var-fun.png.e4532be550137df9983bc6f0175d72ef.png" alt="ncode-var-fun.png" title="ncode-var-fun.png" style="--i-media-width: 800px;" width="1854" height="1622" loading="lazy"></p><p>More information about NCODE you find here:<br><a rel="" href="https://opusmodus.com/forums/ncode/">https://opusmodus.com/forums/ncode/</a><br><br>Best wishes, and happy holidays and New Year,<br>Janusz</p>]]></description><guid isPermaLink="false">4017</guid><pubDate>Tue, 23 Dec 2025 15:12:23 +0000</pubDate></item><item><title>Opusmodus 4.0.30465 (Update)</title><link>https://opusmodus.com/forums/topic/3999-opusmodus-4030465-update/</link><description><![CDATA[<h4>New:</h4><p>Spectral Analysis and Audio tools are now fully implemented on Windows.</p><p>MIDI Clock and MIDI Time Code are available for both Mac and Windows.<br><br><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4249" src="https://opusmodus.com/forums/uploads/monthly_2025_11/MCMTC.png.61022784d6189c8a9f534d108c097900.png" alt="MC:MTC.png" title="MC:MTC.png" style="--i-media-width: 640px;" width="1126" height="856" loading="lazy"><br>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">3999</guid><pubDate>Mon, 17 Nov 2025 15:55:16 +0000</pubDate></item><item><title>Opusmodus 4.0.30320 (Update)</title><link>https://opusmodus.com/forums/topic/3983-opusmodus-4030320-update/</link><description><![CDATA[<p>The new Spectral Analysis Tool and Audio Engine functions are currently available only on macOS. The Windows version will be available shortly.<br><br></p><h2 style="text-align:center;"><strong>Spectral Analysis Tool<br></strong><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4212" src="https://opusmodus.com/forums/uploads/monthly_2025_10/spertral-analysis-tool.png.ea44353991e4b4b37bd5e7ec873ea1e7.png" alt="spertral-analysis-tool.png" title="spertral-analysis-tool.png" style="--i-media-width: 720px;" width="1472" height="1226" loading="lazy"></h2><h4 style="text-align:left;"><strong>Overview</strong></h4><p>The <strong>Spectral Analysis</strong> window provides a <strong>real-time visualisation</strong> and control interface for frequency-domain <strong>analysis of audio signals</strong>. It combines Fast Fourier Transform (FFT) processing with a configurable analysis environment, supporting in-depth inspection of frequency components over time. The display includes magnitude spectra and peak detection, facilitating detailed timbral and <strong>structural audio analysis</strong>.</p><p></p><p>In addition to its analytical capabilities, the environment supports direct integration with compositional workflows. The <strong>Export Partials</strong> function enables the extraction and preservation of <strong>spectral data</strong> in a format compatible with the Opusmodus <strong>library</strong> system. This allows composers to employ spectral data as a generative resource, thereby placing the techniques of <strong>spectral composition</strong>, including orchestration, transformation, and algorithmic modelling, immediately at their disposal.</p><p></p><h5><strong>Spectrum View (Graph Area)</strong></h5><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>X-axis:			(Frequency, logarithmic scale): Ranges from ~8.17 Hz to 20 kHz					(depending on user input).
Y-axis:			(Normalised Amplitude): Ranges from 0.0 to 1.0.
Bars:			Represent the magnitude spectrum at the current frame.
Curve Line:		Shows averaged or smoothed spectral envelope.
Peak:			Display detected frequency peaks (e.g., 21, 69, 144 etc. in Hz).</code></pre><p></p><h5><strong>Top Information Bar</strong></h5><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>Fps:			Frames per second of visual refresh.
RMS:			Root Mean Square amplitude of current frame.
Bars:			Number of spectral bins displayed.
Pos:			Current time/frame position and total duration.
Cen:			Spectral centroid (in Hz).
Roll:			Spectral roll-off frequency (in Hz).
Spr:			Spectral spread (standard deviation from centroid, in Hz).
Flat:			Spectral flatness (0.0 = harmonic; 1.0 = noise-like).</code></pre><p></p><h5><strong>Control Buttons and Options</strong></h5><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>Play			Initiates playback and real-time analysis.
Rewind			Resets position to start of audio buffer.
Scale: Log		Selects frequency scale (e.g., Logarithmic or Linear).
Show Octaves	Displays octave grid overlays.
Analyser		Opens or configures the main Analyser module.</code></pre><p></p><h5><strong>Analysis Parameters</strong></h5><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>FFT size		Number of points in FFT computation; affects
                frequency resolution, default: 16384.
Window size		Size of analysis window (samples); affects time resolution,
				default: 2048.
Hop size		Overlap between windows (samples), default: 1024.
Frame interval	Time interval (seconds) between frames, default: 0.01.
Min peak diff	Minimum difference between adjacent peaks for detection,
				default: 0.01.
Min amp (dB)	Minimum amplitude threshold for rendering spectrum,
				default: -90.
Under-peak (dB)	Threshold below peak for considering partials, default: -60.
Min freq (Hz)	Lower bound of frequency range displayed, default: 8.1758.
Max freq (Hz)	Upper bound of frequency range displayed, default: 12543.855.
Window			Type of windowing function used for FFT (e.g., Hanning,
				Hamming, Blackman). Can be selected live to immediately
                observe its effect on the spectral analysis, default: :hanning.</code></pre><p></p><h5><strong>Inactive Buttons (Context-Sensitive)</strong></h5><p><strong>Export Partials  (Disabled):</strong></p><p>Enables the export of <strong>spectral partials</strong> once sufficient analysis data is available. Upon activation, this function saves the extracted partials in a file conforming to the Opusmodus <strong>library format</strong>. The file is stored in the designated library location and indexed automatically for future retrieval, reuse in composition, or further spectral processing.</p><p></p><p><strong>Resanple Rect (Disabled):</strong><br>Once active, performs rectangular resampling of the analysed audio. The resampled signal is saved as an audio file in the <strong>Media/Audio</strong> directory. The newly generated file is indexed automatically, allowing direct access through the Opusmodus Spectral Analysis or for subsequent processing.<br></p><h5><strong>Interactive Controls and Selection Tools</strong></h5><p><strong>Timeline Selection (Shift + Click &amp; Drag)</strong></p><p>Holding the Shift key while clicking and dragging horizontally across the graph area allows the user to define a temporal selection on the timeline. This operation sets the active region for analysis playback and data export.</p><ul><li><p>The horizontal extent corresponds to the time range (start - end) under analysis.</p></li><li><p>This selected interval can be used to constrain playback or to focus data extraction (e.g., exporting partials within the selected window).</p></li></ul><p></p><h5><strong>Rectangular Selection (Option + Click &amp; Drag)</strong></h5><p>Holding the Option (Alt) key while dragging the mouse enables a rectangular selection within the spectral display. This selection defines both frequency and time bounds.</p><ul><li><p>The vertical axis of the selection restricts frequency range.</p></li><li><p>The horizontal axis restricts time range.</p></li><li><p>This selection becomes active for specific functions such as resampling or focused spectral export.</p></li></ul><p></p><p>Once defined, the rectangular region is visually highlighted and is used as a contextual domain for subsequent operations.</p><p></p><h5><strong>Graphical Labels</strong></h5><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>Peak Frequency:	Numeric labels (e.g., 21, 69, 144) appear above detected spectral
				peaks, denoting the frequency (in Hz) of dominant components.
Cursor Markers:	While hovering or selecting, real-time frequency and amplitude
				information may be displayed depending on implementation.
Time Cursor:	A vertical line or pointer indicates the current playback or analysis
				frame.</code></pre><p></p><h5><strong>Keyboard Shortcuts</strong></h5><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>Spacebar		Play/Pause the analysis. Starts or halts real-time playback.
Return			Rewind to the beginning of the signal buffer.</code></pre><p></p><p></p><h2 style="text-align:center;">Audio Engine</h2><p></p><p><strong><span data-ips-font-size="150"><span style="font-family: Courier, monospace;">audio-play-file</span></span></strong><span style="font-family: Courier, monospace;"> </span><em>audio-file </em>&amp;key<em> start end pos len amp fade-in fade-out</em></p><p></p><p><strong>Arguments and Values:</strong></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>audio-file		Pathname designator (string or pathname).
start			(optional) real ≥ 0. Start time in seconds.
end				(optional) real ≥ 0. End time in seconds (strictly ≥ start).
pos				(optional) real ≥ 0. Start time in seconds.
len				(optional) real ≥ 0. Duration in seconds.
amp				(optional) real in [0.0, 1.0]. Playback gain. Default: 1.0.
fade-in			(optional) real ≥ 0. Fade-in time in seconds. Default: 0.0.
fade-out		(optional) real ≥ 0. Fade-out time in seconds. Default: 0.0.</code></pre><p></p><p><strong>Description:</strong></p><p></p><p>Plays a region of an audio file with optional gain and linear fades. The time window is specified by either (<span style="font-family: Courier, monospace;">:pos p :len l</span>) or (<span style="font-family: Courier, monospace;">:start s :end e</span>); mixed forms (<span style="font-family: Courier, monospace;">:pos</span> with <span style="font-family: Courier, monospace;">:end</span>, or <span style="font-family: Courier, monospace;">:start </span>with <span style="font-family: Courier, monospace;">:len</span>) are accepted. If the argument has no directory component, the function searches the project’s <span style="font-family: Courier, monospace;">media/audio</span> directory for a file of that name. This enables shorthand calls such as: <span style="font-family: Courier, monospace;">"marangona"</span> which looks for <span style="font-family: Courier, monospace;">media/audio/marangona </span>and plays it if found. If the file cannot be located there (and no absolute/relative path was given), an error is signalled.</p><p></p><p><strong>Example:</strong></p><p></p><p>Play the whole file:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-play-file "marangona")</code></pre><p></p><p>Play from <span style="font-family: Courier, monospace;">2.3</span> s for <span style="font-family: Courier, monospace;">2.0</span> s:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-play-file "marangona" :start 2.3 :end 4.3)</code></pre><p></p><p>Play from <span style="font-family: Courier, monospace;">2.3</span> s for <span style="font-family: Courier, monospace;">2.0</span> s, with a short <span style="font-family: Courier, monospace;">fade-in</span> and <span style="font-family: Courier, monospace;">fade-out</span>:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-play-file "marangona" :pos 2.3 :len 2.0 :fade-in 0.5 :fade-out 0.5)</code></pre><p></p><hr><p></p><p><strong><span data-ips-font-size="150"><span style="font-family: Courier, monospace;">audio-mix</span></span></strong><span style="font-family: Courier, monospace;"> </span>&amp;rest<em> tracks</em></p><p></p><p><strong>Arguments and Values:</strong></p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>tracks			Track plists. Two track kinds are recognised:</code></pre><p></p><p><strong>Audio track:</strong></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>:start			Real ≥ 0. Track offset in seconds.
:segments     	List of audio segments (SEGMENT objects or plists).</code></pre><p></p><p><strong>Per-segment keys:</strong></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>:pos/:len
 or
:start/:end		Required; window in seconds (mixed forms allowed).
:amp			(optional) real in [0, 1]. Segment-level gain (applied after track gain).
:fade-in		(optional) real ≥ 0. Fade-in time in seconds.
:fade-out		(optional) real ≥ 0. Fade-out time in seconds.
:silence		(optional) real ≥ 0. Seconds of silence inserted before the next segment.
:audio			String (single file) or list of files. If a list, files are used cyclically across segments.</code></pre><p></p><p>(Note: <span style="font-family: Courier, monospace;">:audio</span> within a segment plist is ignored by the mixer; use the track’s <span style="font-family: Courier, monospace;">:audio</span> list to vary files across segments.)</p><p></p><p><strong>Score track:</strong></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>:start			Real ≥ 0. Track offset in seconds.
:segments		List of score segments (plists).</code></pre><p></p><p><strong>Per-segment keys:</strong></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>:pos/:len
or
:start/:end		bars (integers; :len counts bars inclusively).
:tempo and :ts 	(optional) to compute wall-time when :at is omitted.
:silence		(optional) seconds, or a musical value together with :bpm.
:at 			(optional) seconds; schedules the segment at an absolute wall-time (disables cursor advance).
:score			Score designator (symbol, quoted symbol, or score object).
:ignore-ports	(optional) port filter passed to the sequencer.</code></pre><p></p><p><strong>Description:</strong></p><p></p><p>Starts an audio/MIDI scene immediately. For each track, segments are scheduled on a serial cursor beginning at :start; the cursor advances by each segment’s duration plus any :silence (score segments may instead use absolute :at). Audio segments are rendered through a multichannel mixer; score segments are compiled as required and launched on the same wall-time base.</p><p></p><p><strong>Example:</strong></p><p></p><p>Score track with notated silence:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-mix
'(:start 0.0
   :segments ((:start 1 :len 1)
              (:silence 3/4 :bpm 72)
              (:start 2 :len 1))
   :score (voice-variant1)))</code></pre><p></p><p>Score track with per-segment tempo and metre:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-mix
'(:start 0.0
   :segments ((:start 1 :end 1 :tempo 86 :ts 1/4)
              (:start 5 :end 5 :tempo 72 :ts 2/4))
   :score (voice-variant1 La-Marangona)))</code></pre><p></p><p>Score segments pinned to absolute seconds:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-mix
'(:start 0.0
   :segments ((:pos 1 :len 2 :tempo 90 :ts 4/4 :at 1.0)
              (:pos 5 :len 4 :tempo 90 :ts 4/4 :at 2.0)
              (:pos 9 :len 1 :tempo 120 :ts 3/4 :at 3.2))
   :score (La-Marangona voice-variant1)))</code></pre><p></p><p>Mixed score + audio tracks:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-mix
'(:start 1.0
   :segments ((:pos 3 :len 4) (:pos 2 :len 4))
   :score (La-Marangona voice-variant1))

'(:start 1.0
   :segments ((:start 0.0 :end 4.0 :amp 0.3
               :fade-in 1.0 :fade-out 1.0 :silence 1.0)
              (:start 0.0 :end 3.0 :amp 0.7 :fade-in 1.0 :fade-out 2.5))
   :audio ("dada" "marangona"))
)</code></pre><p></p><p><strong><span style="font-family: Courier, monospace;">AUDIO-MIX</span></strong> constructs graphs and opens resources at call time. With many tracks/segments this can introduce start-up jitter and inter-track skew. For timing-critical playback, compile first (<span style="font-family: Courier, monospace;">audio-compile-scene 'cue …) </span>and then play with</p><p>(audio-play-scene 'cue).</p><p></p><hr><p></p><p><strong><span data-ips-font-size="150"><span style="font-family: Courier, monospace;">audio-compile-scene</span></span></strong> <em><span style="font-family: Courier, monospace;">name </span></em><span style="font-family: Courier, monospace;">&amp;rest</span><em><span style="font-family: Courier, monospace;"> tracks</span></em></p><p></p><p><strong>Arguments and Values:</strong></p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>name			Symbol naming the prepared scene.
tracks			Same track plists as accepted by audio-mix.</code></pre><p></p><p><strong>Description:</strong></p><p></p><p>Prepares a <em>scene</em> for later playback. Audio tracks are stored as normalised arguments; MIDI tracks are preprocessed into runnable jobs (scores are validated/compiled). The prepared <em>scene</em> is placed in an internal registry under <span style="font-family: Courier, monospace;">name</span>. <strong><span style="font-family: Courier, monospace;">AUDIO-COMPILE-SCENE</span></strong> is designed for timing-critical playback. It prepares all audio/MIDI resources ahead of time so that <strong><span style="font-family: Courier, monospace;">AUDIO-PLAY-SCENE</span></strong> can start deterministically with minimal start-up latency.</p><p></p><p><strong>Example:</strong></p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-compile-scene
'demo
'(:audio "vox.wav" :segments ((:pos 0 :len 2.0) (:pos 3 :len 1.0)))
'(:score 'my-score :segments ((:pos 1 :len 8))))</code></pre><p></p><p>Play the <em>scene</em>:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-play-scene 'demo)</code></pre><p></p><p>Deterministic start with minimal launch latency:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-compile-scene
'cue-A
'(:audio "drums1.wav" :segments ((:pos 0 :len 8) (:pos 8 :len 8)))
'(:audio "bass3.wav" :segments ((:pos 0 :len 16)))
'(:score 'click :segments ((:pos 1 :len 16))))

(audio-play-scene 'cue-A)</code></pre><p></p><hr><p></p><p><strong><span data-ips-font-size="150"><span style="font-family: Courier, monospace;">audio-play-scene</span></span></strong> <em><span style="font-family: Courier, monospace;">name</span></em></p><p></p><p><strong>Arguments and Values:</strong></p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>name			A previously compiled scene name (symbol or string).</code></pre><p></p><p><strong>Description:</strong></p><p></p><p>Executes a scene prepared by <strong><span style="font-family: Courier, monospace;">AUDIO-COMPILE-SCENE</span></strong>. Playback starts deterministically, using the precomputed timelines, fades, and resource allocations for minimal launch latency and reliable synchronisation.</p><p></p><p><strong>Example:</strong></p><p></p><p><strong>Minimal compile then play (single audio track):</strong></p><p></p><p>Compiles a simple scene with one audio track containing two segments, then launches it. Precompilation removes set-up latency (file opening, mixer graph initialisation) from the start call.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-compile-scene
'mixA
'(:audio "dada"
   :segments ((:pos 0.3 :len 2.0)
              (:pos 1.3 :len 2.0))))

(audio-play-scene 'mixA)</code></pre><p></p><p>Three audio tracks with randomised segments; deterministic launch:</p><p></p><p>Builds three segment lists with <strong><span style="font-family: Courier, monospace;">AUDIO-MAKE-SEGMENTS</span></strong> (six segments each, drawn with <strong><span style="font-family: Courier, monospace;">RND-SAMPLE</span></strong>), schedules the tracks at different absolute offsets, compiles the scene, and plays it. Use a fixed RNG seed if you require reproducibility; otherwise the concrete values will vary per run.</p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(setf seg1 (audio-make-segments
            :start    (rnd-sample 6 '(0.0 3.0 6.0))
            :len      (rnd-sample 6 '(3.0 5.25 4.0))
            :amp      (rnd-sample 6 '(0.1 0.2 0.3))
            :fade-in  (rnd-sample 6 '(0.0 1.5 6.0))
            :fade-out (rnd-sample 6 '(2.5 0.5 6.0))))

(setf seg2 (audio-make-segments
            :start    (rnd-sample 6 '(0.0 3.0 6.0))
            :len      (rnd-sample 6 '(2.5 5.25 2.8))
            :amp      (rnd-sample 6 '(0.6 0.8 0.6))
            :fade-in  (rnd-sample 6 '(0.0 1.5 6.0))
            :fade-out (rnd-sample 6 '(2.5 0.5 6.0))))

(setf seg3 (audio-make-segments
            :start    (rnd-sample 6 '(0.0 3.0 6.0))
            :len      (rnd-sample 6 '(4.0 5.25 6.8))
            :amp      (rnd-sample 6 '(0.4 0.2 0.1))
            :fade-in  (rnd-sample 6 '(0.0 1.5 6.0))
            :fade-out (rnd-sample 6 '(2.5 0.5 6.0))))

(audio-compile-scene
'scene1
'(:start 0.0 :segments seg1 :audio "cello")
'(:start 2.0 :segments seg2 :audio "cello")
'(:start 3.0 :segments seg3 :audio "cello"))

(audio-play-scene 'cello1)</code></pre><p></p><hr><p></p><p><strong><span data-ips-font-size="150"><span style="font-family: Courier, monospace;">resample-to-rect</span></span></strong><span style="font-family: Courier, monospace;"> </span><em>source </em>&amp;key<em> rect out sr bits normalize taps window bp taper-ms remove-dc dither debug</em></p><p></p><p><strong>Arguments and Values:</strong></p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>source			Audio file source. Pathname designator (string or pathname). If no directory
				component is supplied, the short name is resolved in media/audio.

rect 			(optional) time–frequency selection. Supported fields (any subset):

				:time-start/:time-end
				(aliases :t0/:t1 - :u0/:u1), fractions of file length in [0,1].

				:start-sec/:end-sec
				(aliases :t0s/:t1s) - seconds.

				:i0/:i1
				sample indices (half-open: :i0 inclusive, :i1 exclusive).

				:freq-low-hz/:freq-high-hz
				(aliases :hz0/:hz1) - Hz.

				:freq-low/:freq-high
				(aliases :v0/:v1 - :f0/:f1) - Hz.

out 			(optional) base name or path (without extension) for the output file.
				Default: "rs-&lt;source-name&gt;-slice" in the project’s audio output
				location. Name collisions are resolved automatically.

sr				(optional) output sample rate in Hz. Default: 48000.

bits			(optional) output bit depth (e.g., 16, 24, 32). Default: 24.

normalize		(optional) boolean. If true, peak-normalises after DC removal and before
				taper/dither. Default: T.

taps			(optional) FIR length for the band-pass: odd integer or :auto. Default: 1025.
				Even values are promoted to the next odd.

window			(optional) FIR window (e.g., :hanning, :blackman). Default: :hanning.

bp				(optional) boolean. If true, apply a linear-phase band-pass defined by
				the resolved f0/f1 when meaningful. Default: T.

taper-ms		(optional) half-cosine edge taper per end (milliseconds). Default: 5.

remove-dc		(optional) boolean. If true, subtracts the mean per channel before
				normalisation. Default: T.

dither			(optional) boolean. If true and bits = 16, applies TPDF dither
				before quantisation. Default: T.

debug			(optional) boolean. If true, prints processing statistics to the console.
				Default: NIL.</code></pre><p></p><p><strong>Description:</strong></p><p></p><p><strong><span style="font-family: Courier, monospace;">RESAMPLE-TO-RECT</span></strong> extracts a <span style="font-family: Courier, monospace;">rectangular</span> selection in time and frequency from source, optionally applies a symmetric linear-phase band-pass, resamples to <span style="font-family: Courier, monospace;">sr</span>, post-processes to avoid clicks, and writes the result as a WAV file.</p><p></p><p><strong>Selection semantics.</strong></p><p><span style="font-family: Courier, monospace;">rect</span> may express time in fractions, seconds, or sample indices and frequency in Hz. Time bounds are mapped to frame indices using the source rate; frequency bounds are clipped to [<span style="font-family: Courier, monospace;">0</span>, <span style="font-family: Courier, monospace;">Nyquist</span>] with Nyquist = <span style="font-family: Courier, monospace;">src-sr/2</span>. Indices are half-open (<span style="font-family: Courier, monospace;">:i0</span> inclusive; <span style="font-family: Courier, monospace;">:i1</span> exclusive).</p><p></p><p><strong>Filtering.</strong></p><p>If <span style="font-family: Courier, monospace;">bp</span> is true and <span style="font-family: Courier, monospace;">0</span> ≤ <span style="font-family: Courier, monospace;">f0</span> &lt; <span style="font-family: Courier, monospace;">f1</span> ≤ <span style="font-family: Courier, monospace;">Nyquist</span>, a linear-phase FIR (<span style="font-family: Courier, monospace;">taps</span>, <span style="font-family: Courier, monospace;">window</span>) is designed and applied at the source rate. <span style="font-family: Courier, monospace;">:auto</span> chooses an appropriate length; even <span style="font-family: Courier, monospace;">taps</span> are promoted to the next odd. If <span style="font-family: Courier, monospace;">bp</span> is <strong><span style="font-family: Courier, monospace;">NIL</span></strong> or the band spans the full range, filtering is skipped.</p><p></p><p><strong>Resampling and formatting.</strong></p><p>After any filtering, the signal is band-limited resampled to <span style="font-family: Courier, monospace;">sr</span> (or left at the source rate if equal). Quantisation uses <span style="font-family: Courier, monospace;">bits</span>, with optional TPDF dither when bits = <span style="font-family: Courier, monospace;">16</span>. The output container is always WAV/PCM.</p><p></p><p><strong>Anti-click chain.</strong></p><p>Processing order is: DC removal (<span style="font-family: Courier, monospace;">:remove-dc</span>) <span style='font-family: "Times New Roman", Georgia, serif;'>→</span> normalise (<span style="font-family: Courier, monospace;">:normalize</span>) <span style='font-family: "Times New Roman", Georgia, serif;'>→</span> half-cosine taper (<span style="font-family: Courier, monospace;">:taper-ms</span>) <span style='font-family: "Times New Roman", Georgia, serif;'>→</span> optional dither (<span style="font-family: Courier, monospace;">:dither</span>).</p><p></p><p><strong>Example:</strong></p><p></p><p>Audio file data:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-metadata "marangona")
=&gt; (:format "WAVE" :ctype "PCM_16"
    :channels 2 :frames 1079210
    :src-sr 44100.0D0 :src-bits 16
    :out-sr 44100.0D0 :out-bits 16
    :i0 0 :i1 1079210
    :start-sec 0.0D0 :end-sec 24.4718820861678D0
    :f0 0.0D0 :f1 22047.794634103775D0
    :apply-bp t
    :taps 1025
    :window :hanning)</code></pre><p></p><p>The expression below extracts the time segment from sample index <span style="font-family: Courier, monospace;">23445</span> (inclusive) to <span style="font-family: Courier, monospace;">48383</span> (exclusive) of the audio source <span style="font-family: Courier, monospace;">"marangona"</span> and applies a linear-phase band-pass retaining only the frequency range <span style="font-family: Courier, monospace;">40</span>–<span style="font-family: Courier, monospace;">500</span> Hz.</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(resample-to-rect
 "marangona"
 :rect '(:i0 23445 :i1 48383 :hz0 40 :hz1 500))</code></pre><p></p><p>The result is rendered with the default output sampling parameters (sample rate and bit depth inherited from the source unless <span style="font-family: Courier, monospace;">:sr</span> or <span style="font-family: Courier, monospace;">:bits</span> are supplied) and with the original channel count preserved.</p><p></p><p>The resulting audio file is written automatically to <strong>Media/Audio/ </strong>using the project’s naming scheme and the container/encoding of the source unless overridden.</p><p></p><p>More examples:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(resample-to-rect "marangona"
                  :rect '(:u0 0.12 :u1 0.35 :v0 0.045 :v1 0.136)
                  :taps 1025 :out "rs-ma-mid" :sr 48000 :bits 24
                  :normalize t :debug t)

(resample-to-rect "marangona"
                  :rect '(:u0 0.12 :u1 0.35 :v0 0.0127 :v1 0.0136)
                  :bp t :taps 1325 :taper-ms 70 :out "rs-ma-low"
                  :sr 48000 :bits 24 :normalize nil :window :riemann)</code></pre><p></p><p></p><hr><p></p><p><strong><span data-ips-font-size="150"><span style="font-family: Courier, monospace;">audio-metadata</span></span></strong><span style="font-family: Courier, monospace;"> </span><em>source </em>&amp;key<em> rect sr bits taps window bp</em></p><p></p><p><strong>Arguments and Values:</strong></p><p></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>source			Audio file source. Pathname designator (string or pathname).
rect			A time–frequency rectangle understood by your spectral toolkit. If NIL, the full time
				span and [0, Nyquist] frequency span are assumed.
sr 				Optional output sample rate (Hz). Defaults to the source rate.
bits			Optional output bit depth (e.g., 16, 24, 32). Defaults to the source bit depth.
taps			FIR length (odd integer) or :auto. Default 1025. Even values are promoted
				to the next odd.
window 			FIR window specifier (e.g., :hanning, :blackman).
bp				Boolean. If true, apply band-pass defined by f0/f1 (derived from rect)
				when meaningful. Default T.</code></pre><p></p><p><strong>Description:</strong></p><p></p><p><strong><span style="font-family: Courier, monospace;">AUDIO-METADATA</span></strong> computes - without performing any heavy resampling - the concrete parameters that would be applied by <strong><span style="font-family: Courier, monospace;">RESAMPLE-TO-RECT</span></strong> for the given <span style="font-family: Courier, monospace;">source</span> and <span style="font-family: Courier, monospace;">rect</span>. It returns (a) container/codec information; (b) resolved input/output sampling parameters; (c) the time selection both in frames (<span style="font-family: Courier, monospace;">:i0/:i1</span>) and seconds; (d) the frequency selection (<span style="font-family: Courier, monospace;">:f0/:f1</span>); and (e) FIR design settings (length/window) and whether a band-pass should be applied. Time bounds are mapped to frame indices using <span style="font-family: Courier, monospace;">:src-sr</span> and clipped to [<span style="font-family: Courier, monospace;">0</span>, <span style="font-family: Courier, monospace;">:frames</span>]. Frequency bounds are clipped to [<span style="font-family: Courier, monospace;">0</span>, Nyquist] with Nyquist = <span style="font-family: Courier, monospace;">:src-sr/2</span>. Even <span style="font-family: Courier, monospace;">:taps</span> are promoted to the next odd to ensure a symmetric linear-phase design. If <span style="font-family: Courier, monospace;">bp</span> is <strong><span style="font-family: Courier, monospace;">NIL</span></strong>, <span style="font-family: Courier, monospace;">:apply-bp</span> is <strong><span style="font-family: Courier, monospace;">NIL</span></strong> regardless of <span style="font-family: Courier, monospace;">rect</span>.</p><p></p><p><strong>Example:</strong></p><p></p><p>Full-file data. Looks up <strong>Media/Audio/marangona </strong>if no path component is supplied:</p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(audio-metadata "marangona")
=&gt; (:format "WAVE" :ctype "PCM_16"
    :channels 2 :frames 1079210
    :src-sr 44100.0D0 :src-bits 16
    :out-sr 44100.0D0 :out-bits 16
    :i0 0 :i1 1079210
    :start-sec 0.0D0 :end-sec 24.4718820861678D0
    :f0 0.0D0 :f1 22047.794634103775D0
    :apply-bp t
    :taps 1025
    :window :hanning)</code></pre><p></p><p>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">3983</guid><pubDate>Sat, 25 Oct 2025 16:59:06 +0000</pubDate></item><item><title>Opusmodus 4.0.30095 (Update)</title><link>https://opusmodus.com/forums/topic/3961-opusmodus-4030095-update/</link><description><![CDATA[<p>New:<br><br><code>open-file</code> <em>filename</em></p><p></p><p><strong>Arguments and Values:</strong></p><p><em><span style='font-family: "Courier", monospace'>filename</span></em> - A pathname designator. May be a bare name (no type) or include an extension.</p><p></p><p><strong>Description:</strong></p><p>Opens the file resolved by <code>(get-file-path FILENAME)</code> in the Opusmodus application. Signals an error if the file cannot be resolved or does not exist. The function does not write to or modify the file; it only displays it in the appropriate Opusmodus panel. This function allows you to open series of files at once.</p><p></p><p><strong>Examples:</strong></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>.lisp / .opmo → Assistant editor panel
(open-file "Load CL-Collider.lisp")

MusicXML (.xml) → Notation viewer
(open-file "Giant-Steps.xml")

PDF → Assistant panel
(open-file "IMSLP03959-Pierrot_LunaireOp21.pdf")</code></pre>]]></description><guid isPermaLink="false">3961</guid><pubDate>Mon, 18 Aug 2025 19:40:53 +0000</pubDate></item><item><title>Opusmodus 4.0.30081 (Update)</title><link>https://opusmodus.com/forums/topic/3959-opusmodus-4030081-update/</link><description><![CDATA[<p>New utility function:<br><br><code>get-file-path</code><span style='font-family: "Courier", monospace'> </span><em><span style='font-family: "Courier", monospace'>filename</span></em></p><p></p><p><strong>Arguments and Values:</strong></p><p><em><span style='font-family: "Courier", monospace'>filename</span></em> - A pathname designator. May be a bare name (no type) or include an extension.</p><p></p><p><strong>Description:</strong></p><p>Resolves a file designator to a physical pathname under the Opusmodus root, searching recursively through all subdirectories. If the designator lacks a type, the function will fall back to a list (internal) of given types. On success it returns a namestring of the resolved file. On miss it signals a warning and returns <strong><span style='font-family: "Courier", monospace'>NIL</span></strong>.</p><p></p><p><strong>Examples:</strong></p><pre spellcheck="" class="ipsCode language-plaintext" data-language="Plain Text"><code>(get-file-path "Load CL-Collider")
=&gt; "/Users/opmo/Opusmodus/User Source/Extensions/Load CL-Collider.lisp"

(get-file-path "Giant-Steps.xml")
=&gt; "/Users/opmo/Opusmodus/Media/MusicXML/Jazz/Giant-Steps.xml"

(get-file-path "bach-ai")
=&gt; Warning: File "bach-ai" not found under OM root (/Users/opmo/Opusmodus/)</code></pre><p>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">3959</guid><pubDate>Sun, 17 Aug 2025 10:43:25 +0000</pubDate></item><item><title>Opusmodus 4.0.30060 (Update)</title><link>https://opusmodus.com/forums/topic/3951-opusmodus-4030060-update/</link><description><![CDATA[<p>I have added a few new commands to the <strong>Last Score</strong> menu:</p><p></p><ul><li><p>Length Graph</p></li><li><p>Pitch Graph</p></li><li><p>Velocity Graph</p></li><li><p>PPrint Score</p></li><li><p>PPrint Instruments</p></li></ul><p></p><p>I have also made improvements to PPrint Expression.<br></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4179" src="https://opusmodus.com/forums/uploads/monthly_2025_08/Screenshot2025-08-09at16_12_55.png.bad2c0da32f1295b1cad32c9cf67bd8b.png" alt="Screenshot 2025-08-09 at 16.12.55.png" style="--i-media-width: 440px" width="796" height="768" loading="lazy"></p><p></p><p>Best wishes,</p><p>Janusz</p>]]></description><guid isPermaLink="false">3951</guid><pubDate>Sat, 09 Aug 2025 14:21:21 +0000</pubDate></item><item><title>Opusmodus 4.0.30052 (Update)</title><link>https://opusmodus.com/forums/topic/3950-opusmodus-4030052-update/</link><description><![CDATA[<p>Fix to dynamic symbols (&lt; &gt;) that stop at the rests.<br><br><img class="ipsImage ipsRichText__align--block" data-fileid="4177" src="https://opusmodus.com/forums/uploads/monthly_2025_08/Screenshot2025-08-07at11_38_07.png.ddc791b5171282ca3b6b51680819bb61.png" alt="Screenshot 2025-08-07 at 11.38.07.png" width="286" height="154" loading="lazy"></p>]]></description><guid isPermaLink="false">3950</guid><pubDate>Thu, 07 Aug 2025 09:39:40 +0000</pubDate></item><item><title>Opusmodus 4.0.30003 (Update)</title><link>https://opusmodus.com/forums/topic/3945-opusmodus-4030003-update/</link><description><![CDATA[<p><strong>Autocompletion improvement.</strong></p><p></p><p>How to Use:</p><p></p><p>Type an open parenthesis followed by a letter.</p><p>Example:</p><p></p><p><code>(r</code></p><p></p><p>Press <strong>Tab</strong> to display a list of functions.</p><p>Continue typing or select a function from the list.</p><p></p><p><img class="ipsImage ipsRichText__align--block ipsRichText__align--width-custom" data-fileid="4166" src="https://opusmodus.com/forums/uploads/monthly_2025_07/Screenshot2025-07-22at15_49_48.png.088784392f0e813949a5bab999246948.png" alt="Screenshot 2025-07-22 at 15.49.48.png" style="--i-media-width: 640px" width="1576" height="1350" loading="lazy"></p>]]></description><guid isPermaLink="false">3945</guid><pubDate>Tue, 22 Jul 2025 13:59:09 +0000</pubDate></item></channel></rss>
