Advertisement
BigWhale

PulseAudio in Python

May 1st, 2012
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.60 KB | None | 0 0
  1. # PulseAudio Source list:
  2.  
  3. import time
  4. from ctypes import *
  5. PA = CDLL('libpulse.so.0')
  6. PA_CONTEXT_UNCONNECTED = 0
  7. PA_CONTEXT_CONNECTING = 1
  8. PA_CONTEXT_AUTHORIZING = 2
  9. PA_CONTEXT_SETTING_NAME = 3
  10. PA_CONTEXT_READY = 4
  11. PA_CONTEXT_FAILED = 5
  12. PA_CONTEXT_TERMINATED = 6
  13. PA_OPERATION_RUNNING = 0
  14. PA_OPERATION_DONE = 1
  15. PA_OPERATION_CANCELLED = 2
  16. STRING = c_char_p
  17. size_t = c_ulong
  18. uint32_t = c_uint32
  19. uint8_t = c_uint8
  20. class pa_mainloop_api(Structure):
  21.     pass
  22. class pa_threaded_mainloop(Structure):
  23.     pass
  24. pa_threaded_mainloop._fields_ = []
  25. pa_threaded_mainloop_new = PA.pa_threaded_mainloop_new
  26. pa_threaded_mainloop_new.restype = POINTER(pa_threaded_mainloop)
  27. pa_threaded_mainloop_new.argtypes = []
  28. pa_threaded_mainloop_free = PA.pa_threaded_mainloop_free
  29. pa_threaded_mainloop_free.restype = None
  30. pa_threaded_mainloop_free.argtypes = [POINTER(pa_threaded_mainloop)]
  31. pa_threaded_mainloop_start = PA.pa_threaded_mainloop_start
  32. pa_threaded_mainloop_start.restype = c_int
  33. pa_threaded_mainloop_start.argtypes = [POINTER(pa_threaded_mainloop)]
  34. pa_threaded_mainloop_stop = PA.pa_threaded_mainloop_stop
  35. pa_threaded_mainloop_stop.restype = None
  36. pa_threaded_mainloop_stop.argtypes = [POINTER(pa_threaded_mainloop)]
  37. pa_threaded_mainloop_get_api = PA.pa_threaded_mainloop_get_api
  38. pa_threaded_mainloop_get_api.restype = POINTER(pa_mainloop_api)
  39. pa_threaded_mainloop_get_api.argtypes = [POINTER(pa_threaded_mainloop)]
  40. class pa_context(Structure):
  41.     pass
  42. pa_context._fields_ = []
  43. class pa_spawn_api(Structure):
  44.     pass
  45. class pa_stream(Structure):
  46.     pass
  47. pa_stream._fields_ = []
  48. class pa_operation(Structure):
  49.         pass
  50. class pa_source_info(Structure):
  51.     pass
  52. pa_source_info._fields_ = [
  53.     ('name', STRING),
  54.     ('index', uint32_t),
  55.     ('description', STRING),
  56. ]
  57. pa_context_flags = c_int
  58. pa_context_flags_t = pa_context_flags
  59. pa_context_state = c_int
  60. pa_context_state_t = pa_context_state
  61. pa_context_notify_cb_t = CFUNCTYPE(None, POINTER(pa_context), c_void_p)
  62. pa_context_success_cb_t = CFUNCTYPE(None, POINTER(pa_context), c_int, c_void_p)
  63. pa_stream_success_cb_t = CFUNCTYPE(None, POINTER(pa_stream), c_int, c_void_p)
  64. pa_stream_request_cb_t = CFUNCTYPE(None, POINTER(pa_stream), size_t, c_void_p)
  65. pa_stream_notify_cb_t = CFUNCTYPE(None, POINTER(pa_stream), c_void_p)
  66. pa_source_info_cb_t = CFUNCTYPE(None, POINTER(pa_context), POINTER(pa_source_info), c_int, c_void_p)
  67.  
  68. pa_context_new = PA.pa_context_new
  69. pa_context_new.restype = POINTER(pa_context)
  70. pa_context_new.argtypes = [POINTER(pa_mainloop_api), STRING]
  71. pa_context_connect = PA.pa_context_connect
  72. pa_context_connect.restype = c_int
  73. pa_context_connect.argtypes = [POINTER(pa_context), STRING, pa_context_flags_t, POINTER(pa_spawn_api)]
  74. pa_context_set_state_callback = PA.pa_context_set_state_callback
  75. pa_context_set_state_callback.restype = None
  76. pa_context_set_state_callback.argtypes = [POINTER(pa_context), pa_context_notify_cb_t, c_void_p]
  77. pa_context_get_state = PA.pa_context_get_state
  78. pa_context_get_state.restype = pa_context_state_t
  79. pa_context_get_state.argtypes = [POINTER(pa_context)]
  80. pa_stream_set_state_callback = PA.pa_stream_set_state_callback
  81. pa_stream_set_state_callback.restype = None
  82. pa_stream_set_state_callback.argtypes = [POINTER(pa_stream), pa_stream_notify_cb_t, c_void_p]
  83.  
  84. pa_context_get_source_info_list = PA.pa_context_get_source_info_list
  85. pa_context_get_source_info_list.restype = POINTER(pa_operation)
  86. pa_context_get_source_info_list.argtypes = [POINTER(pa_context), pa_source_info_cb_t, c_void_p]
  87.  
  88. def pa_state_cb(context, userdata):
  89.     global pa_state
  90.     state = pa_context_get_state(context)
  91.     if state in [PA_CONTEXT_UNCONNECTED, PA_CONTEXT_CONNECTING, PA_CONTEXT_AUTHORIZING,
  92.         PA_CONTEXT_SETTING_NAME]:
  93.         pa_state = 0
  94.     elif state == PA_CONTEXT_FAILED:
  95.         pa_state = 2
  96.     elif state == PA_CONTEXT_READY:
  97.         pa_state = 1
  98.     return  0
  99.  
  100. def pa_sourcelist_cb(context, source_info, eol, userdata):
  101.     if eol==0:
  102.         print("IDX:", source_info.contents.index, " ", source_info.contents.name, "--", source_info.contents.description)
  103.     return  0
  104.  
  105. pa_ml = pa_threaded_mainloop_new()
  106. pa_mlapi = pa_threaded_mainloop_get_api(pa_ml)
  107.  
  108. pa_ctx = pa_context_new(pa_mlapi, b"kazam-pulse")
  109.  
  110. error = -1
  111. pa_state = 0
  112. if pa_context_connect(pa_ctx, None, 0, None)!=0:
  113.     print("cannot connect..")
  114.     sys.exit(1)
  115.  
  116. pa_context_set_state_callback(pa_ctx, pa_context_notify_cb_t(pa_state_cb), None)
  117. ret = pa_threaded_mainloop_start(pa_ml)
  118.  
  119. ctc = pa_context_get_state(pa_ctx)
  120.  
  121. time.sleep(1)
  122. pa_context_get_source_info_list(pa_ctx, pa_source_info_cb_t(pa_sourcelist_cb), None);
  123. time.sleep(1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement