diff options
author | Wohlstand <admin@wohlnet.ru> | 2023-05-26 03:43:01 +0300 |
---|---|---|
committer | Wohlstand <admin@wohlnet.ru> | 2023-05-26 03:43:01 +0300 |
commit | f742d3eca4a72af940da7399d69e0b93c0d981f5 (patch) | |
tree | fccc624aa1b1dfcf3bed4bce09e7fead94f8946a /src/chips/opal/opal-pan.diff | |
parent | d9f55120fb939b3b45af8929ad09243b3b09c08e (diff) | |
download | libADLMIDI-f742d3eca4a72af940da7399d69e0b93c0d981f5.tar.gz libADLMIDI-f742d3eca4a72af940da7399d69e0b93c0d981f5.tar.bz2 libADLMIDI-f742d3eca4a72af940da7399d69e0b93c0d981f5.zip |
Opal: Convert entire Opal code into the Pure C
Diffstat (limited to 'src/chips/opal/opal-pan.diff')
-rw-r--r-- | src/chips/opal/opal-pan.diff | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/src/chips/opal/opal-pan.diff b/src/chips/opal/opal-pan.diff deleted file mode 100644 index a00a9fc..0000000 --- a/src/chips/opal/opal-pan.diff +++ /dev/null @@ -1,131 +0,0 @@ ---- opal.cpp.orig 2019-02-23 20:32:00.477658789 +0100 -+++ opal.cpp 2019-02-23 20:46:36.745113958 +0100 -@@ -13,6 +13,7 @@ - - Percussion mode - - */ -+#define OPAL_HAVE_SOFT_PANNING 1 /* libADLMIDI */ - - - -@@ -133,6 +134,7 @@ - void SetOctave(uint16_t oct); - void SetLeftEnable(bool on); - void SetRightEnable(bool on); -+ void SetPan(uint8_t pan); - void SetFeedback(uint16_t val); - void SetModulationType(uint16_t type); - -@@ -158,6 +160,7 @@ - Channel * ChannelPair; - bool Enable; - bool LeftEnable, RightEnable; -+ uint16_t LeftPan, RightPan; - }; - - public: -@@ -166,6 +169,7 @@ - - void SetSampleRate(int sample_rate); - void Port(uint16_t reg_num, uint8_t val); -+ void Pan(uint16_t reg_num, uint8_t pan); - void Sample(int16_t *left, int16_t *right); - - protected: -@@ -191,6 +195,7 @@ - static const uint16_t RateTables[4][8]; - static const uint16_t ExpTable[256]; - static const uint16_t LogSinTable[256]; -+ static const uint16_t PanLawTable[128]; - }; - //-------------------------------------------------------------------------------------------------- - const uint16_t Opal::RateTables[4][8] = { -@@ -237,6 +242,28 @@ - 7, 7, 6, 6, 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, - 2, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, - }; -+//-------------------------------------------------------------------------------------------------- -+const uint16_t Opal::PanLawTable[128] = -+{ -+ 65535, 65529, 65514, 65489, 65454, 65409, 65354, 65289, -+ 65214, 65129, 65034, 64929, 64814, 64689, 64554, 64410, -+ 64255, 64091, 63917, 63733, 63540, 63336, 63123, 62901, -+ 62668, 62426, 62175, 61914, 61644, 61364, 61075, 60776, -+ 60468, 60151, 59825, 59489, 59145, 58791, 58428, 58057, -+ 57676, 57287, 56889, 56482, 56067, 55643, 55211, 54770, -+ 54320, 53863, 53397, 52923, 52441, 51951, 51453, 50947, -+ 50433, 49912, 49383, 48846, 48302, 47750, 47191, -+ 46340, // Center left -+ 46340, // Center right -+ 45472, 44885, 44291, 43690, 43083, 42469, 41848, 41221, -+ 40588, 39948, 39303, 38651, 37994, 37330, 36661, 35986, -+ 35306, 34621, 33930, 33234, 32533, 31827, 31116, 30400, -+ 29680, 28955, 28225, 27492, 26754, 26012, 25266, 24516, -+ 23762, 23005, 22244, 21480, 20713, 19942, 19169, 18392, -+ 17613, 16831, 16046, 15259, 14469, 13678, 12884, 12088, -+ 11291, 10492, 9691, 8888, 8085, 7280, 6473, 5666, -+ 4858, 4050, 3240, 2431, 1620, 810, 0 -+}; - - - -@@ -342,6 +369,10 @@ - for (int i = 0; i < NumOperators; i++) - Op[i].ComputeRates(); - -+ // Initialise channel panning at center. -+ for (int i = 0; i < NumChannels; i++) -+ Chan[i].SetPan(64); -+ - SetSampleRate(sample_rate); - } - -@@ -533,6 +564,19 @@ - - - //================================================================================================== -+// Set panning on the channel designated by the register number. -+// This is extended functionality. -+//================================================================================================== -+void Opal::Pan(uint16_t reg_num, uint8_t pan) -+{ -+ uint8_t high = (reg_num >> 8) & 1; -+ uint8_t regm = reg_num & 0xff; -+ Chan[9 * high + (regm & 0x0f)].SetPan(pan); -+} -+ -+ -+ -+//================================================================================================== - // Generate sample. Every time you call this you will get two signed 16-bit samples (one for each - // stereo channel) which will sound correct when played back at the sample rate given when the - // class was constructed. -@@ -727,6 +771,9 @@ - - left = LeftEnable ? out : 0; - right = RightEnable ? out : 0; -+ -+ left = left * LeftPan / 65536; -+ right = right * RightPan / 65536; - } - - -@@ -793,6 +840,18 @@ - } - - -+ -+//================================================================================================== -+// Pan the channel to the position given. -+//================================================================================================== -+void Opal::Channel::SetPan(uint8_t pan) -+{ -+ pan &= 127; -+ LeftPan = PanLawTable[pan]; -+ RightPan = PanLawTable[127 - pan]; -+} -+ -+ - - //================================================================================================== - // Set the channel feedback amount. |