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
发布于 2019-07-01 16:23:42
编辑:修复和测试;答案是我最初的答案和mAhMoUdDaFeR的答案的组合。
如果您在上面查看play方法的文档,您将看到prepare(Function callback)的文档。该条规定:
...Otherwise文件是在调用play() 时准备好的,这可能会导致小延迟。
这意味着,如果像正在调用.isPlaying一样在调用play()之后立即检查play()属性,则无法保证console.log(Player.isPlaying)执行时文件实际上正在播放。
还有第二个问题,.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发布于 2019-07-01 16:58:04
isPlaying不是组件播放器中的静态方法,因此不能使用Player.isPlaying,您可以从该播放器的创建实例(对象)中获取isPlaying。
尝试保存player对象的引用,然后访问它的子对象:
this.player = new Player("some_audio_file.mp3").play()
然后记录:
console.log(this.player.isPlaying)
https://stackoverflow.com/questions/56838796
复制相似问题