summaryrefslogtreecommitdiff
path: root/attic/muse_qt4_evolution/synti/vam/vamgui.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse_qt4_evolution/synti/vam/vamgui.cpp')
-rw-r--r--attic/muse_qt4_evolution/synti/vam/vamgui.cpp618
1 files changed, 0 insertions, 618 deletions
diff --git a/attic/muse_qt4_evolution/synti/vam/vamgui.cpp b/attic/muse_qt4_evolution/synti/vam/vamgui.cpp
deleted file mode 100644
index c4d93672..00000000
--- a/attic/muse_qt4_evolution/synti/vam/vamgui.cpp
+++ /dev/null
@@ -1,618 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-//
-// vamgui.c
-// This is a simple GUI implemented with QT for
-// vam software synthesizer.
-// (Many) parts of this file was taken from Werner Schweer's GUI
-// for his organ soft synth.
-//
-// (C) Copyright 2002 Jotsif Lindman Hölund (jotsif@linux.nu)
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-// 02111-1307, USA or point your web browser to http://www.gnu.org.
-//=========================================================
-
-#include "vamgui.h"
-#include "vam.h"
-
-#include "al/xml.h"
-using AL::Xml;
-
-#include "muse/midi.h"
-#include "muse/midictrl.h"
-
-//---------------------------------------------------------
-// Preset
-//---------------------------------------------------------
-
-struct Preset {
- QString name;
- int ctrl[NUM_CONTROLLER];
- void readConfiguration(QDomNode);
- void readControl(QDomNode);
- void writeConfiguration(Xml& xml);
- };
-
-std::list<Preset> presets;
-typedef std::list<Preset>::iterator iPreset;
-
-QString museProject;
-QString museGlobalShare;
-QString museUser;
-
-QString instanceName;
-//static const char* presetFileTypes[] = {
-// "Presets (*.pre)",
-// 0
-// };
-
-//---------------------------------------------------------
-// readControl
-//---------------------------------------------------------
-
-void Preset::readControl(QDomNode)
-{
-#if 0
- int idx = 0;
- int val = 0;
- for (;;) {
- Xml::Token token(xml.parse());
- const QString& tag(xml.s1());
- switch (token) {
- case Xml::Error:
- case Xml::End:
- return;
- case Xml::TagStart:
- xml.unknown("control");
- break;
- case Xml::Attribut:
- if (tag == "idx") {
- idx = xml.s2().toInt();
- if (idx >= NUM_CONTROLLER)
- idx = 0;
- }
- else if (tag == "val")
- val = xml.s2().toInt();
- break;
- case Xml::TagEnd:
- if (tag == "control") {
- ctrl[idx] = val;
- return;
- }
- default:
- break;
- }
- }
-#endif
-}
-
-//---------------------------------------------------------
-// readConfiguration
-//---------------------------------------------------------
-
-void Preset::readConfiguration(QDomNode /*node*/)
-{
-#if 0
- for (;;) {
- Xml::Token token(xml.parse());
- const QString& tag(xml.s1());
- switch (token) {
- case Xml::Error:
- case Xml::End:
- return;
- case Xml::TagStart:
- if (tag == "control")
- readControl(xml);
- else
- xml.unknown("preset");
- break;
- case Xml::Attribut:
- if (tag == "name")
- name = xml.s2();
- break;
- case Xml::TagEnd:
- if (tag == "preset")
- return;
- default:
- break;
- }
- }
-#endif
-}
-
-//---------------------------------------------------------
-// writeConfiguration
-//---------------------------------------------------------
-
-void Preset::writeConfiguration(Xml& xml)
-{
- xml.stag(QString("preset name=\"%1\"").arg(name));
- for (int i = 0; i < NUM_CONTROLLER; ++i) {
- xml.tagE(QString("control idx=\"%1\" val=\"%2\"").arg(i).arg(ctrl[i]));
- }
- xml.etag("preset");
-}
-
-//---------------------------------------------------------
-// VAMGui
-//---------------------------------------------------------
-
-VAMGui::VAMGui()
-// : QWidget(0, "vamgui", Qt::WType_TopLevel),
- : QWidget(0),
- MessGui()
-{
- setupUi(this);
- QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read);
- connect(s, SIGNAL(activated(int)), SLOT(readMessage(int)));
-
- dctrl[DCO1_PITCHMOD] = SynthGuiCtrl(PitchModS, LCDNumber1, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_WAVEFORM] = SynthGuiCtrl(Waveform, 0, SynthGuiCtrl::COMBOBOX);
- dctrl[DCO1_FM] = SynthGuiCtrl(FMS, LCDNumber1_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_PWM] = SynthGuiCtrl(PWMS, LCDNumber1_3, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_ATTACK] = SynthGuiCtrl(AttackS, LCDNumber1_3_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_DECAY] = SynthGuiCtrl(DecayS, LCDNumber1_3_2_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_SUSTAIN] = SynthGuiCtrl(SustainS, LCDNumber1_3_2_3, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_RELEASE] = SynthGuiCtrl(ReleaseS, LCDNumber1_3_2_4, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_PITCHMOD] = SynthGuiCtrl(PitchModS2, LCDNumber1_4, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_WAVEFORM] = SynthGuiCtrl(Waveform2, 0, SynthGuiCtrl::COMBOBOX);
- dctrl[DCO2_FM] = SynthGuiCtrl(FMS2, LCDNumber1_2_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_PWM] = SynthGuiCtrl(PWMS2, LCDNumber1_3_3, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_ATTACK] = SynthGuiCtrl(AttackS2, LCDNumber1_3_2_5, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_DECAY] = SynthGuiCtrl(DecayS2, LCDNumber1_3_2_2_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_SUSTAIN] = SynthGuiCtrl(SustainS2, LCDNumber1_3_2_3_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_RELEASE] = SynthGuiCtrl(ReleaseS2, LCDNumber1_3_2_4_2, SynthGuiCtrl::SLIDER);
- dctrl[LFO_FREQ] = SynthGuiCtrl(FreqS, LCDNumber1_5, SynthGuiCtrl::SLIDER);
- dctrl[LFO_WAVEFORM] = SynthGuiCtrl(Waveform2_2, 0, SynthGuiCtrl::COMBOBOX);
- dctrl[FILT_ENV_MOD] = SynthGuiCtrl(EnvModS, LCDNumber1_5_3, SynthGuiCtrl::SLIDER);
- dctrl[FILT_KEYTRACK] = SynthGuiCtrl(KeyTrack, 0, SynthGuiCtrl::SWITCH);
- dctrl[FILT_RES] = SynthGuiCtrl(ResS, LCDNumber1_5_5, SynthGuiCtrl::SLIDER);
- dctrl[FILT_ATTACK] = SynthGuiCtrl(AttackS3, LCDNumber1_3_2_5_2, SynthGuiCtrl::SLIDER);
- dctrl[FILT_DECAY] = SynthGuiCtrl(DecayS3, LCDNumber1_3_2_2_2_2, SynthGuiCtrl::SLIDER);
- dctrl[FILT_SUSTAIN] = SynthGuiCtrl(SustainS3, LCDNumber1_3_2_3_2_2, SynthGuiCtrl::SLIDER);
- dctrl[FILT_RELEASE] = SynthGuiCtrl(ReleaseS3, LCDNumber1_3_2_4_2_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO2ON] = SynthGuiCtrl(DCO2On, 0, SynthGuiCtrl::SWITCH);
- dctrl[FILT_INVERT] = SynthGuiCtrl(FilterInvert, 0, SynthGuiCtrl::SWITCH);
- dctrl[FILT_CUTOFF] = SynthGuiCtrl(CutoffS, LCDNumber1_5_5_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_DETUNE] = SynthGuiCtrl(DetuneS, LCDNumber1_6, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_DETUNE] = SynthGuiCtrl(DetuneS2, LCDNumber1_6_2, SynthGuiCtrl::SLIDER);
- dctrl[DCO1_PW] = SynthGuiCtrl(PWS, LCDNumber1_2_3, SynthGuiCtrl::SLIDER);
- dctrl[DCO2_PW] = SynthGuiCtrl(PWS2, LCDNumber1_2_4, SynthGuiCtrl::SLIDER);
-
-
- map = new QSignalMapper(this);
- for (int i = 0; i < NUM_CONTROLLER; ++i) {
- map->setMapping(dctrl[i].editor, i);
- if (dctrl[i].type == SynthGuiCtrl::SLIDER)
- connect((QSlider*)(dctrl[i].editor), SIGNAL(valueChanged(int)), map, SLOT(map()));
- else if (dctrl[i].type == SynthGuiCtrl::COMBOBOX)
- connect((QComboBox*)(dctrl[i].editor), SIGNAL(activated(int)), map, SLOT(map()));
- else if (dctrl[i].type == SynthGuiCtrl::SWITCH)
- connect((QCheckBox*)(dctrl[i].editor), SIGNAL(toggled(bool)), map, SLOT(map()));
- }
- connect(map, SIGNAL(mapped(int)), this, SLOT(ctrlChanged(int)));
-
- connect(presetList, SIGNAL(clicked(QListWidgetItem*)),
- this, SLOT(presetClicked(QListWidgetItem*)));
- // presetNameEdit
- connect(presetSet, SIGNAL(clicked()), this, SLOT(setPreset()));
- connect(savePresets, SIGNAL(clicked()), this, SLOT(savePresetsPressed()));
- connect(loadPresets, SIGNAL(clicked()), this, SLOT(loadPresetsPressed()));
- connect(deletePreset, SIGNAL(clicked()), this, SLOT(deletePresetPressed()));
- connect(savePresetsToFile, SIGNAL(clicked()), this, SLOT(savePresetsToFilePressed()));
-
- ctrlHi = 0;
- ctrlLo = 0;
- dataHi = 0;
- dataLo = 0;
- }
-
-//---------------------------------------------------------
-// ctrlChanged
-//---------------------------------------------------------
-
-void VAMGui::ctrlChanged(int idx)
- {
- SynthGuiCtrl* ctrl = &dctrl[idx];
- int val = 0;
- if (ctrl->type == SynthGuiCtrl::SLIDER) {
- QSlider* slider = (QSlider*)(ctrl->editor);
- int max = slider->maximum();
- val = (slider->value() * 16383 + max/2) / max;
- }
- else if (ctrl->type == SynthGuiCtrl::COMBOBOX) {
- val = ((QComboBox*)(ctrl->editor))->currentIndex();
- }
- else if (ctrl->type == SynthGuiCtrl::SWITCH) {
- val = ((QCheckBox*)(ctrl->editor))->isChecked();
- }
- sendController(0, idx + CTRL_RPN14_OFFSET, val);
- }
-
-//---------------------------------------------------------
-// presetClicked
-//---------------------------------------------------------
-
-void VAMGui::presetClicked(QListWidgetItem* item)
-{
- if (item == 0)
- return;
- presetNameEdit->setText(item->text());
- Preset* preset = 0;
- for (iPreset i = presets.begin(); i != presets.end(); ++i) {
- if (i->name == item->text()) {
- preset = &*i;
- break;
- }
- }
- activatePreset(preset);
-}
-
-//---------------------------------------------------------
-// setPreset
-//---------------------------------------------------------
-
-void VAMGui::activatePreset(Preset* preset)
-{
- if (preset == 0) {
- fprintf(stderr, "internal error 1\n");
- exit(-1);
- }
- for (unsigned int i = 0; i < sizeof(dctrl)/sizeof(*dctrl); ++i) {
- setParam(i, preset->ctrl[i]);
- ctrlChanged(i);
- }
-}
-
-//---------------------------------------------------------
-// setPreset
-//---------------------------------------------------------
-
-void VAMGui::setPreset()
-{
- if (presetNameEdit->text().isEmpty())
- return;
- for (iPreset i = presets.begin(); i != presets.end(); ++i) {
- if (i->name == presetNameEdit->text()) {
- setPreset(&*i);
- return;
- }
- }
- addNewPreset(presetNameEdit->text());
-}
-
-//---------------------------------------------------------
-// addNewPreset
-//---------------------------------------------------------
-
-void VAMGui::addNewPreset(const QString& name)
-{
- Preset p;
- p.name = name;
- setPreset(&p);
- presets.push_back(p);
- presetList->addItem(name);
-}
-
-//---------------------------------------------------------
-// deleteNamedPreset
-//---------------------------------------------------------
-void VAMGui::deleteNamedPreset(const QString& name)
-{
- QListWidgetItem * item = presetList->findItems(name,Qt::MatchExactly).at(0);
- if (!item) {
- fprintf(stderr, "%s: Could not find preset!\n", __FUNCTION__);
- return;
- }
- presetList->clearSelection();
- delete item;
-// int index = presetList->row(item);
-// presetList->removeItem(index);
- for (iPreset i = presets.begin(); i != presets.end(); ++i) {
- if (i->name == name) {
- presets.erase(i);
- break;
- }
- }
-}
-
-
-//---------------------------------------------------------
-// setPreset
-//---------------------------------------------------------
-
-void VAMGui::setPreset(Preset* preset)
-{
- for (unsigned int i = 0; i < NUM_CONTROLLER; ++i) {
- int val = 0;
- SynthGuiCtrl* ctrl = &dctrl[i];
- if (ctrl->type == SynthGuiCtrl::SLIDER) {
- QSlider* slider = (QSlider*)(ctrl->editor);
- int max = slider->maximum();
- val = (slider->value() * 16383 + max/2) / max;
- }
- else if (ctrl->type == SynthGuiCtrl::COMBOBOX) {
- val = ((QComboBox*)(ctrl->editor))->currentIndex();
- }
- else if (ctrl->type == SynthGuiCtrl::SWITCH) {
- val = ((QCheckBox*)(ctrl->editor))->isChecked();
- }
-
- preset->ctrl[i] = val;
- }
- //
- // send sysex to synti
- //
-#if 0
- putchar(0xf0);
- putchar(0x7c); // mess
- putchar(0x2); // vam
- putchar(0x3); // setPreset
- const char* name = preset->name.toLatin1().data();
- while (*name)
- putchar(*name++ & 0x7f);
- putchar(0);
- for (int i = 0; i < NUM_CONTROLLER; ++i) {
- putchar(i);
- putchar(preset->ctrl[i]);
- }
- putchar(0xf7);
-#endif
-}
-
-//---------------------------------------------------------
-// setParam
-// set param in gui
-// val -- midi value 0 - 16383
-//---------------------------------------------------------
-
-void VAMGui::setParam(int param, int val)
- {
- if (param >= int(sizeof(dctrl)/sizeof(*dctrl))) {
- fprintf(stderr, "vam: set unknown parameter 0x%x to 0x%x\n", param, val);
- return;
- }
- SynthGuiCtrl* ctrl = &dctrl[param];
- ctrl->editor->blockSignals(true);
- if (ctrl->type == SynthGuiCtrl::SLIDER) {
- QSlider* slider = (QSlider*)(ctrl->editor);
- int max = slider->maximum();
- if(val < 0) val = (val * max + 8191) / 16383 - 1;
- else val = (val * max + 8191) / 16383;
-
- slider->setValue(val);
- if (ctrl->label)
- ((QLCDNumber*)(ctrl->label))->display(val);
- }
- else if (ctrl->type == SynthGuiCtrl::COMBOBOX) {
- ((QComboBox*)(ctrl->editor))->setCurrentIndex(val);
- }
- else if (ctrl->type == SynthGuiCtrl::SWITCH) {
- ((QCheckBox*)(ctrl->editor))->setChecked(val);
- }
- ctrl->editor->blockSignals(false);
- }
-
-//---------------------------------------------------------
-// sysexReceived
-//---------------------------------------------------------
-
-void VAMGui::sysexReceived(const unsigned char* data, int len)
-{
- if (len >= 4) {
- //---------------------------------------------
- // MusE Soft Synth
- //---------------------------------------------
-
- if (data[0] == 0x7c) {
- if (data[1] == 2) { // vam
- if (data[2] == 2) { // parameter response
- if (len != 6) {
- fprintf(stderr, "vam gui: bad sysEx len\n");
- return;
- }
- int val = data[4] + (data[5]<<7);
- switch(data[3])
- {
- case DCO1_PITCHMOD:
- case DCO2_PITCHMOD:
- case DCO1_DETUNE:
- case DCO2_DETUNE:
- setParam(data[3], ((val + 1) * 2) - 16383);
- break;
- default:
- setParam(data[3], val);
- break;
- }
- return;
- }
- else if (data[2] == 1) { // param request
- return;
- }
- }
- }
- }
- fprintf(stderr, "vam gui: unknown sysex received, len %d:\n", len);
- for (int i = 0; i < len; ++i)
- fprintf(stderr, "%02x ", data[i]);
- fprintf(stderr, "\n");
-}
-
-//---------------------------------------------------------
-// processEvent
-//---------------------------------------------------------
-
-void VAMGui::processEvent(const MidiEvent& ev)
- {
- if (ev.type() == ME_CONTROLLER)
- setParam(ev.dataA() & 0xfff, ev.dataB());
- else if (ev.type() == ME_SYSEX)
- sysexReceived(ev.data(), ev.len())
- ;
- else
- printf("VAMGui::illegal event type received\n");
- }
-
-//---------------------------------------------------------
-// loadPresetsPressed
-//---------------------------------------------------------
-
-void VAMGui::loadPresetsPressed()
-{
-#if 0 // TODO
- QString iname;
- QString s(getenv("HOME"));
- QString fn = getOpenFileName(s, presetFileTypes, this,
- tr("MusE: Load VAM Presets"), 0);
- if (fn.isEmpty())
- return;
- bool popenFlag;
- FILE* f = fileOpen(this, fn, QString(".pre"), "r", popenFlag, true);
- if (f == 0)
- return;
- presets.clear();
- presetList->clear();
-
- Xml xml(f);
- int mode = 0;
- for (;;) {
- Xml::Token token = xml.parse();
- QString tag = xml.s1();
- switch (token) {
- case Xml::Error:
- case Xml::End:
- return;
- case Xml::TagStart:
- if (mode == 0 && tag == "muse")
- mode = 1;
-// else if (mode == 1 && tag == "instrument")
-// mode = 2;
-
- else if (mode == 2 && tag == "preset") {
- Preset preset;
- preset.readConfiguration(xml);
- presets.push_back(preset);
- presetList->insertItem(preset.name);
- }
- else if(mode != 1)
- xml.unknown("SynthPreset");
- break;
- case Xml::Attribut:
- if(mode == 1 && tag == "iname") {
-// fprintf(stderr, "%s\n", xml.s2().toLatin1().data());
- if(xml.s2() != "vam-1.0")
- return;
- else mode = 2;
- }
- break;
- case Xml::TagEnd:
- if (tag == "muse")
- goto ende;
- default:
- break;
- }
- }
-ende:
- if (popenFlag)
- pclose(f);
- else
- fclose(f);
-
- if (presetFileName) delete presetFileName;
- presetFileName = new QString(fn);
- QString dots ("...");
- fileName->setText(fn.right(32).insert(0, dots));
-
- if (presets.empty())
- return;
- Preset preset = presets.front();
- activatePreset(&preset);
-#endif
-}
-
-//---------------------------------------------------------
-// doSavePresets
-//---------------------------------------------------------
-void VAMGui::doSavePresets(const QString& /*fn*/, bool /*showWarning*/)
-{
-#if 0
- bool popenFlag;
- FILE* f = fileOpen(this, fn, QString(".pre"), "w", popenFlag, false, showWarning);
- if (f == 0)
- return;
- Xml xml(f);
- xml.header();
- xml.tag(0, "muse version=\"1.0\"");
- xml.tag(0, "instrument iname=\"vam-1.0\" /");
-
- for (iPreset i = presets.begin(); i != presets.end(); ++i)
- i->writeConfiguration(xml, 1);
-
- xml.tag(1, "/muse");
-
- if (popenFlag)
- pclose(f);
- else
- fclose(f);
-#endif
-}
-
-//---------------------------------------------------------
-// savePresetsPressed
-//---------------------------------------------------------
-
-void VAMGui::savePresetsPressed()
-{
-#if 0 // TODO
- QString s(getenv("MUSE"));
- QString fn = getSaveFileName(s, presetFileTypes, this,
- tr("MusE: Save VAM Presets"));
- if (fn.isEmpty())
- return;
- doSavePresets (fn, true);
-#endif
-}
-
-
-//---------------------------------------------------------
-// savePresetsToFilePressed
-//---------------------------------------------------------
-
-void VAMGui::savePresetsToFilePressed()
-{
- if (!presetFileName) return;
- doSavePresets (*presetFileName, false);
-}
-
-//---------------------------------------------------------
-// deletePresetPressed
-//---------------------------------------------------------
-
-void VAMGui::deletePresetPressed()
-{
- deleteNamedPreset (presetList->currentItem()->text());
-}
-
-//---------------------------------------------------------
-// readMessage
-//---------------------------------------------------------
-
-void VAMGui::readMessage(int)
- {
- MessGui::readMessage();
- }
-