示例#1
0
文件: file.py 项目: msg/g2ools
  def format(self, patch, data):
    bitstream = BitStream(data)
    write_bits = bitstream.write_bits

    bitstream.write_bitsa([8, 4, 10, 10], [ NVARIATIONS, NMORPHS, 0, 0])

    # variations seem to be 9 bytes with first nibble variation # from 0 ~ 8
    # number of morph parameters starts at byte 7-bit 0 for 5-bits
    morphs = patch.settings.morphs

    for variation in xrange(NVARIATIONS):
      write_bits(4, variation)
      bitstream.seek_bit(4 + (6 * 8) + 4, 1)

      # collect all morph_maps of this variation into 1 array
      morph_maps = []
      for morph in morphs:
        morph_maps.extend(morph.maps[variation])
      def mod_param_index_cmp(a, b):
        return cmp(a.param.module.index, b.param.module.index)
      morph_maps.sort(mod_param_index_cmp)

      write_bits(8, len(morph_maps))
      for morph_map in morph_maps:
        values = [
            morph_map.param.module.area.index, morph_map.param.module.index,
            morph_map.param.index, morph_map.morph.index, morph_map.range,
        ] # range is signed
        bitstream.write_bitsa([2, 8, 7, 4, 8], values)
      write_bits(4, 0) # always 0

    bitstream.seek_bit(-4, 1) # remove last 4-bits
    return bitstream.tell_bit()
示例#2
0
文件: file.py 项目: msg/g2ools
  def parse(self, patch, data):
    bitstream = BitStream(data)
    read_bits = bitstream.read_bits

    nvariations, nmorphs, _, _ = bitstream.read_bitsa([8, 4, 10, 10])

    # variations seem to be 9 bytes with first nibble variation # from 0 ~ 8
    # number of morph parameters starts at byte 7-bit 0 for 5-bits
    morphs = patch.settings.morphs
    morphmaps = patch.settings.morphmaps

    for i in xrange(nvariations):
      variation = read_bits(4)
      bitstream.seek_bit(4 + (6*8) + 4, 1) # zeros

      nmorphs = read_bits(8)
      for j in xrange(nmorphs):
        morph_map       = MorphMap()
        area, index, param, morph = bitstream.read_bitsa([2, 8, 7, 4])
        morph_map.range = read_bits(8, 1)

        module = get_patch_area(patch, area).find_module(index)
        morph_map.param     = module.params[param]
        morph_map.variation = variation
        morph_map.morph     = morphs[morph-1]
        morph_map.morph.maps[variation].append(morph_map)
        morphmaps[variation].append(morph_map)

      reserved = read_bits(4) # always 0
示例#3
0
文件: file.py 项目: redpola/g2ools
    def parse(self, patch, data):
        bitstream = BitStream(data)
        read_bits = bitstream.read_bits

        nvariations, nmorphs, _, _ = bitstream.read_bitsa([8, 4, 10, 10])

        # variations seem to be 9 bytes with first nibble variation # from 0 ~ 8
        # number of morph parameters starts at byte 7-bit 0 for 5-bits
        morphs = patch.settings.morphs
        morphmaps = patch.settings.morphmaps

        for i in xrange(nvariations):
            variation = read_bits(4)
            bitstream.seek_bit(4 + (6 * 8) + 4, 1)  # zeros

            nmorphs = read_bits(8)
            for j in xrange(nmorphs):
                morph_map = MorphMap()
                area, index, param, morph = bitstream.read_bitsa([2, 8, 7, 4])
                morph_map.range = read_bits(8, 1)

                module = get_patch_area(patch, area).find_module(index)
                morph_map.param = module.params[param]
                morph_map.variation = variation
                morph_map.morph = morphs[morph - 1]
                morph_map.morph.maps[variation].append(morph_map)
                morphmaps[variation].append(morph_map)

            reserved = read_bits(4)  # always 0
示例#4
0
def cmd_settings(command):
  g2usb.send_message([CMD_SYS, 0x41, 0x35, 0x04])
  syst = g2usb.send_message([CMD_SYS, 0x41, 0x02])
  synthname, syst = parse_name(syst[4:])
  printf('%s:\n', synthname)
  bitstream = BitStream(syst)
  mode = bitstream.read_bits(1)
  bitstream.seek_bit(8*5)
  midis = bitstream.read_bitsa([8]*5)
  sysex, local, _, prgch = bitstream.read_bitsa([8, 1, 7, 8])
  _, clkse, clkre, _ = bitstream.read_bitsa([1, 1, 1, 5])
  _, tune_cent, _, tune_semi = bitstream.read_bitsa([8, 8, 16, 8])
  _, pedal_polarity, _, pedal_gain = bitstream.read_bitsa([8, 1, 7, 8])
  printf(' mode: %s\n', ['Patch', 'Performance'][mode])
  printf(' midi:\n')
  printf('  slots: a:%d b:%d c:%d d:%d glob:%d\n', *midis)
  printf('  sysex: %d\n', sysex+1)
  printf('  local: %s\n', ['off','on'][local])
  printf('  prgch: %s\n', ['off','send','recv','send/recv'][prgch])
  printf('  clkse: %s\n', ['on','off'][clkse])
  printf('  clkre: %s\n', ['on','off'][clkre])
  printf(' tune semi: %d\n', struct.unpack('b',chr(tune_semi))[0])
  printf(' tune cent: %d\n', struct.unpack('b',chr(tune_cent))[0])
  printf(' pedal polarity: %s\n', ['open','closed'][pedal_polarity])
  printf(' pedal gain: %.2f\n', 1.0 + 0.5*pedal_gain/32)
  sels = g2usb.send_message([CMD_SYS, 0x41, 0x81])
  data = g2usb.send_message([CMD_SYS, sels[2], 0x10])
  perfname, data = parse_name(data[4:])
  bitstream = BitStream(data, 8*4)
  if mode:
    printf('Performance: %s\n', perfname)
  else:
    printf('Patches: %s\n', perfname)
  _, focus, _ = bitstream.read_bitsa([4, 2, 2])
  range_enable, bpm, split, clock = bitstream.read_bitsa([8, 8, 8, 8])
  printf(' focus: %s\n', 'abcd'[focus])
  printf(' range enable: %s\n', ['off','on'][range_enable])
  printf(' master clock: %d BPM: %s\n', bpm, ['stop','run'][clock])
  printf(' kb split: %s\n', ['off','on'][split])
  data = data[11:]
  for slot in range(4):
    name, data = parse_name(data)
    active, key, hold, bank, patch, low, high = data[:7]
    printf(' slot %s: %d:%d "%-16s"\n', 'abcd'[slot], bank+1, patch+1, name)
    printf('  active: %-3s, ', ['off','on'][active])
    printf('key: %-3s, ', ['off','on'][key])
    printf('hold: %-3s, ', ['off','on'][hold])
    printf('range: %d-%d\n', low, high)
    data = data[10:]
  return 0
示例#5
0
文件: file.py 项目: redpola/g2ools
    def format(self, patch, data):
        bitstream = BitStream(data)
        write_bits = bitstream.write_bits

        bitstream.write_bitsa([8, 4, 10, 10], [NVARIATIONS, NMORPHS, 0, 0])

        # variations seem to be 9 bytes with first nibble variation # from 0 ~ 8
        # number of morph parameters starts at byte 7-bit 0 for 5-bits
        morphs = patch.settings.morphs

        for variation in xrange(NVARIATIONS):
            write_bits(4, variation)
            bitstream.seek_bit(4 + (6 * 8) + 4, 1)

            # collect all morph_maps of this variation into 1 array
            morph_maps = []
            for morph in morphs:
                morph_maps.extend(morph.maps[variation])

            def mod_param_index_cmp(a, b):
                return cmp(a.param.module.index, b.param.module.index)

            morph_maps.sort(mod_param_index_cmp)

            write_bits(8, len(morph_maps))
            for morph_map in morph_maps:
                values = [
                    morph_map.param.module.area.index,
                    morph_map.param.module.index,
                    morph_map.param.index,
                    morph_map.morph.index,
                    morph_map.range,
                ]  # range is signed
                bitstream.write_bitsa([2, 8, 7, 4, 8], values)
            write_bits(4, 0)  # always 0

        bitstream.seek_bit(-4, 1)  # remove last 4-bits
        return bitstream.tell_bit()