微信小程序中音频播放

这篇具有很好参考价值的文章主要介绍了微信小程序中音频播放。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如何在小程序中实现音频播放
需要注意几点
由于现在官方不再维护 audio 组件 ,所以音频播放尽可能采取 wx.createInnerAudioContext() 接口 ( 若需要在后台播放,则采用 wx.getBackgroundAudioManager() )

音频播放,只有在播放时才可以获取到音频长度(参考了多个带音频的小程序 qq音乐,百度网盘等,都是采取自动播放的方式,以获取总时长)

由于 wx.createInnerAudioContext()和wx.getBackgroundAudioManager()接口都差不多,(简单来说,前者只会在当前页面播放,后者可在离开播放页面甚至返回微信界面(需要配置下),继续播放音乐),这里以 背景音乐为例子

wx.getBackgroundAudioManager()这个api返回的是一个对象(BackgroundAudioManager),同时需要注意 背景音频播放是获取的 全局唯一的背景音频管理器,也就是说,你不销毁或者停止,他会一直播放(离开微信和配置了后台播放除外)

BackgroundAudioManager在这个对象上有一些方法,比如:暂停,设置地址,监听播放状态(播放,停止,暂停,错误。。。。等)

  1. 获取全局唯一的背景音频管理器
const InnerAudioContext = uni.getBackgroundAudioManager(); 

        具体代码如下(此处是封装为播放组件,可直接复制)文章来源地址https://www.toymoban.com/news/detail-719063.html

<template>
	<view class="">
		<view class="audio-wrapper">
			<view class="audio-number">{{forNowTime}}</view>
			<slider class="audio-slider" :activeColor="color" block-size="16" :value="current" :max="duration" @changing="seek=true,current=$event.detail.value"
			 @change="change"></slider>
			 <!-- 时长 -->
			<view class="audio-number">{{forAllTime}}</view>
		</view>
		<view class="audio-control-wrapper" :style="{color:color}">
			<!-- 随机播放 -->
			<view class="audio-control audio-more iconfont music_icon_random" hover-class="btn-bg-m"></view>
			<!-- 上一首 -->
			<view class="audio-control  iconfont music_icon_previous" hover-class="btn-bg-m" v-if="control"  @click="prev"></view>
			<!-- 播放 -->
			<view class="audio-control audio-control-switch iconfont" hover-class="btn-bg"  :class="{'music_icon_play':paused,'music_icon_pause':!paused}"  @click="operation">
			</view>
			<!-- 下一首 -->
			<view class="audio-control  iconfont music_icon_next" v-if="control" hover-class="btn-bg-m"  @click="next"></view>
			<!-- 列表 -->
			<view class="audio-control audio-more  iconfont music_icon_list" hover-class="btn-bg-m" ></view>
		</view>
	</view>
</template>

