Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
GSM(3)			   Library Functions Manual			GSM(3)

NAME
       gsm_create,  gsm_destroy,  gsm_encode,  gsm_decode  --  GSM 06.10 lossy
       sound compression

SYNOPSIS
       #include	"gsm.h"

       gsm gsm_create();

       void gsm_encode(handle, src, dst)
       gsm handle;
       gsm_signal src[160];
       gsm_frame dst;

       int gsm_decode(handle, src, dst)
       gsm handle;
       gsm_frame src;
       gsm_signal dst[160];

       void gsm_destroy(handle)
       gsm handle;

DESCRIPTION
       Gsm is an implementation	of the final  draft  GSM  06.10	 standard  for
       full-rate speech	transcoding.

       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_en-
       code() or gsm_destroy().

       gsm_encode()  encodes an	array of 160 13-bit samples (given as gsm_sig-
       nal'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.)

       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.

       gsm_destroy() finishes a	gsm pass and frees all storage associated with
       it.

   Sample format
       The following scaling is	assumed	for input to the algorithm:
	  0  1				   11 12
	  S..v..v..v..v..v..v..v..v..v..v..v..v..*..*..*
       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.

RETURN VALUE
       gsm_create()  returns  an opaque	handle object of type gsm, or 0	on er-
       ror.  gsm_decode() returns -1 if	the passed frame is invalid, else 0.

EXAMPLE
       #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);
       }

BUGS
       Please direct bug  reports  to  jutta@cs.tu-berlin.de  and  cabo@cs.tu-
       berlin.de.

SEE ALSO
       toast(1), gsm_print(3), gsm_explode(3), gsm_option(3)

									GSM(3)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | EXAMPLE | BUGS | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=gsm&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help