aboutsummaryrefslogtreecommitdiff
path: root/tonedata
diff options
context:
space:
mode:
Diffstat (limited to 'tonedata')
-rw-r--r--tonedata/tonedata.c25
-rw-r--r--tonedata/tonedata.h26
2 files changed, 50 insertions, 1 deletions
diff --git a/tonedata/tonedata.c b/tonedata/tonedata.c
index 0d5daa6..874047b 100644
--- a/tonedata/tonedata.c
+++ b/tonedata/tonedata.c
@@ -100,6 +100,31 @@ void tonedata_ch_string(
ch->alg, ch->fb
);
break;
+ case FMPLAYER_TONEDATA_FMT_VOPM:
+ snprintf(buf, FMPLAYER_TONEDATA_STR_SIZE,
+ "@:%d\n"
+ "LFO: 0 0 0 0 0\n"
+ "CH: 64 %3d %3d 0 0 120 0\n"
+ "M1:%3d %3d %3d %3d %3d %3d %3d %3d %3d 0 0\n"
+ "C1:%3d %3d %3d %3d %3d %3d %3d %3d %3d 0 0\n"
+ "M2:%3d %3d %3d %3d %3d %3d %3d %3d %3d 0 0\n"
+ "C2:%3d %3d %3d %3d %3d %3d %3d %3d %3d 0 0",
+ tonenum,
+ ch->fb, ch->alg,
+ ch->slot[0].ar, ch->slot[0].dr, ch->slot[0].sr, ch->slot[0].rr,
+ ch->slot[0].sl, ch->slot[0].tl, ch->slot[0].ks, ch->slot[0].ml,
+ ch->slot[0].dt,
+ ch->slot[1].ar, ch->slot[1].dr, ch->slot[1].sr, ch->slot[1].rr,
+ ch->slot[1].sl, ch->slot[1].tl, ch->slot[1].ks, ch->slot[1].ml,
+ ch->slot[1].dt,
+ ch->slot[2].ar, ch->slot[2].dr, ch->slot[2].sr, ch->slot[2].rr,
+ ch->slot[2].sl, ch->slot[2].tl, ch->slot[2].ks, ch->slot[2].ml,
+ ch->slot[2].dt,
+ ch->slot[3].ar, ch->slot[3].dr, ch->slot[3].sr, ch->slot[3].rr,
+ ch->slot[3].sl, ch->slot[3].tl, ch->slot[3].ks, ch->slot[3].ml,
+ ch->slot[3].dt
+ );
+ break;
default:
buf[0] = 0;
break;
diff --git a/tonedata/tonedata.h b/tonedata/tonedata.h
index c8dd03c..5a7cd12 100644
--- a/tonedata/tonedata.h
+++ b/tonedata/tonedata.h
@@ -2,6 +2,7 @@
#define MYON_FMPLAYER_TONEDATA_H_INCLUDED
#include <stdint.h>
+#include <stdbool.h>
struct fmplayer_tonedata {
struct fmplayer_tonedata_channel {
@@ -22,6 +23,28 @@ struct fmplayer_tonedata {
} ch[6];
};
+static inline bool fmplayer_tonedata_channel_isequal(
+ const struct fmplayer_tonedata_channel *a,
+ const struct fmplayer_tonedata_channel *b) {
+ if (a->fb != b->fb) return false;
+ if (a->alg != b->alg) return false;
+ for (int s = 0; s < 4; s++) {
+ const struct fmplayer_tonedata_slot *sa = &a->slot[s];
+ const struct fmplayer_tonedata_slot *sb = &b->slot[s];
+ if (sa->ar != sb->ar) return false;
+ if (sa->dr != sb->dr) return false;
+ if (sa->sr != sb->sr) return false;
+ if (sa->rr != sb->rr) return false;
+ if (sa->sl != sb->sl) return false;
+ if (sa->tl != sb->tl) return false;
+ if (sa->ks != sb->ks) return false;
+ if (sa->ml != sb->ml) return false;
+ if (sa->dt != sb->dt) return false;
+ if (sa->ams != sb->ams) return false;
+ }
+ return true;
+}
+
struct opna;
void tonedata_from_opna(
struct fmplayer_tonedata *tonedata,
@@ -30,7 +53,8 @@ void tonedata_from_opna(
enum fmplayer_tonedata_format {
FMPLAYER_TONEDATA_FMT_PMD,
- FMPLAYER_TONEDATA_FMT_FMP
+ FMPLAYER_TONEDATA_FMT_FMP,
+ FMPLAYER_TONEDATA_FMT_VOPM,
};
enum {