47#define GSM_FRAME_SIZE 33
48#define MSGSM_FRAME_SIZE 65
49#define MSGSM_DATA_OFFSET 60
50#define GSM_SAMPLES 160
51#define MSGSM_SAMPLES (2*GSM_SAMPLES)
55{0x48,0x17,0xD6,0x84,0x02,0x80,0x24,0x49,0x92,0x24,0x89,0x02,0x80,0x24,0x49
56,0x92,0x24,0x89,0x02,0x80,0x24,0x49,0x92,0x24,0x89,0x02,0x80,0x24,0x49,0x92
57,0x24,0x09,0x82,0x74,0x61,0x4D,0x28,0x00,0x48,0x92,0x24,0x49,0x92,0x28,0x00
58,0x48,0x92,0x24,0x49,0x92,0x28,0x00,0x48,0x92,0x24,0x49,0x92,0x28,0x00,0x48
59,0x92,0x24,0x49,0x92,0x00};
68#if __BYTE_ORDER == __LITTLE_ENDIAN
74#if __BYTE_ORDER == __BIG_ENDIAN
76 (((((b) ) & 0xFF) << 24) | \
77 ((( (b) >> 8) & 0xFF) << 16) | \
78 ((( (b) >> 16) & 0xFF) << 8) | \
79 ((( (b) >> 24) & 0xFF) ))
81 (((((b) ) & 0xFF) << 8) | \
82 ((( (b) >> 8) & 0xFF) ))
83#define ltohl(b) htoll(b)
84#define ltohs(b) htols(b)
86#error "Endianess not defined"
93 int type, size, formtype;
98 if (fread(&
type, 1, 4, f) != 4) {
102 if (fread(&size, 1, 4, f) != 4) {
106#if __BYTE_ORDER == __BIG_ENDIAN
109 if (fread(&formtype, 1, 4, f) != 4) {
113 if (memcmp(&
type,
"RIFF", 4)) {
117 if (memcmp(&formtype,
"WAVE", 4)) {
121 if (fread(&fmt, 1, 4, f) != 4) {
125 if (memcmp(&fmt,
"fmt ", 4)) {
129 if (fread(&hsize, 1, 4, f) != 4) {
133 if (ltohl(hsize) != 20) {
137 if (fread(&format, 1, 2, f) != 2) {
141 if (ltohs(format) != 49) {
145 if (fread(&
chans, 1, 2, f) != 2) {
149 if (ltohs(
chans) != 1) {
153 if (fread(&freq, 1, 4, f) != 4) {
162 if (fread(&freq, 1, 4, f) != 4) {
167 if (fread(&freq, 1, 4, f) != 4) {
172 if (fread(&freq, 1, 4, f) != 4) {
177 if (fread(&fact, 1, 4, f) != 4) {
181 if (memcmp(&fact,
"fact", 4)) {
186 if (fread(&fact, 1, 4, f) != 4) {
190 if (fread(&fact, 1, 4, f) != 4) {
195 if (fread(&data, 1, 4, f) != 4) {
199 if (memcmp(&data,
"data", 4)) {
204 if (fread(&data, 1, 4, f) != 4) {
214 int datalen, filelen, samples;
217 fseek(f, 0, SEEK_END);
222 datalen = htoll(bytes);
228 if (fseek(f, 4, SEEK_SET)) {
232 if (fwrite(&filelen, 1, 4, f) != 4) {
236 if (fseek(f, 48, SEEK_SET)) {
240 if (fwrite(&samples, 1, 4, f) != 4) {
244 if (fseek(f, 56, SEEK_SET)) {
248 if (fwrite(&datalen, 1, 4, f) != 4) {
252 if (fseeko(f, cur, SEEK_SET)) {
262 unsigned int sample_rate = htoll(8000);
264 unsigned int byte_sample_rate = htoll(1625);
266 unsigned int fmtsize = htoll(20);
268 unsigned short fmt = htols(49);
270 unsigned short chans = htols(1);
274 unsigned short bits_per_sample = htols(2);
278 unsigned int factsize = htoll(4);
280 unsigned int num_samples = htoll(0);
282 unsigned int size = htoll(0);
286 if (fwrite(
"RIFF", 1, 4, f) != 4) {
291 if (fwrite(&size, 1, 4, f) != 4) {
296 if (fwrite(
"WAVE", 1, 4, f) != 4) {
301 if (fwrite(
"fmt ", 1, 4, f) != 4) {
306 if (fwrite(&fmtsize, 1, 4, f) != 4) {
311 if (fwrite(&fmt, 1, 2, f) != 2) {
316 if (fwrite(&
chans, 1, 2, f) != 2) {
321 if (fwrite(&sample_rate, 1, 4, f) != 4) {
326 if (fwrite(&byte_sample_rate, 1, 4, f) != 4) {
331 if (fwrite(&block_align, 1, 4, f) != 4) {
336 if (fwrite(&bits_per_sample, 1, 2, f) != 2) {
341 if (fwrite(&extra_format, 1, 2, f) != 2) {
346 if (fwrite(
"fact", 1, 4, f) != 4) {
351 if (fwrite(&factsize, 1, 4, f) != 4) {
356 if (fwrite(&num_samples, 1, 4, f) != 4) {
361 if (fwrite(
"data", 1, 4, f) != 4) {
366 if (fwrite(&size, 1, 4, f) != 4) {
399 if (s->
mode == O_RDONLY) {
425 if (res && res != 1) {
460 conv66((
unsigned char *) s->
buf, msdata);
483 if ((cur = ftello(fs->
f)) < 0) {
488 if (fseeko(fs->
f, 0, SEEK_END) < 0) {
494 if ((
max = ftello(fs->
f)) < 0) {
501 if (whence == SEEK_SET)
502 offset = distance +
min;
504 offset = distance + cur;
505 else if (whence == SEEK_END)
506 offset =
max - distance;
513 }
else if (offset >
max) {
515 fseek(fs->
f, 0, SEEK_END);
523 return fseeko(fs->
f, offset, SEEK_SET);
531 if ((fd = fileno(fs->
f)) < 0) {
535 if ((cur = ftello(fs->
f)) < 0) {
540 if (ftruncate(fd, cur)) {
549 offset = ftello(fs->
f);
Asterisk main include file. File version handling, generic pbx functions.
#define DEFAULT_SAMPLE_RATE
static struct chans chans
Asterisk architecture endianess compatibility definitions.
static int len(struct ast_channel *chan, const char *cmd, char *data, char *buf, size_t buflen)
#define AST_FRAME_SET_BUFFER(fr, _base, _ofs, _datalen)
#define AST_FRIENDLY_OFFSET
Offset into a frame's data buffer.
Asterisk module definitions.
#define AST_MODULE_INFO(keystr, flags_to_set, desc, fields...)
@ AST_MODULE_SUPPORT_CORE
#define ASTERISK_GPL_KEY
The text the key() function should return.
@ AST_MODULE_LOAD_SUCCESS
@ AST_MODULE_LOAD_DECLINE
Module has failed to load, may be in an inconsistent state.
static void conv66(gsm_byte *d, wav_byte *c)
static void conv65(wav_byte *c, gsm_byte *d)
This structure is allocated by file.c in one chunk, together with buf_size and desc_size bytes of mem...
struct ast_frame fr
frame produced by read, typically
struct ast_format * format
Data structure associated with a single frame of data.
struct ast_frame_subclass subclass
union ast_frame::@226 data