Wednesday 3 October 2012

Sonic Field Released Under AGPL

A visualisation of Sonic Field's rendering 'Bells Of Time'
Sonic Field has stabilised enough to be released under AGPL-3. It is still very rough, but can do some very complex programmatic compositions, synthesises and audio processes. It is time to let others see the code I have written (gulp).
It is true that there are many software, programming language based audio processing systems out there already. Supercollider is a famous example of the genre. However, I do feel that the area of arbitrary complexity non real time processing and synthesis is neglected. Further, the current batch of such systems are largely written in C or C++ and come from a single threaded, non distributed computational paradigm. Sonic Field has a full multi-threaded, parallel programming model and is written entirely in cross platform, pure Java. Sonic Field uses the Spring Framework for services and it is my aim to create a web/html5 based UI for it using Spring MVC (work in progress as we speak).
For more information on Sonic Field, check out the blog I have create for it! This will become the main place for documentation for Sonic Field. There is no point supporting a full documentation system and useful commenting system (even if anyone uses it) when blogger does it all for you! You can download Sonic Field from the main Sonic Field website:


So what can Sonic Field Really Do?
My favourite piece from Sonic Field (so far) is Acceptance. I like it because I hand crafted each note rather than use some form of automatic envelope and pitch system based on lists of notes as I have in other compositions. 
So, to finish this post, here is the patch which creates Acceptance:
[Absolute brick wall at 20KHz]
(20000 Period,50)SincShape NormaliseArea !brick
{
    (>signal,>brick)Convolve Normalise 
}!brick-wall-filter

{
    (>length,2)* !length
    (?length,(?pitch,2)-)SinWave !signal1 
    (?length,(?pitch,2)+)SinWave !signal2 
    (?length,(?pitch,1.2)*)SinWave dbs+48 !fm1
    (?length,(?pitch,1.3)*)SinWave dbs+12 !fm2
    
    (
        (
            ?signal1,
            >fm1
        )FrequencyModulate,
        (
            >signal2 dbs-24,
            >fm2
        )FrequencyModulate,
    )Mix Normalise !signal
    
    (
        >signal,
        (
            (100 WhiteNoise,?pitch,2)DirectLowPass,
            (
                (0,0),
                (20,1),
                (100,0)
            )NumericShape
        )Multiply
    )Mix Normalise !signal
    
    (
        (0,-99),
        (50,0),
        (?length,-99)
    )SimpleShape !env
    (
        >signal,
        >env
    )Multiply !signal
    
    (>signal,(?pitch,2)*,2)DirectHighPass !signal
    (>signal,(?pitch,1)*,?dullness)DirectlowPass  !signal
}!play-bell

{
    (?sample,1000,5)DirectLowPass  !sampleL
    (?sample,3000,2)DirectLowPass  !sampleN
    (?sample,1000,4)DirectHighPass !sampleH
    (>sampleH,5000,2)DirectLowPass !sampleH
    (?sample,((?first ,?offset)+ Prime Silence,(?sample,-13)Volume)Concatenate)Mix    !wet
    (
        1,2,
        {
            !z
            (>first,1.2)* Prime !first
            (>wet,(((?first,30)-,?offset)- Silence,(?sampleL,(-10,?z)-)Volume)Concatenate)Mix   !wet
            (>wet,(((?first,30)+,?offset)- Silence,(?sampleN,(-6, ?z)-)Volume)Concatenate)Mix   !wet
            (>wet,((?first      ,?offset)- Silence,(?sampleH,(-10,?z)-)Volume)Concatenate)Mix   !wet
        }
    )Repeat
    (?sampleL,1000,1)DirectLowPass  !sampleL
    (?sampleN,1000,1)DirectLowPass  !sampleN
    (?sampleH,2000,1)DirectLowPass  !sampleH
    (
        (0,0),
        ((?wet Length,3)/,1),
        (?wet Length,0)
    )NumericShape !env
    (
        3,20,
        {
            !z 
            (?z,2)/ !z
            (>first,1.1)* Prime !first
            (>wet,(((?first,30)-,?offset)- Silence,((?sampleL,(-7,?z)-)Volume,?env)Multiply)Concatenate)Mix    !wet
            (>wet,(((?first,30)+,?offset)- Silence,((?sampleN,(-4,?z)-)Volume,?env)Multiply)Concatenate)Mix    !wet
            (>wet,((?first      ,?offset)- Silence,((?sampleH,(-7,?z)-)Volume,?env)Multiply)Concatenate)Mix    !wet
        }
    )Repeat
    (
        20,40,
        {
            !z 
            (?z,3)/ !z
            (>first,1.05)* Prime !first
            (>wet,(((?first,30)-,?offset)- Silence,(((?sampleL,(-7,?z)-)Volume,?env)Multiply,500,2)DirectLowPass)Concatenate)Mix    !wet
            (>wet,(((?first,30)+,?offset)- Silence,(((?sampleN,(-4,?z)-)Volume,?env)Multiply,500,2)DirectLowPass)Concatenate)Mix    !wet
            (>wet,((?first      ,?offset)- Silence,(((?sampleH,(-7,?z)-)Volume,?env)Multiply,500,2)DirectLowPass)Concatenate)Mix    !wet
        }
    )Repeat
    >wet
} !reflector


