Android保存音频录制,在Android上录制和保存音频

我正在开发一个Android(2.2)应用程序来录制音频.代码似乎运行正常甚至将文件保存在SD卡上,但是当我尝试在我的Mac上播放音频文件时没有任何反应.几乎像文件是空的.我已经尝试将它们保存为.mp3和.wav,但没有运气.我的代码如下:

import java.io.File;

import java.io.IOException;

import android.media.MediaRecorder;

import android.os.Environment;

public class AudioRecorder {

private MediaRecorder recorder = new MediaRecorder();

private File outfile = null;

public AudioRecorder(){}

public void startRecording(String audioFile) 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.");

}

try{

File storageDir = new File(Environment

.getExternalStorageDirectory(), "/audio/");

storageDir.mkdir();

outfile=File.createTempFile(audioFile, ".wav",storageDir);

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

recorder.setOutputFile(outfile.getAbsolutePath());

}catch(IOException e){

e.printStackTrace();

}

try{

recorder.prepare();

}catch(IllegalStateException e){

e.printStackTrace();

}

recorder.start();

}

public void stop() throws IOException {

recorder.stop();

recorder.release();

}

}

我的活动:

/**

* Recording Activity

*/

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import com.seekika.android.app.helpers.AudioRecorder;

import android.app.Activity;

import android.media.MediaRecorder;

import android.os.Bundle;

import android.os.Environment;

import android.os.SystemClock;

import android.util.Log;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.Button;

import android.widget.Chronometer;

public class Record extends Activity {

private static final String TAG="RecordActivity";

private int SETTINGS=Menu.FIRST;

private int LOGOUT=Menu.FIRST + 1;

private int EXIT=Menu.FIRST + 2;

//components

private Button mBtnStartRecording;

private Button mBtnStopRecording;

private Chronometer mChronometer;

private String audioFileName="";

final AudioRecorder recorder = new AudioRecorder();

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.recordstory);

initComponents();

}

public void initComponents(){

mChronometer=(Chronometer)findViewById(R.id.chrono);

mBtnStopRecording=(Button)findViewById(R.id.btn_stop_recording);

mBtnStopRecording.setEnabled(false);

mBtnStopRecording.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

//stop timer

stopRecording();

//stop recording and save audio file to SD card

}

});

mBtnStartRecording=(Button)findViewById(R.id.btn_start_recording);

mBtnStartRecording.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

startRecording();

mBtnStartRecording.setEnabled(false);

mBtnStopRecording.setEnabled(true);

//start recording audio

//start timer

}

});

}

private void startRecording(){

mChronometer.setBase(SystemClock.elapsedRealtime());

mChronometer.start();

try{

String myRecording="Seekika-" + System.currentTimeMillis();

Log.i(TAG, "Start Recording");

recorder.startRecording(myRecording);

}catch(IOException e){

Log.e(TAG,"IOException error");

e.printStackTrace();

}

}

private void stopRecording(){

mChronometer.stop();

try{

recorder.stop();

}catch(IOException e){

e.printStackTrace();

}

}

}

解决方法:

不知道你是否可以使用它,但这对我有用:

public void recordAudio(String fileName) {

final MediaRecorder recorder = new MediaRecorder();

ContentValues values = new ContentValues(3);

values.put(MediaStore.MediaColumns.TITLE, fileName);

recorder.setAudioSource(MediaRecorder.AudioSource.MIC);

recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);

recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

recorder.setOutputFile("/sdcard/sound/" + fileName);

try {

recorder.prepare();

} catch (Exception e){

e.printStackTrace();

}

final ProgressDialog mProgressDialog = new ProgressDialog(MyActivity.this);

mProgressDialog.setTitle(R.string.lbl_recording);

mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

mProgressDialog.setButton("Stop recording", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int whichButton) {

mProgressDialog.dismiss();

recorder.stop();

recorder.release();

}

});

mProgressDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){

public void onCancel(DialogInterface p1) {

recorder.stop();

recorder.release();

}

});

recorder.start();

mProgressDialog.show();

}

标签:android,audio,record

来源: https://codeday.me/bug/20190930/1837150.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值