3

I'm writing a sampler app in React-Native using Expo and have run into the follow error:

react-native - require() must have a sing string literal argument

Pre-recorded samples are played called like this:

const SAMPLES = [
  { name: 'air horn', uri: require('../samples/air_horn.mp3') },
  { name: 'rim shot', uri: require('../samples/rimshot.mp3') },
]

  playSample = (uri) => {
    const { soundObject, status } = Expo.Audio.Sound.create(
      uri,
      { shouldPlay: true }
    )
  }

It's somewhat based off the Expo documentation and works fine. However, I also want the user to record their own samples, which means it's coming from a custom URL:

playCustomSample = () => {
  const customSample = this.props.navigation.state.params
    ? require(this.props.navigation.state.params.custom.toString())
    : require('./samples/blank.mp3')
  try {
    const { soundObject, status } = Expo.Audio.Sound.create(
      customSample,
      { shouldPlay: true }
    )
  } catch(error) {
    console.log('ERROR:', error)
  }

When I log the custom param I'm being passed by navigation, it's there. So I get that I'm doing it conceptually wrong--that require() requires a string, but I'm not going to know the name/location of the file until it is recorded.

How would I get access to the audio file without knowing the link ahead of time so I can include it?

Also, I don't have access to a Mac so ejecting it from Expo, so using something like react-native-audio or react-native-sound isn't an option.

1

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.