Jump to content
Sign in to follow this  
opmo

How to extend the system with your own functions

Recommended Posts

The first thing you need to do is to create a source file (.opmo or .lisp).
Give the file a name eg. Custom functions.opmo.
This file will now be the source file for your functions, make sure the functions are working and that there are no errors.
Save the file into the ~/Opusmodus/Extensions folder.

 

 

ext-folder.png

 

 

The next step is to document the functions that you have created.
Go to the ~/Opusmodus/System Library folder and create a new folder for example Custom Function.


This folder is where you will place your (TextEdit) .rtfd system library documents (the best way to create a new document is to copy the contents of one of the System Library’s documents and paste it into the newly created .rtfd file).

 

Now replace the function name i.e. variables, values etc… with your own examples and documentation. Each function must have its own document. Place the documents into the ~/Opusmodus/System Library/Custom Function folder.

 

sys-folder.png

 

The last step is to create a new file that must be named contents.opmo and place it into the same folder.
The form of the contents.opmo file should be written as follows:

 

;;; Custom functions
(foo1 "here you write short note about the foo1 function")
(foo2 "here you write short note about the foo2 function")


The next time you start the application you should be able to use and see your function documents in the ’System Library’ utilities panel.

Share this post


Link to post
Share on other sites

Thanks, 

It worked but there is a slight problem. In the utilities panel, system functions, it says: no content entry for...

But the popup window is working.

 

Thanks again

 

Jad

Share this post


Link to post
Share on other sites

Here is an example of one of the Opusmodus contents.opmo files.

 

;;; Filters/Generate
(gen-filter-ambitus "Finds and removes any pitch outside the range with symbols 0 replacing the others with 1 internally and create a map.")
(gen-filter-anacrusis "Finds and preserves the end of a series of repeated items and replacing the others.")
(gen-filter-change "Finds repeated items and replacing them with (0) internally, and create a map.")
(gen-filter-remove "Returns a list of 0 and 1 internally and create a map.")

 

As you can see the short description of the function is in a string:

 

(function-name "short description in a string")

 

Each folder needs to have its own contents.opmo file.

 

 

Share this post


Link to post
Share on other sites
On 10/22/2015 at 5:42 PM, opmo said:

The first thing you need to do is to create a source file (.opmo or .lisp).
Give the file a name eg. Custom functions.opmo.
This file will now be the source file for your functions, make sure the functions are working and that there are no errors.
Save the file into the ~/Opusmodus/Extensions folder.

 

 

ext-folder.png

 

 

The next step is to document the functions that you have created.
Go to the ~/Opusmodus/System Library folder and create a new folder for example Custom Function.


This folder is where you will place your (TextEdit) .rtfd system library documents (the best way to create a new document is to copy the contents of one of the System Library’s documents and paste it into the newly created .rtfd file).

 

Now replace the function name i.e. variables, values etc… with your own examples and documentation. Each function must have its own document. Place the documents into the ~/Opusmodus/System Library/Custom Function folder.

 

sys-folder.png

 

The last step is to create a new file that must be named contents.opmo and place it into the same folder.
The form of the contents.opmo file should be written as follows:

 


;;; Custom functions
(foo1 "here you write short note about the foo1 function")
(foo2 "here you write short note about the foo2 function")


The next time you start the application you should be able to use and see your function documents in the ’System Library’ utilities panel.

 

Here is the answer for my last question. Best Julio 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Similar Topics

    • By Frederic
      Hello all, 
       
      I'm coming from the javascript development world. Here are few musical ideas. Is there a way to implement them thanks to Opusmodus ? 
       
      - play a sequence of notes in 30 seconds:
      in javascript, it could be pseudo-coded like this: 
       
       setTimeout(function(){ play('c4 d4 e4 f4 g4'); }, 3000);   
      - play a sequence of notes at a specific event.
      in Javascript/jQuery, it is very easy to code anonymous functions that would wait for a specific event to be triggered. Some examples I have in mind:
       
      play 'do ré mi' at bar 4
      $('4th bar').on(function() { play('c5 d5 e6');});  
      play 'do ré mi' each time note f5 is played
      $('f5').on(function() { play('c5 d5 e6');}); repeat the note + octave when f5 is played
      $('f5').on(function(this) { play(this + this.octave(1));});  
      In other words: is it possible to trigger an anonymous function with opusmodus, so that a musical phrase will be played at specific event ? 
       
       
      Thanks for clarification, best !
    • By torstenanders
      The function LENGTH-DIVIDE and friends are a useful device for introducing some rhythmic variation to some material. However, when the processed sequence is a full OMN expression (see example below), then the added notes cause all other parameters to shift forward (additional parameters are added at the end by looping). For introducing only a slight variation to some existing material (e.g., motif) these functions are therefore not so useful, because this shift of all parameters to basically "fill" the new added notes with pitches etc. greatly change the varied material for a listener.
      (length-divide 1 2 '(q f3 leg+m1 q ab3 leg e c4 leg bb3 leg ab3 leg g3))  
      Basically, this is the opposite situation of the situation addressed by swallowing. Swallowing (e.g., with GEN-SWALLOW and the swallow argument of many other functions) avoids the shift of parameters like pitch etc. that would result from removing notes and turning them into rests. For addressing the situation above properly we would need something like the opposite of swallowing, some way to fill in parameters like pitch etc. for new notes to avoid shifting existing notes. I hope my explanation makes sense and you can see why something like the opposite of swallowing would be useful for functions that add notes to some input material.
       
      Now, the tricky question is of course, what parameters (pitch etc.) should be added in such cases. Musically useful and common in the classical literature would be, e.g., repeating the parameters (pitch etc.) of the predecessor note (though that might be a bit too simplistic and annoying at times) or somehow interpolating some pitch gap between the previous and next note with a little scale or arpeggio and only repeating the other parameters like articulations (resulting in some variation that is likely most similar to the input material, so it would be good to have that as an option).  If the pitch interval between the two original notes is too small to add some pitch in between for the new now (or as an option in general for variety), it would also be good  to add some ornamentation (e.g., using PITCH-ORNAMENT), but for a close similarity between the original material and the variation it would be best as an option to apply such ornamentation only to the newly added notes, not all notes. Of course, other options could also be useful for variations that vary the input material a bit more strongly, e.g., some random pitch for the new notes within certain interval bounds.
       
      Does some function that kind of is the opposite of GEN-SWALLOW in that it adds parameters like pitches for subdivided rhythmic values (to avoid the shifting) sound like a good idea?
       
      The idea with the interpolation of gaps could be implemented by turning the original duration values and pitches into some envelope and then reading that envelope with the new rhythmic values. So, that is rather strait forward. However, that would not allow for some ornamentation, because such algorithm would not recognise which notes are new that should be ornamented.
       
      Any other idea perhaps? Thanks! 
    • By Andy
      An unusual request:
      I am using Opusmodus for my next project 'The Last', a dance piece, the subject of which is... death.
      Can anyone point me to some functions that might, with a little creative license, play with the idea of death in terms of, for example, entropy or decay? Or truncation. 
      I'm throwing the ball in the air here so all ideas are welcome!
       
      Thanks
       
      Andy
×
×
  • Create New...