All Projects → mxdldev → AudioRecorder

mxdldev / AudioRecorder

Licence: other
Android 音频录制、播放,最近在项目要用到录音的功能,研究了几天,看了很多的资料,今天在这里分享记录一下以便回头查看。Android给我们提供了两个录音的API接口:MediaRecord、AudioRecoder

Programming Languages

java
68154 projects - #9 most used programming language

Projects that are alternatives of or similar to AudioRecorder

Android Audiorecorder App
Android application to record audio. RxJava2, Dagger2, MVP, RoomDb.
Stars: ✭ 180 (+682.61%)
Mutual labels:  audio-player
React Native Audio Recorder Player
react-native native module for audio recorder and player.
Stars: ✭ 248 (+978.26%)
Mutual labels:  audio-player
strumpract
Various tools for musicians.
Stars: ✭ 20 (-13.04%)
Mutual labels:  audio-player
Lmmediaplayer
A video and audio player with replaceable UI component.
Stars: ✭ 183 (+695.65%)
Mutual labels:  audio-player
Swift Radio Pro
Professional Radio Station App for iOS!
Stars: ✭ 2,644 (+11395.65%)
Mutual labels:  audio-player
flex-originals
🎧 A video and audio streaming web application
Stars: ✭ 36 (+56.52%)
Mutual labels:  audio-player
Muzonchik
iOS Music App that let you search, download and play music
Stars: ✭ 170 (+639.13%)
Mutual labels:  audio-player
TonUINO
Alternative TonUINO Firmware
Stars: ✭ 112 (+386.96%)
Mutual labels:  audio-player
React Audio Component
A beautiful example project demonstrating how to build an audio player in React.
Stars: ✭ 239 (+939.13%)
Mutual labels:  audio-player
parlatype
GNOME audio player for transcription
Stars: ✭ 151 (+556.52%)
Mutual labels:  audio-player
Jcplayer
🎵 A simple audio player for Android applications.
Stars: ✭ 209 (+808.7%)
Mutual labels:  audio-player
React H5 Audio Player
React audio player component with UI. It provides time indicator on both desktop and mobile devices.
Stars: ✭ 226 (+882.61%)
Mutual labels:  audio-player
minimal-player
This is a minimal, clean audio/music/mp3 player with spinning cover images, built with jQuery, TweenMax.js and SVG images.
Stars: ✭ 48 (+108.7%)
Mutual labels:  audio-player
Fradioplayer
A simple radio player framework for iOS, macOS, tvOS.
Stars: ✭ 183 (+695.65%)
Mutual labels:  audio-player
waveplayer.js
An HTML5 based audio player with a waveform view
Stars: ✭ 73 (+217.39%)
Mutual labels:  audio-player
Audiomotion.js
High-resolution real-time spectrum analyzer and music player using Web Audio and Canvas APIs.
Stars: ✭ 177 (+669.57%)
Mutual labels:  audio-player
dart vlc
🎞 Flutter audio / video playback, broadcast & recording library for Windows & Linux.
Stars: ✭ 439 (+1808.7%)
Mutual labels:  audio-player
audioStreamDemo
A music player created in swift using AVPlayer to stream audio from server.
Stars: ✭ 33 (+43.48%)
Mutual labels:  audio-player
songturtle
🐢 Play, slow down, and loop sections of audio files in the browser 🐢
Stars: ✭ 26 (+13.04%)
Mutual labels:  audio-player
jplayer-skin-audiocheck
A responsive HTML5 jPlayer skin with playlist.
Stars: ✭ 16 (-30.43%)
Mutual labels:  audio-player

音频录制、播放

最近在项目要用到录音的功能,研究了几天,看了很多的资料,今天在这里分享记录一下以便回头查看。Android给我们提供了两个录音的API接口:MediaRecord、AudioRecoder

MediaRecord:

1. 优点:

  • 可以录制音频、视频
  • 提供了录制、压缩、编码等功能
  • 使用简单方便,几行代码就可实现

2. 缺点:

  • 可以录制的视频格式较少
  • 录制的过程中不能暂停
  • 不能实时处理音频数据(实时对讲的话用它就不适合了)

3. 注意:

  • 模拟器不支持音频、视频录制,只能在真机上测试
  • 录制一定打开录制权限 <uses-permission android:name="android.permission.RECORD_AUDIO" />
  • Android 9(API级别28)或更高,应用程序在后台运行不能访问麦克风

4.使用:

初始化
 public SuperMediaManager(Context context) {
        mMediaRecorder = new MediaRecorder();
        //设置音频的来源
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        //设置音频的输出格式
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//设置输出文件的格式
        //设置音频文件的编码
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//设置音频文件的编码

        mMediaPlayer = new MediaPlayer();
    }
