音频流分析 五 策略与流类型

目录

1 stream_type—流类型

2 routing_strategy—策略

3 audio_devices--输入输出设备定义

4 stream_type、device、strategy三者间的关系

5 getStrategy--流类型与策略之间的映射关系函数 

6 audio_mode—模式


1 stream_type—流类型

enum stream_type {
        DEFAULT          	=-1,
        VOICE_CALL       	= 0,	//电话
        SYSTEM           	= 1,	//系统声音
        RING             	= 2,	//铃声
        MUSIC            	= 3,	//音乐声
        ALARM            	= 4,	//警告
        NOTIFICATION     	= 5,	//通知
        BLUETOOTH_SCO    	= 6,	//蓝牙耳机接通
        ENFORCED_AUDIBLE 	= 7, 	//不能被静音必须路由到喇叭播放的声音
        DTMF             	= 8,	//双音多频
        TTS              	= 9,	//从文本到语音的合成技术
        NUM_STREAM_TYPES
};

2 routing_strategy—策略

enum routing_strategy {
            STRATEGY_MEDIA,
            STRATEGY_PHONE,
            STRATEGY_SONIFICATION,
            STRATEGY_DTMF,
            NUM_STRATEGIES
        };

3 audio_devices--输入输出设备定义

enum audio_devices {
        // output devices
        DEVICE_OUT_EARPIECE = 0x1,
        DEVICE_OUT_SPEAKER = 0x2,
        DEVICE_OUT_WIRED_HEADSET = 0x4,
        DEVICE_OUT_WIRED_HEADPHONE = 0x8,
        DEVICE_OUT_BLUETOOTH_SCO = 0x10,
        DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20,
        DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40,
        DEVICE_OUT_BLUETOOTH_A2DP = 0x80,
        DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100,
        DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200,
        DEVICE_OUT_AUX_DIGITAL = 0x400,
	DEVICE_OUT_FM_HEADPHONE = 0x800,
	DEVICE_OUT_FM_SPEAKER = 0x1000,
	DEVICE_OUT_TTY = 0x2000,
        DEVICE_OUT_DEFAULT = 0x8000,
        DEVICE_OUT_ALL = (DEVICE_OUT_EARPIECE | DEVICE_OUT_SPEAKER | DEVICE_OUT_WIRED_HEADSET |
                DEVICE_OUT_WIRED_HEADPHONE | DEVICE_OUT_BLUETOOTH_SCO | DEVICE_OUT_BLUETOOTH_SCO_HEADSET |
                DEVICE_OUT_BLUETOOTH_SCO_CARKIT | DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER | DEVICE_OUT_AUX_DIGITAL | DEVICE_OUT_FM_HEADPHONE | DEVICE_OUT_FM_SPEAKER | DEVICE_OUT_TTY | DEVICE_OUT_DEFAULT),
        DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES |
                DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER),

        // input devices
        DEVICE_IN_COMMUNICATION = 0x10000,
        DEVICE_IN_AMBIENT = 0x20000,
        DEVICE_IN_BUILTIN_MIC = 0x40000,
        DEVICE_IN_BLUETOOTH_SCO_HEADSET = 0x80000,
        DEVICE_IN_WIRED_HEADSET = 0x100000,
        DEVICE_IN_AUX_DIGITAL = 0x200000,
        DEVICE_IN_VOICE_CALL = 0x400000,
        DEVICE_IN_BACK_MIC = 0x800000,
        DEVICE_IN_DEFAULT = 0x80000000,

        DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | DEVICE_IN_AMBIENT | DEVICE_IN_BUILTIN_MIC |
                DEVICE_IN_BLUETOOTH_SCO_HEADSET | DEVICE_IN_WIRED_HEADSET | DEVICE_IN_AUX_DIGITAL |
                DEVICE_IN_VOICE_CALL | DEVICE_IN_BACK_MIC | DEVICE_IN_DEFAULT)
};

4 stream_type、device、strategy三者间的关系

首先要搞清楚stream_type,device,strategy三者之间的关系:

         ·AudioSystem::stream_type  音频流的类型,一共有10种类型,在应用层上,就会根据不同场景把stream_type定义好,然后再传到JAVA层或者JNI层。

         ·AudioSystem::audio_devices  音频输入输出设备

         ·AudioPolicyManager::routing_strategy 音频路由策略,可以有4种策略

         三者的关系如图所示:

5 getStrategy--流类型与策略之间的映射关系函数 

getStrategy(stream_type)根据stream type,返回对应的routing strategy值,getDeviceForStrategy()则是根据routing strategy,返回可用的device。Android把10种stream type归纳为4种路由策略,然后根据路由策略决定具体的输出设备。
AudioPolicyManagerBase::routing_strategy AudioPolicyManagerBase::getStrategy(
        AudioSystem::stream_type stream) {
    switch (stream) {
    case AudioSystem::VOICE_CALL: 		// 电话来了
    case AudioSystem::BLUETOOTH_SCO: 	// 蓝牙耳机接通了
        return STRATEGY_PHONE;
    case AudioSystem::RING: 				// 铃声响了
    case AudioSystem::NOTIFICATION: 		// 通知,例如界面中最上面一栏中有消息了
    case AudioSystem::ALARM: 			// 警告,电池没电时的警告?
    case AudioSystem::ENFORCED_AUDIBLE:
        return STRATEGY_SONIFICATION;
    case AudioSystem::DTMF: 	
        return STRATEGY_DTMF;
    default:
        LOGE("unknown stream type");
    case AudioSystem::SYSTEM: 			// 系统声音,播放音乐的时候按键音,
/*mute 掉音乐,并切换 output 的话,将导致 很差的用户体验。
其中可以得到以下信息:
1、按键声音属于 system stream type 。
2、策略的改变将会导致 output 的切换
3、优先级高的策略 start 时会 mute 掉优先级低的策略*/
    case AudioSystem::TTS: 				// TTS 就是 Text To Speech
    case AudioSystem::MUSIC:
        return STRATEGY_MEDIA;
    }
}

6 audio_mode—模式

 enum audio_mode {
        MODE_INVALID = -2,
        MODE_CURRENT = -1,
        MODE_NORMAL = 0,
        MODE_RINGTONE,
        MODE_IN_CALL,
        MODE_IN_COMMUNICATION,
        NUM_MODES  // not a valid entry, denotes end-of-list
    };

 

  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
