-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.mm
78 lines (76 loc) · 1.74 KB
/
main.mm
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "Audio.h"
#include "ChannelManager.h"
#include "FMMain.h"
#include "Midi.h"
#include "Channel8.h"
#if defined(USE_METAL) || defined(USE_OPENCL)
#include "Util.h"
#endif
#ifndef DEF_N
#define DEF_N 64
#endif
int main(int argc, char *const *argv) {
int c, n = DEF_N, t = 1, p = 0;
#ifdef WIN32
if (argc < 2) {
fprintf(stderr, "Usage: fm_win <midi file>\n");
return 0;
}
int index = 1, multi = 0;
#else
while ((c = getopt(argc, argv, "n:pt:")) != -1) {
switch (c) {
case 'n':
sscanf(optarg, "%d", &n);
break;
case 'p':
p = 1;
break;
case 't':
sscanf(optarg, "%d", &t);
break;
}
}
if (argc <= optind) {
fprintf(stderr,
"Usage: %s [options] <midi file>\n"
"options:\n"
"\t-n <number> max. channel (default:%d)\n"
"\t-t <tone number> (default:1)\n"
"\t-p PSG mode\n"
, argv[0], DEF_N);
return 0;
}
int index = optind, multi = optind < argc - 1;
#endif
AudioSetup(FMMain::Callback);
gFMMain = new FMMain;
char s[16];
#if defined(WIN32) && _MSC_VER >= 1400
sprintf_s(s, "tone%d.bin", t % 10);
#else
sprintf(s, "tone%d.bin", t % 10);
#endif
if (gFMMain->LoadTone(s)) {
fprintf(stderr, "%s not found.\n", s);
return 1;
}
gFMMain->NewChannelManager(n);
Channel8::SetModulate(!p);
Operator8::SetWave(p);
gMidi = new Midi((double)MIDI_UNIT / FS);
do {
const char *path = argv[index];
if (multi) printf("%s\n", path);
if (gMidi->Prepare(path)) {
fprintf(stderr, "%s not found or not MIDI file.\n", path);
return 1;
}
FMMain::RequestPosition(-1.f);
} while (!gFMMain->MainLoop() && ++index < argc);
#if defined(USE_METAL) || defined(USE_OPENCL)
// MeasureTime<0>::Print(double(MIDI_UNIT) / FS);
// MeasureTime<1>::Print(double(MIDI_UNIT) / FS);
#endif
return 0;
}