Skip to content
View in the app

A better way to browse. Learn more.

Learn more

AM

Members
  • Joined

  • Last visited

  1. Here's also a GUI to make the many settings easier to handle. Read the manual first, then it works. Be sure to set the paths in load.opmo and nt-gui. Thanks, @Stephane Boussuge – it was your example that showed me this was possible (with Claude)! NT-GUI-Manual-EN.pdfNT-GUI-Anleitung-DE.pdfnt-gui-en.opmo
  2. Thanks, you’re the pro! 😊
  3. Corrections done – here’s everything as a ZIP file. Good point, thanks! I’ve added load-all.opmo: it loads all files in dependency order (and checks first that they’re all there). Set *nt-ordner* to your folder once, then evaluate the file. (nt-laden :lauf nil) loads only the setup without running. Machine Musicianship.zip
  4. Machine Musicianship - A generative agent system I’d like to share a project I’ve been working on: a “non-trivial machine” for Opusmodus, after Heinz von Foerster. A trivial machine always answers the same input in the same way. A non-trivial machine has an internal state that decides how it reacts, and every input changes that state. The result is fully deterministic, yet hardly predictable. What it does Three agents (A, B, C). Each one combines a pitch agent and a rhythm agent. The pitch agent listens to the others, recognises interval patterns and builds up an internal value z. A selection rule then picks reactions on pitch, articulation and velocity, and the agent keeps developing its own material at every cell start. The rhythm agent plays an 8-bit counter (1 = note, 0 = rest), has a pulse and wanders through a small space. It reacts when it meets other agents or locks into the same pulse. In-between lanes. When neighbouring agents cross, share rhythmic ones or mirror each other, the lane between them produces events. These become two extra voices, and each lane is a small agent itself: it can rattle, play solo chords or fall silent. Form and presets. Global form states sit on top, together with presets: a few controls from 0 to 1, which can also change over time. Pitch fields. After the run, the voices can be mapped onto Xenakis-style sieves, large chords or scales. Pattern recognition always runs in the chromatic domain. Important: always evaluate the files in the correct order (see the manual, chapter 2.1): nt-kern.opmo einstellungen.opmo ab-functions.opmo tonfelder.opmo agent-a.opmo, agent-b.opmo, agent-c.opmo zwischen-ab.opmo, zwischen-bc.opmo form.opmo preset.opmo lauf.opmo partitur.opmo After a change, evaluate the changed file as a whole, then lauf.opmo and partitur.opmo again. I’ve added load-all.opmo: it loads all files in dependency order (and checks first that they’re all there). Set *nt-ordner* to your folder once, then evaluate the file. (nt-laden :lauf nil) loads only the setup without running. Everything is plain Common Lisp in a set of .opmo files: an engine you don’t touch, plus clearly structured files for the settings, the agents, the lanes, the form, the presets and the run. You plug in your own Opusmodus functions as reactions. The package includes an manual covering concept, settings, reference, troubleshooting and formulas. A note on language: function and parameter names are German, since that’s how the project grew. The comments and the manual are in English, and the manual has a glossary. Credits I developed this together with Claude (Anthropic’s AI assistant). The concept and musical decisions are mine; Claude did most of the coding and documentation, and we refined it step by step in dialogue. Free to use, open source. Use it, change it, take it apart, build your own pieces with it. If you make something with it, I’d love to hear it. Feedback, questions and bug reports are very welcome. André Machine Musicianship.zip Test_Run with 256 Fenster/Windows test_run_256.mp3
  5. I think it’s much better for the forum community and engagement if you post it here directly rather than referring people to your website. In my opinion it’s more direct and helps the forum community thrive ☺️
  6. I know the Xenakis things. I thought you had programmed your track/example in Opusmodus, so the code would be easy to share.
  7. Just here, as simple as possible. Thx
  8. The code would be the most interesting part — maybe you could share it here?
  9. It came to mind when I was thinking about the topic. But I don’t have time to discuss it all at the moment. Thanks for the Link
  10. BWV 5 - Chorale: "Führ auch mein Herz und Sinn", performed by 4 singing motors (Opusmodus -> Arduino -> Motors) IMG_2977.mov
  11. For a project, I control servos and relays (as an instrument) via Arduino using LISP — although, of course, the same thing could also be done in MaxMSP (or with other programming environments). I’m a bit familiar with LISP, so I can use it to program structures, timing, rhythms, etc. — or, as in this particular case, a “3D sample space.” I read the elements of this space using different algorithms (boustrophedon, brownian bridge, kNN), essentially generating reading paths, and then send the resulting data/material to the Arduino to control the relays and motors.
  12. Vani started following AM
  13. AM replied to AM's topic in Made In Opusmodus
    Very useful tool to check the techniques claude 2.mov
  14. The following demonstrates a simulation of reading a 2D matrix (with samples/motivs mapped to it) using various techniques. The resulting reading patterns are similar, yet generally not identical - creating a kind of formal grammar. In the interest of transparency, I’d like to mention that I didn’t write all of the code myself. The samples/motivs (linked to the indices and not shown in this post) are entirely composed by my own, and so are some of the reading techniques. For others, I worked with Claude to generate implementations in pure Lisp. From there, I experimented with them, refined them, and fixed issues along the way. sim.mov Claude generated a visualization of a formation process for me, making the reading techniques easy to recognize. Bildschirmaufnahme 2026-07-22 um 15.33.40.mov

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.