开源一个好玩的项目 SyncMusic,一起在线听歌和聊天 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
KasuganoSoras
V2EX    分享创造

开源一个好玩的项目 SyncMusic,一起在线听歌和聊天

  •  6
     
  •   KasuganoSoras
    kasuganosoras 2019-11-07 14:51:33 +08:00 13025 次点击
    这是一个创建于 2169 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前天晚上我和朋友在群里讨论,他开发了一个点歌台,易语言写的,在 B 站上通过直播的方式来播放,通过弹幕点歌。

    然后我就有了个想法,做一个网页的点歌台,然后也可以做类似于弹幕这样的实时交流功能。

    经过一个晚上的开发,我做出了这个项目 SyncMusic,基本上实现了和他的点歌台一样的功能,唯一不同的地方就是我的点歌台是在网页上播放音乐的,而不是直播。

    img

    项目地址: https://github.com/kasuganosoras/SyncMusic

    代码写了很详细的注释,非常适合新人学习 PHP WebSocket 应用程序开发。

    功能特性

    • 支持在线点歌
    • 支持多人实时聊天
    • 支持投票切掉当前音乐
    • 没人点歌的时候可以随机播放音乐
    • 管理员可切歌
    • 管理员可删除指定音乐
    • 管理员可将指定音乐提前播放
    • 管理员可禁言指定用户
    • 美观的界面 (Material Design)
    • 无需登录,任何人都可以点歌
    • 无需数据库,由 Swoole 内存表储存数据

    有个地方就是获取音乐时间长度是用了 Python,原本我是想直接用 PHP 来获取的,但是有点麻烦,还要导入一个单独的库,想了想还是用最简单的办法来解决,于是就用 Python 整了个简单的脚本。

    如果你有更好的读取音乐时间的实现方法,欢迎提 Pr 或通过 Issues 告诉我。

    在线体验

    如果你只是想体验一下或者单纯听歌,可以访问我的 Demo:https://music.tql.ink/

    还请 dalao 们合理玩耍,不要点一些奇奇怪怪或者很难听的音乐,谢谢了~

    91 条回复    2019-12-26 18:49:40 +08:00
    azssjli
        1
    azssjli  
       2019-11-07 14:59:51 +08:00
    你觉得你说了布点奇怪的歌我就会不点了吗,我就点 XD
    KasuganoSoras
        2
    KasuganoSoras  
    OP
       2019-11-07 15:02:56 +08:00   1
    @azssjli #1 其实还在测试的时候我们群里的人就点了一大堆奇奇怪怪的歌了 23333
    BreadKiller
        3
    BreadKiller  
       2019-11-07 15:09:42 +08:00   1
    虾米以前网页版有 loop,后来有自己的直播间可以让朋友进来跟听(就是我放什么别人进来的一样听什么);
    现在虾米 app 有趴间,功能上和 loop 差不多,可以有三个人上台轮流放歌,好听就给赞,不好听就踩(类似投票机制);
    上面的都可以文字交流,网页的 loop 和直播间现在都没了,只剩下 app 的趴间。
    不同点就是这些都不是点歌机制,播放什么歌决定权在一个或几个人手上而已,但是可以自己开一个趴间(直播间)放自己的歌然后让别人来一起听一起交流。
    run2
        4
    run2  
       2019-11-07 15:25:14 +08:00   1
    可以弄个小程序 点歌, 给咖啡厅 /餐吧 这些用
    VIP 可以点歌置顶什么的
    KasuganoSoras
        5
    KasuganoSoras  
    OP
       2019-11-07 15:27:30 +08:00
    @sobigfish #4 想法不错,至于 VIP 这个就需要接入用户系统了,这个以后再考虑吧
    Uyuhz
        6
    Uyuhz  
       2019-11-07 15:37:47 +08:00
    看起来挺好玩的...不过刚才点一首 https://music.163.com/#/song?id=515143072 一直失败换了一首又好了...然后我才发现居然还有非客户端不能播放的歌...
    Opportunity
        7
    Opportunity  
       2019-11-07 15:43:09 +08:00
    @sobigfish KFC 现在就有这个功能
    luckyrayyy
        8
    luckyrayyy  
       2019-11-07 15:43:59 +08:00
    有点意思
    luckyrayyy
        9
    luckyrayyy  
       2019-11-07 15:46:12 +08:00
    我怎么看不到别人说话,自己打的字也没看到在哪
    KasuganoSoras
        10
    KasuganoSoras  
    OP
       2019-11-07 16:01:26 +08:00
    @Uyuhz #6 @luckyrayyy #9 刚刚服务器有 bug,修好了
    ZredoC
        11
    ZredoC  
       2019-11-07 16:03:02 +08:00
    SuperM
        12
    SuperM  
       2019-11-07 16:51:48 +08:00
    支持下,感觉蛮好玩的
    Uyuhz
        13
    Uyuhz  
       2019-11-07 17:06:27 +08:00
    @KasuganoSoras 我说的 515143072 点歌失败的那个好像是网易云的问题,不是你的问题
    lmx111aaa
        14
    lmx111aaa  
       2019-11-07 17:23:58 +08:00
    讲道理,就像一个人安安静静的听歌
    KasuganoSoras
        15
    KasuganoSoras  
    OP
       2019-11-07 17:42:58 +08:00
    @lmx111aaa #14 其实最初的想法也是安静听歌。。只是人一多起来就欢乐了 2333
    moonrailgun
        16
    moonrailgun  
       2019-11-07 18:26:00 +08:00
    高中生可太厉害了
    Ultraman
        17
    Ultraman  
       2019-11-07 18:35:07 +08:00 via Android
    lost river 哪位给安排上
    lxk11153
        18
    lxk11153  
       2019-11-07 19:05:05 +08:00
    "点歌台,易语言写的" 叫啥?
    yoqu
        19
    yoqu  
       2019-11-07 19:11:00 +08:00
    KasuganoSoras
        20
    KasuganoSoras  
    OP
       2019-11-07 19:57:52 +08:00
    MyFaith
        21
    MyFaith  
       2019-11-07 20:21:00 +08:00
    之前在斗鱼某点歌直播间,点了几首首 2 小时起步的
    4DAX07B8Kle4Dm6T
        22
    4DAX07B8Kle4Dm6T  
       2019-11-07 20:27:07 +08:00
    6666,不错
    sdytman
        23
    sdytman  
       2019-11-07 20:31:00 +08:00 via iPhone
    这个 ui 设楼主自己写的?
    KasuganoSoras
        24
    KasuganoSoras  
    OP
       2019-11-07 20:50:34 +08:00
    @sdytman #23 嗯,基于 Material Design 设计,除了这个背景模糊效果是参考 MKOnlineMusicPlayer 改的,其他都是我自己写的。
    zuokanyunqishi
        25
    zuokanyunqishi  
       2019-11-07 22:33:51 +08:00 via Android
    厉害厉害
    nobt
        26
    nobt  
       2019-11-07 23:37:19 +08:00 via iPhone
    为啥我 safari 没声音
    mywaiting
        27
    mywaiting  
       2019-11-08 00:15:32 +08:00
    @sobigfish 这个需求我这里还真有........
    FEDT
        28
    FEDT  
       2019-11-08 01:01:27 +08:00 via iPhone
    一晚上,太强了
    table cellpadding="0" cellspacing="0" border="0" width="100%"> hanhuoer
        29
    hanhuoer  
       2019-11-08 01:08:27 +08:00
    哈哈,刚去逛了逛,厉害
    crab
        30
    crab  
       2019-11-08 01:11:04 +08:00
    虾米 loop
    miaomiao888
        31
    miaomiao888  
       2019-11-08 03:47:46 +08:00
    想到以前的多米 DJ,谁都可以上台当 DJ 放自己喜欢的音乐然后一起听
    Linon
        32
    Linon  
       2019-11-08 04:58:25 +08:00 via Android
    一定要设置违禁词,国歌什么的
    longkas
        33
    longkas  
       2019-11-08 08:47:48 +08:00 via Android
    一晚上,太牛逼了,我弄了个放电影直播间大半年
    codingBug
        34
    codingBug  
       2019-11-08 09:32:30 +08:00
    我想问问,要用耳机吗?
    SmallNing
        35
    SmallNing  
       2019-11-08 09:33:48 +08:00
    感觉 挺好玩的 ~
    SmallNing
        36
    SmallNing  
       2019-11-08 09:50:48 +08:00
    要是有 app 就好啦 ~ 再也不用找歌曲听了
    qping
        37
    qping  
       2019-11-08 09:50:50 +08:00
    音乐的源用的哪里?
    qping
        38
    qping  
       2019-11-08 09:53:59 +08:00
    @qping #37 我自己找到了,给楼主点个赞
    BuilderQiu
        39
    BuilderQiu  
       2019-11-08 09:56:30 +08:00
    如果大部分都挂机听歌...这 30%切歌就切不动了..
    imdong
        40
    imdong  
       2019-11-08 10:19:18 +08:00
    真云听歌

    点啥听啥,佛系随缘。
    aalikes95
        41
    aalikes95  
       2019-11-08 10:42:48 +08:00
    不错,相当的爽
    dinjufen
        42
    dinjufen  
       2019-11-08 10:49:19 +08:00
    题主高中生吗?我自愧不如。。
    wsbnd9
        43
    wsbnd9  
       2019-11-08 11:24:10 +08:00
    切歌太难了
    cwjokaka
        44
    cwjokaka  
       2019-11-08 12:01:42 +08:00
    有趣,别人的一晚上系列
    rykka
        45
    rykka  
       2019-11-08 12:30:50 +08:00 via Android
    歌从哪里来?
    zackwu
        46
    zackwu  
       2019-11-08 12:48:00 +08:00
    做的很不错啊~
    7654
        47
    7654  
       2019-11-08 12:54:57 +08:00
    SSL 810 端口的服务我这里的网络不支持。so sad
    gzzchh
        48
    gzzchh  
       2019-11-08 13:11:40 +08:00 via Android
    聊天内容要审查哦,不然容易查水表
    killerv
        49
    killerv  
       2019-11-08 13:30:36 +08:00
    可以的,挺好玩
    zerozz
        50
    zerozz  
       2019-11-08 13:45:54 +08:00
    大佬的一晚上系列,体验了一下,挺好玩,666
    Rekkles
        51
    Rekkles  
       2019-11-08 14:19:53 +08:00
    6666
    xianxiaobo
        52
    xianxiaobo  
       2019-11-08 14:30:11 +08:00
    建议像直播放电影里面那样的积分制播放下一首歌曲,切歌太难了,更不要说连续切歌了。
    haozes
        53
    haozes  
       2019-11-08 14:39:21 +08:00
    不错不错
    caryqy
        54
    caryqy  
       2019-11-08 14:41:13 +08:00
    和你朋友说下,直播弹幕点歌的注意一些歌是不能放的,不然直播间就没了
    Donne
        55
    Donne  
       2019-11-08 14:42:36 +08:00
    一晚上弄出来,我滴个龟龟
    NotNil1
        56
    NotNil1  
       2019-11-08 14:55:33 +08:00
    厉害厉害,好好玩啊
    ksc010
        57
    ksc010  
       2019-11-08 15:08:24 +08:00
    可以考虑增加“频道”功能
    将有不同音乐品味的人区分开来
    ksc010
        58
    ksc010  
       2019-11-08 15:10:47 +08:00
    feature2:
    待播放列表 直接可以投票 超过一定票数自动跳过不播放
    hideonwhere
        59
    hideonwhere  
       2019-11-08 15:14:04 +08:00
    曲库太少了吧
    IMengXin
        60
    IMengXin  
       2019-11-08 15:25:50 +08:00
    为啥我点的所有歌都是 未搜索到此歌曲
    archknight
        61
    archknight  
       2019-11-08 15:30:48 +08:00
    都是在疯狂切歌
    senher
        62
    senher  
       2019-11-08 15:33:29 +08:00
    这些歌都是哪来的?
    cont
        63
    cont  
       2019-11-08 15:43:01 +08:00
    我点什么歌都是提示“未搜索到此歌曲”
    natforum
        64
    natforum  
       2019-11-08 15:45:54 +08:00
    11ssss
        65
    11ssss  
       2019-11-08 15:46:53 +08:00
    不是曲库少 是 ip ban 了
    Xatoi
        66
    Xatoi  
       2019-11-08 17:00:29 +08:00 via iPhone
    版权灾难
    richard1122
        67
    richard1122  
       2019-11-08 17:08:31 +08:00
    之前做过一个类似的,在处理用户主动切、用户结束后切、投票这些问题上有一些实践,贴一段代码供参考:

    ```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
    mrcuya
        69
    mrcuya  
       2019-11-08 17:36:36 +08:00
    我之前实现了一个小程序版的,虾米也是抄袭国外的 turntable。只是个人小程序类目限制不让上,最后就放在那边了。
    VxLzKg4uLbi32w60
        70
    VxLzKg4uLbi32w60  
       2019-11-08 17:42:57 +08:00
    设置昵称老是失败:设置昵称 XX 有提示不能写空格 设置昵称 XX 又当作消息发送了
    VxLzKg4uLbi32w60
        71
    VxLzKg4uLbi32w60  
       2019-11-08 17:47:40 +08:00
    然后,收集一下被切过的歌吧,设置黑名单~~~~
    Yien
        72
    Yien  
       2019-11-08 18:04:08 +08:00 via iPhone
    一晚上
    54xavier
        73
    54xavier  
       2019-11-08 19:41:54 +08:00
    听了一下午的歌,来留个言,不错不错 github start 了
    justseemore
        74
    justseemore  
       2019-11-08 19:43:52 +08:00
    老哥,你 cxk-ball 是认真的么..
    squallsdjl
        75
    squallsdjl  
       2019-11-09 02:58:42 +08:00
    话说。。。这些歌曲会遇到版权问题么。。,TAT
    MagicBoy
        76
    MagicBoy  
       2019-11-09 11:03:45 +08:00
    楼主高中生?冒昧问一下楼主多大了
    pbrluoji
        77
    pbrluoji  
       2019-11-09 15:09:44 +08:00
    听不到声音。。。。。
    pbrluoji
        78
    pbrluoji  
       2019-11-09 15:16:25 +08:00
    桌面 chrome 77.0 版本听不到声音,edge 可以
    JssDream
        79
    JssDream  
       2019-11-09 16:03:00 +08:00
    感觉有点东西,很有意思!!可以多加些图片,表情什么的!!
    matsuijurina
        80
    matsuijurina  
       2019-11-09 16:10:19 +08:00 via Android
    "半天撸了一个站,我才初三请轻赞。" v 站传统怎么楼上好多人都不记得了
    rekulas
        81
    rekulas  
       2019-11-09 22:02:45 +08:00
    guanhui07
        82
    guanhui07  
       2019-11-10 12:27:56 +08:00
    蛮好玩的
    jemyzhang
        83
    jemyzhang  
       2019-11-11 09:42:00 +08:00
    赞一下, 挺有意思,听听大家平时都听什么歌
    doveyoung
        84
    doveyoung  
       2019-11-11 11:48:44 +08:00
    在线 16 人,正在播放好汉歌
    dogepar
        85
    dogepar  
       2019-11-11 16:41:03 +08:00
    挺帅!
    DavidG
        86
    DavidG  
       2019-11-14 11:10:22 +08:00
    点了潇洒走一回 潜伏的爱 大花轿 走四方等经典歌曲,感觉非常满意
    cydian
        87
    cydian  
       2019-11-15 01:12:57 +08:00 via Android
    你的 API 里面添加了 netease 的 cookie ? 我打开了看下是 mkplayer 但是为什么不能用 QQ ?
    nazznazzz
        88
    nazznazzz  
       2019-11-15 20:35:45 +08:00
    挺好玩的,不过能按喜好分房间就好了
    evilnull
        89
    evilnull  
       2019-12-04 16:35:17 +08:00
    @KasuganoSoras 证书过期了,而且启用了 HSTS,没法忽略
    tmsdy0404
        90
    tmsdy0404  
       2019-12-07 11:51:32 +08:00
    已经成功架在办公室内网。。。最后还是弄了个虚拟机装。
    xcstream
        91
    xcstream  
       2019-12-26 18:49:40 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     871 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 20:59 PVG 04:59 LAX 13:59 JFK 16:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86