- 博客(39)
- 资源 (2)
- 收藏
- 关注
原创 车载设备上分区音效的实现
最近产品同事在车机上提出了一个分区音效的功能:语音控制车机上的音视频类应用程序,动态调节音频的左右声道以及低音.思路:Android中控制音频的类主要是AudioTrack,在创建AudioTrack类对象时AudioFlinger系统服务会分配一个随机生成的sessionID(默认情况下sessionID是自动增长且唯一的),因此要想在自己的应用程序里控制第三方应用的音效,需要获取到第三方应用程序的pid以及sessionID;pid还比较容易获取,应用程序开始播放音频的时候,有个音频获取焦点的事件;
2020-10-10 20:46:57 1612
原创 Android常用的音频驱动节点介绍
笔者主要是做Audio Framework层的系统开发工作,公司属于音视频会议行业,在定位解决音频方面的问题时,为了能大致定位问题到底是出在音频驱动层以下,还是Framework层,特将常用的音频驱动节点(功能主要涉及播放和录音)的调试方法记录下来备用。查看设备加载的声卡信息:cat /proc/asound/cards我司的设备上主要有2张声卡0和1,0是主板自带的,主要使用的是其Speaker;1是USB MIC Bar(注意这里使用的MIC并非主板上默认的mic跟手机等设备还有区别)..
2022-05-27 18:25:19 2507 1
原创 源码中新增API后的编译问题(Android 12)
最近公司的产品平台升级,芯片厂商换了,Android版本也由原来的Android 9 升级到了Android 12;Audio模块要求支持支持多通道录音,于是在源码里新增了几个音频通道常量的定义,包括Audio的java层和hal层,主要新增的文件如下:frameworks/base/media/java/android/media/AudioFormat.java public static int inChannelMaskFromOutChannelMask(int outMask) t.
2022-05-27 16:54:08 5658 6
原创 C++常用的字符指针/字符数组/字符串/数字之间的转换
开发中常用的字符数组,字符串,数字相互转换的Demo,C++新手容易被这些小问题卡住,遇到时花费较长时间处理,记录下来以备及时复习
2022-04-20 14:28:10 3110
翻译 音频出现XRun现象的原因
音频延迟的促成因素本页面重点介绍输出延迟的促成因素,但是类似的内容也适用于输入延迟。假设模拟电路的促成作用没有那么显著,那么音频延迟的主要 Surface 级促成因素如下:应用 通道中的缓冲区总数 每个缓冲区的大小(以帧为单位) 应用处理器之后的额外延迟,例如来自 DSP 的延迟上述促成因素列表在尽量做到准确的同时,可能也存在误导。原因在于缓冲区计数和缓冲区大小更像是影响而非原因。通常发生的情况是实现并测试一个指定的缓冲区方案,但是在测试期间,音频欠载或过载听到的声音是“咔哒声”或“砰砰
2021-08-12 13:56:12 874
转载 音频重采样造成音质损失的原理
1、WAV文件:采样率(Sample Rate),深度(bit-depth)WAV文件可以说是最原始的数字化音频格式了。Wav全称是Wave,就是将音频文件的波形完整记录。而波形的存在,可以想象为是折线图一般的东西。想记录波形,就需要两个最基本的参数:2、采样率,我们以怎样的频率记录波形的变化。44.1KHz,意味着每秒选取44100个采样点;48KHz意味着每秒选取48000个采样点。出于历史原因,所有CD一律采用44.1KHz,而DVD/BD视频音轨一律采用48KHz。所以不出意外,你听到的那些音乐
2021-07-09 16:14:47 2275
原创 蓝牙音乐和导航语音播放混音卡顿问题
最近发现公司自研的智能车载设备上存在一个问题:手机通过蓝牙连接车机,在手机上播放音乐车机上发声然后跟车机上的导航语音播报一起混音播出的时候会出现卡顿的现象;但是在车机上播放音乐和导航混音就正常。另外需要说明的是播放音乐使用的是Music流,导航使用的是Alarm流通过 adb shell dumpsys media.audio_flinger 工具对比查看两种场景下实时的音频流信息(截取其中一个回放线程中的音频流信息如下):Output thread 0xe6c833c0 type 0 (MIXE
2021-02-14 19:36:11 2175
原创 为自定义系统服务添加SELinux权限
目录1.为设备节点添加SELinux权限2.为JAVA层的系统服务添加SELinux权限3.为Native层的系统服务添加SELinux权限4.自定义Native层系统服务如何跟随系统ROM一起编译并烧录到设备且开机自启动SELinux权限的基础理论https://blog.csdn.net/Innost/article/details/19299937https://blog.csdn.net/Innost/article/details/19641487简单理解:系.
2021-01-07 12:49:03 1514
原创 为应用程序设置独立音量的实现
概述:目前安卓系统上,音量是根据音频流类型来分类控制的,有媒体音量,闹钟音量,铃声音量等,也即是一旦增大媒体音量,那么所有媒体应用的音量都跟着增大,无法做到每个媒体应用有自己独立的音量。本方法在混音器为音频流Track混音前,设置了应用程序所属的音频流Track的音量从而达到应用程序音量相互独立的目的,满足了车载用户同时使用多个媒体应用时无法实现音量多样化的需求,改善了用户多音频交互的体验。技术背景:安卓系统中管理音频模块的Native层核心系统服务AudioFlinger(简称AF),掌管着音频.
2020-12-27 13:28:45 667
原创 车载设备上音视频应用续播功能的实现
任务:ACC OFF之前,获取系统中正在播放音频应用的pid列表,在下次ACC ON时的时候拉起这些播放音频的应用(当然还需要集合上层根据pid获取应用包名的功能)1.在Framework层添加Property属性,并赋予audioserver进程读写的权限/device/qcom/msm8953_64/msm8953_64.mk...PRODUCT_COPY_FILES += device/qcom/msm8953_64/whitelistedapps.xml:system/etc/whi
2020-12-23 11:58:44 579
原创 安卓音频模块博客汇总
目录1.基础概念2.Java层3.Native层3.1音频策略(选择输出流设备)3.2音量设置3.3音频流环形的Buffer4.HAL层以及Kernel层5.Alsa库相关6.Audio架构大纲汇总1.基础概念https://www.cnblogs.com/hzl6255/p/8245578.htmlhttps://blog.csdn.net/yangwen123/article/details/39502689https://blog.csdn.n.
2020-12-23 11:37:57 724
原创 安卓系统中音频模块的配置文件汇总
整个安卓设备的配置文件在system/etc/目录下,音频作为其中的一个子模块当然也包含在内,通过shell命令可以看到和下面类似的文件列表msm8953_64:/system/etc $ ls IPACM_cfg.xml data init.qcom.bt.sh mixer_paths_mtp.xml ...
2020-12-17 11:56:45 3781
原创 音视频基础知识
采样和采样频率:现在是数字时代,在音频处理时要先把音频的模拟信号变成数字信号,这叫A/D转换。要把音频的模拟信号变成数字信号,就需要采样,或者叫抽样。当要把音频播放出来时则需要把数字信号转换成模拟信号,这叫D/A转换。一秒钟内采样的次数称为采样频率。根据Nyquist采样定理,要想重建原始信号,采样频率必须大于信号中最高频率的两倍。采样频率越高,越接近原始信号,但是也加大了运算处理的复杂度。人能感受到的频率范围为20HZ--20kHZ, 一般音乐的采样频率为44.1kHZ(根据Nyquist采样定理,采样
2020-09-10 14:29:20 280
转载 谈谈安卓平台上常用的音频场景及其数据流向
智能手机中音频的主要场景有音频播放、音频录制、语音通信等。不同场景下的音频数据流向有很大差异,即使是同一场景,在不同的模式下音频数据流向也有所不同。1,音频播放Android系统audio框架中主要有三种播放模式:low latency playback、deep buffer playback和compressed offload playback。a)low latency playback:用于按键音、游戏背景音等对时延要求高的声音输出。音频文件是在AP侧解码成PCM数据,然后再经由Aud
2020-09-10 11:50:57 1551 3
转载 安卓音频模块HAL层浅析
手机可以说是现在人日常生活中最离不开的电子设备了。它自诞生以来,从模拟的发展到数字的,从1G发展到目前的4G以及不久将来的5G,从最初的只有唯一的功能(打电话)发展到目前的全功能,从功能机(feature phone)发展到智能机(smart phone),可谓变化巨大。对于手机上的音频来说,刚开始只有语音通信功能,现在不仅语音通信,还可以听音乐、录音、智能语音(语音输入/语音交互)等。智能手机中的音频场景众多,可以说是手机多媒体系统中最复杂的子系统了。今天我们就谈谈Android智能手机上的音频。.
2020-09-10 11:35:28 2614 2
原创 JAVA反射的高级用法之操作集合,泛型
反射相关的基础知识参考:https://blog.csdn.net/sinat_38259539/article/details/71799078总的来说,反射利用的是在运行时状态,类的对象在内存中只有一例的原理,通过类对象间接的访问/操作类的实例对象;我这里总结一些比较少见的使用场景,主要是通过反射操作集合,泛型等.现在有GordanDemo类的相关信息如下package com....
2020-04-16 12:36:28 1060
原创 隐藏Android系统的鼠标
公司最近有自研云桌面相关的产品,不过Server端使用的操作系统不是Linux也不是Windows,而是Android系统,有些类似于华为的云手机,Client端登录服务器以后要操作Server端,而且产品要求操作Server端是以触摸的方式像操作本地的手机一样,但默认情况下Android系统都会有个鼠标的图标,这样很影响体验,于是就有了个这个隐藏鼠标的需求,下面记录下修改的过程:安卓系统中有...
2020-03-17 18:10:45 1653 1
原创 Android多应用同时录音
基于Android N 7.1多应用同时录音/frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cppaudio_io_handle_t AudioPolicyManager::getInputForDevice(audio_devices_t device, ...
2020-03-15 16:18:13 1601
原创 Ubuntu上部署Java-ee开发环境时遇到的问题
1.安装eclipse-java-ee的开发环境https://blog.csdn.net/weixx3/article/details/80350087其中创建快速启动图标时[Desktop Entry]Encoding=UTF-8Name=EclipseComment=EclipseExec=/usr/local/eclipse/eclipse-inst Ico...
2020-03-12 16:28:06 194
原创 AS中使用自定义SDK编译应用程序
1) design new API in xxx.java based on your requirements.Maybe you have to touch more related files: android_media_xxx.cpp, xxx.ccp, etc.2) builda) make update-apib) make -j8c) make sdk ...
2020-01-16 15:13:14 552
原创 Gradle配置解析
工程目录下的build.gradle文件buildscript { repositories { google() jcenter() //阿里巴巴的Maven仓库,有时网络状态不太好的话谷歌的Maven仓库链接不上,无法下载项目中的依赖,可以添加上该Maven仓库地址,让依赖从这里下载 maven{ ...
2020-01-16 14:55:59 1155
原创 Android录音监控的实现原理
最近在公司里研究学习安卓的音频模块,发现音频管理器有这么一个有用的API:AudioManager.registerAudioRecordingCallback(@NonNull AudioRecordingCallback cb, Handler handler),它可以监控其他App的录音行为,当自己的App里设置了监听回调方法后,第三方的APP应用录音时,在自己的App里能收到监听回调的消息...
2019-12-01 11:51:04 3396
原创 ffmpeg命令行工具介绍
对于多媒体行业的同学们,ffmpeg已经再熟悉不过了,属于行业入门级的工具,软编解码的神器~如果你是行业的老鸟,请跳过这篇文章,强烈建议新手们花几分钟看看!首先FFMPEG是一款开源的跨平台的音视频编解码的工具,源码可前往官网下载,命令行工具以Windows平台和Linux平台使用得较多,然后ffmpeg库主要支持ffserver(主要用于推/拉音视频流),ffmpeg(主要进行格式转换,如...
2019-09-11 16:11:27 310
原创 基本排序算法(C语言版)
最近在学习C语言,恰好学到基础算法这块,整理了下三种基本的排序算法:插入排序,选择排序,冒泡排序,实现代码如下:验证排序算法的代码,随机定义一个整型的数组,调用排序算法后,将数组里的元素依次打印出来int main(){int array_int[]={5,4,11,45,34,67,88,43,55,10,2,200,100,7,8};int length=sizeof(arra...
2019-07-21 18:46:36 149
原创 多媒体开源库ffmpeg+x264+aac+lame源码编译
做Android UI 方面的开发已经3年多了,感觉遇到了瓶颈,后期打算往音视频方面发展,恰好最近公司不忙,编译了下音视频领域常用的几个开源库,特此记录,分享出来,希望能帮助到有用到这些开源库的网友们~由于版权的原因,现在ffmpeg库默认是不支持视频x264格式,音频aac格式,音频mp3格式的编码的,仅支持上述格式的解码(可通过 命令 ffmpeg -codecs 查看支持的音视频编解码格...
2019-07-14 11:50:00 3461 2
原创 应用上悬浮的快速启动菜单
最近在开发盒子上的一个Launcher,有一个悬浮菜单,觉得效果挺好,特意拿出来分析下~悬浮菜单的效果用文字描述是:无论是进入在Launcher里还是退出Launcher进入到其它APP里,鼠标滑过右侧区域时显示菜单;鼠标滑离右侧区域时隐藏菜单。开发中做弹出框的方式有很多种,有Dialog,PopUpWindow,DialogFragment,Activity等分析之后这几种都是不
2017-11-17 17:01:54 620
原创 TV中一款自定义的软键盘(覆盖了系统原生的键盘)
自定义Android软键盘,数字键盘,字母键盘(包括大小写),阻止了Android原生软键盘的弹出,外观上也比较好看~核心代码如下:private void showKeyboard(EditText etContent) {this.inputContent = etContent;View content = View.inflate(this
2017-11-17 10:27:39 2808 2
原创 Android中需要知道的蓝牙相关常识
首先蓝牙设备有很多种,需要区分蓝牙设备的类型,市面上主要的蓝牙设置有蓝牙鼠标,键盘,游戏手柄等蓝牙耳机 蓝牙音箱 可穿戴的蓝牙手环手表蓝牙健康设备,电子秤等因此技术上大体分为经典蓝牙和低功耗(Bluetooth Low Energy)蓝牙,低功耗蓝牙是在Android4.0以后才支持的,所以使用低功耗蓝牙时还得注意判断SDK的版本,另外现在市面上有的蓝牙设备是比较先进的(例如荣
2017-09-06 16:02:44 726
原创 Android中传统蓝牙模块开发小结
最近公司项目中有用到蓝牙游戏手柄,需要连接蓝牙游戏手柄操作机顶盒,所以这里将开发思路分享下~获取蓝牙管理器BluetoothAdapter.getDefaultAdapter();获取到蓝牙设备启用/禁用状态以及启用和禁用的相关方法mBluetoothAdapter.isEnabled()mBluetoothAdapter.disable();mBluetoothA
2017-09-06 15:39:04 2280
原创 Android中WIFI常见的几种加密方式(详细)
系统设置中WIFI热点的加密方式,添加新的WIFI和连接WIFI的时候,需要在程序中配置相应的参数包:android.net.wifi.WifiConfiguration 类 WifiConfigurationconfig.SSIDconfig.hiddenSSID1:没加密添加网络时候只需要输入SSID即可,不需要密码config.allowedKeyM
2017-09-06 12:04:07 15498
原创 Android中的WIFI模块开发思路
最近有做机顶盒的设置APK,特地将WIFI模块相关的开发思路分享下,文章中广播的说明参考:http://blog.csdn.net/wuqingyidongren/article/details/50903090其它参考(含三篇):http://blog.csdn.net/whuthm/article/details/40347465以及(含三篇):http://blog.cs
2017-09-06 10:50:51 992
原创 Android TV开发中有线网络模块
现在一直在做机顶盒开发,之前做过机顶盒的系统设置APK,现在特地把设置中的有线网络模块的开发思路分享下文章中介绍的API等是基于Android4.4版本的,向Android5.0以上的版本就不同了,包名有些许变化,貌似变得更简单了和有线网络相关的内容在包android.net.ethernet.EthernetManager还有拨号上网的包android.net.p
2017-09-06 10:23:35 4772 2
原创 TV开发中时移与回看功能的实现
在帮某运营商开发DVB+IP的一款机顶盒时 要求有时移的功能,进入时移状态后能快退和快进首先时移的播放地址是从网络获取的走的是HTTP协议,视频流走的是HLS协议,主要的问题是卡在时移节目的快退和快进功能上,一开始总以为只要获取一次播放地址即可,后面的快退和快进功能应该由播放器自己完成,实际上不是,而是需要记录快退和快进口的时间,再次从网络获取新的播放地址然后设置到播放器上,反复快退快进也是如
2017-01-16 10:45:38 3573
原创 TV开发中ListView的那些坑
这是在帮某厂商做DVB+IP的机顶盒中遇到的问题界面中总共有四列(也就是四个ListView),需求要求对于选中的Listview中的Item有高亮的背景以及文本字体变成深蓝色,失去焦点但是被 选中的Item的文本的颜色显示深蓝色,其它时候显示白色开发中遇到的问题有:1:Item高亮的背景不对,有时候Item是被选中了但是就是没高亮,这种效果的做法有两种思路一是利用Listview的l
2017-01-13 14:05:59 2566 1
原创 Android手机开启开发者模式
搞Android开发的 使用真机调试的情况应该很多 市面上有各种Android手机 进入开发者模式的情况各不相同,总结了几款主流的手机进入开发者模式的步骤,希望对各位网友们有用:基本上是连续点击 各个手机的版本号等连续点击6-7次即可进入小米手机:http://jingyan.baidu.com/article/b7001fe16820810e7282dd09.html
2016-04-28 19:33:44 2584
原创 SQLite数据库学习笔记
Android开发中可能会用到数据库,这里我打算说些数据库较少用到但是也很重要的一些知识1:创建数据库,创建表,删除表,修改表,基于表的增,删,改,查等操作由于用得比较多,就掠过了(Android开发基本都知道)下面的内容均以 一张员工表(Employee)作为示例,员工表的结构为:Employee(id,name,salary,empDate,departmentId)
2015-09-21 15:33:25 444
原创 FireFox浏览器上好用的插件
首先启动FireFox浏览器,打开FireFox工具栏(当然每个版本的浏览器打开的方式可能不一样 当前版本是按 ALT 键 在浏览器的上方会出现工具栏)插件一:Poster(模拟HTTP请求 表单提交的数据可以手动填写)插件用法:http://www.blogjava.net/anchor110/articles/341786.html
2015-07-01 14:29:07 772
原创 ASP.Net开发回顾路线
1:Web网页基础HTML语言CSS语言JAVASCRIPT以及JQUERY脚本语言,扩展的HighChart图表插件2:C#语言基础 面向对象编程思想常用的一些设计模式:单例模式,MVC三层架构,工厂模式Winform窗体应用程序的开发Web开发中常用的组件(Repeter DataList GridView)ADO.NET五大对象(SQLConne
2015-05-17 17:39:18 610
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人