pianod2
multisource multiuser scriptable networked music player
libsdloutput.h
Go to the documentation of this file.
1 
12 #pragma once
13 
14 #ifndef pianod2_libsdloutput_h
15 #define pianod2_libsdloutput_h
16 
17 #include <mutex>
18 #include <condition_variable>
19 
20 #pragma GCC diagnostic push
21 #pragma GCC diagnostic ignored "-Wdocumentation"
22 #include <SDL/SDL.h>
23 #include <SDL/SDL_version.h>
24 #include <SDL/SDL_audio.h>
25 #pragma GCC diagnostic pop
26 
27 #include "audio/audiooutput.h"
28 
29 namespace Audio {
31  class LibsdlOutput : public Output {
32  private:
33 #if SDL_VERSION >= 2
34  SDL_AudioDeviceID device_id;
35 #endif
36  static std::mutex sdl_mutex;
37  std::mutex data_mutex;
38  std::condition_variable notifier;
39 
40  using BufferIndex = uint32_t;
41 
42  uint8_t *audio_cirque = nullptr;
43  const BufferIndex block_samples = 0x400;
44  const BufferIndex block_count = 0x10;
47  volatile BufferIndex cirque_write = 0; // Only written by play().
48  volatile BufferIndex cirque_read = 0; // Only writte by fetch().
49  public:
50  LibsdlOutput (const AudioSettings &settings,
51  const AudioFormat &format);
52  virtual ~LibsdlOutput () override;
53  void fetch (Uint8 *buffer, int length);
54  virtual bool play (void *buffer, unsigned numberOfBytes) override;
55  };
56 }
57 
58 #endif
Class to abstract away details of audio output system is in use.
Audio output class utilizing SDL for output.
Definition: libsdloutput.h:31
std::condition_variable notifier
Definition: libsdloutput.h:38
const BufferIndex block_count
Definition: libsdloutput.h:44
const BufferIndex cirque_size
Definition: libsdloutput.h:46
LibsdlOutput(const AudioSettings &settings, const AudioFormat &format)
Open audio output using libAO.
Definition: libsdloutput.cpp:37
uint32_t BufferIndex
Definition: libsdloutput.h:40
const BufferIndex block_samples
Definition: libsdloutput.h:43
volatile BufferIndex cirque_read
Definition: libsdloutput.h:48
virtual ~LibsdlOutput() override
Definition: libsdloutput.cpp:161
volatile BufferIndex cirque_write
Definition: libsdloutput.h:47
static std::mutex sdl_mutex
Mutex to restrict concurrent calls into libsdl API.
Definition: libsdloutput.h:36
virtual bool play(void *buffer, unsigned numberOfBytes) override
Play output.
Definition: libsdloutput.cpp:121
void fetch(Uint8 *buffer, int length)
Fetch output as requested.
Definition: libsdloutput.cpp:92
std::mutex data_mutex
Definition: libsdloutput.h:37
const BufferIndex cirque_samples
Definition: libsdloutput.h:45
uint8_t * audio_cirque
Definition: libsdloutput.h:42
Base audio output class (abstract).
Definition: audiooutput.h:65
Classes dealing with audio output drivers and decoding/playing audio files.
Definition: audiooutput.cpp:48
Audio format, somewhat ripped off from libao.
Definition: audiooutput.h:29
Audio output device & driver parameters.
Definition: fundamentals.h:52