Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >音量归一化时的动态范围压缩

音量归一化时的动态范围压缩
EN

Stack Overflow用户
提问于 2012-09-30 22:49:40
回答 2查看 2.7K关注 0票数 3

我已经问过audio volume normalization了。在大多数方法中(例如,我最感兴趣的ReplayGain ),我可能会得到超过PCM限制的峰值(也可以读取here)。

简单的裁剪可能是我能做的最糟糕的事情了。As Wikipedia suggests,我应该做一些形式的dynamic range compression

我说的是我对每个单独的PCM样本值应用的函数。在另一个similar question上,one answer建议我这样做是不够的,或者不是我应该做的事情。然而,我并不是真的理解这一点,因为我仍然需要处理剪辑的情况。答案是否建议一次对多个样本进行范围压缩,并对每个样本进行简单的硬裁剪?

抛开这一点不谈,维基百科文章中讨论的功能似乎并不是我想要的(在许多情况下,我最终还是会有裁剪的情况)。我在考虑使用像tanh这样的东西。这是个坏主意吗?这将略微减少音量,但保证我不会得到任何剪切。

我的应用程序是一个通用的音乐播放器。我正在寻找一种最适合每个人的解决方案,这样我就可以随时打开它,而用户很可能不想关闭它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-30 23:14:30

使用任何瞬时动态范围处理(例如限幅或tanh非线性)将引入可听失真。把一个正弦波转换成一个瞬时非线性函数,你就不再有正弦波了。虽然对某些音频应用程序很有用,但听起来您并不想要这些人工制品。

归一化不会影响波形的动态(根据最小/最大比率)。归一化涉及波形与恒定标量值的元素相乘,以确保没有样本超过最大值。这个过程只能离线完成,因为你需要在处理之前分析整个信号。如果您的波形包含任何强烈的瞬变,归一化也不是一个好主意。您的整个信号将通过瞬时峰值除以限幅阈值的比率进行衰减。

如果你只是想保护输出不被削波,你最好使用侧链式压缩机。它的一种具体形式是限制器(超过阈值的无限压缩比,攻击时间为零)。侧链压缩器计算信号的平滑能量包络,然后根据该函数应用变化的增益。它们不是即时的,所以你可以减少你从你提到的函数中得到的声音失真。限制器可以具有瞬时攻击以防止削波,但您允许释放时间,以便限制器在随后的波形峰值时保持衰减,随后的波形只是调低,因此没有失真。在强烈的声音之后,限制器恢复。

如果波形中有许多高强度的峰值,则可以从这种类型的处理中获得泵浦类型的声音。如果这变得有问题,那么您可以移动到下一个级别,并在子波段内进行动态处理。这样,只有频谱中有问题的部分会被衰减,其余的声音不会受到影响。

票数 3
EN

Stack Overflow用户

发布于 2012-10-01 01:52:14

一般的解决方案是归一化到明显低于1的某个增益水平,使得非常少的歌曲需要增加增益。换句话说,大多数时候你会降低信号的音量而不是增加。尝试各种不同风格的歌曲,找出这个层次是什么。

现在,偶尔,你仍然会遇到一首歌曲,它需要足够的增益,在某种程度上,它会被剪辑。你有两个选择: 1.不要增加那么多的收益。这首歌听起来会安静一点。这就是生活。(这是一种常见的方法),或者2.应用少量的动态范围压缩和/或限制。当然,你也可以做一些组合1和2。我相信iTunes使用了1和2的组合,但他们在#2上非常努力,他们应用的很少。

你的建议,使用像tanh这样的函数,在逐个样本的基础上,将导致声音失真。对于一个通用的音乐播放器,你不会想这样做的。这是那种在吉他放大器模拟器中做的事情,使他们听起来“肮脏”和“垃圾”。它可能在摇滚乐、流行乐或其他失真严重的现代音乐中听不到,但在仔细录制的合唱、爵士或小提琴独奏音乐中,人们会感到不安。这与tanh的选择无关,顺便说一句,任何非线性函数都会产生失真。

动态范围压缩使用随时间应用于信号的信封:http://en.wikipedia.org/wiki/Dynamic_range_compression这很难做到正确,而且您永远无法创建真正“透明”的压缩器。限制器可以被认为是压气机的极端版本,它(至少在理论上)可以防止信号超过一定的电平。数字“先行”限制器可以在没有明显裁剪的情况下做到这一点。如果使用得当,它是相当透明的。

