Android MediaPlayer 오디 오 재생 방식

미디어 플레이어 로 오디 오 를 재생 하 는 방식 을 소개 합 니 다.MediaPlayer 의 기초 지식,예 를 들 어 상태 에 대해 서 는Android MediaPlayer기초 소 개 를 참고 할 수 있 습 니 다.
표현 하기 편 하도록 변 수 를 미디어 플레이어 라 고 정의 합 니 다.
MediaPlayer 사용 방법
MediaPlayer 만 들 기
new MediaPlayer 를 직접 만 들 수도 있 고,MediaPlayer 가 제공 하 는 create 방법 으로 만 들 수도 있 습 니 다.mediaPlayer = new MediaPlayer();create 방법 으로 생 성 에 성공 하면 미디어 플레이어 가 Prepared 상태 에 있 습 니 다.바로 start 로 재생 할 수 있 습 니 다.

mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.fromFile(file));
mediaPlayer.start();
음 원 설정-setDataSource
setDataSource 를 호출 하여 음 원 을 설정 합 니 다.setDataSource 는 여러 가지 재 업로드 방법 이 있 습 니 다.자주 사용 하 는 몇 가 지 를 보 겠 습 니 다.
예 를 들 어 assets 의 자원 을 설정 합 니 다.실제 상황 은 try catch 가 필요 할 수 있 습 니 다.

AssetFileDescriptor fd = null;
MediaPlayer mediaPlayer = new MediaPlayer();
fd = context.getApplicationContext().getAssets().openFd(name);
mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
로 컬 파일,파일 의 절대 경로 가 필요 합 니 다.

mediaPlayer.setDataSource(file.getAbsolutePath());
파일 을 가 져 온 Uri 로 미디어 플레이 어 를 만 듭 니 다.

mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.fromFile(file));
네트워크 오디 오 를 설정 하 는 것 도 setDataSource 방법 으로 url 을 설정 합 니 다.
mediaPlayer.setDataSource(" https://demo.com/sample.mp3 "));
네트워크 오디 오 를 재생 할 때 http 를 사용 하면 오류 가 발생 할 수 있 습 니 다.

java.io.IOException: Cleartext HTTP traffic to demo.com not permitted
manifest 를 간단하게 설정 할 수 있 습 니 다.

<application
 android:usesCleartextTraffic="true">
준비.-준비.
동기 화 와 비동기 로 오디 오 자원 을 준비 합 니 다usesCleartextTraffic=”true”비동기 적 인 방식 이 고 prepare 는 동기 화 된 것 이다.스 레 드 스케줄 문 제 를 주의 하 는 동시에 UI 스 레 드 를 막 지 마 세 요.
비동기 방식 으로 오디 오 를 준비 하고 자주prepareAsync()모니터 와 함께 사용 합 니 다.비동기 준비 시 다른 설정 도 가능 합 니 다.

mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
 @Override
 public void onPrepared(MediaPlayer mediaPlayer) {
 mediaPlayer.start(); //        
 }
});
반복 재생-반복
반복 재생 setLooping 을 설정 합 니 다.MediaPlayer.OnPreparedListener재생 이 끝나 면 OnComplete Listener 를 되 돌리 지 않 고 현재 오디 오 를 처음부터 재생 합 니 다.
재생-시작
오디 오 를 재생 하고 start 방법 을 호출 합 니 다.mediaPlayer.setLooping(true);Prepared,Pause,PlaybackComplete 상태 일 때 start 방법 을 사용 하여 Started 상태 로 들 어 갈 수 있 습 니 다.
일시 정지-일시 정지
재생 을 중단 하고 pause 방법 을 사용 합 니 다.일시 정지 전에 미디어 플레이어 의 재생 여 부 를 판단 합 니 다.

if (mediaPlayer.isPlaying()) {
 mediaPlayer.pause();
}
 
일시 정지 에 성공 하면 Paused 상태 입 니 다.
스 톱.-스 톱.
MediaPlayer 상태 전환 그림 을 돌 이 켜 보면 재생 중 일시 정지,재생 이 완 료 된 상태 에서 stop 방법 을 사용 하여 Stopped 상태 에 들 어 갈 수 있 음 을 알 수 있 습 니 다.mediaPlayer.start();진도 조절.-seekTo.
재생 진도 조정.우 리 는 평소에 음악 재생 소프트웨어 를 사용 할 때 일반적으로 이런 기능 을 가지 고 있다.
seekTo 방법 은 밀리초 인 자 를 받 아들 입 니 다.

int targetMS = (int) (percent * mediaPlayer.getDuration());
mediaPlayer.seekTo(targetMS);
 
seekTo 는 MediaPlayer 의 상 태 를 바 꾸 지 않 습 니 다.