<script>
	const InnerAudioContext = uni.getBackgroundAudioManager(); //createInnerAudioContext
	export default {
		data() {
			return {
				forNowTime:'00:00', //当前播放时间 4:30 格式
				forAllTime:'', //总时长 格式化
				duration:0,//总时间 秒
				current:0, //slider当前进度
				seek: false, //是否处于拖动状态
				paused: true, //是否处于暂停状态
			}
		},
		props: {
			audioSrc: { 				//音频链接
				type:String,
				default:''
			},
			audioName:{			//歌曲名称
				type:String,
				default:''
			},
			control: {        //是否需要上一曲/下一曲按钮
				type:Boolean,
				default:true
			}, 
			nextAudio:{		//播放完成后是否继续播放下一首,需定义@next事件
				type:Boolean,
				default:false,
				
			},
			color: {		//主色调
				type:String,
				default:'#5189FF'
			} 
		},
		created() {
			// 是否遵循系统静音开关
			InnerAudioContext.obeyMuteSwitch = false
			// 监听播放
			InnerAudioContext.onPlay(()=>{
				this.paused=false
				console.log('播放中。。。')
			})
			// 监听暂停
			InnerAudioContext.onPause(()=>{
				this.paused=true
			})
			// 监听播放结束
			InnerAudioContext.onEnded(()=>{
				// 是否需要 自动播放下一首
				if(this.nextAudio) {
					this.next()
				}else{
					// 暂停
					this.paused=true
				}
			})
			// 监听 进度更新
			InnerAudioContext.onTimeUpdate(()=>{
				// 获取总进度
				this.duration = InnerAudioContext.duration
				// 当前进度 非拖动时
				if (!this.seek) {
					this.current= InnerAudioContext.currentTime
				}
			})
			//监听 进度更改完成
			InnerAudioContext.onSeeked(() => {
				this.seek = false
			})
			// 音频播放失败
			this.errMsg()
		},
		mounted(){
			
		},
		beforeDestroy(){
			// InnerAudioContext.pause()
		},
		computed:{
		},
		watch: {
			// 音频地址
			audioSrc(value){
				if(InnerAudioContext.src==value)return
				InnerAudioContext.src= value
				this.current=0
				// 设置自动播放 以获取总时长
				InnerAudioContext.autoplay=true
			},
			// 音频名字
			audioName(value,o){
				InnerAudioContext.title =value
			},
			// 音频总时长--格式化
			duration(value){
				this.forAllTime = this.format(value)
			},
			// 当前播放位置
			current(now){
				this.forNowTime = this.format(now)
				if(!InnerAudioContext.paused){
					this.paused=false
				}
			}
		},
		methods: {
			//返回prev事件
			prev() {
				this.$emit('prev')
			},
			//返回next事件
			next() {
				this.$emit('next')
			},
			//时间格式化
			format(num) {
				return '0'.repeat(2 - String(Math.floor(num / 60)).length) + Math.floor(num / 60) + ':' + '0'.repeat(2 - String(
					Math.floor(num % 60)).length) + Math.floor(num % 60)
			},
			//播放/暂停操作
			operation() {
				// 停止播放状态
				InnerAudioContext.paused?InnerAudioContext.play():InnerAudioContext.pause()
			},
			//快进
			change(e) {
				InnerAudioContext.seek(e.detail.value)
			},
			// 播放失败
			errMsg(){
				InnerAudioContext.onError((res)=>{
					let ErrMsg=res.errMsg
					wx.showModal({
					 	title: '播放失败',
					 	content:ErrMsg,
						showCancel:false,
					 	success: function(res) {
					 	}
					})
				})
			}
		},
	}
</script>

<style>
	.audio-wrapper {
		display: flex;
		align-items: center;
		padding-bottom: 90rpx;
	}
	.audio-number {
		font-size: 24upx;
		line-height: 1;
		color: #333;
	}
	.audio-slider {
		flex: 1;
		margin: 0 30upx;
	}
	.audio-control-wrapper {
		margin-top: 20upx;
		display: flex;
		align-items: center;
		justify-content: space-around;
	}
	.audio-control {
		font-size: 32rpx;
		width:80rpx;
		height:80rpx;
		border:1rpx solid rgba(168,196,255,1);
		border-radius:50%;
		text-align: center;
		line-height: 80rpx;
	}
	.audio-more{
		border:none;
		font-size: 32rpx;
		border-radius: 50%;
	}
	.audio-control-switch {
		color: #FFFFFF;
		font-size: 42rpx;
		margin: 0 60rpx;
		width:120rpx;
		height:120rpx;
		line-height: 120rpx;
		background:rgba(81,137,255,1);
		border-radius:50%;
		border: none;
	}
	.audioLoading {
		animation: loading 2s;
		animation-iteration-count: infinite;
		animation-timing-function: linear;
	}

	@keyframes loading {
		to {
			transform: rotate(360deg);
		}
	}
</style>

