Files
itgmania212121/stepmania/src/RandomSample.cpp
T
Chris Danford 9d68ff5d7b Added clamp in RageColor->RageVColor conversion to fix some artifacts
Fixed "autogen doesn't generate patterns for all difficulties for some songs"
Fixed incorrect "show" value in "show!hold" being written in DWIs
Fixed "song ends early after adding an edit then playing"
2002-11-13 05:17:15 +00:00

98 lines
2.0 KiB
C++

#include "stdafx.h"
/*
-----------------------------------------------------------------------------
File: RandomSample.h
Desc: Holds multiple sounds samples and can play a random sound easily.
Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved.
-----------------------------------------------------------------------------
*/
#include "RandomSample.h"
#include "RageUtil.h"
#include "RageLog.h"
RandomSample::RandomSample()
{
m_iIndexLastPlayed = -1;
}
RandomSample::~RandomSample()
{
for( unsigned i=0; i<m_pSamples.size(); i++ )
SAFE_DELETE( m_pSamples[i] );
}
bool RandomSample::LoadSoundDir( CString sDir )
{
if( sDir == "" )
return true;
// make sure there's a backslash at the end of this path
if( sDir[sDir.GetLength()-1] != '\\' )
sDir += "\\";
CStringArray arraySoundFiles;
GetDirListing( sDir + "*.mp3", arraySoundFiles );
GetDirListing( sDir + "*.ogg", arraySoundFiles );
GetDirListing( sDir + "*.wav", arraySoundFiles );
for( unsigned i=0; i<arraySoundFiles.size(); i++ )
LoadSound( sDir + arraySoundFiles[i] );
return true;
}
bool RandomSample::LoadSound( CString sSoundFilePath )
{
LOG->Trace( "RandomSample::LoadSound( %s )", sSoundFilePath.GetString() );
RageSoundSample* pSS = new RageSoundSample;
pSS->Load( sSoundFilePath );
m_pSamples.push_back( pSS );
return true;
}
void RandomSample::PlayRandom()
{
// play one of the samples
if( m_pSamples.empty() )
{
// LOG->Trace( "WARNING: Tried to play a RandomSample that has 0 sounds loaded." );
return;
}
int iIndexToPlay = 0;
for( int i=0; i<5; i++ )
{
iIndexToPlay = rand() % m_pSamples.size();
if( iIndexToPlay != m_iIndexLastPlayed )
break;
}
m_pSamples[iIndexToPlay]->Play();
m_iIndexLastPlayed = iIndexToPlay;
}
void RandomSample::Pause()
{
m_pSamples[m_iIndexLastPlayed]->Pause();
}
void RandomSample::Stop()
{
if( m_iIndexLastPlayed == -1 ) // nothing is currently playing
return;
m_pSamples[m_iIndexLastPlayed]->Stop();
}