📄 6-3.c
字号:
#include <std.h>
#include <log.h>
#include <swi.h>
#include "echocfg.h"
#include "echo.h"
int cancelerLoad = 0;
int decoderLoad = 0;
int encoderLoad = 0;
int echoInFrame = 0; // 当前回音输入帧数量
int echoOutFrame = 2; // 当前回音输出帧数量
int encoderFrame = 0; // 当前语音输入帧数量
int decoderFrame = 0; // 当前语音输出帧数量
int audioInBuf[AUDIOBUFLEN]; // 语音输入数据
int audioOutBuf[AUDIOBUFLEN]; // 语音输出数据
int codeInBuf[CODEBUFLEN]; // 编码输入数据
int codeOutBuf[CODEBUFLEN]; // 编码输出数据
extern Void ECHO_load(int load);
static Void cancelerAlg(int *input, int *output);
static Void decoderAlg(int *input, int *output);
static Void encoderAlg(int *input, int *output);
Void main(int argc, char *argv[])
{
// 循环等待
}
Void canceler(Void)
{
int *src, *dst;
src = audioInBuf + (echoInFrame * ECHOFRAMELEN);
dst = audioOutBuf + (echoOutFrame * ECHOFRAMELEN);
cancelerAlg(src, dst);
if (++echoInFrame >= (AUDIOBUFLEN / ECHOFRAMELEN)) {
echoInFrame = 0;
}
if (++echoOutFrame >= (AUDIOBUFLEN / ECHOFRAMELEN)) {
echoOutFrame = 0;
}
}
Void decoder(Void)
{
int *src, *dst;
src = codeInBuf + (decoderFrame * CODEFRAMELEN);
dst = audioOutBuf + (decoderFrame * AUDIOFRAMELEN);
decoderAlg(src, dst);
if (++decoderFrame >= (AUDIOBUFLEN / AUDIOFRAMELEN)) {
decoderFrame = 0;
}
}
Void encoder(Void)
{
int *src, *dst;
src = audioInBuf + (encoderFrame * AUDIOFRAMELEN);
dst = codeOutBuf + (encoderFrame * CODEFRAMELEN);
encoderAlg(src, dst);
if (++encoderFrame >= (AUDIOBUFLEN / AUDIOFRAMELEN)) {
encoderFrame = 0;
}
}
static Void cancelerAlg(int *input, int *output)
{
static int oldLoad = 0;
if (oldLoad != cancelerLoad) {
oldLoad = cancelerLoad;
LOG_printf(&trace,
"Cancel: new load = %d000 instructions every 2.5 ms", cancelerLoad);
}
if (cancelerLoad) {
ECHO_load(cancelerLoad);
}
}
static Void decoderAlg(int *input, int *output)
{
static int oldLoad = 0;
if (oldLoad != decoderLoad) {
oldLoad = decoderLoad;
LOG_printf(&trace,
"Decode: new load = %d000 instructions every 22.5 ms", decoderLoad);
}
if (decoderLoad) {
ECHO_load(decoderLoad);
}
}
static Void encoderAlg(int *input, int *output)
{
static int oldLoad = 0;
if (oldLoad != encoderLoad) {
oldLoad = encoderLoad;
LOG_printf(&trace,
"Encode: new load = %d000 instructions every 22.5 ms", encoderLoad);
}
if (encoderLoad) {
ECHO_load(encoderLoad);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -