Android 音频录制(Audio Capture)
来源:互联网 发布:数控机床编程步骤 编辑:程序博客网 时间:2024/06/09 22:03
本文是 Android Developer 上官方文档的个人翻译,囿于作者英文水平,可能比较粗糙,原文如下:
原文:http://developer.android.com/intl/zh-cn/guide/topics/media/audio-capture.html
Android 多媒体框架包含了对录制和编码为多种音频格式的支持,因此你可以很简单地将音频集成到自己的应用中。如果设备支持的话,你可以使用 MediaRecorder APIs 来录制音频。
本文档向你展示如何编写一个应用,可以从设备的麦克风录制音频、保存并播放。
注意:Android 模拟器没有录制音频的能力,真机一般都会有这种功能。
执行音频录制(Performing Audio Capture)
音频录制相对音频和视频的播放来说稍微有一点复杂,但仍然相当简单:
- 创建一个 android.media.MediaRecorder 实例;
- 使用 MediaRecorder.setAudioSource() 设置音频来源,你有可能会使用
MediaRecorder.AudioSource.MIC
; - 使用 MediaRecorder.setOutputFormat() 设置输出文件类型;
- 使用 MediaRecorder.setOutputFile() 设置输出文件名;
- 使用 MediaRecorder.setAudioEncoder() 设置音频编码器;
- 在 MediaRecorder 实例上调用 MediaRecorder.prepare();
- 调用 MediaRecorder.start() 开始音频录制;
- 调用 MediaRecorder.stop() 停止录制;
- 当你使用完 MediaRecorder 实例,调用它的 MediaRecorder.release() 方法,该方法可以立即释放 MediaRecorder 所占有的资源。
示例:录制音频并播放录制的音频
下面的示例类演示了如何建立、开始和停止音频录制,最后播放录制的音频文件。
/* * The application needs to have the permission to write to external storage * if the output file is written to the external storage, and also the * permission to record audio. These permissions must be set in the * application's AndroidManifest.xml file, with something like: * * <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> * <uses-permission android:name="android.permission.RECORD_AUDIO" /> * */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; } }}
0 0
- Android 音频录制(Audio Capture)
- Audio Capture 音频采集
- android Audio Capture
- Android API Guides---Audio Capture
- iOS audio queue 播放和录制音频
- [Audio] Android音频数据传输
- Android录制声音文件(音频),并播放
- Android录制音频
- android 音频录制
- Android 录制音频示例
- Android MediaRecorder录制音频
- Android MediaRecorder录制音频
- android MediaRecorder录制音频
- Android 音频的录制
- Android手机录制音频
- Android录制音频示例
- 音频录制(windows)
- Android 音频焦点(Audio Focus)
- HDU-5455 Fang Fang(2015沈阳网赛,带坑点水题)
- lucene的使用详解
- xcode7,ios9 部分兼容设置
- 同一Activity实例被多次重复创建的解决方法
- Sending redirect to another servlet/JSP without loosing the request parameters
- Android 音频录制(Audio Capture)
- 检查iOS项目中是否使用了IDFA
- IP,子网掩码,默认网关和DNS都是什么,有什么用
- Struts2开发-i18n国际化实现案例-登录页面
- 黑马程序员——IOS学习笔记(Object-c基础)
- 生活中的MVC模式,一个吃货的理解
- C#/Net代码精简优化技巧(2)
- linux shell 管道命令(pipe)使用及与shell重定向区别
- 一千行MySQL学习笔记(一)