MODX: Going to the library

After resolving yesterday’s Sample Robot teething issues, I pulled together two new sampled pipe organ voices. Each voice is stored into its own MODX Library file as exported by Sample Robot for Montage (SRM).

At this point, I realized that libraries and voices are going to stack up quickly. So, I dipped into a few on-line resources:

Essentially, a MODX (or Montage) Library is a way to bundle up related Performances, waveforms, arpeggios and other data into a single package. Bundling makes it easy to save, distribute, and load Performance-related data.

Page 23 of the MODX Reference Manual contains a diagram depicting the contents of USER Memory and the relationship of USER Memory to USB flash drive file types like USER files and LIBRARY files. This diagram and its accompanying text is meaningful to engineers, but is somewhat confusing to a regular user who wants to get a job done! Diagram aside, it’s worth noting that there are two main file types that are important to our data management: USER files and LIBRARY files. Each file type has its own file name extension:

                  Montage  MODX
                  -------  ----
    USER file        .X7U  .X8U
    LIBRARY file     .X7L  .X8L

Yamaha have continued their practice of bumping the file format version number with each new generation of synth. Thus, the MODX USER file extension is “.X8U” versus Montage’s “.X7U”. I won’t distract you with compatibility details except to note that MODX can load Montage USER and LIBRARY files. Good thing since Sample Robot exports Montage USER and LIBRARY files (.X7U and .X7L).

There are two primary file operations:

    LOAD: [UTILITY] → [Contents] → [Load]
    STORE/SAVE: Press [STORE] button, or 
                [UTILITY] → [Contents] → [Store/Save]

I think of USER Memory as working storage that holds my most frequently used Performances (and other stuff). It’s important to stay backed up, especially when working with a new keyboard. I back up daily, writing USER memory to a USER file. It’s not that the data is so important — I can’t afford lost time. Lost data is lost time.

A USER file contains:

    User Performance (640 max)
    User Arpeggio (256 max)
    User Motion Sequence
    User Curve
    User Live Set
    User Micro Tuning
    User Waveform
    Utility Settings
    Quick Setup
    User Audition Phrase

That’s pretty much the whole ball of wax from USER Memory — a complete snapshot.

A LIBRARY file is similar to a USER file. A LIBRARY file contains:

    Performance (640 max)
    Arpeggio (256 max)
    Motion Sequence
    Curve
    Live Set
    Micro Tuning
    Waveform
    Audition Phrase

A Library doesn’t contain Utility Settings or Quick Setup data. You wouldn’t want a Library to disturb these settings when it’s loaded.

What’s a little confusing about the USER Memory diagram is that it shows (eight) Libraries as part of USER Memory. Maybe it’s better to think of USER Memory as “Internal Memory”. By the way, some writers refer to this memory as “read only,” kind of, sort of. The correct term is “non-volatile,” i.e., memory contents aren’t lost when power is turned off. This terminology gets around writer-ly semantic problems. Internal memory can be read and written. It just doesn’t lose its mind when power is removed.

A LIBRARY file, since it’s a file, can be loaded and saved. During a load operation, the contents of a library is written (stored) into one of the eight available library slots in USER Memory. The contents of the USER Performances, etc. in USER Memory are not over-written. From my point of view, this is great because I don’t want anything messing with my work! We can, however, save User data to a LIBRARY file.

The final piece of the puzzle is how to bring selected pieces of a memory-resident Library into USER Memory. That’s where Library import comes into play:

    [UTILITY] → [Contents] → [Library Import]

The Import to User Bank operation:

Copies the selected Performance in the User Bank. User Waveforms and User Arpeggio which are used in the selected Performance are copied to the User Bank as well. This button is displayed only when any of the Performances is selected.

Reading this last sentence from the MODX Reference Manual rang a bell in my head.

When I auditioned my first attempt at a pipe organ voice, I loaded the library generated by Sample Robot, but did not import the Performance. I even created a User Performance that referred to the new waveform and it played perfectly. However, was the new waveform really in USER Memory? No. I deleted the Library from USER Memory and the waveform disappeared, too. The User Performance which once referred to the waveform did not sound anymore. Edit revealed an empty space in the voice Element which once referred to the new waveform.

Actually, this is quite good behavior. In order to quickly audition new waveforms produced by Sample Robot, I just need to load the Library file with the new waveform. If I don’t like the sound, I can easily destroy the evidence by deleting the library from its slot in USER Memory. If I like the sound, then I can import the performance from the library to the USER Bank and build on top of the new waveform.

I’m glad that I undertook this experiment before going further. I want to keep the Principal 8′, 4′, 2′ waveform and Performance, and I want to audition any new waveforms without disturbing my earlier work. With load, save and import in mind, I think I see the way forward.

Copyright © 2018 Paul J. Drongowski

Here are a few helpful notes from the YamahaSynth.com site. Special thanks for to Phil Clendeninn and Jason!

A Library file can be loaded without overwriting your USER AREA. A Library file can install data into one of eight LIBRARY locations in your Montage/MODX.

When you place something in a Library location it’s there with everything it needs to be played (just like your Preset data always has everything it needs). But, you can rewrite this, later, if you change your mind or wish to add to it!

To create a LIBRARY you must assemble what you wish to place in that Library into your USER area. From the USER area you can SAVE as a “Library File” — this creates a .X7L file on your USB stick. Once you have that file, you can then install it to one of 8 Library locations.

You can then audition the sounds, decide which ones you think are “keepers”. The ones you want to keep you can IMPORT to USER. Why would you want to import them into USER? Because you assemble the data that you want to keep and then create your own custom library.

You can delete unwanted Libraries by entering the Library folder, select an item, tap “Delete”.

You can assemble data from a Library by using the “Import Library” function (Montage version 1.10 and later): UTILITY → Contents → Library Import

Each library can only be changed in its entirety. You cannot delete individual performances within a library – you can only delete the
entire library. You cannot add one Performance to an existing library. Libraries can only be installed, deleted, or created. Libraries cannot be edited on MODX.

The Library Banks contain the Performances you have added as Libraries. The Library Banks are initially empty. (A Library can be added by importing a library file.)

  1. Install library to a library slot (the one you want to add to)
  2. Backup then clear the user area so it is empty
  3. Create the one user Performance you want to add to the library (eventually) in the user area. The user area now has one Performance you want to add to the installed library.
  4. Import the entire Library you installed in step 1 to the user area. The act of “import” does not overwrite the user area. It will make sure all necessary content in the library, including custom waveforms, are copied (imported) into the user area.
  5. Create a new library from the user area. This new library will be the original one plus the one (in this example) user Performance you wanted to add.
  6. Delete the previous library
  7. Install the new library