⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 encode.c

📁 CCITT G.711,G.721,G.723语音压缩算法
💻 C
字号:
/* * encode.c * * CCITT ADPCM encoder * * Usage : encode [-3|4|5] [-a|u|l] < infile > outfile */#include <stdio.h>#include "g72x.h"/* * Pack output codes into bytes and write them to stdout. * Returns 1 if there is residual output, else returns 0. */intpack_output(	unsigned		code,	int			bits){	static unsigned int	out_buffer = 0;	static int		out_bits = 0;	unsigned char		out_byte;	out_buffer |= (code << out_bits);	out_bits += bits;	if (out_bits >= 8) {		out_byte = out_buffer & 0xff;		out_bits -= 8;		out_buffer >>= 8;		fwrite(&out_byte, sizeof (char), 1, stdout);	}	return (out_bits > 0);}main(	int			argc,	char			**argv){	struct g72x_state	state;	unsigned char		sample_char;	short			sample_short;	unsigned char		code;	int			resid;	int			in_coding;	int			in_size;	unsigned		*in_buf;	int			(*enc_routine)();	int			enc_bits;	g72x_init_state(&state);	/* Set defaults to u-law input, G.721 output */	in_coding = AUDIO_ENCODING_ULAW;	in_size = sizeof (char);	in_buf = (unsigned *)&sample_char;	enc_routine = g721_encoder;	enc_bits = 4;	/* Process encoding argument, if any */	while ((argc > 1) && (argv[1][0] == '-')) {		switch (argv[1][1]) {		case '3':			enc_routine = g723_24_encoder;			enc_bits = 3;			break;		case '4':			enc_routine = g721_encoder;			enc_bits = 4;			break;		case '5':			enc_routine = g723_40_encoder;			enc_bits = 5;			break;		case 'u':			in_coding = AUDIO_ENCODING_ULAW;			in_size = sizeof (char);			in_buf = (unsigned *)&sample_char;			break;		case 'a':			in_coding = AUDIO_ENCODING_ALAW;			in_size = sizeof (char);			in_buf = (unsigned *)&sample_char;			break;		case 'l':			in_coding = AUDIO_ENCODING_LINEAR;			in_size = sizeof (short);			in_buf = (unsigned *)&sample_short;			break;		default:fprintf(stderr, "CCITT ADPCM Encoder -- usage:\n");fprintf(stderr, "\tencode [-3|4|5] [-a|u|l] < infile > outfile\n");fprintf(stderr, "where:\n");fprintf(stderr, "\t-3\tGenerate G.723 24kbps (3-bit) data\n");fprintf(stderr, "\t-4\tGenerate G.721 32kbps (4-bit) data [default]\n");fprintf(stderr, "\t-5\tGenerate G.723 40kbps (5-bit) data\n");fprintf(stderr, "\t-a\tProcess 8-bit A-law input data\n");fprintf(stderr, "\t-u\tProcess 8-bit u-law input data [default]\n");fprintf(stderr, "\t-l\tProcess 16-bit linear PCM input data\n");			exit(1);		}		argc--;		argv++;	}	/* Read input file and process */	while (fread(in_buf, in_size, 1, stdin) == 1) {		code = (*enc_routine)(in_size == 2 ? sample_short : sample_char,		    in_coding, &state);		resid = pack_output(code, enc_bits);	}	/* Write zero codes until all residual codes are written out */	while (resid) {		resid = pack_output(0, enc_bits);	}	fclose(stdout);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -