Android MediaPlayer с AudioEffect : Получение ошибки (-22,0)

Ну, просто это мое требование..

У меня есть файл 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 (не зарегистрирован мной.)

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.

Немного расстроившись, я попробовал EnvironmentalReverb, вместо PresetReverb,

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);

там тоже получил ту же ошибку (Error (-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, которые я воспроизводил, генерируются мной с помощью инструмента SpeechToText в самом Android SDK. Я не знаю, какая лицензия удерживает меня от воспроизведения этого файла.

7
задан Krishnabhadra 2 May 2012 в 08:36
поделиться