Android音频系统AudioTrack使用方法详解
发布时间 - 2026-01-11 02:31:10 点击率:次今天,简单讲讲AudioTrack的使用方法。

1、Android AudioTrack简介
在android中播放声音可以用MediaPlayer和AudioTrack两种方案的,但是两种方案是有很大区别的,MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。而AudioTrack只能播放PCM数据流。
事实上,两种本质上是没啥区别的,MediaPlayer在播放音频时,在framework层还是会创建AudioTrack,把解码后的PCM数流传递给AudioTrack,最后由AudioFlinger进行混音,传递音频给硬件播放出来。利用AudioTrack播放只是跳过Mediaplayer的解码部分而已。Mediaplayer的解码核心部分是基于OpenCORE 来实现的,支持通用的音视频和图像格式,codec使用的是OpenMAX接口来进行扩展。因此使用audiotrack播放mp3文件的话,要自己加入一个音频解码器,如libmad。否则只能播放PCM数据,如大多数WAV格式的音频文件。
如果是实时的音频数据,那么只能用AudioTrack进行播放。
2、如何使用AudioTrack进行音频播放
//根据采样率,采样精度,单双声道来得到frame的大小。 int bufsize = AudioTrack.getMinBufferSize(8000,//每秒8K个点 AudioFormat.CHANNEL_CONFIGURATION_STEREO,//双声道 AudioFormat.ENCODING_PCM_16BIT);//一个采样点16比特-2个字节 //注意,按照数字音频的知识,这个算出来的是一秒钟buffer的大小。 //创建AudioTrack AudioTrack trackplayer = new AudioTrack(AudioManager.STREAM_MUSIC, 8000, AudioFormat.CHANNEL_CONFIGURATION_ STEREO, AudioFormat.ENCODING_PCM_16BIT, bufsize, AudioTrack.MODE_STREAM);// trackplayer.play() ;//开始 trackplayer.write(bytes_pkg, 0, bytes_pkg.length) ;//往track中写数据 …. trackplayer.stop();//停止播放 trackplayer.release();//释放底层资源。
这里需要解释下两个东西:
1.AudioTrack.MODE_STREAM:
AudioTrack中有MODE_STATIC和MODE_STREAM两种分类。STREAM的意思是由用户在应用程序通过write方式把数据一次一次得写到audiotrack中。这个和我们在socket中发送数据一样,应用层从某个地方获取数据,例如通过编解码得到PCM数据,然后write到audiotrack。
这种方式的坏处就是总是在JAVA层和Native层交互,效率损失较大。
而STATIC的意思是一开始创建的时候,就把音频数据放到一个固定的buffer,然后直接传给audiotrack,后续就不用一次次得write了。AudioTrack会自己播放这个buffer中的数据。
这种方法对于铃声等内存占用较小,延时要求较高的声音来说很适用。
2.StreamType
这个在构造AudioTrack的第一个参数中使用。这个参数和Android中的AudioManager有关系,涉及到手机上的音频管理策略。
Android将系统的声音分为以下几类常见的(未写全):
STREAM_ALARM:警告声
STREAM_MUSCI:音乐声,例如music等
STREAM_RING:铃声
STREAM_SYSTEM:系统声音
STREAM_VOCIE_CALL:电话声音
为什么要分这么多呢?以前在台式机上开发的时候很少知道有这么多的声音类型,不过仔细思考下,发现这样做是有道理的。例如你在听music的时候接到电话,这个时候music播放肯定会停止,此时你只能听到电话,如果你调节音量的话,这个调节肯定只对电话起作用。当电话打完了,再回到music,你肯定不用再调节音量了。
其实系统将这几种声音的数据分开管理,所以,这个参数对AudioTrack来说,它的含义就是告诉系统,我现在想使用的是哪种类型的声音,这样系统就可以对应管理他们了。
代码里首先获取最小的分配内存,然后创建AudioTrack,最后通过mAudioTrack.write(data, offset, length);将音频数据进行播放。
android音频系统之AudioTrack的使用就讲完了。
就这么简单。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Android
# 音频系统
# AudioTrack
# Android使用AudioRecord实现录音功能
# Android WebRTC 对 AudioRecord 的使用技术分享
# Android用AudioRecord进行录音
# Android利用AudioRecord类实现音频录制程序
# Android使用AudioRecord实现暂停录音功能实例代码
# Android audio音频流数据异常问题解决分析
# 两种
# 的是
# 是有
# 机上
# 如果你
# 是在
# 第一个
# 我现在
# 是由
# 这么多
# 你在
# 可以用
# 中有
# 较高
# 就把
# 这样做
# 几种
# 这个时候
# 写到
# 较小
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
如何用景安虚拟主机手机版绑定域名建站?
laravel怎么为应用开启和关闭维护模式_laravel应用维护模式开启与关闭方法
Laravel Fortify是什么,和Jetstream有什么关系
laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
如何快速查询域名建站关键信息?
Android使用GridView实现日历的简单功能
Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转
如何在阿里云虚拟主机上快速搭建个人网站?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
Python并发异常传播_错误处理解析【教程】
Laravel如何处理异常和错误?(Handler示例)
Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】
详解Huffman编码算法之Java实现
JavaScript如何实现类型判断_typeof和instanceof有什么区别
微信小程序制作网站有哪些,微信小程序需要做网站吗?
Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程
C++用Dijkstra(迪杰斯特拉)算法求最短路径
如何在云主机上快速搭建多站点网站?
详解Android——蓝牙技术 带你实现终端间数据传输
Laravel如何记录自定义日志?(Log频道配置)
laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法
Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】
详解Oracle修改字段类型方法总结
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
如何快速上传自定义模板至建站之星?
进行网站优化必须要坚持的四大原则
Laravel如何与Pusher实现实时通信?(WebSocket示例)
Python制作简易注册登录系统
SQL查询语句优化的实用方法总结
Laravel怎么使用artisan命令缓存配置和视图
大学网站设计制作软件有哪些,如何将网站制作成自己app?
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
使用C语言编写圣诞表白程序
重庆市网站制作公司,重庆招聘网站哪个好?
网站页面设计需要考虑到这些问题
html如何与html链接_实现多个HTML页面互相链接【互相】
Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析
如何在Ubuntu系统下快速搭建WordPress个人网站?
Swift中循环语句中的转移语句 break 和 continue
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
如何在自有机房高效搭建专业网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
详解jQuery中基本的动画方法
Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
大型企业网站制作流程,做网站需要注册公司吗?
Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康
上一篇:教育汇app缓存清理方法
下一篇:centos怎么挂载硬盘
上一篇:教育汇app缓存清理方法
下一篇:centos怎么挂载硬盘

