1、faac

example

./configure --prefix=$(pwd)/_install

make

make install

  1. /* aac_encode.c */
  2. #include <stdio.h>
  3. #include <faac.h>
  4. #include <stdint.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7.  
  8. int main (int argc, char **argv)
  9. {
  10. unsigned long sampleRate = 8000;
  11. unsigned int numChannels = 1;
  12. unsigned long inputSample = 0;
  13. unsigned long maxOutputBytes = 0;
  14. faacEncHandle encoder;
  15. faacEncConfigurationPtr config;
  16. FILE *rfile = NULL;
  17. FILE *wfile = NULL;
  18. int16_t *pcm_input = NULL;
  19. uint8_t *aac_output = NULL;
  20. int readcount = 0;
  21. int writecount = 0;
  22.  
  23. encoder = faacEncOpen(sampleRate, numChannels, &inputSample, &maxOutputBytes);
  24. config = faacEncGetCurrentConfiguration(encoder);
  25. config->aacObjectType = MAIN;
  26. config->mpegVersion = MPEG4;
  27. config->useLfe = 0;
  28. config->useTns = 1;
  29. config->allowMidside = 1;
  30. /*RAW_STREAM=0, ADTS_STREAM=1*/
  31. config->outputFormat = 1;
  32. config->bitRate = sampleRate;
  33. config->inputFormat = FAAC_INPUT_16BIT;
  34. faacEncSetConfiguration(encoder, config);
  35.  
  36. printf("sampleRate:%ld, numChannels:%d, inputSample:%ld, maxOutputBytes:%ld\n",
  37. sampleRate, numChannels, inputSample, maxOutputBytes);
  38.  
  39. if (argv[1]) {
  40. rfile = fopen(argv[1], "rb");
  41. } else {
  42. printf("try to open input.pcm\n");
  43. rfile = fopen("input.pcm", "rb");
  44. }
  45.  
  46. if (!rfile) {
  47. printf("open error\n");
  48. goto end;
  49. }
  50.  
  51. if (argv[2]) {
  52. wfile = fopen(argv[2], "wb");
  53. } else {
  54. printf("try to open output.aac\n");
  55. wfile = fopen("output.aac", "wb");
  56. }
  57.  
  58. if (!wfile) {
  59. printf("open error\n");
  60. goto end;
  61. }
  62.  
  63. pcm_input = (int16_t *)malloc(inputSample * sizeof(int16_t));
  64. aac_output = (uint8_t *)malloc(maxOutputBytes * sizeof(uint8_t));
  65.  
  66. /* encode */
  67. while (1) {
  68. int readlen = 0;
  69. int ret = 0;
  70.  
  71. readlen = fread(pcm_input, sizeof(int16_t), inputSample, rfile);
  72.  
  73. ret = faacEncEncode(encoder, (int32_t *)pcm_input, readlen, aac_output, maxOutputBytes);
  74.  
  75. if (ret > 0) {
  76. fwrite(aac_output, sizeof(uint8_t), ret, wfile);
  77. } else if (ret < 0) {
  78. printf("encode error\n");
  79. break;
  80. }
  81.  
  82. readcount += readlen * 2;
  83. writecount += ret;
  84.  
  85. if (!readlen && !ret) {
  86. printf("encode complete, from %d bytes to %d bytes\n", readcount, writecount);
  87. break;
  88. }
  89. }
  90.  
  91. free(pcm_input);
  92. free(aac_output);
  93.  
  94. end:
  95. if (wfile) fclose(wfile);
  96. if (rfile) fclose(rfile);
  97. faacEncClose(encoder);
  98. return 0;
  99. }

Makefile

APP = main

INCLUDE = \
-I ./faac/include

LIB = \
-L ./faac/lib/

SRC  = main.c

CFLAGS =

LDFLAGS = -lfaac

out:
    gcc $(SRC) -o $(APP) $(LIB) $(INCLUDE) $(CFLAGS) $(LDFLAGS)

clean:
    rm -rf *o *.out $(APP)

2、faac/faad <--- > pcm

https://www.audiocoding.com/downloads.html

3、g711 <---> pcm

https://github.com/phoenixZZZ/G711_EncodecAndDecodec

https://github.com/Wenstery/G711AudioStream

https://github.com/escrichov/G711

codec-for-audio-in-G72X-G711-G723-G726-G729

https://github.com/twstx1/codec-for-audio-in-G72X-G711-G723-G726-G729/blob/master/G711_G721_G723/encode.c

非常好的实例,已经用在产品里了,感谢作者!

An ANSI C library for encoding/decoding using the A-law and u-Law.

https://github.com/dystopiancode/pcm-g711

https://blog.csdn.net/szfhy/article/details/52448906

