diff -r 000000000000 -r 72b543305e3a mobilemessaging/audiomsg/src/audiomessagebeep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/audiomsg/src/audiomessagebeep.cpp Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2005-2006 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Class that handles playback of tones in AudioMessage applicationn +* +*/ + + + +#include +#include +#include +#include +#include + +#include "audiomessagebeep.h" + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------- +// CAudioMessageBeep::Constructor +// --------------------------------------------------------- +// +CAudioMessageBeep::CAudioMessageBeep() + : iState( EVRToneIdle ) + { + } + + +// --------------------------------------------------------- +// CAudioMessageBeep::ConstructL +// --------------------------------------------------------- +// +void CAudioMessageBeep::ConstructL() + { + iPlayer = CMdaAudioToneUtility::NewL( *this ); + + iSoundSystem = ( static_cast< CAknAppUi* >( + CEikonEnv::Static()->EikAppUi())->KeySounds() ); + } + + +// --------------------------------------------------------- +// CAudioMessageBeep::NewL +// --------------------------------------------------------- +// +CAudioMessageBeep* CAudioMessageBeep::NewL() + { + CAudioMessageBeep* self = new ( ELeave ) CAudioMessageBeep; + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------- +// CAudioMessageBeep::Destructor +// --------------------------------------------------------- +// +CAudioMessageBeep::~CAudioMessageBeep() + { + if ( iPlayer ) + { + switch ( iPlayer->State() ) + { + case EMdaAudioToneUtilityNotReady: + { + iPlayer->CancelPrepare(); + break; + } + case EMdaAudioToneUtilityPlaying: + { + iPlayer->CancelPlay(); + break; + } + } + } + delete iPlayer; + } + + +// --------------------------------------------------------- +// CAudioMessageBeep::PrepareToneL +// Starts preparing the specified tone, preparing completes +// with call-back to MatoPrepareComplete +// --------------------------------------------------------- +// +void CAudioMessageBeep::PrepareToneL( TInt aToneId ) + { + if ( iState != EVRToneIdle ) + { + iQueuedTone = aToneId; + return; + } + + // Retrieve the tone + CAknSoundInfo* info = CAknSoundInfo::NewL(); + CleanupStack::PushL( info ); + User::LeaveIfError( iSoundSystem->RequestSoundInfoL( + aToneId, *info ) ); + + iPreparedTone = aToneId; + iState = EVRTonePreparing; + + iPlayer->PrepareToPlayDesSequence( *info->iSequence ); + CleanupStack::PopAndDestroy( info ); + } + +// --------------------------------------------------------- +// CAudioMessageBeep::PrepareTone +// Non-leaving version of PrepareToneL +// --------------------------------------------------------- +// +void CAudioMessageBeep::PrepareTone( TInt aToneId ) + { + TRAP_IGNORE( PrepareToneL( aToneId ) ); + } + +// --------------------------------------------------------- +// CAudioMessageBeep::PlayTone +// Starts playback of specified tone. Completes with call-back to +// MatoPlayComplete +// --------------------------------------------------------- +// +void CAudioMessageBeep::PlayTone( TInt aToneId ) + { + if ( iState != EVRToneIdle || iPreparedTone != aToneId || + iPlayer->State() == EMdaAudioToneUtilityPlaying ) + { + // Preparing an unprepared tone synchronously is not supported, + // tone playback is skipped + return; + } + + // Preferences need to be set according to tone + switch ( aToneId ) + { + case EAvkonSIDVoiceRecordingStartTone: + { + iPlayer->SetPriority( KAudioPriorityRecording, + TMdaPriorityPreference( KAudioPrefVoiceRecStart ) ); + break; + } + case EAvkonSIDVoiceRecordingStopTone: + { + iPlayer->SetPriority( KAudioPriorityRecording, + TMdaPriorityPreference( KAudioPrefVoiceRecStop ) ); + break; + } + default: + { + break; + } + } + + iState = EVRTonePlaying; + + iPlayer->Play(); + } + +// --------------------------------------------------------- +// CAudioMessageBeep::MatoPrepareComplete +// --------------------------------------------------------- +// +void CAudioMessageBeep::MatoPrepareComplete(TInt aError) + { + if ( aError ) + { + iPreparedTone = 0; + } + + iState = EVRToneIdle; + + // Prepare the next tone in queue + if ( iQueuedTone ) + { + TRAP_IGNORE( PrepareToneL( iQueuedTone ) ); + iQueuedTone = 0; + } + + + } + + +// --------------------------------------------------------- +// CAudioMessageBeep::MatoPlayComplete +// --------------------------------------------------------- +// +#ifdef _DEBUG +void CAudioMessageBeep::MatoPlayComplete(TInt aError ) + { + RDebug::Print( _L("AudioMessage: Tone %d played, error %d"), iPreparedTone, aError ); +#else +void CAudioMessageBeep::MatoPlayComplete(TInt /*aError*/ ) + { +#endif + + iState = EVRToneIdle; + + // Prepare the next tone in queue + if ( iQueuedTone ) + { + TRAP_IGNORE( PrepareToneL( iQueuedTone ) ); + iQueuedTone = 0; + } + }