文章目录

  • 前言
  • 一、获取源码
  • 二、使用示例
  • 总结

前言

有时需要在Windows上用到fdk-aac,fdk-aac是源码是cmake的,可以直接转成vs项目,而且在Shift Media Project中有提供vs版的源码,我们直接下载下来就可以编译。


一、获取源码

在Shift Media Project的github中就可以找到最新的fdk-aac的vs项目源码:https://github.com/ShiftMediaProject/fdk-aac

下载完成后直接找到SMP目录。

打开sln即可以编译了。


二、使用示例

将wav文件编码成acc文件,其中WavFileReader对象参考:《C++ 读取wav文件中的PCM数据》

#include<stdio.h>
#include"aacenc_lib.h"
#include"WavFileReader.h"
void main(int argc, char* argv[])
{FILE* f;AC::WavFileReader wr;HANDLE_AACENCODER encoder;unsigned char buffer1[2048], buffer2[2048]; int readBytes ;//打开文件f = fopen("./out.aac", "wb+");if (!f){printf("aac file create error!\n");goto end;}//wav文件声音格式为44100 2 16if (!wr.OpenWavFile("test_music.wav")){printf("wav file open error!\n");goto end;}//初始化编码器if (aacEncOpen(&encoder, 0, 2) != AACENC_OK) {printf("encoder open error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_SAMPLERATE, 44100) != AACENC_OK) {printf("set samplerate error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_BITRATE, 128*1024) != AACENC_OK) {printf("set bitrate error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_SBR_MODE, 0) != AACENC_OK) {printf("set sbr_mode error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_AOT, AOT_AAC_LC) != AACENC_OK) {printf("set aot error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_CHANNELMODE, MODE_2) != AACENC_OK) {printf("set channelmode error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_CHANNELORDER, 1) != AACENC_OK) {printf("set channelorder error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_BITRATEMODE, 0) != AACENC_OK) {printf("set bitratemode error!\n");goto end;}if (aacEncoder_SetParam(encoder, AACENC_TRANSMUX, 2) != AACENC_OK) {printf("set transmux error!\n");goto end;}do {//读取wav的pcm数据readBytes=    wr.ReadData(buffer1,2048);AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 };AACENC_InArgs in_args = { 0 ,0 };AACENC_OutArgs out_args = { 0 };int in_identifier = IN_AUDIO_DATA;int in_elem_size =2;void* in_ptr = buffer1;int out_identifier = OUT_BITSTREAM_DATA;int out_size = 2048;int out_elem_size = 1;void* out_ptr = buffer2;in_args.numInSamples = readBytes / 2;              in_buf.numBufs = 1;in_buf.bufs = (void**)&in_ptr;in_buf.bufferIdentifiers = &in_identifier;in_buf.bufSizes = &readBytes;in_buf.bufElSizes = &in_elem_size;out_buf.numBufs = 1;out_buf.bufs = (void**)&out_ptr;out_buf.bufferIdentifiers = &out_identifier;out_buf.bufSizes = &out_size;out_buf.bufElSizes = &out_elem_size;//编码if ((aacEncEncode((encoder), &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK) {printf("encode error!\n");goto end;}if (out_args.numOutBytes > 0)//写入文件{fwrite(buffer2, 1, out_args.numOutBytes, f);}}while (readBytes > 0);
end:if(encoder)aacEncClose((HANDLE_AACENCODER*)(&encoder));if(f)fclose(f);
}

项目代码:
https://download.csdn.net/download/u013113678/78593327


总结

以上就是今天要讲的内容,本文介绍了Windows上使用vs编译fdk-aac的方法,以及使用示例,整个过程是比较简单的,源码直接下载下来就可以用,编码的流程也是相对简单。

