Advertisement
diamondandplatinum3

AudioManager.cpp ~ C++

Oct 8th, 2013
282
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 31.03 KB | None | 0 0
  1. //////////////////////////////////////////////////
  2. //  Includes some header files which we will  ////
  3. //  be using in this .cpp file                ////
  4. //////////////////////////////////////////////////
  5. #include "AudioManager.h"                     ////
  6. #include "DeltaTime.h"                        ////
  7. #include <assert.h>                           ////
  8. #include <iostream>                           ////
  9. //////////////////////////////////////////////////
  10.  
  11.  
  12. AudioManager* AudioManager::m_Instance = NULL;
  13. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  14. //  * New Static Method: Get Audio Manager Instance
  15. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  16. AudioManager* AudioManager::GetInstance()
  17. {
  18.     return m_Instance;
  19. }
  20. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  21. //  ** Constructor
  22. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  23. AudioManager::AudioManager()
  24.     : m_pFMODSystem(NULL)
  25. {
  26.     if( m_Instance == NULL )   
  27.     {
  28.         m_Instance = this;
  29.     }
  30.     else                       
  31.     {
  32.         std::cout << "ERROR: Only One Instance of the AudioManager can exist at any one time! \n\n\n\n\n";
  33.         assert(0);
  34.     }
  35. }
  36. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  37. //  *~ Deconstructor
  38. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  39. AudioManager::~AudioManager()
  40. {
  41.     DeleteSounds();
  42.  
  43.     if( m_pFMODSystem != NULL )
  44.     {
  45.         m_pFMODSystem->close();
  46.         m_pFMODSystem->release();
  47.     }
  48.    
  49.     m_Instance = NULL;
  50. }
  51. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  52. //  * New Method: Intialise Sound
  53. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  54. void AudioManager::InitSound()
  55. {
  56.     FMOD_Result = System_Create( &m_pFMODSystem );
  57.     FMOD_Result = m_pFMODSystem->init( NUMBER_OF_AUDIO_CHANNELS, FMOD_INIT_NORMAL, 0 );
  58. }
  59. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  60. //  * New Method: Setup Audio Holder
  61. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  62. void AudioManager::SetupAudioHolder()
  63. {
  64.     m_AudioHolder.ImportedAudio.resize( 10, NULL );
  65.     m_AudioHolder.EmptySlotID = 0;
  66. }
  67. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  68. //  * New Method: Setup Audio Channels
  69. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  70. void AudioManager::SetupAudioChannels()
  71. {
  72.     for(int i = 0; i < 3; ++i)
  73.     {
  74.         m_ChannelInfos[i].Volume            = 0.8f;
  75.         m_ChannelInfos[i].Paused            = false;
  76.         m_ChannelInfos[i].Fadein            = false;
  77.         m_ChannelInfos[i].Fadeout           = false;
  78.         m_ChannelInfos[i].FadeTime          = 0.f;
  79.         m_ChannelInfos[i].CurrentFadeTime   = 0.f;
  80.         m_ChannelInfos[i].CurrentSound      = NULL;
  81.     }
  82.  
  83.     m_ChannelInfos[0].ChannelPTR = &m_pBGMChannel;
  84.     m_ChannelInfos[1].ChannelPTR = &m_pBGSChannel;
  85.     m_ChannelInfos[2].ChannelPTR = &m_pSEChannel;
  86.  
  87.     m_ChannelInfos[0].ChannelType = AudioManager::BACKGROUND_MUSIC;
  88.     m_ChannelInfos[1].ChannelType = AudioManager::BACKGROUND_SOUND;
  89.     m_ChannelInfos[2].ChannelType = AudioManager::SOUND_EFFECT;
  90.  
  91.     m_pBGMReservedAudio  = NULL;
  92.     m_pBGSReservedAudio  = NULL;
  93.     m_bMuteSoundEffects  = false;
  94. }
  95. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  96. //  * New Method: On Load
  97. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  98. void AudioManager::OnLoad()
  99. {
  100.     InitSound();
  101.     SetupAudioHolder();
  102.     SetupAudioChannels();
  103. }
  104. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  105. //  * New Method: On Unload
  106. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  107. void AudioManager::OnUnload()
  108. {
  109.  
  110. }
  111. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  112. //  * New Method: Delete Sounds
  113. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  114. void AudioManager::DeleteSounds()
  115. {
  116.     for( unsigned int i = 0; i < m_AudioHolder.EmptySlotID; ++i )
  117.     {
  118.         m_AudioHolder[i]->Sound_ptr->release();
  119.         delete m_AudioHolder[i];
  120.     }
  121.  
  122.     m_AudioHolder.ImportedAudio.clear();
  123. }
  124. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  125. //  * New Methods: Get Sound Volume
  126. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  127. unsigned int AudioManager::GetSoundVolume( std::string& AliasName, AudioTypes SoundType )
  128. {
  129.     AudioInfo* AudInfo = ConvertAliasIntoAudioInfoObject(AliasName, SoundType);
  130.     if(AudInfo != NULL)
  131.     {
  132.         return AudInfo->Volume;
  133.     }
  134.  
  135.     return 80; // 80 is default volume sound, return this if the Sound cannot be found
  136. }
  137.  
  138. unsigned int AudioManager::GetSoundVolume( unsigned int AudioID )
  139. {
  140.     return m_AudioHolder[ AudioID ]->Volume;
  141. }
  142. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  143. //  * New Methods: Get Sound Tempo
  144. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  145. unsigned int AudioManager::GetSoundTempo( std::string& AliasName, AudioTypes SoundType )
  146. {
  147.     AudioInfo* AudInfo = ConvertAliasIntoAudioInfoObject(AliasName, SoundType);
  148.     if(AudInfo != NULL)
  149.     {
  150.         return AudInfo->Tempo;
  151.     }
  152.  
  153.     return 100; // 100 is default Tempo of sound, return this if the Sound cannot be found
  154. }
  155.  
  156. unsigned int AudioManager::GetSoundTempo( unsigned int AudioID )
  157. {
  158.     return m_AudioHolder[ AudioID ]->Tempo;
  159. }
  160. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  161. //  * New Method: Is Channel Muted?
  162. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  163. bool AudioManager::IsChannelMuted( AudioTypes ChannelType )
  164. {
  165.     bool bMute = false;
  166.  
  167.     if( IsBGMArgument( ChannelType ) )
  168.     {
  169.         m_pBGMChannel->getMute( &bMute );
  170.     }
  171.     else if( IsBGSArgument( ChannelType ) )
  172.     {
  173.         m_pBGSChannel->getMute( &bMute );
  174.     }
  175.     else if( IsSFXArgument( ChannelType ) )
  176.     {
  177.         bMute = m_bMuteSoundEffects;
  178.     }
  179.    
  180.     return bMute;
  181. }
  182. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  183. //  * New Method: Set Master Volume
  184. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  185. void AudioManager::SetMasterVolume( unsigned int iVolume )
  186. {
  187.     float fVolume = ( (float)GetValidVolume( iVolume ) * 0.01f );   // Volume / 100
  188.  
  189.     m_ChannelInfos[0].Volume = fVolume;
  190.     m_ChannelInfos[1].Volume = fVolume;
  191.     m_ChannelInfos[2].Volume = fVolume;
  192.  
  193.     // Correct Volume for all Channels
  194.     CorrectChannelVolume(m_ChannelInfos[0], fVolume);
  195.     CorrectChannelVolume(m_ChannelInfos[1], fVolume);
  196.     CorrectChannelVolume(m_ChannelInfos[2], fVolume);
  197. }
  198. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  199. //  * New Method: Set Channel Volume
  200. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  201. void AudioManager::SetChannelVolume( AudioTypes ChannelType, unsigned int iVolume )
  202. {
  203.     ChannelInfo* CI = ConvertChannelTypeToChannelInfo(ChannelType);
  204.     if(CI != NULL)
  205.     {
  206.         float fVolume = ( (float)GetValidVolume( iVolume ) * 0.01f );
  207.         CorrectChannelVolume(*CI, fVolume );
  208.     }
  209. }
  210. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  211. //  * New Methods: Set Sound Volume
  212. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  213. void AudioManager::SetSoundVolume( std::string& AliasName, unsigned int iVolume, AudioTypes ChannelType )
  214. {
  215.     AudioInfo* AudInfo = ConvertAliasIntoAudioInfoObject(AliasName, ChannelType);
  216.     if(AudInfo != NULL)
  217.     {
  218.         AudInfo->Volume         = GetValidVolume( iVolume );
  219.         AudInfo->ActualVolume   = (AudInfo->Volume * 0.01f);
  220.     }
  221. }
  222.  
  223. void AudioManager::SetSoundVolume( unsigned int AudioID, unsigned int iVolume )
  224. {
  225.     m_AudioHolder[ AudioID ]->Volume        = GetValidVolume( iVolume );
  226.     m_AudioHolder[ AudioID ]->ActualVolume  = (m_AudioHolder[ AudioID ]->Volume * 0.01f);
  227. }
  228. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  229. //  * New Methods: Set Sound Tempo
  230. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  231. void AudioManager::SetSoundTempo( std::string& AliasName, unsigned int iTempo, AudioTypes ChannelType )
  232. {
  233.     AudioInfo* AudInfo = ConvertAliasIntoAudioInfoObject(AliasName, ChannelType);
  234.     if(AudInfo != NULL)
  235.     {
  236.         AudInfo->Tempo          = GetValidTempo( iTempo );
  237.         AudInfo->ActualTempo    = (AudInfo->Tempo * 0.01f);
  238.     }
  239. }
  240.  
  241. void AudioManager::SetSoundTempo( unsigned int AudioID, unsigned int iTempo )
  242. {
  243.     m_AudioHolder[ AudioID ]->Tempo         = GetValidTempo( iTempo );
  244.     m_AudioHolder[ AudioID ]->ActualTempo   = (m_AudioHolder[ AudioID ]->Tempo * 0.01f);
  245. }
  246. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  247. //  * New Method: Set Channel Pause State
  248. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  249. void AudioManager::SetChannelPause( AudioTypes ChannelType, bool bSoundPaused )
  250. {
  251.     ChannelInfo* CI = ConvertChannelTypeToChannelInfo(ChannelType);
  252.     if(CI != NULL)
  253.     {
  254.         CI->Paused = bSoundPaused;
  255.         (*CI->ChannelPTR)->setPaused(bSoundPaused);
  256.     }
  257. }
  258. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  259. //  * New Method: Toggle Channel Mute
  260. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  261. void AudioManager::ToggleMute( AudioTypes ChannelType )
  262. {
  263.     if( IsBGMArgument(ChannelType) )
  264.     {
  265.         bool bMute = false;
  266.         m_pBGMChannel->getMute( &bMute );
  267.  
  268.         if( !bMute )
  269.         {
  270.             m_pBGMChannel->setMute( true );
  271.         }
  272.         else
  273.         {
  274.             m_pBGMChannel->setMute( false );
  275.  
  276.             // Play Reserved Sound if you're no longer mute
  277.             if( m_pBGMReservedAudio != NULL )
  278.             {
  279.                 PlayBGMSound( m_pBGMReservedAudio );
  280.                 m_pBGMReservedAudio = NULL;
  281.             }
  282.         }
  283.     }
  284.    
  285.     else if( IsBGSArgument(ChannelType) )
  286.     {
  287.         bool bMute = false;
  288.         m_pBGSChannel->getMute( &bMute );
  289.  
  290.         if( !bMute )
  291.         {
  292.             m_pBGSChannel->setMute( true );
  293.         }
  294.         else
  295.         {
  296.             m_pBGSChannel->setMute( false );
  297.  
  298.             if( m_pBGSReservedAudio != NULL )
  299.             {
  300.                 PlayBGSSound( m_pBGSReservedAudio );
  301.                 m_pBGSReservedAudio = NULL;
  302.             }
  303.         }
  304.     }
  305.    
  306.     else if( IsSFXArgument(ChannelType) )
  307.     {
  308.         m_bMuteSoundEffects = !m_bMuteSoundEffects;
  309.     }
  310. }
  311. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  312. //  * New Method: Restore Defaults
  313. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  314. void AudioManager::RestoreDefaults()
  315. {
  316.     // Correct Volume for all Channels
  317.     CorrectChannelVolume(m_ChannelInfos[0], 0.8f);
  318.     CorrectChannelVolume(m_ChannelInfos[1], 0.8f);
  319.     CorrectChannelVolume(m_ChannelInfos[2], 0.8f);
  320. }
  321. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  322. //  * New Method: Update
  323. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  324. void AudioManager::Update()
  325. {
  326.     // Update Sound Fade
  327.     for(int i = 0; i < 3; ++i)
  328.     {
  329.         if(m_ChannelInfos[i].Fadein || m_ChannelInfos[i].Fadeout)
  330.         {
  331.             UpdateChannelFade( m_ChannelInfos[i] );
  332.         }
  333.     }
  334.  
  335.     // Update SoundSystem
  336.     FMOD_Result = m_pFMODSystem->update();
  337. }
  338. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  339. //  * New Method: Update Channel Fade
  340. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  341. void AudioManager::UpdateChannelFade( ChannelInfo& a_Channel )
  342. {  
  343.      a_Channel.CurrentFadeTime += DeltaTime::GetInstance()->GetDeltaTime();
  344.  
  345.      // Get Current Channel Volume
  346.      float fVolume;
  347.      (*a_Channel.ChannelPTR)->getVolume(&fVolume);
  348.  
  349.  
  350.      // Get Update Volume Via DeltaTime
  351.      float fTempVolume = ((DeltaTime::GetInstance()->GetDeltaTime() * a_Channel.Volume * a_Channel.CurrentSound->ActualVolume) / a_Channel.FadeTime);
  352.    
  353.      // Add or Deduct Volume from Current Channel Volume
  354.      fVolume += a_Channel.Fadein ? fTempVolume : -fTempVolume;
  355.  
  356.      // Set Volume
  357.      (*a_Channel.ChannelPTR)->setPaused(true);
  358.      (*a_Channel.ChannelPTR)->setVolume(fVolume);
  359.      (*a_Channel.ChannelPTR)->setPaused(false);
  360.  
  361.      // If Fully Faded in/out, set fade to false
  362.      if(a_Channel.CurrentFadeTime > a_Channel.FadeTime)
  363.      {
  364.          a_Channel.Fadein = false;
  365.          a_Channel.Fadeout = false;
  366.          a_Channel.CurrentFadeTime = 0.0f;
  367.      }
  368. }
  369. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  370. //  * New Method: Print Out Audio Loop Info
  371. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  372. void AudioManager::PrintOutAudioLoopInfo()
  373. {
  374.     //////////////////////////////////////
  375.     unsigned int iSoundPosition, iLoopStart, iLoopEnd;
  376.     //////////////////////////////////////
  377.     m_pBGMChannel->getPosition( &iSoundPosition, FMOD_TIMEUNIT_PCM );
  378.     m_pBGMChannel->getLoopPoints( &iLoopStart, FMOD_TIMEUNIT_PCM, &iLoopEnd, FMOD_TIMEUNIT_PCM );
  379.     //////////////////////////////////////
  380.     std::cout << "\n\nCurrent Sound Position: " << iSoundPosition << std::endl;
  381.     //////////////////////////////////////
  382.     if( iSoundPosition > iLoopStart )
  383.         std::cout << "Sound has Entered LoopStart\n";  
  384.     else
  385.         std::cout << "Sound has not Entered LoopStart\n";
  386.     //////////////////////////////////////
  387.     if( iSoundPosition == iLoopEnd )
  388.         std::cout << "Sound has hit LoopEnd\n";
  389.     else
  390.         std::cout << "Sound has not hit LoopEnd\n";
  391.     //////////////////////////////////////
  392.     std::cout << "LoopStart = " << iLoopStart << std::endl;
  393.     std::cout << "LoopEnd = " << iLoopEnd << "\n\n\n\n\n";
  394.     //////////////////////////////////////
  395. }
  396. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  397. //  * New Methods: Import Audio
  398. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  399. unsigned int AudioManager::ImportAudio( std::string& sFileName, AudioTypes eSoundType, unsigned int iVolume, unsigned int iTempo, unsigned int iSampleRate_LoopStart, unsigned int iSampleRate_LoopEnd )
  400. {
  401.     return ImportAudio( sFileName, (std::string)"", eSoundType, iVolume, iTempo, iSampleRate_LoopStart, iSampleRate_LoopEnd );
  402. }
  403.  
  404. unsigned int AudioManager::ImportAudio( std::string& sFileName, std::string& sAliasName, AudioTypes eSoundType, unsigned int iVolume, unsigned int iTempo, unsigned int iSampleRate_LoopStart, unsigned int iSampleRate_LoopEnd )
  405. {
  406.     if( eSoundType == AudioManager::NONE )
  407.     {
  408.         return 0;
  409.     }
  410.  
  411.     // Create Path to Audio Clip
  412.     std::string sPathtoFile = (AUDIO_ROOT_DIRECTORY_FOLDER_NAME + ConvertSoundTypeToAudioFolder(eSoundType) + sFileName);
  413.    
  414.  
  415.     // Check to make sure the Audio hasn't already been imported
  416.     ImportedAndID prWasImported = CheckIfAlreadyImported( sPathtoFile, eSoundType );
  417.     if( prWasImported.first )
  418.     {
  419.         m_AudioHolder[prWasImported.second]->AddAlias( sAliasName );
  420.         return prWasImported.second;
  421.     }
  422.  
  423.     // Create Info for the Sound
  424.     AudioInfo* pAudInfo     = new AudioInfo();
  425.     pAudInfo->FilePath      = sPathtoFile;
  426.     pAudInfo->SoundType     = eSoundType;
  427.     pAudInfo->Volume        = (GetValidVolume(iVolume));
  428.     pAudInfo->Tempo         = (GetValidTempo(iTempo));
  429.     pAudInfo->ActualVolume  = (pAudInfo->Volume * 0.01f);
  430.     pAudInfo->ActualTempo   = (pAudInfo->Tempo  * 0.01f);
  431.     pAudInfo->LoopStart     = iSampleRate_LoopStart;
  432.     pAudInfo->LoopEnd       = iSampleRate_LoopEnd;
  433.     pAudInfo->AddAlias        ( sAliasName );
  434.  
  435.     // Add to Holder
  436.     AddNewAudioInfoToHolder( pAudInfo );
  437.    
  438.     // Create either Stream or Memory for the sound
  439.     if( IsBGMArgument(eSoundType) )
  440.     {
  441.         FMOD_Result = m_pFMODSystem->createStream( pAudInfo->FilePath.c_str(), FMOD_LOOP_NORMAL, 0, &pAudInfo->Sound_ptr );
  442.         m_ChannelInfos[0].ImportedAudioList.push_back(pAudInfo);
  443.     }
  444.  
  445.     else if( IsBGSArgument(eSoundType) )
  446.     {
  447.         FMOD_Result = m_pFMODSystem->createSound( pAudInfo->FilePath.c_str(), FMOD_LOOP_NORMAL, 0, &pAudInfo->Sound_ptr);
  448.         m_ChannelInfos[1].ImportedAudioList.push_back(pAudInfo);
  449.     }
  450.  
  451.     else
  452.     {
  453.         FMOD_Result = m_pFMODSystem->createSound( pAudInfo->FilePath.c_str(), FMOD_DEFAULT, 0, &pAudInfo->Sound_ptr);
  454.         m_ChannelInfos[2].ImportedAudioList.push_back(pAudInfo);
  455.     }
  456.  
  457.     // Return AudioID
  458.     return pAudInfo->AudioID;
  459. }
  460. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  461. //  * New Method: Add New Audio Info To Holder
  462. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  463. void AudioManager::AddNewAudioInfoToHolder( AudioInfo* pAudInfo )
  464. {
  465.     pAudInfo->AudioID = m_AudioHolder.EmptySlotID;
  466.  
  467.     // If Reached Max Capacity, Add 10 Elements
  468.     if( m_AudioHolder.ImportedAudio.size() == m_AudioHolder.EmptySlotID )
  469.     {
  470.         m_AudioHolder.ImportedAudio.resize( m_AudioHolder.ImportedAudio.size() + 10, NULL );
  471.     }
  472.  
  473.     m_AudioHolder.ImportedAudio[m_AudioHolder.EmptySlotID] = pAudInfo;
  474.     m_AudioHolder.EmptySlotID += 1;
  475. }
  476. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  477. //  * New Method: FadeIn Sound
  478. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  479. void AudioManager::FadeinSound(AudioTypes ChannelType, float fSecondsToFadeIn)
  480. {
  481.     ChannelInfo* CI = ConvertChannelTypeToChannelInfo(ChannelType);
  482.     if(CI != NULL)
  483.     {
  484.         CI->Paused      = false;
  485.         CI->Fadein      = true;
  486.         CI->Fadeout     = false;
  487.         CI->FadeTime    = fSecondsToFadeIn;
  488.  
  489.         // Set Low Volume
  490.         (*CI->ChannelPTR)->setPaused(true);
  491.         (*CI->ChannelPTR)->setVolume(0.001f);
  492.         (*CI->ChannelPTR)->setPaused(false);
  493.     }
  494. }
  495. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  496. //  * New Method: FadeOut Sound
  497. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  498. void AudioManager::FadeoutSound(AudioTypes ChannelType, float fSecondsToFadeOut)
  499. {
  500.     ChannelInfo* CI = ConvertChannelTypeToChannelInfo(ChannelType);
  501.     if(CI != NULL)
  502.     {
  503.         CI->Paused      = false;
  504.         CI->Fadein      = false;
  505.         CI->Fadeout     = true;
  506.         CI->FadeTime    = fSecondsToFadeOut;
  507.     }
  508. }
  509. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  510. //  * New Method: Stop Sound    (Channel)
  511. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  512. void AudioManager::StopSound(AudioTypes ChannelType)
  513. {
  514.     ChannelInfo* CI = ConvertChannelTypeToChannelInfo(ChannelType);
  515.     if(CI != NULL)
  516.     {
  517.         FMOD_Result = (*CI->ChannelPTR)->stop();
  518.     }
  519. }
  520. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  521. //  * New Methods: Play Sound
  522. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  523. void AudioManager::PlaySound( std::string& AliasNameofSound, AudioTypes SoundType )
  524. {  
  525.     AudioInfo* pAudInfo = ConvertAliasIntoAudioInfoObject(AliasNameofSound, SoundType);
  526.  
  527.     if( pAudInfo != NULL )
  528.     {
  529.         PlaySound( pAudInfo->AudioID );
  530.     }
  531.     else
  532.     {
  533.         // Sound Was Not Found, Show Error in Console
  534.         std::cout << "Alias SoundFileName: " << AliasNameofSound << " was not found. It either does not exist or you have not imported it.\n";
  535.     }
  536. }
  537.  
  538. void AudioManager::PlaySound( unsigned int AudioID )
  539. {
  540.     if( IsBGMArgument(m_AudioHolder[ AudioID ]->SoundType) )
  541.     {
  542.         PlayBGMSound( m_AudioHolder[ AudioID ] );
  543.     }
  544.     else if( IsBGSArgument(m_AudioHolder[ AudioID ]->SoundType) )
  545.     {
  546.         PlayBGSSound( m_AudioHolder[ AudioID ] );
  547.     }
  548.     else
  549.     {
  550.         PlaySFXSound( m_AudioHolder[ AudioID ] );
  551.     }
  552. }
  553. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  554. //  * New Method: BGM Was Found and is now Playing?
  555. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  556. bool AudioManager::BGMWasFoundAndPlaying(std::string& AliasNameofSound)
  557. {
  558.     AudioInfo* TempAudioInfo = FindAudioInfoInBGMImportedList(AliasNameofSound);
  559.     if(TempAudioInfo != NULL)
  560.     {
  561.         // Found Sound in this List
  562.         PlayBGMSound( TempAudioInfo );
  563.         return true;
  564.     }
  565.     // Didn't find Sound in this List
  566.     return false;
  567. }
  568. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  569. //  * New Method: BGS Was Found and is now Playing?
  570. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  571. bool AudioManager::BGSWasFoundAndPlaying(std::string& AliasNameofSound)
  572. {
  573.     AudioInfo* TempAudioInfo = FindAudioInfoInBGSImportedList(AliasNameofSound);
  574.     if(TempAudioInfo != NULL)
  575.     {
  576.         PlayBGSSound( TempAudioInfo );
  577.         return true;
  578.     }
  579.     return false;
  580. }
  581. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  582. //  * New Method: SFX Was Found and is now Playing?
  583. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  584. bool AudioManager::SEWasFoundAndPlaying(std::string& AliasNameofSound)
  585. {
  586.     AudioInfo* TempAudioInfo = FindAudioInfoInSEImportedList(AliasNameofSound);
  587.     if(TempAudioInfo != NULL)
  588.     {
  589.         PlaySFXSound( TempAudioInfo );
  590.         return true;
  591.     }
  592.     return false;
  593. }
  594. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  595. //  * New Method: Play BGM Sound
  596. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  597. void AudioManager::PlayBGMSound( AudioInfo* pAudInfo )
  598. {
  599.     // If Muted, Leave
  600.     if( IsChannelMuted(AudioManager::BACKGROUND_MUSIC) )
  601.     {
  602.         m_pBGMReservedAudio = pAudInfo;
  603.         return;
  604.     }
  605.  
  606.     // Return if already playing this sound
  607.     FMOD::Sound* pFSound;
  608.     m_pBGMChannel->getCurrentSound(&pFSound);
  609.     if(pFSound == pAudInfo->Sound_ptr)
  610.     {
  611.         return;
  612.     }
  613.  
  614.  
  615.     // Setup Sound: Stop Whatever is currently playing, set loop points, play sound, then adjust volume & tempo
  616.     // (FMOD reconfigures volume and Tempo when it begins playing a sound, so to modify it we have to set it after we start playing)
  617.     FMOD_Result = m_pBGMChannel->stop();
  618.        
  619.     // Set Loop Points (If Any)
  620.     if( pAudInfo->LoopEnd > pAudInfo->LoopStart )
  621.     {
  622.         FMOD_Result = pAudInfo->Sound_ptr->setLoopPoints( pAudInfo->LoopStart, FMOD_TIMEUNIT_PCM, pAudInfo->LoopEnd, FMOD_TIMEUNIT_PCM );
  623.     }
  624.        
  625.     FMOD_Result = m_pFMODSystem->playSound( FMOD_CHANNEL_REUSE, pAudInfo->Sound_ptr, false, &m_pBGMChannel );
  626.  
  627.     FMOD_Result = m_pBGMChannel->setPaused(true);
  628.     FMOD_Result = m_pBGMChannel->setVolume(pAudInfo->ActualVolume * m_ChannelInfos[0].Volume);
  629.     FMOD_Result = pAudInfo->Sound_ptr->setMusicSpeed(pAudInfo->ActualTempo);
  630.     FMOD_Result = m_pBGMChannel->setPaused(false);
  631.        
  632.     m_ChannelInfos[0].Paused = false;
  633.     m_ChannelInfos[0].CurrentSound = pAudInfo;
  634. }
  635. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  636. //  * New Method: Play BGS Sound
  637. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  638. void AudioManager::PlayBGSSound( AudioInfo* pAudInfo )
  639. {
  640.     if( IsChannelMuted( AudioManager::BACKGROUND_SOUND))
  641.     {
  642.         m_pBGSReservedAudio = pAudInfo;
  643.         return;
  644.     }
  645.  
  646.     // Return if already playing this sound
  647.     FMOD::Sound* pFSound;
  648.     m_pBGSChannel->getCurrentSound(&pFSound);
  649.     if(pFSound == pAudInfo->Sound_ptr)
  650.     {
  651.         return;
  652.     }
  653.  
  654.     FMOD_Result = m_pBGSChannel->stop();
  655.     FMOD_Result = m_pFMODSystem->playSound( FMOD_CHANNEL_REUSE, pAudInfo->Sound_ptr, false, &m_pBGSChannel );
  656.     FMOD_Result = m_pBGSChannel->setPaused(true);
  657.     FMOD_Result = m_pBGSChannel->setVolume( pAudInfo->ActualVolume * m_ChannelInfos[1].Volume);
  658.     FMOD_Result = pAudInfo->Sound_ptr->setMusicSpeed(pAudInfo->ActualTempo);
  659.     FMOD_Result = m_pBGSChannel->setPaused(false);
  660.        
  661.     m_ChannelInfos[1].Paused        = false;
  662.     m_ChannelInfos[1].CurrentSound  = pAudInfo;
  663. }
  664. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  665. //  * New Method: Play SFX Sound
  666. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  667. void AudioManager::PlaySFXSound( AudioInfo* pAudInfo )
  668. {
  669.     if( IsChannelMuted(AudioManager::SOUND_EFFECT) )
  670.     {
  671.         return;
  672.     }
  673.  
  674.     FMOD_Result = m_pFMODSystem->playSound( FMOD_CHANNEL_FREE, pAudInfo->Sound_ptr, false, &m_pSEChannel );
  675.     FMOD_Result = m_pSEChannel->setVolume( pAudInfo->ActualVolume * m_ChannelInfos[2].Volume);
  676.     FMOD_Result = pAudInfo->Sound_ptr->setMusicSpeed(pAudInfo->ActualTempo);
  677.        
  678.     m_ChannelInfos[2].Paused        = false;
  679.     m_ChannelInfos[2].CurrentSound  = pAudInfo;
  680. }
  681. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  682. //  * New Method: Check If Audio Was Already Imported
  683. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  684. AudioManager::ImportedAndID AudioManager::CheckIfAlreadyImported( std::string& sFilePath, AudioTypes eSoundType )
  685. {
  686.     // If the filename matches up to one that's already been imported, return true
  687.     if( IsBGMArgument(eSoundType) )
  688.     {
  689.         for( std::list<AudioInfo*>::iterator Iter = m_ChannelInfos[0].ImportedAudioList.begin(); Iter != m_ChannelInfos[0].ImportedAudioList.end(); ++Iter )
  690.         {
  691.             if( (*Iter)->FilePath == sFilePath )
  692.             {
  693.                 return ImportedAndID(true, (*Iter)->AudioID);
  694.             }
  695.         }
  696.     }
  697.  
  698.     else if( IsBGSArgument(eSoundType) )
  699.     {
  700.         for( std::list<AudioInfo*>::iterator Iter = m_ChannelInfos[1].ImportedAudioList.begin(); Iter != m_ChannelInfos[1].ImportedAudioList.end(); ++Iter )
  701.         {
  702.             if( (*Iter)->FilePath == sFilePath )
  703.             {
  704.                 return ImportedAndID(true, (*Iter)->AudioID);
  705.             }
  706.         }
  707.     }
  708.  
  709.     else if( IsSFXArgument(eSoundType) )
  710.     {
  711.         for( std::list<AudioInfo*>::iterator Iter = m_ChannelInfos[2].ImportedAudioList.begin(); Iter != m_ChannelInfos[2].ImportedAudioList.end(); ++Iter )
  712.         {
  713.             if( (*Iter)->FilePath == sFilePath )
  714.             {
  715.                 return ImportedAndID(true, (*Iter)->AudioID);
  716.             }
  717.         }
  718.     }
  719.  
  720.     return ImportedAndID(false, 0);
  721. }
  722.  
  723. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  724. //  * New Method: Get Valid Volume
  725. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  726. unsigned int AudioManager::GetValidVolume( unsigned int iVolume )
  727. {
  728.     return (iVolume > 100 ? 100 : (iVolume < 5 ? 5 : iVolume));
  729. }
  730. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  731. //  * New Method: Get Valid Tempo
  732. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  733. unsigned int AudioManager::GetValidTempo( unsigned int iTempo )
  734. {
  735.     return (iTempo > 200 ? 200 : (iTempo < 5 ? 5 : iTempo));
  736. }
  737. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  738. //  * New Method: Find AudioInfo From Sound PTR
  739. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  740. AudioManager::AudioInfo* AudioManager::FindSoundFromPTR( FMOD::Sound* pSound, AudioTypes eSoundType )
  741. {
  742.     if( IsBGMArgument(eSoundType) )
  743.     {
  744.         for( std::list<AudioInfo*>::iterator iter = m_ChannelInfos[0].ImportedAudioList.begin(); iter != m_ChannelInfos[0].ImportedAudioList.end(); ++iter )
  745.         {
  746.             if( (*iter)->Sound_ptr == pSound )
  747.             {
  748.                 return (*iter);
  749.             }
  750.         }
  751.     }
  752.  
  753.     else if( IsBGSArgument(eSoundType) )
  754.     {
  755.         for( std::list<AudioInfo*>::iterator iter = m_ChannelInfos[1].ImportedAudioList.begin(); iter != m_ChannelInfos[1].ImportedAudioList.end(); ++iter )
  756.         {
  757.             if( (*iter)->Sound_ptr == pSound )
  758.             {
  759.                 return (*iter);
  760.             }
  761.         }
  762.     }
  763.  
  764.     else
  765.     {
  766.         for( std::list<AudioInfo*>::iterator iter = m_ChannelInfos[2].ImportedAudioList.begin(); iter != m_ChannelInfos[2].ImportedAudioList.end(); ++iter )
  767.         {
  768.             if( (*iter)->Sound_ptr == pSound )
  769.             {
  770.                 return (*iter);
  771.             }
  772.         }
  773.     }
  774.  
  775.     return NULL;
  776. }
  777. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  778. //  * New Method: Correct Channel Volume
  779. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  780. void AudioManager::CorrectChannelVolume( ChannelInfo& a_Channel, float fVolume )
  781. {
  782.     FMOD::Sound* TempSoundPTR = NULL;
  783.     FMOD_Result = (*a_Channel.ChannelPTR)->getCurrentSound(&TempSoundPTR);
  784.    
  785.     // If Sound is playing, adjust volume to the sound's individual volume combined with the channel's volume
  786.     if( TempSoundPTR != NULL )
  787.     {
  788.         FMOD_Result = (*a_Channel.ChannelPTR)->setPaused(true);
  789.         FMOD_Result = (*a_Channel.ChannelPTR)->setVolume( FindSoundFromPTR(TempSoundPTR, a_Channel.ChannelType)->ActualVolume * fVolume );
  790.         FMOD_Result = (*a_Channel.ChannelPTR)->setPaused(a_Channel.Paused);
  791.     }
  792.     // Otherwise just set the channel straight to that specific volume
  793.     else
  794.     {
  795.         FMOD_Result = (*a_Channel.ChannelPTR)->setVolume( fVolume );
  796.     }
  797. }
  798. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  799. //  * New Method: Find Audio Info in BGM Imported List
  800. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  801. AudioManager::AudioInfo* AudioManager::FindAudioInfoInBGMImportedList( std::string& AliasName )
  802. {
  803.     for( std::list<AudioInfo*>::iterator iter = m_ChannelInfos[0].ImportedAudioList.begin(); iter != m_ChannelInfos[0].ImportedAudioList.end(); ++iter )
  804.     {
  805.         if( (*iter)->DoesAliasesInclude(AliasName) )
  806.         {
  807.             return (*iter);
  808.         }
  809.     }
  810.     return NULL;
  811. }
  812. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  813. //  * New Method: Find Audio Info in BGS Imported List
  814. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  815. AudioManager::AudioInfo* AudioManager::FindAudioInfoInBGSImportedList( std::string& AliasName )
  816. {
  817.     for( std::list<AudioInfo*>::iterator iter = m_ChannelInfos[1].ImportedAudioList.begin(); iter != m_ChannelInfos[1].ImportedAudioList.end(); ++iter )
  818.     {
  819.         if( (*iter)->DoesAliasesInclude(AliasName) )
  820.         {
  821.             return (*iter);
  822.         }
  823.     }
  824.     return NULL;
  825. }
  826. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  827. //  * New Method: Find Audio Info in SFX Imported List
  828. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  829. AudioManager::AudioInfo* AudioManager::FindAudioInfoInSEImportedList( std::string& AliasName )
  830. {
  831.     for( std::list<AudioInfo*>::iterator iter = m_ChannelInfos[2].ImportedAudioList.begin(); iter != m_ChannelInfos[2].ImportedAudioList.end(); ++iter )
  832.     {
  833.         if( (*iter)->DoesAliasesInclude(AliasName) )
  834.         {
  835.             return (*iter);
  836.         }
  837.     }
  838.     return NULL;
  839. }
  840. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  841. //  * New Method: Convert Alias Into Audio Info Object
  842. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  843. AudioManager::AudioInfo* AudioManager::ConvertAliasIntoAudioInfoObject( std::string& AliasName, AudioTypes eSoundType )
  844. {
  845.     // Give SFX Priority
  846.     if( IsSFXArgument(eSoundType) )
  847.     {
  848.         AudioInfo* TempAudioInfo = FindAudioInfoInSEImportedList(AliasName);
  849.         if(TempAudioInfo != NULL) { return TempAudioInfo; }
  850.  
  851.         TempAudioInfo = FindAudioInfoInBGSImportedList(AliasName);
  852.         if(TempAudioInfo != NULL) { return TempAudioInfo; }
  853.  
  854.         return FindAudioInfoInBGMImportedList(AliasName);
  855.     }
  856.  
  857.     // Give BGS Priority
  858.     else if( IsBGSArgument(eSoundType) )
  859.     {
  860.         AudioInfo* TempAudioInfo = FindAudioInfoInBGSImportedList(AliasName);
  861.         if(TempAudioInfo != NULL) { return TempAudioInfo; }
  862.  
  863.         TempAudioInfo = FindAudioInfoInBGMImportedList(AliasName);
  864.         if(TempAudioInfo != NULL) { return TempAudioInfo; }
  865.  
  866.         return FindAudioInfoInSEImportedList(AliasName);
  867.     }
  868.  
  869.     // Give BGM Priority
  870.     else
  871.     {
  872.         AudioInfo* TempAudioInfo = FindAudioInfoInBGMImportedList(AliasName);
  873.         if(TempAudioInfo != NULL) { return TempAudioInfo; }
  874.        
  875.         TempAudioInfo = FindAudioInfoInBGSImportedList(AliasName);
  876.         if(TempAudioInfo != NULL) { return TempAudioInfo; }
  877.  
  878.         return FindAudioInfoInSEImportedList(AliasName);
  879.     }
  880. }
  881. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  882. //  * New Method: Convert Channel Type to Channel Info
  883. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  884. AudioManager::ChannelInfo* AudioManager::ConvertChannelTypeToChannelInfo( AudioTypes ChannelType )
  885. {
  886.     if(IsBGMArgument( ChannelType )) { return &m_ChannelInfos[0]; }
  887.     if(IsBGSArgument( ChannelType )) { return &m_ChannelInfos[1]; }
  888.     if(IsSFXArgument( ChannelType )) { return &m_ChannelInfos[2]; }
  889.     return NULL;
  890. }
  891. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  892. //  * New Method: Convert SOund Type to Audio Folder
  893. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  894. std::string AudioManager::ConvertSoundTypeToAudioFolder( AudioTypes AudioType )
  895. {
  896.     if(IsBGMArgument( AudioType )) { return BACKGROUND_MUSIC_FOLDER_NAME; }
  897.     if(IsBGSArgument( AudioType )) { return BACKGROUND_SOUNDS_FOLDER_NAME; }
  898.     if(IsSFXArgument( AudioType )) { return SOUND_EFFECTS_FOLDER_NAME; }
  899.     return "";
  900. }
  901. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  902. //  * New Method: Is A BGM Argument?
  903. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  904. bool AudioManager::IsBGMArgument( AudioTypes SoundType )
  905. {
  906.     return ( (int)SoundType == (int)AudioManager::BGM );
  907. }
  908. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  909. //  * New Method: Is A BGS Argument?
  910. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  911. bool AudioManager::IsBGSArgument( AudioTypes SoundType )
  912. {
  913.     return ( (int)SoundType == (int)AudioManager::BGS );
  914. }
  915. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  916. //  * New Method: Is A SFX Argument?
  917. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  918. bool AudioManager::IsSFXArgument( AudioTypes SoundType )
  919. {
  920.     return ( (int)SoundType == (int)AudioManager::SFX );
  921. }
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  932. //  * New Method: Add Alias        (Audio Info Struct)
  933. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  934. void AudioManager::AudioInfo::AddAlias( std::string& Alias )
  935. {
  936.     if( Alias != "" )
  937.     {
  938.         for( std::list<std::string>::iterator Iter = AliasNames.begin(); Iter != AliasNames.end(); ++Iter )
  939.         {
  940.             if( Alias == (*Iter) )
  941.             {
  942.                 return;
  943.             }
  944.         }
  945.  
  946.         AliasNames.push_back( Alias );
  947.     }
  948. }
  949. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  950. //  * New Method: Does Alias List Include?  (Audio Info Struct)
  951. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  952. bool AudioManager::AudioInfo::DoesAliasesInclude( std::string& Alias )
  953. {
  954.     for( std::list<std::string>::iterator Iter = AliasNames.begin(); Iter != AliasNames.end(); ++Iter )
  955.     {
  956.         if( Alias == (*Iter) )
  957.         {
  958.             return true;
  959.         }
  960.     }
  961.     return false;
  962. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement