Audaspace 1.7.0
A high level audio library.
Loading...
Searching...
No Matches
PulseAudioDevice.h
Go to the documentation of this file.
1/*******************************************************************************
2 * Copyright 2009-2016 Jörg Müller
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 ******************************************************************************/
16
17#pragma once
18
19#ifdef PULSEAUDIO_PLUGIN
20#define AUD_BUILD_PLUGIN
21#endif
22
28
29#include <pulse/pulseaudio.h>
30
32
34
38class AUD_PLUGIN_API PulseAudioDevice : public MixingThreadDevice
39{
40private:
41 bool m_corked;
42
43 pa_threaded_mainloop* m_mainloop;
44 pa_context* m_context;
45 pa_stream* m_stream;
46 pa_context_state_t m_state;
47
48 int m_buffersize;
49 uint32_t m_underflows;
50
52 pa_usec_t m_synchronizerStartTime{0};
53 double m_synchronizerStartPosition{0.0};
54
55 AUD_LOCAL void preMixingWork(bool playing) override;
56
62 AUD_LOCAL static void PulseAudio_state_callback(pa_context* context, void* data);
63
70 AUD_LOCAL static void PulseAudio_request(pa_stream* stream, size_t total_bytes, void* data);
71
72 // delete copy constructor and operator=
73 PulseAudioDevice(const PulseAudioDevice&) = delete;
74 PulseAudioDevice& operator=(const PulseAudioDevice&) = delete;
75
76protected:
77 virtual void playing(bool playing);
78
79public:
87 PulseAudioDevice(const std::string &name, DeviceSpecs specs, int buffersize = AUD_DEFAULT_BUFFER_SIZE);
88
93
94 virtual void seekSynchronizer(double time);
95 virtual double getSynchronizerPosition();
96 virtual void playSynchronizer();
97 virtual void stopSynchronizer();
98
102 static void registerPlugin();
103};
104
#define AUD_DEFAULT_BUFFER_SIZE
The default playback buffer size of a device.
Definition Audaspace.h:103
#define AUD_NAMESPACE_END
Closes the audaspace namespace aud.
Definition Audaspace.h:119
#define AUD_LOCAL
Used for hiding symbols from export in the shared library.
Definition Audaspace.h:80
#define AUD_NAMESPACE_BEGIN
Opens the audaspace namespace aud.
Definition Audaspace.h:116
#define AUD_PLUGIN_API
Used for exporting symbols in the shared library.
Definition Audaspace.h:94
The MixingThreadDevice class.
virtual void preMixingWork(bool playing)
Called every iteration in the mixing thread before mixing.
static void registerPlugin()
Registers this plugin.
virtual void playing(bool playing)
This function tells the device, to start or pause playback.
virtual ~PulseAudioDevice()
Closes the PulseAudio audio device.
PulseAudioDevice(const std::string &name, DeviceSpecs specs, int buffersize=AUD_DEFAULT_BUFFER_SIZE)
Opens the PulseAudio audio device for playback.
Specification of a sound device.
Definition Specification.h:129