39 lines
1.3 KiB
Plaintext
39 lines
1.3 KiB
Plaintext
|
You downloaded the source code for "dsd2pcm" which is a simple little
|
||
|
"filter" program, that takes a DSD data stream on stdin and converts
|
||
|
it to a PCM stream (352.8 kHz, either 16 or 24 bits) and writes it to
|
||
|
stdout. The code is split into three modules:
|
||
|
|
||
|
(1) dsd2pcm
|
||
|
|
||
|
This is where the 8:1 decimation magic happens. It's an
|
||
|
implementation of a symmetric 96-taps FIR lowpass filter
|
||
|
optimized for DSD inputs. If you feed this converter with
|
||
|
DSD64 you get a PCM stream at 352.8 kHz and floating point
|
||
|
samples. This module is independent and can be reused.
|
||
|
|
||
|
(2) noiseshape
|
||
|
|
||
|
A module for applying generic noise shaping filters. It's
|
||
|
used for the 16-bit output mode in "main" to preserve the
|
||
|
dynamic range. This module is independent and can be reused.
|
||
|
|
||
|
(3) main.cpp (file contains the main function and handles I/O)
|
||
|
|
||
|
The first two modules are pure C for maximum portability. In addition,
|
||
|
there are C++ wrapper headers for convenient use of these modules in
|
||
|
C++. The main application is a C++ application and makes use of the
|
||
|
C++ headers to access the functionality of the first two modules.
|
||
|
|
||
|
|
||
|
Under Linux this program is easily compiled by typing
|
||
|
|
||
|
g++ *.c *.cpp -O3 -o dsd2pcm
|
||
|
|
||
|
provided you have GCC installed. That's why I didn't bother writing
|
||
|
any makefiles. :-p
|
||
|
|
||
|
|
||
|
Cheers!
|
||
|
SG
|
||
|
|