本文旨在为对音频相关应用感兴趣的软件开发人员提供指导,特别是那些对音频文件进行AMR窄带编码和解码的音频软件开发人员。除非需要手动解码捕获的数据,否则不需要了解AMR编码和解码的详细信息。
整个应用程序是用C语言编写的,包含简单的函数和简单的Port Audio库以及opencore-amr库调用。任何在C语言领域有相当工作经验的人都能理解这个程序。
Port-Audio是一个免费的、跨平台的、开源的音频I/O库。它允许编写简单的音频程序,使用C或C++编写,这些程序将在许多平台上编译和运行,包括Windows、Macintosh OS X和Unix(OSS/ALSA)。它的目的是促进不同平台上的开发者之间的音频软件交换。Port Audio软件有许多有用的示例。
官方网址:
OpenCORE框架实现的自适应多速率窄带和宽带(AMR-NB和AMR-WB)语音编解码器库。VisualOn实现的自适应多速率宽带(AMR-WB)编码器和高级音频编码(AAC)编码器库。
官方Opencore AMR网址: 或
数据流图如下:
有关Port Audio调用的更多详细信息,请参见Port Audio文档,有关AMR窄带,请参见opencore-amr文档。
初始化Port Audio并使用以下配置打开Port Audio流:8000采样率、16位有符号PCM数据、帧大小为80个样本,意味着每帧10毫秒的音频数据。流启动后,每10毫秒调用一次记录回调,传入一帧音频数据。
使用适当的配置参数初始化opencore-amr库,以匹配Port-Audio捕获配置。通过调用其Encoder_Interface_init
函数初始化opencore-amr编码接口。
当Port-Audio记录回调被调用时,原始音频数据存储在输入缓冲区中,将缓冲区和长度传递给amr编码器,amr编码器返回编码数据。通过调用Encoder_Interface_Encode
函数,原始音频数据被转换为amr-nb编码数据。
Amr-nb音频具有签名头,用于标识二进制文件为amr音频文件。没有这个AMR签名,amr音频播放器无法播放音频文件。打开文件指针,首先将AMR签名#!AMR\n
写入二进制文件,然后连续写入AMR编码数据。完成所有音频帧编码后关闭文件指针。
关闭与amr库相关的所有资源。opencore退出函数如下:Encoder_Interface_exit
。
使用Pa_CloseStream()
函数关闭流。
执行和收听捕获的音频文件所需的软件如下: