使用react-sound在Android上找不到音频资源

问题描述 投票:0回答:1

我有一个带有内置音频的react-native项目,可以在iOS上正常工作,但我不知道如何让它在Android上工作。

在 iOS 上,我只需打开 XCode 并将我的音频文件夹添加到项目中即可。

在Android中,我还没有弄清楚如何做到这一点。

我尝试过的是这样的:

  • audio 添加到我的 assets 文件夹
  • 将“./assets/audio/”添加到我的react-native-config.js文件的资产部分
  • 运行npx反应本机资产

我的音频文件是大写/小写字母和数字的混合。

我遇到的两个问题是我必须将音频文件更改为小写,并且还删除了文件名开头的数字(为每个文件添加了“a_”前缀)。不确定是否有办法允许使用数字和大写音频名称,但是切换到 Android 时必须更改它们很麻烦。

但是,即使这样做了,还是不行。

对于 iOS,我使用过:

path = "audio/" + soundfile
base_path = Sound.MAIN_BUNDLE

var s = new Sound(path, base_path, (e) => {
    if (e) {
        console.log('error', e);
    } else {
        s.play(()=>{
            s.release()
        })
    }
});

但是,这在 Android 上不起作用。我发现 Sound.MAIN_BUNDLE 返回“未定义”。我尝试将 base_path 设置为空字符串 '' 。但还是没有运气。

我的路径已修改为:

path = "./assets/audio/a_" + soundfile.toLowerCase()

处理新的音频文件名(开头字母和小写字母)。

我已验证路径正确并指向正确的文件。

错误:

但是,我仍然得到

错误{“代码”:-1,“消息”:“找不到资源”}

问题:

主要问题:我还应该做什么才能播放音频?

第二个问题:有没有更简单的方法来做到这一点,而不需要我的文件名是小写且无法以数字开头?

android react-native react-native-sound
1个回答
0
投票

这似乎解决了我的问题:

path = "a_" + soundfile.toLowerCase()
base_path = ''

var s = new Sound(path, base_path, (e) => {
    if (e) {
        console.log('error', e);
    } else {
        s.play(()=>{
            s.release()
        })
    }
});

运行命令

npx react-native-asset
似乎会将音频文件直接复制到
android/app/src/main/res/raw/
中。显然原始目录中不允许有子目录,所以我不能在这里放置我的音频目录。

© www.soinside.com 2019 - 2024. All rights reserved.