| .\" |
| .\" Copyright 1992 by Jutta Degener and Carsten Bormann, Technische |
| .\" Universitaet Berlin. See the accompanying file "COPYRIGHT" for |
| .\" details. THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE. |
| .\" |
| .PU |
| .TH GSM 3 |
| .SH NAME |
| gsm_create, gsm_destroy, gsm_encode, gsm_decode \(em GSM\ 06.10 lossy sound compression |
| .SH SYNOPSIS |
| .PP |
| #include "gsm.h" |
| .PP |
| gsm gsm_create(); |
| .PP |
| void gsm_encode(handle, src, dst) |
| .br |
| gsm handle; |
| .br |
| gsm_signal src[160]; |
| .br |
| gsm_frame dst; |
| .PP |
| int gsm_decode(handle, src, dst) |
| .br |
| gsm handle; |
| .br |
| gsm_frame src; |
| .br |
| gsm_signal dst[160]; |
| .PP |
| void gsm_destroy(handle) |
| .br |
| gsm handle; |
| .br |
| .SH "DESCRIPTION" |
| Gsm is an implementation of the final draft GSM 06.10 |
| standard for full-rate speech transcoding. |
| .PP |
| gsm_create() initializes a gsm pass and returns a 'gsm' object |
| which can be used as a handle in subsequent calls to gsm_decode(), |
| gsm_encode() or gsm_destroy(). |
| .PP |
| gsm_encode() encodes an array of 160 13-bit samples (given as |
| gsm_signal's, signed integral values of at least 16 bits) into |
| a gsm_frame of 33 bytes. |
| (gsm_frame is a type defined as an array of 33 gsm_bytes in gsm.h.) |
| .PP |
| gsm_decode() decodes a gsm_frame into an array of 160 13-bit samples |
| (given as gsm_signals), which sound rather like what you handed to |
| gsm_encode() on the other side of the wire. |
| .PP |
| gsm_destroy() finishes a gsm pass and frees all storage associated |
| with it. |
| .SS "Sample format" |
| The following scaling is assumed for input to the algorithm: |
| .br |
| .nf |
| 0 1 11 12 |
| S..v..v..v..v..v..v..v..v..v..v..v..v..*..*..* |
| .nf |
| .br |
| Only the top 13 bits are used as a signed input value. |
| The output of gsm_decode() has the three lower bits set to zero. |
| .\" .SH OPTIONS |
| .SH "RETURN VALUE" |
| gsm_create() returns an opaque handle object of type gsm, or 0 on error. |
| gsm_decode() returns -1 if the passed frame is invalid, else 0. |
| .SH EXAMPLE |
| .nf |
| #include "gsm.h" |
| |
| gsm handle; |
| gsm_frame buf; |
| gsm_signal sample[160]; |
| int cc, soundfd; |
| |
| play() { /* read compressed data from standard input, write to soundfd */ |
| |
| if (!(handle = gsm_create())) error... |
| while (cc = read(0, (char *)buf, sizeof buf)) { |
| if (cc != sizeof buf) error... |
| if (gsm_decode(handle, buf, sample) < 0) error... |
| if (write(soundfd, sample, sizeof sample) != sizeof sample) |
| error... |
| } |
| gsm_destroy(handle); |
| } |
| |
| record() { /* read from soundfd, write compressed to standard output */ |
| |
| if (!(handle = gsm_create())) error... |
| while (cc = read(soundfd, sample, sizeof sample)) { |
| if (cc != sizeof sample) error... |
| gsm_encode(handle, sample, buf); |
| if (write(1, (char *)buf, sizeof buf) != sizeof sample) |
| error... |
| } |
| gsm_destroy(handle); |
| } |
| .nf |
| .SH BUGS |
| Please direct bug reports to jutta@cs.tu-berlin.de and cabo@cs.tu-berlin.de. |
| .SH "SEE ALSO" |
| toast(1), gsm_print(3), gsm_explode(3), gsm_option(3) |