关于uni.createInnerAudioContext()的duration音频长度获取不到问题

关于uni.createInnerAudioContext()的duration音频长度获取不到问题

代码如下:

		onLoad() {
			let _this = this
			//初始化语音播放对象
			this.audioObj = uni.createInnerAudioContext();
			this.audioObj.src = '音频链接';
			// 音频进入可以播放状态,但不保证后面可以流畅播放
			this.audioObj.onCanplay(() => {
				// 官方bug 解决方法
				this.loadDuration()
			});
		},
		methods: {
			// 解决页面初始化获取不到音频长度
			loadDuration(){
				let _this = this
				 setTimeout(() => {
					if (_this.audioObj.duration === 0) {
						_this.loadDuration();
					 } else {
						// 获取到正确的duration
						console.log(_this.audioObj.duration)
					 }
				 }, 100);
			},
		}
uni.createInnerAudioContext() 是 UniApp (微信小程序、H5等) 中的一个方法,用于创建一个内核音频上下文环境,它允许开发者处理音频流,比如播放网络音频资源。如果你想要通过 WebSocket 实时接收并播放音频,在UniApp中可以按照以下步骤操作: 1. 创建 WebSocket 连接:首先,你需要连接到WebSocket服务器,并监听`message`事件,该事件会接收到音频数据。 ```javascript const socket = new WebSocket('ws://your-server-url'); socket.onmessage = function (event) { const audioData = event.data; // 音频数据应该是适合解析成ArrayBuffer的格式 }; ``` 2. 将音频数据转换为ArrayBuffer:WebSocket传递过来的数据通常不是可以直接播放的音频格式,需要先将其转换为`ArrayBuffer`。 ```javascript function convertDataToAudioBuffer(audioData) { // 根据实际传输的格式进行解析和转换 // 示例:如果audioData是Base64编码的音频,可以使用Blob和FileReader API return new Promise((resolve, reject) => { let arrayBuffer; const reader = new FileReader(); reader.onload = function (e) { arrayBuffer = e.target.result; resolve(arrayBuffer); }; reader.readAsArrayBuffer(new Blob([audioData], {type: 'audio/*'})); }); } convertDataToAudioBuffer(audioData).then(buffer => { // 现在你有了音频数据的ArrayBuffer }); ``` 3. 使用 `uni.createInnerAudioContext()` 播放音频: ```javascript const audioContext = uni.createInnerAudioContext(); convertDataToAudioBuffer(audioData).then(buffer => { audioContext.src = buffer; audioContext.play(); }); ``` 请注意,实时播放音频可能会对性能有较大影响,确保你在合适的地方暂停、继续播放或者管理音量,避免影响用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值