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

📄 g729.cs

📁 语音视频功能 里面实现了基本的QQ与语音对话
💻 CS
字号:
using System;
using System.IO;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;

namespace gowk.multimedia
{
	/*

#define  L_FRAME_COMPRESSED 10
#define  L_FRAME            80

	void va_g729a_init_encoder();
	void va_g729a_encoder(short *speech, unsigned char *bitstream);
	void va_g729a_init_decoder();
	void va_g729a_decoder(unsigned char *bitstream, short *synth_short, int bfi);
*/
	/// <summary>
	/// G729 的摘要说明。
	/// </summary>
	public class G729
	{
		const int L_FRAME_COMPRESSED=10;
		const int L_FRAME=80;
		
		[DllImport("g729",PreserveSig=true)]
		private extern static void va_g729a_init_encoder();
		[DllImport("g729")]
		private extern static void va_g729a_encoder([MarshalAs(UnmanagedType.LPArray)]byte[] data,[MarshalAs(UnmanagedType.LPArray)]byte[] dst);
	//	[DllImport("g729",PreserveSig=true)]
	//	private unsafe extern static void va_g729a_encoder(short* data,byte* dst);
		[DllImport("g729")]
		private extern static void va_g729a_init_decoder();
		[DllImport("g729")]
		private extern static void va_g729a_decoder(byte[] data,byte[] dst,int bfi);
		public G729()
		{
		}
		public void InitalizeEncode()
		{
			va_g729a_init_encoder();
		}
		public void InitalizeDecode()
		{
			va_g729a_init_decoder();
		}
		unsafe public byte[] Encode(byte[] data)
		{
		/*	byte[] dst=new byte[(int)(data.Length/16)];
			fixed(byte* psb=data,pd=dst)
			{
				short* ps=(short*)psb;
				for(int i=0;i<data.Length/2;i+=80)
				{
					short* psc=ps;
					byte* pdc=pd;
					va_g729a_encoder(psc,pdc);
					psc+=80;
					pdc+=80;
				}
			}
			fixed(short* ps=(short*)&data)
			{
				fixed(byte* pd=(byte*)&dst)
				{
					for(int i=0;i<data.Length/2;i+=80)
					{
						va_g729a_encoder(ps,dst);
					}
				}
			}
			return dst;*/
			
			MemoryStream src=new MemoryStream(data);
			System.IO.BinaryReader brsrc=new BinaryReader(src);
			MemoryStream dst=new MemoryStream();
			System.IO.BinaryWriter bwdst=new BinaryWriter(dst);
			int step=(int)(data.Length/160);
			for(int i=0;i<step;i++)
			{
				byte[] d=new byte[10];
				for(int k=0;k<d.Length;k++)
				{
					d[k]=1;
				}
				byte[] o=brsrc.ReadBytes(160);
				va_g729a_encoder(o,d);
				
				bwdst.Write(d);
			}
			byte[] ret=dst.GetBuffer();
			brsrc.Close();
			bwdst.Close();
			src.Close();
			dst.Close();
			return ret;		

		/*	byte[] dst=new byte[data.Length/8];
			int max=data.Length;
			for(int i=0;i<max;i+=80)
			{
			}


			return null;*/
		}
		public byte[] Decode(byte[] data)
		{
			MemoryStream src=new MemoryStream(data);
			System.IO.BinaryReader brsrc=new BinaryReader(src);
			MemoryStream dst=new MemoryStream();
			System.IO.BinaryWriter bwdst=new BinaryWriter(dst);
			int step=(int)(data.Length/10);
			for(int i=0;i<step;i++)
			{
				byte[] d=new byte[160];
				va_g729a_decoder(brsrc.ReadBytes(10),d,0);
				bwdst.Write(d);
			}
			byte[] ret=dst.GetBuffer();
			brsrc.Close();
			bwdst.Close();
			src.Close();
			dst.Close();
			return ret;			
		}
	/*	public void Encode(byte[] data,byte[] dst)
		{
			va_g729a_encoder(data,dst);
		}
		public void Decode(byte[] data,byte[] dst,int bfi)
		{
			va_g729a_decoder(data,dst,bfi);
		}*/
	}
}

⌨️ 快捷键说明

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