#include <iostream>
#include <string>
#define TSF_IMPLEMENTATION
#include "../tsf/tsf.h"
void dumpChars(std::ostream& os, const char *ptr,size_t size) {
os << "{" << std::hex;
for (size_t i=0;i<size;++i) {
os << "0x" << (int)ptr[i] << ",";
if (i%16 == 15) os << "\n";
}
os << std::dec << "}";
}
int main() {
tsf* f = tsf_load_filename("../tsf/examples/florestan-subset.sf2");
tsf_set_output(f, TSF_MONO, 20000, 0);
struct tsf_preset *preset, *presetEnd;
std::cout << "tsf_preset g_presets[] = PROGMEM {\n";
for (preset = f->presets, presetEnd = preset + f->presetNum; preset != presetEnd; preset++) {
std::cout << " {\n"
<< " .presetName= ";
dumpChars(std::cout,preset->presetName,20);
std::cout << ",\n"
<< " .preset= " << preset->preset << ",\n"
<< " .bank= " << preset->bank << ",\n"
<< " .regionNum= " << preset->regionNum << ",\n"
<< " },\n"
;
}
std::cout << "};\n";
std::cout << "tsf theSoundFont PROGMEM = {\n"
<< " .presets= g_presets,\n"
<< " .fontSamples = " << f->fontSamples << ",\n"
<< " .voices= 0,\n"
<< " .channels= 0,\n"
<< " .outputSamples= 0,\n"
<< " .presetNum= " << f->presetNum << ",\n"
<< " .voiceNum= " << f->voiceNum << ",\n"
<< " .maxVoiceNum= " << f->maxVoiceNum << ",\n"
<< " .outputSampleSize= " << f->outputSampleSize << ",\n"
<< " .voicePlayIndex= " << f->voicePlayIndex << ",\n"
<< " .outputmode= TSF_MONO,\n"
<< " .outSampleRate= " << f->outSampleRate << ",\n"
<< " .globalGainDB= " << f->globalGainDB << ",\n"
;
std::cout << "};\n";
TSF_FREE(f->fontSamples);
}