Symbian多媒体架构分析

Similar documents
威 福 髮 藝 店 桃 園 市 蘆 竹 區 中 山 里 福 祿 一 街 48 號 地 下 一 樓 50,000 獨 資 李 依 純 105/04/06 府 經 登 字 第 號 宏 品 餐 飲 桃 園 市 桃 園 區 信 光 里 民

【主持人】:给大家介绍一下,这次的培训是我们画刊部的第三次培训,当然今天特别有幸请来著吊的摄影家李少白老师给我们讲课


1.5招募说明书(草案)

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

(Microsoft Word - \256g\275b\252\354\305\351\305\347.doc)


1.5招募说明书(草案)

重点产品技术性贸易措施研究报告-音视频产品

ebook 86-15

内 容 简 介 本 书 是 一 本 关 于 语 言 程 序 设 计 的 教 材, 涵 盖 了 语 言 的 基 本 语 法 和 编 程 技 术, 其 中 包 含 了 作 者 对 语 言 多 年 开 发 经 验 的 总 结, 目 的 是 让 初 学 的 读 者 感 受 到 语 言 的 魅 力, 并 掌

手册 doc

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

技 术 文 件


Symbian培训免费讲座

第 二 章 假 山 后 的 情 侣 这 么 不 明 不 白 地 过 了 几 天, 我 的 心 里 无 时 无 刻 不 在 盘 算 着 弄 清 楚 一 些 事 情 等 我 可 以 流 利 表 达 的 时 候, 一 定 要 找 那 丫 头 打 听 下 情 况 我 肯 定 是 在 受 伤 期 间 失 忆

目录 一 功能介绍 功能列表 使用限制...3 二 Android studio 如何导入 SDK SDK 文件结构 导入必要文件 工程配置...6 三 调用 SDK 初始化 如何开始预览...1

使 用 Java 语 言 模 拟 保 险 箱 容 量 门 板 厚 度 箱 体 厚 度 属 性 锁 具 类 型 开 保 险 箱 关 保 险 箱 动 作 存 取 款

新・解きながら学ぶJava

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

第六章 中国中等收入者调查的三个发现

建模与图形思考

untitled

Android Service

无类继承.key

free hi-q recorder full version

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

Microsoft Word cppFinalSolution.doc

提问袁小兵:

Chapter12 Derived Classes

untitled

1.5招募说明书(草案)

Microsoft Word - 666_changce_2005_association.doc

《大话设计模式》第一章

<4D F736F F D D313032ABFCA6D2A4BDA5C1BB50AAC0B77CB8D5C34428A977BD5A29>

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

用户大会 论文集2.2.doc

全国计算机技术与软件专业技术资格(水平)考试

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

untitled

BlackBerry 视频录制编程概述 BlackBerry 5.0 平台以及之前的版本对多媒体的支持依赖于 JSR 135, 也就是标准 J2ME 平台的 MMAPI BlackBerry 手机上录制视频也依靠 MMAPI, 支持 3gpp 视频格式, 支持的视频编码包括 MPEG-4, H263

Ç ö Ç ö ö ö Ç ö Ç ö Public

res/layout 目录下的 main.xml 源码 : <?xml version="1.0" encoding="utf 8"?> <TabHost android:layout_height="fill_parent" xml

chp6.ppt

iPhone App Programming_2014_lecture14.key

Microsoft Word - 小心翼翼的二十一點N.doc

《二十一世紀》網絡版

FY.DOC

F515_CS_Book.book

untitled

Chapter 9: Objects and Classes

设计模式 Design Patterns

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

c_cpp

概述

C++ 程序设计 告别 OJ1 - 参考答案 MASTER 2019 年 5 月 3 日 1

Your Document Name

2 Java 语 言 程 序 设 计 教 程 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

WM8960 Audio HAT 用户手册 WM8960 Audio HAT 用户手册 前言 本产品是基于树莓派而设计的音频模块, 采用 WM8960 低功耗立体声编解码器, 通 过 I2C 接口控制,I2S 接口传输音频 板载标准 3.5mm 耳机接口, 可通过外接耳机播放音 乐, 同时也可通过双

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

BOOL EnumWindows(WNDENUMPROC lparam); lpenumfunc, LPARAM (Native Interface) PowerBuilder PowerBuilder PBNI 2

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

2008 Never Stop

<4D F736F F D E4345C6BDCCA84323B1E0B3CCD2AAB5E3D6AED2BB2E646F63>

<4D F736F F D C4EAC9FACCACB2B9B3A5D5FEB2DFD1D0BEBFD3EBCAD4B5E3CFEEC4BFBCF2B1A8A3A8B5DAD2BBBCADA3A92E646F63>

Strings

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

新版 明解C++入門編

* 系统架构 * IB API 模块 目录 * 消息总线模块 * 行情采集处理引擎模块 * 持久化存储模块

手说TTS开发指南

恒天新闻回放

Guava学习之Resources

ebook50-15

8S E600Y 0773-CE

JavaIO.PDF

文档 3

视频捕捉卡操作及编程实验

TD

CHAPTER 1

Microsoft Word - 01.DOC

讯吧 SDK 开发文档

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

untitled

English TAB 2 TAB 3 TAB 4 TAB 6 TAB 7 TAB Bo

,, 2

06-4.indd

Microsoft Word - 物件導向編程精要.doc

Java 1 Java String Date

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

Microsoft Word - DFRduino Player manual

新美大酒店开放平台SDK(.NET版)使用说明.pages

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

摘要 : 基于 Arduino 单片机模块设计的电子钢琴, 通过按键控制发音, 且可以录制 音乐并播放已储存好的音乐 可以充当简单的 MP3 播放器 关键词 : 音乐播放 arduino mega2560 SD 卡模块 扬声器 矩阵键盘 2

HD ( ) 18 HD ( ) 18 PC 19 PC 19 PC 20 Leica MC170 HD Leica MC190 HD 22 Leica MC170 HD Leica MC190 HD Leica MC170 HD

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

(6) 要 求 付 款 管 理 员 从 预 订 表 中 查 询 距 预 订 的 会 议 时 间 两 周 内 的 预 定, 根 据 客 户 记 录 给 满 足 条 件 的 客 户 发 送 支 付 余 款 要 求 (7) 支 付 余 款 管 理 员 收 到 客 户 余 款 支 付 的 通 知 后, 检

Microsoft Word - Broker.doc

BPS6.0 Web服务集成和短流程功能使用手册

Microsoft Word - 第3章.doc

Transcription:

多媒体应用开发

要内容 多媒体框架 (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; };

例演示 播放声音文件