mpd/src/output
Christian Kröner e89c421313 Initial support for DSD over PCM on macOS
From: Christian Kröner <ckroener@gmx.net>

This just copies the necessary bits and pieces from the ALSA plugin and applies them to OSXOutput based on dop config setting. It only changes the OSXOutput plugin as needed for DoP (further changes to support additionally e.g. integer mode or setting the physical device mode require rather a complete rewrite of the output plugin).

Fortunately the Core Audio API is by default bit perfect and supports DoP with minimal changes (setting the sampling rate accordingly after ensuring that the physical mode supports at least 24 bits per channel seems to be enough). This was tested on an Amanero Combo384 device hooked up to a ES9018 DAC.

USAGE (try only on DACs that support DoP):
- Add dop "yes" option to mpdconf
- Be sure to set at least 24bits per channel before playing some DSD file (using Audio-MIDI-Setup)
- Based on the dop setting, MPD will change the sample rate as required and output DoP signal to the DAC
- Hog mode is recommended to ensure that no other program will try to mix some output with the DoP stream (resulting in bad noise)
- Alternatively set the default output device to another device (e.g. the built-in output) to avoid having other audio interfere with DSD playback
2018-02-26 14:55:03 +01:00
..
plugins Initial support for DSD over PCM on macOS 2018-02-26 14:55:03 +01:00
Client.hxx update copyright year 2017-01-03 20:48:59 +01:00
Control.cxx output/Control: unlock mutex during expensive operations 2018-01-04 10:36:18 +01:00
Control.hxx output/Control: move code from FinishDestroy() to destructor 2018-01-04 10:34:27 +01:00
Domain.cxx update copyright year 2017-01-03 20:48:59 +01:00
Domain.hxx update copyright year 2017-01-03 20:48:59 +01:00
Filtered.cxx output/Interface: add "attributes" map 2017-12-19 11:57:52 +01:00
Filtered.hxx output/Filtered: remove BeginDestroy() 2018-01-04 10:29:27 +01:00
Finish.cxx output/Filtered: remove BeginDestroy() 2018-01-04 10:29:27 +01:00
Init.cxx util/StringFormat: new utility library 2018-01-24 13:28:28 +01:00
Interface.cxx output/Interface: add "attributes" map 2017-12-19 11:57:52 +01:00
Interface.hxx output/Interface: clarify Play() API documentation 2018-01-05 08:35:40 +01:00
MultipleOutputs.cxx output/Control: move code from FinishDestroy() to destructor 2018-01-04 10:34:27 +01:00
MultipleOutputs.hxx player/Outputs: abstract interface wrapping class MultipleOutputs 2017-12-29 16:39:05 +01:00
OutputAPI.hxx output/Interface: define a new struct AudioOutput 2017-08-08 18:58:40 +02:00
OutputCommand.cxx output/Internal: rename source to Filtered.cxx 2017-08-07 21:50:13 +02:00
OutputCommand.hxx update copyright year 2017-01-03 20:48:59 +01:00
OutputPlugin.cxx output/Interface: convert to abstract class 2017-08-10 09:01:41 +02:00
OutputPlugin.hxx Compiler.h: add gcc_returns_nonnull, gcc_returns_twice 2017-12-18 23:00:13 +01:00
Print.cxx output/Interface: add "attributes" map 2017-12-19 11:57:52 +01:00
Print.hxx output/Output*: drop "Output" prefix from source file name 2017-04-28 21:42:24 +02:00
Registry.cxx update copyright year 2017-01-03 20:48:59 +01:00
Registry.hxx update copyright year 2017-01-03 20:48:59 +01:00
SharedPipeConsumer.cxx *: add "noexcept" to many, many function prototypes 2017-05-08 14:44:49 +02:00
SharedPipeConsumer.hxx *: add "noexcept" to many, many function prototypes 2017-05-08 14:44:49 +02:00
Source.cxx player/Thread: don't send silence if decoder is slow 2018-01-03 17:36:41 +01:00
Source.hxx filter/Filter: add virtual method Flush() 2018-01-02 23:15:51 +01:00
State.cxx output/Internal: rename source to Filtered.cxx 2017-08-07 21:50:13 +02:00
State.hxx output/Output*: drop "Output" prefix from source file name 2017-04-28 21:42:24 +02:00
Thread.cxx output/Thread: re-lock the mutex after flush error 2018-01-29 22:30:56 +01:00
Timer.cxx update copyright year 2017-01-03 20:48:59 +01:00
Timer.hxx update copyright year 2017-01-03 20:48:59 +01:00