pcm转aac

一:下载faac库

       1:我已经修改各种错误后的源码 :faac-1.28源码,已解决编译错误,工具链aarch64-linux-gnu-已编译成功资源-CSDN文库

       2:官方源码:

        wget http://downloads.sourceforge.net/project/faac/faac-src/faac-1.28/faac-1.28.tar.gz

二:编译faac(官方源码)

         tar zxvf faac-1.28.tar.gz 

         cd faac-1.28/

        ./configure --enable-share  --host=arm-linux --prefix=/home/hfzuo/work/faac/_install CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++

       make

       make install   

        将动态库libfaac.so.0库拷贝到开发板即可

三:错误解决

        1:错误:mpeg4ip.h:126:7: error: ambiguating new declaration of ‘char* strcasestr(const char*, const char*)’
 char *strcasestr(const char *haystack, const char *needle);

        解决办法:
        从123行开始修改此文件mpeg4ip.h,到129行结束。
        修改前:
        #ifdef __cplusplus
        extern "C" {
        #endif
        char *strcasestr(const char *haystack, const char *needle);
        #ifdef __cplusplus
        }
        #endif

        修改后:
        #ifdef __cplusplus
        extern "C++" {
        #endif
        const char *strcasestr(const char *haystack, const char *needle);
        #ifdef __cplusplus
        }
        #endif

        2:错误:

       rtphint.cpp:345:22: error: ISO C++ forbids comparison between pointer and integer [-fpermissive]
        if (pSlash != '\0') {

      解决办法:if (pSlash != (char*)'\0') 

四:编写代码pcm转aac

调用pcm_to_aac_init 初始化,然后循环调用pcm_to_aac即可完成转码

#include "faac.h"
#include <stdio.h>
#include "user_faac.h"
faacEncHandle hEncoder;
faacEncConfigurationPtr pConfiguration;
unsigned long nMaxOutputBytes = 0;
unsigned long nPCMBitSize = 16; // 单样本位数
unsigned long nInputSamples = 0;
void pcm_to_aac_init(void)
{
    unsigned long nSampleRate = 48000; // 采样率
    unsigned int nChannels = 2;        // 声道数

    hEncoder = faacEncOpen(nSampleRate, nChannels, &nInputSamples, &nMaxOutputBytes);
    printf("XXXXXXXXXXnInputSamples=%lu,nMaxOutputBytes=%lu\r\n", nInputSamples, nMaxOutputBytes);
    pConfiguration = faacEncGetCurrentConfiguration(hEncoder);
    pConfiguration->aacObjectType = LOW; // 设置AAC类型
    pConfiguration->useTns = 0;
    pConfiguration->useLfe = 0;                     // 是否允许一个声道为低频通道
    pConfiguration->outputFormat = 1;               // RAW_STREAM = 0, ADTS_STREAM=1  (ADTS可以实现单帧单独解码,raw由于缺少头无法单帧解码,因此无法做实时传输)
                                                    // pConfiguration->bitRate =48000;  //设置比特率
    pConfiguration->inputFormat = FAAC_INPUT_16BIT; // 设置输入PCM格式

    pConfiguration->mpegVersion = MPEG2;
    //  pConfiguration->bandWidth = 32000;

    faacEncSetConfiguration(hEncoder, pConfiguration);
}

int pcm_to_aac(unsigned char *aac, unsigned char *pcm, int size)
{
    return faacEncEncode(hEncoder, (int *)pcm, nInputSamples, aac, nMaxOutputBytes);
}

void pcm_to_aac_close(void)
{
    faacEncClose(hEncoder);
}

        

        

  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Java是一种广泛应用于软件开发中的编程语言,而FAAC是一款常用的开源编码器,可以将PCM(脉冲编码调制)格式的音频换成AAC(高级音频编码)格式。下面是一种使用Java和FAAC库进行PCMAAC的简单示例。 首先,需要在Java项目中引入FAAC库的依赖。可以通过Maven等构建工具来添加FAAC库的依赖项。然后,在Java代码中调用FAAC库提供的方法来实现PCMAAC的功能。 ```java import com.googlecode.mp4parser.authoring.Sample; import java.io.FileInputStream; import java.io.FileOutputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.ShortBuffer; import java.util.ArrayList; public class PCM2AACConverter { // PCMAAC的方法 public static void pcmToAac(String inputPath, String outputPath) { try { FileInputStream fis = new FileInputStream(inputPath); FileOutputStream fos = new FileOutputStream(outputPath); int channels = 2; // 音频通道数 int sampleRate = 44100; // 采样率 int bitRate = 128000; // 码率 // 创建FAAC编码器 com.googlecode.mp4parser.authoring.Sample sample = new com.googlecode.mp4parser.authoring.Sample(); sample.begin(channels, sampleRate, bitRate); byte[] data = new byte[1024]; int bytesRead = 0; while ((bytesRead = fis.read(data)) > 0) { // 将PCM数据换成short类型的数组 ShortBuffer shortBuffer = ByteBuffer.wrap(data).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer(); short[] pcmData = new short[shortBuffer.remaining()]; shortBuffer.get(pcmData); // 将PCM数据添加到FAAC编码器 sample.add(pcmData); } // 完成PCM数据添加操作 sample.end(); // 获取AAC编码后的数据 ArrayList<byte[]> aacData = sample.getAACData(); // 将AAC数据写入输出文件 for (byte[] aacFrame : aacData) { fos.write(aacFrame); } fis.close(); fos.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { String inputPath = "input.pcm"; // 输入PCM文件的路径 String outputPath = "output.aac"; // 输出AAC文件的路径 pcmToAac(inputPath, outputPath); } } ``` 上述代码使用了FAAC库提供的`Sample`类来进行PCMAAC操作。通过`pcmToAac`方法,将输入的PCM文件换成AAC格式并输出到指定路径。在此过程中,需要指定音频的通道数、采样率和码率等参数。 要使用上述方法,首先需要确保Java项目已经引入FAAC库的依赖,同时将输入的PCM文件和输出的AAC文件放置在正确的路径下。 以上是一个简单的示例,仅供参考。实际应用中,可能需要根据具体需求对代码进行修改和优化。 ### 回答2: Java FAAC PCMAAC可以通过使用FAAC库和Java编程语言来实现。以下是一个简单的示例代码来演示如何使用Java FAAC库将PCM音频文件换为AAC格式: ```java import com.googlecode.faac.Faac; import com.googlecode.faac.FaacConfig; import com.googlecode.faac.FaacConfigParams; import com.googlecode.faac.FaacInstance; public class PCMtoAACConverter { public static void main(String[] args) { String pcmFile = "input.pcm"; String aacFile = "output.aac"; // 初始化FAAC库 Faac faac = Faac.getInstance(); // 创建FAAC实例 FaacInstance faacInstance = faac.faacEncOpenDefault(48000, 2); // 设置FAAC配置参数 FaacConfig faacConfig = faac.faacEncGetCurrentConfiguration(faacInstance); FaacConfigParams configParams = new FaacConfigParams(); configParams.setBitrate(128000); configParams.setInputFormat(Faac.FAAC_INPUT_FORMAT_16BIT); faacConfig.setParams(configParams); faac.faacEncSetConfiguration(faacInstance, faacConfig); // 打开PCM文件和AAC文件 faac.faacEncOpenFile(faacInstance, pcmFile, aacFile); // 开始换 faac.faacEncEncode(faacInstance); // 关闭文件和FAAC实例 faac.faacEncClose(faacInstance); faac.faacEncCloseFile(faacInstance); System.out.println("PCMAAC完成!"); } } ``` 上述代码示例使用了FAAC库提供的相关函数来实现PCM文件换为AAC文件的功能。其中,需先准备好待换的PCM音频文件和指定的输出AAC文件路径。代码中的配置参数可根据需求进行调整,例如比特率、通道数等。 需要注意的是,使用FAAC库需要先下载并导入合适的FAAC库文件到项目中,并进行相关的配置。此外,FAAC库是一个开源的第三方库,使用时需了解其许可证限制和相关文档。 ### 回答3: 要使用Java将PCM音频文件换为AAC格式,可以使用FAAC库。FAAC是一个用于将音频文件编码为AAC格式的开源库。 首先,需要确保已经下载并安装了FAAC库。然后,可以在Java项目中使用JNI(Java Native Interface)来调用FAAC库的功能。 在Java中使用JNI调用FAAC库时,可以使用JNIWrapper库。这个库提供了一种方便的方式来与C/C++代码进行交互。 首先,需要编写一个调用FAAC的Java类。在这个类中,可以使用JNIWrapper库提供的函数来加载FAAC库和调用它的函数。可以编写一个Java方法来将PCM文件换为AAC文件。 示例代码如下: ```java import com.jniwrapper.*; import com.jniwrapper.win32.jni.*; import com.jniwrapper.util.*; public class FaacConverter { private static final String LIBRARY_NAME = "your_FAAC_library_name"; static { NativeLibraryLoader.loadLibrary(LIBRARY_NAME); } public static native int convertPcmToAac(String pcmFilePath, String aacFilePath); public static void main(String[] args) { String pcmFilePath = "/path/to/pcm/file.pcm"; String aacFilePath = "/path/to/aac/file.aac"; int result = convertPcmToAac(pcmFilePath, aacFilePath); if (result == 0) { System.out.println("PCM file converted to AAC successfully."); } else { System.out.println("Failed to convert PCM file to AAC."); } } } ``` 要使用这个示例代码,需要将FAAC库文件与Java项目一起编译,并将LIBRARY_NAME变量设置为FAAC库的名称。 编写完Java类后,可以使用Java编译器将其编译为可执行的Java程序。 然后,可以通过运行这个程序来将PCM文件换为AAC文件。在main方法中,可以设置PCM文件的路径和要生成的AAC文件的路径。 运行这个程序后,如果换成功,将会在控制台打印出"PCM file converted to AAC successfully."的消息,否则将会打印出"Failed to convert PCM file to AAC."的消息。 这就是使用Java将PCM音频文件换为AAC格式的基本步骤。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值