嵌入式Linux pcm faac,FAAC编码PCM音频

在使用FAAC编码前我们首先导入faac库,相关库及源码可从https://www.audiocoding.com/faac.html下载。

使用FAAC编码PCM数据为AAC时,主要分四个步骤:

1、创建AAC编码器

2、设置编码器参数

3、输入PCM数据,输出编码后的AAC数据

4、编码结束,关闭编码器

1、创建AAC编码器

创建编码器的函数如下:

faacEncHandle FAACAPI faacEncOpen(unsigned long sampleRate,

unsigned int numChannels,

unsigned long *inputSamples,

unsigned long *maxOutputBytes

);

其中参数如下

unsigned long sampleRate, //输入的PCM数据的采样率

unsigned int numChannels, //输入的PCM数据的频道数

unsigned long *inputSamples, //获取的输入的音频样本的最大输入样本数量

unsigned long *maxOutputBytes //获取的最大输出的数据的字节数

其中第一个和第二个参数为用户输入,第三个和第四个参数需要用户保存,到后面使用。

创建成功后返回AAC编码器句柄,句柄需要用户保存到后面几步进行使用。

2、配置参数

设置参数之前,我们首先获取配置结构体对象的指针,使用下面的函数获取:

faacEncConfigurationPtr FAACAPI

faacEncGetCurrentConfiguration(faacEncHandle hEncoder);

输入为第一步创建的编码器句柄,返回为配置结构体的指针。

获取成功后我们进行如下配置:

self.pConfiguration = faacEncGetCurrentConfiguration(self.encoder);//获取配置结构指针

self.pConfiguration->inputFormat = FAAC_INPUT_16BIT; //设置

self.pConfiguration->outputFormat=1;

self.pConfiguration->useTns=true;

self.pConfiguration->useLfe=false;

self.pConfiguration->aacObjectType=LOW;

self.pConfiguration->shortctl=SHORTCTL_NORMAL;

self.pConfiguration->quantqual=100;

self.pConfiguration->bandWidth=0;

self.pConfiguration->bitRate=0;

配置参数后,我们需要启用配置,使用的函数如下:

int FAACAPI faacEncSetConfiguration(faacEncHandle hEncoder,

faacEncConfigurationPtr config);

第一个参数为第一步创建的编码器句柄,第二个参数为配置结构体指针。返回的为启用的结果,若返回的数值小于0则启用失败,大于等于0则代表成功。若启用失败,可以检查自己的参数是否设置正确。参数在其定义的头文件中说明非常清晰,自己安装说明检查即可。

3、编码PCM数据

编码的函数如下:

int FAACAPI faacEncEncode(faacEncHandle hEncoder, int32_t * inputBuffer, unsigned int samplesInput,

unsigned char *outputBuffer,

unsigned int bufferSize);

参数解释如下:

faacEncHandle hEncoder, //创建的AAC编码器句柄

int32_t * inputBuffer, //输入的PCM数据的指针

unsigned int samplesInput, //输入的PCM数据的样本数量

unsigned char *outputBuffer, //保存转码后的数据的指针

unsigned int bufferSize //保存转码后指针指向地址的缓存的大小

第二个参数输入的数据不能超过第一步创建时指定的大小,第三个参数为输入的样本数量,可用根据第二个数据的长度、每个样本的大小。第三个和第四个为保存转码后数据的缓冲区地址及大小。返回值为缓冲区转换数据的长度,我们从缓冲区读取相应的数据保存即可。

当开始调用函数的时候,不会立即返回AAC数据,因为FAAC库会缓存部分数据,当我们输入的PCM数据完后,AAC数据此时并没有完全编码完成,需要连续调用函数,待返回值小于等于0时才代表全部编码完成。

4、关闭编码器

关闭编码器的函数如下:

int FAACAPI faacEncClose(faacEncHandle hEncoder);

参数为我们第一步创建的AAC编码器句柄,函数返回大于等于0则代表成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值