static BOOL FillSoundChannelMemory(SoundManager *sm, const void *Buffer, unsigned int* Handle ) { DSBUFFERDESC dsBD; INT NumBytes; BYTE * pbWaveData; char * Name; Channel * channel; *Handle = 0; if (!sm) return TRUE; if (!ParseData(Buffer, &dsBD, &pbWaveData)) return FALSE; NumBytes = dsBD.dwBufferBytes; Name = malloc(11); if (Name == NULL) return FALSE; sprintf(Name, "0x%8x", Buffer); //Create the channel // if (!CreateChannel(Name, &dsBD, &channel)) if (!CreateChannel(&dsBD, &channel)) return FALSE; channel->next = sm->smChannels; channel->ID = sm->smNextChannelID++; sm->smChannels = channel; sm->smChannelCount++; //Fill the channel if (!DSFillSoundBuffer(channel->buffer, pbWaveData, NumBytes)) return FALSE; *Handle = channel->ID; return TRUE; }
IDirectSoundBuffer *DSLoad3DSoundBuffer(IDirectSound *pDS, char *lpName, IDirectSound3DBuffer ** lpDirectSound3DBuffer, DWORD dwflags ) { #if 0 IDirectSoundBuffer *pDSB = NULL; DSBUFFERDESC dsBD = {0}; BYTE *pbWaveData; void * Buffer = NULL; dsBD.dwSize = sizeof(dsBD); dsBD.dwFlags = dwflags; if ( Buffer = DSGetWave(lpName, &dsBD.lpwfxFormat, &pbWaveData, &dsBD.dwBufferBytes)) { if ( MakeSoundBuffer( pDS, &dsBD, &pDSB, NULL ) ) { if (DS_OK==IDirectSoundBuffer_QueryInterface(pDSB, &IID_IDirectSound3DBuffer, (void **)lpDirectSound3DBuffer)) { if (!DSFillSoundBuffer(pDSB, pbWaveData, dsBD.dwBufferBytes)) { SoundBufferRelease(&pDSB); pDSB = NULL; } } } else { pDSB = NULL; lpDirectSound3DBuffer = NULL; } } if( Buffer != NULL ) free( Buffer ); return pDSB; #endif return NULL; }
//static BOOL FillSoundChannel(SoundManager *sm, char* Dir, char *Name, unsigned int* Handle ) static BOOL FillSoundChannel(SoundManager *sm, geVFile *File, unsigned int* Handle ) { DSBUFFERDESC dsBD; INT NumBytes; uint8 *data = NULL; BYTE * pbWaveData; // char* Name2; Channel* channel; *Handle = 0; if (!sm) return TRUE; #if 0 //Open the file if (Dir) { Name2 = malloc( strlen( Name ) + strlen( Dir ) + 3); // 2 for the "//" and 1 for terminator if( !Name2 ) return( 0 ); sprintf(Name2, "%s\\%s", Dir, Name); } else { Name2 = malloc( strlen( Name ) + 3); // 2 for the "//" and 1 for terminator if( !Name2 ) return( 0 ); sprintf(Name2, "%s", Name); } #endif if(!GetSoundData( File, &data )) return( FALSE ); if( !ParseData( data, &dsBD, &pbWaveData ) ) { geRam_Free(data); return( FALSE ); } NumBytes = dsBD.dwBufferBytes; //Create the channel // if( !CreateChannel( Name2, &dsBD, &channel ) ) if (!CreateChannel(&dsBD, &channel)) { geRam_Free(data); return FALSE; } channel->next = sm->smChannels; channel->ID = sm->smNextChannelID++; channel->Data = data; sm->smChannels = channel; sm->smChannelCount++; //Fill the channel if (!DSFillSoundBuffer(channel->buffer, pbWaveData, NumBytes)) return FALSE; // free( data ); // geRam_Free(data); *Handle = channel->ID; return TRUE; }