Javascript 反应本机声音停止所有声音
我想播放列表中的长音频文件,文件在第一次点击时下载,所有下一次点击播放音频。但问题是,当播放一个文件时,我点击另一个文件,第一个文件仍在播放,下一个文件也在播放。当我点击任何列表项时,是否有方法停止所有当前播放的文件Javascript 反应本机声音停止所有声音,javascript,reactjs,react-native,react-native-sound,Javascript,Reactjs,React Native,React Native Sound,我想播放列表中的长音频文件,文件在第一次点击时下载,所有下一次点击播放音频。但问题是,当播放一个文件时,我点击另一个文件,第一个文件仍在播放,下一个文件也在播放。当我点击任何列表项时,是否有方法停止所有当前播放的文件 onPressHandler = (file, title) => { let name = file.substring(file.lastIndexOf("/") + 1); RNFetchBlob.fs.exists(`/storage/sdcard
onPressHandler = (file, title) => {
let name = file.substring(file.lastIndexOf("/") + 1);
RNFetchBlob.fs.exists(`/storage/sdcard0/Android/data/com.myapp/files/Download/${name}.mp3`)
.then((exist) => {
if (exist) {
/* I want to stop all playing audios here */
var whoosh = new Sound(`/storage/sdcard0/Android/data/com.myapp/files/Download/${name}.mp3`, '', (error) => {
if (error) {
alert('failed to load the sound', error);
return;
}
alert('duration in seconds: ' + whoosh.getDuration() + 'number of channels: ' + whoosh.getNumberOfChannels());
alert(whoosh.isLoaded());
whoosh.play((success) => {
if (success) {
alert('successfully finished playing');
} else {
alert('playback failed due to audio decoding errors');
whoosh.reset();
}
});
});
} else {
const url = `http://myresourcesite/${file}.mp3`;
const headers = {};
const config = {
downloadTitle: name,
downloadDescription: 'Downloading ...',
saveAsName: `${name}.mp3`,
allowedInRoaming: true,
allowedInMetered: true,
showInDownloads: true
};
downloadManager.download(url, headers, config).then((response) => {
alert('Download success!');
}).catch(err => {
alert('Download failed!');
});
}
})
.catch(() => {
alert('error has occured');
});
}
我认为没有stopAll()函数。您需要跟踪您创建的实例。我使用一个全局变量。通过一些逻辑,我可以确保一次只播放一个声音
- 创建新声音对象时,请将其指定给全局变量
- 在创建新的声音对象之前,请停止全局实例上的声音
- 为第一次单击在全局变量上添加空检查
var whoosh = new Sound(`/storage/sdcard0/Android/data/com.myapp/files/Download/${name}.mp3`, '', (error) => {
if (error) {
alert('failed to load the sound', error);
return;
}
if (global.sound) global.sound.stop();
global.sound = whoosh;
whoosh.play( success => { console.log('Playing') } );
}