xor eax, eax

Ø main()
Ø fireworkx
Ø amp
Ø gallery
Ø feedbacks
Ø about


flag counter

Tweaking Creative AudioPCI sound card

(Ensoniq ES1370, AK4531)

original - JRC4565 modified - AD8599
Fig.1. Original JRC4565 opamp - Fig.2. Replaced with AD8599

To hear a little cleaner sound from my poor sound card... bravely taking the risk of damaging it... I decided to pull out the card to find whether there is any hope for improvents that can be made with my soldering iron. And as expected.. found a cheap opamp; JRC4565 on board along with Asahi Kasei AK4531 (codec) and Ensoniq ES1370 PCI audio controller. Using a multimeter, confirmed the opamp JRC4565 is exactly in the output path, must be replaced with a good one to hear the DAC better. So replaced it with an AD8599 which is a very low distortion op amp that i've recently 'free sample'ed from Analog Devices.

wire connection
Fig.3. The DAC connection. The soldering was somewhat brutal...
not any standard procedure for SMDs. So not shown here to the general public. :)

After that, going through the datasheet of AK4531.. it is found that the chip also have pins for audio output straight from its 16bit DAC's, bypassing the internal gain, mute, mixer and attenuation stages. ie. less distorted sound.. but no volume control by software and unable to hear other sources like mic, line-in, audiocd..etc. I don't want neither of them... So cut the two tracks carrying 'normal' right and left outputs (pin 27, 28) from the codec to the opamp. soldered two thin wires to the right and left DAC outputs (pin 23, 24). Then solder the other ends of the wires to the cut tracks going to the opamp (not to the lines coming from AK4531). In short, connect the opamp input to the codec's 'DAC output' pins 23 and 24 with wires... and leave the mixer output pins 27 and 28 open. (huhhh... my English adventure)

PCB view1
Fig.4. New opamp and direct DAC output connections.

WARNING: THIS TWEAK WORKS ONLY WITH LINUX ALSA DRIVER. Doing this will make your sound card silent with Windows operating system. This might be because the windows driver using the alternate 18bit stereo DAC inside the codec.

PCB view2
Fig.5. Two 0.47uF polyester coupling capacitors.

The next remaining thing to replace are those two SMD ceramic coupling capacitors in the signal path between AK4531 and the opamp (the same lines which are previously cut and diverted to DAC output pins). I tried bypassing them.. but there is more than 3V DC present at the output. So removed the ceramic caps and place two 0.47uF polyester caps instead. This improves bass and audio quality. Now there is frequencies as low as 5Hz coming out from the card, not audiable but moving the woofer cone back and forth. ie. the low frequency path is free. ceramic caps are the worst choice for audio coupling and they are piezo-electric, (AFAIK) generating noise out off mechanical vibrations coming from cooling fans and such other sources.

And there is a problem... the sound card uses a strange samplerate of 47040Hz to feed it's 16bit dac. There is a 22.5792MHz crystal on board which is usable for both the samplerates... 44.1kHz (22579200/512) and 47040Hz (22579200/480). I don't understand why the non-standard 47040Hz is used.

Anyway, using a good software sample rate converter solved the problem. Sox sample rate conversion gives pretty good results... it produces no considerable distortions.

$ sox -V "louis armstrong - what a wonderful world.mp3" -r 47040 -w -s -t alsa default polyphase

The Results: believe me... there is big difference... the improvement in the audio quality is very much audible... it is a lot cleaner now. You can trust my nice ears.. since i've worked as a sound recordist in a studio for television programs.. as you can figure out.. the most important part in my job was to listen... and those long 3 years in front off studio monitors trained my ears well enough to judging this.

There is an alternate way to get rid of the non-standard samplerate problem, as well. Thats in the ALSA driver for this soundcard:

First, download the latest linux kernel source code from www.kernel.org. Then extract the kernel source somewhere and...

Find the following structure in './sound/pci/ens1370.c'

static struct snd_ratnum es1370_clock = {
	.num = ES_1370_SRCLOCK,
	.den_min = 29, 
	.den_max = 353,
	.den_step = 1,

Set '.den_min = 32', instead of 29. which in turn limits the maximum samplerate to 1411200/32 = 44100. (ES_1370_SRCLOCK = 1411200). ES1370 have an internal programmable clock divider which can be set through the PCLKDIV bits of its control register. So there is no fixed sample rates... and the ALSA driver default went up to 47040Hz..!

Here is the modified version:
static struct snd_ratnum es1370_clock = {
	.num = ES_1370_SRCLOCK,
	.den_min = 32,  /* orig. = 29 */
	.den_max = 353,
	.den_step = 1,

Thats all... save the file and compile and install the kernel as usual. When u boot with the fresh kernel... ur soundcard will be ready for 44.1kHz music..!

To see the current samplerate, do:

$ sox -V file.wav -t alsa default
$ cat /proc/asound/card0/pcm0p/sub0/hw_params

Hence... here is the cleanest sound ever produced by a Creative AudioPCI soundcard..! :)

Bottom Note: All the photos (except the first one) are taken with a cheap Vivitar 3315 point-n-shoot digital camera, through a biconvex lens (f=10cm) attached for macro focusing... :) see more fotos of the same thing and such other things and some irrelevent weird things at http://www.flickr.com/photos/ronybc

Copyright 2007 ronybc's advanced audio amplifier design laboratory located near Indian ocean (RAAADeLIO)

Ø Parallel Resistance Calculator
Ø Voltage Divider Calculator
Ø LM317 Calculator
Ø Volume Control Pot with Parallel Resistor Graph tool
Ø Power Dissipation Across Transistor/MOSFET
Ø Display PPI Calculator
Ø Blogandrum - The Complete Conundrum
Ø The Eight Queens Puzzle
Ø Fireworkx : Linux version
Ø Kunthrantum - very low distortion audio power amplifier
Ø Creative AudioPCI soundcard mods (Ensoniq ES1370, AK4531)
Ø Buffered Flash memory access routines for PIC microcontrollers
Ø Fireworks : Windows version, coded using Win32 ASM
Ø SparcZ - tiny telnet server with remote desktop administration powers