HTML5 学习—— 音频

本文详细介绍了HTML5中音频元素的html属性,包括src、autoplay、controls、loop和muted,以及在JavaScript中用于控制音频的接口属性和方法,如paused、volume、duration等。此外,还讲解了相关接口事件的使用,并给出了背景音乐、播放列表和简易播放器的实例应用。

视频的html标记: < v i d e o > < / v i d e o > <video></video> <video></video>

1 html属性

1.1 src

src:设置音频的URL播放路径。

1.2 autoplay

autoplay:自动播放。浏览器不支持自动播放。
浏览器规定:媒体必须通过用户交互才能播放。

1.3 controls

controls:设置是否显示播放控制面板。

1.4 loop

loop:设置是否循环播放。

1.5 muted

muted:设置是否默认静音。

2 接口属性(用在js中)

2.1 paused

paused:判断音频是否处于暂停状态。

2.2 volume

volume:返回/设置当前音频播放的音量(取值:0-1)。

2.3 duration

duration:返回音频播放的总时长(单位:秒)。

// 将总时长转换成 00:00 的格式,由于实型数据的不稳定性,此处需要转成整数
parseInt(myAudio.duration/60) + “:” + parseInt(myAudio.duration%60)

2.4 currentTime

currentTime:返回/设置音频播放的当前位置(依靠当前秒数来实现)。

2.5 currentSrc

currentSrc:返回音频的URL地址。

2.6 ended

ended:返回音频的播放是否结束。

2.7 muted

muted:返回/设置音频的静音效果。

2.8 playbackRate

playbackRate:设置音频播放的速度。(0.5-慢速播放,1-正常,2-二倍播放)

3 接口方法(用在js中)

3.1 play()

play():让音频播放。

3.2 pause()

pause():让音频暂停。

4 接口事件(用在js中)

4.1 play

play:当音频文件播放(调用了play()方法)时触发。

4.2 pause

pause:当音频文件暂停(调用了pause()方法)时触发。

4.3 ended

ended:当音频文件播放结束时触发。

4.4 volumechange

volumechange:当音量发生变化时触发。

4.5 ratechange

ratechange:当播放速度发生变化时触发。

4.6 timeupdate

timeupdate:当音频的当前播放位置发生变化时触发,只要音频处于播放状态就会一直触发该事件。

4.7 durationchange

durationchange:当音频的总时长发生变化时触发,即播放的歌曲发生变化时触发。

5 接口属性和接口方法的使用

(1)接口属性和接口方法必须使用音频对象的实例进行调用。
(2)如何获取音频对象的实例:

     //方法1:获取页面DOM结构中的<audio>节点。
     
     var myAudio = document.getElementById(“myAudio”);
     alert(myAudio);    // [object HTMLAudioElement]
     //方法2:利用Audio构造函数创建实例。
     
     var myAudio = new Audio();   
     //等同于 var myAudio=document.createElement(“audio”);
     myAudio.src=“audio/01.mp3”;
     alert(myAudio);

6 实例

6.1 设置背景音乐

<audio src="audio/03.mp3" id="myAudio"></audio>
<div id="container">
	<div class="content">
		<span>欢迎来到我的网站</span>
		<img src="images/play.png" />
	</div>
</div>
var myAudio=document.querySelector("#myAudio");
var container=document.querySelector("#container");
var img=container.querySelector("img");

img.onclick=function(){
	if(myAudio.paused){
		// 暂停状态
		myAudio.play();
		img.src="images/pause.png";
	}else{
		// 播放状态
		myAudio.pause();
		img.src="images/play.png";
	}
}

6.2 歌曲播放列表

<div id="container">
	<h3>歌曲列表</h3>
	<ol>
		<li><a href="#" onclick="musicPlay('04')">女人心事 - 陶晶莹</a></li>
		<li><a href="#" onclick="musicPlay('05')">我怀念的 - 孙燕姿</a></li>
	</ol> 
	<div class="time">0:00</div>
	<div class="progress">
		<div class="progressBar"></div>
	</div>
</div>
var myMusic=new Audio();  // 创建音频实例
var timer;

var containerNode=document.querySelector("#container");
var timeNode=containerNode.querySelector(".time");
var progressNode=containerNode.querySelector(".progress");
var progressBarNode=containerNode.querySelector(".progressBar");
var progressWidth=progressNode.offsetWidth;

// 音频播放
function musicPlay(music){
	myMusic.src=`audio/${music}.mp3`;
	myMusic.play();
	timer=window.setInterval("getProgress()",500);
}

// 获取播放进度(当前时间,进度条)
function getProgress(){
	var totleTime=myMusic.duration;
	var currentTime=myMusic.currentTime;

	// 播放的当前时间
	var minute= parseInt(currentTime/60);
	var second=parseInt(currentTime%60);
	second=second>9?second:"0"+second;
	timeNode.textContent=minute + ":" + second;

	// 播放进度条	
	var progressBarWidth=currentTime/totleTime*progressWidth;
	progressBarNode.style.width=progressBarWidth + "px";

	if(myMusic.ended){
		window.clearInterval(timer);
		alert("播放结束");
	}
}

