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