如果您采用这种方法,请确保可以关闭此功能,因为无论您认为它有多透明,都会有人听到并不喜欢它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12665817

复制
相关文章
oracle:db-link使用
二个oracle instance,如果需要在一个instance上,直接查询另一个instance上的数据,就要用到db-link 创建: create public database link 链接名 connect to 用户名 identified by 密码 using '(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 服务器IP)(PORT = 1521)) (CONNECT_DATA = (S
菩提树下的杨过
2018/01/19
5310
如何使用ELK Stack分析Oracle DB日志
随着业务的发展,服务越来越多,相应地,日志的种类和数量也越来越多。一般地,我们会用grep、awk,或者编写脚本进行日志分析。对于多个服务构成的系统,需要人为把这些日志分析工作有机地结合起来。在业务系统组件多而组件间关联复杂的情况下,这种分析方法效率十分低下,一个日志分析平台极为必要。从日志的整合和展示看,日志分析平台主要由两部分构成,一是日志整合系统,负责把各组件日志集中并索引起来,以方便快速的搜索和分析,这可以用ELK开源软件进行搭建;二是日志分析展示系统,对各类日志提供尽可能多的自动化分析和评估报表,这需要辨识并固化尽可能多的日志分析的行为模式。这些都基于对ELK的认识和对业务系统各组件日志的理解。
王录华
2019/07/31
2.7K0
如何使用ELK Stack分析Oracle DB日志
【DB笔试面试519】在Oracle中,什么是Oracle Directory?
Oracle Directory(目录)可以让用户在Oracle数据库中灵活地对文件进行读写操作,极大地提高了Oracle的易用性和可扩展性。其语法如下所示:
AiDBA宝典
2019/09/29
8730
【DB笔试面试860】在Oracle中,如何判断Oracle是32位还是64位?
由于Oracle分为客户端和服务器端,所以,查看Oracle是32位还是64位也分为服务器端和客户端2个部分。
AiDBA宝典
2020/08/20
1.2K0
【DB笔试面试860】在Oracle中,如何判断Oracle是32位还是64位?
使用KVM克隆用于Oracle DB的主机
首先,通过现有的vm1「在上篇文章 使用KVM创建OEL虚拟机 已创建」克隆出一个vm,名字叫做db1,然后修改一些配置,使其更适用于Oracle DB的主机。
Alfred Zhao
2023/01/08
7370
和我从头学SQL Server Integration Services
本人一个IT屌丝男,一直在ITPRO的圈子里面混着,从来不是一个程序猿,水平就是开开关关windows的水平。昏昏然,成了一个油腻的大叔,但我的内心和业务水平还是停留在26岁啊! 周围的同事好友一个个都一日千里的学习进步着,实在看不下去自己了,决定整理整理,给自己,给儿子摆一个努力学习的POSE出来。
盆盆
2019/04/24
3.3K0
和我从头学SQL Server Integration Services
Oracle|创建 DB Link
dblink主要用于不同服务器数据库之间的关联操作。比如:想在A服务器之间从B服务器某表中取得数据,更新到A服务器某表中。
Java小技巧
2022/05/23
1.2K0
Oracle|创建 DB Link
Oracle DB Time 解读
Oracle DB Time是Oracle数据库在时间维度上剖析性能的一个重要指标,通过逐级分解该指标,定位到浪费资源或者资源争用的首要事件上,从而通过减少等待以及最小化每个请求的使用资源来达到优化的目的。本文主要讲述Oracle DB Time,以及给出示例演示Oracle DB Time。
Leshami
2018/09/20
1.3K0
Oracle DB Time 解读
【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?
【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?
AiDBA宝典
2020/08/27
2.6K0
【DB笔试面试863】在Oracle中,如何让Oracle DB、监听和oem开机启动?
【DB笔试面试533】在Oracle中,如何在Windows下查看Oracle的进程?
由于Windows采用的是单进程多线程的模式,因此,Oracle一旦启动,在任务管理器里只能看到一个ORACLE.EXE的进程。如果想要查看Oracle的各个后台进程(Linux系统下的称谓),例如PMON、SMON、DBWn、LGWR、CKPT等,那么可以通过如下几个步骤实现:
AiDBA宝典
2019/09/29
1.5K0
【DB笔试面试533】在Oracle中,如何在Windows下查看Oracle的进程?
【DB笔试面试695】在Oracle中,什么是Oracle RDA(Remote Diagnostic Agent)工具?
在Oracle中,什么是Oracle RDA(Remote Diagnostic Agent)工具?
AiDBA宝典
2019/11/28
5060
【DB笔试面试743】在Oracle中,如果$ORACLE_HOME/bin/oracle文件的属主或权限出了问题,该如何修复呢
在Oracle中,如果oracle用户下的$ORACLE_HOME/bin/oracle文件的属主或权限出了问题,那么该如何修复呢?
AiDBA宝典
2020/02/24
1.6K0
【DB笔试面试562】在Oracle中,如何监控索引的使用状况?
在开发应用程序时,可能会建立很多索引,那么这些索引的使用到底怎么样,是否有些索引一直都没有用到过,在这种情况下就需要对这些索引进行监控,以便确定它们的使用情况,并为是否可以清除它们给出依据。
AiDBA宝典
2019/09/29
1.3K0
【DB笔试面试562】在Oracle中,如何监控索引的使用状况?
通过Oracle DB了解MySQL
Oracle数据库是业界的翘楚,各行各业拥有大量的Oracle DB的DBA,本文尝试通过将Oracle与MySQL数据库的架构、安全、模式对象、数据类型及数据存储进行对比,以方便熟悉Oracle数据库的人可以快速了解MySQL。
MySQLSE
2020/09/28
1.9K0
通过Oracle DB了解MySQL
Oracle:创建db_link
global_name也就是数据库的全局数据库名,可已使用select * from global_name;查询:
williamwong
2018/07/24
5320
Oracle:创建db_link
【DB笔试面试675】在Oracle中,如何快速复制表或插入数据?
快速插入数据可以指定APPEND提示,需要注意的是,在NOARCHIVELOG模式下,默认用了APPEND就是NOLOGGING模式的。在ARCHIVELOG下,需要把表设置程NOLOGGING模式。如:
AiDBA宝典
2019/11/05
1.2K0
【DB笔试面试725】在Oracle中,什么是GPnP?
网格即插即用(Grid Plug and Play,GPnP)是Oracle 11gR2 RAC提供的新组件,该组件的功能由gpnpd.bin守护进程实现。GPnP可以提供一个动态的GI环境,能随着负载的增加而动态改变GI环境。GPnP能非常容易地添加、替换或者移除集群中的节点,就像电源插头一样即插即用。
AiDBA宝典
2020/01/20
1.7K0
【DB笔试面试817】在Oracle中,什么是ASH?
ASH(Active Session History,活动会话历史信息)、AWR(Automatic Workload Repository,自动负载信息库)、ADDM(Automatic Database Diagnostic Monitor,数据库自动诊断监视工具)是Oracle性能调整的三把利剑,需要深入地了解,但是面试一般都问得比较简单,主要问到的是AWR。
AiDBA宝典
2020/06/17
1.4K0
【DB笔试面试721】在Oracle中,什么是OLR?
OCR是用于保存CRSD所管理的资源的注册表,但是在CRSD启动之前集群还有很多初始化资源(例如ASM实例)需要启动,所以,只有OCR是不够的。因此,Oracle在11gR2版本中推出了另一种注册表OLR(Oracle Local Registry,Oracle本地注册表)。OLR类似于Oracle集群注册表,但是OLR只存储与本地节点有关的信息。OLR不与集群中的其它节点共享。OLR存储了集群启动初期ohasd(Oracle High Availability Service)使用的重要环境,如Oracle集群件的版本、配置等。如果OLR丢失或损坏,那么将会导致ohasd进程启动失败。所以,OLR的主要作用就是为ohasd守护进程提供集群的配置信息和初始化资源的定义信息。
AiDBA宝典
2020/01/20
1.1K0
【DB笔试面试721】在Oracle中,什么是OLR?
【DB笔试面试839】在Oracle中,如何限定特定IP访问数据库?
② 当触发的对象类型为DATABASE的时候,登录用户不能拥有“ADMINISTER DATABASE TRIGGER”的系统权限;当触发的对象类型为“用户名.SCHEMA”的时候,登录用户不能拥有“ALTER ANY TIGGER”的系统权限。否则,这些用户还是会正常登录到数据库,只是将相应的报错信息写入到告警日志中。所以,拥有IMP_FULL_DATABASE和DBA角色的用户以及SYS和EXFSYS用户将不能通过这种方式限制登录。
AiDBA宝典
2020/07/16
1.5K0

相似问题

多个顺序api调用RxJs

29

角解析Rxjs映射和订阅多个APIs

11

在RxJS中组合多个http调用

123

使用rxjs shareReplay防止多个api调用

17

基于多个依赖API调用的RXJS

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文