jni/gsm/toast_audio.c
author Nikita Kozlov <nikita@elyzion.net>
Wed, 06 Jun 2012 23:24:12 +0200
changeset 1005 a2cad81f348b
parent 823 2036ebfaccda
permissions -rw-r--r--
fix some bugs + update jingle code in asmack
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
823
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     1
/*
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     2
 * Copyright 1992 by Jutta Degener and Carsten Bormann, Technische
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     3
 * Universitaet Berlin.  See the accompanying file "COPYRIGHT" for
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     4
 * details.  THERE IS ABSOLUTELY NO WARRANTY FOR THIS SOFTWARE.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     5
 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     6
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     7
/* $Header: /tmp_amd/presto/export/kbs/jutta/src/gsm/RCS/toast_audio.c,v 1.6 1995/03/07 21:21:24 jutta Exp $ */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     8
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
     9
#include	"toast.h"
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    10
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    11
/*  toast_audio -- functions to manipulate SunOS audio files.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    12
 *
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    13
 *  This is reverse engineered from our present soundfiles
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    14
 *  and in no way portable, durable or aesthetically pleasing.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    15
 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    16
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    17
extern FILE	* in, 	  * out;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    18
extern char	* inname;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    19
extern char	* progname;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    20
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    21
extern int	(*output) P((gsm_signal *)),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    22
		(*input ) P((gsm_signal *));
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    23
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    24
extern int	alaw_input   P((gsm_signal *)),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    25
		ulaw_input   P((gsm_signal *)),
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    26
		linear_input P((gsm_signal *));
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    27
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    28
extern int	ulaw_output P((gsm_signal *));
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    29
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    30
static int put_u32 P2((f, u), FILE * f, unsigned long u)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    31
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    32
	/*  Write a 32-bit unsigned value msb first. 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    33
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    34
	if (  putc( (char)((u>>24) & 0x0FF), f) == EOF
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    35
	   || putc( (char)((u>>16) & 0x0FF), f) == EOF
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    36
	   || putc( (char)((u>> 8) & 0x0FF), f) == EOF
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    37
	   || putc( (char)( u      & 0x0FF), f) == EOF) return -1;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    38
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    39
	return 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    40
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    41
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    42
static int get_u32 P2((f, up), FILE * f, unsigned long * up)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    43
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    44
	/*  Read a 32-bit unsigned value msb first.
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    45
	 */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    46
	int		i;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    47
	unsigned long 	u;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    48
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    49
	if (  				      (i = getc(f)) == EOF
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    50
	   || ((u =        (unsigned char)i), (i = getc(f)) == EOF)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    51
	   || ((u = (u<<8)|(unsigned char)i), (i = getc(f)) == EOF)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    52
	   || ((u = (u<<8)|(unsigned char)i), (i = getc(f)) == EOF)) return -1;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    53
	*up = 	    (u<<8)|(unsigned char)i;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    54
	return 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    55
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    56
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    57
int audio_init_input P0()
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    58
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    59
	unsigned long	len, enc;	/* unsigned 32 bits	*/
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    60
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    61
	if (  fgetc(in) != '.' 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    62
	   || fgetc(in) != 's'
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    63
	   || fgetc(in) != 'n'
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    64
	   || fgetc(in) != 'd'
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    65
	   || get_u32( in, &len )
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    66
	   || get_u32( in, &enc )	/* skip this */
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    67
	   || get_u32( in, &enc )) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    68
		fprintf(stderr, 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    69
	"%s: bad (missing?) header in Sun audio file \"%s\";\n\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    70
	Try one of -u, -a, -l instead (%s -h for help).\n",
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    71
			progname, inname ? inname : "stdin", progname);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    72
		return -1;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    73
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    74
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    75
	switch (enc) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    76
	case 1:	input = ulaw_input;  	break;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    77
	case 2: input = alaw_input;  	break;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    78
	case 3: input = linear_input; 	break;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    79
	default:
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    80
		fprintf(stderr,
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    81
"%s: warning: file format #%lu for %s not implemented, defaulting to u-law.\n",
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    82
			progname, enc, inname);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    83
		input = ulaw_input;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    84
		break;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    85
	}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    86
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    87
	while (len > 4*4)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    88
		if (getc(in) == EOF) {
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    89
			fprintf(stderr, 
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    90
			"%s: EOF in header of Sun audio file \"%s\";\n\
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    91
			Try one of -u, -a, -l instead (%s -h for help).\n",
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    92
				progname, inname ? inname : "stdin", progname);
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    93
			return -1;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    94
		}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    95
		else len--;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    96
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    97
	return 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    98
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
    99
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   100
int audio_init_output P0()
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   101
{
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   102
	if (  fputs(".snd", out) == EOF
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   103
	   || put_u32(out, 32)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   104
	   || put_u32(out, ~(unsigned long)0)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   105
	   || put_u32(out, 1)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   106
	   || put_u32(out, 8000)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   107
	   || put_u32(out, 1)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   108
	   || put_u32(out, 0)
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   109
	   || put_u32(out, 0)) return -1;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   110
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   111
	return 0;
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   112
}
2036ebfaccda debut de la gestion de l'audio, faut tester avec des pcs distincts
nikita@jibe-desktop
parents:
diff changeset
   113