1 #include "alutInternal.h"
4 _alutCodecLinear (ALvoid *data, size_t length, ALint numChannels,
5 ALint bitsPerSample, ALfloat sampleFrequency)
7 return _alutBufferDataConstruct (data, length, numChannels, bitsPerSample,
12 _alutCodecPCM8s (ALvoid *data, size_t length, ALint numChannels,
13 ALint bitsPerSample, ALfloat sampleFrequency)
15 int8_t *d = (int8_t *) data;
17 for (i = 0; i < length; i++)
21 return _alutBufferDataConstruct (data, length, numChannels, bitsPerSample,
26 _alutCodecPCM16 (ALvoid *data, size_t length, ALint numChannels,
27 ALint bitsPerSample, ALfloat sampleFrequency)
29 int16_t *d = (int16_t *) data;
30 size_t i, l = length / 2;
31 for (i = 0; i < l; i++)
34 d[i] = ((x << 8) & 0xFF00) | ((x >> 8) & 0x00FF);
36 return _alutBufferDataConstruct (data, length, numChannels, bitsPerSample,
41 * From: http://www.multimedia.cx/simpleaudio.html#tth_sEc6.1
44 mulaw2linear (uint8_t mulawbyte)
46 static const int16_t exp_lut[8] = {
47 0, 132, 396, 924, 1980, 4092, 8316, 16764
49 int16_t sign, exponent, mantissa, sample;
50 mulawbyte = ~mulawbyte;
51 sign = (mulawbyte & 0x80);
52 exponent = (mulawbyte >> 4) & 0x07;
53 mantissa = mulawbyte & 0x0F;
54 sample = exp_lut[exponent] + (mantissa << (exponent + 3));
63 _alutCodecULaw (ALvoid *data, size_t length, ALint numChannels,
64 ALint bitsPerSample, ALfloat sampleFrequency)
66 uint8_t *d = (uint8_t *) data;
67 int16_t *buf = (int16_t *) _alutMalloc (length * 2);
73 for (i = 0; i < length; i++)
75 buf[i] = mulaw2linear (d[i]);
78 return _alutBufferDataConstruct (buf, length * 2, numChannels,
79 bitsPerSample, sampleFrequency);
83 * From: http://www.multimedia.cx/simpleaudio.html#tth_sEc6.1
85 #define SIGN_BIT (0x80) /* Sign bit for a A-law byte. */
86 #define QUANT_MASK (0xf) /* Quantization field mask. */
87 #define SEG_SHIFT (4) /* Left shift for segment number. */
88 #define SEG_MASK (0x70) /* Segment field mask. */
90 alaw2linear (uint8_t a_val)
94 t = (a_val & QUANT_MASK) << 4;
95 seg = ((int16_t) a_val & SEG_MASK) >> SEG_SHIFT;
108 return (a_val & SIGN_BIT) ? t : -t;
112 _alutCodecALaw (ALvoid *data, size_t length, ALint numChannels,
113 ALint bitsPerSample, ALfloat sampleFrequency)
115 uint8_t *d = (uint8_t *) data;
116 int16_t *buf = (int16_t *) _alutMalloc (length * 2);
122 for (i = 0; i < length; i++)
124 buf[i] = alaw2linear (d[i]);
127 return _alutBufferDataConstruct (buf, length * 2, numChannels,
128 bitsPerSample, sampleFrequency);