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

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

  •  
  •   factionstrue · 15 小时 28 分钟前 via Android · 1248 次点击

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

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

    算法详细描述地址

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

    手机发表,有误请见谅

    第 1 条附言  ·  8 小时 27 分钟前
    补充一下情况,软件地址: 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 的数字就特别多。

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

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


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

    我现在的问题是:不使用归一化算法如何解决噪音?
    azure233
        11
    azure233  
       6 小时 0 分钟前   ❤️ 1
    看了你的更新 这部分逻辑恰恰就是削波失真 hardclip 的原理 你说的会引起噪音其实就是因为波形超出了信号范围 音频被削波了 所以通常都会引入 limiter 来防止出现削波的情况 ![hardclip]( https://forum.renoise.com/uploads/default/original/2X/6/67da09029747bc86340de35d71bb6f6074288abb.png)
    factionstrue
        12
    factionstrue  
    OP
       5 小时 59 分钟前
    @azure233 好像就这个原因,我明天看看。
    kp1nz
        13
    kp1nz  
       3 小时 13 分钟前
    不妨看一下 Sound Lock
    https://www.3appes.com/sound-lock/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1050 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 19:36 · PVG 03:36 · LAX 11:36 · JFK 14:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.