开始录制
public void startRecord(String filepath) {
        Log.v(TAG, "startRecord startRecord");
        Log.v(TAG, "file path:" + filepath);
        //如果正在录制,就返回了
        if(isRecording){
            return;
        }
        mMediaRecorder.setOutputFile(filepath);
        try {
            //录制前准备工作
            mMediaRecorder.prepare();
            //开始录制
            mMediaRecorder.start();

            isRecording = true;
            Log.v(TAG, "startRecord record succ...");
        } catch (Exception e) {
            Log.v(TAG, "startRecord record fail:" + e.toString());
        }
}
停止录制
public void stopRecord() {
        if (mMediaRecorder != null && isRecording) {
            //停止录制
            mMediaRecorder.stop();
            //重新开始
            mMediaRecorder.reset();//注意:可以通过返回setAudioSource()步骤来重用该对象
            //mMediaRecorder.release();注意:这个对象不能再次被使用,如果此次再次录制,就会报错
            isRecording = false;
        }
    }
录制监听
  • 录制错误监听:MediaRecorder.OnErrorListener
onError(MediaRecorder mr, int what, int extra)

MEDIA_RECORDER_ERROR_UNKNOWN:未知错误 MEDIA_ERROR_SERVER_DIED:媒体服务卡死,在这种情况下,应用程序必须释放MediaRecorder对象并实例化一个新对象

  • 录制警告信息监听:MediaRecorder.OnInfoListener
onInfo(MediaRecorder mr, int what, int extra)	

MediaRecorder.MEDIA_RECORDER_INFO_UNKNOWN:未知的错误
MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED:录制超时了 MediaRecorder.MEDIA_RECORDER_INFO_MAX_FILESIZE_REACHED:录制文件超过指定大小了,需要setNextOutputFile(File)指定一个新的文件进行存储

播放
public void play(String filepath) {
        try {
            //如果正在播放,然后在播放其他文件就直接崩溃了
            if(mMediaPlayer.isPlaying()){
                return;
            }
            //设置数据源
            mMediaPlayer.setDataSource(filepath);
            //这个准备工作必须要做
            mMediaPlayer.prepare();
            mMediaPlayer.start();
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    //播放完毕再重置一下状态,下次播放可以再次使用
                    mp.reset();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

录制状态图:

AudioRecoder:

优点:

  • 专业的音频录制API,支持实时录制、支持暂停等,以流的形式进行录制和播放的操作

缺点:

  • 录制格式为pcm,在播放器不能直接播放,需要编码和压缩

使用

初始化
 public SuperMediaManager(Context context) {
        mMediaRecorder = new MediaRecorder();
        //设置音频的来源
        mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        //设置音频的输出格式
        mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);//设置输出文件的格式
        //设置音频文件的编码
        mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);//设置音频文件的编码

        mMediaPlayer = new MediaPlayer();
    }
开始录制
 public void startRecord(String filepath) {
        Log.v(TAG, "startRecord startRecord");
        Log.v(TAG, "file path:" + filepath);
        //如果正在录制,就返回了
        if(isRecording){
            return;
        }
        mMediaRecorder.setOutputFile(filepath);
        try {
            //录制前准备工作
            mMediaRecorder.prepare();
            //开始录制
            mMediaRecorder.start();

            isRecording = true;
            Log.v(TAG, "startRecord record succ...");
        } catch (Exception e) {
            Log.v(TAG, "startRecord record fail:" + e.toString());
        }
    }
停止录制
public void stopRecord() {
        if (mMediaRecorder != null && isRecording) {
            //停止录制
            mMediaRecorder.stop();
            //重新开始
            mMediaRecorder.reset();//注意:可以通过返回setAudioSource()步骤来重用该对象
            //mMediaRecorder.release();注意:这个对象不能再次被使用,如果此次再次录制,就会报错
            isRecording = false;
        }
    }
播放
public void play(String filepath) {
        try {
            //如果正在播放,然后在播放其他文件就直接崩溃了
            if(mMediaPlayer.isPlaying()){
                return;
            }
            //设置数据源
            mMediaPlayer.setDataSource(filepath);
            //这个准备工作必须要做
            mMediaPlayer.prepare();
            mMediaPlayer.start();
            mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {
                    //播放完毕再重置一下状态,下次播放可以再次使用
                    mp.reset();
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

问题反馈

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

关于作者

  var geduo_83 = {
    nickName  : "geduo_83",
    site : "http://www.weibo.com/geduo83"
  }
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].