Monday, May 26, 2008

Brutefir Volume Control

It has been awhile since I updated this blog. Well, there has been some busy time and I am working on a memory player based on Linux. Not easy, but I have heard it and the sound is just amazing. I am just trying to make it easier to run. One of the step I take is to prepare a volume control based on BruteFIR configuration file. It runs via CLI. Here you are

Go to "Go"
Add line

Vol=20 # Set initial volume
echo $Vol > /Vol.txt

Go to "Lircrc"
Add lines

prog = iMON-PAD
button = Vol+
prog = irexec
repeat = 0
config = /usr/Volplus

prog = iMON-PAD
button = Vol-
prog = irexec
repeat = 0
config = /usr/Volmin

Add file "Volplus"

v=`grep [0123456789] /Vol.txt`
tmp=`expr $v - 1`

if [ $tmp -lt 0]; then

lcd "Volume = -$tmp dB"
echo “cfoa 0 0 $tmp;cfoa 1 1 $tmp” nc localhost 3000 > /dev/null
echo $tmp > /Vol.txt

Add file "Volmin"

v=`grep [0123456789] /Vol.txt`
tmp=`expr $v + 1`

if [ $tmp -lt 0]; then

lcd "Volume = -$tmp dB"
echo “cfoa 0 0 $tmp;cfoa 1 1 $tmp” nc localhost 3000 > /dev/null
echo $tmp > /Vol.txt

Inside brutefir loading program add the following

echo " [32;1m(f4 44) by Uli Brueggemann and [0m"

schedtool -R -p 98 -e brutefir.orig -nodefault /audiovero/brutefir/f4corr44

bf_started = $(pidof brutefir.orig) # check for process id number

while [ -z"$bf_started"]; do # if zero then wait in loop
bf_started = $(pidof brutefir.orig) # check for process id number
done # end of while

echo "cfoa 0 0 20;cfoa 1 1 20" nc localhost 3000 > /dev/null

# Enable to stop script by Ctrl-c/Strg-c
sleep 3

This is working very well. Currently I still have the passive preamp connected and I can A/B test

1. Max BruteFir vol + Min passive vol

2. Min BruteFir vol + Max passive vol

I have found that setup 2 is not very good when the attenuation is too much.

Sunday, January 20, 2008

Drivers alignment

We are moving on the drivers alignment again. To make things a bit easier for me, I set up another XO with L Bressels 10th order filter and no parallel setting. In other words, each driver is only responsible for one section of the frequency.
Sub - up too 120Hz
woofer - 120 - 500Hz
mid 500 - 2000Hz
Tweeter - 2000Hz to 22000Hz

Note that these settings are arbitury and for alignment only. There is also a trick and that is drivers are delayed from the other one by 1000 taps. This is to ensure that the individual peaks can be seen later. Once this crossover is setup, it is then used in the colvolver engine and the logsweep is played for the following conditions
Sweep with all drivers
Sweep with no tweter
Sweep with no mid
Sweep with no woofer
Sweet with no sub

The following picture is the frequency and time domain of all the graphs.

I know, very difficult to see. Here is the blow up picture of the nomid and nowoofer
As you can see from the time domain graph, the pulse from each driver are seen clearly. Now we can than measure that exact location for each driver in terms of taps.
Left: 3125, 4010, 5005, 6000
Right: 3123, 4010, 5005, 6000

Now, we need to check the relative delay reference to the sub
Left:0, 885, 1880, 2875
Right:0, 887, 1882, 2887

Now, we need to compensate the 1000tap delay we set at the crossover
Left:0, -115, -120, -125
Right:0, -113, -118, -123

Negative means delay. The above number means the tweeter arrive to the mic first.
The delay is
Left:0, 115, 120, 125
Right:0, 113, 118, 123

Now align the tweeter:
Left:0, 115, 120, 125
Right:2, 115, 120, 125

Now, this can be used in the crossover setting and all the drivers become perfectly aligned. How do I know whether it make sense? lets look at the delay between the sub and the woofer for the left channel 115taps. 1/44.1K x 115taps = 0.0026sec. Sound travels at 300m/s so the delay is about 0.0026 x 300 = 0.782m which is exactly what I got physically!

There is one more thing I need to do - alignment between the left/right speaker. How? "you can generate a logsweep with Acourate: stereo L/R together. If you record it and convolve it with the inverse logsweep then the resulting pulse should have only 1 peak. Otherwise you have different distances."

Will post the results later

Tuesday, January 15, 2008

Crossover with Sub / Woofer 50/50 split

Previous, I get the gain of my woofer to 30% and the gain of my sub to 70% hopping to get better sound and avoid suck out. But as you can see on my previous post, I actually got booming. Today, I changed the crossover to 50/50 split I can hear a more authoritative mid bass and nice very low bass. Basically, the bass is more defined and more tight. The follow graph is the measurement with the new setting

You can see that the lower bass is not as exaggerated and the booming is less. The character of the AT driver becomes more prominent as well. I will settle as this for the time being.

Monday, January 07, 2008

More on Driver linearization

