React Native+Expo AV点击播放指定音频文件失败求助
Expo AV音频无法播放问题求助
我的JSON数据格式
[ { "q": "Sitting crossed legged", "a": "Anza", "url": "assets/audio/Anza.mp3" }, { "q": "Attention!", "a": "Kiotsuke!", "url": "assets/audio/Kiotzuke.mp3" }, { "q": "Bow!", "a": "Rei!", "url": "assets/audio/Rei.mp3" } ]
基于Expo AV编写的React Native组件代码
import { StyleSheet, ScrollView, Text, View, TouchableOpacity } from 'react-native' import React, {useState, useEffect} from 'react' import ScreenTitle from '../../components/ScreenTitle'; import yellowbelt from '../../components/vocab/yellowbelt'; import {Audio} from 'expo-av'; import * as FileSystem from 'expo-file-system'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; const RokkyuRoute = () => { const [sound, setSound] = useState(); const playSound = async (audioPath) => { console.clear(); console.log('Playing Sound: ', FileSystem.documentDirectory + audioPath); const { sound } = await Audio.Sound.createAsync( { uri: FileSystem.documentDirectory + audioPath }, { shouldPlay: true } ); setSound(sound); }; console.log('Playing Sound: ', sound); useEffect(() => { return sound ? () => { sound.unloadAsync(); } : undefined; }, [sound]); return( <View style={{flex:1, height:"100%"}}> <View style={styles.yellowscreentitle}> <ScreenTitle title="Yellow Belt - Rokkyu" style={styles.darkh1}/> </View> <View style={styles.routecontainer}> <ScrollView> <View> {yellowbelt.map((item, index) => { return ( <View key={index} style={styles.item}> <View style={styles.question}> <Text style={styles.questiontext}>{index+1}. {item.q} </Text> </View> <View style={styles.answer}> <Text style={styles.answertext}>{item.a}</Text> {item.url && <TouchableOpacity style={styles.button} onPress={() => playSound(item.url)}> <Icon name="play" size={25} color={theme.colors.primary}/> </TouchableOpacity> } </View> </View> ) })} </View> </ScrollView> </View> </View> ) }; export default RokkyuRoute const styles = StyleSheet.create({ yellowscreentitle:{ backgroundColor: "#ffe100", paddingTop: 15, paddingHorizontal: 25, }, darkh1:{ fontSize: 20, fontWeight: 'bold', color: theme.colors.dark, }, routecontainer:{ padding:25, paddingBottom: 250, }, item:{ width: "100%", marginBottom: 20, }, question:{ width: "100%", marginBottom: 10, }, answer:{ width: "100%", marginBottom: 10, }, questiontext:{ fontSize: 16, fontWeight: 'bold', color: theme.colors.dark, }, answertext:{ fontSize: 16, color: theme.colors.dark, }, button:{ backgroundColor: theme.colors.secondary, borderRadius: 50, width: 40, height: 40, justifyContent: 'center', alignItems: 'center', position: 'absolute', right: 0, bottom: 0, } })
已尝试的排查步骤
- 复刻Expo官方音频播放示例,无效
- 单独播放单个音频文件,无效
- 为文件URI添加
require,无效 - 按建议安装
expo-file-system并重构playSound函数,控制台能输出正确的音频路径:
audioPath: file:///Users/lotusms/Library/Developer/CoreSimulator/Devices/79B602DF-85B4-4ABE-8745-4A3276E07C58/data/Containers/Data/Application/D0605A63-2061-4064-9B10-5304381E715F/Documents/ExponentExperienceData/%2540anonymous%252Fjudopedia-app-d3ac072a-351a-46b3-b19f-00fec4e03363/assets/audio/Sensei.mp3
但音频仍然无法播放,求各位帮忙解决。
内容的提问来源于stack exchange,提问作者LOTUSMS
相关产品推荐
相关产品推荐

