Войти
ПрограммированиеФорумЗвук

Не меняется положения слушателят IDirectSound3DListener

#0
20:00, 13 мар. 2009

Ни как не могу понять в чем проблема.

Задаю координаты слушателя

pListener->SetPosition(pos->x,pos->y,pos->z,DS3D_IMMEDIATE);

проверяю

pListener->GetPosition(pos2);
координаты меняются, но в действительности ни чего не меняться, звук принимается как будто слушатель стоит в точке 0,0,0,

Функция установки направления слушателя работает нормально, направления меняется когда вращаю камеру.

pListener->SetOrientation(vecF->x, vecF->y, vecF->z, vecUp->x, vecUp->y, vecUp->z,DS3D_IMMEDIATE);

Так же нормально  перемещается источник звука.

              p3DBuffer->SetPosition(carmove, avto.o_Position.y, avto.o_Position.z, DS3D_IMMEDIATE);

А приемник не как не хочет перемещаться, только вращается.
    D3DXVECTOR3* pos = cam.GetPosition(); получаю координаты камеры
    D3DXVECTOR3* vecF = cam.GetLookAt(); вектор направления
    D3DXVECTOR3* vecUp = cam.GetUp(); вектор вверх

    pListener->SetPosition(pos->x,pos->y,pos->z,DS3D_IMMEDIATE);
    pListener->SetVelocity (pos->x,pos->y,pos->z,DS3D_IMMEDIATE);
    pListener->SetOrientation(vecF->x, vecF->y, vecF->z, vecUp->x, vecUp->y, vecUp->z,DS3D_IMMEDIATE);
 

    D3DXVECTOR3* pos2 = new D3DXVECTOR3(0, -90, 0);

    pListener->GetPosition(pos2);

    sprintf(buffer,"x: %f, y: %f", pos2->x,pos2->y);
    DrawMyText(g_pd3dDevice,hFont,buffer,20,870,1000,50,D3DCOLOR_XRGB(255,255,255));


#1
20:51, 13 мар. 2009

mashinostroitel
Ты не включил поддержку 3Д-звука, задаеться при инициализации устройства.

#2
21:03, 13 мар. 2009

   
А как её включить?

  IDirectMusicAudioPath *  pAudioPath = NULL;
  IDirectSound3DBuffer*    p3DBuffer = NULL;
  IDirectSound3DListener*  pListener = NULL;

    CoInitialize(NULL);


    CoCreateInstance( CLSID_DirectMusicLoader, NULL, CLSCTX_INPROC,
                      IID_IDirectMusicLoader8, (void**)&g_pLoader );

    CoCreateInstance( CLSID_DirectMusicPerformance, NULL, CLSCTX_INPROC,
                      IID_IDirectMusicPerformance8, (void**)&g_pPerformance);


    g_pPerformance->InitAudio( NULL, NULL, NULL,
                              DMUS_APATH_SHARED_STEREOPLUSREVERB, 64,
                              DMUS_AUDIOF_ALL, NULL );

  if (FAILED(g_pPerformance->CreateStandardAudioPath(DMUS_APATH_DYNAMIC_3D, 64, TRUE, &pAudioPath)))
        pAudioPath = NULL;

  // 3D Buffer
    if (FAILED(pAudioPath->GetObjectInPath(0, DMUS_PATH_BUFFER, 0,
            GUID_NULL, 0, IID_IDirectSound3DBuffer, (LPVOID*) &p3DBuffer)))
        p3DBuffer = NULL;

  // Set 3D Parameters
  DS3DBUFFER dsBufferParams;
    dsBufferParams.dwSize = sizeof(DS3DBUFFER);
    p3DBuffer->GetAllParameters(&dsBufferParams);

 
    dsBufferParams.dwMode = DS3DMODE_HEADRELATIVE;
    dsBufferParams.flMinDistance = 50;
    dsBufferParams.flMaxDistance = 500;
    p3DBuffer->SetAllParameters(&dsBufferParams, DS3D_IMMEDIATE);


  DS3DLISTENER dsListenerParams;
//  ZeroMemory( &dsListenerParams, sizeof(dsListenerParams) );
    if (FAILED(pAudioPath->GetObjectInPath( 0, DMUS_PATH_PRIMARY_BUFFER, 0,
              GUID_NULL, 0, IID_IDirectSound3DListener, (LPVOID*) &pListener)))
        pListener=NULL;

    dsListenerParams.dwSize = sizeof(DS3DLISTENER);
    pListener->GetAllParameters(&dsListenerParams);
    dsListenerParams.flDopplerFactor = 0;
    dsListenerParams.flRolloffFactor = 0.3;
    pListener->SetAllParameters(&dsListenerParams, DS3D_IMMEDIATE);


  if (FAILED(g_pLoader ->LoadObjectFromFile(CLSID_DirectMusicSegment, IID_IDirectMusicSegment8, L"Media\\Car Out Low.wav", (LPVOID*) &g_pSoundcar)))
    g_pSoundcar = NULL;

  g_pSoundcar->Download(g_pPerformance);
  g_pSoundcar->SetRepeats(DMUS_SEG_REPEAT_INFINITE);

ПрограммированиеФорумЗвук

Тема в архиве.