V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kowen
V2EX  ›  程序员

有没有大神知道,怎样实现卡拉 ok 唱歌打分的功能呢?

  •  
  •   kowen · 2019-06-24 11:50:44 +08:00 · 4349 次点击
    这是一个创建于 1978 天前的主题,其中的信息可能已经有所发展或是发生改变。

    类似全民 K 歌里,用户唱完后会打出一个分数。有没有音视频相关的大神,有没有什么 sdk 或开源库推荐呢?多谢!

    之前听说有个 k 歌云 traaax.com ,是否还有其他方案呢?

    annoy1309
        1
    annoy1309  
       2019-06-24 12:28:36 +08:00
    如果你是搞学术,等楼下回复
    如果是搞产品,根据人气加权,根据礼物加权,加点新用户权重啊,加点实名用户权重啊,简单判断唱了没,然后返回一个 90-99 的伪随机结果就行了,肯定比用 sdk 强
    客户唱的不行,你返回个 40 分,你这产品用户就全流失了
    lzj307077687
        2
    lzj307077687  
       2019-06-24 13:49:55 +08:00
    @annoy1309 #1 这个我认为看使用场景
    像卡拉 OK 这种同一批用户在同一段时间内重复使用该功能的情况下
    很容易就能察觉到返回的是随机数 这个功能我觉得要有出现低分的情况 不过可以人为的控制下限
    如果像是那种刷脸测相似度的小游戏,一般只会玩一次图个乐的话倒是可以给随机数
    jiejiss
        3
    jiejiss  
       2019-06-24 13:58:22 +08:00
    傅里叶
    moodasmood
        4
    moodasmood  
       2019-06-24 14:00:53 +08:00   ❤️ 1
    卧槽,我觉得一楼很有道理
    opengps
        5
    opengps  
       2019-06-24 16:36:58 +08:00
    我也觉得是随机数
    tankren
        6
    tankren  
       2019-06-24 16:39:36 +08:00
    @annoy1309 每唱一句都打分的咋整?
    jinliming2
        7
    jinliming2  
       2019-06-24 16:54:15 +08:00 via iPhone
    @annoy1309 如果全程都没唱,或者唱了一半累了后面一半没唱,你还给打高分的话,那肯定就是有问题了
    janxin
        8
    janxin  
       2019-06-24 16:58:35 +08:00
    1. 通过所述麦克采 集用户声音模拟信号;
    2. 将所述用户声音模拟信号转换成用户声音数字信号;
    3. 计算所述用户声音数字信号和原唱声音数字信号的差值;
    4. 根据所述差值计算分数;
    shawndev
        9
    shawndev  
       2019-06-24 16:59:15 +08:00   ❤️ 1
    李永乐有一期短视频讲傅立叶变换。从时域转换为频域,然后比较重合的百分比。
    niubee1
        10
    niubee1  
       2019-06-24 17:10:41 +08:00   ❤️ 1
    两个维度, 一个是音准,一个是节奏。 你唱的部分作为输入,通过一定的采样率获取声音的频率(音高)。歌曲根据曲谱按照同样的采样率生成基准数据。然后把两组数据一对比就能计算分数了, 比如按照每 500ms 采样一次,0 表示停顿(就是不唱),基准数据是 0000CCCCGGGGAAAAGGGG, 输入数据是 00CCCCGGGGAAA-A-GGGG, 那么一对比就发现, 抢拍了一秒, 然后有个音唱低了半度跑调了。那么简单的话, 只需要对比两组数字的相似率就行了,80%的相似率就是 80 分。复杂一点的算法就是分段后,进行对齐, 如果需要对齐就是抢拍了, 按照一个规则规定抢拍的或者拖拍的扣多少分一次, 然后再每一段算音准的相似度。
    annoy1309
        11
    annoy1309  
       2019-06-24 18:55:24 +08:00
    @jinliming2 你肯定没看仔细,我有一句 [简单判断用户是否唱歌了] 当然我这些都是嘴上说说,具体要看产品经理怎么要求了
    gaobh
        12
    gaobh  
       2019-06-24 19:00:36 +08:00
    商业产品和 1 楼差不多,学术就参考 10 楼
    masker
        13
    masker  
       2019-06-24 19:14:28 +08:00 via Android
    @annoy1309 没去过 KTV ?
    ETiV
        14
    ETiV  
       2019-06-24 19:17:26 +08:00 via iPhone
    #10 +1

    我们当时组里有懂音乐的扒谱,把人声扒出来
    然后就是麦克风输入跟乐谱 notes 对比了
    annoy1309
        15
    annoy1309  
       2019-06-24 19:46:01 +08:00
    @masker 没学过礼仪?
    masker
        16
    masker  
       2019-06-24 19:50:31 +08:00 via Android
    @annoy1309 哇塞,问你一句没去过 KTV 就是没礼貌了呀。那颗玻璃心哟
    niubee1
        17
    niubee1  
       2019-06-24 20:43:49 +08:00
    @gaobh 我是唱吧和全民 K 歌深度用户, 本身唱功也还 OK,属于业余麦霸级别,根据我的使用体验这两基本是符合我对算法的描述的, 因为唱功还行, 所以有的擅长的歌可以非常贴近原唱,能看到实时的音高和基准音高的对比, 节奏和基准的对比,甚至可以故意调整唱的习惯去贴近基准去拿高分。 因为不是专业的所以状态不稳定, 所以录的时候经常出状况, 这种时候 20,30 都有可能, 比如有的时候伴唱的基准数据不对, 你唱得和原唱很贴近也拿不到高分。 这个是能观察出来的, 并非是来个随机值解决问题的。
    murmur
        18
    murmur  
       2019-06-24 21:11:22 +08:00
    你是要严格打分还是要放水打分?
    首先你得有所有的谱子
    然后你要能识别用户的升降调 升降 key 唱歌是允许的
    最后要在正确范围内放水 一个新用户一唱就五六十分你就是垃圾算法
    murmur
        19
    murmur  
       2019-06-24 21:12:01 +08:00
    可以试试任天堂的 joysound 他是 midi 歌曲 精确扒谱
    akira
        20
    akira  
       2019-06-24 21:48:52 +08:00
    接受到唱歌的音频模拟信号,
    转换成数字信号,
    有数字了以后无非就是怎么和 标准 数字 做比较了呗
    996icu
        21
    996icu  
       2019-06-25 08:57:43 +08:00
    商业化的话分数就随机好了,客户大部分都是图个高兴,你识别完给人搞个 1 分,那不心态崩了
    MikeFeng
        22
    MikeFeng  
       2019-06-25 09:42:57 +08:00
    唱歌还行的朋友肯定知道,KTV 的评分并不是随机数
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5162 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 09:19 · PVG 17:19 · LAX 01:19 · JFK 04:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.