⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pcmmono.c

📁 The combined demo is dedicated for S1C33L05, so DMT33L05 should be used to load and run the demo. F
💻 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 + -