Unity 工具-Opus音频压缩(Win篇)

来源:互联网 发布:淘宝装修设计师 编辑:程序博客网 时间:2024/06/05 17:23

上个博客介绍了Opus编译成安卓静态库,下面介绍Win和IOS
这两个我都是在IDE里面进行,方便调试
首先说WIN:
1、下载好源码可以在文件夹下找到解决方案,直接用VS打开
文件路径
2、在解决方案里新建个静态库项目(如果不需要封装的接口函数,可以直接编译Opus,生成DLL)

这里写图片描述
3、将Opus引用进新项目中,和一般的C/C++工程一样,我们需要添加依赖的.C文件与.h文件,首先我们需要添加头文件,Opus依赖头文件分布的比较零散,不像speex全部在include文件里面,不过这里我们也只需要指定好路径,编译器会自动链接到相应的头文件,如下图所示:
这里写图片描述
这里写图片描述
4、写接口文件,和上篇的安卓类似,只是方法前面加上__declspec(dllexport),这样在C#中才能找到对应的方法
这里只贴一下头文件

// 下列 ifdef 块是创建使从 DLL 导出更简单的// 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 MYOPUS_EXPORTS// 符号编译的。在使用此 DLL 的// 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将// MYOPUS_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的// 符号视为是被导出的。#ifdef MYOPUS_EXPORTS#define MYOPUS_API __declspec(dllexport)#else#define MYOPUS_API __declspec(dllimport)#endifint frame_size;int channels = 1;opus_int32 opus_num;opus_int32 pcm_num;float* pcm_dataFloat_encoder = NULL;opus_int16* pcm_dataInt_encoder = NULL;unsigned char* opus_dataInt_decoder = NULL;unsigned char* opus_dataFloat_decoder = NULL;OpusEncoder *enc = NULL;OpusDecoder *dec = NULL;int error;//必须带有extern "C",否则在Unity中找不到以下方法extern "C" {     MYOPUS_API int nMyOpus;     MYOPUS_API int fnMyOpus(void);     MYOPUS_API void  opusEncoderInit(int Fs, int _channels);     MYOPUS_API void  opusEncoderSet(int _frame_size, bool isFloat, int quality, int signal);     MYOPUS_API void  opusDecoderInit(int Fs, int _channels, int max_len, bool isFloat);     MYOPUS_API int  opusEncoder(opus_int16 *encoder_insrc, int in_offset, unsigned char *encoder_out, int max_len);     MYOPUS_API int  opusDecoder(int len, unsigned char *decoder_insrc, int in_offset, opus_int16 *decoder_out);     MYOPUS_API void  opusEncoderDispose();     MYOPUS_API void  opusDecoderDispose();}

然后编译,生成dll,后面再写IOS编译
参考:

http://www.cnblogs.com/lzhen/p/3906102.html?utm_source=tuicool&utm_medium=referral

原创粉丝点击