blob: 15ff292459a86c2757b400d724fd548d6e342bfe (
plain) (
blame)
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
|