GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
GSM(3) FreeBSD Library Functions Manual GSM(3)

gsm_create, gsm_destroy, gsm_encode, gsm_decode — GSM 06.10 lossy sound compression

#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;

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

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.)

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.

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.

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.

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

Please direct bug reports to jutta@pobox.com and cabo@tzi.org.

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

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.