Thursday, 19 September 2013

MQn & JLP Player T & Cs and change log

If you have enjoyed using MQn then please consider donating to Unicef UK who help children throughout the world

Creative Commons Licence
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.

Send any queries to and I'll try and answer them

By downloading MQn and it's related files you are accepting that all risks and potential costs and damages are to be borne by the person downloading the files.

Except when otherwise stated in writing the copyright holders and/or other parties provide the program 'as is' without warranty of any kind, expressed or implied, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose.

MQn latest version

JLP Player latest version

JLP thread on Computer Audiophile

instructions by 2channelaudio

how to install squeezelite as a service

squeezeserver can also be made to run as a service by selecting run at system start on the control panel, need to change the properties of squeezesvc.exe to run as admin in the compatability tab, also set it to run in reduced color mode and run in 640x480. Can also set these for squeezesvr.exe.


squeezelite v31 - more render loop optimisation


squeezelite v30 - increase time before play starts, might need to increase the -b x:y setting, I use -b 1000:2000000


squeezelite v29b - pause is disabled, compare with v29 to see effect of having extra check in render loop.

squeezelite v29 - malloc for silence buffer removed, such a small change, but quite a big impact.


not sure making pa a static library worked that well, so have uploaded squeezelite-win.exe v28 and portaudio_x64.dll v21 - note requires portaudio_x64.dll to be in the same directory as squeezelite-win.exe.


had latency set to 1, but MQn operates near 10ms for 16/44 ie 448 samples. Having JLP at 10 ms seems to make it more dynnamic, have read in several places that the kernel tries to use 10ms buffers, so maybe it's wrong to use lower latency sizes.

uploaded v27, less forward than v26 plus more stuff removed from portaudio for improved clarity

uploaded squeezelite-win.exe v26 - portaudio is now a static library built into the exe so don't need dll file, no squeezelite code changes. Means that squeezelite and portaudio code can have profile guided optimisation.

uploaded portaudio_x64.dll v20 - more clarity


just installed squeezelite as a service (see instructions above), another lift in SQ.

uploaded portaudio_x64.dll v19 and squeezelite_win.exe v25


uploaded squeezelite-win.exe v24 - removed fcntl.h includes.

uploaded squeezelite-win.exe v23 - removed io includes.

uploaded squeezelite-win.exe v22 - more callback optimisations.

uploaded squeezelite-win.exe v21 - more callback optimisations, track update on browser disabled.


uploaded portaudio_x64.dll v18 and squeezelite_win.exe v20 - optimisation setting tune and profile guided optimisation of squeezelite.


uploaded v18 of squeezelite, optimised streaming code, improved memory allocation and copying, removed logging and fade/crossfade. left pause, skip in, but they could be removed as well for best sq. Also removing dsd sections where I think it'll make a difference, so dsd won't play.

sounds better for that, quite a bit more insight into the music.


uploaded v16 GF- portaudio dll and squeezelite exe, this uses the same code, just compiled with a GF- option, think this is the same as MQn and adds the attack back into the sound. Doesn't sound so good as v16.

uploaded affinity set for 2 and 4 core. I'll do an unset later. Makes a difference, puts squeezelite-win.exe on core 1, everything else on core 0 or 0,2,3 depending on which version is run.

uploaded v16 of JLP Player dll and exe, a bit more meat on the bones, if mmcss is disabled the system timer is set to 2ms (as per aleg suggestion - sounds better than 1ms), the updating of settings is disabled - if you need to change them then probably need to change back to a pre v16 version of squeezelite, but it's important for the sq.


JLP Player

uploaded an optimised version of squeezelite-win.exe and portaudio_x64.exe, just copy them into the C:\ProgramData\Squeezebox\Cache\InstalledPlugins\Plugins\LocalPlayer\Bin directory without renaming.

optimisation settings and basic render loop tidy, think it makes a difference.

install logitech media server, need 7.8 for 192 output

install squeezelite from the 3rd party plugins called local player by triode

replace portaudio.dll in C:\ProgramData\Squeezebox\Cache\InstalledPlugins\Plugins\LocalPlayer\Bin with the opt1 version

you can switch back to the old one for comparison by stopping lms and replacing the portaudio file

just a few simple optimisation settings in the build have reduced the aggressive sibilant sound, this is 32 bit, so a 64 bit should sound better, but this already sounds better than the original enough for me to listen to it for more than 5 mins. only wasapi and ks are available, no asio as I don't like it.

