1、README
前言
- AMR-NB(AMR-NarrowBind):语音带宽范围:300 - 3700Hz,8KHz采样频率;
- AMR-WB(AMR-WideBand):语音带宽范围50 - 7000Hz,16KHz采样频率。
不管NB还是WB,一帧都是20ms,一秒50帧。
a. 开源库下载地址
opencore-amr-0.1.3.tar.gz:支持amr-nb的编码与解码、amr-wb的解码,但不支持amr-wb的编码;
vo-amrwbenc-0.1.3.tar.gz:仅支持amr-wb的编码。
opencore-amr/vo-amrwbenc的下载地址:https://sourceforge.net/projects/opencore-amr/files/
b. 编译开源库
opencore-amr
#!/bin/bash
tar xzf opencore-amr-0.1.3.tar.gz
cd opencore-amr-0.1.3/
./configure --prefix=$PWD/_install # --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc
make -j96
make install
vo-amrwbenc
#!/bin/bash
tar xzf vo-amrwbenc-0.1.3.tar.gz
cd vo-amrwbenc-0.1.3
./configure --prefix=$PWD/_install # --host=arm-linux-gnueabihf CC=arm-linux-gnueabihf-gcc
make -j96
make install
c. demo使用
- 编译
make
# 或者打开编译调试信息
make clean && make DEBUG=1
- 使用
# 编码
$ ./pcm2amrwb
Usage:
./pcm2amrwb ./audio/test_16000_16_1.pcm out1.amr
./pcm2amrwb ./audio/test_16000_16_2.pcm out2.amr (need to modify PCM_CHANNELS=2)
# 解码
$ ./amrwb2pcm
Usage:
./amrwb2pcm ./audio/test.amr out_16000_16_1.pcm
d. 参考资料
-
opencore-amr-0.1.3/test/amrwb-dec.c
-
vo-amrwbenc-0.1.3/amrwb-enc.c
e. demo目录架构
$ tree
.
├── audio
│ ├── test_16000_16_1.pcm
│ ├── test_16000_16_2.pcm
│ └── test.amr
├── include
│ ├── dec_if.h
│ └── enc_if.h
├── lib
│ ├── libopencore-amrwb.a
│ └── libvo-amrwbenc.a
├── main_amrwb2pcm.c
├── main_pcm2amrwb.c
├── Makefile
├── README.md
└── reference
├── amrwb-dec.c
├── amrwb-enc.c
└── AMR编码文件解析_hanzhen7541的博客-CSDN博客.mhtml
2、主要代码片段
main_pcm2amrwb.c
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "enc_if.h"
// 编译时Makefile里控制
#ifdef ENABLE_DEBUG
#define DEBUG(fmt, args...) printf(fmt, ##args)
#else
#define DEBUG(fmt, args...)
#endif
/* PCM参数 */
#define PCM_SAMPLERATE (16000) /* 只能编码 8 khz */
#define PCM_SAMPLEBITS (16) /* 只支持16位 */
#define PCM_CHANNELS (1) /* 不管PCM输入是单声道还是双声道,这里输出的amr都是单声道的 */
/* amr一帧数据是20ms,一秒50帧。16000,16,1 ==> 640 Bytes */
#define PCM_ONE_FRAME_SIZE (PCM_SAMPLERATE/50 * PCM_SAMPLEBITS/8 * PCM_CHANNELS)
/*******************
AMR参数
mode rate
0 6600
1 8850
2 12650
3 14250
4 15850
5 18250
6 19850
7 23050
8 23850
*******************/
#define AMR_ENCODE_MODE (8)
/* 是否使能背景噪声编码模式 */
#define DTX_DECODE_ENABLE 1
#define DTX_DECODE_DISABLE