DSP and the Single-Driver Speaker

Status
Not open for further replies.
There is a huge difference in the sound quality you get from Direct Sound (DS) and WASAPI, and you definitely want WASAPI. It is like a direct connection from the file to your DAC. Because it is direct connection, everything needs to match up, i.e, the sampling rate of your file and the input accepted by the DAC. You can't play a 96k file if your USB DAC accepts only up to 44.1, and most USB DAC chips do only that. Hint: Don't believe what your DAC is capable of (24/192), check what your USB receiver chip on the DAC is capable of.

If you are using DS, it will do all the sample rate conversions for you so that no matter what file you play, your DAC can read it. This, of course results in terrible sound.

Bit perfect is worth the hassle. Use the WASAPI plugin and select it under the output device.

This is a superb resource for all things USB DAC: The Well-Tempered Computer

There's tons of info on that site.
 
There is a huge difference in the sound quality you get from Direct Sound (DS) and WASAPI, and you definitely want WASAPI.

Are you sure? Reference? My research, mainly AA computers and Foobar forum strongly suggests that DS does not resample if the source bit rate/depth matches the receiver. You are correct about the XP mixer, but DS as suppied in Vista and upgraded in 7 is entirely different. I'm not saying that you are wrong, but it is contrary to what I have read.

You can't play a 96k file if your USB DAC accepts only up to 44.1, and most USB DAC chips do only that. Hint: Don't believe what your DAC is capable of (24/192), check what your USB receiver chip on the DAC is capable of.

True, but lately 24/96 USB DAC's are readily available cheap. See this one.

If you are using DS, it will do all the sample rate conversions for you so that no matter what file you play, your DAC can read it. This, of course results in terrible sound.

Again, are you sure? As long as you have exclusive mode enabled, only one program will have access to DS, and then DS will only resample if there is a mismatch between source and receiver.

Bit perfect is worth the hassle. Use the WASAPI plugin and select it under the output device.

This is a point of philosophy that borders on religion. On top of that it is off thread. The original poster (me) stated that DSP would be used. Automatically, bit-perfect is not possible, because I intend to play with the bit stream anyway. IIRC Foobar2000 (and most any other digital processor) first converts to floating point, does its magic and then converts to the required bit rate/depth. There is no way the output can be bit-perfect. Even using WASAPI, the digital>floating point>digital conversion has to take place in the player. WASAPI will guarantee that the output of the player>DAC is bit-perfect, but who cares? (I will not address bit-perfect again. It is off topic.)

This is a superb resource for all things USB DAC: The Well-Tempered Computer

There's tons of info on that site.

I did, and there is. I bored down into the Microsoft site. Without spending the next week reading, I am still not convinced that I am right or wrong.

Bob
 
Bob,

Even leaving the bit perfect debate out of it, I think the concensus is that WASAPI is a better way to go on Vista/7. I have heard many say that exclusive mode is equal, but I am not sure if it bypasses the Windows mixer. I have also read in multiple places that the Windows mixer will resample everything to 48khz internally, regardless of source and destination sample rates. Needless resampling, especially multiple stages, is generally discouraged (but again, this is a matter of debate).

Not to argue the point (as I agree it is off-topic) but I mentioned "bit perfect" in my original response and I was incorrect. The fact that I am using a DSP EQ throws bit perfect right out the window. I also agree with you that this isn't the end of the world.

Regarding resampling, I would rather have complete control (and choice of resamplers) by using DSP resampling. I think the only way to have complete control of resampling is to do whatever you can to bypass the Windows mixer, whether it be via WASAPI or ASIO, or by not using Windows at all.
 
This will be my last on the subject. I am getting beyond my expertise, and we are starting to talk preference. I have my preference and you have yours and that is as it should be. But,

....I have also read in multiple places that the Windows mixer will resample everything to 48khz internally, regardless of source and destination sample rates.

I know for sure that this is wrong. My DAC reports back through its control panel exactly what bit rate/depth it is receiving. When I feed it 24/96, it reports 24/96. As long as it is in exclusive mode, DS passes what it receives, provided there is no mismatch. If there is a mismatch, it will resample to what the DAC is set for.

Bob
 
As long as it is in exclusive mode, DS passes what it receives, provided there is no mismatch. If there is a mismatch, it will resample to what the DAC is set for.

Bob

I just checked and this is true in the case of Windows 7 (& Vista), but not true in the case of Windows XP (or earlier) because they do not have "exclusive mode".

Either way, I think we are on the same page re: DSP EQ + fullrange. I think it is an excellent combination and I am glad that you posted your feelings on it. I thought I was up to something "unique" that most audiophiles would balk at, so I am glad to know I am not crazy and that there are others who can hear the fantastic results that this type of setup can offer.
 
I'm intrigued by Bob saying he sets EQ to match the driver graph. I have no idea how to do that effectively.

There are various ways to accomplish this. One approach is to simply observe the frequency response curve and look for the peaks and valleys and then adjust the particular EQ frequencies in the opposite direction to compensate for those peaks and valleys. If there is a +3 dB spike at 200hz, then pull the 200hz slider to -3dB, for example. The more EQ bands available, the closer you can fine-tune. This will only get you part of the way there, because it doesn't account for how the speakers actually sound in the enclosures and in your room. For that, you need to use test tones and an SPL meter, or some other such form of analysis (or just your ears). I'll explain my full method a bit later as I am in a rush.
 
Hi Bob, thanks for the reply.

I downloaded the Graphic EQ as per your recommendation and have to agree, it's much better than the default one on Foobar. I've been playing with it, getting my speakers sounding right, and I have to say my system's much more neutral now, so I'm listening to music that used to sound unbearable.

Cheers,
Chris
 
REF: Post #146

To include room interactions, you need to capture an FR with a mic at the listening position. Then proceed accordingly.

Bob

My approach was a bit different. I used a Linux command-line utility to generate 18 separate test tone .wav files at the 18 frequencies of my EQ. I then placed an SPL meter at the listening position and adjusted the volume of my system so that a 1khz test tone registered 70dB on the SPL meter. I then worked through all 18 test tones, using the EQ sliders corresponding to each tone to adjust the level of each test tone to register as close to 70dB as possible at the same listening position. Once I had the EQ "shape" I needed, I "zeroed" the EQ so that no frequency has a +dB setting. I find that "negative gain" EQing results in better sound. The response curve at the listening position after this process is not "perfectly flat", I am sure, but it is certainly much closer to flat than the driver's natural response curve. I saved this as a "baseline" EQ setting and then created some modified EQ settings to enhance bass or treble, or both, etc.
 
Last edited:
According to Microsoft exclusive mode is not a requirement to avoid SRC in kMixer, even in XP, explanation HERE...

From the cited reference: "When the SysAudio system driver initializes the KMixer driver for an audio device, it assigns a sample rate corresponding to the higher of 44.1 kHz and the highest rate available on the audio device."

So, if your audio device is capable of >44.1kHz (i.e. 48kHz and up) then that rate is chosen as the input rate for the first audio stream (which is the windows sound system). When connecting additional audio streams (i.e. from your music application), if the "new incoming rate is lower than the current maximum input rate. --> Do SRC to the current output rate and mix."
In other words, if the additional audio stream has a rate of let's say 44.1kHz, it is SRCed up to the original chosen input rate (48kHz or greater).

Following from this, since nearly every sound card, DAC, etc. manufuctured in the recent decade (perhaps much longer) is capable of at least 48kHz and the *vast* majority of consumer audio has a rate of 44.1kHz, generally speaking the audio stream will be needlessly SRCed in Windows XP. It will not be SRCed if the maximum input rate of the device matches the rate of the stream. This is rare.

"Exclusive mode" overcomes this situation by giving the audio application exclusive access to the audio device, which makes the audio application the "first" (only) audio stream. In other words, unless exclusive mode is used, the audio stream from your application is treated as an "additional stream".

ASIO (& ASIO4All) gets around this by taking complete control of the audio device and providing exclusive access to it. The reason why this is necessary is because Windows XP and earlier do not provide "exclusive mode" access. If your interpretation of the Microsoft info was correct, there would be no need for ASIO.

I have checked this on my own Windows XP system extensively using SPDIF out to a receiver, which reports the input rate. If I play back audio from Foobar2k using DS/Kmixer, the input rate displayed on the receiver is invariably 48kHz despite that fact that the audio files are 44.1kHz.
 
Last edited:
You kinda skipped over this part:

* When a client requests connection of an audio stream to a device, KMixer queries the device to determine whether it supports the incoming rate. If the device supports the incoming rate, KMixer passes the incoming stream to the device without SRC. Otherwise, KMixer maintains the current output rate, and does the following:
o If the device supports the current output rate, KMixer uses SRC to convert the input rate to the current output rate.
o If the device does not support the current output rate, KMixer maintains the current rate and fails the client's request to connect the audio stream to the device.

Connecting Additional Audio Streams

Following connection of the first input stream, KMixer applies a different policy to the creation of connections by clients to any additional input streams.

I agree that exclusive mode prevents additional streams from mixing with the first stream and in doing so prevents a stream that is a different rate triggering SRC.
 
Last edited:
You kinda skipped over this part:

* When a client requests connection of an audio stream to a device, KMixer queries the device to determine whether it supports the incoming rate. If the device supports the incoming rate, KMixer passes the incoming stream to the device without SRC. Otherwise, KMixer maintains the current output rate, and does the following:
o If the device supports the current output rate, KMixer uses SRC to convert the input rate to the current output rate.
o If the device does not support the current output rate, KMixer maintains the current rate and fails the client's request to connect the audio stream to the device.

Connecting Additional Audio Streams

Following connection of the first input stream, KMixer applies a different policy to the creation of connections by clients to any additional input streams.

I agree that exclusive mode prevents additional streams from mixing with the first stream and in doing so prevents a stream that is a different rate triggering SRC.

I did not skip over that. All of that is included in the section "Connecting the First Audio Stream". The first audio stream in Windows is the windows sound system itself.

Subsequent streams (such as from your music application) are covered under the "Connecting Additional Audio Streams" policy.

If this is not the case, then why does DS/kmixer consistently send 48kHz to my receiver despite the source rate of 44.1kHz, while ASIO4All can send 44.1kHz without issue?
 
You know, it is not that hard to try WASAPI or ASIO4all. At least for me, the difference is night and day. And I'm not talking about XP, talking about Win7. Whatever the technical documentation says, the real test is in how it sounds (it is not uncommon for technical documentation to have errors). Whenever it is piped through DS, exclusive mode or not, it sounds way worse than with WASAPI.
 
I did not skip over that. All of that is included in the section "Connecting the First Audio Stream". The first audio stream in Windows is the windows sound system itself.

Do you have a reference for this?
What if you have Windows sounds turned off?


If this is not the case, then why does DS/kmixer consistently send 48kHz to my receiver despite the source rate of 44.1kHz, while ASIO4All can send 44.1kHz without issue?

Possibly driver related as touched on HERE...

But I do have a similar question, if your card supports 96khz or 192khz what would you expect the output to be when sourced with 44.1khz using DS?
 
I have checked this on my own Windows XP system extensively using SPDIF out to a receiver, which reports the input rate. If I play back audio from Foobar2k using DS/Kmixer, the input rate displayed on the receiver is invariably 48kHz despite that fact that the audio files are 44.1kHz.

Interesting because I run JRiver Media and it's set to no resample. Output is via Direct Sound. I see the sample rate out of the card switch from 44.1 to 48KHz following the sample rate of file played, no problem. To get 96Khz out I have to change my soundcard driver settings, unfortunately. May be able to check that with another soundcard.
 
Status
Not open for further replies.