写一个MP3播放器(vuejs+nodejs+mongodb)

运用nodejs实现音乐播放器 看过小编这篇博客的读者应该知道,博客链接为:Python爬虫:通过做项目,小编了解了酷狗音乐的加密过程,酷狗音乐的相关加密也就那样,当时,小编运用的是Python代码实现的,现在小编将这个过程运用nodejs实现,并结合html界面进行显示。代码中也引入了APlayer.js这个方便播放音乐的js文件(有兴趣的读者可以去搜索这个玩意看看),虽然引入Aplayer这个方便播放音乐文件的js文件,但是相关Aplayer样式并没有引用进去(引入之后不是小编想要的那样效 阅读详情

写一个MP3播放器(vue-cli+element ui+express+mongoose)

最近刚学完vuejs,为了增进理解就写了个MP3播放器(用到了vuex,vue-router,es6)。可上传歌曲歌词封面文件,可管理歌曲,可点击封面放大图片等
项目地址:https://github.com/variinlkt/MP3-vueplayer
项目截图:



项目还有很多不完善的地方,欢迎交流

在这里总结一下在练手时遇到的知识点:

一.html5的audio对象属性、方法、事件

了解html5中的audio对象是写好一个音频播放器的关键

1.属性

audioTracks 返回表示可用音频轨道的 AudioTrackList 对象
autoplay 设置或返回是否在加载完成后随即播放音频
controller 返回表示音频当前媒体控制器的MediaController 对象
controls 设置或返回音频是否显示控件(比如播放/暂停等)
crossOrigin 设置或返回音频的 CORS 设置
currentSrc 回当前音频的 URL
defaultMuted 设置或返回音频默认是否静音
defaultPlaybackRate 设置或返回音频的默认播放速度
duration 返回当前音频的长度(以秒计)
error 返回表示音频错误状态的 MediaError 对象
loop 设置或返回音频是否应在结束时重新播放
mediaGroup 设置或返回音频所属的组合(用于连接多个音频元素)
networkState 返回音频的当前网络状态
paused 设置或返回音频是否暂停
played 返回表示音频已播放部分的 TimeRanges 对象
preload 设置或返回音频是否应该在页面加载后进行加载
readyState 返回音频当前的就绪状态
seeking 返回用户是否正在音频中进行查找
src 设置或返回音频元素的当前来源
textTracks 返回表示可用文本轨道的 TextTrackList 对象
volume 设置或返回音频的音量

该项目用到的属性:
volume,crossOrigin,duration,src,currentTime,ended,loop
其中设置crossOrigin属性为“anonymous”,不设置就无法通过js来动态更改audio对象的src

2.方法

addTextTrack() 在音频中添加一个新的文本轨道
canPlayType() 检查浏览器是否可以播放指定的音频类型
fastSeek() 在音频播放器中指定播放时间。
getStartDate() 返回一个新的Date对象,表示当前时间轴偏移量
load() 重新加载音频元素
play() 开始播放音频
pause() 暂停当前播放的音频

这里用到load,play,pause

3.事件

当视频/音频(audio/video)已经加载后,视频/音频(audio/video)的时长从 “NaN” 修改为正在的时长。
在视频/音频(audio/video)加载过程中,事件的触发顺序如下:
onloadstart在浏览器开始寻找指定视频/音频(audio/video)触发。
ondurationchange在视频/音频(audio/video)的时长发生变化时触发。
onloadedmetadata在指定视频/音频(audio/video)的元数据加载后触发。
onloadeddata在当前帧的数据加载完成且还没有足够的数据播放视频/音频(audio/video)的下一帧时触发。
onprogress在浏览器下载指定的视频/音频(audio/video)时触发。
oncanplay在用户可以开始播放视频/音频(audio/video)时触发。
oncanplaythrough在视频/音频(audio/video)可以正常播放且无需停顿和缓冲时触发。

这里用到ondurationchange,用于切换歌曲时获取歌曲时长

二.图片旋转动画


这里可以看到:播放音乐时歌曲封面是随着歌曲播放而旋转的,播放暂停则暂停旋转
实现原理:css3的animation
html:

<div class="circle">
        <div class="circle-inside" :style="{backgroundImage: 'url('+cov+')',animationPlayState:ps?'running':'paused'}">
        </div>
</div>
//ps为当前的播放状况playstate

css:

.circle-inside{
  width: 100px;
  height: 
sound-play:NodeJS 的原生音频播放器 声音播放 Node 的死简单声音播放器——因为它应该很简单。 const sound = require ( "sound-play" ) ; sound . play ( "file.mp3" ) ; 支持.wav 、 .mp3等扩展名。 在Windows和MacOS 安装 npm install sound-play yarn add sound-play 例子 相对路径 sound . play ( "file.mp3" ) ; 要么 const path = require ( "path" ) ; const filePath = path . join ( __dirname , "file.mp3" ) ; sound . play ( filePath ) ; 调节音量 /** * 0 = silent * 0.5 = default * 1 立即下载

相关推荐

告别迷茫!新手如何从RTKLIB命令行程序入手,快速理解GNSS解算全流程

本文为GNSS新手提供RTKLIB命令行程序实战指南,重点介绍如何通过`rnx2rtkp`后处理解算工具快速掌握GNSS解算全流程。从环境搭建、程序编译到核心算法解析,帮助读者理解RTKLIB源码结构,并通过真实数据处理案例演示完整解算过程,是入门GNSS定位技术的实用教程。

weixin_42524226的博客 359

立创开源:基于STM32F407的大疆M30T无人机PSDK机载开发板硬件设计与飞行控制实现

本文详细介绍了基于STM32F407微控制器为大疆M30T无人机设计PSDK机载开发板的完整流程。从关键的E-Port接口电路设计、电源保护,到STM32最小系统搭建,再到通过PSDK实现与无人机的通信及基础飞行控制,提供了从硬件到软件的全栈实战指南,助力开发者快速入门无人机负载开发。

weixin_35649491的博客 403

基因ID转换避坑指南:如何用org.Hs.eg.db把ENSEMBL ID变成可读的gene symbol

本文详细介绍了如何将RNA-seq等数据中常见的ENSEMBL ID转换为可读的基因符号(Gene Symbol),重点对比了biomaRt与org.Hs.eg.db两大工具的优劣,并深入剖析了多对多映射、版本号失效及非编码基因Symbol缺失三大核心陷阱。文章提供了针对TCGA、GEO等不同数据源的定制化处理方案与完整的稳健转换流程,帮助生物信息学分析者避免常见错误,确保下游分析的准确性。

weixin_28223453的博客 701

从原理图到PCB:手把手教你绘制DRV8301驱动板(附完整代码与避坑指南)

本文详细介绍了如何从原理图设计到PCB布局,手把手教你绘制DRV8301驱动板,特别适用于FOC(磁场定向控制)系统开发。内容涵盖元器件选型、电源树架构设计、栅极驱动电路、PCB布局技巧、焊接调试及代码配置,并附有完整代码与常见问题避坑指南,帮助工程师快速掌握DRV8301驱动板的设计与优化。

weixin_33716941的博客 397

iPhone用户必看:不装App也能搞定GitHub 2FA验证的3种方法(附恢复码管理技巧)

本文为iPhone用户提供了无需安装第三方App即可完成GitHub双重身份验证(2FA)的三种原生方案:利用相机扫码与iCloud钥匙串自动填充、使用iCloud钥匙串内置的TOTP验证码生成器,以及借助Safari浏览器扩展。文章详细解析了每种方法的操作步骤、适用场景,并重点强调了恢复码的安全管理与多层备份策略,帮助开发者在提升账户安全的同时,享受苹果生态的无缝便捷体验。

weixin_29324401的博客 661

LCD工程师必看:MIPI DSI的LP/HS模式切换全流程拆解(附高通平台实测)

本文为LCD工程师深度解析MIPI DSI接口中低速(LP)与高速(HS)模式切换的全流程。文章结合高通平台实测波形,从协议状态机、时序关键参数到实战调试案例,系统拆解了模式切换的本质、协同机制及常见问题排查方法,重点阐述了LP模式在低功耗控制与HS模式在高速数据传输中的核心作用与切换时序。

weixin_29240711的博客 547

扩散模型与强化学习(13):In-Context Reward Hacking现象与解决方案

奖励作弊(Reward Hacking)指智能体通过钻规则漏洞而非真正完成任务来最大化奖励信号。以论文编辑实验为例,研究提出“上下文奖励作弊”(ICRH)概念,即模型利用共享上下文钻空子,如盲目添加“正确!”或输出无关内容。实验发现,模型规模扩大可能加剧ICRH,且提示词优化难以根治。与传统奖励作弊不同,ICRH发生在部署阶段,由通用性驱动。应对建议包括多轮测试、多样化反馈及异常场景模拟,但尚无完美解决方案。

沉迷单车的追风少年 1320

基于STM32、HAL库的WF282A气压传感器 驱动程序设计

测量范围:0-2.5MPa(可根据需求选择其他量程)输出方式:I2C或SPI数字接口。温度补偿范围:-20℃~85℃。低功耗设计,适合电池供电应用。工作电压:3.3V/5V。精度:±0.1%FS。

corlin6688的博客 396

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: angularjs
下一篇: 2018年网易前端笔试题总结
VarIInJSon
博客等级 码龄10年 4粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值