You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
2.7 KiB
105 lines
2.7 KiB
.\" |
|
.\" 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@pobox.com and cabo@tzi.org. |
|
.SH "SEE ALSO" |
|
toast(1), gsm_print(3), gsm_explode(3), gsm_option(3)
|
|
|