V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
KasuganoSoras
V2EX  ›  分享创造

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

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

    前天晚上我和朋友在群里讨论,他开发了一个点歌台,易语言写的,在 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 的趴间。
    不同点就是这些都不是点歌机制,播放什么歌决定权在一个或几个人手上而已,但是可以自己开一个趴间(直播间)放自己的歌然后让别人来一起听一起交流。
    sobigfish
        4
    sobigfish  
       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 小时起步的
    wispx
        22
    wispx  
       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
    一晚上,太强了👍🏻
    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
    歌从哪里来?
    keith1126
        46
    keith1126  
       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。只是个人小程序类目限制不让上,最后就放在那边了。
    a194259440
        70
    a194259440  
       2019-11-08 17:42:57 +08:00
    设置昵称老是失败:设置昵称 XX 有提示不能写空格 设置昵称 XX 又当作消息发送了
    a194259440
        71
    a194259440  
       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 了
    zpfhbyx
        74
    zpfhbyx  
       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   ·   实用小工具   ·   1023 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 22:32 · PVG 06:32 · LAX 14:32 · JFK 17:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.