React Native - Expo Audio 停止所有声音
React Native - Expo Audio stop all sounds
我正在使用 Expo Audio 播放列表中的一些短音。
async playAudio(file) {
try {
await Audio.setIsEnabledAsync(true);
const sound = new Audio.Sound();
await sound.loadAsync(file);
await sound.playAsync();
} catch(error) {
console.error(error);
}
}
我正在从使用 list.map()
呈现的列表中调用
renderTheList = (item, i) => {
return (
<View key={i}>
<TouchableOpacity onPress={ () => { this.onAudioSelected(item.audio) }}>
</TouchableOpacity>
</View>
)
}
onAudioSelected(audio) {
// Audio.clearSounds() <-- something like this
playAudio(audio)
...
}
声音播放正常,但是当我 select 列表中的下一个项目时,上一个声音不会停止。所以如果我连续触摸一堆,就会同时播放一堆声音。
如何停止所有当前播放的声音?
我发现我应该在构造函数中创建播放对象并使用 unloadAsync()
constructor(props)
{
super(props);
this.audioPlayer = new Audio.Sound();
}
playSound = async () => {
try {
await this.audioPlayer.unloadAsync()
await this.audioPlayer.loadAsync(require("../soundfile.mp3"));
await this.audioPlayer.playAsync();
} catch (err) {
console.warn("Couldn't Play audio", err)
}
}
完整文档位于 AV - Expo Documentation
我正在使用 Expo Audio 播放列表中的一些短音。
async playAudio(file) {
try {
await Audio.setIsEnabledAsync(true);
const sound = new Audio.Sound();
await sound.loadAsync(file);
await sound.playAsync();
} catch(error) {
console.error(error);
}
}
我正在从使用 list.map()
renderTheList = (item, i) => {
return (
<View key={i}>
<TouchableOpacity onPress={ () => { this.onAudioSelected(item.audio) }}>
</TouchableOpacity>
</View>
)
}
onAudioSelected(audio) {
// Audio.clearSounds() <-- something like this
playAudio(audio)
...
}
声音播放正常,但是当我 select 列表中的下一个项目时,上一个声音不会停止。所以如果我连续触摸一堆,就会同时播放一堆声音。
如何停止所有当前播放的声音?
我发现我应该在构造函数中创建播放对象并使用 unloadAsync()
constructor(props)
{
super(props);
this.audioPlayer = new Audio.Sound();
}
playSound = async () => {
try {
await this.audioPlayer.unloadAsync()
await this.audioPlayer.loadAsync(require("../soundfile.mp3"));
await this.audioPlayer.playAsync();
} catch (err) {
console.warn("Couldn't Play audio", err)
}
}
完整文档位于 AV - Expo Documentation