home *** CD-ROM | disk | FTP | other *** search
/ Game Audio Programming / GameAudioProgramming.iso / Game_Audio / AudioTest / EAXBuffer.cpp < prev    next >
C/C++ Source or Header  |  2002-06-25  |  11KB  |  341 lines

  1. // EAXBuffer.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "audiotest.h"
  6. #include "AudioTestDlg.h"
  7. #include "EAXBuffer.h"
  8. #include "Sound3D.h"
  9.  
  10. #include "Audio.h"
  11.  
  12. using namespace Audio;
  13.  
  14. #ifdef _DEBUG
  15. #define new DEBUG_NEW
  16. #undef THIS_FILE
  17. static char THIS_FILE[] = __FILE__;
  18. #endif
  19.  
  20. /////////////////////////////////////////////////////////////////////////////
  21. // CEAXBuffer dialog
  22.  
  23.  
  24. CEAXBuffer::CEAXBuffer(CWnd* pParent /*=NULL*/)
  25.     : CDialog(CEAXBuffer::IDD, pParent)
  26. {
  27.     //{{AFX_DATA_INIT(CEAXBuffer)
  28.         // NOTE: the ClassWizard will add member initialization here
  29.     //}}AFX_DATA_INIT
  30.     m_pTestDlg = 0;
  31. }
  32.  
  33.  
  34. void CEAXBuffer::DoDataExchange(CDataExchange* pDX)
  35. {
  36.     CDialog::DoDataExchange(pDX);
  37.     //{{AFX_DATA_MAP(CEAXBuffer)
  38.     DDX_Control(pDX, IDC_SLIDER_ROOMEFFECT_VOLUMEHF, m_SliderRoomEffectVolumeHF);
  39.     DDX_Control(pDX, IDC_SLIDER_ROOMEFFECT_VOLUME, m_SliderRoomEffectVolume);
  40.     DDX_Control(pDX, IDC_SLIDER_ROOMEFFECT_ROLLOFF_FACTOR, m_SliderRoomEffectRolloffFactor);
  41.     DDX_Control(pDX, IDC_SLIDER_OUTSIDE_HF_VOLUME, m_SliderOutsideHFVolume);
  42.     DDX_Control(pDX, IDC_SLIDER_OCCLUSION_VOLUME, m_SliderOcclusionVolume);
  43.     DDX_Control(pDX, IDC_SLIDER_OCCLUSION_ROOM_RATIO, m_SliderOcclusionRoomRatio);
  44.     DDX_Control(pDX, IDC_SLIDER_OCCLUSION_LFRATIO, m_SliderOcclusionLFRatio);
  45.     DDX_Control(pDX, IDC_SLIDER_OBSTRUCTION_VOLUME, m_SliderObstructionVolume);
  46.     DDX_Control(pDX, IDC_SLIDER_OBSTRUCTION_LFRATIO, m_SliderObstructionLFRatio);
  47.     DDX_Control(pDX, IDC_SLIDER_DIRECTPATH_VOLUMEHF, m_SliderDirectPathVolumeHF);
  48.     DDX_Control(pDX, IDC_SLIDER_DIRECTPATH_VOLUME, m_SliderDirectPathVolume);
  49.     DDX_Control(pDX, IDC_SLIDER_BUFFER_AIR_ABSORPTION_FACTOR, m_SliderBufferAirAbsorptionFactor);
  50.     DDX_Control(pDX, IDC_EDIT_ROOMEFFECT_VOLUMEHF, m_EditRoomEffectVolumeHF);
  51.     DDX_Control(pDX, IDC_EDIT_ROOMEFFECT_VOLUME, m_EditRoomEffectVolume);
  52.     DDX_Control(pDX, IDC_EDIT_ROOMEFFECT_ROLLOFF_FACTOR, m_EditRoomEffectRolloffFactor);
  53.     DDX_Control(pDX, IDC_EDIT_OUTSIDE_HF_VOLUME, m_EditOutsideHFVolume);
  54.     DDX_Control(pDX, IDC_EDIT_OCCLUSION_VOLUME, m_EditOcclusionVolume);
  55.     DDX_Control(pDX, IDC_EDIT_OCCLUSION_ROOM_RATIO, m_EditOcclusionRoomRatio);
  56.     DDX_Control(pDX, IDC_EDIT_OCCLUSION_LFRATIO, m_EditOcclusionLFRatio);
  57.     DDX_Control(pDX, IDC_EDIT_OBSTRUCTION_VOLUME, m_EditObstructionVolume);
  58.     DDX_Control(pDX, IDC_EDIT_OBSTRUCTION_LFRATIO, m_EditObstructionLFRatio);
  59.     DDX_Control(pDX, IDC_EDIT_DIRECTPATH_VOLUMEHF, m_EditDirectPathVolumeHF);
  60.     DDX_Control(pDX, IDC_EDIT_DIRECTPATH_VOLUME, m_EditDirectPathVolume);
  61.     DDX_Control(pDX, IDC_EDIT_BUFFER_AIR_ABSORPTION_FACTOR, m_EditAirAbsorptionFactor);
  62.     DDX_Control(pDX, IDC_CHECK_AUTO_ROOM_EFFECT_HF, m_CheckAutoRoomEffectHF);
  63.     DDX_Control(pDX, IDC_CHECK_AUTO_ROOM_EFFECT, m_CheckAutoRoomEffect);
  64.     DDX_Control(pDX, IDC_CHECK_AUTO_DIRECT_PATH_HF, m_CheckAutoDirectPathHF);
  65.     //}}AFX_DATA_MAP
  66. }
  67.  
  68.  
  69. BEGIN_MESSAGE_MAP(CEAXBuffer, CDialog)
  70.     //{{AFX_MSG_MAP(CEAXBuffer)
  71.     ON_WM_HSCROLL()
  72.     ON_BN_CLICKED(IDC_CHECK_AUTO_DIRECT_PATH_HF, OnCheckAutoDirectPathHF)
  73.     ON_BN_CLICKED(IDC_CHECK_AUTO_ROOM_EFFECT_HF, OnCheckAutoRoomEffectHF)
  74.     ON_BN_CLICKED(IDC_CHECK_AUTO_ROOM_EFFECT, OnCheckAutoRoomEffect)
  75.     //}}AFX_MSG_MAP
  76. END_MESSAGE_MAP()
  77.  
  78. /////////////////////////////////////////////////////////////////////////////
  79. // CEAXBuffer message handlers
  80.  
  81. BOOL CEAXBuffer::OnInitDialog() 
  82. {
  83.     CDialog::OnInitDialog();
  84.  
  85.     EAXBufferProps props;
  86.  
  87.     m_SliderRoomEffectVolumeHF.SetRange(-10000, 0, TRUE);
  88.     m_SliderRoomEffectVolume.SetRange(-10000, 1000, TRUE);
  89.     m_SliderRoomEffectRolloffFactor.SetRange(0, 1000, TRUE);
  90.     m_SliderOutsideHFVolume.SetRange(-10000, 0, TRUE);
  91.     m_SliderOcclusionVolume.SetRange(-10000, 0, TRUE);
  92.     m_SliderOcclusionRoomRatio.SetRange(0, 1000, TRUE);
  93.     m_SliderOcclusionLFRatio.SetRange(0, 1000, TRUE);
  94.     m_SliderObstructionVolume.SetRange(-10000, 0, TRUE);
  95.     m_SliderObstructionLFRatio.SetRange(0, 100, TRUE);
  96.     m_SliderDirectPathVolumeHF.SetRange(-10000, 0, TRUE);
  97.     m_SliderDirectPathVolume.SetRange(-10000, 1000, TRUE);
  98.     m_SliderBufferAirAbsorptionFactor.SetRange(0, 1000, TRUE);
  99.  
  100.  
  101.     UpdateControls();
  102.  
  103.     return TRUE;  // return TRUE unless you set the focus to a control
  104.                   // EXCEPTION: OCX Property Pages should return FALSE
  105. }
  106.  
  107. void CEAXBuffer::PostNcDestroy() 
  108. {
  109.     CDialog::PostNcDestroy();
  110.     if(m_pTestDlg)
  111.         m_pTestDlg->m_pEAXBuffer = 0;
  112.     delete this;
  113.  
  114. }
  115.  
  116. void CEAXBuffer::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  117. {
  118.     if(pScrollBar->IsKindOf(RUNTIME_CLASS(CSliderCtrl)))
  119.     {
  120.         CSliderCtrl* pSlider = reinterpret_cast<CSliderCtrl*>(pScrollBar);
  121.         if(!pSlider)
  122.             return;
  123.         ISound3D* pSound3D = m_pTestDlg->m_pSound3D->GetCurrentSound();
  124.         if(pSlider == &m_SliderRoomEffectVolumeHF)
  125.         {
  126.             if(pSound3D)
  127.                 pSound3D->EAX()->SetRoomHF(pSlider->GetPos());
  128.             else
  129.                 m_Props.lRoomHF = pSlider->GetPos();
  130.         }
  131.         else if(pSlider == &m_SliderRoomEffectVolume)
  132.         {
  133.             if(pSound3D)
  134.                 pSound3D->EAX()->SetRoom(pSlider->GetPos());
  135.             else
  136.                 m_Props.lRoom = pSlider->GetPos();
  137.         }
  138.         else if(pSlider == &m_SliderRoomEffectRolloffFactor)
  139.         {
  140.             if(pSound3D)
  141.                 pSound3D->EAX()->SetRoomRolloffFactor(float(pSlider->GetPos()) / 100.0f);
  142.             else
  143.                 m_Props.flRoomRolloffFactor = float(pSlider->GetPos()) / 100.0f;
  144.         }
  145.         else if(pSlider == &m_SliderOutsideHFVolume)
  146.         {
  147.             if(pSound3D)
  148.                 pSound3D->EAX()->SetOutsideVolumeHF(pSlider->GetPos());
  149.             else
  150.                 m_Props.lOutsideVolumeHF = pSlider->GetPos();
  151.         }
  152.         else if(pSlider == &m_SliderOcclusionVolume)
  153.         {
  154.             if(pSound3D)
  155.                 pSound3D->EAX()->SetOcclusion(pSlider->GetPos());
  156.             else
  157.                 m_Props.lOcclusion = pSlider->GetPos();
  158.         }
  159.         else if(pSlider == &m_SliderOcclusionRoomRatio)
  160.         {
  161.             if(pSound3D)
  162.                 pSound3D->EAX()->SetOcclusionRoomRatio(float(pSlider->GetPos()) / 100.0f);
  163.             else
  164.                 m_Props.flOcclusionRoomRatio = float(pSlider->GetPos()) / 100.0f;
  165.         }
  166.         else if(pSlider == &m_SliderOcclusionLFRatio)
  167.         {
  168.             if(pSound3D)
  169.                 pSound3D->EAX()->SetOcclusionLFRatio(float(pSlider->GetPos()) / 100.0f);
  170.             else
  171.                 m_Props.flOcclusionLFRatio = float(pSlider->GetPos()) / 100.0f;
  172.         }
  173.         else if(pSlider == &m_SliderObstructionVolume)
  174.         {
  175.             if(pSound3D)
  176.                 pSound3D->EAX()->SetObstruction(pSlider->GetPos());
  177.             else
  178.                 m_Props.lObstruction = pSlider->GetPos();
  179.         }
  180.         else if(pSlider == &m_SliderObstructionLFRatio)
  181.         {
  182.             if(pSound3D)
  183.                 pSound3D->EAX()->SetObstructionLFRatio(float(pSlider->GetPos()) / 100.0f);
  184.             else
  185.                 m_Props.flObstructionLFRatio = float(pSlider->GetPos()) / 100.0f;
  186.         }
  187.         else if(pSlider == &m_SliderDirectPathVolumeHF)
  188.         {
  189.             if(pSound3D)
  190.                 pSound3D->EAX()->SetDirectHF(pSlider->GetPos());
  191.             else
  192.                 m_Props.lDirectHF = pSlider->GetPos();
  193.         }
  194.         else if(pSlider == &m_SliderDirectPathVolume)
  195.         {
  196.             if(pSound3D)
  197.                 pSound3D->EAX()->SetDirect(pSlider->GetPos());
  198.             else
  199.                 m_Props.lDirect = pSlider->GetPos();
  200.         }
  201.         else if(pSlider == &m_SliderBufferAirAbsorptionFactor)
  202.         {
  203.             if(pSound3D)
  204.                 pSound3D->EAX()->SetAirAbsorptionFactor(float(pSlider->GetPos()) / 100.0f);
  205.             else
  206.                 m_Props.flAirAbsorptionFactor = float(pSlider->GetPos()) / 100.0f;
  207.         }
  208.         UpdateControls();
  209.     }
  210.     CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
  211. }
  212.  
  213. void CEAXBuffer::OnOK() 
  214. {
  215.     CDialog::DestroyWindow();
  216. }
  217.  
  218. void CEAXBuffer::UpdateControls()
  219. {
  220.     ISound3D* pSound3D = m_pTestDlg->m_pSound3D->GetCurrentSound();
  221.  
  222.     if(pSound3D)
  223.         pSound3D->EAX()->GetProperties(m_Props);
  224.  
  225.     CString sVal;
  226.  
  227.     m_SliderRoomEffectVolumeHF.SetPos(m_Props.lRoomHF);
  228.     sVal.Format("%d", m_Props.lRoomHF);
  229.     m_EditRoomEffectVolumeHF.SetWindowText(sVal);
  230.  
  231.     m_SliderRoomEffectVolume.SetPos(m_Props.lRoom);
  232.     sVal.Format("%d", m_Props.lRoom);
  233.     m_EditRoomEffectVolume.SetWindowText(sVal);
  234.  
  235.     m_SliderRoomEffectRolloffFactor.SetPos(m_Props.flRoomRolloffFactor * 100);
  236.     sVal.Format("%.2f", m_Props.flRoomRolloffFactor);
  237.     m_EditRoomEffectRolloffFactor.SetWindowText(sVal);
  238.  
  239.     m_SliderOutsideHFVolume.SetPos(m_Props.lOutsideVolumeHF);
  240.     sVal.Format("%d", m_Props.lOutsideVolumeHF);
  241.     m_EditOutsideHFVolume.SetWindowText(sVal);
  242.  
  243.     m_SliderOcclusionVolume.SetPos(m_Props.lOcclusion);
  244.     sVal.Format("%d", m_Props.lOcclusion);
  245.     m_EditOcclusionVolume.SetWindowText(sVal);
  246.  
  247.     m_SliderOcclusionRoomRatio.SetPos(m_Props.flOcclusionRoomRatio * 100);
  248.     sVal.Format("%.2f", m_Props.flOcclusionRoomRatio);
  249.     m_EditOcclusionRoomRatio.SetWindowText(sVal);
  250.  
  251.     m_SliderOcclusionLFRatio.SetPos(m_Props.flOcclusionLFRatio * 100);
  252.     sVal.Format("%.2f", m_Props.flOcclusionLFRatio);
  253.     m_EditOcclusionLFRatio.SetWindowText(sVal);
  254.  
  255.     m_SliderObstructionVolume.SetPos(m_Props.lObstruction);
  256.     sVal.Format("%d", m_Props.lObstruction);
  257.     m_EditObstructionVolume.SetWindowText(sVal);
  258.  
  259.     m_SliderObstructionLFRatio.SetPos(m_Props.flObstructionLFRatio * 100);
  260.     sVal.Format("%.2f", m_Props.flObstructionLFRatio);
  261.     m_EditObstructionLFRatio.SetWindowText(sVal);
  262.  
  263.     m_SliderDirectPathVolumeHF.SetPos(m_Props.lDirectHF);
  264.     sVal.Format("%d", m_Props.lDirectHF);
  265.     m_EditDirectPathVolumeHF.SetWindowText(sVal);
  266.  
  267.     m_SliderDirectPathVolume.SetPos(m_Props.lDirect);
  268.     sVal.Format("%d", m_Props.lDirect);
  269.     m_EditDirectPathVolume.SetWindowText(sVal);
  270.  
  271.     m_SliderBufferAirAbsorptionFactor.SetPos(m_Props.flAirAbsorptionFactor * 100);
  272.     sVal.Format("%.2f", m_Props.flAirAbsorptionFactor);
  273.     m_EditAirAbsorptionFactor.SetWindowText(sVal);
  274.  
  275.     if((m_Props.dwFlags & EAXBUFFERFLAGS_DIRECTHFAUTO) == EAXBUFFERFLAGS_DIRECTHFAUTO)
  276.         m_CheckAutoDirectPathHF.SetCheck(1);
  277.     else
  278.         m_CheckAutoDirectPathHF.SetCheck(0);
  279.  
  280.     if((m_Props.dwFlags & EAXBUFFERFLAGS_ROOMHFAUTO) == EAXBUFFERFLAGS_ROOMHFAUTO)
  281.         m_CheckAutoRoomEffectHF.SetCheck(1);
  282.     else
  283.         m_CheckAutoRoomEffectHF.SetCheck(0);
  284.  
  285.     if((m_Props.dwFlags & EAXBUFFERFLAGS_ROOMAUTO) == EAXBUFFERFLAGS_ROOMAUTO)
  286.         m_CheckAutoRoomEffect.SetCheck(1);
  287.     else
  288.         m_CheckAutoRoomEffect.SetCheck(0);
  289.  
  290.  
  291. }
  292.  
  293.  
  294. void CEAXBuffer::OnCheckAutoDirectPathHF() 
  295. {
  296.     ISound3D* pSound3D = m_pTestDlg->m_pSound3D->GetCurrentSound();
  297.  
  298.     if(pSound3D)
  299.         pSound3D->EAX()->GetProperties(m_Props);
  300.  
  301.     if(m_CheckAutoDirectPathHF.GetCheck())
  302.         m_Props.dwFlags |= EAXBUFFERFLAGS_DIRECTHFAUTO;
  303.     else
  304.         m_Props.dwFlags &= ~EAXBUFFERFLAGS_DIRECTHFAUTO;
  305.  
  306.     if(pSound3D)
  307.         pSound3D->EAX()->SetFlags(m_Props.dwFlags);
  308. }
  309.  
  310. void CEAXBuffer::OnCheckAutoRoomEffectHF() 
  311. {
  312.     ISound3D* pSound3D = m_pTestDlg->m_pSound3D->GetCurrentSound();
  313.  
  314.     if(pSound3D)
  315.         pSound3D->EAX()->GetProperties(m_Props);
  316.  
  317.     if(m_CheckAutoRoomEffectHF.GetCheck())
  318.         m_Props.dwFlags |= EAXBUFFERFLAGS_ROOMHFAUTO;
  319.     else
  320.         m_Props.dwFlags &= ~EAXBUFFERFLAGS_ROOMHFAUTO;
  321.  
  322.     if(pSound3D)
  323.         pSound3D->EAX()->SetFlags(m_Props.dwFlags);
  324. }
  325.  
  326. void CEAXBuffer::OnCheckAutoRoomEffect() 
  327. {
  328.     ISound3D* pSound3D = m_pTestDlg->m_pSound3D->GetCurrentSound();
  329.  
  330.     if(pSound3D)
  331.         pSound3D->EAX()->GetProperties(m_Props);
  332.  
  333.     if(m_CheckAutoRoomEffect.GetCheck())
  334.         m_Props.dwFlags |= EAXBUFFERFLAGS_ROOMAUTO;
  335.     else
  336.         m_Props.dwFlags &= ~EAXBUFFERFLAGS_ROOMAUTO;
  337.  
  338.     if(pSound3D)
  339.         pSound3D->EAX()->SetFlags(m_Props.dwFlags);
  340. }
  341.