SGS SRC 算法使用参考¶
REVISION HISTORY¶
| Revision No. | Description |
Date |
|---|---|---|
| 1.0 | 09/12/2020 | |
| 1.1 | 10/15/2020 | |
| 1.2 | 06/01/2021 | |
| 1.21 | 08/18/2022 | |
| 1.22 | 12/15/2022 | |
| 1.3 | 12/20/2023 | |
| 1.31 | 12/09/2024 | |
| 1.32 | 04/24/2025 | |
| 1.33 | 05/14/2025 | |
| 1.34 | 10/28/2025 | |
| 1.35 | 11/25/2025 |
1. 概述¶
1.1. 算法说明¶
SRC(Sample Rate Conversion)重采样,用于对音频流做采样频率转换,以获取不同采样频率的音频流。
关键词说明
采样频率: 每秒从连续讯号中取样的样本数。
注意
为方便调试和确认算法效果,需要用户应用自行实现替换算法参数和抓取音频数据的逻辑。
1.2. 基本结构¶

当SRC算法配置好内存、完成参数初始化与设定后,SRC只需要输入讯号Buffer,并将输入讯号Buffer按设定参数与算法处理后,将转换取样率后的结果输出到SRC输出讯号Buffer。
1.3. 功能介绍¶
重采样 :
16K取样率下采样至8K之范例:

16K取样率上采样至48K之范例:

