全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android音频系统AudioTrack使用方法详解

今天,简单讲讲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音频流数据异常问题解决分析  # 两种  # 的是  # 是有  # 机上  # 如果你  # 是在  # 第一个  # 我现在  # 是由  # 这么多  # 你在  # 可以用  # 中有  # 较高  # 就把  # 这样做  # 几种  # 这个时候  # 写到  # 较小 


相关文章: 青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何确保FTP站点访问权限与数据传输安全?  代刷网站制作软件,别人代刷火车票靠谱吗?  定制建站哪家更专业可靠?推荐榜单揭晓  建站10G流量真的够用吗?如何应对访问高峰?  定制建站如何定义?其核心优势是什么?  网站按钮制作软件,如何实现网页中按钮的自动点击?  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何选择高效可靠的多用户建站源码资源?  小说建站VPS选用指南:性能对比、配置优化与建站方案解析  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  如何通过NAT技术实现内网高效建站?  已有域名和空间如何搭建网站?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  Thinkphp 中 distinct 的用法解析  兔展官网 在线制作,怎样制作微信请帖?  学校为何禁止电信移动建设网站?  c# Task.ConfigureAwait(true) 在什么场景下是必须的  成都响应式网站开发,dw怎么把手机适应页面变成网页?  历史网站制作软件,华为如何找回被删除的网站?  深圳网站制作案例,网页的相关名词有哪些?  如何选择可靠的免备案建站服务器?  制作网站外包平台,自动化接单网站有哪些?  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  如何选择CMS系统实现快速建站与SEO优化?  如何在阿里云完成域名注册与建站?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  手机网站制作与建设方案,手机网站如何建设?  如何在香港服务器上快速搭建免备案网站?  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  高端云建站费用究竟需要多少预算?  制作宣传网站的软件,小红书可以宣传网站吗?  ,购物网站怎么盈利呢?  如何选择高效便捷的WAP商城建站系统?  官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站  建站主机服务器选购指南:轻量应用与VPS配置解析  电商网站制作公司有哪些,1688网是什么意思?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何批量查询域名的建站时间记录?  Python多线程使用规范_线程安全解析【教程】  济南网站建设制作公司,室内设计网站一般都有哪些功能?  如何快速搭建支持数据库操作的智能建站平台?  如何高效利用亚马逊云主机搭建企业网站?  如何快速打造个性化非模板自助建站?  学校建站服务器如何选型才能满足性能需求?  建站之星代理如何优化在线客服效率?  如何通过主机屋免费建站教程十分钟搭建网站?  如何用腾讯建站主机快速创建免费网站?  建站之星如何通过成品分离优化网站效率? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。