如何使用 Android 1.5 录制音频?
Posted
技术标签:
【中文标题】如何使用 Android 1.5 录制音频?【英文标题】:How do I record audio using Android 1.5? 【发布时间】:2010-11-01 00:31:25 【问题描述】:如何使用 android 录制一些音频?
【问题讨论】:
【参考方案1】:package com.benmccann.android.hello;
import java.io.File;
import java.io.IOException;
import android.media.MediaRecorder;
import android.os.Environment;
/**
* @author <a href="http://www.benmccann.com">Ben McCann</a>
*/
public class AudioRecorder
final MediaRecorder recorder = new MediaRecorder();
final String path;
/**
* Creates a new audio recording at the given path (relative to root of SD card).
*/
public AudioRecorder(String path)
this.path = sanitizePath(path);
private String sanitizePath(String path)
if (!path.startsWith("/"))
path = "/" + path;
if (!path.contains("."))
path += ".3gp";
return Environment.getExternalStorageDirectory().getAbsolutePath() + path;
/**
* Starts a new recording.
*/
public void start() throws IOException
String state = android.os.Environment.getExternalStorageState();
if(!state.equals(android.os.Environment.MEDIA_MOUNTED))
throw new IOException("SD Card is not mounted. It is " + state + ".");
// make sure the directory we plan to store the recording in exists
File directory = new File(path).getParentFile();
if (!directory.exists() && !directory.mkdirs())
throw new IOException("Path to file could not be created.");
recorder.setAudiosource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(path);
recorder.prepare();
recorder.start();
/**
* Stops a recording that has been previously started.
*/
public void stop() throws IOException
recorder.stop();
recorder.release();
来自http://www.benmccann.com/dev-blog/android-audio-recording-tutorial/
【讨论】:
【参考方案2】:package com.training.Recorder2;
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 Recorder2 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 Recorder2()
mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
mFileName += "/audiorecordtest.3gp";
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));
ll.setBackgroundResource(R.drawable.android);
setContentView(ll);
@Override
public void onPause()
super.onPause();
if (mRecorder != null)
mRecorder.release();
mRecorder = null;
if (mPlayer != null)
mPlayer.release();
mPlayer = null;
然后添加到AndroidManifest.xml ---> 这两行 ---> --->
它真的对我有用:)
【讨论】:
final Intent audioIntent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION);
File audioFile = new File(Environment.getExternalStorageDirectory(), "videoTest.mp4");
audioFileUri = Uri.fromFile(audioFile);
audioIntent.putExtra(MediaStore.EXTRA_OUTPUT, audioFileUri);
startActivityForResult(audioIntent, TAKE_AUDIO);
【讨论】:
以上是关于如何使用 Android 1.5 录制音频?的主要内容,如果未能解决你的问题,请参考以下文章