~ubuntu-branches/ubuntu/vivid/python-pyo/vivid-proposed

« back to all changes in this revision

Viewing changes to doc-sphinx/source/tutorials/pyotableobject1.rst

  • Committer: Package Import Robot
  • Author(s): Tiago Bortoletto Vaz
  • Date: 2013-05-28 14:27:12 UTC
  • mfrom: (1.1.5)
  • Revision ID: package-import@ubuntu.com-20130528142712-5ycu7udwjc4udkud
Tags: 0.6.6+svn1108-1
New upstream commits adding 6 new filters and a couple of bug fixes.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
Example of a custom PyoTableObject
 
2
====================================
 
3
 
 
4
.. code-block:: python
 
5
 
 
6
    from pyo import *
 
7
 
 
8
    class TriTable(PyoTableObject):
 
9
        """
 
10
        Square waveform generator.
 
11
 
 
12
        Generates square waveforms made up of fixed number of harmonics.
 
13
 
 
14
        :Parent: :py:class:`PyoTableObject`
 
15
 
 
16
        :Args:
 
17
 
 
18
            order : int, optional
 
19
                Number of harmonics square waveform is made of. The waveform will 
 
20
                contains `order` odd harmonics. Defaults to 10.
 
21
            size : int, optional
 
22
                Table size in samples. Defaults to 8192.
 
23
 
 
24
        >>> s = Server().boot()
 
25
        >>> s.start()
 
26
        >>> t = TriTable(order=15).normalize()
 
27
        >>> a = Osc(table=t, freq=[199,200], mul=.2).out()
 
28
 
 
29
        """
 
30
        def __init__(self, order=10, size=8192):
 
31
            PyoTableObject.__init__(self, size)
 
32
            self._order = order
 
33
            self._tri_table = HarmTable(self._create_list(order), size)
 
34
            self._base_objs = self._tri_table.getBaseObjects()
 
35
 
 
36
        def _create_list(self, order):
 
37
            # internal method used to compute the harmonics's weight
 
38
            l = []
 
39
            ph = 1.0
 
40
            for i in range(1,order*2):
 
41
                if i % 2 == 0:
 
42
                    l.append(0)
 
43
                else:
 
44
                    l.append(ph / (i*i))
 
45
                    ph *= -1
 
46
            return l
 
47
        
 
48
        def setOrder(self, x):
 
49
            """
 
50
            Change the `order` attribute and redraw the waveform.
 
51
            
 
52
            :Args:
 
53
            
 
54
                x : int
 
55
                    New number of harmonics
 
56
 
 
57
            """      
 
58
            self._order = x
 
59
            self._tri_table.replace(self._create_list(x))
 
60
            self.normalize()
 
61
            self.refreshView()
 
62
 
 
63
        @property
 
64
        def order(self): 
 
65
            """int. Number of harmonics triangular waveform is made of."""
 
66
            return self._order
 
67
        @order.setter
 
68
        def order(self, x): self.setOrder(x)
 
69
 
 
70
    # Run the script to test the TriTable object.
 
71
    if __name__ == "__main__":
 
72
        s = Server().boot()
 
73
        t = TriTable(10, 8192)
 
74
        t.normalize()
 
75
        t.view()
 
76
        a = Osc(t, 500, mul=.3).out()
 
77
        s.gui(locals())
 
78