Merge branch 'main' into tx812-performance

pull/884/head
probonopd 2 weeks ago committed by GitHub
commit 8f586b6234
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 10
      .github/workflows/build.yml
  2. 5
      src/mididevice.cpp
  3. 81
      src/patches/dx7note.patch
  4. 16
      src/performanceconfig.cpp
  5. 4
      updater.py

@ -39,6 +39,11 @@ jobs:
wget -q https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
tar xf gcc-arm-10.3-2021.07-x86_64-aarch64-none-elf.tar.xz
# Patch Synth_Dexed until the fix is merged upstream; see https://github.com/probonopd/MiniDexed/issues/889
- name: Patch Synth_Dexed
run: |
( cd Synth_Dexed ; patch -p1 < ../src/patches/dx7note.patch )
- name: Build for Raspberry Pi 5 (64-bit)
run: |
set -ex
@ -124,6 +129,11 @@ jobs:
wget -q https://developer.arm.com/-/media/Files/downloads/gnu-a/10.3-2021.07/binrel/gcc-arm-10.3-2021.07-x86_64-arm-none-eabi.tar.xz
tar xf gcc-arm-10.3-2021.07-x86_64-arm-none-eabi.tar.xz
# Patch Synth_Dexed until the fix is merged upstream; see https://github.com/probonopd/MiniDexed/issues/889
- name: Patch Synth_Dexed
run: |
( cd Synth_Dexed ; patch -p1 < ../src/patches/dx7note.patch )
- name: Build for Raspberry Pi 2 (32-bit)
run: |
set -ex

