📄 a2000.c
字号:
//***********************************************************
// 来源:《SPCE061实验指导书》语音实验部分 实验一 SACM-A2000
// 描述: A2000有两种播放方式,即自动方式和非自动方式,我们可以通
// 过改变Mode的值来切换这两种方式:当Mode=0时以非自动方式播放,
// 当Mode=1时,以自动方式播放。
// 日期:2003/05/14
// 版本:1.8.0
//*************************************************************
//#define SPEECH_1 0
#define DAC1 1
#define DAC2 2
#define Ramp_UpDn_Off 0
#define Ramp_UpDn_On 3
#define Manual 0
#define Auto 1
#define Full 1
#define Empty 2
#define Mode 1
#include "A2000.h"
main()
{
extern long RES_WW_24K_SA,RES_WW_24K_EA; //定义语音资源的首末地址标号
long int Addr; //定义地址变量
int Ret = 0,SPEECH_1=0; //定义获取语音数据变量并初始化
if(Mode == 1)
{
while(1) //采用自动方式播放
{
SACM_A2000_Initial(1); //自动方式播放初始化
SACM_A2000_Play(SPEECH_1,DAC1+DAC2,Ramp_UpDn_On); //定义语音索引号、播放通道、允许音量增/减调节
while(SACM_A2000_Status()&01)
{
F_ClearWatchdog();
SACM_A2000_ServiceLoop();
}
SPEECH_1++;
if(SPEECH_1==2) //获取语音数据并将其填入解码队列
SPEECH_1=0;
}
}
if(Mode == 0) //采用非自动方式播放
{
Addr=RES_WW_24K_SA;
//送入语音队列的首址
SACM_A2000_Initial(0); //非自动方式播放的初始化
SACM_A2000_InitDecoder(DAC1); //开始对A2000的语音数据以非自动方式解码
while(SACM_A2000_TestQueue()!=Full) //测试并获取语音队列的状态
{
Ret=SP_GetResource(Addr); //从资源文件里获取一个字型语音数据
SACM_A2000_FillQueue(Ret); //获取语音编码数据并填入语音队列等候解码
Addr++;
}
while(1)
{
if(SACM_A2000_TestQueue()!=Full)
{
Ret =SP_GetResource(Addr);
SACM_A2000_FillQueue(Ret);
Addr++;
}
if(Addr< RES_WW_24K_EA ) //如果该段语音未播完,即未到达末地址时
SACM_A2000_Decoder(); //获取资源并进行解码,再通过中断服务子程序送入DAC通道播放
else
SACM_A2000_Stop(); //否则,停止播放
F_ClearWatchdog(); //清看门狗
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -