|
-
- from __future__ import print_function
- import threading
- 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 range(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': 0, 'nChannels': 1, 'firstChannel': 0}
- iParams = {'deviceId': 0, '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()
|