首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本机音频工具包,isPlaying不起作用。

本机音频工具包,isPlaying不起作用。
EN

Stack Overflow用户
提问于 2019-07-01 16:00:51
回答 2查看 1.8K关注 0票数 2
代码语言:javascript
复制
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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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) 开始播放。 如果发出回调,则在回放启动时调用该回调。

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

代码语言:javascript
复制
componentDidMount(){
    const p = new Player("some_audio_file.mp3").play(() => console.log('in callback', p.isPlaying));
    console.log('immediately after play', p.isPlaying);
}

我创建了一个新项目来测试这个问题,如果您运行上面的代码,您将看到下面的输出说明了这个问题:

代码语言:javascript
复制
immediately after play false
in callback true
票数 3
EN

Stack Overflow用户

发布于 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)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56838796

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档