in the advanced tab select local player and there is a settings option next to local player which you can use to change the player using the device output debug option drop down box. I am using wdm ks out to a cuinas convertor.

note the code is as per the portaudio source code, only the build settings have changed.


2.71 1024 raw background 8 + get normal - the idea with this version is to have a delay in the render loop after the buffer has been released to the end device, seems to produce less noise. There would normally be a delay, but with MQn preloading/preempting the buffer a delay is required.


2.71 1024 raw background + get normal


2.71 1024 raw background 8 + 0


MQnPlay.exe 2.71 intel win8.1/R2 raw background and background no raw - think win8.1/R2 needs the background category to be assigned. Think the raw background version is best, some real slam from the double bass.


MQnPlay.exe 2.71 intel raw - has raw passthru switch for win8.1/R2


MQnPlay.exe 2.71 intel & v2


2.70 sse2 intel - final version for SQ ?


2.69 sse2 intel win 8.1-R2 - new prefetch method and raw bypass setting for win 8.1/R2


2.61 sse4 intel - combine 2.59 8 4 16 16 8 and 2.60 8 4 + different way of loading counter


2.61 & 2.62 sse4 intel

2.60 sse4 intel 8 4 cp - better bass and vocals


Uploaded various combinations of atom/amd/intel compiled versions of sse2 and sse4 2.59 8 4 16 16 8


Uploaded 2.59 sse4 intel 8 4 16 16 4 to compare with 8 4 16 16 8

MQnPlay 2.59 sse4 intel 8 4 16 16 8 moved back to Main folder as currently sounds the best


uploaded MQnPlay 2.60 sse4 intel - 8 add - more detail

uploaded MQnPlay 2.60 sse4 intel - 8 4 more open soundstage

uploaded MQnPlay 2.60 sse4 intel - more able to communicate emotion


uploaded 6 versions of mqn 2.59 with different alignments for comparison

mqnplay.exe 2.59 sse4 intel 8 4 16 16 4 8


2.59 and 2.53 sse2 atom version, compiled for atom cpus without sse4.1

mqnplay.exe 2.59 sse4 intel ms drv 8 4 -no /cp setting

mqnplay.exe 2.59 sse4 intel ms drv 8 4 - /cp setting

mqnplay.exe 2.59 sse4 intel ms drv 8 8 - /cp setting

mqnplay.exe 2.59 sse4 intel ms drv 8 8 - without intel c++ redistributable drivers


MQnPlay.exe 2.59 sse4 intel 8 8 and 8 4 alignment

MQnPlay.exe 2.59 sse4 intel - alignment optimisation, add, dec


MQnPlay.exe 2.58 aligns and tot align - more experiments with aligning things

MQnPlay.exe 2.58 sse4 intel - 8 16 16 8 eax dec dword tlb

MQnPlay.exe 2.56 8 16 16 8 eax dec

MQnPlay.exe 2.56 8 8 16 16 8 eax add cp

MQnPlay.exe 2.56 8 8 16 16 8 eax dec

MQnPlay.exe 2.56 8 8 16 16 8 eax add

MQnPlay.exe 2.56 8 16 16 4 eax add

MQnPlay.exe 2.57 sse4 intel - 8 8 16 16 4 eax, add

MQnPlay.exe 2.56 8 8 16 16 4 al dec/8 4 16 16 4 al dec/8 16 16 4 al dec - variations of 2.56 sse4 intel dec, have different alignments


MQnPlay.exe 2.56 sse4 intel dec - uses dec instead of add, better balance ?

MQnPlay.exe 2.56 sse4 intel - add, al, no cp, alignment tweaks - detail, bass, band in room.

MQnPlay.exe 2.53 sse4 intel nt nt dec eax cp - dec reduces the brightness and cp adds depth - some magic with this one

MQnPlay.exe 2.53 sse4 intel nt nt - an unexpectedly sweet sounding version


MQnPlay.exe 2.53 sse4 intel full loop - the new loop idea didn't sound good, uses add eax -1

MQnPlay.exe 2.53 sse4 intel add eax new loop mov r9 - use add -1 instead of dec for counter

MQnPlay.exe 2.53 sse4 intel eax new loop mov r9 - mov instead of sub for second loop and hirez render loop fix as 2.53 sse4 intel eax new loop used memcpy for 24/96

MQnPlay.exe 2.53 sse4 intel eax new loop - a new way of doing things


MQnControl.exe 2 core affinity v2, 4 core affinity v2 and no affinity v2 - fix to hirez swapping channels. remove control line, added file count and file info lines


