#pragma once #include #include #include #include "../3rd/Subject.h" class PulseAudioCPP : public Subject { public: PulseAudioCPP(std::string appName); virtual ~PulseAudioCPP(); void createStream(std::string name); char* getBuffer() { return mp_buffer; }; unsigned int getBufferSize() { return m_bytesInBuffer; }; private: static void subscriptionCB(pa_context* c, pa_subscription_event_type_t t, uint32_t idx, void* userdata); static void contextCB(pa_context* c, int success, void* userdata); static void contextReadyCB(pa_context* context, void* userdata); //stream callback void readStream(); static void streamSuccessCB (pa_stream* s, int success, void* userdata); static void streamRequestCB (pa_stream* p, size_t nbytes, void* userdata); static void streamNotifyCB (pa_stream* p, void* userdata); static void streamEventCB (pa_stream* p, const char* name, pa_proplist* pl, void* userdata); private: pa_threaded_mainloop* mp_threadedLoop; pa_mainloop_api* mp_mainLoop; pa_context* mp_context; std::list mp_streamList; char* mp_buffer; unsigned int m_bytesInBuffer; };