aboutsummaryrefslogtreecommitdiff
path: root/sf-compile/sf-compile.cpp
blob: aab971bd4e32b79b86f63692108f816987b6f8b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#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, 200000);
 
  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" // cheat 
            << " .outSampleRate= " << f->outSampleRate << ",\n"
            << " .globalGainDB= " << f->globalGainDB << ",\n"
    ;
  
 
  std::cout << "};\n";
 
  TSF_FREE(f->fontSamples);
}