2.53 sse4 intel rax cp - rax counter, masm /Cp command line

MQn.bat - allows unicode files to be played

2.53 sse4 intel eac

2.53 sse4 intel 8 16 16 4 no tlb


2.52 nt nt 8 16 4 wc no prefetch

2.52 movdqa software prefetch align 8 intel & atom

3 x 2.52 versions that have movaps or movdqa instruction and software or hardware prefetch align 8

2.52 sse4 intel v2 and sse2 intel, prefetch referencing incorrect memory fix

2.52 sse4 intel and sse2 intel


2.51 sse4 intel rax no zi cp cx tlb, more masm command line settings affecting the sound

2.51 sse4 intel rax no zi, zi debug info setting was adding a touch of sibilance


Uploaded 2.51 sse4 intel & 2.51 sse4 intel eax

Uploaded mqnplay.exe 2.49 tlb cache r8 & mqnplay.exe 2.49 mfc stat tlb cache, primes the tlb and only puts data in l2 cache in first loop. MFC uses MFC static library setting.

Uploaded 2.49 sse4 intel no buff even better ?

Uploaded 2.49 sse4 intel rax for even better top end

Uploaded 2.49 sse4 intel eax for a bit better top end


Uploaded 2.49 sse2 intel and atom versions with the same optimisations as 2.49 sse4 8 4 alignment

Uploaded 2.49 sse4 intel 8 8 and 8 4, 2nd loop al reset removed and uses r10b, 2nd loop prefetch removed, use al instead of eax

Uploaded 2.48 ntdqdqnt r8 uses r8 instead of r8d memory ref

Uploaded 2.48 ntdqdqnt intel uses eax counter, r9d memory ref and movdqa, 2.48 sse4 intel movaps sounded a bit phasey


Uploaded 2.48 sse4 intel movaps, uses eax counter, r9d memory ref and movaps instead of movdqa
Uploaded 2.48 intel movaps 1 loop, uses eax counter and movaps

Uploaded 2.48 sse4 intel sub al, 1 version, to adjust the balance as there was a bias towards bass with 2.48 sse4 intel, this is nearly the same as 2.44, but the staging is improved.


Uploaded a 2.48 sse4 intel no mmcss version, this doesn't use MMCSS so the MMCSS service can be disabled/stopped.

Warning the next step involves editing the registry, you are advised to back up the registry first and only carry these steps out if you know what you are doing.

To stop MMCSS first remove the dependency that AudioSrv service has, edit the registry key HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Audiosrv DependOnService and remove the MMCSS at the end of the entry. The  MMCSS service can now be stopped and set to start manually.

Uploaded an atom version of 2.48 sse4 and an intel and atom version of 2.48 sse2

Uploaded MQnPlay 2.48 sse4 intel, the intel c++ 32 bit driver hadn't properly been removed so reinstalled
the 64 bit version and seems to be better.

Opened up download link to main, archive and test folders


Moved 2.47 versions to archive due to SQ issues, moved 2.44 sse4 intel back to main

MQnPlay.exe 2.47 dqa x 4 sse2 intel and atom versions uploaded, uses all movdqa instructions with everything the same as 2.47 sse4

MQnPlay.exe 2.47 sse4 intel uploaded, uses movntdqa, movdqa, movdqa, movntdq, al counter, r8b counter reset, xmmword ptr, add 128. Old versions archived.


3 x MQnControl versions had pgo build code left in, so have uploaded the versions again.

Uploaded 3 MqnControl.exe versions that reset the affinity if x is presssed

Uploaded MQnPlay.exe 2.44 intel drivers sub al and 2.44 intel drivers dec al, these use the x64 and ia32 intel c++ redistributable drivers. 2.44 intel drivers sub al is the same as 2.44 sse4 intel, just compiled with the ia32 redistributable drivers as well as the x64. The dec al is just another way of changing the counter for comparison with sub al,1 instruction, dec al is supposed to be built into the cpu while sub al, 1 is supposed to be 1 byte smaller in size.

Uploaded MQnPlay.exe 2.44 sse4 intel changed loops to movntdqa, movdqa, movdqa, movntdq, counter to al, increment to sub al, 1, counter set to mov al, 64 

Uploaded MQnPlay.exe 2.43 r11 cnt which reduces the loop counter by 1 by using r11 in the memory reference instead of incrementing both source and destination memory references. 2.43 r11 sounds a bit garbled.

Uploaded mqncontrol.exe dwm off which disables DWM from using MMCSS.

Have uploaded all the files from the main directory on Rapidshare