Seite 1 von 2

Connie - Orgel für Jack

Verfasst: So Jun 28, 2009 6:32 pm
von horo
Hi,

vielleicht habt Ihr es schon auf LAU (siehe unten) gelesen, ansonsten jetzt hier offiziell. Ich habe mich drangemacht und den Signalfluss einer Vox Continental nachprogrammiert. Eingang JACK MIDI, Ausgang JACK Audio, vier Register, drei Stimmen "Flute" (Sinus), "Reed" (Rechteck) und "Sharp" (Sägezahn)(abweichend vom Original mit 2 Stimmen). Als Effekte gibt es "Percussion" und "Vibrato". Ich habe die Source modular gestaltet, damit wird das ganze neben einem lustigen Klangerzeuger auch zur "Toolbox", um eigene Ideen zu programmieren.
Mittlerweile läuft es recht rund, aber ich brauche "Motz" von Euch Anwendern, um's zu verbessern.

LAU:
new version available, you can get it as source or from my debian
sid/experimental repo.
More info: http://cryptomys.de/horo/Connie/index.html

I'm working on a second test model with individual control of each stop and
some other changes, kind of poor-man's-hammond (jehova), but (at the moment)
without all the hammond special effects (leakage, click, random phase of
wheels, vibrachorus etc.).
Critics and hints are welcome, I need input for improvement.

I've cleaned the source code and separated user interface and tone generator -
you can add a qt- or gtk2-interface (some day...) but I'm going for the real
hardware, see: http://cryptomys.de/horo/V-USB-MIDI/index.html

Changelog:

2009-06-24
connie 0.4.1 (summer in the city)
Created a second organ model (test): 9 stops, percussion and vibrato.
Cmd line args:
-a : autoconnect to system:playback ports
-f : french AZERTY keyboard
-g : german QWERTZ keyboard
-t Num : organ type, 0 = connie (default), 1 = test
Modularized the source code.
Cleanup of user interface.

Ciao
Martin

Verfasst: Mo Jun 29, 2009 7:25 am
von khz
hallo,
thx horo, rennt.
seq24 hatte connie nicht gesehen :(
gruß khz

Verfasst: Mo Jun 29, 2009 7:42 am
von ScarKS
Cool, muss ich heute Nachmittag mal ausprobieren!
Ich fände es allerdings toll wenn man noch alsa-midi support hätte.

Verfasst: Mo Jun 29, 2009 8:49 am
von corresponder
hi,
die orgel macht ja richtig laune!
habs grad mal mit meinem keyboard verknödelt.
cooles teil!


gruss

c.

Verfasst: Mo Jun 29, 2009 8:59 am
von horo
Hi,

wenn man jackd mit dem Parameter "-X seq" startet, oder bei qjackctl unter "Einstellungen" für Midi-Treiber "seq" auswählt, erscheinen alle Alsa-Midi-Ports auch als Jack-Midi-Ports und können verbunden werden. Ich teste connie mit "vkeybd", das eine Alsa-Applikation (oder oss?) ist.

Ciao Martin

Verfasst: Mo Jun 29, 2009 8:51 pm
von ScarKS
Schöne Sache, weiter so! :)
Was mir noch fehlt: Attack und Release für die Lautstärke.
Vibrato: Geschwindigkeit und Amount Regelung getrennt.
Das Ganze als LV2 Plugin ;)

Verfasst: Di Jun 30, 2009 11:56 am
von horo
ScarKS hat geschrieben:Schöne Sache, weiter so! :)
Danke, freut mich.
ScarKS hat geschrieben:Was mir noch fehlt: Attack und Release für die Lautstärke.
Attack kannst Du etwas über Percussion beeinflussen. Normalerweise (ohne Perc) ändert sich die Lautstärke in 8 ms von 0 (aus) auf 64 (an) beim Tastendruck und beim Loslassen in 16 ms von 64 auf 0. Percussion (0..8) setzt den Startwert bei Tastendruck zunächst auf 32*Percussion, d.h.
Perc=2 gibt nen Rechteck-Sprung, größere Werte ein Überschwingen.
Ich sammle es mal als Vorschlag.
ScarKS hat geschrieben:Vibrato: Geschwindigkeit und Amount Regelung getrennt.
Ich habe mich beim Vibrato vom Leslie mit Stereo-Mikrophonierung leiten lassen, d.h. die FM ist durch den Doppler-Effekt abhängig von der Umfangsgeschwindigkeit, AM ist durch Abstand und Richtdiagramm des "Trichters" abhängig vom Ort/Drehwinkel. Was noch nicht drin ist, sind die komplizierten Dinge wie frühe Reflektionen in der Kiste, etc. Aber eigentlich soll's ja "nur" ein Vibrato sein. Kannst ja mal die Doku (connie.c) anschauen. Ich packe vielleicht noch ein leichtes Reverb dazu, das gibt noch etwas Fülle.
ScarKS hat geschrieben:Das Ganze als LV2 Plugin ;)
That's left as an exercise for the reader ;)

Ciao Martin

