Addition of a "Flow" directive #featurerequest


dtownsmr <dtownsmr@...>
 
Edited

This idea comes from a feature that's built into one of the tablet apps I use (OnSong) to display chordPro sheets.

The concept is that a Flow directive lists sections of a song for display of the song in a sequential manner that matches the parts in the Flow. Parts of songs can be omitted and/or repeated as needed. The benefits are:
  • simplified file - no need of comments for when things are repeated
  • simplified usage/display - no bouncing around the file, simply scroll advance
  • easy to temporarily remove sections not needed in this instance
  • when you want to perform the song but not play certain parts, the contents stay in the file but they simply just don't get displayed because their tag is not in the Flow directive

OnSong doesn't use chordPro directives for environment bits. It simply recognizes "section tags" as lines that end in a ":" and the chordPro {soc}/{eoc} directives. Not sure what the best proposal for this feature request should be for part of the chordPro standard. Stay with colon terminated lines or new some form of new standard meta data or {start_of_section: [section.name]}/{end_of_section: [section.name]} or possibly create a new directive {section: ...} or some part of the standard that I'm not aware of that would be good for this purpose?!? :-) But for this example I'll stick with colon terminated lines.

Example:

a chordPro file with the following contents...

{Flow: I,V1,C,V2,C,Instrumental,C}

Intro:
[Em]      [D6/9]    [Em]      [D6/9]    
 
Verse 1:
On the [Em]first part of the [D6/9]journey
I was [Em]lookin at all the [D6/9]life
 
{soc}
I've [Em9]been through the desert on a [Dmaj9]horse with no name
it felt [Em9]good to be out of the [Dmaj9]rain
{eoc}
 
Verse 2:
After [Em]two days in the des[D6/9]ert sun
my [Em]skin began to turn [D6/9]red
 
Instrumental:[Em]      [D6/9]    [Em]      [D6/9]    [Em]      [D6/9]    [Em]      [D6/9]

Verse 3:
After [Em]nine days I let the [D6/9]horse run free
'cause the [Em]desert had turned [D6/9]to sea


...would result in a display of:

Intro:
Em    D6/9    Em    D6/9
 
Verse 1:
       Em                D6/9
On the first part of the journey
      Em                D6/9
I was lookin at all the life
 
               Em9                                           Dmaj9
        I've been through the desert on a horse with no name
                  Em9                             Dmaj9
        it felt good to be out of the rain
 
Verse 2:
      Em                 D6/9
After two days in the desert sun
   Em                 D6/9
my skin began to turn red

               Em9                                           Dmaj9
        I've been through the desert on a horse with no name
                  Em9                             Dmaj9
        it felt good to be out of the rain
 
Instrumental:
Em    D6/9     Em    D6/9     Em    D6/9     Em    D6/9
 
Verse 3:
      Em                  D6/9
After nine days I let the horse run free
           Em                D6/9
'cause the desert had turned to  sea

               Em9                                           Dmaj9
        I've been through the desert on a horse with no name
                  Em9                             Dmaj9
        it felt good to be out of the rain
 



Johan Vromans
 

A very interesting suggestion.

It boils down to two things: identifyable song parts and a way to define the flow.

To identify song parts, the {start_of_...} directives can be used, for example

{start_of_verse Verse 1}
...
{end_of_verse}

This part is then identified by its label Verse 1. (BTW, ChordPro 7 will have other means to add an id to a section so you can have id V1 and label Verse 1.)

To define the flow a new directive is needed. Let's call it flow. It will take a list of section identifications and process the sections in the given order. ChordPro doesn't use comma-separated lists so it will become something similar to

{flow: Intro "Verse 1" "Verse 2" Chorus "Verse 3" Coda}

This may be extra powerfull when used with conditional directives, e.g.

{flow-short: Intro "Verse 1" "Verse 2" Chorus Coda}
{flow-long: Intro "Verse 1" "Verse 2" Chorus Intermezzo "Verse 3" Chorus Coda}

Some notes --

When using flow control, all parts of the song must be enclosed in sections.

Watch out for a section that contains {transpose} -- if it is local be sure to counter it. But you can also use this for creative modulations:

{start_of_modulation M1}
{transpose +2}
{end_of_modulation}

and then in the flow:

{flow: .... M1 ... M1 ...}

This is going to be fun!


dtownsmr <dtownsmr@...>
 

I think I’m a little confused about how modulations are intended to work & what you mean by “ if it is local be sure to counter it”. Would they be nested sections within song parts or independent sections?

As an aside [and not really part of this feature request but more for helping me understand the concepts of the standard :-) ] …  what is the benefit of using {end_of…} tags as opposed to simply using a new section tag, as it’s encountered, as the termination of the previous section?


Johan Vromans
 

If you have a section that is modulated for a part, e.g (contrived):

{start_of_verse V1}
[A]Hello, World!
{transpose +2}
[A]Hello, World!
{end_of_verse}

The net result is that anything following it, will be transposed as well. So if you only want a part of the section transposed, counter (cancel) it:

{start_of_verse V1}
[A]Hello, World!
{transpose +2}
[A]Hello, World!
{transpose}
{end_of_verse}

Now you can use this section in a flow without risking accidental transposing evenrything that follows.

For the other question: historically only some parts of songs were sections (mostly chorus) so it was important to delimit (close) sections. Closing sections also prevents unwanted inclusions (think empty lines!), catches typo's. So it is best to leave it that way. It also makes it possible for a future version of ChordPro to support nested sections.


dtownsmr <dtownsmr@...>
 

I think I’d opt for a separate section to handle transpositions. Something like:

{Flow: “Intro” “Verse 1” Chorus … “modUp” Chorus …}

{start_of_modulation modUp}
{transpose +2}
{end_of_modulation}

--
Master Javist (™) — retired ;-)


inge.myking@...
 
Edited

[This is actually help question for a 3rd party tool. For convenience I'll leave it here since this thread is about flow -- mod]

Hi, I’m also using the onsongapp in my iPad and are trying to use flow. In onsong-formate (text-file) flow works fine, but I’ve been challenged to find a way to create clean lyrics only sheets for the tech-guys in the church, and I also need flow to work when I’m using the same songs direktly to projector or tv-monitor. I took a picture of how a song (in Norwegian) looks, but it doesn’t work with flow the way it should. 

My need are that flow works at the iPad, that I can see the section label in my iPad, but not in the projected picture and not in the clean text-file i’m using for the church projector team. And jes, I know my flow only have half of the song now, it’s just to show that something’s not right. 

Nice if you, or anyone can help me one step further…