File: utilities.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 (66 lines) | stat: -rw-r--r-- 1,796 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
65
66
import math

class BaseStart(object):
    "Base class for context manager to start and stop the audio server automatically."

    def __init__(self, audio_server):
        self._audio_server = audio_server
        self._sr = audio_server.getSamplingRate()
        self._bs = audio_server.getBufferSize()

    def __enter__(self):
        self._audio_server.start()
        return self

    def __exit__(self, type, value, traceback):
        self._audio_server.stop()

    def advance(self, dur):
        numbuf = int(math.ceil(dur * self._sr / self._bs))
        for i in range(numbuf):
            self._audio_server.process()

    def advanceOneBuf(self):
        self._audio_server.process()

class Start(BaseStart):
    "Context manager to start and stop the audio server automatically."

    def __init__(self, audio_server):
        BaseStart.__init__(self, audio_server)


class StartAndAdvance(BaseStart):
    """
    Context manager to start and stop the audio server automatically.
    
    Advance `adv_time` seconds just after entering the context.

    """

    def __init__(self, audio_server, adv_time):
        BaseStart.__init__(self, audio_server)
        self._numbuf = int(math.ceil(adv_time * self._sr / self._bs))

    def __enter__(self):
        self._audio_server.start()
        for i in range(self._numbuf):
            self._audio_server.process()
        return self


class StartAndAdvanceOneBuf(BaseStart):
    """
    Context manager to start and stop the audio server automatically.
    
    Advance one buffer size just after entering the context.

    """

    def __init__(self, audio_server):
        BaseStart.__init__(self, audio_server)

    def __enter__(self):
        self._audio_server.start()
        self._audio_server.process()
        return self