Skip to main content

How are sounds assigned to imported MIDI?

Posted

Hi.

I wonder if someone could explain to me how sounds/instruments are currently assigned when a MIDI file is imported into Synfire.

For example, suppose I have a MIDI file with 6 tracks, on channels 1 thru 6.  

When I drag that MIDI file into Synfire, sounds are assigned.   Where are those sounds coming from, and how can I control their assignment?
 

Here is a visual example:

Where are those sound assignments coming from?   

(I know I never made them myself)

I've attached the sample source file for reference.

 

Attachments

Tue, 2023-12-26 - 16:40 Permalink

My goal is to import MIDI with known track layouts like so:

Channel        Type

1    Melody
2    Rhythm
3    Bass
4    Pad
5    Chord
6    Drums


to chosen corresponding instruments in Synfire , like so:

1    Synth Lead Sound
2    Brass Stabs
3    Electric Bass
4    Strings
5    Electric Piano
6    Drums
 

I want to set this up once, and then just have it happen correctly thereafter for subsequent imports of files which I know to be of the same layout.     Possible?

 

Tue, 2023-12-26 - 18:31 Permalink

The sounds are read from the MIDI file provided it complies to GM standard. If you dont like a sound you can assign a different one with the wrench icon as usual.

Assignments are per file. It is rare that multiple files have the same layout.

If you create these files yourself, make them GM compliant for easier batch imports. 

Tue, 2023-12-26 - 20:15 Permalink

The sounds are read from the MIDI file provided it complies to GM standard. If you dont like a sound you can assign a different one with the wrench icon as usual.

Hi,

There is no sound/instrument information in the file (to my knowledge).   (I've provided it in case anyone wants to examine it.)   If I'm mistaken, I'd certainly like to know.

So that considered, the I think the question remains  -  Where are those sound assignments coming from?   

It is rare that multiple files have the same layout.

Well, that's a huge assumption, and a mistaken one as soon as any form of automated file generation enters the picture.    Put it this way, Synfire is not the only program with "Factories"!

Being able to take "factory-created" output from other programs and import it into Synfire is highly desirable.

 

If you create these files yourself, make them GM compliant for easier batch imports. 

Two points of follow-up here  -  

  1.  What exactly do you mean by GM compliant?   IOW, exactly what messages/metadata are you referring to here?
  2.   Even if I knew clearly the answer to #1 (which I would like to), that may or may not be possible when the source is another program.

    If it is not possible to create the "perfect" files at the source, I would still very much like to have Synfire be able to import (many) files, which are the same, performing a defined set of configured assignments on the Synfire side.

 

Tue, 2023-12-26 - 21:43 Permalink

UI-wise, if I have an arrangement like this:  (intended for the situation described above)

 

would it not make perfect sense to be able to drag in a 6-track MIDI file (ala the above) and have it populate those 6 tracks with Takes (and optionally Figures) from the 6 tracks in the file?

If the file contained more than 6 tracks, then an intermediate step could allow me to choose 6 out of the larger set.

 

Tue, 2023-12-26 - 21:51 Permalink

Beyond that point, being able to 

a) drag in many similar MIDI files to make the tracks longer (because a single one may be only 2 - 8 measures long)

b) take each/any of the tracks as source for Ctrl-E/Split/Slice operations to fill a library

seems like it would make for a very efficient workflow if Synfire so permitted.

 

Tue, 2023-12-26 - 23:46 Permalink

If you want to control the sounds chosen for each track, assign gm instruments to the tracks in whatever tool is generating the file, then save as a gm compliant file. Turn on the treat as GM in the import options.

As to why you got the instruments shown, if the file does not include the gm instrument choices, perhaps synfire has matched the channel numbers in the file against the current rack's channels (this is purely a guess on my part)?

If the midi file plays in a midi player with multiple instruments, then it probably has gm info present.

Wed, 2023-12-27 - 10:19 Permalink

Don't remember the exact details, but as much as I know from earlier threads, Synfire uses a multi-step algorithm to select sounds during MIDI import. If it finds information about the sound in the MIDI file, such as GM program change commands or track names, it uses that. If there is no such information (like at your file), it looks at the content of the track to select presumably suitable sounds. Therefore you got the piano sound for the melodic pattern and french horns for the pad-like pattern.

Thu, 2023-12-28 - 19:49 Permalink

I have prepared a short demo video to provide a visual representation of the workflow I suggest above.

SP - Workflow Demo with Bitwig and IC2 01a.mp4 (screencast.com)

IMO, the benefits of Synfire adopting and enabling this workflow would be immense.

 

P.S.  My own typical mode of composition is often loop-based to begin with, followed up with through-recordings of longer-form performances (e.g. guitars, vocals, etc.) to arrive at a final product.   It seems to me Synfire has a background or genesis in the idea of through-composed music specifically.  I'd like to say explicitly that I see no -inherent- conflict between looping and through-composed approaches.  Clearly the many music-prototyping concepts that Synfire realizes can be applied to both, or to a hybrid approach such as the one I describe.  My viewpoint is: "Enable the users, and the music will flow!".   So, I offer my suggestions on what we need in the field -technically- in order to achieve a high level of productivity.  I hope Cognitone development can look favorably on these specifics.

 

Thu, 2023-12-28 - 22:17 Permalink

That works quickly , if you already have a building block as a start. I also experimented for a while with yamaha styles (.sty) that you can import into Cubase, but also into Synfire!

I did some with these yamaha blocks. ( a long time ago )..a fun song 
By the way Band in a Box can also supply blocks ..did not look at that

 

Fri, 2023-12-29 - 08:58 Permalink

