mirror of
https://github.com/Inori/GPCS4.git
synced 2025-04-02 10:31:52 -04:00
70 lines
1.4 KiB
Python
70 lines
1.4 KiB
Python
|
|
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()
|
|
|