安卓音频输出采样率_Android AudioRecord每帧20ms数据量持续采集

本文介绍了如何使用Android的AudioRecord类以每20毫秒为单位持续采集音频数据。讨论了音频采样率、量化位数、声道数等关键概念,并提供了计算每帧数据量的公式。示例代码展示了如何初始化AudioRecord、配置参数以及读取和处理音频数据。
摘要由CSDN通过智能技术生成

前沿

需求:采集音频数据,按照每帧20ms的数据持续输出.

很显然需要用到AudioRecord,可以输出未处理的裸PCM数据.

PCM:PCM(Pulse Code Modulation)也被称为脉冲编码调制。PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准的数字音频数据。

如果需要知道详细的 ====> www.baidu.com

Android 音频相关API

注意:MediaPlayer在播放音频时

1、在framework层还是会创建AudioTrack

2、解码后的PCM数流传递给AudioTrack

3、AudioFlinger进行混音

4、传递音频给硬件播放出来

AudioRecord

基础知识

采样率

“音频采样率” 是指录音设备在一秒钟内对声音信号的采样次数。常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

通俗理解:每秒录取声音的次数。

注意:手机无法支持所有的采样率,Android中能保证的是44.1KHz全支持.其他的有可能在部分手机中不支持.

量化精度(采样位数)

“采样位数”越大表示的值的范围也就越大 "采样位数"可以理解为采集卡处理声音的解析度。这个数值越大,解析度就越高,录制和回放的声音就越真实。连续的模拟信号按一定的采样频率经数码脉冲取样后,每一个离散的脉冲信号被以一定的量化精度量化成一串二进制编码流,这串编码流的位数即为采样位数,也称为"量化精度"。常见的位数16bit和32bit.

通俗理解:每秒录取声音的精度,就像画面的分辨率,越高声音越真实

* 声道数

声道数分别有:单声道的声道数为1个声道;双声道的声道数为2个声道;立体声道的声道数默认为2个声道;立体声道(4声道)的声道数为4个声道。

常见使用的是:单声道(MONO) 和 双声道 (STEREO)

通俗理解:声道数表示录制或者播放音频的声音源.

码率

比特率(又叫做位速率或者码率)是指每秒传送的比特(bit)数。单位为bps(Bit Per Second),比特率越高,传送的数据越大。比特率表示经过编码(压缩)后的音、视频数据每秒钟需要用多少个比特来表示,而比特就是二进制里面最小的单位,要么是0,要么是1。比特率与音、视频压缩的关系,简单的说就是比特率越高,音、视频的质量就越好,但编码后的文件就越大;如果比特率越少则情况刚好相反。 若作为一种数字音乐压缩效率的参考性指标,比特率表示单位时间(1秒)内传送的比特数bps(bit per second,位/秒)的速度。通常使用kbps(通俗地讲就是每秒钟1000比特)作为单位。CD中的数字音乐比特率为1411.2kbps(也就是记录1秒钟的cd音乐,需要1411.2×1000比特的数据),音乐文件的BIT RATE高是意味着在单位时间(1秒)内需要处理的数据量(BIT)多,也就是音乐文件的音质好的意思。但是,BIT RATE高时文件大小变大,会占据很多的内存容量,音乐文件最常用的bit rate是128kbps,MP3文件可以使用的一般是8-320kbps,但不同MP3机在这方面支持的范围不一样,大部分的是32-256Kbps,这个指数当然是越广越好了,不过320Kbps是暂时最高等级了。<1B字节= 8 bit位 / 1024B = 1M> (那一秒的CD音乐需要 1411.2 / 8 = 176.4KB/s的空间,那四分钟的CD音乐需要 (1411.2kbps * 4 * 60)/ 8 / 1024 = 41.34373M)

码率计算公式

基本的算法是:【码率】(kbps)=【文件大小】(字节)X8/【时间】(秒)× 1000

音频文件专用算法:【比特率】(kbps)=【量化采样点】(kHz)×【位深】(bit/采样点)×【声道数量】(一般为2)

数据源

/**默认声音**/

public static final int DEFAULT = 0;

/**麦克风声音*/

public static

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android上使用AudioRecord设置输出路径,可以使用AudioRecord类来录制音频,然后使用FileOutputStream类将录制的音频保存到指定路径的文件中。下面是一个简单的示例代码: ``` // 音频源 int audioSource = MediaRecorder.AudioSource.MIC; // 采样 int sampleRateInHz = 44100; // 声道数 int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 音频格式 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 缓冲区大小 int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); // 创建AudioRecord对象 AudioRecord recorder = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes); // 设置输出文件路径 String filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.pcm"; FileOutputStream os = new FileOutputStream(filePath); // 开始录制 recorder.startRecording(); // 录制数据 byte[] buffer = new byte[bufferSizeInBytes]; while (recorder.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) { int len = recorder.read(buffer, 0, bufferSizeInBytes); os.write(buffer, 0, len); } // 停止录制 recorder.stop(); // 释放资源 recorder.release(); os.flush(); os.close(); ``` 在上述代码中,`AudioRecord`类的构造函数设置音频源、采样、声道数、音频格式和缓冲区大小。`getMinBufferSize()`方法可以获取最小的缓冲区大小。`startRecording()`方法开始录制,`read()`方法读取录制的数据,`stop()`方法停止录制,`release()`方法释放资源。`FileOutputStream`类的构造函数设置输出文件路径,`write()`方法将数据写入文件中。 注意,在使用AudioRecord录制音频前,需要添加录音权限。可以在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ``` 其中`RECORD_AUDIO`权限用于录音,`WRITE_EXTERNAL_STORAGE`权限用于保存文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值