안드로이드 개발 질문/답변
(글 수 45,052)
안드로이드타운에서 음성녹음 예제를 사용해보았습니다.
소스는 아래에 있습니다!
그런데.. 이 파일은 mp4형식이고, PC에서 재생이 안되더랍니다 ㅠ.ㅠ
소스에서 나온 recorded.mp4를 소켓으로 PC에 보내서 재생해보니
코덱이나 포멧이 맞지않는다는군요..
혹시나 해서 확장자를 소스내에서 강제로 바꿔도 마찬가지구요..
그래서 제 통신소스가 문제인가 하고 이미 가지고있는 다른 wav 파일을 소켓통신으로 보내서 재생했는데
무리없이 잘 재생되고 있습니다... 혹 음성녹음 후에 wav또는 mp3로 저장할 수 있을까요?
package org.androidtown.media.audio.recorder;
import java.io.File;
import android.app.Activity; import android.content.ContentValues; import android.media.MediaPlayer; import android.media.MediaRecorder; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast;
/** * Audio Recorder * * @author Mike */ public class SampleAudioRecorderActivity extends Activity { final private static String RECORDED_FILE = "/sdcard/recorded.mp4";
MediaPlayer player; MediaRecorder recorder;
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
Button recordBtn = (Button) findViewById(R.id.recordBtn); Button recordStopBtn = (Button) findViewById(R.id.recordStopBtn); Button playBtn = (Button) findViewById(R.id.playBtn); Button playStopBtn = (Button) findViewById(R.id.playStopBtn);
recordBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (recorder != null) { recorder.stop(); recorder.release(); recorder = null; }
recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setOutputFile(RECORDED_FILE);
try { Toast.makeText(getApplicationContext(), "녹음을 시작합니다.", Toast.LENGTH_LONG).show();
recorder.prepare(); recorder.start(); } catch (Exception ex) { Log.e("SampleAudioRecorder", "Exception : ", ex); } } });
recordStopBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (recorder == null) return;
recorder.stop(); recorder.release(); recorder = null;
Toast.makeText(getApplicationContext(), "녹음이 중지되었습니다.", Toast.LENGTH_LONG).show(); } });
playBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (player != null) { player.stop(); player.release(); player = null; }
Toast.makeText(getApplicationContext(), "녹음된 파일을 재생합니다.", Toast.LENGTH_LONG).show(); try { player = new MediaPlayer ();
player.setDataSource(RECORDED_FILE); player.prepare(); player.start(); } catch (Exception e) { Log.e("SampleAudioRecorder", "Audio play failed.", e); } } });
playStopBtn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { if (player == null) return;
Toast.makeText(getApplicationContext(), "재생이 중지되었습니다.", Toast.LENGTH_LONG).show();
player.stop(); player.release(); player = null; } }); }
protected void onPause() { if (recorder != null) { recorder.release(); recorder = null; }
if (player != null) { player.release(); player = null; }
super.onPause(); }
}
──────────────────────
KOPS Co.,Ltd Technical R&D Center / Researcher
───────────────────────────────
음성 녹음 시 mp3 나 wav 로 변환은 글쎄요.. 어려울것 같아요 ~_~;
대신 mp4 말고 3gp 로 해보세요.
파일 확장자는 .3gp 로하시고 엔코딩을 AMR_NB 값으로 해보세요.
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
헌데 재생이 되야 정상이긴 한데, PC 플레이어에 코덱이 없으신거 아닌가요?
변경 후에도 안되시면 PC 코덱 문제인듯 싶은데~_~;
(혹 레코딩 퍼미션도 추가되었는지 확인해보시고요)