2 SuperCollider real time audio synthesis system
3 Copyright (c) 2002 James McCartney. All rights reserved.
4 http://www.audiosynth.com
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23 #include "SC_Constants.h"
27 float32 gSine
[kSineSize
+1];
28 float32 gPMSine
[kSineSize
+1];
29 float32 gInvSine
[kSineSize
+1];
30 float32 gSineWavetable
[2*kSineSize
];
32 void SignalAsWavetable(float32
* signal
, float32
* wavetable
, long inSize
)
37 float32
* out
= wavetable
- 1;
38 for (int i
=0; i
<inSize
- 1; ++i
) {
41 *++out
= 2.f
* val1
- val2
;
46 *++out
= 2.f
* val1
- val2
;
50 void WavetableAsSignal(float32
* wavetable
, float32
* signal
, long inSize
)
52 float32
* in
= wavetable
- 1;
53 float32
* out
= signal
- 1;
54 for (int i
=0; i
<inSize
; ++i
) {
70 SynthLibInit gSynthLibInit
;
72 SynthLibInit::SynthLibInit()
77 void SynthLibInit::FillTables()
79 double sineIndexToPhase
= twopi
/ kSineSize
;
80 double pmf
= (1L << 29) / twopi
;
81 for (int i
=0; i
<= kSineSize
; ++i
) {
82 double phase
= i
* sineIndexToPhase
;
83 float32 d
= sin(phase
);
88 SignalAsWavetable(gSine
, gSineWavetable
, kSineSize
);
90 gInvSine
[0] = gInvSine
[kSineSize
/2] = gInvSine
[kSineSize
] = kBadValue
;
93 for (int i
=1; i
<=8; ++i
) {
94 gInvSine
[i
] = gInvSine
[sz
-i
] = kBadValue
;
95 gInvSine
[sz2
-i
] = gInvSine
[sz2
+i
] = kBadValue
;
97 //SignalAsWavetable(gInvSine, gInvSineWavetable, kSineSize);