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"
26 float32 gSine
[kSineSize
+1];
27 float32 gInvSine
[kSineSize
+1];
28 float32 gSineWavetable
[2*kSineSize
];
30 void SignalAsWavetable(float32
* signal
, float32
* wavetable
, long inSize
)
35 float32
* out
= wavetable
- 1;
36 for (int i
=0; i
<inSize
; ++i
) {
39 *++out
= 2.f
* val1
- val2
;
44 *++out
= 2.f
* val1
- val2
;
56 AudioLibInit gAudioLibInit
;
58 AudioLibInit::AudioLibInit()
63 void AudioLibInit::FillTables()
65 double sineIndexToPhase
= twopi
/ kSineSize
;
66 for (int i
=0; i
<= kSineSize
; ++i
) {
67 double phase
= i
* sineIndexToPhase
;
68 float32 d
= (float)sin(phase
);
73 gInvSine
[i
] = (float)(1. / d
);
75 SignalAsWavetable(gSine
, gSineWavetable
, kSineSize
);
77 gInvSine
[0] = gInvSine
[kSineSize
/2] = gInvSine
[kSineSize
] = kBadValue
;
80 for (int i
=1; i
<=32; ++i
) {
81 gInvSine
[i
] = gInvSine
[sz
-i
] = kBadValue
;
82 gInvSine
[sz2
-i
] = gInvSine
[sz2
+i
] = kBadValue
;
84 //SignalAsWavetable(gInvSine, gInvSineWavetable, kSineSize);