Blog/Android
AudioRecorder, 녹음 기능
chaniii
2020. 4. 5. 19:11
녹음을 하기 위해서는 권한을 등록해줘야함
AndroidManifest.xml 권한 추가
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="162dp"
android:layout_marginTop="190dp"
android:layout_marginEnd="161dp"
android:text="재생" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="162dp"
android:layout_marginTop="300dp"
android:layout_marginEnd="161dp"
android:text="일시정지" />
<Button
android:id="@+id/button3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="166dp"
android:layout_marginEnd="157dp"
android:layout_marginBottom="284dp"
android:text="재시작" />
<Button
android:id="@+id/button4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="162dp"
android:layout_marginEnd="161dp"
android:layout_marginBottom="186dp"
android:text="중지" />
<Button
android:id="@+id/button5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginStart="0dp"
android:layout_marginTop="0dp"
android:layout_marginEnd="323dp"
android:text="녹음시작" />
<Button
android:id="@+id/button6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_marginTop="53dp"
android:layout_marginEnd="323dp"
android:text="녹음중지" />
</RelativeLayout>
MainActivity.java
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.File;
public class MainActivity extends AppCompatActivity {
MediaRecorder recorder;
String filename;
MediaPlayer player;
int position = 0;
int count = 0;//나중에는 카운트로 하지말고 시리얼번호로 바꿔서 해주면 됨
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// File sdcard = Environment.getExternalStorageDirectory();//sd카드 참조
// File file = new File(sdcard, "recorded.mp4");
// filename = file.getAbsolutePath();
Log.d("MainActivity", "저장할 파일명 : " + filename);
Button button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
playAudio();
}
});
Button button2 = (Button)findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
pauseAudio();
}
});
Button button3 = (Button)findViewById(R.id.button3);
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
resumeAudio();
}
});
Button button4 = (Button)findViewById(R.id.button4);
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopAudio();
}
});
Button button5 = (Button)findViewById(R.id.button5);
button5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
File sdcard = Environment.getExternalStorageDirectory();//sd카드 참조
File file = new File(sdcard, "recorded.mp4");//이제 알겠어 이름을 바꿔주면 새로 생성
filename = file.getAbsolutePath();
recordAudio();
}
});
Button button6 = (Button)findViewById(R.id.button6);
button6.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
stopRecording();
}
});
}
public void recordAudio() {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
recorder.setOutputFile(filename);
try {
recorder.prepare();
recorder.start();
Toast.makeText(this, "녹음 시작됨.", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
}
public void stopRecording(){
if(recorder != null){
recorder.stop();
recorder.release();
recorder = null;
Toast.makeText(this, "녹음 중지됨.", Toast.LENGTH_LONG).show();
}
}
public void playAudio(){
try {
closePlayer();
player = new MediaPlayer();
// player.setDataSource(url);
player.setDataSource(filename);
player.prepare();
player.start();
Toast.makeText(this, "재생 시작됨.", Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
}
public void pauseAudio(){
if(player != null){
position = player.getCurrentPosition();
player.pause();
Toast.makeText(this, "일시정지됨.", Toast.LENGTH_LONG).show();
}
}
public void resumeAudio(){
if(player != null && !player.isPlaying()){
player.seekTo(position);
player.start();
Toast.makeText(this, "재시작됨.", Toast.LENGTH_LONG).show();
}
}
public void stopAudio(){
if(player != null && player.isPlaying()){
player.stop();
Toast.makeText(this, "중지됨.", Toast.LENGTH_LONG).show();
}
}
public void closePlayer(){
if(player != null){
player.release();
player = null;
}
}
}