{
    (?length,(?pitch,((Random,0.5)-,5)*)-,Random)PhasedSinWave !signal
    ?wave-shape Do Done !signal
    (((?length,500)/ WhiteNoise,2500,6)DirectLowPass,0.001)DirectRelength Normalise !multi
    (0,?signal Length,>multi)Cut  !multi
    (
        (1,>multi pcnt+2 )DirectMix,
        >signal
    )Resample !signal
    (>signal,(?pitch,4)*,1)DirectLowPass Normalise
} !string

{ >signal MakeTriangle } !triangle-shape
{ >signal MakeSawTooth } !saw-tooth-shape

{
    {
        (?pitch,4)/  !pitch
        (?length,4)* !length
        ( 
            { ?triangle-shape  !wave-shape ?string Do Done },
            { ?triangle-shape  !wave-shape ?string Do Done },
            { ?triangle-shape  !wave-shape ?string Do Done },
            { ?triangle-shape  !wave-shape ?string Do Done },
            { ?saw-tooth-shape !wave-shape ?string Do Done },
            { ?saw-tooth-shape !wave-shape ?string Do Done },
            { ?saw-tooth-shape !wave-shape ?string Do Done }
        )DoAll Mix Normalise !base
        (>base,4)DirectRelength Normalise
    } Do Done !sample
      
    (>sample,(?pitch,5)*,2)DirectLowPass !sample 
    
    ((?length WhiteNoise,500,6)DirectLowPass,0.01)DirectResample Normalise !multi
    (>multi,(?pitch,2)/,6)DirectHighPass Normalise !multi
    (
        (0.5,?multi pcnt+5)DirectMix,
        >sample
    )Multiply Normalise  !sample 
    
    (>sample,(?pitch,2)/,6)DirectHighPass Normalise !sample
    (
        (
            (0,-99),
            (150,0),
            ((?sample Length,2)/,0),
            (?sample Length,-99)
        )SimpleShape,
        >sample
    )Multiply Normalise
    
} !play-strings
[ Parameters for play-strings
  ===========================
  length
  pitch
  
  Forwards
  ========
  A signal
]

