commit 4a9e54c74733818c7931973dc19f7e4ad5b28807
parent a0f6e36eadc69670f9f5a5a32a6ddbe610d5aad5
Author: fundamental <fundamental>
Date: Sun, 8 Mar 2009 03:58:49 +0000
07 Mar 2009 (Mark McCurry)
- Added start of DocBook documentation
- Incorperated JACK output patch by Emmanuel Saracco
- Incorperated QUERTZ layout by Achim Settelmeier
Diffstat:
14 files changed, 250 insertions(+), 12 deletions(-)
diff --git a/AUTHORS.txt b/AUTHORS.txt
@@ -1,8 +1,13 @@
Main author:
Nasca Octavian Paul
+Developers:
+ Mark McCurry
+
Contributors:
Gerald Folcher (legato, mono notes memory)
Lars Luthman (zombie fix,jack midi, LASH support)
Daniel Clemente (with a workaround of X11 repeated key bug)
+ Emmanuel Saracco (fix for JACK output)
+ Achim Settelmeier (QUERTZ keyboard layout for virtual keyboard)
diff --git a/ChangeLog b/ChangeLog
@@ -847,3 +847,7 @@
- Fixed errors with drawing of the Oscillator as reported with
valgrind
+07 Mar 2009 (Mark McCurry)
+ - Added start of DocBook documentation
+ - Incorperated JACK output patch by Emmanuel Saracco
+ - Incorperated QUERTZ layout by Achim Settelmeier
diff --git a/doc/images/envelope1.png b/doc/images/envelope1.png
Binary files differ.
diff --git a/doc/images/envelope2.png b/doc/images/envelope2.png
Binary files differ.
diff --git a/doc/images/envelope3.png b/doc/images/envelope3.png
Binary files differ.
diff --git a/doc/images/envelope4.png b/doc/images/envelope4.png
Binary files differ.
diff --git a/doc/images/uienvelope0.jpg b/doc/images/uienvelope0.jpg
Binary files differ.
diff --git a/doc/images/uienvelope1.jpg b/doc/images/uienvelope1.jpg
Binary files differ.
diff --git a/doc/images/uienvelope2.jpg b/doc/images/uienvelope2.jpg
Binary files differ.
diff --git a/doc/images/uienvelope3.jpg b/doc/images/uienvelope3.jpg
Binary files differ.
diff --git a/doc/zynaddsubfx.sgml b/doc/zynaddsubfx.sgml
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN" "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">
+
+<book>
+
+ <bookinfo>
+ <title>Zynaddsubfx</title>
+ <author>
+ <!-- Just add yourself as an author when you work on the book -->
+ <personname>
+ <firstname>Paul</firstname> <surname>Nasca</surname>
+ </personname>
+ </author>
+ <author>
+ <personname>
+ <firstname>Mark</firstname> <surname>McCurry</surname>
+ </personname>
+ </author>
+
+ <abstract>
+ <para>
+ This document is a used to detail the features and use of
+ the ZynAddSubFX synthisizer.
+ </para>
+ </abstract>
+
+ </bookinfo>
+
+ <chapter>
+ <title>Introduction</title>
+
+ <para>
+ ZynAddSubFX is a synthisizer, which uses several components to generate
+ sound.
+ </para>
+
+ </chapter>
+
+ <chapter>
+ <title>Getting Started</title>
+ <para>
+ In most cases ZynAddSubFX is used it will not alone, and it will be linked
+ with other programs.
+ </para>
+ <sect1>
+ <title>MIDI</title>
+ <para>
+ MIDI can be used to connect other applications into ZynAddSubFX.
+ One standard tool to connect ZynAddSubFX with other programs is
+ aconnect.
+ </para>
+ <para>
+ ZynAddSubFX has one incomming MIDI port.
+ Once another application is connected to this port, then it should be
+ able to send information on notes, pitches, and modulations to
+ ZynAddSubFX.
+ For more specific information see INSERT CHAPTER NAME HERE.
+ </para>
+ </sect1>
+ <sect1>
+ <title>JACK</title>
+ <para>
+ JACK can be used to connect the output of ZynAddSubFX to other
+ applications
+ </para>
+ </sect1>
+ </chapter>
+
+ <chapter>
+ <title>Filters</title>
+ <para>
+ In ZynAddSubFX filters can be used at several different stages to
+ increase or decrease a defined set of frequencys.
+ </para>
+ <table>
+ <title>Types of Filters</title>
+ <tgroup cols='3' align='left' colsep='1' rowsep='1'>
+ <thead>
+ <row>
+ <entry>Short Name</entry>
+ <entry>Full Name</entry>
+ <entry>Description</entry>
+ </row>
+ </thead>
+ <tbody>
+ <row>
+ <entry>LPF</entry>
+ <entry>Low Pass Filter</entry>
+ <entry>Higher frequencies are removed</entry>
+ </row>
+ <row>
+ <entry>HPF</entry>
+ <entry>High Pass Filter</entry>
+ <entry>Lower frequencies are removed</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+ </chapter>
+
+ <chapter>
+ <title>LFOs</title>
+ <para>
+ The Low Frequency Ocillators are used within ZynAddSubFX to modify the
+ parameters of the Part's frequency, filter, and amplitude.
+ </para>
+ </chapter>
+
+ <chapter>
+ <title>Envelopes</title>
+ <sect1>
+ <title>Introduction</title>
+ <para>Envelopes control how the amplitude, the frequency, or the
+ filter changes over time.</para>
+ <sect2>
+ <title>Amplitude Envelopes</title>
+ <para>
+ Theese envelopes controls the amplitude of the sound.
+ In ZynAddSubFX, amplitude envelopes can be linear or logarithmic.
+ In the next image, it is shown the differences between these
+ envelopes.
+ </para>
+ <mediaobject>
+ <imageobject>
+ <imagedata align="left" format="PNG"
+ fileref="images/envelope1.png"/>
+ </imageobject>
+ </mediaobject>
+ <para>
+ The amplitude envelope is divided into:
+ </para>
+ <itemizedlist mark="bullet">
+ <listitem>
+ <para>
+ Attack - begins at the Note On.
+ The volume starts from 0 to the maximum.
+ In ZynAddSubFX, the attack is always linear.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Decay - the volume drops from the maximum value to a level called
+ "Sustain level"
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Sustain - the volume remains constant until the key is depressed
+ (Note Off).
+ After this, the last stage take place.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Release - the volume drops to zero
+ </para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+ <sect2>
+ <title>Frequency Envelopes</title>
+ <para>
+ These envelopes controls the frequency (more exactely, the pitch) of
+ the oscillators.
+ The folowing picture draws the stages of theese envelopes.
+ <inlinemediaobject>
+ <imageobject>
+ <imagedata align="left" format="PNG"
+ fileref="images/envelope2.png"/>
+ </imageobject>
+ </inlinemediaobject>
+ The dotted line represents the real pitch of the sound without the
+ envelope.
+ The frequency envelopes are divided into 3 stages:
+ </para>
+ <itemizedlist mark="bullet">
+ <listitem><para>
+ Attack - begins at the Note On.
+ The frequency starts from a certain value and glides to the
+ real frequency of the note.
+ </para></listitem>
+ <listitem><para>
+ Sustain - the frequency is the same on over the sustain period
+ </para></listitem>
+ <listitem><para>
+ Release - this stage begins on Note Off and glides the frequency
+ of the note to a certain value
+ </para></listitem>
+ </itemizedlist>
+ </sect2>
+ </sect1>
+ </chapter>
+
+ <chapter>
+ <title>Ocillators</title>
+ <para>
+ The Ocillators are what generate the base sound for a part before it is
+ modified.
+ </para>
+ </chapter>
+
+ <chapter>
+ <title>Types of Synthesis</title>
+ <sect1>
+ <title>ADDsynth</title>
+ <para>
+ The ADDsynth preforms additive synthisis
+ </para>
+ </sect1>
+ <sect1>
+ <title>SUBsynth</title>
+ <para>
+ The SUBsynth is responsible of the subtractive synthesis in ZynAddSubFX.
+ </para>
+ </sect1>
+ <sect1>
+ <title>PADsynth</title>
+ <para>
+ The PADsynth uses the PAD synthisis algorithm created by Paul Nasca
+ </para>
+ </sect1>
+ </chapter>
+
+</book>
diff --git a/src/Output/JACKaudiooutput.C b/src/Output/JACKaudiooutput.C
@@ -116,14 +116,10 @@ void JACKhandlemidi(unsigned long frames) {
void* midi_buf = jack_port_get_buffer(midi_inport, frames);
jack_midi_event_t jack_midi_event;
jack_nframes_t event_index = 0;
- jack_nframes_t event_count =
- jack_midi_port_get_info(midi_buf, frames)->event_count;
unsigned char* midi_data;
unsigned char type, chan;
-
- while (event_index < event_count) {
-
- jack_midi_event_get(&jack_midi_event, midi_buf, event_index, frames);
+
+ while (jack_midi_event_get(&jack_midi_event,midi_buf, event_index++) == 0) {
midi_data = jack_midi_event.buffer;
type = midi_data[0] & 0xF0;
chan = midi_data[0] & 0x0F;
@@ -149,8 +145,6 @@ void JACKhandlemidi(unsigned long frames) {
/* XXX TODO: handle MSB/LSB controllers and RPNs and NRPNs */
}
-
- event_index++;
}
}
diff --git a/src/UI/ConfigUI.fl b/src/UI/ConfigUI.fl
@@ -268,6 +268,10 @@ midiinputnamebox->label(config.winmididevices[config.cfg.WindowsMidiInId].name);
label Dvorak
xywh {25 25 100 20} labelfont 1 labelsize 11
}
+ menuitem {} {
+ label QWERTZ
+ xywh {35 35 100 20} labelfont 1 labelsize 11
+ }
}
}
Fl_Group {} {
diff --git a/src/UI/VirKeyboard.fl b/src/UI/VirKeyboard.fl
@@ -29,14 +29,18 @@ decl {\#include "WidgetPDial.h"} {public
decl {const int keyspos[12]={0,-1,1,-2,2,3,-4,4,-5,5,-6,6};} {}
-decl {const int keysoct1qw[]={'q','2','w','3','e','r','5','t','6','y','7','u','i','9','o','0','p','[','=',']','\\\\',FL_Enter,0};} {}
+decl {const int keysoct1qwerty[]={'q','2','w','3','e','r','5','t','6','y','7','u','i','9','o','0','p','[','=',']','\\\\',FL_Enter,0};} {}
-decl {const int keysoct2qw[]={'z','s','x','d','c','v','g','b','h','n','j','m',',','l','.',';','/',0};} {}
+decl {const int keysoct2qwerty[]={'z','s','x','d','c','v','g','b','h','n','j','m',',','l','.',';','/',0};} {}
decl {const int keysoct1dw[]={'\\'','2',',','3','.','p','5','y','6','f','7','g','c','9','r','0','l','/',']','=','\\\\',FL_Enter,0};} {}
decl {const int keysoct2dw[]={';','o','q','e','j','k','i','x','d','b','h','m','w','n','v','s','z',0};} {}
+decl {const int keysoct1qwertz[]={'q','2','w','3','e','r','5','t','6','z','7','u','i','9','o','0','p',252,'\\\'','+','\\\\',FL_Enter,0};} {}
+
+decl {const int keysoct2qwertz[]={'y','s','x','d','c','v','g','b','h','n','j','m',',','l','.',246,'-',0};} {}
+
class VirKeys {open : {public Fl_Box}
} {
decl {static const int N_OCT=6;} {}
@@ -145,12 +149,15 @@ if ((event==FL_PUSH)||(event==FL_DRAG)||(event==FL_RELEASE)){
};
-const int *keysoct1=keysoct1qw;
-const int *keysoct2=keysoct2qw;
+const int *keysoct1=keysoct1qwerty;
+const int *keysoct2=keysoct2qwerty;
if (config.cfg.VirKeybLayout==2) {
keysoct1=keysoct1dw;
keysoct2=keysoct2dw;
+}else if (config.cfg.VirKeybLayout==3) {
+ keysoct1=keysoct1qwertz;
+ keysoct2=keysoct2qwertz;
};
if ((event==FL_KEYDOWN)||(event==FL_KEYUP)){