所有可支持的取样率转换请参考 SrcConversionMode
1.4. 应用场景¶
转换取样率至相关应用之需求,例如不同音讯设备间的取样率匹配问题。
1.5. 芯片差异说明¶
在不同系列芯片,目前SRC算法效果上没有差异。
1.6. 实例介绍¶
使用SRC API获取SRC算法运行需要的内存大小、初始化SRC算法handle并配置相关参数、运行SRC算法与释放SRC算法资源。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include "AudioSRCProcess.h"
float AVERAGE_RUN(int a)
{
static unsigned int num = 0;
static float avg = 0;
if(num == 0) avg = 0;
num++;
avg = avg + ((float)a - avg) / ((float)num);
return avg;
}
unsigned int _OsCounterGetMs(void)
{
struct timeval t1;
gettimeofday(&t1,NULL);
unsigned int T = ( (1000000 * t1.tv_sec)+ t1.tv_usec ) / 1000;
return T;
}
typedef struct{
char chunkID[4];
int chunkSize;
char format[4];
char subchunk1ID[4];
int subchunk1Size;
short audioFormat;
short numChannels;
int sampleRate;
int byteRate;
short blockAlign;
short bitsPerSample;
char subchunk2ID[4];
int subchunk2Size;
}WaveHeaderStruct;
WaveHeaderStruct Header_struct;
void SetWaveHeader(int newSampleRate, char newBitDepth, char newNumChans)
{
// set all the ASCII literals
memcpy(Header_struct.chunkID, "RIFF", 4);
memcpy(Header_struct.format, "WAVE", 4);
memcpy(Header_struct.subchunk1ID, "fmt ", 4);
memcpy(Header_struct.subchunk2ID, "data", 4);
// set all the known numeric values
Header_struct.audioFormat = 1;
Header_struct.chunkSize = 36;
Header_struct.subchunk1Size = 16;
Header_struct.subchunk2Size = 0;
// set the passed-in numeric values
Header_struct.sampleRate = newSampleRate*1000;
Header_struct.bitsPerSample = newBitDepth;
Header_struct.numChannels = newNumChans;
// calculate the remaining dependent values
Header_struct.blockAlign = Header_struct.numChannels * Header_struct.bitsPerSample / 8;
Header_struct.byteRate = Header_struct.sampleRate * Header_struct.blockAlign;
}
void WaveHeaderUpdate(int numBytes)
{
Header_struct.subchunk2Size = numBytes;
Header_struct.chunkSize = Header_struct.subchunk2Size + 36;
}
void WaveHeaderInfo(int* dataArray)
{
memcpy(dataArray, &Header_struct, (char) sizeof(Header_struct));
}
int GetHeaderResult(int numBytes, int* dataArray)
{
WaveHeaderUpdate(numBytes);
WaveHeaderInfo(dataArray);
return 0;
}
int GetSrcOutSampleRate(SrcConversionMode mode)
{
int outsamplerate;
switch (mode)
{
case SRC_8k_to_16k:
outsamplerate = SRATE_16K;
break;
case SRC_8k_to_32k:
outsamplerate = SRATE_32K;
break;
case SRC_8k_to_48k:
outsamplerate = SRATE_48K;
break;
case SRC_16k_to_8k:
outsamplerate = SRATE_8K;
break;
case SRC_16k_to_32k:
outsamplerate = SRATE_32K;
break;
case SRC_16k_to_48k:
outsamplerate = SRATE_48K;
break;
case SRC_32k_to_8k:
outsamplerate = SRATE_8K;
break;
case SRC_32k_to_16k:
outsamplerate = SRATE_16K;
break;
case SRC_32k_to_48k:
outsamplerate = SRATE_48K;
break;
case SRC_48k_to_8k:
outsamplerate = SRATE_8K;
break;
case SRC_48k_to_16k:
outsamplerate = SRATE_16K;
break;
case SRC_48k_to_32k:
outsamplerate = SRATE_32K;
break;
}
return outsamplerate;
}
int main(int argc, char *argv[])
{
//For file I/O
char infile_name[512],outfile_name[512];
// char old_header[100],
char new_header[100];
FILE *fin, *fout;
int total_size = 0, counter = 0;
int WaveOut_srate = 0;
ALGO_SRC_RET ret = 0;
unsigned int T0, T1;
float avg = 0;
unsigned int frame_size = (256); // Support 256, 512, 1024 and 2880
//For Lib usage
char *working_buf_ptr;
short audio_input[frame_size*2], audio_output[frame_size*12];
int OutputSampleNum;
unsigned int buf_size;
SRCStructProcess src_struct;
/*Specify input/output file */
if (argc > 1)
strcpy(infile_name, argv[1]);
else
sprintf(infile_name, "./../sample/data/Sweep_48000_6s_stereo.wav");
fin = fopen(infile_name, "rb");
if (!fin)
{
fprintf(stderr, "Error opening file: %s\n", infile_name);
return -1;
}
/* SRC parameter setting */
src_struct.WaveIn_srate = SRATE_48K;
src_struct.channel = 2;
src_struct.mode = SRC_48k_to_8k;
src_struct.order = ORDER_HIGH;
src_struct.point_number = frame_size;
printf("Supported sample rate : 8k, 16k, 32k, 48k Hz\n");
//Set output file header
WaveOut_srate = GetSrcOutSampleRate(src_struct.mode);
SetWaveHeader(WaveOut_srate,16,src_struct.channel);
printf("output sample rate = %dk\n",WaveOut_srate);
if(src_struct.channel ==2)
sprintf(outfile_name, "./SRC_Out_%d_%dK_stereo.pcm",src_struct.WaveIn_srate, WaveOut_srate);
else
sprintf(outfile_name, "./SRC_Out_%d_%dK_mono.pcm" ,src_struct.WaveIn_srate, WaveOut_srate);
fout = fopen(outfile_name, "wb");
if (!fout)
{
fprintf(stderr, "Error opening file: %s\n", outfile_name);
return -1;
}
/* SRC init */
buf_size = IaaSrc_GetBufferSize(src_struct.mode);
working_buf_ptr = malloc(buf_size);
SRC_HANDLE handle = IaaSrc_Init(working_buf_ptr, &src_struct);
//main process
fread(audio_input, sizeof(char), 44, fin);
while(fread(audio_input, sizeof(short), frame_size*src_struct.channel, fin))
{
counter++;
/* Run SRC process */
T0 = (long)_OsCounterGetMs();
ret = IaaSrc_Run(handle, audio_input,audio_output, &OutputSampleNum);
T1 = (long)_OsCounterGetMs();
avg += (T1 - T0);
if(ret != 0)
{
printf("Error occured in Sampling rate converter\n");
return -1;
}
//write output file information
total_size += src_struct.channel*OutputSampleNum*sizeof(short);
fwrite(audio_output, sizeof(short), src_struct.channel*OutputSampleNum, fout);
}
GetHeaderResult(total_size,(int*)new_header);
fseek(fout,0,SEEK_SET);
fwrite(new_header, sizeof(char),44, fout);
avg /= counter;
printf("AVG is %.2f ms\n",avg);
fclose(fin);
fclose(fout);
IaaSrc_Release(handle);
free(working_buf_ptr);
printf("SRC done\n");
return 0;
}
使用SRC API读取SRC json档参数、获取SRC算法运行需要的内存大小、初始化SRC算法handle并配置相关参数、运行SRC算法与释放SRC算法资源。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include "AudioSRCProcess.h"
float AVERAGE_RUN(int a)
{
static unsigned int num = 0;
static float avg = 0;
if(num == 0) avg = 0;
num++;
avg = avg + ((float)a - avg) / ((float)num);
return avg;
}
unsigned int _OsCounterGetMs(void)
{
struct timeval t1;
gettimeofday(&t1,NULL);
unsigned int T = ( (1000000 * t1.tv_sec)+ t1.tv_usec ) / 1000;
return T;
}
typedef struct{
char chunkID[4];
int chunkSize;
char format[4];
char subchunk1ID[4];
int subchunk1Size;
short audioFormat;
short numChannels;
int sampleRate;
int byteRate;
short blockAlign;
short bitsPerSample;
char subchunk2ID[4];
int subchunk2Size;
}WaveHeaderStruct;
WaveHeaderStruct Header_struct;
void SetWaveHeader(int newSampleRate, char newBitDepth, char newNumChans)
{
// set all the ASCII literals
memcpy(Header_struct.chunkID, "RIFF", 4);
memcpy(Header_struct.format, "WAVE", 4);
memcpy(Header_struct.subchunk1ID, "fmt ", 4);
memcpy(Header_struct.subchunk2ID, "data", 4);
// set all the known numeric values
Header_struct.audioFormat = 1;
Header_struct.chunkSize = 36;
Header_struct.subchunk1Size = 16;
Header_struct.subchunk2Size = 0;
// set the passed-in numeric values
Header_struct.sampleRate = newSampleRate*1000;
Header_struct.bitsPerSample = newBitDepth;
Header_struct.numChannels = newNumChans;
// calculate the remaining dependent values
Header_struct.blockAlign = Header_struct.numChannels * Header_struct.bitsPerSample / 8;
Header_struct.byteRate = Header_struct.sampleRate * Header_struct.blockAlign;
}
void WaveHeaderUpdate(int numBytes)
{
Header_struct.subchunk2Size = numBytes;
Header_struct.chunkSize = Header_struct.subchunk2Size + 36;
}
void WaveHeaderInfo(int* dataArray)
{
memcpy(dataArray, &Header_struct, (char) sizeof(Header_struct));
}
int GetHeaderResult(int numBytes, int* dataArray)
{
WaveHeaderUpdate(numBytes);
WaveHeaderInfo(dataArray);
return 0;
}
int GetSrcOutSampleRate(SrcConversionMode mode)
{
int outsamplerate;
switch (mode)
{
case SRC_8k_to_16k:
outsamplerate = SRATE_16K;
break;
case SRC_8k_to_32k:
outsamplerate = SRATE_32K;
break;
case SRC_8k_to_48k:
outsamplerate = SRATE_48K;
break;
case SRC_16k_to_8k:
outsamplerate = SRATE_8K;
break;
case SRC_16k_to_32k:
outsamplerate = SRATE_32K;
break;
case SRC_16k_to_48k:
outsamplerate = SRATE_48K;
break;
case SRC_32k_to_8k:
outsamplerate = SRATE_8K;
break;
case SRC_32k_to_16k:
outsamplerate = SRATE_16K;
break;
case SRC_32k_to_48k:
outsamplerate = SRATE_48K;
break;
case SRC_48k_to_8k:
outsamplerate = SRATE_8K;
break;
case SRC_48k_to_16k:
outsamplerate = SRATE_16K;
break;
case SRC_48k_to_32k:
outsamplerate = SRATE_32K;
break;
}
return outsamplerate;
}
int main(int argc, char *argv[])
{
//For file I/O
char infile_name[512],outfile_name[512];
// char old_header[100],
char new_header[100];
FILE *fin, *fout;
int total_size = 0, counter = 0;
int WaveOut_srate = 0;
ALGO_SRC_RET ret = 0;
unsigned int T0, T1;
float avg = 0;
// unsigned int frame_size = (256); // Support 256, 512, 1024 and 2880
//For Lib usage
char *working_buf_ptr;
int OutputSampleNum;
unsigned int buf_size;
SRCStructProcess src_struct;
char src_para_json_file[512];
sprintf(src_para_json_file,"%s","./../sample/data/SrcParamJson.json");
unsigned int src_para_buffersize = IaaSrc_GetJsonFileSize(src_para_json_file);
char *src_para_json_buf_ptr = (char*)malloc(src_para_buffersize);
memset(&src_struct,0,sizeof(SRCStructProcess));
ret = IaaSrc_StructReadFromJson(&src_struct, src_para_json_buf_ptr, src_para_json_file, src_para_buffersize);
short audio_input[src_struct.point_number*2], audio_output[src_struct.point_number*12];
/*Specify input/output file */
if (argc > 1)
strcpy(infile_name, argv[1]);
else
sprintf(infile_name, "./../sample/data/Sweep_16000_6s.wav");
fin = fopen(infile_name, "rb");
if (!fin)
{
fprintf(stderr, "Error opening file: %s\n", infile_name);
return -1;
}
//Set output file header
WaveOut_srate = GetSrcOutSampleRate(src_struct.mode);
SetWaveHeader(WaveOut_srate,16,src_struct.channel);
printf("output sample rate = %dk\n",WaveOut_srate);
if(src_struct.channel ==2)
sprintf(outfile_name, "./../sample/data/SRC_Out_%d_%dK_stereo.wav",src_struct.WaveIn_srate, WaveOut_srate);
else
sprintf(outfile_name, "./../sample/data/SRC_Out_%d_%dK_mono.wav" ,src_struct.WaveIn_srate, WaveOut_srate);
fout = fopen(outfile_name, "wb");
if (!fout)
{
fprintf(stderr, "Error opening file: %s\n", outfile_name);
return -1;
}
/* SRC init */
buf_size = IaaSrc_GetBufferSize(src_struct.mode);
working_buf_ptr = malloc(buf_size);
SRC_HANDLE handle = IaaSrc_Init(working_buf_ptr, &src_struct);
//main process
fread(audio_input, sizeof(char), 44, fin);
while(fread(audio_input, sizeof(short), src_struct.point_number*src_struct.channel, fin))
{
counter++;
/* Run SRC process */
T0 = (long)_OsCounterGetMs();
ret = IaaSrc_Run(handle, audio_input,audio_output, &OutputSampleNum);
T1 = (long)_OsCounterGetMs();
avg += (T1 - T0);
if(ret != 0)
{
printf("Error occured in Sampling rate converter\n");
return -1;
}
//write output file information
total_size += src_struct.channel*OutputSampleNum*sizeof(short);
fwrite(audio_output, sizeof(short), src_struct.channel*OutputSampleNum, fout);
}
GetHeaderResult(total_size,(int*)new_header);
fseek(fout,0,SEEK_SET);
fwrite(new_header, sizeof(char),44, fout);
avg /= counter;
printf("AVG is %.2f ms\n",avg);
fclose(fin);
fclose(fout);
IaaSrc_Release(handle);
free(working_buf_ptr);
printf("SRC done\n");
return 0;
}
2. API 参考¶
2.1. 功能模块API¶
| API名 | 功能 |
|---|---|
| IaaSrc_GetBufferSize | 获取Src算法运行需要的内存大小 |
| IaaSrc_Init | 初始化Src算法 |
| IaaSrc_Run | Src算法处理 |
| IaaSrc_Release | 释放Src算法资源 |
| IaaSrc_GetJsonFileSize | SRC 获取解析Json文件内容所需要的内存大小 |
| IaaSrc_StructReadFromJson | 配置Json参数到SRC算法的结构体指针 |
2.2. IaaSrc_GetBufferSize¶
-
功能
获取Src算法运行所需要的内存大小。
-
语法
unsigned int IaaSrc_GetBufferSize(SrcConversionMode mode); -
形参
参数名称 描述 输入/输出 SrcConversionMode mode 采样速率转换类型 输入 -
返回值
返回值为Src算法运行所需要的内存大小。
-
依赖
-
头文件: AudioSRCProcess.h
-
库文件: libSRC_LINUX.so/ libSRC_LINUX.a
-
-
注意
该接口仅返回需要的内存大小,申请和释放内存的动作需应用来处理。
-
举例
请参考实例介绍
2.3. IaaSrc_Init¶
-
功能
初始化Src算法。
-
语法
SRC_HANDLE IaaSrc_Init(char *workingBufferAddress, SRCStructProcess *src_struct); -
形参
参数名称 描述 输入/输出 working_buffer_address Src算法所使用的内存地址 输入 SRCStructProcess Src算法的初始化结构体指针 输入 -
返回值
返回值 结果 非NULL 成功 NULL 失败 -
依赖
-
头文件: AudioSRCProcess.h
-
库文件: libSRC_LINUX.so/ libSRC_LINUX.a
-
-
注意
无。
-
举例
请参考实例介绍
2.4. IaaSrc_Run¶
-
功能
Src算法处理。
-
语法
ALGO_SRC_RET IaaSrc_Run(SRC_HANDLE handle, short *audio_input, short *audio_output, int* output_size); -
形参
参数名称 描述 输入/输出 handle Src算法handle 输入 audio_input 重采样前的数据指针 输入 audio_output 重采样输出的数据指针 输出 output_size 重采样输出的数据长度,会根据SRCStructProcess中设定的point_number和SRC mode转换的比例而改变。
举例:从8K转换到48K,则Point number等比例上升至六倍。输出 -
返回值
返回值 结果 0 成功 非0 失败,参照 错误码 -
依赖
-
头文件: AudioSRCProcess.h
-
库文件: libSRC_LINUX.so/ libSRC_LINUX.a
-
-
注意
-
audio_output存放的buffer也需要应用程序申请传入。
-
Npoints的取值范围:≤1536
-
-
举例
请参考实例介绍
2.5. IaaSrc_Release¶
-
功能
释放Src算法资源。
-
语法
ALGO_SRC_RET IaaSrc_Release(SRC_HANDLE handle); -
形参
参数名称 描述 输入/输出 handle Src算法handle 输入 -
返回值
返回值 结果 0 成功 非0 失败,参照 错误码 -
依赖
-
头文件: AudioSRCProcess.h
-
库文件: libSRC_LINUX.so/ libSRC_LINUX.a
-
-
注意
无。
-
举例
请参考实例介绍
2.6. IaaSrc_GetJsonFileSize¶
-
功能
SRC 获取解析Json文件内容所需要的内存大小
-
语法
unsigned int IaaSrc_GetJsonFileSize(char* jsonfile); -
形参
参数名称 描述 输入/输出 jsonfile Json檔名 输入 -
返回值
返回值为解析Json文件内容所需要的内存大小
-
依赖
-
头文件: AudioSrcProcess.h
-
库文件: libSRC_LINUX.so/ libSRC_LINUX.a
-
-
注意
- 无。
-
举例
- 无。
2.7. IaaSrc_StructReadFromJson¶
-
功能
配置Json参数到SRC算法的结构体指针
-
语法
ALGO_SRC_RET IaaSrc_StructReadFromJson(SRCStructProcess* src_struct, char* jsonBuffer, char* jsonfile, unsigned int buffSize); -
形参
参数名称 描述 输入/输出 src_struct SRC 算法结构体 输入 jsonBuffer 解析Json文件内容所使用的内存地址 输入 jsonfile Json檔名 输入 buffSize 解析Json文件内容所需要的内存大小 输入 -
返回值
返回值 结果 0 成功 非0 失败,参考 错误码 -
依赖
-
头文件: AudioSrcProcess.h
-
库文件: libSRC_LINUX.so/ libSRC_LINUX.a
-
-
注意
- 无。
-
举例
- 无。
3. SRC 数据类型¶
3.1. SRC模块相关数据类型定义¶
| 数据类型 | 定义 |
|---|---|
| SrcConversionMode | Src算法采样率转换类型 |
| SRCStructProcess | Src算法初始化参数结构体类型 |
| SrcInSrate | Src算法的采样速率类型 |
| SRC_HANDLE | Src算法句柄类型 |
| SrcFilterOrder | 定义Src算法的低通滤波器阶数 |
3.2. SrcConversionMode¶
-
说明
定义Src算法的采样率转换类型。
-
定义
typedef enum{ SRC_8k_to_16k, SRC_8k_to_32k, SRC_8k_to_48k, SRC_16k_to_8k, SRC_16k_to_32k, SRC_16k_to_48k, SRC_32k_to_8k, SRC_32k_to_16k, SRC_32k_to_48k, SRC_48k_to_8k, SRC_48k_to_16k, SRC_48k_to_32k, SRC_24k_to_8k, SRC_24k_to_16k, SRC_24k_to_32k, SRC_24k_to_48k, SRC_8k_to_24k, SRC_16k_to_24k, SRC_32k_to_24k, SRC_48k_to_24k }SrcConversionMode; -
成员
成员名称 描述 SRC_8k_to_16k 8K重采样到16K SRC_8k_to_32k 8K重采样到32K SRC_8k_to_48k 8K重采样到48K SRC_16k_to_8k 16K重采样到8K SRC_16k_to_32k 16K重采样到32K SRC_16k_to_48k 16K重采样到48K SRC_32k_to_8k 32K重采样到8K SRC_32k_to_16k 32K重采样到16K SRC_32k_to_48k 32K重采样到48K SRC_48k_to_8k 48K重采样到8K SRC_48k_to_16k 48K重采样到16K SRC_48k_to_32k 48K重采样到32K SRC_24k_to_8k 24K重采样到8K SRC_24k_to_16k 24K重采样到16K SRC_24k_to_32k 24K重采样到32K SRC_24k_to_48k 24K重采样到48K SRC_8k_to_24k 8K重采样到24K SRC_16k_to_24k 16K重采样到24K SRC_32k_to_24k 32K重采样到24K SRC_48k_to_24k 24K重采样到24K -
注意事项
无。
-
相关数据类型及接口
3.3. SRCStructProcess¶
-
说明
定义Src算法的初始化参数结构体类型。
-
定义
typedef struct{ SrcInSrate WaveIn_srate; SrcConversionMode mode; unsigned int channel; SrcFilterOrder order; unsigned int point_number; }SRCStructProcess; -
成员
成员名称 描述 WaveIn_srate 输入源数据的采样频率 mode 采样频率转换的模式,请根据源数据采样频率与输出数据采样频率搭配做选择。 channel 源数据的通道数,可支持4声道 order 低通滤波器阶数 point_number 输入讯号每帧包含的点数,预设小于1536,并须符合转换后依然为整数。下面指令可确认
strings libSRC_LINUX.so | grep PN -
注意事项
- 无。
-
相关数据类型及接口
3.4. SrcInSrate¶
-
说明
定义Src算法的采样率类型。
-
定义
typedef enum{ SRATE_8K = 8, SRATE_16K = 16, SRATE_32K = 32, SRATE_48K = 48, SRATE_24K = 24 }SrcInSrate; -
成员
成员名称 描述 SRATE_8K 8K采样频率 SRATE_16K 16K采样频率 SRATE_32K 32K采样频率 SRATE_48K 48K采样频率 SRATE_24K 24K采样频率 -
注意事项
无。
-
相关数据类型及接口
3.5. SRC_HANDLE¶
-
说明
定义Src算法的句柄类型。
-
定义
typedef void* SRC_HANDLE; -
注意事项
无。
-
相关数据类型及接口
3.6. SrcFilterOrder¶
-
说明
定义Src算法的低通滤波器阶数。
-
定义
typedef enum{ ORDER_LOW = 0, ORDER_HIGH = 1 }SrcFilterOrder; -
成员
成员名称 描述 ORDER_LOW 阶数低 ORDER_HIGH 阶数高,滤波效果较好 -
注意事项
无。
-
相关数据类型及接口
4. Error Code¶
SRC API 错误码如下表所示:
| 错误码 | 宏定义 | 描述 |
|---|---|---|
| 0x00000000 | ALGO_SRC_RET_SUCCESS | 运行成功 |
| 0x10000601 | ALGO_SRC_INIT_ERROR | 算法尚未初始化 |
| 0x10000602 | ALGO_SRC_RET_INVALID_MODE | 模式参数设置无效 |
| 0x10000603 | ALGO_SRC_RET_INVALID_HANDLE | HANDLE无效 |
| 0x10000604 | ALGO_SRC_RET_INVALID_CHANNEL | 通道数不支持 |
| 0x10000605 | ALGO_SRC_RET_INVALID_POINT_NUMBER | 每帧点数不支援 |
| 0x10000606 | ALGO_SRC_RET_INVALID_SAMPLE_RATE | 采样频率不支持 |
| 0x10000607 | ALGO_SRC_RET_API_CONFLICT | 其他API正在运行 |
| 0x10000608 | ALGO_SRC_RET_INVALID_CALLING | 呼叫API顺序错误 |
| 0x10000609 | ALGO_SRC_RET_INVALID_JSONFILE | SRC解析Json相关错误 |