首頁  >  文章  >  web前端  >  如何解決uniapp播放聲音出錯問題

如何解決uniapp播放聲音出錯問題

藏色散人
藏色散人原創
2021-02-03 11:47:436339瀏覽

uniapp播放聲音出錯的解決方法:1、開啟對應的程式碼文件,然後直接執行物件play方法,替換原來的src路徑;2、更新開發工具版本即可。

如何解決uniapp播放聲音出錯問題

本教學操作環境:windows7系統、uni-app2.5.1版本,DELL G3電腦。

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 + &#39;cuid=&#39; + uni.getSystemInfoSync().version + &#39;&lan=zh&ctp=1&tok=&#39; + this.$token() +
					&#39;&tex=&#39; +
					audioPram + &#39;&vol=5&per=0&spd=6&pit=5&aue=3&#39;;
				// 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(&#39;src是空的吗 -----------&#39; + url)
				innerAudioContext.stop();
				innerAudioContext.src = url;
				innerAudioContext.play();// 				if (url != &#39;&#39;) {// 					innerAudioContext.play();// 				} else {// 					console.log(&#39;src是空的吗 -----------&#39; + url)// 					uni.showToast({// 						title: &#39;src是空的 不能执行&#39;,// 						mask: true,// 						duration: 2000,// 						icon: "none"// 					});// // 					return// 				}
				innerAudioContext.onPlay(() => {
					console.log(&#39;开始播放&#39;)
				})
				innerAudioContext.onStop(() => {
					console.log(&#39;i am onStop&#39;)
					//播放停止,销毁该实例
					// innerAudioContext.stop()
				})
				innerAudioContext.onEnded(() => {
					console.log(&#39;i am onEnded&#39;)
					//播放结束,销毁该实例
					// innerAudioContext.stop()
					console.log(&#39;已执行destory()&#39;)
				})
				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(&#39;开始播放&#39;)
						})
						innerAudioContext.onStop(() => {
							console.log(&#39;i am onStop&#39;)
							innerAudioContext.stop()
							//播放停止,销毁该实例
							innerAudioContext.stop()


						})
						innerAudioContext.onEnded(() => {
							console.log(&#39;i am onEnded&#39;)
							//播放结束,销毁该实例
							innerAudioContext.stop()
							console.log(&#39;已执行destory()&#39;)
						})
						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 + &#39;cuid=&#39; + uni.getSystemInfoSync().version + &#39;&lan=zh&ctp=1&tok=&#39; + this.$token() +
					&#39;&tex=&#39; +
					audioPram + &#39;&vol=5&per=0&spd=6&pit=5&aue=3&#39;;
				// console.log(JSON.stringify(resSave));
				console.log(url);
				// #ifdef APP-PLUS
			 this.pageValue = this.value; 
				console.log(&#39;src是空的吗 -----------&#39; + url)
				innerAudioContext.stop();
				innerAudioContext.src = url;
				innerAudioContext.play();
				innerAudioContext.onPlay(() => {
					console.log(&#39;开始播放&#39;)
				})
				innerAudioContext.onStop(() => {
					console.log(&#39;i am onStop&#39;)
					//播放停止,销毁该实例
					// innerAudioContext.stop()
				})
				innerAudioContext.onEnded(() => {
					console.log(&#39;i am onEnded&#39;)
					//播放结束,销毁该实例
					// innerAudioContext.stop()
					console.log(&#39;已执行destory()&#39;)
				})
				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(&#39;开始播放&#39;)
						})
						innerAudioContext.onStop(() => {
							console.log(&#39;i am onStop&#39;)
							innerAudioContext.stop()
							//播放停止,销毁该实例
							innerAudioContext.stop()


						})
						innerAudioContext.onEnded(() => {
							console.log(&#39;i am onEnded&#39;)
							//播放结束,销毁该实例
							innerAudioContext.stop()
							console.log(&#39;已执行destory()&#39;)
						})
						innerAudioContext.onError((res) => {
							console.log(result.errMsg)
							console.log(result.errCode)
							innerAudioContext.stop()
						})
					}
				})
				// #endif


			},

		},			}</script>

推薦:《uniapp教學

#

以上是如何解決uniapp播放聲音出錯問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn