Remove all GUI code

main
Thor 2 weeks ago
parent 66a47fec0c
commit 8aa080d588
  1. 4
      .gitignore
  2. 3
      .gitmodules
  3. 30
      CMakeLists.txt
  4. 10
      include/ccslider.h
  5. 28
      include/synthapp.h
  6. 96
      include/synthframe.h
  7. 1
      lib/wxWidgets
  8. 8
      src/ccslider.cpp
  9. 64
      src/synthapp.cpp
  10. 295
      src/synthframe.cpp

4
.gitignore vendored

@ -1,9 +1,11 @@
build/
.DS_Store
*.swp
*.a
CMakeCache.txt
CMakeFiles/
Launch_main_*/
*.cmake
main
Makefile
.vs/
.vs/

3
.gitmodules vendored

@ -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

@ -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)

@ -1,10 +0,0 @@
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
class CCSlider : public wxPanel {
public:
CCSlider(wxWindow* parent, wxWindowID id, int value, const wxString& label);
};

@ -1,28 +0,0 @@
#ifndef __SYNTHAPP_H__
#define __SYNTHAPP_H__
#include <mutex>
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#endif
#include <portaudio.h>
#include <portmidi.h>
#include "synth.h"
class SynthApp : public wxApp {
public:
PaStream* paStream;
PmStream* pmStream;
Synth synth;
std::mutex synthMutex;
virtual bool OnInit();
virtual int OnExit();
};
#endif

@ -1,96 +0,0 @@
#ifndef __SYNTHFRAME_H__
#define __SYNTHFRAME_H__
#include <wx/wxprec.h>
#ifndef WX_PRECOMP
#include <wx/wx.h>
#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

@ -1 +0,0 @@
Subproject commit a242283456ffd0920a2384f6fee45d56a7ecc3a5

@ -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));
}

@ -3,19 +3,35 @@
#include <cmath>
#include <mutex>
#include <unistd.h>
#include <csignal>
#include <toml++/toml.hpp>
#include <portaudio.h>
#include <portmidi.h>
#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

@ -1,295 +0,0 @@
#include <iostream>
#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()
Loading…
Cancel
Save