SSU_SSL100算法使用参考
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0.0 | 07/12/2021 | |
1.1.0 | 04/06/2022 | |
2.0.0 | 11/29/2022 |
1. 概述¶
1.1. 算法说明¶
声源定位(Sound Source Localization, SSL)算法是对麦克风阵列获取的数据进行处理,从而获得声源方向的算法。
1.2. 注意¶
-
本算法工作推荐采样率至少为16kHz,每一帧长度为4096个采样点。
-
使用本算法前,请务必确认硬件通道顺序与软件通道顺序一致,否则算法结果是错误的。确认方法为:每次录制音频时堵住一个麦克风,收集音频中没有声音的通道即为该麦克风对应的软件通道。重复上述测试,直到确定出每个麦克风对应的通道,如果硬件通道顺序与软件通道顺序不一致,请调整顺序后再送入算法运行。
-
算法输入与ALSA一致,即每个通道交替,以四通道为例,输入顺序为:
Chn0 Chn1 Chn2 Chn3 Chn0 Chn1 Chn2 Chn3 Chn0 Chn1 Chn2 Chn3
-
本算法目前支持2/4麦线形阵列和4麦圆形阵列,其通道顺序与硬件排列如下图所示:
图1.1: 2麦线形阵列通道排列
图1.2: 4麦线形阵列通道排列
图1.3: 4麦圆型阵列通道排列
2. API 参考¶
2.1. 功能模块API¶
API名称 | 功能 |
---|---|
IaaSsl_GetBufferSize | 获取SSL算法运行需要的内存大小 |
IaaSsl_Init | 初始化SSL算法 |
IaaSsl_SetConfig | 设置SSL算法参数 |
IaaSsl_GetConfig | 打印SSL算法参数 |
IaaSsl_GetInputSamples | 获取SSL算法输入的采样点数 |
IaaSsl_Run | SSL算法处理 |
IaaSsl_Free | 释放SSL算法资源 |
IaaSsl_setCallbackFunc | SSL算法验证回调函数 |
2.2. IaaSsl_GetBufferSize¶
-
功能
获取SSL算法运行所需要的内存大小。
-
语法
int IaaSsl_GetBufferSize(void);
-
形参
参数名称 描述 输入/输出 -
返回值
返回值为SSL算法运行所需要的内存大小
-
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
-
注意
该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。
-
举例
无。
2.3. IaaSsl_Init¶
-
功能
初始化SSL算法需要的内存。
-
语法
SSL_HANDLE IaaSsl_Init(char* workBufAddress, AudioSslInit_t *sslInit);
-
形参
参数名称 描述 输入/输出 workBufAddress SSL算法使用的内存地址 输入 sslInit SSL算法的初始化结构体指针 输入 -
返回值
返回值 结果 handle 成功 NULL 失败 -
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
-
举例
无。
2.4. IaaSsl_SetConfig¶
-
功能
初始化SSL算法需要的参数。
-
语法
int IaaSsl_SetConfig(SSL_HANDLE handle, AudioSslConfig_t *sslConfig);
-
形参
参数名称 描述 输入/输出 handle SSL算法handle 输入 sslConfig SSL算法的初始化结构体指针 输入 -
返回值
返回值 结果 0 成功 非0 失败,参照错误码 -
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
-
举例
无。
2.5. IaaSsl_GetConfig¶
-
功能
打印SSL算法需要的参数。
-
语法
int IaaSsl_GetConfig(SSL_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle SSL算法handle 输入 -
返回值
返回值 结果 0 成功 非0 失败,参照错误码 -
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
-
举例
无。
2.6. IaaSsl_GetInputSamples¶
-
功能
初始化SSL算法输入所需的总样本数。
-
语法
int IaaSsl_GetInputSamples(SSL_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle SSL算法handle 输入 -
返回值
返回值 结果 输入长度 成功 其他值 失败,参照错误码 -
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
-
注意
- 此函数非必须使用。
2.7. IaaSsl_Run¶
-
功能
SSL算法处理
-
语法
int IaaSsl_Run(SSL_HANDLE handle, const short *data);
-
形参
参数名称 描述 输入/输出 handle 算法handle 输入 data 输入数据 输入 -
返回值
返回值 结果 角度值 成功 其他值 失败,参照错误码 -
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
-
注意
- 所有通道采样率和采样位宽应该一致
-
举例
参考Demo code
2.8. IaaSsl_Free¶
-
功能
释放SSL算法的资源
-
语法
int IaaSsl_Free(SSL_HANDLE handle);
-
形参
参数名称 描述 输入/输出 handle SSL算法handle 输入 -
返回值
返回值 结果 0 成功 非0 失败,参照错误码 -
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
-
注意
- 必须先调用IaaSsl_Free,再释放供SSL算法所使用的内存。
-
举例
无。
2.9. IaaSsl_setCallbackFunc¶
-
功能
SSL算法验证回调函数
-
语法
int IaaSsl_setCallbackFunc(int(*log)(const char *szFmt, ...), int(*envSet)(char *key, char *par), int(*envGetString)(char *var, char *buf, unsigned int size), int(*envSave)(void), int(*readUuid)(unsigned long long *u64Uuid));
-
依赖
-
头文件: AudioSSLProcess.h
-
库文件: libSSL100_LINUX.so/ libSSL100_LINUX.a
-
3. SSL 数据类型¶
3.1. SSL模块相关数据类型定义¶
数据类型 | 定义 |
---|---|
AudioSslInit_t | SSL算法初始化数据结构体类型 |
AudioSslConfig_t | SSL算法配置参数数据结构体类型 |
SslSampleRate_e | SSL算法支持的采样率类型 |
SslMicGeometry_e | SSL算法支持的阵列物理结构 |
SSL_HANDLE | SSL算法句柄类型 |
3.2. AudioSslInit_t¶
-
说明
定义SSL算法的配置参数结构体。
-
定义
typedef struct{ int sampleRate; int bitWidth; int micNum; float soundSpeed; float micCoordinate[4][2]; SslMicGeometry_e micGeometry; }AudioSslInit_t;
-
成员
成员名称 描述 sampleRate 语音采样率,推荐大于8kHz bitWidth 语音采样位宽 micNum 麦克风数目 soundSpeed 环境声速 micCoordinate 麦克风阵列中麦克风二的维坐标,参考图1.1/1.2/1.3 micGeometry 麦克风阵列物理结构 -
注意事项
-
采样位宽只支持16bit
-
采样率推荐值大于8kHz
-
目前只支持2/4麦线形阵列和4麦圆形阵列
-
-
相关数据类型及接口
3.3. AudioSslConfig_t¶
-
说明
定义SSL算法的参数配置参数结构体。
-
定义
typedef struct { int sslResolution; int vadLevel; int lowFreq; int highFreq; }AudioSslConfig_t;
-
成员
成员名称 描述 sslResolution 声源定位搜索步长,值越大,搜索步长越大,运行时间越短
线形阵列取值范围: 1~180, 步长:1, 推荐值:5
圆形阵列取值范围: 1~360, 步长:1, 推荐值:5vadLevel 语音活动检测等级,值越小,激活算法的声音要求能量越高
取值范围:1~7, 根据实际使用情况设置,推荐值:7lowFreq 算法使用声音频率下限
取值范围:0~采样率/2, 且必须小于highFreqhighFreq 算法使用声音频率上限
取值范围:0~采样率/2, 且必须大于lowFreq -
相关数据类型及接口
3.4. SslSampleRate_e¶
-
说明
SSL算法支持的采样率类型。
-
定义
typedef enum{ IAA_SSL_SAMPLE_RATE_8000 = 8000, IAA_SSL_SAMPLE_RATE_16000 = 16000, IAA_SSL_SAMPLE_RATE_24000 = 24000, IAA_SSL_SAMPLE_RATE_32000 = 32000, IAA_SSL_SAMPLE_RATE_48000 = 48000, }SslSampleRate_e;
-
成员
成员名称 描述 IAA_SSL_SAMPLE_RATE_8000 8K采样率 IAA_SSL_SAMPLE_RATE_16000 16K采样率 IAA_SSL_SAMPLE_RATE_24000 24K采样率 IAA_SSL_SAMPLE_RATE_32000 32K采样率 IAA_SSL_SAMPLE_RATE_48000 48K采样率 -
注意事项
- 推荐使用大于8kHz采样率。
-
相关数据类型及接口
3.5. SslMicGeometry_e¶
-
说明
SSL算法支持麦克风阵列的物理结构。
-
定义
typedef enum{ IAA_SSL_UNIFORM_LINEAR_ARRAY = 0, IAA_SSL_UNIFORM_CIRCULAR_ARRAY, }SslMicGeometry_e;
-
成员
成员名称 描述 IAA_SSL_UNIFORM_LINEAR_ARRAY 均匀线形阵列 IAA_SSL_UNIFORM_CIRCULAR_ARRAY 均匀圆形阵列 -
相关数据类型及接口
3.6. SSL_HANDLE¶
-
说明
定义SSL算法的句柄类型。
-
定义
typedef void* SSL_HANDLE;
-
成员
成员名称 描述 -
相关数据类型及接口
4. 错误码¶
SSL API 错误码如表下所示:
错误码 | 宏定义 | 描述 |
---|---|---|
0x00000000 | ALGO_SSL_RET_SUCCESS | SSL运行成功 |
0x20000401 | ALGO_SSL_RET_INVALID_LICENSE | LICENSE无效 |
0x20000402 | ALGO_SSL_RET_INVALID_HANDLE | HANDLE无效 |
0x20000403 | ALGO_SSL_RET_INVALID_SAMPLERATE | 采样率不支持 |
0x20000404 | ALGO_SSL_RET_INVALID_BITWIDTH | 采样位数不支持 |
0x20000405 | ALGO_SSL_RET_INVALID_MIC_COORDINATE | 麦克风阵列坐标不支持 |
0x20000406 | ALGO_SSL_RET_INVALID_VAD_LEVEL | 语音活动检测等级不支持 |
0x20000407 | ALGO_SSL_RET_INVALID_FREQRANGE | 频率范围不支持 |
0x20000408 | ALGO_SSL_RET_INVALID_SSL_RESOLUTION | 声源定位搜索步长不支持 |