反应原生声音,循环之间的差距(Android)

时间:2018-03-29 14:16:17

标签: android react-native playback

我使用react-native-sound播放循环音频文件(完全是mp3格式)。问题是循环之间存在差距。 这是我的代码示例:

    loadSound = (s) => {
  let sound = new Sound(s, Sound.MAIN_BUNDLE, (error) => {
    if (error) {
      console.log('failed to load the sound', error);
      return;
    } else {
      sound.setNumberOfLoops(-1);
    }
  });

  return sound;
}

let sound = loadSound('campfire.mp3')
sound.play();

有没有解决方法如何让循环听起来流畅?

实际上,这个issue在github上是开放的,但还没有解决方案......

3 个答案:

答案 0 :(得分:0)

由于Android MediaPlayer(在后台使用)中的错误,因此循环之间存在间隙。 为了解决该问题,我创建了react-native-audio-exoplayer模块,该模块的功能与react-native-sound相同,但是它基于Android ExoPlayer。该API有所不同,但更加健壮和现代(请看docs)。 稍后,如果我有时间,我将发出pull请求,以在react-native-sound中引入ExoPlayer。 但是现在可以随意使用react-native-audio-exoplayer作为一个很好的解决方法(目前仅在Android上实现)。

答案 1 :(得分:0)

使用以下版本的 react-native-sounds 修复了差距问题。

https://github.com/Menardi/react-native-sound-gapless.git

来自 git repo 的 README:

<块引用>

简单地将轨道设置为在 Android 上循环并不会使其无间隙, 而是在重新开始赛道之前留下短暂的沉默。然而, Android 确实支持不同版本之间的无缝播放 轨道。所以,这个分叉基本上两次加载相同的轨道,并得到 Android 为我们处理无缝播放。缺点是 您将使用比以前更多的内存,因为曲目已加载 两次。在大多数情况下,这无关紧要,但您可以分析您的 如果您担心,请在 Android Studio 中使用应用程序。

答案 2 :(得分:-1)

我在循环声音时遇到同样的问题。我要做的就是在声音播放完成后调用相同的播放声音功能。希望对您有帮助。

@Injectable({
  providedIn: 'root',
})