Hello sj1, on “enabling this workflow”: This is already possible.

If you group containers in SF you can drag export multiple tracks fully rendered to your DAW, even including tempo and time signature changes if you select arrangement view. I do this as my main workflow using Ableton Live as DAW. When dragging to DAW wait a sec, before releasing the mouse button.

Fri, 2023-12-29 - 11:20 Permalink

janamdo -  Always nice to be able to check out the productions of others.  Another topic though is probably a better place for that, I think.

cliff - FWIW, I am talking about workflow of moving multi-channel MIDI files -into- Synfire, not out of it!  <g>   In my video, dropping onto Bitwig is standing-in for what I would like to see when dropping onto Synfire.

 

Fri, 2023-12-29 - 11:33 Permalink

@sj1  A funny example song composed ( a long time ago ) using yamaha blocks and maybe i will look at Band in Box blocks for again block composing.

Fri, 2023-12-29 - 16:57 Permalink

It seems to me Synfire has a background or genesis in the idea of through-composed music specifically.

Not really. Originally it started as a tool for writing pop songs, which are mostly loop based today. At some point it became clear how good a match Synfire was for "composed" music (i.e. lots of melodies and developing themes) and that added a new perspective and use case to the mix. Both are subsets of each other. There is no contradiction.

The market for loop-based music is much bigger and thus a great opportunity to support the more advanced niche applications. We are actively addressing both audiences, as our current product descriptions show ("Choose Your Workflow").

The challenge with multi-track batch import drag & drop is the correct association with existing instruments (tracks). A simple 1:1 mapping based on track numbers might work where there are many MIDI files with a uniform track layout. I will consider that as an option for batch import.

Concatenating multiple MIDI files (track-wise, left to right) however is a very special case that is probably better accomplished prior to import with a command line utility, scripting language, or something. IIRC there are tools for this, or can be easily written in Python.

Fri, 2023-12-29 - 18:30 Permalink

Thanks for your comments and references Andre.

The challenge with multi-track batch import drag & drop is the correct association with existing instruments (tracks). A simple 1:1 mapping based on track numbers might work where there are many MIDI files with a uniform track layout. I will consider that as an option for batch import.

That would be very cool!

Two approaches cross my mind here.

1.  Without further ado, place tracks from the MIDI in order, one-for-one, onto the tracks of the Synfire arrangement.  No UI to design or code here.  No numbers or calculations either.   The user would simply prepare the Synfire arrangement tracks/instruments ahead of time, knowing the format of what will be dropped onto it.

Notice in the video above how Instacomposer, acting as the source (or "factory") will produce the same tracks (with different content) every time.   Thus, the user can simply create a Synfire arrangement properly configured to receive those (and save/reload that "template" if desired).

2.  By adding the step of an intervening dialog at drop time, it would be possible to let the user map any track of the incoming to any track in Synfire.   This requires a UI for that, and thus more design and programming.  In return, it is more flexible, but also slower as the dialog must be dealt with each time.

Ideally, IMO, a modifier key  (e.g. Ctrl-drop, or Alt-drop)) would choose between 1 and 2 above.   Practically, 1 is much easier and quicker to implement and would be very helpful and welcome in the field sooner rather than later.  #2 then, if taken on, could be taken on at relative leisure.

 

Fri, 2023-12-29 - 18:42 Permalink

Concatenating multiple MIDI files (track-wise, left to right) however is a very special case that is probably better accomplished prior to import with a command line utility, scripting language, or something. IIRC there are tools for this, or can be easily written in Python.

Please consider that as described/demoed/suggested by me above, the import process would be interactive, not batch.

Did you get how Instacomposer lets us quickly and effectively interact with the MIDI generation process, and then after each iteration the goal is ingestion into Synfire, a block-at-a-time via drag-and-drop?

I realize it may seem to be a very specific request, to say "Make it work with Instacomposer, just like this!" -  but I suggest that the very specificity of the request makes implementable what in reality will be a general capability that will apply to other plugins and file drops probably in many ways that cannot be cataloged right now in advance.

 

Sun, 2024-01-21 - 14:52 Permalink

Following up on Blacksun's suggestion above:

If you want to control the sounds chosen for each track, assign gm instruments to the tracks in whatever tool is generating the file, then save as a gm compliant file. Turn on the treat as GM in the import options.

It took some doing, but eventually I was able to embed some Program Changes in the source file

 and make the channels come into Synfire as separate instruments:  (ch 4-8 here)

Though these instruments are not really correct as-named, they will re-transmit out to my Motif XF on the correct channels (provided a properly configured device description has been prepared).   Since the Motif XF already has the "correct" instruments assigned to a multi-timbral Song, that's a win!

Internally to Synfire, if I want to drive say, Sprike instead, I can choose different sounds on the tracks in an Arrangement.   The fact that the Library has accepted the dropped MIDI and assigned different instruments makes this manageable.

The reason this was tough to achieve was that the idea of "Instrument" stands between my MIDI channels and where I want to send them.   Getting everything to separate out properly by channel was very much a trial-and-error process as many different Program Change values seem to want to map to the same Instrument with no respect to the fact that the different channels, as channels, actually indicate different Instruments already.  (As since the days-of-old in the MIDI world).   

Eventually I found a set of PCs that would map to separate Instruments and was able to proceed from there.  

FWIW, two things I think would be helpful somewhere up-the-road - 

  1.  Posting a detailed (e.g. near-to-pseudocode) explanation of how Synfire assigns Instruments to incoming MIDI file data.
  2.   Having some sort of mode/switch to the effect of "Assign Different Channels to Different Instruments".

Anyway, thanks for the suggestion.  It was correct (if painful!).  <g>