Posted this in another thread - thought it might be good here too:
Just a little tutorial:
Since Vista SP1, Windows has two primary audio interfaces, DirectSound and Wasapi (Windows Audio Session Application Programming Interface). The latter was a replacement for XP's Kernal Streaming mode.
DirectSound acts as a program-friendly middle layer between the program and the audio driver, which in turn speaks to the audio hardware. With DS, Windows controls the sample rate, channel layout and other details of the audio stream. Every program using sound passes it's data to DS, which then resamples as required so it can mix audio streams from any program together with system sounds.
The advantages are that programs don't need resampling code or other complexities, and any program can play sounds at the same time as others, or the same time as system sounds, because they are all mixed to one format.
The disadvantages are that other programs can play at the same time, and that a program's output gets mixed to whatever the system's settings are. This means the program cannnot control the sampling rate, channel count, format, etc. Even more important for this thread is that you cannot pass through encoded formats, as DS will not decode them and it would otherwise bit-mangle them, and there is a loss of sonic quality involved in the mixing and resampling.
Partly to allow for cleaner, uncompromised or encoded audio, and for low-latency requirements like mixing and recording, MS re-vamped their Kernal Streaming mode from XP and came up with WASAPI.
WASAPI itself has two modes, shared and exclusive. Shared mode is in many ways similar to DS, so I won't cover it here.
WASAPI exclusive mode bypasses the mixing/resampling layers of DS, and allows the application to negotiate directly with the audio driver what format it wishes to present the data in. This often involves some back-and-forth depending on the format specified and the device's capabilities. Once a format is agreed upon, the application decides how it will present the data stream.
The normal manner is in push mode - a buffer is created which the audio device draws from, and the application pushes as much data in as it can to keep that buffer full. To do this it must constantly monitor the levels in the buffer, with short "sleeps" in between to allow other threads to run.
WASAPI, and most modern sound devices, also support a "pull" or "event-driven" mode. In this mode two buffers are used. The application gives the audio driver a call-back address or function, fills one buffer and starts playback, then goes off to do other processing. It can forget about the data stream for a while. Whenever one of the two buffers is empty, the audio driver "calls you back", and gives you the address of the empty buffer. You fill this and go your way again. Between the two buffers there is a ping-pong action: one is in use and draining, the other is full and ready. As soon as the first is emptied the buffers are switched, and you are called upon to fill the empty one. So audio data is being "pulled" from the application by the audio driver, as opposed to "pushed" by the application.
WASAPI data is passed-through as-is, which is why you must negotiate capabilities with the audio driver (i.e. it must be compatible with the format you want to send it as there is no DS between to convert it), and why encoded formats like DTS can reach the receiver unchanged for decoding there.
Because WASAPI performs no mixing or resampling, it is best used in the exclusive mode, and as a result the application gets the exclusive rights to the audio buffers, to the exclusion of all other sounds or players. WASAPI shared mode does allow this, but that's not a common mode and not what we want for an HTPC. I myself have a dislike of Window's cutesy system sounds happening at 110db
Hope some of you found today's primer of use. Please pick up a scorecard from the desk and drop it in the big round "collection box" on your way out
Cheers,
Damian
[WINDOWS][PATCH]Bitstream output of HD audio formats
DDDamian
Team-XBMC Developer Joined: Sep 2011 Reputation: 252 Location: Canada |
2012-04-17 02:22
Post: #1251
System: XBMC HTPC with HDMI WASAPI & AudioEngine - Denon AVR-3808CI - Denon DVD-5900 Universal Player - Denon DCM-27 CD-Changer - Sony BDP-S580 Blu-Ray - X-Box 360 - Android tablet wireless remote - 7.1 Streem/Axiom/Velodyne Surround System If I have been able to help feel free to add to my reputation +/- below - thanks!
(This post was last modified: 2012-04-17 02:50 by DDDamian.)
|
| find |
bluray
Posting Freak Joined: May 2011 Reputation: 139 |
2012-04-17 02:57
Post: #1252
(2012-04-17 02:01)steeve23 Wrote: So is it working for me, or is an illusion (no sarcasm intended), will directsound work ok? I assumed as the amp has the correct pretty pretty lights, I was good?If AVR displayed it correctly, you're good to go..... >Alienware X51- do it all HTPC >Simplify XBMC configurations >HOW-TO Bitstreaming using XBMC I refused to watch movie without bitstreaming HD audio! |
| find |
voip-ninja
Member+ Joined: Jan 2010 Reputation: 14 |
2012-04-17 06:06
Post: #1253
Thanks Damian that is extremely informative.
|
| find |
DDDamian
Team-XBMC Developer Joined: Sep 2011 Reputation: 252 Location: Canada |
2012-04-17 07:19
Post: #1254
cheers voip-ninja - it's a confusing bit of jargon for many
System: XBMC HTPC with HDMI WASAPI & AudioEngine - Denon AVR-3808CI - Denon DVD-5900 Universal Player - Denon DCM-27 CD-Changer - Sony BDP-S580 Blu-Ray - X-Box 360 - Android tablet wireless remote - 7.1 Streem/Axiom/Velodyne Surround System If I have been able to help feel free to add to my reputation +/- below - thanks! |
| find |
Maxoo
Fan Joined: Mar 2010 Reputation: 11 Location: Paris, France |
2012-04-17 16:41
Post: #1255
Didn't know half of that, thanks a lot for this explanation/clarification !
|
| find |
steeve23
Member Posts: 67 Joined: Apr 2011 Reputation: 0 |
2012-04-17 18:48
Post: #1256
(2012-04-17 02:57)bluray Wrote:(2012-04-17 02:01)steeve23 Wrote: So is it working for me, or is an illusion (no sarcasm intended), will directsound work ok? I assumed as the amp has the correct pretty pretty lights, I was good?If AVR displayed it correctly, you're good to go..... Thanks, I had hoped it was working right, but sometimes you're never sure ![]() Steve |
| find |
DanielaE
Team-XBMC Member Joined: Dec 2011 Reputation: 30 Location: Germany |
2012-04-17 19:48
Post: #1257
Hi folks,
with spare time on short supply, it took me much longer than anticipated to release a new build. This time with the following changes:
With audio passthrough enabled I strongly recommend to choose these general settings:
Download link: XBMC-11.0+HD-audio full installer ciao, Dani AMD Fusion E-350/Win 8/custom XBMC, Yamaha RX-V1900, Pioneer DV-LX50, custom speakers
(This post was last modified: 2012-04-17 20:11 by DanielaE.)
|
| find |
Dj Freddy D
Junior Member Joined: Jun 2011 Reputation: 0 |
2012-04-17 20:05
Post: #1258
Thank you - I will install this in all my htpc's
|
| find |
loekf
Junior Member Joined: Apr 2012 Reputation: 0 Location: Netherlands |
2012-04-17 21:31
Post: #1259
Big thank you. Works great !!
HTPC: MS-Tech MC-1200 | Asus F1A75-M | AMD A6 3650 | OCZ Agility3 120GB | Corsair Vengeance 2x4GB DDR3| LiteOn iHOS104 BDR | Win7 x64 (Catalyst 12.4) | XBMC 12.0-ALPHA2 Git:20120512-694a759 Home AV: Philips 37PFL5603 | UPC Mediabox | Philips BDP7600/12 | Onkyo TX-NR609 | Sony PS3 Slim | Logitech Harmony One | Sonos audio | Apple TV | 5.1 speakers (TMA, Phonar) |
| find |
minimoe
Senior Member Joined: Feb 2011 Reputation: 3 |
2012-04-18 10:09
Post: #1260
Thanks Daniela, all problems solved!
|
| find |


Search
Help