int targetMS = (int) (percent * mediaPlayer.getDuration());
mediaPlayer.seekTo(targetMS);
reset 후 미디어 플레이어 가 Idle 상태 로 들 어 갑 니 다.음 원 과 준 비 를 다시 설정 해 야 합 니 다.
석방
이 미디어 플레이 어 를 사용 하지 않 을 때 관련 자원 을 방출 하기 위해 가능 한 한 빨리 방출 해 야 합 니 다.
release 를 호출 하면 미디어 플레이어 가 End 상태 로 들 어 갑 니 다.이 미디어 플레이 어 는 더 이상 사용 할 수 없습니다.
상용 모니터
버퍼 모니터 OnBufferingUpdateListener
예 를 들 어 우리 가 네트워크 오디 오 를 불 러 올 때 이 모니터 로 버퍼 진 도 를 감청 한다.버퍼 진 도 를 표시 하고 사용자 체험 도 향상 시 킬 수 있 습 니 다.

mMediaPlayer.prepareAsync();
mMediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() {
 @Override
 public void onBufferingUpdate(MediaPlayer mp, int percent) {
 // percent       
 }
});
오류 감청 기 OnErrorListener

mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
 @Override
 public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
 return true; //   true        ,    onCompletion
 }
});
onError 의 반환 값 을 주의 하 십시오.스스로 error 를 처리 할 수 있 습 니 다.

 * @return True if the method handled the error, false if it didn't.
 * Returning false, or not having an OnErrorListener at all, will
 * cause the OnCompletionListener to be called.
 */
boolean onError(MediaPlayer mp, int what, int extra);
재생 완료 모니터 OnComplete Listener

mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
 @Override
 public void onCompletion(MediaPlayer mediaPlayer) {
 //     
 }
});
사용 예시
assets 의 오디 오 재생
assets 의 오디 오 파일 을 재생 하고 AssetFileDescriptor 클래스 에 사용 합 니 다.사용 후 AssetFileDescriptor 를 닫 는 것 을 기억 하 세 요.

private void playAssetsAudio(final String name, Context context) {
 Log.d(TAG, "playAssetWordSound: try to play assets sound file. -> " + name);
 AssetFileDescriptor fd = null;
 try {
 MediaPlayer mediaPlayer;
 Log.v(TAG, "Looking in assets.");
 fd = context.getApplicationContext().getAssets().openFd(name);
 mediaPlayer = new MediaPlayer();
 mediaPlayer.reset();
 mediaPlayer.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getLength());
 mediaPlayer.prepareAsync();
 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  @Override
  public void onPrepared(MediaPlayer mediaPlayer) {
  Log.d(TAG, "onPrepared: " + name);
  mediaPlayer.start();
  }
 });
 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  @Override
  public void onCompletion(MediaPlayer mp) {
  mp.release();
  Log.d(TAG, "onCompletion: " + name);
  }
 });
 mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
  @Override
  public boolean onError(MediaPlayer mp, int i, int i1) {
  mp.release();
  return true;
  }
 });
 } catch (Exception e) {
 try {
  if (fd != null) {
  fd.close();
  }
 } catch (Exception e1) {
  Log.e(TAG, "Exception close fd: ", e1);
 }
 } finally {
 if (fd != null) {
  try {
  fd.close();
  } catch (IOException e) {
  Log.e(TAG, "Finally, close fd ", e);
  }
 }
 }
}

로 컬 오디 오 파일 재생
오디 오 파일 을 재생 하려 고 시도 합 니 다.한 번 만 틀 어 주세요.

private void playAudioFile(final File file) {
 Log.d(TAG, "playAudioFile: " + file.getAbsolutePath());
 MediaPlayer mediaPlayer;
 try {
 mediaPlayer = new MediaPlayer();
 mediaPlayer.setLooping(false);
 mediaPlayer.setDataSource(file.getAbsolutePath());
 mediaPlayer.prepare();
 mediaPlayer.start();
 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  @Override
  public void onCompletion(MediaPlayer mp) {
  mp.release();
  }
 });
 mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
  @Override
  public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
  Log.d(TAG, "Play local sound onError: " + i + ", " + i1);
  return true;
  }
 });
 } catch (Exception e) {
 Log.e(TAG, "playAudioFile: ", e);
 }
}

온라인 오디 오 재생
url 설정,온라인 오디 오 재생

private void playOnlineSound(String soundUrlDict) {
 try {
 MediaPlayer mediaPlayer = new MediaPlayer();
 mediaPlayer.setDataSource(soundUrlDict);
 mediaPlayer.prepareAsync();
 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  @Override
  public void onPrepared(MediaPlayer mediaPlayer) {
  mediaPlayer.start();
  }
 });
 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
  @Override
  public void onCompletion(MediaPlayer mp) {
  if (mp != null) {
   mp.release();
  }
  Log.d(TAG, "onCompletion: play sound.");
  }
 });
 mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
  @Override
  public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
  Log.d(TAG, "Play online sound onError: " + i + ", " + i1);
  return false;
  }
 });
 } catch (IOException e1) {
 Log.e(TAG, "url: ", e1);
 }
}

코드 는 예제 공정 을 참고 할 수 있 습 니 다https://github.com/RustFisher/android-MediaPlayer
총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 미디어 플레이어 에서 오디 오 를 재생 하 는 방식 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기