二、Android两种录音方式 1、音频采集简介 Android提供了两个API用于录音的实现:MediaRecorder 和AudioRecord。 (1)....在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取AudioRecord 对象的录音数据。...音频采集工作,需要构造一个AudioRecord对象,然后传入各种不同配置的参数。 2、利用AudioRecord实现Android录音的流程 (1)....创建一个数据流,一边从AudioRecord中读取声音数据到初始化的buffer,一边将buffer中数据导入数据流,生成PCM格式文件; (5)....AudioRecorder录音声音数据从音频硬件中被读出,编码格式为 PCM格式,PCM是英文Pulse-codemodulation的缩写,中文译名是脉冲编码调制。
Android 录音 录音简介 Android提供了两个API用于录音的实现:MediaRecorder 和AudioRecord。...AudioRecord:主要实现对音频实时处理以及边录边播功能,相对MediaRecorder比较专业,输出是PCM语音数据,如果保存成音频文件,是不能够被播放器播放的,所以必须先写代码实现数据编码以及压缩...在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取 AudioRecord 对象的录音数据。...音频通道:单声道,双声道等, 音频格式:一般选用PCM格式,即原始的音频样本。 缓冲区大小:音频数据写入缓冲区的总数,可以通过AudioRecord.getMinBufferSize获取最小的缓冲区。...int bufferSizeInBytes = 0; // 录音对象 private AudioRecord audioRecord; // 录音状态 private Status status =
* See {@link AudioFormat#ENCODING_PCM_8BIT}, {@link AudioFormat#ENCODING_PCM_16BIT}, *...and {@link AudioFormat#ENCODING_PCM_FLOAT}...请见ENCODING_PCM_16BIT和ENCODING_PCM_8BIT。...* The format specified in the AudioRecord constructor should be * {@link AudioFormat#ENCODING_PCM...然后将数据添加到pcm队列中。后面的逻辑就和前面一篇文章逻辑一样了。
文章目录 一、 FAAC 头文件与静态库拷贝到 Android Studio 二、 CMakeList.txt 构建脚本配置 三、 Java 层 AudioRecord 音频采样 PCM 格式 四、 Java...层 AudioRecord 音频采样 PCM 格式代码示例 一、 FAAC 头文件与静态库拷贝到 Android Studio ---- 将 PCM 音频采样编码成 AAC 格式 , 需要使用 FAAC..., AudioFormat.ENCODING_PCM_16BIT) * 2; ② 创建 AudioRecord 对象 : AudioRecord 构造函数需要传入 音频来源 , 采样率 , 声道配置 ,...PCM 音频采样线程 : ① 独立线程封装 : 音频采样需要持续进行操作 , 并且该操作非常耗时 , 肯定要封装在一个独立线程中完成 ; ② 开始采样 : 调用 AudioRecord 对象的 startRecording.... ); } // 停止录音采样 mAudioRecord.stop(); } } 四、 Java 层 AudioRecord 音频采样 PCM
本文实例为大家分享了Android实现伴奏录音合成MP3的具体代码,供大家参考,具体内容如下 基本实现思路如下: 1.利用android自带的录音类(AudioRecord)实现录音. /** * 播放伴奏...PCM 8位每个样本。不一定能得到设备支持。...= null) { try { if (mRecorder.getState() == AudioRecord.STATE_INITIALIZED) { // 关闭录音 mRecorder.stop()...,调用开源工具(Mad)实现PCM合成输出到MP3文件....String recordPCMPath = SongUtil.getRecordSingPCMPath(songId); //录音生成的PCM文件 String accompanyPCMPath =
本文实例讲述了Android编程检测手机录音权限是否打开的方法。...PCM 8位每个样本。不一定能得到设备支持。...IllegalStateException e){ e.printStackTrace(); } /** * 根据开始录音判断是否有录音权限 */...= AudioRecord.RECORDSTATE_RECORDING) { return false; } audioRecord.stop(); audioRecord.release...( SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_IN_DEFAULT, AudioFormat.ENCODING_PCM_16BIT); private AudioRecord
CHANNEL_CONFIGURATION_MONO为单声道 */ public static int channelConfig = AudioFormat.CHANNEL_IN_STEREO; /** * 音频数据格式:PCM...PCM 8位每个样本。不一定能得到设备支持。...*/ public static int audioFormat = AudioFormat.ENCODING_PCM_16BIT; /** * 缓冲区字节大小 */ public...static int bufferSizeInBytes = 0; public static AudioRecord audioRecord; /** * 判断是是否有录音权限...e) { e.printStackTrace(); } /** * 根据开始录音判断是否有录音权限s */ if (audioRecord.getRecordingState
本篇介绍 本篇介绍下AudioTrack和AudioRecord的使用,通过AudioRecord录音,通过AudioTrack播放录制的音频。...AudioRecord的使用 AudioRecord负责采集音频,下面是一个录音的例子: private void startRecord() { int sampleRate..., AudioFormat.ENCODING_PCM_8BIT); recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 44100...AudioTrack的使用 AudioTrack负责播放pcm数据,下面的代码是将刚采集的pcm播放出来 AudioAttributes audioAttributes = new AudioAttributes.Builder...查看pcm数据 使用audacity就可以查看pcm数据,(下载路径 https://www.audacityteam.org/) 效果如下: image.png 完整代码路径(https:/
本篇文章你将学到: AudioRecord 音频的采集 生成 PCM 文件 PCM 转化为 WAV 文件 PCM 转化为 AAC 文件 附上正常运行 demo 源码 使用 AudioRecord 实现录音生成...PCM 文件 AudioRecord 是 Android 系统提供的用于实现录音的功能类,要想了解这个类的具体的说明和用法,我们可以去看一下官方的文档: AndioRecord类的主要功能是让各种 Java...在录音过程中,应用所需要做的就是通过后面三个类方法中的一个去及时地获取AudioRecord对象的录音数据....开始录音的时候,AudioRecord需要初始化一个相关联的声音buffer, 这个buffer主要是用来保存新的声音数据。这个buffer的大小,我们可以在对象构造期间去指定。...PCM:PCM(Pulse Code Modulation----脉码调制录音)。所谓PCM录音就是将声音等模拟信号变成符号化的脉冲列,再予以记录。
音频的捕获(AudioRecord) PCM(Pulse Code Modulation)--脉冲编码调制,今天只说PCM 主要过程是将话音、图像等模拟信号每隔一定时间进行取样,使其离散化, 同时将抽样值按分层单位四舍五入取整量化...,手离开时停止录音,最后在左边显示录音时长,素材在源码里 ?..._16BIT;//输出格式:16位pcm private AudioRecord mAudioRecord;//录音机 private int mMinBufferSize = 2048...().createFile("pcm录音/" + StrUtil.getCurrentTime_yyyyMMddHHmmss() + ".pcm"); mFos = new FileOutputStream...录音/20190103140621.pcm") 最后提一下:希望大家分清编码和格式(拓展名) 这里我将文件名改为20190103140621.toly也正常播放,文件中的内容(流)不变 AudioTrack
前言 录音采用的是AudioRecord,通过MediaCodec进行编码,用MediaMuxer合成输出MP4文件。 1....44100, channelConfig: Int = AudioFormat.CHANNEL_IN_STEREO, audioFormat: Int = AudioFormat.ENCODING_PCM...传入AudioFormat.ENCODING_PCM_16BIT。...开始录音时,启动一个线程 private val recordRunnable = Runnable { val data = ByteArray(minSize) //AudioRecord开始录音...AudioRecord得到的音频数据格式是pcm的,一般情况下无法bofang(可以通过AudioTrack播放),所以我们需要一次编码转换,这里用到的就是MediaCodec,MediaCodec这里我封装在
程序中的录音文件之前直接保存的是 .pcm格式,一直也相安无事,用的挺好。最近有一个webview中需要加载录音文件,出现了不兼容的问题,所以需要把 .pcm格式文件转换为 .wav格式。...PCM PCM(Pulse Code Modulation—-脉码调制录音)。所谓PCM录音就是将声音等模拟信号变成符号化的脉冲列,再予以记录。...PcmToWavUtil package com.hgb.mytest; import android.media.AudioFormat; import android.media.AudioRecord..._16BIT; public PcmToWavUtil() { this.mBufferSize = AudioRecord.getMinBufferSize(mSampleRate, mChannel...this.mSampleRate = sampleRate; this.mChannel = channel; this.mEncoding = encoding; this.mBufferSize = AudioRecord.getMinBufferSize
sampleRate = 44100; //单声道输入 int channelConfig = AudioFormat.CHANNEL_IN_MONO; //设置pcm...(脉冲编码调制 Pulse Code Modulation)编码格式 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; //计算...AudioRecord 内存buffer最小的大小 int minBufferSize = AudioRecord.getMinBufferSize(sampleRate,channelConfig...,audioFormat); //创建AudioRecord对象 mAudioRecord = new AudioRecord(audioSource,sampleRate,channelConfig...audioFormat = AudioFormat.ENCODING_PCM_16BIT; //流模式 int mode = AudioTrack.MODE_STREAM;
---- 一、AudioRecord和MediaRecorder,AudioTrack和MediaPlayer 0.到现在接触了四个类: 第一天:AudioRecord(录音)、AudioTrack...四类.png ---- 1.AudioRecord(基于字节流录音) 优点: 对音频的实时处理,适合流媒体和语音电话 缺点: 输出的是PCM的语音数据,需要自己处理字节数据 如果保存成音频文件不能被播放器播放...编码格式.png ---- 2.MediaRecorder(基于文件录音) 优点: MediaRecorder录制的音频文件是经过压缩后的 已集成了录音,编码,压缩等,支持一些的音频格式文件(.arm,..._16BIT;//输出格式:16位pcm String inPath = "/sdcard/pcm录音/keke.pcm"; String outPath = "/sdcard/pcm录音/keke.wav...录音/20190107075814.pcm", (int) (44100 * rate)); }); ---- 五、JNI的一些简单认识 1.新建一个支持C++的Android项目,看一下有哪里不同 ?
当用户超过一定的时候没有说话,就停止录音,并把录音发送到语音识别服务器,获取语音识别结果。本教程就是解决如何检测用户是否停止说话,我们使用的是WebRTC架构的源代码中的vad代码实现的。...int mMinBufferSize = AudioRecord.getMinBufferSize(16000, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM..._16BIT); AudioRecord mRecorder = new AudioRecord(MediaRecorder.AudioSource.MIC, 16000, AudioFormat.CHANNEL_IN_MONO..., AudioFormat.ENCODING_PCM_16BIT, mMinBufferSize * 2); mMinBufferSize = 320; short[] audioData = new...Log.d(TAG, "=====当前无声音"); } } else { break; } } } 最后别忘了添加录音权限
如何获取最初的音频数据 AudioRecord类可以直接帮助我们获取音频数据。 3. 如何进行转换 网上有代码是先录制后转为MP3,这种效率比较低。...实现代码介绍 既然是录音,我们上面也提到了需要使用AudioRecord类,我们就从这个类的构造器开始说起 构造器 public AudioRecord (int audioSource, int...audioFormat : 有ENCODING_PCM_16BIT和ENCODING_PCM_8BIT两种音频编码格式。同样的,官方声明只有ENCODING_PCM_16BIT是所有设备都支持的。...我们需要另外一个线程,即数据编码线程来专门进行MP3编码,而当前的录音读取线程只负责读取录音PCM数据。 有了两条线程,我们还需要确认一点,什么时候编码线程开始处理数据?...缓冲区的大小 其实AudioRecord类提供了一个方便的方法getMinBufferSize来获取缓冲区的大小。
这里我们需要通过AudioRecord采集PCM数据,然后把采集到的数据送进编码器进行编码。所以首先我们要初始化一个AudioRecord对象。 要使用录音,需要申请录音权限。...最后通过循环不停的从AudioRecorder中读取PCM数据,并通过回调把PCM数据发送给MediaCodec进行编码。.../** * 初始化AudioRecord对象 */ private fun config(){ /** * 计算缓存PCM数据的Buffer最小大小 * parameter.audio.sampleRateInHz...= 1024 * parameter.video.fps = 30 * */ val minBufferSize = AudioRecord.getMinBufferSize...数据发Buffer */ buffer = ByteArray(parameter.audio.samplePerFrame) /** * 新建AudioRecord
本文目的:使用 AudioRecord 和 AudioTrack 完成音频PCM数据的采集和播放,并读写音频wav文件 准备工作 Android提供了AudioRecord和MediaRecord。...MediaRecord可选择录音的格式。 AudioRecord得到PCM编码格式的数据。AudioRecord能够设置模拟信号转化为数字信号的相关参数,包括采样率和量化深度,同时也包括通道数目等。...2CH 不定 量化数据 AudioRecord AudioRecord可实现从音频输入设备记录声音的功能。得到PCM格式的音频。...AudioRecordThread 使用AudioRecord录制PCM文件,可选择同时生成wav文件 AudioTrackPlayThread 使用AudioTrack播放PCM或wav音频文件的线程...wav文件的header /** * 音频录制器 * 使用 AudioRecord 和 AudioTrack API 完成音频 PCM 数据的采集和播放,并实现读写音频 wav 文件 * 检查权限
二、为什么要采用Lame 在Android上开发过录音功能的同学应该知道,在Android上要实现录音功能,有2种方式。...一种是采用AudioRecord的方式,AudioRecord录制的直接是原始的pcm数据,另一种方式就是采用MediaRecord,可以录制类似amr、aac格式的文件。...这里贴下MediaRecord目前支持的录音格式,可以看到目前是不支持mp3的。那这时我们想要编码mp3的文件,就得借助lame来实现了。...这里给出的一个例子是将pcm格式的文件编码mp3格式的文件。...应用代码调用的时候,就是传入对应的pcm源文件和需要生成的mp3文件路径,还有pcm源文件的格式信息(采用率、通道数、编码数据位数)。
领取专属 10元无门槛券
手把手带您无忧上云