File: README

package info (click to toggle)
ghostess 20120105-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, jessie, jessie-kfreebsd, sid, stretch, wheezy
  • size: 1,704 kB
  • ctags: 642
  • sloc: sh: 10,958; ansic: 5,995; makefile: 53
file content (186 lines) | stat: -rw-r--r-- 6,293 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
ghostess - A GUI host for DSSI plugins
======================================
Copyright (C) 2012 by Sean Bolton and others.

This is sloppy, hurried HACKWARE -- please do not consider
this exemplary of the authors' skills or preferences, nor
of good DSSI or general programming practices. (In particular,
I don't want anyone attributing my mess to Chris or Steve ;-)

ghostess is licensed under the GNU General Public License,
version 2 or later, and comes with ABSOLUTELY NO WARRANTY,
including fitness for any particular purpose. See the
enclosed file COPYING for details.

New Stuff
=========
- ghostess works with JACK session managament, assuming
    you have a new enough version of JACK, and configure finds
    jack/session.h.

- ghostess works with JACK MIDI. To build it, use:
    - JACK version 0.105.0 or newer.
    - pkgconfig, liblo 0.18, and DSSI 0.9 or later.
    - if './configure --with-jackmidi' detects the
        jack_midi_get_event_count() function in your libjack.so,
        then ghostess will be built with JACK MIDI support, omitting
        the ALSA or CoreMIDI driver.

- ghostess can now export an XML patchlist for use by Freewheeling.

- blinkin' lights show MIDI activity for each instance.

- ghostess works on OS X.  To build it, I used:
    - pkgconfig, with PKG_CONFIG_PATH set appropriately (Gentoo OS-X)
    - liblo installed (liblo-0.18 from Gentoo OS-X)
    - JACK (JackOSX 0.61)
    - DSSI 0.9
    - libdssialsacompat 1.0.8a
    - './configure && make && make install'
    - Note that to use the CoreMIDI driver, you need to start
        ghostess _after_ any virtual sources you want to connect
        from, since my stupid CoreMIDI driver just connects to all
        existing sources when it starts up.


Quick-and-Dirty Intro
=====================
This assumes you are familiar with jack-dssi-host.  ghostess and
jack-dssi-host both descended from the same dssi_example_host
source, and in many ways are still very similar.  A summary of
the differences (as of 2005/4/11):

* ghostess is GPL, jack-dssi-host is BSD-ish.

* ghostess uses GNU autotools. Use the usual './configure && make &&
    make install' to build.

* ghostess has a simple GTK+ GUI.  Click on the 'UI' button for any
    instance to launch or hide its UI.  Right-click on the 'UI'
    button for more options.

* ghostess comes with a minimal universal DSSI GUI (installed as
    <prefix>/bin/ghostess_universal_gui) that can be used with any
    DSSI or LADSPA plugin.  It does not read RDF files or
    instantiate the plugin, so it's not as full-featured as a
    universal GUI could be, but it does allow for adjusting
    DSSI/LADSPA ports, selecting bank and program (for plugins with
    select_program()), and sending test notes (for plugins with any
    of the run_synth() functions).

    If ghostess cannot find a UI for a plugin, and the universal GUI
    is in the PATH, ghostess will launch it.

* ghostess allows specification of the MIDI channel for each plugin
    instance, allowing layering of multiple synths per channel.

* ghostess allows specification of initial configure, program, and
    port values from the command line.  See below for a description
    of the syntax.

* ghostess tracks configure items set on startup or sent by plugin
    UIs.

* ghostess, through its 'Save Configuration...' menu option, can
    save the current configuration of its plugins.  Basically, it
    just writes a Bourne shell script that can be used to start a
    (mostly) identical session.

* ghostess creates a separate MIDI reception thread, and makes it
    low-priority SCHED_FIFO if possible (ALSA-only, at the moment).

* ghostess has a (clumsy but functional) CoreMIDI driver, allowing
    its use on Mac OS X.

* ghostess double-forks its plugin UIs, putting them in separate
    process groups, and it does not SIGHUP everything on shutdown.
    jack-dssi-host keeps the UIs in its process group, and SIGHUPs
    them all as it exits (Linux-only, at the moment).

* jack-dssi-host uses dual gettimeofday()s in the MIDI and audio
    process threads to do event dejittering, which seems expensive.
    ghostess uses jack_frame_time() and jack_last_frame_time(). This
    means ghostess needs JACK 0.99.0 or newer.

* ghostess uses the LADSPA plugin Label and port Names when creating
    JACK port names, hopefully resulting in short-but-useful port
    names.

* unlike jack-dssi-host, ghostess will not automatically load a
    plugin if it is invoked without arguments via a symlink of the
    same name as the plugin.

* ghostess passes the JACK audio input buffers directly to plugins,
    eliminating a memcpy() that jack-dssi-host does.

* jack-dssi-host includes ~/.dssi in its default for DSSI_PATH,
    ghostess does not.

'Save Configuration...' File Format
===================================
Below is an example of the Bourne shell script saved by 'Save
Configuration...', which demonstrates almost all of ghostess's
options. Refer to the enclosed ghostess.1 manual page for a
description of each option.

#!/bin/sh
DSSI_PATH='/opt/audio/lib/dssi'
export DSSI_PATH
exec /tmp/dssi/bin/ghostess \
 -hostname 'ghostess_test' \
 -projdir '/home/smbolton/dssi' \
-comment 'hexter/hexter/inst00' \
 -chan 0 \
 -conf 'monophonic' 'on' \
 -conf 'GLOBAL:polyphony' '13' \
 -prog 0 0 \
 -port 1 440 \
 -port 2 0 \
 'hexter.so':'hexter' \
-comment 'fluidsynth-dssi/FluidSynth-DSSI/inst01' \
 -chan 3 \
 -conf 'load' '/t/soundfonts/Mega25.sf2' \
 -prog 0 0 \
 'fluidsynth-dssi.so':'FluidSynth-DSSI' \
-comment 'lp4pole_1671/lp4pole_fcrcia_oa/inst02' \
 -chan 1 \
 -port 0 1600 \
 -port 1 4 \
 '/usr/lib/ladspa/lp4pole_1671.so':'lp4pole_fcrcia_oa' \
-comment 'xsynth-dssi/Xsynth/inst03' \
 -chan 4 \
 -prog 0 0 \
 -port 1 0.996955 \
 -port 2 2 \
 -port 3 0.5 \
 -port 4 1.00305 \
 -port 5 2 \
 -port 6 0.5 \
 -port 7 0 \
 -port 8 0.5 \
 -port 9 0.1 \
 -port 10 0 \
 -port 11 0 \
 -port 12 0 \
 -port 13 0.0002 \
 -port 14 0.1 \
 -port 15 1 \
 -port 16 1e-04 \
 -port 17 0 \
 -port 18 0 \
 -port 19 14.5722 \
 -port 20 0.1 \
 -port 21 0.1 \
 -port 22 1 \
 -port 23 0.1 \
 -port 24 0 \
 -port 25 0 \
 -port 26 1e-06 \
 -port 27 11.4258 \
 -port 28 0.388616 \
 -port 29 1 \
 -port 30 0.984375 \
 -port 31 0.5 \
 -port 32 440 \
 'xsynth-dssi.so':'Xsynth' \