{ 
    {
        (?pitchLocal,((Random,0.5)-,6)*)+                      !pitch
        (?lengthLocal,?pitch,Random)PhasedSinWave MakeSawTooth !signal
        [?brick-wall-filter Do Done !signal]
        (
            (
                (?signal Length,1.5)* WhiteNoise,
                (500,?over-sample)/,
                6
            )DirectLowPass,
            0.01
        )DirectResample Normalise                 !multi
        (0,?signal Length,>multi)cut              !multi 
        (0.5,>multi Normalise pcnt+45)DirectMix   !shape
        ?brick-wall-filter Do Done !signal
        (>signal,>shape)ShapedThreshold Normalise !signal
        (>signal,(10000,?over-sample)/,6)DirectLowPass 
    }!horn
    (1,(?pitch,100)/)Min !over-sample
    (?pitch,?over-sample)/  !pitchLocal
    (?length,?over-sample)* !lengthLocal
    (
        ?horn,
        ?horn,
        ?horn,
        ?horn,
        ?horn,
        ?horn,
        ?horn,
        ?horn
    )DoAll Mix Normalise                !signal
    (>signal,?over-sample)DirectRelength Normalise !signal
    ?signal Length !length
    (
        (0,0.1),
        ((?length,2)/,0.5),
        (?length,0.1)
    )NumericShape !resonance
    (
        (0,?pitch),
        ((?length,2)/,(?pitch,4)*),
        (?length,?pitch)
    )NumericShape !cutoff
    (
        >signal,
        >cutoff,
        >resonance
    )ShapedLadderFilter                !signal
    (
        (0,0),
        (?attack,(1,?softness)-),
        (
            ((?attack,4)*,(?length,2)/)Min,
            -10
        ),
        (
            ((?attack,4)*,(?length,0.8)*)Min,
            -10
        ),
        (?length,0)
    )NumericShape !envelope
    (>signal,12,1)DirectHighPass Normalise  !signal
    (
        >signal,
        >envelope
    )Multiply Normalise !signal-horn
    
    [Add softness]
    (
        (0,      (?pitch,8)/),
        (?attack,(?pitch,4)/),
        (?length,12)
    )NumericShape !cutoff

    (
        (0,0.25),
        (?attack,0.5),
        (?length,0)
    )NumericShape !resonance
        
    (
        (?length WhiteNoise,(?pitch,1)*,(?pitch,4)*,?filter-factor)DirectBandPass,
        >cutoff,
        >resonance
    )ShapedLadderFilter !signal-soft

    (
        (0,-60),
        ((?attack,4)/,-6),
        (?attack,0),
        (
            ((?attack,4)*,(?length,2)/)Min,
            -10
        ),
        (?length,-60)
    )SimpleShape !envelope    

    (?signal-soft,0.95,0.15,?pitch Period)ResonantFilter Normalise !signal-soft
     
 
    (>signal-soft,(?pitch,1)*,1)DirectLowPass !signal-soft    
    (>signal-soft,12,1)DirectHighPass Normalise  !signal-soft
    (
        >signal-soft,
        >envelope
    )Multiply !signal-soft

    (>signal-soft,?softness)NumericVolume     !signal-soft
    
    (
        >signal-horn,
        >signal-soft
    )Mix Normalise
    
} !play-horn

[ Parameters for play-horn:
  =========================
  length
  pitch
  softness [0 to 1]
  attack
  filter-factor [1 to 4]
  
  Forwards
  ========
  A signal
]

{
    (((?signal, ?drive-left )NumericVolume,?delay-left ))MixAt !left
    (((?signal, ?drive-right)NumericVolume,?delay-right))MixAt !right
    
    (
        (?left  pcnt+40,0),
        (?right pcnt+2,(?room-size,0.5)*),
        (?right pcnt+2,(?room-size,0.75)*),
        (?right pcnt+2,?room-size)
    )MixAt !left

    (
        (?right pcnt+90,0),
        (?left  pcnt+2,(?room-size,0.5)*),
        (?left  pcnt+2,(?room-size,0.75)*),
        (?left  pcnt+2,?room-size)
    )MixAt !right

    (
        (?right pcnt+5,(?room-size,2)/),
        (?left  pcnt+5,(?room-size,2)/)
    )MixAt !middle
    
    (
        ?left,
        ?middle
    )Mix Normalise !left
    
    (
        ?right,
        ?middle
    )Mix Normalise !right
    [ Remove any initial click ]
    (
        (
            (0,-99),
            (100,0),
            (?right Length,0)
        )SimpleShape,
        >right
    )Multiply !right

    (
        (
            (0,-99),
            (100,0),
            (?left Length,0)
        )SimpleShape,
        >left
    )Multiply !left

    
    (>left,>right)
}!place-in-room
[ Parameters For place-in-room
  ============================
  delay-left
  drive-left
  delay-right
  drive-right
  room-size
  signal
 
  Forwards
  ========
  left right bunch
]
[
(100000,(10,(2,0.5)**)* )SinWave !sqrt2-samples 
(100000,(10,(3,0.5)**)* )SinWave !sqrt3-samples 
(100000,(10,(5,0.5)**)* )SinWave !sqrt5-samples
(100000,(10,(7,0.5)**)* )SinWave !sqrt7-samples
]

