多媒体应用开发
要内容 多媒体框架 (MMF) 客户端 API 音频程序开发视频程序开发摄像头使用
媒体框架 (MMF) 客户端 API
放音调 播放音调 (1) 指定周期和频率的简单声音 (2)DTMF( 双音多频 ) 电话信号声音 (3) 存储在文件或描述中的声音序列 (4) 在手机中的预定义的声音序列
放音调 框架
放音调 播放音调工具类 CMdaAudioToneUtility 侦听器接口类 class MMdaAudioToneObserver { public: virtual void MatoPrepareComplete(TInt aerror) = 0; virtual void MatoPlayComplete(TInt aerror) = 0; };
放音调 播放音调步骤 (1) 创建音调声音播放工具类实例 static CMdaAudioToneUtility* NewL(MMdaAudioToneObserver& aobserver, CMdaServer* aserver= NULL); static CMdaAudioToneUtility* NewL(MMdaAudioToneObserver& aobserver, CMdaServer* aserver,tint apriority, TMdaPriorityPreference apref= EMdaPriorityPreferenceTimeAndQuality);
放音调 播放音调步骤 (2) 准备音调声音数据 void PrepareToPlayTone(TIntaFrequency, const TTimeIntervalMicroSeconds& aduration); void PrepareToPlayDTMFString(const TDesC& adtmf);
频程序开发 播放音调步骤 (3) 配置播放工具类 // 设置和获取音频平衡 void SetBalanceL(TInt abalance=kmmfbalancecenter); TInt GetBalanceL(); // 设置和获取音频设备的音量 virtual TInt Volume(); virtual void SetVolume(TInt avolume); virtual TInt MaxVolume(); virtual void SetVolumeRamp(const TTimeIntervalMicroSeconds& arampduration); virtual void SetPriority(TInt apriority, TMdaPriorityPreference apref); virtual void SetDTMFLengths(TTimeIntervalMicroSeconds32 atonelength,ttimeintervalmicroseconds32 atoneofflength, TTimeIntervalMicroSeconds3 apauselength);
放音频剪辑 播放音频剪辑工具类 CMdaAudioPlayerUtility 侦听器接口类 MMdaAudioPlayerCallback { ublic: virtual void MapcInitComplete(TInt aerror, const TTimeIntervalMicroSeconds& aduration) = 0; virtual void MapcPlayComplete(TInt aerror) = 0; };
放音频剪辑 播放音频剪辑基本步骤 (1) 创建音频播放工具类的实例 } static CMdaAudioPlayerUtility* NewL(MMdaAudioPlayerCallback& acallback,tint apriority= aprioritynormal,tmdaprioritypreference apref = EMdaPriorityPreferenceTimeAndQuality); } static CMdaAudioPlayerUtility* NewFilePlayerL(const TDesC& afilename,mmdaaudioplayercallback& acallback,tint apriority= EMdaPriorityNormal,TMdaPriorityPreferenceaPref= EMdaPriorityPreferenceTimeAndQuality,CMdaServer* aserver = NULL);
放音频剪辑 播放音频剪辑基本步骤 (2) 打开音频文件 void OpenFileL(const TDesC& afilename); void OpenFileL(const RFile& afile); 在调用 OpenFileL() 方法打开音频文件成功后, 音频文件播放工具类会回调 MMdaAudioPlayerCallback::MapcInitComplete() 方法, 通知调用者文件打开功, 工具类实例初始化完成
放音频剪辑 播放音频剪辑基本步骤 (3) 配置音频文件播放工具类实例 void SetVolume(TInt avolume); void SetVolumeRamp(const TTimeIntervalMicroSeconds& arampduration); virtual TInt MaxVolume(); TInt GetVolume(TInt& avolume); TInt SetBalance(TInt abalance= KMMFBalanceCenter); TInt GetBalance(TInt& abalance);
放音频剪辑 播放音频剪辑基本步骤 (4) 音频文件元数据 TInt GetNumberOfMetaDataEntries(TInt& anumentries); CMMFMetaDataEntry* GetMetaDataEntryL(TInt ametadataindex);
放音频剪辑 播放音频剪辑基本步骤 (5) 播放音频文件 } Play() 开始从已经打开的音频数据的当前位置播放声音 } SetRepeats() 可以调用该方法设置播放已打开音频文件的循环次数 } Duration() 取得以微秒表示的打开的音频文件的音频数据的长度 } SetPlayWindow() 和 ClearPlayWindow() 用于操作音频文件的一个剪辑, 录剪辑的开始位置和结束位置, 播放音频数据时, 将在这个设置的剪辑窗内进行 } GetPosition() 和 SetPosition() 用于检索或设置剪辑的当前的播放位置 } Pause() 暂停播放 } Stop() 停止播放 } Close() 关闭所有相关的控制器及打开的文件
制音频剪辑 录制音频剪辑工具类 CMdaAudioRecorderUtility 侦听器接口 class MMdaObjectStateChangeObserver { public: virtual void MoscoStateChangeEvent(CBase* aobject, }; TInt apreviousstate, TInt CurrentState, TInt aerrorcode)=0;
制音频剪辑 录制音频剪辑基本步骤 (1) 首先创建录音工具类的实例 static CMdaAudioRecorderUtility* NewL( MMdaObjectStateChangeObserver& aobserver, CMdaServer* aserver = NUL TInt apriority= EMdaPriorityNormal, TMdaPriorityPreference apref= EMdaPriorityPreferenceTimeAndQuality); (2) 打开保存录音的文件 void OpenFileL(const TDesC& afilename); void OpenDesL(const TDesC8& adescriptor);
制音频剪辑 录制音频剪辑基本步骤 (3) 配置录音工具类 } SetAudioDeviceMode() enumtdevicemode { EDefault = 0, ETelephonyMixed = 1, ETelephonyNonMixed = 2, ELocal = 3 }; } GetVolume() SetVolume() MaxVolume() } GetGain() SetGain() MaxGain() GetSupportedBitRatesL() DestinationBitRateL() SetDestinationBitRateL() GetSupportedSampleRates DestinationSampleRateL() SetDestinationSampleRateL()
制音频剪辑 录制音频剪辑基本步骤 (4) 元数据控制 // 获取到元数据的个数 TInt GetNumberOfMetaDataEntries(TInt& anumentries); // 取得指定的元数据 CMMFMetaDataEntry* GetMetaDataEntryL(TInt ametadataindex); // 添加一个新的元数据 void AddMetaDataEntryL(CMMFMetaDataEntry& ametadataentry); // 替换一个已有的元数据 TInt RemoveMetaDataEntry(TInt ametadataindex); // 删除指定的元数据 void ReplaceMetaDataEntryL(TInt ametadataindex, CMMFMetaDataEntry& ametadataentry);
制音频剪辑 录制音频剪辑基本步骤 (5) 开始录音 RecordL() Stop() Close() Position() SetPosition() CropL() CropFromBeginningL()
频流处理
式放音 流式放音工具类 CMdaAudioOutputStream 侦听器接口类 class MMdaAudioOutputStreamCallback { public: virtual void MaoscOpenComplete(TInt aerror) = 0; virtual void MaoscBufferCopied(TInt aerror, const TDesC8& abuffer) = 0; }; virtual void MaoscPlayComplete(TInt aerror) = 0;
式放音 流式放音基本步骤 (1) 创建音频流对象 static CMdaAudioOutputStream* NewL( MMdaAudioOutputStreamCallback& acallback, NULL); CMdaServer* aserver= static CMdaAudioOutputStream* NewL( MMdaAudioOutputStreamCallback& acallback, TInt apriority, TMdaPriorityPreference apref= EMdaPriorityPreferenceTimeAndQuality);
式放音 流式放音基本步骤 (2) 打开音频流 void Open(TMdaPackage* asettings); class TMdaAudioDataSettings : public TMdaDatatypeSettings { public: TInt icaps; // 指定了音频采样的能力 TInt imaxvolume; // 音频设备的最大音量 TInt isamplerate; // 采样速率 TInt ichannels; // 音频采样的通道数 TInt ivolume; // 当前音量值 TInt iflags;// 标志, 枚举型 TAudioFlags 值 };
式放音 流式放音基本步骤 (3) 设置音频流的属性 void SetAudioPropertiesL(TInt asamplerate, TInt achannels); TInt Volume(); void SetVolume(const TInt anewvolume); void SetBalanceL(TInt abalance = KMMFBalanceCenter); TInt GetBalanceL() const;
式放音 流式放音基本步骤 (4) 发送音频数据到 MMF 底层音频引擎 void CAudioStreamPlayer::MaoscBufferCopied(TInt aerror, const TDesC8& /*abuffer*/) { } if (aerror == KErrNone) { } TRAPD(err, iplayerstream->writel(*istreambuffer)) iplayerstream->setvolume(iplayerstream->maxvolume()/2);
式放音 流式放音基本步骤 (5) 停止播放 Stop() ;
式录音 流式录音工具类 CMdaAudioInputStream 侦听器接口类 class MMdaAudioInputStreamCallback { public: virtual void MaiscOpenComplete(TInt aerror) = 0; virtual void MaiscBufferCopied(TInt aerror, const TDesC8& abuffer) = 0; virtual void MaiscRecordComplete(TInt aerror) = 0; };
频回放 视频回放工具类 CVideoPlayerUtility 侦听器接口类 class MVideoPlayerUtilityObserver { public: virtual void MvpuoOpenComplete(TInt aerror) = 0; virtual void MvpuoPrepareComplete(TInt aerror) = 0; virtual void MvpuoFrameReady(CFbsBitmap& aframe,tint aerror) = 0; virtual void MvpuoPlayComplete(TInt aerror) = 0; virtual void MvpuoEvent(const TMMFEvent& aevent) = 0; };
频录制 视频录制工具类 CVideoRecorderUtility 侦听器接口类 class MVideoRecorderUtilityObserver { public: virtual void MvruoOpenComplete(TInt aerror) = 0; virtual void MvruoPrepareComplete(TInt aerror) = 0; virtual void MvruoRecordComplete(TInt aerror) = 0; virtual void MvruoEvent(const TMMFEvent& aevent) = 0; };
像头使用 摄像头工具类 CCamera 侦听器接口类 class MCameraObserver { public: virtual void ReserveComplete(TInt aerror)=0; virtual void PowerOnComplete(TInt aerror)=0; virtual void ViewFinderFrameReady(CFbsBitmap& aframe)=0; virtual void ImageReady(CFbsBitmap* abitmap,hbufc8* adata,tint aerror)= virtual void FrameBufferReady(MFrameBuffer* aframebuffer,tint aerror)=0; };
例演示 播放声音文件