pianod2
multisource multiuser scriptable networked music player
audiooutput.h
Go to the documentation of this file.
1 
9 #pragma once
10 
11 #include <config.h>
12 
13 #include "fundamentals.h"
14 
16 namespace Audio {
17  class LavGenericAdapter;
18 
21  Big,
22  Little
23  };
26  Unsigned
27  };
29  struct AudioFormat {
30  int bits = 16;
31  int rate = 44100;
32  int channels = 2;
36  bool isNativeArrangement () const;
39  int sampleGroupSize () const {
40  assert ((bits & 0x07) == 0);
41  return channels * ((bits + 7) / 8);
42  };
44  };
45 
47  class AudioException : public std::exception {
48  protected:
49  std::string reason;
50  public:
51  AudioException (const char *why = "") : reason (why) { };
52  AudioException (std::string why) : reason (why) { };
53  virtual const char *what() const noexcept override { return reason.c_str(); };
54  };
55 
56 
58  class Initializer {
59  public:
60  Initializer ();
61  ~Initializer ();
62  };
63 
65  class Output {
66  protected:
67  char bytes_per_sample_set; // Bytes/channel * number of channels
68  public:
69  virtual ~Output () { };
74  virtual bool play (void *buffer, unsigned number_of_bytes) = 0;
75  inline char bytesPerSample() { return bytes_per_sample_set; };
76 
77  static bool isValidOutput (const AudioSettings &settings);
78  static bool outputCanCrossfade (const AudioSettings &settings);
79 
80  static Output *getOutput (const AudioSettings &settings,
81  const AudioFormat &format);
82  static void reportLibrariesAndVersions (int verbose);
83  };
84 }
85 
Exception for audio output problems.
Definition: audiooutput.h:47
AudioException(const char *why="")
Definition: audiooutput.h:51
virtual const char * what() const noexcept override
Definition: audiooutput.h:53
AudioException(std::string why)
Definition: audiooutput.h:52
std::string reason
Definition: audiooutput.h:49
Initialize the audio output libraries; uninitialize on destruction.
Definition: audiooutput.h:58
~Initializer()
Uninitialize the audio libraries prior to shutdown.
Definition: audiooutput.cpp:246
Initializer()
Initialize the audio libraries on startup, if required.
Definition: audiooutput.cpp:234
Base audio output class (abstract).
Definition: audiooutput.h:65
char bytes_per_sample_set
Definition: audiooutput.h:67
virtual bool play(void *buffer, unsigned number_of_bytes)=0
Play output.
char bytesPerSample()
Definition: audiooutput.h:75
static bool isValidOutput(const AudioSettings &settings)
Check if audio settings are valid.
Definition: audiooutput.cpp:120
virtual ~Output()
Definition: audiooutput.h:69
static Output * getOutput(const AudioSettings &settings, const AudioFormat &format)
Factory gets whatever kind of output is best, or requested by the audio settings.
Definition: audiooutput.cpp:160
static void reportLibrariesAndVersions(int verbose)
Report audio libraries in use, and their versions.
Definition: audiooutput.cpp:191
static bool outputCanCrossfade(const AudioSettings &settings)
Check if audio settings are valid.
Definition: audiooutput.cpp:138
Essential data structures and support.
Classes dealing with audio output drivers and decoding/playing audio files.
Definition: audiooutput.cpp:48
SampleSignedness
Definition: audiooutput.h:24
@ Signed
Definition: audiooutput.h:25
@ Unsigned
Definition: audiooutput.h:26
SampleArrangement
Definition: audiooutput.h:19
@ Native
Definition: audiooutput.h:20
@ Little
Definition: audiooutput.h:22
@ Big
Definition: audiooutput.h:21
Audio format, somewhat ripped off from libao.
Definition: audiooutput.h:29
int bits
Bits per sample in a single channel
Definition: audiooutput.h:30
bool isNativeArrangement() const
Determine whether the byte ordering matches the native ordering.
Definition: audiooutput.cpp:87
SampleArrangement realArrangement() const
Return the byte ordering scheme, translating "native" ordering into big or little or an exception.
Definition: audiooutput.cpp:79
int sampleGroupSize() const
Get the size of sample data.
Definition: audiooutput.h:39
SampleArrangement arrangement
Definition: audiooutput.h:33
static SampleArrangement nativeArrangement(int bits)
Determine the byte ordering of the machine.
Definition: audiooutput.cpp:98
SampleSignedness signedness
Definition: audiooutput.h:34
int rate
Samples per second in a single channel
Definition: audiooutput.h:31
int channels
Definition: audiooutput.h:32
Audio output device & driver parameters.
Definition: fundamentals.h:52