{
    ?place-in-room Do Done !bus  
    ?bus GetStart          !leftTone
    >bus GetRest GetStart  !rightTone
    ((>left, 0),((>leftTone,?volume)Volume, ?pos))MixAt !left
    ((>right,0),((>rightTone,?volume)Volume,?pos))MixAt !right
}!mix-in

1 Silence !left !right
0    !pos
1500 !beat
0    !volume
[ 
    Start
  -=======-   
]

[ Note  1  Bar 1 Beat 1]
    (?beat,2)/ !length
     "e4b" Note !pitch
      0.8  !softness
      250  !attack
        2  !filter-factor
    ?play-horn Do Done Normalise !signal
    (>signal,?pitch,(?pitch,2)*,4)DirectBandPass !signal
    
    500    !room-size
    50     !drive-left !drive-right
     0     !delay-left
     0     !delay-right
    
    ?mix-in invoke

(?pos,?beat)+ !pos

[ Note 2 Bar 1 Beat 2]
    (?beat,0.8)*   !length
     "e4b" Note !pitch
      0.2  !softness
      50   !attack
        4  !filter-factor
    ?play-horn Do Done Normalise !signal
    (>signal,?pitch,(?pitch,3)*,4)DirectBandPass !signal
    
    [ Room as above ]
    ?mix-in invoke

(?pos,?beat)+ !pos

[ Note 3 Bar 1 Beat 3-6]
    (?beat,2.9)* !length
     "e4b" Note !pitch
      0.5  !softness
      500  !attack
        4  !filter-factor
    ?play-horn Do Done Normalise !signal
    (>signal,(?pitch,2)/,(?pitch,4)*,2)DirectBandPass !signal
    
    [ Room as above ]
    ?mix-in invoke

(?pos,(?beat,4)*)+ !pos [6 beats]

[ Note 4 Bar 2 Beat 1-4]
    (?beat,2.9)* !length
     "D4" Note !pitch
      0.5  !softness
      500  !attack
        4  !filter-factor
    ?play-horn Do Done Normalise !signal
    (>signal,(?pitch,1)/,(?pitch,2)*,4)DirectBandPass !signal
    (
        (
            0.75,
            ((0,1),(?signal length,3))Slide pcnt+25
         )DirectMix,
        >signal
    )Multiply Normalise !signal

    [ As Above ]    
    ?mix-in invoke

(?pos,(?beat,4)*)+ !pos [6 beats]

[First Strong Note - third bar]
[ Note 5 Bar 3 Beat 1-4
  Reverse pattern long-short-short
]
     (?beat,2.9)* !length 
     "G4" Note !pitch
      0.5  !softness
      500  !attack
        4  !filter-factor
    ?play-horn Do Done Normalise !signal
    (
        (
            0.75,
            ((0,1),(?signal length,3))Slide pcnt+25
         )DirectMix,
        >signal
    )Multiply Normalise !signal
    
    500    !room-size
    25     !drive-left 
    75     !drive-right
    50     !delay-left
     0     !delay-right
    
    ?mix-in invoke

(?pos,(?beat,4)*)+ !pos 
[ Note 6 Bar 3 beat 5 ]
    (?beat,0.66)* !length
    "F4" Note !pitch
     0.0  !softness
     100  !attack
       4  !filter-factor
    ?play-horn Do Done Normalise !signal
    
    500    !room-size
    75     !drive-left 
    25     !drive-right
     0     !delay-left
    50     !delay-right
    
    ?mix-in invoke

(?pos,(?beat,1)*)+ !pos

[ Note 7 Bar 3 beat 6 ]
     (?beat,0.66)* !length
     "F4" Note !pitch
      0.0  !softness
      100  !attack
        4  !filter-factor
    ?play-horn Do Done Normalise !signal
        
    [ As Above ]
    ?mix-in invoke

(?pos,(?beat,1)*)+ !pos

