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
答案 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)