After listening to the Bressels standard filter for a few months, it is time for me to move forward to drivers linearization again with this filter. It took be 2 hours for the measurement and adjustment. During the linearization process, it was noted that the mid is actually quieter than the tweeter by about 6bB. After the linearization, the high is not as forward as before, the mid is clearly and the whole range becomes more balanced. The finer details is alot more easier to detect.

What you can see here is the frequence response of the whole speaker after driver linearization but without any other adjustment measured at the listening position. So, you are looking at the driver response + the room effect. You can see that the mid and high are quite smooth already. This is the part that is least affected by the room. There is a dip at the 200Hz of about 8dB. This is beacuse the woofer is not linearlized. The lower bass is also exaggerated giving a slight booming. All these will be corrected later on with room correction.

Also note that the lower cut off is now about 25-30Hz. Giving pretty good bass.

The above diagram shows the target curve I plan to use. This will be the first test, trying to make the target as flat as possible. Later on, I can make it to any shape I like. I can even exaggerate the mid range for vocals etc.

The next step I need to do is dirvers alignment. In the following graph, you will see the time domain of the driver response.

Now, you can clearly see the 3 spikes which represents the woofer, the mid and the tweeter not aligned properly. The sub reaponse is also hiding inside somewhere. With proper digital alignment, we should be able to get the spikes aligned.

Monday, November 12, 2007

Optimising PC Source

Today, I came across a post about using PC as a source which gives nice and clean sound which may be useful for me in the future.

Hi PC Streamers,
We have a practical solution to optimize PC streaming with Vista. I think XP will work as well. Many thanks to those who provided the references to the many useful tools to make this possible.
Encouraged by Hiroyuki, I got to lower the priorities of the often active processes listed by Process Explorer. This was in addition to raising the Foobar priority to Real Time. With this as last step I was able to observe with the help of the CPU usage history graph from Process Explorer that the second CPU did not have any activities, even when the hard disk drive was chattering and going through disk defragmentation. The sound during defrag was as good as when the computer was using Foobar only.
Now you have it. When you see the activity in the second core (CPU 1)is zero, you can be assured of good sound.
In summary these are the things we need to do to optimize the PC for audio streaming.
1. I did not have to uninstall for disable any applications or processes that came with the computer, which had more than a clean install.
2. Use ASIO to bypass the kernel.
3. Use an external audio device if possible to avoid the electrically noisy environment of the computer.
4. Using Process Explorer set the affinity of Foobar to CPU 1 and its priority to Real Time. If you use WMP, do the same settings for it.
5. Using Process Explorer, list the PC processes in decreasing order of activity. Go through manually and change the affinity of the first 20 or so processes to CPU 0 and their priorities to as low as you want to. My computer did not crash :-)
6. Using the CPU usage history graphs (you will see two or four processors) observe that the usage of CPU 1 is almost always at zero. My machine can go for ten minutes and I still see zero usage, with or without Foobar playing. If you see blips, you need to find the offender and assign it CPU 0 and low priority.
Hiroyuki, did I leave out anything?
The resulting sound is so clean that many will not believe that they are listening to the Red Book CD. Many will probably have withdraw feeling when the clean and clear treble is heard, minus all that bright and unnatural intermodulation products.

Sunday, October 07, 2007

Digital crossover

After trying so many different combination with steep/shallow crossover filters, I begain to conclude that LR filters are no good. At least within the digital crossover world, things are so flexible that I can do a bit more.

I came across a post by Uli about Bessel filter and the step response. Besel filter is a very special filter in that you can have asymmetric slope for the high pass and low pass end. I have selected to use a 2nd order for the high frequency for the mid and 10th order low frequency end for the tweeter.

I have also increase the proportion of the lower end (<60hz)>

The benefit of Bessel filter is that there is no ranging with the step response

The sound is now much faster than the LR without any loss of dynamics and the microdynamics is also excellent. My next step is to move on with linerization and DRC with this filter.

Sub: <60Hz, Bessel attenuated to 70%
Woofer: cross at 200Hz, Bessel attenuated to 30% 18dB right
Mid: cross at 2000Hz, Bessel filter - 18dB left, 12dB right
Tweeter: Bessel filter - 18dB left, 12dB right

Friday, September 21, 2007

Information from the person himself!

Perhaps the best method to find out the crossover frequency and slope is to talk to the designer himself! I sent an email to Mr. Skannings and here is his response

"Yes, you can easily cross the drivers at 3000 Hz - no problem.The 96 dB/Oct filter is really a tough filter. We are used to 6, 12 or 18dB/Oct filters, and have never heard of anyone using 96 dB/Oct filtersbefore. When you use filters with a such high order, there will come absolutely no information from the drivers as soon as they pass the x-overfrequency. It might be, that you need some kind of energy from either tweeter or midrange when using the high order filter and we agree that it might be an idea to move to a less order type. Rising the x-over frequencyto 3000 Hz might also help, as it will give your tweeter better working conditions."

Following his advice and the advice on the diyaudio forum, I tried these settings as a starting point

Tweeter: 3000Hz up
Mid: 200 - 3000Hz
Woofer: 200Hz and below

The results is a much more dynamic mid to midbass. The human voice has got more muscle and more emotions. The high is just as crystal clear. The next thing I will try is to crossover to the W210 sub, probably at 60Hz.