summaryrefslogtreecommitdiff
path: root/contrib/python/pyrtaudio/PyRtAudioTest.py
blob: 1966ce57ab5d160c8be326ae7886f5ea17e6779b (plain)
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
67
68
69
70

import rtaudio as rt

from math import cos

import struct


class audio_generator:
    def __init__(self):
        self.idx = -1
        self.freq = 440.
    def __call__(self):
	self.idx += 1
	if self.idx%48000 == 0:
            self.freq *= 2**(1/12.)	
        return 0.5*cos(2.*3.1416*self.freq*self.idx/48000.)


class callback:
    def __init__(self, gen):
        self.gen = gen
	self.i = 0
    def __call__(self,playback, capture):
        [struct.pack_into("f", playback, 4*o, self.gen()) for o in xrange(256)]
	self.i = self.i + 256
	if self.i > 48000*10:
            print '.'
            return 1

dac = rt.RtAudio()

n = dac.getDeviceCount()
print 'Number of devices available: ', n

for i in range(n):
    try:
        print dac.getDeviceInfo(i)
    except rt.RtError as e:
	print e


print 'Default output device: ', dac.getDefaultOutputDevice()
print 'Default input device: ', dac.getDefaultInputDevice()

print 'is stream open: ', dac.isStreamOpen()
print 'is stream running: ', dac.isStreamRunning()

oParams = {'deviceId': 1, 'nChannels': 1, 'firstChannel': 0}
iParams = {'deviceId': 1, 'nChannels': 1, 'firstChannel': 0}

try:
  dac.openStream(oParams,oParams,48000,256,callback(audio_generator()) )
except rt.RtError as e:
  print e
else:
  dac.startStream()

  import time
  print 'latency: ', dac.getStreamLatency()

  while (dac.isStreamRunning()):
    time.sleep(0.1)

  print dac.getStreamTime()

  dac.stopStream()
  dac.abortStream()
  dac.closeStream()