1 |
62 |
marcus.erl |
|
2 |
|
|
Sound Blaster Audigy mixer / default DSP code
|
3 |
|
|
===========================================
|
4 |
|
|
|
5 |
|
|
This is based on SB-Live-mixer.txt.
|
6 |
|
|
|
7 |
|
|
The EMU10K2 chips have a DSP part which can be programmed to support
|
8 |
|
|
various ways of sample processing, which is described here.
|
9 |
|
|
(This article does not deal with the overall functionality of the
|
10 |
|
|
EMU10K2 chips. See the manuals section for further details.)
|
11 |
|
|
|
12 |
|
|
The ALSA driver programs this portion of chip by default code
|
13 |
|
|
(can be altered later) which offers the following functionality:
|
14 |
|
|
|
15 |
|
|
|
16 |
|
|
1) Digital mixer controls
|
17 |
|
|
-------------------------
|
18 |
|
|
|
19 |
|
|
These controls are built using the DSP instructions. They offer extended
|
20 |
|
|
functionality. Only the default build-in code in the ALSA driver is described
|
21 |
|
|
here. Note that the controls work as attenuators: the maximum value is the
|
22 |
|
|
neutral position leaving the signal unchanged. Note that if the same destination
|
23 |
|
|
is mentioned in multiple controls, the signal is accumulated and can be wrapped
|
24 |
|
|
(set to maximal or minimal value without checking of overflow).
|
25 |
|
|
|
26 |
|
|
|
27 |
|
|
Explanation of used abbreviations:
|
28 |
|
|
|
29 |
|
|
DAC - digital to analog converter
|
30 |
|
|
ADC - analog to digital converter
|
31 |
|
|
I2S - one-way three wire serial bus for digital sound by Philips Semiconductors
|
32 |
|
|
(this standard is used for connecting standalone DAC and ADC converters)
|
33 |
|
|
LFE - low frequency effects (subwoofer signal)
|
34 |
|
|
AC97 - a chip containing an analog mixer, DAC and ADC converters
|
35 |
|
|
IEC958 - S/PDIF
|
36 |
|
|
FX-bus - the EMU10K2 chip has an effect bus containing 64 accumulators.
|
37 |
|
|
Each of the synthesizer voices can feed its output to these accumulators
|
38 |
|
|
and the DSP microcontroller can operate with the resulting sum.
|
39 |
|
|
|
40 |
|
|
name='PCM Front Playback Volume',index=0
|
41 |
|
|
|
42 |
|
|
This control is used to attenuate samples for left and right front PCM FX-bus
|
43 |
|
|
accumulators. ALSA uses accumulators 8 and 9 for left and right front PCM
|
44 |
|
|
samples for 5.1 playback. The result samples are forwarded to the front DAC PCM
|
45 |
|
|
slots of the Philips DAC.
|
46 |
|
|
|
47 |
|
|
name='PCM Surround Playback Volume',index=0
|
48 |
|
|
|
49 |
|
|
This control is used to attenuate samples for left and right surround PCM FX-bus
|
50 |
|
|
accumulators. ALSA uses accumulators 2 and 3 for left and right surround PCM
|
51 |
|
|
samples for 5.1 playback. The result samples are forwarded to the surround DAC PCM
|
52 |
|
|
slots of the Philips DAC.
|
53 |
|
|
|
54 |
|
|
name='PCM Center Playback Volume',index=0
|
55 |
|
|
|
56 |
|
|
This control is used to attenuate samples for center PCM FX-bus accumulator.
|
57 |
|
|
ALSA uses accumulator 6 for center PCM sample for 5.1 playback. The result sample
|
58 |
|
|
is forwarded to the center DAC PCM slot of the Philips DAC.
|
59 |
|
|
|
60 |
|
|
name='PCM LFE Playback Volume',index=0
|
61 |
|
|
|
62 |
|
|
This control is used to attenuate sample for LFE PCM FX-bus accumulator.
|
63 |
|
|
ALSA uses accumulator 7 for LFE PCM sample for 5.1 playback. The result sample
|
64 |
|
|
is forwarded to the LFE DAC PCM slot of the Philips DAC.
|
65 |
|
|
|
66 |
|
|
name='PCM Playback Volume',index=0
|
67 |
|
|
|
68 |
|
|
This control is used to attenuate samples for left and right PCM FX-bus
|
69 |
|
|
accumulators. ALSA uses accumulators 0 and 1 for left and right PCM samples for
|
70 |
|
|
stereo playback. The result samples are forwarded to the front DAC PCM slots
|
71 |
|
|
of the Philips DAC.
|
72 |
|
|
|
73 |
|
|
name='PCM Capture Volume',index=0
|
74 |
|
|
|
75 |
|
|
This control is used to attenuate samples for left and right PCM FX-bus
|
76 |
|
|
accumulator. ALSA uses accumulators 0 and 1 for left and right PCM.
|
77 |
|
|
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
78 |
|
|
PCM device).
|
79 |
|
|
|
80 |
|
|
name='Music Playback Volume',index=0
|
81 |
|
|
|
82 |
|
|
This control is used to attenuate samples for left and right MIDI FX-bus
|
83 |
|
|
accumulators. ALSA uses accumulators 4 and 5 for left and right MIDI samples.
|
84 |
|
|
The result samples are forwarded to the front DAC PCM slots of the AC97 codec.
|
85 |
|
|
|
86 |
|
|
name='Music Capture Volume',index=0
|
87 |
|
|
|
88 |
|
|
These controls are used to attenuate samples for left and right MIDI FX-bus
|
89 |
|
|
accumulator. ALSA uses accumulators 4 and 5 for left and right PCM.
|
90 |
|
|
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
91 |
|
|
PCM device).
|
92 |
|
|
|
93 |
|
|
name='Mic Playback Volume',index=0
|
94 |
|
|
|
95 |
|
|
This control is used to attenuate samples for left and right Mic input.
|
96 |
|
|
For Mic input is used AC97 codec. The result samples are forwarded to
|
97 |
|
|
the front DAC PCM slots of the Philips DAC. Samples are forwarded to Mic
|
98 |
|
|
capture FIFO (device 1 - 16bit/8KHz mono) too without volume control.
|
99 |
|
|
|
100 |
|
|
name='Mic Capture Volume',index=0
|
101 |
|
|
|
102 |
|
|
This control is used to attenuate samples for left and right Mic input.
|
103 |
|
|
The result is forwarded to the ADC capture FIFO (thus to the standard capture
|
104 |
|
|
PCM device).
|
105 |
|
|
|
106 |
|
|
name='Audigy CD Playback Volume',index=0
|
107 |
|
|
|
108 |
|
|
This control is used to attenuate samples from left and right IEC958 TTL
|
109 |
|
|
digital inputs (usually used by a CDROM drive). The result samples are
|
110 |
|
|
forwarded to the front DAC PCM slots of the Philips DAC.
|
111 |
|
|
|
112 |
|
|
name='Audigy CD Capture Volume',index=0
|
113 |
|
|
|
114 |
|
|
This control is used to attenuate samples from left and right IEC958 TTL
|
115 |
|
|
digital inputs (usually used by a CDROM drive). The result samples are
|
116 |
|
|
forwarded to the ADC capture FIFO (thus to the standard capture PCM device).
|
117 |
|
|
|
118 |
|
|
name='IEC958 Optical Playback Volume',index=0
|
119 |
|
|
|
120 |
|
|
This control is used to attenuate samples from left and right IEC958 optical
|
121 |
|
|
digital input. The result samples are forwarded to the front DAC PCM slots
|
122 |
|
|
of the Philips DAC.
|
123 |
|
|
|
124 |
|
|
name='IEC958 Optical Capture Volume',index=0
|
125 |
|
|
|
126 |
|
|
This control is used to attenuate samples from left and right IEC958 optical
|
127 |
|
|
digital inputs. The result samples are forwarded to the ADC capture FIFO
|
128 |
|
|
(thus to the standard capture PCM device).
|
129 |
|
|
|
130 |
|
|
name='Line2 Playback Volume',index=0
|
131 |
|
|
|
132 |
|
|
This control is used to attenuate samples from left and right I2S ADC
|
133 |
|
|
inputs (on the AudigyDrive). The result samples are forwarded to the front
|
134 |
|
|
DAC PCM slots of the Philips DAC.
|
135 |
|
|
|
136 |
|
|
name='Line2 Capture Volume',index=1
|
137 |
|
|
|
138 |
|
|
This control is used to attenuate samples from left and right I2S ADC
|
139 |
|
|
inputs (on the AudigyDrive). The result samples are forwarded to the ADC
|
140 |
|
|
capture FIFO (thus to the standard capture PCM device).
|
141 |
|
|
|
142 |
|
|
name='Analog Mix Playback Volume',index=0
|
143 |
|
|
|
144 |
|
|
This control is used to attenuate samples from left and right I2S ADC
|
145 |
|
|
inputs from Philips ADC. The result samples are forwarded to the front
|
146 |
|
|
DAC PCM slots of the Philips DAC. This contains mix from analog sources
|
147 |
|
|
like CD, Line In, Aux, ....
|
148 |
|
|
|
149 |
|
|
name='Analog Mix Capture Volume',index=1
|
150 |
|
|
|
151 |
|
|
This control is used to attenuate samples from left and right I2S ADC
|
152 |
|
|
inputs Philips ADC. The result samples are forwarded to the ADC
|
153 |
|
|
capture FIFO (thus to the standard capture PCM device).
|
154 |
|
|
|
155 |
|
|
name='Aux2 Playback Volume',index=0
|
156 |
|
|
|
157 |
|
|
This control is used to attenuate samples from left and right I2S ADC
|
158 |
|
|
inputs (on the AudigyDrive). The result samples are forwarded to the front
|
159 |
|
|
DAC PCM slots of the Philips DAC.
|
160 |
|
|
|
161 |
|
|
name='Aux2 Capture Volume',index=1
|
162 |
|
|
|
163 |
|
|
This control is used to attenuate samples from left and right I2S ADC
|
164 |
|
|
inputs (on the AudigyDrive). The result samples are forwarded to the ADC
|
165 |
|
|
capture FIFO (thus to the standard capture PCM device).
|
166 |
|
|
|
167 |
|
|
name='Front Playback Volume',index=0
|
168 |
|
|
|
169 |
|
|
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
170 |
|
|
This control is used to attenuate samples for left and right front speakers of
|
171 |
|
|
this mix.
|
172 |
|
|
|
173 |
|
|
name='Surround Playback Volume',index=0
|
174 |
|
|
|
175 |
|
|
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
176 |
|
|
This control is used to attenuate samples for left and right surround speakers of
|
177 |
|
|
this mix.
|
178 |
|
|
|
179 |
|
|
name='Center Playback Volume',index=0
|
180 |
|
|
|
181 |
|
|
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
182 |
|
|
This control is used to attenuate sample for center speaker of this mix.
|
183 |
|
|
|
184 |
|
|
name='LFE Playback Volume',index=0
|
185 |
|
|
|
186 |
|
|
All stereo signals are mixed together and mirrored to surround, center and LFE.
|
187 |
|
|
This control is used to attenuate sample for LFE speaker of this mix.
|
188 |
|
|
|
189 |
|
|
name='Tone Control - Switch',index=0
|
190 |
|
|
|
191 |
|
|
This control turns the tone control on or off. The samples for front, rear
|
192 |
|
|
and center / LFE outputs are affected.
|
193 |
|
|
|
194 |
|
|
name='Tone Control - Bass',index=0
|
195 |
|
|
|
196 |
|
|
This control sets the bass intensity. There is no neutral value!!
|
197 |
|
|
When the tone control code is activated, the samples are always modified.
|
198 |
|
|
The closest value to pure signal is 20.
|
199 |
|
|
|
200 |
|
|
name='Tone Control - Treble',index=0
|
201 |
|
|
|
202 |
|
|
This control sets the treble intensity. There is no neutral value!!
|
203 |
|
|
When the tone control code is activated, the samples are always modified.
|
204 |
|
|
The closest value to pure signal is 20.
|
205 |
|
|
|
206 |
|
|
name='Master Playback Volume',index=0
|
207 |
|
|
|
208 |
|
|
This control is used to attenuate samples for front, surround, center and
|
209 |
|
|
LFE outputs.
|
210 |
|
|
|
211 |
|
|
name='IEC958 Optical Raw Playback Switch',index=0
|
212 |
|
|
|
213 |
|
|
If this switch is on, then the samples for the IEC958 (S/PDIF) digital
|
214 |
|
|
output are taken only from the raw FX8010 PCM, otherwise standard front
|
215 |
|
|
PCM samples are taken.
|
216 |
|
|
|
217 |
|
|
|
218 |
|
|
2) PCM stream related controls
|
219 |
|
|
------------------------------
|
220 |
|
|
|
221 |
|
|
name='EMU10K1 PCM Volume',index 0-31
|
222 |
|
|
|
223 |
|
|
Channel volume attenuation in range 0-0xffff. The maximum value (no
|
224 |
|
|
attenuation) is default. The channel mapping for three values is
|
225 |
|
|
as follows:
|
226 |
|
|
|
227 |
|
|
|
228 |
|
|
1 - left, default 0xffff (no attenuation)
|
229 |
|
|
2 - right, default 0xffff (no attenuation)
|
230 |
|
|
|
231 |
|
|
name='EMU10K1 PCM Send Routing',index 0-31
|
232 |
|
|
|
233 |
|
|
This control specifies the destination - FX-bus accumulators. There 24
|
234 |
|
|
values with this mapping:
|
235 |
|
|
|
236 |
|
|
|
237 |
|
|
1 - mono, B destination (FX-bus 0-63), default 1
|
238 |
|
|
2 - mono, C destination (FX-bus 0-63), default 2
|
239 |
|
|
3 - mono, D destination (FX-bus 0-63), default 3
|
240 |
|
|
4 - mono, E destination (FX-bus 0-63), default 0
|
241 |
|
|
5 - mono, F destination (FX-bus 0-63), default 0
|
242 |
|
|
6 - mono, G destination (FX-bus 0-63), default 0
|
243 |
|
|
7 - mono, H destination (FX-bus 0-63), default 0
|
244 |
|
|
8 - left, A destination (FX-bus 0-63), default 0
|
245 |
|
|
9 - left, B destination (FX-bus 0-63), default 1
|
246 |
|
|
10 - left, C destination (FX-bus 0-63), default 2
|
247 |
|
|
11 - left, D destination (FX-bus 0-63), default 3
|
248 |
|
|
12 - left, E destination (FX-bus 0-63), default 0
|
249 |
|
|
13 - left, F destination (FX-bus 0-63), default 0
|
250 |
|
|
14 - left, G destination (FX-bus 0-63), default 0
|
251 |
|
|
15 - left, H destination (FX-bus 0-63), default 0
|
252 |
|
|
16 - right, A destination (FX-bus 0-63), default 0
|
253 |
|
|
17 - right, B destination (FX-bus 0-63), default 1
|
254 |
|
|
18 - right, C destination (FX-bus 0-63), default 2
|
255 |
|
|
19 - right, D destination (FX-bus 0-63), default 3
|
256 |
|
|
20 - right, E destination (FX-bus 0-63), default 0
|
257 |
|
|
21 - right, F destination (FX-bus 0-63), default 0
|
258 |
|
|
22 - right, G destination (FX-bus 0-63), default 0
|
259 |
|
|
23 - right, H destination (FX-bus 0-63), default 0
|
260 |
|
|
|
261 |
|
|
Don't forget that it's illegal to assign a channel to the same FX-bus accumulator
|
262 |
|
|
more than once (it means 0=0 && 1=0 is an invalid combination).
|
263 |
|
|
|
264 |
|
|
name='EMU10K1 PCM Send Volume',index 0-31
|
265 |
|
|
|
266 |
|
|
It specifies the attenuation (amount) for given destination in range 0-255.
|
267 |
|
|
The channel mapping is following:
|
268 |
|
|
|
269 |
|
|
|
270 |
|
|
1 - mono, B destination attn, default 255 (no attenuation)
|
271 |
|
|
2 - mono, C destination attn, default 0 (mute)
|
272 |
|
|
3 - mono, D destination attn, default 0 (mute)
|
273 |
|
|
4 - mono, E destination attn, default 0 (mute)
|
274 |
|
|
5 - mono, F destination attn, default 0 (mute)
|
275 |
|
|
6 - mono, G destination attn, default 0 (mute)
|
276 |
|
|
7 - mono, H destination attn, default 0 (mute)
|
277 |
|
|
8 - left, A destination attn, default 255 (no attenuation)
|
278 |
|
|
9 - left, B destination attn, default 0 (mute)
|
279 |
|
|
10 - left, C destination attn, default 0 (mute)
|
280 |
|
|
11 - left, D destination attn, default 0 (mute)
|
281 |
|
|
12 - left, E destination attn, default 0 (mute)
|
282 |
|
|
13 - left, F destination attn, default 0 (mute)
|
283 |
|
|
14 - left, G destination attn, default 0 (mute)
|
284 |
|
|
15 - left, H destination attn, default 0 (mute)
|
285 |
|
|
16 - right, A destination attn, default 0 (mute)
|
286 |
|
|
17 - right, B destination attn, default 255 (no attenuation)
|
287 |
|
|
18 - right, C destination attn, default 0 (mute)
|
288 |
|
|
19 - right, D destination attn, default 0 (mute)
|
289 |
|
|
20 - right, E destination attn, default 0 (mute)
|
290 |
|
|
21 - right, F destination attn, default 0 (mute)
|
291 |
|
|
22 - right, G destination attn, default 0 (mute)
|
292 |
|
|
23 - right, H destination attn, default 0 (mute)
|
293 |
|
|
|
294 |
|
|
|
295 |
|
|
|
296 |
|
|
4) MANUALS/PATENTS:
|
297 |
|
|
-------------------
|
298 |
|
|
|
299 |
|
|
ftp://opensource.creative.com/pub/doc
|
300 |
|
|
-------------------------------------
|
301 |
|
|
|
302 |
|
|
Files:
|
303 |
|
|
LM4545.pdf AC97 Codec
|
304 |
|
|
|
305 |
|
|
m2049.pdf The EMU10K1 Digital Audio Processor
|
306 |
|
|
|
307 |
|
|
hog63.ps FX8010 - A DSP Chip Architecture for Audio Effects
|
308 |
|
|
|
309 |
|
|
|
310 |
|
|
WIPO Patents
|
311 |
|
|
------------
|
312 |
|
|
Patent numbers:
|
313 |
|
|
WO 9901813 (A1) Audio Effects Processor with multiple asynchronous (Jan. 14, 1999)
|
314 |
|
|
streams
|
315 |
|
|
|
316 |
|
|
WO 9901814 (A1) Processor with Instruction Set for Audio Effects (Jan. 14, 1999)
|
317 |
|
|
|
318 |
|
|
WO 9901953 (A1) Audio Effects Processor having Decoupled Instruction
|
319 |
|
|
Execution and Audio Data Sequencing (Jan. 14, 1999)
|
320 |
|
|
|
321 |
|
|
|
322 |
|
|
US Patents (http://www.uspto.gov/)
|
323 |
|
|
----------------------------------
|
324 |
|
|
|
325 |
|
|
US 5925841 Digital Sampling Instrument employing cache memory (Jul. 20, 1999)
|
326 |
|
|
|
327 |
|
|
US 5928342 Audio Effects Processor integrated on a single chip (Jul. 27, 1999)
|
328 |
|
|
with a multiport memory onto which multiple asynchronous
|
329 |
|
|
digital sound samples can be concurrently loaded
|
330 |
|
|
|
331 |
|
|
US 5930158 Processor with Instruction Set for Audio Effects (Jul. 27, 1999)
|
332 |
|
|
|
333 |
|
|
US 6032235 Memory initialization circuit (Tram) (Feb. 29, 2000)
|
334 |
|
|
|
335 |
|
|
US 6138207 Interpolation looping of audio samples in cache connected to (Oct. 24, 2000)
|
336 |
|
|
system bus with prioritization and modification of bus transfers
|
337 |
|
|
in accordance with loop ends and minimum block sizes
|
338 |
|
|
|
339 |
|
|
US 6151670 Method for conserving memory storage using a (Nov. 21, 2000)
|
340 |
|
|
pool of short term memory registers
|
341 |
|
|
|
342 |
|
|
US 6195715 Interrupt control for multiple programs communicating with (Feb. 27, 2001)
|
343 |
|
|
a common interrupt by associating programs to GP registers,
|
344 |
|
|
defining interrupt register, polling GP registers, and invoking
|
345 |
|
|
callback routine associated with defined interrupt register
|