我试图在Xamarin Android项目中用文本散布声音效果,但是我得到了一个不透明的错误回调。
我首先将earcon缓存在
给出的路径中 var filename = Path.Combine(Application.Context.CacheDir.ToString(), id + ".wav");
(其中id
对于earcon是唯一的;一个模拟器上的结果是/data/data/My.Package/cache/fx1.wav
),然后调用
var result = _TTS.AddEarcon(id.ToString(), filename);
结果为SUCCESS
。
稍后我尝试使用
播放它 var parms = new Android.OS.Bundle();
// https://code.google.com/p/android/issues/detail?id=64925
parms.PutInt(TextToSpeech.Engine.KeyParamStream, 3); // AudioManager.STREAM_MUSIC
parms.PutString(TextToSpeech.Engine.KeyParamUtteranceId, "earcon");
var result = _TTS.PlayEarcon(id.ToString(), QueueMode.Add, parms, "earcon");
结果是在我已注册的OnError(string)
上回复UtteranceProgressListener
。
我使用API级别21,所以我认为它应该调用OnError(string, TextToSpeechError)
;没有错误代码,我不确定问题是什么。
我最好的猜测是音频格式不受支持,但即使使用单声道16000 Hz 16位流,should be supported unconditionally也会发生这种情况。该文件通过MediaPlayer
从缓存位置回放没有问题,事实上,我最好的解决方法是播放正确长度的无声话语并使用UtteranceProgressListener
触发MediaPlayer
播放文件。
我在仿真机和真正的平板电脑上观察到同样的问题。
错误的其他原因可能是什么?除了猜测和尝试解决方法之外,还有什么方法可以说出原因是什么?