|
API Guide Home (Online version only) |
![]() |
00001 /******************************************************************************* 00002 * Copyright (c) 2004-2005 palmOne, Inc. or its subsidiaries. 00003 * All rights reserved. 00004 ******************************************************************************/ 00005 /** 00006 * @ingroup Sound 00007 * 00008 */ 00009 00010 /** 00011 * 00012 * @file PmSoundLibAudioGroup.h 00013 * @brief Public 68K header file used to associate sound channels with Audio 00014 * groups on Treo 600 and Treo 650 smartphones. 00015 * 00016 * We define the concept of Audio Groups to classify sounds depending 00017 * on the relative importance to the user: 00018 * 00019 * pmAudioGroupApp Audio normally generated by user applications 00020 * such as games, MP3 players, and others. This is the default 00021 * classification even if no audio group is assigned. 00022 * 00023 * pmAudioGroupSystem Typical audio events generated by the system to 00024 * give audible feedback to the user about system events. 00025 * Most of the sounds produced through SndPlaySystemSound are 00026 * classified internally as System. 00027 * 00028 * pmAudioGroupAlert Alerts, Alarms, and Ringtones should be given this classification. 00029 * If you depend on the Attention Manager to make a sound, it will also 00030 * use this classification. The constant sndAlarm when calling 00031 * SndPlaySystemSound is classified as an Alert. 00032 * 00033 * pmAudioGroupHighPriority 00034 * Sounds of great importance to the 00035 * user and that are routed with the highest priority. 00036 * We currently define hsSndBatLow and hsSndBatShutdown constants, 00037 * when calling SndPlaySystemSound, as high priority sounds. 00038 * 00039 * If you depend on PalmOS Attention Manager for audio alerts, or use PalmOS 00040 * SndPlaySystemSound, then the audio group is automatically assigned, and there 00041 * is nothing else you need to do. 00042 * 00043 * However, if you directly play audio events using other PalmOS APIs such 00044 * as SndPlayResource, or SndStreamCreate, for example, then you may want 00045 * to assign the audio group, unless the default pmAudioGroupApp is 00046 * sufficient for your purposes. 00047 * 00048 * To assign an audio group we attach that additional information 00049 * to the PalmOS volume parameter associated with many of the Sound Manager 00050 * API calls. We have found this is the most effective way to associate 00051 * the audio group to a sound channel, and have that information filter down, 00052 * through PalmOS, to our Audio Driver in the Hardware Abstraction Layer (HAL). 00053 * In this way, there is no need to modify PalmOS, and we can allow a variety 00054 * of components and applications to take advantage of the behavior and custom 00055 * routing we assign to the different audio group classifications. 00056 * 00057 * The drawback is that when the audio group is attached to the volume parameter, 00058 * then the volume is limited to a maximum of 8K - 1, in steps of 8 (which 00059 * represents 128 levels to unity). In contrast PalmOS 5.x volume parameter 00060 * is defined with a maximum of 32K - 1, in steps of 1 (which represents 00061 * 1024 levels to unity). Our constrain is generally acceptable, since it 00062 * represents granularity of about 1 dB step changes, with up to 8X amplification 00063 * We currently use less precise granularity of > 10 db step changes, and a 00064 * maximum of 6X amplification for the case of QCELP/AMR playback. 00065 * 00066 * There is a risk that an existing application using the PalmOS API may 00067 * apply a volume parameter that could be mistaken for a volume plus audio 00068 * group designation, but this risk is fairly minimal as explained next. 00069 * 00070 * The Audio Group uses a mark in the upper 3-bits of the volume parameter. 00071 * If this mark is binary '011' which means a positive number >= 24K, then 00072 * we will interpret the lower three bits as the audio group. The risk of 00073 * mistaken interpretation from existing PalmOS applications will happen 00074 * when the application request amplifications of 24X to 32X. In our 00075 * experience we have Not seen any application going beyond the range of 00076 * 2X to 8X amplification. In case such extremely rare condition do 00077 * occurs, the effect would be that the range 24X to 32X will be treated 00078 * as the lower range of 0X to 8X, and there is a chance the sound will 00079 * be routed/treated as other than application audio. 00080 * 00081 * One more thing to note is that PalmOS allows negative numbers in the 00082 * volume parameter to mean one of the usual volume parameters the 00083 * user may adjust through the preferences panel: system volume, game 00084 * volume, and alarm volume. In our current implementation we do NOT 00085 * change these values, and we do NOT assign any audio group designation 00086 * to these preferences driven volume settings. In other words, they 00087 * will be treated as application audio group. 00088 * 00089 * The use of Audio Group in a device will be present when the feature 00090 * is registered with the PalmOS Feature Manager. This feature will 00091 * be available when: 00092 * 00093 * FtrGet( pmSoundLibCreatorID, pmSoundLibAudioGroupFtr, &value ); 00094 * 00095 * return no error, and the UInt32 value is NOT: 00096 * 00097 * pmSoundLibAudioGroupFtr_Off 00098 * 00099 * It is important to always check for this feature, since this is 00100 * a custom enhancement which could be turned off for some future 00101 * device, or platform. 00102 * 00103 * To assign an audio group to your volume parameter you will invoke 00104 * the function PmSndAddAudioGroupToVolume (currently implemented as 00105 * a macro for simplicity). Here is an example on how to use this: 00106 * 00107 * @code 00108 * 00109 * // Includes 00110 * #include <FeatureMgr.h> 00111 * #include <Common/Libraries/HsSoundLib/PmSoundLibAudioGroup.h> 00112 * 00113 * // Declarations 00114 * UInt32 value = 0; // temporary variable for FtrGet 00115 * Int32 volume = 1024; // default max amplitude in PalmOS 5.x, can also use sndMaxAmp with earlier PalmOS 00116 * 00117 * // Code Snippet 00118 * if ( ( !FtrGet( pmSoundLibCreatorID, pmSoundLibAudioGroupFtr, &value ) ) // is the Audio Group feature supported? 00119 * && ( value != pmSoundLibAudioGroupFtr_Off ) ) // is the Audio Group feature active? 00120 * { 00121 * volume = PmSndAddAudioGroupToVolume( volume, pmAudioGroupAlert ); // then, mark this sound as an alert 00122 * } 00123 * SndPlayResource( mySound, volume, sndFlagNormal ); 00124 * 00125 * @endcode 00126 * <hr> 00127 */ 00128 00129 00130 #ifndef PMSOUNDLIBAUDIOGROUP_H_ 00131 #define PMSOUNDLIBAUDIOGROUP_H_ 00132 00133 /*********************************************************************** 00134 * Palm OS common definitions 00135 ***********************************************************************/ 00136 #include <HsSoundLibCommon.h> /**<Included for hsSoundLibCreatorID. */ 00137 00138 /** 00139 * @name PmSoundLibAudioGroup information 00140 * 00141 */ 00142 /*@{*/ 00143 #define pmSoundLibCreatorID hsSoundLibCreatorID /**<Pass this as the creator ID used in FtrGet. */ 00144 #define pmSoundLibAudioGroupFtr 0x0001 /**<Use this as the featureNum passed to FtrGet. */ 00145 #define pmSoundLibAudioGroupFtr_Off 0 /**<Value returned in *valueP of FtrGet when Audio Group is disabled. */ 00146 #define pmSoundLibAudioGroupFtr_On 1 /**<Value returned in *valueP of FtrGet when Audio Group is enabled */ 00147 /*@}*/ 00148 00149 #define PM_AUDIOGROUP_MASK 0xE007 /**<No definition. */ 00150 00151 /** 00152 * Holds audio group information. 00153 */ 00154 typedef enum PmAudioGroupEnum 00155 { 00156 pmAudioGroupNone = 0x0000, /**<Default audio group when volume is less than 24K. */ 00157 pmAudioGroupApp = 0x6000, /**<Application audio, treated as pmAudioGroupNone, but group type saved. */ 00158 pmAudioGroupSystem = 0x6001, /**<System audio (as in SndPlaySystemSound). */ 00159 pmAudioGroupAlert = 0x6002, /**<Alert, alarms, ringtones that notify user of an event. */ 00160 pmAudioGroupHighPriority = 0x6003, /**<Extremely important event such as low battery shutdown. */ 00161 00162 pmAudioGroupInteractive = 0x6004, /**<Application audio to be used for interactive playback (eg: games). */ 00163 pmAudioGroupStreaming = 0x6005, /**<Application audio to be used for streaming (eg: MP3, video, broadcast). */ 00164 pmAudioGroupCall = 0x6006, /**<Intended for digital phone call audio only. Used for internal purposes. */ 00165 pmAudioGroupAlertRingOff = 0x6007 /**<Same as pmAudioGroupAlert, but ignores Ringer switch position */ 00166 00167 } PmAudioGroupEnum; 00168 00169 /** @see PmAudioGroupEnum */ 00170 typedef UInt16 PmAudioGroup; 00171 00172 00173 /** 00174 * @name Audio Group API functions 00175 * 00176 * Implemented as macros. 00177 */ 00178 /*@{*/ 00179 #define PmSndAddAudioGroupToVolume(volume,audioGroup) (Int32) (((!audioGroup) || (((Int32)(volume)) <= -1))? (volume) : ((((((volume) & 0xE000) == 0x6000)? (volume):(volume)+7) & ~PM_AUDIOGROUP_MASK) | (audioGroup)))/**<Attaches an audio group designation to a PalmOS volume parameter. 00180 00181 Use this macro if you want your sound channel to be designated differently 00182 than application sound. 00183 00184 If this macro were implemented as a function, the prototype would be: 00185 00186 Int32 //returned volume // PmSndAddAudioGroupToVolume ( Int32 volume, PmAudioGroup audioGroup ); 00187 */ 00188 #define PmSndRemoveAudioGroupFromVolume(volume) (Int32) ((((Int32)(volume)) < 0x6000)? (volume) : ((volume) & ~PM_AUDIOGROUP_MASK )) 00189 /**<Removes the audio group designation from a PalmOS volume parameter. 00190 00191 Use this if you previously attached a sound group designation and 00192 retrieve that volume again using PalmOS APIs. Or if you need to 00193 manipulate the overloaded volume parameter, as a volume only value. 00194 00195 If this macro were implemented as a function, the prototype would be: 00196 00197 Int32 //returned volume // PmSndRemoveAudioGroupFromVolume ( Int32 volume ); 00198 */ 00199 00200 #define PmSndGetAudioGroupFromVolume(volume) (PmAudioGroup)((((Int32)(volume)) < 0x6000)? (pmAudioGroupNone) : ((volume) & PM_AUDIOGROUP_MASK)) 00201 /**<Removes the volume component of a PalmOS volume parameter, leaving 00202 a pure audio group component. 00203 00204 Use this if you have already attached the audio group to a volume 00205 parameter and need to identify the audio group designation. 00206 00207 If this macro were implemented as a function, the prototype would be: 00208 00209 PmAudioGroup PmSndGetAudioGroupFromVolume ( Int32 volume ); 00210 */ 00211 /*@}*/ 00212 00213 #endif /* #ifndef PMSOUNDLIBAUDIOGROUP_H_ */
| Top | Palm Developer Network © 2004-2008, Palm, Inc. All rights reserved. Generated on Fri Jun 13 10:06:55 2008 for Palm API Guide |