@ -777,6 +777,11 @@ void CMIDIDevice::HandleSystemExclusive(const uint8_t* pMessage, const size_t nL
//TODO: add code for storing a bank bulk upload
LOGNOTE("Currently code for storing a bulk bank upload is missing!");
break;
case 455:
// Parameter 155 + 300 added by Synth_Dexed = 455
LOGDBG("Operators enabled: %d%d%d%d%d%d", (pMessage[5] & 0x20) ? 1 : 0, (pMessage[5] & 0x10) ? 1 : 0, (pMessage[5] & 0x08) ? 1 : 0, (pMessage[5] & 0x04) ? 1 : 0, (pMessage[5] & 0x02) ? 1 : 0, (pMessage[5] & 0x01) ? 1 : 0);
m_pSynthesizer->setOPMask(pMessage[5], nTG);
break;
default:
if(sysex_return >= 300 && sysex_return < 500)
{

@ -0,0 +1,81 @@
diff --git a/src/dx7note.cpp b/src/dx7note.cpp
index b5ed6db..2a07836 100644
--- a/src/dx7note.cpp
+++ b/src/dx7note.cpp
@@ -184,11 +184,14 @@ void Dx7Note::init(const uint8_t patch[156], int midinote, int velocity, int src
int32_t freq = osc_freq(midinote, mode, coarse, fine, detune);
opMode[op] = mode;
basepitch_[op] = freq;
- porta_curpitch_[op] = freq;
ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3];
- if (porta >= 0)
+ // Always set porta_curpitch_ to basepitch_ if no portamento transition
+ if (porta < 0 || porta >= 128 || srcnote == midinote) {
+ porta_curpitch_[op] = freq;
+ } else {
porta_curpitch_[op] = osc_freq(srcnote, mode, coarse, fine, detune);
+ }
}
for (int i = 0; i < 4; i++) {
rates[i] = patch[126 + i];
@@ -253,13 +256,17 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
int32_t basepitch = basepitch_[op];
- if ( opMode[op] )
+ if (opMode[op]) {
params_[op].freq = Freqlut::lookup(basepitch + pitch_base);
- else {
- if ( porta_rateindex_ >= 0 ) {
- basepitch = porta_curpitch_[op];
- if ( porta_gliss_ )
- basepitch = logfreq_round2semi(basepitch);
+ } else {
+ // If portamento is enabled but there is no transition, use basepitch_
+ if (porta_rateindex_ >= 0) {
+ if (porta_curpitch_[op] != basepitch_[op]) {
+ basepitch = porta_curpitch_[op];
+ if (porta_gliss_)
+ basepitch = logfreq_round2semi(basepitch);
+ }
+ // else: no transition, use basepitch_ as is
}
params_[op].freq = Freqlut::lookup(basepitch + pitch_mod);
}
@@ -280,7 +287,7 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
// ==== PORTAMENTO ====
int porta = porta_rateindex_;
- if ( porta >= 0 ) {
+ if (porta >= 0) {
int32_t rate = Porta::rates[porta];
for (int op = 0; op < 6; op++) {
int32_t cur = porta_curpitch_[op];
@@ -289,7 +296,8 @@ void Dx7Note::compute(int32_t *buf, int32_t lfo_val, int32_t lfo_delay, const Co
bool going_up = cur < dst;
int32_t newpitch = cur + (going_up ? +rate : -rate);
- if ( going_up ? (cur > dst) : (cur < dst) )
+ // Clamp to destination if we would overshoot/undershoot
+ if ((going_up && newpitch > dst) || (!going_up && newpitch < dst))
newpitch = dst;
porta_curpitch_[op] = newpitch;
@@ -317,10 +325,15 @@ void Dx7Note::update(const uint8_t patch[156], int midinote, int velocity, int p
int detune = patch[off + 20];
int32_t freq = osc_freq(midinote, mode, coarse, fine, detune);
basepitch_[op] = freq;
- porta_curpitch_[op] = freq;
ampmodsens_[op] = ampmodsenstab[patch[off + 14] & 3];
opMode[op] = mode;
+ // Always set porta_curpitch_ to basepitch_ if no portamento transition
+ if (porta < 0 || porta >= 128) {
+ porta_curpitch_[op] = freq;
+ }
+ // else: porta_curpitch_ will be handled by portamento logic
+
for (int i = 0; i < 4; i++) {
rates[i] = patch[off + i];
levels[i] = patch[off + 4 + i];

@ -33,7 +33,6 @@ LOGMODULE ("Performance");
#define PERFORMANCE_DIR "performance"
#define DEFAULT_PERFORMANCE_FILENAME "performance.ini"
#define DEFAULT_PERFORMANCE_NAME "Default"
#define DEFAULT_PERFORMANCE_BANK_NAME "Default"
CPerformanceConfig::CPerformanceConfig (FATFS *pFileSystem)
: m_Properties (DEFAULT_PERFORMANCE_FILENAME, pFileSystem)
@ -1168,10 +1167,6 @@ bool CPerformanceConfig::ListPerformanceBanks()
}
unsigned nNumBanks = 0;
// Add in the default performance directory as the first bank
m_PerformanceBankName[0] = DEFAULT_PERFORMANCE_BANK_NAME;
nNumBanks = 1;
m_nLastPerformanceBank = 0;
// List directories with names in format 01_Perf Bank Name
@ -1277,10 +1272,7 @@ std::string CPerformanceConfig::GetPerformanceBankName(unsigned nBankID)
{
return m_PerformanceBankName[nBankID];
}
else
{
return DEFAULT_PERFORMANCE_BANK_NAME;
}
return "";
}
std::string CPerformanceConfig::AddPerformanceBankDirName(unsigned nBankID)
@ -1290,12 +1282,6 @@ std::string CPerformanceConfig::AddPerformanceBankDirName(unsigned nBankID)
{
// Performance Banks directories in format "001_Bank Name"
std::string Index;
if (nBankID == 0)
{
// Legacy: Bank 1 is the default performance directory
return "";
}
if (nBankID < 9)
{
Index = "00" + std::to_string(nBankID+1);

@ -1,5 +1,5 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Updater for MiniDexed

Loading…
Cancel
Save