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

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

  •  6
     
  •   KasuganoSoras · 32 天前 · 6504 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    img

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

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

    功能特性

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

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

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

    在线体验

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

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

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

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

    ```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   31 天前
    我之前实现了一个小程序版的,虾米也是抄袭国外的 turntable。只是个人小程序类目限制不让上,最后就放在那边了。
        70
    a194259440   31 天前
    设置昵称老是失败:设置昵称 XX 有提示不能写空格 设置昵称 XX 又当作消息发送了
        71
    a194259440   31 天前
    然后,收集一下被切过的歌吧,设置黑名单~~~~
        72
    Yien   31 天前 via iPhone
    一晚上🐂🍺
        73
    54xavier   31 天前
    听了一下午的歌,来留个言,不错不错 github start 了
        74
    zpfhbyx   31 天前
    老哥,你 cxk-ball 是认真的么..
        75
    squallsdjl   30 天前
    话说。。。这些歌曲会遇到版权问题么。。,TAT
        76
    MagicBoy   30 天前
    楼主高中生?冒昧问一下楼主多大了
        77
    pbrluoji   30 天前
    听不到声音。。。。。
        78
    pbrluoji   30 天前
    桌面 chrome 77.0 版本听不到声音,edge 可以
        79
    JssDream   30 天前
    感觉有点东西,很有意思!!可以多加些图片,表情什么的!!
        80
    matsuijurina   30 天前 via Android
    "半天撸了一个站,我才初三请轻赞。" v 站传统怎么楼上好多人都不记得了
        81
    rekulas   30 天前
        82
    guanhui07   29 天前
    蛮好玩的
        83
    jemyzhang   28 天前
    赞一下, 挺有意思,听听大家平时都听什么歌
        84
    doveyoung   28 天前
    在线 16 人,正在播放好汉歌
        85
    dogepar   28 天前
    挺帅!
        86
    DavidG   25 天前
    点了潇洒走一回 潜伏的爱 大花轿 走四方等经典歌曲,感觉非常满意
        87
    cydian   25 天前 via Android
    你的 API 里面添加了 netease 的 cookie ? 我打开了看下是 mkplayer 但是为什么不能用 QQ ?
        88
    nazznazzz   24 天前
    挺好玩的,不过能按喜好分房间就好了
        89
    evilnull   5 天前
    @KasuganoSoras 证书过期了,而且启用了 HSTS,没法忽略
        90
    tmsdy0404   2 天前
    已经成功架在办公室内网。。。最后还是弄了个虚拟机装。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1085 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 30ms · UTC 18:26 · PVG 02:26 · LAX 10:26 · JFK 13:26
    ♥ Do have faith in what you're doing.