일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 안드로이드 스튜디오
- 안드로이드_프로그래밍
- 데이터베이스
- 텍스트뷰 스크롤
- 레이아웃
- edwith
- 스낵바
- 코드리뷰
- 드로어블
- 코틀린
- Swift
- SceneDelegate
- 자바
- 프로젝트
- 프로그래밍
- textview auto scroll
- 텍스트뷰 자동 스크롤
- 리니어 레이아웃
- RecyclerView
- 아이폰
- 뷰
- 서비스
- 상대 레이아웃
- IOS
- 안드로이드
- 테이블_레이아웃
- 액션바
- 수명주기
- 부스트코스
- 제약 레이아웃
- Today
- Total
듀다의 성장개발로그
[부스트코스] 안드로이드 프로그래밍 24 - 앱에서 음악 재생하기 본문
이번 포스팅에서는 앱에서 음악을 실행하는 기능을 만들어보겠습니다.
음악을 재생하려면 MediaPlayer클래스가 필요합니다. 그리고 재생할 파일의 주소가 필요합니다.
해당 주소로 URL을 지정하고, MediaPlayer 클래스의 prepare로 일부 정보를 확인 후 start를 호출하면 음악 파일이 재생됩니다.
인터넷과 연동된 앱의 경우 서버에 음악 파일을 올려놓고 재생하도록 하는 경우가 많은데요,
여기서는 샘플 음악 파일 서버에 접근하여 그 주소에 저장된 음악을 재생해보도록 하겠습니다.
재생, 일시정지, 재시작, 정지의 네 가지 기능을 구현하려고 합니다.
레이아웃은 위와 같이 버튼 4개로 구성해보겠습니다.
이 앱은 인터넷 권한을 사용합니다. AndroidManifest.xml에서 권한을 추가해주어야 합니다.
public static String url = "http://sites.google.com/site/ubiaccessmobile/sample_audio.amr";
MediaPlayer player;
int position = 0;
이 앱에서 사용할 url을 위와 같이 입력합니다. url이 amr이라는 생소한 확장자로 끝나는데요, 스마트폰 녹음 파일의 기본 확장자는 amr입니다.
그리고 MediaPlayer 객체와 int형 변수 positon을 선언합니다. position은 어느 위치까지 저장되었는지를 담을 변수입니다.
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();
}
});
그리고 네 버튼을 정의하고 클릭리스너를 설정합니다.
각 기능을 담당할 playAudio(), pauseAudio(), resumeAudio(), stopAudio()는 이 앱에서 선언할 메소드입니다.
public void playAudio() {
try {
closePlayer();
player = new MediaPlayer();
player.setDataSource(url);
player.prepare();
player.start();
Toast.makeText(this, "재생 시작됨.", Toast.LENGTH_LONG).show();
} catch (Exception e) {
e.printStackTrace();
}
}
먼저 playAudio는 위와 같이 구성됩니다.
closePlayer는 잠시 뒤에 다시 살펴보도록 하고, 새 MediaPlayer를 이 메소드에서 선언합니다. 그리고 url 설정, prepare, start의 과정을 모두 이 앱에서 진행합니다. 재생이 시작되었음을 알리는 토스트 메시지도 추가해주면 좋겠죠.
Exception이 발생할 수 있으니 try catch문을 사용하였습니다.
음악을 재생하기 위해서는 스피커를 사용해야 할 텐데요, 스피커나 마이크 등은 한정된 자원입니다. 그래서 어떤 앱이 이것을 잡고 있으면 다른 앱에서 이 자원을 사용할 수 없습니다. 그래서 스피커나 마이크 등을 사용할 때에는 리소스를 해제해 주는 과정이 포함되어야 합니다.
public void closePlayer() {
if (player != null) {
player.release();
player = null;
}
}
그 역할을 해주는 것이 release메소드입니다.
이 메소드가 포함된 closePlayer를 playAudio의 첫머리에 호출한 이유는 MediaPlayer가 여러번 생성되는 것을 막기 위해서인데요, 한 번 release되면 다시 MediaPlayer 객체를 생성해야 자원을 사용할 수 있기 때문입니다.
public void pauseAudio() {
if (player != null) {
position = player.getCurrentPosition();
player.pause();
Toast.makeText(this, "일시정지됨.", Toast.LENGTH_LONG).show();
}
}
pauseAudio에서는 현재 위치를 저장하고, 플레이어를 멈춰주는 기능이 포함되면 됩니다. 쉬운 구조를 가지고 있습니다.
물론 멈출 대상이 있어야 하기 때문에 player가 null인지를 먼저 확인해주어야겠지요.
public void resumeAudio() {
if (player != null && !player.isPlaying()) {
player.seekTo(position);
player.start();
Toast.makeText(this, "재시작됨.", Toast.LENGTH_LONG).show();
}
}
resumeAudio에서는 조건이 하나 더 추가되어 player가 null이 아니고, 재생 중도 아니어야 합니다.
조건을 확인한 뒤, 음악이 멈춘 위치를 찾아 다시 재생해주면 되겠습니다.
public void stopAudio() {
if (player != null && player.isPlaying()) {
player.stop();
Toast.makeText(this, "중지됨.", Toast.LENGTH_LONG).show();
}
}
stopAudio는 더욱 단순해서 재생중인 파일을 멈추기만 하면 됩니다. 멈추는 위치를 저장할 필요도 없습니다.
MediaPlayer에 포함된 메소드들을 사용해서 어렵지 않게 구현할 수 있었습니다.
'안드로이드 > 부스트코스' 카테고리의 다른 글
[부스트코스] 안드로이드 프로그래밍 25 - RecyclerView (0) | 2020.03.19 |
---|---|
[부스트코스] 안드로이드 프로그래밍 - 프로젝트 E 코드 리뷰 (0) | 2020.03.15 |
[부스트코스] 안드로이드 프로그래밍 23 - 데이터베이스(3) (0) | 2020.03.13 |
[부스트코스] 안드로이드 프로그래밍 22 - 데이터베이스(2) (0) | 2020.03.12 |
[부스트코스] 안드로이드 프로그래밍 21 - 데이터베이스(1) (0) | 2020.03.12 |