File: 07_split_sideband_synthesis.py

package info (click to toggle)
python-pyo 1.0.6-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,332 kB
  • sloc: python: 135,133; ansic: 127,822; javascript: 16,116; sh: 395; makefile: 388; cpp: 242
file content (64 lines) | stat: -rw-r--r-- 1,853 bytes parent folder | download | duplicates (3)
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/usr/bin/env python
# encoding: utf-8
"""
Split-Sideband Synthesis. Variation of three well known distortion techniques,
Waveshaping, Singlesideband modulation and Frequency Modulation.

Based on the article :
"SPLIT-SIDEBAND SYNTHESIS" from Victor Lazzarini, Joseph Timoney, Thomas Lysaght
Ann Arbor, MPublishing, University of Michigan Library, August 2008

"""
from pyo import *
import math

s = Server(duplex=0).boot()

twopi = 2 * math.pi
oneOverTwoPi = 1.0 / twopi
sinus = HarmTable()

mod = RandInt(max=8, freq=0.25, mul=0.05, add=29.8)

index = Sig([12.649, 9], mul=oneOverTwoPi)
index.ctrl(map_list=[SLMap(0, 20, "lin", "value", [12.649, 9])], title="Indexes")
car = Sig([150, 484.324])
car.ctrl(
    map_list=[SLMap(20, 2000, "log", "value", [150, 484.324])], title="Carrier frequencies",
)

a1 = Sine(freq=mod, mul=index[0])
a2 = Pointer(table=sinus, index=a1 + 0.25)
a3 = Pointer(table=sinus, index=a1)
even = Hilbert(a2)
odd = Hilbert(a3)
ac = Sine(freq=car[0], mul=0.5)
ad = Sine(freq=car[0], phase=0.25, mul=0.5)
evenReal = even["real"] * ac
oddReal = odd["real"] * ac
evenImag = even["imag"] * ad
oddImag = odd["imag"] * ad
evenUpper = evenReal + evenImag
oddUpper = oddReal + oddImag
evenLower = evenReal - evenImag
oddLower = oddReal - oddImag

sa1 = Sine(freq=oddLower * car[0], mul=index[1])
sa2 = Pointer(table=sinus, index=sa1 + 0.25)
sa3 = Pointer(table=sinus, index=sa1)
seven = Hilbert(sa2)
sodd = Hilbert(sa3)
sac = Sine(freq=car[1], mul=0.5)
sad = Sine(freq=car[1], phase=0.25, mul=0.5)
sevenReal = seven["real"] * sac
soddReal = sodd["real"] * sac
sevenImag = seven["imag"] * sad
soddImag = sodd["imag"] * sad
sevenUpper = sevenReal + sevenImag
soddUpper = soddReal + soddImag
sevenLower = sevenReal - sevenImag
soddLower = soddReal - soddImag

mix = Mix([sevenLower, sevenUpper], voices=2, mul=0.2).out()

s.gui(locals())