From a00bf55eea334e80eb1e9569ddb1221df852a2e5 Mon Sep 17 00:00:00 2001 From: probonopd Date: Tue, 22 Feb 2022 08:34:52 +0100 Subject: [PATCH] Allow selecting the sound interface, thanks @rsta2 Using sounddev=sndpwm | sndi2s | sndhdmi in the file cmdline.txt https://github.com/probonopd/MiniDexed/issues/17#issuecomment-1047473012 --- Synth_Dexed | 2 +- src/kernel.cpp | 35 ++++++++++++++++++++++++++++++----- src/kernel.h | 12 +----------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/Synth_Dexed b/Synth_Dexed index 1399d8a..cdaf1f6 160000 --- a/Synth_Dexed +++ b/Synth_Dexed @@ -1 +1 @@ -Subproject commit 1399d8ace34d299c3c19819f91717198ea20ff09 +Subproject commit cdaf1f6cdeb38e9f5cfb6f2d8bb93d7933153ab6 diff --git a/src/kernel.cpp b/src/kernel.cpp index 717fdaa..effb7a4 100644 --- a/src/kernel.cpp +++ b/src/kernel.cpp @@ -4,6 +4,8 @@ #include "kernel.h" #include #include +#include +#include uint8_t fmpiano_sysex[156] = { 95, 29, 20, 50, 99, 95, 00, 00, 41, 00, 19, 00, 00, 03, 00, 06, 79, 00, 01, 00, 14, // OP6 eg_rate_1-4, level_1-4, kbd_lev_scl_brk_pt, kbd_lev_scl_lft_depth, kbd_lev_scl_rht_depth, kbd_lev_scl_lft_curve, kbd_lev_scl_rht_curve, kbd_rate_scaling, amp_mod_sensitivity, key_vel_sensitivity, operator_output_level, osc_mode, osc_freq_coarse, osc_freq_fine, osc_detune @@ -19,10 +21,12 @@ uint8_t fmpiano_sysex[156] = { 70, 77, 45, 80, 73, 65, 78, 79, 00, 00 // 10 * char for name ("DEFAULT ") }; // FM-Piano +LOGMODULE ("kernel"); + CKernel::CKernel (void) : CStdlibAppStdio ("minidexed"), m_I2CMaster (CMachineInfo::Get ()->GetDevice (DeviceI2CMaster), TRUE), - m_Dexed(16,SAMPLE_RATE,&mInterrupt, &m_I2CMaster) + m_pDexed (0) { mActLED.Blink (5); // show we are alive } @@ -38,7 +42,28 @@ bool CKernel::Initialize (void) return FALSE; } - if (!m_Dexed.Initialize ()) + // select the sound device + const char *pSoundDevice = mOptions.GetSoundDevice (); + if (strcmp (pSoundDevice, "sndi2s") == 0) + { + LOGNOTE ("I2S mode"); + + m_pDexed = new AudioSynthDexedI2S (16, SAMPLE_RATE, &mInterrupt, &m_I2CMaster); + } + else if (strcmp (pSoundDevice, "sndhdmi") == 0) + { + LOGNOTE ("HDMI mode"); + + m_pDexed = new AudioSynthDexedHDMI (16, SAMPLE_RATE, &mInterrupt); + } + else + { + LOGNOTE ("PWM mode"); + + m_pDexed = new AudioSynthDexedPWM (16, SAMPLE_RATE, &mInterrupt); + } + + if (!m_pDexed->Initialize ()) { return FALSE; } @@ -51,14 +76,14 @@ CStdlibApp::TShutdownMode CKernel::Run (void) std::cout << "Hello MiniDexed!\n"; std::cout << "Loading hardcoded fmpiano_sysex...\n"; - m_Dexed.loadVoiceParameters(fmpiano_sysex); - m_Dexed.setTranspose(24); + m_pDexed->loadVoiceParameters(fmpiano_sysex); + m_pDexed->setTranspose(24); while(42==42) { boolean bUpdated = mUSBHCI.UpdatePlugAndPlay (); - m_Dexed.Process(bUpdated); + m_pDexed->Process(bUpdated); } return ShutdownHalt; diff --git a/src/kernel.h b/src/kernel.h index b82f1d6..5d4aa56 100644 --- a/src/kernel.h +++ b/src/kernel.h @@ -5,17 +5,7 @@ #define _kernel_h #include "circle_stdlib_app.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include #include -#include #include "synth_dexed.h" enum TShutdownMode @@ -38,7 +28,7 @@ public: private: // do not change this order CI2CMaster m_I2CMaster; - AudioSynthDexed m_Dexed; + AudioSynthDexed *m_pDexed; }; #endif