在使用 RNSound 庫時,我遇到了一個問題——我無法暫停聲音。
初始化:
Sound.setCategory("Playback");
let whoosh = new Sound("complite.mp3", Sound.MAIN_BUNDLE, (error) => {
if (error) {
console.log("failed to load the sound", error);
return;
}
})
并像這樣使用:
<Button
onPress={() => {
if (!start) {
whoosh.play();
const myTimer = setInterval(() => {
setCounter((counter) => counter - 1);
}, 1000);
setTimer(myTimer);
setStart((start) => !start);
} else {
whoosh.pause();
clearInterval(timer);
setCounter(null);
setStart((start) => !start);
}
}}
第一次按下按鈕時,播放聲音。在第二次按下時,沒有任何反應,并且正在播放音樂。在第三次按下時,相同的旋律第二次并行運行。據我了解,每次單擊按鈕時,我都會參考一個新的 Sound 實體。請幫助解決方案。
ps - 我需要功能組件的解決方案,而不是一個類。謝謝。
uj5u.com熱心網友回復:
在組件范圍之外宣告 Sound 實體。您不需要每次都創建一個新的 Sound 實體。參考我的樣本。
Sound.setCategory('Playback');
var whoosh = new Sound('beep.mp3', Sound.MAIN_BUNDLE, error => {
if (error) {
console.log('failed to load the sound', error);
return;
}
// loaded successfully
console.log(
'duration in seconds: '
whoosh.getDuration()
'number of channels: '
whoosh.getNumberOfChannels(),
);
});
const App: () => Node = () => {
const [start, setStart] = useState(false);
const [counter, setCounter] = useState(0);
const [timer, setTimer] = useState(null);
return (
<Button
onPress={() => {
if (!start) {
whoosh.play();
const myTimer = setInterval(() => {
setCounter(counter => counter - 1);
}, 1000);
setTimer(myTimer);
setStart(start => !start);
} else {
whoosh.pause();
clearInterval(timer);
setCounter(null);
setStart(start => !start);
}
}}
title="Click me"
/>
);
};
讓我知道事情的后續。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/475092.html