html读写excle文档的更多相关文章

  1. 使导出excle文档实现ALT+Enter的效果()

    JAVA中输入什么转义字符,使导出excle文档实现ALT+Enter的效果?或者有没有其他方法可以实现. 20 JAVA中输入什么转义字符,使导出excle文档实现ALT+Enter的效果?或者有没 ...

  2. C#操作Xml:通过XmlDocument读写Xml文档

    什么是Xml? Xml是扩展标记语言的简写,是一种开发的文本格式.关于它的更多情况可以通过w3组织了解http://www.w3.org/TR/1998/REC-xml-19980210.如果你不知道 ...

  3. dom4j读写XML文档

    dom4j 最常用最简单的用法(转) 要使用dom4j读写XML文档,需要先下载dom4j包,dom4j官方网站在 http://www.dom4j.org/目前最新dom4j包下载地址:http:/ ...

  4. python+selenium自动化软件测试(第12章):Python读写XML文档

    XML 即可扩展标记语言,它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进 行定义的源语言.xml 有如下特征: 首先,它是有标签对组成:<aa></aa> ...

  5. Docx组件读写Word文档介绍

    Docx介绍 官方原文:DocX is a .NET library that allows developers to manipulate Word 2007/2010/2013 files, i ...

  6. BCB 读写Word文档

    void __fastcall TForm1::btn1Click(TObject *Sender) { Variant WordApp,WordDocs,WordDoc; Variant word_ ...

  7. 读写XML文档时,去掉新增加节点的“空命名空间”(xmlns=””)

    在做对ReprotViewer编程时,想做一个用户可以更改显示/打印列的功能,大致看了下,只需要通过对rdlc文件中改变其<Hidden>节点值为false/true,即可实现对应某列的显 ...

  8. 通过XmlDocument读写Xml文档参考地址

    /// <summary> /// 获取一个报表的参数 http://blog.csdn.net/hdhai9451/article/details/12170069 /// </s ...

  9. $用python-docx模块读写word文档

    工作中会遇到需要读取一个有几百页的word文档并从中整理出一些信息的需求,比如产品的API文档一般是word格式的.几百页的文档,如果手工一个个去处理,几乎是不可能的事情.这时就要找一个库写脚本去实现 ...

随机推荐

  1. 标签响应javascript的href处理[转载]

    为了给一个<a />标签绑定javascript,但又不让它跳转链接,大家习惯上用的都是 <a href="javascript:;" onclick=" ...

  2. C++ 函数的扩展②

    //函数扩展--默认参数和占位参数 (了解) #include<iostream> using namespace std; /* 可以将占位参数与默认参数结合起来使用 意义 为以后程序扩 ...

  3. 【BZOJ】1629: [Usaco2007 Demo]Cow Acrobats(贪心+排序)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1629 这题我想了很久都没想出来啊... 其实任意两头相邻的牛交换顺序对其它牛是没有影响的.. 那么我 ...

  4. hdu 3899(树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3899 思路:num[u]表示u以及u的子树的队伍数的总和,dist[u]表示u到根节点的距离,dp[u ...

  5. POJ2456 Aggressive cows(二分+贪心)

    如果C(d)为满足全部牛之间的距离都不小于d. 先对牛舍的位置排序,然后二分枚举d,寻找满足条件的d. #include<iostream> #include<cstdio> ...

  6. Cocos Studio编辑器运行日志路径

    有时候打开Cocos Studio直接崩溃,要想查找原因就要查log了,网上找了好久才找到日志路径,在你工作空间下面的CocosStudio2\logs. 工作空间就是安装时候设置的那个路径.

  7. Android无线测试之—UiAutomator UiWatcher API介绍一

    UiWatcher类介绍与中断监听检查条件 一.UiWatcher类说明 1.Uiwatcher用于处理脚本执行过程中遇到非预想的步骤 2.UiWatcher使用场景 1)测试过程中来了一个电话 2) ...

  8. 本地存储数据库indexedDB实现离线预览的功能

    今天在学习<高级JS编程>,看到离线存储,cookie和session都十分的熟悉,但是书中还提到了indexedDB和webSQL(已废弃),indexedDB可以像mysql一样建表, ...

  9. vsftp or pureftpd

    一.安装pureftpd //这个软件比vsftp配置起来更加灵活和安全. /*官网是 http://www.pureftpd.org/project/pure-ftpd*/ [root@localh ...

  10. Zabbix使用SMTP发送邮件报警并且制定报警内容

    接上篇Zabbix监控介绍及安装配置 选择报警项 创建一个报警项 选择到刚刚自定义的80端口 定义报警方法 定义告警级别 一些报警方法 diff 比较是否有修改 last 最低值 nodata 没有数 ...