2 questions about Program Changes to songs

so after about a week or so of tweaking, I think I have most of my setups and songs the way I want them - at least the song names and sections. My ultimate goal is to have Bandhelper on my iPad send program changes to GP to queue up the right song. I tested that and it works great. Now I just need to do it with 60 or so songs. So here are my questions -

  1. Is there a bulk way to sequentially apply Program/Bank values to all Songs and sections on the song page?

  2. Is there a way to export this data out to a text file or spreadsheet? I use Bandhelper’s web portal to bulk edit all of my midi program changes and having it all in a single file would be really helpful.

Try this:

awesome, thanks! I thought there was a way to do that (EnjoyRC mentioned it), but I couldn’t find it.

Any chance that something exists for the second item? if not, I’ll probably post it in the feature request. Hell, I’d be happy with an xml file or something that I could write a script to parse.

1 Like

A gig file is actually a xml file
So in theory you could edit it.

BUT (!!!)
Don’t event think about to ask support when something is not working anymore when you manually change such a gig file !!!

Ha - well I don’t have any intention of editing the file itself - just writing a script to parsing thru the xml inside of it to extract the data that I need to something else.

I am curious to know what you would like to extract from a gig file that GP won’t transmit for you via OSC ?

@David-san - well I’m not sure - if I can use the above method to bulk assign PC values to all of the songs, I would like to be able extract a list that I can then use to programmatically set Bandhelper (on my iPad) to change to the proper song when I cue it up there. So ideally it would be song name, part name, and then the Program/bank number. Bandhelper doesn’t support OSC

I don’t know well band helper, but I guess you would then have a touchable list of song/parts which sends the appropriate PC messages to GP ? So you are interested in a kind of « export setlist » option.

With an XSL-Transformation is should be possible to get such a list.

Here is an XSL-Tranformation example:
SONGLIST.xsl (685 Bytes)

For example use this link:
https://www.freeformatter.com/xsl-transformer.html

…and follow the instructions and you will get an HTML-File with
3 informations in it:
Song, Song Part, PC Message sent

@David-san - yea something like that. Basically something that can help me out when inputting all the PC numbers into BandHelper. I like Bandhelper because I can share setlists with the whole band and load everything from any PC with internet access and have it automagically sync with the iPad(s). I keep all my song notes in there as well. And because it’s on an iPad, it’s built for touch and really easy to make setlist changes on the fly. I used it to drive my Kronos based rig for a while and it became indispensable.

Hmmm, that’s cute. I just wrapped your xlst into a Python file and ran it locally, works great.

When I have some time, I’ll see if I can throw up a page on to our website that will suck in a gigfile and produce this output. Unfortunately that freeformatter page is limited to 2M so it couldn’t load my gig file

import lxml.etree as ET

xslTransformation = str.encode('''<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Song</th>
        <th>Song Part</th>
        <th>PC</th>
      </tr>
      <xsl:for-each select="/GIGRACK/SETLISTS/SONG">
      <xsl:for-each select="SONG_PART">
      <tr>
        <td><xsl:value-of select="../@songName"/></td>
        <td><xsl:value-of select="@songPartName"/></td>
        <td><xsl:value-of select="@partPC"/></td>
      </tr>
      </xsl:for-each>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>



''')

#replace with path to your gig file
xml_filename = '/Volumes/HD2/Nextcloud/NAMM2019/ReelingWithSetList.gig'

dom = ET.parse(xml_filename)
xslt = ET.XML(xslTransformation)
transform = ET.XSLT(xslt)
newdom = transform(dom)
print(ET.tostring(newdom, pretty_print=True))

I have the same goal as what you have already accomplished, to have Bandhelper on my iPad send program changes to GP to queue up the right song. I would also like to be able to send a program change to my Roland VR-09.

As newbie my head is swimming in all of this. I need help badly. Not sure if this is the best thread to post in, if not let me know. Below is a list of the gear, I’m working with and the things I tried so far. I would greatly appreciate some guidance and any help from you or anyone else in the forum.

MacBook Air OSX 10.15.7

iPad Air (3rd gen) MUUJ2LLA

PreSonus Studio 24 C

GP 4

Komplete Kontrol S61

Roland VR-09

Aukey Link PD Pro USB-C Hub

iPad icon is dimmed in Audio MIDI setup.

I have a Bluetooth connection to my MacBook Air from the iPad Air. I also connected a lightening yo USB 3 camera adapter to the iPad Air since I do not have a Lightning USB adapter.

SENDING MIDI FROM BANDHELPER

I registered my MacBook as a MIDI device per the instructions on that page. All ports channel 1

Navigate to MIDI Presets in the main menu and tap the + button at the top of the list to add a new MIDI preset. I added program change, turned on active.

The first field is the bank change (MSB), the second field is the bank change (LSB) and the third field is the program change. I left MSB and LSB blank and set the PC field to 16. Not sure about how to set these.

GP 4

Under Global MIDI I did not see the iPad in the section “Accept Program Change Message from any device” Does it go through “Local GP port”?

I I have turned on “ MIDI Song select to PC and Use MIDI channel 16”