I have the PortAudio blocking API working, simple reading and writing to the
sound card works. PortAudio also has an async API where samples are fed to a
callback as they stream in. But i'm not sure how to define a RPython function
that will be called as a callback from C, is this even possible? I see some
references in the source of rffi that seems to suggest it is possible. Full
source code is here http://pastebin.com/6YHbT7CU
I'm passing the callback like this:
def stream_callback( *args ):
print 'stream callback'
return 0 # 0=continue, 1=complete, 2=abort
stream_callback_ptr = rffi.CCallback([], rffi.INT)
OpenDefaultStream = rffi.llexternal( 'Pa_OpenDefaultStream',
[
StreamRefPtr, # PaStream**
rffi.INT, # numInputChannels
rffi.INT, # numOutputChannels
rffi.INT, # sampleFormat
rffi.DOUBLE, # double sampleRate
rffi.INT, # unsigned long framesPerBuffer
#rffi.VOIDP, #PaStreamCallback *streamCallback
stream_callback_ptr,
rffi.VOIDP, #void *userData
],
rffi.INT, # return
compilation_info=eci,
_callable=stream_callback
)
entrypoint():
...
callback = lltype.nullptr( stream_callback_ptr.TO )
ok = OpenDefaultStream( streamptr, 2, 2, Int16, 22050.0, 512, callback,
userdata )
_______________________________________________
[email protected]
http://codespeak.net/mailman/listinfo/pypy-dev