Android KitKat上的SoundPool听起来口吃

Android KitKat上的SoundPool听起来口吃,android,xamarin,android-4.4-kitkat,soundpool,Android,Xamarin,Android 4.4 Kitkat,Soundpool,在KitKat(API 19)上的Xamarin Android(而非Xamarin Forms)应用程序中,使用Visual Studio 2015 Update 3,我在播放声音池中的声音时遇到问题。有时候我的声音很好听。有时它会口吃 最奇怪的是,在极少数情况下,播放会完全失败,调试日志中会出现如下警告: W/SoundPool(30751): sample 2 not READY 这是尽管我在尝试播放之前绝对积极地等待加载样本,并且尽管在“样本X未准备好”失败之前和之后,相同的样本I

在KitKat(API 19)上的Xamarin Android(而非Xamarin Forms)应用程序中,使用Visual Studio 2015 Update 3,我在播放
声音池中的声音时遇到问题。有时候我的声音很好听。有时它会口吃

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

W/SoundPool(30751):   sample 2 not READY
这是尽管我在尝试播放之前绝对积极地等待加载样本,并且尽管在“样本X未准备好”失败之前和之后,相同的样本ID播放得很好

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
是little-endian 16位PCM单声道音频,采样率为44100Hz,带有Microsoft“WAV”头。它是使用Audacity 2.1.3创建的0.25s 440Hz正弦波

我知道所有关于
SoundPool.Builder
。它是在API 21中引入的。我的目标是API 19

实际代码在每次按下按钮后500毫秒内禁用该按钮,因此我不可能尝试同时播放该示例多次。事实上,我可以用相隔数十秒的单独按压重现这个问题

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

  • 调用
    声音池时使用更小或更大的
    maxStreams
    (第一个参数)值
  • 调用
    声音池时,使用不同的
    Android.Media.Stream
    枚举值作为
    streamType
    (第二个参数)
  • 调用
    SoundPool
    ctor时使用不同的
    srcQuality
    (第三个参数)值(尽管Android docco说它什么都不做,并且总是使用零)
  • 调用
    SoundPool.Load()
    实例方法时,使用不同的
    优先级
    (第三个参数)值
  • 调用
    SoundPool.Play()
    实例方法时使用子单位音量参数(如
    0.99F
  • 调用
    SoundPool.Play()
    实例方法时,使用不同的
    优先级(第四个参数)值
  • 为我的声音资源使用不同的文件格式(MP3、OggVorbis)
这里包含了我的整个准备构建应用程序。除了
MainActivity.cs
之外,这实际上只是一个模板应用程序

应用程序应该做什么:每次按下UI上的(一个也是唯一一个)按钮时都会发出嘟嘟声。它可能只会做前十几台印刷机。然后你会听到“巴贝普”或“比比”或“比比”或沉默

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


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

当您按下按钮时,是否希望它播放几次
音调
,每次都有一个时间间隔?不,我只想为每次按下按钮播放一次
音调
。在一段时间内,我也不允许再按任何按钮,这样就没有人会怀疑“因为我的手指在按钮上弹跳,所以听起来很奇怪吗?”我无法重现您的问题,因为它听起来“口吃”,在哪种情况下您会有这个问题?重现:在上面链接的.zip文件中构建应用程序。运行它。按“嘟嘟”按钮。它通常工作正常,但大约20次中有1次嘟嘟声会出错或丢失。我开始怀疑这可能与平台有关;我在安卓4.4.3的符号TC75上运行。另一个数据点:同样的测试程序在安卓棒棒糖(5.1.1)的符号TC75上完美运行。