Stream processing

Stream processing modules (block diagrams)

Stream processing operations are often called signal processing, waveform synthesis and editing, process simulation, or process modeling.

Stream processing operations may be quickly specified in MitSyn by drawing “modules” (also called “patches”) which are block-diagram representations of the desired processing. In particular, “blocks” are connected (“wired”, “patched”) together into modules (networks) which effect the desired functions.

Modules are created and edited by drawing block diagrams using the MitSyn Stream Processing Module Editor. An example module as viewed with the editor is:

spmoduleedit-main-window

The function of a particular module defined by the interconnection topology, and by the operational characteristics of the individual block types used in the module. Each block type is in one of three classes — a primitive block, a Library (system supplied) macro-block, or a user defined macro block. The characteristics of the individual primitive block types are defined in the MitSyn Stream Processing Primitive Block Dictionary which is contained in the MitSyn help file. The characteristics of macro-blocks are determined by their individual implementations.

A New Block toolbar (floating) is used for the addition of blocks to configurations. It includes a list box is shown displaying some of the primitive (built-in) block types. About 140 primitive block types are currently supported.

“Macro-blocks” may be defined by users and subsequently used in the same manner as primitive blocks. These are used the same way as user defined subroutines are used in procedural languages. Thus users may create libraries of more complex operations which are unique to their particular style of use.

Filtering with the MitSyn Stream Processor

One important application of stream processing is the operation caller “filtering”, which means the application of an operation on a signal to modify it in some way.  Typical operations are to filter out certain bands of frequencies, to add reverberation, to selectively amplify and/or attenuate frequencies (sometimes referred to as a “graphic equalizer”).

Many of the MitSyn stream processing block types effect some form of filtering.

nared-fir-filter-designFor frequency band filtering a useful block type is the transversal filter block named TranFilt. The characteristics of this form of filter are determined by a single array of numbers called the “filter coefficient vector”. The MitSyn Numeric Array Builder/Editor supports the “design” of such filters with the following dialog box which allows you to specify the characteristics of frequency bands from which is calculates the coefficients needed to realize the “optimum linear phase bandpass filter” which satisfies your needs.

Stream processing runs

The actual running of stream processing is effected by commands which are said to build (also called compile) a processor from a main module and any additional referenced modules, and then to “run” the processorso built.

A GUI (graphical user interface) may be run concurrently with a stream processing run, and components of the GUI such as slider controls may be used to control parameters of the processing in real time. Audio output may be realized using Play blocks, and audio and other types of time signals may be captured using Sampler blocks. An example of running a GUI while doing audio synthesis and playing with a stream processor is the implementation behind the player feature of the Score Player and Editor which allows the user to listen and adjust parameters such as voice loudness and tempo.

For pure synthesis applications a stream processor module may read from a file format called a “MitSyn Score” and use that to control variations in processing parameters.

Implementation

We present here some details of the stream processing implementation which, although not necessary for its usage, may be of interest to the technically oriented user. Others may best ignore the remainder of this page.

The actual stream processing is executed by efficient native mode code provided by the compiler and designed to execute as rapidly as possible on the host computer. The speed of stream processing is a function of the complexity of the particular processing configuration and the speed of the processor host (for code compiled for and being executed by a single “standalone” general purpose CPU chip).

Stream processor construction

Stream Processors are built by first compiling module files into a signal flow network. The main moduleis read, and then all referenced macro-blocks are read and expanded with the specified parameter substitutions. Then all the stream processing blocks are sorted into an appropriate execution order. Such ordering is required since a processing configuration is conceptually a parallel stream process, i.e., all blocks run concurrently, but contemporary general purpose digital computers are primarily serial machines and so an internal representation must be created which allows the blocks to be executed sequentially.