summaryrefslogtreecommitdiff
path: root/src/pcm/dsd2pcm/info.txt
blob: 15ff292459a86c2757b400d724fd548d6e342bfe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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