In Reply to: RE: Linux Build? posted by SBGK on March 3, 2013 at 12:25:23:
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:
Follow Ups
- RE: Linux Build? - SBGK 10:47:53 03/07/13 (30)
- RE: Linux Build? - SBGK 05:54:30 03/10/13 (29)
- RE: Linux Build? - SBGK 17:28:29 03/10/13 (28)
- RE: Linux Build? - SBGK 16:33:49 03/11/13 (27)
- RE: Linux Build? - SBGK 16:37:56 03/11/13 (26)
- RE: Linux Build? - SBGK 14:52:44 03/13/13 (25)
- RE: Linux Build? - SBGK 16:13:00 03/14/13 (24)
- RE: Linux Build? - SBGK 05:25:06 03/24/13 (23)
- RE: Linux Build? - SBGK 05:37:15 03/24/13 (22)
- Repost - jrling 10:56:32 03/24/13 (21)
- RE: Repost - SBGK 09:41:26 03/26/13 (19)
- RE: Repost - SBGK 11:03:40 03/26/13 (18)
- RE: Repost - SBGK 13:20:37 03/26/13 (17)
- RE: Repost - SBGK 00:15:21 03/28/13 (16)
- RE: Repost - jupabe 06:04:25 03/28/13 (15)
- RE: Repost - SBGK 06:29:24 03/30/13 (14)
- RE: Repost - jupabe 12:07:28 03/30/13 (13)
- RE: Repost - SBGK 23:01:20 04/01/13 (11)
- MQn v 14 / Flac play - SBGK 13:25:18 04/07/13 (10)
- RE: MQn v 14 / Flac play - SBGK 15:01:49 04/10/13 (9)
- RE: MQn v 14 / Flac play - SBGK 17:02:32 04/17/13 (8)
- RE: MQn v 14 / Flac play - SBGK 13:58:13 04/22/13 (7)
- RE: MQn v 14 / Flac play - SBGK 12:19:27 04/23/13 (6)
- MQn v 47 - SBGK 13:05:41 05/07/13 (5)
- RE: MQn v 47 - SBGK 13:35:05 05/21/13 (4)
- RE: MQn v 47 - SBGK 22:22:05 05/26/13 (3)
- RE: MQn v 79 - SBGK 12:13:39 05/28/13 (2)
- RE: MQn v 79 - jupabe 23:55:00 05/29/13 (1)
- RE: MQn v 80 - SBGK 15:14:03 05/30/13 (0)
- RE: Repost - SBGK 12:43:30 03/30/13 (0)
- RE: Repost - SBGK 16:10:11 03/25/13 (0)