📄 pcmmono.c
字号:
/*
* pcmmono.c : PCM15 mono sample program
*
* Ver 0.10 2000/02/14 H.Matsuoka Start
* Ver 0.20 2001/05/23 N.Komatsu Add the argument to "pcmPlay()" function.
*/
#include "Speak.h"
#include "slutil.h"
#define SAMPLING_RATE 8000
#define PACKET_SIZE 128
#define SPK_PACKET_SIZE PACKET_SIZE*2 /* oversampling */
#define SPLIS_BUF_SIZE SPK_PACKET_SIZE*2 /* 2 buffer */
static Slparam SlParam;
static short* SpkData;
static int SpkDataSize;
short SplisBuf[SPLIS_BUF_SIZE];
static void SpkQueueDone(unsigned char *SpkParams, short *Buffer, int Length)
{
int DataSize;
if(SpkDataSize <= 0) return;
DataSize = PACKET_SIZE;
if(SpkDataSize < PACKET_SIZE) {
DataSize = SpkDataSize;
}
slPcm2Spk(SpkData, Buffer, DataSize, &SlParam);
SpkDataSize -= DataSize;
SpkData += DataSize;
SpkAppend(SpkParams, Buffer, DataSize<<1); /* oversampling */
}
unsigned char *pcmPlay(short *pcm_data, int samples, int Clock)
{
unsigned char *SpkParams;
int BufPos;
extern unsigned short SPK_PREDATA;
SpkDataSize = samples;
SpkData = pcm_data;
SPK_PREDATA = 0x8000;
SlParam.offset = 0x8000;
SlParam.limit = 0xffff;
SpkInit();
SpkSoftening(13); /* 10 - 15 */
SpkParams = SpkOpen(SPK_15_MONO,SPK_SAMPLING(Clock,SAMPLING_RATE<<1));
/* SAMPLING_RATE<<1 for 2 times over sampling */
for(BufPos=0; (BufPos+SPK_PACKET_SIZE)<=SPLIS_BUF_SIZE;
BufPos+=SPK_PACKET_SIZE){
SpkQueueDone(SpkParams, SplisBuf+BufPos, SPK_PACKET_SIZE);
}
SpkOnDone(SpkParams, SpkQueueDone);
SpkOnEmpty(SpkParams, SpkClose);
SpkStart(SpkParams);
return SpkParams;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -