~ubuntu-branches/ubuntu/feisty/muse/feisty

« back to all changes in this revision

Viewing changes to synti/stklib/FM4Alg6.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Kobras
  • Date: 2002-04-23 17:28:23 UTC
  • Revision ID: james.westby@ubuntu.com-20020423172823-w8yplzr81a759xa3
Tags: upstream-0.5.2
ImportĀ upstreamĀ versionĀ 0.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/******************************************/
 
2
/*  Algorithm 6 (TX81Z) Subclass of       */ 
 
3
/*  4 Operator FM Synth                   */
 
4
/*  by Perry R. Cook, 1995-96             */ 
 
5
/*  This connection topology is three     */
 
6
/*  Carriers and a common Modulator       */
 
7
/*                                        */
 
8
/*                /->1 -\                 */
 
9
/*             4-|-->2 - +-> Out          */
 
10
/*                \->3 -/                 */
 
11
/*                                        */
 
12
/*  Controls: control1 = vowel            */
 
13
/*            control2 = spectral tilt    */
 
14
/*            control3 = LFO speed        */
 
15
/*            modWheel = LFO amount       */
 
16
/*                                        */
 
17
/******************************************/
 
18
 
 
19
#include "FM4Alg6.h"
 
20
 
 
21
FM4Alg6 :: FM4Alg6() : FM4Op()
 
22
{
 
23
    /*  We still don't make the waves here yet, because    */
 
24
    /*  we still don't know what they will be.             */
 
25
}  
 
26
 
 
27
FM4Alg6 :: ~FM4Alg6()
 
28
{
 
29
}
 
30
 
 
31
MY_FLOAT FM4Alg6 :: tick()
 
32
{
 
33
    MY_FLOAT temp,temp2;
 
34
 
 
35
    temp = gains[3] * adsr[3]->tick() * waves[3]->tick();
 
36
    temp2 = vibWave->tick() * modDepth * (MY_FLOAT) 0.1;         /*  Calculate frequency mod  */
 
37
 
 
38
    waves[0]->setFreq(baseFreq * ((MY_FLOAT) 1.0 + temp2) * ratios[0]);
 
39
    waves[1]->setFreq(baseFreq * ((MY_FLOAT) 1.0 + temp2) * ratios[1]);
 
40
    waves[2]->setFreq(baseFreq * ((MY_FLOAT) 1.0 + temp2) * ratios[2]);
 
41
    waves[3]->setFreq(baseFreq * ((MY_FLOAT) 1.0 + temp2) * ratios[3]);
 
42
 
 
43
    waves[0]->addPhaseOffset(temp * mods[0]);
 
44
    waves[1]->addPhaseOffset(temp * mods[1]);
 
45
    waves[2]->addPhaseOffset(temp * mods[2]);
 
46
    waves[3]->addPhaseOffset(twozero->lastOut());
 
47
    twozero->tick(temp);
 
48
    temp =  gains[0] * tilt[0] * adsr[0]->tick() * waves[0]->tick();
 
49
    temp += gains[1] * tilt[1] * adsr[1]->tick() * waves[1]->tick();
 
50
    temp += gains[2] * tilt[2] * adsr[2]->tick() * waves[2]->tick();
 
51
    
 
52
    return temp * (MY_FLOAT) 0.33;
 
53
}
 
54
 
 
55
void FM4Alg6 :: controlChange(int number, MY_FLOAT value)
 
56
{
 
57
 
 
58
}