22.09.2015 Views

of Microprocessors

Musical-Applications-of-Microprocessors-2ed-Chamberlin-H-1987

Musical-Applications-of-Microprocessors-2ed-Chamberlin-H-1987

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

MUSIC SYNTHESIS SOFTWARE 641<br />

Often, each level is served by a distinct program or set <strong>of</strong> subroutines<br />

and in fact the programming languages used may vary from level to level.<br />

Overall a music synthesis s<strong>of</strong>tware system for programmed performance<br />

operates as an interpretive system that extracts information from the userprepared<br />

score and then acts on the information. The higher levels do the<br />

information extraction and organization, while the lower levels do the actual<br />

execution.<br />

The lowest level synthesis routines, which will be called "Levell"<br />

routines, operate at the sample rate <strong>of</strong> the final sound. This means that a<br />

single "loop" through the synthesis routine generates only one sample <strong>of</strong> the<br />

final sound. Basically, the routine accepts sound parameters as input and<br />

generates sound samples as output. The output samples may be mixed with<br />

the output <strong>of</strong> other Level 1 routines or the same routine with different<br />

parameters. Details <strong>of</strong> the routine, <strong>of</strong> course, depend heavily on the synthesis<br />

method chosen. If waveform table lookup is the primary scheme utilized,<br />

then each loop involves the computation <strong>of</strong> a new lookup address based on a<br />

frequency parameter, actual table lookup based on a waveshape parameter,<br />

amplitude adjustment based on an amplitude parameter, and output based<br />

on a location parameter.<br />

Usually, a Level 1 synthesis routine will generate a "block" <strong>of</strong> samples<br />

before returning to the next higher level. This saves most <strong>of</strong> the considerable<br />

overhead associated with call and return linkage and the passing <strong>of</strong> parameters.<br />

In the hietarchical system being outlined, the parameters <strong>of</strong> the<br />

sound being synthesized are assumed to be constant throughout the block.<br />

Often, a sample buffer is used to hold one or more blocks <strong>of</strong> samples. As<br />

samples are computed, they are algebraically added to corresponding samples<br />

in the buffer in a manner analogous to the audio bus <strong>of</strong> an analog voice<br />

modular system. If stereo or quad is being synthesized, there will be a<br />

distinct buffer for each channel <strong>of</strong> sound.<br />

In some cases, there may be a "Level 0" routine that processes sound<br />

samples from the buffer before playing them through the DAC or writing<br />

them on a storage device. The usual function <strong>of</strong>such a routine is the addition<br />

<strong>of</strong> reverberation or a chorus effect to the sound. Parameters from the upper<br />

levels are <strong>of</strong>ten required to control the effects produced, particularly when<br />

they are used in a piece for dramatic contrast.<br />

Level 2 routines operate at what can be called the "envelope sample<br />

rate." This is the rate at which the fundamental parameters needed by the<br />

Level 1 routines are updated and is equal to the audio sample rate divided by<br />

their block size. Rates <strong>of</strong> 50 sis to 2,000 sis are useful, which corresponds to<br />

update periods <strong>of</strong> 0.5 msec to 20 msec. Level 2 routines accept envelope<br />

parameters from the higher levels and supply sound parameters to the Levell<br />

routines. Envelope parameter descriptions vary widely, however, and a typical<br />

system may use different Level 2 routines simultaneously according to<br />

envelope type and description.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!