Beispiel #1
0
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;
}
Beispiel #2
0
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;
}
Beispiel #3
0
//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;
}