Do I need to number folders and songs to access via midi?

I have no numbers attached to any songs or folders as yet…to access thee via MIDI, would I need to number every folder, and then number every song in a folder?

  • If you are going to use the MIDI Maestro as your controller (and even if you aren’t), you might benefit from reading the MIDI Maestro Manual MIDI Maestro User Manual
  • Another reference you will need is the MIDI Commands (BeatBuddy tab) MIDI Commands

Hey there,

No, the folders are automatically recallable via MIDI based on their location, as long as you send the right command this will work out of the box

Check out this post for more info and maybe check out the BeatBuddy Manual

Thanks - but I think you have misunderstood…I am sending MIDI data from an external app on the iPad…I can preset the MSB/LSB RPN, NRPN and any other MIDI CC data in the chart app so it sends (via BT) to the BB when a chart is loaded.

For some reason (past experience way back when!!) I thought one needed to number songs and folders to achieve this…IIRC I needed to otherwise it did not work. BB firmware has changed a bit since then, sp maybe that has changed.

Thanks, but not talking about using Aeros or Maestro…sorry should have made that clearer.
I am aware the MIDI data is available in the manuals, thanks!

Info for all three products is available! Even for the BeatBuddy on its own :slight_smile:

The folders and songs are numbered by their “location”… if you want the 5th song in the 3rd folder, you send: 0 5 3

The only problem is that if you move the folders around, that same song may no longer be the 3rd folder, 5th song. With a bit of organizing though, it’s a solvable problem. BB lets you put up to 100 songs in a folder, i believe, and midi allows something like 127. Once you get so many songs and can access them via midi, you’ll no longer just scroll around for songs as often, so the organization can be different.

Yes thanks…I will eventually get all of them accessed via midi commands from the chart reader app, and linked to song charts…but THAT is a work in progress haha!

Here is a quick java class to search a SONGS dir, and create a BandHelper MIDI Prefix import. Should be easy to convert to a bash or python script is someone didnt want to mess with java. I have a file of midi controls for my line6 M9 pedal, and the BB command midi, etc, that I add to the import, so those can be ignored as well.

`
package com.lunabell.bbfm.tool;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.List;

@Slf4j
public class MakeMidiImport {

private static final String songRoot = "/Users/aashideacon/Box Sync/bb/BBWorkspaceNew/newbbstuff/BeatBuddy Default Content 2.1 - Project/SONGS/";
private static final Path outfile = Path.of("/Users/aashideacon/Box Sync/bb/bbmidi/bbMidiImport.txt");
private static final String m9file = "/Users/aashideacon/Box Sync/bb/bbmidi/midiM9.txt";
private static final String bbcmdfile = "/Users/aashideacon/Box Sync/bb/bbmidi/midiBBCtrl.txt";

public static void main(String... arg) {
    writeSmallFileAsString("", String.valueOf(outfile));
    appendSmallFileBinary(readSmallFileAsString(Path.of(m9file)).getBytes(), outfile);
    appendSmallFileBinary(readSmallFileAsString(Path.of(bbcmdfile)).getBytes(), outfile);
    List<String> folderLines = readSmallFileAsString(Path.of(songRoot + "CONFIG.CSV")).lines().toList();
    folderLines.forEach(folderLine -> {
        List<String> folder = parseConfigLine(folderLine);
        List<String> songLines = readSmallFileAsString(Path.of(songRoot + folder.get(0) + "/" + "CONFIG.CSV")).lines().toList();
        songLines.forEach(songLine -> {
            List<String> song = parseConfigLine(songLine);
            //log.info("folder --> 1:'{}', 2:'{}', 3:'{}'  song --> 1:'{}', 2:'{}', 3:'{}'", folder.get(0), folder.get(1), folder.get(2), song.get(0), song.get(1), song.get(2));
            String title = Integer.parseInt(folder.get(1)) > 30 ? song.get(2) : ""; // first 30 folders are default beats, not songs
            String out = song.get(2)+"\tBeatbuddy|0|"+folder.get(1)+"|"+song.get(1)+"\t\t\t\t"+title+"\n";
            appendSmallFileBinary(out.getBytes(), outfile);
        });
    });
}

/*

Column 1: MIDI preset name
Column 2: MIDI program changes
Column 3: MIDI control changes
Column 4: MIDI raw data device
Column 5: MIDI raw data hex code
Column 6: Song title
*/

// utility methods:
private static List<String> parseConfigLine(String configLine) {
    List<String> configParts = new ArrayList<>();
    String[] filename = configLine.split(",");
    if (filename.length>1) {
        int spacePos = filename[1].indexOf(' ');
        if (spacePos>-1) {
            configParts.add(filename[0]);
            configParts.add(filename[1].substring(0, spacePos-1));
            String name = filename[1].substring(spacePos+1);
            configParts.add(name.split("\t")[0]);
        } else {
            log.error("'{}' is not a valid config line.", filename[1]);
        }
    }
    return configParts;
}

@SneakyThrows private static String readSmallFileAsString(Path path) {
    return new String(Files.readAllBytes(path));
}

@SneakyThrows private static void writeSmallFileAsString(String contents, String path) {
    Files.write(Path.of(path), contents.getBytes());
}

@SneakyThrows private static void appendSmallFileBinary(byte[] bytes, Path path) {
    Files.write(path, bytes, StandardOpenOption.APPEND);
}

}
`

BBFF Editor now shows the MIDI CC and Program Change information for every song in your library which makes this process a lot easier.

1 Like