SoundPool在KitKat

时间:2017-07-18 19:46:40

标签: android xamarin android-4.4-kitkat soundpool

在使用Visual Studio 2015 Update 3的KitKat(API 19)上的Xamarin Android(非Xamarin Forms)应用程序中,我无法播放来自SoundPool的声音。有时我的声音很好。其他时候它口吃。

最奇怪的是,在极少数情况下,播放完全失败并在调试日志中发出警告,如:

W/SoundPool(30751):   sample 2 not READY

尽管事实上我在尝试播放之前已经绝对肯定地等待加载样本,尽管相同的样本ID 之前和之后立即播放 / strong>"样本X未准备好"故障。

TL;代码的dr版本:

var Pool = new SoundPool(6, Stream.Music, 0);
var ToneID = await Pool.LoadAsync(Android.App.Application.Context, Resource.Raw.tone, 1);
beepButton.Click += (sender, e) => Pool.Play(ToneID, 1.0F, 1.0F, 1, 0, 1.0F);

Resource.Raw.tone是小端16位PCM单声道音频,采样率为44100Hz,微软" WAV"头。它是使用Audacity 2.1.3创建的0.25s 440Hz正弦波。

我完全了解SoundPool.Builder。它是在API 21中引入的。我以API 19为目标。

实际代码在每次按下后禁用按钮500ms,因此我不可能同时尝试多次播放样本。实际上,我可以通过相隔数十秒的单独按压来重现问题。

我尝试过的事情没有成功:

  • 在调用maxStreams ctor
  • 时使用更小或更大的SoundPool(第一个arg)值
  • 在调用Android.Media.Stream ctor时使用streamType(第二个arg)的不同SoundPool枚举值
  • 在调用srcQuality ctor时使用不同的SoundPool(第三个arg)值(尽管Android docco说它什么都不做并且总是使用零)
  • 在调用priority实例方法时使用不同的SoundPool.Load()(第三个arg)值
  • 在调用0.99F实例方法时使用子统一卷参数(如SoundPool.Play()
  • 在调用priority实例时使用不同的SoundPool.Play()(第四个arg)值mehtod
  • 为我的声源使用不同的文件格式(MP3,OggVorbis)

这是a .zip file,包含我的整个准备构建的应用程序。除了MainActivity.cs之外,这基本上只是模板应用。

应用程序应该做什么:每次按下UI上的(一个且唯一的)按钮时发出哔声。这可能只是前十几次按下左右。但是你会听到" BaBeep"或者" BeeeeBip"或者"蜜蜂<暂停>发出哔哔声"或沉默。

FWIW,每次使用MediaPlayer时,相同的资源都可以正常播放。

(编辑链接一个非常简化和清理的.zip文件示例。)

0 个答案:

没有答案