-
[ Android ] 음악 재생하기Android/멀티미디어 2020. 3. 25. 16:48
이 글은 부스트코스 강의를 공부하며 요약한 글입니다.
안드로이드 프레임워크에서 소리와 영상을 재생하기 위해 사용하는 클래스는 아래와 같습니다.
- MediaPlayer
소리와 영상을 재생하기 위한 기본 API 입니다.
- AudioManager
기기의 오디오 소스와 오디오 출력을 관리하는 Class입니다.
CatServant
MediaPlayer
Audio / Video File 및 Stream의 재생 제어는 상태 머신(State machine)으로 관리됩니다.
타원은 MediaPlayer 객체의 상태를 나타냅니다. 아크(arc)는 객체의 상태 전환을 구동하는 재생 제어 작업을 나타냅니다.
여기서 단일 화살촉의 화살표(or Arc)는 동기식 메서드 호출이고 이중 화살촉이 있는 화살표(or Arc)는 비동기식 메서드 호출을 나타냅니다.
Idle End Error Initialized Preparing Prepared Started Stopped Paused PlaybackCompleted 오디오 재생하기
MediaPlayer Class 사용
- MediaPlayer의 데이터 소스 지정 방법
1. 웹 상의 위치 지정 미디어가 있는 웹 상의 위치를 URL로 지정 2. 프로젝트 파일에 포함한 후 위치 지정 애플리케이션을 개발하여 배포하는 과정에서 프로젝트의 리소스 또는 assets 폴더에 넣은 후 그 위치를 지정 3. 단말 SD카드에 넣은 후 위치 지정 단말에 넣어 둔 SD 카드에 파일을 넣은 후 그 위치를 지정 1. 웹 상의 위치 지정
String url = "http://techtown.org/download/a.mp3"; MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(url);
2. 프로젝트 파일에 포함한 후 위치 지정
프로젝트의 res/raw 폴더에 a.mp3 라는 이름으로 음악 파일을 넣어두었다면 다음과 같이 지정할 수 있습니다.
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.a);
3. 단말 SD 카드에 넣은 후 위치 지정
단말 SD 카드에 넣어둔 파일의 폴더 위치가 /sdcard/a.mp3 라면 다음과 같이 지정할 수 있습니다.
String filepath = "/sdcard/a.mp3"; MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.setDataSource(filepath);
음악 파일 재생 과정
Code
- AndroidManifest.xml
음악 파일이 웹서버에 올라가 있다면 INTERNET 권한을 추가해야 합니다.
<uses-permission android:name="android.permission.INTERNET"/>
- MainActivity.java
public class MainActivity extends AppCompatActivity { public final static String url = "https://sites.google.com/site/ubiaccessmobile/sample_audio.amr"; private MediaPlayer player; private int position = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btnPlay = (Button)findViewById(R.id.button); btnPlay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { playAudio(); } }); Button btnPause = (Button)findViewById(R.id.button2); btnPause.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { pauseAudio(); } }); Button btnReplay = (Button)findViewById(R.id.button3); btnReplay.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resumeAudio(); } }); Button btnStop = (Button)findViewById(R.id.button4); btnStop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { 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(); } } 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()) { // position 값도 확인 해야함 player.seekTo(position); player.start(); Toast.makeText(this, "재시작됨.", Toast.LENGTH_LONG).show(); } } public void stopAudio() { if (player != null && player.isPlaying()) { // position 값도 확인 해야함 player.stop(); Toast.makeText(this, "중지됨.", Toast.LENGTH_LONG).show(); } } public void closePlayer() { if (player != null) { player.release(); player = null; } } }
출처
'Android > 멀티미디어' 카테고리의 다른 글
[ Android ] 임시 파일 생성해서 외부 앱으로 찍은 사진 받기 (0) 2020.09.16 [ Android ] 음성 녹음하기 (1) 2020.03.26 [ Android ] 동영상 파일 재생하기 (0) 2020.03.24 [ Android ] 사진 미리보기 - Camera 이용 (0) 2020.03.17 [ Android ] 사진 찍기 (0) 2020.03.16