forked from klang-modular/synthapp
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.
121 lines
4.5 KiB
121 lines
4.5 KiB
#include <iostream>
|
|
|
|
#include "synthframe.h"
|
|
#include "synthapp.h"
|
|
|
|
wxDECLARE_APP(SynthApp);
|
|
|
|
float ccToA(int x) {
|
|
return 5.0 * exp(9.2 * (x / 127.0) - 9.2);
|
|
}
|
|
|
|
float ccToDR(int x) {
|
|
return 5.0 * exp(7.0 * (x / 127.0) - 7.0);
|
|
}
|
|
|
|
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->Add(new wxSlider(panel, AMP_ATTACK_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
sizer->Add(new wxSlider(panel, AMP_DECAY_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
sizer->Add(new wxSlider(panel, AMP_SUSTAIN_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
sizer->Add(new wxSlider(panel, AMP_RELEASE_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
|
|
sizer->Add(new wxSlider(panel, FLT_ATTACK_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
sizer->Add(new wxSlider(panel, FLT_DECAY_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
sizer->Add(new wxSlider(panel, FLT_SUSTAIN_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
sizer->Add(new wxSlider(panel, FLT_RELEASE_SLIDER, 63, 0, 127, wxDefaultPosition, wxDefaultSize, wxSL_VERTICAL | wxSL_INVERSE));
|
|
|
|
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::OnAmpAttackScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float seconds = ccToA(event.GetPosition());
|
|
//app.state.adsrAmp.attackStep = (1.0 / 48000.0) / seconds;
|
|
}
|
|
|
|
void SynthFrame::OnAmpDecayScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float seconds = ccToDR(event.GetPosition());
|
|
//app.state.adsrAmp.decayStep = (1.0 / 48000.0) / seconds;
|
|
}
|
|
|
|
void SynthFrame::OnAmpSustainScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float gain = event.GetPosition() / 127.0;
|
|
std::cout << "Gain: " << gain << std::endl;
|
|
//app.state.adsrAmp.sustain = gain;
|
|
}
|
|
|
|
void SynthFrame::OnAmpReleaseScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float seconds = ccToDR(event.GetPosition());
|
|
//app.state.adsrAmp.releaseStep = (1.0 / 48000.0) / seconds;
|
|
}
|
|
|
|
void SynthFrame::OnFltAttackScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float seconds = ccToA(event.GetPosition());
|
|
//app.state.adsrFlt.attackStep = (1.0 / 48000.0) / seconds;
|
|
}
|
|
|
|
void SynthFrame::OnFltDecayScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float seconds = ccToDR(event.GetPosition());
|
|
//app.state.adsrFlt.decayStep = (1.0 / 48000.0) / seconds;
|
|
}
|
|
|
|
void SynthFrame::OnFltSustainScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float gain = event.GetPosition() / 127.0;
|
|
//app.state.adsrFlt.sustain = gain;
|
|
}
|
|
|
|
void SynthFrame::OnFltReleaseScroll(wxScrollEvent& event) {
|
|
SynthApp& app = wxGetApp();
|
|
float seconds = ccToDR(event.GetPosition());
|
|
//app.state.adsrFlt.releaseStep = (1.0 / 48000.0) / seconds;
|
|
}
|
|
|
|
wxBEGIN_EVENT_TABLE(SynthFrame, wxFrame)
|
|
|
|
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::FLT_ATTACK_SLIDER, SynthFrame::OnFltAttackScroll)
|
|
EVT_COMMAND_SCROLL(SynthFrame::FLT_DECAY_SLIDER, SynthFrame::OnFltDecayScroll)
|
|
EVT_COMMAND_SCROLL(SynthFrame::FLT_SUSTAIN_SLIDER, SynthFrame::OnFltSustainScroll)
|
|
EVT_COMMAND_SCROLL(SynthFrame::FLT_RELEASE_SLIDER, SynthFrame::OnFltReleaseScroll)
|
|
|
|
wxEND_EVENT_TABLE() |