首页 > 其他分享 >Android Audio

Android Audio

时间:2023-12-26 11:03:24浏览次数:27  
标签:采样 采样率 播放 音频 AudioRecord PCM Android Audio

1. AudioFormat

定义了一些变量,这些变量在AudioTrack和AudioRecord中用到:一般以下参数 ENCODING_PCM_16BIT, ENCODING_PCM_8BIT。代表采样大小android支持的采样大小16bit 或者8bit。当然采样大小越大,那么信息量越多,音质也越高,现在主流的采样大小都是16bit,在低质量的语音传输的时候8bit足够了。

2.AudioManager

对音量和震铃模式控制,模式管理

3. AudioRecord

记录输入硬件的音频,构造时传入5个参数

1. audioSource:

音频源:指的是从哪里采集音频。

2. sampleRateInHz: 

采样率:音频的采样频率,每秒钟能够采样的次数,采样率越高,音质越高。给出的实例是44100、22050、11025但不限于这几个参数。例如要采集低质量的音频就可以使用4000、8000等低采样率。  在Android手机设备中,44100kHZ是可以兼容全部手机的采样率。

3. channelConfig: 

声道设置:android支持双声道立体声和单声道。MONO单声道,STEREO立体声 

4. audioFormat: 

编码制式和采样大小:采集来的数据当然使用PCM编码(脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。) 

5. bufferSizeInBytes: 

采集数据需要的缓冲区( 麦克风采集到的音频数据先放置在一个缓冲区里面,之后我们再从这个缓冲区里面读取数据,从而获取到麦克风录制的音频数据。)的大小,一般来说缓存区越小,产生的音频延迟也越小;值得注意的是,我们可以利用AudioRecord.getMinBufferSize()这个方法帮我们算出最小的缓存区大小,这个数值最好不要自己计算,毕竟不同厂商可能有不同的缓存区采集实现。

  在创建AudioRecord对象时,AudioRecord会初始化,并和音频缓冲区连接,用来缓冲新的音频数据。 根据构造时指定的缓冲区大小,来决定AudioRecord能够记录多长的数据

4. AudioTrack

播放音频以及获取音频相关信息,构造时传入6个参数

1. streamtype:

使用哪种音频管理策略

Android Audio_数据

  • 音频流的音量管理,调节一个类型的音频流音量,不会影响到其他类型的音频流
  • 根据流类型选择合适的输出设备;比如插着有线耳机期间,音乐声(STREAM_MUSIC)只会输出到有线耳机,而铃声(STREAM_RING)会同时输出到有线耳机和外放

2. sampleRateInHz

与录音时一致

3. channelConfig

与录音时一致

4. audioFormat

与录音时一致

5. bufferSizeInBytes

与录音时一致

6. mode: 

1.static静态模式:言下之意就是数据一次性交付给接收方。好处是简单高效,只需要进行一次操作就完成了数据的传递;缺点当然也很明显,对于数据量较大的音频回放,显然它是无法胜任的,因而通常只用于播放铃声、系统提醒等对内存小的操作

2.streaming流模式:和网络上播放视频是类似的,即数据是按照一定规律不断地传递给接收方的。理论上它可用于任何音频播放的场景,不过我们一般在以下情况下采用:

Ø  音频文件过大

Ø  音频属性要求高,比如采样率高、深度大的数据

Ø  音频数据是实时产生的,这种情况就只能用流模式了

Android Audio_音频流_02

attachAuxEffect(int effectId)

声音附加混响特效(混响即通过声音在不同路径传播下造成的反射叠加产生的声音特效)

getplaybackHeadPosition

返回当前播放位置

getplaybackRate

对应setplaybackRate设置播放速率

Android Audio_数据_03

4. Visualzer

需要传入特定的会话id,id来自MediaPlayer或AudioTrack.

Two types of representation of audio content can be captured: 

  • Waveform data: consecutive 8-bit (unsigned) mono samples by using the getWaveForm(byte[]) method
  • Frequency data: 8-bit magnitude FFT by using the getFft(byte[]) method

The Visualizer class can also be used to perform measurements on the audio being played back. The measurements to perform are defined by setting a mask of the requested measurement modes with setMeasurementMode(int). Supported values are MEASUREMENT_MODE_NONE to cancel any measurement, and MEASUREMENT_MODE_PEAK_RMS for peak and RMS monitoring. Measurements can be retrieved through getMeasurementPeakRms(MeasurementPeakRms).

可以捕获两种类型:波形,FFT,可检索最新的峰值和RMS测量值

Android Audio_音频流_04

getcaptureSizeRange()

返回一个采样值的范围数组,0为最小值128,1为最大值1024

getMaxCaptureRate

频率最大值用于setDataCaptureListener中的rate参数(最大50毫秒

getScalingMode

SCALING_MODE_AS_PLAYED

定义捕获模式,在此模式下,回放音量将影响(缩放)捕获数据的范围。低播放量将导致低样本值和fft值,反之亦然。

SCALING_MODE_NORMALIZED

默认模式

Android Audio_数据_05


标签:采样,采样率,播放,音频,AudioRecord,PCM,Android,Audio
From: https://blog.51cto.com/u_16269895/8980062

相关文章

  • Android使用JNA体会心得
    JNA(JavaNativeAccess)技术也许大家用的很少,其实他也是java官方支持的,并且在github上不断更新着。它主要用在你不需要去编写c++代码,而只是直接使用编译好的独立so库。假设我们编译了独立的so库,此时我们也没有别的需求,仅仅调用so库方法使用功能,就是最好的选择。1.JNA的使用需要依赖......
  • Android 常用注解一览
    注解的使用有助于减少样板代码的编写,并提供了一种声明性的方法来描述代码的意图和行为。可以用于实现依赖注入,数据库映射、运行时权限处理等功能。 1.值约束类型注解@Nullable//变量、参数或返回值可能为null@NonNull//变量、参数或返回值不能为null@IntRange//......
  • 在Android应用开发中使用NFC功能
    NFC介绍NFC是指“近场通讯”(NearFieldCommunication),它是一种短距离无线通信技术,允许设备在非接触或极短距离内进行通信。NFC通常用于移动支付、门禁系统、智能标签和其他物联网应用中。Android系统对NFC提供了广泛的支持。通过NFC技术,Android设备可以与其他NFC设备进行通信,读取NF......
  • 解决Android sdk无法下载的问题
    android  SDK Manager下载:https://www.androiddevtools.cn/#android-sdk_r24.4.1-windows.zip 解压后有:SDKManager.exe(参考https://blog.csdn.net/m0_67695717/article/details/131918276) 由于android官网在国内无法正常访问,在安装androidsdk时经常会出现http://dl.......
  • Android 快速实现View的展开和收缩效果
    原文:Android快速实现View的展开和收缩效果-Stars-One的杂货小窝看到一篇文章用到了一个布局的属性animateLayoutChanges就能实现展开和收缩效果,特意记录一下效果代码<?xmlversion="1.0"encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayoutxml......
  • 关于Android studio新版本和NEW UI显示返回按钮的设置
    1.新版Androidstudio问题因为在新版本的AndroidStudio中,默认情况下是没有直接的选项来显示返回上一步按钮在状态栏上的,可以通过以下方法来实现返回上一步的功能:在AndroidStudio的顶部菜单栏中,选择"View"。在"View"菜单中,选择"Appearance"。在"Appearance"子菜单中,勾选"Toolbar"......
  • Android平台RTMP推送|轻量级RTSP服务能力封装代码实现
    好多开发者问我们,有没有针对Android平台RTMP直播推送、轻量级RTSP服务模块的进一步封装,可以更便捷的调用大牛直播SDK接口。为此,我们分享下我们针对Android平台SmartPublisher做的二次封装代码:packagecom.daniulive.smartpublisher;importandroid.util.Log;importjava.nio.By......
  • Android自定义View面试官最爱问的12个高级问题
    引言在Android开发领域,自定义View是一个考察开发者深度功底和创造力的重要方面。本文将从Android面试官的角度出发,深入探讨自定义View面试中常见的12个高级疑难问题,帮助大家更好地准备面试,展示专业技能。自定义View的基础知识问题:请解释自定义View的基本概念及其在Android开发中的......
  • 封神级 Android 音视频开发学习路线
    前言在日常生活中,视频类应用占据了我们越来越多的时间,各大公司也纷纷杀入这个战场,不管是抖音、快手等短视频类型,虎牙、斗鱼等直播类型,腾讯视频、爱奇艺、优酷等长视频类型,还是Vue、美拍等视频编辑美颜类型,总有一款适合你。随着5G普及以及网络资费的下降,音视频的前景是非常广阔的。......
  • 搞Android开发只要记住这几点,不要学得太杂太乱!
    前言作为Android程序员,选择学习什么样的技术?什么技术该不该学?去招聘网站上搜一搜、看看岗位要求就十分清楚了,自己具备的技术和能力,直接影响到你工作选择范围和能不能面试成功。如果想进大厂,那就需要在Android核心技术上面好好准备了,具体可以分下面几个模块来学习。学习模块1、基础......