6.3 简易播放器

<div id="container">
	<div class="progress">
		<div class="progressBar"></div>
	</div>
	<div class="volumn">
		<input type="range" min="0" max="100" value="100" oninput="volumnChange()" />
		<output>100</output>
	</div>
	<div class="control">
		<span class="btn play">播放</span>
		<span class="btn pause">暂停</span>
		<span class="btn prev">上一首</span>
		<span class="btn next">下一首</span>
		<span class="btn backward">快退</span>
		<span class="btn forward">快进</span>			
		<span class="btn stop">停止</span>
	</div>
</div>	
#container{
	width:500px;
	border:solid 1px #ff5857;
	background-color: #fff3f3;
	border-radius:6px;
	margin:50px auto;
	overflow: hidden;
}
#container .progress{
	width:inherit;height: 10px;
	background-color: #fff3f3;
}
#container .progressBar{
	width:0;height: inherit;
	background-color: #ff5857;
}
#container .control{
	margin: 20px auto;
	text-align: center;
	user-select: none;
}
#container .btn:hover{
	color:#ff5857;
}
#container .volumn{
	display: flex;
	justify-content: center;
	align-items:center;
	margin-top: 20px;
}
var container=document.querySelector("#container");
var play=container.querySelector(".play");
var pause=container.querySelector(".pause");
var next=container.querySelector(".next");
var prev=container.querySelector(".prev");
var forward=container.querySelector(".forward");
var backward=container.querySelector(".backward");
var stop=container.querySelector(".stop");
var alone=container.querySelector(".alone");

var progress=container.querySelector(".progress");
var progressBar=container.querySelector(".progressBar");
var progressWidth=progress.offsetWidth;

var myMusic=new Audio();
var music=["01","02","03"];
var currentMusic=0;

myMusic.src=`audio/${music[currentMusic]}.mp3`;
// 进度条
myMusic.ontimeupdate=function (){
	var currentTime=this.currentTime;
	var totalTime=this.duration;
	var progressBarWidth=currentTime/totalTime*progressWidth;
	progressBar.style.width=progressBarWidth + "px";
}
// 播放
play.onclick=function(){
	myMusic.play();
}
// 暂停
pause.onclick=function(){
	myMusic.pause();
}
// 下一首
next.onclick=function(){
	currentMusic=(currentMusic+1)%music.length;
	myMusic.src=`audio/${music[currentMusic]}.mp3`;
	play.click();
}
// 上一首
prev.onclick=function(){
	currentMusic--;
	if(currentMusic<0){
		currentMusic=music.length-1;
	}
	myMusic.src=`audio/${music[currentMusic]}.mp3`;
	play.click();
}
// 快进
forward.onclick=function(){
	myMusic.currentTime+=30;
}
// 快退
backward.addEventListener("click",function(){
	myMusic.currentTime-=30;
})
// 停止
stop.onclick=function(){
	myMusic.pause();
	myMusic.src=`audio/${music[currentMusic]}.mp3`;
}
//自动播放下一首
myMusic.addEventListener('ended',function(){
	console.log('结束');
	next.click();
})
myMusic.addEventListener('durationchange',function(){
	console.log('切歌了');
})
//控制音量大小
var inputVolumn=container.querySelector('input');
var textVolumn=container.querySelector('output');
function volumnChange(){
	textVolumn.textContent=inputVolumn.value;
	myMusic.volume=inputVolumn.value/100;
}
【完美复现】面向配电网韧性提升的移动储能预布局与动态调度策略【IEEE33节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE33节点的配电网韧性提升方法,重点研究了移动储能系统的预布局与动态调度策略。通过Matlab代码实现,提出了一种结合预配置和动态调度的两阶段优化模型,旨在应对电网故障或极端事件时快速恢复供电能力。文中采用了多种智能优化算法(如PSO、MPSO、TACPSO、SOA、GA等)进行对比分析,验证所提策略的有效性和优越性。研究不仅关注移动储能单元的初始部署位置,还深入探讨其在故障发生后的动态路径规划与电力支援过程,从而全面提升配电网的韧性水平。; 适合人群:具备电力系统基础知识和Matlab编程能力的研究生、科研人员及从事智能电网、能源系统优化等相关领域的工程技术人员。; 使用场景及目标:①用于科研复现,特别是IEEE顶刊或SCI一区论文中关于配电网韧性、应急电源调度的研究;②支撑电力系统在灾害或故障条件下的恢复力优化设计,提升实际电网应对突发事件的能力;③为移动储能系统在智能配电网中的应用提供理论依据和技术支持。; 阅读建议:建议读者结合提供的Matlab代码逐模块分析,重点关注目标函数建模、约束条件设置以及智能算法的实现细节。同时推荐参考文中提及的MPS预配置与动态调度上下两部分,系统掌握完整的技术路线,并可通过替换不同算法或测试系统进一步拓展研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值