summaryrefslogtreecommitdiff
path: root/attic/muse2-oom/muse2/synti/organ
diff options
context:
space:
mode:
Diffstat (limited to 'attic/muse2-oom/muse2/synti/organ')
-rw-r--r--attic/muse2-oom/muse2/synti/organ/CMakeLists.txt90
-rw-r--r--attic/muse2-oom/muse2/synti/organ/organ.cpp716
-rw-r--r--attic/muse2-oom/muse2/synti/organ/organ.h198
-rw-r--r--attic/muse2-oom/muse2/synti/organ/organgui.cpp185
-rw-r--r--attic/muse2-oom/muse2/synti/organ/organgui.h45
-rw-r--r--attic/muse2-oom/muse2/synti/organ/organguibase.ui1351
6 files changed, 0 insertions, 2585 deletions
diff --git a/attic/muse2-oom/muse2/synti/organ/CMakeLists.txt b/attic/muse2-oom/muse2/synti/organ/CMakeLists.txt
deleted file mode 100644
index 0d8dda90..00000000
--- a/attic/muse2-oom/muse2/synti/organ/CMakeLists.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-#=============================================================================
-# MusE
-# Linux Music Editor
-# $Id:$
-#
-# Copyright (C) 2002-2006 by Werner Schweer and others
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2.
-#
-# 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., 675 Mass Ave, Cambridge, MA 02139, USA.
-#=============================================================================
-
-##
-## Expand Qt macros in source files
-##
-QT4_WRAP_CPP ( organ_mocs
- organgui.h
- )
-
-##
-## UI files
-##
-file (GLOB organ_ui_files
- organguibase.ui
- )
-QT4_WRAP_UI ( organ_uis ${organ_ui_files} )
-
-##
-## List of source files to compile
-##
-file (GLOB organ_source_files
- organ.cpp
- organgui.cpp
- # reverb.cpp
- # routing.cpp
- )
-
-##
-## Define target
-##
-add_library ( organ SHARED
- ${PROJECT_SOURCE_DIR}/muse/xml.cpp
- ${organ_source_files}
- ${organ_mocs}
- ${organ_uis}
- )
-
-##
-## Append to the list of translations
-##
-set (FILES_TO_TRANSLATE
- ${FILES_TO_TRANSLATE}
- ${organ_source_files}
- ${organ_ui_files}
- CACHE INTERNAL ""
- )
-
-# - tell cmake to name target organ.so instead of
-# liborgan.so
-# - use precompiled header files
-#
-set_target_properties ( organ
- PROPERTIES PREFIX ""
- COMPILE_FLAGS "-fvisibility=hidden -O2 -include ${PROJECT_BINARY_DIR}/all-pic.h"
- )
-
-##
-## Linkage
-##
-target_link_libraries(organ
- synti
- # awl
- ${QT_LIBRARIES}
- )
-
-##
-## Install location
-##
-install( TARGETS organ
- DESTINATION ${MusE_SYNTHI_DIR}
- )
-
diff --git a/attic/muse2-oom/muse2/synti/organ/organ.cpp b/attic/muse2-oom/muse2/synti/organ/organ.cpp
deleted file mode 100644
index 1aa87742..00000000
--- a/attic/muse2-oom/muse2/synti/organ/organ.cpp
+++ /dev/null
@@ -1,716 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: organ.cpp,v 1.15.2.8 2009/12/06 10:05:00 terminator356 Exp $
-//
-// Parts of this file taken from:
-// Organ - Additive Organ Synthesizer Voice
-// Copyright (c) 1999, 2000 David A. Bartold
-//
-// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#include <cmath>
-#include <stdio.h>
-
-#include "muse/midi.h"
-//#include "libsynti/mpevent.h"
-#include "muse/mpevent.h"
-
-#include "organ.h"
-#include "organgui.h"
-
-//#define ORGAN_DEBUG
-
-SynthCtrl Organ::synthCtrl[] = {
- { "harm0", HARM0, 0 },
- { "harm1", HARM1, 0 },
- { "harm2", HARM2, 0 },
- { "harm3", HARM3, 0 },
- { "harm4", HARM4, 0 },
- { "harm5", HARM5, 0 },
- { "attackLo", ATTACK_LO, 20 },
- { "decayLo", DECAY_LO, 20 },
- { "sustainLo", SUSTAIN_LO, 0 },
- { "releaseLo", RELEASE_LO, 20 },
- { "attackHi", ATTACK_HI, 10 },
- { "decayHi", DECAY_HI, 10 },
- { "sustainHi", SUSTAIN_HI, 0 },
- { "releaseHi", RELEASE_HI, 10 },
- { "brass", BRASS, 1 },
- { "flute", FLUTE, 1 },
- { "reed", REED, 1 },
- { "velocity", VELO, 0 },
- // next controller not send as init data
- { "volume", CTRL_VOLUME, 100 },
- };
-
-static int NUM_CONTROLLER = sizeof(Organ::synthCtrl)/sizeof(*(Organ::synthCtrl));
-static int NUM_INIT_CONTROLLER = NUM_CONTROLLER - 1;
-
-float* Organ::sine_table;
-float* Organ::g_triangle_table;
-float* Organ::g_pulse_table;
-int Organ::useCount = 0;
-double Organ::cb2amp_tab[MAX_ATTENUATION];
-unsigned Organ::freq256[128];
-
-//---------------------------------------------------------
-// cb2amp
-// convert centibel to amplification (0 - 96dB)
-//---------------------------------------------------------
-
-double Organ::cb2amp(int cb)
- {
- if (cb < 0)
- return 1.0;
- if (cb >= MAX_ATTENUATION)
- return 0.0;
- return cb2amp_tab[cb];
- }
-
-//---------------------------------------------------------
-// Organ
-//---------------------------------------------------------
-
-Organ::Organ(int sr)
- : Mess(1)
- {
- idata = new int[NUM_CONTROLLER];
- setSampleRate(sr);
- gui = 0;
-
- ++useCount;
- if (useCount > 1)
- return;
-
- // centibels to amplitude conversion
- for (int i = 0; i < MAX_ATTENUATION; i++)
- cb2amp_tab[i] = pow(10.0, double(i) / -200.0);
-
- for (int i = 0; i < 128; ++i) {
- double freq = 8.176 * exp(double(i)*log(2.0)/12.0);
- freq256[i] = (int) (freq * ((double) RESOLUTION) / sr * 256.0);
- }
- int size = RESOLUTION;
- int half = size / 2;
- int slope = size / 10;
- int i;
-
- // Initialize sine table.
- sine_table = new float[size];
- for (i = 0; i < size; i++)
- sine_table[i] = sin ((i * 2.0 * M_PI) / size) / 6.0;
-
- // Initialize triangle table.
- g_triangle_table = new float[size];
- for (i = 0; i < half; i++)
- g_triangle_table[i] = (4.0 / size * i - 1.0) / 6.0;
- for (; i < size; i++)
- g_triangle_table[i] = (4.0 / size * (size - i) - 1.0) / 6.0;
-
- // Initialize pulse table.
- g_pulse_table = new float[size];
- for (i = 0; i < slope; i++)
- g_pulse_table[i] = (((double) -i) / slope) / 6.0;
- for (; i < half - slope; i++)
- g_pulse_table[i] = -1.0 / 6.0;
- for (; i < half + slope; i++)
- g_pulse_table[i] = (((double) i - half) / slope) / 6.0;
- for (; i < size - slope; i++)
- g_pulse_table[i] = 1.0 / 6.0;
- for (; i < size; i++)
- g_pulse_table[i] = (((double) size - i) / slope) / 6.0;
- }
-
-//---------------------------------------------------------
-// ~Organ
-//---------------------------------------------------------
-
-Organ::~Organ()
- {
- if (gui)
- delete gui;
- delete idata;
- --useCount;
- if (useCount == 0) {
- delete[] g_pulse_table;
- delete[] g_triangle_table;
- delete[] sine_table;
- }
- }
-
-//---------------------------------------------------------
-// table_pos
-//---------------------------------------------------------
-
-static inline float table_pos (float* table, unsigned long freq_256, unsigned *accum)
- {
- *accum += freq_256;
- while (*accum >= RESOLUTION * 256)
- *accum -= RESOLUTION * 256;
- return table[*accum >> 8];
- }
-
-//---------------------------------------------------------
-// init
-//---------------------------------------------------------
-
-bool Organ::init(const char* name)
- {
- gui = new OrganGui;
- gui->setWindowTitle(QString(name));
- gui->show();
-
- for (int i = 0; i < NUM_CONTROLLER; ++i)
- setController(0, synthCtrl[i].num, synthCtrl[i].val);
-
- for (int i = 0; i < VOICES; ++i)
- voices[i].isOn = false;
- return false;
- }
-
-//---------------------------------------------------------
-// processMessages
-// Called from host always, even if output path is unconnected.
-//---------------------------------------------------------
-
-void Organ::processMessages()
-{
- //Process messages from the gui
- //
- // get and process all pending events from the
- // synthesizer GUI
- //
- while (gui->fifoSize())
- {
- MidiPlayEvent ev = gui->readEvent();
- if (ev.type() == ME_CONTROLLER)
- {
- // process local?
- setController(ev.dataA(), ev.dataB());
- sendEvent(ev);
- }
- else
- printf("Organ::process(): unknown event\n");
- }
-}
-
-//---------------------------------------------------------
-// process
-// Called from host, ONLY if output path is connected.
-//---------------------------------------------------------
-
-void Organ::process(float** ports, int offset, int sampleCount)
- {
- /*
- //
- // get and process all pending events from the
- // synthesizer GUI
- //
- while (gui->fifoSize()) {
- MidiPlayEvent ev = gui->readEvent();
- if (ev.type() == ME_CONTROLLER) {
- // process local?
- setController(ev.dataA(), ev.dataB());
- sendEvent(ev);
- }
- else
- printf("Organ::process(): unknown event\n");
- }
- */
-
- float* buffer = *ports + offset;
- for (int i = 0; i < VOICES; ++i) {
- Voice* v = &voices[i];
- if (!v->isOn)
- continue;
- double vol = velo ? v->velocity : 1.0;
- vol *= volume;
-
- unsigned freq_256 = freq256[v->pitch];
- unsigned* harm0_accum = &(v->harm0_accum);
- unsigned* harm1_accum = &(v->harm1_accum);
- unsigned* harm2_accum = &(v->harm2_accum);
- unsigned* harm3_accum = &(v->harm3_accum);
- unsigned* harm4_accum = &(v->harm4_accum);
- unsigned* harm5_accum = &(v->harm5_accum);
-
- unsigned long freq_256_harm2, freq_256_harm3;
- unsigned long freq_256_harm4, freq_256_harm5;
-
- float* reed_table = reed ? g_pulse_table : sine_table;
- float* flute_table = flute ? g_triangle_table : sine_table;
-
- unsigned freq_256_harm0 = freq_256 / 2;
- unsigned freq_256_harm1 = freq_256;
-
- if (brass) {
- freq_256_harm2 = freq_256 * 2;
- freq_256_harm3 = freq_256_harm2 * 2;
- freq_256_harm4 = freq_256_harm3 * 2;
- freq_256_harm5 = freq_256_harm4 * 2;
- for (int i = 0; i < sampleCount; i++) {
- int a1=0, a2=0; //prevent compiler warning: unitialized usage of vars a1 & a2
- switch(v->state1) {
- case ATTACK:
- if (v->envL1.step(&a1))
- break;
- v->state1 = DECAY;
- case DECAY:
- if (v->envL2.step(&a1))
- break;
- v->state1 = SUSTAIN;
- case SUSTAIN:
- a1 = sustain0;
- break;
- case RELEASE:
- if (v->envL3.step(&a1))
- break;
- v->state1 = OFF;
- a1 = MAX_ATTENUATION;
- break;
- }
- switch(v->state2) {
- case ATTACK:
- if (v->envH1.step(&a2))
- break;
- v->state2 = DECAY;
- case DECAY:
- if (v->envH2.step(&a2))
- break;
- v->state2 = SUSTAIN;
- case SUSTAIN:
- a2 = sustain1;
- break;
- case RELEASE:
- if (v->envH3.step(&a2))
- break;
- v->state2 = OFF;
- a1 = MAX_ATTENUATION;
- break;
- }
- if (v->state1 == OFF && v->state2 == OFF) {
- v->isOn = false;
- break;
- }
- buffer[i] +=
- (table_pos (sine_table, freq_256_harm0, harm0_accum) * harm0
- + table_pos (sine_table, freq_256_harm1, harm1_accum) * harm1
- + table_pos (reed_table, freq_256_harm2, harm2_accum) * harm2)
- * cb2amp(a1) * vol
- + (table_pos (sine_table, freq_256_harm3, harm3_accum) * harm3
- + table_pos (flute_table, freq_256_harm4, harm4_accum) * harm4
- + table_pos (flute_table, freq_256_harm5, harm5_accum) * harm5)
- * cb2amp(a2) * vol;
- }
- }
- else {
- freq_256_harm2 = freq_256 * 3 / 2;
- freq_256_harm3 = freq_256 * 2;
- freq_256_harm4 = freq_256 * 3;
- freq_256_harm5 = freq_256_harm3 * 2;
- for (int i = 0; i < sampleCount; i++) {
- int a1=0, a2=0;//prevent compiler warning: unitialized usage of vars a1 & a2
- switch(v->state1) {
- case ATTACK:
- if (v->envL1.step(&a1))
- break;
- v->state1 = DECAY;
- case DECAY:
- if (v->envL2.step(&a1))
- break;
- v->state1 = SUSTAIN;
- case SUSTAIN:
- a1 = sustain0;
- break;
- case RELEASE:
- if (v->envL3.step(&a1))
- break;
- v->state1 = OFF;
- a1 = MAX_ATTENUATION;
- break;
- }
- switch(v->state2) {
- case ATTACK:
- if (v->envH1.step(&a2))
- break;
- v->state2 = DECAY;
- case DECAY:
- if (v->envH2.step(&a2))
- break;
- v->state2 = SUSTAIN;
- case SUSTAIN:
- a2 = sustain1;
- break;
- case RELEASE:
- if (v->envH3.step(&a2))
- break;
- v->state2 = OFF;
- a1 = MAX_ATTENUATION;
- break;
- }
- if (v->state1 == OFF && v->state2 == OFF) {
- v->isOn = false;
- break;
- }
- buffer[i] +=
- (table_pos (sine_table, freq_256_harm0, harm0_accum) * harm0
- + table_pos (sine_table, freq_256_harm1, harm1_accum) * harm1
- + table_pos (sine_table, freq_256_harm2, harm2_accum) * harm2)
- * cb2amp(a1) * vol
- + (table_pos (reed_table, freq_256_harm3, harm3_accum) * harm3
- + table_pos (sine_table, freq_256_harm4, harm4_accum) * harm4
- + table_pos (flute_table, freq_256_harm5, harm5_accum) * harm5)
- * cb2amp(a2) * vol;
- }
- }
- }
- }
-
-//---------------------------------------------------------
-// playNote
-//---------------------------------------------------------
-
-bool Organ::playNote(int channel, int pitch, int velo)
- {
- if (velo == 0) {
- noteoff(channel, pitch);
- return false;
- }
- for (int i = 0; i < VOICES; ++i) {
- if (voices[i].isOn)
- continue;
- voices[i].isOn = true;
- voices[i].pitch = pitch;
- voices[i].channel = channel;
- // velo is never 0
- voices[i].velocity = cb2amp(int(200 * log10((127.0 * 127)/(velo*velo))));
- voices[i].state1 = ATTACK;
- voices[i].state2 = ATTACK;
- voices[i].envL1.set(attack0, MAX_ATTENUATION, 0);
- voices[i].envL2.set(decay0, MAX_ATTENUATION, sustain0);
- voices[i].envL3.set(release0, sustain0, MAX_ATTENUATION);
-
- voices[i].envH1.set(attack1, MAX_ATTENUATION, 0);
- voices[i].envH2.set(decay1, MAX_ATTENUATION, sustain1);
- voices[i].envH3.set(release1, sustain1, MAX_ATTENUATION);
-
- voices[i].harm0_accum = 0;
- voices[i].harm1_accum = 0;
- voices[i].harm2_accum = 0;
- voices[i].harm3_accum = 0;
- voices[i].harm4_accum = 0;
- voices[i].harm5_accum = 0;
- return false;
- }
- printf("organ: voices overflow!\n");
- return false;
- }
-
-//---------------------------------------------------------
-// noteoff
-//---------------------------------------------------------
-
-void Organ::noteoff(int channel, int pitch)
- {
- bool found = false;
- for (int i = 0; i < VOICES; ++i) {
- if (voices[i].isOn && (voices[i].pitch == pitch)
- && (voices[i].channel == channel)) {
- found = true;
- voices[i].state1 = RELEASE;
- voices[i].state2 = RELEASE;
- }
- }
- if (!found)
- printf("Organ: noteoff %d:%d not found\n", channel, pitch);
- }
-
-//---------------------------------------------------------
-// setController
-//---------------------------------------------------------
-
-void Organ::setController(int ctrl, int data)
- {
- int sr = sampleRate();
-
- // Changed By T356.
- // Because of muse's auto-bias controllers, some of these negative-range
- // controls need to apply the auto-bias correction.
-
- switch (ctrl) {
- case HARM0:
- //harm0 = cb2amp(-data);
- harm0 = cb2amp(-data + 8192);
- break;
- case HARM1:
- //harm1 = cb2amp(-data);
- harm1 = cb2amp(-data + 8192);
- break;
- case HARM2:
- //harm2 = cb2amp(-data);
- harm2 = cb2amp(-data + 8192);
- break;
- case HARM3:
- //harm3 = cb2amp(-data);
- harm3 = cb2amp(-data + 8192);
- break;
- case HARM4:
- //harm4 = cb2amp(-data);
- harm4 = cb2amp(-data + 8192);
- break;
- case HARM5:
- //harm5 = cb2amp(-data);
- harm5 = cb2amp(-data + 8192);
- break;
- case ATTACK_LO: // maxval -> 500msec
- attack0 = (data * sr) / 1000;
- break;
- case DECAY_LO: // maxval -> 5000msec
- decay0 = (data * sr) / 1000;
- break;
- case SUSTAIN_LO:
- //sustain0 = -data;
- sustain0 = -data + 8192;
- break;
- case RELEASE_LO:
- release0 = (data * sr) / 1000;
- break;
- case ATTACK_HI:
- attack1 = (data * sr) / 1000;
- break;
- case DECAY_HI:
- decay1 = (data * sr) / 1000;
- break;
- case SUSTAIN_HI:
- //sustain1 = -data;
- sustain1 = -data + 8192;
- break;
- case RELEASE_HI:
- release1 = (data * sr) / 1000;
- break;
- case BRASS:
- brass = data;
- break;
- case FLUTE:
- flute = data;
- break;
- case REED:
- reed = data;
- break;
- case VELO:
- velo = data;
- break;
- case CTRL_VOLUME:
- data &= 0x7f;
- volume = data == 0 ? 0.0 : cb2amp(int(200 * log10((127.0 * 127)/(data*data))));
- break;
- case CTRL_ALL_SOUNDS_OFF:
- for (int i = 0; i < VOICES; ++i)
- voices[i].isOn = false;
- break;
- case CTRL_RESET_ALL_CTRL:
- for (int i = 0; i < NUM_CONTROLLER; ++i)
- setController(0, synthCtrl[i].num, synthCtrl[i].val);
- break;
- default:
- fprintf(stderr, "Organ:set unknown Ctrl 0x%x to 0x%x\n", ctrl, data);
- return;
- }
- for (int i = 0; i < NUM_CONTROLLER; ++i) {
- if (synthCtrl[i].num == ctrl) {
- synthCtrl[i].val = data;
- break;
- }
- }
- }
-
-//---------------------------------------------------------
-// setController
-//---------------------------------------------------------
-
-bool Organ::setController(int channel, int ctrl, int data)
- {
- setController(ctrl, data);
-
- switch (ctrl) {
- case HARM0:
- case HARM1:
- case HARM2:
- case HARM3:
- case HARM4:
- case HARM5:
- case ATTACK_LO:
- case DECAY_LO:
- case SUSTAIN_LO:
- case RELEASE_LO:
- case ATTACK_HI:
- case DECAY_HI:
- case SUSTAIN_HI:
- case RELEASE_HI:
- case BRASS:
- case FLUTE:
- case REED:
- case VELO:
- {
- MidiPlayEvent ev(0, 0, channel, ME_CONTROLLER, ctrl, data);
- #ifdef ORGAN_DEBUG
- fprintf(stderr, "OrganGui:setController before gui->writeEvent ctrl:%d data:%d\n", ctrl, data);
- #endif
-
- gui->writeEvent(ev);
- }
- break;
- default:
- break;
- }
- return false;
- }
-
-//---------------------------------------------------------
-// sysex
-//---------------------------------------------------------
-
-bool Organ::sysex(int n, const unsigned char* data)
- {
- #ifdef ORGAN_DEBUG
- printf("Organ: sysex\n");
- #endif
- if (unsigned(n) != (NUM_INIT_CONTROLLER * sizeof(int))) {
- printf("Organ: unknown sysex\n");
- return false;
- }
- int* s = (int*) data;
- for (int i = 0; i < NUM_INIT_CONTROLLER; ++i) {
- int val = *s++;
- #ifdef ORGAN_DEBUG
- printf("Organ: sysex before setController num:%d val:%d\n", synthCtrl[i].num, val);
- #endif
- setController(0, synthCtrl[i].num, val);
- }
- return false;
- }
-
-//---------------------------------------------------------
-// getInitData
-//---------------------------------------------------------
-
-void Organ::getInitData(int* n, const unsigned char**p) const
- {
- int* d = idata;
- for (int i = 0; i < NUM_INIT_CONTROLLER; ++i)
- *d++ = synthCtrl[i].val;
- *n = NUM_INIT_CONTROLLER * sizeof(int); // sizeof(idata);
- *p = (unsigned char*)idata;
- }
-
-//---------------------------------------------------------
-// MESS
-//---------------------------------------------------------
-
-//---------------------------------------------------------
-// getControllerInfo
-//---------------------------------------------------------
-
-int Organ::getControllerInfo(int id, const char** name, int* controller,
- int* min, int* max, int* initval) const
- {
- if (id >= NUM_CONTROLLER)
- return 0;
- *controller = synthCtrl[id].num;
- *name = synthCtrl[id].name;
- *initval = synthCtrl[id].val;
-
- if(synthCtrl[id].num == CTRL_VOLUME)
- {
- *min = 0;
- *max = 127;
- }
- else
- gui->getControllerMinMax(id,min,max);
-
- //*min = 0;
- //*max = 128*128-1;
- return ++id;
- }
-
-//---------------------------------------------------------
-// guiVisible
-//---------------------------------------------------------
-
-bool Organ::guiVisible() const
- {
- return gui->isVisible();
- }
-
-//---------------------------------------------------------
-// showGui
-//---------------------------------------------------------
-
-void Organ::showGui(bool val)
- {
- gui->setVisible(val);
- }
-
-//---------------------------------------------------------
-// getGeometry
-//---------------------------------------------------------
-
-void Organ::getGeometry(int* x, int* y, int* w, int* h) const
- {
- QPoint pos(gui->pos());
- QSize size(gui->size());
- *x = pos.x();
- *y = pos.y();
- *w = size.width();
- *h = size.height();
- }
-
-//---------------------------------------------------------
-// setGeometry
-//---------------------------------------------------------
-
-void Organ::setGeometry(int x, int y, int w, int h)
- {
- gui->resize(QSize(w, h));
- gui->move(QPoint(x, y));
- }
-
-//---------------------------------------------------------
-// instantiate
-// construct a new synthesizer instance
-//---------------------------------------------------------
-
-static Mess* instantiate(int sr, QWidget*, QString* /*projectPathPtr*/, const char* name)
- {
- Organ* synth = new Organ(sr);
- if (synth->init(name)) {
- delete synth;
- synth = 0;
- }
- return synth;
- }
-
-//---------------------------------------------------------
-// msynth_descriptor
-// Return a descriptor of the requested plugin type.
-//---------------------------------------------------------
-
-extern "C" {
- static MESS descriptor = {
- "Organ",
- "Organ based on David A. Bartold's LADSPA plugin",
- "0.1", // version string
- MESS_MAJOR_VERSION, MESS_MINOR_VERSION,
- instantiate,
- };
- // We must compile with -fvisibility=hidden to avoid namespace
- // conflicts with global variables.
- // Only visible symbol is "mess_descriptor".
- // (TODO: all plugins should be compiled this way)
-
- __attribute__ ((visibility("default")))
- const MESS* mess_descriptor() { return &descriptor; }
- }
-
diff --git a/attic/muse2-oom/muse2/synti/organ/organ.h b/attic/muse2-oom/muse2/synti/organ/organ.h
deleted file mode 100644
index 308646e1..00000000
--- a/attic/muse2-oom/muse2/synti/organ/organ.h
+++ /dev/null
@@ -1,198 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: organ.h,v 1.5.2.3 2009/11/19 04:20:33 terminator356 Exp $
-//
-// Parts of this file taken from:
-// Organ - Additive Organ Synthesizer Voice
-// Copyright (c) 1999, 2000 David A. Bartold
-//
-// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#ifndef __ORGAN_H__
-#define __ORGAN_H__
-
-#include "muse/midictrl.h"
-#include "libsynti/mess.h"
-
-#define RESOLUTION (16384*2)
-#define VOICES 128 // max polyphony
-
-class OrganGui;
-
-static const int MAX_ATTENUATION = 960;
-
-enum EnvelopeState {
- ATTACK,
- DECAY,
- SUSTAIN,
- RELEASE,
- OFF
- };
-
-//---------------------------------------------------------
-// Envelope
-//---------------------------------------------------------
-
-struct Envelope {
- int ticks; // len of segment
- int error, delta, schritt;
- int y, yinc;
-
- void set(int t, int y1, int y2) {
- ticks = t;
- y = y1;
- int dy = y2 - y1;
- int dx = t;
- error = -dx;
- schritt = 2*dx;
- if (dy < 0) {
- yinc = -1;
- delta = -2 * dy;
- }
- else {
- yinc = 1;
- delta = 2 * dy;
- }
- }
-
- // return false on envelope end
- bool step(int* a) {
- *a = y;
- if (ticks == 0)
- return false;
- error += delta;
- while (error > 0) {
- y += yinc;
- error -= schritt;
- }
- --ticks;
- return true;
- }
- };
-
-static const int HARM0 = 0 + CTRL_RPN14_OFFSET;
-static const int HARM1 = 1 + CTRL_RPN14_OFFSET;
-static const int HARM2 = 2 + CTRL_RPN14_OFFSET;
-static const int HARM3 = 3 + CTRL_RPN14_OFFSET;
-static const int HARM4 = 4 + CTRL_RPN14_OFFSET;
-static const int HARM5 = 5 + CTRL_RPN14_OFFSET;
-static const int ATTACK_LO = 6 + CTRL_RPN14_OFFSET;
-static const int DECAY_LO = 7 + CTRL_RPN14_OFFSET;
-static const int SUSTAIN_LO = 8 + CTRL_RPN14_OFFSET;
-static const int RELEASE_LO = 9 + CTRL_RPN14_OFFSET;
-static const int ATTACK_HI = 10 + CTRL_RPN14_OFFSET;
-static const int DECAY_HI = 11 + CTRL_RPN14_OFFSET;
-static const int SUSTAIN_HI = 12 + CTRL_RPN14_OFFSET;
-static const int RELEASE_HI = 13 + CTRL_RPN14_OFFSET;
-static const int BRASS = 14 + CTRL_RPN14_OFFSET;
-static const int FLUTE = 15 + CTRL_RPN14_OFFSET;
-static const int REED = 16 + CTRL_RPN14_OFFSET;
-static const int VELO = 17 + CTRL_RPN14_OFFSET;
-
-//---------------------------------------------------------
-// SynthCtrl
-//---------------------------------------------------------
-
-struct SynthCtrl {
- const char* name;
- int num;
- int val;
- };
-
-//---------------------------------------------------------
-// Voice
-//---------------------------------------------------------
-
-struct Voice {
- bool isOn;
- int pitch;
- int channel;
-
- double velocity;
-
- int state1, state2;
- Envelope envL1, envL2, envL3;
- Envelope envH1, envH2, envH3;
-
- unsigned harm0_accum;
- unsigned harm1_accum;
- unsigned harm2_accum;
- unsigned harm3_accum;
- unsigned harm4_accum;
- unsigned harm5_accum;
- };
-
-//---------------------------------------------------------
-// Preset
-//---------------------------------------------------------
-
-struct Preset {
- char* name;
- bool brass, flute, reed;
- int attack0, attack1;
- int release0, release1;
- int decay0, decay1;
- double harm0, harm1, harm2, harm3, harm4, harm5;
- bool velo;
- };
-
-//---------------------------------------------------------
-// Organ
-//---------------------------------------------------------
-
-class Organ : public Mess {
- static int useCount;
-
- static double cb2amp_tab[MAX_ATTENUATION];
- static unsigned freq256[128];
- static double cb2amp(int cb);
-
- int* idata; // buffer for init data
-
- bool brass, flute, reed;
- int attack0, attack1;
- int release0, release1;
- int decay0, decay1; // ticks
- int sustain0, sustain1; // centibel
- bool velo;
- double volume;
-
- double harm0, harm1, harm2, harm3, harm4, harm5;
-
- Voice voices[VOICES];
-
- static float* sine_table;
- static float* g_triangle_table;
- static float* g_pulse_table;
-
- void noteoff(int channel, int pitch);
- void setController(int ctrl, int val);
-
-
- OrganGui* gui;
-
- public:
- virtual void processMessages();
- virtual void process(float**, int, int);
- virtual bool playNote(int channel, int pitch, int velo);
- virtual bool setController(int channel, int ctrl, int val);
-
- virtual int getControllerInfo(int, const char**, int*, int*, int*, int*) const;
- virtual void getInitData(int*, const unsigned char**) const;
-
- virtual bool guiVisible() const;
- virtual void showGui(bool);
- virtual bool hasGui() const { return true; }
- virtual void getGeometry(int* x, int* y, int* w, int* h) const;
- virtual void setGeometry(int x, int y, int w, int h);
- virtual bool sysex(int, const unsigned char*);
- static SynthCtrl synthCtrl[];
- Organ(int sampleRate);
- ~Organ();
- bool init(const char* name);
- };
-
-#endif
-
diff --git a/attic/muse2-oom/muse2/synti/organ/organgui.cpp b/attic/muse2-oom/muse2/synti/organ/organgui.cpp
deleted file mode 100644
index 9b763fd6..00000000
--- a/attic/muse2-oom/muse2/synti/organ/organgui.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: organgui.cpp,v 1.16.2.3 2009/11/16 04:30:46 terminator356 Exp $
-//
-// This is a simple GUI implemented with QT for
-// organ software synthesizer.
-//
-// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#include <unistd.h>
-#include <stdlib.h>
-#include <list>
-
-#include <QCheckBox>
-#include <QSignalMapper>
-#include <QSlider>
-#include <QSocketNotifier>
-#include <QSpinBox>
-
-#include "organgui.h"
-#include "muse/midi.h"
-#include "muse/midictrl.h"
-
-//#define ORGANGUI_DEBUG
-
-//---------------------------------------------------------
-// OrganGui
-//---------------------------------------------------------
-
-OrganGui::OrganGui()
- : QWidget(0, Qt::Window), MessGui()
- {
- QSocketNotifier* s = new QSocketNotifier(readFd, QSocketNotifier::Read);
- connect(s, SIGNAL(activated(int)), SLOT(readMessage(int)));
-
- dctrl[0] = SynthGuiCtrl(p1, lcd1, SynthGuiCtrl::SLIDER);
- dctrl[1] = SynthGuiCtrl(p2, lcd2, SynthGuiCtrl::SLIDER);
- dctrl[2] = SynthGuiCtrl(p3, lcd3, SynthGuiCtrl::SLIDER);
- dctrl[3] = SynthGuiCtrl(p4, lcd4, SynthGuiCtrl::SLIDER);
- dctrl[4] = SynthGuiCtrl(p5, lcd5, SynthGuiCtrl::SLIDER);
- dctrl[5] = SynthGuiCtrl(p6, lcd6, SynthGuiCtrl::SLIDER);
- dctrl[6] = SynthGuiCtrl(p7, lcd7, SynthGuiCtrl::SLIDER);
- dctrl[7] = SynthGuiCtrl(p8, lcd8, SynthGuiCtrl::SLIDER);
- dctrl[8] = SynthGuiCtrl(p9, lcd9, SynthGuiCtrl::SLIDER);
- dctrl[9] = SynthGuiCtrl(p10, lcd10, SynthGuiCtrl::SLIDER);
- dctrl[10] = SynthGuiCtrl(p11, lcd11, SynthGuiCtrl::SLIDER);
- dctrl[11] = SynthGuiCtrl(p12, lcd12, SynthGuiCtrl::SLIDER);
- dctrl[12] = SynthGuiCtrl(p13, lcd13, SynthGuiCtrl::SLIDER);
- dctrl[13] = SynthGuiCtrl(p14, lcd14, SynthGuiCtrl::SLIDER);
- dctrl[14] = SynthGuiCtrl(sw1, 0, SynthGuiCtrl::SWITCH);
- dctrl[15] = SynthGuiCtrl(sw3, 0, SynthGuiCtrl::SWITCH);
- dctrl[16] = SynthGuiCtrl(sw2, 0, SynthGuiCtrl::SWITCH);
- dctrl[17] = SynthGuiCtrl(sw4, 0, SynthGuiCtrl::SWITCH);
-
- map = new QSignalMapper(this);
- for (int i = 0; i < NUM_GUI_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::SWITCH)
- connect((QCheckBox*)(dctrl[i].editor), SIGNAL(toggled(bool)), map, SLOT(map()));
- }
- connect(map, SIGNAL(mapped(int)), this, SLOT(ctrlChanged(int)));
-
- // work around for probable QT/WM interaction bug.
- // for certain window managers, e.g xfce, this window is
- // is displayed although not specifically set to show();
- // bug: 2811156 Softsynth GUI unclosable with XFCE4 (and a few others)
- show();
- hide();
- }
-
-//---------------------------------------------------------
-// ctrlChanged
-//---------------------------------------------------------
-
-void OrganGui::ctrlChanged(int idx)
- {
- SynthGuiCtrl* ctrl = &dctrl[idx];
- int val = 0;
- if (ctrl->type == SynthGuiCtrl::SLIDER) {
- QSlider* slider = (QSlider*)(ctrl->editor);
- val = slider->value();
- // By T356. Apply auto-bias center value.
- if(slider->minimum() < 0)
- val += 8192;
- }
- else if (ctrl->type == SynthGuiCtrl::SWITCH) {
- val = ((QCheckBox*)(ctrl->editor))->isChecked();
- }
- sendController(0, idx + CTRL_RPN14_OFFSET, val);
- }
-
-//---------------------------------------------------------
-// getControllerInfo
-// return min max values for controllers
-//---------------------------------------------------------
-int OrganGui::getControllerMinMax(int id, int* min, int* max) const
- {
- if (id >= NUM_GUI_CONTROLLER)
- return 0;
-
- const SynthGuiCtrl* ctrl = (const SynthGuiCtrl*)&dctrl[id];
- //int val = 0;
- if (ctrl->type == SynthGuiCtrl::SLIDER) {
- QSlider* slider = (QSlider*)(ctrl->editor);
- *max = slider->maximum();
- *min = slider->minimum();
- //val = (slider->value() * 16383 + max/2) / max;
-
- //val = 16383 + 1/2
- }
- else if (ctrl->type == SynthGuiCtrl::SWITCH) {
- //val = ((QCheckBox*)(ctrl->editor))->isOn();
- *min=0;
- *max=1;
- }
- return ++id;
- }
-
-//---------------------------------------------------------
-// setParam
-// set param in gui
-//---------------------------------------------------------
-
-void OrganGui::setParam(int param, int val)
- {
- #ifdef ORGANGUI_DEBUG
- fprintf(stderr, "OrganGui:setParam param:%d val:%d\n", param, val);
- #endif
-
- param &= 0xfff;
- if (param >= int(sizeof(dctrl)/sizeof(*dctrl))) {
- fprintf(stderr, "OrganGui: set unknown Ctrl 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;
-
- // By T356. Apply auto-bias center value.
- if(slider->minimum() < 0)
- val -= 8192;
-
- #ifdef ORGANGUI_DEBUG
- fprintf(stderr, "OrganGui:setParam setting slider val:%d\n", val);
- #endif
-
- slider->setValue(val);
- if (ctrl->label)
- ((QSpinBox*)(ctrl->label))->setValue(val);
- }
- else if (ctrl->type == SynthGuiCtrl::SWITCH) {
- ((QCheckBox*)(ctrl->editor))->setChecked(val);
- }
- ctrl->editor->blockSignals(false);
- }
-
-//---------------------------------------------------------
-// processEvent
-//---------------------------------------------------------
-
-void OrganGui::processEvent(const MidiPlayEvent& ev)
- {
- if (ev.type() == ME_CONTROLLER)
- setParam(ev.dataA(), ev.dataB());
- else
- printf("OrganGui::illegal event type received\n");
- }
-
-//---------------------------------------------------------
-// readMessage
-//---------------------------------------------------------
-
-void OrganGui::readMessage(int)
- {
- MessGui::readMessage();
- }
-
diff --git a/attic/muse2-oom/muse2/synti/organ/organgui.h b/attic/muse2-oom/muse2/synti/organ/organgui.h
deleted file mode 100644
index f246198d..00000000
--- a/attic/muse2-oom/muse2/synti/organ/organgui.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//=========================================================
-// MusE
-// Linux Music Editor
-// $Id: organgui.h,v 1.6.2.1 2005/12/29 23:33:50 spamatica Exp $
-//
-// (C) Copyright 2001-2004 Werner Schweer (ws@seh.de)
-//=========================================================
-
-#ifndef __ORGANGUI_H__
-#define __ORGANGUI_H__
-
-#include "ui_organguibase.h"
-#include "organ.h"
-#include "libsynti/gui.h"
-//#include "libsynti/mpevent.h"
-#include "muse/mpevent.h"
-
-class QWidget;
-class QSignalMapper;
-
-#define NUM_GUI_CONTROLLER 18
-
-//---------------------------------------------------------
-// OrganGui
-//---------------------------------------------------------
-
-class OrganGui : public QWidget, public Ui::OrganGuiBase, public MessGui {
- Q_OBJECT
-
- QSignalMapper* map;
- SynthGuiCtrl dctrl[NUM_GUI_CONTROLLER];
- void setParam(int, int);
-
- private slots:
- void ctrlChanged(int idx);
- void readMessage(int);
-
- public:
- virtual void processEvent(const MidiPlayEvent&);
- int getControllerMinMax(int id, int* min, int* max) const;
- OrganGui();
- };
-
-#endif
-
diff --git a/attic/muse2-oom/muse2/synti/organ/organguibase.ui b/attic/muse2-oom/muse2/synti/organ/organguibase.ui
deleted file mode 100644
index d3ed5c5f..00000000
--- a/attic/muse2-oom/muse2/synti/organ/organguibase.ui
+++ /dev/null
@@ -1,1351 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>OrganGuiBase</class>
- <widget class="QWidget" name="OrganGuiBase">
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>534</width>
- <height>366</height>
- </rect>
- </property>
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="windowTitle">
- <string>MusE: Organ</string>
- </property>
- <layout class="QGridLayout">
- <property name="margin">
- <number>4</number>
- </property>
- <property name="spacing">
- <number>6</number>
- </property>
- <item row="1" column="0">
- <widget class="QGroupBox" name="GroupBox1">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Drawbars</string>
- </property>
- <layout class="QGridLayout">
- <property name="margin">
- <number>6</number>
- </property>
- <property name="spacing">
- <number>2</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="TextLabel1">
- <property name="text">
- <string>16'</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="TextLabel4">
- <property name="text">
- <string>4'</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="4" column="0">
- <widget class="QLabel" name="TextLabel5">
- <property name="text">
- <string>2 2/3'</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="5" column="0">
- <widget class="QLabel" name="TextLabel6">
- <property name="text">
- <string>2'</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="TextLabel2">
- <property name="text">
- <string>5 1/3'</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="TextLabel3">
- <property name="text">
- <string>8'</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QSlider" name="p2">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="QSlider" name="p3">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="3" column="2">
- <widget class="QSlider" name="p4">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="4" column="2">
- <widget class="QSlider" name="p5">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="5" column="2">
- <widget class="QSlider" name="p6">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QSlider" name="p1">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="lcd1">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="lcd2">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="singleStep">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QSpinBox" name="lcd3">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="singleStep">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QSpinBox" name="lcd4">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="singleStep">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="4" column="1">
- <widget class="QSpinBox" name="lcd5">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="singleStep">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="5" column="1">
- <widget class="QSpinBox" name="lcd6">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="singleStep">
- <number>10</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QGroupBox" name="GroupBox4">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Envelope Hi</string>
- </property>
- <layout class="QGridLayout">
- <property name="margin">
- <number>11</number>
- </property>
- <property name="spacing">
- <number>2</number>
- </property>
- <item row="4" column="0">
- <widget class="QLabel" name="TextLabel14">
- <property name="text">
- <string>Release</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="0" rowspan="2">
- <widget class="QLabel" name="TextLabel13">
- <property name="text">
- <string>Sustain</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="TextLabel12">
- <property name="text">
- <string>Decay</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="0">
- <widget class="QLabel" name="TextLabel11">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Maximum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Attack</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="4" column="2">
- <widget class="QSlider" name="p14">
- <property name="maximum">
- <number>500</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>50</number>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="QSlider" name="p13">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QSlider" name="p12">
- <property name="maximum">
- <number>5000</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>500</number>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="lcd11">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>ms</string>
- </property>
- <property name="maximum">
- <number>500</number>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QSlider" name="p11">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="maximum">
- <number>500</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>50</number>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="lcd12">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>ms</string>
- </property>
- <property name="maximum">
- <number>5000</number>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QSpinBox" name="lcd13">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>cB</string>
- </property>
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- </widget>
- </item>
- <item row="3" column="1" rowspan="2">
- <widget class="QSpinBox" name="lcd14">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>ms</string>
- </property>
- <property name="maximum">
- <number>500</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QGroupBox" name="GroupBox2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Envelope Lo</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignLeading</set>
- </property>
- <layout class="QGridLayout">
- <property name="margin">
- <number>11</number>
- </property>
- <property name="spacing">
- <number>2</number>
- </property>
- <item row="0" column="0">
- <widget class="QLabel" name="TextLabel7">
- <property name="text">
- <string>Attack</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="1" column="0">
- <widget class="QLabel" name="TextLabel8">
- <property name="text">
- <string>Decay</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="2" column="0">
- <widget class="QLabel" name="TextLabel9">
- <property name="text">
- <string>Sustain</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QLabel" name="TextLabel10">
- <property name="text">
- <string>Release</string>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item row="0" column="2">
- <widget class="QSlider" name="p7">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="minimumSize">
- <size>
- <width>80</width>
- <height>0</height>
- </size>
- </property>
- <property name="maximum">
- <number>500</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>50</number>
- </property>
- </widget>
- </item>
- <item row="1" column="2">
- <widget class="QSlider" name="p8">
- <property name="maximum">
- <number>5000</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>500</number>
- </property>
- </widget>
- </item>
- <item row="2" column="2">
- <widget class="QSlider" name="p9">
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>10</number>
- </property>
- </widget>
- </item>
- <item row="3" column="2">
- <widget class="QSlider" name="p10">
- <property name="maximum">
- <number>500</number>
- </property>
- <property name="pageStep">
- <number>1</number>
- </property>
- <property name="orientation">
- <enum>Qt::Horizontal</enum>
- </property>
- <property name="tickPosition">
- <enum>QSlider::NoTicks</enum>
- </property>
- <property name="tickInterval">
- <number>50</number>
- </property>
- </widget>
- </item>
- <item row="0" column="1">
- <widget class="QSpinBox" name="lcd7">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>ms</string>
- </property>
- <property name="maximum">
- <number>500</number>
- </property>
- </widget>
- </item>
- <item row="1" column="1">
- <widget class="QSpinBox" name="lcd8">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>ms</string>
- </property>
- <property name="maximum">
- <number>5000</number>
- </property>
- </widget>
- </item>
- <item row="2" column="1">
- <widget class="QSpinBox" name="lcd9">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>cB</string>
- </property>
- <property name="minimum">
- <number>-960</number>
- </property>
- <property name="maximum">
- <number>0</number>
- </property>
- <property name="value">
- <number>0</number>
- </property>
- </widget>
- </item>
- <item row="3" column="1">
- <widget class="QSpinBox" name="lcd10">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="suffix">
- <string>ms</string>
- </property>
- <property name="maximum">
- <number>500</number>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- <item row="0" column="0">
- <layout class="QHBoxLayout">
- <item>
- <widget class="QLabel" name="TextLabel1_2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Preferred">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="font">
- <font>
- <pointsize>48</pointsize>
- </font>
- </property>
- <property name="text">
- <string>O-1</string>
- </property>
- <property name="alignment">
- <set>Qt::AlignCenter</set>
- </property>
- <property name="wordWrap">
- <bool>false</bool>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QGroupBox" name="GroupBox3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="title">
- <string>Oscillator</string>
- </property>
- <layout class="QVBoxLayout">
- <property name="spacing">
- <number>2</number>
- </property>
- <property name="margin">
- <number>11</number>
- </property>
- <item>
- <widget class="QCheckBox" name="sw1">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Brass</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="sw2">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Reed</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QCheckBox" name="sw3">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <property name="text">
- <string>Flute</string>
- </property>
- </widget>
- </item>
- <item>
- <spacer name="spacer1">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeType">
- <enum>QSizePolicy::Expanding</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>20</height>
- </size>
- </property>
- </spacer>
- </item>
- <item>
- <widget class="QCheckBox" name="sw4">
- <property name="text">
- <string>Velocity</string>
- </property>
- </widget>
- </item>
- </layout>
- </widget>
- </item>
- </layout>
- </item>
- </layout>
- </widget>
- <layoutdefault spacing="6" margin="11"/>
- <tabstops>
- <tabstop>p1</tabstop>
- <tabstop>p3</tabstop>
- <tabstop>p2</tabstop>
- <tabstop>p4</tabstop>
- <tabstop>p5</tabstop>
- <tabstop>p6</tabstop>
- <tabstop>p7</tabstop>
- <tabstop>p8</tabstop>
- <tabstop>p9</tabstop>
- <tabstop>p10</tabstop>
- <tabstop>p11</tabstop>
- <tabstop>p12</tabstop>
- <tabstop>p13</tabstop>
- <tabstop>p14</tabstop>
- <tabstop>sw1</tabstop>
- <tabstop>sw2</tabstop>
- <tabstop>sw3</tabstop>
- </tabstops>
- <resources/>
- <connections>
- <connection>
- <sender>p11</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd11</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p12</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd12</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p13</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd13</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p14</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd14</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p7</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd7</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p8</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd8</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p9</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd9</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p10</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd10</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p1</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd1</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p2</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd2</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p3</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd3</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p4</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd4</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p5</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd5</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>p6</sender>
- <signal>valueChanged(int)</signal>
- <receiver>lcd6</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd1</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p1</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd2</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p2</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd3</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p3</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd4</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p4</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd5</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p5</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd6</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p6</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd7</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p7</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd8</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p8</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd9</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p9</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd10</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p10</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd11</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p11</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd12</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p12</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd13</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p13</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- <connection>
- <sender>lcd14</sender>
- <signal>valueChanged(int)</signal>
- <receiver>p14</receiver>
- <slot>setValue(int)</slot>
- <hints>
- <hint type="sourcelabel">
- <x>20</x>
- <y>20</y>
- </hint>
- <hint type="destinationlabel">
- <x>20</x>
- <y>20</y>
- </hint>
- </hints>
- </connection>
- </connections>
-</ui>