From 8aa080d588ee03357c4d65c653452e5713126415 Mon Sep 17 00:00:00 2001 From: Thor Johansen Date: Sat, 27 Apr 2024 10:16:43 +0200 Subject: [PATCH] Remove all GUI code --- .gitignore | 4 +- .gitmodules | 3 - CMakeLists.txt | 30 +---- include/ccslider.h | 10 -- include/synthapp.h | 28 ---- include/synthframe.h | 96 -------------- lib/wxWidgets | 1 - src/ccslider.cpp | 8 -- src/synthapp.cpp | 64 +++++----- src/synthframe.cpp | 295 ------------------------------------------- 10 files changed, 40 insertions(+), 499 deletions(-) delete mode 100644 include/ccslider.h delete mode 100644 include/synthapp.h delete mode 100644 include/synthframe.h delete mode 160000 lib/wxWidgets delete mode 100644 src/ccslider.cpp delete mode 100644 src/synthframe.cpp diff --git a/.gitignore b/.gitignore index 6b7a65d..61ead6e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,11 @@ build/ .DS_Store +*.swp +*.a CMakeCache.txt CMakeFiles/ Launch_main_*/ *.cmake main Makefile -.vs/ \ No newline at end of file +.vs/ diff --git a/.gitmodules b/.gitmodules index a209feb..241cce6 100644 --- a/.gitmodules +++ b/.gitmodules @@ -4,9 +4,6 @@ [submodule "lib/portmidi"] path = lib/portmidi url = https://github.com/PortMidi/portmidi -[submodule "lib/wxWidgets"] - path = lib/wxWidgets - url = https://github.com/wxWidgets/wxWidgets [submodule "lib/synth"] path = lib/synth url = git@saga.berserker.town:klang-modular/libsynth.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 3d06205..8273f89 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,48 +3,24 @@ project(synthapp) set(CMAKE_CXX_STANDARD 20) set(BUILD_SHARED_LIBS OFF) -if(MSVC) - set(CMAKE_CXX_FLAGS_DEBUG "/DEBUG:FASTLINK /fp:fast") - set(CMAKE_CXX_FLAGS_RELEASE "/O2 /fp:fast /DNDEBUG") -else() - set(CMAKE_CXX_FLAGS_DEBUG "-g -ffast-math") - set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -DNDEBUG") -endif() - -if(WIN32) - option(PA_USE_ASIO "" ON) - option(PA_USE_WDMKS "" OFF) - option(PA_USE_WDMKS_DEVICE_INFO "" OFF) -endif() +set(CMAKE_CXX_FLAGS_DEBUG "-g -ffast-math") +set(CMAKE_CXX_FLAGS_RELEASE "-Ofast -DNDEBUG") add_subdirectory(lib/tomlplusplus) add_subdirectory(lib/portaudio) add_subdirectory(lib/portmidi) -add_subdirectory(lib/wxWidgets) add_subdirectory(lib/synth) -if(MSVC) - add_compile_definitions(_USE_MATH_DEFINES) -endif() - add_executable(main - src/synthapp.cpp - src/synthframe.cpp - src/ccslider.cpp) + src/synthapp.cpp) target_include_directories(main PRIVATE include) target_link_libraries(main PRIVATE synth) -#target_compile_options(main PRIVATE -fsanitize=thread) -#target_link_options(main PRIVATE -fsanitize=thread) - target_link_libraries(main PRIVATE tomlplusplus_tomlplusplus) target_link_libraries(main PRIVATE PortAudio) target_link_libraries(main PRIVATE portmidi) target_include_directories(main PRIVATE lib/portmidi/porttime) -target_link_libraries(main PRIVATE wxbase) -target_link_libraries(main PRIVATE wxcore) - add_custom_target(synthapp) add_dependencies(synthapp main) diff --git a/include/ccslider.h b/include/ccslider.h deleted file mode 100644 index d403caa..0000000 --- a/include/ccslider.h +++ /dev/null @@ -1,10 +0,0 @@ -#include - -#ifndef WX_PRECOMP - #include -#endif - -class CCSlider : public wxPanel { -public: - CCSlider(wxWindow* parent, wxWindowID id, int value, const wxString& label); -}; \ No newline at end of file diff --git a/include/synthapp.h b/include/synthapp.h deleted file mode 100644 index c02537f..0000000 --- a/include/synthapp.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __SYNTHAPP_H__ -#define __SYNTHAPP_H__ - -#include - -#include - -#ifndef WX_PRECOMP - #include -#endif - -#include -#include - -#include "synth.h" - -class SynthApp : public wxApp { -public: - PaStream* paStream; - PmStream* pmStream; - Synth synth; - std::mutex synthMutex; - - virtual bool OnInit(); - virtual int OnExit(); -}; - -#endif \ No newline at end of file diff --git a/include/synthframe.h b/include/synthframe.h deleted file mode 100644 index 637c490..0000000 --- a/include/synthframe.h +++ /dev/null @@ -1,96 +0,0 @@ -#ifndef __SYNTHFRAME_H__ -#define __SYNTHFRAME_H__ - -#include - -#ifndef WX_PRECOMP - #include -#endif - -class SynthFrame : public wxFrame { -public: - SynthFrame(); - -private: - enum { - UNISON_SLIDER = wxID_TOP, - - OSC1_MODE_SLIDER, - OSC2_MODE_SLIDER, - - OSC_DET_SLIDER, - OSC2_PIT_SLIDER, - OSC_MIX_SLIDER, - - NOISE_MIX_SLIDER, - - FLT_TYPE_SLIDER, - FLT_SLOPE_SLIDER, - FLT_FREQ_SLIDER, - FLT_Q_SLIDER, - - AMP_ATTACK_SLIDER, - AMP_DECAY_SLIDER, - AMP_SUSTAIN_SLIDER, - AMP_RELEASE_SLIDER, - - MOD_ATTACK_SLIDER, - MOD_DECAY_SLIDER, - MOD_SUSTAIN_SLIDER, - MOD_RELEASE_SLIDER, - - KEY_TRACK_SLIDER, - - MOD_ENV_FLT_SLIDER, - - LFO_FREQ_SLIDER, - LFO_PITCH_SLIDER, - LFO_FILTER_SLIDER, - - REVERB_SLIDER - }; - - wxSlider* addCCSlider(wxWindow* parent, wxSizer* sizer, wxWindowID id, const wxString& label, uint8_t value); - - void OnExit(wxCommandEvent& event); - void OnAbout(wxCommandEvent& event); - - void OnUnisonScroll(wxScrollEvent& event); - - void OnOsc1ModeScroll(wxScrollEvent& event); - void OnOsc2ModeScroll(wxScrollEvent& event); - void OnOscDetScroll(wxScrollEvent& event); - void OnOsc2PitScroll(wxScrollEvent& event); - void OnOscMixScroll(wxScrollEvent& event); - - void OnNoiseMixScroll(wxScrollEvent& event); - - void OnFltTypeScroll(wxScrollEvent& event); - void OnFltSlopeScroll(wxScrollEvent& event); - void OnFltFreqScroll(wxScrollEvent& event); - void OnFltQScroll(wxScrollEvent& event); - - void OnKeyTrackScroll(wxScrollEvent& event); - - void OnAmpAttackScroll(wxScrollEvent& event); - void OnAmpDecayScroll(wxScrollEvent& event); - void OnAmpSustainScroll(wxScrollEvent& event); - void OnAmpReleaseScroll(wxScrollEvent& event); - - void OnFltAttackScroll(wxScrollEvent& event); - void OnFltDecayScroll(wxScrollEvent& event); - void OnFltSustainScroll(wxScrollEvent& event); - void OnFltReleaseScroll(wxScrollEvent& event); - - void OnModEnvFltGainScroll(wxScrollEvent& event); - - void OnLFOFreqScroll(wxScrollEvent& event); - void OnLFOPitchScroll(wxScrollEvent& event); - void OnLFOFilterScroll(wxScrollEvent& event); - - void OnReverbScroll(wxScrollEvent& event); - - wxDECLARE_EVENT_TABLE(); -}; - -#endif \ No newline at end of file diff --git a/lib/wxWidgets b/lib/wxWidgets deleted file mode 160000 index a242283..0000000 --- a/lib/wxWidgets +++ /dev/null @@ -1 +0,0 @@ -Subproject commit a242283456ffd0920a2384f6fee45d56a7ecc3a5 diff --git a/src/ccslider.cpp b/src/ccslider.cpp deleted file mode 100644 index a544612..0000000 --- a/src/ccslider.cpp +++ /dev/null @@ -1,8 +0,0 @@ -#include "ccslider.h" - -CCSlider::CCSlider(wxWindow* parent, wxWindowID id, int value, const wxString& label) : wxPanel(parent) { - wxBoxSizer* sizer = new wxBoxSizer(wxVERTICAL); - SetSizer(sizer); - sizer->Add(new wxSlider(this, id, value, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE), 1, wxEXPAND); - sizer->Add(new wxStaticText(this, wxID_ANY, label)); -} \ No newline at end of file diff --git a/src/synthapp.cpp b/src/synthapp.cpp index 3f7f29a..1d8f568 100644 --- a/src/synthapp.cpp +++ b/src/synthapp.cpp @@ -3,19 +3,35 @@ #include #include +#include +#include + #include +#include +#include + #include "globals.h" #include "util.h" -#include "synthapp.h" -#include "synthframe.h" +#include "synth.h" using namespace std; +PaStream* paStream; +PmStream* pmStream; +Synth synth; +std::mutex synthMutex; + uint64_t synthNanos = 0; uint64_t synthSamples = 0; +bool done = false; + +static void finish(int) { + done = true; +} + // PortAudio callback for audio I/O bool firstPACallback = true; static int paCallback( @@ -26,16 +42,14 @@ static int paCallback( PaStreamCallbackFlags statusFlags, void *userData ) { - SynthApp *app = (SynthApp*) userData; - if(firstPACallback) { printf("Buffer size is %ld frames\n", framesPerBuffer); firstPACallback = false; } - app->synthMutex.lock(); + synthMutex.lock(); PmEvent events[16]; - int numEvents = Pm_Read(app->pmStream, events, 16); + int numEvents = Pm_Read(pmStream, events, 16); for(int i = 0; i < numEvents; ++i) { PmMessage msg = events[i].message; @@ -45,24 +59,24 @@ static int paCallback( if(type == 0x8 || (type == 0x9 && Pm_MessageData2(msg) == 0)) { // Note Off int note = Pm_MessageData1(msg); - app->synth.noteOff(ch, note); + synth.noteOff(ch, note); } else if(type == 0x9) { // Note On int note = Pm_MessageData1(msg); int vel = Pm_MessageData2(msg); - app->synth.noteOn(ch, note, vel); + synth.noteOn(ch, note, vel); } else if(type == 0xB) { // Controller Message int cc = Pm_MessageData1(msg); int val = Pm_MessageData2(msg); - app->synth.control(ch, cc, val); + synth.control(ch, cc, val); } } float *out = (float*) outputBuffer; uint64_t started = nanos(); - app->synth.tick(out, framesPerBuffer * 2); + synth.tick(out, framesPerBuffer * 2); uint64_t finished = nanos(); - app->synthMutex.unlock(); + synthMutex.unlock(); synthNanos += finished - started; synthSamples += framesPerBuffer; @@ -93,7 +107,7 @@ void handlePAError(PaError err) { exit(err); } -bool SynthApp::OnInit() { +int main(int argc, char** argv) { // Initialise PortMIDI and PortAudio libraries PmError pmErr = Pm_Initialize(); if(pmErr != pmNoError) { @@ -195,7 +209,7 @@ bool SynthApp::OnInit() { 0, // frames per buffer paNoFlag, paCallback, - this); + NULL); if(paErr != paNoError) { handlePAError(paErr); } @@ -207,13 +221,13 @@ bool SynthApp::OnInit() { const PaStreamInfo *paStreamInfo = Pa_GetStreamInfo(paStream); printf("Reported latency is %d frames\n", (int) round(SAMPLE_RATE * paStreamInfo->outputLatency)); - wxFrame *frame = new SynthFrame(); - frame->Show(true); - return true; -} + signal(SIGINT, finish); + + while(!done) { + usleep(100); + } -int SynthApp::OnExit() { - PaError paErr = Pa_StopStream(paStream); + paErr = Pa_StopStream(paStream); if(paErr != paNoError) { handlePAError(paErr); } @@ -221,7 +235,7 @@ int SynthApp::OnExit() { if(paErr != paNoError) { handlePAError(paErr); } - PmError pmErr = Pm_Close(pmStream); + pmErr = Pm_Close(pmStream); if(pmErr != pmNoError) { handlePMError(pmErr); } @@ -230,13 +244,3 @@ int SynthApp::OnExit() { return 0; } - -wxIMPLEMENT_APP(SynthApp); - -#ifdef WIN32 -int main(int argc, char** argv) { - HMODULE module = GetModuleHandle(NULL); - LPSTR lpCmdLine = (LPSTR) calloc(1, 1); - return WinMain(module, NULL, lpCmdLine, SW_SHOW); -} -#endif diff --git a/src/synthframe.cpp b/src/synthframe.cpp deleted file mode 100644 index c76e82d..0000000 --- a/src/synthframe.cpp +++ /dev/null @@ -1,295 +0,0 @@ -#include - -#include "cc.h" -#include "preset.h" - -#include "synthframe.h" -#include "synthapp.h" - -#include "ccslider.h" - -wxDECLARE_APP(SynthApp); - -SynthFrame::SynthFrame() : wxFrame(NULL, wxID_ANY, "Hello World") { - wxMenu *menuFile = new wxMenu; - menuFile->Append(wxID_EXIT); - - wxMenu *menuHelp = new wxMenu; - menuHelp->Append(wxID_ABOUT); - - wxMenuBar *menuBar = new wxMenuBar; - menuBar->Append(menuFile, "&File"); - menuBar->Append(menuHelp, "&Help"); - - SetMenuBar(menuBar); - - CreateStatusBar(); - SetStatusText("Welcome to wxWidgets!"); - - wxPanel* panel = new wxPanel(this); - - wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); - panel->SetSizer(sizer); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, UNISON_SLIDER, DEFAULT_PRESET.unison, "Uni"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, OSC1_MODE_SLIDER, DEFAULT_PRESET.osc1Mode, "O1M"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, OSC2_MODE_SLIDER, DEFAULT_PRESET.osc2Mode, "O2M"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, OSC_DET_SLIDER, DEFAULT_PRESET.oscDetune, "Det"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, OSC2_PIT_SLIDER, DEFAULT_PRESET.osc2Pitch, "2nd"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, OSC_MIX_SLIDER, DEFAULT_PRESET.oscMix, "OMx"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, NOISE_MIX_SLIDER, DEFAULT_PRESET.noiseMix, "NMx"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, FLT_TYPE_SLIDER, DEFAULT_PRESET.filter.type, "FTy"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, FLT_SLOPE_SLIDER, DEFAULT_PRESET.filter.slope, "FSl"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, FLT_FREQ_SLIDER, DEFAULT_PRESET.filter.freq, "Frq"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, FLT_Q_SLIDER, DEFAULT_PRESET.filter.Q, "Res"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, KEY_TRACK_SLIDER, DEFAULT_PRESET.keyTrack, "Key"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, AMP_ATTACK_SLIDER, DEFAULT_PRESET.ampEnv.attack, "aA"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, AMP_DECAY_SLIDER, DEFAULT_PRESET.ampEnv.decay, "aD"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, AMP_SUSTAIN_SLIDER, DEFAULT_PRESET.ampEnv.sustain, "aS"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, AMP_RELEASE_SLIDER, DEFAULT_PRESET.ampEnv.release, "aR"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, MOD_ATTACK_SLIDER, DEFAULT_PRESET.modEnv.attack, "mA"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, MOD_DECAY_SLIDER, DEFAULT_PRESET.modEnv.decay, "mD"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, MOD_SUSTAIN_SLIDER, DEFAULT_PRESET.modEnv.sustain, "mS"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, MOD_RELEASE_SLIDER, DEFAULT_PRESET.modEnv.release, "mR"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, MOD_ENV_FLT_SLIDER, DEFAULT_PRESET.modEnvFltGain, "Env"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, LFO_FREQ_SLIDER, DEFAULT_PRESET.lfoFreq, "LFO"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, LFO_PITCH_SLIDER, DEFAULT_PRESET.lfoPitchMod, "Pit"), 1, wxEXPAND); - sizer->Add(new CCSlider(panel, LFO_FILTER_SLIDER, DEFAULT_PRESET.lfoFltMod, "Flt"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - sizer->Add(new CCSlider(panel, REVERB_SLIDER, DEFAULT_PRESET.reverb, "Rvb"), 1, wxEXPAND); - sizer->AddStretchSpacer(); - - this->FitInside(); - - Bind(wxEVT_MENU, &SynthFrame::OnAbout, this, wxID_ABOUT); - Bind(wxEVT_MENU, &SynthFrame::OnExit, this, wxID_EXIT); -} - -void SynthFrame::OnExit(wxCommandEvent& event) { - Close(true); -} - -void SynthFrame::OnAbout(wxCommandEvent& event) { - wxMessageBox("This is a wxWidgets Hello World example", - "About Hello World", wxOK | wxICON_INFORMATION); -} - -void SynthFrame::OnUnisonScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_UNISON, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnOsc1ModeScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_OSC1MDE, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnOsc2ModeScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_OSC2MDE, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnOscDetScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_OSC_DET, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnOsc2PitScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_OSC2PIT, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnOscMixScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_OSC_MIX, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnNoiseMixScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_NOI_MIX, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltTypeScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_TYP, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltSlopeScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_SLP, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltFreqScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_FRQ, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltQScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_Q, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnKeyTrackScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_KEY_TRK, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnAmpAttackScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_AMP_ATK, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnAmpDecayScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_AMP_DEC, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnAmpSustainScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_AMP_SUS, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnAmpReleaseScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_AMP_REL, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltAttackScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_ATK, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltDecayScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_DEC, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltSustainScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_SUS, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnFltReleaseScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_FLT_REL, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnModEnvFltGainScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_MOD_FLT, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnLFOFreqScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_LFO_FRQ, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnLFOPitchScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_LFO_PIT, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnLFOFilterScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_LFO_FLT, event.GetPosition()); - app.synthMutex.unlock(); -} - -void SynthFrame::OnReverbScroll(wxScrollEvent& event) { - SynthApp& app = wxGetApp(); - app.synthMutex.lock(); - app.synth.control(0, CC_RVB_SND, event.GetPosition()); - app.synthMutex.unlock(); -} - -wxBEGIN_EVENT_TABLE(SynthFrame, wxFrame) - -EVT_COMMAND_SCROLL(SynthFrame::UNISON_SLIDER, SynthFrame::OnUnisonScroll) - -EVT_COMMAND_SCROLL(SynthFrame::OSC1_MODE_SLIDER, SynthFrame::OnOsc1ModeScroll) -EVT_COMMAND_SCROLL(SynthFrame::OSC2_MODE_SLIDER, SynthFrame::OnOsc2ModeScroll) -EVT_COMMAND_SCROLL(SynthFrame::OSC_DET_SLIDER, SynthFrame::OnOscDetScroll) -EVT_COMMAND_SCROLL(SynthFrame::OSC2_PIT_SLIDER, SynthFrame::OnOsc2PitScroll) -EVT_COMMAND_SCROLL(SynthFrame::OSC_MIX_SLIDER, SynthFrame::OnOscMixScroll) -EVT_COMMAND_SCROLL(SynthFrame::NOISE_MIX_SLIDER, SynthFrame::OnNoiseMixScroll) - -EVT_COMMAND_SCROLL(SynthFrame::FLT_TYPE_SLIDER, SynthFrame::OnFltTypeScroll) -EVT_COMMAND_SCROLL(SynthFrame::FLT_SLOPE_SLIDER, SynthFrame::OnFltSlopeScroll) -EVT_COMMAND_SCROLL(SynthFrame::FLT_FREQ_SLIDER, SynthFrame::OnFltFreqScroll) -EVT_COMMAND_SCROLL(SynthFrame::FLT_Q_SLIDER, SynthFrame::OnFltQScroll) - -EVT_COMMAND_SCROLL(SynthFrame::KEY_TRACK_SLIDER, SynthFrame::OnKeyTrackScroll) - -EVT_COMMAND_SCROLL(SynthFrame::AMP_ATTACK_SLIDER, SynthFrame::OnAmpAttackScroll) -EVT_COMMAND_SCROLL(SynthFrame::AMP_DECAY_SLIDER, SynthFrame::OnAmpDecayScroll) -EVT_COMMAND_SCROLL(SynthFrame::AMP_SUSTAIN_SLIDER, SynthFrame::OnAmpSustainScroll) -EVT_COMMAND_SCROLL(SynthFrame::AMP_RELEASE_SLIDER, SynthFrame::OnAmpReleaseScroll) - -EVT_COMMAND_SCROLL(SynthFrame::MOD_ATTACK_SLIDER, SynthFrame::OnFltAttackScroll) -EVT_COMMAND_SCROLL(SynthFrame::MOD_DECAY_SLIDER, SynthFrame::OnFltDecayScroll) -EVT_COMMAND_SCROLL(SynthFrame::MOD_SUSTAIN_SLIDER, SynthFrame::OnFltSustainScroll) -EVT_COMMAND_SCROLL(SynthFrame::MOD_RELEASE_SLIDER, SynthFrame::OnFltReleaseScroll) - -EVT_COMMAND_SCROLL(SynthFrame::MOD_ENV_FLT_SLIDER, SynthFrame::OnModEnvFltGainScroll) - -EVT_COMMAND_SCROLL(SynthFrame::LFO_FREQ_SLIDER, SynthFrame::OnLFOFreqScroll) -EVT_COMMAND_SCROLL(SynthFrame::LFO_PITCH_SLIDER, SynthFrame::OnLFOPitchScroll) -EVT_COMMAND_SCROLL(SynthFrame::LFO_FILTER_SLIDER, SynthFrame::OnLFOFilterScroll) - -EVT_COMMAND_SCROLL(SynthFrame::REVERB_SLIDER, SynthFrame::OnReverbScroll) - -wxEND_EVENT_TABLE() \ No newline at end of file