コード例 #1
0
ファイル: sndname.c プロジェクト: F5000/spree
FILE *SndListOpen(char *nameFile,DWORD *pnItem,char mode)
{
	FILE *pf=NULL;
	size_t nf1,nf2;
	char *opMode;
	char head[sizeof(SNDLISTHEADER)+1];

	if(mode=='w'){
		opMode=FMTWRITE;		
	}
	else if(mode=='r')
		opMode=FMTREAD;
	else
		return NULL;
	pf=fopen(nameFile,opMode);	
	ASSERTFILE(pf!=NULL,nameFile);
	if(mode=='w'){
		nf1=fwrite(SNDLISTHEADER, sizeof(char), strlen(SNDLISTHEADER)+1, pf);
		nf2=fwrite(pnItem, sizeof(DWORD), 1, pf);
	}
	else{
		nf1=fread(head, sizeof(char), strlen(SNDLISTHEADER)+1, pf);
		if(!strcmp(head,SNDLISTHEADER))
			nf2=fread(pnItem, sizeof(DWORD), 1, pf);
		else{
			fclose(pf);
			pf=NULL;
		}
	}
	return pf;
}
コード例 #2
0
//--------------------------------------------------------------------------
void SndObjGetFmt(BYTE *lpMem,LOADPATH lPath, LOADHANDLE lBlock, LOADHANDLE lID,
                  LPSNDMIXFORMAT lpFmt, LPDWORD lpLengthData)
{
    void *pf = 0;
    char nameBuf[MAX_PATH];
    _WAVHEADER wavHeader;

    LPPACKEDFILE lpPf=NULL;
    if(lpMem) {
        COPYMEMORY(&wavHeader,lpMem,sizeof(wavHeader));
    }
    else {
        if(lBlock[0]=='\0') {
            BuildFullPath(nameBuf,lPath, lID,sndDriveContext,SNDIDEXT);
            pf=fopen(nameBuf,"rb");
            ASSERTFILE(pf,nameBuf);
            fread(&wavHeader, 1, sizeof( _WAVHEADER ), pf);
        }
        else {
            BuildFullPath(nameBuf,lPath, lBlock, sndDriveContext,SNDBLOCKEXT); // 'c' ??
            lpPf=PkPackInit(nameBuf, 1, NULL);
            ASSERTFILE(lpPf,nameBuf);
            BuildFullPath(nameBuf,NULL, lID, sndDriveContext,SNDIDEXT);
            pf=Pkfopen(lpPf,nameBuf,"rb");
            ASSERTFILE(pf,nameBuf);
            Pkfread(&wavHeader, 1, sizeof( _WAVHEADER ), pf);
        }
    }
    lpFmt->nSamplesPerSec=wavHeader.dwSamplesPerSec;
    lpFmt->wBitsPerSample=wavHeader.wBitsPerSample;
    lpFmt->nChannels=wavHeader.wChannels;
    *lpLengthData=wavHeader.dwDataLength;
    if (!lpMem) {
        if (lBlock[0]=='\0' && pf)
            fclose(pf);
        else {
            if (pf) Pkfclose(pf);
            PkPackClose(lpPf);
        }
    }
    return;
}
コード例 #3
0
void *HwSndObjLoad(LOADPATH lPath, LOADHANDLE lBlock, LOADHANDLE lID)
{
    DWORD sizeBuff;
    BYTE *lpMem=NULL;
    //static
    LPPACKEDFILE lpPf=NULL;
    if(!lPath || !lID ||!lBlock)
        return NULL;
    if(lBlock[0]!='\0') {
        BuildFullPath(nameBuf,lPath, lBlock, sndDriveContext,SNDBLOCKEXT); // 'c' ??
        lpPf=PkPackInit(nameBuf, 1, NULL);
        ASSERTFILE(lpPf,nameBuf);
        BuildFullPath(nameSnd,NULL, lID,'0',SNDIDEXT);
        lpMem=PkUnpack2Memory(lpPf,nameSnd, &sizeBuff);
        ASSERTFILE(lpMem,nameSnd);
        PkPackClose(lpPf);
    }
    else
        lpMem=HwSndObjLoadFile(lPath, lID);
    return (void *)lpMem;
}
コード例 #4
0
void HwSndStreamOpen(LPHWSNDSTREAM lpHwSndStream, void *lpMem,
                     LOADPATH lPath, LOADHANDLE lBlock, LOADHANDLE lID)
{
    char nameBuf[MAX_PATH];
    if(lpMem!=NULL) {
        lpHwSndStream->whereType=HWSTR_MEM;
        lpHwSndStream->fread=Memfread;
        lpHwSndStream->ftell=Memftell;
        lpHwSndStream->fseek=Memfseek;
        lpHwSndStream->pf=Memfopen(lpMem,"rb");
    }
    else {
        if(lBlock[0]=='\0') {
            BuildFullPath(nameBuf,lPath, lID,sndDriveContext,SNDIDEXT);
            lpHwSndStream->pf=fopen(nameBuf,"rb");
            ASSERTFILE(lpHwSndStream->pf,nameBuf);
            lpHwSndStream->whereType=HWSTR_FILE;

            lpHwSndStream->fread=fread;
            lpHwSndStream->ftell=ftell;
            lpHwSndStream->fseek=fseek;
        }
        else {
            BuildFullPath(nameBuf,lPath, lBlock, sndDriveContext,SNDBLOCKEXT); // 'c' ??
            ASSERTFILE(lpHwSndStream->lpPf=PkPackInit(nameBuf, 1, NULL),nameBuf);
            BuildFullPath(nameBuf,NULL, lID, sndDriveContext,SNDIDEXT);
            lpHwSndStream->pf=Pkfopen(lpHwSndStream->lpPf,nameBuf,"rb");
            ASSERTFILE(lpHwSndStream->pf,nameBuf);
            lpHwSndStream->whereType=HWSTR_BLOCK;

            lpHwSndStream->fread=Pkfread;
            lpHwSndStream->ftell=Pkftell;
            lpHwSndStream->fseek=Pkfseek;
        }
    }
}
コード例 #5
0
// does it handle the drive problem? if from cd or from hdisk
void *HwSndObjLoadFile(LOADPATH lPath, LOADHANDLE lID)
{
    DWORD sizeBuff;
    FILE *pf;
    BYTE *lpMem=NULL,*lpScan;
    int c;
    char nameBuf[MAX_PATH];
    if(!lPath || !lID)
        return NULL;
    BuildFullPath(nameBuf,lPath, lID,sndDriveContext,SNDIDEXT); // 'c' ??
    pf=fopen(nameBuf, "rb");
    ASSERTFILE(pf!=NULL,nameBuf);
    if(pf!=NULL) {
        fseek(pf,0,SEEK_END);
        sizeBuff=ftell(pf);
        lpScan=lpMem=MyMalloc(BYTE, sizeBuff);
        ASSERTOUTMEMORY(lpMem!=NULL);
        fseek(pf,0,SEEK_SET);
        while( (c=getc(pf))!=EOF)
            *lpScan++=c;
        fclose(pf);
    }
    return (void *)lpMem;
}