HiSpark编程指南

- 调测资料
  - SDK Sample使用指南
    - 前言
    - 概述
    - Sample框架
    - 外设 Sample
    - SLE UART Sample
    - SLE UART DMA Sample
    - SLE Mouse Sample
    - SLE amic vdt with dongle
    - SLE microphone
    - SLE measure dis
    - BLE Lowpower Sample
    - BLE UART Sample
    - BLE Keyboard Sample
    - BLE SLE TAG Sample
    - BLE Mouse Sample
    - USB Keyboard Sample
    - USB Mouse Sample
    - USB AMIC VDT Sample
    - RCU
    - 多连接
    - air mouse
    - SLE MOUSE with Dongle
    - SLE OTA dongle
    - game mouse
    - BLE UUID
    - 缩略语
  - SDK二次开发网络安全注意事项
    - 前言
    - 产品安全解决方案
    - 结论
  - SDK开发环境搭建用户指南
    - 前言
    - 开发环境搭建
    - 编译SDK
    - 新建APP
  - 内存维测指导书
    - 前言
    - 简介
    - 内存维测功能
  - 射频AT测试指南
    - 前言
    - 射频测试AT指令
    - AT指令组包示例
    - 注意事项
  - 维测指导书
    - 前言
    - 概述
    - 日志说明
    - 日志分析
    - 问题定位
    - 典型案例
    - 常见问题FAQ
- 软件资料
  - AT命令使用指南
    - 前言
    - 指令说明
    - 通用AT指令
    - BT业务AT指令
    - 新增AT指令方法
  - DFU升级APK开发指南
    - 前言
    - 功能特性
    - 系统框架
    - 工程文件部署
    - 界面实现
    - 升级界面Fragment实现
    - 关于界面Fragment实现
    - 应用清单AndroidManifest
  - DFX软件开发指南
    - 前言
    - DIAG维测功能
    - 死机诊断
    - Dump解析
  - EFUSE使用指南
    - 前言
    - 概述
    - 使用软件接口读写EFUSE
    - 使用BurnTool烧写EFUSE
  - NFC TAG软件开发指导书
    - 前言
    - 概述
    - 开发指导
  - NV存储用户指南
    - 前言
    - NV简介
    - NV编译预置
    - NV API指南
    - 定制化NV结构使用介绍
    - 通过NV自定义传输数据最大长度
  - Release notes
    - 1.0.18版本描述文件
    - 1.0.17版本描述文件
    - 1.0.16版本描述文件
  - SDK开发指南
    - 前言
    - 概述
    - 系统接口
  - SDK接口变更说明书
    - 前言
    - BLE SDK接口变更说明
  - SP31 SLP使用指南
    - 开源版本
  - USB HID复合设备开发指南
    - 前言
    - 概述
    - 实现方式
  - 代码框架说明
    - 前言
    - SDK模块框架
    - SDK目录结构
    - SDK目录说明
  - 低功耗FAQ
    - 前言
    - 系统无法睡眠
    - IO无法唤醒系统
    - 唤醒后外设异常
    - 低功耗导致OTA升级异常
    - 功耗比预期高
    - 锁中断导致BT业务阻塞
    - 概率性狗超时
    - 供电模式&软件配置
    - 提前唤醒时间问题
  - 低功耗sample使用指南
    - 前言
    - 编译&测试
    - 系统状态管理
    - 用户指南
  - 低功耗开发指南
    - 前言
    - 低功耗概述
    - 低功耗方案
    - 开发指引
    - 功耗优化
    - 常见问题
  - 功率配置说明书
    - 前言
    - 射频功率配置说明
  - 升级方案使用指南
    - 前言
    - 概述
    - 升级包制作
    - 升级包传输
    - 升级包保存
    - 升级包本地升级
    - FAQ
  - 快速入门指南
    - 前言
    - 文档目录
    - 环境搭建
    - 基础功能开发
    - 调优
    - 特性开发
    - 测试报告
  - 星闪应用层SLE-Link协议
    - 前言
    - 概述
    - SLE Frame格式定义
    - 服务接口定义
    - 交互流程示例
  - 星闪软件开发指导书
    - 前言
    - 概述
    - Device Discovery接口
    - Connection Manager接口
    - SSAP Server接口
    - SSAP client接口
    - Low Latency接口
    - Transmission Manager接口
    - SLE Passkey接口
    - SLE Channel Map 接口
  - 红外学习使用指南
    - 前言
    - 红外学习方式
    - 通过比较器进行红外学习
    - 使用指南
  - 蓝牙软件开发指导书
    - 前言
    - 概述
    - GAP接口
    - GATT server接口
    - GATT client接口
  - 设备驱动开发指南
    - 前言
    - Pinctrl
    - GPIO
    - UART
    - SPI
    - I2C
    - ADC
    - DMA
    - PWM
    - WDT
    - Timer
    - Systick
    - TCXO
    - Flash
    - SFC
    - QDEC
    - KEYSCAN
    - PDM
    - USB_HID
    - USB_DFU
    - I2S
    - TRNG
    - 附：MIDDLEWARE
  - 音频编解码开发指导书
    - 前言
    - 概述
    - Audio Encoder
    - Audio Decoder
    - 调试与功能
- 工具资料
  - BurnTool工具使用指导书
    - 前言
    - BurnTool工具简介
    - 操作指南
    - FAQ
  - HiSpark Studio使用指南
    - 前言
    - 工具简介
    - 开发环境搭建
    - 工程管理
    - 工程配置
    - 编译运行
    - 软件包烧录
    - 栈分析和镜像分析
    - 工程调试
    - 串口控制台工具
    - Kconfig配置
    - GUI工程创建与使用
    - 高阶分析功能使用
    - 常见错误

### 该页内容

- 前言
- 概述
  - 错误码
- Audio Encoder
  - 概述
  - 开发流程
  - 注意事项
- Audio Decoder
  - 概述
  - 开发流程
  - 注意事项
- 调试与功能

# 前言

概述

BS2XV100通过API（Application Programming Interface）向开发者提供音频编解码的相关接口，包括编码器初始化及销毁接口、命令配置接口、编码一帧接口、解码一帧接口。

产品版本

与本文档对应的产品版本如下。

产品名称 | 产品版本
--- | ---
BS2X | V100

读者对象

本文档主要适用以下工程师：

- 技术支持工程

- 软件开发工程师

符号约定

在本文中可能出现下列标志，它们所代表的含义如下。

符号 | 说明
--- | ---
| 表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。
| 表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。
| 表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。
| 用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。
| 对正文中重点信息的补充说明。 “说明”不是安全警示信息，不涉及人身、设备及环境伤害信息。

修改记录

文档版本 | 发布日期 | 修改说明
--- | --- | ---
03 | 2025-05-30 | 新增“Audio Encoder”的“开发流程”小节内容。 更新“Audio Decoder”的“开发流程”小节内容。
02 | 2024-07-04 | 更新“概述”小节内容。 新增“Audio Encoder”的“开发流程”小节内容。 更新“Audio Decoder”的“开发流程”小节内容。 新增“调试与功能”小节内容。
01 | 2024-05-15 | 第一次正式版本发布。
00B02 | 2024-01-17 | 更新“Audio Decoder”的“开发流程”小节内容。 新增“调试与功能”章节内容。
00B01 | 2024-01-08 | 第一次临时版本发布。

# 概述

BS2XV100通过API（Application Programming Interface）面向开发者提供音频编解码功能的开发和应用接口，包括Audio Encoder、Audio Decoder两个部分。

各组件功能说明如下：

- Audio Encoder：音频编码器部分，主要提供sbc、msbc、opus、l2hc音频格式的编码功能。

- Audio Decoder：音频解码器部分，主要解码Audio Encoder编码出的sbc、msbc、opus、l2hc格式的码流。

> 说明： 该文档描述各个模块功能的基本流程和API接口描述。

## 错误码

Audio Codec使用错误码指示用户当前任务执行结果，如下表 错误码所示。

表 1 错误码

