Home Computer Audio Asylum

Music servers and other computer based digital audio technologies.

RE: Linux Build?

Small change that improves the balance and stereo imaging.

Change was to change the page protection on the buffer after it was loaded to read only, presumably means the system doesn't need to check for write access when accessing the buffer.

It really is the most entertaining music player I have heard, it allows one to get totally involved in the music.The dynamics, transients, depth of stage, lack of digital harshness, timing, excellent bass and subtlety of the music have to be heard to be believed. I guarantee you will not have heard anything like it. It really is a massive step up over other players out there (and I've tried 10+ of them), which it should be because it has been built from the ground up with special regard to the sound quality.

What has surprised me is just how much of an improvement it is over other players which sound harsh and 2d in comparison. I am now convinced that a lot of digital sound that people hear is produced by the player software itself, when you strip everything out you get the true sound.

To recap, here are the innovations I discovered which affected the sound.

1. preload the buffer in the render loop so that the data can be released immediately after the load buffer event is fired.
2. use fixed values in the render loop
3. use goto for the render loop
4. use optimised memcpy to copy data to the device buffer in the render loop
5. don't check for fileend, just let it read past the end and throw an exception.
6. no result checking in the render loop, just load the buffer, release the buffer and copy to the device.
7. use virtualalloc to get allocate the buffer instead of malloc so that full pages are allocated.
8. align the device period to the system memory page size 4096 bytes for x86 machines ie load whole memory pages into the device buffer.
9. change the buffer page protection to readonly after loading
10. gapless by appending wav data to the buffer rather than merging etc
11. play in 1 thread
12. single processor compilation
13. optimisations - inline function expansion, intrinsic functions, favor fast code, omit frame pointers, don't enable fiber safe, whole program optimisations, no string pooling, no buffer security check, enable function level linking, MT runtime library, no C++ exceptions, favor intel 64, opt ref and opt icf, target machine x64, embedded manifest.
14. no user interaction apart from start and shutdown.

http://mqnplayer.blogspot.co.uk/


This post is made possible by the generous support of people like you and our sponsors:
  Schiit Audio  


Follow Ups Full Thread
Follow Ups

FAQ

Post a Message!

Forgot Password?
Moniker (Username):
Password (Optional):
  Remember my Moniker & Password  (What's this?)    Eat Me
E-Mail (Optional):
Subject:
Message:   (Posts are subject to Content Rules)
Optional Link URL:
Optional Link Title:
Optional Image URL:
Upload Image:
E-mail Replies:  Automagically notify you when someone responds.