まあ、これは私の要件です。
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ファイルには何の問題もありません。
少しがっかりしたので、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ファイルは、AndroidSDK自体のSpeechToTextツールを使用して生成されました。このファイルの再生を妨げているライセンスがわかりません。