全部博文(413)
分类:
2008-06-12 09:33:23
This code snippet shows how CAknKeySoundSystem is used to customize the key sounds of an application. The example code customizes arrow key sounds by defining its own AVKON_SKEY_LIST and AVKON_SKEY_INFO structures and uses these when array keys are pressed.
This snippet can be self-signed.
The following libraries are required:
LIBRARY avkon.lib
LIBRARY eikcore.lib
LIBRARY eiksrv.lib
#ifndef __TESTER_HRH__
#define __TESTER_HRH__
//...
//arrow sound ids
enum TArrowSoundId
{
EUpSoundId = 1,
EDownSoundId,
ELeftSoundId,
ERightSoundId
};
#endif // __TESTER_HRH__
#include
#include
#include
#define KUpArrowSoundFile "c:\\data\\up.wav"
#define KDownArrowSoundFile "c:\\data\\down.wav"
#define KLeftArrowSoundFile "c:\\data\\left.wav"
#define KRightArrowSoundFile "c:\\data\\right.wav"
RESOURCE AVKON_SOUND_INFO_LIST r_arrow_sound_list
{
list =
{
// up arrow
AVKON_SOUND_INFO
{
sid = EUpSoundId;
priority = EAvkonKeyClickPriority;
preference = EAknAudioPrefDefaultTone;
file = KUpArrowSoundFile;
volume = 5;
},
// down arrow
AVKON_SOUND_INFO
{
sid = EDownSoundId;
priority = EAvkonKeyClickPriority;
preference = EAknAudioPrefDefaultTone;
file = KDownArrowSoundFile;
volume = 5;
},
// left arrow
AVKON_SOUND_INFO
{
sid = ELeftSoundId;
priority = EAvkonKeyClickPriority;
preference = EAknAudioPrefDefaultTone;
file = KLeftArrowSoundFile;
volume = 5;
},
// right arrow
AVKON_SOUND_INFO
{
sid = ERightSoundId;
priority = EAvkonKeyClickPriority;
preference = EAknAudioPrefDefaultTone;
file = KRightArrowSoundFile;
volume = 5;
}
};
}
RESOURCE AVKON_SKEY_LIST r_arrow_skey_list
{
list=
{
AVKON_SKEY_INFO
{
key = EStdKeyUpArrow;
sid = EUpSoundId;
},
AVKON_SKEY_INFO
{
key = EStdKeyDownArrow;
sid = EDownSoundId;
},
AVKON_SKEY_INFO
{
key = EStdKeyLeftArrow;
sid = ELeftSoundId;
},
AVKON_SKEY_INFO
{
key = EStdKeyRightArrow;
sid = ERightSoundId;
}
};
}
#ifndef __TESTERAPPVIEW_H__
#define __TESTERAPPVIEW_H__
// INCLUDES
#include
class CAknKeySoundSystem;
class CTesterAppView : public CCoeControl
{
//...
private:
CAknKeySoundSystem* iSoundSystem;
TBool iCustomizedKeySounds;
};
#endif // __TESTERAPPVIEW_H__
#include//r_arrow_sound_list,r_arrow_skey_list
#include "Tester.hrh" //TArrowSoundId
#include// CAknKeySoundSystem
#include
void CTesterAppView::ConstructL(const TRect& aRect)
{
//...
iCustomizedKeySounds = EFalse;
iSoundSystem = static_cast(
CEikonEnv::Static()->AppUi() )->KeySounds();
if (!iSoundSystem)
{
//pointer to KeySound API object is null
User::Leave(KErrGeneral);
}
//install the application-specific set of sound ids
TRAPD( error, iSoundSystem->AddAppSoundInfoListL(
R_ARROW_SOUND_LIST ) );
if ((error != KErrNone) && (error != KErrAlreadyExists))
{
//install sound ids failed
User::Leave( error );
}
//NOTE: it is now also possible to play an installed sound
//just by calling the PlaySound() method e.g.
//iSoundSystem->PlaySound( EUpSoundId );
//...and stop playing it by calling
//iSoundSystem->StopSound( EUpSoundId );
}
CTesterAppView::~CTesterAppView()
{
iSoundSystem = NULL;
}
// ---------------------------------------------------------------------------
// Disable customized key sounds
// ---------------------------------------------------------------------------
//
void CTesterAppView::DisableCustomizedKeySounds()
{
if ( iSoundSystem && iCustomizedKeySounds )
{
//release the locked context
iSoundSystem->ReleaseContext();
//pop the pushed context from the context stack
iSoundSystem->PopContext();
iCustomizedKeySounds = EFalse;
}
}
// ---------------------------------------------------------------------------
// Enable customized key sounds
// ---------------------------------------------------------------------------
//
void CTesterAppView::EnableCustomizedKeySounds()
{
if ( iSoundSystem && !iCustomizedKeySounds )
{
//load key sound map from resources and push it to the context stack
iSoundSystem->PushContextL( R_ARROW_SKEY_LIST );
//tell server to use this context stack for processing sounds
iSoundSystem->BringToForeground();
//lock this context to the foreground, other BringToForeground() calls
//will be ignored until ReleaseContext() is called
iSoundSystem->LockContext();
iCustomizedKeySounds = ETrue;
}
}
If the EnableCustomizedKeySounds() method is called, the customized key sounds are played when the user presses the arrow keys. The default key sounds are played again after the DisableCustomizedKeySounds() method call.