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

📄 trans.f

📁 lpc10-15为美军2400bps语音压缩标准的C语音源代码。
💻 F
字号:
************************************************************************	TRANS Version 54** $Log: trans.f,v $* Revision 1.2  1996/03/21  21:37:51  jaf* Cleaned up local variable definitions a bit.** Revision 1.1  1996/02/07 14:50:02  jaf* Initial revision**************************************************************************   Handle Quantization and Input/Output of LPC parameters** Input/Output:*  VOICE - Half frame voicing decisions*  PITCH - Pitch index*  RMS   - Energy*  RC    - Reflection coefficients*  EOF   - End of file flag*	subroutine trans(voice, pitch, rms, rc, eof)	include 'config.fh'	include 'contrl.fh'*       Arguments	integer voice(2), pitch	real rms, rc(order)	logical eof*       Function return value definitions	integer bitsrd, bitswr, spd_read, spd_write*       Parameters/constants	integer NPB	parameter (NPB = MAXORD+4)*       Local variables that need not be saved	real pbuf(NPB)	integer i, ipitv, irms, irc(MAXORD), ibits(MAXNB)*  Read unquantized parameters from file,*     or use parameters analyzed from input speech	eof = .false.	if (fsi.ge.0 .or. fpi.ge.0) then	   if (fpi .ge. 0) then	      if(pbin .eq. 0) then	         read(fpi, *, end=900) rms, voice, pitch, (rc(i),i=1,order)	      else	         i = spd_read(fpi, pbuf, 4*NPB)	         if (i .ne. 4*NPB) goto 900	         rms = pbuf(1)	         voice(1) = pbuf(2)	         voice(2) = pbuf(3)	         pitch = pbuf(4)	         do i = 1, order	            rc(i) = pbuf(4+i)	         end do	         write(pbin,rec=1) nframe	      end if	   end if*     Quantize to 2400 bps, or pass them unquantized	   if (quant .eq. 2400) then	      call encode(voice, pitch, rms, rc, ipitv, irms, irc)	      call chanwr(order, ipitv, irms, irc, ibits)	   else if (fsi .ge. 0) then	      call pitdec(pitch, i)	      pitch = i	   end if	end if*  Decode parameters from bitstream	if (quant .eq. 2400) then	   if (fbi .ge. 0) then	      i = bitsrd(fbi, ibits, nbits)	      if (i .ne. nbits) then	         if (i .gt. 0) write(fmsg,*)     1              'ERROR: trans: expected', nbits, ' bits, got', i	         goto 900	      end if	   end if	   if (fbo .ge. 0) i = bitswr(fbo, ibits, nbits)	   call chanrd(order, ipitv, irms, irc, ibits)	   call decode(ipitv, irms, irc, voice, pitch, rms, rc)	end if*  Write (optionally quantized) floating point parameters to file	if (fpo .ge. 0) then	   if (pbin .eq. 0) then	      write(fpo, 1000) rms, voice, pitch, (rc(i), i=1,order)	   else	      pbuf(1) = rms	      pbuf(2) = voice(1)	      pbuf(3) = voice(2)	      pbuf(4) = pitch	      do i = 1, order	         pbuf(4+i) = rc(i)	      end do	      i = spd_write(fpo, pbuf, 4*NPB)	   end if	end if	return900	eof = .true.	return1000	format(1x, f8.2, i3, i2, i4, 10f8.4)	end

⌨️ 快捷键说明

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