安卓使用MediaRecorder录制音频的详细使用

这篇具有很好参考价值的文章主要介绍了安卓使用MediaRecorder录制音频的详细使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文首发地址 https://blog.csdn.net/CSqingchen/article/details/134599828
最新更新地址 https://gitee.com/chenjim/chenjimblog

引言

在Android开发过程中,我们经常需要处理音频或视频相关的功能。比如,我们要做一个简单的录音机或者录像机。
在Android中录制音频有两种方式:MediaRecorderAudioRecord。两者的主要区别在于:

  • MediaRecorder提供了一种更高级别的API,能够直接录制并保存为特定的媒体文件格式(如MP3、AAC、AMR等)。其底层实际也使用了AudioRecord
  • AudioRecord提供了更底层的API,可以让我们自定义更多关于音频采样率、通道数等参数。但使用起来会比较复杂。
    本文主要介绍如何在Android中使用MediaRecorder进行录音,并附带一些常见的问题及其解决方案。

使用 MediaRecorder 的步骤

使用MediaRecorder进行录音和录像,主要有以下几个步骤:

  1. 创建一个MediaRecorder对象。
  2. 设置MediaRecorder的各种参数,包括音视频源、输出文件、编码格式等等。
  3. 调用prepare()方法,让MediaRecorder做好开始录制的准备。
  4. 调用start()方法,开始录制。
  5. 在合适的时间调用stop()方法,结束录制。
  6. 最后别忘了调用release()方法,释放资源。

下面是一个简单的录音示例:

import android.media.MediaRecorder;
import android.os.Environment;

public class RecorderAudio {
    public static final int RECORDER_SAMPLERATE = 44100;
    public static final String AUDIO_RECORDER_FOLDER = "AudioRecorder";

    public static MediaRecorder getRecorder() {
        File dir = new File(Environment.getExternalStorageDirectory(), AUDIO_RECORDER_FOLDER);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        File file = new File(dir, System.currentTimeMillis() + ".amr");

        // 创建一个MediaRecorder对象
        MediaRecorder recorder = new MediaRecorder();

        // 设置音频源为麦克风
        recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        // 设置音频输出格式
        recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        // 设置音频编码格式
        recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        // 设置输出文件路径
        recorder.setOutputFile(file.getAbsolutePath());

        return recorder;
    }

    public static void prepare(MediaRecorder recorder) {
        try {
            // 准备录制,初始化 MediaRecorder 的各种状态,并根据配置的信息创建一个 MediaCodec 对象。
            recorder.prepare();
        } catch (IOException e) {
            Log.e("MediaRecorder", "prepare() failed");
        }
    }

    public static void start(MediaRecorder recorder) {
        try {
            // 开始录制,开始真正的录音工作。它会启动一个循环来从 MediaCodec 对象中取出编码后的音频数据,然后写入到指定的文件中。
            recorder.start();
        } catch (RuntimeException e) {
            Log.e("MediaRecorder", "start() failed");
        }
    }

    public static void stop(MediaRecorder recorder) {
        // 停止录制,会让循环停止,并等待剩余的数据全部写入文件
        recorder.stop();
        // 释放掉所有的资源,包括`MediaRecorder`对象自身。
        recorder.release();
        recorder = null;
    }
}

注意:要确保所有的操作都在同一个线程中执行,否则可能会导致崩溃或异常。

如果想要在录制过程中,查看音量大小,可以通过调用getMaxAmplitude()方法来获取一小段时间内音频源数据中的最大振幅。
例如,每秒调用一次,可以得到近似音量值:
int maxAmplitude = recorder.getMaxAmplitude();

常见问题及解决思路

在实际使用MediaRecorder的过程中,可能会遇到各种各样的问题。这里列举一些常见的问题以及解决思路:

无法访问存储卡目录

原因:Android 6.0及以上版本要求用户明确授予应用读取外部存储的权限。

解决:在运行以上代码之前,需要动态申请权限:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) 
        != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, 
        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_STORAGE);
}

并在onRequestPermissionsResult回调方法中处理结果:

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    if (requestCode == REQUEST_WRITE_STORAGE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        startRecording();
    } else {
        Toast.makeText(this, "No storage permission", Toast.LENGTH_SHORT).show();
    }
}

录制的音频文件没有声音

原因:这可能是由于设置的音频源或编码器不正确导致的。

解决:确认已经设置了正确的音频源和编码器,并且麦克风功能正常。

录制过程中出现异常

原因:这可能是由于在多线程环境下操作MediaRecorder导致的。

解决:确保所有对MediaRecorder的操作都在同一个线程中执行。

MediaRecorder无法正常启动

这是最常见的问题。如果MediaRecorder无法正常启动,可能是由于参数设置错误,或者是设备不支持某种格式。
解决这个问题的方法是检查所有的参数设置,确保它们都是正确的,并且符合设备的要求。

录制的音质或者画质很差

这可能是因为采样率或者比特率设置得太低。解决这个问题的方法是提高采样率或者比特率,但是这样会增加文件的大小。

录制的文件无法播放

这可能是因为编码格式设置得不正确,或者设备不支持这种格式。解决这个问题的方法是更换编码格式,选择一种设备支持的格式。

结语

以上就是关于Android中MediaRecorder录制音频的详细使用的一些介绍。希望对你有所帮助。
如果你在使用MediaRecorder的过程中遇到了其他问题,欢迎留言讨论。
如果你觉得本文还不错,可以点赞+收藏。


相关文章
安卓MediaRecorder(1)录制音频的详细使用
安卓MediaRecorder(2)录制源码分析
安卓MediaRecorder(3)音频采集编码写入源码分析
安卓MediaRecorder(4)视频采集编码写入源码分析文章来源地址https://www.toymoban.com/news/detail-812707.html

到了这里,关于安卓使用MediaRecorder录制音频的详细使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaScript基于MediaRecorder录制mp4视频或webm视频并下载,JavaScript实现对video标签进行录制mp4视频或webm视频和下载

    本章实现网页video标签录制mp4视频或webm视频并下载。 视频录制这种计算密集型任务比较重,比较适合放在后台进行实现,本章适合前端任务不太重的短时间视频录制,长时间录制建议还是走后台录制并提供下载地址给网页前端即可。 所以本章只适用于短时间的视频录制并下

    2024年02月06日
    浏览(28)
  • MediaRecorder API的使用

    MediaRecorder API是一个Web API,用于在浏览器中录制音频和视频。以下是使用MediaRecorder API的基本步骤: 1.获取媒体输入设备:首先,你需要获取用户的媒体输入设备(摄像头和/或麦克风)的访问权限。这可以通过调用 navigator.mediaDevices.getUserMedia() 方法来完成。 2.创建MediaRecorde

    2024年02月06日
    浏览(30)
  • Android中使用原生MediaRecorder APi实现录音功能

    一、MediaRecorder简介 MediaRecorder是Android中的一个API,可以用来实现录音功能。它继承自android.media.MediaRecorder类,可以实现音频和视频的录制。 二、MediaRecorder的使用 1、首先,实例化一个MediaRecorder对象,并设置音频源: 2、设置音频的输出格式: 3、设置音频的编码格式: 4、设

    2024年02月09日
    浏览(34)
  • 使用NAudio录制wav音频

    NAudio官网 Unity2019.4.34f1c1 Window10 NAudio 1.10 .Net 3.5 StartRecording方法 启用录制 StopRecording方法 停止录制 DataAvailable 录制中回调 RecordingStopped 录制结束回调 Write方法可存储音频 WaveIn.DeviceCount 返回音频捕获设备数量 台式电脑,可能需要插入耳机才可以启用麦克风 检测到麦克风,显示

    2024年02月12日
    浏览(25)
  • Audacity 使用教程:轻松录制、编辑音频

    Audacity 是一款免费、开源且功能强大的音频录制和编辑软件。它适用于 Windows、Mac 和 Linux 等多种操作系统,适合音乐制作、广播后期制作以及普通用户进行音频处理。本教程将带领大家熟悉 Audacity 的基本操作,学会录制和编辑音频。 首先,访问 Audacity 官网 下载并安装适合

    2024年02月06日
    浏览(25)
  • Android录制音频并使用ijkplayer播放

    在使用AudioRecorder时,需要了解采样率、频道配置和PCM音频格式数据的相关知识; PCM:音频的原始数据(AudioFormat.ENCODING_PCM_16BIT、AudioFormat.ENCODING_PCM_8BIT、AudioFormat.ENCODING_PCM_FLOAT等等);不同的PCM代表不同的位深 采样率:录音设备在单位时间内对模拟信号采样的多少,采样频

    2023年04月09日
    浏览(30)
  • 【FFmpeg】音视频录制 ① ( 查询系统中 ffmpeg 可录制的音视频输入设备 | 使用 ffmpeg 命令录制音视频数据 | 录制视频数据命令 |录制音频数据| 同时录制音频和视频数据命令 )

    在 Windows 系统中 , 使用 ffmpeg 命令 录制 音视频 , 需要先获取 系统的 音视频设备 信息 , 录制 音视频 本质上是从 系统音视频设备 中获取数据 ; 执行 命令 , 可以获取 系统中 ffmpeg 可用的 DirectShow 音视频输入设备 ; 命令参数解析 : -list_devices true : 列出所有 ffmpeg 的 指定类型的可

    2024年04月25日
    浏览(70)
  • 安卓使用VLC播放视频,实现截图和录制功能

    VLC是一款非常强大的开源媒体播放器,由VideoLAN组织开发和维护。它最初是为学校项目开发的,但现在已经成为全球最流行的媒体播放器之一。 VLC具有以下几个主要特点: 多平台支持:VLC支持几乎所有主流的操作系统,包括Windows、macOS、Linux、iOS和Android。这意味着你可以在几

    2024年02月09日
    浏览(55)
  • Android多媒体功能开发(11)——使用AudioRecord类录制音频

    AudioRecord类优点是能录制到缓冲区,能够实现边录边播(AudioRecord + AudioTrack)以及对音频的实时处理(如QQ电话)。缺点是输出是PCM格式的原始采集数据,如果直接保存成音频文件,不能够被播放器播放,所以必须用代码实现数据编码以及压缩。 使用AudioRecord录音的基本步骤是

    2023年04月09日
    浏览(29)
  • uniapp - [微信小程序] 超详细实时录音功能,录制外部声音及播放上传到服务器(支持录音完毕生成 mp3、试听音频(带进度条)、暂停录音、重新录音、限制录音最大时长、自定义音频名称等功能)

    网上的教程都太乱了,功能不好用且一堆 BUG,没有注释很难改造示例为自己用。 本文实现了 uniapp 微信小程序平台,授权麦克风进行录音并保存为音频的功能,内置播放器可播放录音文件, 您直接复制组件源码,稍微改改样式就能直接应用到您的项目中去了。 如下图安卓、

    2024年02月12日
    浏览(161)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包