【问题标题】:Expo-AV Sound.playAsync() doesn't work with expo-av 9.2.3 and Expo 42.0.3Expo-AV Sound.playAsync() 不适用于 expo-av 9.2.3 和 Expo 42.0.3
【发布时间】:2022-08-22 04:26:31
【问题描述】:

概括

背景:我正在尝试使用 React Native、Expo 和 Expo-AV 制作一个计时器应用程序。

我正在初始化一个具有托管工作流程并尝试播放 mp3 文件的股票应用程序使用expo-av (9.2.3)。我看到another issue 在 Moto G5、Android 8 上没有播放声音。对我来说,无法在 Moto G6 Android 9、iPhone SE iOS 14.6 或网络上播放声音。App.jsonpackage.json 已附上。

托管或裸工作流?

管理

这发生在什么平台上?

安卓、网络

SDK 版本(仅限托管工作流)

42.0.3

环境

Expo CLI 4.9.0 环境信息:

  • 系统: 操作系统:Windows 10 10.0.19042
  • 二进制文件: 节点:14.17.4 - C:\\Program Files\\nodejs\\node.EXE, npm: 6.14.14 - C:\\Program Files\\nodejs\\npm.CMD
  • IDE: Android Studio:版本 2020.3.0.0 AI-203.7717.56.2031.7583922
  • npm 包:
  • Expo 工作流程:托管

可重现的演示或从空白项目重现的步骤

  1. 运行expo init my-app
  2. 运行expo install expo-av
  3. 将一些 mp3 文件添加到根目录。我正在使用this one
  4. 将此代码复制到app.js
    import { StatusBar } from \'expo-status-bar\';
    import React, { useEffect } from \'react\';
    import { Audio } from \'expo-av\';
    import { StyleSheet, Text, View } from \'react-native\';
    
    export default function App() {
      useEffect(() => {
        playSound()
      }, []);
    
      async function playSound() {
        const sound = new Audio.Sound();
        try {
          await sound.loadAsync(require(\'./sound.mp3\'));
          await sound.playAsync();
          await sound.unloadAsync();
        } catch (error) {
          console.error(error)
        }
      }
    
      return (
        <View style={styles.container}>
          <Text>Open up App.js to start working on your app!</Text>
          <StatusBar style=\"auto\" />
        </View>
      );
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        backgroundColor: \'#fff\',
        alignItems: \'center\',
        justifyContent: \'center\',
      },
    });
    
    1. 运行expo start
    2. 在 Moto G6 Android 9.0、iPhone SE iOS 14.6 上预览 Expo Go 应用程序。或通过终端输入w 在网页上打开。

    标签: android reactjs react-native expo expo-av


    【解决方案1】:

    我收到了关于如何更改Expo Github Issues 中用于播放音频的功能的建议。

    之前,我的代码是:

    async function playSound() {
        const sound = new Audio.Sound();
        try {
          await sound.loadAsync(require('./sound.mp3'));
          await sound.playAsync();
          await sound.unloadAsync();
        } catch (error) {
          console.error(error)
        }
    }
    

    现在,我使用了.setPositionAsync().playAsync() 函数,以及{ shouldPlay: true} 标志。此代码在我更新为"expo": "^45.0.8""expo-av": "~11.2.3" 后也有效(因为不推荐使用 Expo 42)。除了 42 和 45 之外,我还没有在 Expo 版本上测试过这个。

    async function playSound() {
        const sound = new Audio.Sound();
        try {
          await sound.loadAsync(require('./sound.mp3'), {shouldPlay: true});
          await sound.setPositionAsync(0);
          await sound.playAsync();
        } catch (error) {
          console.error(error)
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 2021-08-05
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多