使用 react-native-sound 的正确方法是什么?
What is the correct way to use react-native-sound?
在使用 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 实例。请帮忙解决。
p.s。 - 我需要功能组件的解决方案,而不是 class。谢谢
在您的组件范围之外声明 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"
/>
);
};
让我知道进展如何。
在使用 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 实例。请帮忙解决。
p.s。 - 我需要功能组件的解决方案,而不是 class。谢谢
在您的组件范围之外声明 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"
/>
);
};
让我知道进展如何。