Exemple #1
0
/*------------------------------------------------------------------------
*
* PROTOTYPE  :  static int DSS_RegisterHandle(V3XA_HANDLE *sam, int channel)
*
* DESCRIPTION :  Try to duplicate the sample.
*
*/
static int DSS_DuplicateHandle(V3XA_HANDLE *sam, int channel)
{

	HRESULT  hr;
    int i;
    DS_handle *hnd = g_pDSHandles + channel;
    for  (i=0;i<RLX.Audio.ChannelToMix;i++)
    {
        DS_handle *p = g_pDSHandles + i ;
        if ((i!=channel)&&(p->sample == sam))
        {
            // Same on a different channel
            hnd->sample = sam;
            hr = g_lpDSDevice->DuplicateSoundBuffer(p->pbuffer, &hnd->pbuffer);
            if (SYS_DXTRACE(hr))
            {
                return -1;
            }
            DS_Register3D(sam, hnd, 0);
            sam->sampleFormat&=~V3XA_FMTVOLATILE;
            return i;
        }
    }
    return -1;
}
Exemple #2
0
int ReplicateSound(int source_id)
{
    if (source_id != -1) {
        // duplicate the sound buffer
        // first hunt for an open id
        for (int id = 0; id < MAX_SOUNDS; id++) {
            // is this sound open?
            if (sound_fx[id].state == SOUND_NULL) {
                // first make an identical copy
                sound_fx[id] = sound_fx[source_id];
                
                // now actually replicate the directsound buffer
                if (lpDS->DuplicateSoundBuffer(sound_fx[source_id].dsbuffer, &sound_fx[id].dsbuffer) != DS_OK) {
                    // reset sound to NULL
                    sound_fx[id].dsbuffer = NULL;
                    sound_fx[id].state    = SOUND_NULL;
                    // return error
                    return(-1);
                }
                
                // now fix up id
                sound_fx[id].id = id;
                // return replicated sound
                return(id);
            }
        }
    } else {
        return(-1);
    }
    
    // else failure
    return(-1);
}
Exemple #3
0
LPDIRECTSOUNDBUFFER TSoundContainer::GetUnique(LPDIRECTSOUND pDS)
{
    if (!DSBuffer)
        return NULL;
    // jeœli siê dobrze zainicjowa³o
    LPDIRECTSOUNDBUFFER buff;
    pDS->DuplicateSoundBuffer(DSBuffer, &buff);
    if (buff)
        DSBuffers.push(buff);
    return DSBuffers.top();
};
Exemple #4
0
bool Audio::PlayDuplicateWavFile(LPDIRECTSOUND lpDS,Audio* a) {
    if(lpDSB!=NULL)return false;
    lpDS->DuplicateSoundBuffer(a->GetWavBuffer(),&lpDSB);
    if(a->ex==true)
    {
        lpDSB->QueryInterface(IID_IDirectSound3DBuffer,(void **)&lp3D);
        lp3D->SetPosition(x,0.0f,y,DS3D_IMMEDIATE);
    }
    lpDSB->Play(0,0,0);
    return true;
}
int DSound_Replicate_Sound(int source_id)
{
    // this function replicates the sent sound and sends back the
    // id of the replicated sound, you would use this function
    // to make multiple copies of a gunshot or something that
    // you want to play multiple times simulataneously, but you
    // only want to load once

    if (source_id!=-1)
    {
        // duplicate the sound buffer
        // first hunt for an open id

        for (int id=0; id < MAX_SOUNDS; id++)
        {
            // is this sound open?
            if (sound_fx[id].state==SOUND_NULL)
            {
                // first make an identical copy
                sound_fx[id] = sound_fx[source_id];

                // now actually replicate the directsound buffer
                if (FAILED(lpds->DuplicateSoundBuffer(sound_fx[source_id].dsbuffer,
                    &sound_fx[id].dsbuffer)))
                {
                    // reset sound to NULL
                    sound_fx[id].dsbuffer = NULL;
                    sound_fx[id].state    = SOUND_NULL;

                    // return error
                    return(-1);
                } // end if

                // now fix up id
                sound_fx[id].id = id;

                // return replicated sound
                return(id);

            } // end if found

        } // end for id

    } // end if
    else
        return(-1);

    // else failure
    return(-1);

} // end DSound_Replicate_Sound
bool MkSoundBuffer::SetUp(LPDIRECTSOUND directSound, LPDIRECTSOUNDBUFFER srcBuffer)
{
	Clear();

	if ((directSound == NULL) || (srcBuffer == NULL))
		return false;

	directSound->DuplicateSoundBuffer(srcBuffer, &m_SoundBuffer);
	if (m_SoundBuffer == NULL)
		return false;

	_UpdateInformation();
	return true;
}
Exemple #7
0
//-----------------------------------------------------------------------------
// Name: 
// Desc: 
//-----------------------------------------------------------------------------
SoundObject* DSUtil_CreateSound( LPCTSTR strName, DWORD dwNumConcurrentBuffers )
{
    SoundObject*   pSound = NULL;
    LPWAVEFORMATEX pWaveHeader;
    BYTE*          pbData;
    DWORD          cbData;

    if( NULL == g_pDS )
        return NULL;

    if( dwNumConcurrentBuffers < 1 )
        dwNumConcurrentBuffers = 1;

    if( SUCCEEDED( DSUtil_GetWaveResource( NULL, strName, &pWaveHeader,
                                           &pbData, &cbData ) ) )
    {
        pSound = new SoundObject;
        pSound->dwNumBuffers = dwNumConcurrentBuffers;
        pSound->pbWaveData   = pbData;
        pSound->cbWaveSize   = cbData;
        pSound->dwCurrent    = 0;
        pSound->pdsbBuffers  = new LPDIRECTSOUNDBUFFER[dwNumConcurrentBuffers+1];

        pSound->pdsbBuffers[0] = DSUtil_LoadSoundBuffer( g_pDS, strName );

        for( DWORD i=1; i<pSound->dwNumBuffers; i++ )
        {
            if( FAILED( g_pDS->DuplicateSoundBuffer( pSound->pdsbBuffers[0],
                                                   &pSound->pdsbBuffers[i] ) ) )
            {
                pSound->pdsbBuffers[i] = DSUtil_LoadSoundBuffer( g_pDS, strName );
                if( NULL == pSound->pdsbBuffers[i] )
                {
                    DSUtil_DestroySound( pSound );
                    pSound = NULL;
                    break;
                }
            }
        }
    }

    return pSound;
}
Exemple #8
0
HRESULT STDMETHODCALLTYPE DirectSound::DuplicateSoundBuffer(LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate)
{
	return m_ds->DuplicateSoundBuffer(pDSBufferOriginal, ppDSBufferDuplicate);
}