V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
factionstrue
V2EX  ›  程序员

一种归一化算法,解决使用音效时音乐声音忽大忽小的问题。

  •  
  •   factionstrue · 4 天前 via Android · 2213 次点击
  •   查看本主题需要登录

    以前使用酷狗音乐的时候,每次开启自定义音效,酷狗播放的声音就会忽大忽小。当时不懂什么原因,直到我自己开发软件才搞明白。

    酷狗使用的是对一组数据归一化的算法,这组数据不是仅是歌曲的一小部分,为避免和酷狗一样的问题,搞了对一首歌曲全部数据归一化的算法。

    算法详细描述地址

    我还有一个小问题,就是网易音乐之类的软件是用用的什么算法?为什么可以没有噪音?

    手机发表,有误请见谅

    第 1 条附言  ·  4 天前
    补充一下情况,软件地址: https://github.com/ZTFtrue/MonsterMusic

    调音效使用的 IIR 算法, 算法处理完成以后, PCM Data 有些数据绝对值会大于 1 ,一般框架文档会这么处理,

    ```
    if (floatBuffer[i] > 1.0f) {
    floatBuffer[i] = 1.0f;
    } else if (floatBuffer[i] < -1.0f) {
    floatBuffer[i] = -1.0f;
    }
    ```

    这种处理方式就会引起噪音。

    不同频率见响度差距太大,大于 1 的数字就特别多。

    和一首歌曲的整体响度关系不大,和其它歌曲没有关系,主要是用来消除噪音。
    15 条回复    2024-12-24 10:23:57 +08:00
    skallz
        1
    skallz  
       4 天前
    b 站有做,视频声音保持一致的音量,不知道怎么做的,可以搜一下 b 站有没有出技术文章,哈哈
    ccpp132
        2
    ccpp132  
       4 天前   ❤️ 1
    根据音频的响度给音频加 limiter 改变音量。平台搞这种搞的不好的话,对音频工作者来说是一种灾难
    linearxian
        3
    linearxian  
       4 天前
    本科毕业了吗
    factionstrue
        4
    factionstrue  
    OP
       4 天前 via Android
    @ccpp132 你这是什么算法?关键在调整音效后,有些数字会绝对值超过 1 ,有些软件都是直接变成正或者负 1 。

    @linearxian ???
    azure233
        5
    azure233  
       4 天前
    搞音乐的应该懂 现在有各种不同的效果器来处理声音 压缩器 限制器等等 最重要的是看平均响度而不是峰值响度 所以单纯的归一化并不能平衡声音响度
    SuancaiFish
        6
    SuancaiFish  
       4 天前
    可以用 upwards/downwards compressor ,但是,应该考虑不应该是,平衡两首歌之间的响度差别么,一首歌,他的响度峰值都是制作人设计好的,和情绪起伏一样,也没必要改动
    ccpp132
        7
    ccpp132  
       4 天前
    @factionstrue @factionstrue 音频处理是一个水很深的领域,发展了很多年了。国外一般会找有经验的工程师来参与相关算法的设计,音频质量的控制比较复杂,还要考虑人耳听觉的特性,加上很多人都听不太出来好坏。国内也不太重视这些。
    你感兴趣的话可以在 b 站搜[捣鼓音符的小胖] 他做了一系列关于控制音频响度的科普,我感觉对非相关专业人士来说足够全面了。
    fgodt
        8
    fgodt  
       4 天前   ❤️ 1
    简单来说所有音频处理都有一个类似 agc 的模块,每个平台将响度控制在一个合适的值(类似-3db ),超过了 1 的值,在音频领域可以用很多方式来解决 1.动态压缩可以参考 apple 的 dynamics processor ,2. limiter
    linearxian
        9
    linearxian  
       4 天前
    @factionstrue 你要是想平衡响度,那就去翻翻数字信号处理的书,或者看看论文,比如基于心理响度,做个贝叶斯优化。不要在这里胡乱发帖,以为做个基于阈值规则的除以电平最大值,就跑来发帖,还硬要写英语,最后还沾沾自喜“Nevertheless, from a user experience perspective, I think this remains the best solution available.”,很难不想让人不来怼你。另外,IIR 是用来做 EQ 的,不是用来调音量的。
    factionstrue
        10
    factionstrue  
    OP
       4 天前
    @linearxian 我就是做 EQ 的啊,只不过归一化算法解决了噪音问题,会带来声音响度变化的问题,我设计的算法解决了这个声音响度变化的问题。


    `I chose to use an IIR filter to implement the audio equalizer`

    我现在的问题是:不使用归一化算法如何解决噪音?
    azure233
        11
    azure233  
       4 天前   ❤️ 1
    看了你的更新 这部分逻辑恰恰就是削波失真 hardclip 的原理 你说的会引起噪音其实就是因为波形超出了信号范围 音频被削波了 所以通常都会引入 limiter 来防止出现削波的情况 ![hardclip]( https://forum.renoise.com/uploads/default/original/2X/6/67da09029747bc86340de35d71bb6f6074288abb.png)
    factionstrue
        12
    factionstrue  
    OP
       4 天前
    @azure233 好像就这个原因,我明天看看。
    kp1nz
        13
    kp1nz  
       4 天前
    不妨看一下 Sound Lock
    https://www.3appes.com/sound-lock/
    lijiangang886
        14
    lijiangang886  
       4 天前
    @skallz #1 原文:“b 站有做,视频声音保持一致的音量,不知道怎么做的,可以搜一下 b 站有没有出技术文章,哈哈”
    ======
    回复:看了一眼我这里是默认开启的,然而似乎并没有多显著的效果,相当多收音效果垃圾的程序员自录技术视频正常音量该听不清的还是听不清 :P
    ck65
        15
    ck65  
       3 天前 via iPhone
    你是不是在找:母带技术。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2221 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 01:00 · PVG 09:00 · LAX 17:00 · JFK 20:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.