`
_Leo_Lee_
  • 浏览: 5596 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Android录音功能和播放录音功能的示例源码

阅读更多
package com.android.audiorecordtest;
import android.app.Activity;
import android.widget.LinearLayout;
import android.os.Bundle;
import android.os.Environment;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Context;
import android.util.Log;
import android.media.MediaRecorder;
import android.media.MediaPlayer;
import java.io.IOException;
public class AudioRecordTest extends Activity
{
    private static final String LOG_TAG = "AudioRecordTest";
    private static String mFileName = null;
    private RecordButton mRecordButton = null;
    private MediaRecorder mRecorder = null;
    private PlayButton   mPlayButton = null;
    private MediaPlayer   mPlayer = null;
    private void onRecord(boolean start) {
        if (start) {
            startRecording();
        } else {
            stopRecording();
        }
    }
    private void onPlay(boolean start) {
        if (start) {
            startPlaying();
        } else {
            stopPlaying();
        }
    }
    private void startPlaying() {
        mPlayer = new MediaPlayer();
        try {
            mPlayer.setDataSource(mFileName);
            mPlayer.prepare();
            mPlayer.start();
        } catch (IOException e) {
            Log.e(LOG_TAG, "prepare() failed");
        }
    }
    private void stopPlaying() {
        mPlayer.release();
        mPlayer = null;
    }
    private void startRecording() {
        mRecorder = new MediaRecorder();
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mRecorder.setOutputFile(mFileName);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
        try {
            mRecorder.prepare();
        } catch (IOException e) {
            Log.e(LOG_TAG, "prepare() failed");
        }
        mRecorder.start();
    }
    private void stopRecording() {
        mRecorder.stop();
        mRecorder.release();
        mRecorder = null;
    }
    class RecordButton extends Button {
        boolean mStartRecording = true;
        OnClickListener clicker = new OnClickListener() {
            public void onClick(View v) {
                onRecord(mStartRecording);
                if (mStartRecording) {
                    setText("Stop recording");
                } else {
                    setText("Start recording");
                }
                mStartRecording = !mStartRecording;
            }
        };
        public RecordButton(Context ctx) {
            super(ctx);
            setText("Start recording");
            setOnClickListener(clicker);
        }
    }
    class PlayButton extends Button {
        boolean mStartPlaying = true;
        OnClickListener clicker = new OnClickListener() {
            public void onClick(View v) {
                onPlay(mStartPlaying);
                if (mStartPlaying) {
                    setText("Stop playing");
                } else {
                    setText("Start playing");
                }
                mStartPlaying = !mStartPlaying;
            }
        };
        public PlayButton(Context ctx) {
            super(ctx);
            setText("Start playing");
            setOnClickListener(clicker);
        }
    }
    public AudioRecordTest() {
        mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
        mFileName += "/audiorecordtest.3gp";
    }
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        LinearLayout ll = new LinearLayout(this);
        mRecordButton = new RecordButton(this);
        ll.addView(mRecordButton,
            new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                0));
        mPlayButton = new PlayButton(this);
        ll.addView(mPlayButton,
            new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.WRAP_CONTENT,
                ViewGroup.LayoutParams.WRAP_CONTENT,
                0));
        setContentView(ll);
    }
    @Override
    public void onPause() {
        super.onPause();
        if (mRecorder != null) {
            mRecorder.release();
            mRecorder = null;
        }
        if (mPlayer != null) {
            mPlayer.release();
            mPlayer = null;
        }
    }
}

 

分享到:
评论

相关推荐

    Android 录音程序源码.zip

    这个“Android录音程序源码.zip”文件提供了一个完整的Android应用项目,旨在帮助开发者学习如何在自己的应用中实现录音功能。源码通常包含了项目结构、布局文件、Java代码以及必要的资源配置,为深入理解Android...

    android 安卓录音源码

    在Android平台上,录音功能是应用程序开发中的一个常见需求。这篇文档将深入解析“android 安卓录音源码”,...同时,源码的可运行性意味着它可以作为一个良好的学习和参考资源,帮助开发者快速掌握Android录音机制。

    Android录音、播放功能最佳学习项目app_安卓源码.zip

    本项目“Android录音、播放功能最佳学习项目”提供了一个完善的源码示例,帮助开发者深入理解如何在Android中实现这些功能。下面将详细探讨这个项目中涉及的关键知识点。 1. **媒体框架(Media Framework)** ...

    Android 录音程序源码.rar

    8. **读取和播放录音**: 录音完成后,可以使用MediaPlayer类来播放录音文件。类似MediaRecorder,MediaPlayer也需要进行初始化、播放和释放资源的操作。 9. **异常处理**: 录音过程中可能出现各种错误,如文件...

    安卓Android源码——简易录音机.zip

    "安卓Android源码——简易录音机.zip" 提供了一个基础的录音应用示例,这为我们深入理解Android音频录制机制提供了宝贵的资源。以下将详细阐述该录音机应用涉及到的核心知识点。 1. **Android MediaRecorder**: 这...

    Android 2录音机功能,实现录音部分功能 课程教材代码

    在Android平台上,录音功能是应用程序开发中的一个常见需求,尤其对于音乐、教育或者通信类应用。...`SimpleRecorder`作为基础示例,提供了理解Android录音功能的起点,你可以在此基础上扩展和优化,满足更复杂的需求。

    Android 封装好的录音实现方法、仿微信语音、麦克风录音、发送语音,附带源码及apk

    本教程将深入探讨如何在Android中实现一个类似微信的录音和发送语音的解决方案,包括封装好的录音方法和完整的源码示例。 首先,我们要理解Android录音的基本原理。在Android中,我们可以使用`MediaRecorder`类来...

    android录音源码

    在这个“android录音源码”项目中,开发者遇到了内存溢出问题,这通常与不当的资源管理或数据处理有关。我们将详细探讨如何在Android中实现录音功能,以及如何解决内存溢出的问题。 1. **Android录音基础** - **...

    安卓Android源码——录音、播放功能最佳学习项目.zip

    这个“安卓Android源码——录音、播放功能最佳学习项目”提供了一个完整的示例,帮助开发者深入理解这两个核心功能的实现。以下是对这个项目中涉及的知识点的详细解释。 1. **AndroidManifest.xml配置**:在Android...

    [Android]录音与播放录音实现.pdf

    在Android平台上,录音和播放录音是常见的功能,用于创建各种应用程序,如语音备忘录、社交应用中的语音消息等。Android SDK提供了一个名为`MediaRecorder`的类,专门用于处理录音任务。`MediaRecorder`类提供了录制...

    Android代码-[安卓开源]录音播放功能最佳学习项目.zip

    总之,这个开源项目为Android开发者提供了一个实践录音和播放功能的优秀教程,涵盖了从底层音频处理到UI设计的完整流程,对提升Android音频开发能力具有很高的参考价值。通过深入研究项目源码,开发者可以更好地掌握...

    android 音频录制、播放功能源码下载

    在Android平台上,音频录制与播放是移动应用开发中常见的功能,尤其在社交、教育和娱乐类应用中不可或缺。本文将深入探讨如何利用Android提供的API接口MediaRecord和AudioRecorder实现音频的录制与播放,并通过源码...

    Android 录音实现方法、仿微信语音、麦克风录音 源码程序、发送语音解决6.0BUG

    总之,Android录音功能主要依赖于MediaRecorder类,同时在高版本系统中需要注意运行时权限的管理。通过仿照微信语音的实现方式,可以创建一个流畅的用户体验。在发送语音时,需要处理文件上传,这涉及到网络编程。`...

    Android MIUI小米录音机源码.rar

    5. **权限管理**:录音功能需要访问麦克风,因此源码中包含了如何在AndroidManifest.xml中声明和请求录音所需的权限,这对于Android 6.0及以上版本的运行时权限管理有很好的示例作用。 其次,作为软著参考和实际...

    Android 实现录音、播放声音和删除声音功能.rar

    总的来说,实现Android录音、播放声音和删除声音的功能,需要对`MediaRecorder`、`MediaPlayer`以及文件操作有深入的理解,同时注意权限管理和用户体验设计。通过阅读提供的源码和文档,开发者可以快速掌握这些技能...

    Android采用MediaRecorder进行录音和播放的源码

    本文将深入探讨如何使用MediaRecorder进行录音和播放操作,通过源码解析来帮助开发者理解其实现原理。 首先,我们来看录音部分。在Android中,使用MediaRecorder进行录音通常包括以下步骤: 1. 初始化...

    Android应用源码之android录音上传到服务器,上传使用AsyncTask异步任务-IT计算机-毕业设计.zip

    此外,考虑到安全性和效率,现代Android应用往往使用Retrofit、Volley或OkHttp等网络库进行网络请求,它们提供了更强大的功能和更好的性能。对于音频文件,还可以考虑使用更高效的编码格式如AAC,以及压缩音频文件以...

Global site tag (gtag.js) - Google Analytics