fdk-aac demo修改,直接读pcm数据

$ wget https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz

1.下载源码
$ wget https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz
2.解压
$ tar xvzf fdk-aac-2.0.1.tar.gz
3.配置
$ cd fdk-aac-2.0.1/
$ mkdir local
$ ./configure --prefix=$pwd/local --enable-example
4.编译
$ make
5.安装
$ make install
6.打自己的补丁
$ patch  -p2  < ../aac-enc.path 
7.重新编译并运行
$ ./fdk-aac-2.0.1/aac-enc -t 2  jzt31x_16K.pcm   out.aac

 

 

--- ./fdk-aac-2.0.1/aac-enc.c   2018-10-24 15:55:23.000000000 +0800
+++ ./fdk-aac-2.0.1.bak/aac-enc.c       2020-10-28 18:01:02.605653818 +0800
@@ -29,6 +29,8 @@
 #include "libAACenc/include/aacenc_lib.h"
 #include "wavreader.h"
 
+#define AUGUSPEC
+
 void usage(const char* name) {
        fprintf(stderr, "%s [-r bitrate] [-t aot] [-a afterburner] [-s sbr] [-v vbr] in.wav out.aac\n", name);
        fprintf(stderr, "Supported AOTs:\n");
@@ -56,6 +58,11 @@ int main(int argc, char *argv[]) {
        HANDLE_AACENCODER handle;
        CHANNEL_MODE mode;
        AACENC_InfoStruct info = { 0 };
+#ifndef AUGUSPEC
+
+#else
+       FILE *fdPcm=NULL;
+#endif 
        while ((ch = getopt(argc, argv, "r:t:a:s:v:")) != -1) {
                switch (ch) {
                case 'r':
@@ -85,7 +92,7 @@ int main(int argc, char *argv[]) {
        }
        infile = argv[optind];
        outfile = argv[optind + 1];
-
+#ifndef AUGUSPEC
        wav = wav_read_open(infile);
        if (!wav) {
                fprintf(stderr, "Unable to open wav file %s\n", infile);
@@ -95,6 +102,15 @@ int main(int argc, char *argv[]) {
                fprintf(stderr, "Bad wav file %s\n", infile);
                return 1;
        }
+#else
+       fdPcm = fopen(infile,"r");
+       printf("open file:%s\n",infile);
+       format=1;
+       channels = 1;
+       bits_per_sample = 16;
+       sample_rate = 16000;
+       info.frameLength = 1024;
+#endif
        if (format != 1) {
                fprintf(stderr, "Unsupported WAV format %d\n", format);
                return 1;
@@ -191,7 +207,12 @@ int main(int argc, char *argv[]) {
                uint8_t outbuf[20480];
                AACENC_ERROR err;
 
+#ifndef AUGUSPEC
                read = wav_read_data(wav, input_buf, input_size);
+#else
+               read = fread(input_buf,1,input_size,fdPcm);
+               printf("read %d\n",read);
+#endif
                for (i = 0; i < read/2; i++) {
                        const uint8_t* in = &input_buf[2*i];
                        convert_buf[i] = in[0] | (in[1] << 8);

 

### 回答1: fdk-aac是一款开源的音频编码器,可以将PCM(Pulse Code Modulation)格式的音频数据进行压缩编码。PCM是一种无损的音频存储格式,它将模拟音频信号转换成数字信号,每个样本使用定点或浮点数表示音频波形。然而,PCM格式的音频文件通常会占据较大的存储空间,不便于传输和存储。 使用fdk-aac编码PCM音频文件可以有效地压缩文件大小,减少存储空间的占用。编码过程中,fdk-aac会根据PCM音频数据的特性和人耳感知的特点,使用先进的压缩算法对音频进行分析和处理。它会利用人耳对不同频率和声道的灵敏度不同的特点,对音频数据进行采样和量化,并且使用不同的编码器和参数对不同部分的音频信号进行编码。 通过fdk-aac编码器,PCM音频文件可以转换为高效的AAC(Advanced Audio Coding)格式。AAC是一种被广泛应用于数字音频和音视频传输领域的音频编码标准,它具有更好的压缩效率和音频质量,相对于其他编码格式如MP3,AAC格式的音频文件更小,但音质更好。 因此,通过fdk-aac编码器,将PCM格式的音频文件转换为AAC格式,可以在保持音质的同时减少文件的大小,方便音频的传输和存储。这对于音频文件的压缩和网络传输等应用场景具有重要意义。 ### 回答2: fdk-aac是一种高效的音频编码器,用于将原始的PCM音频数据转换为AAC格式。PCM,也称为脉冲编码调制,是一种未经压缩的音频数据格式,具有较大的文件大小和较低的编码效率。而AAC是一种先进的音频编码格式,通过压缩音频数据可以获得较小的文件大小和较高的音质。fdk-aac编码器可以使用PCM作为输入,对音频数据进行压缩和编码,并生成AAC文件。 使用fdk-aac编码PCM的过程如下: 1. 准备PCM音频数据PCM是一种无损音频格式,通常采样位数为16位,采样频率可以是44.1kHz或48kHz。 2. 将PCM音频数据输入到fdk-aac编码器中。编码器会对音频数据进行分析和处理,并根据一些音频压缩算法将其转换为AAC格式。 3. 设置编码参数,例如压缩比特率、编码质量等。参数的设置可以影响到最终编码后的音质和文件大小。 4. 运行编码器,等待编码过程完成。编码器会根据设置的参数和音频数据的特性,对PCM音频数据进行压缩编码。 5. 检查编码结果,确保生成的AAC文件符合预期。检查可以包括文件大小、音频质量等方面的评估。 6. 存储或传输编码后的AAC文件。编码后的文件可以被用于存储、传输和播放等用途。 通过使用fdk-aac编码器,可以将较大的PCM音频数据压缩为较小的AAC文件,从而节省存储空间和传输带宽,并且能够保持较高的音频质量。 ### 回答3: fdk-aac是一种高度效率的音频编码器,它可以将原始的PCM音频信号转换为AAC格式的音频文件。PCM是一种未经压缩的音频数据格式,其采样率和位深度保持不变,需要较大的存储空间。而AAC是一种压缩的音频格式,可以以更小的文件大小提供高质量的音频。 使用fdk-aac编码pcm音频的步骤如下: 首先,我们需要准备一个PCM音频文件作为输入。这个PCM文件可以是从麦克风、音乐播放器或其他设备中捕获的音频信号。 然后,我们需要使用fdk-aac编码器对PCM文件进行编码。编码过程中,fdk-aac会分析音频信号的特征并进行压缩,以减小文件大小同时保持音质。 编码完成后,我们可以得到一个AAC格式的音频文件。这个文件具有较小的文件大小,适合在网络传输或存储中使用。 最后,我们可以使用支持AAC格式的播放器或设备来播放这个编码后的音频文件。 总结起来,fdk-aac编码器可以将PCM音频信号转换为AAC格式的音频文件,实现高质量音频的压缩和存储。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值