React Native Expo AV - 音频未播放

问题描述

我正在使用 expo-av 库实现 AudioPlayer。为了播放音频,我这样做:

import { Audio } from "expo-av";

export default function AudioPlayer() {}

AudioPlayer.playSound = async function (
  source,initialStatus = { shouldplay: true },onPlaybackStatusUpdate = null,downloadFirst = true
) {
  try {
    // Create a complete sound object
    const { sound,status } = await Audio.sound.createAsync(
      source,initialStatus,onPlaybackStatusUpdate,downloadFirst
    );

    console.log(status);

    // Play the sound
    await sound.playAsync();

    console.log("Sound played! Unloading from memory...");

    // We are done...
    // Unload the sound from memory
    sound.unloadAsync();
  } catch (err) {
    throw err;
  }
};

但是,出于某种原因,当我这样做时

AudioPlayer.playSound(require("../../assets/microphone-button-press.mp3"));

没有声音播放。

我做错了什么? (在 iPhone 11 专业版、iOS 14 上测试)

这是我记录的状态对象的样子:

Object {
  "didJustFinish": false,"durationMillis": 3120,"hasJustBeenInterrupted": false,"isBuffering": false,"isLoaded": true,<---------------
  "isLooping": false,"isMuted": false,<------------
  "isPlaying": false,"pitchCorrectionQuality": "Varispeed","playableDurationMillis": 3120,"positionMillis": 0,"progressUpdateIntervalMillis": 500,"rate": 1,"shouldCorrectPitch": false,"shouldplay": true,<-----------------
  "uri": "file:///var/mobile/Containers/Data/Application/E249E9F5-63EE-4421-88E6-F4F52B0D99F2/Library/Caches/ExponentExperienceData/%2540victorio%252Fmy-app-name/ExponentAsset-cd2511ab9f64faf7c2c23a26c8ac58c5.mp3",<----------------
  "volume": 1,<--------------
}

解决方法

在播放之前加载您的声音。

await sound.current.loadAsync(
      Sounds[audioSourceWithRequire],);

then await sound.current.playAsync();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...