zynaddsubfx

ZynAddSubFX open source synthesizer
Log | Files | Refs | Submodules | LICENSE

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:
MAUTHORS.txt | 5+++++
MChangeLog | 4++++
Adoc/images/envelope1.png | 0
Adoc/images/envelope2.png | 0
Adoc/images/envelope3.png | 0
Adoc/images/envelope4.png | 0
Adoc/images/uienvelope0.jpg | 0
Adoc/images/uienvelope1.jpg | 0
Adoc/images/uienvelope2.jpg | 0
Adoc/images/uienvelope3.jpg | 0
Adoc/zynaddsubfx.sgml | 224+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/Output/JACKaudiooutput.C | 10++--------
Msrc/UI/ConfigUI.fl | 4++++
Msrc/UI/VirKeyboard.fl | 15+++++++++++----
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)){