Computer Audio Asylum

cPlay - the open source high-end audio player using ASIO

198.54.202.234


[ Follow Ups ] [ Post Followup ] Thread: [ Display  Email  Next ] [ Computer Audio Asylum ]

This Post Has Been Edited by the Author

cPlay

The open source high-end audio player using ASIO

May 2008

cPlay delivers high quality audio playback using ASIO (version 2.0). Playback is achieved using any ASIO compatible soundcard. cPlay is a minimalist audio player using the latest high quality SRC upsampler (Best Sinc SNR 121.33db). cPlay’s design offers state-of-the-art ASIO-only playback and caters for touch screen users. Installation, setup and use is easy. cPlay has been built in c/c++ and operates on Windows XP SP2 Professional (32 bit).

FEATURES

  1. Upsampling is sourced from LibSampleRate (version 0.1.3) under GNU GPL license. This is SRC (Secret Rabbit Code) and supersedes the version as used in foobar2000. Best Sinc converter now offers a SNR of 121.33db (versus 97db). Another ultra high quality Best Sinc converter offers 145.68db SNR which is not yet supported (as this is more suitable for batch use). Upsampling can be bypassed.

  2. Supports Steinberg’s excellent ASIO 2.0 and is backward compatible to prior ASIO versions (as required by ASIO drivers).

  3. Offers high quality 64 bit double precision digital volume control (in 0.5db steps). This can be bypassed.

  4. Playback is achieved through .cue or .wav (16 or 24bit) files. cPlay loads entire .wav into RAM before starting. Playback is done directly from cPlay’s internal buffer which can support files up to 2GB. Sufficient available RAM is required. Cue playback requires .cue files as created by EAC (single file standard).

  5. Ensures efficient CPU resource utilization allowing for low specification processors or high levels of upsampling. This means CPU’s can be underclocked / undervolted.

  6. Supports up to 8 ASIO soundcards with each having up to 100 output channels.

  7. Advanced optimizations are applied (if available from ASIO driver) during playback.

  8. Best results achieved when using cMP. This allows for low level Windows optimizations. Use cMP release 1.0 final or later – this allows for bypassing RAM load in cMP (set RAM Load in cMP Settings to No) otherwise wav file is RAM loaded twice. cPlay allows for both svchost and lsass to be suspended during playback thus reducing the Windows footprint. Only exception is EMU’s ASIO driver which requires both (svchost and lsass) to be operational. Set cMP’s ‘Optimize’ setting to ‘Critical’.

  9. Full remote control is achieved with cMP: offering volume control, track navigation, next/previous and stop/eject via (wireless) mouse.

USER MANUAL

Main

Main screen offers essentials only. Large buttons and fonts makes for excellent touch screen friendliness and operating from a distance. cPlay's desktop icon is used for initial setup. Thereafter, play audio as follows:

  1. Select .cue or .wav file from File Explorer (double-click on .cue starts cPlay)
  2. Select 'Open With' (right-click on file to be played)
  3. Select cicsPlay

Playing audio with RealTime priority:

  1. Select .cue or .wav file from File Explorer
  2. Select 'Open With' (right-click on file to be played)
  3. Locate and select 'cicsPlay.bat' where cPlay was installed (default is 'c:\program files\cics Play'). Note: If you did NOT use the default install folder, edit cicsPlay.bat and correct the path. Hint: use command 'dir *.* /x' to identify folder's DOS shortname.




Do not interfere with cPlay during RAM load which takes ~15 seconds for a typical CD. Using RAID 0 and /or high throughput HDDs will yield faster RAM load times.

Settings

Bottom left button in main screen brings up cPlay’s settings. ASIO settings button below depends on ASIO driver – Juli@ has no effect whilst RME, EMU and ASIO4ALL gives access to ASIO control panel of driver. cPlay offers 2 channel output mapping only (this is a deliberate design choice). All else is obvious.




For changes to take effect, a restart is required. ASIO changes (from cPlay or external) will cause cPlay to stop (and a restart is required). This is an important safety measure.

When changing rates (e.g. 96 to 44.1), some ASIO soundcards will re-map its channels – cPlay tries to detect this (depending on ASIO driver) and informs you to reset left & right channels. Why? Soundcards using the ADAT interface use channel multiplexing (i.e. 96k gives 2x48k...) hence channels change with rate.

Diagnostics

Incredible detail is provided when diagnostics is activated. Also, when cPlay encounters an error, diagnostics is displayed – it’s always a good idea to scroll to the bottom for important messages.

Here’s the initial startup diagnostics using Juli@:




Both Player (cPlay) and Driver (Juli@) support ASIO version 2.0. Latency at ‘preferred buffer’ level matches output latency (48 samples), output ready & hardware optimizations are done. Any advantage of RME’s off-host processing is negated here. Juli@ passes with flying colors!

For RME HDSP9652:




Disappointing to see only support for ASIO 1.0 and actual output latency differs from preferred buffer latency - it’s worse than Juli@. Ideally, both output and buffer latencies should be the same. Output ready & hardware optimizations are done.

For EMU 1212M:




This soundcard offers poor latency of 2ms (at any sample rate), preferred buffer latency doesn’t match output latency and no hardware optimization supported. Note that if you have an EMU card installed, do NOT disable it (in device manager) as this causes instability (as drivers remain operational)!

GETTING STARTED

Download cPlay’s installer from sourceforge here (1.2MB). Installation and startup is straight forward.

If you don’t have an ASIO compatible soundcard, use ASIO4ALL. Note that ASIO4ALL does not support channel mapping (use default) and can only handle up to 48k sample rate.

Your feedback will help guide cPlay’s future development. I want to do more tuning / optimizations and have cPlay tested across more soundcards (including firewire and USB).





Edits: 05/05/08

Follow Ups: