Confirmed it's JSON.
Also, Setlist file (*.hls) and Bundle file (*.hlb) are 'base 64' encoded compressed (zlib) of JSON data as well. I've made this little Python app to dump the content of a Bundle file called "Bundle_VERSION_1_03.hlb":
I'll come up with another Python to dump in a more formatted fashion way.
#!/usr/bin/env python
import json
from pprint import pprint
import base64
import zlib
data = None
compress_data = None
data_bundle = None
with open('Bundle_VERSION_1_03.hlb') as file_bundle:
data = json.load(file_bundle)
if 'encoded_data' in data:
compress_data = base64.b64decode(data['encoded_data'])
bundle = zlib.decompress(compress_data)
data_bundle = json.loads(bundle)
pprint(data_bundle)
I'm not able to attached the full dump that the above app created, it's about 58000 lines. But here is the first few lines of the Python structure:
{u'setlists': [{u'meta': {u'name': u'FACTORY 1'},
u'presets': [{u'device': 2162689,
u'device_version': 16973856,
u'meta': {u'build_sha': u'3600857',
u'name': u'US Double Nrm'},
u'tone': {u'controllers': {u'@expPedal2': [{u'@dsp': 0,
u'@group': u'block1',
u'@max': 1.0,
u'@min': 0.0,
u'@param': u'Pedal'}]},
u'dsp0': {u'block0': {u'@enabled': False,
u'@model': u'HD2_Looper',
u'@path': 0,
u'@position': 7,
u'@stereo': False,
u'@type': 6,
u'Overdub': 0.0,
u'Playback': 0.0,
u'highCut': 20000.0,
u'lowCut': 20.0},
u'block1': {u'@enabled': True,
u'@model': u'HD2_VolPanVol',
u'@path': 0,
u'@position': 0,
u'@stereo': False,
u'@type': 0,
u'Pedal': 1.0,
u'VolumeTaper': False},
u'block2': {u'@enabled': False,
u'@model': u'HD2_CompressorRedSqueeze',