react native 音頻播放 react-native-sound
先放一個(gè)效果圖:該圖實(shí)現(xiàn)的效果,點(diǎn)擊播放按鈕,進(jìn)度條隨著時(shí)間移動(dòng),點(diǎn)擊暫停按鈕,進(jìn)度條停止移動(dòng)

第一步,用到什么庫(kù)
1.zmxv/react-native-sound 播放聲音的庫(kù)
2.callstack/react-native-slider 進(jìn)度條的庫(kù)
第二步,準(zhǔn)備播放音頻
我測(cè)試時(shí),是將mp3格式的聲音放在本地的,根據(jù)官網(wǎng)描述,本地音頻,放在 `android\app\src\main\res\raw`,注意要重新編譯打包項(xiàng)目哦
import React from "react"; import { View, Text, StyleSheet } from 'react-native';
import Sound from "react-native-sound"; Sound.setCategory('Playback'); class SoundScreen extends React.Component { constructor(props) { super(props); this.state = { whoosh: null, //音頻對(duì)象 } } componentDidMount() {
//構(gòu)建好音頻對(duì)象 this.build(); } build(){ let audioSrc = 'whoosh.mp3' //這個(gè)音頻放在android\app\src\main\res\raw let whoosh = new Sound(audioSrc, Sound.MAIN_BUNDLE, (error) => { if (error) { alert('加載聲音失敗'); return; } this.setState({ whoosh: whoosh}); }); }
playAudio=()=>{
this.state.whoosh.play((success) => { if (success) {//播放完成后的邏輯在這里處理 } else { console.log('playback failed due to audio decoding errors'); } }); }
render(){
return (
<Text onPress={this.playAudio}>播放</Text>
)
} }
第三步,添加Slider滑塊組件
自己看文檔添加吧,這里有個(gè)小問(wèn)題,就是設(shè)置長(zhǎng)度300,但是它左右兩邊有8個(gè)距離的空襲,我也沒(méi)解決
第四步,mp3音頻播放時(shí)間 和 Slider進(jìn)度同步的問(wèn)題
思路:Slider的最小值為0 ,最大值為1 ,之后通過(guò)定時(shí)器,獲得當(dāng)前播放時(shí)間 除以 總時(shí)長(zhǎng),這個(gè)值就是Slider的值
注意,將debug關(guān)掉,不然定時(shí)任務(wù)不準(zhǔn)確
//定時(shí)任務(wù):監(jiān)聽(tīng)當(dāng)前播放時(shí)間
listenAudio() {
let that = this;
let timer = setInterval(function () {
that.state.whoosh.getCurrentTime(function (seconds) {
let duration = that.state.duration;
let temp = seconds / duration;//當(dāng)前時(shí)間/總時(shí)間 = 播放進(jìn)度比
that.setState({ sliderValue: temp, })
});
}, 1000);
//將定時(shí)器私有化
this.setState({ Timer: timer });
}
主要的內(nèi)容都說(shuō)完,注意清除定時(shí)器對(duì)象

浙公網(wǎng)安備 33010602011771號(hào)