Hey All,
As you probably know I’ve been working lately on Cantabile’s network server and on the weekend put together a little demo showing how it could be used for markdown based show notes.
From the feedback I’m starting realize there really needs to be some richer formatting of show notes inside Cantabile itself and I’ve starting looking into what would be required to add markdown/html support.
Before I go too far down this rabbit hole however, here’s what I’m thinking:
- The current show notes mechanism would be dropped. The whole concept of a stack of “notes” would be replaced with a separate “show notes” document.
- Songs with existing show notes would be automatically converted to markdown.
- Show notes editing would be completely external to Cantabile - use whatever text editor you like (similarly to how it works in the markdown demo however there would be a dedicated built in command for it instead of the custom tool command).
- The Save As command and the Song rename command in the set list have already been updated to automatically rename related files ie: files with similar names but different extension. This is so that if you Rename or Save As a song, the notes will come along for the ride. This will be in the next build.
- Currently show notes are “state controllable” allowing some notes to only appear in certain states - this would be replaced by conditional directives in the markdown file.
- Currently show notes can have embedded variables eg: $(SongTitle). Limited support for these would continue to work, but possibly not for dynamic variables (eg: $(TransportPosition) probably won’t work).
Pros:
- Much richer formatting control (headings, dividers, bold, italic, images, bullet points, links, colors, images, fonts etc…)
- You can use a more capable text editor of your choice instead of the cumbersome editing currently in Cantabile
- Resolves the current problem with linked clone states where really they should be linked for everything except for show notes
- The same show notes format can be used both inside Cantabile and remotely via network server
- Possibility for serving up different sets of show notes to different network clients. (eg: one set of notes for the lead singer, one for the drummer etc…)
- Possibility for more advanced directives inside the markdown file. (eg: marking transort positions to control automatic scrolling), chord pro formatted data
- Possibility to provide a custom style sheet to control formatting across all songs from one place.
- Possibility of using other files types directly for show notes. (eg: a single image file, a chordpro file) rather than requiring a markdown file.
- HTML rendering is almost certainly useful in other parts of Cantabile too.
Cons:
- Loss of some functionality related to embedded variables as described above.
- Editing which notes appear in which states is more complex but can probably be mitigated with some commands in Cantabile.
- Although a lot more flexible than the current show notes, it still wouldn’t offer the full functionality of a web browser client. eg: no scripting, no pdfs, no videos. This sounds like a con but really it’s a pro - need to draw the line somewhere.
In case you’re unfamiliar with Markdown, it’s what you type everytime you enter something into this forum. See the demo video for an example, or here for more.
As for hiding/showing sections in certain states I was thinking something like this (assuming the song has states named Verse1, Verse2, Chorus1, Chorus2, Chorus3 etc…)
# $(SongTitle)
{{#if Verse1}}
Lyrics for verse 1 here
{{/if}}
{{#if Verse2}}
Lyrics for verse 2 here
{{/if}}
{{#if Chorus1, Chorus2, Chorus3}}
Lyrics for chorus
{{/if}}
Markdown supports fixed pitch formatting with ``` delimiters and a syntax language following the first one. So chordpro text could be entered like so and would render with the chord names above the lyrics (and would automatically transpose).
```chordpro
Swing [D]low, sweet [G]chari[D]ot,
Comin’ for to carry me [A7]home.
```
To get all this working, Cantabile is going to need two things:
- A markdown to HTML converter (I’ve already written one in the past that will work just fine).
- A HTML Rendering engine.
Number #2 is the problem. I’m probably going to need to write that myself and it’s non-trivial. I’ve looked at a couple of open source ones but haven’t found anything that fits all the needs (C#, capable, not too capable, not too buggy, engineered well enough that I can make fixes/changes as required, fits with Cantabile GuiKit UI library etc…).
In the meantime, the next build of Cantabile will have the network server and you’ll be able to play around with the whole concept using a separate web browser. Hoping to get that out by early next week.
Thoughts?