微信小程序Demo–公众号热门文章信息是一款专为微信公众号设计的热门文章信息展示小程序。它可以帮助公众号运营者快速获取和展示热门文章,提高用户阅读体验和互动性。本资源包含完整的小程序源代码,支持二次开发定制,满足您的个性化需求。 该小程序采用目前行的微信开发者工具进行开发,基于WXML、WXSS和JavaScript技术栈,实现了美观、简洁的界面设计和畅的交互效果。同时,它还支持多种数据接口和自定义样式,方便您根据实际需求进行调整和扩展。 在功能方面,该小程序具有以下几个亮点: 1. 实时获取公众号热门文章:通过调用微信公众平台提供的API接口,实时获取最新的热门文章列表,确保内容的时效性和准确性。 2. 多样化文章展示:支持图文混排、视频、音频等多种内容形式,满足不同类型的公众号需求。 3. 用户互动功能:支持点赞、评论和分享等互动功能,提高用户参与度和粘性。 4. 数据统计与分析:提供详细的数据统计和分析功能,帮助您了解用户行为和喜好,优化内容策略。 此外,为了满足不同公众号的个性化需求,该小程序还提供了丰富的定制选项,包括主题颜色、字体大小、页面布局等。您可以根据自己的品牌形象和用户需求进行定制开发,打造出独一无二的热门文章信息小程序。 总之,微信小程序Demo–公众号热门文章信息是一款功能完善、操作简便、可定制性强的热门文章展示小程序。无论您是公众号运营者还是开发者,都可以通过本资源轻松打造出符合自己需求的热门文章信息,提升用户体验和品牌形象。
推荐,资料太大存放在网盘中,需要可下载观看。含教材。 第一部分 考试简介 1.1 考试大纲要求 1.2 考试科目介绍 第二部分 信息系统基础 2.1 信息系统工程总体规划 2.2 政府信息化与电子政务 2.3 企业信息化与电子商务 2.4 信息资源管理 2.5 信息化的标准、法律和规定 第三部分 系统开始基础 3.1 系统规划 3.2 软件开发方法 3.3 需求工程 3.4 软件系统建模 3.5 系统设计 3.6 测试与评审 3.7 软件开发环境与工具 3.8 系统运行与评价 第四部分 操作系统 4.1进程管理 4.2存储管理 4.3文件管理 4.4作业管理 4.5设备管理 第部分 数据库系统 5.1数据库模式 5.2数据库完整性约束 5.3并发控制 5.4数据库设计 5.4.1数据库设计阶段 5.4.2ER模型 5.5数据库安全 5.6备份与恢复技术 5.7分布式数据库 5.8数据仓库 5.9数据挖掘 第六部分 计算机网络 6.1开放系统互连参考模型 6.2 TCP/IP协议族 6.3网络规划与设计 6.4计算机网络分类 6.5网络接入技术 6.6网络存储技术 6.7虚拟局域网(VLAN) 第七部分 软件架构设计 7.1 软件架构的概念 7.2 软件架构风格 7.3 面向服务的架构 7.4 特定领域软件架构 7.5 基于架构的软件开发方法 7.6 软件架构评估 7.7 软件产品线 第八部分 基于构件的开发 8.1 中间件技术 8.1.1 中间件的概念 8.1.2 主要的中间件 8.2 典型应用架构 8.3 企业应用集成 第九部分 应用数学 9.1 概率统计应用 9.2 图论应用 9.3 组合分析 9.4 算法的选择与应用 9.5 运筹方法 9.6 数学建模 第十部分 系统安全性与保密性设计 10.1安全与保密基础技术 10.2网络安全 10.3安全体系结构 10.3.1OSI安全模型 10.3.2MIS+S、S-MIS、S2-MIS 10.4安全审计 10.5安全策略 10.5.1核心 - 七定 10.5.2安全策略设计原则 第十一部分 系统配置与性能评价 11.1系统故障模型 11.2系统配置方法 11.3可靠性分析与可靠度计算 11.4性能评价方法 11.5软件容错 第十二部分 知识产权与标准化 12.1知识产权 12.1.1保护期限 12.1.2知识产权人确定 12.1.3侵权判断 12.1.4标准的分类 12.2标准化 12.2.1标准的分类 12.2.2标准类型的识别 第十三部分 多媒体基础知识 13.1多媒体技术基本概念 13.1.1音频相关概念 13.1.2图像相关概念 13.1.3媒体的种类 13.2多媒体相关计算问题 13.2.1图像容量计算 13.2.2音频容量计算 13.2.3视频容量计算 13.3常见多媒体标准 13.4数据压缩技术 13.4.1数据压缩基础 13.4.2有损压缩与无损压缩 第十四部分 嵌入式系统 14.1 嵌入式系统的特点 14.2 嵌入式系统的基本架构 14.3 嵌入式系统网络 14.4 嵌入式系统数据库 14.5 实时任务调度和多任务设计 14.5.1 调度算法分类 14.5.2 单调执行速率调度法 14.5.3 时间轮转调度 14.5.4 最早截止时间优先调度算法 14.5.5 优先级反转 14.6 中断处理和异常处理 14.7 嵌入式系统开发设计 14.7.1 交叉开发环境 14.7.2 开发过程 14.7.3 调试方法 第十部分 开发管理 15.1 范围管理 15.2 时间管理 15.3 成本管理 15.4 文档管理 15.4.1 软件文档管理指南 15.4.2 计算机软件文档编制规范 15.5 软件配置管理 15.6 软件质量管理 15.6.1 质量管理的概念 15.6.2 质量模型 15.6.3 质量管理过程 15.6.4 质量保证与质量控制 15.7 风险管理 15.8 软件过程改进 15.8.1 CMM 15.8.2 CMMI 15.8.3 ISO/IEC 15504 15.8.4 SJ/T 11234-2001 第十六部分 系统架构设计案例分析 16.1 考点分析 16.2 如何解答试题 16.3 试题解答实例 16.3.1 质量属性与软件架构策略 16.3.2 数据图与程图 16.3.3 嵌入式系统设计 16.3.4 软件架构风格的选择 16.3.4 信息系统安全设计 第十七部分 系统架构设计论文 17.1 考点分析 17.2 做好准备工作 17.3 论文写作格式 17.4 如何解答试题 17.5 如何写好摘要 17.6 如何写好正文 17.7 常见问题及解决办法 17.8 论文评分标

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值