안드로이드 개발 질문/답변
(글 수 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 코덱 문제인듯 싶은데~_~;
(혹 레코딩 퍼미션도 추가되었는지 확인해보시고요)