| |
| Sound Blaster Audigy mixer / default DSP code |
| =========================================== |
| |
| This is based on SB-Live-mixer.txt. |
| |
| The EMU10K2 chips have a DSP part which can be programmed to support |
| various ways of sample processing, which is described here. |
| (This acticle does not deal with the overall functionality of the |
| EMU10K2 chips. See the manuals section for further details.) |
| |
| The ALSA driver programs this portion of chip by default code |
| (can be altered later) which offers the following functionality: |
| |
| |
| 1) Digital mixer controls |
| ------------------------- |
| |
| These controls are built using the DSP instructions. They offer extended |
| functionality. Only the default build-in code in the ALSA driver is described |
| here. Note that the controls work as attenuators: the maximum value is the |
| neutral position leaving the signal unchanged. Note that if the same destination |
| is mentioned in multiple controls, the signal is accumulated and can be wrapped |
| (set to maximal or minimal value without checking of overflow). |
| |
| |
| Explanation of used abbreviations: |
| |
| DAC - digital to analog converter |
| ADC - analog to digital converter |
| I2S - one-way three wire serial bus for digital sound by Philips Semiconductors |
| (this standard is used for connecting standalone DAC and ADC converters) |
| LFE - low frequency effects (subwoofer signal) |
| AC97 - a chip containing an analog mixer, DAC and ADC converters |
| IEC958 - S/PDIF |
| FX-bus - the EMU10K2 chip has an effect bus containing 64 accumulators. |
| Each of the synthesizer voices can feed its output to these accumulators |
| and the DSP microcontroller can operate with the resulting sum. |
| |
| name='PCM Front Playback Volume',index=0 |
| |
| This control is used to attenuate samples for left and right front PCM FX-bus |
| accumulators. ALSA uses accumulators 8 and 9 for left and right front PCM |
| samples for 5.1 playback. The result samples are forwarded to the front DAC PCM |
| slots of the Philips DAC. |
| |
| name='PCM Surround Playback Volume',index=0 |
| |
| This control is used to attenuate samples for left and right surround PCM FX-bus |
| accumulators. ALSA uses accumulators 2 and 3 for left and right surround PCM |
| samples for 5.1 playback. The result samples are forwarded to the surround DAC PCM |
| slots of the Philips DAC. |
| |
| name='PCM Center Playback Volume',index=0 |
| |
| This control is used to attenuate samples for center PCM FX-bus accumulator. |
| ALSA uses accumulator 6 for center PCM sample for 5.1 playback. The result sample |
| is forwarded to the center DAC PCM slot of the Philips DAC. |
| |
| name='PCM LFE Playback Volume',index=0 |
| |
| This control is used to attenuate sample for LFE PCM FX-bus accumulator. |
| ALSA uses accumulator 7 for LFE PCM sample for 5.1 playback. The result sample |
| is forwarded to the LFE DAC PCM slot of the Philips DAC. |
| |
| name='PCM Playback Volume',index=0 |
| |
| This control is used to attenuate samples for left and right PCM FX-bus |
| accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples for |
| stereo playback. The result samples are forwarded to the front DAC PCM slots |
| of the Philips DAC. |
| |
| name='PCM Capture Volume',index=0 |
| |
| This control is used to attenuate samples for left and right PCM FX-bus |
| accumulator. ALSA uses accumulators 0 and 1 for left and right PCM. |
| The result is forwarded to the ADC capture FIFO (thus to the standard capture |
| PCM device). |
| |
| name='Music Playback Volume',index=0 |
| |
| This control is used to attenuate samples for left and right MIDI FX-bus |
| accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples. |
| The result samples are forwarded to the front DAC PCM slots of the AC97 codec. |
| |
| name='Music Capture Volume',index=0 |
| |
| These controls are used to attenuate samples for left and right MIDI FX-bus |
| accumulator. ALSA uses accumulators 4 and 5 for left and right PCM. |
| The result is forwarded to the ADC capture FIFO (thus to the standard capture |
| PCM device). |
| |
| name='Mic Playback Volume',index=0 |
| |
| This control is used to attenuate samples for left and right Mic input. |
| For Mic input is used AC97 codec. The result samples are forwarded to |
| the front DAC PCM slots of the Philips DAC. Samples are forwarded to Mic |
| capture FIFO (device 1 - 16bit/8KHz mono) too without volume control. |
| |
| name='Mic Capture Volume',index=0 |
| |
| This control is used to attenuate samples for left and right Mic input. |
| The result is forwarded to the ADC capture FIFO (thus to the standard capture |
| PCM device). |
| |
| name='Audigy CD Playback Volume',index=0 |
| |
| This control is used to attenuate samples from left and right IEC958 TTL |
| digital inputs (usually used by a CDROM drive). The result samples are |
| forwarded to the front DAC PCM slots of the Philips DAC. |
| |
| name='Audigy CD Capture Volume',index=0 |
| |
| This control is used to attenuate samples from left and right IEC958 TTL |
| digital inputs (usually used by a CDROM drive). The result samples are |
| forwarded to the ADC capture FIFO (thus to the standard capture PCM device). |
| |
| name='IEC958 Optical Playback Volume',index=0 |
| |
| This control is used to attenuate samples from left and right IEC958 optical |
| digital input. The result samples are forwarded to the front DAC PCM slots |
| of the Philips DAC. |
| |
| name='IEC958 Optical Capture Volume',index=0 |
| |
| This control is used to attenuate samples from left and right IEC958 optical |
| digital inputs. The result samples are forwarded to the ADC capture FIFO |
| (thus to the standard capture PCM device). |
| |
| name='Line2 Playback Volume',index=0 |
| |
| This control is used to attenuate samples from left and right I2S ADC |
| inputs (on the AudigyDrive). The result samples are forwarded to the front |
| DAC PCM slots of the Philips DAC. |
| |
| name='Line2 Capture Volume',index=1 |
| |
| This control is used to attenuate samples from left and right I2S ADC |
| inputs (on the AudigyDrive). The result samples are forwarded to the ADC |
| capture FIFO (thus to the standard capture PCM device). |
| |
| name='Analog Mix Playback Volume',index=0 |
| |
| This control is used to attenuate samples from left and right I2S ADC |
| inputs from Philips ADC. The result samples are forwarded to the front |
| DAC PCM slots of the Philips DAC. This contains mix from analog sources |
| like CD, Line In, Aux, .... |
| |
| name='Analog Mix Capture Volume',index=1 |
| |
| This control is used to attenuate samples from left and right I2S ADC |
| inputs Philips ADC. The result samples are forwarded to the ADC |
| capture FIFO (thus to the standard capture PCM device). |
| |
| name='Aux2 Playback Volume',index=0 |
| |
| This control is used to attenuate samples from left and right I2S ADC |
| inputs (on the AudigyDrive). The result samples are forwarded to the front |
| DAC PCM slots of the Philips DAC. |
| |
| name='Aux2 Capture Volume',index=1 |
| |
| This control is used to attenuate samples from left and right I2S ADC |
| inputs (on the AudigyDrive). The result samples are forwarded to the ADC |
| capture FIFO (thus to the standard capture PCM device). |
| |
| name='Front Playback Volume',index=0 |
| |
| All stereo signals are mixed together and mirrored to surround, center and LFE. |
| This control is used to attenuate samples for left and right front speakers of |
| this mix. |
| |
| name='Surround Playback Volume',index=0 |
| |
| All stereo signals are mixed together and mirrored to surround, center and LFE. |
| This control is used to attenuate samples for left and right surround speakers of |
| this mix. |
| |
| name='Center Playback Volume',index=0 |
| |
| All stereo signals are mixed together and mirrored to surround, center and LFE. |
| This control is used to attenuate sample for center speaker of this mix. |
| |
| name='LFE Playback Volume',index=0 |
| |
| All stereo signals are mixed together and mirrored to surround, center and LFE. |
| This control is used to attenuate sample for LFE speaker of this mix. |
| |
| name='Tone Control - Switch',index=0 |
| |
| This control turns the tone control on or off. The samples for front, rear |
| and center / LFE outputs are affected. |
| |
| name='Tone Control - Bass',index=0 |
| |
| This control sets the bass intensity. There is no neutral value!! |
| When the tone control code is activated, the samples are always modified. |
| The closest value to pure signal is 20. |
| |
| name='Tone Control - Treble',index=0 |
| |
| This control sets the treble intensity. There is no neutral value!! |
| When the tone control code is activated, the samples are always modified. |
| The closest value to pure signal is 20. |
| |
| name='Master Playback Volume',index=0 |
| |
| This control is used to attenuate samples for front, surround, center and |
| LFE outputs. |
| |
| name='IEC958 Optical Raw Playback Switch',index=0 |
| |
| If this switch is on, then the samples for the IEC958 (S/PDIF) digital |
| output are taken only from the raw FX8010 PCM, otherwise standard front |
| PCM samples are taken. |
| |
| |
| 2) PCM stream related controls |
| ------------------------------ |
| |
| name='EMU10K1 PCM Volume',index 0-31 |
| |
| Channel volume attenuation in range 0-0xffff. The maximum value (no |
| attenuation) is default. The channel mapping for three values is |
| as follows: |
| |
| 0 - mono, default 0xffff (no attenuation) |
| 1 - left, default 0xffff (no attenuation) |
| 2 - right, default 0xffff (no attenuation) |
| |
| name='EMU10K1 PCM Send Routing',index 0-31 |
| |
| This control specifies the destination - FX-bus accumulators. There 24 |
| values with this mapping: |
| |
| 0 - mono, A destination (FX-bus 0-63), default 0 |
| 1 - mono, B destination (FX-bus 0-63), default 1 |
| 2 - mono, C destination (FX-bus 0-63), default 2 |
| 3 - mono, D destination (FX-bus 0-63), default 3 |
| 4 - mono, E destination (FX-bus 0-63), default 0 |
| 5 - mono, F destination (FX-bus 0-63), default 0 |
| 6 - mono, G destination (FX-bus 0-63), default 0 |
| 7 - mono, H destination (FX-bus 0-63), default 0 |
| 8 - left, A destination (FX-bus 0-63), default 0 |
| 9 - left, B destination (FX-bus 0-63), default 1 |
| 10 - left, C destination (FX-bus 0-63), default 2 |
| 11 - left, D destination (FX-bus 0-63), default 3 |
| 12 - left, E destination (FX-bus 0-63), default 0 |
| 13 - left, F destination (FX-bus 0-63), default 0 |
| 14 - left, G destination (FX-bus 0-63), default 0 |
| 15 - left, H destination (FX-bus 0-63), default 0 |
| 16 - right, A destination (FX-bus 0-63), default 0 |
| 17 - right, B destination (FX-bus 0-63), default 1 |
| 18 - right, C destination (FX-bus 0-63), default 2 |
| 19 - right, D destination (FX-bus 0-63), default 3 |
| 20 - right, E destination (FX-bus 0-63), default 0 |
| 21 - right, F destination (FX-bus 0-63), default 0 |
| 22 - right, G destination (FX-bus 0-63), default 0 |
| 23 - right, H destination (FX-bus 0-63), default 0 |
| |
| Don't forget that it's illegal to assign a channel to the same FX-bus accumulator |
| more than once (it means 0=0 && 1=0 is an invalid combination). |
| |
| name='EMU10K1 PCM Send Volume',index 0-31 |
| |
| It specifies the attenuation (amount) for given destination in range 0-255. |
| The channel mapping is following: |
| |
| 0 - mono, A destination attn, default 255 (no attenuation) |
| 1 - mono, B destination attn, default 255 (no attenuation) |
| 2 - mono, C destination attn, default 0 (mute) |
| 3 - mono, D destination attn, default 0 (mute) |
| 4 - mono, E destination attn, default 0 (mute) |
| 5 - mono, F destination attn, default 0 (mute) |
| 6 - mono, G destination attn, default 0 (mute) |
| 7 - mono, H destination attn, default 0 (mute) |
| 8 - left, A destination attn, default 255 (no attenuation) |
| 9 - left, B destination attn, default 0 (mute) |
| 10 - left, C destination attn, default 0 (mute) |
| 11 - left, D destination attn, default 0 (mute) |
| 12 - left, E destination attn, default 0 (mute) |
| 13 - left, F destination attn, default 0 (mute) |
| 14 - left, G destination attn, default 0 (mute) |
| 15 - left, H destination attn, default 0 (mute) |
| 16 - right, A destination attn, default 0 (mute) |
| 17 - right, B destination attn, default 255 (no attenuation) |
| 18 - right, C destination attn, default 0 (mute) |
| 19 - right, D destination attn, default 0 (mute) |
| 20 - right, E destination attn, default 0 (mute) |
| 21 - right, F destination attn, default 0 (mute) |
| 22 - right, G destination attn, default 0 (mute) |
| 23 - right, H destination attn, default 0 (mute) |
| |
| |
| |
| 4) MANUALS/PATENTS: |
| ------------------- |
| |
| ftp://opensource.creative.com/pub/doc |
| ------------------------------------- |
| |
| Files: |
| LM4545.pdf AC97 Codec |
| |
| m2049.pdf The EMU10K1 Digital Audio Processor |
| |
| hog63.ps FX8010 - A DSP Chip Architecture for Audio Effects |
| |
| |
| WIPO Patents |
| ------------ |
| Patent numbers: |
| WO 9901813 (A1) Audio Effects Processor with multiple asynchronous (Jan. 14, 1999) |
| streams |
| |
| WO 9901814 (A1) Processor with Instruction Set for Audio Effects (Jan. 14, 1999) |
| |
| WO 9901953 (A1) Audio Effects Processor having Decoupled Instruction |
| Execution and Audio Data Sequencing (Jan. 14, 1999) |
| |
| |
| US Patents (http://www.uspto.gov/) |
| ---------------------------------- |
| |
| US 5925841 Digital Sampling Instrument employing cache memory (Jul. 20, 1999) |
| |
| US 5928342 Audio Effects Processor integrated on a single chip (Jul. 27, 1999) |
| with a multiport memory onto which multiple asynchronous |
| digital sound samples can be concurrently loaded |
| |
| US 5930158 Processor with Instruction Set for Audio Effects (Jul. 27, 1999) |
| |
| US 6032235 Memory initialization circuit (Tram) (Feb. 29, 2000) |
| |
| US 6138207 Interpolation looping of audio samples in cache connected to (Oct. 24, 2000) |
| system bus with prioritization and modification of bus transfers |
| in accordance with loop ends and minimum block sizes |
| |
| US 6151670 Method for conserving memory storage using a (Nov. 21, 2000) |
| pool of short term memory registers |
| |
| US 6195715 Interrupt control for multiple programs communicating with (Feb. 27, 2001) |
| a common interrupt by associating programs to GP registers, |
| defining interrupt register, polling GP registers, and invoking |
| callback routine associated with defined interrupt register |