序号 | 定义 | 实际数值 | 描述
--- | --- | --- | ---
1 | AUDIO_SUCCESS | 0 | 执行成功错误码。
2 | ERR_HACODEC_INVALID_PARAM | 0x80005320 | 非法参数错误码。
3 | ERR_HACODEC_INVALID_SAMPLERATE | 0x80005321 | 非法采样率错误码。
5 | ERR_HACODEC_INVALID_BITDEPTH | 0x80005322 | 非法位宽错误码。
6 | ERR_HACODEC_INVALID_CHANNEL | 0x80005323 | 非法声道数错误码。
7 | ERR_HACODEC_NULL_PTR | 0x80005324 | 传入空指针错误码。
8 | ERR_HACODEC_STREAM_CORRUPT | 0x80005325 | 流损坏错误码。
9 | ERR_HACODEC_NOT_ENOUGH_DATA | 0x80005326 | 输入数据不足错误码。
10 | ERR_HACODEC_NOT_SUPPORT | 0x80005327 | 系统不支持错误码。
11 | ERR_HACODEC_INIT_FAILED | 0x80005328 | 初始化失败错误码。
12 | ERR_HACODEC_ENCODE_FAILED | 0x80005329 | 编码失败错误码。
13 | ERR_HACODEC_DECODE_FAILED | 0x8000532a | 解码失败错误码。
14 | ERR_HACODEC_WRONG_HEADER | 0x8000532b | 帧头错误错误码。
15 | ERR_HACODEC_ALLOC_MEM_FAILED | 0x8000532c | 内存申请失败错误码。
16 | ERR_HACODEC_MEM_COPY_FAILED | 0x8000532d | 内存拷贝失败错误码。
17 | ERR_HACODEC_NOT_ENOUGH_OUT_BUFFER_SIZE | 0x8000532e | 输出buffer空间不足错误码。
18 | ERR_HACODEC_NOT_ENOUGH_SCRATCH_BUFFER_SIZE | 0x8000532f | 暂存缓冲区空间不足错误码。
19 | ERR_HACODEC_READ_FIFO_NOT_ENOUGH_DATA | 0x80005330 | FIFO中无足够数据错误码
20 | ERR_HACODEC_WRITE_FIFO_OVERFLOW | 0x80005331 | 写FIFO溢出错误码

# Audio Encoder

## 概述

Audio Encoder主要提供音频编码功能，支持的规格有：

- MSBC：16k

- SBC：16k、48k

- opus：16k、48k

- l2hc：16k、48k

数据由MIC（AMIC/DMIC）采集，由PDM模块处理后送至Audio模块，由Audio Encoder进行编码。

## 开发流程

使用场景

当设备为发送端，需要音频功能时，由Audio Encoder提供音频编码功能。

参数及数据结构

本章节主要介绍编码涉及数据结构。

1.open param 公共参数，表1中初始化用作传参的结构体。

    ha_codec_enc_param {
        bool interleaved； /* 解码解交织模式 */
        uint32_t channels; /* 声道数 */
        int32_t bit_depth; /* 位宽 */
        uint32_t sample_rate; /* 采样率 */
        uint32_t samples_per_frame; /* 每帧采样点 */
        void *private_data； /* 编码器私有参数 */
        uint32_t private_data_size; /* 解码器私有参数大小 */
    }

2.in_pkt编码器输入buf，表1中作为编码输入的结构体。

    ha_codec_enc_in_packet {
        int64_tpts; /* 音频同步使用，保留参数，暂不使用 */
        uint8_t *data; /* 输入数据指针 */
        uint32_t size; /* 输入数据大小 */
    }

3.out_pkt编码器输出buf，表1中作为编码输出的结构体。

    ha_codec_enc_out_packet {
        int32_t *bits_out_buf; /* 编码器输出buffer */
        uint32_t bits_out_buf_size; /* 编码器输出buffer大小*/
        uint32_t bits_out_bytes; /* 编码数据帧大小，单位Byte */
        uint32_t bit_rate; /* 比特率 */
    }

4.send_cmd命令字段，表1中cmd命令字。

ACODEC_PRIVATE_PARAM_GET_CMD 0xFFFF100C 获取编解码器私有参数

ACODEC_IN_FRAME_SIZE_GET_CMD 0xFFFF100D 获取编码输入数据大小

ACODEC_OUT_FRAME_SIZE_GET_CMD 0xFFFF100E 获取编码输出数据大小

ACODEC_SET_PLC_OFF_THR_CMD 0xFFFF1010 设置plc最大帧数，仅sbc解码有

ACODEC_GET_PLC_OFF_THR_CMD 0xFFFF1011 获取当前plc最大帧数，仅sbc解码有

功能

Audio Encoder提供的接口如表1所示。