[ Note 8 Bar 4 beat 1-6 ]
     (?beat,2.9)* !length
     "E4b" Note !pitch
      0.5  !softness
     1000  !attack
        2  !filter-factor
    ?play-horn Do Done Normalise !signal
    (
        (
            0.75,
            ((0,1),(?signal length,3))Slide pcnt+25
         )DirectMix,
        >signal
    )Multiply Normalise !signal
    
    500    !room-size
     5     !drive-left 
    95     !drive-right
    50     !delay-left
     0     !delay-right

    ?mix-in invoke

(?pos,(?beat,6)*)+ !pos

[Next Bar - enter strings]
[ Note 9 Bar 5 beat 1 ]
    "e5b" note   !pitch
    (?beat,1.0)* !length
    ?play-strings Do Done !signal
    
    99     !room-size
     5     !drive-left 
    95     !drive-right
    50     !delay-left
     0     !delay-right
    -6     !volume
    ?mix-in invoke

(?pos,(?beat,1)*)+ !pos

[ Note 9 Bar 5 beat 1 ]
    "e5b" note   !pitch
    (?beat,1.0)* !length
    ?play-strings Do Done !signal
    [ As Above ]
    ?mix-in invoke

(?pos,(?beat,1)*)+ !pos

[ Note 10 Bar 5 beat 3-6 ]
    "d5" note   !pitch
    (?beat,3.0)* !length
    ?play-strings Do Done !signal
    (>signal,((0,-24),(?beat,0),((?beat,3)*,-24))SimpleShape)Multiply !signal

    [ As Above ]
    ?mix-in invoke

(?pos,(?beat,4)*)+ !pos

[Next Bar - continue strings]
[ Note 11 Bar 6 beat 1 ]
    "f5" note   !pitch
    -3 !volume
    (?beat,1.0)* !length
    ?play-strings Do Done !signal

    [ As Above ]
    ?mix-in invoke

(?pos,(?beat,1)*)+ !pos

[ Note 12 Bar 6 beat 2 ]
    "f5" note   !pitch
    (?beat,1.0)* !length
    ?play-strings Do Done !signal

    [ As Above ]
    ?mix-in invoke

(?pos,(?beat,1)*)+ !pos

[ Note 13 Bar 6 beat 3-6 ]
    "e5b" note   !pitch
    (?beat,3.0)* !length
    ?play-strings Do Done !signal
    (>signal,((0,-24),(?beat,0),((?beat,3)*,-24))SimpleShape)Multiply !signal

    [ As Above ]
    ?mix-in invoke

(?pos,(?beat,4)*)+ !pos

[ Notes 14-19 (triplets) Bar 6 beats 1-2 ]
    (?beat,3.5)/ !length
       0  !volume
     0.8  !softness
     200  !attack
       1  !filter-factor
    500   !room-size
    25    !drive-left 
    75    !drive-right
    50    !delay-left
     0    !delay-right
    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)/,(?pitch,3)*,4)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,3)/)+ !pos
    }!fffupoot
    
    "e4b" Note !pitch
    ?fffupoot  Invoke
    "f4"  Note !pitch
    ?fffupoot  Invoke
    "g4"  Note !pitch
    ?fffupoot  Invoke
    "f4"  Note !pitch
    ?fffupoot  Invoke
    "e4b" Note !pitch
    ?fffupoot  Invoke
    "d4"  Note !pitch
    ?fffupoot  Invoke

[ Note 20 Bar 6 beats 3-6 ]
    "e4b" Note !pitch
    (?beat,3.5)* !length
     0.5  !softness
     250  !attack
       4  !filter-factor

    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)/,(?pitch,3)*,1)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,4)*)+ !pos
    }!fpoot4

    ?fpoot4  Invoke

[ Note1 21 Bar 7 beats 1-2 ]
    "f4" Note !pitch
    (?beat,1.7)* !length
     0.5  !softness
     250  !attack
       4  !filter-factor

    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)/,(?pitch,3)*,1)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,2)*)+ !pos
    }!fpoot2
    
    ?fpoot2  Invoke

