You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用react-native-sound设置循环2次后仍无限播放的问题

react-native-sound 循环次数不生效问题排查

核心原因

你遇到的无限循环问题主要有三个可能的诱因:

  • 参数定义理解偏差:setNumberOfLoops方法的入参是「额外循环次数」,不是总播放次数。入参为0时仅播放1次不循环,入参为n(正整数)时总播放次数为n+1;仅当入参为负数时才会触发无限循环。
  • 方法调用时机错误:react-native-sound要求所有控制类方法必须在音频实例加载完成后调用。如果实例初始化未完成就提前执行setNumberOfLoops和play,配置会失效,部分版本会默认走无限循环逻辑。
  • 版本兼容问题:0.11.0及更早版本的react-native-sound在iOS端存在适配bug,即使传入正整数也会触发无限循环。

修复方案

标准调用写法

确保音频加载完成后再设置参数、调用播放,如需总共播放2次,setNumberOfLoops入参设置为1即可:

const sound = new Sound('your_audio_file.mp3', Sound.MAIN_BUNDLE, (error) => {
  if (error) {
    console.log('音频加载失败:', error)
    return
  }
  // 加载完成后再执行配置和播放操作
  sound.setNumberOfLoops(1) // 额外循环1次,总播放2次
  sound.play()
})

兼容性兜底方案

如果是iOS端版本兼容导致的问题,可以通过监听播放完成事件手动控制播放次数,替代原生循环配置:

let currentPlayCount = 0
const TOTAL_PLAY_TIMES = 2 // 自定义总播放次数

const playAudio = () => {
  sound.play((playSuccess) => {
    if (!playSuccess) return
    currentPlayCount++
    if (currentPlayCount < TOTAL_PLAY_TIMES) {
      // 未达到总次数,重新播放
      playAudio()
    } else {
      // 播放完成,重置计数并释放资源
      currentPlayCount = 0
      sound.release()
    }
  })
}

// 音频加载完成后调用播放
const sound = new Sound('your_audio_file.mp3', Sound.MAIN_BUNDLE, (error) => {
  if (!error) playAudio()
})

内容的提问来源于stack exchange,提问作者Xenia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 21:57:04