前天晚上我和朋友在群里讨论,他开发了一个点歌台,易语言写的,在 B 站上通过直播的方式来播放,通过弹幕点歌。
然后我就有了个想法,做一个网页的点歌台,然后也可以做类似于弹幕这样的实时交流功能。
经过一个晚上的开发,我做出了这个项目 SyncMusic,基本上实现了和他的点歌台一样的功能,唯一不同的地方就是我的点歌台是在网页上播放音乐的,而不是直播。
项目地址: https://github.com/kasuganosoras/SyncMusic
代码写了很详细的注释,非常适合新人学习 PHP WebSocket 应用程序开发。
有个地方就是获取音乐时间长度是用了 Python,原本我是想直接用 PHP 来获取的,但是有点麻烦,还要导入一个单独的库,想了想还是用最简单的办法来解决,于是就用 Python 整了个简单的脚本。
如果你有更好的读取音乐时间的实现方法,欢迎提 Pr 或通过 Issues 告诉我。
如果你只是想体验一下或者单纯听歌,可以访问我的 Demo:https://music.tql.ink/
还请 dalao 们合理玩耍,不要点一些奇奇怪怪或者很难听的音乐,谢谢了~
![]() |
1
azssjli 30 天前
你觉得你说了布点奇怪的歌我就会不点了吗,我就点 XD
|
![]() |
2
KasuganoSoras 30 天前 ♥ 1
@azssjli #1 其实还在测试的时候我们群里的人就点了一大堆奇奇怪怪的歌了 23333
|
![]() |
3
BreadKiller 30 天前 ♥ 1
虾米以前网页版有 loop,后来有自己的直播间可以让朋友进来跟听(就是我放什么别人进来的一样听什么);
现在虾米 app 有趴间,功能上和 loop 差不多,可以有三个人上台轮流放歌,好听就给赞,不好听就踩(类似投票机制); 上面的都可以文字交流,网页的 loop 和直播间现在都没了,只剩下 app 的趴间。 不同点就是这些都不是点歌机制,播放什么歌决定权在一个或几个人手上而已,但是可以自己开一个趴间(直播间)放自己的歌然后让别人来一起听一起交流。 |
![]() |
4
sobigfish 30 天前 ♥ 1
可以弄个小程序 点歌, 给咖啡厅 /餐吧 这些用
VIP 可以点歌置顶什么的 😂 |
![]() |
5
KasuganoSoras 30 天前
@sobigfish #4 想法不错,至于 VIP 这个就需要接入用户系统了,这个以后再考虑吧
|
![]() |
6
Uyuhz 30 天前
看起来挺好玩的...不过刚才点一首 https://music.163.com/#/song?id=515143072 一直失败换了一首又好了...然后我才发现居然还有非客户端不能播放的歌...
|
![]() |
7
Opportunity 30 天前
@sobigfish KFC 现在就有这个功能
|
![]() |
8
luckyrayyy 30 天前
有点意思
|
![]() |
9
luckyrayyy 30 天前
我怎么看不到别人说话,自己打的字也没看到在哪
|
![]() |
10
KasuganoSoras 30 天前
@Uyuhz #6 @luckyrayyy #9 刚刚服务器有 bug,修好了
|
![]() |
11
ZredoC 30 天前
👍👍👍
|
12
SuperM 30 天前
支持下,感觉蛮好玩的
|
![]() |
13
Uyuhz 30 天前
@KasuganoSoras 我说的 515143072 点歌失败的那个好像是网易云的问题,不是你的问题😂
|
14
lmx111aaa 30 天前
讲道理,就像一个人安安静静的听歌
|
![]() |
15
KasuganoSoras 30 天前
@lmx111aaa #14 其实最初的想法也是安静听歌。。只是人一多起来就欢乐了 2333
|
16
moonrailgun 30 天前
高中生可太厉害了
|
![]() |
17
vcinex 30 天前 via Android
lost river 哪位给安排上🙃
|
![]() |
18
lxk11153 30 天前
"点歌台,易语言写的" 叫啥?
|
19
yoqu 30 天前
👍👍👍
|
![]() |
20
KasuganoSoras 30 天前
|
![]() |
21
MyFaith 30 天前
之前在斗鱼某点歌直播间,点了几首首 2 小时起步的
|
![]() |
22
wispx 30 天前
6666,不错
|
23
sdytman 30 天前 via iPhone
这个 ui 设楼主自己写的?
|
![]() |
24
KasuganoSoras 30 天前
@sdytman #23 嗯,基于 Material Design 设计,除了这个背景模糊效果是参考 MKOnlineMusicPlayer 改的,其他都是我自己写的。
|
![]() |
25
zuokanyunqishi 29 天前 via Android
厉害厉害👍
|
![]() |
26
nobt 29 天前 via iPhone
为啥我 safari 没声音
|
![]() |
28
FEDT 29 天前 via iPhone
一晚上,太强了👍🏻
|
![]() |
29
hanhuoer 29 天前
哈哈,刚去逛了逛,厉害👍
|
![]() |
30
crab 29 天前
虾米 loop
|
![]() |
31
miaomiao888 29 天前
想到以前的多米 DJ,谁都可以上台当 DJ 放自己喜欢的音乐然后一起听
|
32
Linon 29 天前 via Android
一定要设置违禁词,国歌什么的
|
33
longkas 29 天前 via Android
一晚上,太牛逼了,我弄了个放电影直播间大半年
|
![]() |
34
codingBug 29 天前
我想问问,要用耳机吗?
|
![]() |
35
SmallNing 29 天前
感觉 挺好玩的 ~
|
![]() |
36
SmallNing 29 天前
要是有 app 就好啦 ~ 再也不用找歌曲听了
|
![]() |
37
qping 29 天前
音乐的源用的哪里?
|
![]() |
39
BuilderQiu 29 天前
如果大部分都挂机听歌...这 30%切歌就切不动了..
|
![]() |
40
imdong 29 天前
真·云听歌
点啥听啥,佛系随缘。 |
![]() |
41
aalikes95 29 天前
不错,相当的爽
|
![]() |
42
dinjufen 29 天前
题主高中生吗?我自愧不如。。
|
![]() |
43
wsbnd9 29 天前
切歌太难了
|
![]() |
44
cwjokaka 29 天前
有趣,别人的一晚上系列
|
![]() |
45
rykka 29 天前 via Android
歌从哪里来?
|
![]() |
46
keith1126 29 天前
做的很不错啊~
|
![]() |
47
7654 29 天前
SSL 810 端口的服务我这里的网络不支持。so sad
|
48
gzzchh 29 天前 via Android
聊天内容要审查哦,不然容易查水表
|
![]() |
49
killerv 29 天前
可以的,挺好玩
|
![]() |
50
zerozz 29 天前
大佬的一晚上系列,体验了一下,挺好玩,666
|
![]() |
51
Rekkles 29 天前
6666
|
![]() |
52
xianxiaobo 29 天前
建议像直播放电影里面那样的积分制播放下一首歌曲,切歌太难了,更不要说连续切歌了。
|
![]() |
53
haozes 29 天前
不错不错
|
![]() |
54
caryqy 29 天前
和你朋友说下,直播弹幕点歌的注意一些歌是不能放的,不然直播间就没了
|
![]() |
55
Donne 29 天前
一晚上弄出来,我滴个龟龟
|
![]() |
56
NotNil1 29 天前
厉害厉害,好好玩啊
|
![]() |
57
ksc010 29 天前
可以考虑增加“频道”功能
将有不同音乐品味的人区分开来 |
![]() |
58
ksc010 29 天前
feature2:
待播放列表 直接可以投票 超过一定票数自动跳过不播放 |
![]() |
59
hideonwhere 29 天前
曲库太少了吧
|
![]() |
60
IMengXin 29 天前
为啥我点的所有歌都是 未搜索到此歌曲
|
61
archknight 29 天前
![]() |
62
senher 29 天前
这些歌都是哪来的?
|
![]() |
63
cont 29 天前
我点什么歌都是提示“未搜索到此歌曲”
|
![]() |
65
11ssss 29 天前
不是曲库少 是 ip ban 了
|
![]() |
66
Xatoi 29 天前 via iPhone
版权灾难
|
![]() |
67
richard1122 29 天前
之前做过一个类似的,在处理用户主动切、用户结束后切、投票这些问题上有一些实践,贴一段代码供参考:
```c# private void CheckShouldForwardCurrentSong() { var userList = list.UserList; var downVoteUserCount = downvoteUsers.Intersect(userList).Count; var undeterminedCount = userList.Except(downvoteUsers).Except(finishedUsers).Count(); var connectedUserCount = userList.Select(it => socketManager.IsConnected(it)).Count(); if (!list.IsPlaying || downVoteUserCount >= QueryForceForwardCount(connectedUserCount) || undeterminedCount == 0) { ShouldForwardNow(); } else if (undeterminedCount <= connectedUserCount * 0.5) { if (finishTimeoutTimer != null) return; finishTimeoutTimer = new Timer(ShouldForwardNow, null, 5 * 1000, Infinite); } } private static int QueryForceForwardCount(int total) { return Convert.ToInt32(Math.Ceiling((double)total / 2)); } ``` 主要是需要考虑网络不好的用户可能还没听完,所以有一个 5 秒的缓冲期。 用户分成三类: * 主动切:downVoteUserCount * 已结束当前歌曲:finishedUsers * 没有态度:undeterminedCount |
![]() |
69
mrcuya 29 天前
我之前实现了一个小程序版的,虾米也是抄袭国外的 turntable。只是个人小程序类目限制不让上,最后就放在那边了。
|
70
a194259440 29 天前
设置昵称老是失败:设置昵称 XX 有提示不能写空格 设置昵称 XX 又当作消息发送了
|
71
a194259440 29 天前
然后,收集一下被切过的歌吧,设置黑名单~~~~
|
![]() |
72
Yien 29 天前 via iPhone
一晚上🐂🍺
|
![]() |
73
54xavier 29 天前
听了一下午的歌,来留个言,不错不错 github start 了
|
![]() |
74
zpfhbyx 29 天前
老哥,你 cxk-ball 是认真的么..
|
![]() |
75
squallsdjl 28 天前
话说。。。这些歌曲会遇到版权问题么。。,TAT
|
76
MagicBoy 28 天前
楼主高中生?冒昧问一下楼主多大了
|
![]() |
77
pbrluoji 28 天前
听不到声音。。。。。
|
![]() |
78
pbrluoji 28 天前
桌面 chrome 77.0 版本听不到声音,edge 可以
|
![]() |
79
JssDream 28 天前
感觉有点东西,很有意思!!可以多加些图片,表情什么的!!
|
![]() |
80
matsuijurina 28 天前 via Android
"半天撸了一个站,我才初三请轻赞。" v 站传统怎么楼上好多人都不记得了
|
![]() |
81
rekulas 28 天前
|
![]() |
82
guanhui07 27 天前
蛮好玩的
|
83
jemyzhang 26 天前
赞一下, 挺有意思,听听大家平时都听什么歌
|
![]() |
84
doveyoung 26 天前
在线 16 人,正在播放好汉歌
|
85
dogepar 26 天前
挺帅!
|
![]() |
86
DavidG 23 天前
点了潇洒走一回 潜伏的爱 大花轿 走四方等经典歌曲,感觉非常满意
|
![]() |
87
cydian 22 天前 via Android
你的 API 里面添加了 netease 的 cookie ? 我打开了看下是 mkplayer 但是为什么不能用 QQ ?
|
![]() |
88
nazznazzz 22 天前
挺好玩的,不过能按喜好分房间就好了
|
89
evilnull 3 天前
@KasuganoSoras 证书过期了,而且启用了 HSTS,没法忽略
|
90
tmsdy0404 10 小时 21 分钟前
已经成功架在办公室内网。。。最后还是弄了个虚拟机装。
|