オーディオを録音するための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();
}
recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
これは、OUTPUTFORMATをRAW_AMRとして使用してファイルを作成(記録)することを意味します。
しかし、ファイル名を.mp3
としてファイルパスを指定するだけではうまくいかないと思います。そしてそれが問題かもしれません。
作成するアイテムの詳細を確認し(ファイルを長押しして詳細をクリック)、ウィンドウの右クリックプロパティなど、ファイルに関する情報を提供します。