:: BEAST :: :: Better Audio System ::

Beast Architecture

From Testbit Wiki

Jump to: navigation, search

Beast - Project Architecture

Authors: Tim Janik, Stefan Westerfeld

This document provides an architectural overview of the Beast audio synthesis package and related components.


Programs and Libraries

Programs and Libraries
  1. SFIDL - The IDL compiler ([sfidl.1.html sfidl(1)]) used for language bindings and plugins
  2. BseWaveTool - A small program to generate multi-sample .BSEWAVE files
  3. BEAST - a Gtk+ based GUI front-end ([beast.1.html beast(1)]) for Bse
  4. GXK - a library containing extensions to Gtk+, such as XML-parser for widget templates or an action administration system
  5. BSESCM - a Guile based scheme shell ([bsescm.1.html bsescm(1)]) for Bse
  6. Bse - synthesis and sequencing library
  7. Sfi - Interface library, consisting of:
    • a value abstractiong SfiValue (based on GValue)
    • a serializable parameter abstraction based on GParamSpec
    • a threading abstraction SfiThread (based on GThread)
    • primitive type implementations (record, sequenzes, rings)
    • a glue layer to allow function calls and signals across process boundaries
    • a simple communication layer based on SfiValue for process boundaries
    • basic serialization mechanisms to allow implementations of persistent object storage
    • miscellaneous utilities.
  8. GLib-Extra - utility functions which are subject to be folded back into GLib at some point.


Components

Components
  1. BSE-Shell - a shell interfacing to Bse, such as the Guile based scheme shell bsescm.1. It's used for scripting Beast and to run standalone scripts.
  2. Beast - a Gtk+ based GUI front-end (see beast.1) for Bse.
  3. Bse - the sequencing and synthesis core, consisting of:
    • Plugin interface,
    • MIDI Event processing logic,
    • MIDI File import,
    • Undo/redo stack,
    • Object framework,
    • Glue layer + scripting objects,
    • Song, track, part, mixer and wave objects,
    • Synthesis networks,
    • Sequencer (seperately threaded),
    • Synthesis Engine (seperately threaded),
    • Input output drivers for PCM and MIDI,
    • OSS MIDI and PCM driver,
    • Standard synthesis modules.


Samples and Wave Files

Sample Data is organized at three levels:


  1. Wave Chunks - a chunk contains one sample
  2. Waves - multiple chunks can be put into a wave; this allows storing different samples which should be played for different notes
  3. Wave Libraries - multiple waves can be put into a wave library


Extra Information (XInfo Strings) for Wave Files

XInfos consist of a list of "key=value" pairs. Values need to be valid UTF-8 strings, while keys may consist only of the lowercase letters 'a'-'z', the digits '0'-'9' and a dash '-'.


Wave Chunk specific XInfos

  • label - The user visible name for this wave chunk.
  • blurb - A comment describing this wave chunk.
  • osc-freq - Note frequency (oscillator frequency) the chunk should be played back at. In other words, the note that was played when the chunk was recorded.
  • loop-type - The loop type needs to be set to indicate that the sample should be looped. Possible values are:
    1. "none" - no loop
    2. "jump" - plays from loop start to loop end, then jumps back to loop start
    3. "ping-pong" - plays from loop start to loop end and then backwards from loop end to loop start
  • loop-start - The offset in samples for the start of the loop.
  • loop-end - The offset in samples for the end of the loop.
  • loop-count - A maximum limit for how often the loop should be repeated.
  • volume - This can be used to adjust the volume of a wave chunk without changing the raw/compressed audio data actually stored. When omitted, it defaults to 1.0 (no volume adjustment). Other values are for instance 0.5 (play sample half as loud, corresponding to a -6dB adjustment) and 0.25 (corresponds to a -12dB adjustment). The range of valid volume adjustments is: 0 < volume <= 1.0, any other value will be ignored.
  • fine-tune The fine tune allows to change the speed or pitch at which a sample is played back in cent. This does not affect the raw/compressed audio data actually stored. The default is a fine tune of 0 cent which avoids any detuninng. For example a fine tune setting of 100 cents will pitch up the sample by a semitone and 1200 cents cause a full octave shift.
  • gus-patch-envelope - Contains the envelope points for a GUS Patch envelope.


Wave specific XInfos

  • label - The user visible name for this wave.
  • blurb - A comment describing this wave.
  • authors - A list of the authors who participated in creating the wave file.
  • license - The license specifiing redistribution and other legal terms for the wave file.
  • blurb - A descriptive text for the wave file.
  • play-type - Indicates the set of required play back facilities for a wave. Supported values are:
    1. adsr-wave-1 - for mono wave files: A minimal ADSR envelope which does fade-in at the beginning and fade-out at the end of the note is used, to prevent clicks. The pitch bend midi and volume controllers are supported.
    2. adsr-wave-2 - for stereo wave files: A minimal ADSR envelope which does fade-in at the beginning and fade-out at the end of the note is used, to prevent clicks. The pitch bend and volume midi controllers are supported.
    3. plain-wave-1 - for mono wave files: No envelope is used, and the whole sample is played, no matter how long the actual note is. This is useful for drum samples. The volume midi controller is supported.
    4. plain-wave-2 - for stereo wave files: No envelope is used, and the whole sample is played, no matter how long the actual note is. This is useful for drum samples. The volume midi controller is supported.
    5. gus-patch - for GUS Patches (which need a special envelope).


Wave Library specific XInfos

There are currently no XInfos defined for Wave Libraries, because Wave Libraries are not yet supported.



  • This page was last modified on 20 June 2013, at 00:31.
  • This page has been accessed 3,718 times.
Support Us

Flattr this