diff options
author | Werner Schweer <ws.seh.de> | 2006-10-23 18:28:50 +0000 |
---|---|---|
committer | Werner Schweer <ws.seh.de> | 2006-10-23 18:28:50 +0000 |
commit | d64ded05c5d77cdec45a099d589566edfe98be50 (patch) | |
tree | dcfc4bed49b2d28e6d425ac83a8a3505a190bb93 | |
parent | bf0d6494e74e92206d889aeb6269cc4e514a720e (diff) |
updates
-rw-r--r-- | muse/ChangeLog | 2 | ||||
-rw-r--r-- | muse/NEWS | 1 | ||||
-rw-r--r-- | muse/muse/audio.cpp | 43 | ||||
-rw-r--r-- | muse/muse/audio.h | 8 | ||||
-rw-r--r-- | muse/muse/audiowriteback.cpp | 2 | ||||
-rw-r--r-- | muse/muse/driver/audiodev.h | 1 | ||||
-rw-r--r-- | muse/muse/driver/dummyaudio.cpp | 7 | ||||
-rw-r--r-- | muse/muse/driver/jack.cpp | 118 | ||||
-rw-r--r-- | muse/muse/driver/jackaudio.h | 16 | ||||
-rw-r--r-- | muse/muse/midiinport.cpp | 2 | ||||
-rw-r--r-- | muse/muse/midioutport.cpp | 15 | ||||
-rw-r--r-- | muse/muse/midiseq.cpp | 3 | ||||
-rw-r--r-- | muse/muse/miditrack.cpp | 10 | ||||
-rw-r--r-- | muse/muse/sync.cpp | 4 | ||||
-rw-r--r-- | muse/muse/synth.cpp | 4 | ||||
-rw-r--r-- | muse/muse/ticksynth.cpp | 3 | ||||
-rw-r--r-- | muse/synti/mus/mus.cpp | 1 | ||||
-rw-r--r-- | muse/synti/organ/organgui.ui | 1647 |
18 files changed, 938 insertions, 949 deletions
diff --git a/muse/ChangeLog b/muse/ChangeLog index b3b4fba2..3056feb6 100644 --- a/muse/ChangeLog +++ b/muse/ChangeLog @@ -1,3 +1,5 @@ +23.10 (ws) + - simple jack midi output now works 20.10 (ws) - add first support for jack midi - jack autostart @@ -3,6 +3,7 @@ MusE 1.0: - new "project" paradigma - "auto fill" parts - DSSI support + - JACK midi support - controller automation in arranger - audio metronome - support for VST plugins diff --git a/muse/muse/audio.cpp b/muse/muse/audio.cpp index ede753f1..b1185cf8 100644 --- a/muse/muse/audio.cpp +++ b/muse/muse/audio.cpp @@ -109,9 +109,6 @@ Audio::Audio() ticksBeat = 0; syncTime = 0.0; - syncFrame = 0; - frameOffset = 0; - state = STOP; lmark = 0; // left loop position rmark = 0; // right loop position @@ -163,9 +160,6 @@ bool Audio::start() ticksBeat = 0; syncTime = 0.0; - syncFrame = 0; - frameOffset = 0; - msg = 0; _pos.setFrame(~0); // make sure seek is not optimized away @@ -184,7 +178,7 @@ bool Audio::start() for (iTrack i = tl->begin(); i != tl->end(); ++i) (*i)->activate1(); seek(song->cpos()); - process(segmentSize); // warm up caches; audio must be stopped + process(segmentSize, STOP); // warm up caches; audio must be stopped audioDriver->start(realTimePriority); } else { @@ -309,7 +303,7 @@ printf("JACK: shutdown callback\n"); // of size "frames" //--------------------------------------------------------- -void Audio::process(unsigned frames) +void Audio::process(unsigned frames, int jackState) { // printf("process %d\n", frames); extern int watchAudio; @@ -325,7 +319,6 @@ void Audio::process(unsigned frames) } } - int jackState = audioDriver->getState(); if (jackState != state) { // printf("process %s %s\n", audioStates[state], audioStates[jackState]); if (state == START_PLAY && jackState == PLAY) { @@ -428,12 +421,9 @@ void Audio::process(unsigned frames) // // resync with audio interface - // syncFrame - free running JACK frame counter // syncTime - corresponding wall clock time // - syncFrame = audioDriver->framePos(); syncTime = curTime(); - frameOffset = syncFrame - framePos; // // compute current controller values @@ -464,6 +454,8 @@ void Audio::process(unsigned frames) for (iMidiOutPort i = mol->begin(); i != mol->end(); ++i) audioDriver->startMidiCycle((*i)->jackPort(0)); + processMidi(frames); + GroupList* gl = song->groups(); SynthIList* sl = song->syntis(); InputList* il = song->inputs(); @@ -578,10 +570,8 @@ void Audio::processMsg() song->processMsg(msg); if (isPlaying()) { _pos.setTick(_curTickPos); - int framePos = _pos.frame(); - syncFrame = audioDriver->framePos(); +// int framePos = _pos.frame(); syncTime = curTime(); - frameOffset = syncFrame - framePos; } break; @@ -603,8 +593,6 @@ void Audio::processMsg() void Audio::seek(const Pos& p) { _pos.setFrame(p.frame()); - syncFrame = audioDriver->framePos(); - frameOffset = syncFrame - _pos.frame(); _curTickPos = _pos.tick(); _nextTickPos = _curTickPos; updateController = true; @@ -693,26 +681,6 @@ void Audio::stopRolling() } //--------------------------------------------------------- -// curFrame -// extrapolates current play frame on syncTime/syncFrame -//--------------------------------------------------------- - -unsigned int Audio::curFrame() const - { - return audioDriver->framePos(); - } - -//--------------------------------------------------------- -// timestamp -// timestamp has only meaning when rolling -//--------------------------------------------------------- - -int Audio::timestamp() const - { - return (state == PLAY) ? (audioDriver->framePos() - frameOffset) : 0; - } - -//--------------------------------------------------------- // sendMsgToGui //--------------------------------------------------------- @@ -720,3 +688,4 @@ void Audio::sendMsgToGui(char c) { write(sigFd, &c, 1); } + diff --git a/muse/muse/audio.h b/muse/muse/audio.h index 985466dd..6934f0db 100644 --- a/muse/muse/audio.h +++ b/muse/muse/audio.h @@ -171,8 +171,7 @@ class Audio { int ticksBeat; double syncTime; // wall clock at last sync point - unsigned syncFrame; // corresponding frame no. to syncTime - unsigned frameOffset; // offset to free running hw frame counter +// unsigned syncFrame; // corresponding frame no. to syncTime State state; bool updateController; @@ -197,7 +196,7 @@ class Audio { Pos startRecordPos; Pos endRecordPos; - void process(unsigned frames); + void process(unsigned frames, int jackState); void processMidi(unsigned frames); bool sync(int state, unsigned frame); void shutdown(); @@ -265,11 +264,8 @@ class Audio { int curTickPos() const { return _curTickPos; } int nextTickPos() const { return _nextTickPos; } - int timestamp() const; - unsigned curFrame() const; bool freewheel() const { return _freewheel; } void setFreewheel(bool val); - int getFrameOffset() const { return frameOffset; } void initDevices(); void sendMsgToGui(char c); diff --git a/muse/muse/audiowriteback.cpp b/muse/muse/audiowriteback.cpp index 0b54e253..87b8f72f 100644 --- a/muse/muse/audiowriteback.cpp +++ b/muse/muse/audiowriteback.cpp @@ -62,7 +62,7 @@ void AudioWriteback::start(int priority) // processMsg //--------------------------------------------------------- -void AudioWriteback::processMsg1(const void* m) +void AudioWriteback::processMsg1(const void*) { while (counter) { q_atomic_decrement(&counter); diff --git a/muse/muse/driver/audiodev.h b/muse/muse/driver/audiodev.h index 5196375c..0494116f 100644 --- a/muse/muse/driver/audiodev.h +++ b/muse/muse/driver/audiodev.h @@ -41,7 +41,6 @@ class AudioDriver : public Driver { virtual void registerClient() = 0; virtual Port registerOutPort(const QString& name, bool midi) = 0; virtual Port registerInPort(const QString& name, bool midi) = 0; - virtual int getState() = 0; virtual unsigned getCurFrame() = 0; virtual int realtimePriority() const = 0; // return zero if not realtime virtual void startTransport() = 0; diff --git a/muse/muse/driver/dummyaudio.cpp b/muse/muse/driver/dummyaudio.cpp index a55a69bb..7550cc61 100644 --- a/muse/muse/driver/dummyaudio.cpp +++ b/muse/muse/driver/dummyaudio.cpp @@ -35,12 +35,12 @@ static double startTime; class DummyAudio : public AudioDriver { pthread_t dummyThread; float buffer[dummyFrames]; - int state; std::vector<QString> oPorts; std::vector<QString> iPorts; int realTimePriority; public: + int state; bool seekflag; unsigned pos; @@ -126,7 +126,6 @@ class DummyAudio : public AudioDriver { else return QString(iPorts[long(p)-3000]); } - virtual int getState() { return state; } virtual unsigned getCurFrame() { return pos; } virtual int realtimePriority() const { return 40; } virtual void startTransport() { @@ -234,7 +233,7 @@ static void* dummyLoop(void*) for (;;) { if (audioState == AUDIO_RUNNING) - audio->process(segmentSize); + audio->process(segmentSize, dummyAudio->state); else if (audioState == AUDIO_START1) audioState = AUDIO_START2; usleep(dummyFrames*1000000/AL::sampleRate); @@ -242,7 +241,7 @@ static void* dummyLoop(void*) audio->sync(Audio::STOP, dummyAudio->pos); dummyAudio->seekflag = false; } - if (dummyAudio->getState() == Audio::PLAY) { + if (dummyAudio->state == Audio::PLAY) { dummyAudio->pos += dummyFrames; } } diff --git a/muse/muse/driver/jack.cpp b/muse/muse/driver/jack.cpp index 56d78de5..e939046d 100644 --- a/muse/muse/driver/jack.cpp +++ b/muse/muse/driver/jack.cpp @@ -86,9 +86,19 @@ static void timebase_callback(jack_transport_state_t /* state */, static int processAudio(jack_nframes_t frames, void*) { +#if 0 + unsigned t1 = jackAudio->frameTime(); + unsigned t2 = jackAudio->lastFrameTime(); + unsigned t3 = jackAudio->framesSinceCyleStart(); + unsigned t4 = jackAudio->getCurFrame(); + +printf("cycle %8d %8d %8d %08d\n", t1, t2, t3, t4); +#endif + + int jackState = jackAudio->getTransportState(); segmentSize = frames; if (audioState == AUDIO_RUNNING) - audio->process((unsigned long)frames); + audio->process((unsigned long)frames, jackState); else if (audioState == AUDIO_STOP) { if (debugMsg) puts("jack calling when audio is stopped!\n"); @@ -99,6 +109,32 @@ static int processAudio(jack_nframes_t frames, void*) } //--------------------------------------------------------- +// getTransportState +//--------------------------------------------------------- + +int JackAudio::getTransportState() + { + int jackState; + transportState = jack_transport_query(_client, &pos); + switch (jackAudio->transportState) { + case JackTransportStopped: + jackState = Audio::STOP; + break; + case JackTransportLooping: + case JackTransportRolling: + jackState = Audio::PLAY; + break; + case JackTransportStarting: + jackState = Audio::START_PLAY; + break; + default: + jackState = Audio::STOP; + break; + } + return jackState; + } + +//--------------------------------------------------------- // processSync // return TRUE (non-zero) when ready to roll. //--------------------------------------------------------- @@ -473,6 +509,10 @@ Port JackAudio::registerOutPort(const QString& name, bool midi) const char* type = midi ? JACK_DEFAULT_MIDI_TYPE : JACK_DEFAULT_AUDIO_TYPE; void* p = jack_port_register(_client, name.toLatin1().data(), type, JackPortIsOutput, 0); // printf("JACK: registerOutPort<%s>: <%s> %p\n", type, name.toLatin1().data(), p); + if (midi) { + jack_nframes_t nframes = jack_get_buffer_size(_client); + jack_midi_reset_new_port(jack_port_get_buffer((jack_port_t*)p, nframes), nframes); + } return p; } @@ -573,15 +613,6 @@ void JackAudio::stop() } //--------------------------------------------------------- -// framePos -//--------------------------------------------------------- - -unsigned JackAudio::framePos() const - { - return _client ? jack_frame_time(_client) : 0; - } - -//--------------------------------------------------------- // outputPorts //--------------------------------------------------------- @@ -652,23 +683,6 @@ void JackAudio::unregisterPort(Port p) } //--------------------------------------------------------- -// getState -//--------------------------------------------------------- - -int JackAudio::getState() - { - transportState = jack_transport_query(_client, &pos); - switch (transportState) { - case JackTransportStopped: return Audio::STOP; - case JackTransportLooping: - case JackTransportRolling: return Audio::PLAY; - case JackTransportStarting: return Audio::START_PLAY; - default: - return Audio::STOP; - } - } - -//--------------------------------------------------------- // setFreewheel //--------------------------------------------------------- @@ -804,16 +818,48 @@ void JackAudio::putEvent(Port port, const MidiEvent& e) printf("MidiOut<%s>: jackMidi: ", portName(port).toLatin1().data()); e.dump(); } - void* pb = jack_port_get_buffer((jack_port_t*)port, segmentSize); - int pos = 0; - unsigned char* p = jack_midi_event_reserve(pb, pos, 3, segmentSize); - if (p == 0) { - fprintf(stderr, "JackMidi: buffer overflow, event lost\n"); - return; + void* pb = jack_port_get_buffer((jack_port_t*)port, segmentSize); + unsigned ft; + if (transportState == JackTransportRolling) { + ft = e.time() - pos.frame; + if (pos.frame > e.time()) + ft = 0; + else if (ft >= segmentSize) + ft = segmentSize -1; + } + else + ft = 0; + + switch(e.type()) { + case ME_NOTEON: + case ME_NOTEOFF: + { + unsigned char* p = jack_midi_event_reserve(pb, ft, 3, segmentSize); + if (p == 0) { + fprintf(stderr, "JackMidi: buffer overflow, event lost\n"); + return; + } + p[0] = e.type() | e.channel(); + p[1] = e.dataA(); + p[2] = e.dataB(); + } + break; + + case ME_POLYAFTER: + case ME_CONTROLLER: + case ME_PROGRAM: + case ME_AFTERTOUCH: + case ME_PITCHBEND: + case ME_SYSEX: + case ME_META: + case ME_SONGPOS: + case ME_CLOCK: + case ME_START: + case ME_CONTINUE: + case ME_STOP: + printf("JackMidi: event type %x not supported\n", e.type()); + break; } - p[0] = e.type() | e.channel(); - p[1] = e.dataA(); - p[2] = e.dataB(); } //--------------------------------------------------------- diff --git a/muse/muse/driver/jackaudio.h b/muse/muse/driver/jackaudio.h index c4611ac6..e350ca0a 100644 --- a/muse/muse/driver/jackaudio.h +++ b/muse/muse/driver/jackaudio.h @@ -31,20 +31,20 @@ class JackAudio : public AudioDriver { jack_client_t* _client; - jack_transport_state_t transportState; jack_position_t pos; char jackRegisteredName[8]; + jack_transport_state_t transportState; public: JackAudio(jack_client_t* cl, char * jack_id_string); virtual ~JackAudio(); + + int getTransportState(); virtual bool init(); virtual void start(int); virtual bool restart(); virtual void stop (); virtual void zeroClientPtr() { _client = 0; } - virtual unsigned framePos() const; - virtual float* getBuffer(Port port, unsigned long nframes) { return (float*)jack_port_get_buffer((jack_port_t*)port, nframes); } @@ -67,13 +67,12 @@ class JackAudio : public AudioDriver { } virtual Port findPort(const QString& name); virtual QString portName(Port); - virtual int getState(); - virtual unsigned int getCurFrame() { return pos.frame; } virtual int realtimePriority() const; virtual void startTransport(); virtual void stopTransport(); virtual void seekTransport(unsigned frame); virtual void setFreewheel(bool f); + jack_transport_state_t transportQuery(jack_position_t* pos) { return jack_transport_query(_client, pos); } @@ -81,6 +80,13 @@ class JackAudio : public AudioDriver { virtual bool equal(Port a, Port b) { return a == b; } virtual void putEvent(Port, const MidiEvent&); virtual void startMidiCycle(Port); + virtual unsigned int getCurFrame() { return pos.frame; } + + virtual unsigned framePos() const { + return pos.frame + jack_frames_since_cycle_start(_client); + } + unsigned lastFrameTime() { return jack_last_frame_time(_client); } + unsigned framesSinceCyleStart() { return jack_frames_since_cycle_start(_client); } }; #endif diff --git a/muse/muse/midiinport.cpp b/muse/muse/midiinport.cpp index 2a67ea2e..25a2faee 100644 --- a/muse/muse/midiinport.cpp +++ b/muse/muse/midiinport.cpp @@ -94,7 +94,7 @@ void MidiInPort::eventReceived(snd_seq_event_t* ev) { MidiEvent event; event.setB(0); - event.setTime(audio->timestamp()); + event.setTime(audioDriver->framePos()); switch(ev->type) { case SND_SEQ_EVENT_NOTEON: diff --git a/muse/muse/midioutport.cpp b/muse/muse/midioutport.cpp index 3d96780f..9fadaa71 100644 --- a/muse/muse/midioutport.cpp +++ b/muse/muse/midioutport.cpp @@ -467,7 +467,7 @@ void MidiOutPort::process(unsigned from, unsigned to, const Pos& pos, unsigned f track->getEvents(from, to, 0, &el); int velo = 0; for (iMPEvent i = el.begin(); i != el.end(); ++i) { - MidiEvent ev = *i; + MidiEvent ev(*i); ev.setChannel(ch); _playEvents.insert(ev); if (ev.type() == ME_NOTEON) @@ -494,20 +494,17 @@ void MidiOutPort::process(unsigned from, unsigned to, const Pos& pos, unsigned f // route events to destination // - unsigned endFrame = pos.frame() + frames + audio->getFrameOffset(); + unsigned endFrame = pos.frame() + frames; iMPEvent is = _playEvents.begin(); iMPEvent ie = _playEvents.end(); for (_nextPlayEvent = is; _nextPlayEvent != ie; _nextPlayEvent++) { - if ((from != to) && (_nextPlayEvent->time() >= endFrame)) { - ++_nextPlayEvent; // ?? + if ((from != to) && (_nextPlayEvent->time() >= endFrame)) break; - } routeEvent(*_nextPlayEvent); } } - //--------------------------------------------------------- // setInstrument //--------------------------------------------------------- @@ -537,13 +534,13 @@ void MidiOutPort::routeEvent(const MidiEvent& event) for (iRoute r = _outRoutes.begin(); r != _outRoutes.end(); ++r) { switch (r->type) { case Route::MIDIPORT: - midiDriver->putEvent(alsaPort(0), *_nextPlayEvent); + midiDriver->putEvent(alsaPort(0), event); break; case Route::SYNTIPORT: - ((SynthI*)(r->track))->playEvents()->insert(*_nextPlayEvent); + ((SynthI*)(r->track))->playEvents()->insert(event); break; case Route::JACKMIDIPORT: - audioDriver->putEvent(jackPort(0), *_nextPlayEvent); + audioDriver->putEvent(jackPort(0), event); break; default: fprintf(stderr, "MidiOutPort::process(): invalid routetype\n"); diff --git a/muse/muse/midiseq.cpp b/muse/muse/midiseq.cpp index 892db5c6..47d70cb2 100644 --- a/muse/muse/midiseq.cpp +++ b/muse/muse/midiseq.cpp @@ -24,6 +24,7 @@ #include "midictrl.h" #include "audio.h" #include "driver/mididev.h" +#include "driver/audiodev.h" #ifdef __APPLE__ #include "driver/coretimer.h" @@ -516,7 +517,7 @@ void MidiSeq::processTimerTick() // miss this timer tick return; } - unsigned curFrame = audio->curFrame(); + unsigned curFrame = audioDriver->framePos(); /* if (!extSyncFlag.value()) { int curTick = AL::tempomap.frame2tick(curFrame); diff --git a/muse/muse/miditrack.cpp b/muse/muse/miditrack.cpp index da7b02cd..a249114c 100644 --- a/muse/muse/miditrack.cpp +++ b/muse/muse/miditrack.cpp @@ -524,7 +524,7 @@ void MidiTrack::getEvents(unsigned from, unsigned to, int, MPEventList* dst) if (ev.type() == Meta) // ignore meta events continue; unsigned tick = ev.tick() + offset; - unsigned frame = AL::tempomap.tick2frame(tick) + audio->getFrameOffset(); + unsigned frame = AL::tempomap.tick2frame(tick); if (ev.type() == Note) { if (dm) { if (dm->entry(dm->outmap(ev.pitch()))->mute) @@ -547,13 +547,13 @@ void MidiTrack::getEvents(unsigned from, unsigned to, int, MPEventList* dst) if (velo < 1) // no off event velo = 1; int elen = (ev.lenTick() * len)/100; - if (elen <= 0) // donī allow zero length + if (elen <= 0) // dont allow zero length elen = 1; int veloOff = ev.veloOff(); - unsigned eframe = AL::tempomap.tick2frame(tick+elen) + audio->getFrameOffset(); - dst->add(MidiEvent(frame, 0, 0x90, pitch, velo)); - dst->add(MidiEvent(eframe, 0, veloOff ? 0x80 : 0x90, pitch, veloOff)); + unsigned eframe = AL::tempomap.tick2frame(tick+elen); + dst->add(MidiEvent(frame, 0, ME_NOTEON, pitch, velo)); + dst->add(MidiEvent(eframe, 0, veloOff ? ME_NOTEOFF : ME_NOTEON, pitch, veloOff)); _meter[0] += velo/2; if (_meter[0] > 127.0f) _meter[0] = 127.0f; diff --git a/muse/muse/sync.cpp b/muse/muse/sync.cpp index e0c1861b..98946a9b 100644 --- a/muse/muse/sync.cpp +++ b/muse/muse/sync.cpp @@ -409,7 +409,7 @@ void MidiSeq::realtimeSystemInput(int port, int c) if (!audio->isPlaying() /*state == IDLE*/) { //seek(0); audioDriver->seekTransport(0); - unsigned curFrame = audio->curFrame(); + unsigned curFrame = audioDriver->framePos(); recTick = recTick1 = recTick2 = 0; mclock1 = 0.0; mclock2 = 0.0; songtick1 = songtick2 = 0; @@ -427,7 +427,7 @@ void MidiSeq::realtimeSystemInput(int port, int c) if (debugSync) printf(" continue\n"); if (!audio->isPlaying() /*state == IDLE */) { - unsigned curFrame = audio->curFrame(); + unsigned curFrame = audioDriver->framePos(); recTick = AL::tempomap.frame2tick(curFrame); // don't think this will work... (ml) audio->msgPlay(true); } diff --git a/muse/muse/synth.cpp b/muse/muse/synth.cpp index 421e0a96..693ad92c 100644 --- a/muse/muse/synth.cpp +++ b/muse/muse/synth.cpp @@ -495,14 +495,12 @@ iMPEvent MessSynthIF::getData(MPEventList* el, iMPEvent i, unsigned pos, int por // seems to be negative when sequencer not running, still // working when entering notes from editor though. weird :-) (ml) - int frameOffset = audio->getFrameOffset(); int curPos = pos; int endPos = pos + n; if (ports >= channels()) { for (; i != el->end(); ++i) { - int frame = i->time() - frameOffset; - // printf("\t510: frame=%d endPos=%d curPos=%d pos=%d\n", frame, endPos, curPos, pos); + int frame = i->time(); if (frame >= endPos) break; if (frame > curPos) { diff --git a/muse/muse/ticksynth.cpp b/muse/muse/ticksynth.cpp index 1d9b0c4a..472cadc4 100644 --- a/muse/muse/ticksynth.cpp +++ b/muse/muse/ticksynth.cpp @@ -94,10 +94,9 @@ iMPEvent MetronomeSynthIF::getData(MPEventList* el, iMPEvent i, unsigned pos, in unsigned curPos = pos; unsigned endPos = pos + n; unsigned off = pos; - unsigned frameOffset = audio->getFrameOffset(); for (; i != el->end(); ++i) { - unsigned frame = i->time() - frameOffset; + unsigned frame = i->time(); if (frame >= endPos) break; if (frame > curPos) { diff --git a/muse/synti/mus/mus.cpp b/muse/synti/mus/mus.cpp index fbc59334..635bd53d 100644 --- a/muse/synti/mus/mus.cpp +++ b/muse/synti/mus/mus.cpp @@ -58,6 +58,7 @@ static int processAudio(jack_nframes_t nFrames, void*) void* midi = jack_port_get_buffer(inPort, nFrames); int n = jack_midi_port_get_info(midi, nFrames)->event_count; unsigned offset = 0; + for (int i = 0; i < n; ++i) { jack_midi_event_t event; jack_midi_event_get(&event, midi, i, nFrames); diff --git a/muse/synti/organ/organgui.ui b/muse/synti/organ/organgui.ui index aeea79b3..bfd9ee85 100644 --- a/muse/synti/organ/organgui.ui +++ b/muse/synti/organ/organgui.ui @@ -1,15 +1,12 @@ <ui version="4.0" > - <author></author> - <comment></comment> - <exportmacro></exportmacro> <class>OrganGuiBase</class> <widget class="QWidget" name="OrganGuiBase" > <property name="geometry" > <rect> <x>0</x> <y>0</y> - <width>534</width> - <height>366</height> + <width>563</width> + <height>392</height> </rect> </property> <property name="sizePolicy" > @@ -23,841 +20,819 @@ <property name="windowTitle" > <string>MusE: Organ</string> </property> - <widget class="QGroupBox" name="GroupBox1" > - <property name="geometry" > - <rect> - <x>5</x> - <y>162</y> - <width>252</width> - <height>199</height> - </rect> + <layout class="QGridLayout" > + <property name="margin" > + <number>9</number> </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>7</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> + <property name="spacing" > + <number>6</number> </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> - </widget> - </item> - <item row="3" column="0" > - <widget class="QLabel" name="TextLabel4" > - <property name="text" > - <string>4'</string> - </property> - </widget> - </item> - <item row="4" column="0" > - <widget class="QLabel" name="TextLabel5" > - <property name="text" > - <string>2 2/3'</string> - </property> - </widget> - </item> - <item row="5" column="0" > - <widget class="QLabel" name="TextLabel6" > - <property name="text" > - <string>2'</string> - </property> - </widget> - </item> - <item row="2" column="0" > - <widget class="QLabel" name="TextLabel2" > - <property name="text" > - <string>5 1/3'</string> - </property> - </widget> - </item> - <item row="1" column="0" > - <widget class="QLabel" name="TextLabel3" > - <property name="text" > - <string>8'</string> - </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="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="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="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="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="tickInterval" > - <number>10</number> - </property> - </widget> - </item> - <item row="0" column="2" > - <widget class="QSlider" name="p1" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>0</vsizetype> - <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="tickInterval" > - <number>10</number> - </property> - </widget> - </item> - <item row="0" column="1" > - <widget class="QSpinBox" name="lcd1" > - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</number> - </property> - </widget> - </item> - <item row="1" column="1" > - <widget class="QSpinBox" name="lcd2" > - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</number> - </property> - <property name="singleStep" > - <number>10</number> - </property> - </widget> - </item> - <item row="2" column="1" > - <widget class="QSpinBox" name="lcd3" > - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</number> - </property> - <property name="singleStep" > - <number>10</number> - </property> - </widget> - </item> - <item row="3" column="1" > - <widget class="QSpinBox" name="lcd4" > - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</number> - </property> - <property name="singleStep" > - <number>10</number> - </property> - </widget> - </item> - <item row="4" column="1" > - <widget class="QSpinBox" name="lcd5" > - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</number> - </property> - <property name="singleStep" > - <number>10</number> - </property> - </widget> - </item> - <item row="5" column="1" > - <widget class="QSpinBox" name="lcd6" > - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</number> - </property> - <property name="singleStep" > - <number>10</number> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QGroupBox" name="GroupBox2" > - <property name="geometry" > - <rect> - <x>263</x> - <y>5</y> - <width>266</width> - <height>151</height> - </rect> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>7</vsizetype> - <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> - </widget> - </item> - <item row="1" column="0" > - <widget class="QLabel" name="TextLabel8" > - <property name="text" > - <string>Decay</string> - </property> - </widget> - </item> - <item row="2" column="0" > - <widget class="QLabel" name="TextLabel9" > - <property name="text" > - <string>Sustain</string> - </property> - </widget> - </item> - <item row="3" column="0" > - <widget class="QLabel" name="TextLabel10" > - <property name="text" > - <string>Release</string> - </property> - </widget> - </item> - <item row="0" column="2" > - <widget class="QSlider" name="p7" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>0</vsizetype> - <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="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="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="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="tickInterval" > - <number>50</number> - </property> - </widget> - </item> - <item row="0" column="1" > - <widget class="QSpinBox" name="lcd7" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>1</hsizetype> - <vsizetype>0</vsizetype> - <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>1</hsizetype> - <vsizetype>0</vsizetype> - <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>1</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="suffix" > - <string>cB</string> - </property> - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</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>1</hsizetype> - <vsizetype>0</vsizetype> - <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> - <widget class="QWidget" name="" > - <layout class="QHBoxLayout" > - <property name="margin" > - <number>0</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item> - <widget class="QLabel" name="TextLabel1_2" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>5</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="font" > - <font> - <family></family> - <pointsize>48</pointsize> - <weight>50</weight> - <italic>false</italic> - <bold>false</bold> - <underline>false</underline> - <strikeout>false</strikeout> - </font> - </property> - <property name="text" > - <string>O-1</string> - </property> - <property name="alignment" > - <set>Qt::AlignCenter</set> - </property> - </widget> - </item> - <item> - <widget class="QGroupBox" name="GroupBox3" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>7</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title" > - <string>Oscillator</string> - </property> - <layout class="QVBoxLayout" > - <property name="margin" > - <number>11</number> - </property> - <property name="spacing" > - <number>2</number> - </property> - <item> - <widget class="QCheckBox" name="sw1" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>1</vsizetype> - <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>5</hsizetype> - <vsizetype>1</vsizetype> - <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>5</hsizetype> - <vsizetype>1</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text" > - <string>Flute</string> - </property> - </widget> - </item> - <item> - <spacer> - <property name="orientation" > - <enum>Qt::Vertical</enum> - </property> - <property name="sizeType" > - <enum>QSizePolicy::Expanding</enum> - </property> - <property name="sizeHint" > - <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> - </widget> - <widget class="QGroupBox" name="GroupBox4" > - <property name="geometry" > - <rect> - <x>263</x> - <y>162</y> - <width>266</width> - <height>199</height> - </rect> - </property> - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>7</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="title" > - <string>Envelope Hi</string> - </property> - <layout class="QGridLayout" > - <property name="margin" > - <number>8</number> - </property> - <property name="spacing" > - <number>6</number> - </property> - <item row="3" 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="tickInterval" > - <number>50</number> - </property> - </widget> - </item> - <item row="2" column="0" > - <widget class="QLabel" name="TextLabel13" > - <property name="text" > - <string>Sustain</string> - </property> - </widget> - </item> - <item row="3" column="0" > - <widget class="QLabel" name="TextLabel14" > - <property name="text" > - <string>Release</string> - </property> - </widget> - </item> - <item row="3" column="1" > - <widget class="QSpinBox" name="lcd14" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <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="2" column="1" > - <widget class="QSpinBox" name="lcd13" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="suffix" > - <string>cB</string> - </property> - <property name="maximum" > - <number>0</number> - </property> - <property name="minimum" > - <number>-960</number> - </property> - </widget> - </item> - <item row="1" column="1" > - <widget class="QSpinBox" name="lcd12" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <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="0" column="2" > - <widget class="QSlider" name="p11" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>7</hsizetype> - <vsizetype>0</vsizetype> - <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="tickInterval" > - <number>50</number> - </property> - </widget> - </item> - <item row="0" column="1" > - <widget class="QSpinBox" name="lcd11" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>0</vsizetype> - <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="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="tickInterval" > - <number>500</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="tickInterval" > - <number>10</number> - </property> - </widget> - </item> - <item row="0" column="0" > - <widget class="QLabel" name="TextLabel11" > - <property name="sizePolicy" > - <sizepolicy> - <hsizetype>5</hsizetype> - <vsizetype>4</vsizetype> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text" > - <string>Attack</string> - </property> - </widget> - </item> - <item row="1" column="0" > - <widget class="QLabel" name="TextLabel12" > - <property name="text" > - <string>Decay</string> - </property> - </widget> - </item> - </layout> - </widget> + <item row="0" column="1" > + <widget class="QGroupBox" name="GroupBox3" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title" > + <string>Oscillator</string> + </property> + <layout class="QVBoxLayout" > + <property name="margin" > + <number>11</number> + </property> + <property name="spacing" > + <number>2</number> + </property> + <item> + <widget class="QCheckBox" name="sw1" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>1</vsizetype> + <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>5</hsizetype> + <vsizetype>1</vsizetype> + <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>5</hsizetype> + <vsizetype>1</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text" > + <string>Flute</string> + </property> + </widget> + </item> + <item> + <spacer> + <property name="orientation" > + <enum>Qt::Vertical</enum> + </property> + <property name="sizeType" > + <enum>QSizePolicy::Expanding</enum> + </property> + <property name="sizeHint" > + <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> + <item row="0" column="0" > + <widget class="QLabel" name="TextLabel1_2" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>5</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font" > + <font> + <pointsize>48</pointsize> + <weight>50</weight> + <italic>false</italic> + <bold>false</bold> + <underline>false</underline> + <strikeout>false</strikeout> + </font> + </property> + <property name="text" > + <string>O-1</string> + </property> + <property name="alignment" > + <set>Qt::AlignCenter</set> + </property> + </widget> + </item> + <item rowspan="2" row="1" column="0" colspan="2" > + <widget class="QGroupBox" name="GroupBox1" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <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> + </widget> + </item> + <item row="3" column="0" > + <widget class="QLabel" name="TextLabel4" > + <property name="text" > + <string>4'</string> + </property> + </widget> + </item> + <item row="4" column="0" > + <widget class="QLabel" name="TextLabel5" > + <property name="text" > + <string>2 2/3'</string> + </property> + </widget> + </item> + <item row="5" column="0" > + <widget class="QLabel" name="TextLabel6" > + <property name="text" > + <string>2'</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="TextLabel2" > + <property name="text" > + <string>5 1/3'</string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="TextLabel3" > + <property name="text" > + <string>8'</string> + </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="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="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="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="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="tickInterval" > + <number>10</number> + </property> + </widget> + </item> + <item row="0" column="2" > + <widget class="QSlider" name="p1" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>0</vsizetype> + <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="tickInterval" > + <number>10</number> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="QSpinBox" name="lcd1" > + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</number> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="QSpinBox" name="lcd2" > + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</number> + </property> + <property name="singleStep" > + <number>10</number> + </property> + </widget> + </item> + <item row="2" column="1" > + <widget class="QSpinBox" name="lcd3" > + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</number> + </property> + <property name="singleStep" > + <number>10</number> + </property> + </widget> + </item> + <item row="3" column="1" > + <widget class="QSpinBox" name="lcd4" > + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</number> + </property> + <property name="singleStep" > + <number>10</number> + </property> + </widget> + </item> + <item row="4" column="1" > + <widget class="QSpinBox" name="lcd5" > + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</number> + </property> + <property name="singleStep" > + <number>10</number> + </property> + </widget> + </item> + <item row="5" column="1" > + <widget class="QSpinBox" name="lcd6" > + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</number> + </property> + <property name="singleStep" > + <number>10</number> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item row="0" column="2" > + <widget class="QGroupBox" name="GroupBox2" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <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> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="TextLabel8" > + <property name="text" > + <string>Decay</string> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="TextLabel9" > + <property name="text" > + <string>Sustain</string> + </property> + </widget> + </item> + <item row="3" column="0" > + <widget class="QLabel" name="TextLabel10" > + <property name="text" > + <string>Release</string> + </property> + </widget> + </item> + <item row="0" column="2" > + <widget class="QSlider" name="p7" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>0</vsizetype> + <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="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="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="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="tickInterval" > + <number>50</number> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="QSpinBox" name="lcd7" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>1</hsizetype> + <vsizetype>0</vsizetype> + <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>1</hsizetype> + <vsizetype>0</vsizetype> + <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>1</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="suffix" > + <string>cB</string> + </property> + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</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>1</hsizetype> + <vsizetype>0</vsizetype> + <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="2" column="2" > + <widget class="QGroupBox" name="GroupBox4" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>7</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="title" > + <string>Envelope Hi</string> + </property> + <layout class="QGridLayout" > + <property name="margin" > + <number>8</number> + </property> + <property name="spacing" > + <number>6</number> + </property> + <item row="3" 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="tickInterval" > + <number>50</number> + </property> + </widget> + </item> + <item row="2" column="0" > + <widget class="QLabel" name="TextLabel13" > + <property name="text" > + <string>Sustain</string> + </property> + </widget> + </item> + <item row="3" column="0" > + <widget class="QLabel" name="TextLabel14" > + <property name="text" > + <string>Release</string> + </property> + </widget> + </item> + <item row="3" column="1" > + <widget class="QSpinBox" name="lcd14" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <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="2" column="1" > + <widget class="QSpinBox" name="lcd13" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="suffix" > + <string>cB</string> + </property> + <property name="maximum" > + <number>0</number> + </property> + <property name="minimum" > + <number>-960</number> + </property> + </widget> + </item> + <item row="1" column="1" > + <widget class="QSpinBox" name="lcd12" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <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="0" column="2" > + <widget class="QSlider" name="p11" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>7</hsizetype> + <vsizetype>0</vsizetype> + <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="tickInterval" > + <number>50</number> + </property> + </widget> + </item> + <item row="0" column="1" > + <widget class="QSpinBox" name="lcd11" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>0</vsizetype> + <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="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="tickInterval" > + <number>500</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="tickInterval" > + <number>10</number> + </property> + </widget> + </item> + <item row="0" column="0" > + <widget class="QLabel" name="TextLabel11" > + <property name="sizePolicy" > + <sizepolicy> + <hsizetype>5</hsizetype> + <vsizetype>4</vsizetype> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text" > + <string>Attack</string> + </property> + </widget> + </item> + <item row="1" column="0" > + <widget class="QLabel" name="TextLabel12" > + <property name="text" > + <string>Decay</string> + </property> + </widget> + </item> + </layout> + </widget> + </item> + </layout> </widget> <layoutdefault spacing="6" margin="11" /> - <pixmapfunction></pixmapfunction> <tabstops> <tabstop>p1</tabstop> <tabstop>p3</tabstop> |