www.pudn.com > Example2D.rar > CAudio.cpp


#include "CAudio.h" 
#include  
#include "MAudioSource.h" 
 
 
 
CAudio* CAudio::NewL() 
	{ 
	CAudio *self = CAudio::NewLC(); 
	CleanupStack::Pop( self ); 
	return self; 
	} 
 
 
 
CAudio* CAudio::NewLC() 
	{ 
	CAudio *self = new( ELeave )CAudio; 
	CleanupStack::PushL ( self ); 
	self->ConstructL(); 
	return self; 
	} 
 
 
 
 
CAudio::~CAudio() 
	{ 
	delete iStream; 
	delete iAudioBuffer; 
	} 
 
 
 
CAudio::CAudio() 
	{ 
	} 
 
 
 
void CAudio::ConstructL() 
	{ 
	iAudioBufferLen = 16000 / 10; 
	iAudioBuffer = new( ELeave )TInt16[ iAudioBufferLen ]; 
	Mem::FillZ ( iAudioBuffer, iAudioBufferLen * sizeof( TInt16 ) ); 
	iAudioPtr.Set( TPtrC8( (TUint8*)iAudioBuffer, iAudioBufferLen * sizeof( TInt16 ) ) ); 
	iStream = CMdaAudioOutputStream::NewL ( *this ); 
	iStream->Open( &iSet ); 
	} 
 
 
 
 
void CAudio::MaoscOpenComplete( TInt aError ) 
	{ 
	iError = aError; 
	if( iError ) return; 
	 
	TInt sampleRate = TMdaAudioDataSettings::ESampleRate16000Hz; 
	TInt channels = TMdaAudioDataSettings::EChannelsMono; 
 
	TRAP( iError, iStream->SetAudioPropertiesL( sampleRate, channels ) ); 
	if( iError ) return; 
 
	TRAP( iError, iStream->WriteL( iAudioPtr ) ); 
	if( iError ) return; 
	} 
 
 
 
void CAudio::MaoscBufferCopied( TInt aError, const TDesC8& /*aBuffer*/ ) 
	{ 
	iStream->SetVolume( iStream->MaxVolume() / 2); 
 
	iError = aError; 
	if( iError ) return; 
 
	if( iAudioSource ) 
		{ 
		iAudioSource->FillAudio( iAudioBuffer, iAudioBufferLen ); 
		} 
	TRAP( iError, iStream->WriteL( iAudioPtr ) ); 
	} 
 
 
 
void CAudio::MaoscPlayComplete( TInt aError ) 
	{ 
	iError = aError; 
	} 
 
 
 
TInt CAudio::Error() 
	{ 
	return iError; 
	} 
 
 
 
void CAudio::SetAudioSource( MAudioSource* aSource ) 
	{ 
	iAudioSource = aSource; 
	} 
	 
// End of file