You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
295 lines
11 KiB
295 lines
11 KiB
#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() |