Verfasst: Di Jun 30, 2009 3:34 pm
von ScarKS
Hm ok, funktioniert wohl ein klein wenig anders als normale Subtraktive Synths.

Verfasst: Di Jun 30, 2009 6:32 pm
von horo
Hi ScarKS,

das stimmt, es ist prinzipiell die klassische additive Synthese, die man bei der Kirchenorgel findet. Du mischt den Grundton mit den passenden Obertönen und erhältst den entsprechenden Klang. Die Vox mischt in den vier Registern mehr oder weniger abgerundete RC-Rechtecke im Frequenzverhältnis 0.5 zu 1 zu 2 zu (3+4+5+8). Ich hab drei Stimmen, Sinus, Rechteck und Sägezahn, letztere zwei bandbegrenzt.
Bei der Hammond hast du 9 Register im Verhältnis 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, die per Zugriegel gemischt werden, Grundform ist dort mehr oder weniger ein Sinus.
Multiplexorgel heißt das ganze, weil die Tongeneratoren mehrfach verwendet werden, d.h ein A (110Hz) hätte als fünfte Harmonische eine Frequenz von 550Hz, es wird aber der Tongenerator zwei Oktaven und eine große Terz über dem A gewählt -> #c'' mit 554.3Hz, da dieser Ton vorhanden ist. Die Kirchenorgel spendiert dir extra eine 550Hz Pfeife, deshalb haben Orgeln so viele davon. Im Klang hört man es auch, in der Kirche "steht" der Ton, bei der Hammond oder Vox bekommst Du Schwebungen, die mit zum typischen Klang beitragen.
Programmtechnisch habe ich eine Look-Up-Tabelle mit z.B. dem Sinus und ich fahre verschieden schnell durch, um unterschiedliche Frequenzen zu erzeugen.

Ciao Martin

Verfasst: Mi Jul 01, 2009 6:36 pm
von ScarKS
Cool :) Wofür genau die Bandlimitierung beim Sägezahn/Rechteck?
/me Christian

Verfasst: Mi Jul 01, 2009 8:45 pm
von horo
Hi Christian,

