[java] AudioEffect가있는 Android MediaPlayer : 오류 발생 (-22,0)


Answers

오디오 세션 0을 사용하려면 동일한 문제가 발생합니다. 권한 MODIFY_AUDIO_SETTINGS을 (를) 사용해야합니다.

Question

글쎄, 이것은 단순히 내 요구 사항이다.

나는 WAV 파일을 가지고 있으며, 열어보고, 효과를 추가하고, 연주하고 싶습니다.

MediaPlayer 를 사용하여 파일을 재생하고 PresetReverb 을 사용하여 일부 효과를 추가합니다.

이것은 내 코드이다.

public void playSound(){
   String fullPath = MainActivity.this.filePath + "tmpaudio.wav";

   final MediaPlayer player = new MediaPlayer();
   player.setDataSource(this, Uri.parse(fullPath));

   PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId());
   pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
   pReverb.setEnabled(true);
   player.attachAuxEffect(eReverb.getId());
   player.setAuxEffectSendLevel(1.0f);

   //prepare for playback
   player.prepare();

   // Media prepared listener
   player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
      public void onPrepared(MediaPlayer mp) {
         //play
         player.start();
      } 
   });
}

이 코드를 실행하면 logcat에 로그인하고 있습니다 (Logged not me.).

05-02 12 : 02 : 42.356 : E / MediaPlayer (17250) : 오류 (-22,0)

하지만 내가이 라인에 대해 논평 할 때

PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId());
pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
pReverb.setEnabled(true);
player.attachAuxEffect(eReverb.getId());
player.setAuxEffectSendLevel(1.0f);

MediaPlayer가 파일을 성공적으로 재생하고 있습니다. WAV 파일에 아무런 문제가 없습니다.

다소 실망스럽게도 PresetReverb 대신 EnvironmentalReverb를 시도했지만,

EnvironmentalReverb eReverb = new EnvironmentalReverb(1, player.getAudioSessionId());
eReverb.setDecayHFRatio((short) 1000);
eReverb.setDecayTime(10000);
eReverb.setDensity((short) 1000);
eReverb.setDiffusion((short) 1000);
eReverb.setReverbLevel((short) -1000);
eReverb.setEnabled(true);
player.attachAuxEffect(eReverb.getId());
player.setAuxEffectSendLevel(1.0f);

거기도 나는 같은 오류 (오류 (-22,0))있어.

따라서 뭔가 명확한 내용이 빠져 있거나 AudioEffect 패밀리 클래스에 문제가 있습니다 (문서 또는 API 자체에 있음). 누구든지 약간의 빛을 비추 수 있습니까?

편집 : 오류를 기록 할 때 코드를 디버깅 할 때 추가하는 것을 잊어 버렸습니다 .

 player.start();

실행됩니다. 위의 코드 세그먼트를 게시하기 전에 예외 처리 부분을 제거했습니다. 그러나 나는 긍정적인데, 내가 처형 할 때 예외는 없다.

다시 편집 :

링크에서 오류 -22가 PVMFErrLicenseRequiredPreviewAvailable인지 이해하게되었습니다.

/*
 Error due to the lack of a valid license for the content.  However
 a preview is available.
 */
const PVMFStatus PVMFErrLicenseRequiredPreviewAvailable = (-22);

나는 PVMFErrLicenseRequiredPreviewAvailable으로 인터넷 검색을했고, 나는 문서를 얻었다. 그리고 87 쪽

14.10.5 유효한 라이센스가없는 DRM 컨텐츠의 미리보기

섹션 14.10.3에서 다루는 시나리오의 변형은 콘텐츠의 전체 재생에 대한 유효한 라이센스가없는 경우이지만 미리 볼 수 있습니다. 이 시나리오는 소비자가 전체 라이센스를 구매하기로 결정하기 전에 미리 볼 수 있도록 콘텐츠를 처음 배포하는 일반적인 방법 일 수 있습니다. 이 경우 Init () 메서드는 PVMFErrLicenseRequiredPreviewAvailable 코드와 함께 반환됩니다.이 코드는 전체 재생에는 라이센스가 필요하지만 미리보기를 사용할 수 있음을 나타냅니다. 미리보기를 재생하려면 응용 프로그램에서 현재 소스를 제거한 다음 로컬 데이터 소스에 설정된 플래그를 추가하여 미리보기 모드를 표시해야합니다.

이제 내가 연주 한 WAV 파일은 Android SDK 자체에서 SpeechToText 도구를 사용하여 생성되었습니다. 이 파일을 재생하는 데 필요한 라이센스가 무엇인지 모르겠습니다.




Links