首页> Uniapp教程

如何解决uniapp播放声音出错问题

withpy 2021-05-17

简介uniapp播放声音出错的解决办法:1、打开相应的代码文件,然后直接执行对象play方法,替换原来的src路径;2、更新开发工具版本即可。

uniapp播放声音出错的解决办法:1、打开相应的代码文件,然后直接执行对象play方法,替换原来的src路径;2、更新开发工具版本即可。

uni-app 语音文件播放问题,innerAudioContext 无法销毁 !!!


uni-app 语音createInnerAudioContext 对象 无法销毁 还闪退!!!

今天打包发现语音无法播放了,于是找了下原因,记得这个问题已经处理过了,所以很快的找到了问题,项目用错了,用的原来的进行打包,这个错误真的是不可原谅。

特此今天记录一下语音无法播放的错误。 语音播放 用的内置的 uni.createInnerAudioContext(); 来创建的,播放就报错,还闪退。

贴下代码,我是这么写的。当调取到当前的方法,直接就将代码贴上吭,这是错误的,可别直接复制,兄dei。

<script>
	const  innerAudioContext = uni.createInnerAudioContext();data() {
			return {```};
		},
		methods: {
		hechengAudio(audioPram) {
				// innerAudioContext.stop();
				var dd = audioPram.replace(/</?.+?>/g, "");
				audioPram = dd.replace(/ /g, ""); //dds为得到后的内容				if (audioPram != this.startAudio) {
					this.startPage = false;
				}
				var url = this.getMp3 + 'cuid=' + uni.getSystemInfoSync().version + '&lan=zh&ctp=1&tok=' + this.$token() +
					'&tex=' +
					audioPram + '&vol=5&per=0&spd=6&pit=5&aue=3';
				// console.log(JSON.stringify(resSave));
				console.log(url);
				// #ifdef APP-PLUS				// 下面这两句是重点, 拿本本记下..............
				 if (innerAudioContext != undefined) {
				 	innerAudioContext.stop();
				 }
				 innerAudioContext = uni.createInnerAudioContext();
				// 上面这两句是重点, 拿本本记下..............			 this.pageValue = this.value; 
				console.log('src是空的吗 -----------' + url)
				innerAudioContext.stop();
				innerAudioContext.src = url;
				innerAudioContext.play();// 				if (url != '') {// 					innerAudioContext.play();// 				} else {// 					console.log('src是空的吗 -----------' + url)// 					uni.showToast({// 						title: 'src是空的 不能执行',// 						mask: true,// 						duration: 2000,// 						icon: "none"// 					});// // 					return// 				}
				innerAudioContext.onPlay(() => {
					console.log('开始播放')
				})
				innerAudioContext.onStop(() => {
					console.log('i am onStop')
					//播放停止,销毁该实例
					// innerAudioContext.stop()
				})
				innerAudioContext.onEnded(() => {
					console.log('i am onEnded')
					//播放结束,销毁该实例
					// innerAudioContext.stop()
					console.log('已执行destory()')
				})
				innerAudioContext.onError((res) => {
					console.log(result.errMsg)
					console.log(result.errCode)
					// innerAudioContext.stop()
				})
				// #endif
				// #ifdef MP-WEIXIN
				var that = this;
				uni.downloadFile({
					url: url,
					success(res) {
						if (innerAudioContext != undefined) {
							innerAudioContext.stop();
						}
						innerAudioContext = uni.createInnerAudioContext();
						that.pageValue = that.value;
						innerAudioContext.src = res.tempFilePath;
						innerAudioContext.play();
						innerAudioContext.onPlay(() => {
							console.log('开始播放')
						})
						innerAudioContext.onStop(() => {
							console.log('i am onStop')
							innerAudioContext.stop()
							//播放停止,销毁该实例
							innerAudioContext.stop()						})
						innerAudioContext.onEnded(() => {
							console.log('i am onEnded')
							//播放结束,销毁该实例
							innerAudioContext.stop()
							console.log('已执行destory()')
						})
						innerAudioContext.onError((res) => {
							console.log(result.errMsg)
							console.log(result.errCode)
							innerAudioContext.stop()
						})
					}
				})
				// #endif			},		},			}</script>

看到上面的两行代码 ,记住千万不要销毁了,直接 执行对象play 方法就好。 这样用的都是用一个对象,他这样会默认替换原来的src 路径,可以直接播放.

还有一个原因是,开发工具版本太老,我现在版本是 1.6.2 ,主要是这个版本流程,问题少。

下面代码可以复制

<script>
	const  innerAudioContext = uni.createInnerAudioContext();data() {
			return {```};
		},
		methods: {
		hechengAudio(audioPram) {
				// innerAudioContext.stop();
				var dd = audioPram.replace(/</?.+?>/g, "");
				audioPram = dd.replace(/ /g, ""); //dds为得到后的内容				if (audioPram != this.startAudio) {
					this.startPage = false;
				}
				var url = this.getMp3 + 'cuid=' + uni.getSystemInfoSync().version + '&lan=zh&ctp=1&tok=' + this.$token() +
					'&tex=' +
					audioPram + '&vol=5&per=0&spd=6&pit=5&aue=3';
				// console.log(JSON.stringify(resSave));
				console.log(url);
				// #ifdef APP-PLUS
			 this.pageValue = this.value; 
				console.log('src是空的吗 -----------' + url)
				innerAudioContext.stop();
				innerAudioContext.src = url;
				innerAudioContext.play();
				innerAudioContext.onPlay(() => {
					console.log('开始播放')
				})
				innerAudioContext.onStop(() => {
					console.log('i am onStop')
					//播放停止,销毁该实例
					// innerAudioContext.stop()
				})
				innerAudioContext.onEnded(() => {
					console.log('i am onEnded')
					//播放结束,销毁该实例
					// innerAudioContext.stop()
					console.log('已执行destory()')
				})
				innerAudioContext.onError((res) => {
					console.log(result.errMsg)
					console.log(result.errCode)
					// innerAudioContext.stop()
				})
				// #endif
				// #ifdef MP-WEIXIN
				var that = this;
				uni.downloadFile({
					url: url,
					success(res) {
						if (innerAudioContext != undefined) {
							innerAudioContext.stop();
						}
						innerAudioContext = uni.createInnerAudioContext();
						that.pageValue = that.value;
						innerAudioContext.src = res.tempFilePath;
						innerAudioContext.play();
						innerAudioContext.onPlay(() => {
							console.log('开始播放')
						})
						innerAudioContext.onStop(() => {
							console.log('i am onStop')
							innerAudioContext.stop()
							//播放停止,销毁该实例
							innerAudioContext.stop()						})
						innerAudioContext.onEnded(() => {
							console.log('i am onEnded')
							//播放结束,销毁该实例
							innerAudioContext.stop()
							console.log('已执行destory()')
						})
						innerAudioContext.onError((res) => {
							console.log(result.errMsg)
							console.log(result.errCode)
							innerAudioContext.stop()
						})
					}
				})
				// #endif			},		},			}</script>


相关文章

  • 图片该如何优化来提高网站性能

    这篇文章主要介绍了图片该如何优化来提高网站性能,对网站性能感兴趣的同学,可以参考下

  • telnet 命令使用方法大全

    这篇文章主要介绍了telnet 命令使用方法大全,本文给大家介绍的非常想详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  • SpringBoot集成Druid监控页面最小化配置操作

    这篇文章主要介绍了SpringBoot集成Druid监控页面最小化配置操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

  • java httpclient设置超时时间和代理的方法

    这篇文章主要介绍了java httpclient设置超时时间和代理的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  • Qt自定义控件实现进度仪表盘

    这篇文章主要介绍了Qt自定义控件实现进度仪表盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  • localstorage实现带过期时间的缓存功能

    这篇文章主要介绍了localstorage实现带过期时间的缓存功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下