[ Note1 22 Bar 7 beats 3-5 ]
[ Make it seem more distance and spacy ] 
    (?beat,2.5)* !length
     0.9  !softness
     500  !attack
       1  !filter-factor
    900   !room-size
    25    !drive-left 
    75    !drive-right
    99    !delay-left
     0    !delay-right

    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)/,(?pitch,3)*,4)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,3)*)+ !pos
    }!fffupoot3
    
    "g4" Note !pitch
    ?fffupoot3  Invoke

[ Note1 23 Bar 7 beat 6 ]

    ?beat !length
     0.8  !softness
     200  !attack
       1  !filter-factor
    500   !room-size
    25    !drive-left 
    75    !drive-right
    50    !delay-left
     0    !delay-right
    -3    !volume
    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)/,(?pitch,3)*,1)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,1)*)+ !pos
    }!fpoot1
    
    "f4" Note !pitch
    ?fpoot1  Invoke

[ Note 24 Bar 8 beats 1-4 ]
    "d4" Note !pitch
     0    !volume 
    (?beat,3.5)* !length
     0.5  !softness
     250  !attack
       4  !filter-factor

    ?fpoot4  Invoke   

[ Note1 25 Bar 8 beats 5-6 ]
    "e4b" Note !pitch
    (?beat,1.7)* !length
       4  !filter-factor
 
    ?fpoot2  Invoke

[ Note1 26 Bar 9 beats 1-3 ]
[ Also start drone rhythum ]

[   100000 !length
    (?length,32)SinWave !signal
    (0.5,>signal)DirectMix !signal
    
    (   >signal dbs+6,
        (?length,(1,6)/,0.25)PhasedSinWave Normalise
    )Mix !signal
    >signal saturate  !signal
    >signal normalise !signal
    (>signal,128,4)DirectLowPass Normalise !signal
    ((0,0),(6000,1),(?signal Length,1))NumericShape !env
    (>env,>signal)Multiply !signal
    (?signal,0.99,0.15,48 Period)ResonantFilter Normalise !signalR
    (
        >signal,
        >signalR
    )Mix Normalise !signal
    500   !room-size
    50    !drive-left 
    50    !drive-right
     0    !delay-left
    99    !delay-right
    >volume !v-tmp
    -12 !volume
    ?mix-in invoke
    >v-tmp !volume
]    

    500   !room-size
    25    !drive-left 
    75    !drive-right
    50    !delay-left
     0    !delay-right
     
    (?beat,2.5)* !length
    
    "f4" Note !pitch
    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)/,(?pitch,3)*,1)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,3)*)+ !pos
    }!fpoot3
    ?fpoot3  Invoke

[ Note1 27 Bar 9 beat 4 ]

    ?beat !length
    -6    !volume 
     0.9  !softness
     250  !attack
       1  !filter-factor
    "e4b" Note !pitch
     {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)/,(?pitch,3)*,4)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,1)*)+ !pos
    }!fffpoot1
    ?fffpoot1  Invoke

[ Note 28 Bar 9-10 beats 5-2 ]
    "c4" Note !pitch
     0    !volume 
    (?beat,3.5)* !length
     0.5  !softness
     250  !attack
       4  !filter-factor
    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,3)/,(?pitch,4)*,2)DirectBandPass !signal
        ?mix-in invoke
        (?pos,(?beat,4)*)+ !pos
    }!low-fpoot4

    ?low-fpoot4  Invoke   

[ Note1 29 Bar 10 beats 3-4 ]
    "d4" Note !pitch
    (?beat,1.7)* !length
     0.2  !softness
     125  !attack
       4  !filter-factor
    {
        ?play-horn Do Done Normalise !signal
        ?mix-in invoke
        (?pos,(?beat,2)*)+ !pos
    }!low-poot2
 
    ?fpoot2  Invoke

[ Note1 30 Bar 10-11 beats 4-1 ]
    (?beat,2.5)* !length
    
    "e4b" Note !pitch
    {
        ?play-horn Do Done Normalise !signal
        ?mix-in invoke
        (?pos,(?beat,3)*)+ !pos
    }!low-poot3
    ?low-poot3  Invoke

