两套代码 自己选一套用就能解决
export class Audio {
constructor() {
this.audio = uni.createInnerAudioContext()
this.audio.onCanplay(() => {
uni.hideLoading()
});
this.audio.onTimeUpdate(() => {
uni.$emit('time', this.audio.currentTime)
});
this.audio.onPlay(() => {
});
this.audio.onPause(() => {});
this.audio.onEnded(() => {
this.audio.playbackRate = 1
uni.$emit('playend')
})
}
changePlaySudu(sudu) {
this.audio.playbackRate = sudu
}
play(url) {
if (this.audio.src == url) {
this.audio.seek(0)
} else {
this.audio.src = url
}
this.audio.play()
}
end() {
this.audio.pause()
}
dele() {
this.audio.pause();
this.audio.destroy();
this.audio = null;
}
}
export class Audios {
constructor() {
this.audio = uni.createInnerAudioContext();
this.audio.autoplay = true;
this.subscribers = {};
this.startSlider = 0;
this.endSlider = 0;
this.isPaused = false;
this.loadInitialAudio();
}
async loadInitialAudio() {
this.audio.onCanplay(() => {
if (this.startSlider) {
this.audio.pause();
this.audio.seek(this.startSlider);
this.audio.play();
}
this.emit('duration', this.audio.duration);
uni.hideLoading();
});
this.audio.onTimeUpdate(() => {
console.log(this.audio.currentTime);
this.emit('time', this.audio.currentTime, this.audio.duration);
if (this.endSlider > 0 && this.audio.currentTime > this.endSlider) {
this.audio.pause();
}
});
this.audio.onPlay(() => this.emit('alignPlay'));
this.audio.onPause(() => this.emit('playPause'));
this.audio.onEnded(() => this.emit('playend'));
}
// 切换音频 重新播放
playAudio(audioSrc, play = true, start, end) {
this.audio.pause();
if (this.audio.src === audioSrc && !this.isPaused) {
this.audio.play();
return;
}
if (this.audio.src === audioSrc && this.isPaused) {
this.audio.pause();
this.audio.seek(0);
this.audio.play();
return;
}
this.audio.src = audioSrc;
}
//切换播放时间点
changeAudioPlayCurrentTime(time) {
this.audio.pause();
this.audio.seek(time);
this.audio.play();
}
//暂停
pause() {
this.audio.pause();
}
//继续播放
play() {
if (this.audio.src && !this.isPaused) {
this.audio.play();
return;
}
}
//静音
toggleMute() {
this.audio.volume = this.audio.volume == 0 ? 1 : 0;
}
//播放速度
changePlaybackRate(value) {
if (this.audio) this.audio.playbackRate = value;
}
on(event, callback) {
if (!this.subscribers[event]) {
this.subscribers[event] = [];
}
this.subscribers[event].push(callback);
}
emit(event, ...args) {
if (this.subscribers[event]) {
this.subscribers[event].forEach((callback) => callback(...args));
}
}
onDestroy() {
this.audio.pause();
this.audio.offEnded();
this.audio.offPlay();
this.audio.offPause();
this.audio.offCanplay();
this.audio.offTimeUpdate();
this.audio.destroy();
this.audio = null;
this.subscribers = {};
}
}
0 个评论
要回复文章请先登录或注册