Активы Аудиофайл не может воспроизводиться в Expo

import AlphService from './AlphService';

export default class MyClass extends React.Component {
 alphService;
 constructor(props) {
  super(props);
  alphService = new AlphService();
  this.state = alphService.getState();
 }
 componentWillMount() {
    this.play(this.state.sound);
  }

  play(source) {
   console.log(source);
   Audio.setIsEnabledAsync(true);
   const sound = new Audio.Sound();
   const play_sound = (async () => {
    await sound.loadAsync(require(source)); //Error Here
    await sound.playAsync();
   })();
  }
}

АльфСервис.js

export default class alphService {
 stateObj = {
  sound: ""
 };
 getState(){
  this.stateObj.sound = "../assets/sounds/c.mp3"; 
  return this.stateObj;
 }
}

ОШИБКА: компоненты/Alphabet.js: неверный вызов в строке 51: требуется (источник)

а также попробуйте вернуть объект require(soundPathVar) из метода getState() и удалить требуемый из play(), затем та же ошибка.

Я новичок в React Native и хочу попробовать создать путь к динамическому звуковому файлу. Так что не могли бы вы помочь мне, если я делаю неправильно. Заранее спасибо.


person Ashish Mehta    schedule 25.12.2018    source источник


Ответы (1)


Я столкнулся с этим, когда пытался require динамические изображения, оказалось, что require принимает только определенный источник, даже require("SOURCE/" + "something.png") не работает, должно быть require("SOURCE/something.png"). Попробуй это:

export default class alphService {
 stateObj = {
  sound: ""
 };
 getState(){
  this.stateObj.sound = require("../assets/sounds/c.mp3"); 
  return this.stateObj;
 }
}

Вы можете создать файл json, содержащий все пути, и использовать его так:

export default const paths = {
    file1: require("path/to/file1.png"),
    file2: require("path/to/file2.png")
}

затем в вашем компоненте импортируйте этот файл путей и используйте его так (например, изображение):

<Image source={paths.file1}/>
person mahmoudafer    schedule 25.12.2018
comment
да, это работает, потому что требуется статический путь. динамический путь невозможен? - person Ashish Mehta; 26.12.2018
comment
Динамический путь, к сожалению, невозможен, да, если вы хотите, вы можете создать файл json, содержащий все пути, тогда вы можете использовать импорт этого файла и использовать его, я обновлю свой ответ примером - person mahmoudafer; 28.12.2018