首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用expo-av动态要求音频的替代解决方案

使用expo-av动态要求音频的替代解决方案
EN

Stack Overflow用户
提问于 2019-12-23 05:11:53
回答 1查看 1.2K关注 0票数 0

我正在开发一个音频应用程序,在这个应用程序中,我一次下载所有的音频文件,然后使用expo库播放它们。问题是,当我试图要求音频文件时,我会得到以下错误

代码语言:javascript
复制
Invalid call at line 77: require(audioUrl)
Failed building JavaScript bundle.

我知道我们不能动态地要求在反应-本机。我想知道是否有其他的解决方案来播放下载的音频?

需要下载音频文件的函数。

代码语言:javascript
复制
const _loadNewPlaybackInstance = async isPlaying => {
    if (playBackInstance != null) {
      await playBackInstance.unloadAsync()
      await setPlaybackInstance(null)
    }
    const source = require(audioUrl)
    const initialStatus = {
      shouldPlay: isPlaying,
      volume,
      rate: audioRate,
      shouldCorrectPitch: true,
      pitchCorrectionQuality: Audio.PitchCorrectionQuality.Low
    }
    const { sound, status } = await Audio.Sound.createAsync(
      source,
      initialStatus,
      _onPlaybackStatusUpdate
    )
    setPlaybackInstance(sound)
    _updateScreenForLoading(false)
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-23 10:09:20

您是对的,require用于静态资源,而不是动态资源。根据文档这里,源参数可以是三种类型之一。

  • 源(对象/数字/资产) --声音的来源。支持以下表单:
    • 表单{ uri: string, headers?: { [string]: string }, overrideFileExtensionAndroid?: string }的字典,其中有一个网络URL指向网络上的一个媒体文件,
    • 对源代码目录中的音频文件资产要求(‘path/to/ file’)。
    • 音频文件资产的资产对象。

您可以为动态资源使用第一种类型的参数。你会这样做:

const source = { uri: audioUrl },其中audioUrl也可以是本地资源:file:///path/to/resource

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

https://stackoverflow.com/questions/59450414

复制
相关文章

相似问题

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