[ Note1 31 Bar 11 beat 2 ]

    ?beat !length
      -3  !volume
     0.5  !softness
     250  !attack
       3  !filter-factor
    "d4" Note !pitch
    {
        ?play-horn Do Done Normalise !signal
        ?mix-in invoke
        (?pos,(?beat,1)*)+ !pos
    }!low-fpoot1
    
    ?low-fpoot1  Invoke

[ Note 32 Bar 11 beats 3-6 ]
       0  !volume
    (?beat,9.5)* !length
     0.0  !softness
     125  !attack
       4  !filter-factor
    {
        ?play-horn Do Done Normalise !signal
        [(?signal,(1,(?signal Length,2)SinWave dbs-12)DirectMix)Multiply !signal
        >signal dbs+3 Saturate Normalise !signal]
        ?mix-in invoke
        (?pos,(?beat,6)*)+ !pos
    }!low-brass-poot6

[ Start string chord]
    "Starting chord" Println
    "e5b" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
    
    (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-12 !signal
     -12  !volume
    {
        99     !room-size
         5     !drive-left 
        95     !drive-right
        50     !delay-left
         0     !delay-right
    }!string-room
    
    ?mix-in invoke

   "f5#" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
     (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-12 !signal
    ?mix-in invoke

   "b5b" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
     (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-9 !signal
    ?mix-in invoke
 
    {
        500   !room-size
        25    !drive-left 
        75    !drive-right
        50    !delay-left
         0    !delay-right
    }!horn-room Invoke

[ Note 32 Bar 12 ]
    "Note 32 Bar 12" Println
    0 !volume
    "b3b" Note !pitch
    (?beat,5)* !length
    ?low-brass-poot6  Invoke   

[ Notes 33-69 (triplets) Bars 13-14]
    (?beat,3.5)/ !length
       0  !volume
     0.5  !softness
     100  !attack
       3  !filter-factor
    500   !room-size
    25    !drive-left 
    75    !drive-right
    50    !delay-left
     0    !delay-right
    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)*,3)DirectLowPass !signal
        ?mix-in invoke
        (?pos,(?beat,3)/)+ !pos
    }!fpoot
    
    "Notes 33-69" Println
    "b3b" Note !pitch
    ?fpoot  Invoke
    "c4"  Note !pitch
    ?fpoot  Invoke
    "d4"  Note !pitch
    ?fpoot  Invoke
    "c4"  Note !pitch
    ?fpoot  Invoke
    "b3b" Note !pitch
    ?fpoot  Invoke
    "a3"  Note !pitch
    ?fpoot  Invoke
    
    "Block 2" Println
    "a3" Note !pitch
    ?fpoot  Invoke
    "b3b"  Note !pitch
    ?fpoot  Invoke
    "c4"  Note !pitch
    ?fpoot  Invoke
    "b3b"  Note !pitch
    ?fpoot  Invoke
    "a3" Note !pitch
    ?fpoot  Invoke
    "g3"  Note !pitch
    ?fpoot  Invoke

    "Block 3" Println
    "g3" Note !pitch
    ?fpoot  Invoke
    "a3"  Note !pitch
    ?fpoot  Invoke
    "b3b"  Note !pitch
    ?fpoot  Invoke
    "a3"  Note !pitch
    ?fpoot  Invoke
    "g3" Note !pitch
    ?fpoot  Invoke
    "f3"  Note !pitch
    ?fpoot  Invoke

