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

📄 test_au.c

📁 一个两碟控制的VCD的代码,两碟之间的转动及连续播放,已大量生产的CODE.
💻 C
字号:
/* SCCSID @(#)test_au.c	1.16 7/9/98 *//************************************************************************** * Copyright 1997, ESS Technology, Inc.					 * *************************************************************************//* #define MAIN */#ifndef DRIVER#define DRIVER#endif#include <stdio.h>#include "../common.h"#include "../mvd.h"#include "../driver/util.h"#include "../driver/low.h"#include "../driver/buffer.h"#include "newcomm.h"#include "playsd.h"#include "../constvar.h"#include "../driver/graapi.h"#include "play.h"#include "stdfunc.h"#include "globals.h"int x10000=0x10000;#undef AUDIOSTOP#define	EPRINTF 	ESS_printf#define wdram(a) ((a-x12000000)>>2)extern int VBV_start;extern int not_enabled;volatile int buf0ready, buf1ready;struct {    int start;    int end;    int curr;    int size;    int read;} wav_msf;  /* wave file location in logical unit */extern int WAVbuf_inited;void au_init() {    WavBuf0Begin = (int) GX_malloc(WAVBUFSIZE);    WavBuf1Begin = (int) GX_malloc(WAVBUFSIZE);    WAVbuf_inited = 0;    PCM_ampf = 0;    WAV_initbuf();#if 0#ifndef AUDIOSTOP    LOW_turn_on_audio();#endif#endif}int au_begin(char *fname, int repeat) {    SoundData	sound_data;    int *k1,*k2;    int status, mmssff, numsec;    int i;    int nrdsec;    WAV_data_ready=0;    au_repeat=repeat;#if 0    LOW_init_audio();    enable_int(buscon);    /* PCM_stop_take_out(); */    LOW_turn_off_audio();    LOW_turn_on_audio();    buscon_irq_disable(d2a);    not_enabled=1;#endif    status = findfile(fname, 0);    if (status != 1) {        return -1;    }    numsec = ((CurrFile.sz-1)>>11)+1;    wav_msf.start = wav_msf.curr = CurrFile.loc;    wav_msf.end = wav_msf.start + numsec;    wav_msf.size = CurrFile.sz;    wav_msf.read = 0;    k1 = (int*)WavBuf0Begin;    k2 = (int*)WavBuf1Begin;    for (i=0;i<WAVBUFSIZE>>2;i++){	*(int *)k1 = 0; k1++;	*(int *)k2 = 0; k2++;    }    wavbuf0size = 0;    wavbuf1size = 0;    buf0ready = buf1ready = 0;    PCM_rd_ptr = 0;    wav_wrptr = WavBuf0Begin;    if (au_doit()!=0) return -1;        sound_data.sd_addr = (char*) WavBuf0Begin;    sound_data.sd_size = CurrFile.sz;    PCM_xfersize = 0;    PCM_rd_ptr = WavBuf0Begin;    wavelen = wavbuf0size;#if 0#ifdef AUDIOSTOP    LOW_turn_on_audio();#endif#endif    PlayWAVE(sound_data.sd_addr, sound_data.sd_size);    return 0;}int au_doit() {    int mmssff,wavsecrd,wavbytes,status;    int kcase = 0,k;    int *k1;    int offset=PCM_rd_ptr-wav_wrptr;    int i;    if (offset<0 || offset>=WAVBUFSIZE) {	 k = (wav_wrptr==WavBuf0Begin);	 kcase=k?1:2;   	 wav_wrptr=k? WavBuf1Begin:WavBuf0Begin;	 if (k) buf1ready = 0;	 else buf0ready = 0;    }    if (au_repeat==0) {        if (kcase==1) {	    wavbuf0size=0;         } else if (kcase==2) {	    wavbuf1size=0;         }        if (PCM_srcsize<=0 && (wavbuf0size+wavbuf1size)==0) {            au_end(0);            return 1;        }        return 0;    }    if (kcase==0) return 0;    else if (kcase==1) {	VBV_start =  wdram(WavBuf0Begin);    } else if (kcase==2) {        VBV_start =  wdram(WavBuf1Begin);    }    VBV_end = VBV_start + (WAVBUFSIZE>>2);#if 0    VBV_size = WAVBUFSIZE >> 2;#endif    wavsecrd=wav_msf.end-wav_msf.curr;    if (wavsecrd<=0) return 0;    k = WAVBUFSIZE>>11;    if (wavsecrd>=k) {        wavbytes=WAVBUFSIZE;        wavsecrd=k;    } else {        wavbytes=wav_msf.size-wav_msf.read;    }    mmssff=logical2physical(wav_msf.curr+150);    status=getSectors(mmssff, wavsecrd, 2048);    if (status!=1) {#if 0        if (kcase==1) k1 = (int*)WavBuf0Begin;        else if (kcase==2) k1 = (int*)WavBuf1Begin;        for (i=0;i<wavbytes>>2;i++) {            *(int *)k1 = 0x80808080; k1++;	}#else	if ((!buf0ready) && (!buf1ready)) au_end(0);#endif    }    wav_msf.curr+=wavsecrd;    wav_msf.read+=wavbytes;    if (wav_msf.curr>=wav_msf.end) {        wav_msf.curr=wav_msf.start;        wav_msf.read=0;        if (au_repeat>0) au_repeat--;    }    if (kcase==1) {        wavbuf0size = wavbytes;	buf0ready = 1;    } else {        wavbuf1size = wavbytes;	buf1ready = 1;    }#if 0    if (kcase==1) { myprints("fill buf0"); myprintn(wavbuf0size); }    else { myprints("fill buf1"); myprintn(wavbuf1size); }#endif    if (status!=1) {        if (PCM_rd_ptr == 0) return -1;    }    return 0;}void au_end(int flag) {    int i;    au_repeat=0;    wavelen=0;    wavbuf0size=0;    wavbuf1size=0;    WAV_data_ready=0;/*    for (i=0;i<WAVBUFSIZE/4;i++){	*(int *)(WavBuf0Begin+i*4) = 0;	*(int *)(WavBuf1Begin+i*4) = 0;    }*/#if 0    if (flag) {        WAV_data_ready=0;        not_enabled=1;        buscon_irq_disable(d2a);        buscon_disable(d2a);         LOW_turn_off_audio();    }#endif}#undef DRIVER

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -