PC audio mixer settings
Anyone know how the audio signal inputs and outputs are typically handled as far
as how the signals are routed and mixed?
It seems that the audio signals that are internally generated in the PC are mixed in
with the line input signals. In other words, anything that I send to the line output jack
is automatically sent to the line input circuitry.
I need to remove this line out signal from being mixed with the line in signal. I found
something called a mixer in the sound settings but turning it off killed the output signal
completely. Is there some standard setting that I should be looking for?
I would expect to find such settings in something like an input mixer or record mixer,
but I can't find any such thing.
The audio is on an Intel motherboard and is running XP. I've seen the same problem
on an HP laptap.
Also it's Realtek AC'97 audio
I found the audio control I needed. It's call a "stereo mixer".
As luck would have it, the laptop apparantly just isn't working right, the controls I needed
were operating like on/off switches rather than level controls. So something's just broken
with the software there.
And as luck continued to have it, my home computer lost it's audio controls somehow.
I reinstalled everything from a ghost backup and now it's working.
(Norton Ghost - great program, by the way. The old 2003 version will run off a 3.5" floppy)
Anyway, just in case anyone else needs to turn that internal audio connection off, you just
need to search around in the audio devices under sound, in the control panel. I imagine it's
called a stereo mixer to differentiate it from the mic input, which is typically monophonic. It
seems that the mic input, line input, and stereo mixer are the common signals used for
recording. Which is probably why they are all on by default.
The software I was trying to use, Visual Analyzer, had buttons to control that, but all it does
is call up the same controls found in the control panel. And mine were missing.
That's not the software analyzer, but a spectrum analyzer.
is it possible that it takes floating point values 0.00-1.00 for its levels?
The various volume levels are typically controlled by writing a value into
registers in the sound chip. In one of those chips, for example, a 5 bit
value is used to set the level to 1 of 32 possible steps. Each step is a
1.5 db change in volume level.
Therefore a simple linear slider control which provides integer steps
can control a level with an exponential response. No floating point would
be necessary in that case. I imagine that's pretty typical.
An application though could provide a slider for selecting floating point values,
for example 0.00 to 100.00%. The Visual Analyzer uses such sliders.
You will have to go through the Windows mixer in order to do anything with the card. I don't think Windows is going to let you poke around in ports on an expansion card in protected mode.
Yes, that would be a job for things like drivers and operating systems. My only point was that the register
requires an integer value and a slider would ony need to provide the corresponding values.
Also, level sliders could be used for setting waveform levels for use within a program, like an audio editor.
Or for scaling a waveform for graphic display, like an oscilloscope. Those level controls often use values
meaningful to the application, like decibels.
No the slider would provide the information in the format required by the driver. Most drivers utilize the Windows audio mixer so as to maintain a common standard and interface for clients. If you change the volume in the Windows audio mixer it will change it on the card b/c the mixer will call out to the driver via an interface and the implementation of said interface is in the audio driver created by the manuf. of the audio chipset. So any operations you perform on the mixer will eventually go through the driver to the card. Any operations not supported by the audio mixer would have to be routed specifically through a certain driver via an API provided by the driver or software that interfaces with the chipset. You will never be able to directly access the hardware on the audio card in protected mode ...or should never be able to if you are a well-behaved Windows program. Just as graphics cards have a HAL so do audio drivers (at least in XP). In Vista and Windows 7 audio acceleration was removed but any company that produces hardware for Windows machines will also provide a driver and an API so that programs with lesser privileges than the drivers can access and use the audio card features.
So if there is no specific API or driver that came with the card then you must use the audio mixer and multimedia APIs within Windows to utilize the audio card. As an example I have a SoundBlaster Audigy 2 card which is 100% incompatible with Windows 7....except that I can use OpenAL to utilize EAX and other effects on the card. All this is possible b/c of Creative's Alchemy which acts as the old hardware acceleration piece that used to sit between clients and the hardware in 95,98, and XP.
Anything you want to do must be done via a driver which adheres to the Windows Device Driver Model. Notice that if there is no specific 3rd party audio driver installed that Windows will install a default Microsoft audio driver that is intended to provide basic audio support for all cards....which means it will not support vendor specific card features like EAX, etc.
I have quite a bit of sound experience within Windows and via DirectMusic, DirectSound and OpenAL. I could give you better direction if I understand what you are trying to do.
How volume is represented in various APIs differs greatly. In OpenAL you can set the listener volume from 0.0f to > 1.0f. Values greater than 1.0f are treated differently depending on the underlying sound driver. Listeners in OpenAL will affect the entire system which usually means that under the hood it is altering the master volume in the Windows audio mixer. This can be verified by writing code that raises and lowers this volume and then checking the master volume in the mixer. OpenAL also allows clients to alter the sound source volume which is a software implemented volume feature. The sum of all source volumes will never exceed the master volume. So if the master volume is maxed at half total volume then the source volumes at max will never be louder than half of the master volume.
However this is how OpenAL treats volume. The Windows mixer is quite different in its implementation and ultimately the final result will be determined by the audio driver. Windows has a full suite of audio features that can be utilized via winmm.lib but keep in mind that these are not hardware accelerated within Vista and Windows 7.
Back in the old DOS days setting the volume was akin to what you are referring to and required setting a value in a register at some offfset from the audio card base port address which was usually 220h. You also had to mess around with the DSP and DMA etc, etc. Those days are long gone and trying to do any of that from a Windows program will result in program termination or nothing at all (Vista and 7) and at worst a blue screen (98, XP). Windows will not let you muck around with audio card ports, ISR's, DSPs or DMA directly.
Thanks for the information. It had seemed to me the level controls that were available in the operating systems
were based on the sound card (or sound chip) and varied with the sound card.
Are the controls available through the Windows control panel the same as what you refer to as the Windows audio mixer?