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

📄 bitio.f,v

📁 lpc10-15为美军2400bps语音压缩标准的C语音源代码。
💻 F,V
字号:
head	1.3;access;symbols;locks; strict;comment	@* @;1.3date	96.03.25.20.50.46;	author jaf;	state Exp;branches;next	1.2;1.2date	96.02.12.15.00.32;	author jaf;	state Exp;branches;next	1.1;1.1date	96.02.07.14.42.57;	author jaf;	state Exp;branches;next	;desc@@1.3log@Started to put comments in function and entry headers like those inother parts of the LPC10 coder, but gave up in the middle because itdidn't seem worth the effort for these routines right now.@text@**************************************************************************	BITIO Version 55** $Log: bitio.f,v $* Revision 1.2  1996/02/12  15:00:32  jaf* Added a few comments, and replaced calls to ishft with calls to lshift* or rshift, so that it would compile with f2c.** Revision 1.1  1996/02/07 14:42:57  jaf* Initial revision*************************************************************************** function bitsrd* * Read in at most 'len' 16 bit audio samples from the input file* descriptor 'fd', and convert them from 16 bit two's complement form to* real numbers in the range -1 to +1.  The converted real samples are* stored in the array 'buf'.  The number of such samples read is* returned.* * Input:*  fd   - File descriptor for input file to read from.*  len  - Maximum number of samples to read.* Output:*  buf  - Audio samples that were read.*         Indices 1 through n (the function return value) written.* Return value:*  n    - The number of samples actually read, between 0 and len, inclusive.	function bitsrd(fd, ibits, n)*       Arguments	integer fd, n	integer ibits(n)*       Function return value definitions	integer bitsrd, bitswr, gethx, puthx*       Local variables that need not be saved	character str*80*************************************************************************   Read a frame from bitstream file************************************************************************	bitsrd = 020	read(fd, 80, end=90) str80	format(a)	if (str(1:1).eq.'*') goto 20	bitsrd = gethx(str, ibits, n)90	return*************************************************************************   Write a frame to bitstream file************************************************************************	entry bitswr(fd, ibits, n)	bitswr = puthx(str, ibits, n)	write(fd,80) str(1:(n+3)/4)	return	end*************************************************************************   Read bits from hex digit stream**************************************************************************   Skip leading blanks, split hex digits into individual bits,*  terminate after getting n bits or finding non-hex character.*  Return value = number of bits in input record (which could be*  more or less than n).* * Input:*  str   - * Output:*  ibits - *  n     - * Return value:*        - * 	function gethx(str, ibits, n)*       Arguments	character*(*) str	integer n, ibits(n)*       Function return value definitions	integer gethx, puthx*       Parameters/constants*       This is not a Fortran PARAMETER, but it is a character string*       that is initialized with a DATA statement, and then never*       modified.	character hex*23*       Local variables that need not be saved	integer ib, ic, i, ii, j, k, nc	data hex /'0123456789ABCDEFabcdef '/	ic = 0	do j = 1, len(str)	    k = index(hex, str(j:j)) - 1*       (k in 0..21) => hex digit*       (k = 22) => space*       (k = -1) => other	    if (k.lt.0 .or. (k.gt.21 .and. ic.gt.0)) goto 20	    if (k.le.21) ic = ic + 1	end do*       Right now we know that:*       *       str(1:j-ic-1) is leading white space.*       str(j-ic:j-1) is the consecutive sequence of hex digits, if any.*       ic is the number of hex digits, which could be 0 if there were none.*       str(j:len(str)) is everything after any hex number found.*       *       nc will be the number of hex digits to process.  It should be no*       more than the number needed to fill in the desired maximum of n*       bits.20	ib = 0	j = j - ic	nc = min((n+3)/4, ic)	do i = 0, nc-1	    k = index(hex, str(i+j:i+j)) - 1	    if (k .lt. 0 .or. k.gt.21) stop 'gethx: internal error'	    if (k .gt. 15) k = k - 6	    do ii = 1 + max(0, 4*(nc-i)-n), 4	        ib = ib + 1*       *       Sun Feb 11 12:02:51 CST 1996*       Andy Fingerhut (jaf@@arl.wustl.edu)*       *       The following line was originally:*       *	        ibits(ib) = and(ishft(k, ii-4), 1)*       *       It caused the following error when compiling with f2c:*       *       Error on line 70: Declaration error for ishft: attempt to use*       untyped function*       *       The value of ishft(a,b) is the integer a shifted left by b bits,*       if b >=0, or the integer a shifted right by (-b) bits, if b < 0.*       *       The variable ii is always in the range 1 to 4, so ii-4 is always*       <= 0.  Given the f2c intrinsic function rshift(a,b), ishft(k,*       ii-4) is equivalent to rshift(k, 4-ii).*       *       See the definition of variable 'intrtab' of file intr.c in the*       f2c distribution for a list of all intrinsic functions*       recognized by f2c.* 	        ibits(ib) = and(rshift(k, 4-ii), 1)	    end do	end do90	gethx = ib	if (ic .gt. nc) gethx = 4*ic	return*************************************************************************   Write bits to hex digit stream************************************************************************	entry puthx(str, ibits, n)	ib = 0	str = ' '	nc = (n+3) / 4	do ic = 1, min(len(str), nc)	    k = 0	    do j = 1, min(n-4*(nc-ic), 4)	        ib = ib + 1*       *       The line below used to be:*       *	        k = or(ishft(k,1), and(ibits(ib),1))*       *       Replacing the call to ishft(k,1), which returns the result of k*       shifted left by 1 bit position, with the f2c intrinsic*       lshift(k,1).*       	        k = or(lshift(k,1), and(ibits(ib),1))	    end do	    str(ic:ic) = hex(k+1:k+1)	end do	puthx = ib	return	end@1.2log@Added a few comments, and replaced calls to ishft with calls to lshiftor rshift, so that it would compile with f2c.@text@d6 4d16 17d34 12a45 1	integer bitsrd, bitswr, gethx, puthx, fd, n, ibits(n)d80 10d91 20a110 1	integer gethx, puthx, n, ibits(n)d112 1a112 1	character*(*) str, hex*23d114 1@1.1log@Initial revision@text@d5 4a8 1* $Log$d57 5d66 11d86 25a110 1	        ibits(ib) = and(ishft(k, ii-4), 1)d131 10a140 1	        k = or(ishft(k,1), and(ibits(ib),1))@

⌨️ 快捷键说明

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