Android MediaPlayer 오디 오 재생 방식
9483 단어 AndroidMediaPlayer오디 오
표현 하기 편 하도록 변 수 를 미디어 플레이어 라 고 정의 합 니 다.
MediaPlayer 사용 방법
MediaPlayer 만 들 기
new MediaPlayer 를 직접 만 들 수도 있 고,MediaPlayer 가 제공 하 는 create 방법 으로 만 들 수도 있 습 니 다.
mediaPlayer = new MediaPlayer();
create 방법 으로 생 성 에 성공 하면 미디어 플레이어 가 Prepared 상태 에 있 습 니 다.바로 start 로 재생 할 수 있 습 니 다.
mediaPlayer = MediaPlayer.create(getApplicationContext(), Uri.fromFile(file));
mediaPlayer.start();
음 원 설정-setDataSourcesetDataSource 를 호출 하여 음 원 을 설정 합 니 다.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총결산
위 에서 말 한 것 은 편집장 님 께 서 소개 해 주신 안 드 로 이 드 미디어 플레이어 에서 오디 오 를 재생 하 는 방식 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.