我正在使用Expo在React-Native中编写一个采样器应用,并遇到了以下错误:
react-native - require() must have a sing string literal argument
播放预先录制的样本,如下所示:
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 }
)
}
它有点基于the Expo documentation,并且工作正常。但是,我还希望用户记录他们自己的样本,这意味着它来自自定义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)
}
当我记录custom
param我正在通过导航时,它就在那里。所以我知道我在概念上做错了 - require()
需要一个字符串,但在记录之前我不会知道文件的名称/位置。
如何在不事先知道链接的情况下访问音频文件,以便我可以包含它?
此外,我无法访问Mac,因此将其从Expo中弹出,因此使用反应原生音频或反应本机声音等功能不是一种选择。