Game Development Reference
In-Depth Information
HRESULT DirectSoundAudioBuffer::FillBufferWithSound( void )
{
HRESULT hr;
VOID *pDSLockedBuffer = NULL;
// DirectSound buffer pointer
DWORD dwDSLockedBufferSize = 0;
// Size of DirectSound buffer
DWORD dwWavDataRead
= 0;
// Data to read from the wav file
if( m_Sample )
return CO_E_NOTINITIALIZED;
// Make sure we have focus, and we didn
t just switch in from
// an app which had a DirectSound device
if( FAILED( hr = RestoreBuffer( NULL ) ) )
return DXUT_ERR( L
'
RestoreBuffer
,hr);
int pcmBufferSize = m_Resource->Size();
shared_ptr<SoundResourceExtraData> extra =
static_pointer_cast<SoundResourceExtraData>(m_Resource->GetExtra());
// Lock the buffer down
if( FAILED( hr = m_Sample->Lock( 0, pcmBufferSize,
&pDSLockedBuffer, &dwDSLockedBufferSize,
NULL, NULL, 0L ) ) )
return DXUT_ERR( L”Lock”,hr);
if( pcmBufferSize == 0 )
{
// Wav is blank, so just fill with silence
FillMemory( (BYTE*) pDSLockedBuffer,
dwDSLockedBufferSize,
(BYTE)(m_Resource->GetFormat()->wBitsPerSample == 8 ? 128 :0));
}
else
{
CopyMemory(pDSLockedBuffer,
m_Resource->GetPCMBuffer(), pcmBufferSize);
if( pcmBufferSize < (int)dwDSLockedBufferSize )
{
// If the buffer sizes are different fill in the rest with silence
FillMemory( (BYTE*) pDSLockedBuffer + pcmBufferSize,
dwDSLockedBufferSize - pcmBufferSize,
(BYTE)(m_Resource->GetFormat()->wBitsPerSample == 8 ? 128 :0));
}
}
Search WWH ::




Custom Search