好吧,这只是我的要求。
我有一个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);
我也遇到了同样的错误(错误(-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工具生成的。我不知道是什么许可证阻止我播放此文件。
好吧,我终于开始工作了。我重新阅读了文档,使用了代码,突然一切正常。这些是我的发现,以防将来对任何人有帮助。
在预置混响文档中
PresetReverb是输出混合辅助效果, 应在音频会话0上创建 。
为了将MediaPlayer或AudioTrack馈入此效果,必须将它们明确地附加到该效果上,并且必须指定发送级别
。将其附加到MediaPlayer或AudioTrack时,请使用getId()方法返回的效果ID来指定此特定效果。
说的是
PresetReverb pReverb = new PresetReverb(0,player.getAudioSessionId()); <== error
不被允许。您只能使用全局音频会话0来构造PresetReverb。
PresetReverb pReverb = new PresetReverb(1,0); <== correct
现在,我们可以使用MediaPlayer或AudioTrack将其附加到
player.attachAuxEffect(pReverb.getId());
player.setAuxEffectSendLevel(1.0f);
我完整的PresetReverb代码是
PresetReverb pReverb = new PresetReverb(1,0);
player.attachAuxEffect(pReverb.getId());
pReverb.setPreset(PresetReverb.PRESET_LARGEROOM);
pReverb.setEnabled(true);
player.setAuxEffectSendLevel(1.0f);
注意: 如果您正在寻找良好的混响效果或回声,最好使用EnvironmentalReverb。我对PresetReverb的表现有些失望。
从EnvironmentalReverb的文档中
EnvironmentalReverb是输出混合辅助效果,应在音频会话0上创建。为了将MediaPlayer或AudioTrack馈入该效果,必须将它们明确地附加到该效果上,并且必须指定发送级别
。将其附加到MediaPlayer或AudioTrack时,请使用getId()方法返回的效果ID来指定此特定效果。
就像PresetReverb一样,但是当我写的时候
Log.e("DEBUG","sessionId : " + player.getAudioSessionId()); <== printed "454"
EnvironmentalReverb eReverb
= new EnvironmentalReverb(0,player.getAudioSessionId()); //should be error as per documentation
//player.attachAuxEffect(eReverb.getId()); <== Yes this one was commented
没有错误,我得到了很好的混响效果和回声。因此,这似乎是文档中的错误。同样,当我们将播放器的会话ID传递给构造函数(player.getAudioSessionId())时,似乎不需要将播放器与EnvironmentalReverb实例相连接。奇怪..
为了完整起见,这也正如文档所述那样工作。
EnvironmentalReverb eReverb
= new EnvironmentalReverb(0,0);
player.attachAuxEffect(eReverb.getId()); <== No,not comment this one
这些不是我问题的一部分。但是对于将来看到这种情况的每个人来说..
注意:不建议使用会话0将插入效果(均衡器,低音增强,虚拟器)附加到全局音频输出混合。
请参阅文件
好吧,可以说这不是信息错误消息。我不知道为什么当我们弄乱音频会话时会出现 无效的许可证错误
。无论如何,当我更正音频会话参数时,此错误就消失了。这是我知道的全部。
我有一个WAV文件,我想打开它,添加一些效果,并播放。 我正在使用MediaPlayer播放文件,并使用PresetReverb添加一些效果。 这是我的密码 当我运行这段代码时,我将在logcat中获得一个日志(不是由我记录的) 05-02 12:02:42.356:E/MediaPlayer(17250):错误(-22,0) 但当我评论这些行时 我也得到了同样的错误(错误(-22,0))。 因此
问题内容: 因此,我要在其属性中使用数据类型为char,十进制和日期的表格。我收到了一些算术溢出错误的结果。不知道您是否可以帮助我学习创建此表。 这是确切的消息结果: 消息8115,级别16,状态8,行1将数字转换为数据类型数字的算术溢出错误。该语句已终止。 问题答案: 您的字段只能包含4位数字,带有两位小数,因此最多为99,99。您试图插入包含125,00作为值的行。这就是为什么您溢出(超出容量
我试图使用javamail示例包中的ShowMsg.java读取gmail消息,但在运行时不断出现此错误。虽然程序编译得很好。 以下是错误消息: 我运行的命令是,编译它的命令是。javax.mail.jar包含在lib文件夹中 这是一些更短的替代代码,并得到相同的错误:
问题内容: 当前在WTForms中访问错误,您必须像这样遍历字段错误: 由于我正在构建一个不使用任何表单视图的rest应用程序,因此我不得不检查所有表单字段以查找错误所在。 有没有办法可以做类似的事情: 问题答案: 实际对象的属性包含字典中的字段名称及其错误。因此,您可以执行以下操作:
提示一下使用中容易出现错误或冲突的几个地方。 在快进的时候也不会出现问题吗? KAG中、点选菜单上的「前进到下一选择支」,或者长按空格键、确定键,就会进入快进模式。这种情况下、如果做了限时选项,又没有禁止快进的话,就会立刻被判断为超时。 ( 为了避免这样的情况,请在限时选项前设定 @cancelskip 和 @clickskip enabled=false 禁止快进,在限时选项过后再用 @cl
这个类包含一个静态方法getInstance(我想模拟它),以提供一个singleton对象和几个声明为公共静态的枚举类(在异常中可以看到其中一个名为ReadSets的类)。下面是这个类的样子。 有没有关于如何修复的线索?