表 1 Audio Encoder接口

接口名称 | 描述 | 参数说明 | 返回信息说明
--- | --- | --- | ---
name | 获取编码器名称 | - | char
codec_id | 获取编码器id | - | enum
version.version | 获取版本号 | - | int
description | 获取描述 | - | char
init | 编码器初始化 | encoder：二维指针，指向编码器实例的地址 open_param：公共参数，如编码器的采样率、位宽、声道数等 | 错误码。
deinit | 编码器去初始化，释放编码使用的内存空间 | encoder：编码器实例地址 | 错误码。
send_cmd | cmd接口，可获取输入输出所需数据大小 | encoder：编码器实例地址 cmd：cmd命令字 arg：接收返回值 | 错误码。
get_max_bits_out_size | 获取最大输出大小 | encoder：编码器实例地址 out_sizes：接收输出大小size | 错误码。
encode_frame | 编码接口 | encoder：编码器实例地址 in_pkt：输入数据（编码前数据）buffer out_pkt：输出数据（编码后数据）buffer | 错误码。
overlay_enc_entry | 封装上述编码器接 | - | NULL

开发流程

BS2X支持多规格编码器，编码器调用接口抽象为overlay_enc_entry，接口返回值解引用后对应元素为编码器实例，实例如表1所示。

Audio Encoder典型开发流程如下。

Server Node：

1. 调用overlay_enc_entry()->init（参数如表1所示），完成编码器初始化。

2. 调用overlay_enc_entry()->get_max_bits_out_size（参数如表1所示），获取编码器所需的输出buffer大小，用于判断当前系统中的预留空间是否满足需求。

3. 调用overlay_enc_entry()->encode_frame参数（参数如表1所示），对输入的数据进行编码，可通过返回值判断是否编码成功，如果返回AUDIO_SUCCESS，则表明编码成功，in_pkt参数的data指针会偏移掉一帧pcm的数据量，in_pkt参数的size大小会减去编码消耗的pcm数据量的大小。编码后输出码流写入out_pkt参数的bits_out_buf指针指向的空间，out_pkt参数的bits_out_bytes变量刷新为编码输出码率的数据量。如果编码接口返回值不为AUDIO_SUCCESS，则可根据“”中的错误码确定失败类型。编码失败，in_pkt中的数据不会消耗。

4. 连续调用overlay_enc_entry()->encode_frame，直至输入buffer数据全部处理，外部不再送数据，编码完成。

5. 调用overlay_enc_entry()->deinit（参数如表1所示），完成编码器销毁。

示例伪代码

    extern void *overlay_enc_entry(void);
    int main()
    {
        设置open_param参数
        overlay_enc_entry()->init/* 初始化 */

        overlay_enc_entry()->get_max_bits_out_size /* 获取所需输出buff大小 */
        if（buff大小不满足）
        overlay_enc_entry()->deinit；/* 销毁编码器 */

        while （编码未完成）
        overlay_enc_entry()->encode_frame；
        if（编码成功）
        根据out_buf更新输入数据指针及size；
        else
        根据错误码处理；
        end if

        if （编码完成）
        break；

        overlay_enc_entry()->deinit /* 编码完成，销毁编码器 */
    }

## 注意事项

单片仅支持一种规格的编码器，如：若支持sbc编码就不支持其他两种格式的编码。

# Audio Decoder

## 概述

Audio Decoder主要提供音频解码功能，支持的规格有：

- MSBC：16k

- SBC：16k、48k

- opus：16k、48k

- l2hc：16k、48k

## 开发流程

使用场景

当设备为接收端，需要音频功能时，由Audio Decoder提供音频解码功能。

参数及数据结构

本章节主要介绍编码涉及数据结构。

1.open param 公共参数，表1中初始化用作传参的结构体。

    ha_codec_dec_param {
        uint32_t channels; /* 声道数 */
        int32_t bit_depth; /* 位宽 */
        uint32_t sample_rate; /* 采样率 */
        void *private_data； /* 编码器私有参数 */
        uint32_t private_data_size; /* 解码器私有参数大小 */
    }

2.in_pkt编码器输入buf，表1中作为解码输入的结构体。

    ha_codec_dec_in_packet {
        int64_t pts; /* 音频同步使用 */
        uint8_t *data; /* 输入数据指针，解码完成后更新该指针 */
        uint32_t size; /* 输入数据大小 */
        bool eos; /* 是否为最后一帧 */
        bool pag_loss; /* 是否丢包 */
    }

3.out_pkt编码器输出buf，表1中作为解码输出的结构体。

    ha_codec_dec_out_packet {
        int32_t *pcm_out_buf; /* 解码器输出buffer */
        uint32_t pcm_out_buf_size; /* 解码器输出buffer大小*/
        int32_t *bits_out_buf; /* 指向透传解码输出指针 */
        uint32_t bits_out_buf_size; /* 透传缓冲区大小 */
        uint32_t pcm_out_samples; /* 解码pcm输出采样点 */
        bool interleaved； /* 解码解交织模式 */
        uint32_t bit_per_sample; /* 位宽 */
        uint32_t bits_out_bytes; /* 透传输出帧大小 */
        uint32_t out_channels; /* 输出声道数 */
        uint32_t out_sample_rate; /* 输出采样率 */
        uint32_t org_channels; /* 码流原始声道数 */
        uint32_t org_sample_rate; /* 原始码流采样率 */
        uint32_t bit_rate; /* 码流压缩率 */
        ha_codec_out_pts_info; /* pts信息 */
        uint32_t frame_index; /* 输出帧序号 */
    }

4.send_cmd命令字段，表1中cmd命令字

ACODEC_PRIVATE_PARAM_GET_CMD 0xFFFF100C 获取解码器私有参数

ACODEC_IN_FRAME_SIZE_GET_CMD 0xFFFF100D 获取解码输入数据大小

ACODEC_OUT_FRAME_SIZE_GET_CMD 0xFFFF100E 获取解码输出数据大小

功能

Audio Decoder提供的接口如表1所示。

表 1 Audio Decoder接口

接口名称 | 描述 | 参数说明 | 返回信息说明
--- | --- | --- | ---
name | 获取解码器名称 | - | char
codec_id | 获取解码器id | - | enum
version.version | 获取版本号 | - | int
description | 获取描述 | - | char
init | 解码器初始化 | decoder：二维指针，指向解码器实例的地址 open_param：公共参数，如解码器的采样率、位宽、声道数等 | 错误码
deinit | 解码器去初始化，释放解码使用的内存空间 | decoder：解码器实例地址 | 错误码
send_cmd | cmd接口，可获取输入输出所需数据大小 | decoder：解码器实例地址 cmd：cmd命令字 arg：接收返回值 | 错误码
get_max_pcm_out_size | 获取最大输出大小 | decoder：解码器实例地址 out_sizes：接收输出大小size | 错误码
decode_frame | 解码接口 | decoder：解码器实例地址 in_pkt：输入数据（解码前数据）buffer out_pkt：输出数据（解码后数据）buffer | 错误码
overlay_dec_entry | 封装上述编码器接口 | - | -

开发流程

BS2X支持多规格解码器，解码器调用接口抽象为overlay_dec_entry，接口返回值解引用后对应元素为解码器实例，实例如表1所示。

Audio Decoder典型的开发流程如下。

Server Node：

1. 调用overlay_dec_entry()->init（参数如表1所示），完成解码器初始化；

2. 调用overlay_dec_entry()->get_max_pcm_out_size（参数如表1所示），获取解码器所需的输出buffer大小，用于判断当前系统中的预留空间是否满足需求；

3. 调用overlay_dec_entry()->decode_frame（参数如表1所示），对输入的数据进行解码，可通过返回值判断是否解码成功，如果返回AUDIO_SUCCESS，则表明解码成功，in_pkt参数的size指针会减少消耗的数据量的大小，例如原始值为1024，消耗68Byte数据，则size的值减少68，in_pkt参数的data指针偏移68Byte。解码生成的pcm数据写入out_pkt参数的pcm_out_buf指针指向的空间，pcm_out_buf_size变量刷新为输出pcm数据的大小。如果编码接口返回值不为AUDIO_SUCCESS，则可根据错误码中的错误码确定失败类型。解码失败，in_pkt中的数据也可能会消耗，可根据in_pkt参数中的size变量值的变化情况判断输入数据的消耗情况；

4. 连续调用overlay_dec_entry()->decode_frame，直至输入buffer数据全部处理，外部不再送数据，解码完成；

5. 调用overlay_dec_entry()->deinit（参数如表1所示），完成解码器销毁

示例伪代码

    extern void *overlay_dec_entry(void);
    int main()
    {
        设置open_param参数
        overlay_dec_entry()->init/* 初始化 */

        overlay_dec_entry()->get_max_pcm_out_size /* 获取所需输出buff大小 */
        if（buff大小不满足）
        overlay_dec_entry()->deinit；/* 销毁解码器 */

        while （解码未完成）
        overlay_dec_entry()->decode_frame；
        if（编码成功）
        根据out_buf更新输入数据指针及size；
        else
        根据错误码处理；
        end if

        if （解码完成）
        break；

        overlay_dec_entry()->deinit /* 解码完成，销毁解码器 */
    }

## 注意事项

- 单片仅支持一种规格的解码器，如：若支持sbc解码就不支持其他两种格式的解码。

- 解码器需要与本产品编码器配对使用。

# 调试与功能

ITCM链接

链接脚本路径：drivers\chips\bs2x\board\linker\standard\linker.prelds

通过.plt_ramtext段将代码链接至ITCM上。

如链接libsbc_enc_all_itcm.a，在段中添加*libsbc_enc_all_itcm.a:*.o* (.text .text* .rodata .rodata* .srodata .srodata*)。

性能数据表

CODEC | 类型 | 帧长 | 采样率 | 算力 | ITCM | 动态空间 | 码率
--- | --- | --- | --- | --- | --- | --- | ---
sbc | 编码 | 8ms | 16kHz | 5Mcps | 10k Byte | 1.93kByte | 68kbps
2.67ms | 48kHz | 10.2Mcps | 10k Byte | 1.93k Byte | 126kbps
2.67ms | 48kHz | 10.5Mcps | 10k Byte | 1.93k Byte | 204kbps
2.67ms | 48kHz | 10.8Mcps | 10k Byte | 1.93k Byte | 258kbps
解码 | 8ms | 16kHz | 4Mcps | 13k Byte | 1.14k Byte | 68kbps
2.67ms | 48kHz | 8.5Mcps | 13k Byte | 1.14k Byte | 126kbps
2.67ms | 48kHz | 8.7Mcps | 13k Byte | 1.14k Byte | 204kbps
2.67ms | 48kHz | 8.9Mcps | 13k Byte | 1.14k Byte | 258kbps
msbc | 编码 | 7.5ms | 16kHz | 5Mcps | 10k Byte | 1.93k Byte | 64kbps
解码 | 7.5ms | 16kHz | 4Mcps | 13k Byte | 1.14k Byte | 64kbps
l2hc | 编码 | 10ms | 16kHz | 35Mcps | 30k Byte | 7k Byte | 64kbps
10ms | 48kHz | 37.5Mcps | 30k Byte | 7k Byte | 64kbps
5ms | 48kHz | 47Mcps | 30k Byte | 7k Byte | 96kbps
解码 | 10ms | 16kHz | 13.6Mcps | 30k Byte | 3.7k Byte | 64kbps
10ms | 48kHz | 24Mcps | 30k Byte | 10k Byte | 64kbps
5ms | 48kHz | 29Mcps | 30k Byte | 10k Byte | 96kbps
opus | 编码 | 10ms | 16kHz | 36Mcps | 28k Byte | 7.1k Byte | 64kbps
10ms | 48kHz | 52Mcps | 28k Byte | 7.1k Byte | 64kbps
5ms | 16kHz | 41Mcps | 28k Byte | 7.1k Byte | 64kbps
5ms | 48kHz | 55Mcps | 30k Byte | 7.1k Byte | 64kbps
2.5ms | 48kHz | 45Mcps | 30k Byte | 7.1k Byte | 64kbps
解码 | 10ms | 16kHz | 21.5Mcps | 30k Byte | 9.1k Byte | 64kbps
10ms | 48kHz | 25Mcps | 30k Byte | 9.1k Byte | 64kbps
5ms | 16kHz | 25.3Mcps | 30k Byte | 9.1k Byte | 64kbps
5ms | 48kHz | 30Mcps | 30k Byte | 9.1k Byte | 64kbps
2.5ms | 48kHz | 30.2Mcps | 30k Byte | 9.1k Byte | 64kbps