1
2Installing Bristol Summary (x.y.z = 0.60.8, for example):
3
4	a. tar -zxvf bristol-x.y.z.tar.gz
5	b. cd bristol-x.y.z
6	c. ./configure
7	d. make
8	e. sudo make install
9	f. /usr/local/bin/startBristol -mini
10
11Table of Contents:
12
13	1. About Bristol
14	2. Installation
15	3. Command line options
16	4. ALSA Interface Configuration
17	5. Jack Interface Configuration
18	6. Bristol runcom file
19	7. Integration with MIDI Control Surfaces
20	8. Keyboard Accelerators
21	9. Basics of Subtractive Synthesis
22	10. Basics of FM Synthesis
23
24This document is intended to help get bristol running with a minimum of fuss
25or effort. The first steps above, a through f, are the shortest possible path
26but there are a lot more options and capabilities discussed below that may
27change the way bristol operates.
28
29	1. About Bristol.
30
31	1.1 What is it?
32
33Bristol Audio Synthesis is a synth emulation package for a diverse range of
34vintage synthesisers, electric pianos and organs. The application consists of
35a synthesiser backend and a GUI frontend called Brighton.
36
37	1.2 Who is it by?
38
39Bristol is written by Nick Copeland with additional contributions by others.
40
41	2. Installation
42
43	2.1. System requirements
44
45Bristol does not place a high requirement on the underlying system installation,
46the DSP code is all packaged into the engine and the GUI was written for
47bristol. There are a number of optional extra packages that bristol can use to
48give a more complete set of binaries. Also refer to section 1.3 below.
49
50	libx11-dev       Bristol GUI requires this package
51	libasound2-dev   ALSA support requires this package
52	jackd            Jack support requires this package
53	libjack-dev      Jack support requires this package
54
55The system will also need libm.so to be installed as well as the build utils
56however this is a part of a normal distribution. The build utility requirements
57is a little outside the scope of this document, it is assumed that make/gcc/as
58are previously installed.
59
60	2.2. Unpack the archive.
61
62To do this, use the command below, replacing x.y.z with the version number of
63the downloaded source code.
64
65tar -zxvf bristol-x.y.z.tar.gz
66
67This will create a subdirectory called bristol-x.y.z
68
69	2.3. cd into the directory and do a 'configure'
70
71cd bristol-x.y.z
72./configure
73
74Do bear in mind that if you have another version of Bristol installed, either
75through your distribution's package manager or locally installed before, the
76configure script will stop and refuse to continue. You can either use the
77package manager to remove the version of Bristol installed or just ignore it
78and add the --disable-version-check option to the end of configure on the
79command-line.
80
81At the end of the configure process there will be a short report on the driver
82interfaces that have been auto-detected. Here is an extract of the output:
83
84| Build with OSS support ......................... : true
85| Build with ALSA support ........................ : true
86| Build with JACK support ........................ : false
87| Bristol needs jackd and libjack-dev to be installed for JACK support.
88| Build with JACK MIDI support ................... : false
89| Build with JACK Session support ................ : false
90| Default audio drivers .......................... : alsa
91| Default MIDI drivers ........................... : alsa
92| X11 include file availability .................. : true
93
94As is visible here it was not possible to find the relevant header files for
95the jack audio interface drivers so support will not be included in the eventual
96compilation. There is an indication provided as to which packages would be
97required to enable that support. For audio drivers there is a minimum of ALSA
98required (OSS is also possible) however if the X11 header files could not be
99found then there will be no graphical support in the binaries - a command line
100interface only. In this event there will also be a report on which packages
101are required to provide that support.
102
103	2.4. Execute a 'make'.
104
105To build Bristol type:
106
107make
108
109This process will produce all the usual verbose output. It will contain some
110warnings about unused variables and some potential coding changes however it
111should proceed to completion. If you get errors such as the following then you
112will need to contact the author or raise a bug report.
113
114gcc -DHAVE_CONFIG_H -I. -I..   -I/usr/X11R6/include -pthread -Wall -g -I./../include/slab -I./../include/bristol -I. -DBRISTOL_VOICECOUNT=32   -DBRISTOL_JACK_MULTI_CLOSE    -D_BRISTOL_DRAIN    -DBRISTOL_HAS_ALSA=1  -I/usr/include/alsa   -ffast-math -fomit-frame-pointer -O2 -g -O2 -I/usr/X11R6/include -MT bristol.o -MD -MP -MF .deps/bristol.Tpo -c -o bristol.o bristol.c
115bristol.c:62: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘asdf’
116make[2]: *** [bristol.o] Error 1
117make[2]: Leaving directory `/opt/bristol/bristol-0.60.7/bristol'
118make[1]: *** [all-recursive] Error 1
119make[1]: Leaving directory `/opt/bristol/bristol-0.60.7'
120make: *** [all] Error 2
121
122How to contact the author or log a bug are given in the last few lines of the
123output from ./configure above.
124
125It is fortunately unusual that such compilation errors will occur on any Linux
126distribution, the above was forced to fail just for providing an example.
127
128	2.5. install the application typically requires root permissions
129
130If you get no errors from the 'make' process then the application is ready to
131be installed.
132
133sudo make install
134
135This step need to be run as root as, unless you have been very selective with
136the ./configure options then parts of bristol will be written to parts of the
137/usr filesystem which is typically read-only for user accounts. By default this
138should install bristol and associated apps to /usr/local/ with data commponets
139into /usr/local/share. To run the application you should now be able to use the
140startBristol script however that does depend on /usr/local/bin being in your
141path.
142
143	2.6. Run the application
144
145If the binary is placed in a directory in your path then you can typically
146start it directly:
147
148startBristol -mini
149
150If this is not in your path then try the following, this is the default location
151for the binaries and may differ if you use alternative --prefix for configure.
152
153/usr/local/bin/startBristol -mini
154
155
156
157
158	3. Some Useful options for starting bristol:
159
160-voices
161
162Sets the number of voices the synth starts with. The default for most of the
163synths is to start with as many voices as their hardware counterparts have.
164In the case of the mini moog, this would be 1 voice.
165
166-mono
167
168Starts the synth with 1 voice (-hnp -lnp can be used to select high/low note
169priority respectively)
170
171-hnp
172
173Selects High Note Priority, any notes played higher than the currently held
174note will sound and bounce back to the held when released. Notes lower will
175be ignored by the engine. Vice versa with -lnp.
176
177-register
178
179Changes the jack and alsa names to the text after it, so it can make more
180sense when connecting devices etc.
181
182-ar
183
184Ignores the emulator default aspect ratio. In tiling window managers, bristol
185can fight with the tiling for so long that active sensing will close the
186emulator. This option stops that behaviour.
187
188Note: Active Sensing is a 'ping' between the GUI frontend and the synth backend,
189to ensure that the synth engine hasn't crashed.
190
191-debug [1-16]
192
193Produces debug output to the terminal. 1 is very little debug. 16 is very
194verbose debug.
195
196Many more options, along with the full list of synths can be found by doing
197'startBristol --help' or 'man bristol'.
198
199
200
201	4. ALSA Interface Configuration
202
203To see the MIDI connections that can be built you need to look at aconnect
204commmand:
205
206aconnect -io
207
208Here is a sammple of its output:
209
210client 0: 'System' [type=kernel]
2110 'Timer '
2121 'Announce '
213client 14: 'Midi Through' [type=kernel]
2140 'Midi Through Port-0'
215client 20: 'USB Oxygen 61' [type=kernel]
2160 'USB Oxygen 61 MIDI 1'
217client 24: 'USB Keystation 88es' [type=kernel]
2180 'USB Keystation 88es MIDI 1'
219client 129: 'bristol' [type=user]
2200 'bristol input
221
222Here we can see two MIDI controllers and the bristol engine. The following
223command will link them together so that you can play bristol from your MIDI
224master controller:
225
226aconnect 20 129
227aconnect 'USB Oxygen 61' bristol
228
229It is possible to connect two master controllers to bristol and this is not
230unusual for something like the B3. This emulator also has two manuals and can
231accept multiple controllers on different MIDI channels to allow control of
232both them.
233
234If ALSA is the default interface (ie, you have not given any flags that imply
235another interface type) then bristol will use ALSA for both audio and MIDI. The
236default is the 'seq' MIDI interface. It is also possible to use a raw MIDI
237interface with the option '-midi raw', the type really depends on your soundcard
238and driver options.
239
240
241
242	5. Jack Interface Configuration
243
244JACK is a low-latency sound server, similar to ASIO on windows. Any apps that
245are 'jack-aware' are able send audio information to one another seamlessly.
246Bristol is just one such application that supports JACK. More information can
247be found at http://jackaudio.org/
248
249Using the jack audio driver is as simple as appending '-jack' to the
250startBristol command.
251
252As of 0.60.7, the following can disable the 'bristoljackstats' app, which can
253cause startBristol to fail:
254
255startBristol -jack -jackstats -count <jack periodsize> -rate <jack samplerate>
256
257The count and rate have to match the settings given to the jack daemon. In the
258event of mismatch you will get an error condition from bristol with some level
259of diagnostic output to indicate the cause.
260
261Unless specifically told otherwise, bristol will use jack drivers for both
262audio and midi.
263
264	5.1 Using qjackctl
265
266Using qjackctl you can easily connect midi controlloers by clicking on either
267the 'Midi' tab or 'Alsa' tab, depending on which midi driver you've selected to
268use with bristol and then clicking the controller you want on the left pane and
269the 'Bristol' input on the right and clicking 'connect'.
270
271
272
273
274	6. The Bristol runcom file
275
276Bristol itself has a large range of parameters, each tuning the operation to
277suit specific needs. Having to give so many parameters to get the synth to
278work in a specific environment gives it flexibility but also makes it sometimes
279difficult to use. To quote one person, "It can be an inspiration killer".
280
281There are a few third party apps such as monoBristol that provide graphical
282front ends to the commandline options to make starting bristol easier. Bristol
283itself supports a runcom file where a user can specify common preferred params
284that are then included with every invocation.
285
286The bristol runcom file can be found, per default, in $HOME/.bristol/bristolrc
287and its function depends on the bristol version.
288
289	6.1 Bristol prior to 0.60.8
290
291The file needs to be created as it does not exist per default. When it exists
292then the complete contents are prepended before the command line options. As
293an example, consider the following contents:
294
295	-jack
296	-jackstats
297	-count 256
298	-rate 48000
299
300or
301
302	-jack -jackstats -count 256 -rate 48000
303
304Both of these will have the same affect as they are all summed together. If
305bristol is started as 'startBristol -mini' then the actual commmandline will be
306
307	startBristol -jack -jackstats -count 256 -rate 48000 -mini
308
309	6.2 Bristol from 0.60.8
310
311There were some limitations of the initial runcom implementation. A number of
312parameters are implied by each emulator: voices, detune, pitchbend and others.
313If the runcom includes a -pwd (pitch wheel depth) of 7 it might be lost when
314the emulator is selected as the emulator will configure its own desired pitch
315wheel sensitivity as most of the emulators will default this value to '2'. To
316support such features the runcom was changed to support pre and post parameters.
317Consider the following contents:
318
319	PREARGS=-jack -jackstats -count 128 -rate 48000 -as 0 -priority 65 -debug 1
320	POSTARGS=-multi 2 -lnp -pwd 7 -glide 10 -rud -lnp -log -gain 2 -host unix:
321
322If bristol is now started with 'startBristol -mini' the final options taken by
323the program will be
324
325	startBristol $PREARGS -mini $POSTARGS
326
327This is all expanded out to give a complete command line that, if it was typed
328in, would read as follows:
329
330	startBristol -jack -jackstats -count 128 -rate 48000 -as 0 -priority 65 -debug 1 -mini -multi 2 -lnp -pwd 7 -glide -rud -lnp -log -gain 2 -host unix:
331
332Here there are some initial parameter settings, then the emulator is selected.
333The emulator will default the pitch wheel depth to '2'. Then the post arguments
334are added and they reset the pitchwheel depth to the value '7'.
335
336This whole ugly line of parameters is now called with just
337
338	startBristol -mini
339
340The goal of the runcom file is to reduce to a minimum the number of parameters
341that need to be given on the command line whilst still maintaining a completely
342customised local configuration.
343
344Questions regarding parameter ordering should be sent to LAU mailing list, the
345author, or raised on the bristol sourceforge forum.
346
347
348
349
350	7. Controlling the GUI from a MIDI master controller
351
352It is possible to get the GUI to be controlled from faders on a master
353controller. First connect up the MIDI as described above. Place the mouse
354cursor over the GUI control you want to track and push the Middle Mouse Button.
355Now move the MIDI control, the GUI should now track that control. Devices can
356be unregistered using the same method. The settings will be saved when you
357save a memory.
358
359The settings themselves are in the directory listed below, and they can be
360edited with a text editor.
361
362    /home/username/.bristol/memory/profiles/<synthname>
363
364Most of the synths come with a standard GM midi mapping for controlling filter
365cutoff/resonance, etc.
366
367
368
369	8. Keyboard accelerators
370
371	8.1 Keyboard Mappings.
372
373Bristol supports GUI shortcuts and playing the synths via a QWERTY keyboard.
374Playing bristol via the QWERTY on the B3 has C2 starting on '\' and going up
375to F3 on '/' on the bottom manual, while the top manual goes from C4 on Q to
376G5 on ']'. On a single keyboard synth, such as the polysix, C1 starts on '\'
377and goes up F2 on '/' and C3 starts on Q and ends at G4 on ']'.
378
379For alternative mappings such as AZERTY it is necessary to manually edit the
380emulator profile files.
381
382	8.2 Keyboard Accelerators
383
384Useful shortcuts are:
385Ctrl +
386Load next memory
387Ctrl -
388Load previous memory
389Ctrl l
390Load/reload current memory
391Ctrl s
392Save settings to current memory.
393
394Arrow keys can control pot/slider movement with Shift being an accelerator.
395The GUI devices also support VI style j/k up/down with Shift and Control
396options.
397
398
399
400	9. Basics of Subtractive Synthesis.
401
402Subtractive synths generally have 5 parts to them:
403
404	1. Oscillators
405	2. Filters
406	3. Low Frequency Oscillators (LFOs)
407	4. ADSR Envelopes
408	5. Amplification output
409
410Subtractive synthesis works by taking the waveforms generated by oscillators,
411filtering them (or not) to remove specific frequencies, using a LFO to modulate
412the sound, applying an ADSR Envelope to them and then sending the sound out the
413synth.
414
415	9.1. Oscillators
416
417Oscillators use basic waveforms (saw, square, triangle, sine) to produce sound.
418On some synths, these can be combined to produce harmonically rich sounds (saw
419and square for example).
420
421The more oscillators a synth has, the greater number of waveforms that can be
422layered together to create a quite 'phat' sound.
423
424	9.2. Filters
425
426Filters are used to remove specific frequencies from the oscillators.
427
428Filters generally come in 3 types in the bristol synths:
429
430Low Pass Filter
431High Pass
432Band Reject
433
434Low Pass filters remove high frequencies (i.e they pass low freqencies).
435High Pass filters remove low freqencies
436Band Reject filters remove both low and high filters in a specific range and
437allow a certain 'mid-range' of frequencies through.
438
439On all filters, there are 2 main controls:
440Frequency Cutoff.
441Frequency Resonance.
442
443Frequency Cutoff allows you to control how much of the sound gets filtered.
444Resonance amplifies the narrow band of frequencies that are close to the cutoff point.
445
446	9.3.Low Frequency Oscillators (LFOs)
447
448LFOs are exactly like normal oscillators (they have waveforms, like sine,
449square and triangle), but they sound below what a human can hear.  In this way,
450they can modulate various parameters on the synths, without being heard. The
451parameters that an LFO modulates is called the destination.
452
453LFOs usually have 2 controls:
454Rate
455Delay
456
457Rate determines how quickly the LFO oscillates at, low levels modulates the
458destination slowly, while high levels will modulate quickly. Delay determines
459how quickly the LFO should start modulating the destination.
460
461Common modulation destinations are:
462Audible Oscillator's frequency (Vibrato effect)
463Filter Cutoff frequency (wah-wah effect)
464Amplification output (tremolo effect)
465
466On most of the bristol synths, the LFO 'depth' (how much the LFO affects the
467destination) is controlled by the mod-wheel.
468
469	9.4. ADSR Envelopes.
470
471ADSR envelopes shape the sound of the oscillators and filter (where available).
472ADSR stands for the 4 parameters that can shape the sound:
473
474Attack - How quickly the sound reaches full volume.
475Decay - How quickly the sound falls down to the sustain level
476Sustain - Volume of the sound while the key is held
477Release - How quickly the sound fades to silence
478
479	9.5. Amplification output
480There is usually a control here that controls the overall volume of the synth.
481
482
483
484	10. Basics of FM Synthesis.
485
486FM Synthesis stands for Frequency Modulation synthesis.
487
488This means that one oscillator (called a Modulator) modulates the frequency
489of another oscillator (called a Carrier). In Bristol there are 3 FM emulators,
4902 Rhodes Electric Pianos and a Yamaha DX 6 Operator synth.
491
492FM synthesis works by feeding one signal from one oscillator (a modulator) into
493another signal from another oscillator (a carrier). The interesting part is
494when a modulator is audible, detuning the modulator will produce bell-like
495tones in the output as the carrier's frequency is modulated by an audible
496signal. It should be noted that all of the oscillators are sine waves so
497stacking them together can produce some nice hammond-esque sounds.
498
499The DX emulation has got 24 different "algorithms" for all 6 of it's operators.
500These control which oscillators are modulators and which are carriers
501(modulators can be fed into other modulators as well).
502
503All operators have their own ADSR envelope, so sound shaping is possible in
504a variety of ways. The ADSR is a 7-stage envelope. This means that it has 7
505parts to it:
506
507L1 - First audible stage
508Attack1 - Rate at which the operator goes from silence to L1
509L2 - Second audible stage
510Attack2 - Rate at which the operator goes from L1 to L2
511Decay - Rate at which L2 falls to the Sustain stage
512Sustain - How loud the sound will be through steady state
513Release - Rate at which the sound falls to silence
514
515Input gain - How much the modulator affects the carrier for this specific
516operator.
517Output gain - How loud the operator is (when it's a carrier) and how much modulation is sent out (when it's a modulator).
518
519Each operator has three buttons: LFO, IGC and OGC.
520LFO drops the oscillator by a few octaves and removes pitch tracking.
521IGC controls whether the input gain for that operator is affected by velocity.
522OGC controls whether the output gain for that operator is affected by velocity.
523
524Initial draft by Andrew Coughlan.
525Editing, additional information and suggestions by Nick Copeland.
526
527