Interface MusicGenerator

All Known Implementing Classes:
CompositeMusicGenerator, DummyGenerator, YamJJazzRhythmGenerator

public interface MusicGenerator
The music generation capability of a Rhythm.
  • Method Summary

    Modifier and Type
    Method
    Description
    generateMusic(SongContext songContext, RhythmVoice... rhythmVoices)
    Generate the Phrases which make the musical accompaniment for a given rhythm and a given context.
  • Method Details

    • generateMusic

      Map<RhythmVoice, Phrase> generateMusic(SongContext songContext, RhythmVoice... rhythmVoices) throws MusicGenerationException
      Generate the Phrases which make the musical accompaniment for a given rhythm and a given context.

      The service provider must compute one Phrase per RhythmVoice/Midi channel. The MidiMix from context provides the Midi channel associated to each RhythmVoice via MidiMix.getChannel(RhythmVoice). Phrases must be provided for all RhythmVoices (though a Phrase can be empty), including for the possible RhythmVoiceDelegates used by the Rhythm.

      If the context song contains several rhythms, the method must add notes ONLY for bars which use this MusicGenerator's rhythm. For example, if context range is bars 3-4 with rhythm1 on bar3 and rhythm2 on bar4, then the rhythm1 generator must add notes for bar 3 only.

      Note that the following features are directly managed by the JJazzLab framework, notably by postprocessing the output of generateMusic():
      - Midi Instrument selection and settings (Program changes, Midi controller messages such as bank select, volume, reverb, panoramic)
      - RP_SYS_Mute rhythm parameter handling (muting a specific track for a specific SongPart)
      - RP_SYS_DrumsMix rhythm parameter handling (adjusting some drums track instruments velocity)
      - RP_SYS_CustomPhrase rhythm parameter handling (substitute a user-supplied phrase for a rhythm track)
      - RP_STD_Fill rhythm parameter handling for the "fade_out" value (MusicGenerator must handle the other values)
      - Handling of the channel's specific velocity shift
      - Handling of the instrument's specific transposition
      - Drums channel rerouting
      - NC chord symbols (produce no sound)

      Parameters:
      songContext - A snapshot copy of a SongContext (see
      invalid reference
      org.jjazz.song.api.SongContext#getDeepCopy()
      ) to be used for music generation. It should NOT be modified by caller while this method is running.
      rhythmVoices - Generate music only for these RhythmVoices, or for all RhythmVoices if nothing specified
      Returns:
      One Phrase per rhythm voice (Phrase instances channel should be ignored, use the songContext MidiMix to get the channel used by a RhythmVoice).
      Throws:
      MusicGenerationException - If generator could not produce the expected music for some reason.