In Reply to: A revolution in audio rendering posted by SBGK on January 29, 2013 at 15:42:42:
continue to optimise and get improvements in sound, one thing I have found is that as the loop is optimal the reliance on low latency is reduced, in fact sounds much worse at low values, so can now use a period of 0.5s
found that best vs2010 optimisation settings were for speed.
playing wav files from a ramdisk gave best sound
then moved on to memory play, initially SQ was worse.
found that a function called memcpy was the culprit, most memory players use memcpy and this is one of the reasons why memory play sounds worse ie digital sounding. Fortunately there is an optimised version of memcpy from http://www.agner.org/optimize/, using this version removes the hard edge produced by memcpy. the other thing I did was to close the file after reading into the buffer.
also most players use malloc to get memory while new is the c++ method and sounds better.
updated exe below, sounds fantastic I use it all the time now, doesn't have the processed sound of JPlay and is the best player I have heard on my system.
https://rapidshare.com/#myrs_filemanager/file/3363
optimised loop below.
BYTE *sound_buffer = new BYTE [sizeof(BYTE) * nBytesInFile];
hr = mmioRead(hFile, (HPSTR)sound_buffer, nBytesInFile);
mmioClose(hFile, 0);
//UINT32 nByteCnt = nBytesInFile - nBytesThisPass*2;
//while (nBytesToSkip < nByteCnt)
//while (--nBuffersPlayed)
do
{
WaitForSingleObject(hNeedDataEvent, INFINITE);
hr = pAudioRenderClient->ReleaseBuffer(nFramesInBuffer, 0);
hr = pAudioRenderClient->GetBuffer(nFramesInBuffer, &pData);
A_memcpy (pData, sound_buffer + nBytesToSkip, nBytesThisPass);
nBytesToSkip += nBytesThisPass;
}
while (--nBuffersPlayed);
//while (nBytesToSkip < nByteCnt);
//while (nBuffersPlayed > 0);
// render loop
WaitForSingleObject(hNeedDataEvent, INFINITE);
//hr = mmioRead(hFile, (HPSTR)pData, nBytesThisPass);
hr = pAudioRenderClient->ReleaseBuffer(nFramesInBuffer, 0);
WaitForSingleObject(hNeedDataEvent, INFINITE);
hr = pAudioRenderClient->GetBuffer(nFramesInBuffer, &pData);
nFramesThisPass = nFramesInFile - nBuffersinFile*nFramesInBuffer;
nBytesThisPass = nFramesThisPass * pWfx->nBlockAlign;
A_memcpy (pData, sound_buffer + nBytesToSkip, nBytesThisPass);
if (nFramesThisPass < nFramesInBuffer) {
UINT32 nBytesToZero = (nFramesInBuffer * pWfx->nBlockAlign) - nBytesThisPass;
ZeroMemory(pData + nBytesThisPass, nBytesToZero);
}
http://mqnplayer.blogspot.co.uk/
This post is made possible by the generous support of people like you and our sponsors:
Follow Ups
- RE: A revolution in audio rendering - SBGK 00:31:47 02/08/13 (68)
- RE: A revolution in audio rendering - Tony Lauck 05:34:57 02/08/13 (67)
- RE: A revolution in audio rendering - SBGK 12:04:50 02/14/13 (3)
- RE: A revolution in audio rendering - Tony Lauck 12:23:37 02/14/13 (2)
- RE: A revolution in audio rendering - SBGK 10:08:19 02/15/13 (1)
- RE: A revolution in audio rendering - phofman 11:24:12 02/17/13 (0)
- RE: A revolution in audio rendering - jrling 03:47:36 02/09/13 (0)
- RE: A revolution in audio rendering - jrling 03:40:25 02/09/13 (58)
- RE: A revolution in audio rendering - SBGK 13:42:35 02/11/13 (57)
- RE: A revolution in audio rendering - jrling 14:11:55 02/11/13 (56)
- RE: A revolution in audio rendering - SBGK 16:12:40 02/11/13 (55)
- RE: A revolution in audio rendering - SBGK 16:15:16 02/11/13 (54)
- RE: A revolution in audio rendering - SBGK 09:42:35 02/12/13 (53)
- RE: A revolution in audio rendering - jrling 11:40:45 02/12/13 (52)
- RE: A revolution in audio rendering - SBGK 14:45:16 02/12/13 (51)
- RE: A revolution in audio rendering - jrling 14:26:37 02/14/13 (50)
- RE: A revolution in audio rendering - SBGK 09:56:41 02/15/13 (49)
- .NET v.4 - jrling 12:40:10 02/17/13 (48)
- RE: .NET v.4 - SBGK 13:02:41 02/17/13 (47)
- Linux Build? - jrling 14:08:43 02/17/13 (45)
- RE: Linux Build? - SBGK 15:19:46 02/17/13 (44)
- RE: Linux Build? - jrling 12:46:58 02/18/13 (43)
- RE: Linux Build? - SBGK 13:41:01 02/18/13 (42)
- RE: Linux Build? - SBGK 13:05:20 02/21/13 (41)
- RE: Linux Build? - SBGK 12:25:23 03/03/13 (40)
- 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)
- RE: Linux Build? - jupabe 02:59:45 03/04/13 (8)
- RE: Linux Build? - SBGK 13:16:39 03/04/13 (7)
- RE: Linux Build? - jupabe 13:59:00 03/04/13 (6)
- RE: Linux Build? - SBGK 14:46:51 03/04/13 (4)
- RE: Linux Build? - SBGK 15:04:44 03/04/13 (3)
- RE: Linux Build? - jupabe 23:19:08 03/04/13 (2)
- RE: Linux Build? - SBGK 00:24:41 03/05/13 (1)
- RE: Linux Build? - jupabe 06:40:43 03/05/13 (0)
- RE: Linux Build? - SBGK 14:22:01 03/04/13 (0)
- RE: .NET v.4 - jrling 13:59:29 02/17/13 (0)
- RE: A revolution in audio rendering - jrling 14:39:21 02/08/13 (2)
- RE: A revolution in audio rendering - bushpilot 17:31:07 02/17/13 (1)
- RE: A revolution in audio rendering - jrling 12:43:34 02/18/13 (0)