ein echter Sägezahn oder auch Rechteck ist nicht bandbegrenzt, Du hast theoretisch unendlich hohe Frequenzen. Wenn Du diese Signale digital erzeugst, indem Du z.B. die Hälfte des Buffers mit -1 und die andere Hälfte mit +1 füllst, erhälst Du das gleiche Ergebnis wie bei der Abtastung eines idealen Rechtecks. Da kommt dann das Abtasttheorem ins Spiel:
http://de.wikipedia.org/wiki/Nyquist-Sh ... asttheorem und http://de.wikipedia.org/wiki/Alias-Effekt
Alle Frequenzanteile, die größer als die halbe Abtastfrequenz fa sind, werden in den Bereich 0..fa/2 gespiegelt (Aliasing). Beispiel: ein Rechteck mit 5kHz hat Frequenzanteile bei 5, 15, 25, 35, 45, 55... kHz. Wenn Du mit 48kHz abtastest, bekommst Du Anteile bei 5, 15, (und jetzt nicht 25, das ist 1 kHz über fa/2, sondern 23 kHz (1 kHz _unter_ fa/2) und 13kHz (24-11) statt 35kHz (24+11), 3kHz statt 45kHz. Die 55kHz würden nach -7 kHz gespiegelt, daraus wird +7kHz mit 180° Phasendrehung. Dein "schönes" Rechteck mit harmonischen = ganzzahligen Obertönen wird zu einem Geräuschteppich mit unangenehm harschen Klang.
Abhilfe beim Abtasten realer Signale ist die (analoge) Bandbegrenzung vor dem ADC. Bei der digitalen Signalsynthese eines Rechtecks summiert man theoretisch einfach nur bis zur halben Abtastfrequenz, praktisch begrenze ich's auf ein Drittel, damit durch Clipping keine höheren Frequenzen entstehen, die dann wieder nach unten gespiegelt werden.
Zum Spielen mit Tönen und Frequenzen kann ich die Programmiersprache "ChucK" empfehlen, damit kann man schnell ein paar Signale erzeugen: http://chuck.cs.princeton.edu/
Zur Anzeige der Frequenzen sind die Spektrumanalysator-Programme jaaa und japa von Fons Adriaensen (der Macher von Aeolus) nur zu empfehlen:
http://www.kokkinizita.net/linuxaudio/

HTH
Ciao Martin

Verfasst: Do Jul 02, 2009 6:30 pm
von ScarKS
Wow danke!
Hast du das Wissen aus dem Studium oder einem Buch(wenn ja welche?)
Christian

Verfasst: Mo Jul 06, 2009 12:38 pm
von horo
Hi Christian,

mein Studium ist schon 'ne ganze Weile her, da war 68000 "state of the art" und nicht an GHz-Takte zu denken. Das Wissen über Linux-Audio-Themen und DSP hat sich halt so über die Jahre angesammelt.

* Als guten Einstieg kann ich Dir den Vortrag "Audio Engineering in a Nutshell" von Steve Harris und Joern Nettingsmeier empfehlen:
http://lad.linuxaudio.org/events/2004_z ... eering.pdf

* Ansonsten in Deutsch ein Skript der Uni Lüneburg zum Seminar "Verfahren digitaler Audiobearbeitung":
http://audio.uni-lueneburg.de/seminarwe ... arbeitung/

* Oder aus Köln zum gleichen Thema, wenig Tiefe und windows-lastig: http://www.uni-koeln.de/rrzk/multimedia ... ion/audio/

* Gut gehts's dann los mit "Steven W. Smith, Ph.D.: The Scientist and Engineer's Guide to Digital Signal Processing", online (auch als pdf) auf http://dspguide.com - viele gute Beispiele und rel. wenig Formeln.

* Richtig tief steigst Du mit "Julius Orion Smith III" in die Materie ein.
Neben unzähligen Papers auf seiner Homepage http://ccrma.stanford.edu/~jos/ findest Du auch vier umfangreiche Bücher von ihm: http://www.dsprelated.com/dspbooks
- MATHEMATICS OF THE DISCRETE FOURIER TRANSFORM (DFT) WITH AUDIO APPLICATIONS
- INTRODUCTION TO DIGITAL FILTERS WITH AUDIO APPLICATIONS
- PHYSICAL AUDIO SIGNAL PROCESSING FOR VIRTUAL MUSICAL INSTRUMENTS AND AUDIO EFFECTS
- SPECTRAL AUDIO SIGNAL PROCESSING

* Uns last but not least ist es spannend, bei LAD und LAU mitzulesen, Nabble bietet eine gute Alternative zur klassischen Mailinglist:
http://www.nabble.com/Linux-Audio-f13233.html

Ciao Martin

Verfasst: Di Jul 07, 2009 5:46 pm
von ScarKS
Hehe danke!
Da hab ich erstmal genug Lesestoff für das Jahr.

Re: Connie - Orgel für Jack

Verfasst: Sa Jul 31, 2010 6:16 pm
von horo
Hi,

EDIT 20100802: -rc3 -> -rc4, copyright clarification, no technical changes
EDIT 20100803: -rc4 -> -rc5, Percussion und Envelopes

neue connie-Version:
http://bitbucket.org/horo/connie/downlo ... rc5.tar.gz
http://bitbucket.org/horo/connie/downlo ... 5_i386.deb

Changelog:
2010-08-03
connie 0.4.3-rc5 (long time gone)
removed freeverb and added a JCRev style reverb (less cpu usage).
http://ccrma.stanford.edu/~jos/pasp/Sch ... JCRev.html
DSP optimization, denormal handling
smoother attacK/decay envelopes
percussion triggered by first keypress only
diffent intonations
source code clean up
two binaries: connie (i386) and connie_sse (>= PIII with sse unit)
changed program options:
-a autoconnect to system:playback ports
-c CHANNEL MIDI channel (1..16), 0=all (default)
-f french AZERTY keyboard
-g german QWERTZ keyboard
-h this help msg
-i INSTRUMENT 0: connie (default), 1: poor-man's-hammond
-m MIDI_PORT connect with midi port
-p PITCH concert pitch 220..880 Hz
-s INTONATION_SCALE 0: Hammond Gears
1: Equally Tempered
2: Pure Intonation
3: Pythagorean
4: ¼ Comma Meantone
5: Werckmeister III
6: Kirnberger III
-t TRANSPOSE transpose -12..+12 semitones
-v print version



Die Entwicklung ist nach http://bitbucket.org/horo/connie umgezogen (mercurial-repo).

Ich habe mir den Signalfluss vorgenommen und reichlich optimiert, connie läuft jetzt auf meinem "worst-case-test-target", einem Thinkpad A20m (PIII / 600 MHz / 256 MB) flüssig bei 48kHz / 8ms Latenz. Womit ich Probleme hatte, war das Reverb, die rekursiven Filter wurden durch Grenzzyklen schleichlahm. Die erste freeverb-Version hatte ich mit Faust erstellt und das Problem dort gesucht. Als dann auch das einfachere JCRev ähnliche "Obstipation" zeigte, kamen mir Denormals* in den Sinn, was hab ich geflucht... Problem erkannt - Problem gebannt.

Feedback von Euch wäre schön - eeeeeeeeeeeeehhh ! :)

Ciao Martin

*) Denormals sind winzig kleine Floating-Point-Werte (~1e-45), deren Verarbeitung gegenüber "normalen" Floats wegen diverser Sonderbehandlungen gigantische Zeit braucht. Sie entstehen z.B. wenn beim ausklingenden Nachhall-Effekt das Signal immer kleiner wird (neuer Wert z.B. 70% vom alten) - das geht solange, bis der kleinste darstellbare Wert vorliegt, der mit 0.7 multipliziert und gerundet wieder den kleinsten darstellbaren Wert ergibt u.s.w... dieser Wert kreist dann für ewig im Filter und bremst die CPU.