Android录音实现——使用AtudioRecord

本文介绍了在Android中实现录音的三种方式,重点讨论使用AudioRecord录制原始音频流的过程。通过AudioRecord配置音频源、采样率、通道和格式,以及利用MediaCodec进行音频编码和MediaMuxer输出到文件,实现复杂但灵活的录音功能。
摘要由CSDN通过智能技术生成

  最近在做android中录音录屏的功能,以前也是从未接触多媒体这块,然后从不会到一点点的摸索,参考大神们的代码,到现在算是入门了,今天就总结一下android中的录音部分,后面总结录屏。

     在android中实现录音共有三种方式:

  • 通过意图捕获音频。这是android中最简单的一种方式,就是通过一个意图利用已有的、提供录制功能的应用程序。android系统中都会再带一个录音程序,我们可以通过意图来调用这个录音程序,从而实现录音功能。
  • MediaRecorder类实现录音。MediaRecorder类是android中用来捕获音频和视频的多媒体类,通过这种方式录制音频也是比较简单的。通过设置音频源,输出格式,设置音频编解码器进行编解码,最后将音频输出到文件中。
  • AudioRecord录制原始音频。这种方式相对于前两种比较麻烦,需要我们自己处理的事情较多,因此也是最灵活的。AudioRecord允许访问原始音频流,这种音频流是不能直接进行播放的,需要使用AudioTrack来进行播放原始音频。如果要使用这种方式来将音频保存到文件中,并可像MP3文件一样直接打开的话,就需要对原始音频进行编解码,然后用混合器(Muxer)进行输出到文件中。

   我所用到的是第三种方式来实现录音的,因为我需要将音频添加到视频中去,因此得选用第三中最灵活的方式。

   使用AudioRecord录制音频并不难,但是要将原始音频进行编码并输出到一个可播放的文件中就有点麻烦。先说说实现这个功能的大概思路:我们需要两个任务,一个任务用来进行采集音频数据,在采集音频数据的同时将音频数据不断的发送给编码的任务,将这些数据按照指定格式进行编码,然后输出到文件中。

   具体实现:

  • 使用AudioRecord捕获原始音频流。采集工作很简单,我们只需要构造一个AudioRecord对象,然后传入各种不同配置的参数即可。

     1.音频源:我们可以使用麦克风作为采集音频的数据源。

     2.采样率:一秒钟对声音数据的采样次数,采样率越高,音质越好。

     3.音频通道:单声道,双声道等,

     4.音频格式:一般选用PCM格式,即原始的音频样本。

     5.缓冲区大小:音频数据写入缓冲区的总数,可以通过AudioRecord.getMinBufferSize获取最小的缓冲区。(将音频采集到缓冲区中然后再从缓冲区中读取)。

   

<span style="font-family:Courier New;font-size:14px;">package com.creativeboy.audioandvideocapture.encoder;

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaCodec;
import android.media.MediaCodecInfo;
import android.media.MediaFormat;
import android.media.MediaMuxer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.util.Log;

import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.Byt
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值