当前位置: 首页 > article >正文

uniapp音频类

功能:
1.可以设置固定地时间间隔播放循环

export default {
	audio: null,
	playInterval: 0, // 播放间隔时间(毫秒)
	time: null,

	init(src, options) {
		let that = this;
		that.playInterval = options.playInterval ?? 5000
		return new Promise((resolve, reject) => {
			try {
				if (that.audio === null) {
					that.audio = uni.createInnerAudioContext();
					that.audio.src = src || 'https://web-ext-storage.dcloud.net.cn/uni-app/ForElise.mp3';

					that.setProperty(options)

					// 可以在这里设置其他属性,如音量等
					console.log('auto+++++++++++++', that.audio)
					// utils.sleep(3000);
					resolve(that.audio)
				} else {
					resolve(that.audio)
				}
			} catch (e) {
				//TODO handle the exception
				reject()
			}
		})
	},

	setProperty(obj) {
		Object.assign(this.audio, obj)
	},
	play() {
		if (this.audio) {
			this.audio.play();
			if (this.playInterval && !this.audio.loop) {
				this.audio.onEnded(this.onEndedHandle())
			}

		}
	},
	onEndedHandle() {
		// 设置定时器,在指定的时间间隔后再次播放
		let that = this;
		that.time = setTimeout(() => {
			that.play()
		}, that.playInterval)
		console.log(that.playInterval, '设置定时器,在指定的时间间隔后再次播放')
	},

	pause() {
		console.log('暂停')
		if (this.audio) {
			this.audio.pause();
			if (this.playInterval && !this.audio.loop) {
				this.clearCustomPlayInterval()
			}
		}
	},

	clearCustomPlayInterval() {
		clearTimeout(this.time)
		console.log(this.time)
		this.audio.offEnded()
	},

	stop() {
		if (this.audio) {
			if (this.playInterval) {
				this.clearCustomPlayInterval()
			}
			this.audio.stop();
			this.audio.destroy(); // 销毁音频上下文
			this.audio = null;
		}
	},

	onPlay(callback) {
		if (this.audio) {
			this.audio.onPlay(callback);
		}
	},

	onPause(callback) {
		if (this.audio) {
			this.audio.onPause(callback);
		}
	},

	onStop(callback) {
		if (this.audio) {
			this.audio.onStop(callback);
		}
	},
	onError(callback) {
		if (this.audio) {
			this.audio.onError(callback)
		}
	}
};

使用

import musicPlayer from '@/common/musicPlayer';
musicPlayer.init('/static/mp4.mp3', {
            obeyMuteSwitch: false,
            loop: false,
            playInterval: 12000
        });

http://www.kler.cn/a/447035.html

相关文章:

  • 【C#】实现Json转Lua (Json2Lua)
  • 【win10+RAGFlow+Ollama】搭建本地大模型助手(教程+源码)
  • 2024年12月21日 辩论赛有感
  • Windows中运行Linux(WSL)
  • 深度学习——现代卷积神经网络(七)
  • [JavaScript] 我该怎么去写一个canvas游戏
  • 医疗大模型工程路径的多维探索与实践研究
  • 【原生js案例】ajax的简易封装实现后端数据交互
  • android EditText密码自动填充适配
  • Ubuntu24.04 安装 visual studio code
  • Redis常见阻塞原因总结
  • 医疗挂号系统的智慧进化:SSM 与 Vue 联合设计与实现
  • MacOS下PostIn安装配置指南
  • 基于 HC_SR04的超声波测距数码管显示(智能小车超声波避障部分)
  • 机器学习之KNN算法
  • 如何去设计一个消息队列
  • Vue Web开发(十)
  • Git版本控制工具--基础命令和分支管理
  • 【蓝桥杯】43688-《Excel地址问题》
  • 人工智能ACA(四)--机器学习基础
  • 通信技术以及5G和AI保障电网安全与网络安全
  • Godot RPG 游戏开发指南
  • 2024年华为OD机试真题-寻找链表的中间节点-Python-OD统一考试(E卷)
  • SqlSugar查询达梦数据库遇到的异常情况(续)
  • Python使用GitLab API来获取文件内容
  • VMware安装Ubuntu 16.04以及安装好后初步使用配置!