📄 test_au.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 + -