📄 pcm.h
字号:
#ifndef __PCM_H__
#define __PCM_H__
#include "auregs.h"
/*
* b0~b2 in RF_PCM_MODE
*/
#define MODE_PCM (0)
#define MODE_KEYSHIFT (1)
#define MODE_ECHO (2) // small room
#define MODE_DELAY (3) // delay
#define MODE_MIX (4) // wide stereo
/*
* b3 in RF_PCM_MODE is the ECHO_FLAG.
*/
#define MODE_ECHO_ON_FLAG (0x08)
#define MODE_FUDU_ON_FLAG (0x10)
#if !defined(WIN32)
/*
* Functions with PCM_ or KS_ prefix do hardware control.
*/
static __inline int PCM_FIFO_count(void)
{
int cnt = RF_PCM_CNT;
return cnt * 8;
}
static __inline int PCM_FIFO_free_space(const int pcm_fifo_size)
{
return (pcm_fifo_size - PCM_FIFO_count());
}
/*
* sample_number has to be a multiple of 32
*/
static __inline void PCM_count_increment(unsigned int sample_number)
{
while (sample_number > 0) {
RF_PCM_COUNT_INC = 0;
sample_number -= 8;
}
}
static __inline void KS_set_resample_step(int step)
{
RF_PCM_SF = step; // 3.13
}
/*
* x, y : sign + 1.8 format
*/
static __inline void PCM_set_coef(int x, int y)
{
while(RF_RAM2_WRT_DIS);
AU_RAM2[R2_PCM_X] = x;
while(RF_RAM2_WRT_DIS);
AU_RAM2[R2_PCM_Y] = y;
}
static __inline void KS_cx_set_start(int cx_start, int next_pcm_index) // input has to be multiple of 8
{
RF_PCM_KEY_ADDR = next_pcm_index >> 3;
RF_PCM_FRM_ADDR = cx_start >> 3;
}
static __inline void KS_cx_inc_count(int cx_offset) // input has to be multiple of 8
{
RF_PCM_KEY_OFFSET = cx_offset >> 3;
}
/*
* PCM volume register RF_PCM_AMP will not be set during ramp up/down.
*/
static __inline void PCM_set_volume(int v)
{
RF_PCM_AMP = v; // unsigned 1.8 format
}
static __inline void PCM_force_volume(int v)
{
RF_PCM_RAMP_FN = 0;
RF_PCM_AMP = v; // unsigned 1.8 format
}
#endif // !WIN32
void select_Fs(int);
int polling_pcm_energy(void); // return 0 if silence detected.
#endif // !__PCM_H__
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -