Digital Sound Synthesis

From DSPWiki

Jump to: navigation, search

Contents

Max Mathews

Scientists at Bell Telephone Laboratories in Murray Hill, New Jersey were pioneers in digital sound synthesis. Max Mathews was employed by Bell Labs for perceptual research on voice communications, and he also played the violin, and was interested in music. According to Mathews, "Computer performance of music was born in 1957 when an IBM 704 in New York City played a 17 second composition on the Music I program which I wrote".

Mathews would travel to Manhattan in order to use the IBM 704 computer, located at the IBM World Headquarters. This computer was used to compute sounds, which would be stored digitally on magnetic tape. After returning to Bell Laboratories, Matthews and his colleagues used a less powerful computer with a 12-bit vacuum tube DAC to transfer the digital samples into audio. This original DAC was designed by Bernard Gordon, and the only one capable of sound production at the time.

Mathews moved on from Music I to write Music II, III, IV, and V. Other music programming languages have been written, and are generally referred to as Music N languages.

Oscillator Algorithm

Designed by Max Mathews to speed up the process of digital synthesis. Previously, it was necessary to compute entire waveforms in order to synthesize them. With the Oscillator Algorithm, it was possible to store a waveform table, and use that to generate varying frequencies using the sampling increment. The most basic oscillator algorithm can be explained as a two-step program:

1. phase_index = mod L (previous_phase + increment) 2. output = amplitude * wavetable[phase_index]

(the modulo operation divides the sum by the table length (L))

lecture5_image1.gif

For instance, if the SR is 44,100, and the table size (L) is 512, the frequency will be 44,100 / 512 = 88 Hz. To double the frequency, we have to go through the table twice as fast, by doubling the sampling increment (SI).

Oscillator Stages

Initialization:

SI = (L* Frequency) / SR PHS = 0

Sample Rate:

PHS = PHS +SI       \ IPHS = int(PHS)      |- check bounds out = wave(IPHASE)  / ... repeat

Oscillator Detail

lecture5_image2.gif

The fractional part of the number (n) determines the frequency accuracy:

n Δ f (@ 25 kHz SR)
0 48
4 3.05
8 .191
12 .0119

A lot of fractional accuracy is necessary because frequency discrimination is the most accurate human perception, and also because of beating tones that are created at the difference frequency (1000 Hz and 1002 Hz beats at 2 Hz).

Table-Lookup Noise

The signal to (table-lookup) noise ratio of an oscillator depends largely on the table size (L), and also on the method used to compute the frequency. Interpolation causes the S/N to be much improved.

L Oscillator Interpolated
256 36 84
512 42 96
1024 48 108
2048 54 120

For most values of table length (L), frequency, and sample rate, (SR), the resulting increment is not an integer. An interpolating oscilator works by calculating fractional positions in the wavetable to determine what the value of the wavetable would have been if it were possible to reference the wavetable at the exact phase specified by the increment. The x-value on the graph below is supplied by the phase increment, so the y-value (amplitude) is interpolated.

lecture5_image3.gif

Creative Labs v. Aureal

When the Sound Blaster Live! was released in 1998, Aureal and Creative Labs started a legal war to keep each other's products off the shelves. Creative Labs is the parent company of Emu, and had sampling patents related to pre-storing sampling computations (sampling with cache memory present). Aureal initially tries to prove that the Creative Labs patent is invalid, but eventually fails. Ultimately, Aureal wins the lawsuit, but goes into bankruptcy, and is purchased by Creative Labs.

References:

http://www.findarticles.com/cf_dls/m4PRN/1999_Dec_10/58157288/p1/article.jhtml http://www.gersic.com/dspwiki/index.php?title=Creative_Labs_v._Aureal

Program Flow

A frame rate (also known as control rate) is used by the program to determine what needs to change at a slower rate than the sampling rate.

lecture5_image4.gif

Ads: