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

📄 decode.c

📁 CCITT G.711,G.721,G.723语音压缩算法
💻 C
字号:
/* * decode.c * * CCITT ADPCM decoder * * Usage : decode [-3|4|5] [-a|u|l] < infile > outfile */#include <stdio.h>#include "g72x.h"/* * Unpack input codes and pass them back as bytes. * Returns 1 if there is residual input, returns -1 if eof, else returns 0. */intunpack_input(	unsigned char		*code,	int			bits){	static unsigned int	in_buffer = 0;	static int		in_bits = 0;	unsigned char		in_byte;	if (in_bits < bits) {		if (fread(&in_byte, sizeof (char), 1, stdin) != 1) {			*code = 0;			return (-1);		}		in_buffer |= (in_byte << in_bits);		in_bits += 8;	}	*code = in_buffer & ((1 << bits) - 1);	in_buffer >>= bits;	in_bits -= bits;	return (in_bits > 0);}main(	int			argc,	char			**argv){	short			sample;	unsigned char		code;	int			n;	struct g72x_state	state;	int			out_coding;	int			out_size;	int			(*dec_routine)();	int			dec_bits;	g72x_init_state(&state);	out_coding = AUDIO_ENCODING_ULAW;	out_size = sizeof (char);	dec_routine = g721_decoder;	dec_bits = 4;	/* Process encoding argument, if any */	while ((argc > 1) && (argv[1][0] == '-')) {		switch (argv[1][1]) {		case '3':			dec_routine = g723_24_decoder;			dec_bits = 3;			break;		case '4':			dec_routine = g721_decoder;			dec_bits = 4;			break;		case '5':			dec_routine = g723_40_decoder;			dec_bits = 5;			break;		case 'u':			out_coding = AUDIO_ENCODING_ULAW;			out_size = sizeof (char);			break;		case 'a':			out_coding = AUDIO_ENCODING_ALAW;			out_size = sizeof (char);			break;		case 'l':			out_coding = AUDIO_ENCODING_LINEAR;			out_size = sizeof (short);			break;		default:fprintf(stderr, "CCITT ADPCM Decoder -- usage:\n");fprintf(stderr, "\tdecode [-3|4|5] [-a|u|l] < infile > outfile\n");fprintf(stderr, "where:\n");fprintf(stderr, "\t-3\tProcess G.723 24kbps (3-bit) input data\n");fprintf(stderr, "\t-4\tProcess G.721 32kbps (4-bit) input data [default]\n");fprintf(stderr, "\t-5\tProcess G.723 40kbps (5-bit) input data\n");fprintf(stderr, "\t-a\tGenerate 8-bit A-law data\n");fprintf(stderr, "\t-u\tGenerate 8-bit u-law data [default]\n");fprintf(stderr, "\t-l\tGenerate 16-bit linear PCM data\n");			exit(1);		}		argc--;		argv++;	}	/* Read and unpack input codes and process them */	while (unpack_input(&code, dec_bits) >= 0) {		sample = (*dec_routine)(code, out_coding, &state);		if (out_size == 2) {			fwrite(&sample, out_size, 1, stdout);		} else {			code = (unsigned char)sample;			fwrite(&code, out_size, 1, stdout);		}	}	fclose(stdout);}

⌨️ 快捷键说明

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