class CMMFDevSound : public CBase |
This is the interface from Symbian OS to the raw audio functions on the device hardware.
DevSound is currently loaded as a DLL, and implements the VCR-type functions to be expected for such an interface.
Initialisation and configuration of hardware devices, for example, setting microphone gain, setting setero balance and so on.
The playing and recording of raw audio data.
The playing and dynamic control of tones with user specified frequencies.
The playing of DTMF strings.
Protected Member Functions | |
---|---|
CMMFDevSound() | |
void | ConstructL() |
Protected Attributes | |
---|---|
CBody * | iBody |
IMPORT_C | ~CMMFDevSound | ( | ) |
Destructor.
Deletes all objects and releases all resource owned by this instance.
TInt | CancelInitialize | ( | ) | [inline] |
Cancels the initialization process of a CMMFDevSound object
An error code indicating if the function call was successful. KErrNone on success, KerrNotReady if this is called before InitializeL() call or after the object has been initialized,
TInt | CancelRegisterAsClient | ( | TUid | aEventType | ) | [inline] |
Cancels the Registered Notification.
An error code indicating if the function call was successful. KErrNone on success, KErrNotSupported if the event type is not supported otherwise another of the system-wide error codes.
TUid aEventType | The Event type need to cancel |
IMPORT_C TMMFCapabilities | Capabilities | ( | ) |
Returns the supported Audio settings ie. encoding, sample rates, mono/stereo operation, buffer size etc.
The device settings.
IMPORT_C TMMFCapabilities | Config | ( | ) | const |
Returns the current device configuration.
The device settings.
IMPORT_C TAny * | CustomInterface | ( | TUid | aInterfaceId | ) |
Retrieves a custom interface to the device.
A pointer to the interface implementation, or NULL if the device does not implement the interface requested. The return value must be cast to the correct type by the user.The user should be careful while caching the custom interface pointer, as in some situations the lower level custom interface pointer may become NULL.
TUid aInterfaceId | The interface UID, defined with the custom interface. |
TInt | EmptyBuffers | ( | ) | [inline] |
Empties the play buffers below DevSound without causing the codec to be deleted.
An error code indicating if the function call was successful. KErrNone on success, KErrNotSupported if called in a mode other than EMMFStatePlaying or if the function is otherwise not supported, KErrNotReady if this is called before playing, otherwise another of the system-wide error codes. If this function is not supported, it is advised to use Stop().
IMPORT_C TInt | FixedSequenceCount | ( | ) |
Returns the number of available pre-defined tone sequences.
This is the number of fixed sequence supported by DevSound by default.
The fixed sequence count. This value is implementation dependent but is always greater than or equal to zero.
IMPORT_C const TDesC & | FixedSequenceName | ( | TInt | aSequenceNumber | ) |
Returns the name assigned to a specific pre-defined tone sequence.
This is the number of the fixed sequence supported by DevSound by default.
The function raises a panic if sequence number specified is invalid.
A reference to a Descriptor containing the fixed sequence name indexed by aSequenceNumber.
TInt aSequenceNumber | The index identifying the specific pre-defined tone sequence. Index values are relative to zero. This can be any value from zero to the value returned by a call to FixedSequenceCount() - 1. The function raises a panic if sequence number is not within this range. |
IMPORT_C TInt | Gain | ( | ) |
Returns an integer representing the current gain.
The current gain level.
IMPORT_C void | GetPlayBalanceL | ( | TInt & | aLeftPercentage, |
TInt & | aRightPercentage | |||
) |
Returns the speaker balance set for playing.
Leaves on failure.
IMPORT_C void | GetRecordBalanceL | ( | TInt & | aLeftPercentage, |
TInt & | aRightPercentage | |||
) |
Returns the microphone gain balance set for recording.
Leaves on failure.
TInt | GetResourceNotificationData | ( | TUid | aEventType, |
TDes8 & | aNotificationData | |||
) | [inline] |
Returns the Notification data which the client needs to resume playing.
An error code indicating if the function call was successful. KErrNone on success, otherwise another of the system-wide error codes.
TUid aEventType | The Event type for which to get notification data |
TDes8 & aNotificationData | The reference data for which the client needs to resume the play. The actual data depends on the event type. Note that for the event type 'KMMFEventCategoryAudioResourceAvailable' the package buffer returned is TMMFTimeIntervalMicroSecondsPckg,but the contents should be converted to an integer and interpreted as the data returned is samples played ,but not as a microsecond value. |
IMPORT_C void | GetSupportedInputDataTypesL | ( | RArray< TFourCC > & | aSupportedDataTypes, |
const TMMFPrioritySettings & | aPrioritySettings | |||
) | const |
Returns a list of the supported input datatypes that can be sent to DevSound for playing audio. The datatypes returned are those that the DevSound supports given the priority settings passed in aPrioritySettings.
Note that if no supported data types are found this does not constitute failure, the function will return normally with no entries in aSupportedDataTypes.
RArray< TFourCC > & aSupportedDataTypes | The array of supported data types that will be filled in by this function. The supported data types of the DevSound are in the form of an array of TFourCC codes. Any existing entries in the array will be overwritten on calling this function. If no supported data types are found given the priority settings, then the aSupportedDatatypes array will have zero entries. |
const TMMFPrioritySettings & aPrioritySettings | The priority settings used to determine the supported datatypes. Note this does not set the priority settings. For input datatypes the iState member of the priority settings would be expected to be either EMMFStatePlaying or EMMFStatePlayingRecording. The priority settings may effect the supported datatypes depending on the audio routing. |
IMPORT_C void | GetSupportedOutputDataTypesL | ( | RArray< TFourCC > & | aSupportedDataTypes, |
const TMMFPrioritySettings & | aPrioritySettings | |||
) | const |
Returns a list of the supported output dataypes that can be received from DevSound for recording audio. The datatypes returned are those that the DevSound supports given the priority settings passed in aPrioritySettings.
Note that if no supported data types are found this does not constitute failure, the function will return normally with no entries in aSupportedDataTypes.
RArray< TFourCC > & aSupportedDataTypes | The array of supported data types that will be filled in by this function. The supported datatypes of the DevSound are in the form of an array of TFourCC codes. Any existing entries in the array will be overwritten on calling this function. If no supported datatypes are found given the priority settings, then the aSupportedDatatypes array will have zero entries. |
const TMMFPrioritySettings & aPrioritySettings | The priority settings used to determine the supported data types. Note this does not set the priority settings. For output data types the iState member of the priority settings would expected to be either EMMFStateRecording or EMMFStatePlayingRecording. The priority settings may effect the supported datatypes depending on the audio routing. |
TInt | GetTimePlayed | ( | TTimeIntervalMicroSeconds & | aTime | ) | [inline] |
Retrieves the current play time from the audio renderer
An error code indicating if the function call was successful. KErrNone on success, KErrNotSupported if the underlying devsound implementation or the HwDevice does not support this API, otherwise any of the system-wide error codes. If this function is not supported, SamplesPlayed() needs to be used instead.
TTimeIntervalMicroSeconds & aTime | A reference to TTimeIntervalMicroSeconds object which will be filled with the current play time by this function. |
IMPORT_C void | InitializeL | ( | MDevSoundObserver & | aDevSoundObserver, |
TMMFState | aMode | |||
) |
Initializes CMMFDevSound object to play and record PCM16 raw audio data with sampling rate of 8 KHz.
On completion of Initialization, calls InitializeComplete() on aDevSoundObserver.
Leaves on failure.
MDevSoundObserver & aDevSoundObserver | A reference to DevSound Observer instance. |
TMMFState aMode | The mode for which this object will be used. Any value other than EMMFStatePlaying, EMMFStateRecording or EMMFStateTonePlaying is unsupported. |
IMPORT_C void | InitializeL | ( | MDevSoundObserver & | aDevSoundObserver, |
TUid | aHWDev, | |||
TMMFState | aMode | |||
) |
Initializes DevSound object for the mode aMode for processing audio data with hardware device aHWDev.
On completion of Initialization, the observer will be notified via call back InitializeComplete().
Leaves on failure.
MDevSoundObserver & aDevSoundObserver | A reference to DevSound Observer instance. |
TUid aHWDev | The CMMFHwDevice implementation identifier. |
TMMFState aMode | The mode for which this object will be used. Any value other than EMMFStatePlaying, EMMFStateRecording or EMMFStateTonePlaying is unsupported. |
IMPORT_C void | InitializeL | ( | MDevSoundObserver & | aDevSoundObserver, |
TFourCC | aDesiredFourCC, | |||
TMMFState | aMode | |||
) |
Initializes DevSound object for the mode aMode for processing audio data with hardware device supporting FourCC aDesiredFourCC.
On completion of Initialization, the observer will be notified via call back InitializeComplete().
Leaves on failure.
MDevSoundObserver & aDevSoundObserver | A reference to DevSound Observer instance. |
TFourCC aDesiredFourCC | The CMMFHwDevice implementation FourCC code. |
TMMFState aMode | The mode for which this object will be used. Any value other than EMMFStatePlaying, EMMFStateRecording or EMMFStateTonePlaying is unsupported. |
TBool | IsGetTimePlayedSupported | ( | ) | [inline] |
This method can be used by devsound clients to check if the devsound implementation supports GetTimePlayed API. If this method returns EFalse, SamplesPlayed needs to be used.
ETrue if the underlying devsound implementation supports GetTimePlayed API, EFalse if the the underlying devsound implementation does not support GetTimePlayed API
TBool | IsResumeSupported | ( | ) | [inline] |
This method can be used by devsound clients to check if current configuration supports resume This call is only valid when DevSound is initialized ETrue if current format does supports resume EFalse otherwise
IMPORT_C TInt | MaxGain | ( | ) |
Returns an integer representing the maximum gain the device supports.
This is the maximum value which can be passed to CMMFDevSound::SetGain.
The maximum gain. This value is platform dependent but is always greater than or equal to one.
IMPORT_C TInt | MaxVolume | ( | ) |
Returns an integer representing the maximum volume device supports.
This is the maximum value which can be passed to CMMFDevSound::SetVolume.
The maximum volume. This value is platform dependent but is always greater than or equal to one.
IMPORT_C CMMFDevSound * | NewL | ( | ) | [static] |
Constructs, and returns a pointer to, a new CMMFDevSound object.
Leaves on failure.
IMPORT_C void | Pause | ( | ) |
Temporarily Stops the ongoing operation (Play, Record, TonePlay, Convert).
The behaviour of Pause() is currently undefined when the initialisation mode is not EMMFStateRecording, consequently different DevSound implementations exhibit different behaviour for pause during play. For this reason, it is recommended that when pausing of audio during playing is required, Stop() is used instead of the call to Pause(). To resume audio playing after Stop(), call PlayInitL(). Among other things, this will internally reset the SamplesPlayed() result and the calling code may need to remember the previous result to give the correct "samples played from start" value.
In the case of record, Pause is taken to mean halt any further recording but continue to call the MDevSoundObserver::BufferToBeEmptied() passing already recorded buffers. The last buffer flag should be set when all recorded buffers have been flushed.
IMPORT_C void | PlayDTMFStringL | ( | const TDesC & | aDTMFString | ) |
Initializes the audio device and starts playing the DTMF string aDTMFString.
Leaves on failure.
const TDesC & aDTMFString | The DTMF sequence in a descriptor. |
IMPORT_C void | PlayData | ( | ) |
Plays data in the buffer at the current volume.
The client should fill the buffer with audio data before calling this function. The observer gets a reference to the buffer along with the callback function BufferToBeFilled(). When playing of the audio sample is complete, successfully or otherwise, the function PlayError() on the observer is called.
The last buffer of the audio stream being played should have the last buffer flag set using CMMFBuffer::SetLastBuffer(TBool). If a subsequent attempt to play the clip is made, this flag will need resetting by the client.
IMPORT_C void | PlayDualToneL | ( | TInt | aFrequencyOne, |
TInt | aFrequencyTwo, | |||
const TTimeIntervalMicroSeconds & | aDuration | |||
) |
Initializes audio device and starts playing a dual tone.
The generated tone consists of two sine waves of different frequencies summed together.
Dual Tone is played with the specified frequencies and for the specified duration.
TInt aFrequencyOne | The first frequency of dual tone. |
TInt aFrequencyTwo | The second frequency of dual tone |
const TTimeIntervalMicroSeconds & aDuration | The period over which the tone will be played. A zero value causes the no tone to be played (Verify this with test app). |
IMPORT_C void | PlayFixedSequenceL | ( | TInt | aSequenceNumber | ) |
Initializes the audio device and starts playing the specified pre-defined tone sequence.
Leaves on failure.
TInt aSequenceNumber | The index identifying the specific pre-defined tone sequence. Index values are relative to zero. This can be any value from zero to the value returned by a call to FixedSequenceCount() - 1. The function raises a panic if the sequence number is not within this range. |
IMPORT_C void | PlayInitL | ( | ) |
Initializes the audio device and starts the play process.
This function queries and acquires the audio policy before initializing audio device. If there was an error during policy initialization, PlayError() function will be called on the observer with error code KErrAccessDenied, otherwise BufferToBeFilled() function will be called with a buffer reference. After reading data into the buffer reference passed, the client should call PlayData() to play data.
The amount of data that can be played is specified in CMMFBuffer::RequestSize(). Any data that is read into buffer beyond this size will be ignored.
Leaves on failure.
IMPORT_C void | PlayToneL | ( | TInt | aFrequency, |
const TTimeIntervalMicroSeconds & | aDuration | |||
) |
Initializes the audio device and starts playing a tone. The tone is played with the frequency and duration specified.
Leaves on failure.
TInt aFrequency | The frequency at which the tone will be played. |
const TTimeIntervalMicroSeconds & aDuration | The period over which the tone will be played. A zero value causes the no tone to be played. |
IMPORT_C void | PlayToneSequenceL | ( | const TDesC8 & | aData | ) |
Initializes the audio device and starts playing a tone sequence.
Leaves on failure.
const TDesC8 & aData | The tone sequence in a descriptor. |
TBool | QueryIgnoresUnderflow | ( | ) | [inline] |
This method can be used by devsound clients to check if the devsound implementation ignores the underflow errors from the sound driver and does not propagate them to its clients.
ETrue if devsound ignores all the underflow errors from the sound driver except for the last buffer That means DevSound propagates the underflow error from sound driver to its clients only when client sets the last buffer flag on the CMMFBuffer type buffer. EFalse if devsound propagates the underflow errors from the sound driver in all the cases
IMPORT_C void | RecordData | ( | ) |
Contine the process of recording.
Once the buffer is filled with recorded data, the Observer gets a reference to the buffer along with the callback function BufferToBeEmptied(). After processing the buffer (copying over to a different buffer or writing to file) the client should call this function to continue the recording process.
capability
UserEnvironment For recording - the requesting client process must have the UserEnvironment capability.
IMPORT_C void | RecordInitL | ( | ) |
Initializes audio device and starts the recording process.
This function queries and acquires the audio policy before initializing audio device. If there was an error during policy initialization, RecordError() function will be called on the observer with error code KErrAccessDenied, otherwise BufferToBeEmptied() function will be called with a buffer reference. This buffer contains recorded or encoded data. After processing data in the buffer reference passed, the client should call RecordData() to continue recording process.
The amount of data that is available is specified in CMMFBuffer::RequestSize().
Leaves on failure.
MDevSoundObserver::RecordError()
MDevSoundObserver::BufferToBeEmptied()
capability
UserEnvironment For recording - the requesting client process must have the UserEnvironment capability.
TInt | RegisterAsClient | ( | TUid | aEventType, |
const TDesC8 & | aNotificationRegistrationData = KNullDesC8 | |||
) | [inline] |
Registers the client for notification of resource avalibility.
An error code indicating if the function call was successful. KErrNone on success, KErrNotSupported if the event type is not supported, KErrArgument if the notification data is not null otherwise another of the system-wide error codes.
TUid aEventType | The Notification event type for which the client needs notification. |
const TDesC8 & aNotificationRegistrationData = KNullDesC8 | The Notification Registration data has been reserved for future use and its value should be always NULL |
TInt | Resume | ( | ) | [inline] |
Resume play back, recording or tone playing after this has been paused An error code indicating if the function call was successful. KErrNone on success, KErrNotSupported if current format configuration does not support this functionality KErrNotReady if DevSound is not paused
IMPORT_C TInt | SamplesPlayed | ( | ) |
Returns the number of samples played so far.
The samples played.
IMPORT_C TInt | SamplesRecorded | ( | ) |
Returns the number samples recorded so far.
The samples recorded.
TInt | SetClientThreadInfo | ( | TThreadId | aTid | ) | [inline] |
Sets client thread info for devsound to make proper policy and routing decisions
capability
MultimediaDD A process requires MultimediaDD capability to make this call.
TThreadId aTid | The thread Id of real client. |
IMPORT_C void | SetConfigL | ( | const TMMFCapabilities & | aCaps | ) |
Configure CMMFDevSound object with the settings in aConfig.
Use this to set sampling rate, encoding and mono/stereo.
const TMMFCapabilities & aCaps | The attribute values to which CMMFDevSound object will be configured to. |
IMPORT_C void | SetDTMFLengths | ( | TTimeIntervalMicroSeconds32 & | aToneOnLength, |
TTimeIntervalMicroSeconds32 & | aToneOffLength, | |||
TTimeIntervalMicroSeconds32 & | aPauseLength | |||
) |
Defines the duration of tone on, tone off and tone pause to be used during the DTMF tone playback operation.
Supported only during tone playing.
TTimeIntervalMicroSeconds32 & aToneOnLength | The period over which the tone will be played. If this is set to zero, then the tone is not played. |
TTimeIntervalMicroSeconds32 & aToneOffLength | The period over which the no tone will be played. |
TTimeIntervalMicroSeconds32 & aPauseLength | The period over which the tone playing will be paused. |
IMPORT_C void | SetGain | ( | TInt | aGain | ) |
Changes the current recording gain to a specified value.
The gain can be changed before or during recording and is effective immediately.
TInt aGain | The gain setting. This can be any value from zero to the value returned by a call to CMMFDevSound::MaxGain(). If the volume is not within this range, the gain is automatically set to minimum or maximum value based on the value that is being passed. Setting a zero value mutes the sound. Setting the maximum value results in the loudest possible sound. |
IMPORT_C void | SetPlayBalanceL | ( | TInt | aLeftPercentage, |
TInt | aRightPercentage | |||
) |
Sets the speaker balance for playing.
The speaker balance can be changed before or during playback and is effective immediately.
TInt aLeftPercentage | On return contains left speaker volume perecentage. This can be any value from zero to 100. Setting a zero value mutes the sound on left speaker. |
TInt aRightPercentage | On return contains right speaker volume perecentage. This can be any value from zero to 100. Setting a zero value mutes the sound on right speaker. |
IMPORT_C void | SetPrioritySettings | ( | const TMMFPrioritySettings & | aPrioritySettings | ) |
Defines the priority settings that should be used for this instance.
const TMMFPrioritySettings & aPrioritySettings | A class type representing the client's priority, priority preference and state. |
IMPORT_C void | SetRecordBalanceL | ( | TInt | aLeftPercentage, |
TInt | aRightPercentage | |||
) |
Sets the microphone gain balance for recording.
The microphone gain balance can be changed before or during recording and is effective immediately.
TInt aLeftPercentage | The left microphone gain precentage. This can be any value from zero to 100. Setting a zero value mutes the gain on left microphone. |
TInt aRightPercentage | The right microphone gain precentage. This can be any value from zero to 100. Setting a zero value mutes the gain on right microphone. |
IMPORT_C void | SetToneRepeats | ( | TInt | aRepeatCount, |
const TTimeIntervalMicroSeconds & | aRepeatTrailingSilence | |||
) |
Defines the number of times the audio is to be repeated during the tone playback operation.
A period of silence can follow each playing of a tone. The tone playing can be repeated indefinitely.
TInt aRepeatCount | The number of times the tone, together with the trailing silence, is to be repeated. If this is set to KMdaRepeatForever, then the tone, together with the trailing silence, is repeated indefinitely or until Stop() is called. If this is set to zero, then the tone is not repeated. |
const TTimeIntervalMicroSeconds & aRepeatTrailingSilence | An interval of silence which will be played after each tone. Supported only during tone playing. |
IMPORT_C void | SetVolume | ( | TInt | aVolume | ) |
Changes the current playback volume to a specified value.
The volume can be changed before or during playback and is effective immediately.
TInt aVolume | The volume setting. This can be any value from 0 to the value returned by a call to CMMFDevSound::MaxVolume(). If the volume is not within this range, the volume is automatically set to minimum or maximum value based on the value that is being passed. Setting a zero value mutes the sound. Setting the maximum value results in the loudest possible sound. |
IMPORT_C void | SetVolumeRamp | ( | const TTimeIntervalMicroSeconds & | aRampDuration | ) |
Defines the period over which the volume level is to rise smoothly from nothing to the normal volume level.
The function is only available while the tone is playing.
const TTimeIntervalMicroSeconds & aRampDuration | The period over which the volume is to rise. A zero value causes the tone sample to be played at the normal level for the full duration of the playback. A value, which is longer than the duration of the tone sample means that the sample never reaches its normal volume level. |
IMPORT_C void | Stop | ( | ) |
Stops the ongoing operation (Play, Record, TonePlay, Convert).
This function should be synchronous and invoke no callbacks through MDevSoundObserver.
IMPORT_C TInt | Volume | ( | ) |
Returns an integer representing the current volume.
The current volume level.
TInt | WillResumePlay | ( | ) | [inline] |
Wait for the clients to resume play back even after the default timeout expires. Unless the client cancels the notification request or completes no other client gets notification.
An error code indicating if the function call was successful. KErrNone on success, KErrPermissionDenied if the client does not have MultimediaDD capaility, otherwise another of the system-wide error codes.