到了这里,关于微信小程序中音频播放的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序音视频格式转换及处理

    在开发微信小程序时,经常会遇到需要对音视频进行格式转换和处理的情况。为了实现这一功能,我们可以借助FFmpeg这个强大的开源多媒体处理工具。本文将介绍如何在微信小程序中使用FFmpeg进行音视频格式转换。 首先,我们需要将FFmpeg引入到微信小程序中。由于微信小程序

    2024年04月23日
    浏览(79)
  • 安卓音视频开发(3)—— AudioTrack两种方式播放pcm音频

    前言 之前学习了AudioRecord录制pcm音频,与之对应的就是AudioTrack播放pcm音频(MediaPlayer、SoundPool有其他应用场景),它有两种数据加载模式(MODE_STATIC、MODE_STREAM)。 模式 MODE_STATIC :这种模式下,一次将所有的数据放入一个固定的buffer,然后写入到AudioTrack中,后续就不用继续

    2023年04月22日
    浏览(49)
  • 技术分享| 音视频与微信小程序互通实践

    随着网络架构的变迁、媒体技术发展、音视频场景迭代,基于流媒体的技术也是推陈出新。WebRTC渐渐的成为了音视频互动场景的主流,而微信在6.5.21版本通过小程序开放了实时音视频能力,开发者们可以使用组件 live-pusher 实现基于 RTMP 的直播推流(录制),用于实时音视频通

    2024年02月14日
    浏览(46)
  • 如何在微信小程序中实现音视频通话

    微信小程序的音视频通话可以通过微信提供的实时音视频能力实现。这个能力包括了音视频采集、编码、传输和解码等多个环节,开发者只需要使用微信提供的 API 接口就可以轻松地实现音视频通话功能。 在具体实现上,开发者需要先在微信开放平台上注册并创建小程序,然

    2023年04月09日
    浏览(50)
  • 浏览器网页内嵌Qt-C++音视频播放器的实现,支持软硬解码,支持音频,支持录像截图,支持多路播放等,提供源码工程下载

        在浏览器中实现播放RTSP实时视频流,⼤体上有如下⼏个⽅案: ⽅案一:浏览器插件⽅案 ActiveX、NPAPI、PPAPI     ActiveX插件适用于IE浏览器,NPAPI与PPAPI插件适用于谷歌浏览器,不过这些插件都已经不被浏览器所支持。 ⽅案二:先转码再转流⽅案     ⼯作原理是架设一

    2024年01月17日
    浏览(93)
  • 【ESP32音视频传输】②通过I2S采集SPH0645麦克风音频数据并上传到服务端实时播放

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 本文章基于Arduino ESP32 2.07版本,因为2.04版本开始I2S驱动被更改了,所以相同代码可能效果不太同 本文主要参考了:https://atomic14.com/2020/09/12/esp32-audio-input.html ESP32有多种方式从外置麦克风中读取数据:

    2024年02月11日
    浏览(48)
  • 【FFmpeg】音视频录制 ① ( 查询系统中 ffmpeg 可录制的音视频输入设备 | 使用 ffmpeg 命令录制音视频数据 | 录制视频数据命令 |录制音频数据| 同时录制音频和视频数据命令 )

    在 Windows 系统中 , 使用 ffmpeg 命令 录制 音视频 , 需要先获取 系统的 音视频设备 信息 , 录制 音视频 本质上是从 系统音视频设备 中获取数据 ; 执行 命令 , 可以获取 系统中 ffmpeg 可用的 DirectShow 音视频输入设备 ; 命令参数解析 : -list_devices true : 列出所有 ffmpeg 的 指定类型的可

    2024年04月25日
    浏览(89)
  • 【音视频】如何播放rtsp视频流

    现阶段直播越来越流行,直播技术发展也越来越快。Webrtc和rtsp是比较火热的技术,而且应用也比较广泛。本文通过实践来展开介绍关于rtsp、webrtc的使用过程。 本文重点介绍如何播放rtsp视频流,通过ffplay方式以及VLC media player的方式来播放 可以参考上一篇博文:【音视频】基于

    2024年01月19日
    浏览(90)
  • 音视频 ffplay播放控制

    选项 说明 q, ESC 退出播放 f 全屏切换 p, SPC 暂停 m 静音切换 9, 0 9减少音量,0增加音量 a 循环切换音频流 v 循环切换视频流 t 循环切换字幕流 c 循环切换节目 w 循环切换过滤器或显示模式 s 逐帧播放 left/right 向后/向前拖动10秒 down/up 向后/向前拖动1分钟 鼠标右键单击 拖动与显

    2024年02月12日
    浏览(50)
  • 音视频基础概念(5)——音频基础说明

    现实生活中,音频(Audio)主要用在两大场景中,包括语音(Voice)和音乐(Music)。语音主要用于沟通,如打电话等。目前由于语音识别技术的发展,人机语音交互也是语音的一个应用方向,很多大厂推出智能音箱、语音助手等。音乐主要用于欣赏和陶冶情操,如播放音乐。

    2023年04月08日
    浏览(106)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包