[ Bar 14 ]

    "Block 4 bar 14" Println

    "Starting chord" Println
    "b5b" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
    
    (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-12 !signal
    -12  !volume
    ?string-room invoke
    
    ?mix-in invoke

   "c6#" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
     (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-12 !signal
    ?mix-in invoke

   "f6" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
     (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-9 !signal
    ?mix-in invoke

    0  !volume
    ?horn-room invoke
    (?beat,3.5)/ !length
    {
        ?play-horn Do Done Normalise !signal
        (>signal,(?pitch,2)*,1)DirectLowPass !signal
        ?mix-in invoke
        (?pos,(?beat,3)/)+ !pos
    }!fpoot
    
    "f3" Note !pitch
    ?fpoot  Invoke
    "g3"  Note !pitch
    ?fpoot  Invoke
    "a3"  Note !pitch
    ?fpoot  Invoke
    "g3"  Note !pitch
    ?fpoot  Invoke
    "f3" Note !pitch
    ?fpoot  Invoke
    "d3"  Note !pitch
    ?fpoot  Invoke

    "Block 5" Println
    "d3" Note !pitch
    ?fpoot  Invoke
    "e3b"  Note !pitch
    ?fpoot  Invoke
    "f3"  Note !pitch
    ?fpoot  Invoke
    "e3b"  Note !pitch
    ?fpoot  Invoke
    "d3" Note !pitch
    ?fpoot  Invoke
    "b2b"  Note !pitch
    ?fpoot  Invoke

    (?beat,3.5)/ !length
    {
        ?play-horn Do Done Normalise !signal
        ?mix-in invoke
        (?pos,(?beat,3)/)+ !pos
    }!fpoot

    "Block 6" Println
    "b2b" Note !pitch
    ?fpoot  Invoke
    "c3"  Note !pitch
    ?fpoot  Invoke
    "d3"  Note !pitch
    ?fpoot  Invoke
    "c3"  Note !pitch
    ?fpoot  Invoke
    "b2b" Note !pitch
    ?fpoot  Invoke
    "a2"  Note !pitch
    ?fpoot  Invoke

     500  !attack
    (?beat,6)* !length
    "b2b" Note !pitch
    2 !volume
   ?low-brass-poot6  Invoke

   ((?beat,6)*,>pos)+ !pos

    "Starting chord" Println
    "g4" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal    
    (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-12 !signal
    -12  !volume
    ?string-room invoke
    
    ?mix-in invoke

   "b5" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
     (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-12 !signal
    ?mix-in invoke

   "d5" note   !pitch
    (?beat,22.0)* !length
    ?play-strings Do Done !signal
     (((0,0),(6000,1),(?signal Length,1))NumericShape,>signal)Multiply dbs-9 !signal
    ?mix-in invoke

    "Bell 1" Println
    6000 !length 
    4    !dullness
    "g2" Note   !pitch
    ?play-bell Do Done !signal
    -6    !volume
    100   !room-size
    50    !drive-left 
    50    !drive-right
     0    !delay-left
     0    !delay-right
    ?mix-in invoke
    
    ((?beat,6)*,>pos)+ !pos
    
    "Bell 2" Println
    ?play-bell Do Done !signal
    ?mix-in invoke

    ((?beat,6)*,>pos)+ !pos
    0  !Volume
    "Bell 3" Println
    ?play-bell Do Done !signal
    ?mix-in invoke

    20000  !length 
    1      !dullness
    75    !delay-left
    "e2b" Note !pitch
    ?play-bell Do Done !sample
    120  !first
    50   !offset
    ?reflector Do Done !signal
    ?mix-in invoke


((500 Silence,>left)Concatenate,12,1 )DirectHighPass Normalise !left
((500 Silence,>right)Concatenate,12,1)DirectHighPass Normalise !right

"Injecting Rumble" Println
?left Length !length
{
    ?length WhiteNoise !signal
    (25,180,3)CreateDirectBandPass !filter
    (>signal,0.9,0.1,55 Period,?filter)FilteredResonantFilter Normalise !signal  
    (25,110,3)CreateDirectBandPass !filter
    (>signal,0.9,0.5,55 Period,?filter)FilteredResonantFilter Normalise
}!big
?big Do !leftLow
?big Do !rightLow

((2000 Silence,>left)Concatenate, >leftLow  Done)Mix Normalise !left
((2000 Silence,>right)Concatenate,>rightLow Done)Mix Normalise !right

    "Starting main reflector" Println
    80  !first
    0   !offset
    >left !sample
    ?reflector Do !left
    >right !sample
    ?reflector Do !right
    >left  Done Normalise !left
    >right Done Normalise !right

"Monitoring started" Println
(?left,?right) StereoMonitor
((2000 Silence,>left)Concatenate,(2000 Silence,>right)Concatenate)!bus
(?bus,"temp/tone.wav")WriteFile32

No comments:

Post a Comment