Windows上使用vs编译fdk-aac相关推荐

  1. linux编译fdk aac,如何在Linux下编译并安装Fraunhofer FDK AAC?

    AAC(高端音频编码, Advanced Audio Coding)在低比特率下会丢失许多高频信号而导致声音听起来和原始音质差异很大,因此后来出现了结合著SBR(Spectral Band Repli ...

  2. 在windows上用源代码编译安装MPlayer

    转自:http://www.cnblogs.com/smallmuda/archive/2009/03/31/1425976.html 在windows上用源代码编译安装MPlayer 作者:心情花园 ...

  3. 【安信可A9G专题①】A9G环境在windows上搭建并编译,串口打印 Hello GPRS

    本系列博客学习由 安信可科技 - 官方博客 技术分享,如有疑问请留言或联系邮箱. 1.A9G环境在windows上搭建并编译,串口打印 Hello GPRS 2.A9G在微信公众号上的定位功能笔记分享 ...

  4. 在Windows上使用MSVC编译QuaZip

    QuaZip现在已经可以用MSVC在Windows上编译成功了. 构建可使用CMake或qmake都可以. 但目前(0-4-3)的原有脚本有些问题,会出现errror C2491,怀疑是有个宏定义误写 ...

  5. 在windows上使用go编译dll文件,供C++调用

    C++项目是win32的,所以go的编译环境也要改成win32的 cmd下,修改环境变量: set GOARCH=386 set CGO_ENABLED=1 使用go env 查看是否生效 参考:ht ...

  6. LIVE555简介及在Windows上通过VS2013编译操作步骤

    LIVE555是使用开放标准协议(RTP/RTCP, RTSP, SIP)形成的一组用于多媒体流C++库.这些库支持的平台包括Unix(包括Linux和Mac OS X).Windows和QNX(以及 ...

  7. linux编译fdk aac,使用NDK编译ffmpeg4.1+fdk-aac2.0

    基本配置 ubuntu18 ffmpeg4.1.3 fdk-aac2.0.0 NDK r20b 编译fdkaac静态库脚本 #!/bin/bash NDK=/系统ndk路径/android-ndk-r ...

  8. linux编译fdk aac,Ubuntu下利用NDK编译ffmpeg+x264+fdk-aac

    由于FFmpeg.x264.Fdk-aac的版本问题,所以编译的时候有很多坑 编译顺序: 首先利用脚本分别编译x264和fdk-aac库,生成头文件(.h)与静态库文件(.a/.la). 将FFmpe ...

  9. windows上使用cmake 编译yaml-cpp源码,生成yam-cpp.lib

    1.打开cmake-gui 2.添加CmakeList 3.建立build 4.进入工程中生成debug和release版本的lib

最新文章

  1. CSDN-屏蔽广告详细方法 仅对谷歌浏览器有效!
  2. 【Http专题】Https
  3. AVL树平衡旋转详解
  4. [react] 什么时候使用状态管理器?
  5. c#五个自然日 工作日计算_C#程序输入工作日编号并打印工作日
  6. 二叉树的中序遍历_94. 二叉树的中序遍历 - 中等
  7. 测试nignx php请求并发数,Nginx 高级篇(八)ab 压力测试即 nginx 的性能统计模块...
  8. mysql索引 order by_MySQL 通过索引优化含ORDER BY的语句
  9. ssas 分层维度_通过SSAS维度层次结构增强数据分析
  10. Java——设计模式(装饰模式_IO)
  11. win10装sql2000卡在选择配置_小编为你作答win10系统安装SQL2000卡在MADC不动
  12. oracle 电子书大全
  13. Linux协议栈(1)——协议介绍
  14. 无法删除状态为Dead的容器
  15. npm报错`webpack-dev-server --inline --progress --config build/webpack.dev.conf.js`
  16. DOM进阶之CSS属性操作
  17. Laravel Database——查询构造器与语法编译器源码分析 (上)
  18. EtherCAT-SOEM主站搭建-windows
  19. uboot学习笔记之七-第三个函数board_init_r
  20. 「Python|输入输出」如何进行用户输入、文件输入和输出

热门文章

  1. 云计算的基础架构:并行计算+资源虚拟化
  2. html5使用新字体,html5 – 使用带有canvas fillText的font-face字体
  3. e820内存数据处理
  4. Error: EACCES: permission denied, open ‘/Users/xxx/
  5. Linux之shell典型应用之脚本实现
  6. 2015.4.10学习mybatis
  7. 【C语言小游戏】三子棋(井字棋)
  8. 2021“亿”马当先,本源量子计算公司完成数亿元A轮融资
  9. 专业的软件开发公司有哪些优势?
  10. 公安通讯平台解决方案(2)