📄 vgwav.c
字号:
//************************************************************************************//// TITLE : Voice Functions for VRender Series// DESCRIPT: Voice Functions////************************************************************************************#include "vgSnd.h"#include "vgSndMem.h"#define IsStatusBusy( _C_ ) (Status & (1L<<(_C_)))#define IsStatusIdle( _C_ ) (!IsStatusBusy( _C_ ))#define __EMULATION__/*typedef unsigned int dword;typedef unsigned short word;typedef unsigned char byte;*/#define file_w *(word*)&filename#define file_l *(int *)&filenamevgBOOL vgSndPlayWav( _DGSNDWAV *pwav ){ U8 vchan= 0, i; U32 smpaddr; U32 Status = vgSndGetStatus(); // 0-15 channel for MUSIC for( i=0 ; i<_vgSoundMaxChannel ; i++ ) if( IsStatusIdle(i) ) break; if( i==_vgSoundMaxChannel ) {//zy uartprintf( "Channel Allocation Error" ); return vgFALSE; } pwav->channel = vchan = i;// _VGMSG(( "status : %d -> %08X\n", i, Status )); smpaddr = ((U32)pwav->data - FMEM_BASE_ADDRESS) >> 1; _vgSndChannel[vchan].CurSAddr = smpaddr<<10; _vgSndChannel[vchan].EnvVol = 127<<16;// _vgSndChannel[vchan].dSAddr = (S32)( ((float)pwav->frequency*(float)(1L<<10))/_vgSoundPlayFrequencyFloat ); _vgSndChannel[vchan].dSAddr = (S32)( ((pwav->frequency)<<10)/_vgSoundPlayFrequency ); if( pwav->mode & (DG_SND_MODE_8BIT|DG_SND_MODE_ULAW) ) _vgSndChannel[vchan].dSAddr >>= 1; _vgSndChannel[vchan].LoopEnd = smpaddr + (pwav->length>>1) - 2; _vgSndChannel[vchan].LoopBegin = smpaddr; if( _vgSoundForceMono ) { _vgSndChannel[vchan].RChnVol = _vgSndChannel[vchan].LChnVol = (pwav->lvolume + pwav->rvolume)>>1; } else { _vgSndChannel[vchan].LChnVol = pwav->lvolume; _vgSndChannel[vchan].RChnVol = pwav->rvolume; } _vgSndChannel[vchan].LoopDir = 1; _vgSndChannel[vchan].Mode = (U8)(pwav->mode); // | DG_SND_MODE_TM); vgSndSetDataFileNoEnvelope( vchan, &_vgSndChannel[vchan] ); vgSndSetDataFile( vchan, &_vgSndChannel[vchan] ); vgSndSetNoteOn( vchan ); vgSndSetStatusBusy( vchan ); return vgTRUE;}vgBOOL vgSndSetWav(char *filename, U32 filelength, U32 frequency, S8 volume, U8 mode, _DGSNDWAV *pwav ){ //vgFILE fp;// U32 filelength; S16 *pdata;/* // Read sound data from file. if( (fp=vgfopen( filename, "rb" ))== vgNULL ) { uartprintf( "File(%s) open Error.\n\r", filename ); return vgFALSE; } vgfseek( fp, 0, vgSEEK_END ); filelength = vgftell( fp ); vgfseek( fp, 0, vgSEEK_SET ); _VGMSG(( "Loading Wav.....%ld bytes.\r\n", filelength ));*/ // filelength = (file_l[ 0x28 ]); // Copy sound data to VR0 Memory. if( (pwav->data = (S16 *)VR0SndMalloc( SOUND_MEMORY_BANK_WAV, filelength )) == vgNULL ) {//zy uartprintf( "vgSndSetWav : SND Memory(%ld bytes) Allocation Error.\r\n", filelength ); return vgFALSE; } pdata = (S16*)(filename + 0x2c);#ifdef __EMULATION__{/* if( (pdata = (S16 *)vgMalloc( filelength )) == vgNULL ) { uartprintf( "vgSndSetWav : Memory(%ld) allocation Error.\r\n", filelength ); return vgFALSE; }*/// vgfread( pdata, filelength, 1, fp); VR0SndCopyMemory( pwav->data, (S16 *)pdata, filelength ); vgFree( pdata );}#else /* !__EMULATION__ */ vgfread( pwav->data, filelength, 1, fp );#endif /* __EMULATION__ *///zy _VGMSG(( "Completed.\r\n" ));// vgfclose( fp ); pwav->length = filelength; pwav->frequency = frequency; pwav->lvolume = pwav->rvolume = volume; pwav->mode = mode; return vgTRUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -