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应用项目,旨在帮助开发者学习如何在自己的应用中实现录音功能。源码通常包含了项目结构、布局文件、Java代码以及必要的资源配置,为深入理解Android...
在Android平台上,录音功能是应用程序开发中的一个常见需求。这篇文档将深入解析“android 安卓录音源码”,...同时,源码的可运行性意味着它可以作为一个良好的学习和参考资源,帮助开发者快速掌握Android录音机制。
本项目“Android录音、播放功能最佳学习项目”提供了一个完善的源码示例,帮助开发者深入理解如何在Android中实现这些功能。下面将详细探讨这个项目中涉及的关键知识点。 1. **媒体框架(Media Framework)** ...
8. **读取和播放录音**: 录音完成后,可以使用MediaPlayer类来播放录音文件。类似MediaRecorder,MediaPlayer也需要进行初始化、播放和释放资源的操作。 9. **异常处理**: 录音过程中可能出现各种错误,如文件...
"安卓Android源码——简易录音机.zip" 提供了一个基础的录音应用示例,这为我们深入理解Android音频录制机制提供了宝贵的资源。以下将详细阐述该录音机应用涉及到的核心知识点。 1. **Android MediaRecorder**: 这...
在Android平台上,录音功能是应用程序开发中的一个常见需求,尤其对于音乐、教育或者通信类应用。...`SimpleRecorder`作为基础示例,提供了理解Android录音功能的起点,你可以在此基础上扩展和优化,满足更复杂的需求。
本教程将深入探讨如何在Android中实现一个类似微信的录音和发送语音的解决方案,包括封装好的录音方法和完整的源码示例。 首先,我们要理解Android录音的基本原理。在Android中,我们可以使用`MediaRecorder`类来...
在这个“android录音源码”项目中,开发者遇到了内存溢出问题,这通常与不当的资源管理或数据处理有关。我们将详细探讨如何在Android中实现录音功能,以及如何解决内存溢出的问题。 1. **Android录音基础** - **...
这个“安卓Android源码——录音、播放功能最佳学习项目”提供了一个完整的示例,帮助开发者深入理解这两个核心功能的实现。以下是对这个项目中涉及的知识点的详细解释。 1. **AndroidManifest.xml配置**:在Android...
在Android平台上,录音和播放录音是常见的功能,用于创建各种应用程序,如语音备忘录、社交应用中的语音消息等。Android SDK提供了一个名为`MediaRecorder`的类,专门用于处理录音任务。`MediaRecorder`类提供了录制...
总之,这个开源项目为Android开发者提供了一个实践录音和播放功能的优秀教程,涵盖了从底层音频处理到UI设计的完整流程,对提升Android音频开发能力具有很高的参考价值。通过深入研究项目源码,开发者可以更好地掌握...
在Android平台上,音频录制与播放是移动应用开发中常见的功能,尤其在社交、教育和娱乐类应用中不可或缺。本文将深入探讨如何利用Android提供的API接口MediaRecord和AudioRecorder实现音频的录制与播放,并通过源码...
总之,Android录音功能主要依赖于MediaRecorder类,同时在高版本系统中需要注意运行时权限的管理。通过仿照微信语音的实现方式,可以创建一个流畅的用户体验。在发送语音时,需要处理文件上传,这涉及到网络编程。`...
5. **权限管理**:录音功能需要访问麦克风,因此源码中包含了如何在AndroidManifest.xml中声明和请求录音所需的权限,这对于Android 6.0及以上版本的运行时权限管理有很好的示例作用。 其次,作为软著参考和实际...
总的来说,实现Android录音、播放声音和删除声音的功能,需要对`MediaRecorder`、`MediaPlayer`以及文件操作有深入的理解,同时注意权限管理和用户体验设计。通过阅读提供的源码和文档,开发者可以快速掌握这些技能...
本文将深入探讨如何使用MediaRecorder进行录音和播放操作,通过源码解析来帮助开发者理解其实现原理。 首先,我们来看录音部分。在Android中,使用MediaRecorder进行录音通常包括以下步骤: 1. 初始化...
此外,考虑到安全性和效率,现代Android应用往往使用Retrofit、Volley或OkHttp等网络库进行网络请求,它们提供了更强大的功能和更好的性能。对于音频文件,还可以考虑使用更高效的编码格式如AAC,以及压缩音频文件以...