From 9b478615e7f0cd73c360fd289b05db52b5f730f1 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Wed, 16 May 2018 01:31:18 +0200 Subject: storing adldata and adlinsdata in unified structures --- src/adldata.hh | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/adldata.hh') diff --git a/src/adldata.hh b/src/adldata.hh index e9ff00b..20cbd21 100644 --- a/src/adldata.hh +++ b/src/adldata.hh @@ -24,8 +24,16 @@ #ifndef ADLDATA_H #define ADLDATA_H +#include #include +#pragma pack(push, 1) +#define ADLDATA_BYTE_COMPARABLE(T) \ + inline bool operator==(const T &a, const T &b) \ + { return !memcmp(&a, &b, sizeof(T)); } \ + inline bool operator!=(const T &a, const T &b) \ + { return !operator==(a, b); } + extern const struct adldata { uint32_t modulator_E862, carrier_E862; // See below @@ -34,6 +42,8 @@ extern const struct adldata int8_t finetune; } adl[]; +ADLDATA_BYTE_COMPARABLE(struct adldata); +enum { adlDefaultNumber = 189 }; extern const struct adlinsdata { @@ -46,10 +56,30 @@ extern const struct adlinsdata uint16_t ms_sound_koff; double voice2_fine_tune; } adlins[]; +ADLDATA_BYTE_COMPARABLE(struct adlinsdata); int maxAdlBanks(); extern const unsigned short banks[][256]; extern const char* const banknames[]; +/** + * @brief Instrument data with operators included + */ +struct adlinsdata2 +{ + adldata adl[2]; + uint8_t tone; + uint8_t flags; + uint16_t ms_sound_kon; // Number of milliseconds it produces sound; + uint16_t ms_sound_koff; + double voice2_fine_tune; + adlinsdata2() {} + explicit adlinsdata2(const adlinsdata &d); +}; +ADLDATA_BYTE_COMPARABLE(struct adlinsdata2); + +#undef ADLDATA_BYTE_COMPARABLE +#pragma pack(pop) + /** * @brief Bank global setup */ @@ -62,4 +92,16 @@ extern const struct AdlBankSetup bool scaleModulators; } adlbanksetup[]; +/** + * @brief Conversion of storage formats + */ +inline adlinsdata2::adlinsdata2(const adlinsdata &d) + : tone(d.tone), flags(d.flags), + ms_sound_kon(d.ms_sound_kon), ms_sound_koff(d.ms_sound_koff), + voice2_fine_tune(d.voice2_fine_tune) +{ + adl[0] = ::adl[d.adlno1]; + adl[1] = ::adl[d.adlno2]; +} + #endif //ADLDATA_H -- cgit v1.2.3 From f1bad3e1e3f64f19f3c057263be1a022fb269ca2 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Thu, 17 May 2018 01:38:22 +0300 Subject: Fixed a warning --- src/adldata.hh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/adldata.hh') diff --git a/src/adldata.hh b/src/adldata.hh index 20cbd21..ed0c8b4 100644 --- a/src/adldata.hh +++ b/src/adldata.hh @@ -42,7 +42,7 @@ extern const struct adldata int8_t finetune; } adl[]; -ADLDATA_BYTE_COMPARABLE(struct adldata); +ADLDATA_BYTE_COMPARABLE(struct adldata) enum { adlDefaultNumber = 189 }; extern const struct adlinsdata @@ -56,7 +56,7 @@ extern const struct adlinsdata uint16_t ms_sound_koff; double voice2_fine_tune; } adlins[]; -ADLDATA_BYTE_COMPARABLE(struct adlinsdata); +ADLDATA_BYTE_COMPARABLE(struct adlinsdata) int maxAdlBanks(); extern const unsigned short banks[][256]; extern const char* const banknames[]; @@ -75,7 +75,7 @@ struct adlinsdata2 adlinsdata2() {} explicit adlinsdata2(const adlinsdata &d); }; -ADLDATA_BYTE_COMPARABLE(struct adlinsdata2); +ADLDATA_BYTE_COMPARABLE(struct adlinsdata2) #undef ADLDATA_BYTE_COMPARABLE #pragma pack(pop) -- cgit v1.2.3 From bb4797ee68c0f12018196d3ee8caddcdcad9fe38 Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Sat, 19 May 2018 22:33:37 +0300 Subject: Works and fixes - Fixed an incorrect calculation of 4-op channels and choosing 4-op channels for 2-op only banks - Resolved trouble with automatically chosen flags because of internal confusion --- src/adldata.hh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/adldata.hh') diff --git a/src/adldata.hh b/src/adldata.hh index ed0c8b4..65fd6bd 100644 --- a/src/adldata.hh +++ b/src/adldata.hh @@ -47,14 +47,14 @@ enum { adlDefaultNumber = 189 }; extern const struct adlinsdata { - enum { Flag_Pseudo4op = 0x01, Flag_NoSound = 0x02 }; + enum { Flag_Pseudo4op = 0x01, Flag_NoSound = 0x02, Flag_Real4op = 0x04 }; uint16_t adlno1, adlno2; uint8_t tone; uint8_t flags; uint16_t ms_sound_kon; // Number of milliseconds it produces sound; uint16_t ms_sound_koff; - double voice2_fine_tune; + double voice2_fine_tune; } adlins[]; ADLDATA_BYTE_COMPARABLE(struct adlinsdata) int maxAdlBanks(); @@ -71,7 +71,7 @@ struct adlinsdata2 uint8_t flags; uint16_t ms_sound_kon; // Number of milliseconds it produces sound; uint16_t ms_sound_koff; - double voice2_fine_tune; + double voice2_fine_tune; adlinsdata2() {} explicit adlinsdata2(const adlinsdata &d); }; -- cgit v1.2.3 From d7b9439df5d09d121c55a15f2bc25c360deeebe0 Mon Sep 17 00:00:00 2001 From: JP Cimalando Date: Thu, 17 May 2018 21:33:28 +0200 Subject: dynamic instrument API --- src/adldata.hh | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/adldata.hh') diff --git a/src/adldata.hh b/src/adldata.hh index 65fd6bd..2ac469f 100644 --- a/src/adldata.hh +++ b/src/adldata.hh @@ -104,4 +104,14 @@ inline adlinsdata2::adlinsdata2(const adlinsdata &d) adl[1] = ::adl[d.adlno2]; } +/** + * @brief Convert external instrument to internal instrument + */ +void cvt_ADLI_to_FMIns(adlinsdata2 &dst, const struct ADL_Instrument &src); + +/** + * @brief Convert internal instrument to external instrument + */ +void cvt_FMIns_to_ADLI(struct ADL_Instrument &dst, const adlinsdata2 &src); + #endif //ADLDATA_H -- cgit v1.2.3 From 70c83caace9911dc5d8b80c1653c96b073f88e4a Mon Sep 17 00:00:00 2001 From: Vitaly Novichkov Date: Fri, 15 Jun 2018 01:37:43 +0300 Subject: Give more live to very long sustaining notes --- src/adldata.hh | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/adldata.hh') diff --git a/src/adldata.hh b/src/adldata.hh index 2ac469f..104db82 100644 --- a/src/adldata.hh +++ b/src/adldata.hh @@ -61,6 +61,8 @@ int maxAdlBanks(); extern const unsigned short banks[][256]; extern const char* const banknames[]; +enum { adlNoteOnMaxTime = 40000 }; + /** * @brief Instrument data with operators included */ -- cgit v1.2.3