收藏
回答

音频组件api播放问题?

实时获取经纬度接口和音频接口相结合,如果在某点附近时就播放那个点的音频,但是如果两个点过近(小于20m)的话,由于经纬度是实时监听的,
就会导致最近的距离点每次都不一样,这样就会导致多次获取音频路径,造成了多个音频同时播放的问题,但是页面中只定义了一个全局音频管理器,
音频路径每次也只会获取到一个,为什么会出现多个音频同时播放的问题呢?
_locationChangeFn = function(res) {
		//实时获取经纬度
		let {latitude, longitude} = res;
		//当前经纬度
		self.curlatitude = latitude.toFixed(6);
		self.curlongitude = longitude.toFixed(6);
		console.log("实时经纬度", self.latlng);
		let markersArray = allSpotArr;
		markersArray.forEach((item, index)=>{
			// 计算距离每个点的距离
			let DISTANCE = Location.distance(self.curlatitude, self.curlongitude, Number(markersArray[index].lat), Number(markersArray[index].lng));
			self.distanceKm[index] = DISTANCE;
		})
		// 距离数组
		let distanceKmArray = self.distanceKm;
		let CURRENTDISTANCEINDEX = -1;
		// 最近点距离数组
		let distanceSpotArr = [];
		let distanceSpotArrs = [];
		distanceKmArray.forEach((item, index) => {
			// 判断到达某点附近时(50m)
			if( Number(item) <= 0.03){
				let obj = {
					index: index,
					distance: item
				}
				distanceSpotArrs.push(obj)
				distanceSpotArr.push(Number(item))	
			}
		});
		console.log("最小距离数组", distanceSpotArrs); 
		if(distanceSpotArr.length > 1){
			var min = Math.min(...distanceSpotArr);
			console.log("最小距离", min); 
			// 计算最小距离的索引值
			let minIndex = distanceSpotArr.findIndex((item, index) => {
				return item == min;
			});
			CURRENTDISTANCEINDEX = distanceSpotArrs[minIndex].index;
		}else if(distanceSpotArr.length == 1){
			CURRENTDISTANCEINDEX = distanceSpotArrs[0].index
			console.log("距离的数组", distanceSpotArrs);
		}else{
			CURRENTDISTANCEINDEX = -1;
		}
		if(CURRENTDISTANCEINDEX != -1){
			//音频路径
			let narrateSrc;
			// 如果是中文,则有男女声切换
			if(self.lang == 'cn'){
				narrateSrc = self.is_man ? (self.$imgsrc + markersArray[CURRENTDISTANCEINDEX].mp3_cn_boy) : (self.$imgsrc + markersArray[CURRENTDISTANCEINDEX].mp3);
			}else{
				narrateSrc = self.$imgsrc + markersArray[CURRENTDISTANCEINDEX].mp3;
			}
                        //如果音频路径不存在时赋值直接播放
			if(!audiosrc){
				audiosrc = narrateSrc;
				innerAudioContext.src = audiosrc;
				innerAudioContext.autoplay = true;
				self.isLatlngAudioPlay = true;
			}else{
                              //如果音频路径存在时判断是否和上一次的相等,不相等则直接播放
				if(audiosrc != narrateSrc){
					audiosrc = narrateSrc;
					console.log("音频不相等时播放");
					innerAudioContext.src = audiosrc;
					innerAudioContext.play();
					self.isLatlngAudioPlay = true;
				}else{
                                    //如果音频路径存在时判断是否和上一次的相等,相等时判断当前是否有音频播放,如果有则不做操作
					if(self.isLatlngAudioPlay){
						console.log("正在播放不做操作");
					}else{
                                  //如果音频路径存在时判断是否和上一次的相等,相等时判断当前是否有音频播放,如果没有有则获取音频路径进行播放

						console.log("暂停时播放");
						audiosrc = narrateSrc;
						innerAudioContext.src = audiosrc;
						innerAudioContext.play();
						self.isLatlngAudioPlay = true;
					}
				}
			}
			console.log("音频地址", narrateSrc, markersArray[CURRENTDISTANCEINDEX]);
		}			

回答关注问题邀请回答
收藏
登录 后发表内容
问题标签