react-native-audio-toolkit,isPlaying无法正常运行

时间:2019-07-01 16:00:51

标签: react-native

import React from "react";
import { Player } from "@react-native-community/audio-toolkit"; 


export default class RNAudiotoolkit extends React.Component {
componentDidMount(){
    new Player("some_audio_file.mp3").play();
    console.log(Player.isPlaying);
}
}

以上是我研究过的最小代码,音频轨道确实会播放,但是console.log(Player.isPlaying)始终返回“ false”,但音频文件正在运行。任何关于为什么不起作用的输入。我只能怀疑它与MediaStates有关,但未成功进行任何工作。如果您有使用此软件包的经验,将不胜感激。

文档:https://github.com/react-native-community/react-native-audio-toolkit/blob/master/docs/API.md

2 个答案:

答案 0 :(得分:2)

编辑:已修复并经过测试;答案是我原来的答案和mAhMoUdDaFeR答案的结合。

如果您在play方法的文档上方浏览,则会看到prepare(Function callback)的文档。其中指出:

  

...否则,在调用play()时会准备文件,这可能会导致小的延迟

这意味着,如果像执行操作一样在调用.isPlaying之后立即检查play()属性,则不能保证文件在console.log(Player.isPlaying)执行时实际上正在播放。 / p>

还有第二个问题,尽管.isPlaying类在文档中的显示方式不是Player类的静态属性。实际上,它是您需要创建的Player实例的属性才能播放音频文件。

如果您想查看.isPlaying确实在正常工作,则一种可能的检查是在传递给.play()的回调函数中运行您的代码,如文档所示:

  

play(Function ?callback)

     

开始播放。

     

如果提供了回调,则在回放开始时会调用它。

因此,一个简单的示例将是这样编写示例代码(保存创建的实例,然后登录回调):

componentDidMount(){
    const p = new Player("some_audio_file.mp3").play(() => console.log('in callback', p.isPlaying));
    console.log('immediately after play', p.isPlaying);
}

我创建了一个新项目对此进行测试,如果运行上面的代码,您将看到以下打印出来的说明问题的信息:

immediately after play false
in callback true

答案 1 :(得分:1)

isPlaying在组件Player中不是静态方法,因此不能使用Player.isPlaying,而可以从此Player的创建实例(对象)中获取isPlaying。 / p>

尝试保留玩家对象的引用,然后访问它的子对象:

this.player = new Player("some_audio_file.mp3").play()

然后登录:

console.log(this.player.isPlaying)