aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/audio_format.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/audio_format.h b/src/audio_format.h
index 6373d1e80..cf067b705 100644
--- a/src/audio_format.h
+++ b/src/audio_format.h
@@ -23,13 +23,42 @@
#include <stdint.h>
#include <stdbool.h>
+/**
+ * This structure describes the format of a raw PCM stream.
+ */
struct audio_format {
+ /**
+ * The sample rate in Hz. A better name for this attribute is
+ * "frame rate", because technically, you have two samples per
+ * frame in stereo sound.
+ */
uint32_t sample_rate;
+
+ /**
+ * The number of significant bits per sample. Samples are
+ * currently always signed. Supported values are 8, 16, 24,
+ * 32. 24 bit samples are packed in 32 bit integers.
+ */
uint8_t bits;
+
+ /**
+ * The number of channels. Only mono (1) and stereo (2) are
+ * fully supported currently.
+ */
uint8_t channels;
+
+ /**
+ * If zero, then samples are stored in host byte order. If
+ * nonzero, then samples are stored in the reverse host byte
+ * order.
+ */
uint8_t reverse_endian;
};
+/**
+ * Clears the #audio_format object, i.e. sets all attributes to an
+ * undefined (invalid) value.
+ */
static inline void audio_format_clear(struct audio_format *af)
{
af->sample_rate = 0;
@@ -38,6 +67,10 @@ static inline void audio_format_clear(struct audio_format *af)
af->reverse_endian = 0;
}
+/**
+ * Initializes an #audio_format object, i.e. sets all
+ * attributes to valid values.
+ */
static inline void audio_format_init(struct audio_format *af,
uint32_t sample_rate,
uint8_t bits, uint8_t channels)
@@ -48,6 +81,10 @@ static inline void audio_format_init(struct audio_format *af,
af->reverse_endian = 0;
}
+/**
+ * Checks whether the specified #audio_format object has a defined
+ * value.
+ */
static inline bool audio_format_defined(const struct audio_format *af)
{
return af->sample_rate != 0;
@@ -117,17 +154,28 @@ static inline unsigned audio_format_sample_size(const struct audio_format *af)
return 4;
}
+/**
+ * Returns the size of each full frame in bytes.
+ */
static inline unsigned
audio_format_frame_size(const struct audio_format *af)
{
return audio_format_sample_size(af) * af->channels;
}
+/**
+ * Returns the floating point factor which converts a time span to a
+ * storage size in bytes.
+ */
static inline double audio_format_time_to_size(const struct audio_format *af)
{
return af->sample_rate * audio_format_frame_size(af);
}
+/**
+ * Returns the floating point factor which converts a storage size in
+ * bytes to a time span.
+ */
static inline double audioFormatSizeToTime(const struct audio_format *af)
{
return 1.0 / audio_format_time_to_size(af);